Es lebe der Standard! Hercules Graphic Adapter meets Trash 80 Helmut Bernhardt Genau besehen hat es auch Vorteile, daß der Industriestandard einen so niedrigen Standard hat. Insbesondere die Hercules-Karte, die dort schon nicht unbedingt als schlechteste Video-Karte gilt, ist schon fast zum TRS80 kompatibel. Ja, nicht ganz zu dem, aber doch schon zum GenieIIIs-Video-Interface. Wie im GIIIs gibt es dort eine 2K große Text-Video-Seite (80x25 Zeichen) und ebenso memory mapped. Zusätz- lich bietet die Hercules aber auch noch einen 2K großen Attribut- -Speicher, womit sich für jedes Zeichen auf dem Bildschirm einzeln Attribute setzen lassen. Und schließlich wird auf der Hercules wie im GenieIIIs mit 2 HRG-Pages mit je 32K Größe (ebenfalls bei beiden memory mapped) Grafik dargestellt. Bei beiden Geräten wird alles von einem CRTC6845 gesteuert. Die maßgeblichste Inkompatibilität ist die Tatsache, daß bei der Her- cules Text- und Attribut-Seicher ineinander verschoben sind. Dort werden innerhalb eines lineren 4K-Bereichs alle geradzahlien Adres- sen für Textzeichen und alle ungeradzahligen Adressen für die dazu- gehörigen Attribute verwendet. Weniger störend sind die 10Bit-Port- adressen des Industrie-Standards, mit denen die internen Register der Karte angesprochen werden. A8 und A9 kann man der Karte bei Z80- Portzugriffen einfach vorgaukeln. Folgende Tabelle stellt die Ähnlichkeiten und Abweichungen zwischen Hercules und GenieIIIs-Video-Interface zusammen: Funktion Hercules GenieIIIs ----------------------------------------------------------------- Text-Speicher B0000-B0FFF (mit A=0) 3800(3C00)-3FFF Attribut-Speicher B0000-B0FFF (mit A=1) nicht vorhanden HRG-Seite 0 B0000-B7FFF 8000-FFFF HRG-Seite 1 B0000-BBFFF 8000-FFFF CRTC6845-Ports 3B4H/3B5H F6H/F7H ----------------------------------------------------------------- Diese Ähnlichkeit ließ mich vor längerer Zeit schon mal darüber brü- ten, wie man die Hercules anstelle des dort recht lausigen Video- -Interface in TRS80 und Genie-Rechnern einsetzen könnte. Zunächst dachte ich an einen Adapter, der mir die nötige Adreßübersetzung macht und die Verbindung zwischen Genie-CPU-Board und Hercules herstellt. Dann dachte ich daran, daß sich dieser Aufwand für das ebenfalls recht lausige Genie-CPU-Board nicht lohnt. Inzwichen ist um diesen reinen Adapter ein ganzes CPU-Baord gewachsen, das noch einiges mehr bietet als das Genie-CPU-Board und dabei auf die Maße einer Europa-Karte geschrumpft ist. Das Board enthält all das, was mir bislang lieb ge- worden ist: [1] H64180-CPU [2] 2 serielle Schnittstellen [3] 1MB RAM bestehend aus 8 mal 511000-Megachips [4] auf 1MB erweiterte MMU des HD64180 [5] 27128-EPROM mit Level II BASIC und Initialisierungen [6] ECB-Bus mit Buspufferung und IM2- und DMA-fähiger Steuerung [7] Interface zur Hercules [8] komfortables Switching für memory mapped I/O (hier HerculesGenie02.jpg einfügen Bank-Switching, Adressdecoder, Hercules-Interface) Damit steht mir ein voll Genie1-kompatibler (nur Spiele lassen sich ohne Bauklötzchengrafik nicht so richtig spielen) Computer zur Verfü- gung. Die Hercules stellt mir dafür den Standard-64x16-Bildchirm, eine 80-Zeichen-Karte und zwei hochauflösende Grafikseiten mit je 720x348 Punkten zur Verfügung, und das alles für 10,-DM. Die eigentlichen Kosten fallen bei der Beschaffung der RAMs an. Zuge- geben - 256K hätten's beim Genie auch getan, aber das Teil-Layout mit CPU, RAMs, EPROM, RAM-Steuerung und Treibern für die V24-Schnitt- stellen brauchte ich nur aus der Schublade zu ziehen und beim Rest habe ich mir dann auch keine große Mühe mehr gemacht. So ist Der Aufbau der Karte zu einem richtigen kleinen Abenteuer geworden. Das Layout beschränkt sich auf einseitge Leiterbahnführung und versucht, dort so viele Verbindungen unterzubringen, wie irgend möglich. Nur im hinteren Teil der Karte (der aus der Schublade), war es möglich, alles mit Drahtbrücken zu erledigen - bis auf das EPROM, das muß auch von Hand verdrahtet werden, dort sind nur D0-7, +5V und GND angeschlossen. Was von Hand zu verdrahten ist, kann aus der Verdrahtungsliste ersehen werden. Wer nun immer noch glaubt, daß er dieses Projekt durchstehen kann, und von mir zum Selbstkostenpreis ein geätztes, ungebohrtes Board bekommen hat, muß zunächst mal 1-2 Stunden mit der Bohrmaschine zubringen. Die 3 Stecker für VG64-Leiste, für die Pfostenfeld-Leiste zum Aufstecken der Hercules-Karte und die Pfostenfeld-Leiste für die seriellen Schnittstellen müssen 1mm-Bohrungen erhalten, alle anderen Bohrungen sind in 0,8mm niederzubringen. Wenn man sich davon wieder erholt hat, legt man sämtliche Drahtbrücken (Drahtbrücken- und Bestückunpsplan) und fängt dann erst an, Klein- teile und IC-Sockel einzulöten. Da die Drahtbrücken teilweise recht eng liegen, sollte grundsätzlich dünner Kuper-Lackdraht verwendet werden. Bei Drahtbrücken, die +5V und GND führen sollen (solche Brücken enden meistens an etwas breiteren Leiterbahnen), ist etwas dickerer isolierter Schaltdraht vorzuziehen. Es sei noch gesagt, daß im dichter besiedelten vorderen Bereich (beim Busstecker) in der ersten Reihe ein IC nicht zu bestücken ist. Weil der Platz halt da war, habe ich da vorsichthalber mal die Lötaugen hinterlegt, damit es spätere Bastler bei Erweiterungen einfacher haben. Auf der Busplatine oder frei improvisiert auf dem CPU-Board müssen die CPU-Signale /BUSRQ, /RESET, /WAIT, /MMI und /INT0 mit 10kOhm an +5V gelegt werden. /INT1 und /INT2 müssen direkt am HD64180 über 10k an +5V gelegt werden. Wenn diese Eingänge nicht genutzt werden, genügt ein gemeinsamer Widerstand. Die 62polige Steckleiste zum Anschluß der Hercules ist für eine spezi- elle, besonders kleine Karte gedacht, die direkt neben dem für PC-Karten üblichen Platinenrand-Stecker zwei Reihen Durchkontak- tierungen aufweist, die freundlicherweise im RM2,54 Rastermaß angelegt sind und eine Weite von 1 mm haben. Wenn hier von der Bestückungseite eine zweireihige Buchsenleiste eingelötet wird, und auf dem CPU-Board die Pfostenfeld-Leiste mit etwa um 1cm verlängerten Beinchen einge- lötet wird, können beide Karten direkt aufeinander gesteckt werden. Der Fernseher darf leider nicht der alte vom Genie1 bleiben. Die Her- cules benötigt einen TTL-Monitor (ohne Gehäuse und Netzteil bekommt man sowas im Elektronik-Ramsch-Versandhandel für ca. 40,-DM). Ander- erseits gibt es auch TTL/BAS-Wandler, denen man aber ein aus "Video" und "Intensity" zusammengeführtes Signal anstelle des reinen Video- -Signals zuführen sollte, um nicht auf die Helligkeitssteuerung der Hercules verzichten zu müssen. (hier HerculesGenie04.jpg einfügen RAM-Steuerung, ECB-Bus-Steuerung) Programmierung der Hercules-Karte Interne Ports (die Portdressen sind die auf die 8Bit-Decodierung durch das Interface reduzierten Adresen; im PC müssen zusätzlich A8 und A9 high sein) B4H Adressregister des CRTC6845 B5H Datenregister des CRTC6845 B8H Display-Betriebsart-Steuerkanal B9H Display-Status-Kanal BBH Light-Pen Flip Flop zurücksetzen BCH Drucker-Datenort BDH Drucker-Statusport BEH Drucker-Steuerkanal BFH Konfigurations-Schalter Für die Programmierung des CRTC6845 ist ein Datenblatt erforderlich. Durch Trial-and-Error Methoden soll man es schaffen können, den Monitor dauerhaft zu dissablen. Es sei nur soviel gesagt, daß der CRTC eine ganze Menge Datenregister besitzt, wovon nur die ersten 16 rele- vant sind. Sie haben alle die Adresse B5H. Auf welches dieser Register jeweils über Port B5H zugegrifen werden kann, bestimmt der Eintrag in das Adressregister B4H. Die Initialisierungsroutine im ROM enthält an der Adrese 3000H 5 Tabellen mit je 16 Daten für die ersten 16 Datenregister des CRTC und eine Routine, die dem CRTC diese Daten ein- verleibt. Wenn HL auf den Anfang der jeweiligen Tabelle zeigt. Dort mag sich der Softi informieren, der lieber noch exotischere Bild- schirm-Formate einstellen möchte. Die grundsätzliche Bedeutung der CRTC-Register ist aus mc 1/88 S.113 zu entnehmen. Der Display-Betriebsart-Steuerkanal (Port B8H) der Hercules reagiert nur auf die Bits 1, 3, 5 und 7. Die geradzahligen Datenbits haben dort keine Funktion. Da die Einstellungen dieses Registers für die Adreßübersetzung des Interface zur Hercules von Bedeutung sind, wurde dieser Port auf dem CPU-Board nachgebildet und um die geradzahligen Bits bereichert. Setzen und Zurücksetzen einzelner Bits dieses Ports durch Auslesen, Bit verändern und Zurückschreiben ist also nicht möglich. Man muß dafür im RAM über den Zustand des Ports Buch führen. In der folgenden Tabelle sind die Funktionen der einzelnen Bits des erweiterten Ports B8H zusammengestellt. Die urgsprünglichen Funktionen des Ports auf der Hercules, die nach wie vor gelten, sind mit # markiert. Display-Mode-Control-Port, B8H D0 =0: 1K Video-RAM bei 03C00-03FFF (64x16), Keyboard bei 3800-38FF =1: 2K Video-RAM bei 03800-03FFF (80x25), Keyboard disabled D1 =0: Text-Video-Mode enabled, HRG disabled # =1: HRG enabled, Text-Video disabled # D2 =0: ROM bei 00000-036FF (nur bei /RD, bei /WR RAM) =1: oRM disabled, bei 00000-O36FF liegt RAM D3 =0: die Hercules gibt kein Video-Signal an den Monitor # =1: das Video-Signal der Karte gelangt zum Monitor # D4 =0: Floppy, Drucker u.s.w. bei 037EX memory mapped =1: 037EX ist RAM, Floppy u.s.w. über Ports EXH D5 =0: D7=1 des Attribut-Bytes bedeutet "heller Hintergrund" # =1: D7=1 des Attribut-Bytes bedeutet "Blinken" # D6 =0: Text- bzw HRG-RAM sind freigegeben =1: Text- bzw HRG-RAM gesperrt, dort RAM eingblendet D7 =0: HRG: Page O selected # Text: 2K Textspeicher eingestellt =1: HRG: Page 1 selected # Text: 2K Attributspeicher eingstellt (hier HerculesTerminal06.jpg einfügen Bestückungs- und Drahtbrücken-Plan / Teil-Layout) Die Einteilung des 1MB-Speichers Der HD64180 (in der hier verwendeten DIL64-Form) kann nur 512K Spei- cher adressieren. Um den vollen 1MB-Speicher zu nutzen, muß durch zwei weitere Bits eines Ports (D0 und D1 von Port F4H) ein Banking von 256-K-Blocks dem Banking der MMU des HD64180 überlagert werden. Die Selektion eines der 4 256K-Blocks erfolgt mit A8 des HD64180 und D0/D1 von Port F4H. Aus diesen 3 Signalen werden die Adressen A18 und A19 für das RAM hergeleitet. Port F4H CPU RAM 256K- D1 DO A18 A19 A18 -Block ---------------------------------- X X 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 0 1 1 0 2 1 1 1 1 0 3 ---------------------------------- Wenn A18 der CPU low ist, wird immer der unterste 256K-Block ange- wählt. Wenn A18 high ist, wird einer der 3 anderen Blocks selektiert. Welcher djeser 3 Blocks selektiert wird, hängt von den Zutänden von D0 und D1 des Ports F4H ab. Diese Vorgaben gelten sowohl für die MMU als auch für den DMA-Controller. Nach einem RESET ist die MMU des HD64180 immer so eingetellt, daß der logische 64K-Z80-Adreßraum in den unteren 64K des unteren 256K-Blocks liegt. Um die Standard-Software (Newdos/80, CP/M) zu fahren, braucht die MMU nicht umrogrammiert zu werden. Die Decodierung von RAM und memory mapped I/O schließt auch die Adressen A16-A19 mit ein, so daß diese Baugruppen im Physikalischen Adressraum 00000H-03FFFH liegen. Nur der HRG-Speicher der Hercules-Karte mit 2mal 32K wäre bei 08000H eingeblendet etwas lästig und wurde deshalb an das obere Speicherende bei 0F0000H verbannt. Für die MMU und den DMAC des HD64180 sind dies die Adressen 70000H-7FFFFH, wobei D0 und D1 von Port F4H gesetzt sein müssen, damit der HRG-Speicher adressiert wird. Neben der Grundeinstellung (D7 an Port F4H low, Zustand nach RESET) gibt es noch eine andere Lage für die memory mapped Baugruppen. Wenn 7=1 an Port F4H ausgegeben wird, liegen ROM, Floppy, Drucker, Tasta- tur und Text-Video-RAM bei 0C000H-0FFFFH und die untersten 16K sind RAM. Und schließlich läßt sich innerhalb dieser 16K (wo auch immer die memory mapped Baugruppen eingeblendet sind) sehr komfortabel umkonfi- gurieren, darüber gibt die Tabelle der Bedeutung der Bits des erwei- terten Ports B8H und die Map der Speipcheraufteilung Auskunft. In allen Bereichen, wo die jeweilige memory mapped Baugruppe ausgeblendet ist, liegt dann automatisch RAM vor. Der Text-Bildwiederholseicher Die Hercules-Karte stellt im Text-Modus einen 2K großen Bildwiederhol- speicher für Text und einen 2K großen Attribut-Speicher zur Verfügung. Diese Speicher sind ineinander verschoben; innerhalb eines linearen 4K-Bereichs stellen die geraden Adressen den Text-Speicher und die un- geraden Adressen den Attribut-Speicher dar. Video-Attribute waren aber damals, als der TRS-80 geboren wurde, noch unbezahlbarer Luxus. Deshalb scheint der Attribut-Speicher der Hercu- les der Kompatibjlität zum TRS-80 im Wege zu stehen. Der TRS-80 braucht einen zusammenhängenden Bildwiederhol-Speicher von 1K Größe (und manche jüngeren Brüder können auch mit 2K Textspeicher umgehen). Dieses unlösbare Problem läßt sich dadurch lösen, daß beim Text-Modus die Aressen A0-A10 der CPU (2K-Bereich) auf die Adressen A1-A11 der Hercules-Karte gelegt werden. Diese Umsetzung darf aber nur bei Zu- griff auf den Text- und den Attribut-Speicher erolgen. Bei HRG-Be- trieb und bei Zugriff auf die Ports der Karte müssen alle Adressen direkt durchgeschaltet werden. Die für das Selektieren von Text- oder Attribut-Speicher zuständige Adresse A0 (zur Hercules) wird im Text- -Modus von D7 des erweiterten Ports B8H und bei Zugriff auf Hercules- -Ports und HRG-Speicher von A0 der CPU bedient. Diese Adressteuerung wird von PAL3 und einem 74LS157-Multiplexer erledigt. Die damit auf 2K reinen Text-Speicher (und nach Umschalten 2K reinen Attriut-Speicher) beschränkte Bildschirmseite ist aber für den TRS- 80, der nur 1K bei 3C00H dafür vorsieht, immer noch zu groß. Deshalb kann mit D0=0 an Port B8H (Einstellung nach der Initialisierung im ROM) die Freigabe nur der oberen Hälfte des Text-Speichers im Bereich C000-3FFF vorgegeben werden. Für das TRS-80-Format 64x16 Zeichen muß dann aber auch der CRTC-6845 entsprechend programmiert werden. Dies wird ebenfalls durch die Initialisierung im ROM erledigt. Das Betriebs- system findet dann beim anschließenden Booten eine voll TRS-80- -kompatible Maschine vor. Wenn D0=1 an Port B8H ausgegeben wird, ist der volle 2K-Text-Speicher im Bereich 3800-3FFF verfügbar. Um eine vernünftige Darstellung auf dem Bildschirm zu haben, muß dann aber auch der CRTC6845 entsprechend initialisiert werden. Jm 80x25-Modus ist die Tastatur dann aber nicht mehr zugänglich. Für das Aulesen der Tastatur muß dann immer erst in den 64x16-Modus zurückgeschaltet werden und nach dem Auslesen der Tastatur für weitere Bildschirm-Ausgaben wieder der 80x25-Modus ein- gestellt werden. Wenn dabei die Register des CRTC-6845 in Ruhe gelas- sen werden und nur mit D0 von Port B8H geschaltet wird, bleibt die Darstellung auf dem Bildschirm unbeeinträchtigt. Die Umschaltung be- trifft dann nur die Zugriffmöglichkeiten der CPU auf den Bildwieder- holspeicher. Das für die Darstellung des Bildpeichers auf dem Moni- tor verantwortliche Auslesen des 6845 wird dadurch nicht belangt. Die Initialisierungs-Routine im ROM füllt zunächst den gesamten Attri- but-Speicher mit dem Standard-Wert 7. Das bedeutet, daß die Zeichen auf dunklem Hintergrund mit normaler Helligkeit dargestellt werden, wenn der Attribut-Speicher bei der Textausgabe nicht berücksichtigt wird. Es sind allerdings dies die Zeichen entsprechend Big Blue's Ver- ständnis von ASCII-Code. Die Zeichen mit den Codes 5BH-5FH und 7BH-7FH sind grundsätzlich die amerikanischen Zeichen (geschweifte und eckige Klamnern u.s.w.). Den deutschen Umlauten und auch allen anderen nati- onalen Sonderzeichen sind feste ASCII-Codes mit gesetztem Bit7 zuge- ordnet. Das hat den Nachteil, daß bei allen von Standard-Programmen unter MEWDOS und CP/M ausgegebenen Texten anstelle der deutschen Um- laute die entsprechenden amerikanischen Zeichen erscheinen. Ein Vor- teil besteht aber auch darin, daß amerikanische Sonderzeichen und sämtliche nationalen Umlaute gleichzeitig dargestellt werden können. Für Soft-Freaks besteht hier ein weites Betätigungsfeld in der Anpas- sung von Tastatur-Treibern und Standard-Programmen. Die Bildchirm-Attribute Wenn mit D1=1 und D7=1 an Port B8h die Text-Betriebsart und der Attri- butspeicher eingeschaltet werden, kann im Adressbereich des Text-Spei- chers ein Attribut-Byte eingetragen werden, das die Darstellung des ASCII-Zeichens auf gleicher Adresse im Text-Speicher beeinflußt. Die Attribut-Bits wirken nur auf das eine Zeichen und nicht auf den gesam- ten Bildschirm. Wenn mit Attributen gearbeitet werden soll, muß für jedes Zeichen im Text-Speicher auch ein Byte im Attribut-Speicher ein- getragen werden. Beim Scrollen muß auch der Attribut-Speicher genauo wie der Text-Speicher verschoben werden. Die Bits 3 und 7 eines Attribut-Bytes haben eigenständige Funktionen, während die Bits 0-2 und die Bits 4-6 in Kombination miteinander zu benutzen sind: D7: die Wirkung von D7 eines Attribut-Bytes hängt davon ab, welcher Wert für D5 an Port B8H ausgegeben wurde. Port B8H, D5=0: D7(Attribut) =0: Zeichen erscheint auf dunklem Hintergrund =1: Zeichen erscheint vor halbhellem Hintergrund Port B8H, D5=1: D7(Attribut) =0: kein blinkendes Zeichen =1: Zeichen wird blinkend dargestellt D3 =0: normale Helligkeit der Darstellung =1: Highlighting D0-D2, D4-D6 D6 D5 D4 D2 D1 D0 Bedeutung ---------------------------------------------- 0 0 0 0 0 0 Zeichen nicht dargestellt 0 0 0 0 0 1 unterstrichen dargestellt 0 0 0 1 1 1 normale Darstellung 1 1 1 0 0 0 invere Darstellung ---------------------------------------------- Die HRG der Hercules-Karte Mit 720x348 Punkten Auflösung und 2 Seiten läßt sich schon sehr schöne Grafik auf die Mattscheibe bringen. Diese Auflösung benötigt natürlich auch Speicherraum für die beiden 32K-Pages. Diese Bereiche analog zum GenieIIIs einfach in den logischen Adreßraum der nach RESET eingestellten (unteren physikalischen) 64K zu legen, erscheint etwas unzweckmäig zu sein. Es müßte dann eine Hälfte des ohnehin nur 64K großen, direkt erreichbaren Arbeitspeichers ausgeschaltet werden. Für Grafik-Anwendungen müßte man sich festlegen, in welcher Häfte der 64K die Grafikroutinen laufen sollen. Hier ist der HRG-Speicher ans obere Ende des physikalischen 1MB-Spei- chers verbannt worden. Das Besudeln des Grafik-Seichers erfolgt im einfachsten Fall durch blockweise Übertragung per DMA. Wer aber trotz- dem gerne dirrekt in das HRG-RAM schreiben möchte, kann sich dieses durch die in die untere oder obere Hälfte seines 64K-Arbeits- speichers einblenden. Mach einem RESET ist die Text-Betriebsart eingstellt. Mit D1=1 an Port B8H läßt sich auf die HRG-Betriebsart "Half-Mode" umstellen, wenn in Port BFH D0=1 eingetragen ist. Dabei ist die untere Hälfte (Page 0) erreichbar. Um auch die Page 1 erreichen zu können, muß auch D1=1 an Port BFH ausgegeben werden. Während der Grafik-Betriebsart ist der Text-Bildspeicher nicht zugäng- lich. Da dieser aber physikalicher Bestandteil der Page 0 der HRG ist, wird der Inhalt des Textspeichers bei Grafikausgaben an Page 0 überschrieben. Gleiches gilt für den Attribut-Seicher. Die Tastatur Dieses Gerät erleidet hier die größten Einbußen in der Präsenz. So ist der Bereich, in dem die Tastatur ausgelesen werden kann, auf den dafür nötigen Platz von 256 Adressen bechränkt. In der 64x16-Text-Betriebs- art (D0=0 an Port B8H, die einzige Einstellung, in der die Tastatur erreichbar ist) stehen bei 3900H-3BFFH ein paar Byte frei verfügbaren Speichers bereit. Auch der Speicher para1lel zur Tastatur kann bei eingeblendeter Tastatur beschrieben werden; Auslesen läßt er sich nur, wenn auf Grafik-Betriebsart umgestellt wird. Beim Arbeiten im 80x25-Textmodus ist die Tastatur nicht erreichbar. Dann liegt ab 3800H Bildwiederhol-Speicher vor. Um die Tastatur zwichendurch auszulesen, muß mit D0=0 an Port B8H vorübergehend auf 1K Video-RAM umgeschaltet werden. Da das aber nicht den Zugriff des CRTC6845 auf den Bildspeicher beeinflußt, zeigt sich das Umschalten nicht in der Darstellung auf dem Bildschirm. Wenn es auch Wahnsinn ist, eine Tastatur memory-mapped als offene Matrix an einen Computer anzuschließen, weil bei höheren Taktraten und längeren Anschlußleitungen Probleme zu erwarten sind, kommt man bei einem TRS-80-kompatiblen Rechner um diesen Unsinn nicht herum, wenn auch der Betrieb von OLDDOS/80 und der darunter laufenden Prograrnme möglich sein soll. Ein einfaches Interface (Abb.7) kann auf einem Stück Lochraster- platine in Fädeltechnik aufgebaut werden und mit einer VG64- Steckerleiste an den ECB-Bus gesteckt werden. Die Tastatur kann daran über ein nicht zu langes, 16poliges Kabel angeschlossen werden. Die Freigabe des ROMs Wie es sich für einen Trash-80-komatiblen Computer gehört, liegen nach dem Einchalt-RESET die 12K Löffel-II-BASIC bei 0000H-2FFFH im ROM rum. Zusätzlich wurde hier auch der Bereich 3000H-36FFH als ROM decodiert. Hier sind die nötigen Initialisierungen der HD64180-CPU und der Hercules-Karte untergebracht. Der Einsprung bei 3050H muß im Level-II-ROM anstelle des ersten Sprungbefehls nach RST 00H gepatcht werden. Die Initialisierung endet mit einem Sprung an das dort vorher vorhandene Sprungziel 0674H. Wenn D7 an Port F4H high ausgegeben wird, verschiebt sich die Lage des ROM-Inhalt von 0000-36FF nach C000-F6FF. Das ist zwar wenig sinnvoll/ weil der Stoff auf dieser Adresslage nicht läuft, ließ sich aber wegen des für CP/M nötigen Verschiebens des memory mapped I/O nach F7E0-FFFF nicht verhindern. Wenn das ROM aber ausgeschaltet wird (D2 an Port B8H high), stört es dort nicht mehr. Das Abchalten des ROMs über D2 an Port B8H läßt sich natürlich auch in der ursrünglichen Lage bei 00000H durchführen. Da das ROM ohnehin nur beim Lesen freigegeben wird und beim Schreiben RAM eingeblendet ist (auch wenn das ROM nicht abgeschaltet ist) kann das Kopieren des ROM-Inhaltes in das RAM durch ein einfaches LDIR auf sich selbst (HL = DE = 0) erfolgen. Das wird in der Initialisierung vorsichtshalber auch schon mal gemacht. Floppy, Drucker und der ganze Rest Damit die Abwärtskompatibilität zum TRS-80 beibehalten wird, liegen diese Komponenten memory mapped bei 37EXH. Allerdings wurde die Option eingebaut, anstelle dieser Memory-Adressen auch de entprechenden Ports EOH-EFH für das Ansprechen dieser Einheiten benutzen zu können. Dafür wird mit D4=1 an Port B8H auf Betrieb über Ports umgeschaltet. Wer von seinem alten Genie oder TRS80 her noch einen RB-EXP1 Control- ler besitzt, hat damit ein weiterhin brauchbares Gerät vorliegen. Diesem Board muß nur noch ein VG64-Stecker spendiert werden. Dieser Stecker wird auf einen 2cm breiten Strefen Lochraster-Platine gelö- tet, der wiederum mit zwei schmalen Streifen Pertinax oder Sonstigem Kunststoff mit dem RB-EXP1 verschraubt wird (Abb.6). Auf der Lötseite werden dann die ECB-Signale des Steckers mit den entsprechenden Punkten der beiden Anschlußstecker des EXP1 verbunden. (hier HerculesGenieEXP1.jpg rechts neben der Tabelle einfügen ECB-Bus-Anschluß der RB-EXP1) Anschluß des RB-EXP1 Controllers an den ECB-Bus ECB-Bus Signal RB-EXP1 Pin --------------------------------------- 2c D0 Pin 9 24poliger 14c D1 Pin 10 Stecker 4c D2 Pin 11 4a D3 Pin 13 5a D4 P3n 14 2a D5 pin 15 3a D6 Pin 16 3c D7 Pin 17 5c A0 Pin 8 7c A1 Pin 7 6a A2 Pin 6 6c A3 Pin 5 1a +5V Pin 24 32a GND Pin 12 --------------------------------------- 13a +12V Pin 11 16poliger 15a -5V Pin 1 Stecker 21c /INT Pin 4 31c /RESET Pin 5 --------------------------------------- z.B. 23a /FLO Pins 2,14 74LS155 Da das Freigabe-Signal für den Controller bereits auf dem CPU-Board er- zeugt wird und auch schon die Umschaltmöglichkeiten beinhaltet, sollte lieber dieses Signal verwendet werden als das auf dem EXP1 hergelei- tete Signal /37EX. Dafür wird das Signal /FLO von PAL1 auf dem CPU- -Board über eine nicht benutzte ECB-Leitung an den Controller geführt und dort an die Pins 2 und 14 des 74LS155 gelegt. Die beiden 74LS30 beim 16poligen Stecker, die vorher das Signal /37EX und die Drucker- -Freigabe über Port FDH geliefert haben, können enternt werden. Die Verwendung des Signals /FLO erübrigt auch die Zuführung der Signale, die in obiger Tabelle nicht angeführt sind und bei Verwendung des EXP1 im Genie oder TR-S80 zusätzlich angeschlossen werden mußten. RAM-Speicher satt Grundsätzlich besteht der gesamte physikalische Adreßraum von 1MB aus RAM-Speicher. Nur dort, wo irgendwelche memory mapped I/O-Baugruppen eingeblendet werden, ist der RAM-Speicher nicht erreichbar. Durch Ab- schalten der mm I/O-Baugruppen wird dort dann automatisch der ent- sprechende RAM-Bereich eingeblendet. Im Bereich des ROMs (00000-003FF) und der Tastatur (03800-038FF), wenn diese im 64x16-Textmodus erreichbar ist, kann der RAM-Speicher auch beschrieben werden, ohne daß ROM bzw. Tastatur ausgeschaltet werden müssen. Nur zum Lesen dieser RAM-Bereiche müssen diese Einheiten ausgeblendet werden. (hier HerculesGenieMemoryMap.jpg einfügen Memory Map) Ein entscheidender Nachteil des Industrie-Standards sei zum Schluß noch erwähnt. Um das vom Genie her bekannte Flickern bei Ausgaben auf den Bildschirm zu verhindern, lassen modernere Hercules-Karten einen Zugriff auf das Video-RAM nur zu, wenn der Elektronenstrahl vom rechten zum linken Bildrand zurückläuft und dabei dunkel gesteuert ist. Die CPU wird während der Zeit des Strahlrücklaufs mit einem Wait (/IO_CH_RDY, Pin A10 des PC-Slots) ruhiggehalten. Offensichtlich ist das Wait-Timing bei HD64180 anders als beim 80286 im PC-AT, denn die Hercules macht im Genie nur bis 5MHz Systemtakt mit; bei höheren Takten erscheint nur noch Müll auf dem Fernseher. Es gibt aber auch Hercules-Karten, die sich wie ein normales Genie- -Video-Interface ohne Rücksicht auf Flickern beschreiben lassen, Eventuell läßt sich damit dann der für das CPU-Board als machbar zu erwartende Takt von 9,216 MHz fahren. Wahrscheinlich muß dann aber ein Wait aus dem Freigabesignal /HA18 für die Speicher der Hercules-Karte erzeugt werden, das den Zugriff der CPU um 1 oder 2 Takte verlängert. Da ich eine solche Karte aber nicht habe, will ich darüber auch nicht weiter nachdenken. Das System verfügt noch nicht über eine Reset-Schaltung. Diese kann im einfachsten Fall durch Kurzschließen von /RESET (ECB-Bus, 31c) mit GND über einem Taster bereitgestellt werden. Da aber während der Zeit, in der der Taster gedrückt ist, kein Refresh der dynamischen RAMs erolgt, gehen bei einem Reset Daten verloren. Eine einfache Schaltung mit einem 555-Timer und einem Taster erzeugt sowohl beim Einschalten als auch beim Betätigen des Tasters ein getimtes /RESET-Signal, das ein längeres Ausbleiben des Refresh verhindert (Abb.5). (hier HerculesGenieReset.jp6 einfügen) Freie Verdrahtung auf der Lötseite Signal IC,Typ,Pin --- IC,Typ,Pin ... D0 18,273,8 10,27128,11 D1 18,273,7 10,27128,12 D2 18,273,4 10,27128,13; PC-Slot,A7 D3 18,273,13 10,27128,15 D4 18,273,8 10,27128,16; PC-Slot,A5 D5 18,273,14 10,27128,17 D6 18,273,17 10,27128,18 D7 18,273,18 10,27128,19 D0 17,64180,34 30,125,5 D1 17,64180,35 30,125,2 D2 17,64180,36 38,245,4 D3 17,64180,37 38,245,5 D4 17,64180,38 38,245,3 D5 17,64180,39 38,245,9 D6 17,64180,40 30,125,11 D7 17,64180,41 31,174,13 /HALT 17,64180,56 VG64-Leiste,25c /REF 17,64180,57 VG64-Leiste,28a /IOE 1,PAL1,1 17,64180,58; 19,32,10; PC-Slot,A10; 33,245,7; 37,PAL2,13 /ME 16,32,4 17,64180,59; 19,32,13; 33,245,2; 37,PAL2,14 /LIR 17,64180,61 37,PAL2,23 /WR 17,64180,62 19,32,12; 33,245,9; 37,PAL2,3 /RD 1,PAL1,2 17,64180,63; 19,32,1; 33,245,8; 37,PAL2,1 CLK 17,64180,64 VG64-Leiste,29c /WAIT 17,64180,4 VG64-Leiste,10,a; PC-Slot,A10 /BUSAK 17,64180,5 37,PAL2,2 /BUSRQ 17,64180,6 VG64-Leiste,11a /RESET 18,273,1 17,64180,7; 15,04,5; 31,174,1; VG64-Leiste,31c /NMI 17,64180,8 VG64-Leiste,20c /INT0 17,64180,9 VG64-Leiste,21c /ST 17,64180,12 35,245,2 A0 17,64180,13 10,27128,10; 25,PAL3,7; 32,157,2; 38,245,2 A1 17,64180,14 10,27128,9; 32,157,14/3; 36,245,6 A2 17,64180,15 10,27128,8; 32,157,13/5; 36,245,3 A3 17,64180,16 10,27128,7; 32,157,11/6; 36,245,4 A4 17,64180,17 10,27128,6; 25,PAL3,16; 32,157,10; 35,245,5 A5 17,64180,18 10,27128,5; 25,PAL3,6; 36,245,7 A6 17,64180,19 10,27128,4; 25,PAL3,5; 36,245,8 A7 17,64180,20 10,27128,3; 25,PAL3,4; 36,245,9 A8 1,PAL1,6 10,27,128,24; 17,64180,21; 25,PAL3,3; 35,245,3 A9 1,PAL1,5 10,27,128,25; 17,64180,22; 25,PAL3,2; 35,345,4 A10 1,PAL1,4 10,27,128,21; 17,64180,23; 25,PAL3,1; 35,345,5 A11 1,PAL1,3 10,27,128,23; 17,64180,24; 35,345,7 A12 17,64180,25; 10,27128,2; 20,86,5; 28,30,12; 33,245,5 A13 17,64180,26; 10,27128,27; 20,86,9; 20,30,11; 33,245,6 A14 17,64180,27; 20,86,2; 35,245,6 A15 17,64180,28; 20,86,12; 33,245,3 A15 17,64180,29; 12,157,5; 27,02,11; 35,245,4 A17 17,64180,30; 12,157,11; 27,02,12; 35,245,8 A18 17,64180,31; 24,00,5; 21,08,13/2; 35,245,9 A18' 21,08,4; 11,157,14 A19' 21,08,5; 11,157,2 B81 18,273,6; 25,PAL3,9; 29,125,4; 16,32,5; 15,04,9 /B81 18,273,16; 25,PAL3,11 Q0 30,125,5; 16,32,10 Q1 30,125,2; 21,08,12 X 16,32,8; 21,08,1 Y 24,00,6; 15,32,9 /M016 26,20,8; 1,PAL1,14 /M1216 28,30,8; 1,PAL1,22 MFxxxx 26,20,6; 1,PAL1,18 /OUTB8 37,PAL2,19; 9,273,11 /OUTF4 37,PAL2,18; 31,174,9 /INF4 37,PAL2,17; 30,125,10 /ADR 37,PAL2,15; 1,PAL1,17 /ROM 1,PAL1,20; 10,27128,20; 10,27128,22 /FLO 1,PAL1,16; 37,PAL2,19; VG64-Leiste,z.B.23c /KB 1,PAL1,19; 37,PAL2,20; VG64-Leiste,z.B.23a /RAM 1,PAL1,22; 16,32,1 /HA18 1,PAL1,21; PC-Slot,A13 HA15 20,86,11; PC-Slot,A16 HA14 20,86,3; PC-Slot,A17 HA11 29,125,6; PC-Slot,A20 RESET 15,04,6; PC-Slot,B2 SEL 16,32,6; 32,157,1 +5V 22,1489,14; 20,86,14; 17,64180,32; 10,27128,28; 4,RAM,9 +5V 1,PAL1,24; 2,RAM,9 +5V 25,PAL3,20; PC-Slot,A12/A14/A15/B29 GND 10,27128,14; 20,86,7; 26,20,7 GND 17,64180,33;10,04,7; V24-Stecker,9/10 +12V 23,1488,14; VG64-Leiste,13a -12V 23,1488,1; VG64-Leiste,14a (hier HerculesGenie16 einfügen) ;Initialisierung der Hercules-Karte und der HD64180-CPU ;im Sonder-ROM-Bereich ab 3000H ; ;Diese Routinen werden aus dem ROM heraus angesprungen ;und übergeben zum Schluß wieder an die TRS-80 Boot- ;Routine. Dafür muß das ROM ab 0000H folgendermaßen ;geändert werden: ;vorher nachher 0000 DI 0000 DI 0001 XOR A 0001 XOR A 0002 JP 0674h 0002 JP 3050h ; ;Die Initialisierung schließt mit JP 0674H ab. attrib EQU 07h ;D7= nicht blinkend bzw ;normaler Hintergrund ;D6-D4=0, D2-D0=1 ;normale Darstellung mode EQU 0 ;D7=0 HRG-Page 0 ;D5=1 Blinken erlaubt ;D3=1 Video-Signal aktiv ;D0=0 Text-Betribsart config EQU 3 ;D0=1 HRG erlaubt ;D1=1 HRG-Page 2 enabled ; ; Org 3000h ;Anfang Sonder-ROM ; ;Initialisierungdaten für den CRTC6845 ;64*16-TRS80-Standard-Einstellung tab DEFB 6eh,40h,50h,0ah,14h,06h,10h,12h DEFB 02h,0eh,29h,09h,04h,00h,00h,00h ;80*25-Modus DEFB 6eh,50h,58h,0ch,1fh,02h,19h,1bh DEFB 02h,09h,29h,09h,00h,00h,00h,00h ;64*24-Modus DEFB 6eh,40h,50h,0ah,1bh,09h,18h,19h DEFB 02h,0ah,29h,09h,02h,00h,00h,00h ;64*32 interlaced DEFB 6eh,40h,50h,0ah,13h,02h,10h,11h DEFB 03h,0fh,2fh,0fh,00h,00h,00h,00h ;92*22-Modus DEFB 70h,5ch,61h,08h,1dh,08h,16h,19h DEFB 02h,0bh,29h,09h,00h,00h,00h,00h ; LD SP,8000 LD A,1 OUT (0f4h),a ;obere 256K einstellen LD A,81h ;Attribut-Speicher mit OUT (0b8h),A ;Standard-Wert füllen LD HL,3800h ;Video-RAM ab 3800h LD A,attrib LD (HL),A LD DE,3001h LD BC,07ffh ;2K Speicher PUSH HL PUSH DE PUSH BC LDIR POP BC POP DE POP HL LD A,1 ;Umschalten auf Text OUT (0b8h),A ;-Seicher LD A,' ' ;mit Blanks füllen LD (HL),A LDIR LD HL,0 ;ROM-nhalt ins RAM LD DE,0 ;kopieren LD BC,3700h LDID ; ;HD64180 initialisieren LD A,10h ;WAITs: Memory 0, I/O 2 DB 0edh,39h,32h ;OUT= (DCNTL),A LD A,83h ;Refresh-Control DB 0edh,39h,36h ;optimieren LD A,44h ;Common 0-32K, Bank 32-64K DB 0edh,39h,3ah ;einstellen XOR A ;Common als Bank benutzen DB 0edh,39h,3ah ;Bank bei 08000-0FFFF ; ;CRTC6845 für 64*16 Zeichen initialisieren LD HL,tab ;HL => CRTC-Parameter CALL setcrtc ;raus an CRTC ; ;Video-Signal einschalten LD A,08h ;Video-Siynal aktiv OUT (0b8h),A ;Video bei 3c00-3fff ;Text-Modus eingesch. ;Blinken gesperrt JP 0674h ;und weiter im TRS80- ;Boot-Gebaren CRTC-6845 initialisieren ;(HL => Parameterliste) setcrtc XOR A ;für Video-Mode-Umschal- OUT (0bfh),A ;tung nötig LD B,16 ;16 Bytes ausgeben LD C,0b5h ;CRTC-Daten-Port XOR A ;CRTC-Register-Nr ab 0 crtclp OUT (0b4h),A ;1. Regsiter INC A ;A => nächstes Register OUTI ;raus das Zeugs JR NZ,crtclp LA A,config ;HG voll freigeben OUT (0bfh),A RET END Assembler-Listing für PAL1 PAL20L8 Helmut Bernhardt 22.01.89 Erzeugen der mm Freigabesignale ioe rd a10 a11 a9 a8 nc b80 b81 b82 b84 gnd b86 m016 nc flo adr mfxxxx kb rom ha18 ram m1216 vcc /ha18 = /b86 */b81 */b80 */m1216 *a11 *a10 + /b86 */b81 * b80 */m1216 *a11 + /b86 * b81 */mfxxxx /kb = /b86 */b80 */rd */m1216 *a11 */a10 */a9 */a8 /flo = /b84 */m1216 */a11 *a10 *a9 *a8 */adr + b84 */ioe */adr /rom = /b82 */m016 *m1216 */rd + /b82 */m1216 */a11 */a10 */rd + /b82 */m1216 */a11 * a10 *a9 */rd + /b82 */m1216 */a11 * a10 *a9 */a8 */rd /ram = ioe *ha18 *kb *flo *rom Assembler-Listing für PAL2 PAL20L8 Helmut Bernhardt 24.01.89 I/O-Decoder und Datentreiber-Steuerung rd busak wr a0 a2 a3 a4 a1 a5 a6 a7 gnd ioe me adr herc inf4 outf4 outb8 flo kb rein lir vcc /inf4 = /ioe /rd *a7 *a6 *a5 *a4 */a3 *a2 */a1 */a0 /outf4 = /ioe */wr *a7 *a6 *a5 *a4 */a3 *a2 */a1 */a0 /outb8 = /ioe */wr *a7 */a6 *a5 *a4 *a3 */a2 */a1 */a0 /adr = a7 *a6 *a5 */a4 /herc = /ioe *a7 */a6 *a5 *a4 /rein = busak */ioe */lir + /ioe */rd *inf4 *herc + /busak *rd + /flo */rd + /kb */rd Assembler-Listing für PAL3 PAL16L8 Helmut Bernhardt 23.01.89 Adreßübersetzung für die Hercules-Karte a10 a9 a8 a7 a6 a5 a0 me b81 gnd b87 ha0 ha5 ha6ha7 a4 ha8 ha9 ha10 vcc /ha0 = /me * /b81 * /87 + /me * b81 * /a0 * /me * /a0 /ha5 = /me * /b81 * /a4 + /me * b81 * /a5 + me * /a5 /ha6 = /me * /b81 * /a5 + /me * b81 * /a6 + me * a6 /ha7 = /me * /b81 * /a6 + /me * b81 * /a7 + me * /a7 /ha8 = /me * /b81 * /a7 + /me * b81 * /a8 /ha10 = /me * /b81 * /a9 + /me * b81 * /a10 Pinbelegung des V24-Steckers CN2 Signal Pin Pin Signal ------------------------------ /CTS1 1 2 TXS1 /RTS0 3 4 RXA0 /CTS0 5 6 RXA1 TXA0 7 8 TXA1 GND 9 10 GND