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

1. CCP (Console Command Processor)
----------------------------------

Der CCP befindet sich nicht im 64k-Byte Bereich des Z80. Er ist komplett
im 80286-Code geschrieben (l„uft auch auf V20/V30 *NICHT* auf 8088/86)
und beeinfluát den TPA-Bereich des Z80 nur bei der COPY-Operation.
(Nicht in der OS/2-Version!)

Daher hat der Emulator einen groáen TPA-Bereich von FD00H Byte
(jeweils 100H Byte fr 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 verfgbar, ist
dies vermerkt. Obwohl der Emulator ein CP/M-System emulieren soll, wurde
die Syntax der Instruktionen vollst„ndig an MS-DOS bzw. OS/2 angelehnt,
damit sich der Benutzer eines Rechners nicht an zwei Schreibweisen gew”hnen
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 Abkrzungen wurden eingefhrt:
lw:   =>  Laufwerksbuchstabe (z.B. A:)
path  =>  vollst„ndiger 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
--------
Syntax:  TYPE [lw:][path]fname

Gibt eine Datei auf der Konsole aus. Wildcards im Dateinamen sind nicht
zugelassen.


1.2 COPY
--------
Syntax:  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. Auáerdem ist '.' hier als Dateiname nicht erlaubt.

Das Kopieren von Zeicheneinheiten (z.B. COPY CON: datei) ist nur in der
OS/2-Version verfgbar.

1.3 REN
-------
Syntax:  REN [lw:][path]fname [path]fname

Dieser Befehl hat 2 Funktionen. Zum einen kann damit eine Datei umbenannt
werden. Auáerdem ist er dafr geeignet, einen Verzeichniseintrag einer
Datei in ein anderes Verzeichnis zu bertragen (MOVE).

Die Funktion h„ngt 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 anschlieáend
gel”scht werden. Dafr 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
-------
Syntax:  CLS

Bildschirm l”schen. Dies geschieht ber eine ANSI-Sequenz; dazu muá
natrlich der ANSI-Treiber installiert sein (DOS und Comp.-Box) oder
ANSI muá eingeschaltet sein (bei OS/2).


1.5 DIR
-------
Syntax:  DIR [lw:][path]fname

Verzeichnis ausgeben. In fname k”nnen ebenfalls die Wildcards '?' und
'*' verwendet werden. Als Abkrzung fr '*.*' ist '.' erlaubt.
Steuerparameter '/w' bwz. '/p' werden noch nicht untersttzt.


1.6 CHDIR / MKDIR / RMDIR
-------------------------

Syntax:  CHDIR [lw:][path]
	 MKDIR [lw:]path
	 RMDIR [lw:]path

Žndern des Standardverzeichnisses, anlegen bzw. L”schen eines Verzeichnisses.
Es k”nnen 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
-----------
Syntax:  ERA [lw:][path]fname
	 DEL [lw:][path]fname

L”schen einer/mehrerer Dateien. Wildcards '?' und '*' sind zugelassen.
Die MS-DOS Abfrage 'Sind Sie sicher (J/N)?' bei DEL *.* erfolgt NICHT!!!

1.8 EXIT
--------
Syntax:  EXIT

Zurck 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 Rcksprung ins MS-DOS
bzw. OS/2 aus einem anderen Grund (Probleme bei Speicherallokierung durch
Systemfehler), ist der Errorlevel ungleich 0.

1.9 SAVE
--------
Syntax:  SAVE block [lw:][path]fname

Legt den Speicherbereich ab 100H in der Datei 'fname' ab. Die L„nge ist
256Byte * block. Wird 'block' zu groá angegeben, wird eine Fehlermeldung
ausgegeben. Da Nicht-CP/M-Programme untersttzt werden, darf 256 * block
die TPA-Gr”áe berschreiten. Der Offset von 100H kann jedoch (noch) nicht
ver„ndert werden.

Achtung: 'block' ist eine Dezimalzahl.

1.10 RUN
--------
Syntax:  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 fr 'loffset' ist 100H, fr 'roffset' ist er 'loffset'.
Siehe auch Kap. 2 fr die Benutzung von Betriebssystem-Aufrufen.

1.11 SET
--------
Syntax:  SET [variable=[string]]

Die Behandlung einer Environment ist sowohl in der OS/2 als auch in der
MS-DOS-Version verfgbar. In der MS-DOS-Version ist die Maximalgr”áe jedoch
durch die GrӇe der Environment beim Aufruf des Programmes festgelegt.

Enth„lt die Umgebung z.B. 20 Zeichen, so wird beim Start auf die n„chste
ParagraphengrӇe (2*16=32 Byte) aufgerundet; dies ist eine Eigenschaft des
DOS. Um Platzprobleme zu umgehen, sollte man vor dem Aufruf des Emulators
gengend Platz anlegen durch Eingabe von z.B.:

SET a=00000000000000000000000000000000000000000000000000000000000000000000

Diese Variable a kann dann im Emulator wieder gel”scht werden und steht als
freier Platz zur Verfgung.


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 fhren, da ein Rcksprung
	       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 L„nge angepaát (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 verfgbar.

DEB-PROMPT   - Prompt des Z80-Debuggers. Darstellung wie unter OS/2. Als
	       Info-Zeile wird hier $J angeboten.

1.12 SHELL
----------
Syntax:  SHELL [command]

Dieser Befehl startet einen neuen Befehlsinterpreter CMD.EXE bzw. COMMAND.COM.
Wird command angegeben, wird dieser Befehl ausgefhrt. Der Rcksprung 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 Erl„uterungen 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
		       enth„lt. Anschlieáend Rcksprung ins DOS.
CPMZ80 /K CPMINIT    - Start einer 'CP/M-Autoexec'. Dies ist vor allem
		       deshalb sinnvoll, da damit die Umgebungsvariablen
		       auf die gewnschten Werte eingestellt werden k”nnen.
		       Eine CPMINIT.SUB-Datei k”nnte 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 Rcksprnge von
Interruptroutinen RETN u. RETI werden wie RET behandelt.

OUT und IN-Anweisungen enden vorl„ufig in einer Ausnahmebehandlung und
k”nnen nicht ausgefhrt werden.

Die Anweisung HLT l„uft in eine TRAP-Behandlung und kann fr Diagnose-
Zwecke benutzt werden. Auáerdem laufen alle nichtdokumentierten
Z80-Befehle dorthin.

Fr CP/M-Programme gelten alle Konventionen, die fr normale Z80-Rechner
auch gelten:
BDOS-Einsprung ist	CALL 5
WARMBOOT-Einsprung ist	CALL 0

Vom BIOS k”nnen direkt nur die Routinen fr Konsol-Ein-/Ausgabe verwendet
werden. Die Routinen fr Disk-I/O sind nicht implementiert, da sie fr
OS/2 nur mit Einschr„nkungen verwendbar w„ren.

Fr CP/M-Programme steht die TPA von 100H ... FDFFH (64768 Byte) zur
Verfgung.

Nicht-CP/M-Programme:

Als Nicht-CP/M-Programme werden solche bezeichnet, die Speicher auáer-
halb des TPA-Bereiches benutzen.
Diese Programme k”nnen grunds„tzlich den gesamten Speicher von 64kByte
verwenden. Auáerdem k”nnen sie ebenfalls das BDOS bzw. das BIOS nutzen.
Falls sie jedoch den Bereich unter 100h oder ber FE00h benutzen, geschieht
dies jedoch auf eine andere Art und Weise, als dies unter CP/M der Fall ist.

Als Schnittstelle zum Betriebssystem dient ein beim Z80 nicht vorhandener
Befehl mit dem Opcode EDEDnn. nn ist ein Byte, das die Art des Aufrufes
festlegt. Die zur Verfgung stehenden Funktionen sind nachfolgend
aufgefhrt:

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   (fhrt auf Dummy-Operation)
nn = 8: AUXOUT (fhrt auf Dummy-Operation)
nn = 9: AUXIN  (fhrt auf Dummy-Operation)

Beispiele fr 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 EDED00.

	.Z80
START:	LD	E,char		;Zeichen laden
	LD	C,2		;BDOS-Funktion: CONSOLE OUTPUT
	DB	0EDH,0EDH,0
	LD	C,0		;BDOS-Funktion: SYSTEM RESET
	DB	0EDH,0EDH,0	;(zurck 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 bentzt werden.

	.Z80
START:	LD	A,char		;Zeichen laden
	DB	0EDH,0EDH,6	;BIOS-Funktion CONOUT
	DB	0EDH,0EDH,2	;BIOS-Funktion BOOT
	end	START



4. In Vorbereitung n„chste Version
----------------------------------

- Behandlung von OUT/IN-Instruktionen
- Assembler im Debugger

Keine Software ist fehlerfrei. Falls Sie Fehler finden, sind wir dankbar, wenn
Sie uns diese mitteilen. Auch Verbesserungsvorschl„ge sind willkommen.

Die Autoren
	Klaus Breining; Markus Noller

	Erreichbar unter

	"Markus Noller"
	in der CCWN-Box
	Brett:	"OS/2-Pin"
      Telefon:	07151/68434

oder ber den deutschen OS/2-Fido Pin "OS2.GER"