CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ] [ Datenschutzerklärung ]

CP/M-Forum » Computer » EPROM bei Adresse 0000 hex ? » Threadansicht

Autor Thread - Seiten: -1-
000
14.05.2018, 21:12 Uhr
zilog



ich ueberlege mir, einen Z80 Computer zu bauen.

Da bietet sich an, an Adresse 0000 hex ein EPROM mit einem bootstrap zu plazieren, da der Z80 nach einem Reset bei Adresse 0000 hex startet.

Allerdings habe ich mir sagen lassen, dass CP/M an Adresse 0000 hex freies RAM haben moechte.

wie wird diese Sache in der Regel geloest?

Ein EPROM mit bootstrap an Adresse 0000 hex und dieses EPROM nachher abschalten?
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
001
16.05.2018, 09:51 Uhr
mtx500




Zitat:
Allerdings habe ich mir sagen lassen, dass CP/M an Adresse 0000 hex freies RAM haben moechte.

Richtig.


Zitat:
wie wird diese Sache in der Regel geloest?

Es gab da unterschiedliche Ansätze.

1. Ziemlich einfach:
Das EPROM ist im Adressraum zweimal eingeblendet, einmal unten und einmal oben. Als erstes erfolgt ein Sprung nach oben, dann folgt eine OUT-Befehl, der das untere Abbild des EPROMs aus dem Adressraum entfernt und dort RAM hinlegt.

2. Oder:
EPROM ist nach dem Reset unten eingeblendet, der Rest des Adressraums ist mit RAM belegt. Am Beginn des EPROMs steht eine Routine, die den Inhalt des EPROMs in den hohen Adressbereich, also ins RAM, umkopiert und dann dorthin springt. Dort steht dann als eine der ersten Anweisungen ein OUT-Befehl, der das EPROM aus dem Adressraum entfernt und dort RAM hinlegt.

3. Komplizierter:
Wie 1, aber statt eines OUT-Befehls erfolgt die Umschaltung automatisch, indem nach dem Reset durch eine Schaltung die Speicher-Zugriffe mitgezählt werden und bei Erreichen einer bestimmten Zahl das EPROM unten weggeblendet wird. Die Zahl muss halt so hoch sein, dass der Sprung nach oben erfolgt ist.
Eine andere Variante davon ist, dass nicht die Adress-Dekodierung verändert wird sondern die Adresse selbst. Also der Prozessor greift zwar auf Adresse 0000 zu, aber die wird für eine bestimmte Anzahl von Zyklen auf z.B. E000 umgebogen. Kommt aber auf das Gleiche hinaus.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
002
18.05.2018, 03:48 Uhr
zilog



UND der out Befehl schaltet das EPROM ueber den chip enable Eingang ab?
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
003
19.05.2018, 19:01 Uhr
mtx500



Ja, und im Gegenzug das RAM ein. Heute macht man das vielleicht über ein kleines CPLD/FPGA, davor hat man es mit PAL oder GAL gemacht, und ganz früher hat man das mit einer handvoll 74LSxxx (oder etwas später 74HCTxxs) Chips gelöst.

Z.B. eignet sich ein 74LS138 zum Ausdekodieren von bis zu acht IO-Ports oder acht Speicherblöcken. Ein 74LS273 oder 74LS374 D-Flipflop eignet sich gut für ein 8-Bit Output Port. Ansonsten gibt es halt die logischen Gatter NAND 74LS00, NOT 74LS04, AND 74LS08 und OR 74LS32.

Da Memory Request des Z80 Low-aktiv ist genauso wie auch die Chipe Enable Eingänge des EPROMs und des RAMs, führt man MREQ an zwei Oder-Gatter, deren Ausgänge dann an die beiden Chip Enables. Nun kann man mit den freien Eingängen der Oder-Gatter steuern, ob man RAM oder EPROM aktiv haben will. Da man immer genau eines von beiden aktiv haben will, verbindet man die beiden freien Eingänge mit einem NOT (bzw. einem NAND oder NOR wo man beide Eingänge miteinander verbindet) und braucht dann nur noch ein Steuersignal.
Dazu verknüpft man die Adressleitungen A12-A15 mit OR. Dieses Signal ist jetzt genau dann 1 wenn wir eine Adresse oberhalb von 8 KB haben, also immer RAM haben wollen. Dieses Signal verknüpfen wir nun nochmal mit einem OR, dessen anderer Eingang ein Ausgangsbit eines Ports ist.Setzt man nun das Port-Bit auf 1, wird immer nur RAM adressiert. Setzt man es auf 0, wird im Bereich von 0-8 KB das EPROM adressiert. Das lässt sich hier im Text viel schwieriger beschreiben, als in einer Skizze. Ich versuche mal ASCII-Art:


Quellcode:
.
      +-.
A15 --|OR\__
A14 --|  /  |  +-.
      +-´   `--|OR\__
            .--|  /  | Ist 1 wenn
      +-.   |  +-´   | Adresse > 8KB
A13 --|OR\__|        |
A12 --|  /           |
      +-´            |
                     |
                     |
Port-Adresse         |
       |             |  +-.
     +----+          `--|OR\__
D0 --| D- |-------------|  /  |
D1 --|Flip|             +-´   | ist 1 wenn Adresse >8KB
usw.                          | oder Bit 0 des Ports 1 ist
D7 --|Flop|                   | (d.h. EPROM ausgeblendet ist)
     +----+                   |
       |                      |
     Reset                    |     +-.
                              o-----|OR\__ CE des EPROMs
MREQ --------------------o----|-----|  /
                         |  __|__   +-´
                         |  \NOT/
                         |   \_/
                         |    |     +-.
                         |    +-----|OR\__ CE des RAMs
                         +----------|  /
                                    +-´


Dieser Post wurde am 19.05.2018 um 19:03 Uhr von mtx500 editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
004
20.05.2018, 21:19 Uhr
zilog



Okay. Verstanden.

Vielen Dank!

Jetzt noch etwas:

ich habe schon viel ueber den 74LS138 gehoert, und dessen Verwendung im NDR Klein Computer.

Allerdings bin ich aus dem Datenblatt mit der Bezeichnung "Decoder" noch nicht schlau geworden, wie ich mit dem Teil Adressen erzeugen kann.

Also ich habe jetzt ein 2716 bei Adresse 8000 hex und moechte, dass sich das 2716 angesprochen fuehlt wenn auf dem Adressbus 1000 0000 0000 0000 anliegen.

wie mache ich das mit einem 74LS138?
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
005
22.05.2018, 10:35 Uhr
mtx500



Sowas würdest Du nur dann mit einem 74LS138 machen, wenn es mehr als nur dieses eine EPROM gibt, was Du selektieren möchtest. Mit nur einem einzigen Ziel ist das nicht so der Bringer.

Eine typische Schaltung mit dem 74LS138 ist die Port-Dekodierung (die ich in meinem vorherigen Bild weggelassen hatte).

Quellcode:
.
       +-.
IORQ --|N \
       |O  o-+
  A7 --|R /  |   74x138
       +-´   |  +------+
       +-.   +--|E3    |
  A6 --|OR\_    |    O7|-- Port 07h enable
  A5 --|  / `---|E2  O6|-- Port 06h enable
       +-´      |    O5|-- Port 07h enable
       +-.      |    O4|-- Port 04h enable
  A4 --|OR\_,---|E1  O3|-- Port 03h enable
  A3 --|  /     |    O2|-- Port 02h enable
       +-´ A2 --|A2  O1|-- Port 01h enable
           A1 --|A1  O0|-- Port 00h enable
           A0 --|A0    |
                +------+

Die Port enable-Ausgänge sind low-active.
Wenn man nicht 8 enable-Ausgänge derselben Sorte braucht, kann man auch ein 74LS139 einsetzen. Der hat zwei Decoder mit 2 Eingänge zu 4 Ausgängen. Dann kann man z.B. einen Decode an MREQ und einen Decoder an IORQ hängen und hat jeweils vier Bereiche aus beiden Adressräumen dekodiert.
Für dein Beispiel mit dem 2716 willst Du ja den Zugriff nicht nur bei einer einzigen Adresse, sondern in einem Bereich von 2048 Byte. Also wirst Du die A0-A10 direkt an den 2716 führen, und Q0-Q7 an den Datenbus verbinden. Output enable hängst Du an RD (Read). Und an den CE/PRG muss nun eine Verknüpfung von MREQ und den übrigen Adressleitungen hin. Das könnte z.B. mit einem 74LS27 3 x 3 NOR passieren (von dem man eines als NOT verwendet):

Quellcode:
.
MREQ -------+  +-.
      +--.  +--|N \
A15 --|NOT>----|O  o--+
      +--´  +--|R /   |  +--.
A14 --------+  +-´    +--|NA \__ CE/PRG
               +-.    +--|ND /
A13 -----------|N \   |  +--´
A12 -----------|O  o--+
A11 -----------|R /
               +-´

Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: -1-     [ Computer ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek