; TEST THE STATUS OF THE CONSOLE INPUT TO ; SEE IF A CHARACTER IS AVAILABLE. ; EXIT: A=0FFH -> CHARACTER AVAILABLE ; A=0 -> NO CHARACTER CONST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 0 ; CONSOLE POSITION IN IOBYTE DEFW TTYIST ; CONSOLE PRINTER DEVICE DEFW CRTST ; CONSOLE CRT DEVICE DEFW READST ; CONSOLE READER DEVICE DEFW MODIST ; CONSOLE MODEM PORT DEVICE ; PRINTER PORT INPUT STATUS ROUTINE TTYIST: IN A,(SIOBC1) ; READ PRINTER PORT INPUT STATUS JR CHKIST ; MODEM PORT INPUT STATUS ROUTINE MODIST: IN A,(SIOAC1) ; READ MODEM PORT STATUS JR CHKIST ; CONSOLE STATUS ROUTINE FOR STANDARD ; CRT TERMINAL DEVICE, SIO #0 CHANNEL B CRTST: IN A,(SIOBC0) ; READ SIO STATUS CHKIST: BIT RCVRDY,A ; CHARACTER AVAILABLE? LD A,0 RET Z ; NO. A = 0 DEC A ; YES. A = FFH RET ; GRAB A CHARACTER FROM CONSOLE INPUT ; EXIT: A=RETURNED CHARACTER CONIN: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 0 ; CONSOLE POSITION IN IOBYTE DEFW TTYIN ; CONSOLE PRINTER DEVICE DEFW CRTIN ; CONSOLE CRT DEVICE DEFW READER ; CONSOLE CURRENT READER DEFW MODIN ; CONSOLE MODEM DEVICE ; INPUT FROM PRINTER PORT TTYIN: CALL TTYIST ; SEE IF CHAR AVAIL JR Z,TTYIN IN A,(SIOBD1) ; GET CHAR AND 7FH RET ; INPUT FROM MODEM PORT MODIN: CALL MODIST ; SEE IF CHAR AVAIL JR Z,MODIN IN A,(SIOAD1) ; GET CHAR RET ; CONSOLE INPUT ROUTINE FOR ; STANDARD CRT TERMINAL DEVICE. ; SIO CHANNEL B. ; MOTOR AND LIGHT OFF IN HALF A SECOND ; WHEN THERE IS NO INPUT ON CONSOLE CRTIN: CALL CRTST ; CHECK THE STATUS JR Z,CRTIN IN A,(SIOBD0) ; FETCH THE CHARACTER AND 7FH ; STRIP OFF PARITY BIT RET ; OUTPUT A CHARACTER TO THE CONSOLE ; ENTRY: C=CHARACTER TO BE OUTPUT CONOUT: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 0 ; CONSOLE POSITION IN IOBYTE DEFW TTYOUT ; CONSOLE PRINTER DEVICE DEFW CRTOUT ; CONSOLE CRT DEVICE DEFW LIST ; CONSOLE CURRENT LIST DEVICE DEFW MODOUT ; CONSOLE MODEM DEVICE ; PRINTER STATUS ROUTINE FOR SERIAL ; INTERFACE WITH EPSON AND TI SIO ; #1 CHANNEL B TTYOST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND OUT (SIOBC1),A ; SEN OUT IN A,(SIOBC1) ; READ SIO STATUS JR CHKOST ; CRT OUTPUT STATUS ROUTINE CRTOST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND OUT (SIOBC0),A IN A,(SIOBC0) ; JR CHKOST ; ********* DISABLE XON/XOFF FOR CRT ********* ; MASK BIT CRTMSK TXMT ; OLD 802: 4H 0 NO ; 4 YES ; NEW 802: 24H 0 NO ; 4 YES ; 24 NO LD B,A LD A,(CRTMSK) AND B CP 04H ; CHECK TRANSMIT READY JR NZ,NOTRDY ; ********************************************** CHKOS1: XOR A DEC A ; A=FF, Z=0 (TXMT READY/ENABLE FOR CRT) RET ; MODEM OUTPUT STATUS ROUTINE FOR SERIAL OUTPUT MODOST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND OUT (SIOAC1),A ; SEND IT OUT IN A,(SIOAC1) ; READ SIO STATUS CHKOST: AND 00100100B ; CHECK TRANSMITT READY AND CTS CP 00100100B ; READY TO SEND JR Z,CHKOS1 ; YES, CODE FOR SET READY CONDITION NOTRDY: XOR A ; NO, SET NOT READY CONDITION RET ; OUTPUT ROUTINE FOR SERIAL EPSON AND TI ; PRINTER SIO CHANNEL A TTYOUT: CALL TTYOST ; CHECK STATUS OF PRINTER JR Z,TTYOUT ; NOT READY, LOOP BACK LD A,C ; GET CHARACTER IN REG. C AND 7FH ; STRIP OFF PARITY OUT (SIOBD1),A ; SEND OUT RET ; OUTPUT ROUTINE FOR MODEM PORT MODOUT: CALL MODOST ; CHECK STATUS OF PRINTER JR Z,MODOUT ; NOT READY WAIT LD A,C OUT (SIOAD1),A ; OUTPUT CHAR RET ; OUTPUT ROUTINE FOR STANDARD CRT ; TERMINAL DEVICE, SIO CHANNEL B CRTOUT: CALL CRTOST ; CHECK CHANNEL B TXMIT STATUS JR Z,CRTOUT ; NOT YET. LD A,C ; TRANSFER THE CHARACTER OUT (SIOBD0),A ; OUTPUT THE CHARACTER TO SIO RET ; READER STATUS ROUTINE READST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 2 DEFW TTYIST ; STANDARD PRINTER DEVICE DEFW CRTST ; STANDARD CONSOLE DEVICE DEFW MODIST ; MODEM PORT DEVICE DEFW UR2RDR ; USER DEFINED READER #2 ; PAPER TAPE READER ROUTINE, ; MOSTLY UNUSED. READER: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 2 ; POSITION OF READER IN IOBYTE DEFW TTYIN ; STANDARD TELETYPE DEVICE DEFW CRTIN ; STANDARD CONSOLE DEVICE DEFW MODIN ; MODEM PORT DEVICE DEFW UR2RDR ; USER DEFINED READER #2 ; PAPER TAPE PUNCH ROUTINE, ; CURRENTLY DUMMIED OUT, ; PRETTY MUCH. PUNCH: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 4 ; PUNCH POSITION IN IOBYTE DEFW TTYOUT ; TELETYPE OUTPUT DEFW CRTOUT ; CONSOLE OUTPUT DEFW MODOUT ; MODEM PORT OUTPUT DEFW UP2PUN ; USER DEFINED PUNCH #2 ; OUTPUT ROUTINE FOR LIST DEVICE LIST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 6 ; LIST POSITION IN IOBYTE DEFW TTYOUT ; OUTPUT TO TELETYPE DEVICE DEFW CRTOUT ; OUTPUT TO CRT DEVICE DEFW MODOUT ; MODEM PORT OUTPUT DEFW UL1LST ; USER DEFINED PRINTING DEVICE ; HERE IS THE SERIAL PRINTER DRIVER, WHICH EXPECTS ; THE DEVICE ON THE OTHER END TO SUPPORT AN ETX/ACK ; PROTOCOL. PORT USED IS SIO CHANNEL A. UL1LST: LD A,(UL1SIZ) ; SIZE OF PRINTER BUFFER. LD B,A ; FOR LATER. OR A ; CLEAR CARRY RRA ; DIVIDE BY 2 LD E,A ; E <- UL1SIZ/2 LD HL,UL1CNT ; CURRENT BUFFER COUNT INC (HL) ; BUMP IT. UL1L10: IN A,(SIOBC1) ; READ STATUS BIT RCVRDY,A ; DO WE HAVE AN INPUT CHARACTER? JR Z,UL1L20 ; NO. SEND CHARACTER. IN A,(SIOBD1) ; GRAB THE CHARACTER. AND 7FH ; STIP PARITY. CP ASCACK ; IS IT ACK? JR Z,UL1L60 ; YES, PROCESS IT. UL1L20: LD A,E ; GET UL1SIZ/2 CP (HL) ; IS BUFFER HALF-FULL? JR NZ,UL1L40 ; NO, NO NEED FOR ETX. UL1L30: IN A,(SIOBC1) ; PREPARE FOR OUTPUT. BIT TRXRDY,A ; CAN WE OUTPUT? JR Z,UL1L30 ; NOT YET. LD A,ASCETX ; SEND OFF THE END-OF- OUT (SIOBD1),A ; BLOCK CHARACTER. JR UL1L50 ; NOW OUTPUT THE CHARACTER UL1L40: LD A,B ; ORIGINAL BUFFER SIZE CP (HL) ; CHECK FOR FULL AND OVERFLOW. JR Z,UL1L30 ; FULL, SO SEND ANOTHER ETX JR C,UL1L10 ; OVERFLOW, WAIT FOR ACK. UL1L50: IN A,(SIOBC1) ; THIS IS THE REAL OUTPUT BIT TRXRDY,A ; ROUTINE AND EXIT JR Z,UL1L50 ; LOOP UNTIL TRANSMITTER READY. LD A,C ; CHARACTER HAS BEEN IN REG. C AND 7FH ; ALL THIS TIME. STRIP PARITY. OUT (SIOBD1),A ; SHIP IT! RET ; ONLY EXIT POINT. UL1L60: LD A,(HL) ; DID WE EVER SEND AN ETX? SUB E ; I.E., IS BUFFER > = HALF FULL? JR Z,UL1L70 ; YES. JR C,UL1L50 ; NO, SPURIOUS ACK. UL1L70: LD (HL),A ; ADJUST THE BUFFER COUNT JR UL1L50 ; AND SEND THE CHARACTER. ; TEST THE STATUS OF THE PRINTER ; THEN RETURN NOT READY FLAG. ; EXIT: A=0 -> PRINTER IS NOT READY ; A=0FFH -> PRINTER IS READY LISTST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 6 ; LIST POSITION IN IOBYTE DEFW TTYOST ; STATUS OF TELETYPE DEVICE DEFW CRTOST ; STATUS OF CRT DEVICE DEFW MODOST ; STATUS OF MODEM PORT OUTPUT DEFW UL1LSS ; STATUS OF USER DEFINED PRINTING DEVICE ; CHECK THE STATUS OF SERIAL PRINTER, ; CP/M UL1 DEVICE UL1LSS: LD HL,UL1CNT ; CURRENT BUFFER COUNT LD A,(UL1SIZ) ; MAX COUNT. CP (HL) ; ROOM FOR MORE CHARACTER? LD A,0FFH ; ANTICIPATE AFFIRMATIVE. RET NZ ; LISTER IS READY. IN A,(SIOBC1) ; OTHERWISE SEE IF WE HAVE BIT RCVRDY,A ; AN INPUT CHARACTER READY. LD A,0FFH ; ANTICIPATE AFFIRMATIVE AGAIN. RET NZ ; WE ARE ASSUMING CHAR. IS AN ACK. XOR A ; WE MUST NOT BE READY YET RET ; PAPER TAPE READER, PUNCH AND CONSOLE ; DUMMY ROUTINES. USER MAY FILL OUT LATER. UR2RDR: UP2PUN: LD A,1AH ; RETURN EOF. RET ; END OF 802FCONS.MAC