Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
z9001:software:zm [2010/10/02 09:40] volkerpz9001:software:zm [2021/05/31 12:31] (aktuell) – [Bedienung] volkerp
Zeile 1: Zeile 1:
 ====== Zusatzmonitor ZM ======  ====== Zusatzmonitor ZM ====== 
  
-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, Programmstart mit Breakpoints, Registeranzeige, Hex-Rechnen sowie zusätzliche Gerätetreiber für SIF1000, Drucker über den V24-Port sowie Ausgabe im Intex-HEX-Format oder ASCII auf allen unterstützten Geräten (auch TAPE!).+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, Programmstart mit Breakpoints, Registeranzeige, Hex-Rechnen sowie zusätzliche Gerätetreiber für SIF1000, Drucker über den V24-Port sowie Ausgabe im Intel-HEX-Format oder ASCII auf allen unterstützten Geräten (auch TAPE!)
 + 
 +**Achtung! Der ZM hält sich nicht an die Vorschriften des Z9001 zur Installation von Gerätetreibern etc. Vorhandene Treiber werden einfach überschrieben, ebenso das I/O-Byte. Bei Nutzung der Vollgrafik und Treibern wie CRT80 ist deshalb der ZM in originaler Version nicht nutzbar! Im Mega-Flash sind modifizierte Versionen enthalten, die sich an die Vorgaben halten und mit anderen Programmen zusammenarbeiten** 
 + 
 +2021 [[wp>Zapple_Monitor]] ist der Urvater des Zusatzmonitors. Kommandos, Bedienung, Implementierung stimmen größtenteils mit dem dem Zapple Monitor 1.1 überein. Leider lässt sich ohne Kontakt zum Autor nicht mehr ermitteln, welche Version tatsächlich Pate gestanden hat. Denkbar ist, dass der RDK-Monitor des mc-Computers zur Verfügung stand. Dieser basiert ebenfalls auf dem Zapple-Monitor
  
 ===== Version 2.0 ===== ===== Version 2.0 =====
Zeile 7: Zeile 11:
 Entwickelt wurde der Zusatzmonitor von Dr. Frank Schwarzenberg, dem Entwickler des [[z9001:cpm|CP/A]] für den Z9001 und vieler anderer Systemsoftware. Die **Version 2.0** entstand 1985 und erschien in verschiedenen Varianten (die Ziffern im Programmnamen hinter ZM stehen dabei nicht für die Version, sondern für die Anfangsadresse des genutzten Speicherbereichs): Entwickelt wurde der Zusatzmonitor von Dr. Frank Schwarzenberg, dem Entwickler des [[z9001:cpm|CP/A]] für den Z9001 und vieler anderer Systemsoftware. Die **Version 2.0** entstand 1985 und erschien in verschiedenen Varianten (die Ziffern im Programmnamen hinter ZM stehen dabei nicht für die Version, sondern für die Anfangsadresse des genutzten Speicherbereichs):
  
-  * ZM30 der Kassette {{z9001:kassetten:r0112.zip|R0112}} (Gerätegrundkassette), \\  neue Variante des ZM 2.0 +  * ZM30 der Kassette [[z9001:kassetten_robotron:r0112|]] (Gerätegrundkassette), \\  neue Variante des ZM 2.0 
-  * ZM30, ZM70, ZMA8 von den Kassetten {{z9001:kassetten:r0121.zip|R0121}} und {{z9001:kassetten:r0122.zip|R0122}} (Assembler bzw. IDAS) \\  alte Variante, s. Tabelle+  * ZM30, ZM70, ZMA8 von den Kassetten [[z9001:kassetten_robotron:r0121|]] und [[z9001:kassetten_robotron:r0122|]] (Assembler bzw. IDAS) \\  alte Variante, s. Tabelle
   * 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 "INTERPRETING DIALOG-ASSEMBLER", ZM mit Meldung "Z9001 MONITOR CENT. 1986" und mit RENEW und QUICK, NORMAL, QLOAD \\  (das ist die alte Variante des ZM 2.0)+  * IDAS-Modul Variante U. Zander sowie KCEMU (IDAS mit Meldung "INTERPRETING DIALOG-ASSEMBLER", ZM mit Meldung "Z9001 MONITOR CENT. 1986" und mit RENEW und [[z9001:software:turbo#quick_v_idas-modul_uzander|QUICK, NORMAL, QLOAD]] \\  (das ist die alte Variante des ZM 2.0)
  
 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/P-Funktion (Hardcopy) geben. Deshalb sei an dieser Stelle auf die erforderlichen Korrekturen für eine saubere Arbeitsweise der ZM-Treiber hingewiesen (aus [[z9001:literatur:treiber|]]). In meinem Quellcode ist das entsprechend kommentiert. 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/P-Funktion (Hardcopy) geben. Deshalb sei an dieser Stelle auf die erforderlichen Korrekturen für eine saubere Arbeitsweise der ZM-Treiber hingewiesen (aus [[z9001:literatur:treiber|]]). In meinem Quellcode ist das entsprechend kommentiert.
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\\  QOport_byte Schreiben zum Port | | **Q (Query)** | Lesen und Schreiben auf I/O-Ports | QIport Lesen vom Port\\  QOport_byte Schreiben zum Port |
-| **R (Read)** | Einlesen eines INTEL-Hex-Files über den Reader-Kanal | R[base] | +| **R (Read)** | Einlesen eines INTEL-Hex-Files *oder TDL-HEX* über den Reader-Kanal | R[base] | 
-| **S (Substitute)** | Modifizieren von Speicherzellen. Mit der Leertaste kann zur Adresse weitergeschaltet werden. Mit &lt;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 &lt;-- kann zurückgeschritten werden. Mit &lt;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' 2.Registersatz\\  X[']<reg> Ausgabe und Änderungsmöglichkeit für Register <reg> | | **X** | Ausgabe des Z80-Registersatzes | X 1.Registersatz\\  X' 2.Registersatz\\  X[']<reg> Ausgabe und Änderungsmöglichkeit für Register <reg> |
 | **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, über die durch\\  Modifikation der Adressen zusätzliche Kommandoroutinen angebunden werden können.+Für die Kommandos I, K, L, O und U stehen ab 220H fünf Sprungvektoren, über die durch Modifikation der Adressen zusätzliche Kommandoroutinen angebunden werden können. 
 + 
 +==== 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 "Verify ( (Y)/N )?:" ist dazu mit Y (oder Enter) zu beantworten. 
 + 
 +**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 =====
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 AV=V, AR=C, AP=C und AL=C (alles auf Konsole).\\  Soll z.B. ein über den freien PIO-Port angeschlossener V24-Drucker verwendet werden, so muss vorher AL=L gegeben werden. AC=C bewirkt, dass jeder Tastendruck mit einem Ton quittiert wird.+Nach Anlauf des Monitors gilt die Zuordnung AC=V, AR=C, AP=C und AL=C (alles auf Konsole).\\  Soll z.B. ein über den freien PIO-Port angeschlossener V24-Drucker verwendet werden, so muss vorher AL=L gegeben werden. AC=C bewirkt, dass jeder Tastendruck mit einem Ton quittiert wird
 + 
 +**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.  
 + 
 +**Drucker** 
 + 
 +Sollte der Druckermodul gesteckt sein, so wird bei AC=C auf dem Drucker protokolliert, bei AL=V auf dem Bildschirm. 
 +Bei AL=L erfolgt die Druckausgabe auf einen an den PIO-Port angeschlossen seriellen-Drucker TD40. 
 + 
 +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. 
 + 
 +Details zum Hardware-Anschluss siehe mp-Artikel [[z9001:literatur:treiber|]] und Quellcode. 
 + 
 +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, bei AL=V auf dem Bildschirm. 
  
 ===== Quellcode ===== ===== Quellcode =====
Zeile 84: Zeile 127:
 * {{:z9001:zm.zip|}} * {{: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 (und wird dem interessierten Z9001-Programmierer wärmstens zum Studium empfohlen).+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.  Aktive eigene OS-Treiber werden beim Starten des ZM gnadenlos überschrieben, Außerdem werden keine Treibernamen hinterlegt.
  
 +30.4.15: Im Paket ist eine modifizierte Version des ZM 2.0: hier werden die Gerätetreiber etwas OS-freundlicher eingebunden: vorhandene Treiber werden nicht einfach überschrieben, und bei ASGN werden Treibernamen angezeigt.
 +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: auf EFD1 DA  0F8F1h (TTY-Treiber für READER) und EFD9 DA  0F8F1h (TTY-Treiber für PUNCH), d.h. SEDF1 F1 F8, SEDF9 F1 F8, und dann AR=C, AP=C)).
 +
 +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!
 +
 +{{:z9001:software:zm20a.gif|}} {{:z9001:software:zm20b.gif|aktuell}}
 ===== Allgemein verwendbare Monitor-Routinen ===== ===== Allgemein verwendbare Monitor-Routinen =====
  
Zeile 105: Zeile 154:
 | 001E | BIT-Ausgabe | | | | | 001E | BIT-Ausgabe | | | |
 | 0021 | Kassetten-Ein/-Ausgabe Mit dieser Funktion sind Speicherbereiche als Files von/auf Kassette lad-/entladbar. Eintrittsparameter: \\  (69H) : =0 Aus-, sonst Eingabe \\  (58H) : Verschiebung bei Eingabe \\  (6DH) : Anfangsadr. für Ausgabe \\  (6FH) : Endeadr. für Ausgabe \\  (71H) : Startadr. | | | | | 0021 | Kassetten-Ein/-Ausgabe Mit dieser Funktion sind Speicherbereiche als Files von/auf Kassette lad-/entladbar. Eintrittsparameter: \\  (69H) : =0 Aus-, sonst Eingabe \\  (58H) : Verschiebung bei Eingabe \\  (6DH) : Anfangsadr. für Ausgabe \\  (6FH) : Endeadr. für Ausgabe \\  (71H) : Startadr. | | | |
 +
 +
 +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, sondern setzt nur interne Variablen. Dies macht RENEW rückgängig. Dazu ist BASIC zu verlassen, auf OS-Ebene RENEW zu tippen und dann mit WBASIC zum BASIC zurückzukehren. 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, sondern setzt nur interne Variablen. Dies macht RENEW rückgängig. Dazu ist BASIC zu verlassen, auf OS-Ebene RENEW zu tippen und dann mit WBASIC zum BASIC zurückzukehren.
Zeile 131: Zeile 183:
 | 0024 | 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 der 3. Version bekannt. Im Quellcode-Paket sind alle Versionen (reassembliert) enthalten.+Bislang sind drei verschiedene Varianten des ZM 3. Version bekannt. Im Quellcode-Paket sind alle Versionen (reassembliert) enthalten.
  
 Die Version 3.01 arbeitet auf einem Z9001 mit 2 RAM-Modulen und bietet durch die eingebaute BDOS-Emulation eine CP/M-Kompatibilität. Die Version 3.01 arbeitet auf einem Z9001 mit 2 RAM-Modulen und bietet durch die eingebaute BDOS-Emulation eine CP/M-Kompatibilität.
  • z9001/software/zm.1286012442.txt.gz
  • Zuletzt geändert: 2010/10/01 22:00
  • (Externe Bearbeitung)