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 
                                                                                