/8BIT CHARACTER ASSEMBLY SUBROUTINES /TYPE 680 TELETYPE LINE MULTIPLEXER /LMH 7-8-65, 8 BIT TT8BGN=3000 TT8PG0=126 T8OBF=4600 T8IBF=4200 T8OBF2=5000 T8AX1=14 T8AX2=15 T8AX3=16 TTCHAR=177 T8IN=3377 TTI=6402 /TELETYPE INPUT COMMAND TTO=6404 /TELETYPE OUTPUT COMMAND TTCL=6411 /CLEAR LINE REGISTER TTRL=6414 /READ LINE REGISTER TTSL=6412 /SET LINE REGISTER, CLR AC TT8ON=6434 /TURN CLOCK ON TT8OFF=6432 /TURN CLOCK OFF T8SKP=6431 /SKIP ON CLOCK FLAG TTINCR=6401 /INCREMENT LINE REGISTER *TT8PG0 T8INFL, 0 /INPUT READY FLAG T8BFK, T8IBF-1 /TO RESET INPUT BUFFER POINTER T8NL, 0 /-NUMBER OF LINES T8K7, T8OBF /K FOR 1ST OUTPUT BUFFER T8K8, T8COM /TO ENTER COMMON ROUTINE T8SOUT, T8OUTS /SKIP IF OUTPUT FREE T8SIN, T8INS /SKIP IF INPUT READY T8GO, T8GOS /INITIALIZE ROUTINE T8IES, T8SE /SKIP IF EITHER LINE READY T8OUTK, T8OBF /POINTER TO FIRST OUTPUT BUFFER T8OTK2, T8OBF2 /POINTER TO 2ND OUTPUT BUFFER T8K36, T8OBF2 /K FOR 2ND OUTPUT BUFFER T8CNT1, -10 /HOLD MAJOR LOOP COUNTER T8CNT2, 0 /MINOR LOOP COUNTER T8CNT3, 0 /COUNTER FOR INPUT BUFFER *TT8BGN /MULTIPLE LEVEL INTERRUPT ROUTINE /ALLOWS MULTIPLE LEVEL INTERRUPT TO THIS ROUTINE AND UNLIMITED OTHERS T8DIS, ISZ T8LC /LEVEL COUNTER JMP T8DIS3 /2ND LEVEL INTERRUPT DCA T8SA /SAVE ACCUMULATOR RAR /GET LINK DCA T8SVLK /SAVE LINK TAD Z 0 /INTERRUPT ADDRESS DCA T8SV0 /SAVE ADDRESS TTRL /RD LINE NUMBER DCA T8SVLN /SAVE LINE NUMBER TT8ON /TO CLEAR FLAG ONLY T8DIS2, ION /RE-ENABLE PROGRAM INTERRUPT TAD T8K9 /STARTING LINE-1 TTSL+1 /SET LINE REGISTER, CLEAR AC JMP I T8K1 /JUMP TO TTI LOOP /2ND LEVEL INTERRUPT T8DIS3, TT8ON /CLEAR CLOCK FLAG ION /RE-ENABLE PROGRAM INTERRUPT JMP I Z 0 /RETURN TO THE MAIN PROGRAM /RETURN FROM INPUT TTI LOOP T8COM, TAD T8MNC /MINOR COUNTER, NUMBER OF LINES/8 DCA Z T8CNT2 /MINOR LOOP COUNTER TAD T8LN /LINE NUMBER TTSL+1 /SET LINE NUMBER T8COM0, TAD I Z T8OUTK /OUTPUT WORD SNA /SOMETHING TO TRANSMIT JMP T8COM8 /SEE IF WORD AVAILABLE TTO+1 /INCR. LINE REGISTER AND OUTPUT DCA I Z T8OUTK /STORE WORD T8COM1, TAD I Z T8AX1 /PICK UP CHARACTER ASSEMBLY WORD CLL RAR /PUT BIT 11 IN LINK SZL /CHARACTER NOT COMPLETED JMP T8COM6 /STORE CHARACTER CLA /CLEAR AC FOR TAD T8COM3, ISZ Z T8OUTK /UPDATE OUTPUT ADDR ISZ Z T8OTK2 /UPDATE 2ND BUFFER ADDRESS ISZ Z T8AX1 /UPDATE FOR NEXT INPUT LINE ISZ Z T8AX1 /UPDATE FOR NEXT INPUT LINE ISZ Z T8CNT2 /ARE ONE-EIGHTH OF LINES CHECKED? JMP T8COM0 /CHECK NEXT LINE T8COM4, TTRL /READ LINE NUMBER DCA T8LN /SAVE LINE NUMBER ISZ Z T8CNT1 /HAVE ALL LINES BEEN CHECKED JMP T8COM5 /RESET AND DISMISS TAD T8K2 /-10 DCA Z T8CNT1 /RESET MAJOR LOOP COUNTER TAD T8K3 /T8IN+1 DCA Z T8AX1 /RESET INPUT LINE POINTER TAD T8K9 /STARTING LINE-1 DCA T8LN /RESET LINE NUMBER TAD Z T8K7 /T8OBF DCA Z T8OUTK /RESET OUTPUT LINE POINTER TAD Z T8K36 /T8OBF2 DCA Z T8OTK2 /RESET 2ND BUFFER POINTER T8COM5, IOF /TURN OFF INTERRUPT STA /-1 TAD T8LC /LEVEL COUNTER DCA T8LC /RESTORE LEVEL COUNTER TAD T8LC /LEVEL COUNTER SMA CLA /RESTORE AC ETC JMP T8DIS2 /CHECK INPUT AGAIN, ETC. TAD T8SVLN /LINE NUMBER TTSL+1 /SET LINE REGISTER, CLR AC TAD T8SVLK /PICK UP LINK CLL RAL /RESTORE LINK TAD T8SA /RESTORE ACCUMULATOR ION /ENABLE INTERRUPT JMP I T8SV0 /RETURN TO MAIN PROGRAM T8COM6, CLL RTR /REMOVE START CODE DCA I Z T8AX2 /STORE CHARACTER TTRL /READ LINE NUMBER DCA I Z T8AX2 /STORE LINE NUMBER TAD Z T8AX1 /PICK UP ADDRESS POINTER TAD T8K5 /-2 DCA Z T8AX1 /RESET POINTER DCA I Z T8AX1 /ZERO STATUS AND COUNTER WORD TAD T8K6 /WORD TO RESTORE ASSEMBLY WORD DCA I Z T8AX1 /RESET CHARACTER ASSEMBLY WORD ISZ Z T8INFL /SET INPUT READY FLAG ISZ Z T8CNT3 /HAS END OF BUFFER BEEN REACHED JMP T8COM3 /UPDATE REGISTERS T8COM7, TAD Z T8BFK /T8IBF-1 DCA Z T8AX2 /RESET INPUT BUFFER ADDRESS TAD T8NL /LENGTH OF BUFFER, NUMBER OF LINES DCA Z T8CNT3 /RESET LENGTH COUNTER JMP T8COM3 /UPDATE REGISTERS T8COM8, TAD I Z T8OTK2 /PICK UP DOUBLE-BUFFERED WORD SZA /NOTHING TO SEND JMP .+3 /SEND NEW WORD TTINCR /INCREMENT LINE REGISTER JMP T8COM1 /CONTINUE FOR INPUT TTO+1 /INCR. LINE REGISTER AND OUTPUT DCA I Z T8OUTK /STORE WORD DCA I Z T8OTK2 /ZERO 2ND WORD JMP T8COM1 /CONTINUE FOR INPUT /CONSTANTS T8LC, -1 /INTERRUPT LEVEL COUNTER T8SA, 0 /SAVE ACCUMULATOR T8SVLK, 0 /SAVE LINK T8SV0, 0 /SAVE PROGRAM COUNTER T8SVLN, 0 /SAVE LINE NUMBER T8K1, T8IN /START OF TTI SERIES T8MNC, 0 /MINOR LOOP COUNTER. NO OF LINES/8 T8LN, 0 /LINE NUMBER T8K2, -10 /TO RESET MAJOR LOOP COUNTER T8K3, T8IN+1 /TO RESET INPUT LINE POINTER T8K5, -2 /FOR SUBTRACTION T8K6, 2000 /TO RESET 8-BIT ASSEMBLY WORD T8K9, 0 /STARTING LINE-1 /PSEUD OPERATIONS /SKIP IF OUTPUT IS FREE AND TRANSMIT CHARACTER AT TTCHAR, OTHERWISE DONT SKIP /LINE NUMBER MUST BE IN AC. 24US MIN. 42US MAX. T8SOF=JMS I Z T8SOUT T8OUTS, 0 AND T8K10 /177 TAD T8SL /-STARTING LINE NO. TAD Z T8K36 /OUTPUT BUFFER ADDR DCA T8WA /WORK AREA TAD I T8WA /OUTPUT CHARACTER SZA CLA /SKIP IF FREE JMP I T8OUTS /EXIT TAD Z TTCHAR /PICK UP CHARACTER AND T8K11 /8 BITS ONLY TAD T8K12 /1400 FOR STOP CODE CLL RAL /CREATE START CODE DCA I T8WA /STORE CHARACTER IN TABLE ISZ T8OUTS /INDEX EXIT JMP I T8OUTS /EXIT T8K10, 177 /FOR LINE NUMBER T8SL, 0 /-STARTING LINE NUMBER T8WA, 0 /WORK AREA T8K11, 377 /FOR EIGHT BIT CODE T8K12, 1400 /FOR STOP CODE *TT8BGN+200 /SKIP IF CHARACTER AVAILABLE AND RETURN WITH LINE NO. IN AC, CHAR AT TTCHAR /OTHERWISE DO NOT SKIP. 15 US MIN, 48 US MAX, 37.5US NORMAL IF READY T8SIR=JMS I Z T8SIN T8INS, 0 IOF CLA CMA /SET AC TO -1 FOR TAD TAD Z T8INFL /INPUT FLAG COUNTER SPA /SOMETHING AVAILABLE JMP T8INON /EXIT DCA Z T8INFL /RESTORE FLAG COUNTER ISZ T8CNT4 /END OF BUFFER? STARTS AT -N-1 JMP .+5 /GET CHARACTER TAD Z T8NL /-NUMBER OF LINES DCA T8CNT4 /RESET COUNTER TAD Z T8BFK /BUFFER ADDRESS-1 DCA Z T8AX3 /RESET ADDRESS TAD I Z T8AX3 /PICK UP CHARATER DCA Z TTCHAR /STORE CHARACTER TAD I Z T8AX3 /PICK UP LINE NUMBER ISZ T8INS /INDEX EXIT T8INON, ION JMP I T8INS /EXIT T8CNT4, 0 /-NO OF LINES /INITIALIZATION /ENTER WITH NUMBER OF LINES IN AC /FORMAT T8INIT / 1ST LINE NO. T8INIT=JMS I Z T8GO T8GOS, 0 AND T8K14 /377 DCA Z T8NL /STORE NUMBER OF LINES TAD Z T8NL /NUMBER OF LINES AND T8K15 /7 SZA CLA /MULTIPLE OF 8? TAD T8K16 /10 TAD Z T8NL /NUMBER OF LINES AND T8K17 /370 CIA /-TWO'S COMP NUMBER OF LINES DCA Z T8NL /-N, CONSTANT TAD Z T8NL /-N DCA Z T8CNT3 /INPUT COUNTER TAD T8K20 /T8IN-1 DCA Z T8AX1 /TO STORE TTI TABLE TAD T8K21 /T8OBF-1 DCA Z T8AX2 /TO CLEAR OUTPUT AREA TAD T8K37 /T8OBF2-1 DCA Z T8AX3 /TO CLEAR DOUBLE BUFFER TAD Z T8NL /-N DCA T8CNT4 /FOR COUNTING T8GO2, TAD T8K22 /TTI+INCR DCA I Z T8AX1 /STORE TTI DCA I Z T8AX1 /ZERO STATUS AND COUNTER WORD TAD T8K23 /ASSEMBLY RESET WORD DCA I Z T8AX1 /RESET ASSEMBLY WORD DCA I Z T8AX2 /ZERO OUTPUT WORD DCA I Z T8AX3 /CLEAR DOUBLE BUFFER ISZ T8CNT4 /COUNTER JMP T8GO2 /DO NEXT LINE TAD T8K24 /JMP I Z T8K8 DCA I Z T8AX1 /STORE FINAL JUMP TAD Z T8NL /-N RTR /DIVIDE BY 4 RAR /DIVIDE BY 8 AND T8K25 /17 TAD T8K26 /7760, MAKE NUMBER NEGATIVE DCA I T8K27 /T8MNC STA /-1 DCA T8CNT4 /SET COUNTER TO SKIP 1ST TIME TAD Z T8BFK /T8IBF-1 DCA Z T8AX2 /SET INPUT BUFFER POINTER TAD T8K28 /-10 DCA Z T8CNT1 /MAJOR LOOP COUNTER TAD T8K30 /T8IN+1 DCA Z T8AX1 /SET TTI POINTER TAD Z T8K7 /T8OBF DCA Z T8OUTK /1ST OUTPUT BUFFER POINTER TAD Z T8K36 /T8OBF2 DCA Z T8OTK2 /2ND OUTPUT BUFFER POINTER STA /-1 TAD I T8GOS /STARTING LINE NO. DCA I T8K33 /T8K9, STARTING LINE NO. -1 TAD I T8K33 /T8K9 CMA /MAKE NEGATIVE DCA I T8K34 /T8SL, -STARTING LINE NO. DCA Z T8INFL /CLEAR INPUT FLAG COUNTER STA /-1 DCA I T8K35 /T8LC, RESET INTERRUPT LEVEL COUNTER ISZ T8GOS /INDEX EXIT JMP I T8GOS /EXIT /CONSTANTS T8K14, 377 /FOR LINE NUMBER T8K15, 7 /FOR EVEN MULTIPLE OF 8 T8K16, 10 /FOR EVEN MULTIPLE OF 8 T8K17, 370 /FOR EVEN MULTIPLE OF 8 T8K18, 1 /FOR COMPLEMENTING T8K20, T8IN-1 /FOR STORING TTI'S T8K21, T8OBF-1 /FOR OUTPUT AREA T8K22, TTI+1 /TTI + INCREMENT T8K23, 2000 /ASSEMBLY RESET WORD T8K24, JMP I Z T8K8 /FOR FINAL JUMP T8K25, 17 /FOR -N/8 T8K26, 7760 /FOR MAKING NEGATIVE T8K27, T8MNC /FOR -N/8 T8K28, -10 /FOR MAJOR LOOP COUNTER T8K30, T8IN+1 /FOR TTI POINTER T8K33, T8K9 /FOR STARTING LINE-1 T8K34, T8SL /-STARTING LINE NO. T8K35, T8LC /FOR INTERRUPT LEVEL COUNTER T8K37, T8OBF2-1 /FOR DOUBLE BUFFER /SKIP IF CHARACTER AVAILABLE FROM EITHER OF TWO TYPES OF LINES /OTHERWISE DO NOT SKIP. 31.5US MIN, 70.5US MAX, 60US NORMAL IF READY T8SIE=JMS I Z T8IES T8SE, 0 T8SIR /CHECK 8-BIT CODE JMP .+3 /CHECK 5-BIT CODE ISZ T8SE /INDEX EXIT JMP I T8SE /EXIT T5SIR /CHECK 5-BIT CODE JMP I T8SE /EXIT ISZ T8SE /INDEX EXIT JMP I T8SE /EXIT PAUSE *U*>34G