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)
OS-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, müsste 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. d.h., OS-COM Programme werden als .KCC auf der Diskette gespeichert und beim Laden von OS-COM-Programmen wird nach einer .KCC-Datei gesucht. Bei der Arbeit im OS merkt man von diesen internen Umbenennungen nichts, es ist hier ganz normal .COM zu schreiben!

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).

Hier wird ein Kombi-Modul genutzt. Das Modul hat eine Floppy angeschlossen, auf dem Modul ist eine RAM-Disk. DOSX arbeitet im Shadow-RAM und belegt nur den Hauptspeicherbereich BD00..BFFF. Bei BASIC wird dieser Bereich beachtet, man muss kein memory end eingeben.

Disk formatieren, aktives Laufwerk setzen, BASIC-Programm aus Disk speichern, Forth laden und mit SAVE-SYSTEM auf Disk speichern:

robotron  Z 9001                                  Meldung nach RESET 

KOMBI-MODUL                                       Startmeldung Mega-Flash-Software
XOS
>VER                                              Version anzeigen
(c) V.Pohlers, Neustadt i.H., 10/5/2021
>INITKC                                           Diskette formatieren


MKD 8/88: INITKC fuer KC 85/87

Formatieren im LW (A/B) :

Diskette stecken:  <ENTER>


WARNUNG !!!
Alle Dateien auf der Diskette werden gel
oescht ! (J/N) :


Formatieren von Spur : 79
Noch einmal ? (J/N) : >                

>DOSX                                             Treiber für Diskette starten
SHADOW DISK OS V.Pohlers 5/7/2021
  A:, B: Floppy
  M: RAF Kombi-Modul 406k
current drive: M                                  die RAM-Floppy des Kombi-Moduls ist Standard-Laufwerk
>DRIVE A:                                         Umschalten auf Laufwerk A:

>DDIR                                             Disketteninhalt

NO FILE                                           Disk ist leer
>BASIC                                            BASIC starten

HC-BASIC

MEMORY END ? :                                    einfach ENTER
46830 BYTES FREE                                  BASIC beachtet die Speichernutzung durch USBX

OK
>10PRINT"HALLO"                                   kleines Programm
>CSAVE"HALLO                                      speichern (auf Disk)
OK
>DIR                                              DIR in BASIC

A: HALLO    ZBS
OK
>NEW
>CLOAD"HALLO                                      Programm laden (jetzt von Disk)

___HALLO   FILE FOUND
OK
>
>RUN                                              Programm starten
HALLO
OK
>BYE                                              BASIC beenden

XOS                                               Mega-Flash-Software meldet sich
SHADOW DISK OS V.Pohlers 5/7/2021                 der DOSX-Treiber meldet sich
  A:, B: Floppy
  M: RAF Kombi-Modul 406k
current drive: A                                  Laufwerk A: ist weiterhin aktiv
>FORTH                                            FORTH starten (von Modul) 
...
SAVE-SYSTEM TEST                                  System speichern unter neuem Namen


                                 ok
BYE
XOS
>DDIR                                             Disketteninhalt anzeigen

A: HALLO    ZBS : TEST     KCC                    ein BASIC-Programm, ein OS-Programm
>                                                 (Endung KCC statt COM wegen CP/M, s. Doku)

>TEST                                             und Programm von Disk laden und starten
...
Z80 FORTH 1.3 (Z9001)
AG FORTH
Th. Beierlein / V. Pohlers
                                        
BYE
XOS
SHADOW DISK OS V.Pohlers 5/7/2021
  A:, B: Floppy
  M: RAF Kombi-Modul 406k
current drive: A
>
  • z9001/software/disk_os.txt
  • Zuletzt geändert: 2023/09/30 12:42
  • von volkerp