From: Richard Cornwell Date: Thu, 15 Feb 2018 16:01:26 +0000 (-0500) Subject: Fixed some typos and added COPY and DTBOOT. X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/commitdiff_plain/bb920f47d2b4fd2ac0c46c72df890dfe6931e943 Fixed some typos and added COPY and DTBOOT. --- diff --git a/src/clkcss.mac b/src/clkcss.mac index 963ddd4..2ccc5ac 100644 --- a/src/clkcss.mac +++ b/src/clkcss.mac @@ -7,7 +7,6 @@ XP VOLKCS,001 ;CALLED EVERY 60TH OF A SECOND WHEN CURRENT JOB IS USER MODE ;CALLED WHEN CURRENT JOB IS IN EXEC MODE AND: ; 1. JUST STARTED TO WAIT FOR IO - ; 2. JUST STARTED TO WAIT FOR A BUSY SHARABLE DEVICE ; 3. RETURNING TO USER AFTER TYPING CONTROL C ; 4. RETURNING TO USER AFTER CLOCK TRIED TO INTERRUPT diff --git a/src/clock1.mac b/src/clock1.mac index 7c7bcdf..997a4a6 100644 --- a/src/clock1.mac +++ b/src/clock1.mac @@ -66,7 +66,7 @@ APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? CONO PI,REQCLK ;REQUEST INTERRUPT ON CLK CHANNEL CONSZ APR,@APRIN1 ;IS USER ENABLE FOR ANY FLAGS(INCLUDING CLOCK) ; RH ALSO MODIFIED EACH TIME A USER RUNS - JRST APRER ;YES, GO PROCESS TRAP + JRST APRER1 ;YES, GO PROCESS TRAP CONO APR,1000+APRCHN ;NO, CLEAR ONLY THE CLOCK FLAG JEN @APRCHL ;DISMISS INTERRUPT @@ -96,7 +96,6 @@ APRER4: EXCH JDAT,JOBDAT ;YES, SAVE JDAT, GET CURRENT JOB DATA AREA ADR. EXCH JDAT,JOBDAT ;RESTORE JDAT,JOBDAT CONO APR,440+APRCHN ;DISBALE FOV, AROVF IN CASE ON ;SO USER MUST REENABLE WITH SETAPR UUO - APRER3: TLZ TAC,440000 ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS ; SO INTERRUPT MAY BE DISMISSED EXCH TAC,APRCHL ;RESTORE TAC & APRCHL @@ -141,7 +140,6 @@ IFN FTHALT,< ;THEN CALLS SCHEDULER ;IF THE CURRENT JOB IS IN EXEC MODE THE ABOVE 4 TASKS ARE ;DELAYED UNTIL THE CURRENT JOB ENTERS A STOPPABLE STATE: I.E., UNTIL - ; 1. JOB STARTS TO WAIT FOR A BUSY SHARABLE DEVICE ; 2. JOB STARTS TO WAIT FOR A IO TO COMPLETE ; 3. CONTROL ABOUT TO RETURN TO USER MODE @@ -184,8 +182,8 @@ WSCHED: POP PDP,USRPC ;SAVE PC IN PROTECTED PART OF SYSTEM DATA MOVEI AC3,JOBDAC(JDAT) ;SAVE ACS 0-16 IN DUMP ACS BLT AC3,JOBD16(JDAT) ;IN CURRENT JOB DATA AREA MOVEI PDP,NULPDL ;NULL JOB PD LIST - HRLI PDP,MJOBP1 ; OTHERWISE GET PD OUF - + HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODE + ; OTHERWISE GET PD OUF JRST RSCHED ;GO RESCHEDULE ;HERE AT UUO LEVEL WHEN CURRENT JOB RETURNS TO USER MODE @@ -223,7 +221,6 @@ CLKINT: SKIPN CLKFLG ;CLK INTERRUPT REQUEST? JEN @CLKCHL SAVPC: MOVEM 17,USRPC ;SAVE PC IN PROTECTED PART OF SYSTEM DATA - ; STORAGE FOR CURRENT JOB CLKERR: SKIPN 17,JOBDAT ;CURRENT JOB DATA AREA, IS THERE ONE? MOVEI 17,NULDAT ;NO, MUST BE NULL JOB OR CORE 0 @@ -330,7 +327,8 @@ EXTERNAL JOB,JOBDAT,JOBPRT,USRPRT,USRHCU,JOBJDA ; SINCE IT DOES IO INTO AND OUT OF ; CHANNEL LOCATIONS (JOBJDA+1..,JOBJDA+17), ADD JA,T1 ;RELOCATE TO USER AREA - BLT T,JOBJDA(JA) ; STOP WITH USER CHANNEL 0-1+C(USRHCU) + BLT T,JOBJDA(JA) ;MOVE TO USER JOB DATA AREA + ; STOP WITH USER CHANNEL 0-1+C(USRHCU) ;RESTORE SOFTWARE STATE OF NEW JOB,THEN HARDWARE STATE INTERNAL NULJOB,NULADR @@ -350,7 +348,6 @@ IFN FTHALT,< MOVEI T,USRPRT ;NO, DEST,#PROTECTED AREA IN MONITOR HRLI T,JOBPRT(JA) ;SOURCE#FIRST PROTECT LOC. IN JB DATA AREA SKIPL T1,JOBHCU(JA) ;MOVE NO. OF USER IO CHAN. IN USE - CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT CLOBBER ; IF ADRRESS CHECKING MISSES MOVEI T1,0 ;MOVEJUST CHAN 0 IF NEG. OR GREATER THAN 17 @@ -509,6 +506,7 @@ KSTOP: MOVSI TAC,JNA+JLOG+JACCT ;CLEAR JOB NUMBER ASSIGNED AND LOGGED IN BITS ANDCAM TAC,JBTSTS(ITEM) IFN FTLOGIN,< EXTERN PRJPRG + SETZM PRJPRG(ITEM) ;CLEAR PROJECT-PROGRAMMER NUMBER WHEN JOB LOGS OUT > ; IF THIS IS THE LARGEST JOB IN USE,FIND NEXT @@ -600,6 +598,7 @@ IFE FTSWAP,< IFN FTSWAP,< JRST REQUE ;SET REQUE JOB FLAG > + SKIPL TAC,JBTSTS(ITEM) ;RUN FLAG OFF? TLNN TAC,JERR ;YES, ERROR FLAG ON? JRST STOP2 ;NO @@ -610,7 +609,7 @@ IFN FTSWAP,< ;OR IS IN CORE AND HAS ACTIVE DEVICES. ;CALLED FROM COMMAND DECODER ;CALL: MOVE ITEM,JOB NO. - PUSHJ PDP,DLYCOM +; PUSHJ PDP,DLYCOM INTERNAL DLYCOM @@ -693,7 +692,6 @@ EXTERNAL JOBPC,JOBDAC,JOBD17,TTYSET,JOBOPC,JOBPD1 USTART: MOVE TAC,JOBPC(JDAT) ;GET OLD PC TLNE TAC,USRMOD ;IS IT IN USER MODE TOO? JRST USTRT1 ;YES, DUMP ACS AND PC FLAGS ARE ALREADY HIS - MOVEI TAC,JOBDAC(JDAT) ;NO. MOVE USERS(UUO) ACS TO DUMP ACS HRL TAC,JDAT ;SOURCE=REL, 0,DEST,=JOBDAC IN JOB DATA AREA BLT TAC,JOBD17(JDAT) ;MOVE ALL ACS @@ -709,13 +707,14 @@ USTRT1: MOVEM TAC,JOBOPC(JDAT) ;STORE OLD PC FOR USER TO LOOK AT MSTART: MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC MOVSI TAC,JERR+WTMASK ANDCAM TAC,JBTSTS(ITEM) ;CLEAR ERROR AND WAIT STATUS BITS - ;SET TTY STATE TO INITAL COND. + JRST TTYSET ;SET TTY STATE TO INITAL COND. ; TTYUSR OR TTYURC SHOULD BE CALLED ; TO INDICATE WHETHER TTY TO USER OR EXEC MODE ; AND THAT JOB IS TO RUN(RUN BIT =1) WHEN ; MONITOR COMMAND RESPONSE FINISHES. ; SEE SETRUN BELOW + ;ROUTINE TO SET JOB STATUS RUN BIT(RUN) ;CALLED BY SCANNER SERVICE WHEN TTY MONITOR COMMAND ;RESPONSE FINISHES, THIS ACTION IS ENABLED BY CALLING @@ -836,7 +835,6 @@ INTERNAL MTWAIT,STWAIT,DTWAIT,DCWAIT,DAWAIT,MQWAIT,AUWAIT EXTERNAL JOB,REQTAB MTWAIT:DTWAIT:DCWAIT:STWAIT:DAWAIT:MQWAIT:AUWAIT: - DVWAIT: MOVE AC1,(PDP) ;GET ADR. OF CALLER MOVE AC1,-2(AC1) ;GEET AOSLE XXREQ INSTRUCTION JRST .+2 @@ -870,6 +868,7 @@ EXTERNAL WSQ,WSAVAL,TSQ,TSAVAL,JOB,PJOBN PJBS2: POINT JWSIZ,JBTSTS(TAC),JWPOS ;BYTE POINTER TO JOB STATUS ; WORD QUEUE CODE + STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE AOS TSAVAL JRST SETIO1 @@ -877,6 +876,7 @@ SETIOD: MOVEI TAC1,WSQ ;REQUE TO WAIT SATISFIED Q AOS WSAVAL ;INCR, NO, OF JOBS WITH IO WAIT ; SATISFIED, NON-ZERO WSAVAL WILL ; CAUSE SCHED, TO SCAN FOR IO + ; SATISFIED JOB. SETIO1: LDB TAC,PJOBN DPB TAC1,PJBS2 ;IN JOB STATUS WORD @@ -927,7 +927,8 @@ WAIT1: MOVE IOS,DEVIOS(DEVDAT) POPJ PDP, ;RETURN PUSHJ PDP,WSYNC ;WAIT JRST WAIT1 - ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE + +;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE ;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETE ;CALLED ONLY FROM UUO LEVEL ;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK @@ -944,7 +945,6 @@ WSYNC: MOVSI IOS,IOW ;SETUP DEVICE IO WAIT BIT TLNE AC3,DVTTY ;IS THIS DEVICE A TTY? MOVEI AC1,TIOWQ ;YES, SET TTY WAIT STATE CODE MOVE AC3,JOB ;CURRENT JOB NO. - MOVEI AC2,IOACT ;DEVICE ACTIVE BIT CONO PI, PIOFF ;TURN PI OFF TDNN AC2,DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE? @@ -962,4 +962,5 @@ WSYNC1: CONO PI, PION ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVIVCE IO-WAIT BIT POPJ PDP, + CLKEND: END diff --git a/src/cmb50.ccl b/src/cmb50.ccl index 5ff6a72..9f48144 100644 --- a/src/cmb50.ccl +++ b/src/cmb50.ccl @@ -1,8 +1,8 @@ -A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL -B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL -C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL -D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,SEGCON.REL,PLTSER.REL,PTPSER.REL -E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL -F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL -SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX -DSK:/D_*.RLX +A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL +B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL +C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL +D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,SEGCON.REL,PLTSER.REL,PTPSER.REL +E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL +F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL +SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX +DSK:/D_*.RLX diff --git a/src/cmb50n.ccl b/src/cmb50n.ccl index 3b51e94..954ebfd 100644 --- a/src/cmb50n.ccl +++ b/src/cmb50n.ccl @@ -1,8 +1,8 @@ -A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL -B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL -C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL -D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,PLTSER.REL,PTPSER.REL -E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL -F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL -SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX -DSK:/D_*.RLX +A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL +B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL +C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL +D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,PLTSER.REL,PTPSER.REL +E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL +F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL +SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX +DSK:/D_*.RLX diff --git a/src/comcon.mac b/src/comcon.mac index 464d953..d51df4f 100644 --- a/src/comcon.mac +++ b/src/comcon.mac @@ -1,13 +1,13 @@ TITLE COMCON - COMMAND DECODER AND SAVEGET ROUTINES - V433 SUBTTL /RCC 03 JUN 69 XP VCOMCN,433 + ;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB ENTRY COMCON ;ALWAYS LOAD COMCON IF LIBRARY SEARCH COMCON: ;CALLED FROM CLOCK ROUTINE WHEN 'COMCNT' IS GREATER THAN 0 - ;AS SET BY TTY SERVICE ROUTINE ;ALL AC'S HAVE BEEN SAVED BY CLOCK CHANNEL ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED @@ -87,7 +87,8 @@ IFN FTLOGIN,< JRST CHKNO ;YES JSP TAC,COMER ;NO, TYPE "LOGIN PLEASE" ASCIZ /LOGIN PLEASE -/> +/ +> CHKNO: JUMPN ITEM,CHKRUN ;JOB NUMBER ALREADY ASSIGNED? TLNE TAC1,NOJOBN ;NO, DOES THIS COMMAND NEED A JOB NUMBER? JRST COMGO ;NO @@ -101,9 +102,11 @@ NUMLOP: MOVE T,JBTSTS(ITEM) ;SCAN FOR FREE JOB NO. JSP TAC,COMER ;YES, NONE LEFT, PRINT "JOB CAPACITY EXCEEDED" ASCIZ /JOB CAPACITY EXCEEDED / + ; EVEN THROUGH THIS IS A NEW JOB NUMBER ; IT MAY HAVE CORE ASSIGNED NOW BECAUSE IT WAS DELAYED ; UNTIL IT COULD BE SWAPPED IN(LOGIN WITH CORE FULL) + NEWJOB: MOVEI T1,ASSCON ;SET ASSIGNED BY CONSOLE BIT FOR TTY IORM T1,DEVMOD(DEVDAT) ;SO OTHER JOBS CAN NOT USE SETZM DEVLOG(DEVDAT) ;SET LOGICAL NAME TO ZERO @@ -184,6 +187,7 @@ COMGO: MOVSI IOS,CMWRQ ANDCAM IOS,(PDP) ;NO, CLEAR REQUEU BIT IN DISP. FLAGS MOVEM T,JBTSTS(ITEM) + COMDIS: MOVEI IOS,0 ;CLEAR IOS FOR SETTING DISPATCH ADDRESSES PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE. ;RETURN FROM COMMAND SETUP ROUTINE @@ -245,7 +249,6 @@ IFN FTSWAP, < LDB ITEM,PJOBN ;GET JOB NUMBER FROM TTY DEVICE DATA BLOCK JUMPE ITEM,CPOPJ TLNE T1,CMWRQ ;REQUEUE JOB AFTER COMMAND WAIT OR ERROR? - JRST REQUE ;YES > POPJ PDP, @@ -300,7 +303,8 @@ TTYRNC=20 ;KEEP TTY IN COMMAND MODE AND START JOB ; WHEN COMMAND RESPONSE STOPS TYPING NOMESS=10 ;NO COMMAND RESPONSE EVER, DO NOT CALL TTYSTR - ;T TAKEN ABOVE BY 'PLSXPN' BIT + ;4 TAKEN ABOVE BY 'PLSXPN' BIT + ERRFLG=1 ;COMMAND ERROR DEFINE NAMES< @@ -380,7 +384,9 @@ IFN FTCCL,< DEFINE C(A,B,D) < > + COMTAB: NAMES + XWD NOCORE+NOJOBN+NOLOGIN+NOINCK,NOCOM DISPL=.-COMTAB ;LENGTH OF TABLE ;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS @@ -388,7 +394,8 @@ DEFINE C(A,B,D) < Z B (D) > DISP: NAMES - ;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE + +;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE ;WITH FOLLOWING AC'S SET: ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME) ;ITEM = JOB NUMBER @@ -480,8 +487,10 @@ IFE FTLOGIN, < PUSHJ PDP,TTYKIL ;RETURN TTY TO VIRGIN STATE JRST KSTOP ;CLEAR JOB STATUS WORD AND STOP JOB + ;ERROR IN COMMAND + CERR: JRST ERRMES JOBKB: SETZM -1(PDP) ;CLEAR NOJOBN SO COMRET WILL PRINT ERROR MSG. @@ -598,7 +607,6 @@ IFN FTSWAP,< ; IF ASKING FOR 0 CORE > LSH TAC1,12 ;CONVERT 1K BLOCKS TO WORDS - MOVEI TAC,-1(TAC1) ;HIGHEST RELATIVE ADDRESS=LENGTH-1 OF LOW SEG PUSHJ PDP,CORE0 ;TRY TO ASSIGN CORE JRST COR2 ;CORE NOT AVAILABLE. GO PRINT MESSAGE @@ -733,6 +741,7 @@ IFN FTCCL,< CCLRUN: MOVE TAC,[SIXBIT /COMPIL/] ;CUSP NAME JRST ARCOM ;RUN IT + > ;"LOGIN" - LOGIN COMMAND @@ -1958,7 +1967,7 @@ OCT0: CAIGE TEM,175 ;ALTMODES(175 OR 176)? ; BEFORE [P,P] IN ATT AND GET COMMANDS. JRST CPOPJ2 ;YES. SKIP RETURN CAIE TEM,"-" ;DASH? - CAIG TEM,400 ;SPACE OR CONTROL CHAR? + CAIG TEM,40 ;SPACE OR CONTROL CHAR? JRST CPOPJ2 ;YES, ONLY LEGAL TERMINATORS CAIE TEM,"," ;COMMA? CAIN TEM,"]" ;RIGHT BRACKET? diff --git a/src/copy.doc b/src/copy.doc new file mode 100644 index 0000000..c059b93 Binary files /dev/null and b/src/copy.doc differ diff --git a/src/copy.mac b/src/copy.mac new file mode 100644 index 0000000..3a2533b --- /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/copy.opr b/src/copy.opr new file mode 100644 index 0000000..b3e2554 --- /dev/null +++ b/src/copy.opr @@ -0,0 +1,13 @@ +COPY.OPR + +TO LOAD TYPE "LOAD COPY" +TO SAVE TYPE "SAVE COPY" + +THE DISTRIBUTION COPY WAS LOADED WITH DTBOOT AS FOLLOWS: + + .RENAME BSLDR.REL=DTBOOT.REL + .ASSIGN DSK PTR + .EXECUTE COPY + */L + *^C + .SAVE COPY diff --git a/src/crfall.ccl b/src/crfall.ccl index 78feb56..c0de415 100644 --- a/src/crfall.ccl +++ b/src/crfall.ccl @@ -1,36 +1,36 @@ -CDRSR6=CDRSR6 -CDRSRX=CDRSRX -CLOCK1=CLOCK1 -CLKCSS=CLKCSS -COMCON=COMCON -COMMON=COMMON -CORE1=CORE1 -DIS340=DIS340 -DIST30=DIST30 -DCSINT=DCSINT -DLSINT=DLSINT -DPDINT=DPDINT -DSKINT=DSKINT -DSKSER=DSKSER -DTCSRN=DTCSRN -DTASRN=DTASRN -EDDT=EDDT -ERRCON=ERRCON -JOBDAT=JOBDAT -LPTSER=LPTSER -MTCSR6=MTCSR6 -MTASRX=MTASRX -NULSEG=NULSEG -SEGCON=SEGCON -PLTSER=PLTSER -PTRSER=PTRSER -PTPSER=PTPSER -PTYSRF=PTYSRF -PTYSRH=PTYSRH -PATCH=PATCH -SYSINI=SYSINI -SYSMAK=SYSMAK -ONCEB=ONCEB -SCNSRF=SCNSRF -SCHEDB=SCHEDB -UUOCON=UUOCON +CDRSR6=CDRSR6 +CDRSRX=CDRSRX +CLOCK1=CLOCK1 +CLKCSS=CLKCSS +COMCON=COMCON +COMMON=COMMON +CORE1=CORE1 +DIS340=DIS340 +DIST30=DIST30 +DCSINT=DCSINT +DLSINT=DLSINT +DPDINT=DPDINT +DSKINT=DSKINT +DSKSER=DSKSER +DTCSRN=DTCSRN +DTASRN=DTASRN +EDDT=EDDT +ERRCON=ERRCON +JOBDAT=JOBDAT +LPTSER=LPTSER +MTCSR6=MTCSR6 +MTASRX=MTASRX +NULSEG=NULSEG +SEGCON=SEGCON +PLTSER=PLTSER +PTRSER=PTRSER +PTPSER=PTPSER +PTYSRF=PTYSRF +PTYSRH=PTYSRH +PATCH=PATCH +SYSINI=SYSINI +SYSMAK=SYSMAK +ONCEB=ONCEB +SCNSRF=SCNSRF +SCHEDB=SCHEDB +UUOCON=UUOCON diff --git a/src/dtboot.mac b/src/dtboot.mac new file mode 100644 index 0000000..027d458 --- /dev/null +++ b/src/dtboot.mac @@ -0,0 +1,533 @@ +TITLE DTBOOT - V003 - DECTAPE BOOTSTRAP (BIG TENDMP) - +SUBTTL R. CLEMENTS /RCC/JEF - 16 MAR 71 + +;(C) COPYRIGHT DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS 1971 + +;"THESE BOOTS WERE MADE FOR WALKIN'." - N.S. + +;AC'S + +F=0 ;FLAGS +A=1 ;GENERAL AC'S +B=2 ; .. +C=3 ; .. +X=4 ;MEMORY ADDRESS COUNTER +W=5 ;WORD RETURNED BY RWORD OR SIXBRD +NAME=6 ;NAME OF FILE BEING SEARCHED FOR +EXT=7 ;EXTENSION OF FILE BEING SEARCHED FOR +Q=10 ;COUNTER TO STEP THROUGH BUFFER OF 200 DATA WORDS +N=12 ;NUMBER ASSEMBLER IN TYPEIN, COUNTER IN SEARCH,RDBLK,WRBLK +M=13 ;MEMORY AOBJN POINTER FOR READING THE DATA TO CORE +FN=14 ;FILE NUMBER, 1 TO NFILES +BP=15 ;POINTER TO CURRENT DIR BYTE (ALSO SIXBIT INPUT) +LBN=16 ;TAPE BLOCK NUMBER TO READ +P=17 ;STACK POINTER + ;CORE ALLOCATION +IFNDEF REL, ;REL=1 CAUSES A RELOCATABLE ASSEMBLY +IFG REL, +IFNDEF CORE, ;ASSUME 64K + +ZZ=CORE-2000+140 ;SET ABOVE JOB DATA AREA OF TOP K + +CLRTOP=ZZ-1 ;WHEN CLEARING CORE, CLEAR TO HERE + +DEFINE U(Z)< + UU(Z,1)> ;ONE WORD ALLOCATION +DEFINE UU(Z,N)< Z=ZZ +ZZ=ZZ+N +IFGE ,< +PRINTX ALLOCATION ERROR +>> + +OPDEF PJRST [JRST] +IFE REL, ;PAPER TAPE FORMAT + +U(DEVICE) ;DEVICE NAME FROM COMMAND +U(FNAME) ;FILE NAME FROM COMMAND +U(FEXT) ;FILE EXTENSION FROM COMMAND +U(SWITCH) ;SWITCHES FROM COMMAND +U(TAPEID) ;TAPE NAME FOR Z COMMAND +U(PRVLBN) ;LBN SOUGHT ON PREVIOUS SEARCH +U(FBN) ;FIRST BLOCK NUMBER, FOR LINK + +UU(HBUF,200) ;DIRECTORY OF DTA +UU(DBUF,200) ;DATA BUFFER +FIRSTW==20 ;FIRST LOCATION CONSIDERED ON WRITE +PDLL==20 ;STACK LENGTH + + ;I/O DEVICE PARAMETERS + +DTC==320 ;DEVICE CODE FOR DTA CONTROL +DTS==324 ;DEVICE CODE FOR DTA STATUS +O.NOP==0 ;OPCODES FOR THE DTA CONTROL CONO +O.SRCH==200 ;SEARCH +O.READ==300 ;READ +O.WRIT==700 ;WRITE +C.STOP==400000 ;CONO BITS +C.FWD==200000 ;GO FORWARD +C.REV==100000 ;GO REVERSE +C.NDEL==040000 ;NO DELAY AFTER CONO +C.SEL==020000 ;SELECT A UNIT +C.DSEL==010000 ;DESELECT CURRENT UNIT +S.DAT==1 ;DATA DONE FLAG +S.INT==2 ;INT REQ FLAG +S.END==020000 ;END ZONE HIT +S.JOBD==100000 ;JOB DONE FLAG +S.ERR==653300 ;ERRORS TO GIVE UP ON. +;FLAGS, LEFT HALF OF F + +L.DOT=1 ;DOT SEEN IN FILE SPEC +L.UPA==2 ;UPARROW (TAPE ID) +L.SLA==10 ;SLASH SEEN IN FILE SPEC +L.ALL==13 ;ABOVE FLAGS TOGETHER. +L.UPA2==20 ;UPARROW AGAIN FOR READING AT ZERO ROUTINE +L.REV==400000 ;TAPE MOVING IN REVERSE. SIGN BIT REQ? +L.REVA==40 ;ALLOCATION PASS IS GOING IN REVERSE +L.TURN==100 ;ALLOCATION PASS HAD TO TURN AROUND + +;FLAGS, RIGHT HALF OF F + +R.MRG==1 ;MERGE, NOT LOAD. +R.WEOF==2 ;ON WHILE WRITING JRST WORD(S) IN LAST BLK +R.DIRI==4 ;DIRECTORY IN CORE IS VALID +R.STRT==10 ;ON IF LOAD AND GO. OFF IF JUST LOAD + +;SYSTEM PARAMETERS WHICH MUST AGREE WITH TIMESHARING SYSTEM + +DIRBLK==144 ;WHERE DIRECTORY IS ON TAPE +D.BYT==0 ;WORD OF BYTES IN DIRECTORY +D.NAM==123 ;FIRST NAME IN DIRECTORY +D.EXT==151 ;START OF EXTENSIONS IN DIR +NFILES==26 ;HOW MANY FILES FIT IN DIR +MAXBLK==1101 ;LAST BLOCK ON THE TAPE +BLKFAC==2 ;BLOCKING FACTOR - WRITE ONE OF N BLKS + ;START HERE + +GO: MOVEI F,0 ;CLEAR ALL FLAGS + CONO 200000 ;I/O BUS RESET + CONO 4,10400 ;CLEAR PI SYSTEM + SETZM DEVICE ;CLEAR REQUESTED DEVICE NAME +REGO: MOVE P,PDP ;INITIAL STACK POINTER + ANDI F,R.DIRI ;CLEAR OUT RANDOM FLAGS + SETZM FNAME ;CLEAR REQUESTED FILE NAME + SETZM FEXT ;CLEAR REQUESTED FILE EXTENSION + SETZM SWITCH ;CLEAR COMMAND SWITCHES + PUSHJ P,CRLF ;SAY HELLO +GOL: MOVE BP,SIXPTR ;POINTER TO THE WORD. + SETZB N,W ;CLEAR ANSWERS. +SIXBRL: CONSO TTY,40 ;WAIT FOR A KEY TO BE ST(R)UCK + JRST .-1 ; .. + DATAI TTY,C ;GET THE CHAR + PUSHJ P,TYO ;ECHO IT + ANDI C,177 ;ONLY 7 BITS + CAIN C,177 ;RUBOUT? + JRST REGO ;YES. QUIT. + CAIG C,172 ;CHECK FOR LOWER CASE + CAIGE C,140 ; .. + SKIPA ;NOT L.C. + TRZ C,40 ;L.C., MAKE U.C. + CAIG C,"Z" ;LETTER? + CAIGE C,"A" ; .. + SKIPA ;NOT A LETTER. + JRST SIXLTR ;LETTER. + CAIG C,"9" ;NUMBER? + CAIGE C,"0" ; .. + JRST GO0 ;NO. RETURN WITH BREAK CHAR. + LSH N,3 ;BUILD OCTAL NUMBER + ADDI N,-60(C) ;ADD IN THIS DIGIT +SIXLTR: TRC C,40 ;MAKE SIXBIT + TLNE BP,770000 ;ONLY 6 CHARS + IDPB C,BP ;STORE CHAR IN W + JRST SIXBRL ;LOOP FOR MORE. + GO0: CAIE C,":" ;UNIT DELIMITER? + JRST GO1 ;NO. + TRZ F,R.DIRI ;DIRECTORY NO GOOD, SELECTING A TAPE + ANDI N,7 ;JUST THREE BITS OF UNIT NUMBER + MOVEM N,DEVICE ;YES. SAVE NUMBER OF DEVICE + JRST GOL ;GO READ MORE. +GO1: TLNN F,L.ALL ;ANY SYNTAX REQUESTS? + JRST GO6 ;NO. SEE IF FILE NAME. + TLZE F,L.DOT ;WAS THERE A DOT? + HLLOM W,FEXT ;YES. STORE EXT. RH IS FLAG IF BLANK. + TLZE F,L.UPA ;UPARROW? + MOVEM W,TAPEID ;YES. SAVE TAPE NAME. + TLZE F,L.SLA ;SLASH SWITCH? + MOVEM W,SWITCH ;YES. SAVE SWITCH WORD +GO7: CAIGE C,175 ;ALTMODE? + CAIG C,40 ;SPACE OR CONTROL CHAR? + JRST DO ;YES. GO PROCESS COMMAND + CAIE C,"." ;FILE EXTENSION REQUEST? + JRST GO3 ;NO. + TLO F,L.DOT ;YES. REMEMBER THAT + JRST GOL ;AND READ ON. + +GO3: CAIE C,"/" ;SLASH? + JRST GO5 ;NO. + TLO F,L.SLA ;YES. MARK SWITCH COMING + JRST GOL ;RETURN TO SCAN +GO5: CAIN C,"^" ;UPARROW? + TLO F,L.UPA+L.UPA2 ;YES. NOTE IT. + JRST GOL ;LOOP FOR MORE. +GO6: SKIPE W ;NO PUNCTUATION. NAME TYPED? + MOVEM W,FNAME ;YES. STORE NAME + JRST GO7 ;GO CHECK PUNCTUATION + ;HERE WHEN COMMAND STRING SUCCESSFULLY READ. DO THE JOB. + +DO: PUSHJ P,CRLF ;SIGNAL STARTING I/O + LDB A,SWPTR ;GET FIRST CHAR OF SWITCHES + CAIN A,"Z"-40 ;ZERO COMMAND? + JRST ZERO ;YES. + CAIN A,"G"-40 ;GO COMMAND? +PROGSA: JRST GO ;YES. *** RH MODIFIED *** + CAIL A,"0"-40 ;NUMERIC? + CAILE A,"7"-40 ; OCTAL, THAT IS, + SKIPA ;NO. + JRST SETSA ;YES. GO SET STARTING ADDRESS + PUSHJ P,RDDIR ;REST OF COMMANDS NEED DIRECTORY + LDB A,SWPTR ;GET FIRST CHAR OF SWITCHES + CAIN A,"M"-40 ;MERGE? + TROA F,R.MRG ;YES. SKIP INTO LOAD, FLAGGING MERGE ONLY + CAIN A,"L"-40 ;LOAD COMMAND? + JRST LOAD ;YES. + CAIN A,"D"-40 ;DUMP COMMAND? + JRST DUMP + CAIN A,"F"-40 ;FILE DIRECTORY? + JRST FILDIR ;YES. + CAIN A,"K"-40 ;KILL A FILE (DELETE)? + JRST KILL ;YES. + JUMPE A,RUN ;IF NO SWITCH, ASSUME LOAD AND RUN + PUSHJ P,ERROR ;NO OTHERS IMPLEMENTED + +SETSA: HRRM N,PROGSA ;STORE PROGRAM STARTING ADDR + JRST REGO ;AND WAIT FOR ANOTHER COMMAND + +FILDIR: MOVSI N,-NFILES ;LIST A QUICK DIRECTORY +FILDL: SKIPN B,HBUF+D.NAM(N) ;GET A NAME, IF ANY IN THIS SLOT + JRST FILDN ;NONE HERE + PUSHJ P,SIXOUT ;TYPE C(B) IN SIXBIT + HLLZ B,HBUF+D.EXT(N) ;GET EXTENSION + JUMPE B,FILD1 ;IF NOT BLANK, + MOVEI C,"." ;DOT + PUSHJ P,TYO ;TYPE DOT + PUSHJ P,SIXOUT ;TYPE EXT +FILD1: PUSHJ P,CRLF ;A CARRIAGE RETURN +FILDN: AOBJN N,FILDL ;LOOP FOR ALL NAMES + JRST REGO1 ;STOP TAPE AND GO FOR NEXT COMMAND + ;LOAD AND RUN COMMANDS + +RUN: TRO F,R.STRT ;LOAD AND START PROGRAM +LOAD: MOVSI FN,-NFILES ;SEARCH TO SEE IF ONLY ONE SAV FILE ON DT + MOVEI A,0 ;WHERE NAME WILL GO IF FOUND +RUN5: HLRZ EXT,HBUF+D.EXT(FN) ;CHECK AN EXTENSION + CAIN EXT,(SIXBIT /SAV/) ;IS IT A SAV FILE? + JRST RUN2 ;YES. GO NOTE IT +RUN4: AOBJN FN,RUN5 ;LOOP THRU COUNTING ALL FILES + SKIPN A ;WAS ONE AND ONLY ONE FOUND? +RUN3: MOVE A,SYSTEM ;DEFAULT READ-FILE NAME + SKIPN FNAME ;NAME SUPPLIED? + MOVEM A,FNAME ;NO. PLUG IN DEFAULT. + PUSHJ P,LOOK ;TRY TO FIND FILE + PUSHJ P,ERROR ;NOT THERE. FAIL. + MOVEI LBN,1 ;HAVE TO FIND A BLOCK OF FILE + MOVE BP,BYTPTR ;LOOK THRU DIRECTORY +RUNL: ILDB N,BP ;GET A BYTE + CAIN N,0(FN) ;BELONG TO THIS FILE? + JRST RUN1 ;YES. + CAIL LBN,MAXBLK ;LOOKED TOO FAR? + PUSHJ P,ERROR ;YES. NO BLKS IN FILE! + AOJA LBN,RUNL ;LOOK FURTHER +RUN1: PUSHJ P,RDDAT1 ;READ THE DATA BLOCK TO FIND FBN + LDB A,[POINT 10,DBUF+0,27] ;FIRST BLOCK OF FILE + HRLM A,DBUF+0 ;PUT IT IN LINK SLOT TO BE READ NEXT +RFILE: SETZB Q,40 ;CLEAR CORE BEFORE READING FILE + ;AND INITIALLY NO WORDS IN DATA BUFFER + MOVE A,BLTXWD ; .. + TRNN F,R.MRG ;UNLESS MERGE ONLY, + BLT A,CLRTOP ;CLEAR UP TO BASE OF THIS PROGRAM +RFILL1: PUSHJ P,RWORD ;READ A POINTER OR JRST WORD + SKIPL M,W ;WHICH IS IT? + JRST STARTQ ;TRANSFER WORD +RFILL2: PUSHJ P,RWORD ;READ A WORD OF DATA + MOVEM W,1(M) ;STORE IT IN CORE + AOBJN M,RFILL2 ;COUNT THE CORE POINTER. + JRST RFILL1 ;IT RAN OUT. GET ANOTHER. + +RUN2: JUMPN A,RUN3 ;IF ALREADY ONE, THIS IS 2. QUIT. + MOVE A,HBUF+D.NAM(FN) ;FIRST SAV FILE. GET ITS NAME. + JRST RUN4 ;AND SEE IF ANY MORE. + STARTQ: HRRM W,PROGSA ;SAVE THE STARTING ADDRESS +REGO1: CONO DTC,C.STOP ;STOP THE TAPE + TRNE F,R.STRT ;LOAD OR START? + JRST 0(W) ;START + JRST REGO ;JUST LOAD. GO GET ANOTHER COMMAND + +;SUBROUTINE TO READ A DATA WORD FROM THE FILE. + +RWORD1: MOVE Q,DBUFP ;PREPARE TO COUNT DATA WORDS +RWORD: JUMPGE Q,RWNXTB ;NEED ANOTHER BLOCK? + MOVE W,0(Q) ;NO. GET A WORD. + AOBJN Q,.+1 ;COUNT IT. + POPJ P,0 ;RETURN FROM RWORD +RWNXTB: PUSHJ P,RDDATA ;NO. READ NEXT DATA BLOCK, IF ANY + JRST RWORD1 ;READ FROM THIS BLOCK + +DUMP: MOVE A,CRASH ;DEFAULT FILE NAME + SKIPN FNAME ;NAME ALREADY SET? + MOVEM A,FNAME ;NO. USE DEFAULT + PUSHJ P,ENTR ;TRY TO FIND THE FILE. + PUSHJ P,ERROR ;NO FREE SLOTS (OR MAYBE NO BLKS LEFT) + MOVEM LBN,FBN ;SAVE AS FIRST BLOCK NUMBER + MOVEI Q,0 ;INITIALIZE DATA BLOCK COUNTER + MOVEI M,FIRSTW-1 ;AND CORE ADDRESS COUNTER +DUMPL2: HRRZS X,M ;START OF A BLOCK +DUMPL1: SKIPN 1(X) ;THIS WORD ZERO IN CORE? + JRST DUMP1 ;YES. SEE IF END OF A BLOCK. + CAIGE X,CLRTOP ;LOOKED AT ALL OF CORE? + AOJA X,DUMPL1 ;NO. COUNT PART OF THIS BLOCK, LOOK ON. +DUMP1: MOVEI W,0(M) ;END OF BLOCK. IS BLOCK EMPTY? + SUBI W,0(X) ;START MINUS END OF BLK + JUMPE W,DUMP2 ;JUMP IF BLOCK EMPTY + HRL M,W ;MAKE -COUNT,,START-1 FOR COUNTER + MOVE W,M ;AND FOR DATA IN FILE + PUSHJ P,WWORD ;WRITE IT OUT AS DATA +DUMPL3: MOVE W,1(M) ;GET THE WORD FROM CORE + PUSHJ P,WWORD ;OUTPUT TO FILE + AOBJN M,DUMPL3 ;OUTPUT ALL OF BLOCK +DUMP2: CAIGE X,CLRTOP ;CONSIDERED ALL OF CORE? + AOJA M,DUMPL2 ;NO. MOVE ON. + TRO F,R.WEOF ;FLAG WRITING LAST BLK, SO NO ALLOC + MOVE W,PROGSA ;YES. APPEND STARTING ADDRESS + PUSHJ P,WWORD ;WRITE OUT THIS WORD + JUMPL Q,.-1 ;IF MORE TO GO IN BLOCK, WRITE AGAIN + JRST CLS ;WRITE OUT THE DIRECTORY + ;AND RESTART PROGRAM FOR NEXT COMMAND + ;SUBROUTINE TO WRITE A WORD INTO THE FILE + +WWORD: SKIPL Q ;NEED A NEW POINTER? + MOVE Q,DBUFP ;YES. + MOVEM W,0(Q) ;PUT WORD INTO BUFFER + AOBJN Q,CPOPJ ;COUNT POINTER. DONE? + MOVE A,FBN ;GET FIRST BLOCK NUMBER + LSH A,10 ;PUT IN RIGHT PLACE + TRO A,177 ;DECLARE 127 WORDS IN BLOCK USED + HRRZM A,DBUF+0 ;PUT IN LINK WORD + TRNE F,R.WEOF ;WRITING LAST BLK? + JRST WWORD1 ;YES. DONT ALLOCATE ANOTHER + PUSH P,LBN ;SAVE BLOCK ABOUT TO WRITE + PUSHJ P,ALLOC ;GET NEXT BLOCK OF FILE + PUSHJ P,ERROR ;NONE AVAILABLE + HRLM LBN,DBUF+0 ;PUT IN LINK WORD + POP P,LBN ;RESTORE BLOCK FOR WRITING NOW +WWORD1: PUSHJ P,WRDATA ;OUTPUT BLOCK, IF POSSIBLE + HLRZ LBN,DBUF+0 ;GET LINK TO NEXT BLOCK IN LBN + POPJ P,0 ;OK. RETURN. + +;SUBROUTINE TO LOOK FOR FILE + +LOOK: MOVE NAME,FNAME ;GET DESIRED FILENAME + MOVSI EXT,(SIXBIT /SAV/) ;DEFAULT EXTENSION + SKIPE FEXT ;ANY SUPPLIED? + HLLZ EXT,FEXT ;YES. USE IT. +SRCHFD: MOVSI FN,-NFILES ;MAKE AOBJN COUNTER +SCHL2: MOVE B,HBUF+D.NAM(FN) ;GET A FILE NAME + CAME B,NAME ;IS NAME RIGHT? + JRST SCHN2 ;NO. MOVE ON. + HLLZ B,HBUF+D.EXT(FN) ;CHECK THE EXTENSION + CAMN B,EXT ;IS IT RIGHT TOO? + AOJA FN,CPOPJ1 ;YES. GOOD RETURN, ANSWER IS FILE NUMBER IN FN +SCHN2: AOBJN FN,SCHL2 ;COUNT FILE, EXT. CHECK NEXT FILE IN FD + POPJ P,0 ;FAIL RETURN, NOT FOUND. + ;SUBROUTINE TO READ NEXT BLOCK OF DATA INTO DBUF + +RDDATA: HLRZ LBN,DBUF+0 ;LINK + JUMPE LBN,ERROR ;JUMP IF END OF FILE +RDDAT1: MOVEI A,DBUF ;SELECT DATA BUFFER +RDBLK: PUSHJ P,PROCBK ;PROCESS A BLOCK + CONO DTC,O.READ ;ARGS TO PROCBK + DATAI DTC,0(A) ; TO CAUSE IT TO READ THE BLOCK + POPJ P,0 ;SUCCESS. RETURN + +RDDIR: TRNE F,R.DIRI ;IS THE DIRECTORY IN CORE OK? + POPJ P,0 ;YES. DONT READ IT AGAIN + MOVEI A,HBUF ;MUST READ. WHERE TO PUT IT. + MOVEI LBN,DIRBLK ;BLOCK ON TAPE TO READ + PUSHJ P,RDBLK ;READ IT + CONO DTC,C.STOP ;STOP TAPE IN CASE OF /F COMMAND + TRO F,R.DIRI ;HAVE A GOOD DIRECTORY IN CORE NOW + POPJ P,0 ;RETURN FROM RDDIR + +ZERO: MOVE A,TAPEID ;COPY TAPE NAME IF ANY + MOVEM A,HBUF+177 ; .. + TLZN F,L.UPA2 ;WAS ONE THERE? + PUSHJ P,RDDIR ;NO. GET THE ONE ON TAPE + SETZM HBUF ;CLEAR OUT REST OF DIR + MOVE A,[XWD HBUF,HBUF+1] ; .. + BLT A,HBUF+176 ; .. + MOVSI A,(<36B4+36B9>) ;ALLOCATE BLOCKS 1 AND 2 + MOVEM A,HBUF+D.BYT+0 ; .. + MOVSI A,(36B9) ;AND BLOCK 144 + MOVEM A,HBUF+D.BYT+16 ; .. + HRLOI A,7 ;AND THE NONEXISTENT ONES + MOVEM A,HBUF+D.BYT+122 ; .. +CLS: PUSHJ P,WRDIR ;WRITE OUT THE DIRECTORY + JRST REGO1 ;STOP TAPE AND RETURN TO COMMAND SCANNER + +WRDIR: MOVEI LBN,DIRBLK ;BLOCK TO WRITE + MOVEI A,HBUF ;DATA TO WRITE + PJRST WRBLK ;WRITE IT + +WRDATA: MOVEI A,DBUF ;WRITE FROM DATA BUFFER +WRBLK: PUSHJ P,PROCBK ;PROCESS THE BLOCK + CONO DTC,O.WRIT ;ARGS TO PROCBK TO CAUSE IT + DATAO DTC,0(A) ;TO WRITE THE BLOCK ONTO TAPE + POPJ P,0 ;RETURN FROM WRBLK + PROCBK: PUSHJ P,SEARCH ;ROUTINE TO READ OR WRITE A BLOCK OF TAPE + ; FIRST FIND THE BLOCK (EITHER DIRECTION) + MOVEI N,200 ;NUMBER OF WORDS IN A BLOCK + TLNE F,L.REV ;WHICH WAY WE GOING? + ADDI A,177 ;BACKWARDS. WRITE FROM TOP OF CORE DOWN + XCT @0(P) ;CONO WRITE OR READ + AOS 0(P) ;COUNT ON TO DATAI OR DATAO +PROCLP: CONSZ DTS,S.ERR!S.END ;TROUBLE? + PUSHJ P,ERROR ;YES. QUIT + CONSO DTS,S.DAT ;WANT DATA MOVED YET? + JRST PROCLP ;NO. WAIT SOME MORE. + XCT @0(P) ;YES. DATAI OR DATAO TO/FROM BUFFER + ADDI A,1 ;COUNT BUFFER POINTER + TLNE F,L.REV ;GOING BACKWARDS? + SUBI A,2 ;YES. THEN COUNT POINTER BACKWARDS TOO + SOJG N,PROCLP ;TRANSFERRED WHOLE BLOCK? + CONO DTS,1 ;YES. TELL IT TO DO CHECKSUMMING AND QUIT + CONSO DTS,S.JOBD ;DONE? + JRST .-1 ;NOT YET. WAIT. + JRST CPOPJ1 ;YES. RETURN AFTER THE DATAI/O ARGUMENT + +SEARCH: MOVE C,DEVICE ;GET DRIVE NUMBER + LSH C,11 ;PUT IN UNIT DIGIT FOR CONO + CONSZ DTC,C.FWD!C.REV ;TAPE GOING AT THE MOMENT? + JRST SRCHC ;YES. + TRO C,C.FWD!C.DSEL ;NO. MAKE IT GO FORWARD + TLZ F,L.REV ;AND GET THE FLAG TO SAY THAT +SRCHC: CONO DTC,O.SRCH!C.SEL(C) ;MAKE IT SEARCH +SRCHW: CONSZ DTS,S.END ;AT END ZONE? + JRST SRCHTA ;YES. TURN AROUND. + CONSZ DTS,S.ERR ;ANY ERRORS? + PUSHJ P,ERROR ;YES. QUIT. + CONSO DTS,S.DAT ;BLOCK NUMBER FOUND? + JRST SRCHW ;NO. WAIT FOR IT + DATAI DTC,N ;YES. SEE WHAT BLOCK WE ARE AT + ANDI N,7777 ;JUST FOR SAFETY, MASK JUNK OUT + SUBI N,0(LBN) ;GET THE DISTANCE TO GO + JUMPE N,CPOPJ ;IF FOUND, RETURN WITH TAPE ROLLING INTO DESIRED BLK + TLNE F,L.REV ;NOT THERE. WHICH WAY WE GOING? + MOVNS N ;BACKWARDS. NEGATE. + JUMPL N,SEARCH ;IF SHOULD KEEP GOING, ITS MINUS. +SRCHTA: CONO DTC,C.FWD!C.REV ;MUST TURN AROUND (END ZONE OR PASSED) + TLC F,L.REV ;COMPLEMENT DIRECTION FLAG + JRST SEARCH ;SEARCH SOME MORE + DELETE: PUSHJ P,LOOK ;SEE IF FILE EXISTS ALREADY + POPJ P,0 ;NO. FAIL RETURN + SETZB B,HBUF+D.NAM-1(FN) ;FOUND IT. CLEAR NAME + SETZM HBUF+D.EXT-1(FN) ;AND EXT IN DIRECTORY + MOVE BP,BYTPTR ;INITIAL BYTE POINTER TO DIRECTORY BYTES + MOVEI N,MAXBLK ;SEARCH ALL BYTES FOR THIS FILE + ILDB A,BP ;GET A DIRECTORY BYTE + CAIN A,0(FN) ;BELONG TO THIS FILE? + DPB B,BP ;YES. CLEAR IT OUT, ITS FREE NOW + SOJG N,.-3 ;LOOP FOR WHOLE DIRECTORY +CPOPJ1: AOS 0(P) ;SUCCESSFUL RETURN +CPOPJ: POPJ P,0 ;RETURN. + +KILL: PUSHJ P,DELETE ;REMOVE FILE FROM DIRECTORY + PUSHJ P,ERROR ;NOT THERE, GIVE A BELL + JRST CLS ;WRITE DIRECTORY AND RETURN TO CMD SCAN + +ENTR: PUSHJ P,DELETE ;FIRST REMOVE OLD FILE BY THIS NAME + JFCL ;MAY NOT HAVE BEEN ONE, THATS OK + MOVSI FN,-NFILES ;SEARCH FOR A FREE SLOT + SKIPN HBUF+D.NAM(FN) ;SLOT FREE? + AOJA FN,ENTR1 ;YES. CONVERT RH TO FILE NUMBER, GO USE. + AOBJN FN,.-2 ;LOOK FOR ANOTHER + POPJ P,0 ;NONE FREE. WE LOSE. + ENTR1: MOVEM NAME,HBUF+D.NAM-1(FN) ;STORE THE FILE NAME IN FREE SLOT + HLLZM EXT,HBUF+D.EXT-1(FN) ;AND THE EXTENSION +ALLOCI: SETZM PRVLBN ;INITIALIZE POINTERS FOR ALLOCATOR + MOVE BP,BYTPTR ;START HAVING CHECKED BLK 0. + TLZ F,L.REVA ;NOT REVERSE ALLOCATING +ALLOC: TLZ F,L.TURN ;ALLOCATOR HASNT TURNED AROUND + MOVE LBN,PRVLBN ;RESTORE PREVIOUS LBN +ALLOCP: TLNE F,L.REVA ;WHICH WAY WE LOOKING? + JRST ALCN2 ;NEXT BACK + JRST ALCN1 ;NEXT FORWARD + ALCL1: ILDB N,BP ;GET A BLOCK BYTE + JUMPE N,ALLOC1 ;IF ITS FREE, MAY USE IT +ALCN1: CAIGE LBN,MAXBLK ;LOOKED ALL THRU FORWARD? + AOJA LBN,ALCL1 ;NO. TRY ANOTHER +ALLOCT: TLOE F,L.TURN ;TURN SEARCH AROUND. BETTER NOT BE SECOND TURN + POPJ P,0 ;LOOKED THRU AND DIDNT FIND ANYTHING. QUIT. + TLC F,L.REVA ;LOOK THE OTHER WAY + JRST ALLOCP ;GO SEE WHICH WAY NOW + +ALCL2: ADD BP,[XWD 050000,0] ;MOVE LEFT A BYTE + SKIPGE BP ;OFF THE END OF THE WORD? + SUB BP,[XWD 430000,1] ;YES. BACK A WORD, RIGHT 35 BITS + LDB N,BP ;GET THIS BYTE + JUMPE N,ALLOC1 ;IF ITS FREE MAY USE IT. +ALCN2: CAILE LBN,1 ;GONE ALL THE WAY TO THE FRONT? + SOJA LBN,ALCL2 ;NO, LOOK FURTHER + JRST ALLOCT ;YES. MUST TURN ALLOCATOR AROUND + +ALLOC1: MOVE N,PRVLBN ;HAVE A FREE ONE. WANT IT? + SUBI N,0(LBN) ;FIND DISTANCE FROM LAST ONE + MOVMS N ;WHICHEVER DIRECTION + CAIGE N,BLKFAC ;IS IT FAR ENOUGH AWAY? + TLNE F,L.TURN ;OR ARE WE TURNING ALLOCATOR AROUND? + JRST ALLOCY ;YES. USE THIS ONE. + JRST ALLOCP ;NO. PROCEED TO ANOTHER BLOCK + +ALLOCY: DPB FN,BP ;PUT THIS FILE NUMBER IN THE BLOCK'S BYTE + MOVEM LBN,PRVLBN ;SAVE AS PREVIOUS BLOCK ALLOCATED + JRST CPOPJ1 ;AND RETURN WITH LBN SET UP + ;TTY I/O SUBRS + +ERROR: MOVEI C,207 ;MAKE A BELL, EVEN PARITY + PUSHJ P,TYO ;TYPE IT OUT + JRST GO ;AND RESTART. + +CRLF: MOVEI C,215 ;CR, EVEN + PUSHJ P,TYO ;TYPE IT. + MOVEI C,12 ;LF, EVEN +TYO: DATAO TTY,C ;SEND OUT CHAR + CONSZ TTY,20 ;WAIT FOR IDLE + JRST .-1 ; .. + POPJ P,0 ;DONE. + +SIXOUT: MOVEI C,0 ;SO DONT SHIFT IN JUNK + ROTC B,6 ;GET A SIXBIT CHAR IN C + ADDI C,40 ;MAKE IT ASCII + PUSHJ P,TYO ;TYPE IT + JUMPN B,SIXOUT ;IF ANY MORE, TYPE THEM + POPJ P,0 ;AND RETURN + ;CONSTANTS AND TEMPS. + +SYSTEM: SIXBIT /SYSTEM/ ;DEFAULT FILENAME +CRASH: SIXBIT /CRASH/ ;DEFAULT DUMP NAME +DBUFP: XWD -177,DBUF+1 ;POINTER TO DATA BLOCK +BLTXWD: XWD 40,41 ;FOR CORE-CLEARING +SIXPTR: XWD 440600,W ;POINTER FOR SIXBIT NAME +BYTPTR: POINT 5,HBUF+D.BYT ;POINTER TO BYTES IN DIRECTORY +SWPTR: POINT 6,SWITCH,5 ;POINTER TO FIRST SWITCH CHARACTER + +LIT + +UU(PDL,PDLL) ;STACK +PDP: XWD -PDLL,PDL-1 ;STACK POINTER + +UU(ZZMAX,0) + +SLOP==576-<.-GO> ;MUST BE POSITIVE IF WANT + ;THIS TO FIT IN BLKS 0,1,2 OF DTA + ;THREE BLOCKS INCLUDING HRI BLKI WD AND JRST WD + END GO + \ No newline at end of file diff --git a/src/dtboot.rno b/src/dtboot.rno new file mode 100644 index 0000000..745eee9 Binary files /dev/null and b/src/dtboot.rno differ diff --git a/src/errcon.mac b/src/errcon.mac index 84abe72..b0343e8 100644 --- a/src/errcon.mac +++ b/src/errcon.mac @@ -397,7 +397,6 @@ EXTERN OUTCHS JRST OUTCHS ;AND OUTPUT IN SCNSRF > IFE FTTTYSER,< - IDPB TAC,DAT ;ADD CHAR TO HALGF DUPLEX OUTPUT STREAM POPJ PDP, > @@ -437,4 +436,4 @@ IFE FTTTYSER,< ERREND: END - \ No newline at end of file + diff --git a/src/ft40db.mac b/src/ft40db.mac index d724593..baf55d5 100644 --- a/src/ft40db.mac +++ b/src/ft40db.mac @@ -1,34 +1,34 @@ -;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DB.MAC(V003) - XLIST -; TH/RC TS3.19 24 SEP 68 V002 -;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY -;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT - -FTSWAP=0 ;SWAPPING SYSTEM - ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 - -FTDISK=-1 ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING) - ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1 - ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 - -FTLOGIN=-1 ;LOGIN-LOGOUT COMMAND AND UUOS - ;FTDISK=-1 IMPLIES FTLOGIN=-1 - -FTCCL=-1 ;CONCISE COMMAND LANGUAGE COMMANDS - ;USED IN APRSER - ;SHOULD BE 0 IN NON-DISK SYSTEMS - ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED - - -FTRC10=-1 ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK - -FTKCT=0 ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER - -FTPRV=0 ;PRIVILEGE BITS FOR EACH USER - -FTGETTAB=0 ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES - -;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS -;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING - - LIST +;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DB.MAC(V003) + XLIST +; TH/RC TS3.19 24 SEP 68 V002 +;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY +;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT + +FTSWAP=0 ;SWAPPING SYSTEM + ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 + +FTDISK=-1 ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING) + ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1 + ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 + +FTLOGIN=-1 ;LOGIN-LOGOUT COMMAND AND UUOS + ;FTDISK=-1 IMPLIES FTLOGIN=-1 + +FTCCL=-1 ;CONCISE COMMAND LANGUAGE COMMANDS + ;USED IN APRSER + ;SHOULD BE 0 IN NON-DISK SYSTEMS + ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED + + +FTRC10=-1 ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK + +FTKCT=0 ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER + +FTPRV=0 ;PRIVILEGE BITS FOR EACH USER + +FTGETTAB=0 ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES + +;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS +;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING + + LIST diff --git a/src/ft40dd.mac b/src/ft40dd.mac index d0e6f10..def8c7d 100644 --- a/src/ft40dd.mac +++ b/src/ft40dd.mac @@ -1,33 +1,33 @@ -;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DD.MAC(V003) - XLIST -; TH/RC TS3.19 27 SEP 68 V002 -;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY -;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT - -FTSWAP=0 ;SWAPPING SYSTEM - ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 - -FTDISK=-1 ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING) - ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1 - ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 - -FTLOGIN=-1 ;LOGIN-LOGOUT COMMAND AND UUOS - ;FTDISK=-1 IMPLIES FTLOGIN=-1 - -FTCCL=-1 ;CONCISE COMMAND LANGUAGE COMMANDS - ;USED IN APRSER - ;SHOULD BE 0 IN NON-DISK SYSTEMS - ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED - -FTRC10=0 ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK - -FTKCT=0 ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER - -FTPRV=0 ;PRIVILEGE BITS FOR EACH USER - -FTGETTAB=0 ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES - -;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS -;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING - - LIST +;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DD.MAC(V003) + XLIST +; TH/RC TS3.19 27 SEP 68 V002 +;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY +;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT + +FTSWAP=0 ;SWAPPING SYSTEM + ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 + +FTDISK=-1 ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING) + ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1 + ;IF FTSWAP=-1, THEN FTDISK MUST BE -1 + +FTLOGIN=-1 ;LOGIN-LOGOUT COMMAND AND UUOS + ;FTDISK=-1 IMPLIES FTLOGIN=-1 + +FTCCL=-1 ;CONCISE COMMAND LANGUAGE COMMANDS + ;USED IN APRSER + ;SHOULD BE 0 IN NON-DISK SYSTEMS + ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED + +FTRC10=0 ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK + +FTKCT=0 ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER + +FTPRV=0 ;PRIVILEGE BITS FOR EACH USER + +FTGETTAB=0 ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES + +;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS +;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING + + LIST diff --git a/src/ft50sb.mac b/src/ft50sb.mac index 12a1242..8e6aca4 100644 --- a/src/ft50sb.mac +++ b/src/ft50sb.mac @@ -31,4 +31,3 @@ FTGETTAB=-1 ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES ;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING LIST - diff --git a/src/onceb.mac b/src/onceb.mac index 0ad5215..89b786d 100644 --- a/src/onceb.mac +++ b/src/onceb.mac @@ -58,6 +58,7 @@ IFN FT2REL,< CONSO APR,NXM ;NON-EXISTENT? SOJG TAC, .-3 ;NO,KEEP LOOKING AS LONG AS NOT TOP OF MEMORY SUBI DAT,700 ;MAKE ROOM FOR TENDUMP AT TOP OF CORE + JSR MOVSTP ;MOVE DDT SYMBOL TABLE POINTER TO LOWER CORE ; (DDTSYM=36) WHERE EXEC DDT EXPECTS IT. ; IF NOT ALREADY MOVED THERE. RETURN POINTER IN UUO HLRE TAC1,UUO ;-LENGTH OF S. T. @@ -112,7 +113,6 @@ IFN FTDISK,< ;INITIALIZE DISK EXTERN NULPDL,DSKINI - MOVEI PDP,NULPDL PUSHJ PDP,DSKINI ;INITIALIZE THE DISK ; AFTER SETTING UP CHANNEL LOC @@ -150,6 +150,7 @@ UUOTRP: JSR UUO0 ;TO UUO HANDLER 0 ;LOC 60/61 TRAPPED TO FOR UNIMPLEMENTED OP CODES ON PDP-10 ;OP CODE 100 IS USED TO DISMISS USER MODE INTERRUPTS(SEE TRPSET UUO) JSR UUO2 ;GO SEE IF OP CODE 100 OR SOME OTHER ONE + IFN FT2REL,< ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN @@ -184,6 +185,7 @@ TSTAPR: 0 ;PLACE TO SIDE JSR PC MOVNI TAC,SEGN ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES HRLI TAC,JOBN ;SET RH OF POINTER TO FIRST HIGH SEG ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST + ; WHICH BUILD FORBITS FROM HAVING EXTERNALS MOVSM TAC,SEGPTR ;POINTER USED FOR AOBJN LOOPS CONO PI,10000 ;CLEAR PI SYSTEM @@ -202,14 +204,14 @@ TSTAPR: 0 ;PLACE TO SIDE JSR PC ; 2. JUNK JUNK(NON-NEG) S.T.PTR ; 3. S.T.PTR S.T.PTR JUNK -;CALL: JSP MOVSTR +;CALL: JSP MOVSTP ; RETURN WITH AC UUO SET TO SYMBOL TABLE POINTER ;CALLED FROM MANDATORY ONCE ONLY CODE AND 141 START CODE(WHICHEVER OCCURS FIRST) - INTERN MOVSTR + INTERN MOVSTP EXTERN T30SYM,JOBSYM,DDTSYM,DDTX,SYSDDT -MOVSTR: 0 ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND +MOVSTP: 0 ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND ; FIRST JUMP TO EXEC DDT IF BEFORE MONITOR STARTED MOVJMP: JRST .+1 ;PATCHED TO SETUUO AFTER FIRST EXECUTION MOVE UUO,T30SYM ;ASSUME LOADED BY REGULAR 10/30 @@ -228,14 +230,14 @@ REGT30: MOVEM UUO,DDTSYM ;STORE THE SYMBOL TABLE POINTER FOR EXEC DDT SETUUO: MOVE UUO,DDTSYM ;RETURN THE CORRECT(MAYBEUPDATED IF ; EXEC DDT PATCHES MADE BEFORE MONITOR SAVED OR ; STARTED) SYMBOL TABLE POINTER - JRST @MOVSTR ;RETURN + JRST @MOVSTP ;RETURN ;HERE IF EXEC DDT IS STARTED UP BEFORE MONITOR(TO MAKE A PATCH FOR EXAMPLE) INTERN PATSYM EXTERN DDTX -PATSYM: JSR MOVSTR ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL +PATSYM: JSR MOVSTP ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL ; FIND IT AND PATCH 141 TO GO DIRECTLY TO EXEC DDT JRST DDTX ;AND GO DIRECTLY TO EXEC DDT @@ -349,7 +351,6 @@ TIMLOP: SETZM TIME JRST TIMLOP ;ILLEGAL CHARACTER MOVE TAC,TAC1 IDIVI TAC,^D100 ;TAC=HRS.TAC1=MINS - SKIPL TAC ;HRS NEGATIVE? CAILE TAC,^D23 ;OR .G. 23? JRST TIMLOP ;OUT OF BOUNDS @@ -378,7 +379,7 @@ IFN FT2REL,< MOVEI TAC,2 PUSHJ PDP,RADX10 ;NO. SECOND REG EXISTS. PUSHJ PDP,INLMES - ASCIZ /RELOC. REG. + ASCIZ / RELOC. REG. / PUSHJ PDP,OPOUT > @@ -396,7 +397,7 @@ CONFLP: SKIPN AC1,INTTB1(PROG) ;INT LOC HAVE DEV DATA BLOCK? ASCIZ / / HLLZ TAC1,DEVNAM(AC1) ;DEVICE NAME PUSHJ PDP,PRNAME ;PRINT IT - SOJLE UUO,SINGLE ;IS THIS JUST A SIGNLE DEVICE? + SOJLE UUO,SINGLE ;IS THIS JUST A SINGLE DEVICE? PUSHJ PDP,INLMES ;NO, APPEND 'S TO DEVICE NAME ASCIZ /'S/ SINGLE: PUSHJ PDP,CRLF ;PRINT CR LF @@ -687,7 +688,7 @@ IFE FTTTYSER,< MOVE TAC,LINEP ;RESET BYTE POINTER> DELETE: IFN FTTTYSER,< PUSHJ PDP,DCPUTR JRST DELET1> IFE FTTTYSER,< - JUMPE ITEM,DELET1 ;AT BEGINNING OF LINE?> + JUMPE ITEM,DELET1 ;AT BEGINNING OF LINE? ADD TAC,[XWD 070000,0] ;NO, BACK UP BYTE POINTER TLNE TAC,400000 ;FINISHED THIS WORD YET? ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS> @@ -799,7 +800,7 @@ LINBUF: BLOCK 30 ;MESSAGES -TSEXEC: ASCIZ /MONITOR JUST LOADED +TSEXEC: ASCIZ / MONITOR JUST LOADED / TODATE: ASCIZ / TYPE TODAY'S DATE AS MM-DD-YY @@ -921,7 +922,7 @@ IFE FTRC10, < IFN FTRC10, < HRRZ TAC,SATPTR -SETS5X: CAIL TAC,SATTOP +SETS5X: CAIL TAC,SATTOP JRST SAT05 ;EXIT FROM DFWUNS BACK TO DSKINI IN DSKSER........ ADDI TAC,SENTSZ MOVEI TAC1,411000 ;ON THE NEW PDP-10 DISK SYSTEM SET THE SAT ENTRY @@ -1540,7 +1541,7 @@ CPCT2: SUBI TAC,1 POP PDP,LBHIGH ;RESTORE PREVIOUSLY EXISTING VALUE OF THE HIGHEST ; LEGAL LOGICAL DISK BLOCK NUMBER. POPJ PDP, ;***SUBROUTINE EXIT***....... -i + CPCT3: POP PDP,TAC CONSZ DSK,NRDY ;NON-EXISTENT DISK? @@ -1594,7 +1595,7 @@ WRLK9: PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE WRLKM1: ASCIZ /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK. / WRLKM2: ASCIZ /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND -DIS WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN", +DISK WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN", FIX THEM ! ! / diff --git a/src/scnsrf.mac b/src/scnsrf.mac index 37d1861..56a0e9e 100644 --- a/src/scnsrf.mac +++ b/src/scnsrf.mac @@ -165,6 +165,7 @@ INTERNAL T35,T37,FULTWX,LGLSET,KILMSK,XON LINE=TAC1 ;SCANNER LINE NUMBER HPOS=ITEM ;HORIZONTAL POSITION OF TTY,(0-71) + ;SPECIAL SYMBOLS PION=200 ;TURN PI ON BIT @@ -173,8 +174,10 @@ INTERNAL T35,T37,FULTWX,LGLSET,KILMSK,XON IDLECH=1 ;DELAY CHAR FOR TABS, ETC, ; SHOULD BE ^V, BUT FOR 37'S + ;BYTE POINTERS + INTERNAL TPCJOBN,TYPX,FULTWX,TYPE,TAKR,BREAKB PHPOS: POINT 7,DEVIAD(DEVDAT),12 ;HORIZONTAL POSITION @@ -254,6 +257,7 @@ SCN3: HRRM TAC,LINTAB(TAC1) ;SET LOG. LINE NUMBERS HLLM TAC,LINTAB(TAC1) ;LEAVING REST OF BITS AS THEY WERE AOBJN TAC1,SCN2 POPJ PDP, + ;ROUTINES TO SET UP BUFFERS INTERNAL TSETBF,SETBFI,PUTCHI @@ -276,6 +280,7 @@ SETBF0: MOVE TAC,BUF(DAT) MOVEM TAC,PCTR(DAT) HLRZ TAC,BUF(DAT) ;CHARACTER COUNT MOVEM TAC,FCTR(DAT) ;UPDATE FREE CHARACTER COUNT + POPJ PDP, ;ROUTINE TO PUT A CHARACTER INTO A BUFFER (FOR INPUT,MERTPO, AND ONCE) ;CALL MOVEI DAT,TTYBUF(DDB) ;TO SPECIFY BUFFER @@ -336,6 +341,7 @@ GETCH1: TDZA CHREC,CHREC ;RETURN 0 INDICATING END OF BUFFER PUTCI0: AOS FCTR(DAT) ;READJUST FREE COUNTER POPJ PDP, + ;ROUTINE TO PLACE A CHARACTER INTO THE OUTPUT BUFFER ;CALLED AT INTERRUPT LEVEL ;CALL MOVE CHREC,CHARACTER TO PLACE INTO BUFFER @@ -502,7 +508,7 @@ DDTOUT: PUSHJ PDP,TTYFNU DDT5: MOVSI IOS,IO+DDTM IORB IOS,DEVIOS(DDB) HRLI UUO,PROG ;POINT TO USER AC - HRRI UUO,-1(PROG) ;COMPENSATE FOR GETWD1 + HRRI UUO,-1(UUO) ;COMPENSATE FOR GETWD1 DDT2: MOVE DAT,[XWD 440700,TAC] ;BYTE POINTER TO TAC PUSHJ PDP,GETWD1 ;GET THE USER'S WORD DDT3: TLNN DAT,760000 ;ANY CHARS LEFT? @@ -593,7 +599,7 @@ OUTC1A: ;HERE ON OUTPUT OF SLOW CHARS TO SMART TTY ;TO ADJUST HPOS FOR OUTPUT OF CHREC ;SKIPS IF SPCHECK SAYS SPECIAL CHAR -ADJHP: CAIL CHREC,174 ;HIGH SPECIALS? +ADJHP: CAILE CHREC,174 ;HIGH SPECIALS? JRST SPCHEK ;YES, NO HPOS MOTION CAIL CHREC,40 ;CONTROL CHARACTERS? AOJA HPOS,SPCHEK ;NO. COUNT HPOS FOR PRINT CHAR @@ -1204,11 +1210,13 @@ INTERNAL TTYFNU,TTYFND,TTYERP EXTERNAL JOB + TTYFNU: MOVE ITEM,JOB TTYFND: PUSHJ PDP,TTYSRC TTYDAT: MOVEI DAT,TTOBUF(DDB) POPJ PDP, + ;PUT JOB IN IO WAIT IF TTY BUFFER NOT EMPTY ;CALLED BY NON ERROR MESSAGE ROUTINES AT UUO LEVEL @@ -1392,7 +1400,6 @@ TTYTLK: PUSHJ PDP,GETDDB ;IN CASE NOT SET UP POPJ PDP, MOVE IOS,DEVIOS(DEVDAT) ;IS TTY IN MONITOR MODE AND LEFT HAND MARGIN? MOVE TAC1,-3(PDP) ;TTY GIVING TALK COMMAND - MOVE TAC1,DEVNAM(TAC1) ;ITS NAME MOVE TAC,DEVNAM(DEVDAT) ;OPR IS NEVER TOO BUSY... CAME TAC1,DEVOPR ;EITHER ONE OPR? @@ -1629,7 +1636,6 @@ XMTIN4: MOVEI IOS,MERTPO ;OTHERWISE, DDB ONLY USED TO TYPE A JRST TTYKIL ;MESSAGE; KILL TTY DDB - XMTIN2: CONO PI,PION PUSHJ PDP,GETCHR ;NO, GET NEXT CHAR. IN BUFFER JUMPE CHREC,XMTIN1 ;IGNORE NULLS @@ -1762,7 +1768,6 @@ RUBOU2: PUSHJ PDP,RUBOU4 ;NOT A BREAK AFTER ALL AOJDPX: AOJA HPOS,DUPLX1 ;OUTPUT AND COUNT HPOS RUBOU1: TLZE LINE,ROBTPD ;END OF INPUT STREAM REACHED - PUSHJ PDP,BSECHO ;OUTPUT A BACKSLASH JRST CRLFEC ;AND A CR LF @@ -1777,6 +1782,7 @@ SIMFF1: PUSHJ PDP,DUPLX1 ;OUTPUT ECHO OF LF OR IDL TRNE TAC,17 ;DONE YET? SOJA TAC,.-2 ;NO. OUTPUT MORE POPJ PDP,0 ;DONE + SIMFF: TLO TAC,ECHSUP ;DON'T OUTPUT FF OR VT TO A 33 PUSHJ PDP,TTIPUT ;PUT IT IN BUFFER MOVEI CHREC,12 ;SIMULATE WITH LF'S @@ -2015,7 +2021,6 @@ DDBSRC: HRRZ TAC,LINE ;NUMBER OF LINE ONLY HLRZ DEVDAT,DEVSER(DEVDAT) ;CHAIN THRU DDBS TDNE TAC,DEVMOD(DEVDAT) ;USE,ATTACH OR ASSIGN BITS ON? AOBJN IOS,.-2 ;YES. DONE? - JUMPGE IOS,CPOPJ ;YES. DEVICE DATA BLOCK FOUND? MOVSI TAC,TOIP ;CLEAR TOIP IN DDB ANDCAM TAC,TTYPTR(DDB) ;IN CASE OF PREVIOUS DETACH