home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
emulator
/
os2
/
cpmv2.ger
< prev
next >
Wrap
Text File
|
1990-05-27
|
12KB
|
336 lines
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"