;
;************************************ ;* 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 |