JSB A2LP DO IT LDA CHCNT RESTORE ZONE COUNT STA CHCNC LDB .40 MINIMUM OF ONE ZONE COUNT ADB .13 ISZ LFCNT JMP *-2 STB TMOTX TO NEXT CHARACTER LDB LNCNT RESET LINE COUNT STB LFCNT JMP OTCH,I * LFCNT DEC -60 LNCNT DEC -60 FFTM DEC 780 SKP * OUTPUT A REG TO LINE PRINTER * B REG = MAX TIME OUT * A2LP NOP STB TMOTS SAVE TIME OUT LDB A2LPS SAVE PREVIOUS STB A2LPP CHARACTER STA A2LPS SAVE OUTPUT LDA JSBI A2LP0 STA LP LDB MXTMO CLA,INA DO TIMMING TESTS CPA TMFLG ? STB TMOTS SET MAX TIME OUT LDA A2LPS RETRIEVE CHARACTER A2LP1 OTA LP GIVE CHARACTER TO LINE PRINTER STF INTP TURN ON INTERRUPTS A2LP2 STC LP,C TRANSFER CHARACTER LDA TMOTS PICK UP THE TIME OUT JSB TMRR,I GO WAIT CLF INTP TURN OFF INTERRUPTS LDA A2LPS GET CURRENT OUTPUT LDB A2LPP GET PREVIOUS OUTPUT E030 JSB ERMS,I REPORT TIME OUT DEF LPTOM POINTER TO MESSAGE CLA ALTER JSB IN CFR STA CRJSB TO SKIP FORM FEED IF LP IS OFF LINE JSB CFR GO WAIT UNTIL READY LDA JSBFF RESTORE JSB INSTR STA CRJSB IN CFR ROUTINE RSS A2LPI NOP CLF INTP A2LP3 CLC LP,C TURN OFF LINE PRINTER JMP A2LP,I RETURN * LPTOM EQU * ASC 10,E030 L.P. TIME OUT/ TMOTX NOP A2LPS NOP A2LPP NOP MXTMO DEC 2000 2 SECONDS MAX TMOTS NOP TMFLG NOP JSBI JSB A2LPI JSBFF JSB FFP SKP * CHECK FOR READY * CFR NOP CFRSC LIA LP GET CURRENT STATUS SZA IS IT READY? JMP E031 NO STA TMFLG CRJSB JSB FFP DO FORM FEED IF NEEDED LDB MXTMO SET MAX TIME OUT STB TMOTX JMP CFR,I YES E031 JSB ERMS,I NO REPORT IT DEF LPNRM POINTER TO MESSAGE JMP CFR+1 STAY IN LOOP UNTIL READY * LPNRM EQU * ASC 11,E031 L.P. NOT READY/ * * OUTPUT CARRIAGE RETURN AND LINE FEED * CRLF NOP JSB CRP DO CARRIAGE RETURN JSB LFP DO LINE FEED JMP CRLF,I RETURN SKP * CYCLIC PATERN PRINT * CPP NOP SZA,RSS IF CHRS = 0 CPP.1 LDA DM80 THEN DEFAULT TO 80 SSA,RSS IF CHRS IS POS. CMA,INA THEN MAKE IT NEG. STA CPC SAVE NUMBER OF CHRS ADA D90 CHRS NOT> .90 SSA ? JMP CPP.1 YES USE 80 CHRS SZB,RSS IF LINE COUNT = 0 CPP.2 LDB DM60 THEN DEFAULT TO 60 SSB,RSS IF LNCNT IS POS. CMB,INB THEN MAKE IT NEG. STB CNTR SAVE LINE COUNT ADB D90 IF LNCNT> 90 SSB ? JMP CPP.2 THEN USE 60 LINES CPPL0 JSB CYBFI SET UP CYCLIC BUFFER LDA CYBFD GET ADDRESS LDB CPC AND COUNT JSB OTP OUTPUT BUFFER JSB CRLF DO A RETURN LINE FEED ISZ CNTR DONE? JMP CPPL0 NO CLA YES JMP CPP,I RETURN TO EXEC * CPC NOP SKP * PUT CYCLIC PATTERN IN BUFFER * CYBFI NOP LDB CYBFD SET POINTER STB CYBFT TO CYCLIC BUFFER LDA CYLC GET LAST STARTING CHARACTER INA MOVE UP ONE CPA .140 LAST CHARACTER? LDA .40 YES STA CYLC SAVE FOR NEXT BUFFER LDB DM90 GET MAX BUFFER COUNT CYBFL STA CYBFT,I STORE CHARACTER INA MOVE TO NEXT CHARACTER CPA .140 IS IT LAST CHR? LDA .40 YES ISZ CYBFT MOVE POINTER INB,SZB IS BUFFER FULL JMP CYBFL NO JMP CYBFI,I YES RETURN * CYBFT NOP CYLC OCT 40 CYBFD DEF *+1 BSS 90 SKP * OUTPUT A CHR OR BUFFER * * A = CHR OR ADDRESS * B = +^ OR -^ * OTP NOP STA OTPT SAVE CHR OR ADDRESS SSB CHR OR ADDRESS? JMP OTPB IT'S A BUFFER OUTPUT CMB,INB CHR, MAKE COUNT NEG. STB OTPC SAVE COUNT LDA OTPT RETRIEVE CHARACTER JSB OTCH OUTPUT IT ISZ OTPC ALL DONE? JMP *-3 NO JMP OTP,I AND RETURN * OTPB STB OTPC SAVE COUNT LDA OTPT,I GET CHARACTER JSB OTCH OUTPUT IT ISZ OTPT MOVE POINTER ISZ OTPC ALL DONE? JMP *-4 NO JMP OTP,I RETURN * OTPT NOP OTPC NOP * * OUTPUT PACKED BUFFER * OTP2 NOP STA OTPC SAVE NUMBER OF CHARACTERS CLE,ELB STB OTPT AND ADDRESS POINTER OTP2L LDB OTPT GET CHARACTER ADDRESS CLE,ERB E _ UPPER LOWER FLAG LDA B,I 2 CHR TO A REG SEZ,RSS UPPER? ALF,ALF YES AND .177 MASK OFF OPPSITE CHARACTER JSB OTCH OUTPUT A TO LINE PRINTER ISZ OTPT MOVE TO NEXT CHARACTER ISZ OTPC IS THERE MORE OUTPUT? JMP OTP2L YES JMP OTP2,I NOW RETURN SKP * RANDOM NUMBER GENERATOR * GRN NOP STA RNA SAVE LOWER LIMIT CMA,INA ADB 0 STB RNB SAVE UPPER LIMIT GRNL LDA BASE GET BASE ADA PRIME SUBTRACT THE PRIME SSA SKIP IF STILL POSITIVE LDA BASE OOPS, BASE NOT BIG ENOUGH ELA DOUBLE BASE FOR REMAINDER STA BASE SAVE FOR NEXT TIME AND .177 USE ONLY LOWER BITS CMA,INA MAKE IT NEG. ADA RNA ADD LOWER LIMIT SSA,RSS IS IT ABOVE? JMP GRNL NO - TRY ANOTHER PASS ADA RNB ADD UPPER LIMIT SSA IS IT BELOW? JMP GRNL NO - TRY ANOTHER PASS LDA BASE YES RETRIEVE NUMBER AND .177 JMP GRN,I RETURN TO CALLER * RNA NOP RNB NOP PRIME DEC -31069 BASE BSS 1 SKP * MANUAL CONTROL * TST01 EQU * * MNC NOP ENTRY FROM CONTROL PROGRAM LDB S128 CHECK S.R. 12 AND 8 JSB SWRT,I JMP MNC,I NO MANUAL TEST * CLA,INA STA TMFLG INHIBIT TIMMING CHECKS * H035 JSB MSGH,I TELL OPERATOR TO DEF MNCM2 TURN OFF POWER * LDB STAT1 100001 JSB MNCCS CHECK STATUS * H036 JSB MSGH,I TELL OPERATOR TO DEF MNCM3 TURN ON POWER * LDB STAT1 100001 JSB MNCCS CHECK STATUS * LDA DM60 SET WAIT LOOP COUNT STA CNTR MNCL0 CLB,INB CHECK FOR READY STATUS MNCS1 LIA LP CPA B JMP MNCN1 OK LDA D1000 NO - JSB TMRR,I WELL WAIT ISZ CNTR WAITED ENOUGH JMP MNCL0 NO E037 JSB ERMS,I YES - REPORT NOT READY DEF NRM POINTER TO MESSAGE JMP MNC,I ABORT TEST * NRM EQU * ASC 12,E037 NO READY RESPONSE/ SKP MNCN1 JSB MSGH,I TELL OPERATOR TO DEF MNCM0 PUT L.P. ON-LINE * CLB JSB MNCCS CHECK STATUS * H034 JSB MSGH,I TELL OPERATOR TO DEF MNCM1 MASTER CLEAR LINE PRINTER * CLB,INB JSB MNCCS CHECK STATUS * H033 JSB MSGH,I TELL OPERATOR TO DEF MNCM0 PUT L.P. ON-LINE * CLB JSB MNCCS CHECK STATUS * JSB FFP DO FORM FEED * LDA DM20 OUTPUT "TOP-OF-FORM COMPUTER" LDB TOFCD JSB OTP2 * LDA DM60 OUTPUT 60 STA CNTR LINE FEEDS JSB CRLF ISZ CNTR DONE? JMP *-2 NO * LDA DM31 OUTPUT "PERFORATION STEP OVER COMPUTER" LDB PSOCD JSB OTP2 * H040 JSB MSGH,I TELL OPERATOR TO DEF MNCM4 TOGGLE TOP OF FORM * CLB,INB JSB MNCCS CHECK STATUS * JSB MSGH,I TELL OPERATOR TO DEF MNCM0 PUT L.P. ON-LINE * CLB JSB MNCCS CHECK STATUS * LDA DM20 OUTPUT "TOP-OF-FORM MANUAL" LDB TOFMD JSB OTP2 * LDA DM55 OUTPUT 55 STA CNTR LINE FEEDS JSB CRLF ISZ CNTR DONE? JMP *-2 NO SKP H041 JSB MSGH,I TELL OPERATOR TO DEF MNCM5 TOGGLE PAPER STEP 5 TIMES * CLB,INB JSB MNCCS CHECK STATUS * JSB MSGH,I TELL OPERATOR TO DEF MNCM0 PUT L.P. ON-LINE * CLB JSB MNCCS CHECK STATUS * LDA DM30 OUTPUT "PERFORATION STEP OVER MANUAL" LDB PSOMD JSB OTP2 * JSB CRLF * JMP MNC,I RETURN TO CONTROL * MNCCS NOP MNCS2 LIA LP GET CURRENT STATUS CPA B IS IT OK JMP MNCCS,I YES JSB ERMS,I NO - REPORT ERROR DEF STERM POINTER TO MESSAGE JMP MNCCS,I RETURN * STERM EQU * ASC 11,E032 INCORRECT STATUS/ SKP MNCM0 ASC 11,H033 PUT L.P. ON-LINE/ * MNCM1 ASC 12,H034 MASTER CLEAR L.P./ * MNCM2 ASC 13,H035 TURN OFF L.P. POWER/ * MNCM3 ASC 12,H036 TURN ON L.P. POWER/ * MNCM4 ASC 12,H040 PUT L.P. OFF-LINE. ASC 14, TOGGLE TOP-OF-FORM SWITCH/ * MNCM5 ASC 12,H041 PUT L.P. OFF-LINE. ASC 14, TOGGLE PAPER-STEP 5 TIMES/ * TOFCD DEF *+1 ASC 10,TOP-OF-FORM COMPUTER * PSOCD DEF *+1 ASC 15,PERFORATION STEP OVER COMPUTER * TOFMD DEF *+1 ASC 10,TOP-OF-FORM MANUAL * PSOMD DEF *+1 ASC 15,PERFORATION STEP OVER MANUAL * STAT1 OCT 100001 SKP * PAPER HANDLING CYCLIC PRINT * TST02 EQU * * * CP NOP JSB CFR CHECK FOR READY LDA DM20 20 JSB TCYO CYCLIC CHARACTERS PER LINE LDA DM40 40 JSB TCYO CYCLIC CHARACTERS PER LINE LDA DM60 60 JSB TCYO CYCLIC CHARACTERS PER LINE LDA DM80 80 JSB TCYO CYCLIC CHARACTERS PER LINE * JSB CYBFI LDA DM80 SET EIGHTY COLUMNS STA TEMP FOR BACKWARD PRINT CPL1 LDB TEMP LDA .40 INB ONE LESS THAN COUNT SZB,RSS JMP CPL3 NO MORE BLANKS TO OUTPUT CMB,INB MAKE + FOR OTP ROUTINE JSB OTP OUTPUT NUMBER OF SPACES CPL3 LDA TEMP CMA,INA GET CYCLIC CHARACTER ADA CYBFD LDA A,I JSB OTCH OUTPUT IT JSB CRP DO CARRIAGE RETURN ISZ TEMP MORE LINES JMP CPL1 YES * JSB CRLF JSB CRLF JSB CRLF JSB CRLF * LDA DM80 OUTPUT STA TEMP 80 LINES OF DECREASING CPL2 LDB TEMP BACK ARROW LDA BKAR GET BACK ARROW CMB,INB JSB OTP JSB CRLF OUTPUT LINE FEED AND CARRIAGE RETURN ISZ TEMP JMP CPL2 JMP CP,I RETURN TO CONTROL * BKAR OCT 137 SKP * OUTPUT CYCLIC PATERN * TCYO NOP STA TEMP SAVE NUMBER OF CHARACTERS LDA DM60 SET LINE COUNT STA CNTR TCYOL JSB CYBFI INITIALIZE BUFFER LDA CYBFD GET POINTER LDB TEMP GET COUNT JSB OTP JSB CRLF ISZ CNTR DO ANOTHER LINE? JMP TCYOL YES JMP TCYO,I NO SKP * ILLEGAL OPERATIONS * TST03 EQU * * ILO NOP JSB CFR CHECK FOR READY LDA DM60 SET LOOP INA STA CNTR COUNTR FOR 59 LINES ILOL1 LDA .40 GET A LDB .140 CHR JSB GRN RANDOMLY STA CYLC SAVE IT FOR CYCLIC PATTERN JSB CYBFI INITIALIZE BUFFER CLA GET RANDOM LDB D80 NUMBER JSB GRN OF CHARACTERS LDB A B = COUNT LDA CYBFD A = ADDRESS CMB,INB OUTPUT BUFFER JSB OTP DO IT JSB CRLF ISZ CNTR DONE 59 LINES? JMP ILOL1 NO WELL DO ANOTHER * CLA OUTPUT ALL NON ASCII CHARACTERS ILOL2 STA TEMP JSB OTCH OUTPUT DATA LDA TEMP MOVE TO NEXT CHARACTER INA CPA .12 SKIP LINE FEED INA CPA .14 SKIP FORM FEED INA CPA .15 SKIP CARRIAGE RETURN INA CPA .40 SKIP ASCII SET INCL. SPACE LDA .140 CPA .177 IS THAT ALL JMP *+2 YES JMP ILOL2 NO DO IT AGAIN LDA .40 OUTPUT 2 SPACES LDB .2 JSB OTP LDA AZ OUTPUT 80 CHR Z'S LDB D80 JSB OTP * JMP ILO,I RETURN TO CONTROL SKP * ALLIGNMENT * TST04 EQU * * AL NOP JSB CFR CHECK FOR READY LDA DM60 SET FOR 60 LINES STA CNTR ALL1 LDA AM OUTPUT 80 LDB D80 CHR M JSB OTP JSB CRLF ISZ CNTR ALL DONE? JMP ALL1 NO * LDA DM60 SET FOR 60 LINES STA CNTR ALL2 LDA AE OUTPUT 80 LDB D80 CHR E JSB OTP JSB CRLF ISZ CNTR ALL DONE? JMP ALL2 NO * LDA .40 START WITH BLANK ALL3 STA TEMP SAVE IT LDB D80 SET FOR 80 CHR'S JSB OTP JSB CRLF LDA TEMP GET CHR INA MOVE UP ONE CPA .140 IS THAT ALL? JMP *+2 YES JMP ALL3 NO * JMP AL,I RETURN TO CONTROL END