ASMB,R,L,C * NAME: DD.12 * SOURCE: 92070-18086 * RELOC: 92070-16086 * PGRM: D.L.M. * * ***************************************************************** * * COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS RESERVED * * * NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * ***************************************************************** HED DD.12 HP-IB LINE PRINTER DRIVER NAM DD.12 92070-16086 REV.2001 800109 ENT DD.12 EXT $DV1,$DV6,$DV12,$DV15,$DV16,$DV17,$DV18 EXT $DV19,$DV20,$DV22,.MVW GEN 25,EDD.12,DX:1,TX:26,TO:1000,DT:12B GEN 3,M2631 * * A EQU 0 B EQU 1 * DD.12 NOP LDB $DV1 ARE WE CPB DX15,I SET UP? JMP START YES. STA TEMP NO, DO IT. LDA M.26 STA CNTR LDA $DV22,I DVT EXTENSION ADDRESS LDB DXAD DXSET STA B,I INA INB ISZ CNTR JMP DXSET LDA $DV1 WE ARE SET UP NOW STA DX15,I * LDA TEMP GET ENTRY DIRECTIVE START AND B7 GET LOWER 3 BITS ADA JTBLA ADD TO JUMP TABLE ADDR. JMP A,I GO TO IT! JTBLA DEF *+1,I ADDRESS OF TABLE DEF ABORT ZERO = ABORT DEF INIT ONE = INITIATE DEF CONT TWO = CONTINUE DEF TIMOT THREE = TIME OUT DEF PFAIL FOUR = POWER FAIL DEF CONT FIVE = RESUME ON INTERRUPT DEF REJ1 SIX AND SEVEN ARE ILLEGAL DEF REJ1 * PFAIL JSB RSET DO A RESET. LDA RSTRT THEN RESTART THE REQUEST. CLB JMP NR * * M.26 DEC -26 NDDF OCT 140000 CNTR NOP TEMP NOP DXAD DEF DX1 DX1 BSS 1 Q DX2 BSS 1 U DX3 BSS 1 I DX4 BSS 1 N DX5 BSS 1 T DX6 BSS 1 DX7 BSS 1 A DX8 BSS 1 R DX9 BSS 1 E DX10 BSS 1 A DX11 BSS 1 TEMPORARY LOCATION/STATUS DX12 BSS 1 TEMPORARY LOCATION/DSJ DX13 BSS 1 REQUEST AND FUNCTION CODE DX14 BSS 1 USER'S BUFFER ADDRESS/PRAM 1 DX15 BSS 1 DVT ADDRESS DX16 BSS 1 CONTINUE/RESUME ENTRY POINT DX17 BSS 1 LENGTH OF BUFFER DX18 BSS 1 END OF LINE MODIFIER DX19 BSS 1 SPACE SUPPRESS FLAG DX20 BSS 1 CARRIAGE CONTROL FLAG DX21 BSS 1 SUBROUTINE RETURN ADDRESS DX22 BSS 1 FIRST WORD OF USER'S BUFFER DX23 BSS 1 PAPER OUT FLAG DX24 BSS 1 STATUS WORD DX25 BSS 1 COUNT DX26 BSS 1 PAPER FLAG SKP * INITIATE THE REQUEST * INIT LDA $DV15,I SAVE REQUEST CODE & FUNCTION CODE AND B7703 STA DX13,I TEMPORARILY. LDA $DV15,I AND MSK CHANGE REQUEST TO STA $DV15,I MULTI-BUFFERED. LDA $DV16,I SAVE USER'S BUFFER (OR PRAM1) STA DX14,I LDA $DV17,I SAVE LENGTH STA DX17,I STA DX25,I INIT1 JSB DSJ0 FIRST CHECK DSJ JSB EXITC DO IT * JSB BDDSJ CHECK STATUS LDB $DV20,I GET PAPER RETURN ADDRESS LDA DX18,I AND FINAL TERMINATOR SSB WAS IT OUT? SSA AND WAS THE TERMINATOR TO BE DONE? JMP INIT2 NO - CONTINUE JSB SLEW YES - DO TERMINATOR * JSB EXITC DO IT! * JSB EXITR WAIT FOR PARALLEL POLL * INIT2 LDA $DV20,I GET FIRST TIME BIT AGAIN ELA,CLE,ERA CLEAR STA $DV20,I AND RESTORE CLA CLEAR: STA DX22,I FIRST WORD FLAG STA DX26,I AND PAPER FLAG LDA DX13,I REQUEST CODE CPA B3 CONTROL REQUEST CLEAR? JMP CLEAR YES CPA B1103 CONTROL REQUEST FORMS? JMP FORMS YES * AND B3 LOWER BITS ONLY CPA B2 IS IT A WRITE?? JMP WRITE YES DO IT CPA B3 IS IT ANOTHER CONTROL REQUEST JMP CNTRL REJ1 LDA NDDF DON'T DOWN, DO FLUSH. INA ILLEGAL REQUEST CLB JMP NR1 * CNTRL CLA NOT RECOGNIZED CONTROL REQUESTS JMP EXITD NORMAL COMPLETION EXIT * SKP * ALL NOT READY CODES COME HERE EXCEPT PAPER OUT * NR CLB STB DX16,I STA DX23,I SAVE FAILURE CODE JSB RSTR RESTORE FIRST WORD LDB B4103 DISABLE PROGRAM SCHEDULING JSB SDV15 PUT IN DV15 JSB EXITC DO IT * CLB CLEAR DX23 AND LDA DX23,I FETCH ERROR CODE STB DX23,I JMP NR1 NREDY LDA B2 NOT READY CODE NR1 STA $DV16,I LDA DX24,I GET STATUS STA $DV18,I AND POST CLA STA $DV17,I XLOG JMP DD.12,I RETURN. * * TIME OUT ROUTINE * TIMOT LDA DX23,I GET PAPER FLAG SZA WAS PAPER OUT? JMP PPR1 YES - GO CHECK STATUS TMOT1 LDA B3 TIME OUT CODE JMP NR * * CONTINUES ALL COME HERE * CONT LDA DX16,I GET RETURN LDB $DV16,I GET IFD STATUS CPB B3 CHECK STATUS JMP TMOT1 TIME OUT CT1 SZA SPURIOUS INT.? JMP A,I O.K. LDA B4 ILL. INT. CLB ISZ DD.12 P+3 JMP EXIT2 * * ABORT HANDLES ABORT REQUESTS * ABORT LDA ABADD GET RETURN ADDRESS STA EXITC STORE IN CONTINUE EXIT LDA B4 JMP EXTC1 ABADD DEF AB1 * AB1 JSB RSTR RESTORE FIRST WORD IF ANY LDB B4103 DISABLE DRIVER SCHEDULING JSB SDV15 PUT IN DVT CLA CLEAR DVT16 STA $DV16,I JSB EXITC DO IT * AB2 CLA STA DX21,I CLEAR RE-ENTRANT POINTS LDB DX25,I GET TRANSMISSION LOG JMP EXTD1 ALL DONE * * SKP * * WRITE CAUSES THE CHARACTERS IN THE USERS BUFFER TO BE PRINTED * BASED ON THE CONTROL WORD PASSED TO IT. * WRITE CLA,INA CARRIAGE CONTROL SET STA DX18,I TO DO CR,LF. LDA DX19,I CHECK IF SUPPRESS SPACE CLB SLA IS IT SET?? STB DX18,I YES - CR MODIFIER ONLY STB DX19,I CLEAR SPACE SUPPRESS BIT. SLLEN LDA DX17,I REQUEST LENGTH. ALS CHANGE WORD COUNT TO CHARS. CMA,INA NEGATE. SSA * * PROCESS INITIAL CARRIAGE CONTROL REQ. * STCHR STA DX17,I RUNNING COUNT HERE. LDA DX13,I FETCH CONWORD AND BIT10 SZA HONESTY MODE ? JMP HNSTY YEP. GO DO IT'S THING. LDA DX13,I AND BIT7 GET CONTROL BIT 7. SZA SS = 1 JMP NOCC MEANS NO CARRIAGE CONTROL. STA DX20,I NO CC FLAG. LDA DX17,I GET LENGTH SZA,RSS IF ITS ZERO DO CR-LF JMP TRM DO TERMINATOR LDB DX14,I BUFFER ADDRESS LDA B,I GET THE FIRST CHAR. IN BUFFER ALF,ALF AND B377 LDB PEJEC CPA EJECT PAGE EJECT ? JMP PEJCT YES. CLB,INB GET DOUBLE SPACE MODIFIER IN CASE. CPA DOUBL DOUBLE SPACE ? JMP PEJCT YES. CLB PUT A 0 MODIFIER CPA STAR SPACE SUPPRESS ? STB DX18,I YES - RESET MODIFIER FOR CARRIAGE RETURN ONLY JMP LOUT GO OUTPUT THE LINE SKP * * NOCC SUPRESSES CARRIAGE CONTROL AT BEGINNING * NOCC CLB,INB SET NO CC FLAG TO 1. STB DX20,I JMP LOUT GO OUTPUT A LINE. * PEJCT LDA B MODIFIER JSB SLEW SET UP TO DO BEGINNING LINE MODIFIER JSB EXITC * JSB EXITR WAIT FOR PARALLEL POLL * JSB DSJ0 BUILD DSJ QUINT JSB EXITC GO DO IT * JSB CKDSJ CHECK DSJ JSB BDDSJ DSJ BAD - CHECK STATUS * * LOUT CHECKS THE LAST WORD TO BE OUT FOR AN UNDERSCORE "_" * IF FOUND IT DECREASES THE BUFFER LENGTH BY ONE TO BE TRANSMITTED * AND DOESN'T DO END-OF-LINE MODIFIER * LOUT LDB DX17,I GET LENGTH OF BUFFER CMB,INB TWO'S COMPLEMENT CLE,ERB DIVIDE BY 2 AND SAVE REM. SEZ,RSS ADD -1 IF REM. IS ZERO ADB M1 ADD MINUS ONE ADB DX14,I ADD START ADDR. FOR LAST WORD ADDR. LDA B,I GET LAST WORD LDB DX17,I AND LENGTH AGAIN SLB ODD MEANS BYTE IN UPPER HALF ALF,ALF MAKE SURE IN LOWER HALF AND B377 IS IT UNDERSCORE? CPA B137 RSS YES JMP LT1 NO - PRINT ENTIRE BUFFER ISZ DX17,I DECREASE CHAR. COUNT BY ONE CCB SET B STB DX18,I FORGET ABOUT MODIFIER SKP * * NOW PRINT THE BUFFER * LT1 LDA DX17,I GET LENGTH SZA,RSS IS IT ZERO? JMP TRM YES - DO TERMINATOR ONLY LDA DX20,I GET NOCC FLAG CLE,SLA,RSS SKIP IF SET CCE SET E SETUP LDB DX14,I GET ADDRESS OF FIRST WORD LDA B,I GET FIRST WORD STA DX22,I AND SAVE IN EXT. AND B377 PUT A NULL IN UPPER BYTE SEZ IF E=1 UPDATE THE FIRST WORD STA B,I RESTORE TO BUFFER JSB PRNBF GO SET UP QUINTS JSB EXITC PRINT THEM! CONTINUE P+2 * JSB EXITR WAIT FOR PARALLEL POLL * JSB RSTR RESTORE FIRST WORD JSB DSJ0 BUILD DSJ QUINT JSB EXITC GO DO IT * JSB CKDSJ CHECK DSJ JSB BDDSJ BAD DSJ - ANALYZE TRM LDA DX18,I CHECK FOR TERMINATION. SSA IS MODIFIER CORRECT? JMP NOTRM DON'T DO TERMINATOR CCB SET STB DX26,I PAPER FLAG JSB SLEW JSB EXITC P+2 * JSB EXITR WAIT FOR PARALLEL POLL * * NOTRM DOES COMPLETION DSJ * NOTRM JSB DSJ0 BUILD DSJ QUINT JSB EXITC GO DO IT * JSB CKDSJ CHECK DSJ JSB BDDSJ ERROR ! LDB DX25,I SKP * * EXITD IS DRIVER DONE EXIT POINT * EXITD LDA $DV6,I GET STATUS IOR BIT5 OR IN BIT TO XOR BIT5 CLEAR EOM BIT STA $DV6,I AND RESTORE EXTD1 STB $DV17,I STORE XLOG. CLA STA $DV16,I ERROR CODE STA DX16,I CLEAR NEXT ENTRY LDB DX24,I PUT CURRENT STATUS STB $DV18,I AND STATUS. JMP DD.12,I COMPLETION RETURN. * * PRNBF SETS UP THE QUINT TO TRANSMIT THE USER'S BUFFER FOR * THE PHYSICAL DRIVER. * PRNBF NOP LDA DX14,I GET BUFFER ADDRESS STA BUFR AND STORE IN BUFFER LDA DX17,I GET CHAR. COUNT STA LEN AND STORE IN LENGTH LDA M1 PUT -1 IN A STA $DV17,I NUMBER OF QUINTS IN $DV17 LDA PRTQA GET QUINT ADDRESS JSB MOVE GO MOVE QUINTS INTO EXT. DEF DX1 STARTING HERE JMP PRNBF,I RETURN * * HNSTY JUST PRINTS THE USERS BUFFER (NO CARRIAGE CONTROL PERIOD!) * HNSTY LDB DX17,I GET LENGTH SZB,RSS IF ZERO, DON'T DO ANYTHING JMP EXITD ALL DONE IF ZERO JSB PRNBF GO PRINT THE BUFFER JSB EXITC EXIT P+1 TO PRINT * JSB EXITR WAIT FOR PARALLEL POLL * JMP NOTRM ALL DONE - COMPLETE SKP * * * FORMS CONTROL REQUESTS COME HERE. * FORMS LDB DX14,I GET PRAM1 SZB,RSS IS IT ZERO? JMP SSPC YES - SUPPRESS SPACE LDA PEJEC SSB TOP OF FORM? JMP FRM1 YES - DO IT ADB M64 ADD -64 TO PRAM1 SSB,RSS IS IT STILL POSITIVE? JMP CNTRL YES - ILLEGAL PRAM1, COMPLETE REQUEST LDA DX14,I GET PRAM1 AGAIN FRM1 JSB SLEW GO SET UP QUINTS JSB EXITC GO DO IT! P+2 * JSB EXITR WAIT FOR PARALLEL POLL * CLA CLEAR STA DX25,I DX25 JMP NOTRM GO DO FINAL DSJ * * * * SSPC CLA,INA SET SPACE SUPPRESS BIT STA DX19,I PUT IT IN EXTENSION CLB JMP EXITD ALL DONE * * * SLEW SETS UP THE QUINT FOR FORMS CONTROL * SLEW NOP ALF,ALF MOVE TO UPPER BYTE STA DX11,I LDA DX11 STA SLDX LDA M1 ONE QUINT STA $DV17,I LDA SLUQA SLEW QUINT ADDRESS JSB MOVE PUT IT IN EXT. DEF DX1 STARTING LOCATION JMP SLEW,I SKP * * CONTROL REQUEST CLEAR. CAUSES 1. RESET TO PRINTER * 2. PUT PRINTER ON-LINE * CLEAR JSB CLR CLEAR PRINTER JSB RSET DO A TERMINAL RESET JSB STAT READ STATUS (DON'T CARE ABOUT DSJ) CLB JMP EXITD ALL DONE * * CLR READS 10 BYTES OF LONG STATUS. ALSO FREES CONTROLLER * AFTER PAPER OUT * CLR NOP LDA CLR SAVE RETURN ADDRESS STA DX21,I IN DX21 LDA M1 ONE QUINT STA $DV17,I LDA DX11 STA FLDX POINTER TO MODIFIER LDA B6 LONG STATUS MODIFIER ALF,ALF MOVE TO PROPER POSITION STA DX11,I LDA FLQA QUINT ADDRESS JSB MOVE PUT THEM IN EXTENSION DEF DX1 STARTING HERE JSB EXITC GO DO IT! * JSB EXITR WAIT FOR PARALLEL POLL * LDA SCRCH DATA READY, SO READ LONG STATUS STA RLDX LDA LSQA READ LONG STATUS QUINT ADDRESS JSB MOVE DEF DX1 STARTING HERE LDA M2 ONE QUINT STA $DV17,I PUT INTO DVT JSB EXITC GO TO IT. * LDA DX21,I GET RETURN JMP A,I RETURN SKP * * RESET THE CONTROLLER * RSET NOP LDA RSET SAVE RETURN STA DX21,I LDA B5 RESET MODIFIER ALF,ALF PUT IN PROPER POSTION STA DX11,I PUT IN EXTENSION LDA DX11 GET ADDRESS STA FLDX STORE IN FLUSH QUINT LDA FLQA GET QUINT ADDRESS JSB MOVE MOVE INTO EXT. DEF DX1 STARTING HERE JSB EXITC GO DO IT * JSB EXITR WAIT FOR POLL * JSB DSJ0 BUILD DSJ QUINT JSB EXITC CONTINUE EXIT * RS2 LDA B7 ON-LINE ALF,ALF PUT IN PROPER POSITION STA DX11,I LDA DX11 GET ADDRESS OF BUFFER STA RSDX STORE IN QUINT LDA B200 ALF,ALF PUT IN PROPER POSITION STA DX12,I LDA DX12 STA FLDX LDA RSQA GET QUINT ADDRESS JSB MOVE MOVE INTO EXT. DEF DX1 JSB MOVE MOVE NEXT QUINT DEF DX6 LDA M2 TWO QUINTS STA $DV17,I JSB EXITC CONTINUE EXIT * JSB EXITR WAIT FOR PARALLEL POLL * LDA DX21,I FETCH RETURN JMP A,I SKP * * STATUS SUBROUTINE * STAT NOP LDA STAT GET RETURN ADDRESS STA DX21,I SAVE RE-ENTRANT POINT LDA M2 TWO QUINTS STA $DV17,I LDA DX11 STA STATQ+1 LDA STAQA STATUS QUINT ADDRESS JSB MOVE MOVE IT INTO EXT. DEF DX1 STARTING ADDRESS LDA DX12 STA DSJQ+1 LDA DSJQA MOVE DSJ QUINT JSB MOVE DEF DX6 JSB EXITC P+2 * LDA DX11,I GET STATUS JSB LBYTI PUT IN PROPER LOCATION STA DX24,I AND SAVE TEMPORARILY AND B300 LDB DX21,I GET RETURN ADDRESS CPA B300 ON-LINE? READY FOR DATA? JMP B,I P+1 IS NOT READY RETURN * * * IF STATUS BAD, THEN ANALYZE * LDB DX24,I GET STATUS LDA B2 AND ERROR CODE RBR,SLB IS PRINTER OUT OF PAPER? JMP PPRO DO PAPER OUT EXIT RBR,RBR MOVE TO NEXT POSITION SLB PRINTER RECEIVE PARITY ERROR? LDA B5 YES JMP NR * * ALL BAD DSJ'S COME HERE * BDDSJ NOP LDA BDDSJ SAVE RETURN ADDRESS STA DX23,I JSB STAT CHECK STATUS CLA CLEAR STA DX23,I RETURN POINT JMP BDDSJ,I STATUS OK - CONTINUE SKP * * PAPER IS OUT. CONTINUE TO READ STATUS AND DSJ EVERY 5 SECONDS * UNTIL THE DEVICE INDICATES ITS READY * PPRO LDA $DV6,I GET DEVICE STATUS IOR BIT5 INDICATE EOM STA $DV6,I LDA =D-500 SET A LOGICAL TIMEOUT STA $DV12,I IN CLOCK LDA $DV20,I SET IOR BIT15 FIRST TIME BIT IN STA $DV20,I CASE OF ABORT CLA,INA START TIMEOUT ISZ DD.12 EXIT ISZ DD.12 LOGICAL JMP DD.12,I WAIT * PPR1 JSB STAT CHECK STATUS JSB CLR CLEAR DEVICE * LDA $DV20,I RESET FIRST TIME ELA,CLE,ERA BIT STA $DV20,I RESTORE CLB LDA DX23,I RETURN ADDRESS INTO THE DRIVER STB DX23,I CLEAR THAT LOCATION LDB DX26,I GET PAPER FLAG CMB,SZB IF SET DO TERMINATOR AGAIN JMP A,I RETURN TO PROGRAM AT POINT OF EXIT JMP TRM DO TERMINATOR AGAIN * SKP * * "MOVE" MOVES THE QUINTS INTO THE EXTENTION. * MOVE NOP LDB MOVE,I GET ADDRESS OF ADDRESS IN EXT. LDB B,I GET FINAL ADDRESS CPB DX1 IF DX1 SET DVT STB $DV16,I SET UP EXT ADDRESS WHERE QUINTS ARE. MO5 JSB .MVW MOVE QUINT INTO EXTENSION DEF B5 FIVE WORDS IN EXT. NOP ISZ MOVE BUMP RETURN JMP MOVE,I RETURN P+2 * * LBYTI NOP ALF,ALF MOVE TO LOWER BYTE AND B377 MASK OUT UPPER BYTE JMP LBYTI,I RETURN * * * CHECK DSJ SUB * CKDSJ NOP LDA DX12,I GET DSJ RESPONSE JSB LBYTI MOVE TO PROPER POSITION SZA,RSS ISZ CKDSJ O.K. RETURN P+2 JMP CKDSJ,I ZERO IS COOL. * DSJ0 NOP LDA DX12 STA DSJQ+1 LDA DSJQA DSJ QUINT ADDRESS JSB MOVE PUT IN EXT. DEF DX1 STARTING HERE LDA M1 ONE QUINT STA $DV17,I PUT IN DVT. JMP DSJ0,I RETURN SKP * *SDV15 MODIFIES DV15 WITHOUT DESTROYING BITS 14 AND 15 * SDV15 NOP LDA $DV15,I GET DV15 AND NDDF SAVE 14 AND 15 IOR B OR IN DESIRED PATTERN STA $DV15,I RESTORE TO DV15 JMP SDV15,I BACK TO MAIN PROGRAM * * RSTR: RESTORE FIRST WORD TO BUFFER * RSTR NOP LDA DX22,I GET FIRST WORD AGAIN LDB DX14,I GET ADDRESS OF FIRST WORD SZA IF ITS ZERO DON'T RESTORE!! STA B,I RESTORE TO BUFFER LOCATION CLA CLEAR A STA DX22,I AND STORE IN DX22 JMP RSTR,I ALL DONE!! * * EXITC IS THE CONTINUE EXIT WHICH SAVES THE NEXT ENTRY POINT * EXITC NOP CLA CLEAR A EXTC1 LDB EXITC STB DX16,I SAVE NEXT ENTRY. EXIT2 ISZ DD.12 JMP DD.12,I RETURN. * * EXITR IS THE LOGICAL WAIT EXIT WHICH SETS THE RESUME ENTRY POINT * EXITR NOP CLA,INA A=1 (SET TIMEOUT BIT) LDB EXITR GET ENTRY POINT STB DX16,I AND SAVE IT LDB M3000 GET LOGICAL TIMEOUT STB $DV12,I AND STORE IN CLOCK ISZ DD.12 INCREMENT RETURN ISZ DD.12 TWICE JMP DD.12,I RETURN SKP * CONSTANTS, QUINTS, ETC. * * RSQA DEF RSETQ STAQA DEF STATQ SLUQA DEF SLEWQ DSJQA DEF DSJQ PRTQA DEF PRNTQ FLQA DEF FLSHQ LSQA DEF RLSQ * PRNTQ OCT 120102 PRINT DATA BUFR OCT 0 LEN OCT 0 OCT 20001 CACON OCT 140 SECONDARY * DSJQ OCT 120101 DSJ NOP M1 DEC -1 B1 OCT 1 CACON OCT 160 SECONDARY * SLEWQ OCT 120102 SLEW SLDX OCT 0 DEC -1 OCT 20001 OCT 150 SECONDARY * STATQ OCT 120101 STATUS (1 BYTE) NOP DEC -1 OCT 10001 CACON OCT 156 SECONDARY * RSETQ OCT 120102 ON-LINE & DISPLAY FUNCTIONS RSDX OCT 0 DEC -1 OCT 10001 OCT 142 * FLSHQ OCT 120102 READ LONG STATUS QUINT FLDX OCT 0 DEC -1 OCT 20001 OCT 142 * RLSQ OCT 120101 READ LONG STATUS QUINT RLDX OCT 0 M10 DEC -10 OCT 1 OCT 140 * B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B100 OCT 100 B137 OCT 137 B200 OCT 200 B300 OCT 300 B1103 OCT 1103 B4103 OCT 4103 B7703 OCT 7703 B377 OCT 377 M2 DEC -2 M64 DEC -64 M3000 DEC -3000 BIT5 OCT 40 BIT7 EQU B200 BIT10 OCT 2000 MSK OCT 167774 RSTRT OCT 100077 BIT15 OCT 100000 BUFAD OCT 0 EJECT OCT 61 DOUBL OCT 60 STAR OCT 52 PEJEC EQU B100 SCRCH DEF *+1 SCRATCH AREA FOR LONG STATUS BSS 5 MUST BE AT LEAST 5 WORDS END *