From: Richard Cornwell Date: Sun, 15 Mar 2020 23:32:55 +0000 (-0400) Subject: Cleanup of typos. X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v1.19.git/commitdiff_plain/4fb7d2c6e213ffe2a833a1fc80001df40261b5fa Cleanup of typos. --- diff --git a/src/cdrser.mac b/src/cdrser.mac index ddb0347..1bcf2a4 100644 --- a/src/cdrser.mac +++ b/src/cdrser.mac @@ -57,7 +57,6 @@ CDRDSP: CONO CR,0 ;RELEASE JRST ILLOUT ;OUTPUT JRST CRINP; INPUT - CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0 CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 diff --git a/src/conall.ccl b/src/conall.ccl index ca60a47..9046fba 100644 --- a/src/conall.ccl +++ b/src/conall.ccl @@ -26,3 +26,17 @@ SYSCON,SYSCON_S,SYSCON SYSCSS,SYSCSS_S,SYSCSS SYSINI,SYSINI_S,SYSINI SYSMAK,SYSMAK_S,SYSMAK +TENDMP,TENDMP_TENDMP.MAC +COPY,COPY_COPY +EDDT,EDDT_E,EDDT +DDT,DDT_EDDT +EDITOR,EDITOR_EDITOR +SRCCOM,SRCCOM_SRCCOM.3 +CREF,CREF_CREF.V2 +FUDGE2,FUDGE2_FUDGE2 +LOAD1K,LOAD1K_K,LOADER.1 +LOADER,LOADER_LOADER.1 +MACRO,MACRO_MACRO.10 +PIP1,PIP1_K,PIP +PIP,PIP_PIP +RIM10B,RIM10B_RIM10B diff --git a/src/conseq.ccl b/src/conseq.ccl index 1188fd1..8e4bb5b 100644 --- a/src/conseq.ccl +++ b/src/conseq.ccl @@ -34,3 +34,4 @@ syscss.max=syscss.mac/s sysini.max=sysini.mac/s sysmak.max=sysmak.mac/s tendmp.max=tendmp.mac/s +copy.max=copy.mac/s diff --git a/src/copy.mac b/src/copy.mac new file mode 100644 index 0000000..a3325df --- /dev/null +++ b/src/copy.mac @@ -0,0 +1,1037 @@ +TITLE COPY V006 31MAR +;COPYRIGHT 1968, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. +REPEAT 0,< + + + COPY WILL RUN IN ANY AMOUNT OF CORE, HOWEVER, EFFICIENCY +INCREASES WITH CORE SIZE. SWITCHES ARE PRECEDED BY A SLASH OR +ENCLOSED IN PARENTHESES AND MAY APPEAR ANYWHERE IN THE COMMAND +STRING. THE GENERAL COMMAND STRING FORMAT IS: + (OUTPUT DECTAPE):_(INPUT DECTAPE):/C + + /C COPY ALL BLOCKS FROM THE INPUT DECTAPE ONTO + THE OUTPUT DECTAPE. + /Z ZERO ALL BLOCKS OF THE OUTPUT DECTAPE, CLEAR + THE DIRECTORY. + /V PERFORM A WORD BY WORD COMPARISION BETWEEN + EVERY WORD OF THE INPUT AND OUTPUT DECTAPES. + /L LOAD A BOOTSTRAP LOADER INTO A CORE BUFFER. + COPY LOOKS FOR "BSLDR.REL" ON LOGICAL DEVICE + "PTR". NOTE COPY MUST BE "SAVED" IF THE LOADER + IS TO BE PRESERVED WITH THE COPY CORE IMAGE. + /T CAUSES A BOOTSTRAP LOADER TO BE WRITTEN ONTO + BLOCKS 0,1 AND 2 OF THE OUTPUT TAPE. COPY TYPES + "TYPE CORE BANK OR OFFSET FOR BSLDR." + OFFSET = OCTAL NUMBER 1000 TO 777600. + CORE-BANK = NNNK = 16K TO 256K, + EX: NNNK=64K + THEN OFFSET=177000 (TOP OF COPE - 1000) + /N DON'T OUTPUT A DIRECTORY. + /6 LOOK FOR A DIRECTORY IN BLOCK ONE, NOT BLOCK 144. + /G DON'T RESTART THE PROGRAM AFTER A PARITY ERROR + (BIT20), OUTPUT AN ERROR MESSAGE AND CONTINUE. + NO SW'S SET C AND V SWITCHES (DEFAULT CONDITION). + + NOTE........AT COMPLETION THE OUTPUT DECTAPE SHOULD BE REASSIGNED + TO ENSURE THAT THE DIRECTORY IN CORE IS UP TO DATE. + + THE FOLLOWING MESSAGES MAY BE OUTPUT TO THE USER'S TELETYPE. + + ?WRITE LOCK ERROR + ?INPUT (OR OUTPUT) DEVICE ERROR + ?INPUT (OR OUTPUT) CHECKSUM OR PARITY ERROR + ?INPUT (OR OUTPUT) BLOCK TOO LARGE + ?INPUT (OR OUTPUT) PREMATURE END OF FILE + 000000 VERIFICATION ERRORS + ?COMMAND ERROR + ?SWITCH ERROR + ?DEVICE INIT FAILURE + ?DEVICE MUST BE A DECTAPE + ?INPUT AND OUTPUT DECTAPES MAY NOT BE THE SAME DEVICE. + +THE FOLLOWING MAY BE OUTPUT WHILE PROESSING "/L". + ?PTR INIT FAILURE + ?LOOKUP FAILED, "BSLDR.REL" + ?DATA ERROR ON DEVICE PTR + ?ILLEGAL BLOCKTYPE + ?CANNOT PROCESS EXTERNAL SYMBOLS + ?CANNOT PROCESS HIGH SEG'S + ?NO END BLOCK ENCOUNTERED + ?BOOTSTRAP LOADER WILL NOT FIT IN 3 BLOCKS + +THE FOLLOWING MAY BE OUTPUT WHILE PROCESSING "/T". + TYPE CORE BANK OR OFFSET FOR DTBOOT + ?OFFSET = 1000 TO 777600 (OCTAL) + ?EXPECTED FORMAT IS "NNNK" = 16K T0 256K + ?BOOTSTRAP LOADER IS NOT IN COPY; TRY "/L". +> + +FLP=400000 ;NOT SW MODE **FLAGS ARE IN LH OF F** +FLC=200000 ;COPY +FLZ=100000 ;ZERO +FLV= 40000 ;VERIFY +FLT= 20000 ;TENDMP +FLG= 10000 ;IGNORE PARITY ERRORS +FLL= 4000 ;LIST DIR +FLK= 2000 ;COLON +FLA= 1000 ;LEFT ARROW +FLI= 400 ;INPUT DEVICE +FL2= 200 ;CHANEL TWO +HSW= 100 ;HELP +LSW= 20 ;REQ TO LOAD A BSLDR +LFL= 10 ;A BOOTSTRAP LOADER IS IN "COPY" +NSW= 4 ;NO DIRECTORY +FL6= 2 ;6 FORMATTED +FPT= 1 ;A PDP-10 +ANYSW=FLC+FLZ+FLV+FLT ;ANYSW=0 IMPLIES FLC+FLV +JOBVER=137 + +AC0=0 +AC1=1 +AC2=2 +AC3=3 +AC4=4 +AC5=5 +AC6=6 +V1=1 ;VERIFY CMDLST +VZ1=2 ;CMDLST TERMINATOR +V2=3 ;VERIFY CMDLST +VZ2=4 ;CMDLST TERM +BP=5 ;BYTE POINTER +C=6 ;CURRENT CHARACTER +LOC=7 ;BLOCK NUMBER +T=10 ;TEMP +U=T+1 ;TEMP +F=12 ;FLAGS +UNSD2=14 ;UNUSED +UNSD3=15 ;UNUSED +IOS=16 ;IO STATUS +P=17 ;PUSH DOWN LIST + EXTERN JOBFF,JOBREL,JOBSA,JOBREN + LOC JOBVER + XWD 0,6 ;;VERSION # + RELOC + +ST: CALLI 0 + MOVE P,[IOWD 20,TTYIN+23] ;PUSH DOWN LIST + INIT 17,1 ;ASCII LINE + SIXBIT /TTY/ + XWD TOUT,TIN + HALT . ;INIT ERROR + PUSH P,JOBFF + MOVEI T,TTYIN + MOVEM T,JOBFF + INBUF 17,1 ;SET THE BUFFER ADR TO TTYIN + MOVEI T,TTYOUT + MOVEM T,JOBFF + OUTBUF 17,1 ;SET THE BUFFER ADR TO TTYOUT + OUTPUT 17, ;DUMMY + SETZB F,IDEV + SETZB T,ODEV + POP P,JOBFF + + MOVE T,JOBREL + SUB T,JOBFF ;T=NO. OF FREE LOC + MOVE C,JOBFF ; + MOVEI AC0,3777(C) ; + CAIGE T,3777 ;TRY FOR AT LEAST 2K OF BUFFER AREA + CALLI AC0,11 ;CORE UUO + JFCL ;O WELL + SUBI C,1 ;IOWD FORMAT "ADR-1" + ANDI T,-200 ;T=NO. OF FREE WORDS + MOVNM T,U ;IOWD FORMAT "-N" + LSH T,-7 ;T=NO. OF BLOCKS PER COPY INPUT + MOVEM T,INC ;COPY INCREMENT + LSH T,-1 ;T=NO. OF BLOCKS PER VERIFY INPUT + MOVEM T,INCV ;VERIFY INCREMENT + HRLM U,C ;ASSEMBLE + MOVEM C,LISTC ;COPY IOWD + ASH U,-1 ;HALVE THE "-N" FOR VERIFY + TRNE U,100 ;"-N" MUST AGREE WITH THE INCREMENT + ADDI U,100 ;ADJUST + HRL C,U ;ASSEMBLE + MOVEM C,LISTV1 ;VERIFY IOWD #1 + MOVMM U,U ; + ADD C,U ;ASSEMBLE + MOVEM C,LISTV2 ;VERIFY IOWD #2 + + MOVEI C,"*" + PUSHJ P,TYPC ;OUTPUT CHAR + INPUT 17, + MOVE F,FSAVE ;INITIAL FLAGS + SKIPA BP,[POINT 6,ODEV] ;ASSUME AN OUTPUT DEV +COIDEV: MOVE BP,[POINT 6,IDEV] ;INPUT IF LEFT-ARROW + COLON WERE SEEN +COTGET: PUSHJ P,TYPGET ;RETURN A CHAR TO C + CAIN C,"/" + JRST COSLSH ;SLASH + CAIN C,"(" + JRST COLPRN ;LEFT PAREN + CAIN C,":" + JRST COCOLN ;COLON + CAIE C,12 + CAIN C,15 + JRST COCRET ;CR OR LF + CAIE C,175 ;ALTMODE? + CAIN C,33 ;ALTMODE? + JRST COCRET ;YES + CAIN C,176 ;ALTMODE? + JRST COCRET ;YES + CAIE C,"=" ;==_ + CAIN C,"_" + JRST COLARO ;LEFT ARROW + CAIGE C,"0" ; + JRST ERRCMD ; + CAILE C,"9" ;ILLEGAL CHAR? + CAIL C,"A" ; + CAILE C,"Z" ; + JRST ERRCMD ; + SUBI C,40 ;6 BITIZE IT + TLNE BP,770000 ;ACCEPY 6 CHARS ONLY + IDPB C,BP ;ASSEMBLE AN I/O DEV NAME + JRST COTGET ; + COLPRN: TLZA F,FLP ;ENTER PAREN MODE +COEXIT: JUMPL F,COTGET ;NORMAL EXIT +COSLSH: PUSHJ P,TYPGET ;SLASH - RETURN SW IN C + MOVSI U,-LEN ;U=-SWTAB LEN,0 +COSWLP: MOVE T,SWTAB(U) ;T=FLAG,CHAR + CAIN C,(T) ;C=0,CHAR + TDOA F,T ;F=FLAGS,CHARS ANDED + AOBJN U,COSWLP ;MORE SW'S? LOOP + JUMPL U,COEXIT ;MATCH OR MORE SW? LOOP + JRST ERRSW ;NOT A SWITCH + +COLARO: TLZE F,FLK ;CLEAR COLON FLAG + TLOE F,FLA ;SET LEFT ARROW FLAG + JRST ERRCMD ;TOO MANY ARROWS,NOT ENOUGH KOLONS + JRST COIDEV ;NEXT DEVICE MUST BE INPUT + +COCOLN: TLZ BP,770000 ;ACCEPT NO MORE CHARS. + TLON F,FLK ;SET KOLON FLAG + JUMPGE BP,COTGET ;NORMAL EXIT + JRST ERRCMD ;NULL NAME, TOO MANY COLONS + +COCRET: TLZE F,HSW ;HELP? + JRST HELP ; + TLZE F,LSW ;LOADING A LOADER? + JRST BSLDR ;YES + TLNE F,FLA ;LEFT ARO ? + JRST COSTRT ;_,SO OK + SKIPE ODEV ; + JRST ERRCMD ;NO_,SOME ODEV + TLNN F,ANYSW ; + JRST ST ;NO_,NO ODEV,NO SW =* + JRST ERRCMD ;NO_,NO ODEV, NO SW + +COSTRT: TLNN F,ANYSW ;ANY SW=SKIP + TLO F,FLC+FLV ;DEFAULT=COPY+VERIFY + TLNE F,FLC ;IF COPY + TLZ F,FLZ ;DONT ZERO + TLNE F,FLZ ;IF ZERO + TLZ F,FLV ;DONT VERIFY + SKIPN T,IDEV + TLNE F,FLC+FLV + JUMPE T,ERRCMD ;AN INDEVICE IS REQUIRED + TLNN F,FLT ;IS 10DMP WANTED? + JRST CINIT ;NO, PROCEED + + ;HERE TO ACCEPT THE BOOTSTRAP LOADER OFFSET (/T) + +CTENDM: TLNN F,LFL ;IS A BOOTSTRAP LOADER LOADED? + JRST ERRTNH ;NO, COMPLAIN +CTEN1: SETZB AC1,OFFSET ; + TTCALL 3,[ASCIZ / +TYPE CORE BANK OR OFFSET FOR /] + MOVEI BP,PNAME + PUSHJ P,TYPEIT ;BSLDR'S NAME + INPUT 17, +CTEN0: PUSH P,TIN+1 ;SAVE PTR FOR RESCAN + MOVEI AC0,6 ;MAX CHARS TO ACCEPT + PUSHJ P,TYPGET ; + CAIN C,"K" ; + JRST CTEN10 ;K, MUST BE A CORE-BANK + SOJG AC0,.-3 + POP P,TIN+1 ; + MOVEI AC0,6 ;ACCEPT 6 NUMBERS +CTEN2: PUSHJ P,TYPGET ;GET A CHAR + CAIL C,"0" ; + CAILE C,"7" ; + JRST CTEN7 ;NOT A OCTAL NUMBER, TERM? + LSH AC1,3 ;MAKE ROOM + TRZ C,777770 ;CLEAR HI-ORDER BITS + ADD AC1,C ; FOR THIS CHAR + SOJG AC0,CTEN2 ;LOOK FOR 6 CHARS +CTEN3: CAIL AC1,1000 ;LOWER LIMIT + CAILE AC1,777600 ;UPPER LIMIT + JRST CTEN8 ;COMPLAIN +CTEN4: HRLI AC1,W ;SO [HRRI W,@OFFSET] WILL WORK + MOVEM AC1,OFFSET ;SAVIT + JRST CINIT ; + +CTEN7: CAIL C,12 ;"LF" + CAILE C,15 ;"CR" + CAIN C,33 ;ALTMODE + JRST CTEN3 ;A TERMINATOR +CTEN8: TTCALL 3,[ASCIZ / +?OFFSET = 1000 TO 777600 (OCTAL)/] + JRST CTEN1 ; + + ;LOOK FOR A CORE BANK, 16K-256K +CTEN10: POP P,TIN+1 ;RESCAN TTYBUF + MOVEI AC0,3 ;ONLY 3 CHARS MAX IS "256" +CTEN11: PUSHJ P,TYPGET ; + CAIL C,"0" ; + CAILE C,"9" ; + JRST CTEN17 ; + IMULI AC1,^D10 ;MAKE ROOM FOR NEXT CHAR... DEC TO OCT + ANDI C,17 ;EXTRACT DECIMAL NUMBER + ADD AC1,C ; + SOJG AC0,CTEN11 ; + +CTEN12: TRNE AC1,17 ;CHECK FOR MODULO 16 + JRST CTEN18 ;ILL + JUMPE AC1,CTEN18 ;ILL + LSH AC1,-4 ;PUSH OFF ZEROES + CAILE AC1,20 ;MAX IS 256 + JRST CTEN18 ;ILL + IMULI AC1,40000 ;TURN IT INTO AN OFFSET + SUBI AC1,1 ; + TRZ AC1,777 ;1K BELOW TOP OF THIS BANK + JRST CTEN4 ; +CTEN17: CAIN C,"K" ;SKIP IF TERM + JRST CTEN12 ; + +CTEN18: TTCALL 3,[ASCIZ / +?EXPECTED FORMAT IS "NNNK" = 16K TO 256K. +/] + JRST CTEN1 + CINIT: MOVEI T,134 ;BUFRD MODE + PUSHJ P,INIT ;FIRST INIT + TLNE F,FLC!FLZ ;BEGIN HERE ___****** + PUSHJ P,COPZRO ;ZERO OR COPY + TLNE F,FLC!FLZ ;IF C OR Z- + PUSHJ P,LALA ;THEN REWIND + TLNN F,FLZ ;WASIT /Z ? + JRST CNOZRO ;NO + SETSTS 2,16 ;YES + CALLI 2,13 ;CLEAR DIR IN CORE + RELEAS 2, ;AND ON TAPE + MOVEI T,14 ;AND + PUSHJ P,INIT ;REINIT +CNOZRO: TLNE F,FLV ;VERIFY ? + PUSHJ P,VERZRO ;YES + TLNE F,FLV ;IF VERIFY- + PUSHJ P,LALA ;THEN REWIND + TLNE F,FLT ;TEN DUMP ? + PUSHJ P,TENINT ;YES + JRST ST ;GO AGAIN ****** + +LALA: MTAPE 2,1 ; + SKIPE C,IDEV ; + MTAPE 1,1 ; + JFCL 1,.+1 ;PROCESSOR TEST + JRST .+1 ; + JFCL 1,.+3 ;6-JUMP + TLO F,FPT ;PDP-10 FLAG + JRST LSTEST ;10-JUMP + JUMPE C,LSTES0 ;JUMP IF NO INPUT DEV + USETI 1,1 + INPUT 1,REWIND ;IOWD 1,DATA +LSTES0: USETI 2,1 + INPUT 2,REWIND +LSTEST: TLZE F,FLL ;LIST A DIR? + JRST DLST ;YES + MOVEI C,^D15 ;SECONDS +GDNITE: TLNE F,FPT ;6-SKIP + CALLI C,31 ;TO SLEEP + POPJ P, ; + +SWTAB: XWD FLP,")" ;XIT + XWD FLC,"C" ;COPY + XWD FLZ,"Z" ;ZERO + XWD FLV,"V" ;VERIFY + XWD FLT,"T" ;TENDMP + XWD FLG,"G" ;IGNORE + XWD HSW,"H" ;HELP + XWD LSW,"L" ;LOAD BSLDR + XWD NSW,"N" ;NO DIR + XWD FL6,"6" ;PDP6 DIR + LEN=.-SWTAB + DSAV: TLON F,FLL ;ENTER THIS CODE ONCE ONLY + TLNE F,FL6 ;SKIP IF ITS NOT 6FMT + POPJ P, ;2ND PASS OR 6FMT-EXIT. + MOVEI 1,-144(LOC) ;FIRST BLK OF NEXT OUTPUT + SUB 1,INC ;FIND A + IMULI 1,-200 ; DIRECTORY, + ADD 1,LISTC ;GRAB + HRLI 1,1(1) ; A + HRRI 1,DIRECT ; DIRECTORY. + BLT 1,DIRECT+177 ;SAVE IT. + POPJ P, ;RETURN + +DATE: SETZ AC2, + LDB AC5,DATEP + IDIVI AC5,^D31 ;PICK OFF THE DAY + ADDI AC6,1 ;MAKE IT RIGHT + PUSHJ P,DATE1 ;RETURNS TWO SIXBIT NUMBERS + DPB AC6,DAY ;XXDDXX + IDIVI AC5,^D12 ;PICK OFF THE MONTH + MOVE AC6,MONPH(AC6) ;CONVERT TO ALPHA + DPB AC6,MONTH ;MMDDXX + MOVEI AC6,^D64 ;GET THE BASE YEAR + ADD AC6,AC5 ;PLUS YEARS SINCE THEN + PUSHJ P,DATE1 ;SIXBIT + DPB AC6,YEAR ;YYMMDD-DATE FINISHED + POPJ P, ; + +DATE1: IDIVI AC6,^D10 ;DIVIDE OUT A DECIMAL NUMBER + LSH AC6,6 ;MAKE ROOM FOR THE REMIANDER + ADDI AC6,152020(LOC) ;CONVERT TO SIXBIT + POPJ P, ;RETURN + +DAY: POINT 12,AC2,11 +MONTH: POINT 24,AC2,35 +YEAR: POINT 18,AC3,17 +DATEP: POINT 12,DNAM+^D22(AC1),35 +FREE: SIXBIT /FREE: +/ +BLKS: SIXBIT /-BLKS +/ +FILES: SIXBIT /-FILES#/ + MONPH: SIXBIT / -JAN/ + SIXBIT / -FEB/ + SIXBIT / -MAR/ + SIXBIT / -APR/ + SIXBIT / -MAY/ + SIXBIT / -JUN/ + SIXBIT / -JUL/ + SIXBIT / -AUG/ + SIXBIT / -SEP/ + SIXBIT / -OCT/ + SIXBIT / -NOV/ + SIXBIT / -DEC/ + + ;STANDARD OCTAL TO ASCII ROUTINE +DECMAL: IDIVI C,^D10 ; + HRLM C+1,(P) ; + SKIPE C ; + PUSHJ P,DECMAL ; + HLRZ C,(P) ; + ADDI C,60 ; + JRST TYPC ; + +DLST: TLNE F,NSW ;DIRECTORY WANTED? + JRST DXIT ;NO + TLNE F,FL6 ;6FMT? + JRST D6LST ;YES. +DLST1: SETZM TOTAL ;TOTAL FREE BLOCKS + MOVE 3,[XWD TOTAL,TOTAL+1] ;CLEAR THE ^D23 + BLT 3,TOTAL+^D22 ; WORD TABLE + MOVE 2,[POINT 5,DIRECT,4] ;POINT TO FIRST BLK SLOT + MOVEI 1,<7*^D83>-3 ;1102 SLOTS +DLST2: ILDB 3,2 ;PICK UP A FILE NUMBER + CAIG 3,^D22 ;SKIP IF BLK IS SPECIAL + AOS TOTAL(3) ;COUNT BLKS/FILE + SOJG 1,DLST2 ;LOOP + MOVEI BP,FREE ;FREE: + PUSHJ P,TYPEIT ; + MOVE C,TOTAL ;NUMBER OF FREE BLOCKS + PUSHJ P,DECMAL ; + MOVEI BP,BLKS ;-BLKS + PUSHJ P,TYPEIT ; + MOVEI C,^D22 ;26 FILES MAX + HRLZI AC1,-^D22 ; +DLST7: SKIPE DNAM(AC1) ; + SOS C ;DECREMENT MAX NO. OF BLKS + AOBJN AC1,DLST7 ; + PUSHJ P,DECMAL ; + MOVEI BP,FILES ; + PUSHJ P,TYPEIT ; + HRLZI 1,-^D22 ;LOOP 26 TIMES + + DLST3: HRLZI 3,161300 ;TERMINATOR + SKIPN 2,DNAM(1) ;FILE NAME + JRST DLST5 ; + MOVEI BP,2 ; + PUSHJ P,TYPEIT ; + HLLZ 2,DNAM+^D22(1) ;EXTENSION + HRRI 2,13 ; + MOVEI BP,2 ; + PUSHJ P,TYPEIT ; + MOVE C,TOTAL+1(1) ;NUMBER OF BLKS + PUSHJ P,DECMAL ; + MOVEI C," " ;SPACE + PUSHJ P,TYPC ; + PUSHJ P,DATE ;CREATION DATE + MOVEI BP,2 ; + HRRI 3,30000 ;"#" + PUSHJ P,TYPEIT ; +DLST5: AOBJN 1,DLST3 ;LOOP +DXIT: MOVEI C,^D15 ;15 SECONDS + JRST GDNITE ;TO SLEEP. + +D6LST: MOVEI 0,36 ;MAX NO. OF ENTRIES + HRRZ 1,DIRECT ;LOC OF FIRST DIR BLK +D6BEG: HRLI 3,130000 ;"-" TERMINATOR + MOVEI BP,2 ; + SKIPN 2,DIRECT(1) ;IS THERE A FILENAME? + JRST DXIT ;NORMAL EXIT + PUSHJ P,TYPEIT ;FILENAME + HLLZ 2,DIRECT+1(1) ;EXTENSION + SKIPN 2 ;IF NULL, + JRST D6FIN ;JUMP + MOVEI C," " ;OTHERWISE + PUSHJ P,TYPC ;TAB + HRRI 2,130000 ;"-" + MOVEI BP,2 ;TERM. + PUSHJ P,TYPEIT ; +D6FIN: PUSHJ P,TYPCL ;CR-LF + ADDI 1,4 ; + SOJG 0,D6BEG ;IN CASE + JRST DXIT ;DIR WAS FULL + +TYPEIT: HRLI BP,440600 ;BP=MESSAGE ADR +TYPLOP: ILDB C,BP ; + CAIN C,13 ;PLUS? + POPJ P, ;GET THE WHOLE MESSASE + CAIN C,3 ;#? + JRST TYPCL ;APPEND CR LF AND TYPE + ADDI C,40 ;ASCIZE IT + IDPB C,TOUT+1 ;TO THE BUFFER + JRST TYPLOP ;+LOOP + +TYPGET: ILDB C,TIN+1 ;GET CHAR + CAIE C," " ;SPACE? + CAIN C," " ;TAB? + JRST TYPGET ;FORGET IT + CAIGE C,141 ;LC "A" + POPJ P, + CAIG C,172 ;LC "Z" + SUBI C,40 ;LC TO UC + POPJ P, + +TYPCCL: IDPB C,TOUT+1 ;TYPE CHAR,CRLF +TYPCL: MOVEI C,15 ;TYPE CRLF + IDPB C,TOUT+1 + MOVEI C,12 +TYPC: IDPB C,TOUT+1 ;TYPE CHAR +TYPBUF: OUTPUT 17, ;DO IT + POPJ P, + + HELP: TTCALL 3,.+2 + JRST COCRET +ASCIZ % +/C COPY +/V VERIFY +/Z ZERO ALL BLOCKS +/L LOAD A BOOTSTRAP LOADER FROM PTR:BSLDR.REL +/T "TYPE CORE BANK OR OFFSET FOR BSLDR" + CORE-BANK = NNNK (16K TO 256K) + OFFSET = + WRITE A BSLDR ONTO BLOCKS 0,1 AND 2 +/N DONT TYPE A DIRECTORY +/6 PDP6 DIR +/G IGNORE ERRORS +NO SW'S IMPLY /C/V +% + ERRT1I: TLOA F,FLI ;INPUT ERROR +ERRT1O: TLZ F,FLI ;OUTPUT ERROR + STATUS 1,IOS ;STATUS TO IOS + TRNE IOS,360000 ;ALL THE ERRORS + JRST ERRCHK ;FOUND AN ERROR + POPJ P, + +ERRT2I: TLOA F,FLI ;INPUT ERROR +ERRT2O: TLZ F,FLI ;OUTPUT ERROR + STATUS 2,IOS ;FLAGS TO IOS + TRNN IOS,760000 ;PLUS WRITE LOCK + POPJ P, ;NO ERRORS + TLO F,FL2 ;IT'S A CHANNEL 2 ERROR + +ERRCHK: TRNE IOS,400000 + PUSHJ P,ERR400 ;WRITE LOCK + TRNE IOS,200000 + PUSHJ P,ERR200 ;DEVICE ERROR + TRNE IOS,100000 + PUSHJ P,ERR100 ;CKSUM/PARITY + TRNE IOS,040000 + PUSHJ P,ERR040 ;BLOCK TOO LARGE + TRNE IOS,020000 ;PREMATURE EOF,PDP9-DTA? + PUSHJ P,ERR020 ; + TRNN IOS,600000 ;THESE BITS IMPLY RESTART + TLNN F,FLG ;/G+PARITY ERR = CONTINUE + JRST ST ;RESTART + TRZ IOS,740000 ;ZERO IN + TLNN F,FL2 + SETSTS 1,(IOS) ;TURN OFF + TLZE F,FL2 + SETSTS 2,(IOS) ;AND + POPJ P, ;POP OUT + ERR400: MOVEI BP,MES400 + JRST TYPEIT +MES400: SIXBIT /?WRITE LOCK ERROR#/ +ERR200: PUSHJ P,ERRCOM + MOVEI BP,MES200 + JRST TYPEIT +MES200: SIXBIT / DEVICE ERROR#/ +ERR100: PUSHJ P,ERRCOM + MOVEI BP,MES100 + JRST TYPEIT +MES100: SIXBIT / CHECKSUM OR PARITY ERROR#/ +ERR040: PUSHJ P,ERRCOM + MOVEI BP,MES040 + JRST TYPEIT +MES040: SIXBIT / BLOCK TOO LARGE#/ +ERR020: PUSHJ P,ERRCOM + MOVEI BP,MES020 + JRST TYPEIT +MES020: SIXBIT / PREMATURE END OF FILE#/ +ERRCOM: MOVEI BP,SXBINP + TLNN F,FLI + MOVEI BP,SXBOUT + JRST TYPEIT +SXBINP: SIXBIT /?INPUT+/ +SXBOUT: SIXBIT /?OUTPUT+/ + ERRVER: MOVE T,[POINT 6,MESVER] + MOVE BP,[POINT 3,U,17] +ERRVE1: ILDB C,BP ;LOAD AN OCTAL NUMBER + ADDI C,20 ;6BITIZE IT + IDPB C,T ;INSERT IN MESS + TLNE T,770000 ;ONE WORD ONLY + JRST ERRVE1 ;LOOP 6 TIMES + MOVEI BP,MESVER + JRST TYPEIT +MESVER: SIXBIT /000000 VERIFICATION ERRORS#/ +ERRCMD: MOVEI BP,MESCMD + PUSHJ P,TYPEIT + JRST ST +MESCMD: SIXBIT /?COMMAND ERROR#/ +ERRSW: MOVEI BP,MESSW + PUSHJ P,TYPEIT + JRST ST +MESSW: SIXBIT /?SWITCH ERROR#/ +ERRIN1: SKIPA T,IDEV +ERRIN2: MOVE T,ODEV + TTCALL 3,[ASCIZ /?/] + MOVEM T,MESINI + MOVEI BP,MESINI + PUSHJ P,TYPEIT + JRST ST +MESINI: SIXBIT / INIT FAILURE#/ +ERRDT1: SKIPA T,IDEV +ERRDT2: MOVE T,ODEV + TTCALL 3,[ASCIZ /?/] + MOVEM T,MESDTA + MOVEI BP,MESDTA + PUSHJ P,TYPEIT + JRST ST +MESDTA: SIXBIT / MUST BE A DECTAPE#/ + ERRTNH: MOVEI BP,MESTNH + PUSHJ P,TYPEIT + JRST ST +MESTNH: SIXBIT %?BOOTSTRAP LOADER IS NOT IN COPY. TRY "/L".#% + PTERR1: TTCALL 3,[ASCIZ /?PTR INIT FAILURE +/] + JRST ST + +PTERR2: TTCALL 3,[ASCIZ /?LOOKUP FAILED, "BSLDR.REL" +/] + JRST ST + ;WRITE A BOOOTSTRAP LOADER IN BLOCKS 0,1 AND 2 +TENINT: PUSH P,JOBFF + SETSTS 2,134 ;SO I CAN WRITE IN BLK 0 + USETO 2,0 + OUTBUF 2,1 + OUTPUT 2, ;DUMMY! + + MOVE AC0,[POINT 36,BSBUF] + MOVEM AC0,BSPTR ;WHERE THE LOADER IS KEPT + HRRZ AC0,JOBFF ; + HRLI AC0,(POINT 36,) + MOVEM AC0,FFPTR ;WHERE ITS WRITTEN FROM + + ILDB W,BSPTR ;IOWD + MOVE CNT,OFFSET ; + HRRI W,-1(CNT) ;FINISH THE IOWD + IDPB W,FFPTR ; + +TEN1: PUSHJ P,NBLK ;GET THE NEXT BLOCK, SKIPE XIT IS NORMAL + JRST RELDA5 ;TERMINATE THE BSLDR + TRNN CNT,-1 ;EMPTY? + JRST TEN1 ;YES + ILDB OS,BSPTR ;OFFSET FOR THIS BLK + LSH RB,2 ;OS'S RELBITS + AOBJN CNT,.+1 ;ACCOUNT FOR IT +RELDAT: TRNN CNT,-1 ;ANY MORE DATA? + JRST TEN1 ;NO + ILDB W,BSPTR ;PROGRAM WORD + JUMPGE RB,RELDA1 ;CHECK LEFT HALF + HRLZ I,OFFSET ; + ADD W,I ;RELOCATE IT + +RELDA1: TLNE RB,200000 ;CHECK RIGHT HALF + HRRI W,@OFFSET ;RELOCATE IT + IDPB W,FFPTR ; + LSH RB,2 ;NEXT RELOCATION BITS + AOBJN CNT,RELDAT ;NEXT WORD + TRNE CNT,-1 ; + PUSHJ P,NSEC ;NEXT SECTION OF BLOCK + JRST RELDAT ; + + NBLK: ILDB CNT,BSPTR ;GET THE BLOCK WRD CNT + SKIPL CNT ; + AOS (P) ;SKIP EXIT IS NORMAL + MOVN CNT,CNT ; +NSEC: ILDB RB,BSPTR ;RELOCATION BITS + HRLI CNT,-22 ;WRDS/SECTION + POPJ P, + +RELDA5: MOVE W,SASAV ;THIS JRST IS EXECUTED + HRR W,OFFSET(W) ;RELOCATE THE SA ADR + IDPB W,FFPTR ;THE LAST WORD + HRLZ BP,JOBFF ;BEG OF BSLDR + HRR BP,OUT2+1 ;BLT PTR + MOVEM BP,C ;SAVE IT + BLT BP,177(C) ;ZAP 1 + OUTPUT 2, ;BLK 0 + ADD C,[XWD 200,0] + MOVEM C,BP ;2ND PTR SAVED + BLT BP,177(C) ;ZAP 2 + USETO 2,1 + OUTPUT 2, ;BLK 1 + ADD C,[XWD 200,0] + MOVEM C,BP + BLT BP,177(C) + USETO 2,2 + OUTPUT 2, + PUSHJ P,ERRT2O ;ERRORS? + POP P,JOBFF + POPJ P, + COPZRO: PUSH P,JOBFF ;SAVE JOBFF + TLNE F,FLC ;SKIP IO TO UNASSIGNED CHAN. + SETSTS 1,134 ; + SETSTS 2,134 ; + OUTBUF 2,1 ;WITH ONE BUFFER MODE-134 + USETO 2,0 ;FOR BLOCK ZERO + OUTPUT 2, ;DUMMY + TLNN F,FLC ;COPY + JRST COPBKZ ;NO, MUST BE ZERO + INBUF 1,1 ;ONE BUFFER MODE-134 + USETI 1,0 ;BLOCK ZERO + INPUT 1, ;GET IT + PUSHJ P,ERRT1I ;OK? + MOVEI T,177 ;LOOP LENGTH + LDB C,IN1+1 ;FIRST WORD + DPB C,OUT2+1 ;TO THE BUFFER +COPLPZ: ILDB C,IN1+1 ;OTHER WORDS + IDPB C,OUT2+1 ;TO THE BUFFER + SOJG T,COPLPZ ;TO LOOP + SETSTS 1,136 ;INPUT DEVICE + USETI 1,1 ;SIX FORMATTED DIRECTORY + INPUT 1,DIRWRD ;GET IT +COPBKZ: OUTPUT 2, ;DUMP THE BUFFER + POP P,JOBFF ;FOR VERIFY? + PUSHJ P,ERRT2O ;OK? + SETSTS 2,136 ;DUMP MODE + MOVE U,JOBREL ;UPPER LIMIT + MOVE T,BLTWRD ;FROM,TO + SETZM @ZROWRD ;START + BLT T, (U) ;ZAP + MOVEI LOC,1 ;START AT BLOCK ONE +COPSET: TLNE F,FLC ;SKIP + USETI 1,(LOC) ;IO 2 UNASGND CH + USETO 2,(LOC) ;SET THE BLOCK NO. + ADD LOC,INC ;ADD THE INCREMENT + CAILE LOC,1102 ;WILL IT FIT? + JRST COPFIN ;NO + PUSHJ P,COPYIT ;ONE BUFFER + JRST COPSET ;AND LOOP +COPFIN: MOVEI T,-1102(LOC) ;N BLOCKS WON'T FIT + IMULI T,200 ;N WORDS WON'T FIT + MOVSS T ;GET ORGANIZED + ADDM T,LISTC ;SUB N WORDS FROM LIST + SKIPL LISTC ;IF LH OF IOWD = 0, + POPJ P, ;EXIT +COPYIT: TLNN F,FLC ;COPY? + JRST COPOUT ;ZERO! + INPUT 1,LISTC ;COPY! + PUSHJ P,ERRT1I ;OK? + CAILE LOC,144 ;SKIP IF NO CHANCE + PUSHJ P,DSAV ;TRY FOR A DIRECTORY +COPOUT: OUTPUT 2,LISTC ;COPY AND ZERO + JRST ERRT2O ;OK? + VERZRO: PUSH P,JOBFF + SETZB VZ1,VZ2 ;CMDLST TERMINATOR + SETSTS 1,134 ;SET + SETSTS 2,134 ;IB MODE + USETI 1,0 ;AND + USETI 2,0 ;BLOCK 0 + INBUF 1,1 ;WITH + INBUF 2,1 ;ONE BUFFER EA + INPUT 1, ;GET A BLOCK + PUSHJ P,ERRT1I ;OK + INPUT 2, ;GET ANOTHER + PUSHJ P,ERRT2I ;OK + HRRZ V1,IN1 ;DUMMY + HRRZ V2,IN2 ;IOWD + HRLI V1,-200 ;FOR VERIFY LOOP + POP P,JOBFF ;RECLAIM BUFFERS + PUSHJ P,VERIFY ;VERIFY AND EXIT THIS PAGE +VERONE: SETSTS 1,136 ;SET + SETSTS 2,136 ;DUMP MODE + MOVEI LOC,1 ;START AT BLOCK 1 +VERSET: MOVE V1,LISTV1 ;IOWDS + MOVE V2,LISTV2 ;TO ACS + USETI 1,(LOC) ;MASTER + USETI 2,(LOC) ;AND COPY + ADD LOC,INCV ;ADD IN THE INCREMENT + CAILE LOC,1102 ;AM I ASKING TOO MUCH? + JRST VERFIN ;YEP + PUSHJ P,VERIN ;COUPLE OF INPUTS AND VERIFY + JRST VERSET + +VERFIN: SUBI LOC,1102 ;HOW MUCH TOO MUCH? + IMULI LOC,200 ;IN WORDS PLEASE + MOVSS LOC ;BACKWARDS + ADD V1,LOC ;SUB WORDS FROM LIST + ADD V2,LOC ;I.E. ASK FOR LESS + SKIPL V1 ;IF LH OF IOWD = 0, + POPJ P, ;EXIT + +VERIN: INPUT 1,V1 ;ONE FOR THE MASTER + PUSHJ P,ERRT1I ;OK? + INPUT 2,V2 ;ONE FOR THE COPY + PUSHJ P,ERRT2I ;OK? + +VERIFY: SETZ U, ;CLR THE ERROR CNT + MOVE T,1(V1) ;MASTER WORD + CAME T,1(V2) ;SAME AS COPY WORD? + AOS U ;NO, COUNT THE ERRORS + AOS V2 ;PLUS ONE + AOBJN V1,VERIFY+1 ;BOTH HALVES AND LOOP + JUMPN U,ERRVER ;ERROR MESS IF APPROPIATE + POPJ P, ;UNLESS V1 IS POSITIVE + INIT: INIT 2,(T) +ODEV: Z + XWD OUT2,IN2 + JRST ERRIN2 + MOVE BP,ODEV ;MAKE SURE ITS A DTA. + CALLI BP,4 + TLNN BP,100 + JRST ERRDT2 ;ERROR, ITS NOT A DTA + SKIPN BP,IDEV ;IF NULL + POPJ P, ;NO INPUT DEV REQUIRED + CAMN BP,ODEV ;SAME DEVICES? + JRST INITER ;YEPER + INIT 1,(T) +IDEV: Z + XWD 0,IN1 + JRST ERRIN1 + MOVE BP,IDEV ;MAKE SURE ITS A DTA + CALLI BP,4 + TLNN BP,100 + JRST ERRDT1 ;ERROR + POPJ P, + +INITER: TTCALL 3,[ASCIZ /INPUT AND OUTPUT DEC-TAPES MAY NOT BE THE SAME DEVICE. +/] + JRST ST + ; LOAD A BOOTSTRAP LOADER, + +I=1 ;PTR TO BSBUF +W=2 ;WORD OF TENDMP.REL +CNT=3 ;# OF WORDS IN CURRENT BLOCK +TYPE=4 ;TYPE OF BLOCK +OS=4 ;OFFSET +RB=5 ;RELOCATION BITS + +FFPTR: BLOCK 1 ;BYTEPTR TO RELOCATED BSLDR +BSPTR: BLOCK 1 ;BYTPTR TO UNRLCTD BSLDR +OFFSET: BLOCK 1 ;THE OFFSET +RELBTS: BLOCK 1 ;RELOCATION BITS +SASAV: BLOCK 1 ;STARTING ADDRESS +PNAME: BLOCK 1 ;PROGRAM NAME + SIXBIT /#/ ;# = "CRLF" + + +BSLDR: MOVE AC0,[SIXBIT /BSLDR/] ;LOOKUP BLOCK + HRLZI AC1,(SIXBIT /REL/) + SETZB AC2,AC3 ; + INIT 16,13 ;IMAGE-BINARY + SIXBIT /PTR/ ; + EXP PTRBUF ; + JRST PTERR1 ;INIT FAILURE ERROR + INBUF 16,1 ;ONE BUFFER + LOOKUP 16, ;BSLDR.REL + JRST PTERR2 ;LOOKUP FAILURE + MOVEI I,BSBUF ;PP PTR FOR BOOTSTRAP-LOADER-BUF + +NEWBLK: PUSHJ P,GETWRD ;GET ONE WORD FROM PTR FILE + HLRZM W,TYPE ;SAVE BLOCK-TYPE + HRRZM W,CNT ;SAVE WRD-COUNT FOR THIS BLK + CAIN TYPE,1 ; + PUSH I,W ;SAVE BLOCK HDR-WRD + PUSHJ P,GETWRD ; + MOVEM W,RELBTS ;SAVE RELOCATION-BITS + CAIN TYPE,1 ;BLKTYP=1? + PUSH I,W ;YEP, SAVE THE BITS + CAIG TYPE,7 ;ILL-BLK-TYP? + JRST @TYPTAB(TYPE) ;NO, OFF TO BLOCK HANDLER + +TTCALL 3,[ASCIZ /?ILLEGAL BLOCK TPYE +/] + JRST ST ; + + TYPTAB: Z BLK0 + Z BLK1 + Z BLK2 + Z BLK3 + Z BLK4 + Z BLK5 + Z BLK6 + Z BLK7 + +GETWRD: SOSG PTRBUF+2 ;EMPTY BUF? + PUSHJ P,GETBUF ;GET A BUFFER + ILDB W,PTRBUF+1 ; + POPJ P, + +GETBUF: IN 16, ;GET BUFFER + POPJ P, + STATZ 16,20000 ;EOF? + TTCALL 3,[ASCIZ /?NO END BLOCK ENCOUNTERED +/] + STATZ 16,74000 ;ERRORS? + TTCALL 3,[ASCIZ /?DATA ERROR ON DEVICE PTR +/] + JRST ST + ;THIS IS NOT A BLOCK, IGNORE IT +BLK0: JUMPE CNT,NEWBLK ; + PUSHJ P,GETWRD ;PASS A WRD + SOJA CNT,BLK0 ; + + ;THIS IS THE PROGRAM +BLK1: MOVN CNT,CNT ;TOTAL NUMBER OF WRDS THIS BLK +BLK1A: HRLI CNT,-22 ;MAX NUMBER PER SECTION +BLK1B: TRNN CNT,-1 ;ANY MORE WRDS? + JRST NEWBLK ;NO + PUSHJ P,GETWRD ; + PUSH I,W ;SAVE IN BSBUF + AOBJN CNT,BLK1B ;ANY MORE WRDS THIS SECTION? + TRNN CNT,-1 ;NO, ...THIS BLK? + JRST NEWBLK ;NO + PUSHJ P,GETWRD ;GET THE REL-BITS FOR NXT SECT + PUSH I,W ;SAVEM + JRST BLK1A ; + + ;THIS IS THE SYMBOL TABLE +BLK2: MOVN CNT,CNT ; +BLK2A: HRLI CNT,-22 ; +BLK2B: TRNN CNT,-1 ; + JRST NEWBLK ; + PUSHJ P,GETWRD ; + TLNE W,200000 ; + JUMPL W,BLK2ER ;ERROR - ITSA EXTERNAL SYMBOL + AOBJN CNT,.+1 ;IGNORE THE VALUE + PUSHJ P,GETWRD ; + AOBJN CNT,BLK2B ; + TRNN CNT,-1 ; + JRST NEWBLK ; + JRST BLK2A +BLK2ER: TTCALL 3,[ASCIZ /?CANNOT PROCESS EXTERNAL SYMBOLS +/] + JRST ST + + ;HIGHSEG FLAG, GIVE ERROR EXIT +BLK3: TTCALL 3,[ASCIZ /?CANNOT PROCESS HIGH-SEG'S +/] + JRST ST + + ;ENTRY BLOCK, IGNORE THIS BLOCK +BLK4: MOVN CNT,CNT ; +BLK4A: HRLI CNT,-22 ; + TRNN CNT,-1 ; + JRST NEWBLK ; + PUSHJ P,GETWRD ; + AOBJN CNT,BLK4A+1 ;PASS/IGNORE + TRNN CNT,-1 ; + JRST NEWBLK ; + PUSHJ P,GETWRD ; + JRST BLK4A ; + + ;THIS IS LAST BLK, MUST BE SEEN, ALSO IS PROG-BREAK +BLK5: PUSHJ P,GETWRD ; + MOVNI AC0,1(W) ; + HRLM AC0,BSBUF ;START THE IOWD + CAILE W,600 ;MUST FIT IN LESS-THAN 4 BLKS + JRST BLK5ER ;ERROR IF'E CAN'T + TLO W,400000 ;NOTE THE END + PUSH I,W ; + HRLZI LFL ;NOTE BSLDR IS IN "COPY" + IORM FSAVE ;SAVE IT + TLO F,LFL ; + CLOSE 16, ; + JRST COCRET ;THE ONLY WAY OUT +BLK5ER: TTCALL 3,[ASCIZ /?BOOTSTRAP LOADER WILL NOT FIT IN 3 BLOCKS +/] + JRST ST + + ;PROG-NAME IN RADIX50 +BLK6: PUSHJ P,GETWRD ; + PUSHJ P,UNWIND ;CONVRT RX50 TO 6BIT PROG-NAME + SOJA CNT,BLK4 ;I.E. IGNORE REST OF THIS BLK + +UNWIND: MOVE AC4,[POINT 6,PNAME] + SETZM PNAME + MOVEM W,AC5 ; + HRROI AC0,-6 ;6 CHARS + TLZ W,740000 ;CLEAR THE CODE BITS +UNW1: IDIVI AC5,50 ; + HRLM AC6,(P) ;SAVE REMAINDER + AOJGE AC0,UNW2 ;LOOP + PUSHJ P,UNW1 ;LOOP +UNW2: HLRZ AC6,(P) ;PICK OFF THE REMAINDER + DECODE IT + JUMPE AC6,UNW3 ;DONE + ADDI AC6,20-1 + CAILE AC6,31 + ADDI AC6,41-32 + CAILE AC6,72 + SUBI AC6,74-4 + CAIN AC6,3 + MOVEI AC6,16 + + IDPB AC6,AC4 +UNW3: POPJ P, + + ;STARTING ADR. +BLK7: PUSHJ P,GETWRD ; + HRLI W,(JRST) ;JUMP TO THE STARTING ADDRESS + MOVEM W,SASAV ;SAVE STARTING ADDRESS + SOJA CNT,BLK4 ;IGNORE REST OF BLK + + BLTWRD: XWD END.,END.+1 ;ZRO FROM,TO +ZROWRD: EXP END. ;START +FSAVE: XWD FLP,0 ;MODIFIED WHEN BSLDR IS LOADED +LISTC: IOWD 0,END. + Z +LISTV1: IOWD 0,END. +LISTV2: IOWD 0,END. +INC: BLOCK 1 +INCV: BLOCK 1 +DIRECT: BLOCK 123 +DNAM: BLOCK 55 +TOTAL: BLOCK 26 ;BLOCK TABLE +DIRWRD: IOWD 200,DIRECT + Z +REWIND: IOWD 1,PTRBUF + Z +TTYIN: BLOCK 23+20 +TTYOUT: BLOCK 23 +IN1: BLOCK 3 +IN2: BLOCK 3 +OUT2: BLOCK 3 +TIN: BLOCK 3 +TOUT: BLOCK 3 +PTRBUF: BLOCK 3 +BSBUF: BLOCK 720 ;ENUF FOR 3BLOCKS PLUS HDR WRDS + VAR + LIT +END.: END ST ;;22-JUN + diff --git a/src/dtser2.mac b/src/dtser2.mac index 7264fb4..233dd8e 100644 --- a/src/dtser2.mac +++ b/src/dtser2.mac @@ -684,7 +684,7 @@ DMPRD0: CAILE TAC, 0 ; @@ -3199,6 +3199,8 @@ INMTA1: BLOCK 1 MTANAM: BLOCK 2 MATCH: BLOCK 2 ;NAME AND EXT FOR /L OR (RX) RENSN: BLOCK 1 ;-1 IF RENAME MESSAGE SEEN +DTBLK: BLOCK 1 ; OPEN DTA DIRECTORY BLOCK +DTDEV: BLOCK 2 ; SIXBIT /DTAN/ SUBTTL RIM LOADER IFE RIMSW,< @@ -4035,8 +4037,6 @@ LIN: BLOCK 1 ;COUNT FOR DSK DIR LIST UFDIN: BLOCK 3 ;HEADER FOR READING DISK DIRECTORY UFD: BLOCK 4 ;[P,P] OR *FD* ;UFD OR SYS -DTBLK: BLOCK 1 ; OPEN DTA DIRECTORY BLOCK -DTDEV: BLOCK 2 ; SIXBIT /DTAN/ IFN DISK30,< BLKHD: BLOCK 3 ;HEADER FOR READING BLOCKS OFF 10/30 DISK MASK: BLOCK 1 ;PROJ,PROG # 10/30 DISK> diff --git a/src/s.mac b/src/s.mac index 5649e63..a242144 100644 --- a/src/s.mac +++ b/src/s.mac @@ -1,5 +1,8 @@ XLIST + + + DEFINE XP(A,B) ;SYSTEM PARAMETER + LIST diff --git a/src/tendmp.mac b/src/tendmp.mac index 7c17154..8110991 100644 --- a/src/tendmp.mac +++ b/src/tendmp.mac @@ -1,23 +1,13 @@ TITLE TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 IFNDEF REL, ;0 PAPER TAPE, 1 RELOCATABLE BINARY - IFNDEF MAGT, ;0 DTAPE, 1 MTAPE - IFN MAGT,< -; MAGTAPE UTILITY ROUTINE - COURTSEY DATALINE SYSTEMS J HANCOCK - > - IFNDEF MODE, ;0 IS TD10, 1 IS 551/136 IFNDEF CORE, ;NUMBER OF 8K MEMORY BLOCKS - IFE MODE, - IFN MODE, + SUBTTL 551/136 VERSION -IFE REL,< -IFE MAGT, -IFN MAGT,> +IFE REL, UTC=210 UTS=214 DC=200 - DTC=320 - DTS=324 F=0 ;MUST BE 0. USED BY JRA'S A=2 ;MISC TEMP. HOLDS 136 CONO INDEX IN UWAIT @@ -46,9 +36,7 @@ COMPTR=BEGR+377 ;COMMAND POINTER, IF SUPPLIED FOOF=BEGR-202 ;NEEDED FOR ZERO CORE SEARCH, ZEROED AT BEG1 TAB=BEGR-201 ;FILE DIRECTORY LINK=BEGR-1 ;0-17=LINK, 18-27=FBN, 29-35=WC -IFE REL,*20000>> - IFN MAGT,*20000> - IOWD LAST-BEGR+1,BEGR>> +IFE REL,*20000>> ;INITIAL ENTRY IS AT BEGR, UNLESS A COMMAND POINTER IS ;SUPPLIED IN COMPTR. IN THAT CASE, ENTRY IS AT BEGR+1 @@ -71,8 +59,7 @@ TYI: SETZB C,HIGH ;HOPEFULLY HIGH IS TEMPORARY SPACE: MOVEI E,C-1 ;EXTENSION INTO C HRLI E,20600 ;FAKE OUT END TEST OF BYTE PTR ;STOP TAPE DRIVE -IFN MODE, -IFE MODE, + CONO UTC,0 NEXT: ILDB A,@BEGR ;GIVES A 0 UNLESS COMMAND POINTER SUPPLIED ;RH OF NEXT IS USED AS A CONSTANT BELL: SETOI FILN,207 ;INITIALIZATION FOR SEARCH @@ -102,8 +89,7 @@ NEXT1: TLNE E,770000 ;NO MORE THAN SIX CHARS ;HERE ON JUMP BLOCK DURING LOADS, OR NUMBER>7 ALT JBLK: ;STOP TAPE DRIVE -IFN MODE, -IFE MODE, + CONO UTC,0 HRRM D,SADR ;SAVE STARTING ADDRESS JUMPN CH,BEG ;IF NOT LOADGO COMMAND SADR: JRST BEG ;CURRENT S.A. @@ -155,7 +141,6 @@ FREE: MOVEI FILN,. ;DUMP & NOT FOUND, MAKE ENTRY WHERE FREE BEG69: MOVEI FILN,1(FILN) ;FILN IS FILE #+1; CLR LH JUMPL WRITE,LOADS ;ALL LOAD INSTRUCTIONS -IFE MAGT,< SKIPN WRITE ;DELETE? (K COMMAND) SETZB B,C ;YES, KILL FILE MOVEM B,TAB+122(FILN) ;CLEAR IF DELE, ENTER IF NEW DUMP @@ -202,46 +187,6 @@ DMP2: MOVEI D,SPNT-1 ;SET UP TO FOLLOW THE HEADERS. DMP3: MOVE D,1(D) ;GET HEADER JUMPGE D,THRU ;IF NULL HEADER FOUND MOVEI Q,DMP3 ;Q:= DMP3 AS A RETURN AFTER AOBJN - > - -IFN MAGT,< - JRST ERR ;HOW DID WE GET HERE? DLS*** -;DUMP WRITES OUT CORE ONTO MAGNETIC TAPE -;DUMP WRITES OUT A CORE IMAGE ON MAGNETIC TAPE WITHOUT -;ZERO COMPRESSION. THE RECORDS ARE 200(OCTAL) WORDS IN LENGTH -;AND BEGIN WITH WORD ZERO. BEFORE STARTING THE TAPE IS REWOUND. -;IT ASSUMES MTA0, AT LEAST FOR NOW. - - MTC= 340 - MTS= 344 -DUMP: CONO MTC,1000 ;REWIND - CONSO MTS,300000 ;WAIT FOR BOT OR REWINDING - JRST .-1 - CONSO MTS,40 ;TRANSPORT READY? - JRST .-1 - SETZ A, -DUMP1: HRLI A,-200 ;WORDS PER BLOCK - CONO MTC,64100 ;START WRITE OPERATION -DUMP2: CONSO MTS,1 ;TD10 READY FOR DATA? - JRST .-1 - DATAO MTC,(A) ;SEND OUT DATA - AOBJN A,DUMP2 ;POINT TO NEXT WORD AND LOOP - CONO MTS,1 ;STOP THE DRIVE - CONSO MTS,100 ;WAIT TILL STOPPED - JRST .-1 - CONSZ MTS,464610 ;ANY ERRORS? - JRST ERR ;YES, GO RING BELL - AOSE [-CORE*20000/200+2] ;ALL CORE DUMPED? - JRST DUMP1 ;NO - CONO MTC,65100 ;WRITE END OF FILE - CONSO MTS,100 ;DONE? - JRST .-1 - CONO MTC,65100 - CONSO MTS,100 - JRST .-1 - JRST BEGR ;ALL DONE - > - LODUMP: JSP P,UWAIT JFCL D ;IN/OUTPUT HEADER @@ -254,7 +199,6 @@ DMP5: JSP P,UWAIT THRU: JSP P,UWAIT ;WRITE OUT JRST BLOCK JFCL SADR ;FROM LOC SADR -IFE MODE,< AOJL E,UWAIT1 ;FILL OUT BLOCK, TO GET CKSM OUT> TRZA WRITE,-1 ;THEN SET WRITE TO 0, AND GO CLOBBER ;ANY FURTHER BLOCKS WITH THIS FILN UWAIT: AOJL E,UWAIT1 ;RETURN ADDR = (P) DATA ADDR = @(P) @@ -292,27 +236,7 @@ MNLUP1: DPB B,PNTR ;FOR DELETE, 0 FILE NAME AND NUMBER RBLK: HRRO C,TAPENO ;CURRENT TAPE NO. ;SET LH TO PREPARE FOR JUMPN IN DELE -IFE MODE,< - TRO B,-1 ;ENSURE GOING FORWARD WHEN FIRST SEARCH - CONSO DTC,300000 ;IS A DIRECTION ASSERTED? - TRO C,210000 ;NO. GO FORWARD -RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND - TRO C,300000 ;TURN AROUND -RBG: CONO DTC,20200(C) ;ISSUE THE COMMAND TO TD10. - ;200=SEARCH, 300=READ, 700=WRITE. -UWAIT1: CONSZ DTS,672700 ;ANY ERRORS? - JRST ERR ;YES. GO DING AND THEN TYI - CONSO DTS,1 ;DATA READY? - JRST .-3 ;NO. GO WAIT SOME MORE - JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH - DATAI DTC,B ;NO. SEARCHING. GET BLOCK NO. - TRZ C,310000 ;CLOBBER DIRECTION BITS IN CONO - SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK - CONSZ DTC,100000 ;COMPLEMENT DECISION IF GOING REVERSE - TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. -> -IFN MODE,< SETOB A,B ;GO FORWARD, SET DC FOR SEARCH CONSZ UTS,40 ;IS CHECKSUM BEING WRITTEN? JRST .-1 ;WAIT @@ -333,14 +257,13 @@ UWAIT1: CONSZ UTS,6 ;ANY ERRORS? SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK TRNE C,10000 ;COMPLEMENT IF GOING REVERSE TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. -> JUMPN B,RB1 ;JUMP IF NOT GOING FORWARD INTO (BLKNO) MOVNI E,200 ;WORDS PER BLOCK MOVEM P,F ;SAVE RETURN IN AC0 TRO C,100 ;READ COMMAND, MAYBE JUMPLE WRITE,RB2 ;JUMP IF READ TRO C,400 ;CHANGE TO WRITE COMMAND -IFN MODE, + MOVNI A,401 ;SET 136 TO OUTPUT JUMPG CT,.+3 HRRZS LINK ;IF LAST BLK, KILL LINK DPB E,PNTR ;AND THE DIR BYTE ? 0 @@ -351,39 +274,18 @@ RB2: CAIE BLKNO,^D100 ;IF NOT DIRECTORY BLOCK JRA P,UWAIT1 ;RESTORE CALLER ADR ;AND PROCESS DATA WORDS -IFE MODE,< - DATAI DTC,@(P) ;READ COMMANDS. GET WORD TO CORE -INOUT: JRST UWAIT2 ;INOUT-1 TO INOUT +1 ARE DISPATCHED TO. - DATAO DTC,@(P) ;OUTPUT TO TAPE -UWAIT2: AOJN E,UWAIT3 ;WAS THAT THE LAST WORD IN THE DT BLOCK? - CONO DTS,1 ;YES. GIVE FUNCTION STOP TO TD10 - CONSO DTS,100000 ;AND WAIT FOR CHECKSUM TO BE DONE - JRST .-1 ;NOT YET. WAIT -UWAIT3: SOJA E,0(P) ;DONE. COMPENSATE FOR THE AOJN ABOVE, AND - ;RETURN TO CALLER OF UWAIT OR RBLK -> -IFN MODE,< DATAI DC,@(P) ;READ COMMANDS. GET WORD TO CORE INOUT: JRST UWAIT2 ;INOUT-1 THRU INOUT+1 ARE DISPATCHED TO. DATAO DC,@(P) ;OUTPUT TO TAPE UWAIT2: JRST 0(P) ;RETURN TO CALLER OF UWAIT OR RBLK. -> ALTMD: MOVEI A,"$" JSP P,TYO ;ALTMODE IS PRINTED AS "$" -IFE MAGT,< CAIE CH,"K"-40 ;FOR K, WRITE := 0 CAIN CH,"D"-40 ;FOR D, WRITE :=1 AOJLE WRITE,.-1 ;COUNT (WRITE) - > - -IFN MAGT,< - CAIN CH,"D"-40 ;FOR D, WRITE :=1 - AOJLE WRITE,.-1 ;COUNT (WRITE) - JUMPG WRITE,DUMP ;D MEANS GO DUMP ON MAG TAPE - > CAIN CH,"G"-40 ;GO TO PROGRAM? JRST @SADR ;YES. JUMP OUT @@ -399,8 +301,7 @@ IFN MAGT,< CAILE F,7 ;SKIP IF ONE DIGIT JRA D,JBLK ;D:=SADR. DISPATCH TO JBLK WHICH SAVES SADR. OPNTP: ;SHIFT UNIT NUMBER LEFT FOR CONO -IFE MODE, -IFN MODE, + LSH F,3 HRRM F,TAPENO ;SAVE IN CORE CLSTP: MOVEI BLKNO,^D100 ;BLK NO OF FILE DIR SETZI PNTR,0 ;DONT CLOBBER DIRECTORY BYTE @@ -446,15 +347,6 @@ SPNT: 0 ;POINTER TO HEADERS IN CORE. LIT -IFN MAGT,< -SLOP: MOVE .+3 - MOVEM COMPTR - JRST BEGR+1 - XWD 440700,.+1 - BYTE (7) "0",33,177 -LAST: JRST SLOP - > -IFE MAGT,< SLOP=COMPTR-17-. ;THIS MANY WORDS BEFORE RESERVED AREA ;FOR COMMAND STRINGS. ;!!!!! NOTE: ABOVE PARAMETER MUST COME OUT POSITIVE IN @@ -463,7 +355,6 @@ IFE MAGT,< ; THIS MEANS ANY CODE ADDED MUST BE COMPENSATED FOR BY ; A CORRESPONDING TIGHTENING SOMEWHERE. GOOD LUCK. ; TENDMP IS VERY TIGHT ALREADY. - > END BEGR