ORG 100H MACLIB MACRO $-M ; ;***************************************************** ; ; PRINTER ; 09/15/82 ;***************************************************** ; S0005 EQU 5H S003C EQU 3CH S003D EQU 3DH S0000 EQU 0H S005D EQU 5DH ; ; START: LXI SP,STACK ; PRINT <'XOR Printer control utility Vers. 1.0 09/12/82'> PRINT , PRINTER {p}, PRINTER {b}'> PRINT <', PRINTER {p},{b}'> PRINT PRINT <'and b = request to re-set baud rate',cr,lf,lf> LXI H,S005D ; get command tail MOV A,M ; printer no. INX H ; comma INX H ; b for "baud" MOV B,M ; may be a sp CPI 42H ; is "B" ? JZ S0186 ; jump to baud select routine CPI 20H ; space ? JZ S0121 ; no input, simply report printer ANI 07H ; ah, a printer, mask ascii DCR A ; printer 1 = hex 0 STA S003D ; 3d = printer, 3c = baud MOV A,B ; get printer # ANI 7FH ; mask msb CPI 42H ; B ? CZ S0186 ; if b, also re-set baud RST 0 ; re-boot when done S0121: PRINT <'PRINTER # '> ; LDA S003D ; get printer # STA S0349 ; stor in local JMP S016F ; put on screen DEC$CONV: DECOUT ; RET ; S016F: LHLD S0349 ; get local printer INX H ; CALL DEC$CONV ; PRINT ; RST 0 S0186: LXI D,BAUMSG ; MVI C,09H ; CALL S0005 ; S02A1: LXI D,SELMSG ; MVI C,09H ; CALL S0005 ; CHARIN ; get choice CPI '1' ; less than 1 ? JC S02A1 ; abort CPI '9'+1 ; greater than 9 ? JNC S02A1 ; abort ANI 0FH ; mask ascii DCR A ; rel to 0 LXI H,BAUDTABLE ; ready to convert MVI D,0 ; MOV E,A ; S02B7: DAD D ; MOV A,M ; correct binary pattern for generator STA S034A ; local storage S02EE: LXI D,PRTMSG ; now to find out which channel MVI C,09H ; CALL S0005 ; CHARIN ; S02FD: CPI 03H ; RZ ; CPI '0' ; JZ S0310 ; CPI '1' ; JZ S0326 ; CPI '2' ; JZ S0314 ; JMP S02EE ; S0310: IN 0BH ; cpu baud rate switch ANI 0F0H ; mask lower MOV C,A ; LDA S034A ; get new baud ORA C ; OUT 0BH ; baud rate port RST 0 ; S0314: LDA S003C ; get baud rate ANI 0F0H ; mask off lower nibble MOV C,A ; LDA S034A ; ANI 0FH ; ORA C ; S0320: OUT 0BAH ; port ba is baud rate gen on serial i.o. bd STA S003C ; RST 0 ; S0326: LDA S003C ; ANI 0FH ; MOV C,A ; LDA S034A ; ANI 0F0H ; ORA C ; JMP S0320 ; ; SELMSG: DB cr,lf,lf,'Select baud rate -> $' PRTMSG: DB cr,lf,lf,lf,'0 = CPU chan "A", 1 = left serial i.o., 2 = right serial i.o.' DB cr,lf,'Which Baud Generator ? -> $' BAUMSG: DB cr,lf DB '1 = 300 baud',cr,lf DB '2 = 600 baud',cr,lf DB '3 = 1200 baud',cr,lf DB '4 = 1800 baud',cr,lf DB '5 = 2400 baud',cr,lf DB '6 = 3600 baud',cr,lf DB '7 = 4800 baud',cr,lf DB '8 = 9600 baud',cr,lf DB '9 = 19200 baud',cr,lf DB '$' ; BAUDTABLE: DB 0000$0101B ; 300 DB 0000$0110B ; 600 DB 0000$0111B ; 1200 DB 0000$1000B ; 1800 DB 0000$1010B ; 2400 DB 0000$1011B ; 3600 DB 0000$1100B ; 4800 DB 0000$1110B ; 9600 DB 0000$1111B ; 19200 ; S0338 DW 0 S0349 DW 0 S034A DW 0 DS 64 STACK: EQU $ ; END