* * * B CONTINS THE CHAR CODE (1-39) LDA B CHAR CODE INTO A LDB COLC GET COLUMN CTR IN B ADB M5 B=B-5 SSB B<=0? JMP STNO COL. 1,2,3,4 STMT NO. ADB M2 SSB IS COLC <=6? JMP COL56 COL. 5,6 COMMAND R3 CLE,ERA SLB JMP EVENC EVEN COLUMN * * ODD COLUMN * LDB OTBLA LOAD ODD TABLE ADR R4 ADA 1 ADDR OF CHARS NOW IN A LDA 0,I GET CHARS SEZ,RSS LEFT OR RIGHT? ALF,ALF WAS LEFT, MOVE RIGHT LDB CCONT LOAD CHAR COUNT JSB STCHR STORE THE CHARACTER STB CCONT JMP RRET GO WAIT FOR NEXT COLUMN EVENC LDB ETBLA LOAD EVEN TABLE ADDRESS JMP R4 COL56 CLO CLEAR O SLB,RSS SET O IF COL 5 STO LDB CCONT LOAD COUNT ADA M10 SSA JMP OKCRD IF A<10 THEN OK ADA M10 SZA,RSS IF A=20, CONVERT JMP OKCRD TO ZERO ADA M10 SZA IF A=30, CONVERT TO ONE JMP RRET INVALID CODE, IGNORE INA A=1 OKCRD ADA ADTBL GET ADDR OF REF TABLE LDA 0,I GET ENTRY SOC LEFT OR RIGHT? ALF,ALF WAS LEFT, MOVE RIGHT AND .77 STRIP TO 6 BITS ADA NMLST N ADD ADDR OF NAME TABLE STA ADTMP SAVE ADDRESS OF CURRENT CHAR LDA SP LOAD SPACE CHAR JSB STCHR STORE CHARACTER NEXTC LDA ADTMP,I GET NEXT HAR SOC LEFT OR RIGHT ALF,ALF WAS LEFT, MOVE RIGHT AND B177 7 BITS CPA AT @=END JMP FINSH JSB STCHR STORE CHAR ISZ ADTMP GET NEXT CHAR JMP NEXTC FINSH LDA SP ADD SPACE JSB STCHR STB CCONT STORE COUNT JMP RRET WAIT FOR NEXT COLUMN STNO ADA M11 IS IT A NUMBER SSA,RSS JMP RRET NO - DELET IT ADA .11. JMP R3 SET12 ISZ TOPFL TEM NOP ADB .30 RECORD ROW 12 PUNCH JMP R1 SET11 ISZ TOPFL JMP RRET INVALID CODE ADB .20 RECORD ROW 11 PUNCH JMP R1+2 SET10 ISZ TOPFL JMP RRET INVALID ADB .10 RECORD IT JMP R2-1 SET19 ISZ BTMFL JMP RRET INVALID STB TEM SAVE RUNNING TOTAL LDB RCTRX CMB,INB ADB TEM JMP R2+3 * * * * * CHECK CONTINUE COLUMN * * CKCON STA CONCD GET ROW 12 INTO CONTINUE CODE CCA STA CONDT SET CONDITION -1 WAIT FOR CARD END JMP RRET RETURN CKCN1 RAL CHECK FOR CARD END SSA,RSS JMP RRET NO WAIT FOR END * LDA CONCD LOAD CONTINUE CODE SLA,RSS ROW 12 SET? JMP PAU NO - DONE CLA YES STA COLC RESET COLUMN COUNT STA CONDT RESET CONDITION JMP RCOL START NEW CARD * * RETURN * RRET CLO RESTORE REGISTER LDA CSAVE ELA,SLA STO LDA CSAVA LDB CSAVB STF 0 ENABLE INTERRUPT SYSTEM [A] JMP CRINT,I RETURN * * * * SUBROUTINE TO STORE THE CHARACTER * STCHR NOP CPB COUNX TEST FOR BUFFER OVERFLOW [A] JMP STCHR,I RETURN IF OVERFLOW [A] AND B177 MASK OFF TO 7 BITS SLB,RSS CHECK COUNT FOR CHAR POSITION ALF,SLA,ALF UPPER CHAR IOR CBUFD,I LOWER, ADD ON UPPER STA CBUFD,I STORE WORD SLB,INB INCREMENT COUNTER AND TEST ISZ CBUFD GO TO NEXT WORD JMP STCHR,I RETURN * * * * SECTION TO START READING A CARD * * RCOLI SSA,RSS IS STATUS OK? JMP CR2 NO ISZ CONDT SET CONDITION CODE * JMP RRET READ FIRST COLUMN CR2 RAL SSA JMP SETM2 END-OF-CARD "ERROR" ISZ TRYCT TRY AGAIN? JMP RCOL+2 YES JMP SETM2 NO CARDS "ERROR" * * * RCOL LDA M5 SET RETRY COUNTER STA TRYCT STC 0,C ENABLE READER CLA,INA START FEED OTA 0 JMP RRET READER RETURN * * * SET DATA FLAG * * AND CLEAR CARD READER * * PAU CLA,INA STA CDATA SET CARD READER DATA FLAG CLA CLEAR CARD TEMP INC STA CRUST JMP RRET RETURN SETM2 LDA M3 LOAD ERROR CONDITION STA CDATA CLC 0 CLEAR READER JMP *-6 JMP RRET * * * *** CHECK CARD READER * * CCARD NOP SUBROUTINE TO CHECK IF CARD READER LDA CDATA NEEDS SERVICE SZA,RSS IS DATA FLAG 0? JMP CCARD,I YES - GO BACK TO MONITOR CLB NO - RESET IT STB CDATA STA TEM3 SAVE DATA FLAG CCA SET FLAG1=-1 STA FLG1,I TO INDICATE USER CHECK ADA CRUSN USER #-1=BIAS STA BIAS.,I JSB ACT.,I ACTIVATE THE USER LDA EXU. IS OT A STOP CONDITION? ADA BIAS.,I CHECK EXU FLAG TO SEE. LDA A,I SSA JSB I.STP,I YES - GO TO STOP ROUTINE LDA CCONT NO - LOAD CHARACTER COUNT LDB TEM3 LOAD DATA FLAG SSB IS FLAG NEGATIVE? LDA TEM3 YES GET FLAG TO A REG. JMP CARDS,I RETURN TO BASIC CDATA NOP CARD READER DATA FLAG CRUSN NOP CARD REACER USER NUMBER CCONT NOP CHARACTER COUNT CBUFD NOP BUFFER ADDRESS COLC NOP COLUMN COUNT CONDT NOP CONDITION OF CARD READER COUNX NOP [A] CSAVA NOP SAVE A REGISTER CSAVB NOP CSAVE NOP TOPFL NOP BTMFL NOP RCTRX NOP TRYCT NOP COUNTER FOR FEED ATTEMPTS CIN EQU 0 ETBLA DEF ETBL OTBLA DEF OTBL ADTBL DEF OTBLZ [A] NMLST DEF * ASC 10,SLCIRSATT@CPHU@NRCUH ASC 10,N@@RLEEATD@@DPARTIAN ASC 10,@TG@OITFO@@NFEOXRT@@ ASC 10,DEINMD@@DGEOFS@URBE@ ASC 10,TSUTRONP@@RREEMS@TMO ASC 7,ARTE@@ C O M @ B7777 OCT 7777 .20 DEC 20 EXU. DEF EXU1 CONCD NOP .11. DEC 11 ADTMP NOP CRUST NOP XINTA DEF XINT * * * *********************************************** *** *** *** TIME-SHARE BASIC PHOTOREADER DRIVER *** *** *** *********************************************** * * CALL FROM BASIC: * * LDB * LDA * JSB .HSPR,I * * RETURN * * .HSPR NOP ENTRY POINT TO PHOTOREADER DRIVER STA HSROC STORE CHARACTER COUNT STB BLNTH SAVE BUFFER ADDRESS CLA CLEAR A-REGISTER AND- STA HSPTR STORE IN CHARACTER IN COUNT STC 0,C INITIATE PHOTOREADER INPUT JMP &MON&,I GO TO MONITOR * *** PHOTOREADER INTERRUPT PROCESSOR * RDINT NOP STA ?SAVA SAVE CONTENTS OF A-REGISTER STB ?SAVB SAVE CONTENTS OF B-REG LIA 0 LOAD CHARACTER AND M177 MASK PARITY CPA RTA IS IT A RETURN? JMP CRIN SET CARRIAGE RETURN FLAG CPA LF IS IT A LINE-FEED? JMP ?OMIT YES-IGNORE CPA RBOUT IS IT A RUBOUT? JMP ?OMIT YES - IGNORE * CPA AMDE ALT MODE? [A] JMP NWLNE YES [A] CPA EMODE ESCAPE? [A] JMP NWLNE YES - DELETE ENTIRE LINE [A] CPA AROW LEFT ARROW? [A] JMP DLET. YES - DELETE LAST CHARACTER [A] SZA,RSS TEST FOR NULL JMP ?LDR TEST FOR LEADER/TRAILER TAPE ISZ TPFLG INDEX CHARACTER FLAG LDB HSPTR LOAD CHARACTER IN COUNT CPB HSROC TEST FOR FULL BUFFER JMP ?OMIT YES-IGNORE LAST CHARACTER SLB,RSS STORE ALF,SLA,ALF CHARACTER * IOR BLNTH,I IN * STA BLNTH,I BUFFER * SLB,INB * ISZ BLNTH * STB HSPTR SAVE CHARACTER IN COUNT ?OMIT STC 0,C START NEXT INPUT LDA ?SAVA RESTORE A-REGISTER LDB ?SAVB RESTORE B-REGISTER JMP RDINT,I RETURN * CRIN CLC 0 STA HSRDT SET RECORD IN FLAG JMP ?OMIT+1 * ?LDR LDA TPFLG LOAD LEADER/TRAILER FLAG SZA,RSS TEST FOR TRAILER JMP ?OMIT LEADER TAPE-IGNORE CLC 0 TURN OFF PHOTOREADER LDB M10 LOAD B=-10 STB HSRDT SET EOT FLAG JMP ?OMIT RETURN * *** DELETE ENTIRE LINE * NWLNE CLB SET RECORD IN COUNT [A] STB HSPTR TO ZERO [A] JMP CRIN SET RECORD-IN FLAG [A] * *** DELETE LAST CHARACTER IN BUFFER * DLET. LDB HSPTR CHECK FOR EMPTY BUFFER [A] SZB,RSS [A] JMP ?OMIT IF EMPTY - GET NEXT CHARACTER [A] CCA [A] ADB A DECREMENT CHARACTER COUNT [A] SLB,RSS ODD OR EVEN CHARACTER? [A] JMP ?OMIT-1 EVEN - JUST DECREMENT ADDRESS [A] ADA BLNTH POINTER. [A] LDA BLNTH,I ODD - DELETE LAST CHARACTER [A] AND MSK1 INPUT. [A] STA BLNTH,I [A] JMP ?OMIT-1 [A] * *** PHOTOREADER DATA VALUES * * HSROC NOP PHOTOREADER ORIGINAL DATA COUNT BLNTH NOP PHOTOREADER BUFFER STORE POINTER HSPTR NOP CHARACTER IN COUNTER ?SAVA NOP ?SAVB NOP TPFLG NOP LEADER/TRAILER TAPE FLAG HSRDT NOP PHOTOREADER DATA FLAG * AMDE OCT 176 [A] AROW OCT 137 [A] *** STORAGE FOR USER # WHILE PTAPE ACTIVATED * PTUSN NOP TAPE USER # STORAGE * *** CHECK PHOTOREADER * CPHTO NOP LDA HSRDT GET PHOTOREADER DATA FLAG SZA,RSS DATA FLAG SET? JMP CPHTO,I NO-RETURN TO MONITOR ISZ .HSPR SET RETURN TO P+2 CLB STB HSRDT CLEAR PHOTOREADER FLAG STA TEM3 SAVE DATA FLAG CCA SET FLAG1=-1 STA FLG1,I (USER CHECK) ADA PTUSN COMPUTE PTAPE USER STA BIAS.,I JSB ACT.,I ACTIVATE THE USER LDA HSPTR LOAD CHAR -IN- COUNT LDB TEM3 RELOAD DATA FLAG CPB M10 END-OF-TAPE? RSS YES-PROCESS EOT JMP .HSPR,I NO-RETURN .RDR1 CLC 0 TURN OFF PHOTOREADER CLB STB TPFLG CLEAR LEADER/TRAILER FLAG. LDA .12 OUTPUT "TAPE LOADED" LDB TLRDR TO TELETYPE JSB WRITE,I LDA M3 LOAD EOT FLAG JMP .HSPR,I RETURN FLG1 DEF FLAG1 TLRDR DEF *+1 ASC 6,TAPE LOADED * *** RETURN AFTER INPUT FROM LOCAL TTY * PTPRC STA TEM3 CCB SET LOG TTY BUSY FLAG STB BUSY CLA OUTPUT CR-LF JSB LCLOT,I JSB LCLIN,I INITIATE NEW INPUT CLA CLEAR LOG TTY BUSY FLAG STA BUSY * * MODIFY PTPRC * LDB USN LOAD THE USER NUMBER SZB,RSS IS IT ZERO? JMP *+4 YES NO ONE IN ADB .BSKA NO, GET USER STACK ADDRESS LDB B,I JSB #MOT#,I MOVE THE USER OUT CLA STA USN CLEAR USER NUMBER LDB PTBUF LOAD INPUT BUFFER STB TFLAG SET PT FLAG CPB PT IS IT A PTABE JMP ?PTCR CPB CA IS IT A CARD? RSS JMP &MON&,I NO RETURN TO MONITOR ?PTCR LDA PTBFA LOAD PTAPE BUFFER RAL STA BADDR LDA TEM3 LOAD CHARACTER COUNT CMA CHAR TO -#-1 STA CCNT JSB GETCR,I GET A CHARACTER JMP &MON&,I NO MORE CHARS INVALID JSB DIGCK,I IS IT A DIGIT? JMP *-3 NO STA TEM3 SAVE USER # SZA,RSS TEST FOR ZERO USER # [A] JMP &MON&,I RETURN IF USER 0 [A] ADA M5 TEST FOR USER NUMBER [A] SSA,RSS GREATER THAN 4 [A] JMP &MON&,I RETURN IF TOO LARGE [A] LDA TEM3 RELOAD USER NUMBER [A] LDB TFLAG LOAD FLAG ADA M1 SUBTRACT 1 STA BIAS.,I SET BIAS ADA DRS. CHECK FOR INACTIVE USER [A] LDA A,I [A] XOR M15 THIS IS A CHANNEL IN THE [A] LDA A,I LOGGING ROUTINES [A] CPA LOGGR [A] JMP &MON&,I RETURN IF INACTIVE USER [A] LDA BIAS.,I RESTORE BIAS IN (A) [A] JSB ACT.,I ACTIVATE THE USER LDA TEM3 RELOAD USER # CPB CA IS IT CARD READER STA CRUSN YES CPB PT PTAPE? STA PTUSN YES CCA SET A=-1 FOR PT CPB CA IS IT CARDS? LDA M15 YES A=15 STA TFLAG SET FLAG JMP PTAP,I GO TO PTAPE IN BASIC * TEM3 NOP &BAD& NOP &CNT& NOP LOGGR DEF LOGON+3 [A] DRS. DEF DRS+1 [A] * PT ASC 1,PT CA ASC 1,CA #MOT# DEF MVUOT BIAS. DEF BIAS .BSKA DEF BSK1-1 ACT. DEF ACT * * * *** EXECUTE "MESG" COMMAND * MSSG CLA OUTPUT CR-LF ON JSB WRITE,I USER TTY LDA BUSY LOAD BUSY FLAG SZA AND RETURN IF JMP NOGO2 LOG TTY IS BUSY LDA PNCMD OTHERWISE-SET LOG STA BUSY TTY MOTOR ON AND LTTY3 OTA 0 SET BUSY FLAG. LDB D500 FOR LOG TTY LDA D500 GIVE DELAY INA,SZA MOTOR JMP *-1 TO COME INB,SZB UO TO JMP *-4 PRINT SPEED LDA USN GET USER # IOR .48 ADD ON ASCII # BITS ALF,ALF POSITION TO UPPER WORD STA CMSG PUT IN BUFFER LDA .13 OUTPUT MESSAGE: LDB MSGA "MSG CH: X" JSB LCLOT,I JSB LCLIN,I CLA CLEAR BUSY FALG STA BUSY JMP RDYDA,I RETURN TO BASIC * .13 DEC 13 MSGA DEF *+1 OCT 3407 OCT 3407 ASC 4,MSG CH: CMSG BSS 1 D500 DEC -500 * ACCT# NOP TBL NOP SYIN# BSS 1 SINA BSS 1 SLENA BSS 1 22255-80005 D