Mega-Flash-Modul

Das Mega-Flash-Modul wurde von W.Harwardt entwickelt (MEGA-Flash-ROM-RAM, http://buebchen.jimdo.com/8-bit-selbstbau/kc87-z9001/). Es ist softwaremäßig äquivalent zum Megamodul.

Vorteile:

  • 5 gleiche 512KByte ROMs
  • alternativ 5 FLASH-Roms, z.B. Winbond W19C040
  • alternativ 5 RAMs, z.B. zur Nutzung als RAM-Disk
  • frei wählbare I/O-Adresse
  • abschaltbar (über X1:27A in Verbindung mit dem 64K-RAM-Modul)

Gegenüber der Megamodul-Version von Rauscher/Honi enhält dieses Modul aber keinen 32K-RAM. Es werden also normale 16K-RAM-Module, ein 64K-RAM-Modul oder ein 128K-RAM-Modul benötigt, falls der Grundspeicher für ein Programm nicht ausreichend ist.

Download

9.2.2012: Die Suche mit DIR wurde komplett neu geschrieben. Der neue Algorithmus arbeitet nun ca. 3x so schnell und bietet mehr Optionen (s.u. DIR-Befehl).
Sämtliche Parameter werden an das Programm übergeben. So kann etwa mit SAVE test 300,39f ein Programm auf Kassette gespeichert werden, obwohl SAVE (das ist das OS-SAVE der Kassette R0111) selbst als FA-Programm vorliegt und erst in den Speicher geladen und entpackt werden muss, ehe es gestartet wird!

14.2.2012: Es gibt neue Software, z.B. R+MESSE2, eine Demo der Leipziger Herbstmesse 1984. Neu ist CPM: Damit kann CP/M gestartet werden, ohne dass eine Systemdiskette im Laufwerk liegen muss. Das Programm ist für robotron- und Rossendorf-Hardware geeignet. BASIC wurde auf 16 Farben-Unterstützung gepatcht. Der Start von BASIC-Dateien wurde optimiert. Bei eigenen CONS-Treibern wie CRT40P oder CRT80P wird nun automatisch ein angepasstes BASIC gestartet. Mann kann z.B. CRT40P und R+INFO hintereinander starten. u.v.a.m.

Hardware

Megarom ohne GALs für den Z1013 und KC87. Basierend auf dem Funktionsprinzip des Megamodul von Alexander Schön und Speichererweiterungen für den Amstrad CPC mit völlig neu entwickelter und erweiterter Schaltung.

Schaltungs- und Aufbauunterlagen s. http://buebchen.jimdo.com/8-bit-selbstbau/z1013/ und http://buebchen.jimdo.com/8-bit-selbstbau/kc87-z9001/

Vorder- und Rückseite Modul Serie 1.10.2011. Hier mit 5 EPROMs bestückt. Bei Nutzung von FLASH-Speicher muss das Steckfeld oben links anders belegt werden. In dieser Serie war noch eine kleine Änderung nötig (Drahtbrücke auf Leiterseite von Jumper an Steckverbinder B9 statt an B27).

Software

Ende 2011 habe ich eine alternative quelloffene Software geschrieben. Diese besteht i.W. aus einer OS-Erweiterung; damit Programme in allen Bänken gesucht und von dort gestartet werden können. Es ist keine Änderung des OS nötig.

Eigene Programme können einfach ins Modul integriert werden (s.u.).

Zusätzlich zur Modul-Verwaltung stehen einige vom Z1013 inspirierte Kommandos zur Speicherarbeit bereit.

DIR DIR L

Kommando Beschreibung
DIR [suchmuster] Auflisten aller Kommandos
DIR L [suchmuster] Auflisten incl. Banknummer, Bankadr. und Startadr.
DUMP von bis Speicher anzeigen HEX/ASCII
FILL von bis byte Speicher mit Byte füllen
TRANS von ziel anzahl Speicherbereich kopieren
IN port Port einlesen
OUT port byte Portausgabe
RUN adr [port] Programmstart von Adr.
MEM adr Speicher editieren (neue Byte(s) eingeben + Enter, zurück mit R, Ende mit ;)
CLS Bildschirm löschen
C Cursor on/off

DIR [suchmuster]

Alle transienten Kommandos werden aufgelistet. Die Anzeige erfolgt absteigend von FF00 bis 100h, anschließend werden alle nachfolgenden Bänke bis Bank FF jeweils von C000 bis E700 durchsucht. Angezeigt wird nur der Kommandoname.

Programme mit FA-Rahmen werden in Cyan ausgeschrieben.

Die Anzeige kann mit PAUSE angehalten werden. Eine beliebige Taste setzt die Anzeige fort. Mit STOP wird das Kommando abgebrochen.

DIR L [suchmuster]

Alle transienten Kommandos werden aufgelistet. Die Anzeige erfolgt absteigend von FF00 bis 100h, anschließend werden alle nachfolgenden Bänke bis Bank FF jeweils von C000 bis E700 durchsucht. Angezeigt wird die Banknummer, der Kommandoname, die Adresse des Kommandorahmens und die eigentliche Startadresse. Mit diesem Kommando erhält man einen Überblick über die Belegung des Mega-ROM-Moduls.

Bei Programmen mit FA-Rahmen werden angezeigt: Bank, Adr. in Bank, Dateityp, Name, Anfangsadresse, Endadresse, Startadresse, Dateikategorie (s.u.).

Die Anzeige kann mit PAUSE angehalten werden. Eine beliebige Taste setzt die Anzeige fort. Mit STOP wird das Kommando abgebrochen.

Zur Einschränkung der Anzeige kann dem DIR-Kommando ein Suchmuster übergeben werden. Ein * steht dabei für eine beliebige Anzahl beliebiger Zeichen (auch 0!).

Im obigen Bild werden erst alle Kommandos angezeigt, die mit 'T' anfangen, dann werden alle Kommandos angezeigt, die 'R+A' im Namen enthalten. '*D*MO*' sucht nach einem 'D' und irgendwo danach ein 'MO' im Namen.

Das letzte Beispiel '*M*A*' zeigt die Suche nach 'M' und danach 'A' im Namen. Bei 'R+MAT' und 'R+MOSAIK' sieht man, dass der * zwischen 'M' und 'A' einmal für 0 und einmal für 2 Zeichen steht.

9.2.2012: Der Suchalgorithmus wurde komplett neu programmiert. Als Wildcards zur Suche gibt es '*' für beliebige und beliebig viele Zeichen und '?' für genau ein beliebiges Zeichen. Gesucht wird nun nach Namensfragmenten, d.h. eine Suche 'DIR V' listet alle Programme, die ein 'V' im Namen haben. Obiges Beispiel '*M*A*' kann nun als 'M*A' geschrieben werden.

Die nachfolgenden Kommandos arbeiten momentan noch nicht Bankübergreifend. Es wird nur die aktuelle Bank genutzt.

MEM adr (Modify Memory)

Es ist möglich, mit diesem Kommando einen Speicherbereich ab der angegebenen Anfangsadresse byteweise anzuzeigen und gegebenenfalls zu verändern. Es erfolgt die Ausgabe der aktuellen Adresse und des Inhaltes des zugehörigen Bytes. Anschließend wird mit dem Zeichen “#“ zur Eingabe aufgefordert. Soll der alte Inhalt beibehalten werden, ist nur die Enter-Taste zu betätigen, ansonsten wird vorher eine hexadezimale Zahl eingegeben. Es können auch mehrere Byteinhalte, durch Leerzeichen voneinander getrennt, eingegeben werden.

Nach Betätigung der Enter-Taste wird die aktuelle Adresse erhöht und auf der nächsten Zeile fortgesetzt. Wird versucht, einen nicht vorhandenen Speicherbereich oder einen ROM zu beschreiben, erfolgt eine Fehleraussohrift: ER aerr bb, wobei aerr die Adresse und bb den fehlerhaften Inhalt darstellen. Anschliessend wird eine erneute Eingabe erwartet. Diese Fehlerausschrift wird vor allem dann auftreten, wenn versucht wird, nicht vorhandene Speicher oder Festwertspeicher zu beschreiben. Mit Eingabe des Zeichens „R“ kann die aktuelle Adresse bei Bedarf zurückgestellt werden.

Die Komandoausführung wird beendet durch Eingabe eines Semikolon “;“. Die aktuelle Adresse wird als Endadresse übernommen. Mit dem Kommando 'DUMP' kann der aktualisierte Speicherbereich nochmals auf dem Bildschirm angezeigt werden.

DUMP aadr eadr (Display Memory)

DUMP

Mit diesem Kommando können beliebige Speicherbereiche zwischen einer Anfangs- und einer Endadresse angezeigt werden. Die Anzeige des Bereiches zwischen FFF8 und FFFF ist mit dem D-Kommando nicht möglich, dafür muss das M-Kommando verwendet werden. Die Anzeige erfolgt zeilenweise in hexadezimaler Form. Zuerst wird die Adresse des jeweiligen Bereiches ausgegeben, danach folgen acht Byte des Speicherinhaltes, gefolgt von der ASCII-Darstellung. Es wird immer eine Zeile vollständig ausgegeben, auch wenn die Endadresse eine andere Anzahl von Bytes verlangt.

Die Anzeige kann mit PAUSE angehalten werden. Eine beliebige Taste setzt die Anzeige fort. Mit STOP wird das Kommando abgebrochen.

FILL aadr eadr bb

Damit ist es möglich, einen angegebenen Speicherbereich zu löschen oder mit dem Byte bb zu füllen. Wird das Kommando ohne Parameter verwendet, wird der gesamte adressierbare Speicher gelöscht. Weiterarbeit ist dann nur nach Betätigen der Resettaste möglich.

TRANS aadr zadr anz (Transfer)

Es erfolgt ein Transport eines Speicherbereiches ab der Anfangsadresse auf eine Zieladresse mit der festgelegten Anzahl von Bytes. Dabei ist eine Uberlappung der beiden Bereiche möglich.

IN port (Port einlesen)

Der angegebene Port wird gelesen. Das Ergebnis wird angezeigt.

OUT port byte (Portausgabe)

Es wird eine Datenbyte byte auf den Port port ausgegeben.

RUN adr [bank] (Programmstart)

Mit diesem Kommando können Programme gestartet werden, auch wenn sie nicht über einen OS-Kommandorahmen verfügen und somit nicht per Kommandoname ausgeführt werden können.

Ein Programm auf Adresse adr wird gestartet. Mit RET kehrt das Programm zum OS zurück. Optional kann eine Bank angegeben werden. Ist dies der Fall, wird zuerst die Bank aktiviert, ehe das Programm gestartet wird. Dadurch können Programme gestartet werden, die in einer anderen Bank als der Systembank liegen.

CLS (Bildschirm löschen)

Hiermit wird der Bildschirm gelöscht. Es wird das Zeichen ^L an das aktuelle Konsolengerät gesendet.

C (Cursor on/off)

Besitzer eines Z9001/KC87 mit Farbmodul, aber über Antennenkabel angeschlossenen Fernseher sehen keinen Cursor, da dieser als blinkender Farbhintergrund ausgegeben wird. Mit diesem Kommando wird die Cursoranzeige auf s/w umgestellt. D.h., der Cursor wird als blinkendes Quadrat angezeigt. Ein nochmaliger Aufruf dieses Kommandos macht dies wieder rückgängig.

Funktionsweise

Das Modul besteht logisch aus Sicht des Z9001 aus 256 Speicherbereichen (sogenannten Bänken) im Speicherbereich C000-E7FFh. Durch Ausgabe der Banknummer auf Port FFh wird die gewählte Bank aktiv, d.h. im Adressraum des Z9001 ist im Bereich C000-E7FFh der Inhalt dieser Bank zu sehen. Es ist immer nur genau eine Bank aktiv und nutzbar.

Physisch sind die Bänke auf die 5 ROMs wie folgt dargestellt verteilt. Jede Bank wird in 5 2K große Teile aufgeteilt und auf die 5 ROMs aufgesplittet.

(Beim Megamodul sind es nur 3 ROMs; 1+2 und 3+4 sind jeweils zusammen in einem 1-MByte-ROM enthalten. Ansonsten ist es das gleiche Verfahren)

Jeder ROM enthält jeweils 2K große Abschnitte aus ALLEN Bänken.

Wenn man selbst Software in das Mega-Flash-Modul integrieren will, muss man diese Aufteilung in 2K-Häppchen unbedingt beachten!

eigene Software

Das OS des Z9001 ist analog zum CP/M aufgebaut. Die oberste Schicht, die Kommandoeingabe CCP, kann durch ein eigenes Programm ersetzt werden. Dazu dient das Kommando “# “. Die Mega-Flash-Software nutzt genau dies aus, um das CCP zu erweitern.

Zum einen wurde eine Bankrückschaltung integriert; so das Programme beim Beenden wieder die Bank mit der Systemerweitertung (kurz Systembank) aktivieren.

Dadurch kann jede Software, z.B. originale ROM-Modul-Software, unverändert bleiben. Es muss keine spezielle Enderoutine o.a. gepatcht werden.

Zum anderen wurde ein neuer Kommandorahmen eingeführt.

Kurzer Exkurs: Was ist das? OS-Programme werden anhand eines Kommandorahmens gefunden. Dieser OS-Rahmen liegt auf einer xx00h-Adresse und sieht so aus

org	xx00h
jp	start
db	"NAME    "	; genau 8 Zeichen
db	0		; Ende eines Kommandos
db	0		; Ende der Liste

Details s. OS-Handbuch. Die hier stehenden Programmnamen können im CCP eingegeben werden. Das CCP suche den Programmnamen in allen solchen Kommandorahmen und starten bei gefundenem Programmnamen das Programm. Andernfalls erscheint die Ausschrift „start tape“.

Der OS-Kommandorahmen ist im Modul für Programme nutzbar; die im Speicherbereich von C000-E7FF arbeiten (also z.B. Inhalte originaler ROM-Module), oder die eine eigene Umladeroutine besitzen, die das eigentliche Programm erst an die Zieladresse im RAM kopieren und dort starten.

Es gibt nun einen weiteren Kommandorahmen, den FA-Rahmen1). Dieser ist 32 Byte lang und liegt ebenfalls auf einer xx00h-Adresse. Nach dem FA-Rahmen folgt das Programm. Der FA-Rahmen hat folgenden Aufbau:

org	xx00h		; header
db	0FAh, 0FAh	; +0 Kennbytes
db	Dateityp	; +2 0-MC, 1-BASIC (s. includes.asm)
db	"NAME    "	; +3 genau 8 Zeichen
dw	aadr		; +11 Anfangsadresse im RAM
dw	eadr		; +13 Endadresse im RAM
dw	sadr		; +15 Startadresse im RAM (oder FFFFh - nichtstartend)
dw	länge		; +17 (Datei-)Länge des nachfolgenden Programms
db	Dateikategorie	; +19 0-Standard (s. includes.asm)
db	"Kommentar   "	; +20 12 Zeichen, bel., z.B. Autor o.ä.
;	
binclude	programm.bin

Dieser Kommandorahmen ist für beliebige RAM-MC-Programme, aber auch BASIC- Programme nutzbar (geplant ist die Unterstützung weiterer Datetypen z.B. Forth- Programme). Passt das Programm dabei nicht mehr komplett in die aktuelle Bank, wird es einfach in der nächsten Bank fortgesetzt.

Außerdem können alle Programme mit bitbuster_extreme komprimiert sein, um Platz im Mega-Modul zu sparen. Bei komprimierten Programmen muss im Dateityp das Bit 7 gesetzt sein (also 80h zum originalen Dateityp addiert).

MC-Programme mit diesem Rahmen werden zuerst an die korrekte Adresse aadr im Speicher umgelagert und dann auf der Startadresse sadr gestartet. programm.bin ist einfach der binäre Speicherabzug des Programms von aadr bis eadr. Praktisch sind das *.KCC-Dateien OHNE den Kopfblock. (Die Informationen aus dem Kopfblock stehen schon alle im FA-Rahmen; damit spart man ein bisschen Speicher im Mega-Modul).

Basic-Programme werden nach 0401h kopiert. Dann wird die BASIC-Bank zugeschaltet, Basic initialisiert und das Programm gestartet. Für BASIC-Programme ist programm.bin einfach die *.KCC-Datei.

Zur einfachen Konvertierung von *.tap-Dateien ins binäre Format kann das Perl-Programm tap2bin.pl genutzt werden.

Das Mega-Modul kann dadurch einfach um eigene Software erweitert werden: Einfach in einer beliebigen Bank (außer der Systembank) in einem freien Bereich auf einer xx00h-Adresse ein Programm mit OS-Rahmen oder mit FA-Rahmen speichern. Fertig!

1) Falls es jemand interessiert: Den Namen FA-Rahmen habe ich nach den Kennungsbyte FAh gewählt. Dieses Kennungsbyte ist FLASh ohne die nicht Hexa-Ziffern, also FAh
Zuletzt geändert: 2012/02/15 20:22
   
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 3.0 Unported