ASMB,A,B,L,T,C HED 24K SIO HP2607 LINE PRINTER DRIVER * CALLING SEQUENCE: * * JSB 102B,I * * AND ENTER WITH; * * (A) = VERTICAL FORMAT CODE (-1 TO -4) * * OR * * (A) = LENGTH OF BUFFER IN CHARACTERS AND * (B) = ADDRESS OF BUFFER * * MAXIMUM LINE LENGTH: 132 CHARACTERS - ONLY THE FIRST * 132 CHARACTERS IN THE BUFFER WILL BE PRINTED IF MORE * THAN 132 CHARACTERS ARE REQUESTED. * * VERTICAL FORMAT CODES CORRESPOND TO VERTICAL FORMAT * CONTROL TAPE CHANNELS ON THE PRINTER. THE STANDARD * CHANNEL ASSIGNMENTS ARE AS FOLLOWS: * * CODE TAPE CHANNEL FUNCTION * ---- ------------ -------- * 0 0 SINGLE SPACE * -1 1 SKIP TO TOP OF NEXT PAGE * -2 2 SKIP TO NEXT HALF PAGE * -3 3 SKIP TO NEXT QUARTER PAGE * -4 4 SKIP TO NEXT SIXTH PAGE * * NOTE THAT A BUFFER LENGTH OF 0 FORCES A LINE FEED * * VERTICAL FORMAT COMMANDS <-4 ARE IGNORED. * ORG 00002B JMP 3,I DEF LINE INITIALIZATION LOCATION * ORG 102B DEF LINEP * KCORE EQU 50000B 24K SKP ORG KCORE+06000B SPC 1 LINE LIA 1 READ IN CHANNEL ADDRESS FROM AND .77 SWITCH REGISTER AND STA 1 STORE IN B LDA L7 FORM OTA CH AND .1777 IOR 1 AND STA L.7 STORE LDA L8 FORM STC CH,C AND .1777 IOR 1 AND STA L.8 STORE LDA L9 FORM SFS CH AND .1777 IOR 1 AND STA L.9 STORE HLT 77B HLT JMP LINE SPC 2 .77 OCT 77 .1777 OCT 177700 L7 OTA 0 L8 STC 0,C L9 SFS 0 SKP ORG 00106B ABS KCORE+07404B SPC 2 ORG KCORE+07557B SPC 1 LINEP NOP ENTRY/EXIT CMA,INA FORM NEGATIVE CHAR COUNT OR POS FORMAT CONT # STA CCT SAVE NEGATIVE CHARACTER COUNT OR VERT FORMAT COMMAND SSA,RSS CHECK MODE JMP VFC (A) ZERO OR POSITIVE IS VERT FORMAT COMMAND ADA C132 CHECK FOR CHARACTER COUNT >132 SSA,RSS JMP L.2 LINE LENGTH OK LDA CM132 LINE TOO LONG - SET TO 132 CHARS JMP LINEP+2 SPC 1 L.1 LDB B,I FETCH NEXT LEVEL L.2 RBL,CLE,SLB,ERB IS BUFFER ADDRESS INDIRECT? JMP L.1 YES: FETCH ADDRESS L.3 LDA B,I PICK UP WORD FROM BUFFER SEZ,RSS UPPER CHARACTER? ALF,ALF YES - EXCHANGE CHARACTERS ELB SAVE CHARACTER ADDRESS IN B AND C377 MASK OFF UPPER CHARACTER JSB PRINT OUTPUT TO PRINTER BUFFER INB INCREMENT CHARACTER ADDRESS CLE,ERB AND CONVERT TO BUFFER ADDRESS AND UPPER/LOWER FLAG ISZ CCT INCREMENT AND TEST CHARACTER COUNT JMP L.3 FETCH NEXT CHARACTER * LDA EOM LOAD END OF MESSAGE CODE * JSB PRINT AND OUTPUT TO PRINTER LDA EOM LOAD SINGLE SPACE COMMAND L.5 JSB PRINT AND OUTPUT TO PRINTER JMP LINEP,I RETURN SPC 2 VFC SZA,RSS JMP L.5-1 STA B ADA C.71 CPB DEC1 LDA C.77 ADB M.5 SSB JMP L.5 JMP LINEP,I SPC 2 PRINT NOP ROUTINE TO TRANSMIT CHARACTER OR COMMAND TO PRINTER L.7 OTA 0 OUTPUT CHARACTER L.8 STC 0,C L.9 SFS 0 CHECK IF CHARACTER OUTPUT COMPLE JMP *-1 NO--SO WAIT JMP PRINT,I YES--SO RETURN SPC 2 * CONSTANTS AND MASKS SPC 1 C132 DEC 132 MAX CHARACTER COUNT C377 OCT 377 CHARACTER MASK C.71 OCT 100103 EOM OCT 100102 C.77 OCT 100100 CM132 DEC -132 SETS CHAR MAXIMUM TO 132 M.5 DEC -5 DEC1 DEC 1 SPC 2 * TEMPORARY STORAGE * CCT NOP COLUMN COUNT OR PRINTER CHANNEL SELECT SPC 2 * ASSEMBLY PARAMETERS SPC 1 B EQU 1 LOCATION OF B REGISTER SPC 1 END