Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
z9001:software:zm [2010/07/23 11:07] – Page moved from z901:software:zm to z9001:software:zm volkerp | z9001:software:zm [2025/01/13 14:34] (aktuell) – [Treiber] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Zusatzmonitor ZM ====== | ====== Zusatzmonitor ZM ====== | ||
- | Der {{zm.zip|Zusatzmonitor ZM}} stellt eine Erweiterung für das OS des Z9001 dar und bringt maschinennahe Funktionen wie Speichern von Programmen auf Kassette (ja, da gibt es nicht im OS!), Speichereditor (Move, Fill, Search, Edit), Portabfrage, | + | Der Zusatzmonitor ZM stellt eine Erweiterung für das OS des Z9001 dar und bringt maschinennahe Funktionen wie Speichern von Programmen auf Kassette (ja, da gibt es nicht im OS!), Speichereditor (Move, Fill, Search, Edit), Portabfrage, |
+ | |||
+ | **Achtung! Der ZM hält sich nicht an die Vorschriften des Z9001 zur Installation von Gerätetreibern etc. Vorhandene Treiber werden einfach überschrieben, | ||
+ | |||
+ | 2021 [[wp> | ||
===== Version 2.0 ===== | ===== Version 2.0 ===== | ||
Zeile 7: | Zeile 11: | ||
Entwickelt wurde der Zusatzmonitor von Dr. Frank Schwarzenberg, | Entwickelt wurde der Zusatzmonitor von Dr. Frank Schwarzenberg, | ||
- | * ZM30 der Kassette | + | * ZM30 der Kassette |
- | * ZM30, ZM70, ZMA8 von den Kassetten | + | * ZM30, ZM70, ZMA8 von den Kassetten |
* IDAS-Modul robotron mit ZM im ROM (IDAS ohne Meldung, ZM mit Meldung "Z9001 MONITOR V2.0 (ROM) 1985" und mit EPROM-Software für das Programmiermodul \\ (das ist die neue Variante des ZM 2.0) | * IDAS-Modul robotron mit ZM im ROM (IDAS ohne Meldung, ZM mit Meldung "Z9001 MONITOR V2.0 (ROM) 1985" und mit EPROM-Software für das Programmiermodul \\ (das ist die neue Variante des ZM 2.0) | ||
- | * IDAS-Modul Variante U. Zander sowie KCEMU (IDAS mit Meldung " | + | * IDAS-Modul Variante U. Zander sowie KCEMU (IDAS mit Meldung " |
- | Bei den ersten Varianten des ZM und Version 1.2 des OS-KC85/1 kann es bei den Treibern SIFA und TD40 unter Umständen Probleme mit der CTRL/ | + | Bei den ersten Varianten des ZM und Version 1.2 des OS-KC85/1 kann es bei den Treibern SIFA und TD40 unter Umständen Probleme mit der CTRL/ |
^ Treiber ^ relative Adresse ^ Befehl alt ^ HEX ^ -> ^ Befehl neu ^ HEX ^ | ^ Treiber ^ relative Adresse ^ Befehl alt ^ HEX ^ -> ^ Befehl neu ^ HEX ^ | ||
Zeile 53: | Zeile 57: | ||
| **P (Punch)** | Ausgabe im INTEL-Hex-Format auf den Punch-Kanal | Panfadr_endadr (_stadr bei AP=T) | | | **P (Punch)** | Ausgabe im INTEL-Hex-Format auf den Punch-Kanal | Panfadr_endadr (_stadr bei AP=T) | | ||
| **Q (Query)** | Lesen und Schreiben auf I/O-Ports | QIport Lesen vom Port\\ | | **Q (Query)** | Lesen und Schreiben auf I/O-Ports | QIport Lesen vom Port\\ | ||
- | | **R (Read)** | Einlesen eines INTEL-Hex-Files über den Reader-Kanal | R[base] | | + | | **R (Read)** | Einlesen eines INTEL-Hex-Files |
- | | **S (Substitute)** | Modifizieren von Speicherzellen. Mit der Leertaste kann zur Adresse weitergeschaltet werden. Mit <ENTER> wird das Kommando beendet. | Sanfadr | | + | | **S (Substitute)** | Modifizieren von Speicherzellen. Mit der Leertaste kann zur Adresse weitergeschaltet werden. Mit <ENTER> wird das Kommando beendet. | Sanfadr | |
| **T (Type)** | Ausgabe in ASCII-Darstellung | Tanfadr_[endadr] | | | **T (Type)** | Ausgabe in ASCII-Darstellung | Tanfadr_[endadr] | | ||
| **V (Verify)** | Vergleich eines Speicherbereiches mit einem anderen | Vanfadr_endadr_zieladr | | | **V (Verify)** | Vergleich eines Speicherbereiches mit einem anderen | Vanfadr_endadr_zieladr | | ||
- | | **W (Write)** | Schreiben von ASCII-Zeichen in den Speicher. Mit <-- kann zurückgeschritten werden. Mit <STOP> wird die Eingabe beendet. Die Adresse des zuletzt eingegebenen Zeichens +1 wird vom Monitor ausgegeben. | Wanfadr | | + | | **W (Write)** | Schreiben von ASCII-Zeichen in den Speicher. Mit <- kann zurückgeschritten werden. Mit <STOP> wird die Eingabe beendet. Die Adresse des zuletzt eingegebenen Zeichens +1 wird vom Monitor ausgegeben. | Wanfadr | |
| **X** | Ausgabe des Z80-Registersatzes | X 1.Registersatz\\ | | **X** | Ausgabe des Z80-Registersatzes | X 1.Registersatz\\ | ||
| **Y** | Suchen einer Zeichenfolge von max. 255 byte | Ybyte_byte u.s.w. | | | **Y** | Suchen einer Zeichenfolge von max. 255 byte | Ybyte_byte u.s.w. | | ||
| **Z** | Ausgabe der höchsten RAM-Adresse (RAM-TOP) | | | | **Z** | Ausgabe der höchsten RAM-Adresse (RAM-TOP) | | | ||
- | Für die Kommandos I, K, L, O und U stehen ab 220H fünf Sprungvektoren, | + | Für die Kommandos I, K, L, O und U stehen ab 220H fünf Sprungvektoren, |
+ | |||
+ | ==== Kassettenarbeit ==== | ||
+ | |||
+ | Zum Speichern auf Kassette und zum Lesen werden spezielle Treiber (UP1 und UR1) installiert. | ||
+ | Diese umgehen die normale Funktion des P- und R-Kommandos. | ||
+ | |||
+ | **Speichern eines Speicherbereichs** | ||
+ | |||
+ | AP=T | ||
+ | Paadr_eadr_sadr | ||
+ | |||
+ | Es wird der Filename.Typ abgefragt. Ohne Typ wird COM genommen. | ||
+ | |||
+ | Nach dem Speichern kann eine Überprüfung der Aufzeichnung erfolgen. Die Frage " | ||
+ | |||
+ | **Lesen eines Speicherbereichs** | ||
+ | |||
+ | AR=T | ||
+ | R[ofs] | ||
+ | |||
+ | Es wird der Filename.Typ abgefragt. Ohne Typ wird COM genommen. | ||
+ | Als Parameter kann ein Offset angegeben werden, der zur originalen Anfangsadresse der Datei addiert wird. Die Datei wird auf die neue Anfangsadresse geladen. | ||
+ | |||
+ | Nach dem Laden werden Anfangs-, End- und Startadresse angezeigt. | ||
===== Treiber ===== | ===== Treiber ===== | ||
- | Im Zusatzmonitor sind verschiedene Gerätetreiber enthalten. s. auch Artikel über [[z9001: | + | Im Zusatzmonitor sind verschiedene Gerätetreiber enthalten. s. auch Artikel über [[z9001:literatur: |
Das Kommando A< | Das Kommando A< | ||
Zeile 76: | Zeile 105: | ||
| AC=U für User-Konsole | AR=U für User-Read-Gerät | AP=U für V24-Ausgabegerät (TD40) | AL=U für SIF-1000-Ausgabegerät | | | AC=U für User-Konsole | AR=U für User-Read-Gerät | AP=U für V24-Ausgabegerät (TD40) | AL=U für SIF-1000-Ausgabegerät | | ||
- | Nach Anlauf des Monitors gilt die Zuordnung | + | Nach Anlauf des Monitors gilt die Zuordnung |
+ | |||
+ | **SIF-1000** | ||
+ | |||
+ | Für den BATCH-Modus muss ein SIF-1000-Lesegerät an den PIO-Port angeschlossen werden. Ferner sind die Zuweisungen AR=P und AL=C (oder V) vorher unbedingt erforderlich! Nach AC=B werden jetzt alle Eingaben nicht mehr von der Tastatur, sondern vom angeschlossenen Lesegerät angefordert. Protokolliert wird infolge der Zuweisung AL=C nach wie vor auf dem Bildschirm. Eine Zuweisung AL=L oder U ist in diesem Fall nicht möglich, da an den PIO-Port zusätzlich zum Lesegerät kein LIST-Gerät anschließbar ist. | ||
+ | |||
+ | User-Port-Belegung für SIF-1000-Anschluss: | ||
+ | |||
+ | A B C | ||
+ | --------------------------- | ||
+ | 1 0 0 /END | ||
+ | 2 / | ||
+ | 3 /DAT4 /DAT5 /DAT6 | ||
+ | 4 /DAT7 /RUF - | ||
+ | 5 (+5V)--> | ||
+ | |||
+ | |||
+ | |||
+ | **Drucker** | ||
+ | |||
+ | Sollte der Druckermodul gesteckt sein, so wird bei AC=C auf dem Drucker protokolliert, | ||
+ | Bei AL=L erfolgt die Druckausgabe auf einen an den PIO-Port angeschlossen seriellen-Drucker TD40. | ||
+ | |||
+ | User-Port-Belegung V24-Ausgabe TD40 | ||
+ | |||
+ | A B C | ||
+ | --------------------------- | ||
+ | 1 0 0 - | ||
+ | 2 TxD - - | ||
+ | 3 - - - | ||
+ | 4 - DTR* - | ||
+ | 5 (+5V) - - | ||
+ | |||
+ | |||
+ | Bei der ROM-Version ZM2.0 CENT. 1986 und auch im ZM2.0A erfolgt mit AL=V die Druckausgabe auf einen an den PIO-Port angeschlossen Centronics-Drucker. | ||
+ | |||
+ | CENTRONICS-Druckerschnittstelle über User-Port | ||
+ | * 7 Datenbits verfuegbar | ||
+ | * PIO-RDY wird zur Bildung des CENTRONICS-/ | ||
+ | * /ACKNLG vom Drucker wird ueber den CTC-Kanal erfasst. | ||
+ | |||
+ | User-Port-Belegung fur CENTRONICS-Anschluss | ||
+ | |||
+ | A B C | ||
+ | --------------------------- | ||
+ | 1 0 0 /ACK | ||
+ | 2 DAT1 DAT2 DAT3 | ||
+ | 3 DAT4 DAT5 DAT6 | ||
+ | 4 DAT7 - / | ||
+ | 5 (+5V)==> | ||
+ | |||
+ | |||
+ | Details zum Hardware-Anschluss siehe mp-Artikel [[z9001: | ||
+ | |||
+ | Der ZM nutzt **nicht** die ASGN-Anweisung. Beim start des ZM wird die Zuordnungstabelle mit den entsprechenden Adressen geladen, da alle Treiber resident sind. Die Auswahl der ZM-Treiber muss deshalb mit dem ZM-Kommando A(ssign) erfolgen (Stellen des I/O-Bytes). | ||
- | Für den BATCH-Modus muss ein SIF-1000-Lesegerät an den PIO-Port angeschlossen werden. Ferner sind die Zuweisungen AR=P und AL=C (oder V) vorher unbedingt erforderlich! Nach AC=B werden jetzt alle Eingaben nicht mehr von der Tastatur, sondern vom angeschlossenen Lesegerät angefordert. Protokolliert wird infolge der Zuweisung AL=C nach wie vor auf dem Bildschirm. Eine Zuweisung AL=L oder U ist in diesem Fall nicht möglich, da an den PIO-Port zusätzlich zum Lesegerät kein LIST-Gerät anschließbar ist. Sollte der Druckermodul gesteckt sein, so wird bei AC=C auf dem Drucker protokolliert, | ||
===== Quellcode ===== | ===== Quellcode ===== | ||
- | Im {{zm.zip|Quellcode-Paket}} ist mein reassemblierter Quellcode für die verschiedenen ZM 2.0-Varianten zu finden. Der Code enthält einige interessante Assemblerabschnitte (und wird dem interessierten Z9001-Programmierer wärmstens zum Studium empfohlen). | + | * {{:z9001:zm.zip|}} |
+ | Im Quellcode-Paket ist mein reassemblierter Quellcode für die verschiedenen ZM 2.0-Varianten zu finden. Der Code enthält einige interessante Assemblerabschnitte. Allerdings hält sich der ZM nicht an die Konventionen des OS bezüglich des ASSIGN-Kommandos. | ||
+ | |||
+ | 30.4.15: Im Paket ist eine modifizierte Version des ZM 2.0: hier werden die Gerätetreiber etwas OS-freundlicher eingebunden: | ||
+ | Diese Version funktioniert recht gut z.B. mit den CRT40P und CRT80P-Treibern der KRT-Grafik. Das I/O-Byte wird beim Start nicht verändert, es bleiben die OS-Zuweisungen gültig. Bei Bedarf muss man PUNCH und READER die Konsole selbst zuweisen((Das ist leider nicht so einfach, da im OS ein ASGN PUNCH:=CRT nicht zulässig ist. So muss man die Treibertabelle manipulieren: | ||
+ | |||
+ | 2020: die aktuelle modifizierte Version des ZM 2.0 initialisiert wie im Original AR=C, AP=C, eine Manipulation der Treibertabelle ist nicht mehr nötig! | ||
+ | |||
+ | {{: | ||
===== Allgemein verwendbare Monitor-Routinen ===== | ===== Allgemein verwendbare Monitor-Routinen ===== | ||
Zeile 91: | Zeile 181: | ||
^ rel.Adr. (hex.) (base + ) ^ Subroutine | ^ rel.Adr. (hex.) (base + ) ^ Subroutine | ||
- | | 0 | Monitor-Neustart | | | | | + | | 0000 | Monitor-Neustart | | | | |
- | | 3 | Trap-Eingang (RST 38H) | Prozessorzustand wird für GO-Routine gerettet | | | | + | | 0003 | Trap-Eingang (RST 38H) | Prozessorzustand wird für GO-Routine gerettet | | | |
- | | 6 | Error-Eingang | SP wird initialisiert | | | | + | | 0006 | Error-Eingang | SP wird initialisiert | | | |
- | | 9 | I/O-Byte abfragen | - | A | | | + | | 0009 | I/O-Byte abfragen | - | A | | |
- | | C | I/O-Byte setzen | C | - | AF | | + | | 000C | I/O-Byte setzen | C | - | AF | |
- | | F | Test RAM-Größe | - | B | AF | | + | | 000F | Test RAM-Größe | - | B | AF | |
- | | 12 | Eingabekonvertierung | (CI) | HL | AFCDE | | + | | 0012 | Eingabekonvertierung | (CI) | HL | AFCDE | |
- | | 15 | Ausgabekonvertierung | HL | (CO) | AFBCDEHL | | + | | 0015 | Ausgabekonvertierung | HL | (CO) | AFBCDEHL | |
- | | 18 | HEX-Eingabe (2 Byte)\\ | + | | 0018 | HEX-Eingabe (2 Byte)\\ |
- | | 1B | HEX-Ausgabe | A | (CO) | AF | | + | | 001B | HEX-Ausgabe | A | (CO) | AF | |
- | | 1E | BIT-Ausgabe | | | | | + | | 001E | BIT-Ausgabe | | | | |
- | | 21 | Kassetten-Ein/ | + | | 0021 | Kassetten-Ein/ |
+ | |||
+ | |||
+ | Der ZM nutzt den **RST 38** (Trap), siehe auch GO-Kommando. | ||
Neben dem ZM selbst ist im Code auch das OS-Kommando **RENEW** enthalten. Mit diesem Kommando kann ein versehentliches NEW im ROM-BASIC wieder rückgängig gemacht werden. BASIC löscht nicht den Programmspeicher, | Neben dem ZM selbst ist im Code auch das OS-Kommando **RENEW** enthalten. Mit diesem Kommando kann ein versehentliches NEW im ROM-BASIC wieder rückgängig gemacht werden. BASIC löscht nicht den Programmspeicher, | ||
Zeile 119: | Zeile 212: | ||
Neue Kommandos: | Neue Kommandos: | ||
- | | **I (Init CP/M)** | Dieses Kommando stellt CP/ | + | | **I (Init CP/M)** | Dieses Kommando stellt CP/ |
| **K (Kassette)** | Tapelook | | | | **K (Kassette)** | Tapelook | | | ||
- | | **L (Laden)** | Laden von Programmen, die auf Festwertspeicher vorliegen und der Konventionen für das symbolische Aufrufen von Anwenderprogrammen des 0S-Z 9001 entsprechen. | L<name> | | + | | **L (Laden)** | Laden von Programmen, die auf Festwertspeicher vorliegen und der Konventionen für das symbolische Aufrufen von Anwenderprogrammen des 0S-Z 9001 entsprechen. | L<name> | |
- | | **O (Off CP/M)** | wieder ^ im Z 9001-Mode | | | + | | **O (Off CP/M)** | wieder |
Die Sprungtabelle am Monitor-Anfang ist um eine Funktion erweitert: | Die Sprungtabelle am Monitor-Anfang ist um eine Funktion erweitert: | ||
^ rel.Adr. (hex.) (base + ) ^ Subroutine ^ | ^ rel.Adr. (hex.) (base + ) ^ Subroutine ^ | ||
- | | 24 | Call 5 : BDOS-Ruf im CP/M-Regime | | + | | 0024 | Call 5 : BDOS-Ruf im CP/M-Regime | |
- | Neben der bekannten durch Robotron vertriebenen Version 2.0 sind verschiedene Varianten | + | Bislang |
Die Version 3.01 arbeitet auf einem Z9001 mit 2 RAM-Modulen und bietet durch die eingebaute BDOS-Emulation eine CP/ | Die Version 3.01 arbeitet auf einem Z9001 mit 2 RAM-Modulen und bietet durch die eingebaute BDOS-Emulation eine CP/ | ||
Zeile 141: | Zeile 234: | ||
===== Version 3.02 ===== | ===== Version 3.02 ===== | ||
- | Die verschiedenen vorhandenen Versionen 3.02 unterscheiden sich im Wesentlich | + | Die verschiedenen vorhandenen Versionen 3.02 unterscheiden sich i.W. nur in den implementierten Treibern für Drucker, und den unterschiedlichen Start-Möglichkeiten diverser anderer Programme. Der Hauptunterschied |
* ZM302_BITEX | * ZM302_BITEX | ||
Zeile 158: | Zeile 251: | ||
* Benutzung eines 64K-RAM-Moduls **64 KB DRAM ZfK 9906.** | * Benutzung eines 64K-RAM-Moduls **64 KB DRAM ZfK 9906.** | ||
* Für LIST sind 2 Treiber vorhanden: V24 und CENTRONICS | * Für LIST sind 2 Treiber vorhanden: V24 und CENTRONICS | ||
- | * OS-Kommandos: | + | * OS-Kommandos: |