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 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 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 Abkrzungen wurden eingefhrt: 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 verfgbar. 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 dafr 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. 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 ------- Syntax: CLS Bildschirm l”schen. Dies geschieht ber eine ANSI-Sequenz; dazu muá natrlich 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 Abkrzung fr '*.*' ist '.' erlaubt. Steuerparameter '/w' bwz. '/p' werden noch nicht untersttzt. 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 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 -------- 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 untersttzt 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 fr 'loffset' ist 100H, fr 'roffset' ist er 'loffset'. Siehe auch Kap. 2 fr 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 verfgbar. 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 gengend 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 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 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 verfgbar. 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 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 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 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 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 Rcksprnge von Interruptroutinen RETN u. RETI werden wie RET behandelt. OUT und IN-Anweisungen enden vorl„ufig in einer Ausnahmebehandlung und k”nnen nicht ausgefhrt werden. Die Anweisung HLT l„uft in eine TRAP-Behandlung und kann fr Diagnose- Zwecke benutzt werden. Auáerdem 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 k”nnen 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 Einschr„nkungen verwendbar w„ren. 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 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 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 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 ;(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,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"