Beim ersten Aufruf sollte das Programm mit CALL $B803 aufgerufen werden mit dem zu übergebende Druckerbyte im Accu. Hierbei wird das Ausgabeport und der Drucker per Reset in den Betriebszustand versetzt, sonst läuft nix. Der Aufruf über $B803 muß nach jedem Einschalten des MZ700 erfolgen, da nach Power off die Ports vom Programm neu initialisiert werden müßen. Danach kann das Programm dann jeweils über die Adresse $B800 gerufen werden.
Beim ständigen CALL über die Init-Adresse $B803 gehen vorher eventuell gesendete Escape-Sequenzen u.U. wieder verloren, da ja der Drucker wieder zurückgesetzt wird.
Während eines Busy-Status des Druckers (Papierende/-stau, Power off, offline etc.) kann das Programm mit SHIFT+BRK abgebrochen werden. Es wartet in einer loop auf den Ready-Status und fragt dabei die Break-Bedingung ständig ab. Die Break-Bedingung wird dem aufgerufenen Programm über das gesetzte Zeroflag mitgeteilt und die eigene Anwendung kann so individuell darauf reagieren (Abbruch, Meldung etc.).
Beispiel:
LD A,DRUBYTE ; zu druckendes
Byte in den Accu laden
CALL $B800 ; Druckroutine
ausführen
JP Z,BREAK ; BRK
wurde gedrückt, daher zur eigenen BREAK-Routine
Das zu druckende Byte wird vom MZ700-spezifischen Code so weit als möglich
in den ASCII- Code umgewandelt.
Hierzu muß das Programm mit CALL $B000 gerufen werden und in die Adresse $B004 ein Wert von non-zero eingespeichert werden, damit ein Return zum aufrufenden Programm stattfindet:
LD A,$FF
; non-zero Wert in den Accu laden
LD ($B004),A
; und an Druck-Programm übergeben
CALL $B000
; Druck-Programm ausführen
Bei einem Wert von $00 auf der Adresse $B004 findet kein Return statt, sondern es findet eine Rückkehr zum Monitor-ROM statt. Hierdurch kann das Programm auch einen Sreenshot des derzeitigen Bildschirminhaltes über den Befehl 'JB000' ausgeben.
Ferner muß noch das Byte auf der Adresse $B003 gesetzt werden, um dem Programm mitztuteilen, wohin die Ausgabe gehen soll (Plotter oder Drucker). Für die Ausgabe auf den Plotter ist es auf hex. 50 zu setzen und für die Ausgabe auf den Drucker irgendein anderer Wert ungleich $50:
LD A,$FF
; non-zero Wert in den Accu laden
; (return to me, don't return to Monitor)
LD ($B004),A
; Wert an Druckprogramm übergeben
LD A,$50
; für Plotter-Ausgabe $50 in den Accu laden
LD ($B003),a
; und an Druckprogramm übergeben
CALL $B000
; Druck-Programm ausführen
Während der Ausgabe des Bildschirminhaltes und auch beim Warten auf den Ready-Zustand des Ausgabegerätes kann das Programm mit SHIFT+BRK abgebrochen werden. Das gesetzte Zeroflag weist hierbei auf diese Bedingung hin, so daß ein eigenes Programm hierauf reagieren kann:
LD A,$FF
; non-zero Wert in den Accu laden
; (return to me, don't return to Monitor)
LD ($B004),A ; an Druck-Programm
übergeben
LD A,$49
; für Drucker-Ausgabe $49 in den Accu laden
LD ($B003),A ; und an Druck-Programm
übergeben
CALL $B000 ; Druck-Programm
ausführen
JP Z,BREAK ; BRK
wurde gedrückt, daher zur eigenen BREAK-Routine
Für weitere Informationen kann auch die Doku in der Source weiterhelfen.
Ein inverses Zeichen auf dem Screen zeigt
den Fortschritt bei der Ausgabe als "Cursor" an, was bei Plotterbetrieb
eine zusätzliche Hilfe darstellt. Es wird das gerade zu druckende
Zeichen invers dargestellt.