MONX_VDIP
=========

V. Pohlers, September 2026

monx-pico ist die Erweiterung des ACC-3.1-Monitors um Funktionen zur Arbeit
mit SD (und mehr), s. monx_pico.txt

MONX_VDIP ist mein MONX-pico-funktionskompatibler Treiber zur Nutzung eines
VDIP-USB-Abschlusses anstelle der pico-SD-Karte.

MONX_VDIP luft prinzipiell unter allen Monitoren, vom originalen AC1 V3.1
bis zum Komfortmonitor V11.

Die Dateien werden auf dem USB-Stick im Headersave-Format abgelegt. Das Format 
ist kompatibel zu MONX-Pico und den SCCH-Monitoren.


Hardware
--------

VDIP-Anschluss nach M.Leubner, parallel, mit PIO
Portadressen 0FCH..0FFh		(s.VDIP_AC1.asm)


Anpassungen
-----------

Es sind folgende Systemkommandos implementiert:

a AADR Dateiname			Laden von Dateien an Absolut-Adresse im RAM
d [Verzeichnisname]	dir		Verzeichnisse auflisten / wechseln
l [Dateiname] 		load		Dateien auflisten / Datei von USB laden (Headersave-Format)
					Am Ende steht die Startadr. in ARG1 (fr J:)
m Verzeichnisname	mkdir		Verzeichnis anlegen
r Dateiname		remove		Datei in Papierkorb verschieben
s AAAA EEEE SSSS Dateiname/Infotext	Datei auf USB schreiben (Headersave-Format)
s: Dateiname				erneut speichern mit gleichen Adr.
?[:]  			kdolist		Kommandos auflisten / mit Adressen

Nicht enthalten sind:

H 			Help		Hilfetexte Bedienung "Ur-"Monitor"
h 			help		Hilfetexte Bedienung "Monitorerweiterungen"
t [YYYY-MM-DD*hh:mm:ss]	time		Systemzeit anzeigen/setzen
Z			Minibasic
v  			version		Version anzeigen

nderungen gegenber MONX-pico:

- Die Auswahl von Verzeichnissen oder Dateien ber Nummern gibt es nicht, es wird
  immer mit dem Dateinamen gearbeitet
- Es werden nur 8.3-Dateinamen untersttzt
- Es sind beliebig geschachtelte Unterverzeichnisse mglich
- Wechsel ins bergeordnete Verzeichnis mit 'd ..'
- Wechsel ins Root-Verzeichnis mit 'd /'
- Beim SCCH-Monitor wird das Zeichen '_' (0x5F) als Backspace genutzt
  und erscheint nicht auf dem Bildschirm. Man sollte daher auf '_' in Dateinamen
  verzichten.
- Das ?-Kommando zeigt ohne Parameter nur die Kommandobuchstaben an


Beispiel MONX
-------------

 # d								Auflisten der Verzeichisse
AC1             ASM87           CHIP8           CPM
DOC             FORTH           INFORMAT        PRETTYC
PT3             ROBOTRN2        ROBOTRON        SOFT
SOUND           STC             TB              VP
X                # d AC1					Wechsel ins Verzeichnis AC1
 # l								Auflisten der Dateien
EDAS-4          RAM-TEST        TEST43          WURMI
 # l EDAS-4							Laden eines Programms
 A:4000 E:544F S:4000 I:AC1    T:P N:EDAS-4          OK
 # J:								Starten (auf Start-Adress)



Headersave-Format
-----------------

Den eigentlichen Daten wird ein 32 Byte groer Datenblock vorangestellt.
Dieser enthlt Verwaltungsinformationen (Anfangs-, End- und Startadresse, 
Dateityp, Headersave-Kennung, Dateiname) 

^ Byte  ^ Bedeutung                                                          |
| 0, 1  | Anfangsadresse der Datei                                           |
| 2, 3  | Endadresse                                                         |
| 4, 5  | Startadresse bei Fall eines ausfhrbaren Programms (Dateityp: "C") |
| 6-11  | frei (wird manchmal benutzt fr CRC oder Autor)                    |
| 12    | Dateityp (z.B. "C": Ausfhrbares Maschinencodeprogramm)            |
| 13-15 | Headersave-Kennung (3x D3h)                                        |
| 16-31 | Dateiname, mit Leerzeichen aufgefllt                              |

Der Dateityp ist frei whlbar, MONX nutzt 'D'.

Die 16 Zeichen "Dateiname" knnen frei fr lange Programmnamen oder zustzliche 
Informationen genutzt werden, der eigentliche Dateiname liegt bereits im Filesystem vor.

Originale Kassettenbasierte Programme arbeiten immer in 32-Byte-Blcken.
Sind die letzten Daten krzer als 32 Byte, wird der letzte Block auf volle 32 Byte
erweitert. Bei den heute blichen Massenspeichern (SD-Karte, USB) ist das nicht
mehr notwendig, aus Komaptibilittsgrnden sollte es aber trotzdem gemacht werden.


Dateien
-------

Dateien aus Archiv-Sammlungen im Headersaveformat haben meist den Dateityp 
'*.Z80'. Unter MONX-VDIP ist das keine Pflicht, der Name kann ein beliebiger gltiger 
FAT16-8.3-Dateiname sein. 
Durch Umbennen langer Dateinamen in gltige 8.3-Dateinamen knnen Programme
aus Archiv-Sammlungen genutzt werden.

Dateityp, der freie Bereich, Dateiname knnen im Header beliebig genutzt werden.
Bei Nicht-Programm-Dateien sind auch die Adress-Felder nicht bindend. 



Nutzung der Lo-Level-Routinen
-----------------------------

Man muss die Include-Datei monx_inc.asm einbinden. Diese stellt die
monx_interface-Funktionen bereit (unabhngig vom Standort einer beliebigen
MONX-Erweiterung).
Beschreibung s. monx_interface_v110.txt (MONX-pico)

Die originalen Testprogramme test1.asm und test2.asm zum MONX-pico
funktionieren. Es wurde nur zwei minimale nderungen vorgenommen
(call xinit zum Initialisieren der Erweiterung in jedem Programm/Kommando
und natrlich Einbindung der monx_inc.asm).


TEST2	- Testprogramm
;
; x ANF ENDE START Dateiname		Datei schreiben via Einzelzeichenausgabe
; y AADR Dateiname			Datei zeichenweise laden
; w AADR EADR SADR Dateiname		Datei schreiben via Speicherblock
; b Dateiname				Datei komplett lesen
; $					Dateinamensliste
; %					Abfrage Systemzeit

Achtung: Man sollte drauf achten, bei eigenen Programmen immer volle 20h zu
schreiben, um kompatibel zu Kassetten-Dateien zu bleiben. Es funktioniert aber auch
mit exakt langen Dateien.

nderungen gegenber MONX-pico:

- im Original fehlt eine Funktion zum Schlieen einer Datei (Schreiben mit 
  unbekannter Lnge, z.B. Spooling). FCHRW hat daher eine Zusatz-Funktion bekommen:
  Wird FCHRW mit DE=1FF1 augefrufen, wird kein Byte geschrieben, aber die Datei geschlossen
- Zur Sicherheit wird bei jeder neuen Dateioperation eine evtl. noch geffnete Datei 
  vorab geschlossen.
- SYSCLK liefert konstant "2 MHz" zurck



Beispiel Test2
--------------

 # w 0 1 0 TSTW

Result:0000
CRC16:3515 # x 0 1 0 TSTX

Result:0000
CRC16:3515 # b WURMI

Result:0000
CRC16:3943 # y 5000 WURMI

Result:0000
CRC16:3943 # %
TSTS            TSTW            TSTX            WURMI
 # $
not implUNIX: 00 00 00 00 00 00
not implBCD : 00 00 00 00 00 00
 #
