VDIP-OS USB

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.

Es funktionieren auch kompatible Module wie GU-K1520 von Kingstener oder das Z1013-USB-Modul von Lötspitze. Prozipiell wird nur eine PIO und ein VDIP-Modul benötigt. Die Schaltung ist für alle Module gleich!


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

DIR und CD im OS DIR und CD in RAM-BASIC

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

2019: Ich habe eine Version usb-os.zip für die Arbeit ohne Mega-Modul/Kombi-Modul zusammengestellt. Die enthaltenen Programme für den USB-Stick und die Anleitung gelten auch für die Mega-Flash-Version. Im ROM sind auch die vom Mega-Flash bekannten Kommandos LOAD,SAVE,RUN,MEM,DUMP etc. enthalten.

Abweichungen:

USB-OS Mega-Flash
DIR DDIR
MENU DIR

Anleitung s. usb-os.txt im Download-Paket

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

USBX

gestartet. (s. obiges Bild, dort noch Start mit altem Namen USB)

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

Folgende Hinweise gelten zur Arbeit mit der im Mega-Flash integrierten Version USBX. Eine Nutzung des reinen Treibers ohne zusätzliche System-Software ist nur eingeschränkt möglich (keine Laden und Speichern im OS, kein Laden und Speichern im BASIC)!

Mit

HELP USB

gibt es eine kurze Hilfe.

gestartet bzw. initialisiert wird mit

USBX

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.

USB-OS ist eine kleine autarke Software für eine USB-Modul mit einem 8K-ROM auf C000h. In der im Download beliegenden Beschreibung ist die Installation und Benutzung ausführlicher beschrieben.

Es wird kein Arbeitsspeicherbereich wie in der Mega-Flash-Version benötigt, die Software liegt komplett im ROM.

Es gibt ein paar spezielle Kommandos zur Arbeit mit USB. Das wichtigste Kommando ist USB. Mit diesem Kommando der USB-Stick reinitialisiert, werden Verzeichnisse angelegt uam.

USB 			USB-Stick reaktivieren

DIR <such>		Anzeige USB-Inhalt
			Es kann ein Suchstring angegeben werden, z.B. COM oder E*A
			Dann werden nur passende Dateien und Verzeichnisse aufgelistet
			gelb	DIR-Verzeichnisse
			Grün	COM-Dateien (unter OS ladbar und startbar
			weiß	ZBS-Dateien (BASIC-Programme)
			cyan	sonstige Dateien (Text, ...)

CD <verzeichnis>	Verzeichniswechsel
			Ohne Parameter werden alle Verzeichnisnamen aufgelistet
			CD / 	ins Wurzelverzeichnis wechseln
			CD ..	ein Verzeichnis zurück

Weitere USB-Kommandos
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 

C			Cursor an/aus
CLS			Bilschirm löschen
VER			Anzeige Programm-Autor und Versions-Datum

Umschalten zwischen USB und Kassette:

DOS 	"Disk OS", Nutzen der USB-Routinen im normalen OS
	initialisiert den Treiber. 
CAOS 	"CAssette OS", Nutzen der Kassettenroutinen im normalen OS
	deinitialisiert den Treiber

Nach Reset, Strg-C ist standardmäßig wieder USB aktiviert

Systemkommandos zur Arbeit mit Maschinencode (vgl. Beschreibung http://hc-ddr.hucki.net/wiki/doku.php/z9001/software/mega)

- Parameter hexadezimal, eine Vornull is nicht nötig! - Bei vielen Kommandos kann man mit <PAUSE> die Ausgabe anhalten/fortsetzen

<STOP> beendet das Kommando, jede andere Taste setzt fort
MENU			Auflisten aller Kommandos im Speicher
			Angezeit werden Name, Adresse des Kommandonamens, Adresse des Programms
			Die Reihenfolge entspricht der Suchreihenfolge des OS

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  		Programmstart von Adr.
MEM adr 		Speicher editieren (neue Byte(s) eingeben + Enter, zurück mit R, Ende mit ;) 

Laden/Speichern. Zur Eingabe von Dateiname.Typ erscheint die Meldung „filename:“

LOAD [aadr] 		Laden (auf Zieladr.)
SAVE aadr eadr [sadr] 	Speichern auf Kassette
FCB			Anzeige des aktuellen File Control Block
EOR [adr]		RAM-Ende anzeigen/ändern

Bei LOAD/SAVE kann ein weiterer Parameter „1“ angehängt werden. Dann wird kein OS-Kopfblock geschrieben bzw. geladen! Das wird z.B. intern in BASIC genutzt. Tipp: Mit „LOAD 1000 1“, filename:TEST.COM wird das Programm TEST.COM in den Speicher ab Adresse 1000 geladen. „DUMP 1000 107F“ zeigt den Kopflock an, „DUMP 1080 3FFF“ das eigentlich Programm.
Tipp2: Mit „LOAD 1000 1“ kann man auch Nicht-OS-Dateien in den Speicher laden, z.B. Sound-Dateien für die Soundkarte oder andere MSDOS-Dateien.

12.3.2019: Das zugehörige RAM-BASIC kennt nun auch die Befehle DIR und CD. DIR zeigt alle ZBS-Dateien an.
Ohne Parameter zeigt CD die Unterverzeichnisse an, mit CD „VERZEICHNIS“ wechselt man in ein Verzeichnis, CD „..“ geht eine Verzeichnisebene zurück und CD „/“ wechselt direkt ins Root-Verzeichnis.

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.

:!: 23.11.2017: Die aktuelle Software schreibt den Kopfblock 0 nicht, wenn ein spezielles Flag (fcb+24='N') gesetzt ist. Das wird nun in BASIC genutzt. Damit sind die erzeugten SSS-Dateien kompatibel zu CP/M (ZBS).

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.