ASMB,Q,C * * MULTIPLEXER DEVICE DRIVER FOR 2631 AND 7310 LINEPRINTERS * * SOURCE: 12792-18004 &DDV12 * RELOC : 12792-16004 %DDV12 * PRGMR : GDD * ***************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSALATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ***************************************************************** * * THIS DRIVER PROVIDES COLUMN 1 SUPPORT FOR SERIAL PRINTERS SUCH AS * THE 7310 AND 2631/35. NOT ALL LINEPRINTER FUNCTIONS IN DVA12 ARE * EMULATED. * * NORMAL WRITE REQUESTS: (BIT 7 = 0) * * COL 1 = "1" SEND CTRL-L THEN PRINT COL 2-N * * COL 1 = "0" SEND LINEFEED, THEN REST OF LINE * * COL 1 = "-" SEND TWO LINEFEEDS, THEN REST * * TRANSPARENT WRITE (BIT 7 = 1): PRINT WHOLE LINE AS IS * * CONTROL 11B,PARAM: LINE SPACING * * PARAM > 0 SEND PARAM .MOD. 64 CR/LF'S * * PARAM = 0 SEND ONE CR/LF * * PARAM < 0 SEND ONE FORMFEED (CTRL-L) * * ALL READ REQUESTS RESULT IN AN IO07 RETURN TO PROGRAM * * NOTE THAT THE VFU CHANNELS ARE NOT ACCESSED ON THE 263X PRINTERS, SO * LONG LISTINGS WILL PRINT OVER THE FOLD. THE 7310 PERFORMS AUTOMATIC * PAGEING. ALSO NOTE THAT PRINTERS USING X-ON/X-OFF OR HARDWIRED (CTS) * HANDSHAKE WITH THE COMPUTER WILL NOT WORK (ENQ/ACK PRINTERS ONLY)! * NAM DDV12,8 12792-16004 REV.2032 800602 V.08 ENT DDV12 * A EQU 0 B EQU 1 EQT5 EQU 1664B EQT14 EQU 1773B * EXST EQU * * PHBLN NOP EXCOD NOP BUFRA NOP BUFLN NOP RTN NOP COUNT NOP * EXND EQU * #EXSZ ABS EXST-EXND LEN OF EXTENT .EXST DEF EXST TMP NOP * DDV12 NOP DRIVER ENTRY POINT JSB SETUP SET EXTENT POINTERS JMP NEWRQ ..NEW REQUEST LDA RTN,I ..PREVIOUS PIECE COMPLETE JMP A,I * NEWRQ LDA EQT5,I SET DRIVER TYPE TO 12 IOR #DVTP STA EQT5,I * LDA EXCOD,I FETCH USER REQUEST SLA,RSS JMP WRT WRITE REQUEST RAR,SLA JMP CTRL CONTROL REQUEST * LDA B1 READ ILLEGAL!! JMP DDV12,I * CTRL LDA EXCOD,I ISOLATE SUBFUNCTION AND #FCN CPA #CN11 JMP CN11 LINE SPACE JMP WRT3 NO, DO WHATEVER IT IS * IMCOM LDA B4 IGNORE OTHERS JMP DDV12,I * CN11 LDA BUFRA,I FETCH IPRAM SSA NEGATIVE?? JMP FORMF YES, DO FORMFEED * AND #MAXL LIMIT NUMBER TO REASONABLE SZA,RSS ZERO? INA YES, DO AT LEAST ONE CMA,INA MAKE NEG STA COUNT,I AND STORE IN EQT * CN11A LDA .CRLF WRITE CR/LF JSB SETW JSB DOIT ISZ COUNT,I DONE? JMP CN11A NO * CLB YES DONE CLA JMP DDV12,I * FORMF LDA .FF SEND FORMFEED (CTRL-L) JSB SETW JMP WRT3 WRITE IT AND EXIT * WRT LDA EXCOD,I FETCH FUNCTION CODE AND ?ONST HONESTY MODE (BIT 7 SET)? SZA,RSS JMP WRT2 NO, DO COLUMN 1 STUFF * LDA B2 STA EXCOD,I CLEAR OTHER BITS WRT3 JSB DOIT DO REQUEST AS-IS JMP DONE * WRT2 LDA BUFLN,I ZERO LEN WRITE?? SZA,RSS JMP IMCOM YES, COMPLETE NOW LDB BUFRA,I GET ADDR OF BUFFER LDA B,I GET FIRST 2 CHARS AND #LOWR SAVE LOWER BYTE STA TMP LDA BUFLN,I IS LEN 1 CHAR ONLY? INA,SZA,RSS STA TMP YES, SET 2ND CHAR TO NULL LDA B,I FETCH UPPER AND #UPER CPA "ONE "1" JMP WRT1 CPA "ZERO "0" JMP WRT0 CPA "MNUS "-" JMP WRTM WRT9 CLA,RSS * WRT0 LDA "LF SEND LINE-FEED TO START WRT4 IOR TMP MERGE IN FIRST PRINTING CHAR WRT5 STA COUNT,I SAVE IN "BUFFER" LDA COUNT WRITE BUFFER TO PRINTER JSB SETW JSB DOIT * LDA #WRTC SEND REST OF USER BUFFER WITH CRLF STA EXCOD,I ISZ BUFRA,I START OF BUFFER ONE HIGHER LDA BUFLN,I AND LEN OF BUFFER TWO CHARS LESS SSA CMA,INA,RSS ..CONVERT TO CHARS RAL ADA DM2 ..LESS TWO CMA,INA ..IN CHARS STA BUFLN,I CMA,INA SSA,RSS ALL DONE? JSB DOIT NO, SEND USER BUFFER JMP DONE * WRT1 LDA "FF 1ST CHAR = "1", SEND FORMFEED JMP WRT4 * WRTM LDA .LFLF 1ST CHAR = "-", SEND SOME LF'S FIRST JSB SETW JSB DOIT LDA BUFRA,I FETCH 1ST PRINTING CHAR LDA A,I AND #LOWR JMP WRT5 GO PRINT * SETW NOP SET UP FOR ONE WORD BINARY WRITE STA BUFRA,I LDA #WRTB STA EXCOD,I CLA,INA STA BUFLN,I JMP SETW,I * DOIT NOP DO REQUEST SET IN EXTENT LDA DOIT SAVE RETURN ADDR STA RTN,I LDA B5 LDB EQT14,I SET TIMER JMP DDV12,I * SETUP NOP SET EQT EXTENT POINTERS SSA,RSS NEW REQUEST?? ISZ SETUP YES, P+2 RETURN RAL,CLE,ERA STRIP LDB #EXSZ LEN OF EXTENT (NEG) STB TMP LDB .EXST ADDR OF EXTENT POINTERS * SET2 STA B,I SET ONE INA INB BUMP'M ISZ TMP DONE? JMP SET2 NO JMP SETUP,I YES * ?ONST OCT 200 HONESTY BIT IN EXEC FUNCTION #LOWR OCT 177 LOWER BYTE #UPER OCT 077400 UPPER BYTE "ONE OCT 30400 "ZERO OCT 30000 "MNUS OCT 26400 "LF OCT 05000 LINEFEED #WRTB OCT 102 BINARY WRITE FUNCTION CODE "FF OCT 6000 FORMFEED #DVTP OCT 5000 DRIVER TYPE 12 IN EQT5 B1 OCT 1 #FCN OCT 3700 FUNCTION CODE IN EXCOD #WRTC OCT 2 .LFLF DEF "LFLF "LFLF OCT 5012 TWO LF'S #CN11 OCT 1100 CTRL-11 IN EXCOD B4 OCT 4 #MAXL OCT 77 MAX 63 LINE SPACES PER REQUEST .CRLF DEF "CRLF "CRLF OCT 6412 CR/LF B5 OCT 5 DM2 DEC -2 B2 OCT 2 .FF DEF "FF * END