File XPIP10.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/TPIP10 - LTA VERSION

/PIP10 IS A PIP FOR PS8 THAT HANDLES PDP-10 DECTAPES
/THIS VERSION READS PDP-10 DECTAPES DIRECTLY
/VIA THE TC12F HARDWARE OPTION ON PDP-12 LINCTAPE
/DRIVES.
/	MODIFICATIONS FOR PDP-12'S
/	BY DOUGLAS E. WREGE
/	   GEORGIA TECH.


/COMMAND DECODER RULES:
/
/*OUTPUT_INPUT,INPUT,...
/
/OUTPUT IS:
/	DEV:FILE.EXT[NN]
/	DEFAULT DEVICE IS DSK:
/	[NN] IGNORED IF PDP-10 OUTPUT
/	IF /L OR /F DEFAULT OUTPUT IS TTY:
/
/INPUT IS:
/	DEV:FILE.EXT
/	DEFAULT DEVICE IS DSK:
/	FOLLOWING DEFAULT DEVICES ARE THE PRECEEDING DEVICE
/	UP TO NINE (9) INPUT FILES
/
/OPTIONS ARE:
/	/L IS LIST DIRECTORY (ONLY VALID IF PDP-10 INPUT)
/	/F IS SHORT FORM DIRECTORY (ONLY PDP-10 INPUT)
/	/Z IS ZERO DIRECTORY BEFORE TRANSFER (ONLY IF PDP-10 OUTPUT)
/	/D IS DELETE OLD OUTPUT FILE BEFORE TRANSFER
/	/I IS IMAGE MODE TRANSFER (I.E. 8 BITS PER 36 BITS)
/	/P IS PRESERVE LINE NUMBERS (DEFAULT IS TO DELETE THEM)
/
/NUMERIC OPTION (0 - 7) TELLS WHICH UNIT IS A
/VIRTUAL PDP-10 DECTAPE.

/	/R	RESET ALL DRIVES TO LINCTAPE

/	/0 UNIT NUMBER FOR PDP-10 DECTAPE
/	/1 "	"	"	"	"
/	/2	"	"	"	"
/	/3	"	"	"	"
/	/4	"	"
/	/5	"	"
/	/6	"	"
/	/7	"	"

/ALL DRIVES START OUT BEING PS/8 DEVICES.
/THE NEUMERIC OPTION ABOVE SWITCHES THEM TO PDP-10 DRIVES.
/TO SWITCH ALL BACK TO PS/8 USE THE /R OPTION
/THE DRIVE TYPE IS REMEMBERED UNTIL RESET WITH /R

/COMMAND DECODER SETS UP: / /AT "MOUTPU" THE LIST-- / LLL LLL LLD DDD OR UUU 100 000 000 / NAME (TRIMMED) NAME (EXCESS 40) / NAME NAME / NAME NAME / EXTENSION EXTENSION / 0 EXTENSION / / PS8 FILE OR PDP-10 FILE / /WHERE L IS LENGTH (8 BITS), D IS DEVICE (4 BITS), U IS UNIT (3 BITS) / /AT "MINPUT" THE LIST-- / LLL LLL LLD DDD OR UUU 100 000 000 / START BLOCK ANY BLOCK / / PS8 FILE OR PDP-10 FILE / /THE LIST ENDS WITH A ZERO (0) WORD / /AT "MPARAM" THE BLOCK-- / ABC DEF GHI JKL / MNO PQR STU VWX / YZ0 123 456 789 / /WHICH ARE THE OPTION CHARACTERS / /THE = CONSTRUCTION IS NOT IMPLEMENTED
/TC12PS - 12 DECTAPE HANDLER /DISCRIPTIONS / D.E. WREGE /THE PURPOSE OF THIS PROGRAM IS TO REPLACE /PRTC12F - WHICH IS WRITTEN IN LINC MODE AND /IS ALMOST IMPOSSIBLE TO FIGURE OUT. THIS CODE /IS ALMOST ENTIRELY WRITTEN IN 8-MODE WITH /A REASONABLE AMOUNT OF COMMENTS (HOPEFULLY).
/SPECIAL PDP-12 INSTRUCTIONS /LINC-TAPE RDE= 0702 /READ A TAPE BLOCK RDC= 0700 /READ AND CHECK WRI= 0706 /WRITE A TAPE BLOCK WRC= 0704 /WRITE AND CHECK WRG= 0705 /WRITE MULTIPLE AND CHECK AXO= 0001 /AC TO EXTENDED OPERATIONS XOA= 0021 /EXTENDED OPS TO AC TAC= 0003 /TAPE AC TO AC TMA= 0023 /AC TO TAC SWD= 0457 /SKIP ON WORD DONE (IN TAC) SBM= 0414 /SKIP ON BLOCK MARK (IN TAC) /MODE CONTROL PDP= 0002 /SWITCH TO 8-MODE LINC= 6141 /SWITCH TO LINC-MODE(WITH RELUCTANCE) /OTHER LINC MODE BCO= 1640 /XOR BCL= 1540 /BIT CLEAR J= 0020 /THE I BIT LJMP= 6000 /LINC JMP LNOP= 0016 /LINC NOOP /SOME NOTES ON RUNNING THE TC12 AND TC12F / THE WORD DONE FLAG IS PRESENT FOR A FINITE / PERIOD OF TIME (UNTIL NEXT WORD SHIFTING) / WHICH MEANS THAT IF THE PROGRAM IS TWO FAST / THERE MIGHT BE OVERLAP. IT TURNS OUT THAT A / MAINTAINANCE MODE 6152 WITH AC4 SET (CLEAR 8 / BLOCK) ALSO CLEARS TAPE WORD (SEE DRAWING "LIP" / AND "LTM". HOWEVER, ONE MUST WAIT APPROX. / 5 MEMORY CYCLES BEFORE THE WORD DONE FLOP CAN / BE CLEARED.(SEE NOPS IN "WRDWT". / THE MM INSTR 6152 WITH AC6(0) DOES NOT SET / UNIT 0, RATHER UNIT 1 MUST BE DESELECTED VIA / A TAPE PRESET. A 6152 WITH AC6(1) SETS UNIT 1. / IT APPEARS (ALTHOUGH I CAN'T FIND IT IN THE / PRINTS) THAT SWD AND SBM DO NOT WORK IF IN / MAINTAINANCE MODE. HENCE, THE SEARCH ROUTINE / TAKES THE TC12 OUT OF MAINTAINANCE MODE TO LOOK / FOR BLOCKS AND EXITS THAT WAY. / THE BLOCKNUMBER IS A 18 BIT WORD, BUT THE / HARDWARE MUST READ AND WRITE IN 12 BIT WORDS. / HENCE IN THE SEARCH ROUTINE ONE WILL NOTE THE / PRESENCE OF A "SKIP THE SHORT WORD" COMMENT / THIS IS TO SKIP OVER THE REST OF THE BLOCK / NUMBER. / SINCE IT IS SO CONFUSING THIS IS HOW THE CONTROL / WORDS SEEM TO BE LAYED OUT ON THE TAPE. THE / BLOCK MARK,GUARD WORD,LOCK,AND CHECKSUM ARE EACH / 18 BIT WORDS PRECEEDING THE DATA. THE ACTUAL / PARITY INFORMATION IS CONTAINED IN THE LAST / 6-BITS OF THE FORWARD CHECKSUM WORD, / AND IN THE FIRST 6-BITS OF THE REVERSE / CHECKSUM WORD(I BELEIVE.) UPON SETTING / OF BM(SBM) THE FIRST 12 BITS OF THE BLOCK / MARK WORD HAVE BEEN READ. IN THE SEARCH / ROUTINE ONE WORD IS ALWAYS SKIPPED WHICH IS / THE LAST 6 BITS OF THE BLOCK MARK AND THE / FIRST 6 BITS OF THE GUARD. THEN THE READ / AND WRITE SUBROUTINES SKIP 2 CONTROL WORDS / OF 12 BITS EACH. THESE ARE THE LAST 12 BITS / OF THE GUARD AND THE FIRST 12 BITS OF THE LOCK. / AT THIS POINT THE WRITE ROUTINE TURNS ON THE / WRITERS, WHILE STILL IN THE LOCK WORD. THEN ONE / MORE 12 BIT WORD IS IGNORED BY THE READ ROUTINE / WHICH IS THE LAST 6 BITS OF LOCK AND THE / FIRST 6 BITS OF CHECKSUM. THE WRITE ROUTINE / HOWEVER MUST WRITE THIS WORD, THE REVERSE / CHECKSUM. THAT TAKES CARE OF ALL OF THE CONTROL / WORDS.
/DEFINITIONS DIRECT=7000 /PDP-10 DIRECTORY BUFFER (FIELD 1) IBUF10=3000 /PDP-10 INPUT BUFFER (FIELD 1) INBUF=3000 /PS8 INPUT BUFFER (FIELD 1) OBUF10=5000 /PDP-10 OUTPUT BUFFER (FIELD 1) OUBUF=5000 /PS8 OUTPUT BUFFER (FIELD 1) OUDEVH=7200 /OUTPUT DEVICE (FIELD 0) INDEVH=6600 /INPUT DEVICE (FIELD 0) INCTL=1010 /INPUT CONTROL OUCTL=5010 /OUTPUT CONTROL INRECS=4 /INPUT RECORDS MDATE=7666 /MONITOR'S DATE (FIELD 1) MINPUT=7617 /INPUT LIST (FIELD 1) MOUTPU=7600 /OUTPUT LIST (FIELD 1) MPARAM=7643 /PARAMETER LIST (FIELD 1) DCB=7760 /DEVICE CONTROL BLOCK (FIELD 1) PTP=20 /DCB VALUE OF THE PAPER TAPE PUNCH
/PAGE ZERO AND POINTERS /******DANGER************************** /THE LINCMODE JUMPS WRITE PUT A RETURN* /IN LOCATION ZERO. DON'T USE!!!!!! * /******DANGER************************** *10 INDEX0, 0 /AUTO-INDEX REGISTERS INDEX1, 0 INDEX2, 0 INDEX3, 0 INDEX4, 0 INDEX5, 0 INDEX6, 0 IXR, 0 /INPUT LIST INDEX REGISTER *20 UNIT10, 0 /CURRENT PDP-10 UNIT (U400) POINT, 0 /GENERAL POINTER CNTR, 0 /GENERAL COUNTER TEMP1, 0 /TEMPORARIES TEMP2, 0 TEMP3, 0 TEMP4, 0 TEMP5, 0 TEMP6, 0 CHARNI, 0 /CHARACTER INPUT NUMBER CHARNO, 0 /CHARACTER OUTPUT NUMBER OUNIT, 0 /OUTPUT UNIT IUNIT, 0 /INPUT UNIT IBLOCK, 0 /INPUT BLOCK OBLOCK, 0 /OUTPUT BLOCK INPUT, 0 /INPUT ROUTINE POINTER OUTPUT, 0 /OUTPUT ROUTINE POINTER IPOINT, 0 /INPUT POINTER OPOINT, 0 /OUTPUT POINTER SAVELN, 0 /OPTION /P SWITCH MODE, 0 /OPTION /I SWITCH WORDS, 0 /WORDS LEFT COUNTER DATE, 0 /TODAY'S DATE FREEP, 0 /POINT TO FREE SPOT PRINT0, 0 /PRINT ROUTINE TEMPORARIES PRINT1, 0 PRINT2, 0 PRINT3, 0 PRINTC, 0 /240 FOR LEADING SPACES RBFLAG, 0 /RUBOUT FLAG CDDEVF, 0 /DEFAULT DEVICE NAME 0 CDNAME, 0 /FILE NAME 0 0 CDEXT, 0 /FILE EXTENSION 0 0 /FILLER WORD PERSW, 0 /PERIOD SWITCH DEVSW, 0 /DEVICE SWITCH CDDEV, 0 /DEVICE 0 INSEG, 0 /PDP-10 UNIT WITH DIRECTORY IN CORE PDP10D, -1;-1;-1;-1 /LIST OF KNOWN PDP-10 UNITS -1;-1;-1;-1 /STARTS ALL PS/8 CDCNT, 0 /INPUT LIST COUNTER CDI04, 0 /POINTER SAVE
PAGE JMP I (PIP10 /NORMAL ENTRY HLT /ERROR ROUTINES IOERR, JMS ERROR /I/O ERROR ERMES1-1 NOROOM, JMS ERROR /NO ROOM IN TAPE OR DIRECTORY ERMES2-1 NOOFIL, JMS ERROR /NO FILE WAS FOUND ERMES3-1 NOT10F, JMS ERROR /NOT A PDP-10 FILE ERMES4-1 ERDELF, JMS ERROR /ERROR DELETING A FILE ERMES5-1 NOTPSF, JMS ERROR /NOT A PS8 FILE ERMES6-1 NOOOFL, JMS ERROR /ERROR OPENING THE OUTPUT FILE ERMES7-1 SYNTAX, JMS ERROR /SYNTAX ERROR ERMES8-1 ERROR, 0 /ERROR ROUTINE CLA CDF TAD I ERROR DCA INDEX0 /POINT TO MESSAG-1 TAD (ERROR3 DCA OUTPUT /SET TTY: OUTPUT JMS ERROR4 /PRINT THE STRING JMP I (PIPCD /AND BACK TO NORMAL ERROR4, 0 /PRINT THE STRING POINTED BY INDEX0 TAD I INDEX0 DCA TEMP1 /SAVE WORD TAD TEMP1 RTR RTR RTR JMS ERROR2 /BREAK IT DOWN TAD TEMP1 JMS ERROR2 JMP ERROR4+1 /LOOP ERROR2, 0 AND [77 /USE 6 BITS SNA JMP I ERROR4 /END DCA TEMP2 TAD TEMP2 AND (40 SNA CLA TAD (100 TAD [200 /MAKE A CHAR TAD TEMP2 TAD (-337 /_ IS SPECIAL SNA TAD (215-337 TAD (337 JMS ERROR7 /PUT IT JMP I ERROR2 ERROR7, 0 DCA TEMP2 TAD TEMP2 JMS I OUTPUT TAD TEMP2 TAD (-215 SZA CLA JMP I ERROR7 TAD (212 JMP ERROR7+1 ERROR3, 0 TLS TSF JMP .-1 CLA JMP I ERROR3 PAGE
/PDP-10 DECTAPE SERVICE ROUTINE / /CALL: / JMS READT /READ PDP-10 DECTAPE / BUFFER /BUFFER ADDRESS - FIELD 1 / BLOCK /BLOCK NUMBER / / JMS WRITET /WRITE PDP-10 DECTAPE / BUFFER /BUFFER ADDRESS - FIELD 1 / BLOCK /BLOCK NUMBER / /THE UNIT IS IN "UNIT10" WRITET, 0 /MOSTLY COMMON CODE CDF 0 /FOR SOME DUMB REASON THE /PROGRAM CALLS TESE ROUTINES /WITH THE DATA FIELD SOMEWHAT /ARBITRARY. CLA STL RAR /FOR WRITE LOCK TEST DCA RWLOCK TAD (WRITE8 /INDICATE WRITE RWCOM, DCA RWFUNCT /STASH: COMMON CODE START TAD I WRITET /PICK UP C.A. DCA RWADDR /STASH TAD RWADDR /COPY FOR DCA RWL1 /R/W FUNCTION TAD RWADDR /COPY FOR DCA RWL2 /SWITCHEROO ISZ WRITET /POINT TO BLK # TAD I WRITET /PICK IT UP DCA RWBLCK /AS STASH FOR R/W JMS I (QSWITCH /TO 8-FORMAT CDF 10 /ALL BUFFERS IN FIELD 1 RWADDR, 0 /CA DCA READT /SAVE PARITY TAD UNIT10 /UNIT NUMBER IS IN RTL;RTL /HIGH ORDER: ROT OVER AND (7 /MASK FOR UNIT TAD RWLOCK /FOR W/LOCK TEST DCA .+2 /TIME TO FIND BLOCK JMS I (STARTUP /START PROPER UNIT 0 RWAGAI, JMS I (SEARCH /FIND THE BLOCK RWBLCK, 0 JMP RWAGAIN /TRY AGAIN TAD READT /PICK UP PARITY JMS I RWFUNCT /GO DO IT CDF 10 RWL1, 0 -600 /=128 36-BIT WORDS SZA CLA /SKIP IF PARITY O.K. JMP RWAGAIN /TRY AGAIN JMS I (QSWIT8 /BACK TO L-FORMAT CDF 10 RWL2, 0 CLA CLL /FORGET PARITY JMS TSTOP /STOP TAPE ISZ WRITET JMP I WRITET READT, 0 /FIX UP COMMON ENTRY CDF 0 CLA CLL /JUST IN CASE TAD READT /PICK UP ENTRY DCA WRITET /MAKE COMMON CALL DCA RWLOCK /DON'T CHECK W/LOCK TAD (READ8 /INDICATE READ JMP RWCOM /GO TO COMMON CODE RWFUNC, 0 RWLOCK, 0
/TABL2A,TABL2B,TABL2C IS FOR LINC TO 8-TAPE /OBVERSE IN 3 4-BIT LOOKUPS. BIT MAPS ARE AS /FOLLOWS: / LINC BITS 8-TAPE / 0 1 2 3 4 5 6 7 8 9 10 11 / 0-3 2 1 0 3 / 4-7 5 4 7 6 / 8-11 8 11 10 9 TABL2A=. /FOR BITS 0-3 0000;0004;4000;4004;0200;0204;4200;4204 0010;0014;4010;4014;0210;0214;4210;4214 TABL2B=. /FOR BITS 4-7 0000;0040;0002;0042;2000;2040;2002;2042 0100;0140;0102;0142;2100;2140;2102;2142 TABL2C=. /FOR BITS 8-11 0000;0400;0020;0420;0001;0401;0021;0421 1000;1400;1020;1420;1001;1401;1021;1421 PAGE
/SUBROUTINE TO FIND THE CORRECT BLOCK /TAPE MUST ALREADY BE RUNNING. DOES CHECK /FOR MOTION. RETURNS WHEN AT BLOCK MOVING /IN POSITIVE 8-TAPE DIRECTION(=NEG. LINC TAPE /DIRECTION). /CALL: JMS SEARCH / DESIRED BLOCK / ERR RET /E.G. TAPE NOT RUNNING / NORM RET /AT CORRECT BLOCK SEARCH, 0 TAD I SEARCH /GET BN JMS SHUFL /PUT IT IN 8-TAPE FORM CIA /FOR FAST EXIT ON FOUND DCA MBN /MBN CONTAINS -BN IN 8 FORMAT TAD I SEARCH /NO GET IT IN L-TAPE FORM DCA BN /FOR SLOW SEARCHES ISZ SEARCH /POINT TO ERROR EXIT TAD (5000 /SO WE CAN GET UNITS&MOTION 6151 /LOAD TMR 6154 /PICK UP MOTION AND (4 /MASK FOR DIRECTION SZA CLA /SKIP IF CURRENT DIR=FOR. /NOTE: DIR(1) MEANS REVERSE 8-TAPE JMP BACKWARDS /IS GOING BACKWARDS (8-TAPE) FORWAR, CLA CLL /MOVE TAPE IN FORWARD (8-TAPE) DIR TAD (226 /SET FOR. CLEAR 8-BLOCK 6152 /DO IT. CLA CLL LINC /GO TO LINC FOR SBM SBM /WAIT FOR BLOCK MARK .-1&1777!LJMP /LINC JMP .-1 TAC /READ BLOCK NUMBER PDP /BACK TO THE REASONABLE PROCC. TAD MBN /QUICK TEST FOR GOT IT SZA /SKIP IF AT CORRECT BLOCK JMP .+4 /NO: HAVE LOTS OF TIME JMS WRDWT /SKIP THE SORT WORD ISZ SEARCH /QUICK EXIT JMP I SEARCH CIA /NOW TO REFORM BN TAD MBN /RESTORE -BN CIA /MAKE IT POS. (IS IN 8-FORMAT) JMS SHUF8 /PUT IT IN LINC FORMAT SPA /SKP IF NOT IN END ZONE JMP FORWARD /IN END ZONE=GO FORWARD CIA /NOW TO SEE WHICH WAY TAD BN /WHERE-HERE SMA CLA /SKIP IF PAST IT JMP FORWARD /NO: KEEP GOING
/MOVE THE TAPE BACKWARD AND SEARCH BACKWA, CLA CLL /JUST IN CASE TAD (306 /BACKWARD 6152 /ALSO CLEARS BM CLA CLL TAD BN /PICK UP DESIRED BN TAD (-3 /TO SEE IF BN<3 SPA CLA /SKIP IF BN>3 JMP DEEP /DO SPECIAL FOR BN<4 LINC /NOW TO FIND WHERE WE ARE SBM /WAIT FOR BLOCK MARK .-1&1777!LJMP /LINC JMP .-1 TAC /LOAD UP WITH BN PDP /BACK TO 8 MODE JMS SHUF8 /BUT BN IN L-FORMAT TAD (3 /WANT TO GO 3 TOO FAR CIA TAD BN /CHECK AGAINST DESIRED BN SNA /FIRST: ARE WE THERE JMP FORWARD /YES: GO FORWARD SPA CLA /SKIP IF TOO FAR REVERSE JMP BACKWARD /NO:KEEP BACKING UP JMP FORWARD /YES: GO FORWARD TO BLOCK /SPECIAL ROUTINE FOR BLOCK NUMBERS < 4 DEEP, LINC /DEEP IN THE HOLE SBM /WAIT FOR BM .-1&1777!LJMP /LINC JMP .-1 TAC /READ THE BM PDP /BACK TO 8-MODE JMS SHUF8 /CONVERT TO L-FORMAT SZA CLA /SKIP IF AT BLOCK 0 JMP BACKWARD /KEEP GOING IN REVERSE TAD (-10 /SET UP FOR A LITTLE MORE WAIT DCA TS1 /A COUNTER DCA TS2 /DOUBLE DEEP ISZ TS2 /START WAITING JMP .-1 ISZ TS1 /KEEP WAITING JMP .-3 JMP FORWARD /HAVE WAITED LONG ENOUGH MBN, 0 /-BLOCK # BN, 0 /BLOCK # TS1, 0 TS2, 0
/SOME SUBROUTINES FOR READ,WRITE, AND SEARCH /WAIT FOR A WORD AND IGNORE IT WRDWT, 0 LINC /OVER TO LINC MODE SWD /WAIT FOR WORD DONE .-1&1777!LJMP /LINC JMP .-1 PDP /BACK TO 8-MODE IOT;IOT /PUTS IN A LITTLE DELAY /SO WE CAN CLEAR WORD DONE TAD (226 /THIS WILL CLEAR WD 6152 CLA CLL JMP I WRDWT /WAIT FOR A WORD, READ IT, AND CLR WD REDWRD, 0 LINC /OVER TO LINC MODE SWD /WAIT FOR WORD .-1&1777!LJMP TAC /READ IT PDP DCA WRDWT /STASH TAD (226 /FOR CLEARING WRD DONE 6152 CLA CLL TAD WRDWT /PICK WRD BACK UP JMP I REDWRD /AND RETURN /WRITE A WORD AND CLR WRD DONE WRTWRD, 0 LINC SWD .-1&1777!LJMP PDP 6154 /LOAD TAPE BUFFER CLA CLL IOT;IOT /A LONG NOP OR TWO TAD (227 /TO CLEAR WORD DONE 6152 CLA CLL JMP I WRTWRD PAGE
/FIND A SLOT ROUTINE /SLOT NUMBERS BETWEEN 0 AND 1101 /RETURN WITH A 5 BIT NUMBER (1 TO 26 OCTAL) / /CALL: / JMS FINDSL /FIND A SLOT / SLOT# /SLOT NUMBER / (AC) /VALUE OF SLOT RETURNED / /SLOT NUMBER OF 0 RETURNS 7777 *1000 FINDSL, 0 /FIND A SLOT CLA CMA TAD I FINDSL /GET SLOT NUMBER-1 ISZ FINDSL SPA /WAS IT 0? JMP FINDSA /YES JMS DIV7 /NO - DIVIDE BY 7 TAD (JMP I FINDS0+7 DCA DIV1 /USE REMAINDER FOR JUMPING CDF 10 /BUFFER IS IN FIELD 1 DIV1, HLT /TEMPORARY AND JUMP CELL FINDSA, CLA CMA JMP I FINDSL /EXIT WITH 7777 FOR SLOT NUMBER 0 FINDS0, FINDS1 /JUMP TABLE FINDS2 FINDS3 FINDS4 FINDS5 FINDS6 FINDS7 /DIVIDE BY 7 ROUTINE DIV7, 0 /DIVIDE BY 7 DCA DIV1 /SAVE IT TAD (DIRECT DCA POINT /POINT TO DIRECTORY TAD DIV1 DIV3, TAD (-7 /SUBTRACT 7'S SPA JMP I DIV7 /EXIT WITH REMAINDER ISZ POINT /BUMP POINTER BY 3 ISZ POINT ISZ POINT JMP DIV3 /AND LOOP /FIND SLOT ROUTINE #1 /USE WORD 1 BITS 0-4 FINDS1, TAD I POINT /GET CELL RTL RTL RTL /GET FIRST 5 BITS FINDS8, AND [37 /ONLY 5 BITS CDF /BACK TO FIELD 0 JMP I FINDSL /AND EXIT WITH VALUE IN AC /FIND SLOT ROUTINE #2 /USE WORD 1 BITS 5-9 FINDS2, TAD I POINT RTR /USE BITS 5-9 JMP FINDS8 /FIND SLOT ROUTINE #3 /USE WORD 1 BITS 10-11 AND WORD 2 BITS 0-2 FINDS3, TAD I POINT AND [3 /USE BITS 10-11 OF 1ST WORD CLL RTL RAL /SHIFT TO BITS 7-8 DCA DIV1 /SAVE IT ISZ POINT /NEXT WORD TAD I POINT CLL RTL FINDS9, RTL /GET INTO BITS 8-11 AND [17 /GET ONLY BITS 8-11 TAD DIV1 /ADD OTHER BITS JMP FINDS8 /FIND SLOT ROUTINE #4 /USE WORD 2 BITS 3-7 FINDS4, ISZ POINT /USE 2ND WORD TAD I POINT RTR /USE BITS 3-7 JMP FINDS2+1 /FIND SLOT ROUTINE #5 /USE WORD 2 BITS 8-11 AND WORD 3 BIT 0 FINDS5, ISZ POINT /USE 2ND WORD TAD I POINT AND [17 CLL RAL /GET BITS 7-10 DCA DIV1 /AND SAVE THEM ISZ POINT /NEXT WORD CLL CLA CML RAR AND I POINT /GET BIT 0 JMP FINDS9 /FIND SLOT ROUTINE #6 /USE WORD 2 BITS 1-5 FINDS6, ISZ POINT ISZ POINT /USE 3RD WORD TAD I POINT RAL JMP FINDS1+1 /FIND SLOT ROUTINE #7 /USE WORD 3 BITS 6-10 FINDS7, ISZ POINT ISZ POINT /USE 3RD WORD TAD I POINT RAR /GET RID OF LAST BIT JMP FINDS8
/THESE TABLES ARE FOR FIGURING OUT THE OBVERSE /TABL1A,TABL1B,TABL1C ARE FOR 8-TAPE TO LINC /IN 4-BIT LOOKUPS. BIT MAPS ARE AS /FOLLOWS: / 8-TAPE BITS LINC-TAPE / 0 1 2 3 4 5 6 7 8 9 10 11 / 0-3 0 1 2 3 / 4-7 4 5 6 7 / 8-11 8 9 10 11 TABL1A=. /FOR BITS 0-3 0000;0001;0010;0011;0100;0101;0110;0111 1000;1001;1010;1011;1100;1101;1110;1111 TABL1B=. /FOR BITS 4-7 0000;0002;0020;0022;0200;0202;0220;0222 2000;2002;2020;2022;2200;2202;2220;2222 TABL1C=. /FOR BITS 8-11 0000;0004;0040;0044;0400;0404;0440;0444 4000;4004;4040;4044;4400;4404;4440;4444 PAGE
/FILL A SLOT ROUTINE / /CALL: / JMS FILLSL /FILL A SLOT / SLOT# /SLOT NUMBER / VALUE /VALUE TO FILL SLOT WITH / /SLOT NUMBER 0 IS ILLEGAL! FILLSL, 0 /FILL A SLOT ROUTINE CLA CMA TAD I FILLSL /GET SLOT NUMBER-1 ISZ FILLSL JMS I (DIV7 /DIVIDE BY 7 TAD (JMP I FILLS0+7 DCA FILLS9 /USE REMAINDER FOR JUMPING TAD I FILLSL /GET VALUE ISZ FILLSL AND [37 /5 BIT VALUE ONLY CDF 10 /DIRECTORY IS IN FIELD 1 FILLS9, HLT /TEMPORARY AND JUMP CELL /JUMP TABLE FILLS0, FILLS1 FILLS2 FILLS3 FILLS4 FILLS5 FILLS6 FILLS7 FILLSA, 0 /TEMPORARY /FILL SLOT ROUTINE #1 /BITS 0-4 OF WORD 1 FILLS1, CLL RTR RTR /VALUE INTO BITS 0-4 RTR DCA FILLS9 /SAVE VALUE TAD I POINT AND [177 /AND OFF BITS 0-4 FILLS8, TAD FILLS9 /ADD IN VALUE DCA I POINT /SET NEW WORD CDF /BACK TO FIELD 0 JMP I FILLSL /EXIT /FILL SLOT ROUTINE #2 /BITS 5-9 OF WORD 1 FILLS2, CLL RTL /VALUE INTO BITS 5-9 DCA FILLS9 /SAVE VALUE TAD I POINT AND (7603 /AND OFF BITS 5-9 JMP FILLS8 /FILL SLOT ROUTINE #3 /BITS 10-11 OF WORD 1 AND BITS 0-2 OF WORD 2 FILLS3, DCA FILLS9 /SAVE VALUE TAD FILLS9 CLL RAR CLL RAR /GET BITS 10-11 CLL RAR DCA FILLSA /SAVE TAD I POINT AND (7774 /AND OFF BITS 10-11 TAD FILLSA /ADD IN BITS 10-11 DCA I POINT /SET NEW WORD ISZ POINT /GOTO WORD 2 TAD FILLS9 AND [7 /GET BITS 0-2 CLL RTR RTR /SHIFT THEM DCA FILLS9 /SAVE VALUE TAD I POINT AND (777 /AND OFF BITS 0-2 JMP FILLS8 /FILL SLOT ROUTINE #4 /BITS 3-7 OF WORD 2 FILLS4, CLL RTL RTL /SHIFT INTO POSITION DCA FILLS9 /AND SAVE ISZ POINT /USE WORD 2 TAD I POINT AND (7017 /AND OFF BITS 3-7 JMP FILLS8 /FILL SLOT ROUTINE #5 /BITS 8-11 OF WORD 2 AND BIT 0 OF WORD 3 FILLS5, DCA FILLS9 TAD FILLS9 /GET VALUE CLL RAR /GET BITS 8-11 DCA FILLSA /AND SAVE ISZ POINT /USE WORD 2 FIRST TAD I POINT AND [7760 /AND OFF BITS 8-11 TAD FILLSA /ADD IN THOSE BITS DCA I POINT /SET NEW WORD 2 ISZ POINT /NOW WORD 3 CLA IAC AND FILLS9 /GET BIT 0 CLL RTR /AND SHIFT INTO POSITION DCA FILLS9 /AND SAVE IT CLL CLA CMA RAR AND I POINT /AND OFF BIT 0 JMP FILLS8 /FILL SLOT ROUTINE #6 /BITS 1-5 OF WORD 3 FILLS6, CLL RTL RTL /SHIFT INTO POSITION RTL DCA FILLS9 /AND SAVE ISZ POINT ISZ POINT /USE WORD 3 TAD I POINT AND (4077 /AND OFF BITS 1-5 JMP FILLS8 /FILL SLOT ROUTINE #7 /BITS 6-10 OF WORD 3 /BIT 11 OF WORD 3 A 0 FILLS7, CLL RAL /SHIFT INTO POSITION DCA FILLS9 /AND SAVE ISZ POINT ISZ POINT /USE WORD 3 TAD I POINT AND [7700 /AND OFF BITS 6-11 JMP FILLS8 PAGE
/FIND A PDP-10 ENTRY IN DIRECTORY / /CALL: / (AC) /POINT TO NAME-1 (FIELD 1) / JMS FIND /FIND A PDP-10 ENTRY / -NO- /NOT FOUND / (AC) /SLOT NUMBER IF FOUND FIND, 0 /FIND A PDP-10 FILE DCA FIND4 /SAVE POINTER TAD (DIRECT+370 DCA INDEX0 /POINT TO DIRECTORY START TAD (-26 DCA CNTR /22 DECIMAL FILES CDF 10 /DIRECTORY IS IN FIELD 1 FIND2, TAD FIND4 /GET POINTER DCA INDEX2 /POINT TO NAME,EXT TAD I INDEX0 CIA TAD I INDEX2 /CHECK WORD 1 SZA CLA JMP FIND1 /NO TAD I INDEX0 CIA TAD I INDEX2 /CHECK WORD 2 SZA CLA JMP FIND1+1 /NO TAD I INDEX0 CIA TAD I INDEX2 /CHECK WORD 3 SZA CLA JMP FIND1+2 /NO TAD INDEX0 TAD [77 DCA INDEX1 /POINT TO EXTENSIONS TAD I INDEX1 CIA TAD I INDEX2 /CHECK WORD 4 SZA CLA JMP FIND1+2 /NO TAD I INDEX1 AND [7700 CIA TAD I INDEX2 /CHECK WORD 5 SZA CLA JMP FIND1+2 /NO CLL CLA CMA RTL TAD INDEX0 DCA INDEX0 /POINT TO ENTRY AGAIN TAD CNTR TAD (27 ISZ FIND /WE FOUND IT - 2ND EXIT FIND3, CDF /BACK TO FIELD 0 JMP I FIND /EXIT FIND1, ISZ INDEX0 /EXTRA POINTER BUMPS ISZ INDEX0 ISZ CNTR /MORE FILES? JMP FIND2 /YES - LOOP JMP FIND3 /NO - NOT FOUND FIND4, 0 /POINTER TO NAME-1
/DELETE A PDP-10 ENTRY / /CALL: / (AC) /POINT TO NAME-1 (FIELD 1) / JMS DELETE /DELETE A PDP-10 ENTRY / -NO- /NOT FOUND / -OK- /ENTRY DELETED DELETE, 0 /DELETE A PDP-10 ENTRY JMS FIND /TRY TO FIND IT FIRST JMP I DELETE /NOT FOUND ISZ DELETE /FOUND - 2ND EXIT DCA DELET1 /SAVE SLOT NUMBER CLA IAC DCA DELET2 /START AT SLOT 1 TAD (-1101 DCA DELET3 /DO 1101 SLOTS JMS I (FINDSL /FIND A SLOT DELET2, 0 /SLOT NUMBER CIA TAD DELET1 /IS IT ONE OF OURS? SZA CLA JMP DELET4 /NO TAD DELET2 /YES DCA .+2 /SET SLOT NUMBER AGAIN JMS I (FILLSL /FILL WITH A 0 0 0 /FILL WITH A 0 DELET4, ISZ DELET2 /NEXT SLOT ISZ DELET3 /MORE? JMP DELET2-1 /YES - LOOP CDF 10 /DIRECTORY IS IN FIELD 1 DCA I INDEX0 /REMEMBER "FIND" SETTING THIS UP? DCA I INDEX0 /REMOVE THE FILE NAME DCA I INDEX0 TAD INDEX0 TAD [77 DCA INDEX0 /POINT TO EXTENSION DCA I INDEX0 DCA I INDEX0 /REMOVE EXTENSION DCA I INDEX0 CDF JMP I DELETE /EXIT DELET1, 0 /HOLDS FOUND SLOT NUMBER DELET3, 0 /COUNTER PAGE
/GET NEXT SLOT ROUTINE /GOES BY 5'S EITHER FORWARD OR BACKWARD / /CALL: / (AC) /CURRENT BLOCK NUMBER / JMS NEXTSL /GET NEXT SLOT / (AC) /NEXT BLOCK NUMBER / /GOES TO "NOROOM" IF DIRECTORY FULL NEXTSL, 0 /GET NEXT SLOT TAD NEXTDI /ADD IN DIRECTION FACTOR SPA JMP NEXTS2 /<0 MEANS REVERSE DIRECTION TAD [-1102 SMA JMP NEXTS2 />1101 MEANS REVERSE DIRECTION TAD (1102 DCA NEXTS1 /SET NEW BLOCK NUMBER JMS I (FINDSL /IS THIS SLOT FREE? NEXTS1, 0 /BLOCK NUMBER SZA CLA JMP NEXTS3 /NO - NOT FREE TAD NEXTS1 /FREE DCA NEXTS7+1 /SET BLOCK AGAIN NEXTS7, JMS I (FILLSL /FILL THIS SLOT THEN 0 /SLOT TO FILL SLOTNO, 0 /VALUE TO FILL WITH TAD NEXTDI SMA CLA /MAKE SURE DIRECTION IS -4 OR 4 TAD (10 TAD (-4 DCA NEXTDI TAD NEXTS7+1 /GET NEW BLOCK JMP I NEXTSL /EXIT NEXTS2, CLA /REVERSE DIRECTION TAD NEXTDI SMA CLA /SET 0 OR 1101 TAD (1101 DCA NEXTS1 /INTO BLOCK NUMBER TAD NEXTDI CIA /REVERSE DIRECTION JMP NEXTS3+1 /GO PRETEND WE FOUND A FULL SLOT NEXTS3, TAD NEXTDI SMA CLA /MAKE DIRECTION -1 OR 1 CLL CLA CMA RAL CMA DCA NEXTDI /DIRECTION IS -1 OR 1 TAD [-1102 DCA NEXTS4 /CHECK 1102 BLOCKS TAD NEXTS1 DCA NEXTS5 /SET START BLOCK JMS I (FINDSL /CHECK A SLOT NEXTS5, 0 /SLOT TO CHECK SNA CLA JMP NEXTS6 /FOUND A FREE SLOT TAD NEXTS5 TAD NEXTDI /ADD DIRECTION TO SLOT SPA JMP NEXTS2 /<0 IS TOO FAR TAD [-1102 SMA JMP NEXTS2 />1101 IS TOO FAR TAD (1102 DCA NEXTS5 /SET NEW BLOCK ISZ NEXTS4 /TRY MORE? JMP NEXTS5-1 /YES JMP I (NOROOM /NO - OUT OF ROOM NEXTS6, TAD NEXTS5 /GET FREE BLOCK JMP NEXTS7-1 /AND SET IT NEXTS4, 0 /COUNTER NEXTDI, 0 /DIRECTION (5, -5, 1, -1)
/SUBROUTINE TO START THE TAPE UP, WITH /WAITS FOR EVERYTHING O.K. /CALL: JMS STARTUP / UNITS /BIT 0=1 FOR CHECK WRITE ENABLE / /BITS 9-11=UNIT NUMBER STARTU, 0 JMS TSTOP /DO A TAPE PRESET SO WE CAN /SELECT UNIT 0 IF DESIRED. TAD (5000 /MAINT MODE (MM) READ UNITS & MOTION 6151 /LOAD MM UNITS & MOTION CLA STL IAC RTL /AC_6 FOR EXTENDED UNITS AND I STARTU /SNATCH OUT EXTENDED UNITS RAR /ROTATE TO BITS 10-11 DCA XUNITS /SAVE FOR LATER TAD XUNITS /GET BACK TAD (40 /PLUS MAINAINANCE MODE LINC /INTO LINC MODE AXO /TO LOAD EXTENDED OPERATIONS PDP /AND BACK TO 8-MODE CLA CLL IAC /AC_1 AND I STARTU /GET ODD-EVEN UNIT # RTL;RTL;RAL /INTO BIT 6 TAD (206 /AS WELL AS SELECT 8-TAPE, 6152 /CLR 8-BLK, AND SET MOTION CLA CLL TAD (100 /WE SHALL NOW SET BACKWARDS 6152 /WHY I DON'T KNOW. CLA CLL 6154 /READ UNITS AND MOTION RTR /TAP OK TO L: WR.EN. TO AC0 SNL /SKIP IF UNIT READY JMP STARTU+1 /NO GO BACK AND DO IT AGAIN AND (4000 /KEEP ONLY WR.EN CMA AND I STARTU /CLR IF READ ONLY SPA CLA /SKIP IF ALL OK JMP STARTU+1 /WRITE EN. NOT ON TAD XUNITS /GET EXTENDED UNITS LINC AXO /AND GET OUT OF MAINT MODE PDP CLA CLL ISZ STARTU /ALL SYSTEMS "GO"! JMP I STARTU /RETURN WITH TAPE RUNNING /STOP THE TAPE TRANSPORT TSTOP, 0 CLA STL RAR /AC_4000 6152 /DO A TAPE PRESET CLA CLL JMP I TSTOP /AND RETURN WITH AC=0 XUNITS, 0 /SAVE EXTENDED UNITS HERE PAGE
/*******LOOK OUT!!!!******* /LINK JUMPS WRITE INTO THE FIRST /LOCATION IN THIS PAGE!!!!!!!!! /*******DANGER!!!********** 0 /IN THIS ONE /PDP-10 CHARACTER OUTPUT ROUTINE / /CALL: / (AC) /CHARACTER / JMS OCHR10 /OUTPUT TO PDP-10 / -RETURN- /O.K. RETURN OCHR10, 0 /OUTPUT TO PDP-10 AND [377 /AT MOST USE 8 BITS DCA OCHARY /SAVE CHAR TAD MODE /IMAGE MODE? SZA CLA JMP .+4 /YES TAD OCHARY /NO - USE 7 BITS AND [177 DCA OCHARY TAD CHARNO /GET CHAR NUMBER TAD (JMP I OCHARX DCA OCHARZ /USE TO SET UP JUMP CDF 10 /BUFFER IS IN FIELD 1 OCHARZ, 0 /JUMP TO THE ROUTINE OCHARY, 0 /TEMPORARY OCHARX, OCHAR0 OCHAR1 OCHAR2 OCHAR3 OCHAR4 /OUTPUT CHARACTER #0 - BITS 0-6 WORD 1 OCHAR0, TAD I [OBUF10+2 AND [177 /GET COUNT TAD (-177 SZA CLA JMP OCHARA /STILL ROOM IN BUFFER CDF /NO ROOM IN BUFFER TAD OBLOCK JMS I (NEXTSL /GET THE NEXT BLOCK NUMBER DCA OCHARZ /AND SAVE IT CDF 10 /BACK TO FIELD 1 TAD OCHARZ AND [7700 CLL RTR RTR RTR /GET LINK POINTER DCA I [OBUF10 TAD OCHARZ AND [77 CLL RTL RTL RTL TAD I [OBUF10+1 DCA I [OBUF10+1 /AND SET POINTER TAD OUNIT DCA UNIT10 /SET OUR UNIT TAD OBLOCK DCA .+3 /AND OUR BLOCK JMS I (WRITET /WRITE PDP-10 DECTAPE OBUF10 0 /BLOCK NUMBER IS SET CDF 10 /BACK TO FIELD 1 DCA I [OBUF10 TAD I [OBUF10+1 AND [77 DCA I [OBUF10+1 /CLEAR POINTER TAD OCHARZ DCA OBLOCK /SET NEW BLOCK TAD I [OBUF10+2 AND [7400 DCA I [OBUF10+2 /ZERO COUNT TAD (OBUF10+3 DCA OPOINT /RESET POINTER OCHARA, ISZ I [OBUF10+2 /BUMP COUNT TAD MODE /IMAGE MODE? SNA CLA JMP OCHARB /NO DCA I OPOINT /YES ISZ OPOINT DCA I OPOINT ISZ OPOINT TAD OCHARY DCA I OPOINT /SET 8 BITS ISZ OPOINT OCHARC, CDF /BACK TO FIELD 0 JMP I OCHR10 /EXIT OCHARB, TAD OCHARY CLL RTL RTL RAL /USE BITS 0-6 OCHARD, DCA I OPOINT /SET IT ISZ CHARNO /BUMP CHARACTER NUMBER JMP OCHARC /OUTPUT CHARACTER #1 - BITS 7-11 WORD 1 AND BITS 0-1 WORD 2 OCHAR1, TAD OCHARY CLL RAR /GET BITS 7-11 CLL RAR TAD I OPOINT DCA I OPOINT /SET WORD 1 ISZ OPOINT /NOW WORD 2 TAD OCHARY AND [3 CLL RTR RAR /GET BITS 0-1 JMP OCHARD /OUTPUT CHARACTER #2 - BITS 2-8 WORD 2 OCHAR2, TAD OCHARY CLL RTL RAL /GET BITS 2-8 TAD I OPOINT JMP OCHARD /OUTPUT CHARACTER #3 - BITS 9-11 WORD 2 AND BITS 0-3 WORD 3 OCHAR3, TAD OCHARY CLL RTR RTR AND [7 /GET BITS 9-11 TAD I OPOINT DCA I OPOINT /SET WORD 2 ISZ OPOINT /NOW WORD 3 TAD OCHARY AND [17 CLL RTR RTR RAR /GET BITS 0-3 JMP OCHARD /OUTPUT CHARACTER #4 - BITS 4-10 WORD 3 /BIT 11 WORD 3 IS 0 OCHAR4, DCA CHARNO /RESET CHARACTER NUMBER TAD OCHARY CLL RAL /BITS 4-10 TAD I OPOINT DCA I OPOINT /SET WORD 3 ISZ OPOINT JMP OCHARC PAGE
/PDP-10 CHARACTER INPUT / /CALL: / JMS ICHR10 /PDP-10 INPUT / -EOF- /END OF FILE RETURN / (AC) /NORMAL RETURN - CHARACTER IN AC ICHR10, 0 /PCP-10 INPUT ROUTINE TAD CHARNI TAD (JMP I ICHARX DCA ICHARY /USE CHARACTER NUMBER TO FORM JUMP CDF 10 /BUFFER IS IN FIELD 1 ICHARY, 0 /TEMPORARY AND JUMP CELL ICHARX, ICHAR0 ICHAR1 ICHAR2 ICHAR3 ICHAR4 /INPUT CHARACTER #0 - BITS 0-6 WORD 1 ICHAR0, TAD WORDS /GET NUMBER OF WORD LEFT SZA CLA JMP ICHARA /STILL MORE WORDS LEFT TAD IBLOCK /GET NEXT BLOCK SNA JMP ICHARC+1 /NONE - EOF DCA .+5 /SET NEXT BLOCK TAD IUNIT DCA UNIT10 /SET OUR UNIT JMS I (READT /READ PDP-10 DECTAPE IBUF10 0 /OUR BLOCK IS SET CDF 10 /BACK TO FIELD 1 TAD I [IBUF10+2 AND [177 DCA WORDS /SET NUMBER OF WORDS TAD I [IBUF10+1 RTR RTR RTR AND [77 DCA IBLOCK /SET NEXT BLOCK TAD I [IBUF10 AND [77 CLL RTL RTL RTL TAD IBLOCK DCA IBLOCK /SET NEXT BLOCK TAD (IBUF10+3 DCA IPOINT /RESET POINTER JMP ICHAR0 ICHARA, CLA CMA TAD WORDS DCA WORDS /COUNT DOWM ON NUMBER OF WORDS TAD MODE /IMAGE MODE? SNA CLA JMP ICHARB /NO ISZ IPOINT /YES ISZ IPOINT TAD I IPOINT /GET WORD 3 ISZ IPOINT AND [377 /USE 8 BITS ICHARC, ISZ ICHR10 /2ND EXIT CDF /BACK TO FIELD 0 JMP I ICHR10 /EXIT ICHARB, TAD SAVELN /PRESERVE OPTION? SZA CLA JMP ICHARF /YES CLL CLA CML RTL /NO TAD IPOINT DCA ICHARY /POINT TO WORD 3 TAD I ICHARY CLL RAR SNL CLA JMP ICHARF /WORD O.K. ISZ IPOINT ISZ IPOINT /IGNORE THIS WORD ISZ IPOINT JMP ICHAR0 ICHARF, TAD I IPOINT RTR RTR /GET BITS 0-6 RAR ICHARD, ISZ CHARNI /BUMP COUNTER AND [177 /USE 7 BITS TAD [200 /ADD BIT 8 JMP ICHARC /INPUT CHARACTER #1 - BITS 7-11 WORD 1 AND BITS 0-1 WORD 2 ICHAR1, TAD I IPOINT AND [37 CLL RTL /GET BITS 7-11 DCA ICHARY ISZ IPOINT /USE WORD 2 NOW TAD I IPOINT CLL RTL RAL AND [3 /GET BITS 0-1 ICHARE, TAD ICHARY /ADD IN OTHER BITS JMP ICHARD /INPUT CHARACTER #2 - BITS 2-8 WORD 2 ICHAR2, TAD I IPOINT RAR RTR /GET BITS 2-8 JMP ICHARD /INPUT CHARACTER #3 - BITS 9-11 WORD 2 AND BITS 0-3 WORD 3 ICHAR3, TAD I IPOINT AND [7 CLL RTL RTL /GET BITS 9-11 DCA ICHARY ISZ IPOINT /USE WORD 3 NOW TAD I IPOINT RTL RTL RAL AND [17 /GET BITS 0-3 JMP ICHARE /INPUT CHARACTER #4 - BITS 4-10 WORD 3 ICHAR4, DCA CHARNI /RESET CHARACTER COUNT TAD I IPOINT ISZ IPOINT RAR JMP ICHARD+1 PAGE
/CLOSE A PDP-10 FILE / /CALL: / JMS CLOS10 /CLOSE A PDP-10 FILE / -RETURN- CLOS10, 0 /CLOSE A PDP-10 FILE TAD MODE /IMAGE MODE? SZA CLA JMP CLOS1A /YES - NO FILL NEEDED TAD CHARNO SNA CLA JMP CLOS1A /CHARACTER NUMBER IS 0 - FILL DONE JMS I (OCHR10 /0 FILL JMP .-4 /LOOP CLOS1A, TAD OUNIT DCA UNIT10 /SET OUR UNIT TAD OBLOCK DCA .+3 /SET THE BLOCK JMS I (WRITET /WRITE PDP-10 DECTAPE OBUF10 0 /BLOCK IS SET TAD (MOUTPU JMS I (DELETE /DELETE THE OLD FILE NOP /O.K. IF IT IS NOT THERE TAD FREEP DCA INDEX0 /POINT TO THE FREE SPOT TAD [MOUTPU DCA INDEX1 /POINT TO THE FILE NAME CDF 10 /TO FIELD 1 TAD I INDEX1 DCA I INDEX0 TAD I INDEX1 /SET THE NAME DCA I INDEX0 TAD I INDEX1 DCA I INDEX0 TAD INDEX0 TAD [77 DCA INDEX0 /POINT TO THE EXTENSION TAD I INDEX1 DCA I INDEX0 /SET THE EXTENSION TAD I INDEX1 DCA I INDEX0 TAD DATE DCA I INDEX0 /SET THE DATE JMS I (WRITET /WRITE PDP-10 DECTAPE DIRECT /DIRECTORY 144 /BLOCK 100 BASE 10 JMP I CLOS10 /EXIT
/OPEN A PDP-10 FILE FOR OUTPUT / /CALL: / JMS OOPN10 /OPEN A PDP-10 FILE / -RETURN- OOPN10, 0 /OPEN A PDP-10 FILE TAD (ZFREE-1 JMS I (FIND /FIND A FREE SPOT JMP I (NOROOM /NO ROOM LEFT DCA I (SLOTNO /SET THIS SLOT TAD INDEX0 DCA FREEP /SAVE POINTER TO FREE SPOT CLA CMA DCA I (NEXTDI /SET DIRECTION = -1 TAD (144 JMS I (NEXTSL /FIND FIRST OPEN SLOT DCA OBLOCK /AND SET IT CDF 10 TAD I [MOUTPU DCA OUNIT /SET UNIT TAD OBLOCK AND [17 CLL RTR RTR RAR DCA I [OBUF10+2 /SET FIRST BLOCK POINTER TAD OBLOCK CLL RTR RTR AND [77 DCA I [OBUF10+1 /SET FIRST BLOCK POINTER DCA I [OBUF10 /ZERO LINK POINTER DCA CHARNO /RESET CHARACTER NUMBER TAD (OBUF10+3 DCA OPOINT /RESET POINTER CDF JMP I OOPN10 /EXIT PAGE
/OPEN PDP-10 INPUT FILE / /CALL: / (AC) /POINT TO FILE NAME-1 / JMS IOPN10 /OPEN PDP-10 INPUT FILE / -NO- /NOT THERE / (AC) /ANY BLOCK OF THE FILE IOPN10, 0 /OPEN PDP-10 INPUT FILE JMS I (FIND /FIND THE FILE JMP I IOPN10 /NOT THERE DCA IOPN1B /SAVE SLOT NUMBER TAD (143 DCA IOPN1A TAD (CLA CMA DCA IOPN1D IOPN1F, JMS I (FINDSL /FIND A SLOT IOPN1A, 0 /SLOT TO FIND CIA TAD IOPN1B /IS IT US? SNA CLA JMP IOPN1C /YES IOPN1D, CLA CMA TAD IOPN1A /BUMP BLOCK NUMBER SPA JMP IOPN1E /TOO FAR TAD [-1102 SMA JMP I IOPN10 /TOO FAR - EXIT TAD (1102 DCA IOPN1A /SET NEW BLOCK JMP IOPN1F /RETRY IOPN1B, 0 /SLOT THAT WE WANT IOPN1E, CLA TAD (CLA IAC JMP IOPN1F-1 /CHANGE DIRECTION AND RETRY IOPN1C, TAD IOPN1A CDF ISZ IOPN10 JMP I IOPN10 /EXIT
/READ SHUFFEL / THIS ROUTINE IS USED TO SHUFFEL THE / BITS AS READ FROM AN 8-TAPE TO THE / CORRESPONDING LINC EQUIVALENT. CALLED / THE COMPLEMENT OBVERSE BY SOME. ALSO / THIS ROUTINE COULD HAVE / BEEN CODED MORE EFFECIENTLY WITH ROL'S / ON A SINGLE 16 WORD TABLE BUT I BELIEVE / A THREE TABLE LOOKUP IS CLEARER. /CALL: JMS SHUF8 /AC CONTAINS WORD SHUF8, 0 DCA SH8WRD TAD SH8WRD /PICK UP DATA CMA /COMPLEMENT DCA SH8WRD /AND STASH TAD SH8WRD /THE OBVERSE IS A LITTLE HARDER AND (17 /WILL DO 4-BIT TABLE LOOKUP TAD (TABL1C /CALC ADDRESS DCA T1 /STASH TEMPORARY TAD I T1 /PICK UP BIT PATTERN DCA T2 /AND STASH TAD SH8WRD /PICK UP FOR LEFT HALF CLL RTR;RTR /ROTATE FOR NEXT 4 BITS AND (17 /AND MASK TAD (TABL1B /CALC ADDRESS DCA T1 /AND STASH TAD I T1 /NEXT SET OF 4 BITS TAD T2 /ADD LAST RESULT DCA T2 /AND STASH NEW RESULT TAD SH8WRD /NOW NEED FIRST 4 CLL RTL;RTL;RAL /5 RTL SINCE LINK AND (17 /MASK 4 BITS TAD (TABL1A /CALC ADDRESS DCA T1 /STASH FOR INDIRECT TAD I T1 TAD T2 /GOT IT JMP I SHUF8 /DONE. SH8WRD, 0 T1, 0 T2, 0
/PREFORM EXCLUSIVE OR - XOR /USES BCO LINC INSTRUCTION (AS MUCH AS I HATE THAT) /CALL: TAD WORD1 JMS XOR / WORD2 / RETURN /AC HAS XOR VALUE OF WORD1 & WORD2 XOR, 0 DCA .+4 /STASH FOR XOR TAD I XOR /PICK UP WORD2 LINC /TO LINC MODE BCO J /XOR 0 PDP /BACK TO THE "GOOD" MODE ISZ XOR JMP I XOR
/WRITE SHUFFLE /USED TO CHANGE LINC WORD TO FORM NECCESSARY /FOR CORRECT WRITING ON 8-TAPE. THE COMPLEMENT /OBVERSE. /THIS ROUTINE COULD ALSO HAVE BEEN CODED /MORE EFFICIENTLY WITH ARITHMETIC LEFT SHIFTS /THREE(SINGLE TABLE LOOKUP), BUT THE THREE TABLE /LOOKUP IS CLEARER. SHUFL, 0 DCA SHLWRD /STASH FOR PARITY TAD SHLWRD /PICK UP DATA FOR OBVERSE AND (17 /BIT 8-11 LOOKUP TAD (TABL2C /CALC ADDRESS DCA T1 /STASH FOR INDIRECT TAD I T1 /PICK UP BITS DCA T2 /START ASSEMBLING WORD TAD SHLWRD /LEFT HALF TABLE LOOKUP CLL RTR;RTR /BITS 4-7 OVER AND (17 /MASK FOUR BITS TAD (TABL2B /CALC ADDRESS DCA T1 /STASH FOR INDIRECT TAD I T1 /PICK UP LFT HALF TABLE TAD T2 /ADD PREV RESULT DCA T2 /STASH NEW RESULT TAD SHLWRD /NOW FOR BITS 0-3 CLL RTL;RTL;RAL /5 SHIFTS FOR LINK AND (17 TAD (TABL2A /CALC ADDRESS DCA T1 /FOR INDIRECT TAD I T1 /LOOKUP TAD T2 /ASSEMBLE CMA /AND COMPLETE COMPLEMENT OBVERSE JMP I SHUFL /AND RETURN SHLWRD, 0 PAGE
/CONVERT PS8 DATE TO PDP-10 DATE CVDATE, 0 SNA JMP I CVDATE /0 CONVERTS TO 0 DCA TEMP1 TAD TEMP1 AND [7 /GET PS8 YEAR (-1970) DECIMAL TAD (1970-1964 OCTAL DCA DATE1 /SAVE YEAR TAD DATE1 CLL RAL /*2 TAD DATE1 /*2+1=*3 CLL RTL /*3*4=*12 DCA DATE1 /DATE1=DATE1*12 TAD TEMP1 RTL RTL RAL AND [17 /GET MONTH TAD (-1 TAD DATE1 /ADD IN MONTH DCA DATE1 TAD DATE1 CLL RAL /*2 TAD DATE1 /*2+1=*3 DCA TEMP2 TAD TEMP2 CLL RTL /*3*4=*12 TAD TEMP2 /*12+*3=*15 CLL RAL /*15*2=*30 TAD DATE1 /*30+1=*31 DCA DATE1 /DATE1=DATE1+MONTH-1 * 31 TAD TEMP1 RTR RAR AND [37 TAD (-1 /DAY-1 TAD DATE1 JMP I CVDATE DATE1, 0 /TYPE A PDP-10 DATE DATE10, 0 DCA DATE1 /SAVE VALUE DCA DATE2 /WILL BE YEAR DATE11, TAD DATE1 SMA CLA JMP DATE12 /MUST BE POSITIVE ISZ DATE2 /BUMP YEAR TAD DATE1 TAD (-564 /-372 DECIMAL (DAYS PER YEAR) DCA DATE1 JMP DATE11 DATE12, DCA DATE3 /WILL BE MONTH TAD DATE1 /DIVIDE BY 31 TAD (-37 SPA JMP .+4 ISZ DATE3 /BUMP MONTH DCA DATE1 JMP .-6 CLA ISZ DATE1 /+1 IS DAY TAD (100 TAD DATE2 DCA DATE2 /ADD (19)64 TO YEAR TAD DATE3 /DIVIDE BY 12 TAD (-14 SPA JMP .+4 ISZ DATE2 /BUMP YEAR DCA DATE3 JMP .-6 CLA IAC TAD DATE3 /+1 IS MONTH JMS PRINT /PRINT MONTH TAD ("/ JMS I OUTPUT TAD DATE1 JMS PRINT /PRINT DAY TAD ("/ JMS I OUTPUT TAD DATE2 JMS PRINT /PRINT YEAR JMP I DATE10 DATE2, 0 /YEAR DATE3, 0 /MONTH
/PRINT ROUTINE PRINT, 0 DCA PRINT0 PRINT7, DCA PRINTC /SET SWITCH TAD (PRINTL DCA PRINT1 CLL CLA CMA RTL DCA PRINT3 PRINT4, DCA PRINT2 JMP .+3 DCA PRINT0 ISZ PRINT2 TAD PRINT0 TAD I PRINT1 SMA JMP .-5 CLA ISZ PRINT1 TAD PRINT2 SZA JMP PRINT5 /IT IS NON-ZERO TAD PRINTC SZA JMS I OUTPUT /PRINT LEADING SPACE IF DESIRED JMP PRINT6 PRINT5, TAD ("0 JMS I OUTPUT CLL CLA CML RAR PRINT6, ISZ PRINT3 JMP PRINT4 TAD PRINT0 TAD ("0 JMS I OUTPUT JMP I PRINT PAGE
DECIMAL PRINTL, -1000 -100 -10 OCTAL PRINTZ, 0 /PRINT WITH LEADING SPACES DCA PRINT0 TAD PRINTZ DCA I (PRINT TAD (240 JMP I (PRINT7 /ZERO A DIRECTORY (PDP-10) ZERO10, 0 /ZERO THE PDP-10 DIRECTORY TAD I [MOUTPU AND [17 SZA CLA JMP I (NOT10F /NOT A PDP-10 TAD I [MOUTPU DCA UNIT10 /SET UNIT TAD (DIRECT-1 DCA INDEX0 /POINT TO DIRECTORY TAD (-600 DCA CNTR /COUNT OF 600 DCA I INDEX0 /ZERO THE DIRECTORY ISZ CNTR JMP .-2 /LOOP TAD (7570 DCA I (DIRECT /SAVE BLOCKS 1 AND 2 TAD (170 DCA I (DIRECT+52 /SAVE BLOCK 144 TAD (777 DCA I (DIRECT+367 /SAVE BLOCKS 1102 ON UP CLA CMA DCA I (DIRECT+370 JMS I (WRITET /WRITE PDP-10 DECTAPE DIRECT /DIRECTORY 144 /DIRECTORY BLOCK CDF 10 JMP I ZERO10 /EXIT
/DELETE A PDP-10 FILE DELE10, 0 /DELETE A PDP-10 FILE TAD I [MOUTPU AND [17 SZA JMP DELPS8 /DELETE A PS8 FILE TAD I [MOUTPU DCA UNIT10 /SET UNIT TAD [MOUTPU CDF JMS I (DELETE /DELETE THE PDP-10 FILE JMP I (ERDELF /NOT THERE JMS I (WRITET /WRITE PDP-10 DECTAPE DIRECT 144 /DIRECTORY BLOCK JMP I DELE10 /EXIT DELPS8, CIF CDF 10 JMS I (DELPS1 /DELETE A PS8 FILE JMP I DELE10 JMP I (ERDELF /ERROR DELETING THE FILE
/WRITE 8-TAPE /IGNORES 2 CONTROL WORDS: TURNS ON WRITER; /WRITES A REVERSE CHECKSUM OF 7777 (0 AS WRITTEN ON TAPE). /AND WRITES CONTENTS OF BUFFER. /FOLLOWED BY A FORWARD CHECKSUM (ENTER WITH IN AC. /CALL: TAD PARITY /PARITY IN AC / JMS WRITE8 / CDF CAFIELD / CORADD / WRDCOUNT /MUST BE NEG. WRITE8, 0 NOP DCA PARITY /SAVE CHKSUM 6151 /SELECT AC TO TB TAD I WRITE8 /PICK UP CDF INSTRUCTION DCA W8FLD JMS WRDWT /IGNORE A WORD ISZ WRITE8 /POINT TO C.A. TAD I WRITE8 /SET UP CORE ADDRESS DCA WPNT ISZ WRITE8 /POINT TO WRD COUNT TAD I WRITE8 DCA CNTR2 /SET WORD COUNT ISZ WRITE8 /POINT TO EXIT LINC /NOW TO THROW AWAY A WORD SWD /AND MAKE SURE IN LOCK WORD .-1&1777!LJMP SWD /WAIT UNTIL IN LOCK AREA .+2&1777!LJMP .-2&1777!LJMP /NOT YET PDP /ARE NOW JUST AFTER 12 BITS OF GUARD TAD (27 /IT IS TIME TO 6152 /TURN ON THE WRITERS CLA CLL JMS WRTWRD /FIRST REV. CHKSUM W8FLD, CDF /TO CA FIELD TAD I WPNT /PICK UP DATA CDF /BACK TO THIS FIELD JMS WRTWRD /WRITE DATA WORD ISZ WPNT /NEXT DATA ISZ CNTR2 /SKIP WHEN DONE JMP W8FLD /KEEP GOING TAD PARITY /AND CHECKSUM AND (6314 /ONLY 6-BITS NOP /IN CASE NEED COMPL. JMS WRTWRD /SHOULD BE IT JMS WRDWT /WAIT UNTILL FINISHED WRITTING LAST WORD JMS WRDWT /AND REST OF CHECKSUM + 6BITS LOCK TAD (226 /NOW WE CAN TURN OFF THE WRITER 6152 /TURN THEM OFF. CLA CLL JMP I WRITE8 /DONE!!!!! CNTR2, 0 WPNT, 0 PAGE
/GET THE NEXT INPUT FILE NEXIFL, 0 /GET THE NEXT INPUT FILE DCA CHARNI /RESET STUFF DCA WORDS CDF 10 CLA CMA DCA I (INCHCT DCA I (INEOF TAD (INDEVH+1 DCA INDEVX TAD I IXR /GET NEXT SNA JMP NEXIF2 /E.O.F DCA IUNIT TAD I IXR DCA IBLOCK /SET START BLOCK CDF TAD IUNIT AND [17 SNA JMP NEXIF1 /PDP-10 FILE CIF 10 JMS I [200 1 INDEVX, 0 JMP I (NOOFIL CDF 10 TAD INDEVX DCA I (INHNDL TAD IBLOCK DCA I (INREC TAD IUNIT AND [7760 SZA TAD [17 CLL CML RTR RTR DCA I (INCTR TAD (ICHRPS JMP NEXIF3 NEXIF1, TAD IUNIT DCA UNIT10 TAD IBLOCK DCA .+3 JMS I (READT IBUF10 0 /READ ANY BLOCK CDF 10 TAD I [IBUF10+2 RTL RTL RAL AND [17 DCA IBLOCK TAD I [IBUF10+1 AND [77 CLL RTL RTL TAD IBLOCK DCA IBLOCK /SET START BLOCK TAD (ICHR10 NEXIF3, DCA INPUT /SET ROUTINE POINTER ISZ NEXIFL NEXIF2, CDF JMP I NEXIFL /EXIT ICHRPS, 0 CIF CDF 10 JMS I (ICHARP SKP ISZ ICHRPS JMP I ICHRPS OCHRPS, 0 CIF 10 JMS I (OCHARP JMP I (IOERR JMP I OCHRPS PAGE
PIP10, SKP CLA /NORMAL ENTRY POINT HLT /NO CHAINING CDF 10 TAD I (MDATE /GET TODAY'S DATE CDF JMS I (CVDATE /CONVERT IT DCA DATE /AND STORE IT PIPCD, CDF JMS I (CD /COMMAND DECODE CDF 10 TAD I (MPARAM AND (10 DCA MODE /SET /I SWITCH TAD I (MPARAM+1 AND (400 DCA SAVELN /SET /P SWITCH TAD I (MPARAM AND (101 SZA CLA JMP I (LIST10 /EITHER /F OR /L TAD I [MOUTPU SNA CLA JMP I (NOOFIL /NO OUTPUT FILE! CLL CLA CML RTR AND I (MPARAM+2 SZA CLA JMS I (ZERO10 /IT IS /Z OPTION TAD (OUDEVH+1 DCA OUDEVX TAD I [MOUTPU AND [17 SZA JMP PIPB /OUTPUT IS PS8 TAD I [MOUTPU DCA UNIT10 /SET UNIT JMS I (READT DIRECT /GET DIRECTORY INTO CORE 144 PIPA, CDF 10 TAD OUDEVX DCA I (OUHNDL TAD I (MPARAM AND (400 SZA CLA JMS I (DELE10 /DELETE A PDP-10 FILE FIRST CDF 10 TAD (MINPUT-1 DCA IXR TAD I IXR SNA CLA JMP PIPCD /NO INPUT TAD (MINPUT-1 DCA IXR /SET INPUT LIST TAD I [MOUTPU AND [17 CDF SZA CLA JMP PIPC /OUTPUT IS PS8 JMS I (OOPN10 /OPEN PDP-10 OUTPUT TAD (OCHR10 PIPD, DCA OUTPUT /SET OUTPUT ROUTINE PIPE, SZA CLA /IS IT ERROR OR EOF JMP I (IOERR /ERROR JMS I (NEXIFL /GET NEXT FILE JMP PIPF /FINAL EOF JMS I INPUT /GET INPUT JMP PIPE /EOF OR ERROR JMS I OUTPUT /OUTPUT JMP .-3 /LOOP PIPC, CIF CDF 10 JMS I (OOPNPS /OPEN PS8 OUTPUT JMP I (NOOOFL TAD (OCHRPS JMP PIPD PIPB, CDF 0 CIF 10 JMS I [200 1 /GET PS8 OUTPUT HANDLER OUDEVX, 0 JMP I (NOOFIL JMP PIPA PIPF, CDF 10 TAD I [MOUTPU /NOW CLOSE THE OUTPUT FILE AND [17 CDF SZA CLA JMP PIPG JMS I (CLOS10 JMP PIPCD PIPG, CIF CDF 10 JMS I (OCLOSE JMP I (IOERR JMP PIPCD PAGE
LIST10, TAD (OUDEVH+1 DCA OUDEVY TAD (OUDEVH+1 DCA OUDEVZ TAD (3100 /RESET THINGS DCA LISTDV+1 TAD I [MOUTPU SZA JMP LIST11 /OUTPUT FILE EXISTS CDF 0 CIF 10 JMS I [200 1 LISTDV, TEXT /TTY/ /LOOKUP THE TTY: OUDEVY, 0 JMP I (NOOFIL CDF 10 TAD LISTDV+1 DCA I [MOUTPU /SET TTY: DEVICE NUMBER TAD I [MOUTPU LIST11, AND [17 SNA JMP I (NOTPSF /NOT A PS8 FILE CDF 0 CIF 10 JMS I [200 1 /LOOKUP DEVICE OUDEVZ, 0 JMP I (NOOFIL LIST12, CDF 10 TAD OUDEVZ DCA I (OUHNDL CIF CDF 10 JMS I (OOPNPS /OPEN OUTPUT FILE JMP I (NOOOFL TAD (OCHRPS DCA OUTPUT /SET OUTPUT ROUTINE CDF 10 TAD I (MINPUT DCA UNIT10 CDF TAD UNIT10 SNA JMP I (PIPCD /NO INPUT AND [17 SZA CLA JMP I (NOT10F JMS I (READT /READ THE DIRECTORY DIRECT 144 TAD (LISTL-1 DCA INDEX0 TAD (-40 DCA CNTR DCA I INDEX0 /CLEAR THE COUNTS ISZ CNTR JMP .-2 TAD (-1101 DCA LIST13 CLA IAC DCA LIST14 JMS I (FINDSL /FIND ALL SLOTS LIST14, 0 TAD (LISTL DCA LIST15 ISZ I LIST15 /COUNT THE NUMBER IN EACH SLOT ISZ LIST14 ISZ LIST13 JMP LIST14-1 TAD I (LISTL JMS I (PRINT /PRINT FREE BLOCKS TAD (LISTM1-1 DCA INDEX0 JMS I (ERROR4 /"FREE BLOCKS" TAD (-26 DCA LIST13 TAD (DIRECT+370 DCA INDEX6 LIST17, CDF 10 /MAIN LOOP TAD I INDEX6 SNA JMP I (LIST16 /DO NOT PRINT THIS BLANK ENTRY JMS I (LIST18 TAD I INDEX6 JMS I (LIST18 TAD I INDEX6 JMS I (LIST18 CDF TAD (". JMS I OUTPUT CDF 10 TAD INDEX6 TAD [77 DCA INDEX5 TAD I INDEX5 /GET EXTENSION JMS I (LIST18 TAD I INDEX5 JMP I (LIST22 LIST13, 0 LIST15, 0 PAGE
LIST22, AND [7700 JMS LIST18 CLA IAC AND I (MPARAM SNA CLA JMP LIST19 /NO EXTRA IF NOT /L JMS LIST18 CDF TAD I (LIST13 TAD (LISTL+27 DCA LIST23 TAD I LIST23 /GET NUMBER OF BLOCKS JMS I (PRINTZ JMS LIST18 TAD I INDEX5 CDF JMS I (DATE10 LIST19, CDF JMS CRLF LIST20, CDF ISZ I (LIST13 JMP I (LIST17 /LOOP JMS CRLF JMP I (PIPG /CLOSE THE FILE LIST16, ISZ INDEX6 ISZ INDEX6 JMP LIST20 CRLF, 0 TAD [215 JMS I OUTPUT TAD [212 JMS I OUTPUT JMP I CRLF LIST23, 0 LIST18, 0 CDF DCA TEMP1 TAD TEMP1 RTR RTR RTR JMS LIST21 TAD TEMP1 JMS LIST21 CDF 10 JMP I LIST18 LIST21, 0 AND [77 TAD [240 JMS I OUTPUT JMP I LIST21
/8-TAPE READ /THIS ROUTINE SKIPS 3 CONTROL WORDS AND READS A /SPECIFIED # WORDS INTO THE OUTPUT BUFFER. /THERE IS NO SHUFFLING WORK DONE HERE /BUT A CHECKSUM IS MAINTAINED / - THE CALLING ROUTINE MUST DO THE SHUFFLE /LATER. /CALL: JMS READ8 / CDF X /DATA FIELD OF BUFFER / CORRADD /BUFFER START / WCOUNT /IS NEGATIVE / RETRN /WITH PARITY IN AC READ8, 0 CLA CLL /FORGET ANY PARITY TAD I READ8 /PICK UP CDF DCA R8FLD ISZ READ8 /POINT TO CORE ADD JMS WRDWT /SKIP OVER A WORD JMS WRDWT /AND ANOTHER TAD I READ8 /PICK UP CA DCA CRPNT ISZ READ8 /POINT TO WORD COUNT TAD I READ8 DCA RCNTR /STASH WORD COUNT JMS WRDWT /THROW AWAY THIRD WORD JMS REDWRD /FIRST IS CHKSUM AND (1463 /KEEP ONLY THE CHECKSUM BITS DCA PARITY /START PARITY CHKSUM R8L1, JMS REDWRD /READ A WORD R8FLD, CDF /CDF CA FIELD DCA I CRPNT /STASH TAD I CRPNT /GET BACK FOR CHKSUM CDF /BACK TO THIS FIELD ISZ CRPNT JMS CHKSM /UPDATE CHKSUM ISZ RCNTR /DONE? JMP R8L1 /NO JMS REDWRD /READ THE FINAL CHKSUM AND (6314 /KEEP ONLY PARITY BITS JMS CHKSM /ADD INTO CHKSUM TAD PARITY /NOW TO FINISH UP JMS SHUF8 /THE PARITY DCA PARITY /AS IT IS 6-BITS TAD PARITY /XOR LEFT WITH RT CLL RTR;RTR;RTR /HALVES JMS CHKSM /LOW ORDER SHOULD TAD PARITY /BE ZERO CMA /TO COME OUT RIGHT AND (77 /READY FOR RETURN NOP /CLA HERE WILL IGNORE ALL PARITY ISZ READ8 /RETURN ADDRESS JMP I READ8 CRPNT, 0 RCNTR, 0 /XOR FOR ACCUMULATIVE PARITY CHKSM, 0 JMS XOR PARITY, 0 DCA PARITY JMP I CHKSM PAGE
LINBUF=. LISTL, ZBLOCK 105 LISTM1, TEXT / FREE BLOCKS_/ ERMES1, TEXT #_I/O ERROR_# ERMES2, TEXT /_DEVICE FULL_/ ERMES3, TEXT /_FILE OR DEVICE NOT FOUND_/ ERMES4, TEXT /_NOT PDP-10 FILE_/ ERMES5, TEXT /_ERROR DELETING FILE_/ ERMES6, TEXT /_NOT PS8 FILE_/ ERMES7, TEXT /_OUTPUT FILE OPEN ERROR_/ ERMES8, TEXT /_SYNTAX ERROR_/
/SHUFFLE 600 WORDS TO CORRECT FORM /CALL DIRECTLY FOR LINC TO 8-FORM. CALLED /BY QSWIT8 TO CONVER BACK. PARITY /IS GENERATED AND PASSED BACK TO CALL. /CALL: JMS I (QSWITCH / CDF CAFIELD / CA. / RETURN /AC=PARITY. QSWITC, 0 DCA PARITY /CLEAR PARITY WORD TAD (-600 /128 36-BIT WORDS DCA QSWC /SET UP W.C. TAD I QSWITCH /PICK UP CDF INSTR DCA QWHERE+1 /FOR BUFFER FIELD ISZ QSWITCH /TO C.A. TAD I QSWITCH /PICK UP BUFF ADD. DCA QSCA /STASH QSLOOP, JMS QWHERE /CHANGE TO CA FIELD TAD I QSCA /PICK UP WORD CDF /TO THIS FIELD DCA QSTMP /STASH TAD QSTMP CMA /SINCE COMP OBVERSE JMS CHKSM /UPDATE CHKSUM TAD QSTMP /WORD AGAIN JMS I SHUFFL /TO EITHER 8 OR LINK FORM JMS QWHERE /BACK TO CA FIELD DCA I QSCA /STASH CDF /BACK TO THIS FIELD ISZ QSCA /NEXT BUFFER LOC. ISZ QSWC /DONE? JMP QSLOOP /NOPE TAD PARITY /NOW TIME FOR PARITY RTR;RTR;RTR /IS 6-BIT JMS CHKSM /XOR TWO HALVES TAD (SHUFL /RESET SHUFFL FOR DCA SHUFFL /LINC TO 8-TAPE TAD PARITY /AND CALC PARITY NOP /MAY NEED TO COMP. AND (77 DCA PARITY /MAKE BOTH HALVES TAD PARITY /THE SAME CLL RTL;RTL;RTL / TAD PARITY /FOR PARITY WRITE JMS I SHUFFL /IN CASE WRITING ISZ QSWITCH /NORMAL RETURN JMP I QSWITCH SHUFFL, SHUFL QSTMP, 0 QSWC, 0 QSCA, 0 /SWITCH TO CA FIELD QWHERE, 0 CDF JMP I QWHERE /SWITCH THE OTHER WAY QSWIT8, 0 TAD (SHUF8 /SET FOR 8 TO LINC DCA SHUFFL /SHUFFLE TAD QSWIT8 DCA QSWITCH /TO PASS ARGS JMP QSWITCH+1 /FOOL CALL. PAGE
/GET A LINE ROUTINE GLINE, 0 /GET A LINE TAD ["* JMS I [ERROR3 /ANNOUNCE US WITH A * DCA RBFLAG /RESET RUBOUT FLAG TAD [LINBUF-1 DCA IXR /POINT TO THE BUFFER CHLOOP, KSF JMP CHLOOP /WAIT FOR TTY: TAD [200 KRS /READ TTY: DCA TEMP1 KCC TAD [SPADR-1 DCA INDEX0 /SET LIST SEARCH TAD I INDEX0 SNA JMP .+6 /END OF LIST TAD TEMP1 SNA CLA JMP I INDEX0 /FOUND SO JUMP ISZ INDEX0 JMP .-7 /LOOP JMS PRNT /PRINT IT CINSRT, TAD TEMP1 DCA I IXR /STORE THE CHARACTER TAD IXR TAD (-LINBUF-100 SZA CLA JMP CHLOOP /GET ANOTHER CHARACTER JMS CRCR JMP I (SYNTAX /ERROR CARRET, JMS CRCR CLFINI, DCA I IXR /SET END DCA I IXR JMP I GLINE /EXIT SPADR, -225;JMP CTRLU -215;JMP CARRET -377;JMP RUBOUT -375;JMP ALTMOD -376;JMP ALTMOD -233;JMP ALTMOD -200;JMP CHLOOP -217;JMP CHLOOP -337;JMP BAKARR -212;JMP LFEED -203;JMP CTRLC 0 BAKARR, JMS PRNT /"_" TAD ["< JMP CINSRT+1 /USE "<" INSTEAD CTRLC, CTRLU, TAD ["^ JMS I [ERROR3 /CONTROL CHARACTERS TAD TEMP1 TAD [100 CLRLIN, JMS I [ERROR3 JMS CRCR TAD I INDEX0 SZA CLA JMP GLINE+1 /NOT "^C" TSF JMP .-1 JMP I (7605 /TO MONITOR CRCR, 0 TAD [215 DCA TEMP1 JMS PRNT TAD [212 JMS I [ERROR3 /PRINT CR-LF JMP I CRCR ALTMOD, TAD ["$ DCA TEMP1 /ALTMODE IS "$" JMS PRNT JMP CLFINI /ENDS THE LINE RUBOUT, TAD IXR TAD (1-LINBUF SNA CLA JMP RBSPCL /SPECIAL TREATMENT TAD ("\ ISZ RBFLAG JMS I [ERROR3 /PRINT \ CLA CMA DCA RBFLAG /SET FLAG TAD IXR DCA TEMP2 TAD I TEMP2 JMS I [ERROR3 /PRINT RUBED CHAR LBCKUP, CLA CMA TAD IXR JMP CHLOOP-1 /GO GET ANOTHER RBSPCL, ISZ RBFLAG JMP CLRLIN+1 /NOT INTO RUBOUTS TAD ("\ JMP CLRLIN PRNT, 0 ISZ RBFLAG JMP .+3 TAD ("\ JMS I [ERROR3 /END OF RUBOUTS DCA RBFLAG TAD TEMP1 JMS I [ERROR3 /PRINT CHAR JMP I PRNT LFEED, JMS CRCR DCA I IXR /SET END TAD [LINBUF-1 DCA IXR TAD ["* JMS I [ERROR3 TAD I IXR /PRINT THE LINE SNA JMP LBCKUP JMP .-4 PAGE
/GET A CHARACTER GCH, 0 TAD I IXR /GET A CHAR TAD (-240 SNA JMP GCH+1 /IGNORE SPACES TAD (240-"/ SNA JMP SLASH TAD ("/-"( SNA JMP OPENP TAD ("( JMP I GCH /EXIT SLASH, TAD I IXR JMS SLSHCH /GET OPTION JMP GCH+1 OPENP, TAD I IXR TAD (-") SNA JMP GCH+1 /END TAD (") JMS SLSHCH /GET OPTION JMP OPENP SLSHCH, 0 SNA JMP I (SYNTAX /ERROR DCA TEMP6 TAD (MPARAM-1 DCA TEMP5 /POINT TO PARAMETERS JMS DECODE JMP I (SYNTAX SZL TAD (32 /ADD TAD (-14 ISZ TEMP5 SMA JMP .-3 /FIND DIVIDED BY 12 DCA TEMP4 CLL CML RAL ISZ TEMP4 JMP .-2 /SHIFT A BIT DCA TEMP4 /SAVE IT CDF 10 TAD TEMP4 CMA AND I TEMP5 TAD TEMP4 /OR IN THAT BIT DCA I TEMP5 CDF JMP I SLSHCH DECODE, 0 TAD TEMP6 TAD (-"9-1 CLL TAD ("9+1-"0 SZL JMP DECOD1 TAD ("0-"Z-1 CLL CML TAD ("Z-"A+1 SNL DECOD1, ISZ DECODE JMP I DECODE PAGE
/GET A NAME ROUTINE GNAME, 0 DCA CDDEV /CLEAR AREA DCA CDDEV+1 CLA CMA DCA DEVSW /ALLOW DEVICES GNAME1, DCA CDNAME /CLEAR NAME,EXTENSION DCA CDNAME+1 DCA CDNAME+2 DCA CDEXT DCA CDEXT+1 CLA CMA DCA PERSW /ALLOW EXTENSIONS TAD (CDNAME DCA POINT /SET POINTER DCA CNTR /SET SWITCH GNAME2, JMS I (GCH /GET A CHAR DCA TEMP6 TAD TEMP6 SNA JMP GNAME6 /END TAD (-": SNA JMP GNAME5 /: IS DEVICE TAD (":-". SNA JMP GNAME4 /. IS EXTENSION TAD (". DCA TEMP6 /SAVE THE CHAR JMS I (DECODE JMP GNAME6-1 /NOT 0-9 OR A-Z IS END CLA TAD TEMP6 AND [77 /GET TRIMMED ASCII ISZ CNTR JMP GNAME3 /LEFT HALF TAD I POINT DCA I POINT /SET RIGHT HALF ISZ POINT JMP GNAME2 /LOOP GNAME3, CLL RTL RTL RTL DCA I POINT /SET LEFT HALF CLA CMA DCA CNTR TAD POINT TAD (-CDEXT-2 SZA CLA JMP GNAME2 /LOOP JMP GNAME2-1 /LOOP - IGNORE GNAME4, TAD CDNAME SZA CLA ISZ PERSW JMP I (SYNTAX /ERROR DCA CDEXT DCA CDEXT+1 /CLEAR EXTENSION TAD (CDEXT JMP GNAME2-2 /GET EXTENSION GNAME5, ISZ DEVSW JMP I (SYNTAX /ERROR ISZ PERSW JMP I (SYNTAX /ERROR TAD CDNAME SNA JMP I (SYNTAX /ERROR DCA CDDEV TAD CDNAME+1 DCA CDDEV+1 /SET DEVICE JMP GNAME1 /NOW GET THE NAME CLA GNAME6, DCA CDEXT+2 TAD CDEXT+1 AND [7700 DCA CDEXT+1 ISZ PERSW JMP I GNAME /EXIT DCA CDEXT DCA CDEXT+1 /CLEAR EXTENSION JMP I GNAME /EXIT /SUBROUTINE CALLED BY CD TO SCAN OPTIONS /OUT OF LINE, SET PDP10 UNITS, AND GET RID OF /THE UGLY "FILE OR DEVICE NOT FOUND" WHEN /NULL INPUT LINE. OPTION, 0 TAD [LINBUF-1 /SET XR DCA IXR /FOR SCANNING JMS I (GCH /JUST READ ALL THE CHARS SZA CLA /END OF LINE? JMP .-2 /NO: KEEP GOING JMS I (ROCK /NOW SET THE NUMERIC OPTIONS NOP /MAY TAKE THIS RETURN TAD [LINBUF-1 /NOW TO SEE IF NULL LINE DCA IXR /RESET LXR JMS I (GCH /GET FIRST NON-OPTION CHAR SZA CLA /SKIP IF NO FILES SPECIFIED JMP I OPTION /IS SOMETHING JMP I (CD+1 /RESTART CD. PAGE
CD, 0 TAD [MOUTPU-1 DCA INDEX0 TAD (-47 DCA CNTR CDF 10 DCA I INDEX0 /CLEAR AREAS ISZ CNTR JMP .-2 CDF CIF 10 JMS I [200 13 /RESET TABLES 0 DCA INSEG /NO DIRECTORY IN CORE /*********CHANGES DEW*********** /REMOVED CLEARING KNOWN PDP-10 DRIVES /SO THAT THEY CAN BE SET ONCE AND REMEMBERED /THEY ARE NOW CLEARED WITH /R OPTION /*******CHANGES DEW************* DCA CDCNT /ZERO INPUT COUNT JMS I (GLINE /GET A LINE /*******CHANGES DEW******** JMS I (OPTION /GET THE OPTIONS /*******CHANGES DEW******** TAD [LINBUF-1 DCA IXR TAD I IXR SNA JMP NOBAKB /NO "<" IS LINE TAD (-"< SZA CLA JMP .-5 TAD [LINBUF-1 DCA IXR TAD (0323 /***WAS 4463 ???**** DCA CDDEVF /SET "DSK" AS DEFAULT TAD (1300 /***WAS 5300 ???*** DCA CDDEVF+1 JMS I (GNAME /GET THE NAME TAD TEMP6 TAD (-"[ SZA CLA JMP CDX03 /NO SIZE SPECIFIED CDX01, JMS I (GCH TAD (-"] SNA JMP CDX02 /END OF SIZE TAD ("]-"0 SPA JMP I (SYNTAX /ERROR DCA TEMP1 TAD CDEXT+2 CLL RTL TAD CDEXT+2 RAL TAD TEMP1 DCA CDEXT+2 /ADD IN NUMBER TAD TEMP1 TAD (-11 SMA SZA CLA JMP I (SYNTAX /ERROR JMP CDX01 CDX02, JMS I (GCH SKP CDX03, TAD TEMP6 TAD (-"< SZA CLA JMP I (SYNTAX /ERROR JMS I (CDOUTX /SET OUTPUT STUFF NOBAKA, TAD (MINPUT-1 DCA INDEX6 TAD (0323 /*** WAS 4463 ???*** DCA CDDEVF /SET DEFAULT TAD (1300 /*** WAS 5300 ???*** DCA CDDEVF+1 TAD IXR DCA CDI04 /SAVE POINTER JMS I (GCH SNA CLA JMP I CD /NO INPUT FILES TAD CDI04 DCA IXR /RESET POINTER CDI01, JMS I (GNAME /GET A FILE ISZ DEVSW JMP CDI02 /DEVICE SPECIFIED TAD CDDEVF DCA CDDEV TAD CDDEVF+1 DCA CDDEV+1 /SET DEFAULT DEVICE CDI02, TAD CDDEV DCA CDDEVF TAD CDDEV+1 DCA CDDEVF+1 /SET NEW DEFAULT ISZ CDCNT /COUNT INPUT FILES TAD CDCNT TAD (-12 SMA CLA JMP I (SYNTAX /TOO MANY FILES JMS I (CDINX /SET INPUT STUFF TAD TEMP6 SNA JMP I CD /MAIN EXIT TAD (-", SNA CLA JMP CDI01 JMP I (SYNTAX /ERROR NOBAKB, TAD [LINBUF-1 DCA IXR JMP NOBAKA PAGE
CDOUTX, 0 /SET OUTPUT STUFF ISZ DEVSW JMP CDOUT9 /DEVICE SPECIFIED TAD CDNAME SNA CLA JMP I CDOUTX /NO NAME AND NO DEVICE IS NOTHING TAD CDDEVF DCA CDDEV TAD CDDEVF+1 DCA CDDEV+1 /SET DEFAULT DEVICE CDOUT9, TAD (OUDEVH+1 DCA CDOUT2 /SET OUTPUT HANDLER ADDRESS TAD [MOUTPU-1 DCA INDEX6 TAD CDDEV DCA CDOUT1 TAD CDDEV+1 DCA CDOUT1+1 /SET DEVICE CIF 10 JMS I [200 12 /FIND HANDLER CDOUT1, 0 0 CDOUT2, 0 JMP I (NOOFIL TAD CDOUT1+1 TAD (DCB-1 DCA TEMP1 CDF 10 TAD I TEMP1 /GET DCB ENTRY CDF AND (770 TAD (-170 SZA CLA JMP CDOUT3 /NOT DECTAPE TAD (OUDEVH+1 DCA CDOUT5 TAD CDOUT1+1 CIF 10 JMS I [200 1 /GET HANDLER CDOUT5, 0 JMP I (NOOFIL TAD CDOUT5 AND (7 /GET DRIVE NUMBER CLL CML RTR RTR DCA UNIT10 /SET UNIT JMS I (ROCK /CHECK THE TAPE JMP CDOUT3 /NOT PDP-10 DECTAPE JMS I (EXA40 /EXCESS 40 CONVERSION TAD UNIT10 JMP CDOUT4 /SET PARAMETERS CDOUT3, DCA CDEXT+1 TAD CDEXT+2 /GET LENGTH TAD (-400 SPA CLA TAD CDEXT+2 /O.K. - USE LENGTH CLL RTL RTL AND [7760 /8 BIT LENGTH TAD CDOUT1+1 /ADD IN DEVICE NUMBER CDOUT4, CDF 10 DCA I INDEX6 /SET DEVICE TAD CDNAME DCA I INDEX6 /SET NAME TAD CDNAME+1 DCA I INDEX6 TAD CDNAME+2 DCA I INDEX6 TAD CDEXT DCA I INDEX6 TAD CDEXT+1 DCA I INDEX6 CDF JMP I CDOUTX /EXIT PAGE
CDINX, 0 /SET INPUT STUFF TAD (OUDEVH+1 DCA CDIN1 TAD CDDEV DCA CDIN2 /SET DEVICE TAD CDDEV+1 DCA CDIN2+1 CIF 10 JMS I [200 1 /GET HANDLER CDIN2, 0 0 CDIN1, 0 JMP I (NOOFIL TAD CDIN2+1 TAD (DCB-1 DCA TEMP1 CDF 10 TAD I TEMP1 /GET DCB ENTRY CDF AND (770 TAD (-170 SZA CLA JMP CDIN3 /NOT DECTAPE TAD CDIN1 AND (7 CLL CML RTR RTR DCA UNIT10 /SET UNIT JMS I (ROCK /CHECK THE TAPE JMP CDIN3 /NOT PDP-10 DECTAPE JMS I (EXA40 /DO EXCESS 40 TAD INSEG CIA TAD UNIT10 /IS DIRECTORY IN CORE? SNA CLA JMP CDIN8 /YES - NO READ TAD CDNAME SNA CLA JMP CDIN7 /NO NAME - NO READ JMS I (READT DIRECT /READ DIRECTORY 144 TAD UNIT10 DCA INSEG /SET DIRECTORY IN CORE CDIN8, TAD (-5 DCA CNTR TAD (CDNAME-1 DCA INDEX0 TAD (CDINXX-1 DCA INDEX1 TAD I INDEX0 CDF 10 DCA I INDEX1 CDF ISZ CNTR JMP .-5 TAD (CDINXX-1 JMS I (IOPN10 /OPEN THE PDP-10 FILE JMP I (NOOFIL CDIN7, DCA CDIN4 TAD UNIT10 JMP CDIN6 CDIN3, TAD (CDNAME DCA CDIN4 TAD CDNAME SNA CLA JMP CDIN9 /NO LOOKUP IF NO NAME TAD CDIN2+1 CIF 10 JMS I [200 2 CDIN4, CDNAME /LOOKUP CDIN5, 0 JMP I (NOOFIL TAD CDIN5 TAD (400 SPA CLA CLL RTL RTL AND [7760 /GET LENGTH TAD CDIN2+1 /ADD DEVICE CDIN6, CDF 10 DCA I INDEX6 TAD CDIN4 DCA I INDEX6 /SET BLOCK STARTING CDF JMP I CDINX CDIN9, DCA CDIN4 JMP CDIN6-1 PAGE
IFNZRO 0 < /CALL: / JMS ROCK / NOT PDP10 UNIT / PDP10 UNIT / /NOTE: ALSO SETS APPROPRIATE BITS IN 'PDP10D' TABLE. / ROCK, 0 TAD UNIT10 CLL RTL RTL AND (7 /KEEP UNIT CMA /ACC = -U-1 DCA ROCKT CDF 10 TAD I (MPARAM+2 AND (1774 /KEEP UNITS OF PARAM RTL CLL /BITS OF ACC ARE NOW L 012 345 678 91011 / 0 UUU UUU UU0 0 0 0 RAL ISZ ROCKT JMP .-2 SZL CLA /SKIP IF UNIT10 NOT PDP-10 ISZ ROCK TAD (PDP10D DCA TEMP5 TAD (-10 DCA ROCKT TAD I (MPARAM+2 CDF AND (1774 RTL CLL RLOOP, RAL CLL SZL JMP ROCKL ISZ TEMP5 ISZ ROCKT JMP ROCKL JMP I ROCK ROCKL, DCA TEMP4 STA DCA I TEMP5 TAD TEMP4 JMP RLOOP+3 ROCKT, 0 >
/A NEW TRY AT THE PSEUDO-ROCK-ROCK ROUTINE /OPTIONS /R RESETS ALL UNITS TO UNKNOWN. ALSO THE TABLE /PDP10D SHOULD BE -1 FOR PS/8 UNIT AND +1 FOR PDP10 /DECTAPE. ROCK, 0 /ENTRY CDF 10 /FIRST WE SHALL TAD I (MPARAM+1 /CHECK FOR THE /R AND (100 /THATS THE BIT SNA CLA /SKIP IF /R JMP ROCKL1 /NO:DO REST TAD I (MPARAM+1 /RESET /R AND (7677 /BY MASKING OUT DCA I (MPARAM+1 /AND RESTORING CDF 0 /BACK TO THIS FIELD TAD (-10 /THAT'S HOW MAY UNITS DCA ROCKT /IS COUNTER TAD (PDP10D /POINT TO TABLE DCA TEMP5 STA /RESET UNITS TO DCA I TEMP5 /ALL PS/8 ISZ TEMP5 /NEXT ENTRY ISZ ROCKT /DONE? JMP .-4 /NOT YET ROCKL1, TAD (PDP10D /FOR POINTER DCA TEMP5 CDF 10 /PICK UP NEUMERIC TAD I (MPARAM+2 /OPTIONS CDF 0 /BACK TO THIS FIELD RTL CLL /X UUU UUU UUU UXX ROCKL3, SNA /SKIP IF NOT DONE JMP ROCKL2 /DONE WITH NEUMERICS RAL /OPTION IN LINK DCA ROCKT /REMEMBER SHIFTED OPTIONS CLA IAC /GET READY TO SET 10-TAPE SZL /SKIP IF OPTION NOT SET DCA I TEMP5 /MAKE IT A 10 TAPE ISZ TEMP5 /NEXT UNIT # CLA /GET RID OF THE 1 TAD ROCKT /PICK PATTERN BACK UP JMP ROCKL3 /NEXT OPTION ROCKL2, CDF 10 /NOW RESET OPTIONS TAD (6000 /KEEP /Y AND /Z AND I (MPARAM+2 /GET RID OF REST DCA I (MPARAM+2 /RESTORE. CDF 0 TAD UNIT10 /PICK UP REQUESTED UNIT CLL RTL;RTL /PUT IN LOW ORDER AND (7 /RID OF OTHER CRAP TAD (PDP10D /INDEX INTO TABLE DCA ROCKT /MAKE POINTER TAD I ROCKT /PICK UP TAPE TYPE SMA CLA /SKIP IF PS/8 ISZ ROCK /IS PDP-10 TAKE SECOND RETURN JMP I ROCK /AND RETURN ROCKT, 0
EXA40, 0 TAD (CDNAME DCA TEMP5 TAD (-5 DCA TEMP4 EXA401, CLL CLA CML RAR TAD I TEMP5 AND [7700 CLL RAL SZA RAR DCA TEMP3 TAD I TEMP5 TAD (40 AND [77 TAD (-40 SZA TAD (40 TAD TEMP3 DCA I TEMP5 ISZ TEMP5 ISZ TEMP4 JMP EXA401 JMP I EXA40 PAGE
FIELD 1 *2000 ZFREE, ZBLOCK 5 INCTR, 0 INHNDL, 0 INPTR, 0 DELPS1, 0 JMS I (200 4 MOUTPU+1 0 ISZ DELPS1 CIF CDF 0 JMP I DELPS1 ICHARP, 0 ISZ INJMP ISZ INCHCT INJMPP, JMP INJMP TAD INEOF SZA CLA JMP INEXIT INGBUF, TAD INCTR CLL TAD (INRECS SNL DCA INCTR SZL ISZ INEOF CLL CML CMA RTR RTR RTR TAD (INCTL+1 DCA INCTLW CIF 0 JMS I INHNDL INCTLW, 0 INBUFP, INBUF INREC, 0 JMP INERRX INBREC, TAD INREC TAD (INRECS DCA INREC TAD INCTLW AND (7600 CLL RAL TAD INCTLW AND (7600 CMA DCA INCHCT TAD INJMPP DCA INJMP TAD INBUFP DCA INPTR JMP ICHARP+1 INERRX, ISZ INEOF SMA CLA JMP INBREC INERR, CLL CLA CML RAR JMP INEXIT INJMP, HLT JMP INCHR1 JMP INCHR2 INCHR3, TAD INJMPP DCA INJMP TAD I INPTR AND (7400 CLL RTR RTR TAD INCTLW RTR RTR ISZ INPTR JMP INCOMN INCHR2, TAD I INPTR AND (7400 DCA INCTLW ISZ INPTR INCHR1, TAD I INPTR INCOMN, AND (377 TAD (-232 SNA JMP INEXIT TAD (232 ISZ ICHARP INEXIT, CIF CDF 0 JMP I ICHARP INEOF, 1 INCHCT, -1 PAGE
OOPNPS, 0 TAD (MOUTPU+1 DCA OUBLK TAD I (MOUTPU JMS I (200 3 OUBLK, 0 OUELEN, 0 JMP OUEFAL DCA OUCCNT JMS I (OUSETP ISZ OOPNPS OUEEXT, CIF CDF 0 JMP I OOPNPS OUEFAL, TAD I (MOUTPU AND (7760 SNA CLA JMP OUEEXT TAD I (MOUTPU AND (17 DCA I (MOUTPU JMP OOPNPS+1 OUHNDL, 0 OUTDMP, 0 DCA OUCTLW TAD OUCCNT SNA ISZ OUCTLW TAD OUBLK DCA OUREC TAD OUCTLW CLL RTL RTL RTL AND (17 TAD OUCCNT DCA OUCCNT TAD OUCCNT CLL CML TAD OUELEN SNL SZA CLA JMP I OUTDMP CIF 0 JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 JMP I OUTDMP ISZ OUTDMP JMP I OUTDMP OCLOSE, 0 JMS I (OTYPE AND (770 TAD (-PTP SZA CLA TAD (232 JMS I (OCHARP JMP OURET JMS I (OCHARP JMP OURET OULLLP, JMS I (OCHARP JMP OURET JMS I (OTYPE SPA CLA TAD (100 TAD (77 AND I (OUDWCT SZA CLA JMP OULLLP TAD I (OUDWCT TAD (OUCTL&3700 SNA JMP OUDUMP TAD (4010 JMS OUTDMP JMP OURET OUDUMP, TAD I (MOUTPU JMS I (200 4 MOUTPU+1 OUCCNT, 0 SKP ISZ OCLOSE OURET, CIF CDF 0 JMP I OCLOSE PAGE
OUTEMP, 0 OUJMP, HLT JMP OCHR1 JMP OCHR2 OCHR3, TAD OUTEMP CLL RTL RTL AND (7400 TAD I OUPOLD DCA I OUPOLD TAD OUTEMP CLL RTR RTR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMPP DCA OUJMP ISZ OUPTR ISZ OUDWCT JMP OUCOMN TAD (OUCTL JMS I (OUTDMP JMP OUCRET JMS OUSETP JMP OUCOMN OUSETP, 0 TAD (OUCTL&3700 CIA DCA OUDWCT TAD (OUBUF DCA OUPTR TAD OUJMPP DCA OUJMP JMP I OUSETP OCHARP, 0 AND (377 DCA OUTEMP RDF TAD (CIF CDF 0 DCA OUCRET CDF 10 ISZ OUJMP OUJMPP, JMP OUJMP OCHR2, TAD OUPTR DCA OUPOLD ISZ OUPTR OCHR1, TAD OUTEMP DCA I OUPTR OUCOMN, ISZ OCHARP OUCRET, CIF CDF 0 JMP I OCHARP OUPOLD, 0 OUPTR, 0 OUDWCT, 0 OTYPE, 0 TAD I (MOUTPU AND (17 TAD (DCB-1 DCA OUSETP TAD I OUSETP JMP I OTYPE CDINXX, ZBLOCK 5
$-$-$
(377 DCA OUTEMP RDF TAD (CIF CDF 0 DCA OUCRET CDF 10 ISZ OUJMP OUJMPP, JMP OUJMP OCHR2, TAD OUPTR DCA OUPOLD



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search