Speicher satt

Ein Problem hat mich schon immer beim MFA gestört: Das Speicherbild bzw. der Umgang mit den verschiedenen Speicherkarten. Es gab eine 8K-Karte die man in verschiedene Speicherbereiche einblenden konnte. Dann gab es irgendwann die 16K-Karte, und die Karten mit Boot-EPROM.

Bei all diesen Karten musste jeweils genau darauf geachtet werden welche mit welcher kombiniert und an welchen Speicherbereich diese jeweils aktiv war.

Eine Idee

Die ersten Ideen einer flexibleren Speicherkarte waren relativ schnell geboren. Sie sollte die vollen 64KB abdecken und wenn möglich sogar mehr über ein noch zu entwerfendes Banking-Verfahren. Auch die Boot-Eprom-Funktion sollte wieder realisiert werden.

Für die Auswahl des Paging-Bereiches kamen verschiedene Ideen in Frage. Allen voran über einen Out-Befehl. Doch hier wäre vermutlich irgendwann das Problem aufgetreten, dass es zu Überschneidungen bzw. überlappung mit bestehendenen Interfacekarten kommen könnte. Andere Alternativen mit PAL-Chips wurden ebenfalls verworfen, da aktuell keine entsprechende Programmierumgebung vorhanden ist und der Charme des MFA darunter leiden könnte. Auch das jederzeitige Auslesen sollte irgendwie machbar sein.

Heraus kam eine direkte 16-Bit Speicheradressierung die beliebig einstellbar ist. Durch das Schreiben in eine Speicherzelle wird die entsprechende Paging-Seite in einen einstellbaren Speicherbereich eingeblendet. Durch das Schreiben in die Speicherzelle kann diese im Programmcode jederzeit wieder in Erfahrung gebracht werden.

Auch eine Anzeige der aktuellen Paging-Seite wäre nett, und so kommt nun auch eine 7-Segment-Anzeige mit auf die Platine.

Der erste Entwurf der Platine, der eher einem Prototyp gleicht. Denn der erste Entwurf der Speicherkarte hatte 3 grobe Layout und Schaltungsfehler.

Peinlichkeit 1: Bei der Anzeige-LED zum aktiven ROM wurde doch glatt der Vorwiderstand vergessen.

Peinlichkeit 2-4: der 7486 reagiert nicht zuverlässig auf Low-Input, deshalb wurde nachträglich auf High-Signal für die Adress-Selektion umgestellt

Die überarbeitete Version der RAM/ROM-Paging-Karte

Die fertige RAM-Karte

Die Frontblende mit Anzeige-LED und Schalter für das manuelle aktivieren des EPROMs

Die Speicherkarte in Betrieb (Paging-Seite 7 ausgewählt)

Funktionsbeschreibung der Karte

Grundsätzliches

Die Karte besteht im wesentlichen aus vier 32kb Speicher-Chips (27256 und 2 x 62256 o.ä.). Ein zusätzlicher 32KB RAM-Chip ist das Paging-RAM.

Paging-Funktion

Der zusätzliche Paging-RAM-Chip (IC4) wird in 8 jeweils 4kb-Seiten in den vorhandenen MFA-Speicherbereich 8000 – E000 eingeblendet. Der gewünschte Bereich ist dabei über den DIP-Schalter SW1 auswählbar. Achtung: F000 macht beim MFA wenig sinn, denn dieser Bereich ist ja vom System belegt, unter anderen der Stack.

Die Auswahl der gewünschten Seite wird über einen Memory-Write-Befehl auf eine, über die Hex-Drehschalter (S1-S4) einstellbare, 16-Bit-Adresse vorgenommen. Über folgenden Code wird eine Seite des RAM-Paging aktiviert:Code

MVI A,03h    ; Seite 4
STA 0FE00h   ; In die per Schalter eingestellte Adress-Selektionsadresse schreiben

Dadurch dass hier gleichzeitig geschrieben wird (Pageselektor-Chip IC11 und System-Speicher) kann jederzeit die gerade aktuell eingestellte Paging-Seite wieder in Erfahrung gebracht werden.

Boot-Rom-Funktion

Die Boot-ROM-Funktion bzw. das Abschalten des EPROM erfolgt, wie beim Original auch, durch einen Schreib- oder Lesebefehl auf eine Adresse >= 8000h. Ein aktives EPROM wird zusätzlich über die grüne LED an der Frontblende angezeigt.

Da auch hier der untere Speicher parallel zur Verfügung steht, kann bei aktivem EPROM in den Speicher 0000h-7FFFh geschrieben werden. Dies kann man dafür nutzen, über ein den KMD+> – Befehl COPY den gesamten Bereich von 0000h-7FFFh in den Bereich 0000h zu kopieren und anschließend mit einem Lesebefehl auf eine Adresse im Bereich 8000h bis BFFFh das EPROM zu deaktivieren. Nun befindet man sich mit dem MAT-System im RAM. Das hat den Vorteil, nun kann man Inline am Systemcode herumspielen.

CP/M macht’s vor

Dadurch dass das gesamte MAT85+-System zur Verfügung steht, sind auch alle Floppy-Funktionen vorhanden. Somit kann man sein MAT85+-System, das man sich vorher auf Diskette gespeichert hat, nun im “Boot-Vorgang” in den Speicher laden, auf RAM umschalten und durchstarten. Da die Datei sich den Startbereich ja gemerkt hat, muss man dazu nicht mehr viel auswählen, außer dem gewünschten Dateinamen (sprich “OS”-Variante).

Entdeckte Fehler

Bei der ersten Inbetriebnahme ist nach dem Einschalten immer wieder das EPROM abgeschaltet worden und das System lief buchstäblich ins leere.

Erst nach einiger Suche und Einzelschrittmodus des Startvorganges (waren schon einige Schritte die das System durchführt bevor da was passierte) ist ein “Bug” des Systems aufgefallen. Dazu ein Auszug dem dem MAT85-Quellcodes:

191 RESET: LXI SP,MONSTK ;STACK INITIALISIEREN
192        CALL   BPTREM         ;Breakpointtabelle löschen <-- ? Warum jetzt schon 
193        CALL   CASINIT        ;CASSETTEN I/O INITIALISIEREN
194        MVI    A,$C3
195        STA    SERIN          ;ADRESSEN DER SERIELLEN ROUTINEN VORBESETZEN
196        STA    SEROUT         ;MIT DEN NORMALEN ROUTINEN
197        LXI    H,SERI
198        SHLD   SERIN+1
199        LXI    H,SERO
200        SHLD   SEROUT+1
201
202        LXI    H,RESBUF       ;POWER UP ODER WARMSTART ?
203        MVI    A,$5A
204        CMP    M
205        JZ     TASTERRESET    ;WARMSTART, RAM IST SCHON INITIALISIERT
206        MOV    M,A            ;POWER UP, BZW. KALTSTART
207        LXI    H,BRAM         ;RAM INITIALISIEREN (=0 SETZEN)
208        MVI    C,ERAM-BRAM
209 RESET2: MVI    M,$0
210        INX    H
211        DCR    C
212        JNZ    RESET2
           CALL   BPTREM         ;Die Breakpoint-Tabelle erst hier zu
                                 ; löschen macht hier mehr Sinn
213        LXI    H,USRSTK       ;ANWENDER-STACK INITIALISIEREN
214        SHLD   SPWERT
215        MVI    A,'H'
216        STA    FORMAT         ;FORMAT = HEX
217        CALL   SERINIT        ;SERIELLEN I/O INITIALISIEREN
218        CALL   LBINIT         ;LABELTABELLE LOESCHEN
219        CALL   WCRLFI
220
221               .text  'BFZ-MONITOR VERSION 1.8',LF,$0
222
223        CALL   HELP           ;ALLE KOMMANDOS AUSDRUCKEN

Alles anzeigen

Die Zeile 192 müsste meines Erachtens an seiner Stelle entfernt und nach der Zeile 212 wieder eingefügt werden. Denn nach der Initialisierung des Systemspeichers (ab Zeile 208 ERAM-BRAM) darf er gerne seine Breakpoint-Tabelle löschen. Direkt nach dem Einschalten eine noch nicht initialisierte Breakpoint-Tabelle zu löschen, macht zum einen wenig Sinn und kann durchaus zu Schreibvorgängen in einen Speicher >=8000h führen. Dadurch wird aber “aus versehen” das Boot-Eprom abgeschaltet. Da aber das parallele RAM noch keinen vernünftigen Code enthält, geht das schief und das System bleibt hängen (man könnte auch von einem Blue-Screen reden, das wäre gegenüber dem MFA aber fast eine Beleidigung … ;) )

Erweiterungen

Nichts ist perfekt, so auch diese RAM-Karte. Derzeit sind folgende Erweiterungen geplant:

  • Erweiterung auf 64KB Paging-RAM (Seiten 0-F)
    Dazu muss ich aber noch ein wenig Platz auf der Platine schaffen oder die 62256 in der, nur schwer erhältlichen, schmalen Gehäuseform wählen oder in SMD ausführen
  • Batteriepufferung
    Der komplette Speicher über eine Batterie (oder Akku) puffern. Ich verspreche auch, dass ich dafür keine Freileitungen verwende … ::heilig:: MFA – Reaktivierung nach über 30 Jahren
    Das hätte den Vorteil, dass das Betriebssystem nicht immer neu gebootet werden muss, z.B. bei Anpassungen am Programmcode (Löschtaste sollte aber noch vorhanden sein)
  • EEPROM-Unterstützung
    Eventuelle Anpassungen zur Nutzung von EEPROM-Bausteinen

Wenn jemand noch weitere Ideen hat, gerne her damit. Wenn diese umsetzbar sind, kann die Karte ja nur noch besser werden.

Hey CPU – was machst Du denn gerade?

Die nur halbfertig montierte CPU-Karte sollte nun auch fertiggestellt werden. Nur eine Frontblende mit einem Loch für den Resettaster ist aber irgendwie zu wenig.

Gerade im Entwicklungsmodus wäre es doch nett, wenn die auf der BUS-Signalanzeige herausgeführten Signale auch ohne diesen angezeigt werden könnten. Diese Idee führte dann zu einer sehr einfachen LED-Anzeige der wichtigsten CPU- bzw. IO/Memory-Signale.

Diese kleine Platine findet auch als Huckepack-Einheit auf der CPU-Karte platz und wird direkt am ECB-Steckplatz verdrahtet.

Die Zusatzplatine wird mit Abstandshalter direkt auf die CPU-Karte montiert

Die Frontblende nun im professionellen Outfit

Neue Stromversorgung für den MFA

Nachdem nun die ersten Schritte zur Reaktivierung des MFA-Computers erfolgt sind, musste unbedingt eine vernünftige Stromversorgung her. Denn dieser Schandfleck aus der Bastelzeit war nicht nur grauslich, da geht es schließlich auch um Sicherheit.

Doch das MFA-Originalnetzteil ist auch nicht gerade der Brüller. Denn diese Einheit dient mehr der Wärmeerhaltung anstatt der Stromversorgung. Vielleicht sollte man hier zuerst über einen Kaffeetassenhalter zur Wärmerückgewinnung nachdenken …

Nach ein wenig Recherche bei den einschlägigen Elektronik-Dealern habe ich mich dann für das Schaltnetzteil RT-65B entschieden. Neben der kompakten Bauform liefert dieses Netzteil auch die MFA-typischen Spannungen.

Bezugsquelle: Reichelt, Artikel-Nr. MW RT-65B

Für die Montage wurde dazu kurzerhand eine Lochrasterplatine als Träger zweckentfremdet und die Anschlüsse entsprechend verdrahtet:

Jetzt noch die Zugentlastungen montieren, und ab ins Gehäuse.

Da fehlt doch jetzt was?

Doch wie sieht es jetzt mit der Blende bzw. den typischen 4mm-Laborbuchsen der ursprünglichen MFA-Spannungsversorgung? Eine Spannungsstabilisierung ist ja nun nicht mehr erforderlich, denn das Schaltnetzteil liefert sehr saubere Spannungen. Erst mal die Doku des Originalnetzteils raussuchen und mal schauen was man daraus machen kann. Denn mit dem freien gewordenen Steckplatz kann man ja eventuell etwas nützlicheres anfangen.

Die 4mm-Buchsen und die Kontroll-LEDs sollten auf jeden Fall wieder rein. Auch das (noch nie benutzte und fragwürdig erzeugte) Taktsignal wäre schön, wenn das (auch nur aus Nostalgiegründen) wieder verfügbar wäre. Und wie wäre es mit USB-Anschluss für reine Stromversorgung? Denn heut zu Tage werden viele Komponenten über USB mit Strom versorgt und von solchen Steckplätzen hat man ja nie genug.

EAGLE ist wie Fahrrad fahren

Nein, definitiv nicht! Meine letzte Eagle-Erfahrungen liegen auch schon 30 Jahre zurück und seit der Zeit hat sich offensichtlich einiges getan im PCB-Bereich. Aber nach ein wenig Lektüre und viel rumprobieren, kamen dann wieder die Erinnerungen zurück und diese Platine dabei heraus:

Das ganze jetzt nur noch zum PCB-Hersteller (JLCPCB macht echt einen super Job für überschaubares Geld!) und beim Frontplattenhersteller (Schaeffer AG) eine hübsche Blende fräsen lassen:

Über den USB-Anschluss können nun verschiedene Geräte mit Strom versorgt werden und die Anschlüsse für +5V und GND sind nun auch mehrfach vorhanden (denn meist war immer einer zu wenig).

Der Taktausgang kann nun zusätzlich an der Frontblende abgegriffen werden. Diese Signal ist über den NE555 sowie das Potentiometer auch im Bereich von 30 Hz bis. ca. 200 Hz regelbar. Das symmetrische Rechtecksignal wird durch eine klassische Flip-Flop-Schaltung (TTL 7474) erzeugt. Da in dem Baustein 2 FlipFlops enthalten sind, war auch noch eine Option zum einstellen des Teiler (:2/:4) möglich.

MFA resurrection

M ATRIX FA resurrection oder besser “aus dem Regal wieder zurück ins digitale Leben”.

Nach über 30 Jahren den dieser Computer im Tiefschlaf verbrachte, überkam mich ein schwer zu beschreibender Drang, diesen kleinen Schatz wieder zu bergen und zurück in das digitale Zeitalter zu befördern.

Die ganze Hardware erst mal sichten und zusammen mit der Doku einen ersten Überblick verschaffen. Neben viel Staub wurden auch die ersten Erinnerungen wieder aufgewirbelt. Das waren noch Zeiten, als der Lötkolben nie kalt wurde und die alte Cherry-Klappertastatur etliche Programmier- (und meist verbunden mit Wut-) Ausbrüchen ertragen musste…

Neben den ganzen Karten gab es aber ja noch die entsprechende Doku und Aufzeichnungen die sich aus der damaligen Zeit auch noch in Ordnern, Mappen und als lose Blätter irgendwo angesammelt hatten.

Hier gilt es jetzt erst einmal einen Überblick zu verschaffen. Denn unter anderem musste auch mal geklärt werden, für was diese teilweise schon als merkwürdig anmutenden Umbauten gut waren.

So fand sich auf der 8-Bit-Ausgabebaugruppe eine zusätzliche Lochrasterplatine wieder:

Diese Erweiterung könnte ein Soundgenerator sein, der zwei kaskadierte 74193 zu einen “programmierbaren” Frequenzgenerator zweckentfremdet. Aber sicher bin ich mir da nicht mehr so richtig. Würde aber auch den Taktgenerator (4093) erklären. Der Schalter war vermutlich nur für den Nervmodus ein/aus.

Ein ebenso interessantes Bild, gibt die Änderung auf der 8KB-Speicherkarte ab:

Eine interessante Verdrahtung bei dieser Speichererweiterung. Auch hier liegt die Wahrheit mehr in der Vermutung. Definitiv aber eine Aufrüstung der 2K-RAM-Bausteine auf 8K und zusätzlich (vermutlich) eine Akku-Pufferung der RAM-Chips, denn sonst machen die 10kOhm-Widerstände am OE-Signal nicht so richtig Sinn. Da aber kein Akku montierrt war, blieb mir hier zum Glück die aufwändige Sanierung der Hinterlassenschaften von “inkontinenten Akkus” erspart.

Apropo Strom: ohne Strom brennt auch in der kleinsten Hütte kein Lichtlein. Aber diese Stromversorgungs-Einheit an der Stelle des Original-MFA-Netzteils kommt definitiv in die Kategorie: “elektrische (Jugend-)Sünden”. Denn professionell sieht definitiv anders aus und besteht nicht aus einem ausgeschlachteten und provisorisch eingebauten PC-Netzteil…

Andere Karten sind meist nur geringfügig modifiziert bzw. nicht vollständig aufgebaut. Allen voran eine der CPU-Karten mit dem per Zweikomponentenkleber “montierten” Reset-Taster. Damals ging mir eben Funktion vor Perfektion. Der Quarz der CPU befand sich hier übrigens auf der Rückseite der Platine. Fragt mich bitte nicht warum …

Und was kommt jetzt?

Doch wie geht es jetzt mit dem ganzen Zeug weiter ? Sichten, entstauben und wieder einmotten?

Nix, da! Zurück in die gute alte Welt der 8-Bit-Mikrocomputer. Scheiß auf grafische, überzüchtete 64Bit-Umgebungen, Mausgeschubse und perfekt gestylte Oberflächen. Ein blinkender Cursor reicht doch, oder?

Um eine so alte Kiste aber wieder in Betrieb zu nehmen, stehen ja grundsätzlich zwei Varianten zur Verfügung: Strom drauf und schauen wo es knallt, raucht und stinkt oder alles akribisch durchprüfen, messen und das ganze schrittweise und vorsichtig in Betrieb nehmen.

Ich habe mich dann für die Version “no-risk-no-fun” entschieden und siehe da: Ta-ta die Maschine läuft!

Da noch ein falsches EPROM auf der Speicherkarte steckte, kam hier noch nicht der (unbewusst lang vermisste) MFA-Monitor. Dieses Problem lies sich aber durch einen Tausch mit dem korrekten EPROM schnell beheben und der Tunnel in die Vergangenheit war geöffnet.

Alle Karten liefen übrigens auf Anhieb wieder (!) und die eine oder andere Testfunktion war über den BUS-Signalgeber auch schnell wieder aus dem gedanklichen Archiv hervorgekramt.

Zum rumspielen dann mal die eine andere Zeile in Assemblercode zusammengenagelt und über den AD-Wandler visualisiert.

Fazit?

Das ganze sieht doch mal richtig gut aus, die Kiste läuft wieder als wenn Sie gerade eben erst ausgeschaltet wurde.

OK, nun kann’s ja wieder los gehen.

Fortsetzung folgt … 🙂