VDIP-OS

USB/VDIP im OS-Modus
Volker Pohlers, 2016

Benötigt wird ein GIDE+USB+RTC-Modul mit einem VDIP1-Modul oder einem V2DIP-Modul. Beschreibung des VDIP-Moduls s. VDIP1 und v2dip.


Modul, und Teilbestückung nur USB

An das VDIP1-Modul wird ein USB-Stick angesteckt. Unterstützt werden USB 1.1 und USB 2.0-Sticks. Ein 8GB-Stick wurde erfolgreich getestet. Der Stick muss mit FAT12, FAT16 oder FAT32 formatiert sein. Ein V2DIP-Modul unterstützt normalierweise nur FAT 16 und FAT32.

Jumper:

  • USB Jumper JP5 (unter dem DOM-Modul) v.u.n.o. A2..A7. Es ist nur A5 gejumpert (Port DCh)
  • GIDE Jumper JP2 (Mitte) v.l.n.r. A4..A7, hi-Teil-PortAdr. Es ist A5 und A7 gejumpert (Port 50h)
  • DOM Jumper J2 (quer): gesteckt für Stromversorgung des DOM-Moduls
Adressbereich -
I/O-Adressen GIDE 54h-5Fh (empfohlener Port für Z9001)
USB DCh..DFh (empfohlener Port für Z9001)

Disk-OS ermöglicht eine umfangreiche Unterstützung von USB-Sticks u.a. als Ersatz für den Kassettenrekorder direkt vom Z9001-Modus aus. Die Software setzt keine speziellen Module voraus und könnte auch von Kassette geladen werden, Sinnvoller ist es, ein passendes ROM-Modul zu nutzen (Mega-Flash, Ulrichs Kombi-Modulhttp://www.sax.de/~zander/z9001/module/kombi.html, u.a.m.)

Dazu werden die CALL5-Routinen für Kassettenarbeit abgefangen und für das VDIP/USB-Modul genutzt. Damit laufen alle Programme, die über die Z9001-BOS-Funktionen auf Kassette zugreifen, nun mit dem USB-Stick. Damit das wirklich funktioniert, sind einige Eigenheiten zu beachten (s.u.)

Ziel dieser (und aller anderen) Anpassungen ist es, keinerlei Veränderungen am Z9001 vornehmen zu müssen. So dürfen z.B. keine Systemzellen des OS missbraucht oder normale Systemfunktionen gestört werden.

Es ist schon cool, wenn man mit dem normalen OS-SAVE plötzlich auf einen USB-Stick 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.

Achtung! Das Programm wird im Rahmen der Mega-Flash-Software gepflegt. Aktuellere Quellen sind ggf. dort zu finden.

Autoren: Von mir stammt die Einbindung ins Betriebssystem. Der eigentliche Zugriff auf das VDIP-Modul stammt von den UTOOLS von Mario Leubner.

Die derzeitige Version USB belegt den Speicherbereich von B800h-BCFFh. Das ist ein Kompromiss, um trotzdem mit BASIC, Assembler 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.

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

USB

gestartet. (vgl. obiges Bild)

DOS „Disk OS“, Nutzen der USB-Routinen im normalen OS
initialisiert den Treiber. Muss stets nach Reset ausgeführt werden
CAOS „CAssette OS“, Nutzen der Kassettenroutinen im normalen OS
deinitialisiert den Treiber
USB [kdo] Kommando an VDIP übergeben, s.u.
DDIR [muster] Inhalt anzeigen (führt USB DIR aus)
LOAD [adr] OS-Kommando zum Laden (auf adr)
SAVE aadr eadr [sadr] OS-Kommando zum Speichern, Filename wird abgefragt
OS-SAVE fname[.typ] aadr eadr [sadr] OS-Kommando zum Speichern

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

USB allgemeine Funktionen, Verzeichiswechsel

Kommando Bemerkung
USB prüft, ob USB-Stick angeschlossen ist
USB CD <verzeichnis> Verzeichnis wechseln
USB CD / ins Wurzelverzeichnis wechseln
USB CD .. ein Verzeichnis zurück
USB DIR Verzeichnisanzeige
USB DLD <verzeichnis> Delete Dir, Verzeichnis löschen
USB MKD <verzeichnis> Make Dir, Verzeichnis anlegen
USB DLF <dateiname> Delete File, Datei löschen
USB FS Free Space, Freien Platz anzeigen
USB IDD Disk-Informationen anzeigen
USB FWV Firmware-Version anzeigen
USB RD <file> Read, Textdokument anzeigen
USB REN <alt> <neu> Rename, Datei umbenennen

Mit

HELP USB

gibt es eine kurze Hilfe.

gestartet bzw. initialsiert wird mit

USB

Das VDIP1 meldet sich mit

Ver03.69VDAPF On-Line:
Device Detected P2
No Upgrade
D:\>

Ver03.698VDAPF ist die Firmwareversion (VDAP Disk And Peripheral Firmware Release 3.68)
P2 steht für USB-Port 2 1)
D: steht für Drive, gemeint ist der USB-Stick. Das ist kein CP/M-Laufwerksbuchstabe!

Nach dem Start kann wird nun wie von Kassette gewohnt gearbeitet, mit LOAD und SAVE (bzw. OS-SAVE) können Speicherbereiche geladen bzw. gesichert werden, unter BASIC entsprechend mit CLOAD/CSAVE.

Kommt beim Start ein Timeout, hilft

DOS

DOS reinitialisiert den Treiber. Auch nach Reset muss unbedingt DOS gestartet werden, ehe wieder auf den USB-Stick geschrieben werden kann!

Im OS werden Kommandos(Programme) nun zuerst im Speicher gesucht (oder im Mega-Modul), wird nichts gefunden, wird auf dem externen Speicher gesucht. Bei Kassettenbetrieb kommt die Ausschrift „start tape“, bei USB entfällt das. Wenn ein Programm gefunden wurde, wird es geladen und gestartet. Wird es nicht gefunden, kommt die Meldung

BOS-error: file not found

Mit STOP bricht man ab und ist wieder auf der Kommandozeile.

Mit CAOS kann man auf Kassette umschalten und Programme von Kassette laden bzw. auf Kassette speichern, mit DOS ist wieder der USB-Stick aktiv.

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.


Es wird ein Kopfblock 0 geschrieben, der nur den korrekten Dateinamen enthält (Byte 0..11). Damit sind BASIC-Programme speicherkompatibel zu OS-Programmen.

OS Im neuen CCP des Mega-Moduls wird versucht, ein nichtgefundenes Kommando von Diskette zu laden! Im originalen OS wird in diesem Fall intern CLOAD aufgerufen. Es erscheint dann das bekannte „start tape“. 2)

ZMxx funktioniert (gepatchte Version). mit AP=T und Paadr_eadr_sadr wird gespeichert (s. kassettenarbeit. Die originalen Versionen funktionieren nicht mit Diskette/USB. Die Punch/Reader-Treiber für Kassette springen leider direkt in den Monitor und nutzen nicht CALL 5.

KCPASCAL funktioniert nicht mit Diskette/USB. 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/USB. 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äß zu schließen. Beim Lesen muss OPENR, READS genutzt werden. CLOSR ist optional.

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

1)
Die VDIP-Firmware kann 2 USB-Ports treiben. Das VDIP1-Modul hat nur einen USB-Anschluss (Port2), es ist möglich, einen weiteren zu ergänzen, s. VDIP1 Datasheet
2)
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.