*20 / /Q AND A HANDLER FOR TC12-F /TAPE CONVERTER PROGRAM / / *15 / / DIVCNT, 0 0 0 LDF 1 JMP QAINIT TXTINTRO&3777 /10 BIT ADDRESS PLUS DATA FIELD BIT; 3777 /JUST A SAFE ADDRESS; JMP QARFSH /LINE-FEED DURING INTRO /RETURNS PROGRAM TO HERE / / / / LDF 3 QAREAD, JMP QAINIT TXTRDE&3777 /10 BIT ADDRESS PLUS DATA FIELD BIT; ANSWR1&3777 JMP QARFSH / / / / / / / UNREAD, SET I 17 /ROUTINE TO GET NUMBER ANSWR1&3777 /OF BLOCKS TO BE TRANSFERRED SET I 16 M4, -4 /4 NUM ANS SET I 15 NUMBRS-1 /ANS ADD -1 SET I 13 JMP QAREAD /RETURN JMP JMP GET /GET ANSWER; AZE I /IS RDENUM=0? JMP QAREAD /YES; APO /NOT ZERO;NEGATIVE? JMP QAREAD /YES; TRY AGAIN ADA I 14 /ADD -2000 APO I /TOO MANY? JMP QAREAD /YES TRY AGAIN ADA I 14 /ADD +2000 STC RDENUM /NUM OF BLOCKS / / SET I 17 /ROUTINE TO GET TAPE UNIT NO. ANSWR1&3777+4003 SET I 16 -1 /1 NUM ANS SET I 15 NUMBRS-1 /ANS ADD -1 JMP GET /GET ANS STC RDEFU /UNIT / / SET I 17 /ROUTINE TO GET STARTING BLOCK ANSWR1&3777+4004 SET I 16 -4 /4 WORD ANS SET I 15 NUMBRS-1 /ANS ADD-1 JMP GET /GET ANS STC RDEBN /BLOCK NUM / / SET I 17 /GET READ FORMAT 3777&ANSWR1+4002 SET I 16 -1 /1 NUM ANS SET I 15 CHARS-1 /ANS ADD-1 JMP GET /GET ANS MUL I /CONVERT TO MODOP ADDRESS 3 ADA I /CHANGE RANGE M3, -3 /FROM 3,6,9 TO STC MODOP /0,3,6 JMP QAWRIT /GET NEXT FRAME / / NUMBRS, -57 /NUMBER LIMITS +57 -67 +67 -2000 +2000 CHARS, 0 /CHAR LIMITS 0 -3 +3 / / QAWRIT, JMP QAINIT /WRITE FRAME TXTWRI&3777 /10 BIT ADDRESS PLUS DATA FIELD BIT ANSWR2&3777 JMP QARFSH / / UNWRIT, SET I 17 /GET UNIT TO WRITE ON; ANSWR2&3777+1 SET I 16 /1 NUM ANS -1 SET I 15 NUMBRS-1 SET I 13 JMP QAWRIT /RETURN ADD JMP GET /GET ANS STC WRIFU /UNIT / / SET I 17 /GET STARTING BLOCK FOR WRITE; ANSWR2&3777+2 SET I 16 -4 /4 NUM ANS SET I 15 NUMBRS-1 /ADDRESS-1 JMP GET /GET ANS STC WRIBN /BLOCK / / SET I 17 ANSWR2&3777 /ANS ADD SET I 16 -1 /1 NUM ANS SET I 15 CHARS-1 /CHECK ADD JMP GET /GET ANS ADM I MODOP, 0 /FORMAT ADA I /GENERATE JMP STA JMP 0+SETUP STC SETUP CLR /CLEAR THE LINK BIT LDF 3 QPAR, JMP QAINIT /PARITY FRAME TXTPAR&3777 ANSWR3&3777 JMP QARFSH UNPAR, LDA /CHECK PAR ANSWER ANSWR3&3777 ROR 1 APO /NO CHECK JMP .+4 /YES LDA I NOP /REPLACE JMPRDEAGN WITH NOP JMP .+3 LDA I JMP RDEAGN STA PARERR!2000 CLR / / / SETUP, JMP /MODES OF OPERATION JMP MODOP1 JMP MODOP2 JMP MODOP3 JMP MODOP4 JMP MODOP5 JMP MODOP6 JMP MODOP7 JMP MODOP8 JMP MODOP9 / / / / GET, SET 1 /SAVE RETURN JMP 0 CLR STC HOLD NEXT, LDH I 17 /THIS ROUTINE GETS THE ANSWERS SAE I 00 SKP JMP HOLD-3 SET 14 15 ADA I 14 /SUBTRACT LOWER LIMIT APO / JMP 13 ADA I 14 /ADD LOWER LIMIT BACK ADA I 14 /SUBTRACT UPPER LIMIT APO I / JMP 13 ADA I 14 /ADD UPPER LIMIT BACK BCL I /JUST TO BE SURE 7770 ROR 3 ADD HOLD ROL 3 STC HOLD XSK I 16 JMP NEXT LDA I HOLD, 0 JMP 1 / / / / MODOP1, ADD P8FMT1 /PDP-8 TO PDP-8 STC RDELNG ADD P8FMT2 /129 WORD TRANSFER STC WRILNG ADD RDENUM /NUM OF BLOCKS TO READ STC WRINUM /AND WRITE ADD M16 /DO 16 AT A TIME STA RDLTAN!2000 STA WDLTAN!2000 LDA I /TOTAL WORDS PER BLOCK -201 STA RDEKEY!2000 LDA I -202 STA WRIKEY!2000 JMP GO /DO THE JOB ! / / / / MODOP2, ADD P8FMT1 /PDP-8 TO PDP-12 STA /WRITE 129 WORDS ADDINC!2000 /IN A 400 WORD BLOCK STC RDELNG /READ 129 WORDS ADD RDENUM STC WRINUM /1:1 BLOCK TRANSFER LDA I M16, -16 STA RDLTAN!2000 STA WDLTAN!2000 LDA I -201 STA RDEKEY!2000 CLR COM STA WRIKEY!2000 JMP GO / / / / MODOP3, ADD P8FMT0 /PDP-8 TO PDP-N STC RDELNG ADD P10FM1 STC WRILNG LDA I -3 STC DIVISR JMP DIVIDE CLR ADD DIVCNT STC WRINUM LDA I M14, -14 STA RDLTAN!2000 LDA I -4 STA WDLTAN!2000 LDA I -201 STA RDEKEY!2000 LDA I M601, -601 STA WRIKEY!2000 JMP GO / / / / MODOP4, ADD P8FMT1 /PDP-12 TO PDP-8 STC WRILNG /READ 400 WORDS ADD RDENUM /WRITE 200 WORDS ROL 1 /1:2 BLOCK TRANSFER STC WRINUM LDA I K400, 400 STA ADDINC!2000 LDA I M7, -7 STA RDLTAN!2000 LDA I -16 STA WDLTAN!2000 CLR COM STA RDEKEY!2000 LDA I -202 STA WRIKEY!2000 JMP GO / / / / MODOP5, ADD RDENUM /PDP-12 TO PDP-12 STC WRINUM ADD M7 STA RDLTAN!2000 STA WDLTAN!2000 CLR ADD K400 STA ADDINC!2000 CLR COM STA RDEKEY!2000 STA WRIKEY!2000 JMP GO / / / / MODOP6, ADD P10FM1 /PDP12 TO PDP-N STC WRILNG ADD M3 STC DIVISR JMP DIVIDE ADA I /ACC =-2 INDICATES REMAINDER WAS 1; I.E., RDENUM =1,4,7, ETC.; K1, 1 SAE I /ADDING 1 WOULD MAKE ACC=7776=-1; 7776 JMP .+3 /NO;ACC NOT = -1 STC EXTRA /YES; NOW PUT IN EXTRA TO SUBTRACT 1 JMP MULT2 /AFTER MULTIPLYING DIVCNT BY 2; CLR /ACC NOT = -1; STC EXTRA /CLEAR EXTRA; MULT2, ADD DIVCNT /GET RESULTS OF DIVISION; ROL 1 /MULTIPLY BY 2; ADA I EXTRA, 0 /ADD EXTRA; STC WRINUM ADD K400 STA ADDINC!2000 LDA I M6, -6 STA RDLTAN!2000 LDA I -4 STA WDLTAN!2000 CLR COM STA RDEKEY!2000 LDA I -601 STA WRIKEY!2000 JMP GO / / / / MODOP7, ADD P10FMT /PDP-N TO PDP-8 STC RDELNG ADD P8FMT1 STC WRILNG ADD RDENUM MUL I 3 STC WRINUM ADD M4 STA RDLTAN!2000 LDA I -14 STA WDLTAN!2000 LDA I M600, -600 STA RDEKEY!2000 LDA I -202 STA WRIKEY!2000 JMP GO / / / / MODOP8, ADD P10FMT /PDP-N TO PDP-12 STC RDELNG /WRIFMT IS OK FOR 12 TAPE ADD RDENUM STA WRINUM ROR I 1 LAM /ADD AGAIN TO MAKE 1.5 X RDENUM; WRINUM /LINK BIT GIVES US EXTRA BLK IF RDENUM WAS AN ODD NUMBER STC WRINUM ADD M4 STA RDLTAN!2000 CLR ADD M6 STA WDLTAN!2000 LDA I 400 STA ADDINC!2000 CLR COM STA WRIKEY!2000 CLR ADD M600 STA RDEKEY!2000 JMP GO / / / / MODOP9, ADD P10FMT /PDP-N TO PDP-N STC RDELNG ADD P10FM1 STC WRILNG ADD RDENUM STC WRINUM ADD M4 STA RDLTAN!2000 STA WDLTAN!2000 CLR ADD M601 STA WRIKEY!2000 CLR ADD M600 STA RDEKEY!2000 / / / / GO, PDP PMODE JOB1, JMS I READPT LMODE RDEFU, 0000 RDELOC, 0000 /ALWAYS LEFT AS 0000 RDELNG, 0000 RDEBN, 0000 RDENUM, 0000 / PMODE JOB2, JMS I WRITPT LMODE WRIFU, 0000 WRILOC, 0000 WRILNG, 0000 WRIBN, 0000 WRINUM, 0000 PMODE WRIEXIT,LINC LMODE LDF 3 LDA NBLOCK!2000 /GET REMAINING BLOCKS BSE I 6000 AZE I /ARE WE FINISHED? JMP DONE /YES PDP /HELL NO PMODE JMP JOB1 /OK; GO READ MORE HLT HLT /TRY AGAIN; / READPT, READ!6000 WRITPT, WRITE!6000 LMODE P8FMT0, 0200 /WORDS PER BLOCK P8FMT1, 0201 P8FMT2, 0202 P10FMT, 0600 P10FM1, 0601 / / / / DIVIDE, SET 1 /SET UP RETURN JUMP; 0 CLR /CLEAR DIVIDEND STC DIVCNT ADD RDENUM XSK I DIVCNT /INCREMENT DIVIDEND; ADA I DIVISR, 0 /SUBTRACT DIVISOR; APO I /HAS ACC GONE NEGATIVE YET? JMP.-4 /NO; JMP 1 /YES; RETURN; / / DONE, JMP 20 /DISPLAY FRAME 1 / //// LMODE SEGMNT 2 /QANDA SUBROUTINE FOR THE /PDP-12 /REMOVE *1000 BELOW IF /INSERTING SOURCE DIRECTLY /INTO YOUR PROGRAM SOURCE *1113 /REMOVE,IF DESIRED / /TO HERE TO INITIALIZE THE ROUTINE / NOLIST / QAINIT, LDA I /SAVE JMP RETURN 2 ADD 0 STA I QAB, 0 /JMP +3 ADD QAL+3 STC 1 /PTR TO FIRST PARAM LDA 1 /GET FIRST PARAM ADD QAQ+1 /PTR TO HALFWORD-1 STC QAG-3 LDA I 1 STC QARFSH-1 STC 6 /XR6 USED AS A SWITCH. =0 IF NO ANSWER FIELD, =1777 IF YES QACA, SET 3 /XR3 TO PTR TO ANSWERS QARFSH-1 SET 4 /XR4 TO PTR TO QUESTIONS QAG-3 /TO HERE IF FIRST TIME THROUGH OR FOLLOWING A CR SET 1 4 JMP QAT NOP /F LDH I 4 /H. BUMP PTR IF H OR F QAD, JMP QAO JMP .+6 /74 JMP QAE /34 SAE I /CR? 43 JMP QAD /NO JMP QACA+4 /EXAMINE NEXT CHAR /INITIALIZE ANSWER BUFR STH 3 /74 TO ANSWERS LDH I 4 /NEXT HALFWORD ADA I -60 COM STC 6 STH I 3 /0 IN AC XSK I 6 JMP .-2 LDH I 3 /BUMP PTR TO ANSWERS JMP QAD /ANSWER BUFR IS INITIATED QAE, STH 3 SET I 4 /XR4 TO PTR TO LAST TYPED CHAR IN ANSWER BUFR 0 /----RE-ENTER HERE TO REFRESH---- QARFSH, LDA I /INITIAL Y POSITION 277 STC QAH-1 SET I 3 /XR3 TO PTR TO HALFWORD QUESTIONS-1 0 SET 5 /XR5 TO PTR TO LAST DISPLAYED CHAR IN ANSWER BUFR QARFSH-1 QAG, SET 1 3 JMP QAT JMP .+7 /F LDH I 3 /H. BUMP PTR LDA I /NEITHER. ASSUME HALF SIZE BCL I STC QAM+2 /SET INSTR TO CLEAR FF FOR HALF SIZE ADD QAW /NOP IN AC JMP QAM LDH I 3 /BUMP PTR LDA I BSE I STC QAM+2 /SET INSTR TO SET FF FOR FULL SIZE ADD QAW+1 /ADD 9U IN AC QAM, STC QAP+3 MSC I 4 /EAD CONTROL REGISTER BSE I /THIS INSTR CHANGES. EITHER BSE & OR BCL & 200 MSC 4 /AC TO CONTROL REGISTER SET I 1 /XR1 TO INITIAL X POSITION 100 LDA I /Y COORDINATE MULTIPLE -40 ADM I /Y COORDINATE 0 QAH, LDH I 3 JMP QAO+1 JMP QAZ /74 BUMP PTR TO NEXT CHAR, PUT 40 IN AC JMP QAJ /34 SHD I /NEITHER 4300 JMP QAG /CR. MOVE X AND Y COORDINATE JMP QAP /ISPLAY CHAR JMP QAH /PICK UP NEXT CHAR JMP QAP /TO HERE IF DISPLAYING ANSWER BUFR SRO I /SWITCH TO DISPLAY CURSOR. EITHER 0000 OR 7777 0 /IFXR4=XR5, THEN SWITCH=7777 JMP QAF /QUESTION MODE QAI, LDH I 5 JMP QAO+1 JMP QAH /74 JMP QAH /34 JMP QAI-4 /NEITHER. DISPLAY IT QAJ, JMP GETKBD /TO HERE IF DISPLAYED BUFFER AZE I JMP QAB /NOTHING TYPED . EXIT SET I 2 QAY SHD 2 /LF? JMP QAK+4 /YES. EXIT SHD I 2 /CR? JMP QAN XSK 6 /IS THERE AN ANSWER FIELD? JMP QARFSH SHD I 2 /? JMP QAK SHD I 2 /ALT? JMP QACA /REINITIALIZE SHD I 2 /BACK SLASH? JMP QARFSH /IGNORE SHD I 2 /RUBOUT? JMP QAL /IGNORE SHD I 2 /TAB?$ JMP QARFSH /IGNORE STC .+5 /ACCEPTABLE CHAR JMP QAO /TEST NEXT CHAR JMP QAQ /74 BACK PTR UP BY 1 JMP QAQ /34 ^ LDA I /OK. STORE IT 0 STH 4 JMP QARFSH /REDISPLAY QAL, LDH 4 /TO HERE IF RUBBOUT OR < JMP QAO+1 JMP QARFSH /74 IGNORE -6002 LDH 2 /TEST THE CHAR SAE I /RUBOUT? 37 JMP QAQ /NO. BACK PTR UP BY 1 SET 5 4 SET 3 4 JMP .+2 LDH I 5 /BUMP PTR LDH I 3 /GET NEXT CHAR JMP QAO+1 NOP /IF 74 OR 34, REPLACE CURRENT CHAR WITH 0 CLR STH 5 AZE /WAS IT 74 OR 34? JMP .-7 /NO. CONTINUE JMP QAQ /BACK PTR UP BY 1 /TO HERE IF CR QAN, XSK 6 JMP QAK+4 /EXIT ROUTINE IF NO ANSWER FIELD JMP QAO JMP QARFSH /74 MOVE PTR TO NEXT QUESTION FIELD JMP QAE+1 /34 END OF BUFR. MOVE PTR TO FIRST QUESTION FIELD JMP QAN+2 QAO, LDH I 4 /S\R SHD I / +1 74 BEGIN FIELD 7400 / +2 34 END BUFR JMP 0 / +3 NEITHER 74 NOR 34 SAE I 34 XSK I 0 XSK I 0 JMP 0 /S\R TO DISP LINC CHAR IN AC QAP, ROL 1 /MULT BY 2 FOR INDEX TO ADDRESS OF TABLE ADD QAX+4 STC 2 /ADDRESS OF CHAR TO DISP IN XR2 ADD QAU /THIS INSTR CHANGES. EITHER OP OR ADD 9U ADD QAU ADD 1 /ADD 4 TO XR1 TO SPACE CHAR STC 1 ADD 5 /GET ADDRESS OF ANSWER BUFR COM ADD 4 AZE CLR STC QAI-2 /SWITCH=0 OR 7777 ADD QAH-1 /Y COORDINATE IN AC DSC 2 DSC I 2 /DISPLAY CHAR JMP 0 QAQ, LDA I /BACK UP PTR BY 1 -4000 ADM 4 JMP QARFSH /REDISPLAY / QAT, LDH I 1 /S\R SHD I / +1 F 0600 / +2 H JMP 0 / +3 NEITHER SAE I 10 XSK I 0 XSK I 0 JMP 0 / QAZ, LDH I 3 LDA I 40 JMP QAI-4 /TO HERE IF > QAK, LDH I 4 AZE I /IS CURRENT CHAR BLANK? JMP QAQ /YES. IGNORE JMP QAX /MOVE DOT FORWARD /TO HERE TO EXIT WITH SKIP LDA I 1 ADM QAB JMP QAB /CHARACTER PATTERNS QAV, 0101 /KBD 0, ILLEGAL. USED AS MARKER 0101 4477 /1:A 7744 5177 /2:B 2651 4136 /3:C 2241 4177 /4:D 3641 4577 /5:E 4145 4477 /6:F 4044 4136 /7:G 2645 1077 /10:H 7710 7741 /11:I 0041 4142 /12:J 4076 1077 /13:K 4324 0177 /14:L 0301 3077 /15:M 7730 3077 /16:N 7706 4177 /17:O 7741 4477 /20:P 3044 4276 /21:Q 0376 4477 /22:R 3146 5121 /23:S 4651 4040 /24:T 4077 0177 /25:U 7701 0176 /26:V 7402 0677 /27:W 7701 1463 /30:X 6314 0770 /31:Y 7007 4543 /32:Z 6151 4177 /33:/ 0000 /34:BACKSLASH IGNORED ON INPUT 0 /NOT USED 0 /NOT USED 0000 /35:] 7741 /CODES 36:ALT, 37:RUBOUT NOT DISPLAYED QAY, 4543 /LF,CR 7476 /<,> 3634 /ALT, BACKSLASH 3747 /RUBOUT, TAB 0000 /40:SPACE 0000 7500 /41:X! 0000 7000 /42:" 0070 /CODES 43:, 44:, 45:LF NOT DISPLAYED QAX, JMP QAO+1 JMP QAQ JMP QAQ JMP QARFSH QAV 0 /NOT USED 5166 /46: & 0526 /CODE 47:TAB NOT DISPLAYED 0 /NOT USED 0 /NOT USED 3600 /50:( 0041 4100 /51:) 0036 2050 /52:* 0050 0404 /53:+ 0437 0500 /54:, 0006 0404 /55:- 0404 0001 /56:. 0000 0601 /57:\ 4030 4536 /60:0 3651 2101 /61:1 0177 4523 /62:2 2151 4122 /63:3 2651 2414 /64:4 0477 5172 /65:5 0651 1506 /66:6 4225 4443 /67:7 6050 5126 /70:8 2651 5122 /71:9 3651 2200 /72:: 0000 4601 /73:; 0000 /CODE 74: NOT DISPLAYED QAW, NOP ADD QAU 4020 /77:? 2055 / QAF, DSC I 6000 JMP QAI / /END Q+A / / / / /KEYBOARD INPUT ROUTINE / QAKRB=6036 /PDP-8 IOT KBD QATSF=6041 /TSF QATLS=6046 /TLS / GETKBD, LDA 0 STC QAEXIT+6 /SAVE RETURN ADD 1 /SAVE XRS 1 AND 2 STC QAEXIT+3 ADD 2 STC QAEXIT+5 STC QAEXIT+1 KST /WAS SOMETHING TYPED? JMP 0 /NO: EXIT IOB QAKRB /GET TTY CHAR, CLEAR FLAG STA I /SAVE IT QATY, 0 ADA I -237 APO /BETWEEN 200 AND 237? JMP QACNTR /CONTROL CHAR. CHECK FOR CR,LF,TAB / SET I 1 /NO QACHAR-1 SET I 2 -7 LDA QATY SAE I 1 JMP .+2 JMP QAEXIT /ILLEGAL CHAR. DONT ECHO XSK I 2 /CHECKED THEM ALL? JMP .-4 / ADA I -337 APO /BETWEEN 240 AND 337? JMP QALEGL /YES. LEGAL CHAR / SAE I 1 /NO. CHECK FURTHER. JMP .+7 LDA I /RUBOUT 334 JMP QATPE /ECHO BACKSLASH LDA I 37 JMP QAEXIT+2 /LEGAL EXIT / SAE I 1 JMP QAEXIT /ILLEGAL /ALT JMP QAEXIT+2 /EXIT, DONT ECHO / QALEGL, LDA QATY JMP QATPE /ECHO CHAR ADD QATY BCL I /STRIP IT TO 6-BIT 7700 JMP QAEXIT+2 /TO HERE IF CONTROL CHAR QACNTR, SAE I 7755 JMP QACKLF LDA I /CR 43 STC QAEXIT+1 LDA I 215 JMP QATPE LDA I 212 JMP QATPE JMP QAEXIT / QACKLF, SAE I 7752 JMP .+4 LDA I /LF 45 JMP QACNTR+5 SAE I 7751 JMP QAEXIT /ILLEGAL LDA I 47 JMP QAEXIT+2 /EXIT, DONT ECHO / QAEXIT, LDA I /GET 6-BIT ASCII 0 SET I 1 /RESTORE XRS 0 SET I 2 0 JMP /EXIR S\R GETKBD /S\R TO PRINT C(AC) QATPE, IOB QATLS /PDP-8 IOT TLS LDA 0 STC .+4 /SAVE RETURN IOB QATSF /WAIT FOR FLAG JMP .-2 JMP /EXIT / QACHAR, 243 /HASH 244 /DOLLAR SIGN 245 /PER CENT 247 /APOSTROPHE 300 /AT SIGN 336 /UP ARROW 337 /BACK ARROW 40 /RUBOUT / / / /////////////////////////////////// / / / LIST / / / DECTAPE ROUTINE FOR THE PDP - 12 / / / / / / / / / / / / LMODE / SEGMNT 3 / / / / / / / / / / / / / / / SBM=414 /SKIP ON BLOCK MARK FLAG SWD=457 /SKIP ON WORD IN TAC. / / / / / / / *1 / / / TASK, HLT BEST, 0 WCOUNT, 0 BETAR, 0 SKIP, 0 SKIP2, 0 DATAWD, 0 COUNT0, 0 COUNT1, 0 NBLOCK, 0 POINT1, 0 POINT2, 0 IBLOCK, 0 SWITCH, 0 / / / / / / / / / / / *20 / / / / / / / / / / / / / / / EXIT, PDP /COMES HERE AFTER READS & WRITES PMODE CLA CLL CML RAR 6152 CLA JMP I READ / / / / / / / / / / LMODE / / / / / /ITS IMPORTANT THAT "WRITE" LOCATION HAVE A 10 BIT ADDRESS; / / / WRITE, 0 /GENERALWRITE ROUTINE PMODE /CALLED IN 8 MODE LINC /GET INTO LINC MODE LMODE LDA WRITE /GET THE CALLING ADDRESS STC READ /AND PLACE IN THE READ ADDRESS SET I TASK /SET THE OPERATION TO DO A WRITE JMP DOUTIT /JMP TO WRITE ROUTINE SET I BEST /SET THE BEST CASE TO SKIP -3 /3 WORDS. THE WRITTERS NEED SOME ROOM SET I IBLOCK WDLTAN, 0 /NUMBER OF BLOCKS WRITTEN AT A TIME SET I SWITCH WRIKEY, 0 /TOTAL NUM WORDS WRITTEN LDA I 0706 /LINC WRITE STC INST LDA I WRIBN!2000 /SET-UP WRITE STC BNSET LDA I WRINUM!2000 /DITTO STC NUMSET LDA I APO STC WRIOK /CHECK THE WRITE SWITCH JMP COMMON /GO TO THE COMMON READ-WRITE / / / READ, 0 /GENERAL READ ENTRY PMODE /WE RE IN 8 MODE WHEN CALLED LINC /GET OVER INTO LINC MODE LMODE SET I TASK /SET THE TASK TO READ JMP DINIT SET I BEST /SET THE BEST CASE TO SKIP -4 / 5 WORDS SET I IBLOCK RDLTAN, 0 /NUM BLKS READ AT A TIME SET I SWITCH RDEKEY, 0 /TOTAL WORDS PER BLK LDA I 0702 /LINC READ STC INST LDA I RDEBN!2000 STC BNSET /SET-UP FOR READ LDA I RDENUM!2000 /NUM BLKS STC NUMSET LDA I NOP STC WRIOK /DONT CHECK WRITE SW / / COMMON, PDP /GET OVER INTO 8 MODE TO GET THE ARGUMENYTS PMODE JMS AGET /GET THE ARGUMENTS DCA ARG1 JMS AGET DCA ARG2 JMS AGET DCA ARG3 JMS AGET DCA ARG4 JMS AGET DCA ARG5 JMP PASTS /SKIP PAST SUBROUTINE / / AGET, 0 TAD I READ ISZ READ JMP I AGET / / / / / / LMODE / / / / / / ARG1, 0 /READ & WRITE ARGS ARG2, 0 ARG3, 0 ARG4, 0 ARG5, 0 SIZE, 0 TEMP, 0 FBLOCK=ARG4 / / / / / / / / / / / PMODE / / PASTS, LINC /GET INTO LINC MODE LMODE ADD ARG1 /GET THE FIRST ARGUMENT ROL 5 /ROTATE TO GOOD IOB PLACE BCL I /JUST GET BIT 6 -40 STC UNITL1 /SAVE UNITS 0 & 1; ADD ARG1 /GET IT AGAIN ROR 1 /SHIFT OVER BCL I -3 STC LAXO /AND STASH AWAY ADD ARG1 /GET THECRAP AGAIN ROR 1 BCL I -34 BSE I LDF 0 STC SDATAF ADD ARG2 /GET THE ADDRESS STA COREL1 /STORE IN FIRST CORE LOC STC COREL2 /ALSO IN SECOND LOC. ADD ARG3 /GET THE NUMBER OF WORDS TO TDUE COM /NEGATE IT STC SIZE /AND STASH AWAY ADD ARG5 /GET THE NUMBER OF BLOCKS AZE I JMP EXIT /NO BLOCKS TO DO. COM STC NBLOCK /AND STASH AWAY. XSK SWITCH SKP JMP LINC /IF SWITCH=7777 / / / / / / / WAITL, LDA I /THIS WAITS TILL DRIVE IS READY. 5000 IOB 6151 /GET INTO MAINTENANCE MODE LDA I 40 ADD LAXO /ADD ON CORRECT UNITS AXO LDA UNITL1 ADA I 206 IOB 6152 /SELECT,SET MTN LDA I 100 IOB 6152 /SET BACKWARD CLR IOB 6154 /READ TRANSPORT STATUS ROR I 2 LZE I JMP WAITL /UNIT NOT READY YET. WRIOK, NOP /THIS INST. IS REPLACED DURING THE READ/WRITE SUBROUTINE /READ=NOP WRITE=APO JMP .+6 LDA I /WRITE SWITCH NOT ON; 4000 /STOP TAPE IOB 6152 /LTM PRESET JMP WAITL / / / CLR /CLEAR OUT THE MAINTENANCE MODE IOB 6151 LDA I LAXO, 0 AXO JMP BACKWARD / / FORWARD,SET DATAWD /DATA WORDS PER BLOCK SIZE SET WCOUNT /TOTAL WORDS PER BLOCK SWITCH LDA I 226 ADA I UNITL1, 0 IOB 6152 /SEL,SET FWD SET SKIP BEST /NUM CONTROL WORDS SBM /WAIT FOR BM JMP .-1 TAC /BN TO AC NOP SWD /SKIP FIRST SHORT WORD JMP .-1 JMP INIT /SHUFFLE APO /ARE WE OUT OF END ZONE? JMP FORWARD /NO SAE /YES FBLOCK /RIGHT BLOCK? SKP /NO JMP TASK /YES; NOW DO IT! COM ADD FBLOCK APO I /GOING RIGHT DIRECTION?? JMP FORWARD /YES, KEEP GOIN / / / / / / / / / / BACKWARD,LDA I 306 ADA UNITL1 IOB 6152 /GO BACKWARD LDA FBLOCK ADA I 7774 APO /IS BLOCK <4? JMP DEEP /YES SBM /WAIT FOR BM JMP .-1 TAC /BN TO AC JMP INIT /SHUFFLE ADA I /GO 3 BLOCKS PAST DESIRED BLK 3 COM ADD FBLOCK AZE I /RIGHT BLOCK? JMP FORWARD /YES APO /NO, JMP BACKWARD JMP FORWARD / / / / / / / / / / DEEP, SBM /COMES HERE IF BLOCK < 4 JMP .-1 TAC /BN TO AC JMP INIT /SHUFFLE IT AZE /BLOCK 0? JMP BACKWARD /NOT YET! SET I COUNT1 /THIS DELAY ALLOWS US TO FIND THE BLK GOING FWD -10 STC COUNT0 XSK I COUNT0 JMP .-1 XSK I COUNT1 JMP .-3 JMP FORWARD / / / / COREL1,0 / / / / / DINIT, SET SKIP2 /READ ROUTINE SKIP CLR STC LPB JMP SDATAF /JUST SET DF XSK I SKIP2 /SKIP 3 CONTROL WORDS SKP JMP IGETCK /GET REV CS SWD /SKIP ON WD FLAG JMP .-1 SWD JMP DINIT+2 /REPEAT JMP .-2 / / IGETCK, SWD /WAIT FOR REV CS JMP .-1 TAC /GET IT JMP INIT /PUT IN LPB & SHUFFLE / / / / IGETIT, SWD /WAIT FOR WORD JMP .-1 TAC /TAPE AC TO AC JMP INIT /COMP PARITY &SHUFFLE PDP PMODE DCA I COREL1 /STORE DATA ISZ COREL1 /INCR ADD NOP LINC LMODE XSK I WCOUNT /FINISHED? SKP /NO JMP IGETLP /YES,GET CS XSK I DATAWD /GOT ALL DATA? JMP IGETIT /NO,GO TO IT JMP LASTWD /GET LAST WORD IGETLP, SWD /WAIT FOR LPB JMP .-1 TAC /LPB TO AC BCL I /CS IS ONLY 6 BITS 1463 /CLEAR LEFT HALF JMP INIT /COMP PARITY CLR ADD LPB /GET PARITY BUF JMP LPB+5 /SHUFFLE IT STA LPB ROL 6 /XOR L&R BCO LPB ROR 6 AZE /GOOD CHK SUM? PARERR, JMP RDEAGN /NO!TRY AGAIN / / / / / RDEDUN, LDA I 1 ADM FBLOCK /INCR BLOCK XSK I NBLOCK /ALL DONE? SKP /NOT DONE YET JMP EXIT /YES DONE XSK I IBLOCK /FINISHED DBN? JMP FORWARD /NO LDF 2 STA /SET UP FOR NEXT READ RDEBN!2000 CLR ADD NBLOCK COM STA RDENUM!2000 JMP EXIT / / LASTWD, SWD /THIS WORD IS INCLUDED IN THE CS JMP .-1 TAC JMP INIT /PUT IN LPB JMP IGETLP /GET THE CS / / RDEAGN, CLR /PARITY ERROR ADD SIZE /DECR ADDRESS ADA I /BY 1 BLOCK 1 LAM COREL1 CLR /CLR LINK LDA FBLOCK ADA I -3 APO I JMP BACKWARD JMP FORWARD / / DOUTIT, CLR /WRITE ROUTINE STC LPB SET SKIP2 SKIP JMP SDATAF /SET DF LDA I 27 XSK I SKIP2 /SKIP 2 CONTROL WORDS SKP JMP OGETIT /PREPARE TO WRITE SWD /SKIP ON WORD FLAG JMP .-1 SWD /WAIT FOR FLAG TO GO DOWN JMP DOUTIT+7 /DO IT AGAIN JMP .-2 / / / / / / / / OGETIT, IOB 6152 /SET WRITE LDA I /SET RTN JMP JMP GOWRI STC OUTRTN GOWRI, SWD /WAIT FOR WORD FLAG JMP .-1 IOB 6154 /AC TO TB XSK I WCOUNT /FINISHED? SKP /NOT YET JMP OGETLP /GET CS XSK I DATAWD /WRITTEN ALL DATA? SKP /NOO JMP WRILAST /WRITE 7777 PDP PMODE CLA CLL TAD I COREL2 /GET DATA ISZ COREL2 /INCR ADDRESS LINC LMODE COM /COMPUTE PARITY STC TEMP0 ADD LPB BCO I TEMP0, 0 STC LPB ADD TEMP0 COM JMP OUTIT / SHUFFLE DATA &WRITE IT COREL2, 0 WRILAST,CLR /WRITE 7777 WHEN THE LAST WORD IS JUNK SWD /WAIT FOR FLAG TO GO DOWN JUST IN CASE SKP JMP .-2 JMP GOWRI /WRITE 7777 OGETLP, LDA I /SET RTN JMP TO JMP WRILPB /WRITE PARITY STC OUTRTN LDA /GET PARITY WOR LPB ROR 6 /ITS 6 BITS BCO /XOR IT LPB JMP OUTIT /SHUFFLE IT GOOD WRILPB, SWD /WRITE CS JMP .-1 IOB 6154 /CS TO TB WRIOFF, SWD /NOW WAIT TILL LAS IS OPT AND WELL SKP JMP .-2 SWD /NEXT WORD ALL SET??? JMP .-1 /NOPE. WAIT SWD /NEXT WORD THERE. WAIT TILL IT PASSES. SKP JMP .-2 /ITS PAST. LAST WORD IS NOW OUT COMPLETEL LDA I /YEP. TURN OFF THE WRITTERS. 226 IOB 6152 WRIDUN, LDA I /PREPARE TO WRITE NEXT BLK 0001 ADM FBLOCK XSK I NBLOCK /ALL DONE? SKP /NOT YET JMP EXIT /THATS IT! SET WCOUNT /INIT WCOUNT WRIKEY XSK I IBLOCK /FINISHED GROUP? JMP FORWARD /GO DO IT! LDF 2 STA WRIBN!2000 /NEXT BLOCK CLR ADD NBLOCK COM STA WRINUM!2000 /REMAINING BLKS JMP EXIT /READ SOME MORE / / / / / / / / / / SDATAF=. DATAF, HLT /OPTION FOR EXT MEM JMP 0 / / / / INIT, STC TEMP1 /COMPUTE PARITY ADA I LPB, 0 BCO I TEMP1, 0 STC LPB ADD TEMP1 /READ SHUFFLE COM STA TEMP1 BCL I -77 ADA I ADD TABLE1 STC ADDIN1 LDH /GET LEFT HALF TEMP1&3777 /OF TEMP1 ADA I ADD TABLE1 STC ADDIN2 CLR ADDIN2, ADD 0 ROL I 5 ADDIN1, ADD 0 JMP 0 / / / / / / / / / / OUTIT, STA I /WRITE SHUFFLE TEMP2, 0 BCL I /LOOK AT RIGHT HALF -77 ADA I ADD TABLE2 STC ADOUT1 LDH /GET LEFT HALF TEMP2&3777 ADA I ADD TABLE2 STC .+1 ADOUT2, 0 ROL 2 ADOUT1, 0 COM OUTRTN, 0 /WRITE IT / / / / LINC, LDA /LINC TAPE HANDLER ARG1 /GET UNIT ROR I 1 BCL I 7774 STC EXUN ROL I 4 /GET LINK BIT BACK ADM INST /ADD UNIT ONE BIT IF ITS THERE BSE I 0007 STC CHECK LDA I 0020 /EXTENDED ADDRESS FORMAT, BANK 0 ADA I EXUN, 0 AXO /SET EX UNIT LDA ARG4 /GET BLOCK NUMBER STA BN STC CHECK+1 STC ADDR LDF 0 /CLR DF LDA I ADDR, 0 TMA /AC>TMA SETUP INST, 0 BN, 0 LDA I ADDINC, 0000 /WORDS PER BLOCK ADM ADDR LDA I 1 ADM BN /INCR BLOCK NUM XSK I NBLOCK SKP JMP CHECK /TRANSFER COMPLETE XSK I IBLOCK JMP ADDR-2 /DO NEXT BLOCK / / / / CHECK, CHK 0000 /BLOCK NUMBER AZE HLT LDA I 1 ADM CHECK+1 SAE /FINISHED? BN JMP CHECK /NO XSK NBLOCK /ALL DONE? SKP JMP EXIT /ALL DONE / / LDF 2 STA BNSET, RDEBN!2000 /OR WRIBN!2000 CLR ADD NBLOCK COM STA NUMSET, RDENUM!2000 /OR WRINUM!2000 JMP EXIT / / / / / INPUT CONVERSION TABLES. / LMODE / TABLE1, 0 4 40 44 400 404 440 444 4000 4004 4040 4044 4400 4404 4440 4444 2 6 42 46 402 406 442 446 4002 4006 4042 4046 4402 4406 4442 4446 20 24 60 64 420 424 460 464 4020 4024 4060 4064 4420 4424 4460 4464 22 26 62 66 422 426 462 466 4022 4026 4062 4066 4422 4426 4462 4466 / / / / / / / / EJECT / OUTPUT CONVERSION TABLE TABLE2, 0 400 20 420 1 401 21 421 1000 1400 1020 1420 1001 1401 1021 1421 40 440 60 460 41 441 61 461 1040 1440 1060 1460 1041 1441 1061 1461 2 402 22 422 3 403 23 423 1002 1402 1022 1422 1003 1403 1023 1423 42 442 62 462 43 443 63 463 1042 1442 1062 1462 1043 1443 1063 1463 //// / / //// PMODE / *3500 TXTINTRO,TEXT ZF "TC12-F" H H LINCTAPE/DECTAPE CONVERSION PROGRAM F H THIS PROGRAM WILL RUN SUCCESSFULLY ONLY ON A PDP-12 COMPUTER EQUIPPED WITH THE TC12-F HARDWARE OPTION. IT WILL READ AND WRITE FROM TAPE UNITS 0-7 IN ANY TAPE FORMAT; YOU MUST SPECIFY THE CORRECT FORMAT. F F HTYPE LINEFEED TO CONTINUE\Z / / *7220 TXTPAR, TEXT ZF CHECK PARITY<1 F 0 SPECIFIES NO F 1 SPECIFIES YES TYPE LINE FEED TO CONTINUE\Z / TXTRDE, TEXT ZF READ<4 BLOCKS F TAPE FORMAT<1 FROM UNIT<1 F STARTING WITH BLOCK<4 F HFORMAT A.....PDP-8 (201 WORDS/BLOCK) H H B.....PDP-12 (400 WORDS/BLOCK) H H C.....OTHER (PDP-9,10,15 WITH H 600 12-BIT WORDS/BLK) \Z / / / / TXTWRI, TEXT ZF WRITE THE RESULT F IN TAPE FORMAT<1 ON UNIT<1 STARTING AT BLOCK<4 F HFORMAT A.....PDP-8 (201 WORDS/BLOCK) H H B.....PDP-12 (400 WORDS/BLOCK) H H C.....OTHER (PDP-9,10,15 WITH H 600 WORDS/BLOCK) \Z / / ANSWR1, 7400 /NUMBER OF BLOCKS 0000 /TO BE READ IN 0074 /4 OCTAL DIGITS 0074 /FORMAT CHAR; 0074 /UNIT NUMBER; 0000 /STARTING BLOCK 0000 /NUMBER; 3400 /THATS ALL!! ANSWR2, 7400 /WRITE FORMAT; 7400 /UNIT NUMBER; 7400 /STARTING BLOCK 0000 /NUMBER; 0034 /THATS ALL!! ANSWR3, 7400 /PARITY 34 /THATS IT!! / / / / / / 18 MARCH 1970