home *** CD-ROM | disk | FTP | other *** search
- 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"
-
-