ASMB,Q,N,C,L
* 
*     NAME:   DVB12 
*     SOURCE: 92002-18004 
*     RELOC:  92002-16004 
*     PGMR:   G.G.(BOISE) 
* 
*  ***************************************************************
*  * (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 DVB12,0 92062-16004 REV.2013 800117 2:30PM
      ENT IB12,CB12,.BLAB 
      EXT $UPIO,.LBT
*     EXT $DDT
************************************************************
* THE ASMB STATEMENT NEED ONLY CHANGE TO THE "Z" OPTION TO
* SUPPORT THE OPTIONAL IFORM PARAMETER
* 
* 
*                 2608 DRIVER DVB12 BY G C GAPP 
*                 MODIFIED FOR HONISTY MODE BY C G GREGG 790326 
*                 EXPECTED DATE CODE 1926 
* 
*               16 JAN 1980 
*               MODIFIED BY GCG FOR 2 BUGS
*               1. CLEAR EQT15 ON SPUR. INT TO GET RID
*                  OF "ILL INT" MESSAGE 
*               2. PROTECT AGAINST NONSUPPORTED READS 
* 
* 
* 
IB12  NOP           INITIATION ENTRY
      JSB SETIO     CONFIGURE WITH CURRENT CHAN. #
      JSB TMOUT     SET TIMEOUT VALUE 
      LDA EQT11,I   FORCE BIT15 = 0 
      SSA           SET?
      XOR M100K     YES - SO CLEAR IT 
      STA EQT11,I 
      CLA,INA 
      JSB STAT      CHECK PRINTER STATUS
      JMP NREDI     NOT READY--GO REPORT IT 
* 
      LDA EQT4,I    EXTRACT THE SUBCHANNEL NUM
      AND M3700 
      CPA M300      DOES SUBCHANNEL = 3?
      RSS            YES - CONTINUE FOR CHAR READ ON SC3
      JMP RCODX     NO - GO LOOK AT REQ CODE
      LDA EQT6,I    NOW LOOK FOR CHAR SET READ
      AND M3777 
      CPA D1        READ CHAR SET?
      JMP CBSC3     YES - CHAR RD + SC3 IS OK 
      CPA M201      NO - THEN IS IT READ STATUS?
      JMP PSTAT     YES - RD STAT + SC3 IS OK 
      JMP EXREJ     ALLOW ONLY RD STAT & RD CHAR ON SC3 
RCODX CCB           SETUP TO CLEAR TOF BIT6 IN STATUS 
      LDA EQT6,I    GET FUNCTION AND REQUEST CODE 
      AND M77       SAVE REQUEST CODE 
      CPA D1        IS IT A READ REQUEST? 
      JMP CBACK     READ - GO GET CHARACTER SET 
      CPA D2        WRITE REQUEST?
      JMP WRITE     YES--GO PROCESS 
      CPA D3        CONTROL REQUEST?
      JMP CNTRL     YES--GO PROCESS 
EXREJ LDA D1        ILLEGAL REQUEST CODE, SET A=1 
      JMP IB12,I    EXIT
* 
CLRB8 ISZ EQT8,I    TLOG = 1 FOR CHAR READ OF 0 
CLRBX CLA            XLOG OF XERO 
      STA EQT8,I
CLRBF LDA CLBUF     BUFFER CLEAR COMMAND
      LDB DCLR      RETURN ADDRESS
      JMP EXITI 
DCLR  DEF EXIT5 
* 
NREDI JSB VSTAT     UPDATE PRINTER STATUS 
      LDA D3        SET NOT READY RETURN
      JMP IB12,I    EXIT
      SKP 
* 
*     READ IN CHAR SET
CBACK LDA EQT6,I    GET CWD 
      AND M3400     ISOLATE NON USED BITS 8,9,10
      SZA            ANY OF THEM SET? 
      JMP EXREJ     YES - EXIT WITH ILL REQUEST 
      LDA EQT6,I    NO - PROCEED WITH OK READ 
      ALF,ALF       GET PING/PONG TO BIT15
      RAL               AND ST RD/CHAR RD TO BIT0 
      SSA            PING/PONG? 
      JMP PINPO     YES - DO P/P
      SLA            NO - THEN IS IT A STAT READ? 
      JMP PSTAT     YES - DO STATUS READ
CBSC3 LDA EQT6,I
      IOR M100      FORCE BIT6 SET FOR PACKED FLAG
      LDB EQT8,I    BUFFER LENGTH 
      SZB,RSS       BUF LENGTH = 0? 
      ISZ EQT8,I    YES - SET LENGTH 0 = 1
      SSB,RSS       PACKED OR UPPACKED REQUEST? 
      JMP CBA       UNPACKED - CLEAR BIT6 & BUFL IS OK
      CMB,INB       PACKED -BIT6 OK BUT NEED POS BUFL 
      STB EQT8,I    EQT8 IS FOR XLOG(MAYBE) 
      RSS           BYPASS CLEAR OF BIT6
CBA   XOR M100      FORCE BIT6 CLEAR FOR UNPACKED 
      STA EQT6,I
      LDA EQT9,I    IPRAM 
      ALF           MOVE CHAR SET CODE TO BITS0-3 
      AND M17       EXTRACT THEM
      XOR CHARB     MERGE IN THE READBACK CONTROL WORD
      LDB CBI       A=CMND      B=RET ADDRESS 
      JMP EXITI 
CBI   DEF CBR 
CBR   LDA M1153     MAX EVER OF # OF BYTES AVAILABLE
      STA EQT13,I 
      JSB INTOA     READ THE ACTUAL CHAR SET CODE 
      ALF,ALF       CHAR SET CODE TO BOTTOM 
      LDB EQT7,I    BUFFER ADDRESS
      STA B,I       1ST WORD RIGHT JUSTIFIED IN BUFF
      ISZ EQT7,I    ADJUST ADDRESS FOR 1ST DOT DATA 
      LDB EQT8,I    USE B INSTEAD OF EQT8 TO SAVE 
      SZB,RSS       BUFF LENGTH = ZERO? 
      JMP CLRB8     YES - GO SET TLOG =1 FOR ZERO 
      ADB ND1       DECREASE BY ONE 
      SZB,RSS       BUFF LENGTH = ONE?
      JMP CLRBF     YES - DO CLEAR BUFFER & EXIT
      LDA EQT9,I    EXTRACT 1ST REQED CHAR CODE 
      AND M177      RANGE IS 0 THRU 177B
      SZA,RSS       WAS A CODE SUPPLIED?
      JMP CBX       NO - READ STARTING WITH FIRST 
      CMA,INA       YES - MAKE CODE FOR 1ST CHAR NEG
      STA EQT12,I 
CB1   LDB ND9       9 BYTES PER CHAR
CB2   JSB INTOA     GET A BYTE
      ISZ EQT13,I   LAST POSSIBLE BYTE? 
      RSS           NO - CONTINUE 
      JMP CLRBX     YES - EJECT 
      ISZ B         9TH BYTE? 
      JMP CB2       NO - GET NEXT 
      ISZ EQT12,I   YES - DONE WITH DUMP? 
      JMP CB1       NO - LOOP FOR 9 MORE BYTES
*     IF NECESSARY - ADJUST USER BYTE COUNT TO REMAIN BYTES 
CBX   LDA EQT13,I   # OF BYTES YET POSSIBLE(NEG)
      LDB EQT8,I    # OF BYTES REQUESTED   (POS)
      ADB A 
      CMA,INA       MAKE BYTES LEFT POS IN CASE SKIP
      SSB,RSS       ADJUST EQT13 IF REM CNT > REQUEST 
      JMP CBX1      NOT NECESSARY 
      LDA EQT8,I    NEGATE USER COUNT 
      CMA,INA 
      STA EQT13,I   USE AS REMAINING COUNT
      RSS 
CBX1  STA EQT8,I    WILL BE XLOG
* 
* 
CBCON LDA EQT11,I 
      IOR M4        SET CHAR READBACK FLAG IN EQT11 
      STA EQT11,I 
      LDB EQT13,I   ANY READBACK LEFT?
      SZB,RSS 
      JMP EXIT5     NO - EXIT 
      CLE           TOP OF WORD 
CB4   LDA EQT7,I    SET UP USER BUFFER ADDRESS
      STA EQT10,I 
      LDA ND9       GET DOT ROWS/CHAR COUNTER 
      STA EQT12,I   SAVE IT 
CB5   JSB INTOA     READ FROM THE PRINTER 
      LDB EQT6,I    LOOK AT BIT6 OF EQT6 FOR
      BLF,BLF         UNPACKED/PACKED FLAG(0/1) 
      RBL           BIT6 TO SIGN
      SSB           IS IT PACKED? 
      JMP PDATA     YES - PROCESS PACKED DATA 
      ALF,ALF       NO - MOVE TO BOTTOM OF WORD 
      CCE           SET E FOR EXIT
      LDB EQT10,I   B = BUFFER ADDRESS
      JMP UNPAK     UNPACKED READ 
* 
* 
PDATA LDB LOBYT     A=CHAR IN TOP - B=MASK IN BOTTOM
      SEZ,RSS       TOP OF WORD?
      JMP PD1       YES - THEN A & B OK!
      ALF,ALF       NO - MOVE CHAR TO BOTTOM
      BLF,BLF         & MASK TO TOP 
PD1   STA STAT      CHARACTER 
      STB BUFL      MASK
      LDB EQT10,I   BUFFER ADDRESS
      LDA B,I       GET ITS CONTENTS
      AND BUFL      SAVE OLD DATA 
      IOR STAT      MERGE IN NEW DATA 
* 
UNPAK STA B,I       RESTORE IN USERS BUFFER 
      ISZ EQT13,I   ANY CHARS LEFT? 
      RSS           YES 
      JMP CLRBF     NO - EXIT READBACK
      ISZ EQT10,I   UPDATE BUFFER INDEX 
      ISZ EQT12,I   DONE WITH 9 DATA BYTES? 
      JMP CB5       NO - GET NEXT DATA BYTE 
      SEZ,CME,RSS   CHECK IF STILL NEED BOTTOM OF PACKED DATA 
      JMP CB4       YES- GET 9 MORE BYTES 
      INB           NO - UPDATE USER BUFF POINTER FOR 
      STB EQT7,I      NEXT CHARACTER(IF ANY)
      JMP EXIT1     RETURN TO SYS 
* 
PSTAT LDA EQT8,I    # OF BYTES OF STATUS REQED
      SSA            DID IT COME AS POS COUNT?
      JMP EXREJ     NO - REJECT IT! 
      SZA,RSS       LENGTH = ZERO?
      INA            YES - CONVERT TO 1 
      STA EQT8,I    SAVE FOR XLOG 
      LDB D127
      CMA,INA       MAKE COUNT NEGATIVE 
      ADA D127      ADD 127 
      SSA           IS USER COUNT>127 
      STB EQT8,I    YES-RESET WITH MAX
      LDA EQT8,I    GET DESIRED # OF STATUS WORDS 
      IOR STATR     BUILD STAT RDBK CNWD
      LDB SRBKI     A=CNWD   B=RET ADD
      JMP EXITI 
SRBKI DEF SRBKR 
SRBKR LDB EQT8,I    # OF BYTES TO RETURN
      CMB,INB       USE AS BYTE COUNT YET TO GO 
      STB EQT9,I
      LDB EQT7,I    BUFFER ADDRESS
RSTA2 JSB INTOA     GET A BYTE OF THE ROCK
      ALF,ALF       TO THE BOTTOM 
      STA B,I       PUT IN USERS BUFFER 
      ISZ B         UPDATE ADDRESS
      ISZ EQT9,I    DONE? 
      JMP RSTA2     NO - GO BACK
      JMP EXIT5     YES - EXIT
* 
* 
PINPO LDA EQT8,I    GET USERS BUFFER LENGTH 
      CPA D1        BUFFER LENGTH = 1 ? 
      JMP P1        YES-CONTINUE
      CPA M401      BUFFER LENGTH = 257 ? 
      RSS           YES-CONTINUE
      JMP EXREJ     NO-REJECT REQUEST 
P1    LDA PING      "PING" CONTROL WORD 
      LDB PIADD       A=CWD  B=RET ADDRESS
      JMP EXITI 
PIADD DEF PIRET 
PIRET CLA           INITIALIZE CHARACTER COUNT
OUTCH JSB OUTA      OUTPUT CHARACTER TO PRINTER 
      INA           INCREMENT CHARACTER COUNT 
      CPA M400      A = 256 ? 
      JMP PON       YES-PING DONE, NOW PONG 
      JMP OUTCH     NO-OUTPUT ANOTHER CHARACTER 
PON   LDA PONG      "PONG" CONTROL WORD 
      LDB POADD       A=CWD  B=RET ADDRESS
      JMP EXITI 
POADD DEF PORET 
PORET CLA 
      STA EQT12,I   INITIALIZE PASS/FAIL CODE WORD
      STA EQT13,I   INITIALIZE CHARACTER COUNTER
      LDA EQT7,I    GET USERS BUFFER ADDRESS
      STA SETIO     STORE TEMPORARILY 
INCH  JSB INTOA     INPUT CHARACTER FROM PRINTER
      ALF,ALF       CHARACTER TO BOTTOM 
      AND LOBYT     SAVE LOWER BYTE 
      LDB EQT8,I    GET USERS BUFFER LENGTH 
      CPB D1        BUFFER LENGTH = 1 ? 
      JMP P2        YES-DONT SAVE CHARACTER 
      ISZ SETIO     NO-PUT CHARACTER IN USERS BUFFER
      STA SETIO,I 
P2    CPA EQT13,I   IS RETURNED CHARACTER CORRECT ? 
      RSS           YES-CONTINUE
      ISZ EQT12,I   NO-INCREMENT ERROR COUNT
      LDA EQT13,I   GET CHARACTER COUNTER 
      CPA LOBYT     = 255 ? 
      JMP EXIT6     YES-PONG DONE,FINISH UP 
      ISZ EQT13,I   NO-INCREMENT CHARACTER COUNTER
      JMP INCH      GO INPUT ANOTHER CHARACTER
EXIT6 LDA EQT12,I   GET PASS/FAIL CODE WORD 
      SZA           DID PONG FAIL ? 
      IOR M100K     YES-TURN ON BIT 15
      LDB EQT7,I    GET USERS BUFFER ADDRESS
      STA B,I       PUT CODE WD IN 1ST WORD OF BUFFER 
      JMP CLRBF     CLEAR BUFFER AND EXIT 
* 
* 
************************************************************
* 
*     WRITE PROCESSOR 
* 
* 
WRITE LDA EQT6,I    GET ICNWD 
      AND B1000     EXTRACT VFC DEFINE BIT9 DEF BITS
      SZA           VFC DEFINE? 
      JMP VDEF      YES - PROCESS IT! 
      JSB TOFB6     CLEAR TOF STATUS (B=-)
      JSB BUFL      CONVERT IBUFL TO CHARACTER COUNT
      LDA EQT11,I   SEE IF MODE = GRAPHICS
      ALF,ALF 
      AND M17       EXTRACT MODE
      CPA M2        GRAPHICS? 
      RSS           YES - THEN PROCESS IFORM
      JMP WRITR     NO
* 
      IFZ 
      LDA EQT9,I
      AND LOBYT     EXTRACT BITS 0 THRU 7 OF IFORM
      SZA,RSS       ANYTHING SUPPLIED?
      CLA,INA       NO - DEFAULT IS SLEW 1 DOT ROW
      IOR CALPH     CONTROL WORD FOR GRAPHICS PRINT 
      XIF 
* 
      IFN 
      LDA M1001     GRAPHICS DEFAULT = 1DOT ROW SLEW
      XIF 
* 
      JMP WRIT3 
WRITR LDB CALPH     SLEW 0 COMMAND
      LDA EQT11,I 
      AND M200      ISOLATE SUPPRESS SPACE BIT
      SZA,RSS       IS IT REQUESTED?
      JMP WRITT     NO - GO CHECK FOR AUTO EJECT
      XOR EQT11,I   YES - CLEAR THE FLAG
      STA EQT11,I 
      JMP WRITU 
WRITT ADB M202      BUILD VFC CH3 CMND
      LDA EQT11,I   BIT1 OF EQT11 IS AUTO EJECT FLAG
      RAR,SLA       IS IT ON(=0) OR OFF(=1) 
      LDB M1001     OFF - USE SLEW 1 FLAG 
WRITU STB EQT10,I 
      SPC 1 
******************************************************* 
* 
*     NEXT FOUR INST. ADDED FOR HONISTY MODE
* 
      LDA EQT6,I    GET ICNWD 
      AND B2000     LOOK AT BIT 10
      SZA           IF SET
      JMP WRIT5     GO DO HONISTY MODE
* 
******************************************************
      SPC 1 
      IFZ 
      LDA EQT9,I    GET IFORM 
      SZA,RSS       DID USER SUPPLY IFORM?
      JMP WRITW     NO
      AND LOBYT     ISOLATE LOW 8 BITS
      IOR CALPH     ADD BIT15 TO FORM CMND
      JMP WRIT3     BYPASS FURTHER CHECKS 
      XIF 
* 
WRITW LDA EQT6,I    GET ICNWD 
      ALF,ALF       MOVE V-BIT TO HIGH BIT
.BLAB SSA           SKIP IF NOT SET 
      JMP WRIT5     GO PROCESS REQULAR PRINT
* 
* 
      LDA EQT13,I 
      SZA,RSS       ARE THERE ANY CHARACTERS? 
      JMP WRIT5     NO - GO PRINT 
      LDB EQT7,I    GET FIRST WORD
      LDA B,I 
      AND HIBYT     SAVE FIRST BYTE 
      CPA EJCT
      JMP FF        GO DO FORM FEED       (CC=1)
      CPA DSPAC 
      JMP DBLE      GO DO DOUBLE SPACE   (CC=0) 
      CPA ASTR
      JMP SUP       GO DO SUPPRESS SPACE  (CC=*)
      JMP VB2       DEFAULT TO BLANK OR ANY OTHER CHAR
FF    LDA TOF       GET VFC CH3 CMND
      LDB EQT13,I   LOAD CHARACTER COUNT
      INB             AND INCREMENT 
      SZB           WAS THERE ONLY ONE CHARACTER
      JMP DBLE+1    NO - CONTINUE 
      STB EQT13,I   YES - UPDATE CHARACTER COUNT
      JSB TOFB6     SET TOF ON LAST CMND STATUS(B=+)
      JMP EXOTA       AND GO DUMP COMMAND 
DBLE  LDA EQT10,I   VFC CH3 OR SLEW 1(AUTO EJECT?)
      LDB DVBIT     RETURN ADDRESS
      JMP EXITI 
DVBIT DEF VB2 
SUP   LDA M100K     SLEW 0 CMND 
      STA EQT10,I 
VB2   ISZ EQT13,I   BUMP CHAR. CNTR.
      RSS           SKIP IF NOT ZERO
      JMP WRIT5     ONLY ONE CHAR.
      LDA B,I       GET FIRST WORD OF USER'S DATA 
      AND LOBYT     SAVE SECOND WORD
      JSB OUTA      GIVE IT TO PRINTER
      INB           BUMP ADDRESS
      STB EQT7,I    RETURN IT 
      ISZ EQT13,I   BUMP CHAR COUNT 
      NOP 
      JMP WRIT5 
      SKP 
* 
* 
* 
*     ROUTINE TO DUMP VFC DEF. DATA TO PRINTER
* 
* 
VDEF  LDA EQT8,I    GET IBUFR 
      AND LOBYT 
      STA B         STORE TEMPORARILY 
      AND M177      SAVE LOWER 7 BITS 
      STA EQT8,I    USE AS FORMS LENGTH 
      SZA,RSS       FORMS LENGTH = 0? 
      JMP EXREJ     YES - REJECT THE REQUEST
      JSB BUFL      SET EQT13 TO # 0F BYTES 
      LDA B         RELOAD ORIGINAL IBUFL 
      IOR VFCRS     MERGE IN COMMAND BYTE 
      LDB VD1AD     CMND IN A - RTN ADD IN B
      JMP EXITI 
VD1AD DEF VD1 
VD1   JSB BUFL      CONVERT # OF LINES TO # OF WORDS
      LDA CLBUF     SET UP TERMINATION COMMAND
      JMP WRIT3     WRAP IT UP
* 
* 
* 
WRIT5 LDA EQT10,I   GET COMPUTED COMMAND
WRIT3 STA EQT9,I    SAVE RESULT IN EQT9 
      LDB EQT7,I    GET USER BUFFER ADDR. 
      JMP PRNT      GO DUMP LINE
EXIT0 LDA EQT9,I    GET COMMAND BYTE
      JSB OUTA      DUMP IT 
EXIT1 LDA EQT11,I   GET PROG STATUS 
EXIT3 SSA           CHECK FOR CONTINUATION EXIT 
      JMP EXITC     GO TO CONTINUATION EXIT 
      CLA           CLEAR A FOR INITIATION RETURN 
      JMP IB12,I
* 
* 
EX5AD DEF EXIT5         COMMAND COMPLETE RETURN 
EXOTA LDB EX5AD         RET ADD 
EXITI STB EQT12,I   SAVE TIME OUT RTN ADD 
      LDB EQT11,I   SET FLAG FOR OUTPUT OF COMMAND
      SLB,RSS 
      INB 
      STB EQT11,I 
      JSB OUTA
      JMP EXIT1     MAKE APPROP RETURN
* 
* 
      SKP 
****************************************************************
* 
* 
*     ROUTINE TO PROCESS CONTROL REQUEST
* 
* 
CNTRL LDA EQT6,I    GET ICNWD 
      AND M3700     EXTRACT FUNCTION CODE 
* 
      SZA,RSS       CLEAR REQUEST?
      JMP CLR       YES - PROCESS IT! 
* 
      CPA B600      DYNAMIC STATUS
      JMP DYNAM     YES 
* 
      CPA B1100     VFC FORMS REQUEST?
      JMP VCNTR     YES 
* 
      CPA B1500     CHARACTER SET CHANGE? 
      JMP XCHAR     YES 
* 
      CPA B1600     VFC RESET?
      JMP VFCR      YES 
* 
* 
      CPA B2000     SELF TEST?
      JMP STEST     YES 
* 
      CPA B2100     DEFINE COLUMN 1?
      JMP PCOL1     YES 
* 
      CPA B3000     PRINT MODE CHANGE?
      JMP CPMOD     YES - PROCESS IT! 
* 
*     CPA B1000     START DEBUG?
*     JMP DEBUG     YES GO DO IT
* 
* 
EXIT2 LDA D2        ERROR - ILLEGAL FUNCTION CODE 
      JMP IB12,I
* 
*EBUG JSB $DDT
*     NOP 
*     JMP EXIT4 
* 
*               FORCE 2608A UNBUFFERED TO INSURE DYN STATUS 
* 
DYNAM LDA ND1       NEG OF # OF BYTES TO READ IN A
      JSB RSTAT     ON RETURN BYTE IS IN TOP OF A 
      JMP EXIT5     COMPLETION EXIT(NOT IMMED FOR 2608) 
* 
VCNTR LDA CALPH 
      STA EQT10,I   STORE ALPHA PRINT TO GO WITH FORMS CONTROL
      JSB TOFB6     CLEAR TOF STATUS (B=-)
      CLB            SET B=+ IN CASE TOF REQUESTED
      LDA EQT7,I    GET IPRAM 
      SZA           SUPPRESS SPACE ON NEXT OP?
      JMP VCNTX     NO
      LDA EQT11,I   YES - SET BIT7  OF EQT11
      IOR M200
      STA EQT11,I 
      JMP EXIT4     DO IMMEDIATE EXIT!
VCNTX SSA           IS IT NEGATIVE? 
      LDA D63       SET UP FOR PAGE EJECT (VFC CHAN 1)
      ADA ND74      ADD -74 
* 
      SSA,RSS       LEGAL CODE? 
      JMP EXIT2     NO-- ERROR RETURN 
* 
      ADA D8        CHECK FOR CHANNELS 9-16(66-73)
      SSA,RSS 
      JMP VFC       PROCESS CHAN 9-16 REQUEST 
* 
      ADA D2        CHECK FOR AUTO PAGE CHANGE(64-65) 
      SSA,RSS 
      JMP AUTO       PROCESS AUTO  EJECT ON OFF 
* 
      ADA D2        CHECK FOR CHANNELS 1-2
      SSA           SKIP IF IT IS CHANNEL 1 OR 2
      JMP VFC2      GO CHECK CHANNELS 3-8 
* 
      XOR D1        63TO0(TOF)  62TO1(BOF)
      SZA,RSS       TOF COMMAND?
      JSB TOFB6     YES - SET TOF BIT IN STATUS WD(B=+) 
      JMP VFC1      GO TO EXECUTE CHANNEL 
* 
VFC2  ADA D6        CHECK FOR CHANNELS 3-8
      SSA 
      JMP SLEW      NOPE--MUST BE SLEW
* 
      ADA D2        INCREMENT 2 TO GET CHAN. #
* 
      JMP VFC1
VFC   CPA D3        CHAN 12?
      JSB TOFB6     YES - SET TOF IN STATUS (B=+) 
      ADA D8        ADD 8 TO GET CHANNELS 9-16
VFC1  XOR M200      REVERSE BIT 7 
      RSS 
SLEW  ADA D56       ADD 56 TO GET # LINES TO SLEW 
* 
      IOR EQT10,I   MERGE COMMAND BYTE
      JMP EXOTA     GO DUMP IT AND CONTINUE 
* 
AUTO  STA B 
      LDA EQT11,I 
      IOR M2        FORCE BIT1 SET(ASSUME P EJ OFF) 
      SZB,RSS       AUTO EJECT ON OR OFF? 
      XOR M2        ON - CLEAR BIT1 
      STA EQT11,I 
* 
EXIT4 LDA D4        IMMEDIATE COMPLETION CODE IN REG.A
      JMP IB12,I    EXIT
* 
XCHAR LDA ND16      NEG OF # OF BYTE REQUESTED
      JSB RSTAT     ON RETURN THE BYTE IS IN TOP OF A 
      STA B 
      LDA EQT7,I    GET PRIM/SEC LANG CODE(S) 
      AND LOBYT     INSURANCE 
      IOR B         MERGE: TOP=F. PANEL  BOTTOM= REQ
      STA EQX2,I    SAVE FOR POWER FAIL/RESET 
      AND LOBYT     GET USER REQUEST BACK 
      IOR CCHAR     BUILD PRIM/SEC MODIFY CNWD
      STA B 
      LDA EQX3,I    SET "CHANGED PRIM/SEC" FLAG 
      IOR M100K 
      STA EQX3,I
      LDA B 
      JMP EXOTA     SEND CONTROL WORD 
* 
PCOL1 LDA EQT7,I    REQED NUMBER OF SHIFTS
      AND M17       INSURE ONLY 4 BITS
      STA B 
      LDA EQX1,I    CLEAR STAT
      AND NOT15     BUT NOT BIT 15
      XOR EQX1,I
      IOR B         SAVE PROG COL 1 STAT
      STA EQX1,I
      AND M3777 
      IOR CLBUF     MERGE INTO BUFFER CLEAR COMMAND 
      JMP EXOTA     SEND IT THEN EXIT 
* 
VFCR  LDA VFCRS     RESET VFC 
      LDB EQT7,I    0 FOR 6LPI  1 FOR 8LPI RESET
      SZB           6LPI? 
      ADA M200      NO - SET BIT7 FOR 8LPI RESET
      JMP EXOTA 
* 
CLR   LDA EQT11,I   CLEAR MODE BITS 8 THRU 11 
      AND CMODX       AND TRANSPARITY(BIT12)
      STA EQT11,I         AND PAGE EJECT(BIT 1) 
      CLA 
      STA EQX1,I    CLEAR PROG COL 1 STATUS 
      STA EQX3,I    CLEAR "PRIM/SEC MODIFIED" FLAG
      LDA TOF       DO A TOP OF FORM
      LDB TOFAD     RET ADDRESS 
      JMP EXITI 
TOFAD DEF TOFRT 
TOFRT CLB 
      STB EQT13,I   CLEAR CHARACTER OUTPUT COUNTER
      JSB TOFB6     SET TOF IN STATUS (B=+) 
      LDA MCLR      THEN DO A MASTER CLEAR
      JMP EXOTA 
* 
CPMOD LDA EQT7,I    GET IPRAM 
      AND M37       MODE=BITS0-3: TRANSPARITY=BIT4
      STA B 
      STA TOFB6 
      LDA EQT11,I   UPDATE MODE AND T IN EQT11
      AND CMODE     EXCLUDE BITS 8 THRU 12
      BLF,BLF       MOVE REQUEST TO BITS 8 THRU 12
      ADA B         MERGE OLD FLAGS AND NEW MODE + T
      STA EQT11,I   SAVE FOR RESTORE IF POWER FAIL
      LDA TOFB6     LOOKING FOR MODE AND T BIT
      IOR CSTND     INCLUDE CONTROL WORD BITS 
      LDB UPADD     A=CWD    B=RET ADDRESS
      JMP EXITI 
UPADD DEF EXIT5     EXIT
* 
STEST LDA M3200     RESET TIMEOUT VALUE FOR SELFTEST
      STA EQT15,I 
      LDA SLFTS     SELF TEST CONTROL WORD
      LDB EQT7,I    0/1 = PRINT/NO PRINT FLAG 
      SLB           PRINT?
      INA           NO PRINT SELECTED!
      JMP EXOTA 
* 
      SKP 
*************************************************************** 
* 
*                   CONTINUATION/COMPLETION SECTION 
*                   ON ENTRY A=PRINTER SUBCHANNEL 
* 
* 
CB12  NOP 
      JSB SETIO     CONFIGURE FOR CURRENT SC
      LDA EQT1,I    SPURIOUS INTERRUPT? 
      SZA,RSS 
      JMP AUTUP     YES SCRAM 
      JSB TMOUT     SET TIMEOUT VALUE 
      LDA EQT11,I   GET DRIVER STATUS WORD
      IOR M100K     TURN ON BIT15 
      STA EQT11,I   REPLACE 
      SLA,RSS       COMMAND WORD OUTPUT?
      JMP XCONT     NO - CHECK FOR CONTINUATION RETURN
      XOR D1        YES - CLEAR FLAG AND RESTORE
      STA EQT11,I 
      LDA EQT12,I   RESUME PROCESS
      LDB EQT7,I     BUFFER ADD IF COMMAND OUTPUT 
      JMP A,I 
XCONT RAR,RAR       CHECK FOR 
      CLE,SLA       CHAR READBACK CONT
      JMP CBCON 
      LDB EQT13,I   ANY CHARACTERS LEFT TO DUMP?
      SZB,RSS 
      JMP EXIT5     NO -- SCRAM 
      LDB EQT7,I    GET BUFFER ADDR.
      JMP PRNT      CONTINUE DUMPING LINE 
EXIT5 LDA EQT11,I 
      AND CONTU     TURN OFF ALL CONTINUATION BITS
      STA EQT11,I   REPLACE WORD
      JSB VSTAT     UPDATE PRINTER STATUS 
      LDB EQT8,I    GET IBUFL 
* 
      SSB           SKIP IF POSS. WORD COUNT
      CMB,INB 
CLF2  CLF 0         CLEAR FLAG
      CLA 
      JMP CB12,I    COMPLETION RETURN 
* 
* 
EXITC ISZ CB12      CONTINUATION EXIT 
      JMP CB12,I
* 
* 
* 
* 
AUTUP JSB STAT      CHECK STATUS
      JMP NREDC     NOT READY- NO AUTO UP 
SPCLF CLF 0         CLEAR FLAG FOR SPURIOUS INT 
      CLB            RESET TIME OUT TO 0
      STB EQT15,I 
      JMP $UPIO 
* 
*     ROUTINE TO ADJUST USER BUFFER LENGTH TO NEG. CHAR. COUNT
* 
BUFL  NOP 
      LDA EQT8,I    GET IBUFL 
      SSA           SKIP IF POS. WRD CNT
      JMP BUFX
      ALS           CONVERT WORD COUNT TO 
      CMA,INA       NEGATIVE CHAR. COUNT
BUFX  STA EQT13,I    RESTORE
      JMP BUFL,I    RETURN
* 
* 
*                ON ENTRY B = NEG = CLEAR BIT6
*                           = POS = SET BIT6
* 
TOFB6 NOP 
      STA BUFL      TEMP SAVE OF A REG
      LDA EQT5,I
      IOR M100       FORCE BIT6 SET 
      SSB            SET OR CLEAR BIT6? 
      XOR M100      CLEAR IT! 
      STA EQT5,I
      LDA BUFL      RESTORE A REG 
      JMP TOFB6,I 
* 
* 
********************************************************************
* 
*     ROUTINE TO DUMP USER BUFFER TO LINE PRINTER 
*     ON ENTRY "B" IS BUFFER ADDRESS
* 
* 
* 
PRNT  LDA EQT13,I   CHECK FOR ANY CHAR. 
      SZA,RSS       YES--CONTINUE 
      JMP EXIT0     NO--RETURN
      LDA ND40      SET UP MAX CHAR. DUMP CNT.
      STA EQT12,I       FOR 80 BYTES
      CLE,ELB       SET TO BYTE ADDRESS 
PRTA  JSB .LBT      GET BYTE
      JSB HMODE     WRITE TO THE PRINTER
      JSB .LBT      GET BYTE
      JSB HMODE     WRITE TO THEPRINTER 
      ISZ EQT12,I   CHECK FOR LAST CHAR. PER PASS 
      JMP PRTA
      RBR           CHANGE TO WORD ADDR.
      STB EQT7,I    SAVE BUFF. ADDR.
      JMP EXIT1     GO TO NEXT BLOCK
      SKP 
* 
**************************************************************
* 
*     ROUTINES TO DETECT HONISTY MODE AND EXECUTE 
*     CONTROL CHARACTERS CR LF FF 
* 
* 
HMODE NOP 
      CPA .LF 
      JMP ..LF      DO A LINE FEED
      CPA .CR 
      JMP ..CR      DO A RETURN 
      CPA .FF 
      JMP ..FF      DO A FORM FEED
      STB EQT7,I    SAVE B COUNT
      LDB EQX1,I    LOOK TO SEE IF THIS IS A NEW LINE 
      SSB,RSS       IF NOT
      JMP HMOD0     CONTINUE AS ALWAYS
      LDB EQT7,I    RESTORE B 
      JSB HMOD2     CHECK FOR HONESTY, RTN IF YES 
      LDA EQX1,I    CLEAR NEW LINE FLAG 
      AND M100K 
      XOR EQX1,I
      STA EQX1,I
      LDB EQX3,I    GET NUM OF CHAR OUTPUT ON PREV LINE 
      ELB,BRS       SAVE SIGN BIT FOR FLAG
      CMB,INB       MAKE TWOS COMP
      SZB,RSS       IF THERE ARE NO BLANKS
      JMP HMOD0      THEN OUTPUT NOTHING
      LDA M40       FILL IN LINE WITH SPACES
LF4   JSB OUTA      UP TO LINE FEED 
      INB,SZB 
      JMP LF4 
      LDA TEMP1 
HMOD0 LDB EQT7,I    RESTOR LINE COUNT 
HMOD5 JSB OUTA      WRITE IT TO PRINTER 
      ISZ EQX3,I    COUNT CHAR ON LINE SO FAR 
HMOD1 ISZ EQT13,I   BUMP CHAR COUNT 
      JMP HMODE,I   CONTINUE IF NOT DONE
      LDA EQT6,I    CHECK FOR HONESTY MODE
      AND B2000 
      SZA 
      JMP EXIT1     THEN TAKE THE HNSTY EXIT
      LDA EQX3,I    CLEAR CHAR COUNT IF NOT HNSTY MODE
      AND NOT15 
      XOR EQX3,I
      STA EQX3,I
      JMP EXIT0     EXIT
* 
HMOD2 NOP 
      STA TEMP1     SAVE A
      STB EQT7,I    SAVE B
      LDA EQT6,I    CHECK FOR HONESTY MODE
      AND B2000 
      SZA 
      JMP HMOD3 
      LDA TEMP1 
      JMP HMOD0     NOT HNSTY, OUTPUT 
HMOD3 LDA HMODE 
      STA EQT10,I   SAVE RETURN 
      JMP HMOD2,I 
* 
..LF  JSB HMOD2     RTN IF NOT HNSY MODE
      LDA EQX1,I    SET NEW LINE FLAG 
      IOR M100K 
      STA EQX1,I
      LDA EQT9,I    GET THE SET PRINT COMMAND 
      LDB LF3       RETURN TO THIS ADDRS
      JMP EXITI       WHEN DONE---
LF3   DEF CR3 
* 
..CR  JSB HMOD2     IF HNSY MODE
      LDA EQX1,I    LOOK TO SEE IF THIS IS A NEW LINE 
      SSA           IF SO 
      JMP CR2+1     A NULL FIRST LINE IS NOT ALLOWED
      LDA M100K     DO A PRINT AN SLEW 0
      LDB CR2       RETURN TO ADDRS IN B REG
      JMP EXITI 
CR2   DEF *+1 
      LDA EQX3,I    RESET CHAR COUNT
      AND NOT15 
      XOR EQX3,I
      STA EQX3,I
CR3   LDA EQT10,I   GET RTN ADDR
      STA HMODE 
      LDB EQT7,I    RESTORE B 
      JMP HMOD1 
* 
..FF  JSB HMOD2     IF IN HNSY MODE 
      LDA EQX1,I    SET NEW LINE FLAG 
      IOR M100K 
      STA EQX1,I
      LDA TOF       GO TO TOP OF FORM 
      LDB CR2       RETURN TO THIS ADRS IN B
      JMP EXITI     WHILE WAITTING FOR COMP.
      SKP 
* 
* 
*     ROUTINE TO CHECK PRINTER STATUS 
*     IF A = 0 THEN ENTRY FROM SPURIOUS INTERRUPT 
*     IF A NOT 0 THEN INITIATOR/CONTINUATOR ENTRY 
*     P+1=BAD STATUS
*     P+2=GOOD STATUS 
* 
* 
STAT  NOP           CHECK FOR ON LINE/READY 
      STA B         SAVE INTERRUPT TYPE FLAG
S1    LIA 0         GET STATUS FROM PRINTER 
      STA VSTAT     TEMP SAVE OF STATUS 
      ALF,ALF       POWER FAIL STATUS TO BIT0 
      SLA,RSS       POWER FAIL SET? 
      JMP S2        NO - GO CHECK IF SPUR. INT. ENTRY 
      SZB,RSS       SPURIOUS INTERRUPT? 
      JMP S4        YES - RET VIA $UPIO TO SEE IF SCHED 
      LDA ON.OF 
      INA           "ON LINE" CONTROL WORD
      LDB S4ADD     A = CWD   B = RET ADDRESS 
      JMP EXITI 
S4ADD DEF S4RET 
S4RET LDA MCLR      THEN DO A "MASTER CLEAR"
      LDB MCADD     A = CWD   B = RET ADDRESS 
      JMP EXITI 
MCADD DEF MCRET 
MCRET LDA EQT11,I   THEN RESTORE MODE AS PER EQT11
      ALF,ALF 
      AND M37       EXTRACT MODE AND TRANSPARITY BITS 
      IOR CSTND     CONTROL WORD
      LDB MODAD     A = CWD   B = RET ADDRESS 
      JMP EXITI 
MODAD DEF MODRT 
MODRT LDA EQX1,I    GET PROG COL 1 STATUS 
      AND M17 
      IOR CLBUF     ADD CLEAR BUFFER CNWD 
      LDB CL1AD     A = CWD    B = RET ADD
      JMP EXITI 
CL1AD DEF CL1RT 
CL1RT LDB EQX3,I    GET "MODIFIED P/S" FLAG 
      SSB,RSS       WAS IT MODIFIED?
      JMP SCHN1     NO - THEN LOCAL FRONT PANEL OK
      LDA ND16      YES - NEG OF # OF REQ'ED BYTE 
      JSB RSTAT     ON RET TOP OF A IS FRONT PANEL
      STA TOFB6     TEMP SAVE 
      LDA EQX2,I    GET LAST VALUE
      AND HIBYT     IN TOP OF WORD
      CPA TOFB6     EQUAL?
      JMP GETPS     YES - INSTALL LAST REQ'ED VALUE 
      LDA EQX3,I     NO - LET CURRENT DEFINITION STAND
      AND M100K 
      XOR EQX3,I
      STA EQX3,I    CLEAR "PRIM/SEC MODIFIED" FLAG
      JMP SCHN1 
GETPS LDA EQX2,I
      AND LOBYT     GET LAST REQ'ED PRIM/SEC VALUE
      IOR CCHAR 
      LDB PSADD     A = CNWD   B = RET ADD
      JMP EXITI 
PSADD DEF SCHN1 
* 
SCHN1 LDA EQT4,I    FINALLY LOOK AT SUBCHANNEL
      AND M3700     MASK=3700B
      CPA M100      SC = 1? 
      RSS           YES - RETURN WITH NOT READY 
      JMP S1        NO - IGNORE THE POWER FAIL
      LDA ON.OF     NOT READY SO GO OFFLINE 
      LDB OFADD     A=CWD     B=RET ADDRESS 
      JMP EXITI 
OFADD DEF S3
* 
S2    SZB,RSS       SPURIOUS INTERRUPT? 
      JMP S4        YES - ENTRY FROM "ON LINE" INT! 
      LDA VSTAT     NO - ENTRY FROM INITIATOR!
      AND M1401     SAVE BITS 15,14,0 
      CPA M1001     SKIP IF STATUS NOT GOOD 
      JMP S4        GOOD STATUS 
S3    CLF 0         CLEAR FLAG
      JMP STAT,I       AND GIVE P+1 RETURN
S4    ISZ STAT      P+2 FOR GOOD STATUS 
      JMP STAT,I    RETURN
* 
* 
* 
*     ROUTINE TO RETURN DYNAMIC STATUS
* 
* 
VSTAT NOP 
      LDA EQT5,I    GET OLD STATUS WORD 
      AND HIBX1     DUMP OLD STATUS WORD
      STA B           SAVE
VS1   LIA 0         GET NEW STATUS
      ALF           TOP 4 BITS TO BOTTOM
      STA STAT      TEMP SAVE 
      AND M17       SAVE ONLY LOW 4 BITS(WERE TOP 4)
      IOR B         APPEND TO EQT5 REMNENT
      LDB STAT      RECALL OLD STATUS 
      SSB           VFC INITILIZED? 
      IOR M20       YES - SET BIT4 IN EQT5
      RBL           6/8LPI TO SIGN
      SSB           8LPI? 
      IOR M40       YES - SET BIT5 IN EQT5
      LDB STAT      FOR THE LAST TIME 
      BLF           POWER FAIL TO BIT0
      SLB           DID POWER FAIL? 
      IOR M200      YES - SET BIT7 IN EQT5
      STA EQT5,I    FINALLY SAVE THE UPDATED STATUS 
      JMP VSTAT,I   EXIT
* 
* 
*     ROUTINE TO OUTPUT CONTENTS OF REG. A
* 
OUTA  NOP 
O0    SFS 0         SKIP IF FLAG SET
      JSB TIME      CHECK FOR TIME OUT
O1    OTA 0         DUMP WORD 
O2    STC 0,C 
      JMP OUTA,I    RETURN
* 
* 
*     ROUTINE TO INPUT DATA FROM THE PRINTER INTO 
*     TOP 8 BITS OF A REGISTER
* 
* 
INTOA NOP 
INA1  SFS 0 
      JSB TIME      CHECK FOR TIME OUT! 
INA2  LIA 0         READ DATA BYTE
      AND HIBYT     CLEAR DEMAND BIT
INA3  STC 0,C       GET READY FOR NEXT DATA 
      JMP INTOA,I   RETURN
* 
* 
TIME  NOP 
      STA VSTAT     SAVE CHARACTER TEMPORARILY
      LDA ND100     PICK UP LOOP COUNTER
TIM1  SFC 0         SKIP IF CHAR NOT ACCEPTED 
      JMP TIM2
      SSA,INA       SKIP IF DELAY TIME EXCEEDED 
      JMP TIM1
      JMP EXIT1     TIME-OUT RETURN THROUGH IB12 OR CB12
TIM2  LDA VSTAT     RESTORE CHARACTER TO A REG. 
      JMP TIME,I    RETURN TO CALLING CODE
* 
*     DETERMINE TIMEOUT DELAY FOR DRIVER. THIS OVERRIDES EITHER THE 
*     TO VALUE AT GEN TIME OR AN OPERATOR SUPPLIED VALUE. 
* 
TMOUT NOP 
      LDB DM250     2SEC DELAY EXCEPT FOR 2X & SELFTEST 
      LDA EQT11,I 
      ALF,ALF       CURRENT PRINT MODE TO BITS 0 THRU 3 
      AND M17       EXTRACT THEM
      CPA D1        IN DOUBLE SIZE? 
      BLS            YES - DOUBLE THE DELAY (5 SEC) 
      STB EQT15,I   TIMEOUT FOR DVB12(UNLESS SELT TEST) 
      JMP TMOUT,I   EXIT
* 
*     THIS SUBROUTINE WILL RETURN A SPECIFIC STATUS BYTE
*     AS REQUESTED BY THE A REGISTER.  PROVIDE THE COMPLEMENT 
*     TO THE REQUESTED VALUE. VALUE IS IN TOP OF A REG. 
* 
RSTAT NOP 
      STA TOFB6     NEG OF # OF BYTES TO READ 
      CMA,INA       MAKE IT POSITIVE
      IOR STATR     MERGE IN CNWD 
      LDB STATA     A = CNWD   B = RET ADD
      JMP EXITI 
STATA DEF STATX 
STATX JSB INTOA     GET A BYTE
      JSB TIME      WAIT FOR FLAG TO SET
      ISZ TOFB6     DONE? 
      JMP STATX     NO - KEEP TRYING
      JMP RSTAT,I   YES - EXIT WITH BYTE IN TOP OF A
      SKP 
************************************************************
SETIO NOP 
      IOR STF       BUILD & EXECUTE STF CH INST 
      STA *+1 
      NOP 
      AND M77       RETAIN JUST SC
      CPA SC        SKIP IF DVR NOT PROPERLY CONFIG.
      JMP SETIO,I   RECONFIGURATION NOT NECESSARY 
      STA SC        SAVE NEW CHANNEL NUMBER 
      IOR SFC       FORM SFC INSTRUCTION
      STA TIM1
      ADA M100      FORM SFS INSTRUCTION
      STA INA1
      STA O0
      ADA M200      FORM LIA INSTRUCTION
      STA VS1 
      STA INA2
      STA S1
      ADA M100      FORM OTA INSTRUCTION
      STA O1
      ADA M300      FORM CLF INSTRUCTION
      STA S3
      STA CLF2
      STA SPCLF 
      ADA B600      FORM STC,C INSTRUCTION
      STA INA3
      STA O2
*          SETUP POINTERS FOR ACCESS TO VALUES IN EXT'ED EQT
      LDA EQA13,I   ADDRESS OF EXTENDED EQT 
      STA EQT12 
      INA 
      STA EQT13 
      INA 
      STA EQX1
      INA 
      STA EQX2
      INA 
      STA EQX3
      JMP SETIO,I 
      SPC 2 
NREDC JSB VSTAT      UPDATE STATUS
      CLA,INA       SET REG A TO 1
      JMP CB12,I    RETURN
* 
* 
* 
*********************************************************** 
* 
*     DATA BASES
* 
STF   STF 0 
SFC   SFC 0 
SC    OCT 0 
* 
*     MASK VALUES 
* 
M2    OCT 2 
M3    OCT 3 
M4    OCT 4 
M10   OCT 10
M17   OCT 17
M20   OCT 20
M37   OCT 37
M40   OCT 40
M77   OCT 77
M100  OCT 100 
M177  OCT 177 
M200  OCT 200 
M201  OCT 201 
M202  OCT 202 
M300  OCT 300 
M400  OCT 400 
M401  OCT 401 
LOBYT OCT 377 
M3400 OCT 3400
M3700 OCT 3700
M3777 OCT 3777
NOT15 OCT 77777 
CONTU OCT 17602 
M100K OCT 100000
M1001 OCT 100001
M1401 OCT 140001
CMODE OCT 160377
CMODX OCT 160375
HIBYT OCT 177400
HIBX1 OCT 177500
* 
*             CONSTANTS 
* 
* 
D1    DEC 1 
D2    EQU M2
D3    EQU M3
D4    EQU M4
D6    DEC 6 
D8    EQU M10 
D56   DEC 56
D63   EQU M77 
D127  EQU M177
B600  OCT 600 
B1000 OCT 1000
B1100 OCT 1100
B1500 OCT 1500
B1600 OCT 1600
B2000 OCT 2000
B2100 OCT 2100
B3000 OCT 3000
ND1   OCT -1
ND9   DEC -9
ND16  DEC -16 
ND40  DEC -40 
ND74  DEC -74 
ND100 DEC -100
DM250 DEC -250
M3200 DEC -3200 
M1153 DEC -1153 
* 
* 
* 
* 
*     VFC/SLEW CONSTANTS
* 
TOF   OCT 100200
* 
* 
*     COMMAND BYTE VALUES 
* 
* 
CALPH EQU M100K     ALPHA PRINT 
CSTND OCT 130000    STANDARD PRINT MODE 
CHARB OCT 120200     CHARACTER READ-BACK COMMAND
CLBUF OCT 70000     CLEAR INPUT BUFFER COMMAND
MCLR  OCT 50000     MASTER CLEAR
SLFTS OCT 40000 
CCHAR OCT 10000     CHANGE CHAR. SET
VFCRS OCT 20000     VFC RE-SET
ON.OF OCT 30000     ON/OFF LINE 
STATR OCT 120000   STATUS READ REQUEST
PING  OCT 60000     PING COMMAND
PONG  OCT 60001     PONG COMMAND
* 
* 
* 
*     ASCII CONSTANTS 
* 
* 
ASTR  OCT 25000     HIGH BYTE "*" 
DSPAC EQU ON.OF     HIGH BYTE "0" (OCT 30000) 
EJCT  OCT 30400     HIGH BYTE "1" 
.LF   OCT 12
.CR   OCT 15
.FF   OCT 14
TEMP1 NOP 
EQT12 NOP 
EQT13 NOP 
EQX1  NOP 
EQX2  NOP 
EQX3  NOP 
* 
* 
* 
A     EQU 0 
B     EQU 1 
EQT1  EQU 1660B     EQUIPMENT  TABLE ADDRESSES
EQT4  EQU 1663B 
EQT5  EQU 1664B 
EQT6  EQU 1665B 
EQT7  EQU 1666B 
EQT8  EQU 1667B 
EQT9  EQU 1670B 
EQT10 EQU 1671B 
EQT11 EQU 1672B 
EQA12 EQU 1771B 
EQA13 EQU 1772B 
EQT15 EQU 1774B 
      END 
              