★ HARDWARE ★ MONTAGES ★ ECB-Adapter für alle CPCs ★![]() |
ECB-Adapter fuer alle CPCs (Computer Technik) | Hardware Montages |
Schneider findet Anschluß Schluß mit der Spezial-Hardware! Es lebe die Kompatibilität. So wie man beispielsweise mit SuperTape durch ein einheitliches Kassettenverfahren das babylonische Formatwirrwarr verschiedener Rechner beseitigte, ist es auch sinnvoll, sich für alle Z80-Rechner auf einen Anschluß-Standard für die Peripherie zu einigen. Hierfür bietet sich der bei professionellen Rechnern weitverbreitete ECB-Bus an, den mit Hilfe eines Adapters nun auch die Schneiderfamilie ‘antreiben' kann. Was der ECB-Bus eigentlich ist und welche Bedingungen er erfüllen muß. war uns einen eigenen Artikel an anderer Stelle in diesem Heft wert. Für dieses Bus-System hat c't nämlich bereits etliche Hardware-Projekte vorgestellt:
Hürden Allzuleicht haben es dabei die Amstrad-Entwickler nicht gemacht, den CPCs die ECB-Welt in ihrer Vielfalt zu erschließen. Für Schwierigkeiten sorgen nicht nur die unüblichen - und nicht ausdekodierten - 16-Bit-Ports sowie die ungewöhnliche Interrupt-Struktur (siehe Schneiders Kern, Teil 1, c't 8/ 85), sondern auch die Unterschiede innerhalb der inzwischen auf drei Mitglieder angewachsenen CPC-Familie. Zweckmäßigerweise bietet der Adapter auch weiterhin einen Standard-Platinenanschluß für die Schneider-Peripherie. Das ist besonders für den CPC 464 wichtig, da sich dadurch problemlos und ohne Umlötaktion eine Floppy-Station (von Schneider. Vortex etc.) anschließen läßt. Um auch hier etwas 'Leistungsreserve' zu bekommen, erhalten auch die Signale für den Platinenanschluß genau wie die ECB-Bus-Signale über die vier Bustreiber (LS244 und LS245) eine kräftige Verstärkung. Beim CPC 664 und CPC 6128 befinden sich Floppy-Controller und Floppy-ROM ja bereits mit im Rechnergehäuse, also auf der anderen Seite des Adapters, was eine etwas aufwendigere Umschaltung der Datenrichtung (des bidirektionalen LS245) notwendig macht. 16/2 = 256 Mit 16 Bit lassen sich theoretisch 65536 Portadressen ansprechen. Da aber wohl kaum jemand einen so riesigen Peripherie-Bedarf hat, haben sich die CPC-Entwickler auf maximal zehn Geräte beschränkt (vier interne und sechs externe). Das Adreßbit A10 entscheidet dabei, ob es sich um ein externes oder ein im Rechner bereits eingebautes internes ‘Gerät' (Ga-te-Array, Video-Chip, Centro-nics-Ausgang, 8255-PIO) handeln soll. Al3 dient zusammen mit den Datenbits zur Selektion eventuell vorhandener Expan-sion-ROMs. Die verbleibenden vier Bits (A9,A8,A1,A0) können beliebig zur Steuerung des durch die übrigen Bits ausgewählten Geräts eingesetzt werden. Für den ECB-Adapter ist insbesondere das Adreß-Bit AIO (interner/externer Port) von Bedeutung. Um auf einen ECB-Port zugreifen zu können, muß A10 low sein (und A13 sowie A9 auf high). Nur dann wird nämlich das Signal 10RQ über den Adreßdekoder LS 138 (IC9, Ausgang Y5) an den ECB-Bus weitergereicht. Die Adapterschaltung ist so ausgelegt, daß sie auch eine korrekte Interrupt-Behandlung für den ECB-Bus ermöglicht. Dazu ist es nötig, daß die Peripherie die Antwort auf einen Interrupt von der CPU erhält, das sogenannte Interrupt Acknowledge (INTACK), das aus der Signalkombination Ml und IORQ gleichzeitig auf low - besteht. Diese Kombination wird von einem OR-Gatter in IC10 ‘erkannt', und das erzeugte INTACK-Signal sorgt dafür, daß unabhängig von irgendwelchen Portadressen das IORQ-Signal auf den ECB-Bus kommt (über ein UND-Gatter von IC6). Auf der Software-Seite ist für einen Zugriff auf einen 8-Bit-ECB-Port also in bester Schneider-Manier weiterhin eine 16 Bit Portadresse nötig. Hierbei müssen die oberen fünf Adreßbits (All bis Al5) gesetzt sein, da sich sonst vielleicht gleichzeitig der Video-Controller angesprochen fühlt oder der Drucker losrattert. Auch A9 muß bei einem PortzugrifT high sein, da die Kombination A9 = 0, A10 = 0, A13=1 als Software-Reset für die ECB-Peripherie interpretiert wird. Folglich sind die Adressen &FAxx und &FBxx für die ECB-Ports xx und &F8xx und &F9xx für den Software-Reset auserkoren. Die Adreßlage für den Reset ist so gewählt, daß sie der Adresse des System-Resets(&F8FF) entspricht, den die Schneider-Firmware beim Einschalten oder nach CTRL-SHIFT-ESC ausgibt. Für einen ordnungsgemäßen Reset der üblichen Z80-Bausteine muß das Reset-Signal einige Taktzyklen auf low liegen, so beispielsweise bei Mostek: SIO: ein Takt,Normalerweise ist die Dauer eines I/O-Zugriffs mit etwa zweieinhalb Takten dafür etwas knapp. Beim Schneider aber helfen die zusätzlichen WAIT-Zyklen kräftig mit (siehe ‘Vertrackte Warte-Takte', c't 9/85), so daß der Reset-Puls bei OUT (C),A drei zusätzliche Takte erhält und nun lang genug ist. |
S1.8 off | S1.4 on |
S1.7 on | S1.3 on |
S1.6 off | S1.2 on |
S1.5 on | S1.1 on |
Die Floppy-Station nimmt dann im ‘Raum der Portadressen' nur noch den Bereich von xx = &7C bis xx = &7F in Anspruch. Alle anderen Adressen stehen dem ECB-Bus zur freien Verfügung.
Beim CPC 664 oder 6128 ist die übliche Schalterstellung bei Anschluß einer seriellen Schnittstelle:
S1.8 on | S1.4 on |
S1.7 on | S1.3 on |
S1.6on | S1.2 on |
S1.5 off | S1.1 on |
Die für den ECB-Bus freibleibenden 8-Bit-Adressen sind demnach xx = &80 bis &FF, wovon die serielle Schnittstelle nur die Adressen &DC bis &DF belegt.
Richtungswechsel
Da die Daten in zwei Richtungen ‘fließen' können - von der Peripherie zur CPU und umgekehrt hat die Adapterschaltung dafür zu sorgen, den bidirektionalen Datentreiber (LS245, IC3) immer rechtzeitig umzuschalten. In der Ruhestellung ist der Treiber auf Schreiben (aus der Sicht der CPU) gestellt. Die Peripherie akzeptiert die anstehenden Daten aber nur, falls gleichzeitig auch das WR-Signal aktiviert ist.
Unter drei Voraussetzungen soll der Treiber nun von außen an-kommende Daten auf den CPU-Datenbus legen.
Bei den Ports ist die Sache scheinbar einfacher, da ja wie schon beschrieben das Adreßbit A10 über intern/extern entscheidet. Nun wird aber die Floppy-Station grundsätzlich als externes Gerät angesehen, egal ob sie eingebaut ist oder nicht. Daher muß man über den Schalter S1.8 der Umschaltlogik die ‘Lage' der Floppy-Station mitteilen. Bei S1.8 auf'on' (eingebaute Station) interpretiert sie alle Portadressen xxS&7F als intern und schaltet beim Lesezugriff den LS245 auf Schreiben (IC11a, IC12c, IC10c, IC5b).
Mit IM 2
Ein besonderes Augenmerk verdient die Behandlung der Interrupts. Viele ECB-Bus-Karten haben Interrupt-Quellen ‘on board', die korrekt bedient werden wollen.
Der Schneider läuft normalerweise im Interrupt-Mode 1, das heißt, daß die CPU bei einem Interrupt immer das Programm ab &38 ausführt. Da aber die CPCs auch über periodische, interne Interrupts verfügen (300mal pro Sekunde), ergibt sich das Problem, wie man zwischen externen und internen Interrupts unterscheiden kann.
Wie schon in der Serie über des Schneiders Kern ausgeführt, haben sich die CPC-Entwickler hier etwas Besonderes einfallen lassen. Die Interrupt-Routine prüft nämlich nach einiger Zeit nach, ob die Interrupt-Anforde-rung immer noch besteht. Falls nein, interpretiert sie den Interrupt als intern, im anderen Fall vermutet sie eine externe Quelle und führt dann die User-Interrupt-Routine (Sprungvektor steht in &3B) aus. Diese Behandlungsroutine muß dann gezielt durch einen OUT- Befehl die unterbrechende Einheit zur Rücknahme der Interrupt-Anforderung veranlassen.
Diese Art der Interrupt-Be-handlung entspricht allerdings nicht den Bedürfnissen der üblichen Z80-Peripherie-Bau-steine, wie man sie meistens auf den ECB-Karten vorfmdet. Man hat jedoch mehrere Möglichkeiten zur Abhilfe:
Wenn sich der Rechner mal wieder jenseits vöfrGut und Böse im ‘Nirwana' befindet und sich auch mittels CTRL-SHIFT-ESC nicht zur Rückkehr bewegen läßt, bleibt einem nur noch ein Ausweg: der Reset. Das Aus- und Einschalten des Rechners ist jedoch dafür nicht die beste Lösung, da unter Umständen noch versehentlich eingelegte Disketten Schaden nehmen könnten. Außerdem hat man so mit Sicherheit keine Chance mehr, wertvollen Speicherinhalt zu retten.
Der Adapter bietet deshalb auch eine kleine Reset-Logik, die über den Taster T1 und den Monoflop IC7b einen kurzen Reset-Puls auf die BUSRESET-Leitung legt.
Es muß allerdings die Software mithelfen, daß bei der nun folgenden Initialisierung nicht doch noch der gesamte Speicherinhalt gelöscht wird, ein unangenehmer Effekt, den nicht das Kernal-, sondern das BASIC-ROM zu verantworten hat. Falls jedoch ein anderes Hintergrund-ROM die Kontrolle übernimmt, vielleicht sogar mit einem Monitor-Programm, kann man diesen Löscheffekt verhindern.
Den Reset-Vektor im RAM ab &0000 auf eine eigene Routine zu verbiegen, bringt nichts ein, da zumindest der verlagseigene CPC 464 beim Reset anscheinend immer das ROM anwählte. Andernfalls spielte man sonst va banque, ob gerade das RAM (Sekt) oder das parallele Kernal-ROM (Selters) selektiert ist.
Optionen
Wer weder die Interrupts noch den speichererhaltenden Reset benötigt, kann auf die beiden Monoflops (IC7) und die Zeitglieder R1, C1. R2, C2 auch verzichten. Um dann mittels TI einen einfachen Reset auslösen zu können, ist eine Verbindung
zwischen Pin 9 und Pin 12 von IC7 zu ziehen.
Noch mehr sparen läßt sich, wenn man gar keine Schneider-Peripherie am durchgeschleiften Bus anschließen möchte oder wenn man nur wenige Portadressen auf dem ECB-Bus benötigt. Dann können IC5, RN2 und der DIL-Schalter J3 (wahlweise Jumperfeld) entfallen. Lediglich zwei Verbindungen sind statt dessen nötig: Pin 9 von ICH an Pin 8 von IC7 und Pin 1 von ICH entweder an plus (CPC 464) oder an Pin 8 von J3 (CPC 664 oder 6128).
Auch die Dioden D4 und D5 samt Steckbrücken J3 und J4 sind 'optional'. Über sie kann man die Ausblendsignale für RAM und ROM vom ECB-Bus empfangen. Um problemlos mit RAM-Erweiterungen arbeiten zu können, sollte man aber einen Eingriff in den Rechner wagen und das Beschreiben des internen RAMs bei Zugriff auf externe Speicher verhindern (siehe Bild I).
Bild I Wenn man dieses Gatter (huckepack über den vorhandenen 74 LS 32) in den CPC einbaut. kann man problemlos externes RAM anschließen. >>
Die voreingestellte Lötbrücke L1 ist für Spezialisten gedacht, die signalgesteuert den Schneider vom ECB-Bus abkoppeln wollen. So kann man entscheiden, ob dann der Takt mit abgehängt wird (voreingestellt) oder weiterhin als Bus Clock auf dem Bus verbleibt. Auch das Schicksal der Signale RFSH, M1 und HALT hängt von der Einstellung ab. Normalerweise sind sie ebenso wie die anderen CPU-Signale abhängig vom Abkoppelsignal (Pin 12 von X2).
Wer all diese Möglichkeiten nutzen möchte, kann dafür eine Pfostenstiftleiste samt Steckbrücke einsetzen und die Voreinstellung auftrennen.
Schließlich bleibt noch die Steckbrücke J1, die darüber entscheidet. woher der Adapter und der Bus den 'Saft' bekommen. Da das Netzteil im Schneider-Monitor noch einige Reserven hat. reicht die Stromversorgung für den ECB-Betrieb meist noch aus (J1 gesetzt). Im anderen Fall muß wohl oder übel ein zusätzliches Netzteil (5V) her. das man an die vorgesehenen Lötstifte anschließen kann (J1 offen). R6 sorgt dann dafür, daß die Treiber so lange hochohmig sind, bis auch der Rechner eingeschaltet ist.
Auf die Plätze...
Je nach CPC-Typ variiert der Anschluß an den Rechner ein wenig. Beim CPC 464 und 664 hat man die Wahl, ob man den Adapter auf Beinchen" stellt (30 mm bei 464, 10 mm beim 664) und mit einem Platinenstecker direkt anschließt oder ob man lieber ein Stück Flachbandkabel dazwischen hat. Dann erfolgt am besten der Anschluß am Adapter über die Pfostenstiftleiste. Letzteres gilt auch für den 6128. der an der Rechnerseite einen 50poligen 'Centronics'-Stecker erfordert. Beim Direktanschluß des CPC 464 ist noch zu beachten, daß der Platinenstecker leicht nach unten abzuwinkeln ist, damit er auf die schief eingebaute Platine richtig paßt.
.. .Fertig, los!
Wie üblich sollte man nach dem Zusammenbau die Platine noch einmal sorgfältig auf kalte Lötstellen, Kurzschlüsse und andere Unschönheiten überprüfen. Als nächstes sollte man wenn möglich die Stromaufnahme der Platine messen, die etwa 120 mA verschluckt. Nun ist es Zeit, die Platine (mit der richtigen DIL-Schalterstellung) an den Rechner anzuschließen natürlich im ausgeschalteten Zustand.
Als erstes kann man die Funktion des Reset-Tasters testen, dessen Wirkung deutlich sichtbar sein müßte. Falls sich nichts tut, haben Sie vielleicht die Steckbrücke J1 für die Versorgungsspannung vergessen.
Für das weitere Testen aller Busfunktionen und zur eventuellen Fehlersuche wäre der ECB-Bus-Monitor aus c't 9/85 ideal. Falls Sie selbst sich noch keinen zusammengebaut haben: vielleicht könnte ein Freund (oder auch eine Freundin?) Ihnen für ein paar Stunden dieses praktische Werkzeug überlassen.
Zum Testen stellen Sie den Monitor auf &FB80, WR und IORQ. Wenn Sie nun
Wenn Sie den Monitor auf &BDD3, Ml und RD stellen. Wait zulassen und dann einen Reset auslösen, passiert auf dem Bildschirm erstmal gar nichts -nur das Wait-Lämpchen leuchtet auf. Nun läßt sich mit dem Wait-Taster auf der Monitor-Karte Zeichen für Zeichen der Initialisierungsmeldung durch-steppen.
Wenn soweit alles läuft, können Sie davon ausgehen, daß der Adapter funktionsbereit ist und sich nun mit der Eprommer-, I/O-, Floppy- oder Speicherkarte beschäftigen.
Der Adapter bietet vier ECB-Steckplätze und auch einen gepufferten SchneiderBus.
Es ist schon etwas Logikaufwand erforderlich, um dem Schneider alle Möglichkeiten des ECB-Bus zu erschließen und gleichzeitig weiterhin die Schneider-Peripherie zu bedienen.
| ![]() |
|