ASMB,R,L,C HED RTE HP2767 LINE PRINTER DRIVER DVR12 REV 1805 * * * HP 2767A LINE PRINTER DRIVER - DVR12 * * SOURCE TAPE: 29028-80002 * SOURCE FILE: &DVR12 * RELOC. TAPE: 29028-60002 * RELOC. FILE: %DVR12 * * REVISION A R. SCHATZER 11/1/73 * REVISION 1805 R. JUNCKER 1/3/78 * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * * CALLING SEQUENCE: (CONTROL REQUEST) * * JSB EXEC * DEF *+4(OR 3) * DEF ICODE * DEF ICNWD * DEF IPRAM * * WHERE ICODE=3 * ICNWD=11XXB FOR LINE SPACING. IN THIS CASE, * IPRAM INDICATES THE FORMAT. * =15XXB FOR CONDITIONAL FORM FEED. IF THE * PRINTER IS NOT AT TOP OF FORM, A * FORM FEED COMMAND IS ISSUED; OTHER- * WISE, AN IMMEDIATE COMPLETION RETURN * IS TAKEN. IPRAM IS NOT USED IN THIS * CASE AND RETURN IS TO *+3 * NOTE THAT "XX" IN ICNWD IS THE PRINTER LU. * IPRAM=<0 PAGE EJECT * =0 SUPPRESS SPACE ON NEXT PRINT OPER- * ATION ONLY. * =1 TO 55 SPACE 1 TO 55 LINES, AS INDICATED * =56 TO 63 USE CARRIAGE CONTROL CHANNEL EQUAL * TO VALUE - 55 * =64 OR 65 NO ACTION * * CARRIAGE CONTROL CHANNELS: * 1 SINGLE SPACE * 2 SKIP TO NEXT EVEN LINE * 3 SKIP TO NEXT TRIPLE LINE * 4 SKIP TO NEXT HALF PAGE * 5 SKIP TO NEXT QUARTER PAGE * 6 SKIP TO NEXT SIXTH PAGE * 7 SKIP TO BOTTOM OF PAGE * 8 SKIP TO TOP OF PAGE * * * * * CALLING SEQUENCE: (WRITE REQUEST) * * JSB EXEC * DEF *+5 * DEF ICODE * DEF ICNWD * DEF IBUFR * DEF IBUFL * * WHERE ICODE=2 * ICNWD=*****H**V* (16 BIT WORD) * (I.E.,XXB,2XXB,OR 20XXB, WHERE "XX" IS * THE PRINTER LU) * * IF "H"=0, THE "V" BIT, IF SET, ENABLES * THE PRINTING OF THE FIRST CHARACTER IN * THE USER'S BUFFER. IF BOTH "H" AND "V" * ARE ZERO, THE FIRST CHARACTER IN THE * BUFFER IS USED FOR VERTICAL FORMAT CON- * TROL, AS FOLLOWS: * ::=SINGLE SPACE * 0::=DOUBLE SPACE * 1::=PAGE EJECT * *::=SUPPRESS SPACE * OTHERS::=SINGLE SPACE * AN 81 CHARACTER REQUEST LENGTH IS AL- * LOWED IN THIS MODE, SINCE THE FIRST * CHARACTER IS USED FOR FORMAT CONTROL. * * IF "H"=1, HONESTY MODE IS SPECIFIED. * THE CHARACTER STRING IS OUTPUT TO THE * PRINTER, AND THE USER IS RESPONSIBLE * FOR SUPPLYING HIS OWN CR, LF, OR FF * CHARACTERS. AN LF OR FF RESULTS IN AN * AUTOMATIC CR. IF THE LINE EXCEEDS 80 * CHARACTERS, ANY ADDITIONAL ONES WILL * WILL BE DISCARDED UNTIL A CR, LF OR * FF IS FOUND. * IBUFR=USER BUFFER ADDRESS * IBUFL=USER BUFFER LENGTH (POSITIVE FOR WORDS AND * NEGATIVE FOR CHARACTERS) * * * * * * * NAM DVR12 29028-60002 780103 REV 1805 ENT I.12,C.12 SKP * ENTRY/EXIT OF INITIATION SECTION SPC 2 I.12 NOP ENTRY/EXIT JSB SETIO CONFIGURE DRIVER A2700 CLA,CCE STA IC12 I.12 ENTRY FLAG STA EQT9,I STA EQT10,I CLEAR EQT TABLE AREAS LDB A3 SET REJECT CODE IN B JSB STAT CHECK STATUS JMP EXIT EXIT REJECT LDA EQT6,I FETCH CONTROL WORD AND A3 BITS 3-0 ARE REQUEST CODE CLB,INB SET REJECT CODE IN B CPA A2 PRINT REQUEST? JMP PRINT YES CPA A3 CONTROL REQUEST? JMP CNTRL YES EXIT LDA B REASON FOR EXIT IN B JMP I.12,I EXIT SKP * PROCESS CONTROL REQUEST SPC 2 CNTRL LDA EQT6,I FETCH CONTROL WORD ALF,ALF RAL,RAL AND A77 LDB A2 SET EXIT CODE CPA A11 LEGAL CONTROL REQUEST? JMP CNTR1 YES CPA A15 CONDITIONAL FORM FEED? RSS YES JMP EXIT NO, EXIT CLA,INA CPA COUNT AT TOP OF PAGE? JMP EXIT4 YES - BAIL OUT JMP PGEJT+1 NO - THEN GO TO TOP * CNTR1 LDA EQT7,I FETCH PARAM SSA PAGE EJECT? JMP PGEJT YES CMA,INA ADA D63 SSA UNDEFINED REQUEST? JMP EXIT4 YES, TAKE IMMED. COMPL. EXIT LDB EQT7,I SZB PARAM = 0? JMP SIM NO, GO PROCESS CONTROL REQUEST LDA EQT11,I YES, SET * FOR IOR A100 NEXT STA EQT11,I REQUEST EXIT4 LDA A4 IMMEDIATE COMPLETION JMP I.12,I EXIT SKP * PROCESS PRINT REQUEST SPC 2 PRINT LDB EQT7,I CONVERT BUFFER WORD ADDRESS RBL TO STB EQT7,I CHARACTER ADDRESS CLA LDB EQT8,I CONVERT NUMBER OF CHARACTERS OR CCE,SSB WORDS TO NEGATIVE CHARACTERS JMP *+3 CMB,INB BLS,CLE ERA SET B15 OF EQT11 TO INDICATE IOR EQT11,I REQUESTED WORDS OR CHARACTERS STA EQT11,I BACK STB EQT8,I SAVE COUNT ADB DM1 STB EQT9,I SET EQT9 TO ONE LESS INB LDA HFLAG HONESTY? IF SO, DON'T TRUNCATE SZA INPUT BUFFER TO 80 CHARACTERS JMP MUOUT ADB D80 LDA VFLAG TEST FOR "V" BIT SET SZA,RSS IF NOT SET, ALLOW 81 CHARACTERS INB SSB,RSS MAX OF 80 CHARS? JMP AWAY YES LDB D80 NO, SET TO 80 SZA,RSS IF "V" BIT NOT SET, SET CHARS TO 81 INB CMB,INB JMP BACK AWAY CPA A200 "V" BIT SET ? JMP MUOUT YES, OUTPUT CHARS JSB CHA FETCH FIRST CHAR (COLUMN 1) JMP ONELN NO MORE CHAR, EXIT CPB STAR *? JMP STARR YES LDA A200 CPB A60 0? (DOUBLE SPACE?) JMP DBSPC YES CPB A61 1? (PAGE EJECT?) RSS JMP MUOUT NO STA DBFLG YES JMP PGEJT DBSPC STA DBFLG JMP ONELN SEND SINGLE SPACE SPC 2 STARR LDA EQT11,I IOR A100 STA EQT11,I SET STAR NOW FLAG SPC 2 MUOUT JSB CHA FETCH CHARACTER JMP DONE ALL CHARS OUT JSB LFFCR CHECK FOR LF, FF, OR CR SZA,RSS JMP MU.1 NOT SPECIAL CHARACTER CPA A1 IS IT A LF? JMP LFX YES CPA A2 CR? JMP LFX+1 YES - OUTPUT IT CLA,INA FF - RESET LINE COUNT STA COUNT RSS LFX JSB LNCNT KICK LINE COUNTER FOR LF LDA DM81 STA EQT13,I RESET CHARACTER POINTER MU.0 LDA DM20 CHARACTER IS LF OR FF,SO STA EQT12,I RESET BUFFER COUNT JMP OTB1 AND OUTPUT LF OR FF MU.1 ISZ EQT13,I 81ST CHARACTER? JMP MU.2 NO - OUTPUT IT CCA YES - RESET EOL COUNTER STA EQT13,I JMP MUOUT AND THROW CHARACTER AWAY MU.2 ISZ EQT12,I USE INTERRUPT EXIT? JMP OTB2 NO JMP MU.0 YES OTB2 OTB CH OUTPUT CHARACTER STC2 STC CH,C NOP DELAY 3 CYCLES BEFORE CHECKING JSB STAT STATUS JMP REJ JMP MUOUT SPC 2 DONE LDA HFLAG HONESTY? SZA NO - CONTINUE JMP EOLFN YES - GO TO COMPLETION LDA EQT11,I AND A100 SZA,RSS * NOW? JMP ONELN NO LDA EQT11,I YES, CLEAR AND A1767 * NOW STA EQT11,I AND JMP CARTN SEND HOLD SPC 2 CHA NOP FETCH CHARACTER ISZ EQT9,I MORE CHARACTERS? RSS JMP CHA,I NO, RETURN TO P+1 LDA EQT7,I CLE,ERA LDA A,I ISZ EQT7,I SEZ,RSS ALF,ALF AND A377 STA B JSB LFFCR LF, FF, OR CR? SZA JMP QRS+1 YES - SKIP VALIDITY CHECK LDA B ADA AM40 SSA CHAR < 40? JMP QRS YES ADA AM140 SSA,RSS CHAR > 177? QRS LDB A100 YES, OUTPUT @ SYMBOL ISZ CHA JMP CHA,I RETURN P+2 WITH CHAR IN B SPC 2 SIM CMB,INB SIMULATE TAPE LEVEL FORMAT STB EQT10,I ADB D55 SSB,RSS CARRIAGE CONTROLS 1-67B? JMP CLOP YES, LINE ADVANCE CMB NO, SIMULATE TAPE ADB TA LDA COUNT GET CURRENT LINE COUNT ADA B,I SUBTRACT INCREMENT SSA,RSS OVERFLOW? JMP *-2 NO - REPEAT STA EQT10,I YES - SAVE NEW INCREMENT CMA,INA ADA COUNT ADA DM60 IS TOTAL COUNT >60? SSA,RSS JMP PGEJT YES - PAGE EJECT JMP CLOP NO - OUTPUT REQUIRED NUMBER OF LINES SPC 2 TA DEF *+1 DM1 DEC -1 ONE LINE DEC -2 DOUBLE LINE DEC -3 TRIPLE LINE DEC -30 HALF PAGE DEC -15 QUARTER PAGE DEC -10 SIXTH PAGE DEC -59 PAGE BOTTOM DM60 DEC -60 PAGE EJECT SPC 2 PGEJT CLA,INA PAGE EJECT STA COUNT RESET LINE COUNT CLA STA EQT10,I LDB A14 JMP OTB1 CARTN LDB A15 JMP OTB1 ONELN CCA ONE LINE SPACE STA EQT10,I CLOP JSB LNCNT INCREMENT LINE COUNTER LDB A12 ISZ EQT10,I NOP OTB1 OTB CH JSB PAK PACK DATA INTO EQP TABLE STC1 STC CH,C CLA CPA IC12 JMP I.12,I OPERATION INITIATED STA IC12 ISZ C.12 JMP C.12,I CONTINUATION EXIT SKP * ENTRY/EXIT OF COMPLETION SECTION SPC 2 C.12 NOP ENTRY/EXIT ISZ IC12 C.12 ENTRY FLAG JSB SETIO CONFIGURE DRIVER JSB STAT CHECK STATUS JMP REJ EXIT REJECT CLA CPA DBFLG DOUBLE SPACE OR PG EJ? JMP *+3 NO STA DBFLG YES, RESET FLAG AND JMP MUOUT OUTPUT CHARS CPA EQT10,I MORE SPACES TO SIMULATE? RSS NO JMP CLOP YES CPA EQT9,I MORE CHARACTERS? RSS NO JMP MUOUT YES EOLFN JSB PAK LDB EQT8,I READY THE TLOG SSA CONVERT TO WORDS OR CHARACTERS JMP *+3 AS REQUIRED CMB,INB BRS CLA CLC CLC CH CLEAR CONTROL CPA HFLAG HONESTY? JMP C.12,I NO - EXIT P+1 CPA IC12 YES - CHECK IC12: IF STILL IN JMP EXIT4 INITIATOR, EXIT W/ IMMED. COMPL. JMP C.12,I EXIT P+1, COMPLETION RETURN REJ LDA A3 REJECT EXIT CODE CLB CPB IC12 JMP I.12,I INITIALIZATION RETURN STB IC12 CLA,INA JMP C.12,I COMPLETION RETURN SKP SPC 2 * SUBROUTINES AND CONSTANTS SPC 2 UNPAK NOP UNPACK EQT TABLE LDA EQT6,I AND A200 STA VFLAG SET VFLAG IF "V" BIT IS SET LDA EQT11,I AND A77 SZA,RSS SET 0 = 1 CLA,INA STA COUNT PRINTER LINE COUNT POINTER LDA EQT11,I AND A200 STA DBFLG DOUBLE LINE SKIP FLAG LDA EQT6,I CHECK FOR HONESTY ALF,RAL SSA,RSS CLA IF NOT, CLEAR HFLAG STA HFLAG IF SO, SET HFLAG SZA,RSS IS HFLAG SET? JMP *+3 NO UP1 RSS JMP UNPAK,I YES - EXIT LDB DM20 -20 DECIMAL CHAR STB EQT12,I PRINT BUFFER CHARACTER POINTER LDB DM81 NO HONESTY, SO RESET CHAR PNTR STB EQT13,I CLA STA UP1 NOP UP1 AFTER FIRST PASS JMP UNPAK,I SPC 2 PAK NOP PACK EQT TABLE LDA EQT11,I AND A1025 IOR COUNT IOR DBFLG STA EQT11,I JMP PAK,I SPC 2 LNCNT NOP INCREMENT LINE COUNT LDA COUNT INA CPA D61 CLA,INA RESET LINE COUNT STA COUNT JMP LNCNT,I SPC 2 SETIO NOP CONFIGURE DRIVER IOR LIA SELECT CODE IN A STA STAT1 ADA A1200 STA STC1 STA STC2 ADA A2700 CLA,CLE STA OTB1 STA OTB2 ADA A100 STA CLC JSB UNPAK SET ALL EQT CONSTANTS IN PRG JMP SETIO,I EXIT SPC 2 STAT NOP FETCH STATUS STAT1 LIA CH INPUT HARDWARE STATUS SZA,RSS HARDWARE BUSY OR NOT READY? ISZ STAT NO, RETURN P+2 JMP STAT,I YES, RETURN P+1 SPC 2 LFFCR NOP LF, CR, OR FF CHECK ROUTINE LDA HFLAG SZA,RSS HONESTY? JMP LFFCR,I NO - RETURN A=0 CLA CPB A12 IF LF, SET A=1 INA CPB A15 IF CR, SET A=2 LDA A2 CPB A14 IF FF, SET A=-1 CCA JMP LFFCR,I SPC 2 LIA LIA 0 A1 OCT 1 A2 OCT 2 A3 OCT 3 A4 OCT 4 A11 OCT 11 A12 OCT 12 A14 OCT 14 A15 OCT 15 A60 OCT 60 A61 OCT 61 A77 OCT 77 A100 OCT 100 A200 OCT 200 A377 OCT 377 A1025 EQU LIA A1200 OCT 1200 A1767 OCT 177677 AM40 OCT -40 AM140 OCT -140 D55 DEC 55 D61 DEC 61 D63 EQU A77 D80 DEC 80 DM20 DEC -20 DM81 DEC -81 IC12 NOP COUNT NOP VFLAG NOP DBFLG NOP HFLAG NOP STAR OCT 52 SPC 2 A EQU 0 B EQU 1 CH EQU 10B SPC 2 EQT1 EQU 1660B RTE EQT1 EQT6 EQU 1665B RTE EQT6 EQT7 EQU 1666B RTE EQT7 EQT8 EQU 1667B RTE EQT8 EQT9 EQU 1670B RTE EQT9 EQT10 EQU 1671B RTE EQT10 EQT11 EQU 1672B RTE EQT11 EQT12 EQU 1771B RTE EQT12 EQT13 EQU 1772B RTE EQT13 END