ASMB,R,L,C * * NAME: DD.00 * SOURCE: 92071-18083 * RELOC: 92071-16083 * PGMR: T.A.L. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM DD.00,0 92071-16083 REV.2041 800904 * * ENT DD.00 EXT $DV1,$DV6,$DV12,$DV15,$DV16,$DV17,$DV18 EXT $DV19,$DV22,$IFTX EXT $XQSB,$ATTN,$DVLU,$LUTA,$DVTP,.MVW EXT $ONER,$ONEW * GEN 14,EDD.00,TX:15,TO:32000,QU:FI * GEN 19,M2621,DT:0,DX:12,DP:1:1:0:10400B:0:FM GEN 11,DP:6:GR:20040B:0:CO:MN GEN 5,DP:11:D:0 * GEN 17,M2631,DT:12B,DX:3,DP:1:3:0:10400B * GEN 20,M2635:0,DT:0,DX:12,DP:1:3:0:10400B:0:FM GEN 11,DP:6:GR:20040B:0:CO:MN GEN 5,DP:11:D:0 * GEN 18,M2635:1,DT:12B,DX:3,DP:1:3:0:10400B * GEN 19,M2645,DT:5,DX:12,DP:1:1:0:10400B:0:FM GEN 11,DP:6:GR:20040B:0:CO:MN GEN 5,DP:11:D:0 * GEN 20,M2675:0,DT:5,DX:12,DP:1:3:0:10400B:0:FM GEN 11,DP:6:GR:20040B:0:CO:MN GEN 5,DP:11:D:0 * GEN 18,M2675:1,DT:12B,DX:3,DP:1:3:0:10400B * A EQU 0 B EQU 1 SKP * DD.00 NOP STA DIREC SAVE DIRECTIVE JSB SETAD SETUP EXTENSION ADDR PTR'S CLA ZERO STA $DV12,I DEVICE TIMEOUT VALUE LDA DIREC GET DIRECTIVE AND B7 SZA ABORT? JMP GO NO * * ABORT * * STA DVX8,I ZERO CHARACTER ACCUMULATOR LDA B4 CALL INTERFACE DRIVER JSB CEXIT WITH ABORT CODE JMP LDCOM DEVICE COMPLETE * * GO CPA B1 INITIATE? JMP INIT YES CPA B2 CONTINUATION? JMP CONT YES CPA B3 TIMEOUT? JMP TIMOT YES CPA B4 POWER FAIL? JMP LDCOM YES, DEVICE COMPLETE * * * RESUME * * ISZ DD.00 WAIT FOR RESUME ISZ DD.00 ENTRY FROM INTERFACE RESUM LDB $DV1 GET DVT ADDRESS CPB $IFTX,I CURRENT DVT ENABLED? RSS YES JMP LDCM2 NO, DEVICE COMPLETE JSB DT GET DEVICE TYPE JMP LDCM2 PRINTER, DEVICE COMPLETE JSB $DVLU GET CONSOLE LU SZA,RSS ZERO? JMP LDCM2 YES, DEVICE COMPLETE STA LU1 NO, SAVE LU PRIMARY PROG STA LU2 SAVE LU FOR SECONDARY PROG STA BUFF SAVE LU IN FIRST WORD OF BUFR CLA LDB $IFTX GET INTERFACE DRIVER STORAGE ADDR ADB D13 COMPUTE BREAK FLAG ADDR STA B,I ZERO BREAK FLAG LDB DVP5,I GET PRIMARY SCHEDULED PROG SZB,RSS DISABLED? JMP SECPR YES, CHECK SECONDARY PROGRAM LDA DVP8,I GET PRIMARY OPTIONAL PARAMETER ADDR STA BUFF+1 SAVE IT IN SECOND WORD OF BUFR JSB $XQSB SCHEDULE PRIMARY PROGRAM DEF DVP5,I SCHEDULED PROG NAME DEF BUFF LU PARAMETER ADDRESS LU1 NOP CONSOLE LU SZA,RSS A=0? SUCCESSFUL SCHEDULE? JMP LDCM2 YES, DEVICE COMPLETE SECPR LDB DVP9,I GET SECONDARY SCHEDULED PROG SZB,RSS DISABLED? JMP CHKLU YES, CHECK FOR LU=1 LDA DVP12,I GET SECONDARY OPTIONAL PARAMETER ADDR STA BUFF+1 SAVE IT IN SECOND WORD OF BUFR JSB $XQSB SCHEDULE SECONDARY PROGRAM DEF DVP9,I SCHEDULED PROGRAM NAME DEF BUFF LU PARAMETER ADDRESS LU2 NOP CONSOLE LU SZA,RSS SUCCESSFUL SCHEDULE? JMP LDCM2 YES, DEVICE COMPLETE CHKLU LDA LU1 GET CONSOLE LU LDB $DV1 GET DVT ADDR CPB $LUTA,I LU=1? CLA,INA NO, SET TO 1 STA $ATTN SET SYSTEM ATTENSION FLAG JMP LDCM2 DEVICE COMPLETE * B1 OCT 1 B2 OCT 2 B3 OCT 3 B7 OCT 7 B12 OCT 12 PRINTER DEVICE TYPE D13 DEC 13 BUFF REP 5 NOP * * * INITIATION * * INIT LDA $DV6,I GET DEVICE STATUS AND LBYTE REMOVE STATUS STA $DV6,I SAVE IT CLA STA DVX10,I ZERO FORM CONTROL CHAR STA DVX8,I ZERO CHARACTER ACCUMULATOR LDA $DV15,I GET SUBFUNCTION STA DVX15,I SAVE INITIAL SUBFUNCTION AND BSL GET S BIT (BIT 3) FROM $DV15 STA UBIT BIT 3=0/1, DATA FROM SYSTEM/USER SPACE LDA $DV15,I GET SUBFUNCTION AND B3 CPA B3 CONTROL REQUEST? JMP CNTRL YES LDB $DV16,I GET BUFFER ADDR STB DVX2,I SAVE BUFF ADDR OF CURRENT REQ. STB DVX6,I SAVE INITIAL BUFF ADDR. STB DVX12,I SAVE INITIAL BUFF ADDR. LDB $DV17,I GET XLOG STB DVX7,I SAVE INITIAL XLOG STB DVX13,I SAVE INITIAL XLOG SZB,RSS ZERO? JMP ZLOG YES, CHECK FOR WRITE CPA B1 READ REQUEST? JMP READ YES * * * WRITE REQUEST * * LDA $DV15,I GET Z BIT (BIT12) ALF,SLA Z BIT SET? JMP WRITF YES, WRITE SECOND BUFFER FIRST WRITE JSB DT GET DEVICE TYPE JMP FCNTL PRINTER, CHECK FORM CONTROL CWRIT LDA DVX13,I GET INITIAL XLOG OF OUTPUT SSA CHARACTERS? JMP *+3 YES, SAVE THEM CMA,INA CONVERT ALS TO -CHAR'S STA DVX3,I SAVE -CHAR LENGTH LDA $DV15,I GET SUBFUNCTION AND BCRLF CLEAR CRLF BIT7 & ESC_ BIT11 STA DVX5,I SAVE MODIFIED SUBFUNCTION LSR 6 BIT 6 SLA ASCII? JMP SCHAR NO, SEND CHARACTERS LSR 4 YES, CHECK FOR TRANSPARENT SLA TRANSPARENT? JMP SBIN YES, SET BINARY BIT LDA DVX3,I GET -CHAR'S CMA,INA MAKE CHAR'S POSITIVE LDB DVX12,I GET INITIAL ADDR OF OUTPUT JSB LCHRU GET LAST CHARACTER (USER SPACE) CPA B137 UNDERSCORE? RSS YES, DO NOT OUTPUT JMP SCHAR NO, SEND CHAR'S ISZ DVX3,I INCREMENT BUFFER LENGTH NOP LDA DVX5,I GET SUBFUNCTION IOR BIT7 INHIBIT CRLF BIT SSUB STA DVX5,I SAVE IT SCHAR LDA $DVTP,I GET TERMINAL CONFIGURATION SLA,RSS ENQ/ACK ENABLED? JMP NOENQ NO, SKIP ENQ/ACK HANDSHAKE LDA DVX5,I GET INITIAL SUBFUNCTION AND RQASC CLEAR BITS 6,7,11 & RQ IOR B201 MAKE SURE ITS A AND SBIT (SYSTEM ADDR. SPACE) STA $DV15,I ASCII READ (NO CRLF) LDA ENQ GET 'ENQ' IN UPPER BYTE STA $DV19,I SAVE IT LDA DVX9 GET 1 BYTE READ ADDR. JSB EXIT1 SEND 'ENQ', READ 'ACK' * NOENQ LDA DVX2,I GET ADDR. OF CURRENT REQ. STA $DV16,I SAVE IT ADA D39 INCREMENT ADDR BY 78 CHAR'S STA DVX2,I SAVE NEW CURRENT REQ. ADDR. * * LIMIT CHARACTER OUTPUT TO 78 * * LDB DVX3,I GET BUFFER LENGTH (-CHAR'S) STB $DV17,I SAVE LENGTH ADB D78 ADD +78 CHAR'S STB DVX3,I SAVE REMAINING CHAR'S LDA DVX5,I GET WRITE SUBFUNCTION STA $DV15,I SAVE IT SSB,RSS BUFFER LENGTH < 78 CHARS? JMP SSFLG YES, CHECK FOR SUPRESS SPACE IOR BIT7 NO, INHIBIT 'CRLF' BIT STA $DV15,I SAVE NEW SUBFUNCTION LDB M78 SET -78 CHAR MAX STB $DV17,I SAVE LENGTH JMP OUTPT SEND 78 CHAR'S SSFLG LDB DVP2,I GET SUPRESS SPACE FLAG SZB,RSS SUPRESS SPACE? JMP ESCBA NO, ALLOW 'CRLF' IOR BIT7 YES, INHIBIT 'CRLF' STA $DV15,I SAVE SUBFUNCTION JMP OUTPT SEND CHAR'S ESCBA IOR BIT11 ENABLE ESCAPE BACKARROW (BIT11) LDB $DVTP,I GET TERMINAL CONFIGURATION SSB 264X TERMINAL? STA $DV15,I YES, SAVE ESC_ BIT IN SUBFUN * OUTPT CLA STA $DV18,I ZERO ASIC CONTROL WORD LDA $DV15,I GET SOURCE BIT IOR UBIT (USER ADDR. SPACE) STA $DV15,I DATA FROM USER ADDRESSING CLA,INA ALLOW TIMEOUT JSB CEXIT INITIATE WRITE * LDB DVX3,I GET BUFF LNGTH REMAINING CHAR'S SSB POSITIVE? JMP SCHAR NO, OUTPUT REMAINING CHARS. * LDB DVP2,I GET SUPRESS SPACE FLAG SZB,RSS SUPRESS SPACE? JMP WRITC NO, COMPLETE WRITE REQUEST CLA YES STA DVP2,I ZERO SUPRESS SPACE FLAG LDA $DV15,I GET SOURCE BIT AND SBIT (SYSTEM ADDR. SPACE) STA $DV15,I DATA FROM SYSTEM ADDRESSING LDA CRA GET 'CR' ADDRESS JSB EXIT1 INITIATE 'CR' * WRITC LDA DVX8,I GET TOTAL XLOG (+CHARS) INA ROUNDOFF ARS CONVERT TO WORDS LDB DVX7,I GET ORIGIONAL XLOG SSB WORDS? LDA DVX8,I NO, SAVE CHAR'S STA $DV17,I YES, SAVE WORDS JSB BUFIX RESTORE FORM CONTROL CHAR LDA DVX15,I GET SUBFUNCTION AND ZBIT GET Z BIT SZA,RSS Z-BIT SET? JMP INITD NO, DONE WITH INITIAL REQUEST XOR DVX15,I YES, CLEAR Z-BIT STA DVX15,I SAVE SUBFUNCTION JMP INITR DO INITIAL REQUEST * INITD LDA $DV18,I GET ASIC STATUS SLA NEW DATA RECEIVED? JMP RESUM YES, ACKNOWLEDGE IT JMP LDCM2 NO, DEVICE COMPLETE * SBIN LDA DVX5,I GET WRITE SUBFUNCTION IOR BIT6 SET BINARY BIT JMP SSUB SAVE SUBFUNCTION * CRA DEF B6400 B6400 OCT 6400 'CR' IN UPPER BYTE * BIT6 OCT 100 BINARY BIT 6 BIT7 OCT 200 INHIBIT CRLF BIT B201 OCT 201 ENQ OCT 2400 'ENQ' D39 DEC 39 D78 DEC 78 M78 DEC -78 BCRLF OCT 173577 CLEAR CRLF BIT7 & ESC_ BIT11 ZBIT OCT 10000 Z-BIT UBIT NOP SAVE S BIT (BIT 3) SBIT OCT 177767 ZERO S BIT (BIT 3) * * * ZERO TRANSMISSION LOG * * ZLOG CPA B1 READ REQUEST? JMP LDCM3 YES, DEVICE COMPLETE JMP TICST INITIATE ZERO LENGTH WRITE * * ASCII WRITE SUBROUTINE * * ASCWT NOP LDA $DV15,I GET RQ AND RQASC MAKE SURE IOR B2 ITS A ASCII WRITE LDB $DVTP,I GET TERMINAL CONFG WORD SSB 264X TERMINAL? IOR BIT11 YES, ENABLE ESC_ BIT IN SUBFUNC STA $DV15,I SAVE IT JMP ASCWT,I RETURN * RQASC OCT 173474 ZERO BITS 6,7,11 & RQ * * RESTORE FORM CONTROL CHARACTER * * BUFIX NOP LDB DVX10,I GET FORM CONTROL CHAR SZB,RSS RESTORE IT? JMP BUFIX,I NO, RETURN LDB DVX12,I YES, GET ADDR. OF OUTPUT BUFFER JSB $ONER PUT FORM CONTROL CHAR DEF DVX15,I DEF $DV1,I IOR DVX10,I BACK INTO OUTPUT JSB $ONEW BUFFER DEF DVX15,I DEF $DV1,I JMP BUFIX,I * * GET DEVICE TYPE * * DT NOP LDA $DV6,I GET ALF,ALF DEVICE AND B77 TYPE CPA B12 PRINTER? JMP DT,I YES, RETURN P+1 ISZ DT JMP DT,I NO, RETURN P+2 SKP * * * READ REQUEST * * READ LDA $DV15,I GET Z BIT (BIT12) ALF,SLA Z BIT SET? JMP WRITF YES, WRITE FIRST LDA $DV17,I GET BUFFER LENGTH CREAD SSA CHARACTERS? JMP *+3 YES, SAVE THEM CMA,INA CONVERT ALS TO -CHAR'S STA DVX3,I SAVE -CHAR LENGTH STA $DV17,I READM LDA BIT14 TYP 1 SPEC CHAR LDB $DV15,I GET SUBFUNCTION BLF,BLF SLB,RBR ECHO SET? IOR BIT11 YES, SET ECHO IN CONTROL WORD RBR,SLB TRANSPARENT BIT SET? IOR BIT15 YES, SET SPEC CHAR 'CR' BLF,SLB BINARY BIT SET? IOR BIT15 YES, SET SPEC CHAR 'CR' STA $DV18,I SAVE CONTROL WORD JMP DC1 SET UP DC1 * * * BLOCK TRANSFER * * BKXFR STB TEMP SAVE LAST WORD ADDRESS LDB DVX6,I GET INITIAL CHAR ADDR PTR JSB $ONER GET FIRST CHAR IN BUFFER DEF DVX15,I DEF $DV1,I AND LBYTE REMOVE LOWER BYTE CPA DC2H BLOCK MODE? JMP BKCON YES, CONTINUE CLA,INA NO, DC2 NOT FIRST CHAR ADA DVX8,I ADD DC2 BACK INTO STA DVX8,I ACCUMULATED COUNT LDB TEMP GET LAST WORD ADDRESS JMP NOBLK CONTINUE READ * BKCON LDA BIT15 SET SPEC CHAR 'RS' STA $DV18,I SAVE ASIC CONTROL WORD LDA DVX3,I GET READ LENGTH (-CHARS) STA $DV17,I SAVE IT LDA DVX2,I GET BUFFER ADDR STA $DV16,I SAVE IT DC1 LDA DVP3,I SET UP FOR STA $DV19,I DC1 CODE IN UPPER BYTE LDA $DV15,I GET SOURCE BIT IOR UBIT (USER ADDR. SPACE) STA $DV15,I DATA FROM USER ADDRESSING CLA,INA ALLOW TIMEOUT JSB CEXIT SEND DC1, READ DVT17 BYTES * JMP LDCOM DEVICE COMPLETE * DC2H OCT 11000 DC2 CODE IN UPPER BYTE * * * WRITE FIRST * * WRITF LDA $DV19,I SETUP OUTPUT LENGTH LDB $DV18,I MOVE OUTPUT ADDR STB DVX2,I SAVE ADDR OF CURRENT REQ. STB DVX12,I SAVE INITIAL ADDR OF OUTPUT STA DVX13,I SAVE INITIAL XLOG OF OUTPUT LDA $DV15,I GET RQ AND RQASC MAKE SURE IOR B2 ITS A ASCII WRITE STA $DV15,I RAL,SLA SSA SYSTEM REQUEST TYPE? JMP WRITE NO, LEAVE TIMEOUT ALONE LDA DVP4,I GET DEVICE TIMEOUT DVR PARAM STA $DV12,I SAVE IT JMP WRITE * * * COMPLETE INITIAL REQUEST * * INITR CLA STA DVX8,I ZERO CHARACTER ACCUMULATOR LDB DVX6,I GET INITIAL REQUEST BUFFER ADDR STB $DV16,I SAVE IT STB DVX2,I SAVE IT LDA DVX15,I GET INITIAL REQUEST STA $DV15,I SAVE IT AND B3 CPA B2 WRITE REQUEST? JMP WRT YES, SET UP FOR WRITE LDA DVX7,I NO, GET INITIAL XLOG OF READ JMP CREAD NOW DO READ WRT STB DVX12,I SAVE INITIAL ADDR OF OUTPUT LDA DVX7,I GET INITIAL XLOG OF OUTPUT STA DVX13,I SAVE IT JMP WRITE DO WRITE * * * BACKSPACE * * BKSPC LDB DVX2,I GET ADDR OF CURRENT REQ. CCA DECREMENT TOTAL ADA DVX8,I CHARACTER COUNT SSA COUNT POSITIVE? JMP RSTRT NO, AT BEGINNING OF USER'S BUFF STA DVX8,I YES, SAVE IT JSB LCHRU FIND LAST CHAR (USER SPACE) NOBLK SEZ EVEN? JMP RESRT YES, RESTART DMA JSB $ONER GET LAST WORD DEF DVX15,I DEF $DV1,I AND LBYTE REMOVE LOWER BYTE IOR B40 PAD WITH A BLANK JSB $ONEW RESTORE WORD DEF DVX15,I DEF $DV1,I LDA BIT14 SET TYP 1 SPEC CHAR JSB RDCHR INITIATE JSB CEXIT ONE BYTE READ * CLA,INA ONE BYTE LENGTH LDB DVX9 BYTE ADDR JSB LCHRS GET BYTE JUST READ (SYSTEM SPACE) STA TEMP SAVE IN LOW BYTE CCA SUBTRACT ONE FROM ADA DVX8,I TOTAL BYTES READ LDB DVX2,I GET STARTING BUFFER ADDR JSB LCHRU FIND LAST GOOD CHAR IN USER BUFF ALF,ALF MOVE TO HIGH BYTE IOR TEMP MERGE IN SINGLE BYTE READ JSB $ONEW SAVE IN USER'S BUFFER DEF DVX15,I DEF $DV1,I RESRT INB INCREMENT RSTRT STB $DV16,I USER'S BUFFER ADDR LDB DVX8,I GET TOTAL CHAR'S READ ADB DVX3,I ADD -CHAR'S LENGTH STB $DV17,I SAVE -CHAR'S TO READ JMP READM READ N CHAR'S MORE * * * RUBOUT REQUEST * * RBOUT JSB ASCWT MAKE SURE ITS A ASCII WRITE LDA $DV15,I GET SOURCE BIT AND SBIT (SYSTEM ADDR. SPACE) STA $DV15,I DATA FROM SYSTEM ADDRESSING LDA ROUTA GET RUBOUT ADDRESS STA $DV16,I SAVE IT CCA BUFFER LENGTH STA $DV17,I SAVE IT CLA STA $DV18,I ZERO ASIC CONTROL WORD INA ALLOW TIMEOUT JSB CEXIT INITIATE RUBOUT * JMP INITR RESTART REQUEST * BKSL OCT 56000 "\" IN UPPER BYTE ROUTA DEF BKSL BACKSLASH PTR * * * CONTROL D REQUEST * * CNTRD LDA $DV6,I GET DEVICE STATUS IOR BIT57 SET 'EOF' & 'EOM' BITS STA $DV6,I SAVE IT CLA ZERO STA $DV16,I ERROR CODE AND STA $DV17,I TRANSMISSION LOG JSB BUFIX RESTORE FORM CONTROL CHAR JMP LDCM2 DEVICE COMPLETION * BIT57 OCT 240 SET EOF & EOM BITS * * * CONTROL REQUEST * * CNTRL CLA CREATE DUMMY BUFF ADDR FOR STA DVX12,I BUFIX ROUTINE LDA $DV15,I GET SOURCE BIT AND SBIT (SYSTEM ADDR. SPACE) STA $DV15,I DATA FROM SYSTEM ADDRESSING LSR 6 GET SUBFUNCTION AND B77 SZA,RSS RESET TERMINAL? JMP RESET YES CPA B6 DYNAMIC STATUS? JMP TICST YES CPA B11 LINE SPACING/FORMFEED? JMP SPACE YES CPA B15 CONDITIONAL FORMFEED? JMP SPACE YES CPA B20 ENABLE PRIMARY PROG SCHED? JMP EPPRG YES CPA B21 DISABLE PRIMARY PROG? JMP DPPRG YES CPA B22 SET TIMEOUT? JMP SETTO YES CPA B23 DISABLE ASYNCHRONOUS INTERRUPTS? JMP DPROG YES CPA B40 ENABLE SECONDARY PROG SCHED? JMP ESPRG YES CPA B41 DISABLE SECONDARY PROG? JMP DSPRG YES CPA B42 GET CHARACTER? JMP GTCHR YES, READ 1 ASCII BYTE LDB $DV16,I GET NEW CONFIGURATION WORD CPA B44 MODIFY CONFIGURATION WORD? STB $DVTP,I YES, SAVE NEW WORD CPA B45 MODIFY TRIGGER CHARACTER? RSS YES, SAVE NEW TRIGGER JMP LDCM3 DEVICE COMPLETION LDA B GET NEW TRIGGER CHARACTER AND LBYTE REMOVE LOWER BYTE STA DVP3,I SAVE NEW TRIGGER CHARACTER JMP LDCM3 DEVICE COMPLETION * B6 OCT 6 B11 OCT 11 B15 OCT 15 B20 OCT 20 B21 OCT 21 B23 OCT 23 B40 OCT 40 B41 OCT 41 B42 OCT 42 B44 OCT 44 B45 OCT 45 B77 OCT 77 D55 DEC 55 M2 DEC -2 M55 DEC -55 * * RESET TERMINAL (FUNCTION CODE = 00) * * RESET JSB ASCWT MAKE SURE ITS A ASCII WRITE LDA ESCEA GET ESCAPE SEQ ADDR FOR RESET STA $DV16,I SAVE IT LDA M2 BUFFER LENGTH STA $DV17,I SAVE IT CLA STA $DV18,I ZERO ASIC CONTROL WORD INA ALLOW TIMEOUT JSB CEXIT INITIATE TERMINAL RESET * JMP LDCM2 DEVICE COMPLETE * ESCEA DEF ESCE ESCE OCT 15505 * * DYNAMIC STATUS (FUNCTION CODE = 6) * * TICST CLA JSB CEXIT INITIATE DYNAMIC STATUS * JMP LDCM2 DEVICE COMPLETE * * LINE SPACING (FUNCTION CODE = 11) * * SPACE JSB ASCWT MAKE SURE ITS A ASCII WRITE LDB $DV16,I GET # OF LINES SPACED SSB NEGATIVE? JMP SNDFF YES, SEND FORMFEED CMB,INB,SZB ZERO? JMP LINE NO, SKIP LINES JSB DT YES, GET DEVICE TYPE JMP SUP PRINTER, SET SUPRESS FLAG CCB CRT, SKIP ONE LINE LINE LDA B ADA D55 SSA DECIMAL PARM > 55? LDB M55 YES, SET TO 55 LINES STB DVX11,I SAVE LINE FEED COUNT LNSPC JSB LNSP SETUP FOR LINE SPACE JSB CEXIT INITIATE ZERO LENGTH RECORD * ISZ DVX11,I DONE WITH LINEFEED'S? JMP LNSPC NO JMP LDCM2 YES, DEVICE COMPLETE * * SUPRESS SPACE (FUNCTION CODE = 11) * * SUP CLA,INA STA DVP2,I SET SUPRESS FLAG JMP LDCM2 DEVICE COMPLETE * * SEND FORMFEED (FUNCTION CODE = 11) * * SNDFF JSB DT GET DEVICE TYPE JMP FORM PRINTER, PERFORM FORMFEED JMP LINE CRT, SPACE LINES FORM LDA FFA GET FORMFEED ADDRESS JSB EXIT1 INITIATE FORMFEED * JMP LDCM2 DEVICE COMPLETE * FFA DEF FF FF OCT 6000 FORMFEED IN UPPER BYTE * * SETUP LINESPACE * * LNSP NOP CLA STA $DV17,I ZERO BUFFER LENGTH STA $DV18,I ZERO ASIC CONTROL WORD INA ALLOW TIMEOUT JMP LNSP,I RETURN * * FORM CONTROL * * FCNTL LDA $DV15,I GET SUBFUNCTION STA DVX5,I SAVE IT AND BIT10 GET HONESTY MODE (X FIELD) SZA BIT 10 SET? JMP CWRIT YES, IGNORE FORM CONTROL LDA $DV15,I AND BIT7 GET CARRIAGE CONTROL (V FIELD) SZA BIT 7 SET? JMP CWRIT YES, OUTPUT ENTIRE BUFFER LDB DVX12,I NO, GET ADDRESS OF FIRST CHARACTER JSB $ONER GET FIRST TWO CHARACTERS DEF DVX15,I DEF $DV1,I STA TEMP AND LBYTE GET FORM CONTROL CHARACTER STA DVX10,I SAVE IN EXTENSION XOR TEMP REPLACE FORM CONTROL CHARACTER JSB $ONEW DEF DVX15,I DEF $DV1,I JSB ASCWT MAKE SURE ITS A ASCII WRITE LDA $DV15,I GET SOURCE BIT AND SBIT (SYSTEM ADDR. SPACE) STA $DV15,I DATA FROM SYSTEM ADDRESSING LDA DVX10,I GET FORM CONTROL CHARACTER CPA A0 DOUBLE SPACE? JMP DBLSP YES CPA A1 EJECT PAGE? JMP EJPG YES CPA ASS SUPRESS SPACE? JMP SUPSP YES JMP CWRT SINGLE SPACE * A0 OCT 30000 ASCII ZERO IN UPPER BYTE A1 OCT 30400 ASCII ONE IN UPPER BYTE ASS OCT 25000 ASCII * IN UPPER BYTE BIT10 OCT 2000 HONESTY MODE (X FIELD) * * * BOUBLE SPACE * * DBLSP LDB M1 LINE FEED COUNT STB DVX11,I SAVE IT DSPC JSB LNSP SETUP FOR LINESPACE JSB CEXIT INITIATE ZERO LENGTH RECORD * ISZ DVX11,I DONE WITH LINEFEED'S? JMP DSPC NO, DO MORE JMP CWRIT YES, CONTINUE WRITE CWRT LDA DVX5,I GET WRITE SUBFUNCTION STA $DV15,I SAVE IT JMP CWRIT CONTINUE WRITE * * SUPRESS SPACE * * SUPSP CLA,INA STA DVP2,I SET SUPRESS FLAG JMP CWRT RESTORE SUBFUNCTION * * EJECT PAGE * * EJPG LDA FFA GET FORMFEED ADDRESS JSB EXIT1 INITIATE FORMFEED JMP CWRT RESTORE SUBFUNCTION * * * ENABLE PRIMARY/SECONDARY PROGRAM SCHED (FUNCTION CODE = 20/40) * * EPPRG LDB DVP5 SAVE PRIMARY PROG NAME IN DVP5-DVP7 RSS OPTIONAL PARAMETER IN DVP8 ESPRG LDB DVP9 SAVE SECONDARY PROG NAME IN DVP9-DVP11 LDA $DV16 GET SCHED PROG NAME POINTER JSB .MVW SAVE SCHEDULED NAME DEF B4 PLUS OPTIONAL PARAMETER NOP LDA $DV15,I SEND CONTROL REQUEST AND SUBFN REMOVE SUBFUN IOR B2300 WITH SUBFUN = 23 STA $DV15,I CLA ZERO PARAMETER TO STA $DV16,I ENABLE ASYNC INT. JSB CEXIT INITIATE PRIMARY/SECONDARY PROG REQUEST * JMP LDCM2 DEVICE COMPLETE * B2300 OCT 2300 SUBFN OCT 170077 * * * DISABLE PRIMARY/SECONDARY PROGRAM SCHED (FUNCTION CODE = 21/41) * * DPPRG CCA STA DVP5,I SETUP ILLEGAL NAME JMP LDCM2 DEVICE COMPLETE * DSPRG CCA STA DVP9,I SETUP ILLEGAL NAME JMP LDCM2 DEVICE COMPLETE * * * DISABLE ASYNCHRONOUS INTERRUPTS (FUNCTION CODE = 23) * * DPROG CLA,INA SET PARAMETER TO STA $DV16,I DISABLE ASYNC INT. CLA JSB CEXIT INITIATE DISABLE PROG REQUEST * JMP LDCM2 DEVICE COMPLETE * * * SET TIMEOUT (FUNCTION CODE = 22) * * SETTO JSB DT GET DEVICE TYPE JMP LDCM2 PRINTER, DEVICE COMPLETE LDA $DV16,I GET TEN'S OF MILLISEC CMA,INA MAKE NEG. STA DVP4,I UPDATE DEVICE TIMEOUT DVR PARAM LDCM3 CLA ZERO STA $DV16,I ERROR CODE JMP LDCM2 DEVICE COMPLETE * * READ 1 ASCII CHARACTER INTO EXTENSION (FUNCTION CODE = 42) * * GTCHR LDA $DV15,I MAKE SURE AND RQASC ITS A IOR B1 ASCII READ STA $DV15,I SAVE IT CLB LDA $DV16,I GET OPTIONAL PARAMETER SZA,RSS ZERO? LDB BIT11 YES, SET ECHO BIT STB $DV18,I SAVE ASIC CONTROL WORD LDA DVX9 GET1 BYTE READ ADDR. STA $DV16,I SAVE IT CCA ONE BYTE BUFFER LENGTH STA $DV17,I SAVE IT CLA STA $DV19,I ZERO OPTIONAL PARAMETER STA DVX3,I REQUIRED FOR READ CONTINUATION INA ALLOW TIMEOUT JSB CEXIT READ ONE ASCII CHARACTER * LDA DVX9,I GET CHARACTER READ (UPPER BYTE) LDB $DV17,I GET XLOG (+1) LSL 8 SHIFT XLOG INTO HIGH BYTE AND STB $DV17,I CHAR INTO LOW BYTE OF B REG. JMP LDCM2 DEVICE COMPLETE * * * CONTINUATION EXIT * * CEXIT NOP LDB CEXIT STORE RETURN ADDR STB DVX1,I AT DVX1 LDB $DV16,I GET BUFFER ADDR STB DVX4,I SAVE ADDR OF CURRENT READ ISZ DD.00 JMP DD.00,I INTERFACE INITIATE * EXIT1 NOP CCB BUFFER LENGTH = 1 CHAR DST $DV16,I SAVE BUFFER ADDR, BUFFER LENGTH ADB DVX8,I REMOVE LAST CHARACTER STB DVX8,I FROM ACCUMULATED XLOG CLA STA $DV18,I ZERO ASIC CONTROL WORD INA ALLOW TIMEOUT LDB EXIT1 SAVE RETURN ADDR JMP CEXIT+2 INITIATE REQUEST SKP * * * CONTINUATION * * CONT LDA $DV17,I GET XLOG (+CHAR'S) ADA DVX8,I ADD PREVIOUS ACCUMULATED CHAR'S STA DVX8,I SAVE ACCUMULATED XLOG (+CHAR'S) LDA $DV16,I GET ERROR CODE AND B77 CPA B3 TIMEOUT? JMP TIMOT YES SZA ERROR? JMP LDCOM YES, DEVICE COMPLETE LDA DVX15,I GET S BIT (BIT 3) FROM DVX15 AND BSL BIT 3=0/1, DATA FROM SYSTEM USER SPACE STA UBIT SAVE IT LDA $DV15,I GET RQ LDB DVX1,I RAR,SLA WRITE REQ? JMP B,I YES, CONTINUE WRITE LDA $DV18,I GET ASIC STATUS ALF,ALF GET SPECIAL CHAR BIT SSA SPECIAL CHAR? JMP DMAIN NO, DMA INT. CCA YES ADA DVX8,I REMOVE LAST CHAR FROM COUNT STA DVX8,I SAVE COUNT LDA $DV17,I GET XLOG (+CHAR'S) LDB DVX4,I GET CHAR ADDR PTR JSB LCHRS GET SPECIAL CHAR (SYSTEM SPACE) CPA DC2L DC2? JMP BKXFR YES, BLOCK TRANSFER CPA CR CR? JMP WZERO YES CPA BSL BACKSPACE? JMP BKSPC YES CPA RO RUBOUT? JMP RBOUT YES CPA RS RECORD SEPERATOR? JMP WZERO YES, WRITE ZERO LENGTH RECORD CPA CN.D CONTROL D? JMP CNTRD YES JMP RBOUT * WZERO SEZ,RSS LAST CHAR EVEN? JMP WRTZ NO, SETUP FOR ZERO LENGTH ASCII WRITE JSB $ONER YES, GET LAST WORD DEF DVX15,I DEF $DV1,I AND LBYTE REMOVE LOWER BYTE IOR B40 PAD WITH A BLANK JSB $ONEW RESTORE WORD DEF DVX15,I DEF $DV1,I WRTZ LDA DVX15,I GET INITIAL SUBFUNCTION LSR 6 BIT 6 SLA BINARY? JMP LDCOM YES, NO CRLF JSB ASCWT MAKE SURE ITS A ASCII WRITE CLA ZERO STA $DV17,I XLOG AND STA $DV18,I ASIC CONTROL WORD INA ALLOW TIMEOUT JSB CEXIT INITIATE ZERO LENGTH RECORD * LDCOM LDA DVX8,I GET TOTAL XLOG (+CHARS) INA ROUNDOFF ARS CONVERT TO WORDS LDB DVX7,I GET ORIGIONAL XLOG SSB WORDS? LDA DVX8,I NO, SAVE CHAR'S STA $DV17,I YES, SAVE WORDS JSB BUFIX RESTORE FORM CONTROL CHAR LDCM2 CLA JMP DD.00,I DEVICE COMPLETE * DMAIN LDA DVX8,I GET ACCUMULATED XLOG (+CHAR'S) ADA DVX3,I GET BUFFER LENGTH (-CHAR'S) SZA XLOG=ORIGIONAL BUFFER LENGTH? JMP B,I NO, FINISH REQUEST LDA $DV17,I YES, GET XLOG (+CHAR'S) LDB DVX4,I GET CHAR ADDR PTR JSB LCHRS GET LAST CHARACTER (SYSTEM SPACE) LDA $DV15,I GET SUBFUNCTION AND B2100 TRANSPARENT & BINARY BITS SET? CME,SZA NO, COMPLEMENT CHARACTER FLAG JMP LDCOM YES, DO NOT APPEND 'CRLF' JMP WZERO FINISH READ * B2100 OCT 2100 TRANSPARANT & BINARY BITS * * * READ ONE CHARACTER SUBROUTINE * * RDCHR NOP LDB $DV15,I GET SUBFUNCTION BLF,BLF SLB ECHO SET? IOR BIT11 YES, SET ECHO IN CONTROL WORD STA $DV18,I FORM ASIC CONTROL WORD LDA $DV15,I GET SOURCE BIT AND SBIT (SYSTEM ADDR. SPACE) STA $DV15,I DATA FROM SYSTEM ADDRESSING LDA DVX9 GET BUFFER ADDR OF 1 BYTE READ STA $DV16,I SAVE IT CCA BUFFER LENGTH STA $DV17,I OF 1 BYTE CLA STA $DV19,I ZERO OPTIONAL PARAMETER INA ALLOW TIMEOUT JMP RDCHR,I RETURN * BIT11 OCT 4000 ECHO BIT/ESCAPE BACKARROW BIT * * * GET LAST CHARACTER SUBROUTINE * * LCHRU NOP A=XLOG(+CHARS), B=CHAR ADDR PTR ADA M1 CREATE RBL LAST ADB A BYTE ADDRESS CLE,ERB E=0/1, ODD/EVEN JSB $ONER GET LAST CHAR DEF DVX15,I (USER ADDR. SPACE) DEF $DV1,I SEZ,RSS CHAR EVEN? ALF,ALF NO, ROTATE TO LOW BYTE AND HBYTE REMOVE HIGH BYTE JMP LCHRU,I A=CHAR IN LOW BYTE, E=ODD/EVEN * LCHRS NOP A=XLOG(+CHARS), B=CHAR ADDR PTR ADA M1 CREATE RBL LAST ADB A BYTE ADDRESS CLE,ERB E=0/1, ODD/EVEN JSB $ONER GET LAST CHARACTER DEF $DV15,I (SYSTEM ADDR. SPACE) DEF $DV1,I SEZ,RSS CHAR EVEN? ALF,ALF NO, ROTATE TO LOW BYTE AND HBYTE REMOVE HIGH BYTE JMP LCHRS,I A=CHAR IN LOW BYTE, E=ODD/EVEN * M1 OCT -1 * * * TIMEOUT * * TIMOT LDA DVX15,I GET INITIAL RQ CLB SLA READ REQUEST? STB $DV16,I YES, ZERO ERROR CODE JSB BUFIX RESTORE FORM CONTROL CHAR JMP LDCM2 DEVICE COMPLETE * * * * TEMP NOP TEMPORARY STORAGE DIREC NOP DIRECTIVE LBYTE OCT 177400 LOWER BYTE MASK HBYTE OCT 377 HIGH BYTE MASK BIT14 OCT 40000 SPEC CHAR (TYP 1) BIT15 OCT 100000 SPEC CHAR (TYP 2) B137 OCT 137 UNDERSCORE CHARACTER B22 EQU * DC2L OCT 22 DC2 CODE IN LOWER BYTE CR OCT 15 CARRIAGE RETURN B4 EQU * CN.D OCT 4 CONTROL D RS OCT 36 RECORD SEPERATOR BSL OCT 10 BACKSPACE IN LOWER BYTE RO OCT 177 RUBOUT IN LOWER BYTE * * * ROUTINE FOR DEFINING STORAGE IN DEVICE DVR EXT. * * SETAD NOP LDA $DV22,I GET ADDR POINTING TO ADDR OF DVT EXT CPA DVX1 EXTENSION SETUP? JMP SETAD,I YES, RETURN LDB D.26 SET FOR 15 EXTENSION AND 11 PARAMETER ADDR. STB TEMP LDB DVX SETUP DVX1-DVX15 POINTERS LOOP STA B,I INB CPB DVXT DRIVER PARAMETER ADDRESS? LDA $DVTP YES, SETUP DVP2-DVP12 POINTERS INA ISZ TEMP JMP LOOP JMP SETAD,I * D.26 DEC -26 * * EXTENSION FOR MISC. STORAGE * * DVX DEF DVX1 DVXT DEF DVP2 DVX1 NOP CONTINUATION ADDR DVX2 NOP BUFF ADDR OF CURRENT REQUEST DVX3 NOP BUFF LENGTH (-CHAR'S) DVX4 NOP ADDRESS OF CURRENT READ DVX5 NOP MODIFIED SUBFUNCTION DVX6 NOP INITIAL ADDRESS OF REQUEST DVX7 NOP INITIAL XLOG OF REQUEST DVX8 NOP CHARACTER ACCUMULATOR DVX9 NOP BUFFER FOR 1 BYTE READ DVX10 NOP FORM CONTROL CHARACTER DVX11 NOP LINE FEED COUNTER DVX12 NOP INITIAL ADDR OF OUTPUT DVX13 NOP INITIAL XLOG OF OUTPUT DVX14 NOP FREE DVX15 NOP INITIAL SUBFUNCTION * * DRIVER PARAMETER STORAGE * * * $DVTP NOP TERMINAL CONFIGURATION DVP2 NOP SUPRESS SPACE FLAG DVP3 NOP TRIGGER CHARACTER BEFORE READ DVP4 NOP TIMEOUT FOR SYSTEM REQUEST * DVP5 NOP SCHEDULED PRIMARY PROGRAM DVP6 NOP SCHEDULED PRIMARY PROGRAM DVP7 NOP SCHEDULED PRIMARY PROGRAM DVP8 NOP OPTIONAL PARAMETER, PRIMARY PROG * DVP9 NOP SCHEDULED SECONDARY PROGRAM DVP10 NOP SCHEDULED SECONDARY PROGRAM DVP11 NOP SCHEDULED SECONDARY PROGRAM DVP12 NOP OPTIONAL PARAMETER, SECONDARY PROG * * END