Funkamateur 02/90

 

EPROM-Floppy bis 512 KByte für den AC1

H. VENZKE; J. SCHULZ - Y31HO; M. SCHULZ

Oft benötigte Programme wie z.B. Textverarbeitung, BASIC-Interpreter, Druckertreiber u.a. sollten stets verfügbar sein, um schnell auf sie zugreifen zu können. Neben der Diskette ist für diesen Zweck die Speicherung im EPROM zweckmäßig; hier besteht dazu noch der Vorteil eines schnelleren Zugriffs.

Die in diesem Beitrag vorgestellte ROM-Floppy ermöglicht den Aufbau einer bis zu 512 KByte großen EPROM-Bank. Prinzipiell ist diese an allen Z80-Rechnern einsetzbar, da sie eine interne Adressierung enthält und lediglich das Bedienprogramm anzupassen ist. Der Einsatz am AC1 bedingt folgende Hardwarevoraussetzungen: 32-Zeilen-Bildschirm, minimal 16 KByte Arbeitsspeicher, Betriebssystem nach FA 1/85 und 1/86.

Konfiguration und Adressierung

Die Konfiguration der ROM-Floppy bedingt den Einsatz von EPROMs gleicher Speicherkapazität auf allen Steckplätzen. Die Adressierung der EPROMs erfolgt durch eine auf der Platine integrierte PIO. Port A enthält dabei den niederwertigen und Port B den höherwertigen Adreßteil der EPROM-Adressen. Ein Portadressendekoder erzeugt die Portadresse (in Viererblöcken) für die PIO und die für die Lesekanäle der EPROMs.
Bei der Arbeit mit einer 512-KByte-Bank wird der gesamte Speicherbereich in acht 64-KByte-Blöcke eingeteilt. Dazu stellt der Portadressendekoder zwei zusammenhängende Viererblöcke als Lesekanäle bereit. Man benötigt also insgesamt 12 Portadressen bzw. drei Viererblöcke für eine 512-KByte-Bank.
Ein zweiter DS 8205 erzeugt aus den internen EPROM-Adressen (bei Bänken über 64 KByte zusätzlich aus den Adressen A0 bis A2 des AC1) deren Chipselect-Signale. Entsprechend den zum Einsatz gelangenden EPROMs wird die Dekodierung in Stufen zu 2-, 4-, 8-, 16-, 32- und 64-KByte-Stufen realisiert. Bei Bänken unter 64 KByte ist keine vollständige Dekodierung erforderlich. Die Begrenzung der Bankgröße erfolgt durch die Software.
Ein DS 8286 entkoppelt den Rechnerbus von der EPROM-Bank. Die Umschaltung der Datenrichtung erfolgt durch das negierte RD-Signal. Das /OE-Signal entsteht durch Verknüpfung mittels zweier Gatter eines DL 086 aus dem Chipselect-Signal der PIO und den Portadressen der Lesekanäle der EPROM-Bank.

Aufbau der Baugruppe

Zum Bohren der Leiterplatte sollte man möglichst einen 0,8-mm-Bohrer verwenden. Vor dem Bestücken ist eine sorgfältige Kontrolle auf Schlüsse und Haarrisse durchzuführen. Danach erfolgt zunächst das Einlöten aller Durchkontaktierungen und Drahtbrücken entsprechend dem eingesetzten EPROM-Typ (Vergleich mit Stromlaufplan und Tabelle der Brücken). Die Durchkontaktierungen sollten sehr flach ausgeführt werden, da sie zum Teil unter den Schaltkreisen und Fassungen liegen. Die Verbindungen von der PIO (L28, L29 usw.) zum DS 8205 sind nach Vergleich von Stromlaufplan und Bestückungsplan nach dem Bestücken der Leiterplatte einzulöten. Nach dem vollständigen Bestücken untersuche man die Platine noch einmal auf Zinn brücken und vergessene Lötstellen hin.

Inbetriebnahme und Fehlersuche

Nach dem Anstecken der Baugruppe an den AC1-Bus (noch ohne EPROMs!) ruft man das Programm "ROMCOPY" (siehe Listing) auf. Nach einigen Sekunden muß dann die Ausschrift "Keine Programme im EPROM gefunden" erscheinen. Nun wird ein EPROM (Platz 1) gesteckt und das Programm erneut aufgerufen. Beim Stecken der EPROMs beachte man unbedingt, daß die Typen 2716 und 2732 "kürzer" als die EPROMs höherer Speicherkapazität sind und daher so in die Fassung zu stecken sind, daß sich Pin 1 des EPROMs im Kontakt 3 der Fassung befindet (also "unten" einsetzen!). Bei ordnungsgemäßer Funktion erscheint nun auf dem Bildschirm die Liste der gefundenen Programme. Dieser Vorgang wird anschließend mit allen Steckplätzen wiederholt.
Erkennt der Computer kein Programm im EPROM, sollte zunächst die Funktion des Bustreibers geprüft werden. Dabei ist festzustellen, ob die Umschaltung des Datentransports (/DIR) ständig erfolgt und die Freigabe der Ausgangsstufen (/OE - Signal nur während des Aufrufs des Steuer-Programms nachweisbar) gewährleistet ist. Dabei leistet ein Oszilloskop gute Dienste. Eine weitere Fehlerquelle kann die Unterbrechung einer Datenleitung zwischen EPROM und Bustreiber sein. Das Fehlen des /CE-Signals zeigt ein mehrmaliges Auslesen des Dateninhalts nur eines EPROMs an. Beim Aufbau der Baugruppe innerhalb einer Versuchsserie gab es keine wesentlichen Probleme außer Haarrissen und vornehmlich auf der Bestückungsseite vergessenen Lötstellen. Bei der Erprobung trat an einem AC1 ein Problem auf, das die CP/M-Umschaltung betrifft. Beim Lesen der EPROMs schaltete der AC1 auf CP/M um und war nur noch durch RESET zu befreien. Dies hängt offensichtlich von der jeweilig realisierten Hardwarekonfiguration ab. Sollte dieser Fehler auftreten, so ist Abhilfe zu schaffen, indem man wie folgt verfährt:
- IOSEL7 vom Eingang T des DL 074 der CP/M-Erweiterung trennen
- IOSEL7 und WR (CPU Pin 27) an ein Gatter eines DL 002 führen
- den Ausgang des Gatters an den Eingang T des DL 074 legen.
Damit ist eine einwandfreie Funktion auch in diesem Ausnahmefall gewährleistet, man lese dazu auch im Heft 4/89, S. 169, nach!
Wird die EPROM-Bank nicht vollständig mit EPROMs bestückt, kann es zu Lesefehlern beim Kopiervorgang kommen. In diesem Fall ist der interne Datenbus entsprechend der Empfehlung aus [1] mit Widerständen abzuschließen.

Die Software

Das Steuerprogramm belegt den Speicher von 0800H bis 0FFFH des AC1 (ehemals Platz des Mini-BASIC). Die Zellen 0803H bis 0806H enthalten eine Steuertabelle zum Programmablauf:
#0803H enthält das Steuerbyte für Bankgrößen über 64 KByte. Dabei gilt folgende Belegung:
00H - Bank bis 64 KByte,
08H - Bank bis 128 KByte,
0CH - Bank bis 256 KByte,
0FH - Bank bis 512 KByte,
88H - Bank bis 128 KByte mit automatischer Suche in der eingestellten Bankgröße,
8CH - Bank bis 256 KByte mit automatischer Suche,
8FH - Bank bis 512 KByte mit automatischer Suche.
Alle anderen als die hier aufgeführten Bytes führen zum Programmabbruch.
#0804H - 63H: Portadresse der PIO - Steuerwort Kanal B
#0805H - 64H: Niederwertigste Portadresse für Lesekanäle
Die hier angeführten Bytes gelten als Beispiel und können vom Anwender selbst, entsprechend der jeweiligen Dekodierung, geändert werden.
#0806H - enthält das Steuerbyte für die Bankgröße unter 64 KByte:
00H: Bank bis 64 KByte,
0CH: Bank bis 48 KByte,
80H: Bank bis 32 KByte,
40H: Bank bis 16 KByte,
20H: Bank bis 8 KByte.
Auch hier kann der Anwender die Bytes entsprechend der aktuellen Bankgröße selbst eintragen.
Die Zelle 0809H (original belegt mit FFH) ermöglicht den Eintrag eines eigenen Kennbuchstabens zum Start mit diesem. In diese Zelle ist das Eintragen des gewünschten ASCII-Kodes vorzunehmen.

Programmablauf

Nach dem Start mit J 800 oder dem Kennbuchstaben entsprechend Eintrag werden die PIO initialisiert und der Bildschirm in drei Bereiche geteilt. Der obere Teil enthält den Titel und Angaben für den Nutzer. Der untere Bildschirmteil, dient als Bedienerführung. Im mittleren Teil steht ein Puffer von 17 Zeilen zum Eintragen der in der Bank vorhandenen Programme (maximal 16) zur Verfügung. Wird die Anzahl von 16 Programmen überschritten, wird die Suche unterbrochen. Nach einer Quittung rollt der mittlere Bildteil nach oben. Dabei geht das erste eingetragene Programm für das Kopieren verloren, da dies aus dem Bildschirm heraus geschieht. Darum ist es bei der Bedienung zweckmäßig, den Suchvorgang vor dem Rollen abzubrechen ^C). Das gewünschte Programm ist in den RAM zu kopieren und erst danach die Suche bei Bedarf fortzusetzen.
Bei Bankgrößen ab 128 KByte bietet das Programm die Möglichkeit, nur in einer der 64-KByte-Bänke oder in allen Teilbänken zu suchen.
Die Suche erfolgt nach einem ähnlichen Verfahren wie im Monitor des AC1. Es werden vier Kennbytes gesucht, die Bestandteil des Programmkopfes (Headers) sind. Die darauf folgenden Daten zum Programm gelangen in den Inhaltspuffer und die Suche nach einem neuen Header wird fortgesetzt. Diese beginnt immer ab EPROM-Adresse 0000H.
Das Kopieren der Programme in den RAM erfolgt aus dem Inhaltspuffer. Dies geschieht durch Eingabe der zugehörigen Programmnummer. Nach Bestätigung erfolgt das Kopieren des gesamten Programms in den RAM. Bei Programmen mit Autostart kann man zwischen Kopieren mit oder ohne Autostart wählen. Bei verschiebbaren Programmen fragt das Steuerprogramm vor dem Kopiervorgang die Zieladresse im RAM ab, die es im Hex-Format erwartet. Eingaben unter 1900H ignoriert das Steuerprogramm. Nach ENTER erfolgt das Kopieren. Nach dem Kopieren ohne Autostart können weitere Programme aus dem Puffer in den RAM kopiert oder die Suche fortgesetzt werden. Das Kopieren und die Suche sind mit ^C jederzeit abzubrechen.

Der Header und seine Erzeugung

Der Header enthält alle zur Funktion des Kopierprogramms erforderlichen Angaben des Nutzerprogramms. Deshalb hat er unmittelbar vor dem Nutzerprogramm im EPROM zu stehen. Das bringt einen unmittelbaren Vorteil bei Änderungen und Erweiterungen, da dann nur der betroffene EPROM zu ändern ist. Nur bei Erweiterungen der EPROM-Bank sind im Steuerprogramm die entsprechenden Kennbytes neu zu programmieren. Im Header ist ebenfalls festgelegt, ob das Programm selbststartend oder verschieblich ist. Damit beeinflußt der Programmkopf gleichzeitig den Ablauf des Steuerprogramms. Das Abspeichern von Programmen ist somit lückenlos über den gesamten Bereich möglich. Ebenso können sich Programme über mehrere EPROMs oder über mehrere Teilbänke erstrecken. Dabei ist zu beachten, daß die Länge eines einzelnen Programms nicht 64 KByte übersteigt!
Das Steuerprogramm ermittelt die im Inhaltspuffer angegebene EPROM-Adresse selbständig, dabei gibt die erste Ziffer die Banknummer an, die vier folgenden den Speicherplatz im EPROM, auf dem das Nutzerprogramm beginnt.
Im folgenden sei ein Beispiel zum Erstellen des Headers ausführlich beschrieben.
1. Die Kennbytes für die Suchroutine sind 00H, 09H, EDH und 42H. Sie stehen in dieser Reihenfolge zuerst im Header.
2. Für den Programmnamen sind 16 Bytes vorgesehen. Der Programmname ist als ASCII-Kode einzugeben.
Beispiel:
Basic 8K
426173696320384B2020202020202020
Nicht benötigte Zeichen sind mit Leerzeichen (20) aufzufüllen.
3. Die Angabe der Adressen erfolgt ebenfalls im ASCII-Kode als Hex-Zahl.
Beispiel:
Anfangsadresse 4 0 0 0
34303030
Endadresse 5 F F F
35464646
Startadresse 4 0 0 0
34303030
4. Programme ohne Autostart erhalten als Startadresse 0000H.
5. Verschiebbare Programme erhalten die Anfangsadresse 0000H.
Als Endadresse wird dann die Programmlänge angegeben (siehe Beispiel Berechnung der relativen Startadresse).
6. Sollen verschiebbare Programme mit Autostart kopiert werden. ist als Startadresse die relative Startadresse + 1 einzutragen. Die relative Startadresse wird folgendermaßen bestimmt:
4003H - Programmstart
-4000H - Programmanfang
0003H - Relative Startadresse
+0001H
0004H - einzugebende Adresse
Ohne Autostart gibt man als Startadresse ebenfalls 0000H an. Alle Angaben erfolgen ohne Zwischenraum.
Als abschließendes Beispiel noch ein kompletter Header für den DEB 31:
0000 0009ED42444542203331202020202020
0010 20202020303030303138363130303031
Es handelt sich hierbei um ein verschiebbares, selbststartendes Programm. Ab der Speicherplatzadresse 0020H muß dann das Programm DEB 31 folgen. Entsprechend der Länge von 1861H Byte endet das Programm dann auf Adresse 1881H. Der Inhalt von 0000H bis 1881H wird dann auf die freien Speicherzellen in den EPROM programmiert. Ab EPROM-Zelle 1882H beginnt der nächste Header.

Leiterplattenbezug

Im Zuge des Aufbaus der Versuchsserie sind bereits vorab Leiterplatten zu dieser Baugruppe hergestellt worden. Diese enthalten das Layout für den 90poligen Steckverbinder und sind sofort bei der Firma Berkenkamp (Bestellung bitte mit der Bezeichnung "AC1-ROM-Floppy", Preis etwa 25 M) erhältlich. Über unsere Redaktion ist eine Version aus der ersten Serie für 10 M erhältlich, die allerdings einige Deckungsfehler der beiden Ebenen enthält, aber durchaus verwendbar ist. Im Heft 3 erscheint das Layout der Platine zusätzlich für 58poligen Steckverbinder (für K1520- oder Z 1013-Besitzer) auf der 3. US.
Die Redaktion wartet auf den Z 1013-Freak, der das vorliegende AC1-Bedienprogramm für den Z 1013 umschreibt, um diese Platine auch für diesen Computer nutzbar zu machen. Kontakte über unsere Redaktion.

Literatur

[1] Zellner, U.; Jürgens, W.-R.; Heyder, F.: AC1 mit 320-KByte-Speicher,
FUNKAMATEUR 38 (1989), H.9. S.428
[2] Kramer, M.: Praktische Mikrocomputertechnik,
Militärverlag der DDR (VEB), Berlin 1987

145 KByte 69 KByte 415 KByte
Bild 1 Brücken Listing

255 KByte 380 KByte 212 KByte
Bild 2 Leiterseite Bauelementeseite

Funkamateur 05/90

 

Korrektur

EPROM-Floppy für den AC1, H.2/90, S.67

Der Kondensator im Stromlaufplan links unten ist der Stützelko für die Betriebsspannung.
In der Brückentabelle ist beim 27512 folgendes zu berichtigen:
L19 an L27, sowie L20 an L26.


Funkamateur 06/90

 

Korrektur

EPROM-Floppy für den AC1, H.2/90, S.67

Die Brückentabelle ist aufgrund eines Zeichnungsfehlers wie folgt zu ändern:
27128: 21-26 in 21-27,
27256: 20-26 in 20-27 und 21-27 in 21-26.