/AUTOLAB-PDP-IBM DATA LINK PROGRAM / KSF2=6401 KCC2=6402 KRS2=6404 KRB2=6406 TSF2=6411 TCF2=6412 TPC2=6414 TLS2=6416 CLSK=6131 CLLR=6132 CLAB=6133 CLEN=6134 CLSA=6135 CLBA=6136 CLCA=6137 DSKP=6741 DCLR=6742 DLAG=6743 DLCA=6744 DRST=6745 DLDC=6746 LINC=6141 PDP=0002 ATR=0014 LIF=0600 LDF=0640 FIXTAB *0 0 JMP I 2 SERVE *10 L0010, 0 TP1PT, 3377 CHARO, 6577 *20 /CONSTANTS M1000, -1000 M17, -17 M7, -7 M4, -4 XON, 021 MFEED, -12 MCTRLC, -203 MCTRLZ, -232 MRETRN, -215 MMINUS, -55 DLIMT1, ASCII1-1 DLIMT3, -ASCII3 EOB, 44 WRITCM, 4400 READCM, 0400 QMARK, 77 ASCII0, 60 ASCII1, 261 ASCII2, 262 ASCII3, 063 / VARIABLES CHAR, 0 CMDMOD, 0 XCHAR, 0 / FLAGS ENDFL1, 0 ENDFL2, 0 ERR6FL, 0 ERR5FL, 0 ERR4FL, 0 ERR3FL, 0 ERR2FL, 0 ERR1FL, 0 STOPFL, 1 XMODE, 0 TP1BUF, 0 TPBUSY, 0 LOCAL, 1 BFLAG, 0 DKBUSY, 0 INMODE, 1 MFLAG, 0 READIN, 1 DISKO, 0 TIMEFL, -144 CYCLE, -62 / POINTERS BSTART, 0 BLOCKI, 0 BLOCKO, 0 DKADDR, 0 CURRNT, 0 TP1ST, 3377 DISKST, 6577 DLIMIT, ASCII1-1 EXIT, RETURN RLOCS, 0 1 2 3 4 17 17 17 17 17 5 6 7 10 11 12 13 14 17 15 16 7777 SHIFT, -1000 BASE, 3600 / PROGRAM START-UP PAGE 1 BEGIN, CLA CLL TAD XON DCA I ENDLOC /SET LINK BUFFER C(114) = XON. CLLR /STOP THE CLOCK. SET MODE=000 TAD C100 CLLR /SET CLOCK MODE=010...CLEAR COUNTER CLSA /CLEAR ALL CLOCK STATUS FLAGS CLA TAD M24 CLAB /LOAD PRESET BUFFER CLA TAD C300 CLEN /SET COUNTER=BUFFER.ENABLE OVERFLOW INT CLA TAD C5100 CLLR /START CLOCK BY ENABLING 100 HZ RATE CLA DCLR /CLEAR AC AND DISK STATUS REGISTER ION /TURN ON INTERRUPT JMP I GO /GO TO BACKROUND JOB /INTERRUPT SKIP CHAIN SERVE, DCA AC RAL DCA LINK /SAVE LINK BIT KSF2 /KEYBOARD #2? SKP JMP I KEY2PT DSKP /RK8E/RK05 DISK? SKP JMP I RK05 CLSK /KW12-A CLOCK? SKP JMP I TICKER TSF2 /PRINTER #2? SKP JMP I TEL2PT KSF /KEYBOARD #1? SKP JMP I KEYPT TSF /PRINTER #1? SKP JMP I TELPT RETURN, CLL CLA TAD LINK /GET LINK BIT RAR TAD AC /GET ACCUMULATOR ION /TURN ON INTERRUPT JMP I 0 /RETURN TO BACKROUND JOB C100, 100 M24, -24 C300, 300 C5100, 5100 AC, 0 LINK, 0 RK05, DISK TICKER, CLOCK KEY2PT, KB2 TEL2PT, TP2 KEYPT, KB1 TELPT, TP1 GO, BROUND ENDLOC, 3514 /BACKROUND PROGRAM FOR SETTING UP DISK TRANSFERS /AND THE DATA LINK BUFFER. PAGE 2 BROUND, CLA CLL TAD DKBUSY SZA CLA /DISK BUSY? JMP BROUND /YES. TAD BFLAG /NO. SZA CLA /DISK INPUT BUFFER READY? JMP MARK5 /YES. TAD XMODE /NO. SZA CLA /TP1 IN SEND MODE? JMP BROUND /NO. TAD DISKO /YES. SZA CLA /DISK OUTPUT BUFFER READY? JMP MARK2 /YES. TAD BLOCKO /NO. CIA TAD BLOCKI SZA SMA CLA /DISK DATA AVAILABLE? JMP MARK6 /YES. TAD ENDFL1 /NO. SNA CLA /ALL AUTOLAB DATA IN? JMP BROUND /NO. TAD BFLAG /YES. SZA CLA /LAST DISK WRITE COMPLETED? JMP BROUND /NO. TAD TCOUNT /YES. CIA TAD M113 SNA CLA /DATA LEFT IN TP1 WRITE BUFFER? JMP MARK1 /NO. TAD M113 /YES. DCA LOOP TAD DISKST DCA XCHAR ISZ XCHAR /LOOP TO FILL DCA I XCHAR /DISK OUTPUT BUFFER ISZ LOOP /WITH "NULL" JMP .-3 /CHARACTERS. IAC DCA DISKO /SET DISK BUFFER READY FLAG. MARK1, TAD DLIMT1 DCA DLIMIT /RESET KB2 DELIMIT CHAR POINTER DCA BLOCKI /RESET INPUT BLOCK COUNTER TAD I ISTART DCA BASE IAC DCA ENDFL2 /SET END FLAG #2. DCA ENDFL1 /CLEAR END FLAG #1. JMP BROUND MARK2, TAD TP1BUF SZA CLA /TP1 WRITE BUFFER READY? JMP BROUND /YES. MARK3, TAD I CHARO /NO. GET DISK OUTPUT BUFFER CHAR DCA XCHAR TAD XCHAR CIA TAD EOB SZA CLA /END OF BUFFER CHAR? JMP MARK4 /NO. DCA DISKO /YES. CLEAR DISK OUTPUT BUFFER FLAG TAD DISKST DCA CHARO /RESET DISK OUTPUT BUFFER POINTER JMP BROUND MARK4, TAD XCHAR DCA I TP1PT /STORE XCHAR TO TP1 WRITE BUFFER JMS I SUB2 /SET V.P.C. COUNTERS ISZ TCOUNT /113 TH BUFFER CHAR? JMP MARK3 /NO. JMS I SUB3 /YES. GENERATE V.P.C. CHAR CLA TAD XCHAR DCA I TP1PT /SET CHAR(114)=V.P.C. CHAR TAD TP1ST DCA TP1PT /RESET TP1 POINTER TAD M113 DCA TCOUNT /RESET TP1 CHAR COUNTER IAC DCA TP1BUF /SET TP1 BUFFER FLAG. JMP BROUND MARK5, TAD WRITCM DCA CMDMOD /SET UP FOR DISK WRITE CMD TAD BSTART DCA CURRNT /SET UP CORE TRANSFER LOCATION TAD BLOCKI JMS I SUB1 /INITIATE DISK TRANSFER JMP BROUND MARK6, TAD READCM DCA CMDMOD /SET UP FOR DISK READ CMD TAD DISKST IAC DCA CURRNT /SET UP CORE TRANSFER LOCATION TAD BLOCKO JMS I SUB1 /INITIATE DISK TRANSFER JMP BROUND SUB1, SETUP SUB2, VPC1 SUB3, VPC2 TCOUNT, -113 M113, -113 LOOP, 0 ISTART, START PAGE 3 /SUBROUTINE #1: DISK TRANSFER SET-UP SETUP, 0 DCA DKADDR /STORE DISK FILE BLOCK POINTER CLL TAD BSIDE /GET POINTER TO "RKB0" BLOCK 0 TAD FILEST /ADD RELATIVE FILE STARTING BLOCK TAD DKADDR /ADD RELATIVE FILE BLOCK DCA DKADDR /STORE ABSOLUTE DISK ADDR RAL /ROTATE DISK ADDR MSB TO AC(11) TAD CMDMOD /ADD DISK TRANSFER MODE DCA CMDMOD /STORE DISK CMD REG TAD CMDMOD DLDC /LOAD DISK CMD REG TAD CURRNT DLCA /LOAD CURRENT CORE TRANSFER ADDR IAC DCA DKBUSY /SET DISK BUSY FLAG TAD DKADDR DLAG /LOAD DISK ADDR REG AND EXECUTE CLA JMP I SETUP /RETURN /SUBROUTINE #2: VERTICAL PARITY CHECK BIT COUNT VPC1, 0 CLA CLL TAD M7 DCA VCOUNT TAD VPST DCA VPPT TAD XCHAR CLL RAR SZL ISZ I VPPT ISZ VPPT ISZ VCOUNT JMP .-5 CLA JMP I VPC1 /SUBROUTINE #3: VERTICAL PARITY CHECK CHARACTER VPC2, 0 CLA CLL TAD M7 DCA VCOUNT DCA BIT8 TAD VPST DCA VPPT AND K7600 TAD I VPPT RAR SZL ISZ BIT8 ISZ VPPT ISZ VCOUNT JMP .-7 AND K7700 TAD BIT8 AND K7701 RTR;RTR;RTR DCA XCHAR TAD M7 DCA VCOUNT TAD VPST DCA VPPT DCA I VPPT ISZ VPPT ISZ VCOUNT JMP .-3 JMP I VPC2 VCOUNT, 0 K7600, 7600 K7700, 7700 K7701, 7701 VPPT, 0 VPST, VPREG VPREG, 0 0 0 0 0 0 0 K17, 17 K7740, 7740 BSIDE, 6260 FILEST, 5360 BIT8, 0 /TELEPRINTER II (IOT 641X) SERVICE ROUTINE PAGE 4 TP2, TCF2 /CLEAR DTTO FLAG TAD OUT1 SZA /PRINT MESSAGE BUFFER #1? JMP PRINT1 /YES. TAD OUT2 /NO. SZA /PRINT MESSAGE BUFFER #2? JMP PRINT2 /YES. TAD OUT3 /NO. SZA /PRINT MESSAGE BUFFER #3? JMP PRINT3 /YES. JMP I EXIT /NO. PRINT1, ISZ OUT1PT /INCREMENT BUFFER POINTER CLA TAD I OUT1PT /GET BUFFER CHAR TLS2 /PRINT CHAR TAD MFEED SZA /CHAR = LINE FEED? JMP I EXIT /NO. DCA OUT1 /YES. CLEAR "ACKNOWLEDGE" FLAG #1 TAD OUT1ST DCA OUT1PT /RESET BUFFER POINTER TAD M4 DCA INMODE /SET INMODE FOR BUFFER INPUT JMP I EXIT PRINT2, ISZ OUT2PT /INCREMENT BUFFER POINTER CLA TAD I OUT2PT /GET BUFFER CHAR TLS2 /PRINT CHAR TAD MFEED SZA /CHAR = LINE FEED? JMP I EXIT /NO. DCA OUT2 /YES. CLEAR "ACKNOWLEDGE" FLAG #2 TAD OUT2ST DCA OUT2PT /RESET BUFFER POINTER IAC DCA INMODE /SET INMODE FOR START-UP JMP I EXIT PRINT3, ISZ OUT3PT /INCREMENT BUFFER POINTER CLA TAD I OUT3PT /GET BUFFER CHAR TLS2 /PRINT CHAR TAD MFEED SZA CLA /CHAR = LINE FEED? JMP I EXIT /NO. DCA OUT3 /YES. CLEAR MESSAGE FLAG #3 TAD OUT3ST DCA OUT3PT /RESET BUFFER POINTER IAC DCA INMODE /SET INMODE FOR START-UP JMP I EXIT /KEYBOARD II - AUTOLAB (IOT 640X) SERVICE ROUTINE KB2, KRB2 /READ IN CHAR DCA CHAR /STORE CHAR TAD INMODE /GET INPUT MODE FLAG SNA /IGNORE INPUT JMP I EXIT /YES. SPA CLA /NO. AWAITING START CMD? JMP CHECK1 /NO. TAD CHAR /YES. TAD CCEVEN SZA /CHAR = CTRL C (START INPUT)? JMP I EXIT /NO. TAD ENDFL1 /YES. TAD ENDFL2 SPA SNA /DISK SYSTEM CLEARED? JMP .+3 /YES. DCA OUT3 /NO. SET WRITE3 FLAG. JMP STTP2 CLA IAC DCA OUT1 /SET WRITE1 FLAG. JMP STTP2 CHECK1, TAD CHAR TAD MCTRLZ SZA CLA /CHAR = CTRL Z (STOP INPUT)? JMP CHECK2 /NO. IAC /YES. DCA OUT2 /SET WRITE2 FLAG. JMP STTP2 CHECK2, TAD CHAR SZA CLA /CHAR = "NULL" (DATA LINE BREAK)? JMP I KB2IN /NO. JUMP TO FILTER SUBPROGRAM IAC DCA ENDFL1 /YES. SET END FLAG #1 IAC DCA INMODE /RESET TO AWAIT START CMD IAC DCA ERR5FL /SET ERROR FLAG #5 JMP I EXIT STTP2, TLS2 /INITIATE TP2 INTERRUPT DCA INMODE /INHIBIT KB2 INPUT JMP I EXIT OUT1, 0 OUT2, 0 OUT3, 0 OUT1PT, TP2B1-1 OUT2PT, TP2B2-1 OUT3PT, TP2B3-1 OUT1ST, TP2B1-1 OUT2ST, TP2B2-1 OUT3ST, TP2B3-1 KB2IN, FILTER CCEVEN, -0003 /TELEPRINTER-DATA PHONE (IOT 604X) SERVICE ROUTINE PAGE 5 TP1, TCF /CLEAR TP1 FLAG CLA TAD LOCAL SNA CLA /TP1 IN LOCAL MODE? JMP TIME /N0. TAD TPBUSY /YES SNA CLA /TP1 BUSY? JMP I EXIT /NO. ISZ ERRPT /YES. ISZ KCOUNT TAD KCOUNT TAD M17 SZA CLA /16 TH ERROR BUFFER CHAR? JMP WRITE-5 /NO. CLA CMA / . TAD NASCII / . DCA NASCII / . TAD I FLAGPT /LOOP TO FIND SZA CLA /WHICH ERROR JMP ERRSET /FLAG, 1 - 6, ISZ FLAGPT /IS SET. JMP .-7 / . ERRSET, DCA I FLAGPT /CLEAR ERROR FLAG "N" TAD NASCII /SET AC = ASCII "N" JMP WRITE TAD MFEED TAD I ERRPT SNA CLA /CHAR = LINE FEED? JMP RSET /YES. TAD I ERRPT /NO. GET ERROR BUFFER CHAR WRITE, TLS /PRINT C(AC) JMP I EXIT RSET, TAD FLAGST DCA FLAGPT /YES. RESET ERROR FLAG POINTER DCA KCOUNT /RESET CHAR COUNTER TAD ASCII7 DCA NASCII /RESET ASCII CHAR TAD ERRST DCA ERRPT /RESET ERROR BUFFER POINTER TAD TIMEFL TAD MAKEUP DCA TIMEFL /MAKE-UP ERROR PRINT-OUT TIME CLBUSY, DCA TPBUSY /CLEAR TP1 BUSY FLAG JMP I EXIT TIME, TAD TIMEFL SMA CLA /DATA LINK TIME-OUT? JMP RTIME /YES. TAD TP1BUF /NO. SNA CLA /DATA PHONE OUTPUT BUFFER FLAG? JMP I EXIT /NO. TAD TP1PT /YES. TAD TP1END SNA CLA /END OF BUFFER? JMP RTIME-2 /YES. TAD I TP1PT /NO. GET BUFFER CHAR JMP WRITE /SEND CHAR TAD TP1ST DCA TP1PT /RESET TP1 OUTPUT BUFFER POINTER RTIME, TAD TIMECT DCA TIMEFL /RESET TIME-OUT COUNTER TAD NCYCLE DCA CYCLE /RESET RECV ERROR COUNTER IAC DCA XMODE /SET DATA LINE TO RECEIVE. JMP CLBUSY ERRPT, TP1B2-1 ERRST, TP1B2-1 KCOUNT, 0 NASCII, 267 ASCII7, 267 FLAGPT, ERR6FL FLAGST, ERR6FL TP1END, -3514 MAKEUP, 14 TIMECT, -144 /SETS FOR 20 SEC TIME INTERVAL NCYCLE, -220 /SETS FOR 30 SEC TIME INTERVAL /KEYBOARD-DATA PHONE (IOT 603X) SERVICE ROUTINE PAGE 6 KB1, KRB /READ CHAR1 DCA CHAR1 /STORE IN CHAR1 TAD CHAR1 TAD MCTRLC SNA CLA /CHAR1 = CTRL C? JMP OS8 /YES. RETURN TO MONITOR. TAD CHAR1 TAD MCTRLZ SZA CLA /CHAR1 = CTRL Z? JMP .+7 /NO. DCA STOPFL /YES, CLEAR STOP FLAG. IAC DCA ERR1FL /SET ERROR FLAG #1. TAD M2 DCA TIMEFL /SET TIME-OUT FLAG = -2 JMP I EXIT TAD XMODE SPA CLA /DATA LINK RECEIVE MODE? JMP I EXIT /NO TAD CHAR1 /YES. TAD MEOT SZA CLA /CHAR1 = "EOT"? JMP .+4 /NO. IAC DCA ERR6FL /YES. SET ERROR FLAG #6. JMP MODSET TAD CHAR1 TAD MNAK SZA CLA /CHAR1 = NAK? JMP .+5 /N0. TAD TP1BUF /YES. SZA CLA /TP1 OUTPUT BUFFER FLAG SET? JMP MODSET /YES. JMP .+6 /NO. TAD CHAR1 TAD MACK SZA CLA /CHAR1 = ACK? JMP I EXIT /NO. DCA TP1BUF /YES, CLEAR TP1 OUTPUT BUFFER FLAG TAD ENDFL2 SNA CLA /END FLAG #2 SET? JMP MODSET /NO. DCA DISKO /YES. CLEAR DISK OUTPUT BUFFER FLAG DCA BLOCKO /CLEAR DISK READ BLOCK COUNT TAD DISKST DCA CHARO /RESET DISK OUTPUT BUFFER POINTER DCA ENDFL2 /CLEAR END FLAG #2 MODSET, CLA CMA DCA XMODE JMP I EXIT OS8, LINC /CHANGE TO LINK MODE ATR /CLEAR RELAY REGISTER PDP /CHANGE TO PDP MODE JMP I MONITR /RETURN TO MONITOR MONITR, 7600 CHAR1, 0 MEOT, -004 MNAK, -025 MACK, -006 M2, -2 /KW-12A CLOCK INTERRUPT SERVICE ROUTINE /200 MSEC CLOCK INTERVAL PAGE 7 CLOCK, CLSA /CLEAR CLOCK STATUS FLAGS CLA TAD XMODE SZA /DATA LINK IN REC'V MODE? JMP RECV /YES TAD TPBUSY /NO. SZA CLA /TP1 BUSY? JMP I EXIT /YES. TAD LOCAL /NO. SNA CLA /TP1 IN LOCAL MODE? JMP SEND /NO. TAD STOPFL /YES. SZA CLA /STOP FLAG SET? JMP LERRS /YES. DCA LOCAL /NO. CLEAR LOCAL MODE FLAG. IAC LINC /CHANGE TO CPU LINK/C MODE. ATR /ACTIVATE DATA LINK(RELAY #5) PDP /CHANGE TO PDP CPU MODE JMP SEND LERRS, TAD ERR6FL TAD ERR5FL TAD ERR4FL TAD ERR3FL TAD ERR2FL TAD ERR1FL SNA CLA /ANY ERROR FLAGS SET? JMP I EXIT /NO. TAD BELL JMP TPSEND /YES, GO PRINT ERROR MESSAGE. SEND, CLA IAC TAD TIMEFL DCA TIMEFL TAD TIMEFL SPA CLA /DATA LINK TIME-OUT? JMP ERRS /NO. TAD XON /YES. GET XON CHAR JMP TPSEND ERRS, TAD ERR6FL DCA STOPFL TAD ERR1FL TAD ERR2FL TAD ERR3FL TAD ERR4FL TAD ERR5FL TAD ERR6FL SNA CLA /ANY ERROR FLAGS SET? JMP LINOUT /NO. LINC /YES. CHANGE TO CPU LINC MODE ATR /TURN OFF DATA LINK (LOCAL OPERATE) PDP /CHANG TO CPU PDP MODE LWRITE, IAC DCA LOCAL /SET TP1 LOCAL MODE FLAG. TAD BELL /GET BELL CHAR JMP TPSEND LINOUT, TAD TP1BUF SNA CLA /TP1 OUTPUT BUFFER FLAG SET? JMP I EXIT /NO. TAD XSTART /YES. GET DATA LINK START CHAR TPSEND, TLS /WRITE CHAR CLA IAC DCA TPBUSY /SET TP1 BUSY FLAG. JMP I EXIT RECV, SPA CLA /STALL 200 MSEC FOR IBM TURN-AROUND? JMP .+5 /YES. ISZ CYCLE /NO, IBM ACKNOWLEDGEMENT TIME-OUT? JMP I EXIT /NO. CLA IAC DCA ERR6FL /YES. SET ERROR FLAG #6. DCA XMODE /SET DATA LINK TO SEND. JMP I EXIT XSTART, 002 BELL, 252 /DISK (IOT 674X) INTERRUPT SERVICE ROUTINE PAGE 10 DISK, DRST /READ DISK STATUS REG CLL RAL SZA CLA /DISK TRANSFER ERROR? JMP DISK3 /YES. TAD BLOCK2 /NO. SZA CLA /2 ND 256 WORD BLOCK TRANSFER? JMP DISK1 /YES. ISZ DKADDR /NO. INCREMENT DISK ADDR POINTER TAD C400 NOP TAD CURRNT DCA CURRNT /SET CORE POINTER TO 2 ND BLOCK ISZ BLOCK2 /SET 2 ND TRANSFER FLAG JMP DISK6 DISK1, TAD CMDMOD SPA CLA /CMD MODE SET TO READ DATA? JMP DISK2 /NO. TAD CHECK /YES SNA CLA /IS PROGRAM WRITE CHECKING? JMP .+3 /NO. ISZ BLOCKI /YES. INCREMENT INPUT RECORD COUNTER JMP DISK4 ISZ DISKO /NO. SET DISK OUTPUT BUFFER FLAG JMP DISK5+1 DISK2, ISZ CHECK CMA TAD DKADDR DCA DKADDR /SUBTRACT 1 FROM DISK ADDR POINTER IAC AND CMDMOD /SAVE BIT(11) OF CMD MODE WORD TAD READCM DCA CMDMOD /CHANGE CMD MODE FOR DATA READ TAD BCHECK DCA CURRNT /SET CORE POINTER TO CHECK BUFFER DCA BLOCK2 /CLEAR 2 ND TRANSFER FLAG TAD M4 DCA ERRCT /RESET ERROR COUNTER JMP DISK6 DISK3, ISZ ERRCT /3 RD TRANSFER ERROR? JMP DISK6 /NO. TRY AGAIN. TAD CMDMOD /YES. SPA CLA /CMD MODE SET FOR READ? JMP DISK4-1 /NO. TAD CHECK SPA CLA /IS PROGRAM WRITE CHECKING? JMP DISK5 /NO. ISZ TRY /YES. 3 RD ATTEMPT TO WRITE CHECK? JMP DISK4+1 /NO. TAD M4 DCA TRY /YES. RESET ATTEMP COUNTER. ISZ ERR3FL /SET ERROR FLAG #3. DISK4, DCA BFLAG /CLEAR KB2 BUFFER READY FLAG DCA CHECK /CLEAR WRITE CHECK FLAG TAD M4 DCA ERRCT /RESET ERROR COUNTER DCA BLOCK2 /CLEAR 2 ND TRANSFER FLAG DCLR /CLEAR DISK STATUS REGISTER DCA DKBUSY /CLEAR DISK BUSY FLAG JMP I EXIT DISK5, ISZ ERR4FL /SET ERROR FLAG #4. ISZ BLOCKO /INCREMENT OUTPUT RECORD COUNTER JMP DISK4+2 DISK6, TAD CURRNT DLCA /LOAD DISK CURRENT ADDR REG TAD CMDMOD DLDC /LOAD DISK CMD REG TAD DKADDR DLAG /LOAD DISK ADDR AND EXECUTE CMD JMP I EXIT BLOCK2, 0 CHECK, 0 BCHECK, 5600 ERRCT, -4 TRY, -4 C400, 400 /SUBPROGRAM TO FILTER AND BUFFER AUTOLAB /DATA FOR SUBSEQUENT DISK STORAGE PAGE 11 FILTER, TAD CHAR TAD MFEED /CHAR = LINE FEED? SZA CLA JMP PT2 /NO. TAD ADDR1 /YES. DCA POINT /SET RELATIVE ADDR POINTER TAD M4 DCA ACOUNT /SET ALPHA COUNT = -4 DCA MFLAG /CLEAR "MINUS" CHAR FLAG TAD DLIMIT TAD DLIMT3 SZA CLA /DELIMIT CHAR = 3? JMP PT1 /NO. TAD DLIMT1 DCA DLIMIT /RESET DELIMIT POINTER TAD EOB DCA I BASE /SET LAST BUFFER CHAR = "EOB" CHAR TAD START DCA BSTART /BUFFER TRANSFER START POINT TAD SHIFT CIA DCA SHIFT TAD SHIFT TAD START DCA START /START INPUT TO OTHER HALF BUFFER TAD START DCA BASE IAC DCA BFLAG /SET BUFFER TRANSFER FLAG PT1, DCA READIN /ALLOW BUFFER INPUT JMP I EXIT PT2, TAD READIN SZA /BUFFER INPUT ALLOWED? JMP I EXIT /NO. ISZ POINT /YES. INCREMENT POINTER TAD CHAR TAD MRETRN SZA CLA /CHAR = RETURN? JMP WRITE1 /NO. TAD I POINT /YES SMA CLA /23 RD LINE CHAR? JMP ERR2 /NO. INPUT FORMAT ERROR. TAD MFLAG /YES. SNA CLA /"MINUS" CHAR FOUND IN INPUT? JMP SPAC /NO. ISZ DLIMIT /YES. TAD I DLIMIT DCA I BASE /SET CHAR 1 = CURRENT DELIMITER TAD BASE / . DCA L0010 / . TAD M17 /LOOP FOR SETTING DCA COUNTR /REMAINING LINE TAD ASCII0 /CHAR TO "ZERO" DCA I L0010 / . ISZ COUNTR / . JMP .-3 / . JMP NEXTLN SPAC, TAD BASE TAD C13 DCA POINT TAD I POINT ISZ POINT TAD I POINT TAD SPACES SNA CLA /CHAR 14 AND 15 = SPACE? JMP PT4 /YES. NEXTLN, TAD M17 CIA TAD BASE DCA BASE /SHIFT BUFFER BASE ADDR PT4, IAC DCA READIN /INHIBIT BUFFER INPUT JMP I EXIT WRITE1, TAD I POINT SMA CLA /23 RD LINE CHAR? JMP .+4 /NO. ERR2, IAC /YES. DCA ERR2FL /SET FORMAT ERROR FLAG. JMP PT4 TAD CHAR /NO. AND MASK5 /ZERO ALL BITS EXCEPT BIT 5 SNA CLA /ALPHA CHAR? JMP MINUS /NO. ISZ ACOUNT /YES. 3 RD ALPHA CHAR? JMP PARITY /NO. JMP PT4 /YES. MINUS, TAD CHAR TAD MMINUS SNA CLA /CHAR = "MINUS"? ISZ MFLAG /YES. INCREMENT MINUS FLAG PARITY, CLA CLL TAD M7 DCA COUNTR DCA BITS TAD CHAR RAR /LOOP TO ROTATE ALL THE CHARACTER SZL /BITS THROUGH THE LINK, CHECKING ISZ BITS /FOR AND COUNTING BINARY ONES, THE ISZ COUNTR /SUM BEING STORED IN "BITS". JMP .-4 / CLA TAD CHAR RTL;RTL;RTL /ROTATE BIT 8 OF CHAR INTO AC(11) TAD BITS CLL RAR SNL CLA /PARITY OKAY? JMP .+3 /YES. TAD QMARK DCA CHAR /SET CHAR = "?" (PARITY WRONG) TAD BASE TAD I POINT DCA COUNTR TAD CHAR DCA I COUNTR /STORE CHAR TO KB2 BUFFER JMP I EXIT ADDR1, RLOCS-1 POINT, 0 ACOUNT, 0 START, 3600 C13, 13 SPACES, -500 MASK5, 100 COUNTR, 0 BITS, 0 /TELEPRINTER I MESSAGE BUFFER PAGE 14 TP1B2, 323 /S 331 /Y 323 /S 324 /T 305 /E 315 /M 240 / 323 /S 324 /T 301 /A 324 /T 325 /U 323 /S 240 / 240 / 215 /CR 212 /LF 012 /LF-EOF /TELEPRINTER II MESSAGE BUFFER. PAGE 15 TP2B1, 215 /CR 212 /LF 304 /D 301 /A 324 /T 301 /A 240 / 314 /L 311 /I 316 /N 313 /K 240 / 301 /A 303 /C 324 /T 311 /I 326 /V 305 /E 256 /. 215 /CR 212 /LF 012 /LF - EOF TP2B2, 215 /CR 212 /LF 304 /D 301 /A 324 /T 301 /A 240 / 314 /L 311 /I 316 /N 313 /K 240 / 324 /T 305 /E 322 /R 315 /M 311 /I 316 /N 301 /A 324 /T 305 /E 304 /D 256 /. 215 /CR 212 /LF 012 /LF - EOF TP2B3, 215 /CR 212 /LF 304 /D 301 /A 324 /T 301 /A 240 / 314 /L 311 /I 316 /N 313 /K 240 / 302 /B 325 /U 323 /S 331 /Y 256 /. 215 /CR 212 /LF 012 /LF-EOF PAGE 16 ZBLOCK 4200 $