Dokumentation zur Version 2.0 des Z80-Emulators
===============================================

1. CCP
Der CCP befindet sich nicht im 64k-Byte Bereich des Z80. Er ist komplett
im 80286-Code geschrieben und beeinflut den TPA-Bereich des Z80 nur bei
der COPY-Operation (Nicht in der OS/2-Version!)
Daher hat der Emulator einen groen TPA-Bereich von FD00H Byte
(jeweils 100H Byte fr BDOS, BIOS und Page 0).
Es folgt eine Aufstellung aller CCP-Befehle, die in der OS/2-Version
implementiert sind. Sind diese in der MS-DOS-Version nicht verfgbar, ist
dies vermerkt. Obwohl der Emulator ein CP/M-System emulieren soll, wurde
die Syntax der Instruktionen vollstndig an MS-DOS bzw. OS/2 angelehnt,
damit sich der Benutzer eines Rechners nicht an zwei Schreibweisen gewhnen
mu.
In den folgenden Syntaxdarstellungen stehen als Trennzeichen immer Leerzeichen.
Entsprechend der MS-DOS-Konvention sind an dieser Stelle jedoch auch
Tabulatorzeichen, Komma, Semikolon und Zeilenvorschub (LF = Ctrl+Return)
zugelassen.
Als Abkrzungen wurden eingefhrt:
lw:   =>  Laufwerksbuchstabe (z.B. A:)
path  =>  vollstndiger Pfad wie unter MS-DOS bzw. OS/2 (max. 63 Zeichen ab
	  Hauptverzeichnis)
fname =>  Dateiname (8+3 Zeichen)
Namen in eckigen Klammern [] sind optional.

1.1 TYPE [lw:][path]fname
Gibt eine Datei auf der Konsole aus. Wildcards im Dateinamen sind nicht
zugelassen.

1.2 COPY [lw:][path]fname [lw:][path]fname
Kopiert eine oder mehrere Dateien. Als Wildcard-Zeichen im Dateinamen
sind wie unter CP/M und MS-DOS '?' bzw. '*' zugelassen. Sie haben
dieselbe Bedeutung.
Der Zieldateiname mu jedoch (im Gegensatz zu MS-DOS) immer angegeben
werden. Auerdem ist '.' hier als Dateiname nicht erlaubt.
Das Kopieren von Zeicheneinheiten (z.B. COPY CON: datei) ist nur in der
OS/2-Version verfgbar.

1.3 REN [lw:][path]fname [path]fname
Dieser Befehl hat 2 Funktionen. Zum einen kann damit eine Datei umbenannt
werden. Auerdem ist er dafr geeignet, einen Verzeichniseintrag einer
Datei in ein anderes Verzeichnis zu bertragen (MOVE).
Die Funktion hngt von der Angabe eines Pfades im Zieldateinamen ab:
Wird dort ebenfalls ein Pfad angegeben, so wird der Verzeichniseintrag
bertragen.
Oft mu eine Datei in ein anderes Verzeichnis kopiert und anschlieend
gelscht werden. Dafr ist diese Funktion MOVE vorgesehen.
Beispiele:
REN *.ASM *.OLD 	    (umbenennen von Dateien)
REN \WORK\*.TXT *.BAK	    (umbenennen in einem anderen Verzeichnis)
REN *.ASM \WORK\*.ASM	    (Dateien nach WORK verschieben (MOVE-Operation))
REN \A.DAT \VERZ\B.DAT	    (Datei nach VERZ verschieben und umbenennen)

1.4 CLS
Bildschirm lschen. Dies geschieht ber eine ANSI-Sequenz; dazu mu
natrlich der ANSI-Treiber installiert sein.

1.5 DIR [lw:][path]fname
Verzeichnis ausgeben. In fname knnen ebenfalls die Wildcards '?' und
'*' verwendet werden. Als Abkrzung fr '*.*' ist '.' erlaubt.
Steuerparameter '/w' bwz. '/p' werden noch nicht untersttzt.

1.6 CHDIR [lw:][path] / MKDIR [lw:]path / RMDIR [lw:]path
ndern des Standardverzeichnisses, anlegen bzw. Lschen eines Verzeichnisses.
Es knnen auch die Kurzformen CD/MD/RD verwendet werden.
CD bzw. CHDIR ohne Argument zeigt das Standardverzeichnis an.
Nach CD mu ein Trennzeichen stehen (im Gegensatz zu MSDOS)!

1.7 ERA|DEL [lw:][path]fname
Lschen einer/mehrerer Dateien. Wildcards '?' und '*' sind zugelassen.
Die MS-DOS Abfrage 'Sind Sie sicher (J/N)?' bei DEL *.* erfolgt NICHT!!!

1.8 EXIT
Zurck in den Parent-Proze. Unter MS-DOS ist dies der COMMAND.COM,
unter OS/2 ist dies je nach Installation der CMD.EXE, Session Manager
oder Presentation Manager.
Errorlevel ist 0. Erfolgt ein Rcksprung ins MS-DOS
bzw. OS/2 aus einem anderen Grund (Probleme bei Speicherallokierung durch
Systemfehler), ist der Errorlevel ungleich 0.

1.9 SAVE block [lw:][path]fname
Legt den Speicherbereich ab 100H in der Datei 'fname' ab. Die Lnge ist
256Byte * block. Wird 'block' zu gro angegeben, wird eine Fehlermeldung
ausgegeben. Da Nicht-CP/M-Programme untersttzt werden, darf
256*block die TPA-Gre berschreiten. Der Offset von 100H kann jedoch
(noch) nicht verndert werden.
'block' ist eine Dezimalzahl.

1.10 RUN [lw:][path]fname [loffset [roffset]]
Startet ein Nicht-CP/M-Programm im Z80-Modus. Das Programm wird nach
'loffset' geladen und bei 'roffset' gestartet.
Der Default-Wert fr 'loffset' ist 100H, fr 'roffset' ist er 'loffset'.
Siehe auch Kap. 2 fr die Benutzung von Betriebssystem-Aufrufen.

1.11 SET [variable=[string]]
Die Behandlung einer Environment ist sowohl in der OS/2 als auch in der
MS-DOS-Version verfgbar. In der MS-DOS-Version ist die Maximalgre jedoch
durch die Gre der Environment beim Aufruf des Programmes festgelegt.
Enthlt die Umgebung z.B. 20 Zeichen, so wird beim Start auf die nchste
Paragraphengre (2*16=32 Byte) aufgerundet; dies ist eine Eigenschaft des
DOS. Um Platzprobleme zu umgehen, sollte man vor dem Aufruf des Emulators
gengend Platz anlegen durch Eingabe von z.B.:
SET a=00000000000000000000000000000000000000000000000000000000000000000000
Diese Variable a kann dann im Emulator wieder gelscht werden und steht als
freier Platz zur Verfgung.
Strings, die im System eine besondere Bedeutung haben sind folgende:
DEBUG=on|off - Ist Debug on, geht der Emulator nach dem Start eines Programmes
	       sofort in den integrierten Debugger. Default ist 'off'
BREAK=on|off - Ist Break off, wird die ^Break bzw. ^C Tastenkombination nur
	       in den unter CP/M-vorgesehenen BDOS-Aufrufen untersucht und
	       bearbeitet. Ist Break on, kann diese Tastenkombination auch
	       eine Endlosschleife unterbrechen. Dies kann jedoch bei
	       Programmen wie MBASIC zu Problemen fhren, da ein Rcksprung
	       zum CCP erfolgt. Soll im BREAK=on Zustand dort ein Break
	       eingegeben werden, der nur das BASIC-Programm abbricht, wird
	       als Alternative die Kombination Alt+PgDn vorgeschlagen.
	       Default ist 'off'.
ASCII_SIZE=8_bit|7_bit
	     - Bei allen Konsolausgaben ber BIOS oder BDOS werden ASCII-
	       zeichen auf die angegebene Lnge angepat (d.h. bei der
	       Angabe '7_bit' wird Bit 7 maskiert).
CCP-PROMPT   - Prompt des CCP. Darstellung durch eine ANSI-Zeichenkette wie
	       unter OS/2. $I ist ebenfalls verfgbar.
DEB-PROMPT   - Prompt des Z80-Debuggers. Darstellung wie unter OS/2. Als
	       Info-Zeile wird hier $J angeboten.

1.12 SHELL [command]
Dieser Befehl startet einen neuen Befehlsinterpreter CMD.EXE bzw. COMMAND.COM.
Wird command angegeben, wird dieser Befehl ausgefhrt. Der Rcksprung
erfolgt mit EXIT.

2. Weitere Einzelheiten zum CCP
Der Emulator wird gestartet mit

CPMZ80 [/C|/K [string]]

Wird kein Argument angegeben, gibt der Emulator den Prompt aus und geht in
den Eingabemodus. Dies bewirkt auch die '/K'-Option, die nur angegeben werden
mu, falls dahinter ein 'string' folgt. '/C' bewirkt, da der Emulator nach
Abarbeitung eines Befehles die Kontrolle sofort wieder dem 'Parent-Proze'
bergibt (siehe Erluterungen zu EXIT). Diese Option ist daher nur sinnvoll
in Zusammenhang mit einem Befehlsstring dahinter, zum Beispiel einer
Submitdatei. Beispiele:
CPMZ80 /C MAKE.SUB   - Start einer Stapeldatei, die zum Beispiel den Aufruf
		       eines C-Compilers, eines Makroassemblers und Linkers
		       enthlt. Anschlieend Rcksprung ins DOS.
CPMZ80 /K CPMINIT    - Start einer 'CP/M-Autoexec'. Dies ist vor allem
		       deshalb sinnvoll, da damit die Umgebungsvariablen
		       auf die gewnschten Werte eingestellt werden knnen.
		       Eine CPMINIT.SUB-Datei knnte beispielsweise so
		       aussehen:
    SET CCP-PROMPT=($I$P)
    SET DEB-PROMPT=$J->
    SET BREAK=ON
    SET DEBUG=OFF
    CLS


3. Z80-Emulation
Das Programm emuliert alle dokumentierten Z80-Befehl mit einem Unterschied:
Alle Interrupt-Anweisungen werden wie NOPs behandelt. Die Rcksprnge von
Interruptroutinen RETN u. RETI werden wie RET behandelt.
OUT und IN-Anweisungen enden vorlufig in einer Ausnahmebehandlung und
knnen nicht ausgefhrt werden.
Die Anweisung HLT luft in eine TRAP-Behandlung und kann fr Diagnose-
Zwecke benutzt werden. Auerdem laufen alle nichtdokumentierten
Z80-Befehle dorthin.

Fr CP/M-Programme gelten alle Konventionen, die fr normale Z80-Rechner
auch gelten:
BDOS-Einsprung ist	CALL 5
WARMBOOT-Einsprung ist	CALL 0

Vom BIOS knnen direkt nur die Routinen fr Konsol-Ein-/Ausgabe verwendet
werden. Die Routinen fr Disk-I/O sind nicht implementiert, da sie fr
OS/2 nur mit Einschrnkungen verwendbar wren.

Fr CP/M-Programme steht die TPA von 100H ... FDFFH (64768 Byte) zur
Verfgung.

Nicht-CP/M-Programme:
Als Nicht-CP/M-Programme werden solche bezeichnet, die Speicher auer-
halb des TPA-Bereiches benutzen.
Diese Programme knnen grundstzlich den gesamten Speicher von 64kByte
verwenden. Auerdem knnen sie ebenfalls das BDOS bzw. das BIOS nutzen.

Dies geschieht jedoch auf eine andere Art und Weise, als dies unter
CP/M der Fall ist.
Als Schnittstelle zum Befehlssatz des 80286 dient der Z80-Befehl mit dem
Opcode EDEDnn. nn ist ein Byte, das die Art des Aufrufes festlegt. Die
zur Verfgung stehenden Funktionen sind nachfolgend aufgefhrt:
nn = 0: BDOS
nn = 1: BOSI (spezielle OS/2-Services wie Timer, Bildschirmzugriff; nur OS/2)
nn = 2: BOOT
nn = 3: WARMBOOT    (identisch mit BOOT)
nn = 4: CONSTATUS
nn = 5: CONIN
nn = 6: CONOUT
nn = 7: LIST   (fhrt auf Dummy-Operation)
nn = 8: AUXOUT (fhrt auf Dummy-Operation)
nn = 9: AUXIN  (fhrt auf Dummy-Operation)

Beispiele fr Nicht-CP/M-Programme
BDOS-Aufrufe:
Die Register sind wie unter CP/M belegt. Der Aufruf erfolgt jedoch nicht
mit einem CALL 5, sondern mit EDED61.
	.Z80
START:	LD	E,char		;Zeichen laden
	LD	C,2		;BDOS-Funktion: CONSOLE OUTPUT
	DB	0EDH,0EDH,8
	LD	C,0		;BDOS-Funktion: SYSTEM RESET
	DB	0EDH,0EDH,8	;(zurck zur CCP-Emulation)
	end	START

BIOS-Aufrufe:
Die Register sind wie im CP/M-Bios belegt.
Das folgende Programm macht dasselbe wie das Vorhergehende, mit dem Unterschied,
da BIOS-Aufrufe bentzt werden.
	.Z80
START:	LD	A,char		;Zeichen laden
	DB	0EDH,0EDH,4	;BIOS-Funktion CONOUT
	DB	0EDH,0EDH,0	;BIOS-Funktion BOOT
	end	START

4.
Keine Software ist fehlerfrei. Falls Sie Fehler finden, sind wir dankbar, wenn
Sie uns diese mitteilen. Auch Verbesserungsvorschlge sind willkommen.

        Noller & Breining Software
        Tannenstr. 18
        71554 Weissach i. T.

        Tel.: 07191 / 960345
        Fax:  07191 / 300472
        Compuserve: 100101,3201 (Markus Noller)
        e-mail:     de2np4cp@ibmmail.com

