/THIS PROGRAM CAN: / 1. PACK PDP-8 TAPE BLOCKS OF 201 WORDS, IN SUCCESSIVE / BLOCKS OF 600 WORDS, WHICH ARE TRANSMITTED TO A / PDP-10 DECTAPE. / 2. UNPACK A PDP-10 DECTAPE BLOCKS OF 600 WORDS / INTO BLOCKS OF 201 WORDS, WHICH ARE TRANSMITTED / TO A PDP-8 TAPE. /THE FUNCTIONS 1 AND 2 ARE INVERSE TO EACH OTHER. /FOUR QUESTIONS ARE PRINTED ON THE TELETYPE / 1 8 TO 10? REPLY Y OR N CR LF / 2 INPUT= REPLY D CR LF / 3 OUTPUT= REPLY CR LF / 4 READY? REPLY Y OR N CR LF / (D=DIGIT) /BLOCK #26 THROUGH #2701 LOCATED ON AN PDP-8 DECTAPE, /ARE ONE TO ONE MAPPED ON THE AREA: STARTING IN /BLOCK #7 WORD 151 (DECIMAL) ENDING IN /BLOCK #495 (DECIAML) AT WORD 66 (DECIMAL) *20 MONE, -1 D75, -76 LCT, 0 BMIN24, -30 BLOC22, -5427 BLOC23, -5630 BLOC24, -6031 B8, 10 OVTS10, 31 OVIN10, -151 BUFOR, BUFB+RES BUFL, BUFB+6000 BUFRST, BUFOR+226 RES=201 DBLOCK, DBLOCK+1 0 DTMA, 7755 /ADDRESS FOR DATA BREAK D600, 600 DTWCT, 7754 /WORD COUNT TRIALS, -3 BLKN23, 27 BLKN24, 30 BLKNR3, -3 INUNIT, 0 /IN AND OUT DRIVE NUMBERS ARE STORED IN THIS OUTUNT, 0 /AND TEH PRESENT LOCATION READ, 30 WRITE, 50 /THI S VALUES CONTROL THE DECTAPE FIRST, 0 CNT1, -46 /OCTAL=38 DECIMAL CNT2, -7 CNT3, -6 COUNT, 0 Y, -331 N, -316 CR, -215 LF, -212 UPP, -270 /VALUE OF CHAR 7+1 THR, 11 FBL8, 26 /FIRST BLOCK TRANSMITTED FROM AN 8 TAPE FBL10, 7 /FIRST TO TAPE BLOCK. BLKNR8, 0 BKNR10, 0 DIR, 0 OVLAP8, -227 /-151 DECIMAL OVLTS8, 151 /THIS IS 105 DECIMAL OVLTST, 31 /25 DECIMAL OVLINC, 0 OVLSTD, 0 OVLP10, -125 /-85 DECIMAL OVLAP, 0 BUF, BUFFER DD600, -6001 BUFA, BUFB+5777 BUFP, BUFOR-67 SIZE8, -202 MV8, -103 SIZE10, -601 *200 STRT, CLA /CLEAN ACCU TLS /SET OUT TELETYPE FLAG FRESH, TAD MESS /LOAD MESSAGE ADDRESS DCA 10 /ACCU 10 ADDRESSES AREA TAD CNT1 /LENGTH OFF MESSAGE. JMS PRT /PRINT MESSAGE JMS INM1 /GET FORMAT FUNCTION TAD CNT2 /LENGTH OF NEXT MESSAGE JMS PRT JMS INM /GET DRIVE # INPUT TAPE DCA INUNIT /UNIT #IS IN FIRST THREE BITS JMS CARRET TAD CNT2 JMS PRT JMS INM /GET DRIVE # OUTPUT TAPE DCA OUTUNT /UNIT # OF OUT PUT DRIVE JMS CARRET TAD D75 /-62 TIMES THE DECTAPES MUST BE READ DCA LCT /THIS LOC WILL BE USED FOR COUNTING TAD FBL8 /26 OCTAL IS FIRST 8 BLOCK DCA BLKNR8 TAD FBL10 DCA BKNR10 TAD DIR ;SZA ;JMP DIR1 ISZ LCT TAD OVLAP8 /-22 DECIMAL DCA OVLAP TAD OVLTS8 /+127 DECIMAL DCA OVLTST TAD BMIN24 /-24 DECIMAL DCA OVLINC /INCREMENT OF OVLAP VALUE TAD OVLTS8 DCA OVLSTD /RESTART VALUE OF OVLAP JMP IO8C DIR1, TAD OVLP10 DCA OVLAP TAD MONE DCA FIRST TAD OVTS10 DCA OVLTST /TEST VALUE=+1 TAD BLKN24 DCA OVLINC /INCREMENT VALUE TAD OVIN10 /RESTART OVLAP VALUE DCA OVLSTD JMP ENTR /READ A TEN BLOCK STRTP, CLA TAD BLKNR3 DCA TRIALS /REFRESH RETRY COUNT TAD READY DCA 10 TAD CNT3 JMS PRT JMS INCH TAD Y SZA JMP NOFIN HLT NOFIN, JMS CARRET JMP FRESH FIN, CLA IAC DCA NRBLKS TAD OUTUNT DCA UNIT TAD WRITE DCA FUNC TAD DIR SPA JMP C8TO10 TAD BUFP DCA STADR TAD BLKNR8 DCA BLKNR TAD SIZE8 DCA BLOCKL JMS DTIO JMP STRTP C8TO10, TAD MV8 DCA COUNT TAD BUF TAD MONE DCA 12 TAD BUFA DCA 11 JMS MOVE TAD BUF DCA STADR TAD BKNR10 DCA BLKNR TAD SIZE10 DCA BLOCKL JMS DTIO JMP STRTP JMP FRESH *400 /THE NEXT CODE PREPARES THE TRANSMISSION /OF BLOCKS SO THE PDP-8 DECTAPE IO8C, CLA TAD OVLAP /-(NU OF WORDS+1 DCA COUNT TAD DIR SZA JMP BUF108 /TRANSFER REGISTERS 11 AND 12 MUST /BE LOADED IN A DIFFERENT WAY. TAD BUFA DCA 11 TAD MONE TAD BUF DCA 12 JMS MOVE TAD INUNIT DCA UNIT TAD READ DCA FUNC TAD OVLAP ;CMA TAD BUF /BUF=START OF AREA ADDRESS: IO3, DCA STADR /DEPOSIT START OF BUFFER AREA: /START HERE TESTING IF ALL IO DONE AND GO TO READY /IF THIS IS ALL RIGHT, OVLAP=-NR1 THIS IS FOR COUNTING: TAD OVLAP TAD OVLTST /IF ZERO THEN TRUE. SZA SMA CLA JMP IO4 /NORMAL CASE 3 BLOCKS: CRIT0, TAD DIR SZA JMP NORMAL CRIT, CLA /IN THE FOLLOWING LINES A STEPDOWN IS TREATED TAD BLKN23 /23 BLOCKS MUST BE READ IN THIS CASE DCA NRBLKS TAD BLOC23 DCA BLOCKL TAD OVLAP TAD OVLSTD IO6, DCA OVLAP IO5, CLA TAD BLKNR8 /GET BLOCK # DCA BLKNR JMS DTIO /TRANSMIT BLOCKS CLA TAD BLKNR DCA BLKNR8 /SAVE NEW BLOCK NUMBER TAD DIR SZA JMP IOR10 JMP ENTR BUF108, TAD OUTUNT DCA UNIT TAD WRITE DCA FUNC TAD FIRST SPA JMP PREPF CLA IAC TAD BUFOR TAD OVLAP JMP IO3 /SAVE START ADDRESS OF BUFFER: PREPF, CLA IAC DCA FIRST TAD FBL8 DCA NRBLKS TAD BUFRST DCA STADR TAD BLOC22 DCA BLOCKL JMP IO5+1 IO4, TAD DIR SZA JMP CRIT NORMAL, TAD BLKN24 /-3 DCA NRBLKS /INSERT PARAMETER TAD BLOC24 DCA BLOCKL TAD OVLAP TAD OVLINC /INCREMENT OVERLAP VALUE JMP IO6 IOR10, CLA TAD OVLAP TAD BUFOR DCA 12 TAD BUFL TAD OVLAP DCA 11 JMS MOVE ENTR, CLA TAD BKNR10 DCA BLKNR TAD B8 DCA NRBLKS TAD DIR SZA JMP NN TAD OUTUNT DCA UNIT TAD WRITE DCA FUNC TAD BUF /BUFFER ADDRESS RET, DCA STADR TAD DD600 /-600. OCTAL DCA BLOCKL JMS DTIO CLA TAD BLKNR DCA BKNR10 /SAVE NEW BLOCK# JMP LOOPR NN, TAD INUNIT DCA UNIT TAD READ DCA FUNC TAD BUFOR JMP RET LOOPR, ISZ LCT JMP IO8C JMP FIN *600 PRT, 0 DCA COUNT /PRINT THE NUMBER OF CHARAC- REST, CLA TSF /TERS, WHICH IS CONTAINED IN JMP .-1 /ACCU, THE CHARACTERS ARE IN TAD I 10 /AN AREA, ADDRESSES BY AUTO TLS /INDEX REGISTER 10 ISZ COUNT JMP REST CLA JMP I PRT INM1, 0 /GET ANSWER YES OR NO. JMS INCH /TO QUESTION 1, IF THERE. TAD Y /IS A 10 TO 8 CONVERSION SZA /THEN DIR=0 ELSE DIR=1 CLA IAC DCA DIR /THE ROUTINE CARRET CHECKS THE JMS CARRET /CARR. RETURN LINE FEED SEQUENCE JMP I INM1 INM, 0 JMS INCH TAD UPP /SUBTRACT VALUE OF SEVEN CHAR+1 SMA JMP ERROR /CHAR VALUE TOO HIGH TAD THR /ADD OCTAL 1 SPA JMP ERROR /LESS THEN 0 CHARACTERS TAD MONE /SUBTRACT ONE CLL RTR;RTR /MOVE BIT 9-11 TO BIT 0-2 JMP I INM /RETURN INCH, 0 KSF /SKIP IF CHAR TYPED IN JMP .-1 KRB TSF /ECHO CHARACTER JMP .-1 /WAIT FOR READY FLAG TLS JMP I INCH /RETURN CARRET, 0 JMS INCH TAD CR /IS IT A CARRIAGE RETURN SZA JMP ERROR /NO JMS INCH TAD LF SZA JMP ERROR JMP I CARRET ERROR, CLA TAD E1 DCA 10 TAD E2 JMS PRT JMP STRTP E1, E1 "E;"R;"R;"0;"R;215;212 E2, -7 MESS, MESS "8;" ;"T;"O;"1;"0 " ;"C;"O;"N;"V;"E "R;"S;"I;"O;"N;"? " ;"R;"E;"P;"L;"Y " ;"Y;" ;"O;"R;" "N;" ;"C;"R;"L;"F;215;212 " ;"I;"N;"P;"U;"T "=; "O;"U;"T;"P;"U;"T "= READY, . "R;"E;"A;"D;"Y;"? *1000 UNIT, 0 /THIS IS THE FIRST PARLOCATION OF THE FOLLOWING FUNC, 0 BLKNR, 0 /ROUTINE, INCREMENTED BLOCK# STADR, 0 /FIRST MEM LOC BLOCKL, 0 /LENGTH OF DECTAPE BLOCK NRBLKS, 0 /NUMBER OF BLOCKS TO BE READ DTIO, 0 /THE FOLLOWING CODE LOCATES A BLOCK # AND ENTERS IT IS /FORWARD DIRECTION (CODE FROM CHUCK MCTHOMAS) CLA TAD DBLOCK /ADDRESS FOR DATA BREAK IS DCA I Z DTMA /TRANSMITTED TO DATA BREAK-LOCATION DTREV, TAD UNIT /IO FUNCTION TAD SEARCH TAD D600 /REVERSE MOTION DTCA /START SEARCHING WAIT1, JMS DTWAIT /WAIT FOR COMPLETION JMP DTFOR /ERROR RETURN END OF TAPE ACCU=0 CLA CLL CML RTL /+2INTO ACCU TAD I Z DBLOCK CMA /-CURRENT BLOCK-3 TAD BLKNR /3 TO THE LEFT? SPA CLA /YES, MORE THAN 2 TO THE LEFT JMP WAIT1 DTFOR, TAD REVERS WAIT2, JMS DTWAIT JMP RETRY /ERROR RETURN TAD I Z DBLOCK CIA TAD BLKNR /OBJECT BLOCK? SZA CLA /YES JMP WAIT2 /AT THIS PLACE THE DATA TRANSFER CAN START, AFTER TRANSFERRING /A BLOCK, A RETURN TO DT FOR IS MADE IF MORE BLOCKS /ARE TO BE READ TAD NRBLKS TAD BLKNR DCA BLKNR TAD BLOCKL /LOAD BLOCK LENGTH (NEGATIVE!) DCA I Z DTWCT /LOAD IN BREAK ADDRESS CMA /GLIB, (ACCU)=-1 TAD STADR /START ADDRESS-1 DCA I Z DTMA /DT MEMORY ADDRESS TAD FUNC TAD CONT JMS DTWAIT /WAIT FOR TRANSFER. JMP RETRY /ERROR CLA TAD STOP DTXA JMP I DTIO DTWAIT, 0 DTXA DTSF /TEST FLAGS JMP .-1 DTRB /READ B REGISTER SMA CLA /ERRORS? ISZ DTWAIT /NORMAL RETURN. JMP I Z DTWAIT RETRY, ISZ TRIALS /NUMBER OF RETRIALS JMP DTIO+1 TAD STOP DTXA DTCA CLA TAD EDT1 DCA 10 TAD EDT2 JMS PRT JMP STRTP EDT1, EDT1 "E;"R;"R;"O;"R;" ;"D;"T;212;215 EDT2, -12 CONT, 100 SEARCH, 10 STOP, 200 REVERS, 400 MOVE, 0 ISZ COUNT SKP JMP I MOVE TAD I 11 DCA I 12 JMP MOVE+1 *1200 BUFB=. BUFFER, 0 $