Disk-OS

Diskettenarbeit im OS-Modus
Volker Pohlers, 2012

Disk-OS ermöglicht eine umfangreiche Unterstützung von Disketten u.a. als Ersatz für den Kassettenrekorder direkt vom Z9001-Modus aus.

Bei der vorliegenden Version wird eine 2MB- RAM-Floppy RAF2008 auf Port 20h korrekt erkannt und als Massenspeicher genutzt. Ebenso ist es möglich, auf Floppy-Disketten zu schreiben. Unterstützt werden alle Standardformate 624K, 720K (MSDOS), 780K, 800K.

Das ganze basiert auf CP/M. Ein originales CP/A-BDOS wurde genutzt und ein passendes BIOS, das im Wesentlichen auf Diskettenfunktionalität reduziert ist, geschrieben. Ziel dieser (und aller anderen) Anpassungen ist es, keinerlei Veränderungen am Z9001 vornehmen zu müssen. So dürfen z.B. keine Systenzellen des OS missbraucht oder normale Systemfunktionen gestört werden.

Komplett neu muss man den CCP-Rahmen zum Initialisieren und ausführen von Programmen schreiben. Ebenfalls sollten CCP-interne Kommandos wie DIR, ERA oder Laufwerkswechsel zur Verfügung stehen. Das Z9001-OS bringt bereits sein eigenes CCP mit; hier muss man also anstelle des CP/A-CCPs „normale“ Z9001-Programme schreiben.

Dann kommt der eigentliche Clou: Die Z9001-BOS-Funktionen zur Kassettenarbeit werden auf neue Routinen umgelenkt, die die RAM-Disk nutzen (bzw. die CP/A-BDOS-Funktionen). Damit laufen alle Programme, die über die Z9001-BOS-Funktionen auf Kassette zugreifen, nun mit der RAM-Disk. Damit das wirklich funktioniert, sind einige Eigenheiten zu beachten (s.u.)

Es ist schon cool, wenn man mit dem normalen OS-SAVE plötzlich auf eine RAM-Disk schreibt :-).

Für einen 100%-igen Kassettenersatz müsste man die Routinen MAREK und KARAM aus dem Z9001-OS ersetzen. Das geht aber nur, wenn man den System-ROM gegen einen EPROM mit einem angepasstem OS austauscht.

Die derzeitige Version DOS4 belegt den Speicherbereich von 4000h-57ffh. Das ist ein Kompromiss, um trotzdem mit BASIC, Asssembler u.v.a. Programmen testen zu können, ohne ständig auf EOR oder anderes achten zu müssen. Der Speicher für Treiber oder andere Systemtools bleibt frei, der Speicher am RAM-Ende (unterhalb C000h) steht auch zur Verfügung.

Die Version DOSX benötigt ein 64K-RAM-Modul, arbeitet dafür komplett im Shadow-RAM. Der gesamte Speicher bis BCFF ist frei verfügbar! Diese Version wird vom Mega-Flash-Modul direkt in den Shadow-RAM geladen. Vorhandende Programme im Speicher (z.B. große Basic-Programme > 12K) werden dabei nicht überschrieben!

In der aktuellen Software zum Mega-Flash-Modul wird der Treiber mit

DOS4 bzw. DOSX

gestartet. (vgl. obiges Bild)

Tipp: Man sollte die RAM-Disk zuerst unter CP/M initialisieren. Dann kann man die Disk sowohl unter CP/M als auch im OS nutzen.

DRIVE lw: Laufwerk wechseln (A:, B:, P:)
DDIR [muster] Inhalt anzeigen (wie DIR unter CP/M)
DDELETE muster Datei(en) löschen (wie ERA unter CP/M)
DOS „disk OS“, Nutzen der DISK-Routinen im normalen OS
CAOS „cassette OS“, Nutzen der Kassettenroutinen im normalen OS
DDUMP muster Datei blockweise anzeigen (nur in DOSX enthalten)
SAVE fname[.typ] aadr,eadr[,sadr] das ist das normale OS-SAVE, funktioniert aber auch mit Disk

Im Z9001-OS kann mit „DOS“ bzw. „CAOS“ zwischen Diskette und Kassette umgeschaltet werden.

Mit

HELP DOS

gibt es eine kurze Hilfe.

DOSX unterstützt 2 Floppy-Laufwerke (robotron) und die RAF2008. Nach dem Start von DOSX mit

DOSX

ist die RAM-Floppy aktiv. Mit

DRIVE A:

wird auf Floppy A: umgeschaltet.

Mit LOAD und SAVE wird nun wie mit Kassette gearbeitet, unter BASIC entsprechend mit CLOAD/CSAVE.

EDIT/ASM funktioniert.

OS-SAVE funktioniert.

F83 PUT/GET funktioniert.

BASIC musste angepasst werden. Die modifizierte BASIC-Version enthält neue I/O-Treiber sowie die Änderungen für 16 Farben und 80 Zeichen/Zeile (WINDOW/PRINT AT). BASIC nutzt original leider eigene Routinen für Kassette. So wird in BASIC86 ein sinnloser Kopfblock 0 ausgegeben; eingelesen wird aber immer erst an Block 1. Um dieses Verhalten bei Kassettenarbeit beizubehalten, gleichzeitig aber immer korrekte Kopfblöcke bei Diskettenarbeit zu nutzen, musste die Verify-Funktionalität ausgeblendet werden, um genügend freien Speicher in der 2K-BASIC-Erweiterung von E000-E7FF zu haben.

Im BASIC funktioniert nun sowohl die klassische Kassettenarbeit als auch Speichern/Lesen von Diskette (incl. Feldern und ASCII).

Im aktuellen Mega-Flash-Modul ist dieses BASIC bereits enthalten. Außerdem wird versucht, im neuen CCP des Moduls ein nichtgefundenes Kommando von Diskette zu laden! (Im originalen OS wird in diesem Fall intern CLOAD aufgerufen. Es erscheint dann das bekannte „start tape“. Aber leider ist CLOAD mit internen Aufrufen und nicht mit CALL 5-Funktionen implementiert, so dass hier leider keine Diskettenabfrage erfolgt. Für einen 100%-igen Kassettenersatz müsste man die Routinen MAREK und KARAM aus dem Z9001-OS ersetzen. Das geht aber nur, wenn man den System-ROM gegen einen EPROM mit einem angepasstem OS austauscht.)

ZMxx funktioniert original nicht mit Diskette. Die Punch/Reader-Treiber für Kassette springen leider direkt in den Monitor und nutzen nicht CALL 5. Um das hinzubekommen, musste ich den Monitor patchen.

KCPASCAL funktioniert nicht mit Diskette. Ursache dafür ist einfach, dass KCPASCAL den gesamten Speicher von 300h bis BFFFh belegt. Da bleibt kein Platz mehr für ein BDOS-Wrapper.

PRETTYC funktioniert nicht komplett mit Diskette. Das Speichern funktioniert, doch beim Laden wird leider nicht OPENR genutzt. PrettyC verfügt über einen Modifikations-Selbstschutz, ein Patchen ist nicht ohne weiteres möglich.

Die Programme werden auf der Diskette im KCC-Format abgespeichert, d.h. mit Kopf-Block, gefolgt vom Speicherabzug.

Die Endung COM wird dabei in KCC geändert, damit es nicht zu Verwechslungen mit CP/M-Programmen kommt.

Mit Diskette funktionieren nur Programme, die für die Kassettenarbeit die BOS-Call 5-Routinen OS-konform nutzen. D.h., zum Schreiben muss OPENW, WRITS, und CLOSW genutzt werden! Fehlt CLOSW, wird in den neuen BDOS-Call 5-Funktionen versucht; dies zu erkennen und die Datei ordnungsgemäß auf Diskette zu schließen. Das ist aber noch ungetestet!

Um herauszufinden, wie ein Programm auf Kassette schreibt, gibt es im Mega-Flash ein kleines Hilfsprogramm CALL5DBG. Dieses ist nach DOS/CAOS neu zu starten. Es werden die Kassettenfunktionen mit Namen ausgegeben, gefolgt von DMA, BLNR und LBLNR (Stand vor Aufruf der eigentlichen Funktionen).