PAGE 0001 0001 ASMB,A,B,L PREPARE BASIC SYSTEM--JANUARY 1, 1970 ** NO ERRORS* PAGE 0002 #01 BASIC SYSTEM CONFIGURATER 0001 ASMB,A,B,L PREPARE BASIC SYSTEM--JANUARY 1, 1970 0003 00002 ORG 2 0004* 0005* THIS PROGRAM WILL CONFIGURE AND PUNCH AS AN ABSOLUTE TAPE THE 0006* HP BASIC SYSTEM COMPATIBLE WITH 'BOSS'; INCLUSION OF THE 'BOSS' 0007* VERSION OF THE BASIC INTERPRETER IS OPTIONAL. TELETYPE, 0008* PHOTOREADER, AND PUNCH DRIVERS ARE SUPPLIED BY THIS PROGRAM. 0009* CUSTOM 'CALL' ROUTINES MAY BE INCLUDED IF THE BASIC INTERPRETER 0010* IS PRESENT. OPTIONS INCLUDE CHOICE OF BUFFERED OR SERIAL 0011* TELETYPE AND CONFIGURATION FOR 8, 16, 24, OR 32K OF 0012* MEMORY. 0013* 0014* THE AREAS PUNCHED ARE 4 THROUGH 'CONTENTS OF FWAM' -1 AND 0015* 'CONTENTS OF LWAM' +1 THROUGH 'CONTENTS OF LWM'; I.E., SYSTEM 0016* CODE AND DRIVER CODE. 0017* 0018* TO OPERATE - 0019* 0020* 1) LOAD THE PBS TAPE WITH THE PROTECTED LOADER. 0021* 2) (OPTIONAL) LOAD BASIC INTERPRETER ('CALL ROUTINES 0022* MAY ALSO BE LOADED IF DESIRED). 0023* 3) 'LOAD ADDRESS' 2 AND 'PRESET'. 0024* 4) SET SELECT CODE OF TELETYPE (IN OCTAL) INTO THE 0025* SWITCH REGISTER. SET SWITCH 15 TO 1 IF USING A 0026* SERIAL TELETYPE BOARD. 0027* 5) SET TELETYPE TO 'LINE,' TURN ON HIGH SPEED TAPE PUNCH 0028* IF PRESENT, AND PRESS 'RUN'. 0029* 6) ANSWER TELETYPE REQUESTS APPROPRIATELY. 0030* 7) AFTER THE HLT 77B, PRESS 'RUN' FOR EXTRA COPIES. 0031* 0032 SUP SUPPRESS LISTING OF MULTIPLE OPERANDS 0033* 0034 00002 124003 JMP 3,I BEGIN 0035 00003 016333 DEF START EXECUTION 0036* 0037 00004 103004 HLT 4,C IN CASE OF POWER FAIL 0038 00005 102005 HLT 5 IN CASE OF PARITY FAULT 0039 00006 000000 OCT 0,0,0,0,0,0,0,0,0 NOP ALL MAIN-FRAME 0040 00007 000000 OCT 0,0,0,0,0,0,0,0,00 INTERRUPT LOCATIONS PAGE 0003 #01 BASIC SYSTEM CONFIGURATER 0042 16333 ORG 16333B 0043* 0044 16333 107700 START CLC 0,C TURN OFF INTERRUPT, ALL DEVICES 0045 16334 102501 LIA 1 LOAD FROM SWITCH REGISTER 0046 16335 001623 ELA,RAR PUT A(15) INTO (E) 0047 16336 013223 AND B77 MASK TO 6 BITS 0048 16337 073244 STA IOADR SAVE I/O ADDRESS 0049 16340 001121 ARS,ARS SHIFT OUT FIRST OCTAL DIGIT 0050 16341 001100 ARS 0051 16342 002002 SZA IS I/O ADDRESS GT 7 0052 16343 026346 JMP GOMAN YES THEN OK 0053* 0054 16344 102055 HLT 55B INVALID TTY ADDRESS HALT 0055 16345 026334 JMP START+1 TRY AGAIN 0056* 0057* SET TELETYPE I/O INSTRUCTION ADDRESSES 0058* 0059 16346 002040 GOMAN SEZ BUFFERED TELETYPE? 0060 16347 127240 JMP SERLA,I NO 0061 16350 063210 LDA M24 YES, LOAD # OF INSTRUCTIONS 0062 16351 067301 LDB LST1A ADDRESS OF INSTRUCTION LIST 0063 16352 016646 JSB SETI SET TTY I/O ADDRESSES 0064* 0065* CALL FOR PHOTOREADER ADDRESS INPUT 0066* 0067 16353 016642 PHRDR JSB CRLFD DO A CR/LF 0068 16354 063206 LDA M27 MESSAGE LENGTH, NEGATIVE NO CRLF 0069 16355 067056 LDB MA1 MESSAGE ADDRESS 0070 16356 016571 JSB GETAD GET ADDRESS 0071 16357 026371 JMP NORDR ADDRESS =0, NO READER 0072 16360 063214 LDA M5 VALID READER ADDRESS 0073 16361 067310 LDB LST2A READER INSTRUCTION ADDRESS LIST 0074 16362 016646 JSB SETI SET READER I/O INSTRUCTIONS 0075 16363 063307 LDA RO SET CLC RDR 0076 16364 073524 PHRD1 STA R.OFF INSTRUCTION 0077 16365 063247 LDA LWAMR 0078 16366 070111 STA LWAM SET LAST WORD AVAILABLE MEMORY 0079 16367 002004 INA 0080 16370 070101 STA 101B SET READER LINK 0081* 0082* CALL FOR PUNCH ADDRESS INPUT 0083* 0084 16371 016642 NORDR JSB CRLFD 0085 16372 063211 LDA M20 0086 16373 067075 LDB MA2 0087 16374 016571 JSB GETAD CALL FOR PUNCH ADDRESS INPUT 0088 16375 026407 JMP SYSDP NO PUNCH 0089 16376 063214 LDA M5 VALID PUNCH ADDRESS 0090 16377 067317 LDB LST3A PUNCH INSTRUCTION ADDRESS LIST 0091 16400 016646 JSB SETI SET PUNCH I/O INSTRUCTIONS 0092 16401 063316 LDA PO SET CLC PNCH 0093 16402 073525 NORD1 STA P.OFF INSTRUCTION 0094 16403 063250 LDA LWAMP 0095 16404 070111 STA LWAM SET LWAM 0096 16405 002004 INA 0097 16406 070103 STA 103B SET PUNCH LINK PAGE 0004 #01 BASIC SYSTEM CONFIGURATER 0098* 0099* CALL FOR DUMP DEVICE ADDRESS 0100* 0101 16407 016642 SYSDP JSB CRLFD CR/LF 0102 16410 063207 LDA M25 0103 16411 067143 LDB MA5 0104 16412 016571 JSB GETAD GET DUMP I/O ADDRESS 0105 16413 026421 JMP CORAD NO SYSTEM DUMP DEVICE AVAILABLE 0106 16414 063215 LDA CM.4 SYSTEM DUMP DEVICE AVAILABLE 0107 16415 067324 LDB LST4A SET DEVICE'S I/O INSTRUCTIONS 0108 16416 016646 JSB SETI 0109 16417 063246 LDA PNCHI SET PUNCH OUTPUT TO REFERENCE 0110 16420 073245 STA PNCHO HIGH SPEED PUNCH ROUTINE 0111* 0112* CALL FOR CORE SIZE 0113* 0114 16421 016642 CORAD JSB CRLFD 0115 16422 063213 LDA M12 REQUEST 0116 16423 067161 LDB MA6 0117 16424 017445 CORA1 JSB TTY.P CORE 0118 16425 063221 LDA .20 0119 16426 067010 LDB BUF SIZE 0120 16427 000000 CORA2 NOP 0121 16430 017426 JSB TTY.I 0122 16431 000000 NOP 0123 16432 002003 SZA,RSS NULL ANSWER? 0124 16433 026532 JMP DUMP YES, ASSUME 8K 0125 16434 163010 LDA BUF,I NO 0126 16435 053227 CPA C8K '8 NULL'? 0127 16436 026532 JMP DUMP YES 0128 16437 006400 CLB NO 0129 16440 053230 CPA C16K '16'? 0130 16441 026455 JMP RELOC YES 0131 16442 006004 INB NO 0132 16443 053231 CPA C24K '24'? 0133 16444 026455 JMP RELOC YES 0134 16445 006004 INB NO 0135 16446 053232 CPA C32K '32'? 0136 16447 026455 JMP RELOC YES 0137 16450 016642 JSB CRLFD NO 0138 16451 063212 LDA M15 0139 16452 067170 LDB MA7 PRINT 0140 16453 017445 CORA3 JSB TTY.P ERROR 0141 16454 026421 JMP CORAD TRY AGAIN PAGE 0005 #01 BASIC SYSTEM CONFIGURATER 0143* 0144* RELOCATE DRIVERS 0145* 0146 16455 047233 RELOC ADB INCIN LOAD 0147 16456 164001 LDB 1,I DISPLACEMENT 0148 16457 063237 LDA LWM ADJUST 0149 16460 040001 ADA 1 0150 16461 073237 STA LWM ABSOLUTE 0151 16462 063672 LDA CRLFA 0152 16463 040001 ADA 1 POINTERS 0153 16464 073672 STA CRLFA 0154 16465 060101 LDA 101B 0155 16466 040001 ADA 1 0156 16467 002021 SSA,RSS 0157 16470 070101 STA 101B 0158 16471 060102 LDA 102B 0159 16472 040001 ADA 1 0160 16473 070102 STA 102B 0161 16474 060103 LDA 103B 0162 16475 040001 ADA 1 0163 16476 002021 SSA,RSS 0164 16477 070103 STA 103B 0165 16500 060104 LDA 104B 0166 16501 040001 ADA 1 0167 16502 070104 STA 104B 0168 16503 060111 LDA LWAM 0169 16504 073241 STA SOURC SAVE ADDRESS OF DRIVER MODULE 0170 16505 040001 ADA 1 0171 16506 070111 STA LWAM 0172 16507 073242 STA DEST SET DESTINATION ADDRESS 0173 16510 060123 LDA IMOFF 0174 16511 040001 ADA 1 0175 16512 070123 STA IMOFF 0176 16513 060124 LDA IMON 0177 16514 040001 ADA 1 0178 16515 070124 STA IMON 0179 16516 060125 LDA TLINK 0180 16517 040001 ADA 1 0181 16520 070125 STA TLINK 0182 16521 067237 LDB LWM COMPUTE 0183 16522 007004 CMB,INB # OF WORDS 0184 16523 044111 ADB LWAM TO BE MOVED 0185 16524 037241 MOREM ISZ SOURC ADVANCE 0186 16525 037242 ISZ DEST POINTERS 0187 16526 163241 LDA SOURC,I MOVE A 0188 16527 173242 STA DEST,I WORD 0189 16530 006006 INB,SZB DONE? 0190 16531 026524 JMP MOREM NO PAGE 0006 #01 BASIC SYSTEM CONFIGURATER 0192* 0193* THIS SECTION DUMPS THE ELEMENTS OF THE SYSTEM LOADED 0194* 0195 16532 016642 DUMP JSB CRLFD 0196 16533 060111 LDA LWAM SET STARTING 0197 16534 043204 ADA M36 ADDRESS FOR 0198 16535 070131 STA IOBFA I/O BUFFER 0199 16536 070117 STA SYMTA SET SYMBOL TABLE POINTER 0200 16537 043203 ADA M97 SET STARTING ADDRESS 0201 16540 070134 STA SBUFA FOR SYNTAX BUFFER 0202 16541 043216 ADA M1 0203 16542 070111 STA LWAM SAVE VALUE CORRECTED FOR BUFFERS 0204 16543 070106 STA LWBM FOR STAND-ALONE OPERATION 0205 16544 063245 LDA PNCHO 0206 16545 053246 CPA PNCHI SYSTEM DUMP DEVICE AVAILABLE? 0207 16546 026555 JMP COPY PUNCH IS AVAILABLE 0208* 0209 16547 063222 LDA .30 0210 16550 067110 LDB MA3 0211 16551 017445 DUMP1 JSB TTY.P REQUEST TTY PUNCH ON 0212* 0213 16552 060126 DUMP2 LDA PLSTR PREPARE TO 0214 16553 070127 STA LISTR PUNCH 0215 16554 102011 HLT 11B 0216* 0217 16555 017004 COPY JSB LTG GENERATE LEADER 0218 16556 063220 LDA .4 DUMP 0219 16557 007400 CCB LOCATIONS 4 0220 16560 044110 ADB FWAM THROUGH 0221 16561 016734 JSB PNCHA (FWAM)-1 0222 16562 060111 LDA LWAM DUMP 0223 16563 043224 ADA .135 DRIVER 0224 16564 067237 LDB LWM AREA 0225 16565 016734 JSB PNCHA 0226 16566 017004 JSB LTG GENERATE TRAILER 0227 16567 102077 HLT 77B END OF DUMP ROUTINE 0228 16570 026555 JMP COPY GO MAKE ANOTHER COPY PAGE 0007 #01 BASIC SYSTEM CONFIGURATER 0230* 0231* SUBROUTINE GETA1 0232* 0233* THIS SUBROUTINE CALLS FOR I/O ADDRESS INPUT, PROCESSES THE 0234* INPUT AND IF INPUT VALID RETURNS TO P+2. IF NOTHING IS 0235* INPUTTED IT RETURNS TO P+1 WITH LINK TO STOP IN A 0236* 0237* CALL: JSB GETAD 0238* (A) = LENGTH OF MESSAGE ASKING FOR I/O ADDRESS 0239* (B) = ADDRESS OF MESSAGE 0240* 0241* RETURN: ZERO INPUT - P+1 (A) = LINK TO STOP 0242* VALID ADDRESS - P+2 (A) = I/O ADDRESS 0243* 0244* I/O ADDRESS IS SAVED IN LOCATION IOADR 0245* 0246* IF INPUT IS INVALID (IE NOT TWO NUMBERS 10-77) 0247* "INVALID I/O ADDRESS" IS TYPED AND IT WAITS 0248* FOR FURTHER INPUT. 0249* 0250 16571 000000 GETAD NOP 0251 16572 017445 JSB TTY.P PRINT INPUT REQUEST MESSAGE 0252 16573 063221 INPUT LDA .20 0253 16574 067010 LDB BUF 0254 16575 000000 GETA1 NOP WAIT 0255 16576 017426 JSB TTY.I FOR 0256 16577 000000 NOP INPUT 0257 16600 002003 SZA,RSS ANY ADDRESS? 0258 16601 126571 JMP GETAD,I NO ADDRESS 0259 16602 053656 CPA .2 TWO CHARACTERS INPUT? 0260 16603 026612 JMP TWOCH TWO CHARACTERS INPUTTED 0261* 0262 16604 016642 ERRO. JSB CRLFD INVALID INPUT ERROR 0263 16605 063221 LDA .20 0264 16606 067130 LDB MA4 0265 16607 017445 GETA2 JSB TTY.P PRINT 'INVALID INPUT' 0266 16610 016642 JSB CRLFD DO A RETURN AND LINE FEED 0267 16611 026573 JMP INPUT RETURN FOR MORE INPUT 0268* 0269 16612 163010 TWOCH LDA BUF,I GET FIRST TWO CHARACTERS 0270 16613 001727 ALF,ALF LOOK AT FIRST CHARACTER 0271 16614 016631 JSB NBER CHECK FOR VALID OCTAL;YES,CONVRT 0272 16615 026604 JMP ERRO. NOT OCTAL 0273 16616 002003 SZA,RSS ADDRESS > 7 ? 0274 16617 026604 JMP ERRO. NO 0275 16620 001723 ALF,RAR MOVE FIRST DIGIT 3 BITS LEFT 0276 16621 073244 STA IOADR AND SAVE 0277 16622 163010 LDA BUF,I 0278 16623 016631 JSB NBER CHECK SECOND CHARACTER 0279 16624 026604 JMP ERRO. NOT OCTAL 0280 16625 033244 IOR IOADR FORM TWO DIGIT OCTAL NUMBER 0281 16626 073244 STA IOADR SAVE I/O ADDRESS 0282 16627 036571 ISZ GETAD NON-ZERO I/O ADDRESS 0283 16630 126571 JMP GETAD,I RETURN PAGE 0008 #01 BASIC SYSTEM CONFIGURATER 0285* 0286* SUBROUTINE NBER 0287* 0288* THIS SUBROUTINE CHECKS WHETHER THE CHARACTER IN A REPRESENTS 0289* A VALID OCTAL DIGIT. IF THE CHARACTER IS VALID IT IS 0290* CONVERTED TO AN OCTAL DIGIT. 0291* 0292* RETURN: P+1 INVALID OCTAL CHARACTER 0293* P+2 VALID OCTAL CHARACTER 0294* (A) = OCTAL DIGIT 0295* 0296* 0297 16631 000000 NBER NOP 0298 16632 013666 AND B177 MASK TO ONE CHARACTER 0299 16633 043205 ADA N60 SUBTRACT OCTAL 60 0300 16634 070001 STA 1 TRANSFER TO B 0301 16635 005121 BRS,BRS 0302 16636 005100 BRS SHIFT OUT FIRST 3 BITS 0303 16637 006003 SZB,RSS IS B ZERO 0304 16640 036631 ISZ NBER B=0, VALID DIGIT, RETURN TO P+2 0305 16641 126631 JMP NBER,I RETURN 0307* 0308* SUBROUTINE CRLFD OUTPUTS A CARRIAGE RETURN AND LINE FEED. 0309* 0310 16642 000000 CRLFD NOP EXIT/ENTRY 0311 16643 002400 CLA 0312 16644 017445 CRLF1 JSB TTY.P DO CR/LF 0313 16645 126642 JMP CRLFD,I EXIT PAGE 0009 #01 BASIC SYSTEM CONFIGURATER 0315* 0316* SUBROUTINE SETI 0317* 0318* THIS SUBROUTINE MODIFIES THE ADDRESSES SPECIFIED IN A LIST 0319* 0320* CALL: JSB SETI 0321* (A) = NUMBER OF LOCATIONS TO BE MODIFIED (2'S COMP) 0322* (B) = STARTING ADDRESS OF LIST OF ADDRESSES 0323* 0324* 0325 16646 000000 SETI NOP EXIT/ENTRY 0326 16647 073676 STA COUNT SAVE LENGTH OF LIST 0327 16650 077675 STB BADDR SET LIST STARTING ADDRESS 0328 16651 167675 LOOP LDB BADDR,I LOAD ADDRESS OF INSTRUCTION 0329 16652 160001 LDA 1,I LOAD INSTRUCTION TO BE MODIFIED 0330 16653 013201 AND MASK ZERO I/O PART, MASK=177700 0331 16654 033244 IOR IOADR INSERT I/O ADDRESS 0332 16655 170001 STA 1,I SET MODIFIED INSTRUCTION 0333 16656 037675 ISZ BADDR INDEX LIST POINTER 0334 16657 037676 ISZ COUNT 0335 16660 026651 JMP LOOP GO DO NEXT LOCATION 0336 16661 126646 JMP SETI,I RETURN 0338* 0339* SUBROUTINE (TOUT) TO OUTPUT ONE CHARACTER 0340* TO TELETYPE. CHARACTER IS IN (A). (B) IS NOT ALTERED. 0341* 0342 16662 000000 TOUT NOP 0343 16663 102600 TP.11 OTA TTY LOAD BOARD BUFFER 0344 16664 103700 STC TTY,C GIVE PUNCH COMMAND 0345 16665 102300 SFS TTY WAIT FOR 0346 16666 026665 JMP *-1 COMPLETION 0347 16667 126662 JMP TOUT,I 0349* 0350* SUBROUTINE (POUT) TO OUTPUT ONE CHARACTER TO 0351* PUNCH DEVICE. CHARACTER IS IN (A). (B) IS NOT ALTERED. 0352* 0353 16670 000000 POUT NOP 0354 16671 102600 OTA PNCH FILL BOARD BUFFER 0355 16672 103700 STC PNCH,C REQUEST PUNCH 0356 16673 102300 SFS PNCH WAIT UNTIL 0357 16674 026673 JMP *-1 DONE 0358 16675 126670 JMP POUT,I PAGE 0010 #01 BASIC SYSTEM CONFIGURATER 0360* 0361* SUBROUTUNE PUNCH 0362* 0363* THIS SUBROUTINE PROVIDES THE MEANS OF PUNCHING BINARY 0364* RECORDS ON THE TELETYPE OR HIGH SPEED PUNCH. 0365* 0366* CALLING SEQUENCE JSB PUNCH 0367* 0368* (A) = LENGTH (AND MODE) OF RECORD TO BE OUTPUT 0369* (B) = STARTING ADDRESS OF DATA BUFFER 0370* 0371* BINARY OUTPUT IS INDICATED BY A NEGATIVE (2S COMPLE- 0372* MEMT) VALUE IN A. THIS NEGATIVE VALUE IS THE 0373* NUMBER OF WORDS TO BE OUTPUT. 0374* 0375* IF A = 0 ON ENTRY 10 INCHES OF FEED FRAMES ARE PUNCHED 0376* 0377 16676 000000 PUNCH NOP EXIT/ENTRY 0378 16677 077050 STB BUFF SAVE STARTING ADDRESS OF BUFFER 0379 16700 067515 LDB PMODE 0380 16701 106600 TP.9 OTB TTY SET TTY TO PUNCH MODE 0381 16702 002002 SZA CHECK FOR FEED FRAMES ONLY 0382 16703 026706 JMP *+3 NOT FEED FRAME MODE 0383 16704 063202 LDA .200 0384 16705 026724 JMP PP03+1 DO FEED FRAMES ONLY 0385* 0386 16706 001000 ALS CONVERT COUNT TO CHARACTERS (X2) 0387 16707 073243 STA CHC1 AS COUNTER FOR OUTPUT SECTION. 0388 16710 067226 LDB UL52 SET UPPER/LOWER INDICATOR 0389* 0390* CHARACTER OUTPUT SECTION 0391* 0392 16711 163050 PP02 LDA BUFF,I GET WORD CONTAINING CHARACTER 0393 16712 006021 SSB,RSS IF UPPER/LOWER FLAG SAYS UPPER 0394 16713 001727 ALF,ALF (SIGN = 0) ROTATE TO LOWER 0395 16714 013225 AND M377 REMOVE UPPER CHARACTER 0396 16715 117245 JSB PNCHO,I OUTPUT CHARACTER 0397 16716 006020 SSB IF CHAR. OUTPUT WAS LOWER CHAR., 0398 16717 037050 ISZ BUFF ADD 1 TO BUFFER ADDRESS. 0399 16720 005200 RBL SET UPPER/LOWER FLAG FOR NEXT CHA 0400 16721 037243 ISZ CHC1 INDEX CHARACTER COUNTER. 0401 16722 026711 JMP PP02 NOT ZERO, MORE TO OUTPUT. 0402* 0403* COMPLETION SECTION 0404* 0405 16723 063215 PP03 LDA CM.4 BINARY SECTION. SET BUFF = -4 0406 16724 073050 STA BUFF FOR COUNTER FOR FEED-FRAMES 0407 16725 002400 CLA SET A = ZERO( FEED-FRAME). 0408 16726 117245 JSB PNCHO,I OUTPUT FEED FRAME 0409 16727 037050 ISZ BUFF INDEX COUNTER 0410 16730 026725 JMP *-3 CONTINUE OUTPUT 0411 16731 106700 TP.10 CLC TTY TURN OFF TTY 0412 16732 106700 PN8 CLC PNCH TURN OFF PUNCH 0413 16733 126676 JMP PUNCH,I EXIT PAGE 0011 #01 BASIC SYSTEM CONFIGURATER 0415* 0416* SUBROUTINE- PNCHA (PUNCH ABSOLUTE BLOCK) 0417* 0418* UPON ENTRY -- 0419* (A) = ADDRESS OF FIRST WORD OF BLOCK 0420* (B) = ADDRESS OF LAST WORD OF BLOCK 0421* 0422 16734 000000 PNCHA NOP 0423 16735 006004 INB SET = TO LAST +1M FOR EOB CHECK 0424 16736 073051 STA T1 SAVE FIRST AND LAST WORD 0425 16737 077052 STB T2 ADDRESSES OF BLOCK. 0426 16740 063206 P1 LDA M27 SET T3 = -27 AS INDEX F6R 0427 16741 073053 STA T3 FILLING BUFFER. 0428 16742 063051 LDA T1 SET BUF+1 FOR LOAD ADDRESS 0429 16743 173011 STA BUF1,I OF CURRENT BLOCK. 0430 16744 073055 STA CKSUM INITIALIZE CHECKSUM WORD. 0431 16745 002400 CLA INITIALIZE 0432 16746 173010 STA BUF,I WORD COUNT 0433 16747 063010 LDA BUF SET T4 = ADDRESS 0434 16750 043656 ADA .2 OF WORD 3 OF BUFFER 0435 16751 073054 STA T4 FOR STORING WORDS. 0436* 0437 16752 163051 P2 LDA T1,I STORE CURRENT WORD FORM MEMORY 0438 16753 173054 STA T4,I BLOCK IN BUFFER. 0439 16754 037051 ISZ T1 BUMP BLOCK ADDRESS 0440 16755 037054 ISZ T4 ADD 1 TO BUFFER ADD950J3 0441 16756 043055 ADA CKSUM ADD WORD TO CUMULATED 0442 16757 073055 STA CKSUM CHECKSUM 0443 16760 137010 ISZ BUF,I COUNT WORD STORED IN BUFFER. 0444 16761 063051 LDA T1 CHECK FOR END OF BLOCK. 0445 16762 053052 CPA T2 0446 16763 026766 JMP P3 YES, FWA = LWA. 0447 16764 037053 ISZ T3 INDEX BUFFER COUNTER. 0448 16765 026752 JMP P2 BUFFER NOT YET FILLED. 0449* 0450 16766 063055 P3 LDA CKSUM BUFFER FILLED. SET CHECKSUM IN 0451 16767 173054 STA T4,I LAST WORD IN BUFFER. 0452 16770 163010 LDA BUF,I POSITION RECORD 0453 16771 001727 ALF,ALF WORD COUNT TO 0454 16772 173010 STA BUF,I UPPER CHARACTER IN WORD 1. 0455 16773 001727 ALF,ALF REPOSITION, ADD 3 FOR 0456 16774 043217 ADA C.03 TOTAL RECORD LENGTH, SET 0457 16775 003004 CMA,INA NEGATIVE FOR OUTPUT. 0458 16776 067010 LDB BUF (B) = ADDR. OF BUFFER. 0459 16777 016676 JSB PUNCH PUNCH RECORD 0460* 0461 17000 063051 LDA T1 CHECK AGAIN FOR COMPLETION OF 0462 17001 053052 CPA T2 PUNCHING BLOCK. 0463 17002 126734 JMP PNCHA,I YES, EXIT. 0464 17003 026740 JMP P1 NO, SET NEXT RECORD. PAGE 0012 #01 BASIC SYSTEM CONFIGURATER 0466* 0467* SUBROUTINE: LTG (LEADER/TRAILER GENERATOR) 0468* 0469* 0470* LTG PRODUCES APPROXIMATELY 10-INCHES 0471* OF BLANK TAPE (FEED-FRAMES) 0472* 0473 17004 000000 LTG NOP 0474 17005 002400 CLA SET FEED FRAME MODE A=0 0475 17006 016676 JSB PUNCH PUNCH FEED FRAMES 0476 17007 127004 JMP LTG,I EXIT. 0478* 0479* PUNCH BUFFER 0480* 0481 17010 017012 BUF DEF BUFFR 0482 17011 017013 BUF1 DEF BUFFR+1 0483* 0484 17012 000000 BUFFR BSS 30 0485 17050 000000 BUFF NOP 0486 17051 000000 T1 NOP 0487 17052 000000 T2 NOP 0488 17053 000000 T3 NOP 0489 17054 000000 T4 NOP 0490 17055 000000 CKSUM NOP 0492* 0493* MESSAGE STORAGE SECTION 0494* 0495 17056 017057 MA1 DEF MSG1 0496 17057 020120 MSG1 ASC 14, PHOTO READER I/O ADDRESS? 0497 17075 017076 MA2 DEF MSG2 0498 17076 020120 MSG2 ASC 10, PUNCH I/O ADDRESS? 0499 17110 017111 MA3 DEF MSG3 0500 17111 020124 MSG3 ASC 15, TURN ON TTY PUNCH, PRESS RUN 0501 17130 017131 MA4 DEF MSG4 0502 17131 020111 MSG4 ASC 10, INVALID I/O ADDRESS 0503 17143 017144 MA5 DEF MSG5 0504 17144 020123 MSG5 ASC 13, SYSTEM DUMP I/O ADDRESS? 0505 17161 017162 MA6 DEF MSG6 0506 17162 020103 MSG6 ASC 6, CORE SIZE? 0507 17170 017171 MA7 DEF MSG7 0508 17171 020111 MSG7 ASC 8, IMPROPER INPUT PAGE 0013 #01 BASIC SYSTEM CONFIGURATER 0510* 0511* CONSTANT AND DATA SECTION 0512* 0513 17201 177700 MASK OCT 177700 0514 17202 177470 .200 DEC -200 0515 17203 177637 M97 DEC -97 0516 17204 177734 M36 DEC -36 0517 17205 177720 N60 OCT -60 0518 17206 177745 M27 DEC -27 0519 17207 177747 M25 DEC -25 0520 17210 177750 M24 DEC -24 0521 17211 177754 M20 DEC -20 0522 17212 177761 M15 DEC -15 0523 17213 177764 M12 DEC -12 0524 17214 177773 M5 DEC -5 0525 17215 177774 CM.4 DEC -4 0526 17216 177777 M1 DEC -1 0527 17217 000003 C.03 DEC 3 0528 17220 000004 .4 DEC 4 0529 17221 000024 .20 DEC 20 0530 17222 000036 .30 DEC 30 0531 17223 000077 B77 OCT 77 0532 17224 000207 .135 DEC 135 0533 17225 000377 M377 OCT 377 0534 17226 052525 UL52 OCT 52525 0535* 0536 17227 034000 C8K OCT 34000 ACCEPTABLE 0537 17230 030466 C16K OCT 30466 CORE 0538 17231 031064 C24K OCT 31064 SIZE 0539 17232 031462 C32K OCT 31462 ANSWERS 0540* 0541 17233 017234 INCIN DEF *+1 0542 17234 020000 OCT 20000 RELOCATION 0543 17235 040000 OCT 40000 0544 17236 060000 OCT 60000 INCREMENTS 0545* 0546 17237 017677 LWM DEF EOTC LAST WORD AVAILABLE 0547 17240 015073 SERLA DEF SRIAL 0548* 0549 17241 000000 SOURC NOP 0550 17242 000000 DEST NOP 0551 17243 000000 CHC1 NOP 0552 17244 000000 IOADR NOP 0553* 0554 17245 016662 PNCHO DEF TOUT PUNCH LINK LOCATION 0555 17246 016670 PNCHI DEF POUT PUNCH REFERENCE INSTRUCTION 0556* 0557 17247 017367 LWAMR DEF .HSPR-1 LWAM IF PHOTO READER 0558 17250 017346 LWAMP DEF .PNCH-1 LWAM IF PUNCH PAGE 0014 #01 BASIC SYSTEM CONFIGURATER 0560* 0561* LIST OF INSTRUCTIONS (ADDRESSES) TO BE SET 0562* 0563* 0564* TELETYPE INSTRUCTIONS ADDRESS LIST 0565* 0566 17251 017433 LIST1 DEF TI.1 0567 17252 017434 DEF TI.2 0568 17253 017435 DEF TI.2+1 0569 17254 017437 DEF TI.3 0570 17255 017442 DEF TI.4 0571 17256 017522 DEF TI.5 0572 17257 017523 DEF TI.5+1 0573 17260 017531 DEF TI.6 0574 17261 017533 DEF TI.7 0575 17262 017534 DEF TI.7+1 0576 17263 017447 DEF TP.1 0577 17264 017456 DEF TP.2-1 0578 17265 017457 DEF TP.2 0579 17266 017462 DEF TP.4 0580 17267 017463 DEF TP.4+1 0581 17270 017464 DEF TP.5 0582 17271 017471 DEF TP.6 0583 17272 017500 DEF TP.7 0584 17273 017502 DEF TP.8 0585 17274 016701 DEF TP.9 0586 17275 016731 DEF TP.10 0587 17276 016663 DEF TP.11 0588 17277 016664 DEF TP.11+1 0589 17300 016665 DEF TP.11+2 0590* 0591 17301 017251 LST1A DEF LIST1 0592* 0593* PHOTO READER INSTRUCTIONS ADDRESS LIST 0594* 0595 17302 017407 LIST2 DEF PR3 0596 17303 017413 DEF PR5 0597 17304 017415 DEF PR6 0598 17305 017422 DEF PR7 0599 17306 017307 DEF RO 0600* 0601 17307 106700 RO CLC RDR 0602 17310 017302 LST2A DEF LIST2 0603* 0604* HIGH SPEED PUNCH INSTRUCTIONS ADDRESS LIST 0605* 0606 17311 017353 LIST3 DEF PN3 0607 17312 017354 DEF PN4 0608 17313 017355 DEF PN5 0609 17314 017362 DEF PN7 0610 17315 017316 DEF PO 0611* 0612 17316 106700 PO CLC PNCH 0613 17317 017311 LST3A DEF LIST3 PAGE 0015 #01 BASIC SYSTEM CONFIGURATER 0615* 0616* SYSTEM DUMP INSTRUCTIONS ADDRESS LIST 0617* 0618 17320 016732 LIST4 DEF PN8 0619 17321 016671 DEF POUT+1 0620 17322 016672 DEF POUT+2 0621 17323 016673 DEF POUT+3 0622* 0623 17324 017320 LST4A DEF LIST4 0625* 0626* SKIP DIFFERENCE IN WORDS BETWEEN PARALLEL AND 0627* SERIAL TELETYPE PACKAGES. 0628* 0629 17325 000000 BSS 22B (STOPI-SPNCH)-(TT.II-.PNCH) PAGE 0016 #02 BASIC SYSTEM HIGH SPEED PUNCH DRIVER 0002* 0003************** BASIC SYSTEM HIGH SPEED PUNCH DRIVER **************** 0004* 0005* OUTPUTS ASCII THROUGH THE HIGH SPEED PUNCH 0006* 0007* CALL: JSB 103B,I 0008* 0009* (A) = NUMBER OF CHARACTERS TO BE PUNCHED 0010* (B) = STARTING ADDRESS OF BUFFER 0011* 0012* 0013* IF (A) IS >= 0 THEN OUTPUT (A) CHARACTERS 0014* FOLLOWED BY A CARRIAGE RETURN-LINE FEED. 0015* 0016* IF (A) < 0 THEN PUNCH -(A) CHARACTERS ONLY. 0017* 0018* BUFFER CONTAINS ASCII CHARACTERS PACKED TWO PER WORD. 0019* 0020* IF (B) = 0 OK ENTRY (A) FEED FRAMES ARE PUNCHED. 0021* IF (A) = 0 OK ENTRY ONLY A CR/LF IS PUNCHED. 0022* 0023* 0024 17347 000000 .PNCH NOP 0025 17350 017636 PN1 JSB INIT INITIALIZE FOR PUNCHING 0026 17351 017622 PN2 JSB GETCH GET NEXT CHARACTER FROM BUFFER 0027 17352 027360 JMP PN6 BUFFER EMPTY 0028 17353 102600 PN3 OTA PNCH LOAD PUNCH BUFFER 0029 17354 103700 PN4 STC PNCH,C GIVE PUNCH COMMAND 0030 17355 102300 PN5 SFS PNCH 0031 17356 027355 JMP *-1 WAIT FOR PUNCH READY 0032 17357 027351 JMP PN2 GET NEXT CHARACTER 0033* 0034 17360 063671 PN6 LDA IORI 0035 17361 073633 STA FINSH+1 RESTORE IOR INSTRUCTION 0036 17362 106700 PN7 CLC PNCH TURN OFF PUNCH 0037 17363 002141 SEZ,CLE,RSS RECORD COMPLETE? CLEAR E 0038 17364 127347 JMP .PNCH,I E=0, OUTPUT COMPLETE 0039 17365 063655 LDA M2 E=1, APPEND CR AND LF 0040 17366 067672 LDB CRLFA LOAD ADDRESS OF CR AND LF 0041 17367 027350 JMP PN1 DO CR/LF PAGE 0017 #02 BASIC SYSTEM HIGH SPEED PHOTO READER DRIVER 0043* 0044*************** BASIC SYSTEM PHOTO READER DRIVER ****************** 0045* 0046* INPUTS TAPE RECORDS THROUGH THE PHOTO READER 0047* 0048* CALL: JSB 101B,I 0049* 0050* (A) = MAXIMUM NUMBER CHARS IN RECORD 0051* (B) = BUFFER STARTING ADDRESS 0052* 0053* ON RETURN (A)= -1 TOO MANY CHARACTERS IN RECORD 0054* (A)= -2 END OF TAPE DETECTED 0055* (A)= -3 NO TAPE OR GATE DOWN 0056* (A)= NUMBER OF CHARACTERS IN RECORD 0057* 0058* INPUT IS PACKED TWO CHARACTERS PER WORD IN BUFFER. 0059* 0060* ALL RECORDS MUST BE TERMINATED WITH A LINE FEED. 0061* THE NULL AND CARRIAGE RETURN CHARACTERS ARE IGNORED. 0062* 0063* THE LEFT ARROW(S) - DELETE THE PREVIOUS CHARACTER(S). 0064* 0065* AN ALT MODE ANYWHERE BEFORE THE LINE FEED DELETES ALL 0066* CHARACTERS IN THE RECORD. THE RECORD IS IGNORED. 0067* 0068* IF 10 NULL CHARACTERS ARE DETECTED BEFORE ANY CHARACTER, 0069* READING IS TERMINATED AND THE RETURN IS WITH A NULL RECORD. 0070* 0071* 0072 17370 000000 .HSPR NOP 0073 17371 073676 STA COUNT SAVE LENGTH 0074 17372 077674 STB BUFSA SAVE BUFFER STARTING ADDRESS 0075 17373 063653 PR1 LDA M11 0076 17374 073677 STA EOTC INITIALIZE EOT COUNTER 0077 17375 067674 LDB BUFSA 0078 17376 077675 STB BADDR INITIALIZE BUFFER POINTER 0079 17377 006400 CLB INITIALIZE CHARACTER COUNT 0080 17400 006003 PR2 SZB,RSS ANY NON-NULL CHARACTERS YET? 0081 17401 002002 SZA NO, SKIP IF NULL 0082 17402 027407 JMP PR3 0083 17403 037677 ISZ EOTC COUNT NULL 0084 17404 027407 JMP PR3 NOT YET 10 NULLS 0085 17405 063655 LDA M2 SET A TO INDICATE EOT (-2) 0086 17406 027422 JMP PR7 10 NULLS, TURN OFF READER & EXIT 0087 17407 103700 PR3 STC RDR,C REQUEST CHARACTER 0088 17410 002400 CLA SET DELAY COUNT 0089 17411 002007 PR4 INA,SZA,RSS DELAY = 6.4 * 65K = .41 SECONDS 0090 17412 027424 JMP PR8 (A)=0, NO TAPE OR GATE DOWN 0091 17413 102300 PR5 SFS RDR 0092 17414 027411 JMP PR4 NO FLAG, CHECK DELAY COUNT 0093 17415 103500 PR6 LIA RDR,C LOAD CHARACTER 0094 17416 017537 JSB PROCS PROCESS CHARACTER 0095 17417 027400 JMP PR2 GET NEXT CHARACTER 0096 17420 057655 CPB M2 RUBOUT IN THIS RECORD? 0097 17421 027373 JMP PR1 YES, IGNORE RECORD 0098 17422 106700 PR7 CLC RDR TURN OFF READER PAGE 0018 #02 BASIC SYSTEM HIGH SPEED PHOTO READER DRIVER 0099 17423 127370 JMP .HSPR,I 0100* 0101 17424 063654 PR8 LDA M3 LOAD 'NO TAPE' STATUS 0102 17425 027422 JMP PR7 PAGE 0019 #02 BASIC SYSTEM TELETYPE INPUT DRIVER 0104* 0105******************* BASIC SYSTEM TELETYPE INPUT DRIVER ************* 0106* 0107* INPUTS FROM AN ASR 33/35 THROUGH THE 0108* TELETYPE CONTROL BOARD FROM TAPE OR KEYBOARD 0109* 0110* CALL: JSB 104B,I 0111* 0112* (A) = MAXIMUM NUMBER CHARS IN RECORD 0113* (B) = BUFFER STARTING ADDRESS 0114* 0115* RETURN: (A)= -1 TOO MANY CHARACTERS IN RECORD 0116* (A)= -2 RECORD DELETED 0117* (A)= NUMBER OF CHARACTERS IN RECORD 0118* 0119* 0120* THE CHARACTERS ARE PACKED TWO TO A WORD IN THE BUFFER 0121* 0122* ALL RECORDS MUST BE TERMINATED WITH A LINE FEED 0123* THE NULL AND CARRIAGE RETURN CHARACTERS ARE IGNORED 0124* 0125* THE LEFT ARROW(S) - DELETE THE PREVIOUS CHARACTER(S). 0126* 0127* AN ALT MODE ANYWHERE BEFORE THE LINE FEED DELETES ALL 0128* CHARACTERS IN THE RECORD. THE RECORD IS IGNORED. 0129* 0130* 0131 17426 000000 TTY.I NOP 0132 17427 073676 STA COUNT SAVE LENGTH 0133 17430 077675 STB BADDR SET BUFFER ADDRESS 0134 17431 006400 CLB SET CHARACTER COUNTER 0135 17432 063444 LDA IMODE 0136 17433 102600 TI.1 OTA TTY SET TTY TO INPUT MODE 0137 17434 103700 TI.2 STC TTY,C REQUEST CHARACTER 0138 17435 102300 SFS TTY 0139 17436 027435 JMP *-1 WAIT FOR CHARACTER INPUT 0140 17437 102500 TI.3 LIA TTY LOAD CHARACTER 0141 17440 017537 JSB PROCS PROCESS CHARACTER 0142 17441 027434 JMP TI.2 GET NEXT CHARACTER 0143 17442 106700 TI.4 CLC TTY 0144 17443 127426 JMP TTY.I,I RECORD COMPLETE RETURN 0145* 0146 17444 160000 IMODE OCT 160000 LIST ONLY (INPUT-ASR 35) PAGE 0020 #02 BASIC SYSTEM TELETYPE OUTPUT DRIVER 0148* 0149*************** BASIC SYSTEM TELETYPE OUTPUT DRIVER **************** 0150* 0151* OUTPUTS ASCII RECORDS THROUGH THE TELETYPE PRINTER, 0152* PUNCH, OR BOTH. 0153* 0154* CALL: JSB 102B,I 0155* 0156* (A) = NUMBFR OF CHARACTERS TO BE OUTPUT 0157* (B) = STARTING ADDRESS OF BUFFER 0158* 0159* 0160* IF (A) IS >= 0 THEN OUTPUT (A) CHARACTERS 0161* FOLLOWED BY A CARRIAGE RETURN-LINE FEED. 0162* 0163* IF (A) < 0 THEN PUNCH -(A) CHARACTERS ONLY. 0164* 0165* BUFFER CONTAINS ASCII CHARACTERS PACKED TWO PER WORD. 0166* 0167* IF (B) = 0 OK ENTRY OUTPUT (A) FEED FRAMES. 0168* IF (A) = 0 OK ENTRY ONLY A CR/LF IS OUTPUT. 0169* 0170* 0171 17445 000000 TTY.P NOP 0172 17446 017636 JSB INIT INITIALIZE AND SETUP 0173 17447 060000 TP.1 LDA TTY SAVE TTY INTERRUPT 0174 17450 073517 STA TEMPI INSTRUCTION 0175 17451 060127 LDA LISTR 0176 17452 050126 CPA PLSTR PLIST? 0177 17453 063515 LDA PMODE YES 0178 17454 050130 CPA TLSTR LIST? 0179 17455 063516 LDA LMODE YES 0180 17456 102600 OTA TTY SET TTY TO OUTPUT MODE 0181 17457 074000 TP.2 STB TTY PUT NOP INTO INTERRUPT CELL 0182 17460 017622 TP.3 JSB GETCH GET NEXT CHARACTER 0183 17461 027502 JMP TP.8 BUFFER EMPTY 0184 17462 102600 TP.4 OTA TTY LOAD TTY BOARD BUFFER 0185 17463 103700 STC TTY,C GIVE PRINT COMMAND 0186 17464 102300 TP.5 SFS TTY WAIT FOR 0187 17465 027464 JMP *-1 FLAG 0188 17466 063517 LDA TEMPI 0189 17467 002003 SZA,RSS IS INTERRUPT ENABLED? 0190 17470 027460 JMP TP.3 NO 0191* 0192* THIS SECTION CHECKS IF A CHARACTER HAS BEEN TYPED FROM THE 0193* KEYBOARD DURING OUTPUT ON TELETYPE. 0194* 0195 17471 102500 TP.6 LIA TTY LOAD FROM BOARD BUFFER 0196 17472 003000 CMA FIRST 8 BITS SHOULD BE 1'S 0197 17473 013666 AND B177 0198 17474 002003 SZA,RSS 0199 17475 027460 JMP TP.3 NO KEY STRUCK, CONTINUE 0200 17476 063671 LDA IORI 0201 17477 073633 STA FINSH+1 RESTORE IOR INSTRUCTION 0202 17500 106700 TP.7 CLC TTY TURN OFF TTY 0203 17501 114105 JSB I.STP,I GO TO STOP PAGE 0021 #02 BASIC SYSTEM TELETYPE OUTPUT DRIVER 0204 17502 106700 TP.8 CLC TTY TURN OFF TTY 0205 17503 063517 LDA TEMPI 0206 17504 053536 CPA TT.II IS INTERRUPT MODE SET? 0207 17505 017527 JSB I.ON YES, RE-ENABLE KEYBOARD 0208 17506 063671 LDA IORI 0209 17507 073633 STA FINSH+1 RESTORE IOR INSTRUCTION 0210 17510 002141 SEZ,CLE,RSS RECORD COMPLETE? CLEAR E 0211 17511 127445 JMP TTY.P,I E=0, RECORD OUTPUT COMPLETE 0212 17512 063655 LDA M2 E=1, ADD A RETURN AND LINE FEED 0213 17513 067672 LDB CRLFA LOAD ADDRESS OF CR AND LF 0214 17514 027446 JMP TTY.P+1 DO CR/LF 0215* 0216 17515 110000 PMODE OCT 110000 PUNCH ONLY (ASR 35) 0217 17516 120000 LMODE OCT 120000 LIST ONLY (ASR 35) 0218* 0219 17517 000000 TEMPI NOP 0221* 0222* THIS ROUTINE TURNS OFF THE TELETYPE INTERRUPT MODE 0223* 0224 17520 000000 I.OFF NOP 0225 17521 002400 CLA 0226 17522 070000 TI.5 STA TTY SET NOP INTO INTERRUPT CELL 0227 17523 106700 CLC TTY TURN OFF READ MODE 0228 17524 000000 R.OFF NOP SET TO CLC RDR IF RDR EXISTS 0229 17525 000000 P.OFF NOP SET TO CLC PNCH IF PNCH EXISTS 0230 17526 127520 JMP I.OFF,I RETURN 0232* 0233* THIS ROUTINE TURNS ON THE TELETYPE INTERRUPT MODE 0234* 0235 17527 000000 I.ON NOP 0236 17530 063536 LDA TT.II 0237 17531 070000 TI.6 STA TTY SET JSB INTO INTERRUPT CELL 0238 17532 063444 LDA IMODE 0239 17533 102600 TI.7 OTA TTY SET TTY TO INPUT MODE 0240 17534 103700 STC TTY,C SET TTY TO LOOK FOR INPUT 0241 17535 127527 JMP I.ON,I RETURN 0242* 0243 17536 114105 TT.II JSB I.STP,I INTERRUPT LOCATION CODE PAGE 0022 #02 CHARACTER PROCESSING SECTION FOR INPUT 0245* 0246* CHARACTER PROCESSING SECTION FOR TTY AND PHOTOREADER 0247* 0248* CALL: JSB PROCS 0249* (A) HOLDS CHARACTER 0250* 0251* RETURN: P+1 - GET NEXT CHARACTER 0252* P+2 - RECORD COMPLETE 0253* 0254 17537 000000 PROCS NOP 0255 17540 013666 AND B177 STRIP BIT 7 0256 17541 002003 SZA,RSS NULL? 0257 17542 127537 JMP PROCS,I YES, IGNORE 0258 17543 053656 CPA .2 NO, CONTROL B ? 0259 17544 127537 JMP PROCS,I YES, IGNORE 0260 17545 053657 CPA .3 NO, CONTROL C ? 0261 17546 127537 JMP PROCS,I YES, IGNORE 0262 17547 053660 CPA LNFD NO, LINE FEED? 0263 17550 127537 JMP PROCS,I YES, IGNORE 0264 17551 053666 CPA B177 NO, RUBOUT? 0265 17552 127537 JMP PROCS,I YES, IGNORE 0266 17553 053665 CPA AMODE NO, ALT MODE? 0267 17554 027616 JMP CMPLT-1 YES, CANCEL RECORD 0268 17555 053664 CPA OMODE NO, OLD ALT MODE? 0269 17556 027616 JMP CMPLT-1 YES, CANCEL RECORD 0270 17557 053662 CPA EMODE NO, ESCAPE MODE? 0271 17560 027616 JMP CMPLT-1 YES, CANCEL RECORD 0272 17561 053661 CPA CRTN NO, CARRIAGE RETURN? 0273 17562 027617 JMP CMPLT YES, COMPLETE RECORD 0274 17563 057676 CPB COUNT NO, BUFFER OVERFLOW? 0275 17564 007400 CCB YES, LOOK FOR CARRIAGE RETURN 0276 17565 006020 SSB LOOKING FOR CARRIAGE RETURN? 0277 17566 127537 JMP PROCS,I YES, RETURN 0278 17567 053663 CPA LFTAR NO, LEFT ARROW? 0279 17570 027602 JMP DLETE YES, DELETE PREVIOUS CHARACTER 0280 17571 006014 SLB,INB NO, CHECK ODD/EVEN FLAG 0281 17572 027576 JMP PROC2 B0 = 0, EVEN CHARACTER 0282 17573 001727 PROC1 ALF,ALF B0 = 1, ODD CHARACTER 0283 17574 173675 STA BADDR,I RECORD HIGH CHARACTER 0284 17575 127537 JMP PROCS,I 0285 17576 133675 PROC2 IOR BADDR,I PACK TWO CHARACTERS 0286 17577 173675 STA BADDR,I PUT IN BUFFER 0287 17600 037675 ISZ BADDR INDEX BUFFER ADDRESS POINTER 0288 17601 127537 JMP PROCS,I PAGE 0023 #02 CHARACTER PROCESSING SECTION FOR INPUT 0290* 0291* THIS SECTION DELETES PREVIOUS CHARACTER(S) 0292* 0293 17602 006003 DLETE SZB,RSS IS BUFFER EMPTY? 0294 17603 127537 JMP PROCS,I YES, RETURN 0295 17604 003400 CCA NO 0296 17605 044000 ADB 0 DECREMENT CHARACTER COUNT 0297 17606 006011 SLB,RSS LOW CHARACTER? 0298 17607 127537 JMP PROCS,I YES 0299 17610 043675 ADA BADDR NO, DECREMENT 0300 17611 073675 STA BADDR ADDRESS POINTER 0301 17612 163675 LDA BADDR,I GET LAST TWO CHARACTERS 0302 17613 001727 ALF,ALF 0303 17614 013666 AND B177 DELETE LAST CHARACTER 0304 17615 027573 JMP PROC1 STORE NEXT-TO-LAST CHARACTER 0305* 0306* THIS SECTION PUTS COUNT IN A AND RETURNS TO P+2 0307* 0308 17616 067655 LDB M2 SET DELETE FLAG 0309 17617 060001 CMPLT LDA 1 PUT CHARACTER COUNT IN A 0310 17620 037537 ISZ PROCS 0311 17621 127537 JMP PROCS,I 0313* 0314* SUBROUTINE GETCH 0315* 0316* RETURN IO P+1 ON EMPTY BUFFER 0317* IF THE BUFFER IS NOT EMPTY, ELSE 0318* RETURN TO P+2 WITH CHARACTER IN (A). 0319* 0320 17622 000000 GETCH NOP 0321 17623 057676 CPB COUNT 0322 17624 127622 JMP GETCH,I BUFFER EMPTY, P+1 RETURN 0323 17625 163675 LDA BADDR,I GET TWO CHARACTERS 0324 17626 006011 SLB,RSS 0325 17627 001727 ALF,ALF B EVEN, POSITION CHARACTER RIGHT 0326 17630 006014 SLB,INB CHECK O/E, AND INDEX COUNT 0327 17631 037675 ISZ BADDR B ODD, INCREMENT ADDRESS POINTER 0328 17632 013666 FINSH AND B177 STRIP LEFT CHARACTER 0329 17633 033667 IOR B200 ADD BIT 7 0330 17634 037622 ISZ GETCH 0331 17635 127622 JMP GETCH,I RETURN TO P+2 PAGE 0024 #02 0333* 0334* INITIALIZES FOR OUTPUTTING A RECORD 0335* 0336 17636 000000 INIT NOP 0337 17637 002320 CCE,SSA SET E=1, CHECK FOR (A) < 0 0338 17640 003104 CMA,CLE,INA SET (E) = 0, (A) = -(A) 0339 17641 073676 STA COUNT SAVE CHARACTER COUNT 0340 17642 077675 STB BADDR SET BUFFER STARTING ADDRESS 0341 17643 002002 SZA 0342 17644 006002 SZB LEADER/TRAILER ONLY? 0343 17645 027651 JMP *+4 NO 0344 17646 063670 LDA CLAI YES, (B) = 0 0345 17647 073633 STA FINSH+1 SET CLEAR INSTRUCTION 0346 17650 000040 CLE SET NO CR/LF 0347 17651 006400 CLB INITIALIZE OUTPUT COUNT 0348 17652 127636 JMP INIT,I PAGE 0025 #02 DATA, ADDRESSES, ETC. 0350* 0351* COMMON DRIVER CONSTANTS AND ADDRESSES 0352* 0353 17653 177765 M11 DEC -11 0354 17654 177775 M3 DEC -3 0355 17655 177776 M2 DEC -2 0356 17656 000002 .2 DEC 2 0357 17657 000003 .3 DEC 3 0358 17660 000012 LNFD OCT 12 LINE FEED 0359 17661 000015 CRTN OCT 15 CARRIAGE RETURN 0360 17662 000033 EMODE OCT 33 ESCAPE 0361 17663 000137 LFTAR OCT 137 LEFT ARROW 0362 17664 000175 OMODE OCT 175 OBSOLETE ALT MODE 0363 17665 000176 AMODE OCT 176 ALT MODE 0364 17666 000177 B177 OCT 177 RUBOUT 0365 17667 000200 B200 OCT 200 0366 17670 002400 CLAI CLA 0367 17671 033667 IORI IOR B200 ADD IN BIT 7 0368* 0369 17672 017673 CRLFA DEF CRLF 0370 17673 106612 CRLF OCT 106612 0371* 0372 17674 000000 BUFSA NOP INITIAL BUFFER ADDRESS 0373 17675 000000 BADDR NOP CURRENT BUFFER ADDRESS 0374 17676 000000 COUNT NOP HOLDS RECORD LENGTH 0375 17677 000000 EOTC NOP END-OF-TAPE COUNTER 0376* 0377* BASE PAGE REFERENCE ENTRIES 0378* 0379 00101 ORG 101B 0380 00101 100105 DEF I.STP,I READER LINK INITIALIZED TO STOP 0381 00102 017445 DEF TTY.P TTY OUTPUT ENTRY ADDRESS 0382 00103 100102 DEF 102B,I PUNCH LINK INITIALIZED TO TTY 0383 00104 017426 DEF TTY.I TTY INPUT ENTRY ADDRESS 0384 00105 000000 I.STP NOP LINK TO STOP ROUTINE 0385 00106 000000 LWBM NOP LAST WORD OF USER SPACE 0386 00107 000000 NOP 0387 00110 000135 FWAM DEF 135B FIRST WORD OF AVAILABLE MEMORY 0388 00111 017425 LWAM DEF TTY.I-1 LAST WORD OF AVAILABLE MEMORY 0389* 0390 00123 ORG 123B 0391 00123 017520 IMOFF DEF I.OFF DISABLE KEYBOARD INTERRUPT 0392 00124 017527 IMON DEF I.ON SET KEYBOARD INTERRUPT 0393 00125 017424 TLINK DEF I.TTY+2000B TTY INPUT INTERRUPT LINK 0394 00126 100103 PLSTR DEF 103B,I PLIST OUTPUT ADDRESS 0395 00127 100102 LISTR DEF 102B,I LIST DEVICE LINK 0396 00130 100102 TLSTR DEF 102B,I LIST OUTPUT ADDRESS 0397* 0398 00117 SYMTA EQU 117B 0399 00131 IOBFA EQU 131B BUFFER ADDRESS 0400 00134 SBUFA EQU 134B SYNTAX BUFFER ADDRESS 0401 00000 RDR EQU 0 0402 00000 PNCH EQU 0 0403 00000 TTY EQU 0 0404 00001 TTYI EQU TTY+1 PAGE 0026 #03 SERIAL TELETYPE PACKAGE 0002* 0003* MODIFY PBS FOR SERIAL TELETYPE 0004* 0005 15073 ORG 15073B 0006* 0007 15073 063653 SRIAL LDA SM11 SET 0008 15074 067302 LDB LST5A TTY PUNCH 0009 15075 117257 JSB SETIA,I ADDRESSES 0010 15076 137260 ISZ IOADA,I INCREMENT SELECT CODE 0011 15077 063262 LDA SM5 SET 0012 15100 067310 LDB LST6A TTY READER 0013 15101 117257 JSB SETIA,I ADDRESSES 0014 15102 063263 LDA TT.IS SET INTERRUPT 0015 15103 070001 TI6 STA TTYI CELL 0016* 0017 15104 063241 LDA TTYPI SET OUTPUT 0018 15105 173221 STA COR1A,I 0019 15106 173223 STA COR3A,I TELETYPE CALLS 0020 15107 173224 STA DMP1A,I 0021 15110 173226 STA GETAA,I TO SERIAL 0022 15111 173230 STA GET2A,I 0023 15112 173231 STA CRL1A,I DRIVER 0024* 0025 15113 063243 LDA STF0 SET INPUT 0026 15114 173222 STA COR2A,I 0027 15115 173227 STA GET1A,I TELETYPE CALLS 0028 15116 037222 ISZ COR2A 0029 15117 037227 ISZ GET1A TO SERIAL 0030 15120 063242 LDA TTYII 0031 15121 173222 STA COR2A,I DRIVER 0032 15122 173227 STA GET1A,I 0033 15123 037222 ISZ COR2A 0034 15124 037227 ISZ GET1A 0035 15125 063244 LDA CLF0 0036 15126 173222 STA COR2A,I 0037 15127 173227 STA GET1A,I 0038* 0039 15130 002400 CLA CLEAR 0040 15131 173232 STA TP9A,I 0041 15132 037232 ISZ TP9A BUFFERED TELETYPE 0042 15133 173232 STA TP9A,I 0043 15134 173233 STA TP10A,I INSTRUCTIONS 0044 15135 173225 STA DMP2A,I 0045 15136 037225 ISZ DMP2A 0046 15137 173225 STA DMP2A,I 0047* 0048 15140 063245 LDA STOUA SET FOR POSSIBLE 0049 15141 173234 STA TOUTA,I TTY PUNCHING 0050* 0051 15142 063316 LDA LST7A USE READER AND PUNCH 0052 15143 173237 STA PHRLA,I DRIVERS IN 0053 15144 063324 LDA LST8A SERIAL TELETYPE 0054 15145 173240 STA PNCLA,I PACKAGE PAGE 0027 #03 SERIAL TELETYPE PACKAGE 0056 15146 063246 LDA ROFFA PREPARE TO SET 0057 15147 173217 STA PHR1A,I INTERRUPT-OFF INSTRUCTIONS 0058 15150 063247 LDA POFFA IN SERIAL TELETYPE 0059 15151 173220 STA NOR1A,I PACKAGE 0060* 0061 15152 063250 LDA SLWMT SET SERIAL 0062 15153 070111 STA LWAM 0063 15154 063251 LDA SLWMR TELETYPE VALUES 0064 15155 173235 STA LWMRA,I 0065 15156 063252 LDA SLWMP IN LWAM CONSTANTS 0066 15157 173236 STA LWMPA,I 0067 15160 063253 LDA STTYP 0068 15161 070102 STA 102B 0069 15162 063254 LDA STTYI 0070 15163 070104 STA 104B 0071 15164 063255 LDA SIOFF 0072 15165 070123 STA IMOFF 0073 15166 063256 LDA SION 0074 15167 070124 STA IMON 0075* 0076* OVERLAY PARALLEL DRIVERS WITH SERIAL DRIVERS 0077* 0078 15170 163264 SRIA1 LDA MOVES,I MOVE A 0079 15171 173265 STA DESTS,I WORD 0080 15172 037264 ISZ MOVES BUMP 0081 15173 037265 ISZ DESTS POINTERS 0082 15174 037266 ISZ SMCNT SERIAL DRIVERS MOVED? 0083 15175 027170 JMP SRIA1 NO 0084 15176 127261 JMP PHRDA,I YES, RETURN TO MAIN SEQUENCE 0086* 0087* SUBROUTINE (STOUT) TO OUTPUT ONE CHARACTER TO THE 0088* TELETYPE. CHARACTER IS IN (A). (B) IS NOT ALTERED. 0089* 0090 15177 000000 STOUT NOP 0091 15200 073455 STA TCHAR 0092 15201 063653 LDA SM11 SET BIT 0093 15202 073517 STA BCNT COUNTER 0094 15203 063455 LDA TCHAR 0095 15204 001000 ALS ADD 0096 15205 033520 IOR B3000 CONTROL BITS 0097 15206 102700 TP7 STC TTY TURN ON TELETYPE 0098 15207 103600 TP8 OTA TTY,C OUTPUT BIT 0099 15210 001300 RAR POSITION NEXT BIT 0100 15211 102300 TP9 SFS TTY WAIT FOR 0101 15212 027211 JMP *-1 COMPLETION FLAG 0102 15213 037517 ISZ BCNT DONE? 0103 15214 027207 JMP TP8 NO 0104 15215 106700 TP10 CLC TTY YES, TURN OFF TELETYPE 0105 15216 127177 JMP STOUT,I PAGE 0028 #03 SERIAL TELETYPE PACKAGE 0107* 0108* MODIFICATION ADDRESSES 0109* 0110 15217 016364 PHR1A DEF PHRD1 0111 15220 016402 NOR1A DEF NORD1 0112 15221 016424 COR1A DEF CORA1 0113 15222 016427 COR2A DEF CORA2 0114 15223 016453 COR3A DEF CORA3 0115 15224 016551 DMP1A DEF DUMP1 0116 15225 016552 DMP2A DEF DUMP2 0117 15226 016572 GETAA DEF GETAD+1 0118 15227 016575 GET1A DEF GETA1 0119 15230 016607 GET2A DEF GETA2 0120 15231 016644 CRL1A DEF CRLF1 0121 15232 016700 TP9A DEF TP.9-1 0122 15233 016731 TP10A DEF TP.10 0123 15234 017245 TOUTA DEF PNCHO 0124 15235 017247 LWMRA DEF LWAMR 0125 15236 017250 LWMPA DEF LWAMP 0126 15237 017310 PHRLA DEF LST2A 0127 15240 017317 PNCLA DEF LST3A 0128* 0129* MODIFICATION INSTRUCTIONS 0130* 0131 15241 017466 TTYPI JSB .TTYP 0132 15242 017404 TTYII JSB .TTYI 0133 15243 102100 STF0 STF 0 0134 15244 103100 CLF0 CLF 0 0135 15245 015177 STOUA DEF STOUT 0136 15246 073524 ROFFA STA .ROFF 0137 15247 073525 POFFA STA .POFF 0138 15250 017403 SLWMT DEF .TTYI-1+2000B LWAM OPTIONS 0139 15251 017345 SLWMR DEF HSPR-1+2000B FOR SERIAL 0140 15252 017324 SLWMP DEF SPNCH-1+2000B TELETYPE 0141 15253 017466 STTYP DEF .TTYP+2000B 0142 15254 017404 STTYI DEF .TTYI+2000B 0143 15255 017521 SIOFF DEF .IOFF+2000B 0144 15256 017531 SION DEF .ION+2000B 0145* 0146* COMMUNICATION LINKS 0147* 0148 15257 016646 SETIA DEF SETI 0149 15260 017244 IOADA DEF IOADR 0150 15261 016353 PHRDA DEF PHRDR 0151* 0152* LOCAL CONSTANTS AND ADDRESSES 0153* 0154 15262 177773 SM5 DEC -5 0155 15263 114125 TT.IS JSB TLINK,I TTY INTERRUPT INSTRUCTION 0156 15264 015325 MOVES DEF SPNCH 0157 15265 017325 DESTS DEF SPNCH+2000B 0158 15266 177566 SMCNT ABS SPNCH-SPROC PAGE 0029 #03 SERIAL TELETYPE PACKAGE 0160* 0161* TELETYPE OUTPUT INSTRUCTION LIST 0162* 0163 15267 015476 LIST5 DEF TP2-1 0164 15270 015477 DEF TP2 0165 15271 015501 DEF TP2+2 0166 15272 015505 DEF TP3-1 0167 15273 015506 DEF TP3 0168 15274 015456 DEF TP5 0169 15275 015523 DEF TP6 0170 15276 015206 DEF TP7 0171 15277 015207 DEF TP8 0172 15300 015211 DEF TP9 0173 15301 015215 DEF TP10 0174* 0175 15302 015267 LST5A DEF LIST5 0176* 0177* TELETYPE INPUT INSTRUCTION LIST 0178* 0179 15303 015426 LIST6 DEF TI2 0180 15304 015437 DEF TI3 0181 15305 015462 DEF TI4 0182 15306 015522 DEF TI5 0183 15307 015103 DEF TI6 0184* 0185 15310 015303 LST6A DEF LIST6 0186* 0187* PHOTOREADER INSTRUCTION LIST 0188* 0189 15311 017365 LIST7 DEF PR.3+2000B 0190 15312 017371 DEF PR.5+2000B 0191 15313 017373 DEF PR.6+2000B 0192 15314 017400 DEF PR.7+2000B 0193 15315 017307 DEF RO 0194* 0195 15316 015311 LST7A DEF LIST7 0196* 0197* HIGH-SPEED PUNCH INSTRUCTION LIST 0198* 0199 15317 017331 LIST8 DEF PN.2+2000B 0200 15320 017332 DEF PN.3+2000B 0201 15321 017333 DEF PN.4+2000B 0202 15322 017340 DEF PN.6+2000B 0203 15323 017316 DEF PO 0204* 0205 15324 015317 LST8A DEF LIST8 PAGE 0030 #03 BASIC SYSTEM HIGH SPEED PUNCH DRIVER 0207* 0208************** BASIC SYSTEM HIGH SPEED PUNCH DRIVER ***************- 0209* 0210* OUTPUTS ASCII THROUGH THE HIGH SPEED PUNCH 0211* 0212* CALL: JSB 103B,I 0213* 0214* (A) = NUMBER OF CHARACTERS TO BE PUNCHED 0215* (B) = STARTING ADDRESS OF BUFFER 0216* 0217* 0218* IF (A) IS >= 0 THEN OUTPUT (A) CHARACTERS 0219* FOLLOWED BY A CARRIAGE RETURN-LINE FEED. 0220* 0221* IF (A) < 0 THEN PUNCH -(A) CHARACTERS ONLY. 0222* 0223* BUFFER CONTAINS ASCII CHARACTERS PACKED TWO PER WORD. 0224* 0225* IF (B) = 0 OK ENTRY (A) FEED FRAMES ARE PUNCHED. 0226* IF (A) = 0 OK ENTRY ONLY A CR/LF IS PUNCHED. 0227* 0228* 0229 15325 000000 SPNCH NOP 0230 15326 017636 JSB SINIT INITIALIZE FOR PUNCHING 0231 15327 017622 PN.1 JSB SGTCH GET NEXT CHARACTER FROM BUFFER 0232 15330 027336 JMP PN.5 BUFFER EMPTY 0233 15331 102600 PN.2 OTA PNCH LOAD PUNCH BUFFER 0234 15332 103700 PN.3 STC PNCH,C GIVE PUNCH COMMAND 0235 15333 102300 PN.4 SFS PNCH 0236 15334 027333 JMP *-1 WAIT FOR PUNCH READY 0237 15335 027327 JMP PN.1 GET NEXT CHARACTER 0238* 0239 15336 063671 PN.5 LDA SIORI 0240 15337 073633 STA SFNSH+1 RESTORE IOR INSTRUCTION 0241 15340 106700 PN.6 CLC PNCH TURN OFF PUNCH 0242 15341 002141 SEZ,CLE,RSS RECORD COMPLETE? CLEAR E 0243 15342 127325 JMP SPNCH,I E=0, OUTPUT COMPLETE 0244 15343 063655 LDA SM2 E=1, APPEND CR AND LF 0245 15344 067672 LDB SCRLA LOAD ADDRESS OF CR AND LF 0246 15345 027326 JMP SPNCH+1 DO CR/LF PAGE 0031 #03 BASIC SYSTEM HIGH SPEED PHOTO READER DRIVER 0248* 0249*************** BASIC SYSTEM PHOTO READER DRIVER ****************** 0250* 0251* INPUTS TAPE RECORDS THROUGH THE PHOTO READER 0252* 0253* CALL: JSB 101B,I 0254* 0255* (A) = MAXIMUM NUMBER CHARS IN RECORD 0256* (B) = BUFFER STARTING ADDRESS 0257* 0258* ON RETURN (A)= -1 TOO MANY CHARACTERS IN RECORD 0259* (A)= -2 END OF TAPE DETECTED 0260* (A)= -3 NO TAPE OR GATE DOWN 0261* (A)= NUMBER OF CHARACTERS IN RECORD 0262* 0263* INPUT IS PACKED TWO CHARACTERS PER WORD IN BUFFER. 0264* 0265* ALL RECORDS MUST BE TERMINATED WITH A LINE FEED. 0266* THE NULL AND CARRIAGE RETURN CHARACTERS ARE IGNORED. 0267* 0268* THE LEFT ARROW(S) - DELETE THE PREVIOUS CHARACTER(S). 0269* 0270* AN ALT MODE ANYWHERE BEFORE THE LINE FEED DELETES ALL 0271* CHARACTERS IN THE RECORD. THE RECORD IS IGNORED. 0272* 0273* IF 10 NULL CHARACTERS ARE DETECTED BEFORE ANY CHARACTER, 0274* READING IS TERMINATED AND THE RETURN IS WITH A NULL RECORD. 0275* 0276* 0277 15346 000000 HSPR NOP 0278 15347 073676 STA SCONT SAVE LENGTH 0279 15350 077674 STB SBFSA SAVE BUFFER STARTING ADDRESS 0280 15351 063653 PR.1 LDA SM11 0281 15352 073677 STA SEOTC INITIALIZE EOT COUNTER 0282 15353 067674 LDB SBFSA 0283 15354 077675 STB SBDDR INITIALIZE BUFFER POINTER 0284 15355 006400 CLB INITIALIZE CHARACTER COUNT 0285 15356 006003 PR.2 SZB,RSS ANY NON-NULL CHARACTERS YET? 0286 15357 002002 SZA NO, SKIP IF NULL 0287 15360 027365 JMP PR.3 0288 15361 037677 ISZ SEOTC COUNT NULL 0289 15362 027365 JMP PR.3 NOT 10 NULLS 0290 15363 063655 LDA SM2 SET A TO INDICATE EOT (-2) 0291 15364 027400 JMP PR.7 10 NULLS, TURN OFF READER & EXIT 0292 15365 103700 PR.3 STC RDR,C REQUEST CHARACTER 0293 15366 002400 CLA SET DELAY COUNT 0294 15367 002007 PR.4 INA,SZA,RSS DELAY = 6.4 * 65K = .41 SECONDS 0295 15370 027402 JMP PR.8 (A)=0, NO TAPE OR GATE DOWN 0296 15371 102300 PR.5 SFS RDR 0297 15372 027367 JMP PR.4 NO FLAG, CHECK DELAY COUNT 0298 15373 103500 PR.6 LIA RDR,C LOAD CHARACTER 0299 15374 017537 JSB SPROC PROCESS CHARACTER 0300 15375 027356 JMP PR.2 GET NEXT CHARACTER 0301 15376 057655 CPB SM2 RUBOUT IN THIS RECORD? 0302 15377 027351 JMP PR.1 YES, IGNORE RECORD 0303 15400 106700 PR.7 CLC RDR TURN OFF READER PAGE 0032 #03 BASIC SYSTEM HIGH SPEED PHOTO READER DRIVER 0304 15401 127346 JMP HSPR,I 0305* 0306 15402 063654 PR.8 LDA SM3 LOAD 'NO TAPE' STATUS 0307 15403 027400 JMP PR.7 PAGE 0033 #03 BASIC SYSTEM TELETYPE INPUT DRIVER 0309* 0310******************* BASIC SYSTEM TELETYPE INPUT DRIVER ************* 0311* 0312* INPUTS FROM AN ASR 33/35 THROUGH THE 0313* TELETYPE CONTROL BOARD FROM TAPE OR KEYBOARD. 0314* 0315* CALL: JSB 104B,I 0316* 0317* (A) = MAXIMUM NUMBER CHARS IN RECORD 0318* (B) = BUFFER STARTING ADDRESS 0319* 0320* RETURN: (A)= -1 TOO MANY CHARACTERS IN RECORD 0321* (A)= -2 RECORD DELETED 0322* (A)= NUMBER OF CHARACTERS IN RECORD 0323* 0324* 0325* THE CHARACTERS ARE PACKED TWO TO A WORD IN THE BUFFER. 0326* 0327* ALL RECORDS MUST BE TERMINATED WITH A LINE FEED. 0328* THE NULL AND CARRIAGE RETURN CHARACTERS ARE IGNORED. 0329* 0330* THE LEFT ARROW(S) - DELETE THE PREVIOUS CHARACTER(S). 0331* 0332* AN ALT MODE ANYWHERE BEFORE THE LINE FEED DELETES ALL 0333* CHARACTERS IN THE RECORD. THE RECORD IS IGNORED. 0334* 0335* 0336 15404 000000 .TTYI NOP 0337 15405 073676 STA SCONT SAVE LENGTH 0338 15406 077675 STB SBDDR SAVE BUFFER ADDRESS 0339 15407 006400 CLB ZERO CHARACTER COUNT 0340 15410 063456 LDA TP5 SET 0341 15411 073434 STA OUTB ECHO 0342 15412 017457 TI1 JSB TTINT INITIALIZE FOR INPUT CHARACTER 0343 15413 063454 LDA BITS WAIT FOR 0344 15414 002002 SZA CHARACTER 0345 15415 027413 JMP *-2 COMPLETE 0346 15416 063455 LDA TCHAR PROCESS 0347 15417 017537 JSB SPROC CHARACTER 0348 15420 027412 JMP TI1 GET NEXT CHARACTER 0349 15421 006400 CLB CLEAR 0350 15422 077434 STB OUTB ECHO 0351 15423 127404 JMP .TTYI,I PAGE 0034 #03 BASIC SYSTEM TELETYPE INPUT DRIVER 0353* 0354* THIS SECTION PROCESSES EACH BIT AS IT BECOMES AVAILABLE. 0355* RETURN THROUGH 105B IF THE INTERRUPT MODE FLAG IS SET UPON 0356* CHARACTER COMPLETION. 0357* 0358 15424 000000 I.TTY NOP 0359 15425 073453 STA ATEMP SAVE (A) 0360 15426 103501 TI2 LIA TTYI,C MERGE 0361 15427 033455 IOR TCHAR NEW BIT 0362 15430 001300 RAR INTO 0363 15431 073455 STA TCHAR CHARACTER 0364 15432 001727 ALF,ALF POSITION BIT 0365 15433 001222 RAL,RAL FOR ECHO 0366 15434 000000 OUTB NOP OUTPUT INSTRUCTION 0367 15435 037454 ISZ BITS BIT 11? 0368 15436 027451 JMP EXIT NO 0369 15437 106701 TI3 CLC TTYI YES 0370 15440 063455 LDA TCHAR ALIGN 0371 15441 001723 ALF,RAR COMPLETED 0372 15442 073455 STA TCHAR CHARACTER 0373 15443 063536 LDA STOPI STOP FLAG 0374 15444 002003 SZA,RSS SET? 0375 15445 027451 JMP EXIT NO 0376 15446 063671 LDA SIORI YES, RESTORE 0377 15447 073633 STA SFNSH+1 IOR INSTRUCTION 0378 15450 114105 JSB I.STP,I GO TO STOP 0379 15451 063453 EXIT LDA ATEMP RESTORE (A) 0380 15452 127424 JMP I.TTY,I 0381* 0382 15453 000000 ATEMP NOP 0383 15454 000000 BITS NOP 0384 15455 000000 TCHAR NOP 0385* 0386 15456 102600 TP5 OTA TTY ECHO BIT INSTRUCTION 0388* 0389* THIS ROUTINE INITIALIZES THE SERIAL TELETYPE INPUT ROUTINE 0390* AND SETS TELETYPE TO ACCEPT INPUT. 0391* 0392 15457 000000 TTINT NOP 0393 15460 063653 LDA SM11 SET 0394 15461 073454 STA BITS BIT COUNTER 0395 15462 103701 TI4 STC TTYI,C DEMAND INPUT 0396 15463 002400 CLA ZERO OUT 0397 15464 073455 STA TCHAR CHARACTER REPOSITORY 0398 15465 127457 JMP TTINT,I PAGE 0035 #03 BASIC SYSTEM TELETYPE OUTPUT DRIVER 0400* 0401*************** BASIC SYSTEM TELETYPE OUTPUT DRIVER ***************- 0402* 0403* OUTPUTS ASCII RECORDS THROUGH THE TELETYPE PRINTER, 0404* PUNCH, OR BOTH. 0405* 0406* CALL: JSB 102B,I 0407* 0408* (A) = NUMBER OF CHARACTERS TO BE OUTPUT 0409* (B) = STARTING ADDRESS OF BUFFER 0410* 0411* 0412* IF (A) IS >= 0 THEN OUTPUT (A) CHARACTERS 0413* FOLLOWED BY A CARRIAGE RETURN-LINE FEED. 0414* 0415* IF (A) < 0 THEN PUNCH -(A) CHARACTERS ONLY. 0416* 0417* BUFFER CONTAINS ASCII CHARACTERS PACKED TWO PER WORD. 0418* 0419* IF (B) = 0 OK ENTRY OUTPUT (A) FEED FRAMES. 0420* IF (A) = 0 OK ENTRY ONLY A CR/LF IS OUTPUT. 0421* 0422* 0423 15466 000000 .TTYP NOP 0424 15467 017636 JSB SINIT INITIALIZE FOR OUTPUT 0425 15470 063653 TP1 LDA SM11 SET BIT 0426 15471 073517 STA BCNT COUNTER 0427 15472 017622 JSB SGTCH FETCH NEXT CHARACTER FROM BUFFER 0428 15473 027510 JMP TP4 BUFFER EMPTY 0429 15474 001000 ALS ADD BIT 7 AND 0430 15475 033520 IOR B3000 CONTROL BITS 0431 15476 102700 STC TTY REQUEST PRINT 0432 15477 103600 TP2 OTA TTY,C OUTPUT BIT 0433 15500 001300 RAR POSITION NEXT BIT 0434 15501 102300 SFS TTY WAIT FOR 0435 15502 027501 JMP *-1 BIT OUT FLAG 0436 15503 037517 ISZ BCNT CHARACTER OUT? 0437 15504 027477 JMP TP2 NO 0438 15505 106700 CLC TTY YES, TURN OFF TTY 0439 15506 102100 TP3 STF TTY SET FLAG BUFFER (RESETS TIMER) 0440 15507 027470 JMP TP1 0441* 0442 15510 063671 TP4 LDA SIORI RESTORE IOR 0443 15511 073633 STA SFNSH+1 INSTRUCTION 0444 15512 002141 SEZ,CLE,RSS DONE? 0445 15513 127466 JMP .TTYP,I YES 0446 15514 063655 LDA SM2 NO 0447 15515 067672 LDB SCRLA DO CR/LF 0448 15516 027467 JMP .TTYP+1 0449* 0450 15517 000000 BCNT NOP 0451 15520 003000 B3000 OCT 3000 PAGE 0036 #03 BASIC SYSTEM TELETYPE OUTPUT DRIVER 0453* 0454* THIS ROUTINE TURNS OFF THE TELETYPE INTERRUPT MODE 0455* 0456 15521 000000 .IOFF NOP 0457 15522 106701 TI5 CLC TTYI TURN OFF KEYBOARD 0458 15523 106700 TP6 CLC TTY TURN OFF PRINTER 0459 15524 000000 .ROFF NOP SET TO CLC RDR IF READER EXISTS 0460 15525 000000 .POFF NOP SET TO CLC PNCH IF PUNCH EXISTS 0461 15526 002400 CLA CLEAR 0462 15527 073536 STA STOPI STOP FLAG 0463 15530 127521 JMP .IOFF,I 0465* 0466* THIS ROUTINE TURNS ON THE TELETYPE INTERRUPT MODE 0467* 0468 15531 000000 .ION NOP 0469 15532 003400 CCA SET STOP FLAG 0470 15533 073536 STA STOPI FOR INTERRUPTS 0471 15534 017457 JSB TTINT ENABLE KEYBOARD 0472 15535 127531 JMP .ION,I 0473* 0474 15536 000000 STOPI NOP STOP FLAG (INITIALIZED OFF) PAGE 0037 #03 CHARACTER PROCESSING SECTION FOR INPUT 0476* 0477* CHARACTER PROCESSING SECTION FOR TTY AND PHOTOREADER 0478* 0479* CALL: JSB PROCS 0480* (A) HOLDS CHARACTER 0481* 0482* RETURN: P+1 - GET NEXT CHARACTER 0483* P+2 - RECORD COMPLETE 0484* 0485 15537 000000 SPROC NOP 0486 15540 013666 AND SB177 STRIP BIT 7 0487 15541 002003 SZA,RSS NULL? 0488 15542 127537 JMP SPROC,I YES, IGNORE 0489 15543 053656 CPA S.2 NO, CONTROL B? 0490 15544 127537 JMP SPROC,I YES, IGNORE 0491 15545 053657 CPA S.3 NO, CONTROL C? 0492 15546 127537 JMP SPROC,I YES, IGNORE 0493 15547 053660 CPA SLNFD NO, LINE FEED? 0494 15550 127537 JMP SPROC,I YES, IGNORE 0495 15551 053666 CPA SB177 NO, RUBOUT? 0496 15552 127537 JMP SPROC,I YES, IGNORE 0497 15553 053665 CPA SAMDE NO, ALT MODE? 0498 15554 027616 JMP SCMPL-1 YES, CANCEL RECORD 0499 15555 053664 CPA SOMDE NO, OLD ALT MODE? 0500 15556 027616 JMP SCMPL-1 YES, CANCEL RECORD 0501 15557 053662 CPA SEMDE NO, ESCAPE MODE? 0502 15560 027616 JMP SCMPL-1 YES, CANCEL RECORD 0503 15561 053661 CPA SCRTN NO, CARRIAGE RETURN? 0504 15562 027617 JMP SCMPL YES, COMPLETE RECORD 0505 15563 057676 CPB SCONT NO, BUFFER OVERFLOW? 0506 15564 007400 CCB YES, LOOK FOR CARRIAGE RETURN 0507 15565 006020 SSB LOOKING FOR CARRIAGE RETURN? 0508 15566 127537 JMP SPROC,I YES, RETURN 0509 15567 053663 CPA SLFTA NO, LEFT ARROW? 0510 15570 027602 JMP SDLTE YES, DELETE PREVIOUS CHARACTER 0511 15571 006014 SLB,INB NO, CHECK ODD/EVEN FLAG 0512 15572 027576 JMP SPRO2 B0 = 0, EVEN CHARACTER 0513 15573 001727 SPRO1 ALF,ALF B0 = 1, ODD CHARACTER 0514 15574 173675 STA SBDDR,I RECORD HIGH CHARACTER 0515 15575 127537 JMP SPROC,I 0516 15576 133675 SPRO2 IOR SBDDR,I PACK TWO CHARACTERS 0517 15577 173675 STA SBDDR,I PUT IN BUFFER 0518 15600 037675 ISZ SBDDR INDEX BUFFER ADDRESS POINTER 0519 15601 127537 JMP SPROC,I PAGE 0038 #03 CHARACTER PROCESSING SECTION FOR INPUT 0521* 0522* THIS SECTION DELETES PREVIOUS CHARACTER(S) 0523* 0524 15602 006003 SDLTE SZB,RSS IS BUFFER EMPTY? 0525 15603 127537 JMP SPROC,I YES, RETURN 0526 15604 003400 CCA NO 0527 15605 044000 ADB 0 DECREMENT CHARACTER COUNT 0528 15606 006011 SLB,RSS LOW CHARACTER? 0529 15607 127537 JMP SPROC,I YES 0530 15610 043675 ADA SBDDR NO, DECREMENT 0531 15611 073675 STA SBDDR ADDRESS POINTER 0532 15612 163675 LDA SBDDR,I GET LAST TWO CHARACTERS 0533 15613 001727 ALF,ALF 0534 15614 013666 AND SB177 DELETE LAST CHARACTER 0535 15615 027573 JMP SPRO1 STORE NEXT-TO-LAST CHARACTER 0536* 0537* THIS SECTION PUTS COUNT IN A AND RETURNS TO P+2 0538* 0539 15616 067655 LDB SM2 SET DELETE STATUS 0540 15617 060001 SCMPL LDA 1 PUT CHARACTER COUNT INTO (A) 0541 15620 037537 ISZ SPROC 0542 15621 127537 JMP SPROC,I 0544* 0545* SUBROUTINE GETCH 0546* 0547* RETURN IO P+1 ON EMPTY BUFFER 0548* IF THE BUFFER IS NOT EMPTY, ELSE 0549* RETURN TO P+2 WITH CHARACTER IN (A). 0550* 0551 15622 000000 SGTCH NOP 0552 15623 057676 CPB SCONT 0553 15624 127622 JMP SGTCH,I BUFFER EMPTY, P+1 RETURN 0554 15625 163675 LDA SBDDR,I GET TWO CHARACTERS 0555 15626 006011 SLB,RSS 0556 15627 001727 ALF,ALF B EVEN, POSITION CHARACTER RIGHT 0557 15630 006014 SLB,INB CHECK O/E, AND INDEX COUNT 0558 15631 037675 ISZ SBDDR B ODD, INCREMENT ADDRESS POINTER 0559 15632 013666 SFNSH AND SB177 STRIP LEFT CHARACTER 0560 15633 033667 IOR SB200 ADD BIT 7 0561 15634 037622 ISZ SGTCH 0562 15635 127622 JMP SGTCH,I RETURN TO P+2 PAGE 0039 #03 0564* 0565* INITIALIZES FOR OUTPUTTING A RECORD 0566* 0567 15636 000000 SINIT NOP 0568 15637 002320 CCE,SSA SET E=1, CHECK FOR (A) < 0 0569 15640 003104 CMA,CLE,INA SET (E) = 0, (A) = -(A) 0570 15641 073676 STA SCONT SAVE CHARACTER COUNT 0571 15642 077675 STB SBDDR SAVE BUFFER STARTING ADDRESS 0572 15643 002002 SZA 0573 15644 006002 SZB LEADER/TRAILER ONLY? 0574 15645 027651 JMP *+4 NO 0575 15646 063670 LDA SCLAI YES, (B) = 0 0576 15647 073633 STA SFNSH+1 SET CLEAR INSTRUCTION 0577 15650 000040 CLE SET NO CR/LF 0578 15651 006400 CLB INITIALIZE OUTPUT COUNT 0579 15652 127636 JMP SINIT,I PAGE 0040 #03 DATA, ADDRESSES, ETC. 0581* 0582* COMMON DRIVER CONSTANTS AND ADDRESSES 0583* 0584 15653 177765 SM11 DEC -11 0585 15654 177775 SM3 DEC -3 0586 15655 177776 SM2 DEC -2 0587 15656 000002 S.2 DEC 2 0588 15657 000003 S.3 DEC 3 0589 15660 000012 SLNFD OCT 12 LINE FEED 0590 15661 000015 SCRTN OCT 15 CARRIAGE RETURN 0591 15662 000033 SEMDE OCT 33 ESCAPE 0592 15663 000137 SLFTA OCT 137 LEFT ARROW 0593 15664 000175 SOMDE OCT 175 OBSOLETE ALT MODE 0594 15665 000176 SAMDE OCT 176 ALT MODE 0595 15666 000177 SB177 OCT 177 RUBOUT 0596 15667 000200 SB200 OCT 200 0597 15670 002400 SCLAI CLA 0598 15671 033667 SIORI IOR SB200 ADD IN BIT 7 0599* 0600 15672 015673 SCRLA DEF SCRLF 0601 15673 106612 SCRLF OCT 106612 0602* 0603 15674 000000 SBFSA NOP INITIAL BUFFER ADDRESS 0604 15675 000000 SBDDR NOP CURRENT BUFFER ADDRESS 0605 15676 000000 SCONT NOP HOLDS RECORD LENGTH 0606 15677 000000 SEOTC NOP END-OF-TAPE COUNTER 0607* 0608 END ** NO ERRORS*