Mikro-EPROM-Karte: 8-Bit-EPROM am 16-Bit-Bus des ST

Um am 16 Bit breiten ROM-Port des Atari ST EPROMs anzuschließen, benötigte man bisher mindestens zwei dieser 8 Bit breiten Speicher. Wie es mit einem raffinierten Trick möglich ist, doch mit einem EPROM auszukommen und so Geld und Nerven zu sparen, zeigt dieser Artikel. Sie finden hier eine Bauanleitung für die kleinste 16-Bit-EPROM-Karte der Welt, die zusätzlich noch über vier softwaremäßig abfragbare DIP-Schalter verfügt.

16 Bit, bitte!

Beim Atari ST handelt es sich um einen 16-Bit-Computer. Das bedeutet, daß der Mikroprozessor (CPU 68000) immer, wenn er Daten aus dem Speicher liest oder schreibt, auf 16 Daten-Bits (zwei Bytes) gleichzeitig zugreift. Beim Schreib-Lese-Speicher sind daher in jeder RAM-Bank 16 Speicherbausteine parallel geschaltet. Der Prozessor erhält aus jedem Baustein ein Daten-Bit, wobei er glaubt, einen 16 Bit breiten Speicher auszulesen.

Der Anschluß von EPROMs am ROM-Port des Atari ST erfolgt bei herkömmlichen EPROM-Karten ähnlich. Gebräuchliche EPROMs verfügen über 8 Datenleitungen, und daher ist es nötig, zwei EPROMs parallelzuschalten, die jeweils die Hälfte der Daten enthalten. Beim Brennen der EPROMs werden die Daten so verteilt, daß EPROM 1 die Hi Bytes, also die oberen 8 Daten-Bits jedes 16-Bit-Wortes, enthält, während EPROM 2 nur mit den Lo-Bytes gefüllt wird.

Auf der EPROM-Karte sind dabei die 8 Datenleitungen von EPROM 1 mit den Datenbusleitungen D8...D15 des Systems verbunden; die von EPROM 2 sind an D0...D7 des Systemdatenbusses angeschlossen. Bei einem Lesezugriff erhält der Prozessor somit auf D8...D15 das Hi-Byte aus EPROM 1 und auf D0...D7 das Lo-Byte aus EPROM 2, zusammen also ein 16 Bit breites Datenwort, und er merkt gar nicht, daß diese Daten aus zwei EPROMs stammen.

Dieses Verfahren ist zwar einfach, doch wer häufig EPROMs brennt, kennt die Nachteile. Erstens müssen immer zwei EPROMs gelöscht, gebrannt und umgesteckt werden, und zweitens ist das Verfahren teuer. So benötigt man z.B. für 32kByte Daten nicht ein 32K-EPROM, sondern zwei 16k-EPROMs, und das geht ins Geld. Wird nur ein EPROM in dieser Weise angeschlossen, kann der Prozessor pro Lesezugriff nur 8 Daten-Bits lesen, und er wird die Daten-Bytes aus dem EPROM mit jeweils 1 Byte Abstand im Adreßraum vorfinden. Es scheint also kein Weg an einem zweiten EPROM vorbeizuführen.

Daten immer der Reihe nach

Eines Tages fragte mich ein Freund, ob es nicht doch irgendwie gehen könnte. „Kann der Prozessor die Hi- und Lo-Bytes nicht [nach]einander aus dem EPROM lesen?“ fragte er mich, und ich sagte nein, niemals. So eine dumme Frage konnte nur von jemandem kommen, der nichts vom Bus-Timing eines Rechners versteht. Zum Glück verstand ich auch nichts davon, und daher habe ich es ausprobiert.

Das Konzept, wie die Datenleitungen gemultiplext werden, ist vereinfacht in Bild 2 dargestellt. Jedesmal, wenn der Prozessor ein Datenwort aus dem EPROM-Bereich lesen will, muß eine Trickschaltung aktiv werden. Diese muß zunächst das Hi-Byte aus dem EPROM lesen (Phase 1). Nach einer kurzen Zeit, die das EPROM zum Bereitstellen der Daten benötigt, muß das Hi-Byte in einem 8 Bit breiten Speicher zwischengespeichert werden (Phase 2a). Danach kann das EPROM angewiesen werden, das Lo-Byte an den Datenbus zu legen (Phase 2b), und dann kann der Prozessor die Daten auslesen. Er erhält dabei das Lo-Byte direkt vom EPROM, während er das Hi-Byte aus dem Zwischenspeicher bekommt. Auf diese Weise kann er seine 16 Daten-Bits lesen, und weiß nichts davon, welch chaotische Zustände zwischenzeitlich geherrscht haben.

Bild 2: Hi und Lo-Byte werden nacheinander aus dem EPROM gelesen, der Prozessor erhält sie aber parallel.
Bild 3: Im Schaltplan sieht man, wie die acht zusätzlichen Datenleitungen gewonnen werden.

Als Zwischenspeicher dient in der Schaltung (Bild 3) ein 8fach-D-Flipflop des Typs 74LS374. Er verfügt über acht Dateneingänge DN und acht Ausgänge QN'. Wenn der Zustand seiner Steuerleitung T↑ von 0 nach 1 wechselt, also im Moment der steigenden Flanke, werden die Daten, die in diesem Augenblick an den Eingängen anliegen, intern gespeichert. Eine zweite Steuerleitung. Output Enable OE, steuert die Ausgänge. Nur. wenn OE=0 ist, werden die gespeicherten Daten tatsächlich an den Ausgängen zur Verfügung gestellt. Anderenfalls sind die Ausgänge hochohmig, also quasi nicht angeschlossen, und so beeinflussen sie den Systemdatenbus nicht.

Ein zweites IC ist erforderlich, um die Zeit eines Lesezugriffs in zwei Phasen aufzuteilen. um erst das Hi-Byte und dann das Lo-Byte lesen zu können. Verwendet wird ein Monoflop 74LS123. Sein Ausgang Q ist normalerweise 1. Wechselt jedoch der Zustand des Eingangs A↓ von 1 nach 0, liefen der Ausgang Q für eine gewisse Zeit einen 0-Puls. Die Dauer des 0-Pulses wird über einen externen Widerstand und einen Kondensator festgelegt. Es ist größenordnungsmäßig TLOW&aymp;0,7RC; in unserem Fall ist TLOW≈130ns. Bei der fallenden Flanke an A↓ (oder wenigstens später) wechselt Q also auf 0,130ns später wieder auf 1. Während Q=0 ist (Phase 1), wird dabei das Hi-Byte aus dem EPROM gelesen; wenn anschließend 0=1 ist (Phase 2), wird das Lo-Byte gelesen.

Das genaue Zusammenspiel der Elemente läßt sich am besten an einem Timing-Diagramm dieser EPROM-Karte erklären. Der zeitliche Verlauf der Bussignale für einen Lesezugriff auf die Mikro-EPROM-Karte ist in einem separaten Textkasten dargestellt und erläutert.

Viele Vielbeiner

Auf der Mikro-EPROM-Karte können Speicher der Typen 2764 bis 2751 ^betrieben werden. Mit zwei EPROMs im ROM4-Bereich waren maximal 64kByte zu erreichen (227256), und das ist auch mit dieser Karte möglich (127512). Eine Ausnutzung der zweiten EPROM-Bank im ROM3 Bereich hingegen ist mit dieser Karte nicht möglich, während sich auf herkömmliche Weise mit vier 32K-EPROMs eine Speichergröße von 128kByte erreichen ließ.

Da die Pins 1 und 27 bei manchen EPROMs die oberen Adreßleitungen sind, bei anderen aber auf +5V liegen müssen, muß der EPROM-Typ über DIP-Schalter eingestellt werden. Es ist der rechte Satz von vier DIP-Schaltern, markiert mit B.

DIP-Schalter B

Typ Größe 1 2 3 4
27(C)64 8KB - ON - ON
27(C)128 16KB - ON - ON
27(C)256 32KB ON - - ON
27(C)512 64KB ON - ON -

Der EPROM-Typ wird über vier DIP-Schalter eingestellt

Man beachte, daß von den DIP-Schaltern B niemals zwei benachbarte Schalter auf ON stehen dürfen. Andernfalls kann ein Kurzschluß zwischen Adreßbusleitungen und +5V entstehen.

Da bei der Mikro-EPROM-Karte innerhalb einer Zeit von 300ns zwei Lesezugriffe erfolgen, sollten die EPROMs eine Zugriffszeit von höchstens 150ns besitzen. Diese Zeiten werden fast ausschließlich von EPROMs in der CMOS-Version (27Cxxx) erreicht, die zum Teil schon preiswerter als die Standardtypen sind.

Beim Brennen des EPROMs werden die Daten hintereinander ins EPROM geschrieben. Eine Aufteilung nach geraden und ungeraden Adressen (Mi- und Lo-Bytes) ist nicht erforderlich. Trotzdem verhält sich die Mikro-EPROM Karte exakt wie eine „echte“ 16-Bit-EPROM-Karte.

Die Karte wurde auf den Atari-Modellen 260ST, 520ST, 1040ST, Mega ST und auf dem neuen 1040STE erfolgreich getestet und - man staune - sie läuft sogar auf dem neuen Atari TT030 einwandfrei.

Bild 8a: Das Lese-Timing einer 16-Bit-EPROM-karte am ROM-Port
Bild 8b: Das Lese-Timing der Mikro-EPROM-karte
# Das Lese-Timing einer 16-Bit EPROM-Karte am ROM-Port

Die Vorgänge, die im einzelnen ablaufen, wenn der Prozessor auf den Speicher zugreift, lassen sich am besten an einem Timing-Diagramm veranschaulichen. (Bereits vor 2000 Jahren verwendeten chinesische Computerexperten Tai-Ming-Diagramme zur Beschreibung von Speicherzugriffen.) Betrachtet wird zunächst eine herkömmliche EPROM -Karte mit zwei EPROMs am ROM-Port. In Bild 8a sind für einen Lesezugriff auf die EPROMs die Zustände von Daten-, Adreß- und Steuerleitungen in Abhängigkeit von der Zeit dargestellt. Aufgetragen sind für Steuerleitungen die Logik-Pegel; oben 1, unten 0. Für Daten- und Adreßleitungen ist aufgetragen, ob sie hochohmig sind oder ob sie definierte Zustände haben, also Daten an ihnen anliegen.

Die Pfeile deuten dabei an, welche Zustandsänderungen andere Veränderungen nach sich ziehen, jeweils mit einer geringen zeitlichen Verzögerung.

Beim dargestellten Lesezugriff setzt der Prozessor zunächst die Adreßleitungen auf das richtige Bit-Muster, um dem Rest des Systems die Adresse der auszulesenden Speicherstelle mitzuteilen. Dann zieht er die Leitungen ODS (Upper Data Strobe) und LDS (Lower Data Strobe), die mit den OE-Eingängen (Output Enable) der EPROMs verbunden sind, auf 0, um die Daten anzufordern. Die Memory Management Unit MMU, die den Speicheraufbau organisiert, prüft daraufhin anhand der Adresse, auf welche Speicherbausteine zu gegriffen werden soll. Diese erhalten dann von der MMU ein enable-Signal. Für den ROM-Port-Bereich $FA0000 ist es das ROM4-Signal, es ist mit den CE-Eingängen (Chip Enable) der EPROMs verbunden; und wenn diese Leitung 0 wird, stellen die EPROMs die angeforderten Daten an den Datenleitungen zur Verfügung. Bis der Prozessor die Daten aber tatsächlich vom Datenbus liest, vergehen ca. 300ns, und das ist auch nötig, da die EPROMs eine gewisse Zugriffszeit benötigen, bis sie die Daten an den Bus legen können. Nach dem Lesen der Daten werden UDS, LDS und ROM4 wieder 1, und die Datenleitungen der EPROMs werden hochohmig. Der Lesezyklus ist beendet.

# Das Lese-Timing der Mikro-EPROM-Karte

Bei der Mikro-EPROM-Karte ist das Bus-Timing (Bild 8b) wesentlich komplizierter, da in der gleichen Zeit nacheinander zwei Zugriffe auf das EPROM stattfinden müssen. Wie üblich setzt der Prozessor zu Beginn des Lesezyklus' die Adreßleitungen, und er zieht UDS und LD5 auf 0. Dies ist das Signal für die Schaltung, aktiv zu werden. Der Monoflop 74LS123, dessen Eingang A↓ mit UDS verbunden ist, beginnt, an seinem Ausgang Q einen 0-Puls zu liefern. Da die Adreßleitung A0 des EPROMs mit Q verbunden ist, wird sie auch 0, und beim kommenden Lesezugriff wird aus dem EPROM der Inhalt einer gerade Adresse gelesen werden, also das Hi-Byte. Die MMU legt als nächstes die ROM4-Leitung auf 0, wodurch sowohl der Zwischenspeicher 74LS374 als auch das EPROM eine 0 am OE-Eingang erhalten und ihre Daten an den Bus legen. Die Daten des 74LS374 sind irrelevant, es handelt sich um das Hi-Byte des vorigen Lesezugriffs, das noch gespeichert ist. Das EPROM hingegen liefert das aktuelle Hi-Byte, da noch A0=0 ist. Für den Systemdatenbus ist es auch irrelevant, schließlich ist es das Hi-Byte, und bisher liegt es am Lo-Teil des Datenbusses (D0...D7) an, doch es wird vom Prozessor noch nicht gelesen. Viel wichtiger ist, daß die 8 Bits des Hi-Bytes auch an den 8 Eingängen des 74LS374 anliegen. In dem Augenblick nämlich, in dem der 0-Puls des 74LS123 zu Ende ist, werden diese 8 Bits im 74LS374 gespeichert, da ein Ende des 0-Pulses von 5 mit einer steigenden Flanke an T↑ des 74LS374 identisch ist.

Das Hi-Byte aus dem EPROM ist also da, wo es hingehört. Es ist im 74LS374 gespeichert, und da ROM4 und somit OE noch 0 ist, liegt es auch tatsächlich am Systemdatenbus D8...D15 an. Auch für das Lo-Byte ist gesorgt, denn mit Q hat auch die Adreßleitung A0 des EPROMs wieder auf 1 gewechselt, und daher stellt das EPROM nach einiger Zeit das Lo-Byte an seinen Datenleitungen bereit. Das Bit-Muster der Datenleitungen wechselt also von dem des Hi-Bytes auf das des Lo-Bytes.

Da nun Hi- und Lo-Byte am Systemdatenbus anliegen, kann der Prozessor das 16-Bit-Datenwort vom Bus lesen. Dies geschieht übrigens zu einem festen Zeitpunkt, der unabhängig davon ist, wie lange die Daten schon bereitstehen. Nach dem Lesen geht ROM4 wieder auf 1, und die Ausgänge des 74LS374 und des EPROMs werden hochohmig, der Lesezyklus ist beendet.

Wer nun argumentiert, das könne doch gar nicht funktionieren, hat Recht. Dem EPROM bleibt eigentlich viel zu wenig Zeit, um in weniger als 300ns auf zwei Bytes zuzugreifen. Selbst bei den schnellsten EPROMs mit nur 150ns Zugriffszeit wäre man erst hart an der Grenze. Tatsache ist jedoch, daß es funktioniert, und zwar sogar mit 250ns-EPROMs bestimmter Hersteller. Der Grund dafür ist, daß die angegebene Zugriffszeit eines EPROMs die Zeit „CE to output" ist. Da in der Schaltung aber die Chip Enable Leitung CE permanent auf 0 liegt, geht der Zugriff schneller. Relevant für das Lesen sind dann die Verzögerungszeiten von einem 0-Wechsel der OE-Leitung bis zum Bereitstehen der Daten (OE to output) beziehungsweise die Zeit vom Wechsel der Adreßleitung A0 bis zum Wechsel der Daten (A0 to data change). Zumindest die Zeit „OE to output“ liegt bei allen EPROMs deutlich unter der CE-Zugriffszeit, garantierte Werte liegen bei 40-65ns. Außerdem werden die Spezifikationen der Speicher stets etwas übererfüllt, die EPROMs sind daher immer schneller, als angegeben ist. Trotzdem sollte man nur EPROMs mit höchstens 150ns Zugriffszeit verwenden.

Betrachtet wurden bisher Lesezugriffe, bei denen der Prozessor ein 16-Bit-Datenwort liest. Die CPU 68000 ist jedoch auch in der Lage, auf einzelne Bytes zuzugreifen. Bei einem Zugriff auf eine gerade Adresse, also auf ein Hi-Byte, verhält sich die Mikro-EPROM-Karte wie bei einem Wortzugriff. Lediglich der Prozessor liest vom Datenbus nur das Hi-Byte, während er das Lo-Byte ignoriert. Greift der Prozessor hingegen auf eine ungerade Adresse zu, also auf ein Lo-Byte, so benutzt er dabei zur Anforderung der Daten nur die LDS- und nicht die UDS-Leitung, so daß der Monoflop nicht getriggert wird. Die Folge ist, daß die Mikro-EPROM-Karte sich nun wie eine gewöhnliche EPROM-Karte verhält und das Lo-Byte aus dem EPROM korrekt an den Datenbus legt.

Schalten und walten

Bei dem zweiten Satz von vier DIP-Schaltern, markiert mit A, handelt es sich um softwaremäßig abfragbare Schalter, die z.B. für Konfigurationseinstellungen der Software im EPROM verwendet werden können.

Abgefragt werden sie. indem der Inhalt der Speicherstelle $FB0001 ausgelesen wird. Die Daten Bits D3...D0 entsprechen dabei den Zuständen der Schalter SA4...SA1. Steht ein Schalter auf ON, hat das entsprechende Bit den Wert 0.

Realisiert wurde der Anschluß der Schalter nicht über einen Peripheriebaustein. sondern mit einem zweiten Hard-ware-Trick. Entsprechend dem Schaltplan sind die Datenleitungen über Schalter und Dioden mit der ROM3-Leitung verbunden. Während ROM3=1 ist, sperren die Dioden, und die Datenleitungen werden nicht beeinflußt. Wird aber bei einer Abfrage der Speicherstelle $FB0001 die ROM3-Leitung 0, wird jede Datenleitung, deren Schalter geschlossen ist, über die Diode nach Masse gezogen. Der Prozessor liest auf diesen Leitungen somit den Wert 0 aus. Für alle Datenleitungen mit offenem Schalter hingegen liest der Prozessor den Wert 1 aus, da die 6,8kΩ-Pullup-Widerstände die Leitungen nach +5V ziehen.

Solo für Flötkolben

Davon, die Platine der Mikro-EPROM-Karte selbst herzustellen, kann ich nur abraten. Die Leiterbahnen dieser Miniatur-Platine (Bild 5) sind überwiegend nur 0,25mm breit, und auch eine großzügigere räumliche Anordnung der Bauteile hätte an der engen Leiterbahnführung, speziell im Bereich der Kontaktstreifen, wenig geändert. Wenn eine nicht-durchkontaktierte Platine gefertigt wird, müssen außerdem ca. 30 Durchkontaktierungen durch 0,5mm-Löcher hergestellt werden, und die Bauteile müssen auf Platinenober- und -Unterseite angelötet werden.

Wenn hingegen eine industriell hergestellte, durchkontaktierte Platine verwendet wird, dürfte es mit ein wenig Sorgfalt jedem möglich sein, die Platine zu löten. Leider ist die Herstellung durchkontaktierter Platinen bei Einzelstücken sündhaft teuer. Ich bin daher dazu bereit, die Herstellung und den Vertrieb der Leerplatinen zu übernehmen, wenn sich so viele Interessenten bei mir melden, daß es lohnt, eine Kleinserie fertigen zu lassen. Der Preis wird voraussichtlich 20,- DM für die Leerplatine und 40, DM für das getestete Fertiggerät betragen, inklusive Porto und Verpackung. Allein der Verzicht auf das beidseitige Anlöten der Bauteile wäre mir persönlich immer ein paar Mark Mehrkosten wert.

Achten sollte man beim Aufbau wie immer auf die korrekte Ausrichtung der ICs (Kerbe). Die Werte des 6,8kΩ-Widerstandes und des 27pF-Kondensators sind exakt einzuhalten, da sie die Zeitkonstante des Monoflops festlegen und diese recht zeitkritisch ist. Wer versucht, langsamere EPROMs auf der Karte zu betreiben, und das sollte niemand tun. muß eventuell den Wert des Widerstandes leicht verändern, denn Streuungen bei den Monoflops 74LS123 unterschiedlicher Hersteller führen dazu, daß die Zeitkonstante etwas von den vorgesehenen 130ns abweicht. Bei Verwendung von 150ns-EPROMs stellt dies jedoch kein Problem dar.

Die Dioden werden stehend eingelötet, die Seite mit dem dicken Ring (Kathode) weist von den DIP Schaltern weg, ist also oben, wenn man sich nach dem abgebildeten Bestückungsplan (Bild 4) richtet. Bei den vier 6,8kΩ-Widerständen handelt es sich um ein single-in-line-Widerstands-Array (Bild 6), bei dem vier Widerstände in einem fünfbeinigen Flachgehäuse untergebracht sind. Da man es selten bekommt, kann man auch ein 8fach-Array mit der Zange kürzen. Es wird als letztes Bauteil auf der Platinenunterseite auf fünf Leiterflächen aufgelötet, wobei der mit einem Punkt markierte gemeinsame Anschluß des SIL-Anrays zur Platinenmitte weist.

Bild 4: Die enge Bestückung der Platine erfordert
Bild 5a: Platinen-Layout - Lötseite
Bild 5b: Platinen-Layout - Bestückungsseite
Bild 6: Das SIL-Array wird auf der Platinenunterseite auf fünf Kontaktflächen aufgelötet
Bild 7: Der EPROM-Typ kann auch fest eingestellt werden. Ein wenig Lötzinn ersetzt die teuren DIP-Schalter.

Für jeden Geldbeutel

Die Bauteile kosten ohne Platine und EP-ROMca. 10,- DM. Wer auf die auslesbaren DIP-Schalter (A) verzichten will, kann zusätzlich das SIL-Array und die Dioden weglassen. Auch auf die DIP-Schalter zur Einstellung des EPROM-Typs (B) kann man eventuell verzichten, wenn man die nötigen Verbindungen zwischen den Kontaktflächen auf der Platinenrückseite gemäß Bild 7 mit etwas Lötzinn herstellt. Dies ist jedoch nur empfehlenswert, wenn man ausschließlich mit einem EPROM Typ arbeitet.

Wer dann noch sparsam und löterfahren genug ist, die IC-Sockel wegzurationalisieren, der zahlt für die Bauteile keine drei Mark mehr, plus Platine und EPROM. Nur dem EPROM sollte man seinen Sockel lassen, das macht sich wirklich besser.

Beim Kauf der Bauteile sollte man im übrigen die enge Bauteileanordung vor Augen haben und darauf achten, daß speziell der Widerstand und die Kondensatoren nicht zu groß sind.

Bezugsquelle
Lukas Bauer
Goethestraße 30
1000 Berlin 45

Stückliste

1 IC            74LS123
1 IC            74LS374
4 Dioden        1N4148 o.ä.
1 Kondensator   100nF, RM 5mm
1 Kondensator   27pF RM 2,5mm
1 Widerstand    6,8kΩ
1 SIL Array     4*6,8kΩ
2               4fach-DIP-Schalter
1               EPROM-Fassung, 28pol.
1               IC-Fassung, 20pol
1               IC-Fassung, 16pol.
Platine, EPROM


Aus: ST-Computer 01 / 1991, Seite 159

Links

Copyright-Bestimmungen: siehe Über diese Seite