File PIP10.PA (PAL assembler source file)

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

/OS8 PIP10 - PDP-10 CONVERSION PROGRAM
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1974 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/

DTRB=6772 DTLB=6774 DTXA=6764 DTCA=6762 DTRA=6761 DTSF=6771 /WRITTEN BY MARK BRAMHALL 1970 /MODIFIED FOR TD8E BY R. LARY 1973 / /PIP10 IS A PIP FOR OS8 THAT HANDLES PDP-10 DECTAPES / /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 / /B IS BINARY MODE TRANSFER (I.E. 8 BITS PER 36 BITS) / /I IS IMAGE MODE TRANSFER (I.E. 3 12 BITS PER 36 BITS) / /P IS PRESERVE LINE NUMBERS (DEFAULT IS TO DELETE THEM)
/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 / / OS8 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 / / OS8 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
/DEFINITIONS DIRECT=7000 /PDP-10 DIRECTORY BUFFER (FIELD 1) IBUF10=3000 /PDP-10 INPUT BUFFER (FIELD 1) INBUF=3000 /OS8 INPUT BUFFER (FIELD 1) OBUF10=5000 /PDP-10 OUTPUT BUFFER (FIELD 1) OUBUF=5000 /OS8 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) JSBITS=7746 /0S8 JOB STATUS BITS DCB=7760 /DEVICE CONTROL BLOCK (FIELD 1) PTP=20 /DCB VALUE OF THE PAPER TAPE PUNCH
/PAGE ZERO AND POINTERS *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 AND /B 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, ZBLOCK 10 /LIST OF KNOWN PDP-10 UNITS CDCNT, 0 /INPUT LIST COUNTER CDI04, 0 /POINTER SAVE XDSK, TEXT /DSK/ /DEFAULT DEVICE DSK: OCHARY, 0 /TEMPORARY DVTYPE, 0 /DEVICE TYPE HOLDER TDUNIT, 0 /0 OR 4000 TAPFUN, 0 /DECTAPE FUNCTION PAGE
JMP I (PIP10 /NORMAL ENTRY JMS ERROR /PIP10 CANNOT BE CHAINED TO ERMES0-1 /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 SUCH DEVICE ERMES3-1 FNOTFD, JMS ERROR /FILE NOT FOUND ERMES9-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 OS8 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" TCON2, 2 /MUST BE AT BEGINNING OF PAGE! WRITET, 0 /WRITE PDP-10 DECTAPE CDF /BE SURE OF FIELD 0 TAD WRITET STL JMS I (TDIOCK /CHECK FOR TD IO TAD I WRITET /GET BUFFER ADDRESS DCA TBUF /AND SAVE IT JMS RWTEST /TEST DIRECTION WRITE2, JMS I (FLIP /REVERSE - FLIP BUFFER NOW TAD (50 WRITE1, DCA TAPFUN /SET FUNCTION (30=READ, 50=WRITE) DTLB /SEARCH INTO FIELD 0 TAD (TBLK DCA I TCA /TAPE BLOCK INTO "TBLK" TERR, RTL /ERROR BIT IS 0 INITIALLY RAL /SHIFT END ZONE BIT INTO LINK CML CLA /CLEAR REST OF THE JUNK TAD [200 /'GO' BIT TSTART, SNL /SKIP IF NO REVERSE DIRECTION TAD [400 /'REVERSE' BIT DTXA /START DRIVE GOING TLOOP, JMS I (DTWAIT TOUT, SPA /ERROR? JMP TERR /YES - CHECK IT DTRA /CHECK DIRECTION RTL RTL /DIRECTION BIT INTO LINK TMOD1, SZL CLA /'SNL CLA' IF REVERSE MODE TMOD4, TAD TCON2 /'CLL CLA CMA RAL' IF REVERSE MODE TAD TBLK /GET BLOCK FOUND CMA TAD I WRITET /GET BLOCK DESIRED CMA SZA CLA /SKIP IF FOUND THE BLOCK JMP TSTART /NOT FOUND - GO AGAIN TMOD2, SZL CLA /'SNL CLA' IF REVERSE MODE JMP TSTART+1 /FOUND BUT WRONG DIRECTION - REVERSE IT CLA CMA TAD TBUF /GET BUFFER ADDRESS-1 DCA I TCA /SET ADDRESS TAD (10 DTLB /SET FIELD 1 BUFFER TAD TAPFUN DTXA /SET READ OR WRITE TAD TM600 DCA I TWC /SET WORD COUNT OF 600 OCTAL WORDS DTSF /FLAG? JMP .-1 /NO - WAIT DTRB /CHECK FOR ERRORS SPA CLA JMP I (IOERR /ERROR!! TAD [200 DTXA /STOP THE DRIVE TMOD3, JMS I (FLIP /POSSIBLE FLIP AFTER READ ISZ WRITET JMP I WRITET /EXIT TCA, 7755 /DECTAPE CURRENT ADDRESS TWC, 7754 /DECTAPE WORD COUNT TBLK, 0 /SET TO BLOCK FOUND IN SEARCH TBUF, 0 /HOLDS BUFFER ADDRESS /READ ENTRY POINT READT, 0 /PDP-10 DECTAPE READ CDF /INSURE FIELD 0 TAD READT CLL JMS I (TDIOCK /CHECK FOR TD IO TAD I READT /GET BUFFER ADDRESS DCA TBUF /AND SAVE IT TAD READT DCA WRITET /MOVE RETURN ADDRESS JMS RWTEST /CHECK DIRECTION NOP /NO INITIAL FLIP IF REVERSE TAD (30 /READ FUNCTION JMP WRITE1 /GO DO REST OF THE ROUTINE
RWTEST, 0 /CHECK DIRECTION TO READ/WRITE AND SEARCH ISZ WRITET JMS I (GOLDBK /GET OLD BLOCK NUMBER (NEGATIVE) TAD I WRITET /GET DESIRED BLOCK DCA TBLK /SAVE FOR FUTURE USE SZL CLA TAD (10 /FORWARD - SZL CLA TAD TMOD6 /REVERSE - SNL CLA DCA TMOD1 /SET UP FOR DIRECTION TAD TMOD1 DCA TMOD2 SNL CLA TAD WRITE2 /REVERSE - FLIP BUFFER AFTER DCA TMOD3 /FORWARD - NO BUFFER FLIP TMOD6, SNL CLA TAD (7344-1200 /REVERSE - CLL CLA CMA RAL TAD TMOD5 /FORWARD - TAD TCON2 DCA TMOD4 /X0002 OR 17776 SZL CLA ISZ RWTEST /FORWARD - 2ND EXIT IAC SNL CIA /REVERSE DIRECTION TAD I WRITET SPA TM600, CLA /NO LOWER THAN 0 DCA I TAPFUN /SET NEW LAST SERVICED BLOCK TAD TBLK /REMEMBER SAVING THIS? CLL SMA SZA /<0 AND 0 SKIP AND HAVE LINK=0 CLL CML CIA />0 BECOMES <0 AND HAS LINK=1 TMOD5, TAD TCON2 CLA RTR /LINK HAS SEARCH DIRECTION RTR TAD (10 /ADD 'SEARCH' BIT DTCA DTXA /LOAD SEARCH AND DIRECTION TAD UNIT10 /GET UNIT DTXA /ADD UNIT (ALSO FLIPS DIRECTION) JMP I RWTEST /EXIT PAGE
/"OLDTBL" IS LIST OF LAST SERVICED BLOCKS OLDTBL, 0;0;0;0;0;0;0;0 /FLIP THE BUFFER ROUTINE FLIP, 0 /FLIP A 600 WORD BUFFER (FIELD 1) TAD I (TBUF /BUFFER START DCA FLIP1 /SET START TAD (577 TAD I (TBUF DCA FLIP2 /SET END (END=START+577) TAD (-300 DCA FLIP3 /SET COUNT (600/2=300) CDF 10 /BUFFER IS IN FIELD 1 FLIP6, TAD I FLIP1 /GET START JMS FLIP4 /FLIP IT DCA FLIP5 /SAVE TEMPORARILY TAD I FLIP2 /GET END JMS FLIP4 /FLIP IT DCA I FLIP1 /PUT END INTO START TAD FLIP5 DCA I FLIP2 /PUT START INTO END ISZ FLIP1 /BUMP POINTERS CLA CMA TAD FLIP2 DCA FLIP2 ISZ FLIP3 /DONE? JMP FLIP6 /NO - LOOP CDF /BACK TO FIELD 0 JMP I FLIP /EXIT FLIP1, 0 /START POINTER FLIP2, 0 /END POINTER FLIP3, 0 /COUNTER FLIP5, 0 /TEMPORARY FLIP7, 0 /FLIPPING TEMPORARIES FLIP8, 0 /" " FLIP4, 0 /FLIP A CELL DCA FLIP7 /SAVE IT TAD FLIP7 RTL RTL AND (7 /GET ...1 DCA FLIP8 /ACCUMULATE RESULT TAD FLIP7 RTR RAR AND (70 /GET ..2. TAD FLIP8 DCA FLIP8 /BUILD RESULT TAD FLIP7 AND (70 CLL RTL RAL /GET .3.. TAD FLIP8 DCA FLIP8 /BUILD RESULT TAD FLIP7 AND (7 CLL RTR RTR /GET 4... TAD FLIP8 CMA /GET NOT 4321 JMP I FLIP4 /EXIT
/TD8E I/O ROUTINE - CALLS STANDARD ROUTINE TDIOCK, 0 DCA TDRET /SAVE RETURN ADDR RAR DCA TDFUN /SAVE READ/WRITE JMS I (GET10D /GET TYPE OF DECTAPE TAD (-2 SZA CLA JMP I TDIOCK /TC08 - CONTINUE TAD I TDRET DCA TDBUF /SAVE BUF ADDR ISZ TDRET JMS GOLDBK /GET OLD BLOCK # TAD I TDRET CLA RAL /GET DIRECTION TAD (110 /ONE BLOCK, FIELD 1 TAD TDFUN DCA TDFUN /SAVE FINAL FUNCTION WORD JMS I (TDUSET /SET UP HANDLER TAD TDUNIT SPA CLA TAD (DTA1-DTA0 TAD (DTA0 DCA TDIOCK /SET UP HANDLER ENTRY PTR TAD I TDRET DCA I TAPFUN TAD I TAPFUN DCA TDBLK JMS I TDIOCK TDFUN, 0 TDBUF, 0 TDBLK, 0 JMP I (IOERR ISZ TDRET JMP I TDRET TDRET, 0 GOLDBK, 0 TAD UNIT10 /GET THE UNIT WE NEED CLL RTL RTL /SHIFT INTO BITS 9-11 TAD (OLDTBL DCA TAPFUN /POINT TO THIS UNIT'S POSITION TAD I TAPFUN /GET LAST SERVICED BLOCK CLL CIA JMP I GOLDBK 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
/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 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
/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 I (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 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
/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
/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 ISZ NEXTS4 /TRY MORE? SKP /YES JMP I (NOROOM /NO - OUT OF ROOM 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 JMP NEXTS5-1 /KEEP GOING NEXTS6, TAD NEXTS5 /GET FREE BLOCK JMP NEXTS7-1 /AND SET IT NEXTS4, 0 /COUNTER NEXTDI, 0 /DIRECTION (5, -5, 1, -1) /MORE PDP-10 OUTPUT /OUTPUT CHARACTER #3 - BITS 9-11 WORD 2 AND BITS 0-3 WORD 3 OCHAR3, TAD OCHARY CLL RTR RTR AND [7 TAD I OPOINT DCA I OPOINT ISZ OPOINT TAD OCHARY AND [17 CLL RTR RTR RAR JMP I (OCHARD PAGE
/PDP-10 CHARACTER OUTPUT ROUTINE / /CALL: / (AC) /CHARACTER / JMS OCHR10 /OUTPUT TO PDP-10 / -RETURN- /O.K. RETURN OCHR10, 0 /OUTPUT TO PDP-10 DCA OCHARY /SAVE CHAR TAD MODE /IMAGE MODE? SZA JMP OC10A1 /YES /I OR /B TAD OCHARY /NO - USE 7 BITS AND [177 OC10A2, DCA OCHARY OC10A3, 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 OC10A1, SMA CLA /BINARY? JMP OC10A3 /NO TAD OCHARY /YES AND [377 JMP OC10A2 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 JMP OCHARB /NO SMA CLA /BINARY? JMP OC10A4 /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 OC10A5, ISZ OPOINT OC10A4, TAD OCHARY JMP OCHARD 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 MODE SZA CLA JMP OC10A5 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 MODE SZA CLA JMP OC10A6 TAD OCHARY CLL RTL RAL /GET BITS 2-8 TAD I OPOINT JMP OCHARD /OUTPUT CHARACTER #4 - BITS 4-10 WORD 3 /BIT 11 WORD 3 IS 0 OCHAR4, TAD OCHARY CLL RAL /BITS 4-10 TAD I OPOINT OC10A7, DCA I OPOINT /SET WORD 3 ISZ OPOINT DCA CHARNO /RESET CHARACTER NUMBER JMP OCHARC OC10A6, ISZ OPOINT TAD OCHARY JMP OC10A7 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 JMP ICHARB /NO SMA CLA JMP IC10A1 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 MODE SZA CLA JMP IC10A1 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 MODE SZA CLA JMP IC10A3 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 IC10A3, DCA CHARNI SKP IC10A1, ISZ CHARNI TAD I IPOINT ISZ IPOINT JMP ICHARC 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? SPA 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
/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 PAGE
/CONVERT OS8 DATE TO PDP-10 DATE CVDATE, 0 SNA JMP I CVDATE /0 CONVERTS TO 0 DCA TEMP1 TAD TEMP1 AND [7 /GET OS8 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 DELOS8 /DELETE A OS8 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 DELOS8, CIF CDF 10 JMS I (DELPS1 /DELETE A OS8 FILE JMP I DELE10 JMP I (ERDELF /ERROR DELETING THE FILE
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, CDF 10 /STARTS HERE - JUMPED TO FROM 200 TAD I (MDATE /GET TODAY'S DATE CDF JMS I (CVDATE /CONVERT IT DCA DATE /AND STORE IT TAD (3401 /UNRESTARTABLE, DOESN'T DESTROY BATCH OR USR AREA DCA I (JSBITS PIPCD, CDF JMS I (CD /COMMAND DECODE CDF 10 TAD I (MPARAM AND (2010 CLL RAL 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 SZA CLA JMP PIP001 /IS AN OUTPUT FILE TAD I (MINPUT SNA CLA JMP PIPCD /NO OUTPUT OR INPUT FILES JMP I (NOOOFL /INPUT, BUT NO OUTPUT PIP001, 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 OS8 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 OS8 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 OS8 OUTPUT JMP I (NOOOFL TAD (OCHRPS JMP PIPD PIPB, CDF 0 CIF 10 JMS I [200 1 /GET OS8 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 (NOOOFL CDF 10 TAD LISTDV+1 DCA I [MOUTPU /SET TTY: DEVICE NUMBER TAD I [MOUTPU LIST11, AND [17 SNA JMP I (NOTPSF /NOT A OS8 FILE CDF 0 CIF 10 JMS I [200 1 /LOOKUP DEVICE OUDEVZ, 0 JMP I (NOOFIL LIST12, CDF CIF 10 TAD OUDEVZ DCA I (OUHNDL 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 JMS I (CRLF TAD I (LISTL JMS I (PRINTZ /PRINT FREE BLOCKS TAD (LISTM1-1 DCA INDEX0 JMS I (ERROR4 /"FREE BLOCKS" JMS I (CRLF 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 JMP I (LIST22 LIST13, 0 LIST15, 0 PAGE
LIST22, TAD I INDEX5 /GET EXTENSION JMS LIST18 TAD I INDEX5 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
/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 PAGE
LINBUF=. LISTL, ZBLOCK 105 LISTM1, TEXT / FREE BLOCKS PIP10 V2_/ ERMES0, TEXT /_PIP10 CANNOT BE CHAINED TO_/ ERMES1, TEXT #_I/O ERROR_# ERMES2, TEXT /_DEVICE FULL_/ ERMES3, TEXT /_NO SUCH DEVICE_/ ERMES4, TEXT /_NOT PDP-10 FILE_/ ERMES5, TEXT /_ERROR DELETING FILE_/ ERMES6, TEXT /_NOT OS8 FILE_/ ERMES7, TEXT /_OUTPUT FILE OPEN ERROR_/ ERMES8, TEXT /_SYNTAX ERROR_/ ERMES9, TEXT /_FILE NOT FOUND_/
/ROUTINE TO SET TD8E UNIT INFORMATION FROM UNIT10 TDUSET, 0 TAD UNIT10 CLL RTL RAL AND (7 TAD (DVCTBL DCA DVCPTR RAR DCA TDUNIT /SAVE EVEN/ODD BIT TAD (TDUTBL DCA TDUPTR TDULP, TAD I TDUPTR SNA JMP I TDUSET DCA TDUT TAD I TDUT AND (7 TAD I DVCPTR DCA I TDUT ISZ TDUPTR JMP TDULP TDUPTR, 0 TDUT, 0 DVCPTR, 0 DVCTBL, 6770;6760;6750;6740 TDUTBL, DIO01 DIO02 DIO03 DIO04 DIO05 DIO06 DIO07 DIO08 DIO09 DIO10 DIO11 DIO12 DIO13 DIO14 DIO15 DIO16 DIO17 DIO18 DIO19 DIO20 DIO21 DIO22 IOTX1 IOTX2 IOTX3 IOTX4 IOTX5 IOTX6 IOTX7 IOTX8 0 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 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
/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 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 DCA PDP10D /NO KNOWN PDP-10 DRIVES DCA PDP10D+1 DCA PDP10D+2 DCA PDP10D+3 DCA PDP10D+4 DCA PDP10D+5 DCA PDP10D+6 DCA PDP10D+7 DCA CDCNT /ZERO INPUT COUNT JMS I (GLINE /GET A LINE 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 XDSK DCA CDDEVF /SET "DSK" AS DEFAULT TAD XDSK+1 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 XDSK DCA CDDEVF /SET DEFAULT TAD XDSK+1 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 JMS I (GTDVTP /GET DEVICE TYPE AND COMPARE WITH TC08 AND TD8E 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 JMS SETUNT /SET UP PHYSICAL UNIT FROM HANDLER ENTRY POINT 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 SETUNT, 0 STL TAD (-7607 SZA /IF IT IS 7607, TAD (7 /ITS UNIT 0 AND (7 CLL CML RTR RTR DCA UNIT10 TAD DVTYPE AND (10 SNA CLA JMP I SETUNT /TC08 - FINISHED CLL TAD UNIT10 AND (7000 /TD8E ENTRY POINTS ARE STRANGE - TAD UNIT10 /MUST ROTATE UNIT NUMBER LEFT 1 SZL TAD (1000 DCA UNIT10 JMS I (TDUSET /SET UP TD8E OPCODES JMP I SETUNT 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 JMS GTDVTP /COMPARE DCB ENTRY WITH TC08 OR TD8E SZA CLA JMP CDIN3 /NOT DECTAPE TAD CDIN1 JMS I (SETUNT /SET UP UNIT NUMBER 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 (FNOTFD 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 (FNOTFD 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 GTDVTP, 0 TAD (DCB-1 DCA TEMP1 CDF 10 TAD I TEMP1 /GET DCB ENTRY CDF DCA DVTYPE TAD DVTYPE AND (770 TAD (-210 SZA TAD (30 JMP I GTDVTP PAGE
ROCK, 0 JMS GET10D /GET ENTRY IN TAPE TYPE TABLE SNA JMP ROCK4 /UNKNOWN - ROCK IT SMA CLA ISZ ROCK JMP I ROCK /EXIT GET10D, 0 TAD UNIT10 CLL RTL RTL TAD (PDP10D DCA TEMP5 /POINT TO KNOWN TABLE TAD I TEMP5 JMP I GET10D ROCK4, CLA CMA DCA I TEMP5 TAD DVTYPE AND (10 SZA CLA /WHAT KIND OF TAPE? JMP TDCHK /TD8E TAD (OBUF10-1 DCA I (7755 TAD (10 DTLB ROCK1, RTL RAL SZL CLA TAD (-400 TAD UNIT10 TAD (210 DTCA DTXA ROCK2, JMS DTWAIT ROCK3, SPA JMP ROCK1 CLA TAD (OBUF10-1 DCA I (7755 TAD (-600 DCA I (7754 TAD (30 DTXA DTSF DTRB JMP .-1 SPA CLA JMP ROCK4 /RETRY TAD [200 DTXA /STOP DRIVE TAD I (7754 SZA CLA JMP I ROCK /OS8 UNIT CLA IAC SET10, DCA I TEMP5 ISZ ROCK JMP I ROCK /PDP-10 UNIT DTWAIT, 0 /WAIT FOR DECTAPE FLAG DTSF DTRB SKP CLA JMP I DTWAIT KSF JMP DTWAIT+1 TAD [200 KRS TAD (-203 SZA CLA JMP DTWAIT+1 TAD [200 DTXA /STOP THE TAPE JMP I [7600 TDCHK, CLA STL RTR TAD TDUNIT IOTX1, SDLC CLA IOTX2, SDRC AND (100 /CHECK FOR TAPE NOT READY SZA CLA JMP TDCHK /WAIT FOR TAPE TO COME UP TAD TDUNIT TAD (1000 IOTX3, SDLC JMS SKIP4 JMS SKIP4 IOTX4, SDSS JMP .-1 IOTX5, SDRC AND [77 TAD (-26 SZA CLA /WAIT FOR GUARD JMP IOTX4 DCA TDT TDCLP, JMS SKIP4 ISZ TDT AND [77 TAD (-51 /SEARCH FOR SOME CRAP NEAR END OF RECORD SZA CLA JMP TDCLP TAD UNIT IOTX6, SDLC /STOP TAPE CLA TAD TDT TAD (-611 /9 WORDS FOR GOOD LUCK SZA CLA JMP I ROCK STL RTL /SET TABLE ENTRY TO 2 FOR TD8E TAPE JMP SET10 SKIP4, 0 IOTX7, SDSQ JMP .-1 IOTX8, SDRC JMP I SKIP4 TDT, 0 PAGE FIELD 0 /DUMP PG 0 LITERALS HERE
/TD8E DECTAPE ROUTINE /VERSION 01 /JULY 2 1971 GB/RL/EF /COPYRIGHT 1971 DIGITAL EQUIPMENT CORP. / MAYNARD, MASS. /ABSTRACT-- / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT /WHICH IS COMPATIBLE WITH PS/8 DEVICE HANDLER CALLING /SEQUENCES.
/THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS /CONTROL: /A) WHAT DRIVES (UNITS 0-7) WILL BE USED /B) THE ORIGIN OF THE TWO PAGE ROUTINE /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD /DEC VERSION OF THIS ROUTINE: DRIVE=10 /UNITS 0 AND 1 SELECTED ORIGIN=6200 /ENTRIES AT 6200 AND 6204 AFIELD=0 /INITIAL FIELD SETTING MFIELD=00 /AFIELD*10=MFIELD WDSBLK=600 /384 WORDS PER BLOCK /THE USE OF THE PARAMETERS IS AS FOLLOWS: / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED / DRIVE=10 IMPLIES UNITS 0 &1 / DRIVE=20 IMPLIES UNITS 2&3 / DRIVE=30 IMPLIES UNITS 4&5 / DRIVE=40 IMPLIES UNITS 6&7 /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND /THAT THIS IS A TWO PAGE ROUTINE. /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR / 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS / FORMATTED TO CONTAIN. /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS /PER BLOCK, THE PARAMETERS WOULD BE: / DRIVE=20 / ORIGIN=3000 / AFIELD=2 / MFIELD=20 / WDSBLK=400
/THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE /CALLING SEQUENCE FOR PS/8 DEVICE HANDLERS. /THE CALLING SEQUENCE IS: / CDF CURRENT / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. / ARG1 / ARG2 / ARG3 / ERROR RETURN / NORMAL RETURN /THE ARGUMENTS ARE: /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE / BITS 1-5: # BLOCKS IN OPERATION / BITS 6-8: FIELD OF BUFFER AREA / BIT 9: UNUSED / BIT 10: # OF WORDS/BLOCK. / 0= WDSBLK, 1=WDSBLK-1 / BIT 11: 1=START FORWARD, 0=REVERSE /ARG2: BUFFER ADDRESS FOR OPERATION /ARG3: STARTING BLOCK FOR OPERATION /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, / TOO GREAT A BLOCK NUMBER / FATAL ERRORS TAKE ERROR RETURN WITH THE / AC=4000. /B) NON-FATAL- SELECT ERROR. / IF NO PROPER UNIT IS SELECTED, THE ERROR / RETURN IS TAKEN WITH CLEAR AC. /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR.
/THE TD8E IOT'S ARE: SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG SDST=7002-DRIVE /SKIP ON TIMING ERROR SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG SDLC=7004-DRIVE /LOAD COMMAND REGISTER SDLD=7005-DRIVE /LOAD DATA REGISTER SDRC=7006-DRIVE /READ COMMAND REGISTER SDRD=7007-DRIVE /READ DATA REGISTER /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. /THE OTHERS CONTROL UNITS 2-7. BLOCK=DTA1 FIELD AFIELD *ORIGIN DTA0, 0 /ENTRY POINT FROM UNIT 0 CLA CLL /0 TO LINK JMP DTA1X C1000, 1000 DTA1, 0 /UNIT 2 ENTRY CLA CLL CML /1 TO LINK TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /LINK TO UNIT POSITION RDF TAD C6203 /GET DATA FIELD AND SETUP RETURN DCA LEAVE TAD I DTA0 /GET FUNCTION WORD DIO01, SDLD /PUT FUNCTION INTO DATA REGISTER CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER /BLOCK INTO LINK SZL CLA /KNOCK ONE OFF WDSBLK? IAC /YES TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /TO BLOCK NUMBER TAD I DTA0 DCA BLOCK ISZ DTA0 /POINT TO ERROR EXIT CIF CDF MFIELD /TO ROUTINES DATA FIELD DIO02, SDRD /GET FUNCTION INTO AC CLL RAL AND CM200 /GET # PAGES TO XFER DCA PGCT DIO03, SDRD C374, AND C70 /GET FIELD FOR XFER TAD C6203 /FORM CDF N DCA XFIELD /IF=0 AND DF=N AT XFER. CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES TAD UNIT /TEST FOR SELECT ERROR DIO04, SDLC DIO05, SDRC AND C100 SZA CLA JMP FATAL-1
DIO06, SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. DCA I CXFUN TAD WCOUNT DCA I CXWCT DIO07, SDRD /GET MOTION BIT TO LINK CLL RAR JMP GO /AND START THE MOTION. DIO08, RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. TAD PGCT /NO ERROR..FINISHED XFER? TAD CM200 SNA JMP EXIT /ALL DONE. GET OUT DCA PGCT /NEW PAGE COUNT ISZ BLOCK /NEXT BLOCK TO XFER TAD WCOUNT /FORM NEXT BUFFER ADDRESS CIA TAD BUFF DCA BUFF CLL CML /FORCES MOTION FORWARD GO, CLA CML RTR /LINK BECOMES MOTION BIT TAD C1000 TAD UNIT /PUT IN 'GO' AND UNIT # DIO09, SDLC /LOOK FOR BLOCK NO. JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMS I CRDQUD CM200, 7600 /COULD HAVE SAVED A LOC. HERE DIO10, SRCH, SDSS JMP .-1 /WAIT FOR SINGLE LINE FLAG DIO11, SDRC CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LINK STAYS SAME THRU THIS JMP ENDZ TAD M20 /CHECK FOR BLOCK MARK SZA CLA JMP SRCH DIO12, SDRD /GET THE BLOCK NUMBER SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. TAD C3 /REVERSE CMA TAD BLOCK CMA /IS IT RIGHT BLOCK? SNA JMP FOUND /YES..HOORAY! M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. JMP SRCH /YES DIO13, ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK SZL CLA /ARE WE IN REVERSE? JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR TRY3, ISZ TRYCNT JMP GO /TRY 3 TIMES CLL CLA JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD UNIT DIO14, SDLC /STOP THE UNIT CLA CML RAR LEAVE, HLT JMP I DTA0
C6203, 6203 CRDQUD, RDQUAD WCOUNT, 0 BUFF, 0 MWORDS, -WDSBLK UNIT, 0 CXFUN, XFUNCT M20, -20 PGCT, 0 CXWCT, XWCT C100, 100 TRYCNT, -3 *ORIGIN+170 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? JMP GO /WRONG..TURN AROUND TAD UNIT /PUT UNIT INTO LINK CLL RAL /AC IS NOW 0 C70, 70 /********DON'T MOVE THIS!!!!****** C3, 3 TAD BUFF /GET BUFFER ADDRESS XFIELD, HLT /INTO NEXT PAGE *ORIGIN+200 XUNIT=EQUFUN CIF MFIELD DCA XBUFF /SAVE ADDRESS RAR /NOW GET UNIT # DCA XUNIT TAD XWCT DCA DWORDS /WORD COUNTER DIO15, REVGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD DIO16, SDRC AND K77 TAD CM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO.KEEP LOOKING TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE DIO17, WRITE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMP I CFATAL /FATAL ERROR. LINK MUST BE ON JMS RDQUAD /NO ONE EVER USES THIS WORD! C7600, 7600 TAD C1400 TAD XUNIT /INITIATE WRITE MODE DIO18, SDLC CLA CMA JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM CLA CMA DCA CHKSUM WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! JMS WRQUAD ISZ XBUFF /BUMP CORE POINTER K77, 77 /ABOVE MAY SKIP ISZ DWORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? CLL RTR /IF NO, WRITE A 0 WORD SZL CLA
JMS WRQUAD /WRITE A WORD OF 0 JMS GETCHK /DO THE CHECK SUM JMS WRQUAD /WRITE FORWARD CHECKSUM JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN JMP I CRWCOM READ, JMS RDQUAD JMS RDQUAD JMS RDQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS RDQUAD JMS EQUFUN /COMPUT CHECKSUM AS WE GO DCA I XBUFF /IT GETS CONDENSED LATER ISZ XBUFF C300, 300 /PROTECTION ISZ DWORDS /DONE THIS OP? JMP RDLP /NO SUCH LUCK TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND CLL RTR /CHECKSUM THE LAST TAPE WORD SNL CLA JMP RDLP2 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS RDQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMP I CRWCOM WRQUAD, 0 /WRITE OUT A 12 BIT WORD JMS EQUFUN /ADD THIS TO CHECKSUM DIO19, SDSQ /SKIP ON QUADLINE FLAG JMP .-1 DIO20, SDLD /LOAD DATA ONTO BUS CLA /SDLD DOESN'T CLEAR AC JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD DIO21, SDSQ JMP .-1 DIO22, SDRD /READ DATA JMP I RDQUAD
EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE CIA /IS ASSOCIATIVE, WE CAN DO IT 12 CLL RAL /BITS AT A TIME AND CONDENSE LATER. TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EQUFUN GETCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CHKSUM CMA CLL RTL RTL RTL JMS EQUFUN CLA CLL CML /FORCES LINK ON AT RWCOM TAD CHKSUM AND K7700 JMP I GETCHK CFATAL, FATAL CRWCOM, RWCOM XFUNCT, 0 CM32, -32 C1400, 1400 CHKSUM, 0 DWORDS, 0 XBUFF, 0 XWCT, 0 EQUTMP, 0 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, CDF 0 TAD I (MODE CDF 10 SMA SZA CLA JMP IC8A1 TAD I INPTR AND (7400 DCA INCTLW ISZ INPTR IC8A2, 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 INCHR1, CDF 0 TAD I (MODE CDF 10 SPA SNA CLA JMP IC8A2 IC8A3, TAD I INPTR ISZ INPTR JMP INEXIT-1 IC8A1, TAD INJMPP DCA INJMP ISZ INCHCT JMP IC8A3 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 CDF 0 TAD I (MODE CDF 10 SMA SZA CLA JMP OULLLP+2 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 OC8A1, 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 DCA OUTEMP RDF TAD (CIF CDF 0 DCA OUCRET CDF 0 TAD I (MODE SMA SZA CLA JMP .+4 TAD OUTEMP AND (377 DCA OUTEMP CDF 10 ISZ OUJMP OUJMPP, JMP OUJMP OCHR2, CDF 0 TAD I (MODE CDF 10 SMA SZA CLA JMP OC8A2 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 OC8A2, ISZ OUPTR TAD OUTEMP JMP OC8A1 PAGE
$-$-$



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