;
                ;************************************
                ;*       SCRCOPY VERSION 1.0        *
                ;*      (C) 1987 BY BERND OTT       *
                ;************************************
                ;
 0100                   ORG     0100H
                ;
 BEC8 =         ADDR    EQU     0BEC8H      ; Lage der Routine im Bios Stack
 BD8D =         VERS    EQU     0BD8DH
                ;
 0005 =         BDOS    EQU     00005H      ; Bdos Einsprung
 C168 =         FIRM    EQU     0C168H      ; Firmware Einsprung
 BCE3 =         ADDFAST EQU     0BCE3H      ; New Frame Fly Back
 BB1E =         GETKEY  EQU     0BB1EH      ; Tastaturabfrage
 BC17 =         GETMODE EQU     0BC17H      ; Modetest
 BB60 =         GETCHAR EQU     0BB60H      ; Zeichen vom Bildschirm lesen
 BB78 =         GETCUR  EQU     0BB78H      ; Cursorposition feststellen
 BB75 =         SETCUR  EQU     0BB75H      ; Cursor positionieren
 BD2E =         BUSY    EQU     0BD2EH      ; Drucker empfangsbereit?
 BD2B =         SEND    EQU     0BD2BH      ; Zeichen drucken
                ;
 0100 213B01    INIT    LXI     H,TICKB     ; Routine verschieben
 0103 11C8BE            LXI     D,ADDR
 0106 015D00            LXI     B,ENDE-TICKB
 0109 EDB0              DW      0B0EDH      ; Z80 LDIR
 010B 21C8BE            LXI     H,ADDR
 010E CD68C1            CALL    FIRM
 0111 E3BC              DW      ADDFAST     ; Routine installieren
 0113 112001            LXI     D,LOGON$    ; Einschaltmeldung ausgeben
 0116 0E09              MVI     C,009H
 0118 CD0500            CALL    BDOS
 011B 0E00              MVI     C,000H      ; CP/M Warmstart
 011D CD0500            CALL    BDOS
                ;
 0120 0D0A      LOGON$  DW      00A0DH
 0122 536372636F        DB      'Scrcopy V1.0 installed'
 0138 0D0A              DW      00A0DH
 013A 24                DB      '$'
                ;
 013B 0000      TICKB   DW      00000H      ; Kettungspointer
 013D 0000      EVBLOCK DW      00000H      ; Kettung Pending Queue
 013F 00                DB      000H        ; Counter
 0140 81                DB      081H        ; Klasse
 0141 D1BE              DW      MAIN+VERS   ; Adresse der Routine
 0143 FF                DB      0FFH        ; Konfiguration
                ;
 0144 3E10      MAIN    MVI     A,010H
 0146 CD1EBB            CALL    GETKEY      ; Clr gedrueckt ?
 0149 CA1ABF            JZ      WEITER+VERS
 014C CD2EBD            CALL    BUSY        ; Drucker bereit ?
 014F DA1ABF            JC      WEITER+VERS
 0152 CD17BC            CALL    GETMODE     ; Zeilen und Spaltenanzahl feststellen
 0155 CD78BB            CALL    GETCUR      ; Cursorposition feststellen
 0158 EB                XCHG                ; und in DE speichern
 0159 2E01              MVI     L,001H      ; Zeile = 1
 015B 2601      LOOP2   MVI     H,001H      ; Spalte = 1
 015D E5        LOOP1   PUSH    H
 015E CD75BB            CALL    SETCUR      ; Cursor setzen
 0161 CD60BB            CALL    GETCHAR     ; Zeichen vom Bildschirm lesen
 0164 D2F9BE            JNC     BAD+VERS    ; Zeichen gueltig ?
 0167 FE7F              CPI     07FH        ; Zeichen druckbar ?
 0169 DAFBBE            JC      OKAY+VERS
 016C 3E20      BAD     MVI     A,020H      ; Falls ungueltig Space ausgeben
 016E CD1BBF    OKAY    CALL    PRINT+VERS  ; Zeichen drucken
 0171 E1                POP     H           ; Zaehlregister vom Stack
 0172 78                MOV     A,B
 0173 BC                CMP     H           ; mit maximaler Spaltenanzahl vergleichen
 0174 24                INR     H           ; Spalte = Spalte + 1
 0175 D2EABE            JNC     LOOP1+VERS
 0178 3E0D              MVI     A,00DH      ; CR & LF ausgeben
 017A CD1BBF            CALL    PRINT+VERS
 017D 3E0A              MVI     A,00AH
 017F CD1BBF            CALL    PRINT+VERS
 0182 79                MOV     A,C
 0183 BD                CMP     L           ; mit maximaler Zeilenanzahl vergleichen
 0184 2C                INR     L           ; Zeile = Zeile + 1
 0185 D2E8BE            JNC     LOOP2+VERS
 0188 62                MOV     H,D         ; alte Cursorposition holen
 0189 6B                MOV     L,E
 018A CD75BB            CALL    SETCUR      ; und  restaurieren
                ;
 018D C9        WEITER  RET                 ; Aussprung
                ;
 018E CD2EBD    PRINT   CALL    BUSY        ; UP Drucker bereit und Ausgabe
 0191 DA1BBF            JC      PRINT+VERS
 0194 CD2BBD            CALL    SEND
 0197 C9                RET
                ;
 0198           ENDE    END