Anschluß eines Centronics-Druckers an den MZ700 (Softwarebeschreibung)

Aufruf aus eigenen Programmen mit Mzprint.p

Die Software kann über CALL $B800 aus eigenen Maschinencode-Programmen aufgerufen werden. Das Druckerbyte muß dazu vorher in den Accu geladen werden. (Siehe auch Dokumentarzeilen im Programm selbst).

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.
 


Bildschirmausgabe mit Hardcopy.p

Eine Beispielanwendung ist die Hardcopy der Bildschirmausgabe. Das Programm kann eine Hardcopy sowohl über Drucker als auch über Plotter ausgeben.

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.
 


<=== zurück