TITLE 11STNK - STINKING ODOR OF PDP11'S ;ALSO TIMESHARING BOOT11 COMMAND IF1 EXPUNGE MAP ;FUCK YOU CRISPIN APR==0 A=1 B=2 C=3 D=4 E=5 T=6 TT=7 H=10 I=11 J=12 Q=13 W=14 P=17 DLB==60 DLC==64 PAG==10 SWPUA=701540,, 11CORL==28.*1024. ;# WORDS OF PDP11 CORE INCH==1 OUCH==2 TYIC==3 TYOC==4 ERRCH==5 OPENI: SETZ SIXBIT/OPEN/ [.UII,,INCH] 0(Q) 2(Q) 3(Q) SETZ 1(Q) OPENO: SETZ SIXBIT/OPEN/ [.BIO,,OUCH] 0(Q) 2(Q) 3(Q) SETZ 1(Q) ;FILE NAME BLOCKS. CONTAIN INITIAL DEFAULTS ;DEV SNM FN1 FN2 RUGFN: SIXBIT/DSK/ SIXBIT/./ SIXBIT/KLRUG/ SIXBIT/BIN/ DDTFN: SIXBIT/DSK/ SIXBIT/./ SIXBIT/11DDT/ SIXBIT/16K/ PRGFN: SIXBIT/DSK/ SIXBIT/./ SIXBIT/IOELEV/ SIXBIT/BIN/ DMPFN: SIXBIT/DSK/ 0 SIXBIT/FOO/ SIXBIT/BIN/ LPDL==50 PDL: -LPDL,,. BLOCK LPDL ;COMMAND TABLE ;1ST WD - SIXBIT NAME OF COMMAND (FIRST LETTER MUST BE UNIQUE) ;2ND WD - (LH) 0 IF NO FILE NAME ELSE POINTER TO FILE NAME BLOCK ; - (RH) DISPATCH ADDRESS ;3RD WD - POINTS TO ASCIZ HELP STRING COMTAB: SIXBIT/RUG/ ? RUGFN,,RUGLD ? [ASCIZ/LOAD RUG/] SIXBIT/DDT/ ? DDTFN,,DDTLD ? [ASCIZ/LOAD 11DDT/] SIXBIT/LOAD/ ? PRGFN,,PRGLD ? [ASCIZ/LOAD A PROGRAM/] SIXBIT/MAP/ ? 0,,MAP ? [ASCIZ/PRINT CORE MAP/] SIXBIT/ADUMP/ ? DMPFN,,ADUMP ? [ASCIZ/DUMP IN PALX BIN FORMAT/] SIXBIT/BDUMP/ ? DMPFN,,BDUMP ? [ASCIZ/DUMP IN KLDCP BIN FORMAT/] SIXBIT/TDUMP/ ? DMPFN,,TDUMP ? [ASCIZ/DUMP AS DL10 BOOTSTRAP PROGRAM/] SIXBIT/STUFF/ ? 0,,STUFF ? [ASCIZ/STUFF INTO PDP11/] SIXBIT/HELP/ ? 0,,HELP ? [ASCIZ/ /] SIXBIT/?/ ? 0,,HELP ? [ASCIZ/ /] LCMTAB==.-COMTAB HELP: PUSHJ P,CRLF MOVE A,[-LCMTAB/3,,COMTAB] HELP1: MOVE TT,(A) PUSHJ P,SIXOUT MOVEI TT,[ASCIZ/ (FILENAME)/] MOVE T,1(A) TLNE T,-1 PUSHJ P,ASCOUT MOVEI TT,[ASCIZ/ - /] PUSHJ P,ASCOUT MOVE TT,2(A) PUSHJ P,ASCOUT PUSHJ P,CRLF ADDI A,2 AOBJN A,HELP1 POPJ P, ;SIXBIT OUTPUT FROM TT SIXOUT: MOVEI T,0 LSHC T,6 ADDI T,40 .IOT TYOC,T JUMPN TT,SIXOUT CPOPJ: POPJ P, CRLF: MOVEI TT,[ASCIZ/ /] ;ASCIZ OUTPUT FROM TT ASCOUT: HRLI TT,440700 ASCOU1: ILDB T,TT JUMPE T,CPOPJ .IOT TYOC,T JRST ASCOU1 ;OCTAL OUTPUT FROM T OCTOUT: IDIVI T,8 HRLM TT,(P) SKIPE T PUSHJ P,OCTOUT HLRZ TT,(P) ADDI TT,"0 .IOT TYOC,TT POPJ P, ;READ SYLLABLE FROM TTY ;RETURN SIXBIT IN TT, DELIMITER IN A GETSYL: MOVEI TT,0 MOVE T,[440600,,TT] GETSY1: .IOT TYIC,A CAIE A,^G CAIN A,177 JRST CMDER ;RUBOUT - ERR BACK TO COMMAND LEVEL CAIE A,": CAIN A,"; POPJ P, CAIG A,40 POPJ P, CAIGE A,140 SUBI A,40 TLNE T,770000 IDPB A,T JRST GETSY1 ;FILE NAME READER ;CALL WITH Q -> FILE NAME BLOCK. ;SUPPORTS ALTMODE, ^X, ^Y FNR: MOVEI TT,[ASCIZ/ (FILENAME) /] PUSHJ P,ASCOUT SKIPN 1(Q) .SUSET [.RSNAM,,A] SKIPN 1(Q) MOVEM A,1(Q) FNR0: SETZB B,C ;B,C,D,E = DEV,SNM,FN1,FN2 SETZB D,E FNR1: PUSHJ P,GETSYL JUMPE TT,FNR2 CAIN A,": JRST [ MOVEM TT,B ? JRST FNR2 ] CAIN A,"; JRST [ MOVEM TT,C ? JRST FNR2 ] FNR1A: SKIPE D SKIPA E,TT MOVE D,TT FNR2: CAIL A,40 JRST FNR1 CAIE A,33 JRST FNR3 PUSHJ P,FNRST ;ALTMODE, SHOW CURRENT NAME PUSHJ P,CRLF PUSHJ P,FNRALT JRST FNR0 FNRALT: IRPC ZZ,,[:;X ] MOVE TT,.IRPCNT(Q) PUSHJ P,SIXOUT IFSE [ZZ]X,.IOT TYOC,[40] .ELSE [ MOVEI TT,[ASCIZ/ZZ /] ? PUSHJ P,ASCOUT ] TERMIN FNR3: CAIE A,^X JRST FNR4 MOVE TT,2(Q) MOVEI A,40 JRST FNR1A FNR4: CAIE A,^Y JRST FNRST MOVE TT,3(Q) MOVEI A,40 JRST FNR1A FNRST: REPEAT 4,[ SKIPE B+.RPCNT MOVEM B+.RPCNT,.RPCNT(Q) ] POPJ P, GO: MOVE P,PDL .OPEN TYIC,[.UAI,,'TTY] .VALUE .OPEN TYOC,[.UAO,,'TTY] .VALUE MOVE TT,[.FNAM1] PUSHJ P,SIXOUT .IOT TYOC,[".] MOVE TT,[.FNAM2] PUSHJ P,SIXOUT PUSHJ P,CRLF MOVSI A,-1 ;LH -1 IF LOC NOT STORED INTO MOVEM A,11CORE MOVE A,[11CORE,,11CORE+1] BLT A,11CORE+11CORL-1 .SUSET [.RXJNAME,,A] ;See if this is BOOT11 CAME A,[SIXBIT/BOOT11/] JRST CMD ;No, take 11STNK commands MOVEI Q,DDTFN ;Yes, load .;11DDT 16K PUSHJ P,DDTLD MOVEI Q,PRGFN ;and .;IOELEV BIN PUSHJ P,PRGLD MOVEI TT,[ASCIZ/Stuff/] PUSHJ P,ASCOUT PUSHJ P,STUFF ;ask user then stuff it .LOGOUT 1, ;go away if user types N CMD: MOVE P,PDL .IOT TYOC,["*] .IOT TYIC,A CAIGE A,40 JRST CMDER CAIGE A,140 SUBI A,40 ANDI A,77 MOVE B,[-LCMTAB/3,,COMTAB] CMD1: LDB T,[360600,,(B)] CAMN T,A JRST CMD2 ADDI B,2 AOBJN B,CMD1 CMDER: MOVEI TT,[ASCIZ/??? /] PUSHJ P,ASCOUT JRST CMD CMD2: MOVE TT,(B) ;COMPLETE THE COMMAND NAME LSH TT,6 PUSHJ P,SIXOUT HLRZ Q,1(B) ;GET FILE NAME ARG IF NECC HRRZ H,1(B) JUMPE Q,CMD3 PUSHJ P,FNR CMD3: PUSHJ P,(H) JRST CMD FSERR: .OPEN ERRCH,[.UAI,,'ERR ? 1 ? 0] .VALUE FSERR1: .IOT ERRCH,A JUMPL A,FSERR2 CAIGE A,40 JRST FSERR2 .IOT TYOC,A JRST FSERR1 FSERR2: MOVEI TT,[ASCIZ/ - /] PUSHJ P,ASCOUT PUSHJ P,FNRALT PUSHJ P,CRLF JRST CMD DDTLD: SETZM RUGFLG .CALL OPENI ;LOAD 11DDT JRST FSERR PUSHJ P,ALOAD MOVEM W,RUGSA LSH W,-1 MOVEI A,11CORE-2(W) ;-> WORD IN WHICH TO STORE START ADDRESS MOVEM A,SASTOR MOVEI A,11CORE-1(W) ;-> WORD TO CONTAIN LOWEST -11 ADDR OF SYMBOL TABLE MOVEM A,O.SYME MOVE A,(A) ;SET UP CURRENT CONTENTS LSH A,-1 MOVEM A,RUGSYM MOVEI A,-2(W) ;-11 ADDR/2 OF HIGHEST SYMBOL TABLE LOC JRST RUGLD1 ;FROM HERE ON WORKS LIKE RUG RUGLD: SETOM RUGFLG .CALL OPENI ;LOAD RUG JRST FSERR PUSHJ P,ALOAD LSH W,-1 ;START ADDR OF RUG -> VECTOR OF MAGIC CRUFT MOVE A,11CORE(W) ;FIRST WORD IS READ START ADDR (O.ODT) MOVEM A,RUGSA SETZM SASTOR ;RUG DOESN'T KNOW ABOUT PROG START ADDR MOVEI A,11CORE+2(W) ;-> WORD TO CONTAIN LOWEST -11 ADDR OF SYMBOL TABLE MOVEM A,O.SYME MOVE A,11CORE+2(W) ;THIRD WORD IS POINTER TO LOWEST SYMBOL TABLE LOC LSH A,-1 MOVEM A,RUGSYM MOVE A,11CORE+1(W) ;SECOND WORD -> HIGH SYMBOL TABLE LOC LSH A,-1 RUGLD1: SUB A,RUGSYM ;A := # WORDS OF SYMBOL TABLE IDIVI A,16.*3+2 ;A := # BLOCKS, B := # WORDS IN LAST BLOCK JUMPE B,G0001 MOVE A,RUGSYM ADD A,B ;A := WORD ADDR OF TOP OF BLOCK SUBI A,2 MOVEM A,FLGPNT SUBI B,2 IDIVI B,3 ;B := # SYMBOLS ALREADY USED IN BLOCK SUBI B,16. G0001: MOVNM B,SYMCNT ;SET # OF SYMBOLS YET TO GO MOVE A,@O.SYME MOVEM A,SYMLO ;INITIAL LOW SYMBOL ADDR (FOR MAP) .CLOSE INCH, MOVE A,PRGHI MOVEM A,RUGHI SETZM PRGHI POPJ P, PRGLD: .CALL OPENI ;LOAD IOELEVEN JRST FSERR PUSHJ P,ALOAD MOVEM W,SADR ;STORE START ADDR INTO 10 MOVEM W,@SASTOR ;STORE START ADDR INTO 11 PUSHJ P,SLOAD ;LOAD SYMBOLS INTO CORE IMAGE FOR RUG .CLOSE INCH, POPJ P, ;CORE LOADER ALOAD: .IOT INCH,A ;SEARCH FOR START OF BLOCK JUMPE A,ALOAD ;SKIPPING "BLANK TAPE" CAIE A,1 .VALUE ;UNKNOWN BLOCK TYPE .IOT INCH,A ;SECOND BYTE OF HEADER ALWAYS 0 SKIPE A .VALUE PUSHJ P,RWORD ;BYTE COUNT + 6 HRREI Q,-6(W) PUSHJ P,RWORD ;LOAD ADDRESS JUMPLE Q,JBLK LD1: .IOT INCH,A ;BYTE TO BE LOADED TDNE A,[-400] .VALUE CAIL W,11CORL*2 .VALUE CAMLE W,PRGHI MOVEM W,PRGHI MOVEI J,2*11CORE(W) ;FIGURE OUT WHERE IT GOES ROT J,-1 SKIPL J TLOA J,001000 HRLI J,101000 DPB A,J HRRZS @J ;MARK THIS WORD AS STORED INTO ADDI W,1 SOJG Q,LD1 .IOT INCH,A ;IGNORE CHECKSUM JRST ALOAD JBLK: .IOT INCH,A ;GOBBLE CHECKSUM JUMPE Q,CPOPJ ;RETURN FROM ALOAD WITH START ADDR IN W .VALUE ;BLOCK LENGTH < 6 ? RWORD: .IOT INCH,W ;FORM TWO BYTES INTO A WORD TDNE W,[-400] .VALUE .IOT INCH,A TDNE A,[-400] .VALUE LSH A,8 IOR W,A POPJ P, ;SYMBOL LOADER SBTB: 440600,,A ;SIXBIT BYTE POINTER TO A RAD50: MOVE Q,SBTB PUSHJ P,LOOP50 HRRZM E,11CORE-3(B) PUSHJ P,LOOP50 HRRZM E,11CORE-2(B) POPJ P, LOOP50: MOVEI E,0 MOVEI D,3 LOP50: ILDB C,Q PUSHJ P,CNVT IMULI E,50 ADD E,C SOJG D,LOP50 POPJ P, CNVT: CAIL C,41 CAILE C,72 JRST NOTLET SUBI C,40 POPJ P, NOTLET: CAIN C,4 JRST DOLR CAIN C,5 JRST PRCNT CAIN C,16 JRST PERD CAIG C,31 CAIGE C,20 JRST NOTNUM ADDI C,16 POPJ P, NOTNUM: MOVEI C,0 POPJ P, DOLR: MOVEI C,33 POPJ P, PERD: MOVEI C,34 POPJ P, PRCNT: MOVEI C,35 POPJ P, SLOAD: .IOT INCH,A ;LOAD SYMBOLS JUMPE A,SLOAD ;SKIP BLANK TAPE CAIE A,2 .VALUE ;NOT SYMBOLS BLOCK MOVE B,RUGSYM ;LOAD SYMBOLS AT -3(B),-2(B),-1(B) MOVE H,SYMCNT ;# SYMBOLS YET TO GO IN THIS BLOCK MOVE A,FLGPNT HRLZ I,11CORE+1(A) ;PICK UP REGISTER FLAGS WORD HRR I,11CORE(A) ;PICK UP HALF-KILL FLAGS WORD JUMPN H,SLOAD1 SLOAD0: MOVEI H,16. ;NEW BLOCK MOVE B,RUGSYM SUBI B,2 MOVEM B,RUGSYM MOVEM B,FLGPNT SETZB I,11CORE(B) SETZM 11CORE+1(B) SLOAD1: .IOT INCH,A JUMPE A,SLOADE AOJE A,SLOADE SOS A PUSHJ P,RAD50 ;DEPOSIT 2 -11 WORDS OF RADIX 50 FOR THIS SIXBIT .IOT INCH,A ;GET FLAGS AND VALUE HRRZM A,11CORE-1(B) ;STORE VALUE MOVEI D,100000 MOVNI E,-1(H) ;E IS 0 FOR LOWEST SYM IN BLOCK, -15. FOR HIGHEST LSH D,(E) ;POINT TO RIGHT BIT IN FLAG TLNE A,4000 TLO I,(D) ;2ND FLAG WORD TLNE A,20000 TRO I,(D) ;1ST FLAG WORD SUBI B,3 SOJG H,SLOAD1 MOVE A,FLGPNT ;BLOCK DONE, FILL OUT HLRZM I,11CORE+1(A) HRRZM I,11CORE(A) MOVEM B,RUGSYM JRST SLOAD0 ;START NEXT BLOCK SLOADE: MOVE A,FLGPNT ;FINISH LAST BLOCK HLRZM I,11CORE+1(A) HRRZM I,11CORE(A) MOVEM B,RUGSYM LSH B,1 MOVEM B,@O.SYME ;TELL RUG WHERE SYMBOL TABLE ENDS MOVEM B,SYMLO POPJ P, RUGSYM: 0 ;WORD ADDR OF LOWEST LOC IN RUG SYMBOL TABLE FLGPNT: 0 ;WORD ADDR OF FLAG PAIR FOR CURRENT SYM BLOCK SYMCNT: 0 ;NUMBER OF SYMBOLS NOT YET GENERATED INTO CURRENT BLOCK O.SYME: 0 ;-> WORD IN -11 CORE IMAGE WHICH CONTAINS LOWEST ;-11 ADDR USED BY SYMBOL TABLE RUGFLG: 0 ;-1 RUG, 0 11DDT SASTOR: 0 ;-> WORD IN -11 CORE IMAGE WHERE START ADDRESS IS STORED PRGHI: 0 ;HIGHEST LOC LOADED SYMLO: 0 ;LOWEST LOC LOADED WITH SYMBOLS .SEE RUGSA RUGHI: 0 ;HIGHEST LOC LOADED WITH RUG/DDT .SEE SADR MAP: PUSHJ P,CRLF IRP WD,,[PRGHI,SYMLO,RUGSA,RUGHI,SADR]NM,,[HIGHEST PROGRAM LOC,LOWEST SYMBOL LOC,START ADDRESS OF DEBUGGER,HIGHEST DEBUGGER LOC,PROGRAM START ADDRESS] MOVEI TT,[ASCIZ/NM=/] PUSHJ P,ASCOUT MOVE T,WD PUSHJ P,OCTOUT PUSHJ P,CRLF TERMIN POPJ P, ;DUMP OUT AS PDP11 ABSOLUTE BINARY ;ADUMP DUMPS ONE BYTE PER WORD, LIKE PALX ;BDUMP DUMPS FOUR BYTES PER WORD, ARRANGED IN A WAY TO CORRESPOND ;TO THE RH11. THIS FOR KLDCP '.BIN' FILES. ;I IS BYTE# FOR BDUMP, J IS BUFFER, Q IS CHECKSUM, W IS -11 ADDR BDMPNT: 221000,,J 321000,,J 001000,,J 101000,,J ADMPNT: 001000,,J PUTB: 0 ;APUTB OR BPUTB APUTB: DPB A,ADMPNT ADD Q,A APUTW: HRROI TT,J .IOT OUCH,TT APUTW1: MOVSI I,-4 MOVEI J,0 POPJ P, BPUTB: DPB A,BDMPNT(I) ADD Q,A AOBJP I,APUTW POPJ P, ADUMP: SKIPA TT,[APUTB] BDUMP: MOVEI TT,BPUTB MOVEM TT,PUTB .CALL OPENO JRST FSERR PUSHJ P,APUTW1 MOVSI W,-11CORL ADUMP1: SKIPGE 11CORE(W) ;SEARCH FOR WORD THAT'S BEEN LOADED AOBJN W,ADUMP1 JUMPGE W,DUMPJB ;ALL CORE DUMPED, DO JUMP BLOCK MOVEI H,(W) ;H := PDP11 ADDR OF FIRST WORD LSH H,1 HRLI W,-30 ;MAX BLOCK LENGTH; SCAN FOR WORD NOT LOADED ADUMP2: SKIPL 11CORE(W) AOBJN W,ADUMP2 JUMPGE W,ADUMP4 ;BLOCK MAX SIZE SKIPL 11CORE+1(W) AOBJN W,ADUMP2 ;NOT TWO ZEROES IN A ROW ADUMP4: MOVEI E,(W) ;NEXT LOCATION TO LOOK AT IS SAVED IN E MOVEI Q,0 ;INIT CKSM MOVEI A,1 ;PUT BLOCK HEADER PUSHJ P,@PUTB MOVEI A,0 PUSHJ P,@PUTB MOVE A,E LSH A,1 SUB A,H MOVE D,A ADDI A,6 PUSHJ P,DWORD ;BYTE COUNT MOVE A,H PUSHJ P,DWORD ;LOAD ADDRESS MOVE W,H LSH W,-1 LSH D,-1 MOVNS D HRL W,D ;NOW W IS AOBJN PTR TO WORDS TO DUMP ADUMP5: MOVE A,11CORE(W) PUSHJ P,DWORD AOBJN W,ADUMP5 MOVN A,Q ;PUNCH CHECKSUM PUSHJ P,@PUTB PUSHJ P,FEED MOVE W,E ;SET UP AOBJN PTR TO CORE YET TO BE DUMPED SUBI E,11CORL HRL W,E JRST ADUMP1 DUMPJB: MOVEI Q,0 MOVEI A,1 ;JUMP BLOCK PUSHJ P,@PUTB MOVEI A,0 PUSHJ P,@PUTB MOVEI A,6 PUSHJ P,@PUTB MOVEI A,0 PUSHJ P,@PUTB MOVE A,RUGSA PUSHJ P,DWORD MOVN A,Q PUSHJ P,@PUTB PUSHJ P,FEED .CLOSE OUCH, .LOGOUT 1, FEED: MOVEI A,0 ;PUNCH 8 NULL FRAMES PUSHJ P,.+1 PUSHJ P,.+1 PUSHJ P,.+1 JRST @PUTB DWORD: LDB B,[101000,,A] PUSHJ P,@PUTB MOVE A,B JRST @PUTB ;DUMP OUT AS A DL10 BOOTSTRAP PROGRAM ;THIS IS A STANDALONE PDP10 PROGRAM WHICH LOADS THE -11 ON DL10 PORT#0 TDUMP: .CALL OPENO JRST FSERR MOVSI A,-11CORL ;CHANGE -1,,0 TO 0 HRRZS 11CORE(A) ;SINCE WILL LOAD ALL -11 CORE AOBJN A,.-1 HRROI A,[JRST 1] ;WRITE SBLK FILE .IOT OUCH,A MOVEI H,BOOTST DMPLP: CAIL H,BOOTEN ;FIND NON-ZERO JRST DMPEN SKIPN (H) AOJA H,DMPLP MOVE J,H ;FIND 2 CONSECUTIVE ZEROS HRLI J,-200 ;WITHIN NEXT 200 WORDS ZERLP: SKIPE (J) AOBJN J,ZERLP JUMPGE J,DMPBLK AOBJP J,DMPBLK SKIPE (J) JRST ZERLP DMPBLK: SUBM H,J ;RH(J) := - # BLOCKS HRL H,J PUSH P,[DMPLP] HRROI A,H .IOT OUCH,A ;HEADER MOVE Q,H MOVE J,H .IOT OUCH,H ;DATA CKSLP: ROT Q,1 ADD Q,(J) AOBJN J,CKSLP HRROI A,Q .IOT OUCH,A ;CHECKSUM POPJ P, DMPEN: HRROI A,[JUMPA BOOTER] ;START ADDR .IOT OUCH,A MOVSI H,-LSYMT HRROI A,H .IOT OUCH,A ;HEADER MOVE Q,H HRRI H,SYMT MOVE J,H .IOT OUCH,H ;DATA PUSHJ P,CKSLP HRROI A,[JUMPA BOOTER] ;START ADDR AGAIN .IOT OUCH,A .CLOSE OUCH, .LOGOUT 1, CONSTANTS SYMT: SQUOZE 0,GLOBAL -LSYMT,,0 SQUOZE 4,RUG GORUG SQUOZE 4,GO BOOTER SQUOZE 4,11CORE 11CORE SQUOZE 4,SADR SADR LSYMT==.-SYMT ;HERE IS THE VERSION WHICH STUFFS THE PDP11 UNDER TIMESHARING DLB==60 ? ..D060==0 DLC==64 ? ..D064==0 DL10PG==300 STUFF: MOVEI TT,[ASCIZ\ core image into PDP11?\] PUSHJ P,ASCOUT .IOT TYIC,A PUSHJ P,CRLF CAIE A,"Y CAIN A,"y CAIA POPJ P, MOVSI A,(SETZ) .IOTLSR A, ;Make ITS not touch the DL10 MOVE A,[SQUOZE 0,DL10F] .EVAL A, .LOSE HRLI A,[0] .SETLOC A, MOVSS A HRRI A,B .GETLOC A, JUMPN B,.-1 ;Stop the pdp11 DATAO DLC,[40] ;STOP PDP11 DATAI DLC,A TRNE A,20 ;AWAIT PDP11 STOPPED JRST .-2 ;Obtain access to the DL10 .CALL [ SETZ ? 'DL10MP ? MOVEI DL10PG ? SETZM A ] ;A GETS AOBJN PTR TO CONTROL AREA .LOSE %LSSYS HRRZM A,DL10LC' HLRO B,A MOVNS B MOVEM B,DL10SZ' MOVE C,(A) ;COPY FIRST WORD MOVEM C,@DL10LC MOVEM C,DLINIT MOVE C,[SQUOZE 0,NDLTYS] ;INITIALIZE VERSION, DON'T TRUST COPY IN SYSTEM .EVAL C, .LOSE MOVE D,[SQUOZE 0,NFDLTY] .EVAL D, .LOSE LSH C,8 ADD C,D MOVEM C,DL10VR MOVSI A,DL10AR ;SET UP BOOT PROGRAM THERE HRR A,DL10LC MOVE B,DL10LC BLT A,BOOTSZ-1(B) ;Here's what stuffs the 11 ; CONO DLC,400000 ;RESET DL10 ; MOVEI A,1 ; .SLEEP A, ; CONO DLB,500 MOVSI A,2 SOJG A,. ;DON'T ASK ME DATAO DLC,[20] ;START PDP11 AT DL10 BOOT AREA DATAI DLC,A TRNN A,20 JRST .-2 ;PDP11 IS NOW EXECUTING THE BOOT PROGRAM MOVE J,DL10LC SUBI J,DL10AR ;RELOCATION FOR REFERENCES TO FLAG, DAT, SADR IFLE 11CORL-40000,MOVSI Q,-11CORL ;LOAD ONLY 16K .ELSE MOVSI Q,-40000 STUFLP: HRRZ A,11CORE(Q) ;TELL 11 BOOTSTRAP PROGRAM TO STORE ONE WORD SKIPE FLAG(J) JRST .-1 MOVEM A,DAT(J) AOS FLAG(J) AOBJN Q,STUFLP SKIPE FLAG(J) JRST .-1 SKIPA ;DON'T WANT TO LOSE PROCESSOR IN NEXT CODE SKIPA ;OR PDP11 WILL END UP IN DDT .HANG MOVEI A,000407 ;BR FROM 100004 TO 100024 MOVEM A,DL10AR+2(J) MOVEI A,25. ;ALLOW TIME FOR -11 TO GET STARTED SOJG A,. ;NOW, WHILE THE 11 IS DOING A RESET, RESTORE THE DL10 CONTROL AREA MOVSI A,DLINIT HRR A,DL10LC MOVEI B,DLXEND-DLINIT ADDI B,-1(A) BLT A,(B) ;NOW TURN ON DL10 TO ITS MOVE A,[SQUOZE 0,DL10F] .EVAL A, .LOSE HRLI A,[-1] .SETLOC A, .LOGOUT 1, ;This kludge is worthy of Charles Garman. ;But it was perpetrated by DAM. ;This is a copy of what to initialize the DL10 area to when we are ;done with it. The program used to save and restore it, but this ;proved to be a loss, e.g. the chaos net double-buffers got out of ;phase between the two machines. The constants below must agree with those ;in ITS and in IOELEV. DLINIT: JSR .-. DL10VR: 0 ;VERSION, GOTTEN OUT OF SYSTEM ;NDLTYS_8+NFDLTY ;"I/O VERSION NUMBER" DL10UP: 0 ;INCREMENTED BY -11 EVERY 1/60 SECOND. ;SETOM'ED BY 10 EVERY 1/2 SECOND. DETECTS UP/DOWNNESS. DL10SO: 0 ;LINE # TO SET OUTPUT DONE FOR, SET BY -10, CLEARED BY -11. DL10IL: 0 ;LINE # WITH INPUT AVAILABLE. CLEARED BY -10 AFTER CHAR READ. DL10IC: 0 ;CHARACTER RECEIVED FROM THAT LINE. DL10OD: 0 ;LINE # WITH OUTPUT DONE. CLEARED BY -10 WHEN PROCESSED. DL10BS: 0 ;BUFFER SIZE FOR THAT LINE. DL10BP: 0 ;WIERD DL10 BYTE POINTER TO TTY OUTPUT BUFFER. DL10CC: 0 ;NUMBER OF CHARACTERS BEING OUTPUT TO TTY. DL10LN: 0 ;LINE # OUTPUT BEING SENT TO. CLEARED BY -11 WHEN GOBBLED. DL10CL: 0 ;DIALUP LINE CONNECT OR DISCONNECT INFO. SET BY 11, 0'D BY 10. ;0000NN => LINE # NN DISCONNECTED. ;01RTNN => LINE # NN CONNECTED, %TTISP=R, %TTOSP=T. DL10PL: 0 ;LINE # TO SET PARAMETERS OF. CLEARED BY -11 WHEN PROCESSED. DL10PR: 0 ;VALUE OF DH11 LPR REGISTER. DL10PS: 0 ;NUMBER OF BYTES OF OUTPUT BUFFERING DESIRED. DL10XD: 0 ;1=EXAMINE -11 CORE, 2=DEPOSIT. CLEARED BY -11 WHEN DONE. DL10XA: 0 ;EXAMINE/DEPOSIT ADDRESS DL10XW: 0 ;EXAMINE/DEPOSIT WORD GLPTBP: 0 ;BYTE POINTER TO BUFFER FOR GOULD LPT GLPTBC: 0 ;BYTE COUNT " " - IF NONZERO BUFFER IS ACTIVE BY PDP11. GLPTER: 0 ;NONZERO => PDP11 CLAIMS PRINTER IS BROKEN. GLPGRF: 0 ;NONZERO => GRAPHICS MODE (SET BY 10). ;CHAOS NET SHARED VARIABLES DLCINI: 1 ;THE COMMENTS ARE IN THE CHAOS FILE DLCSP1: 0 DLCSP2: 0 DLCSS1: 0 DLCSS2: 0 DLCRP1: 0 DLCRP2: 0 DLCRS1: 2 ;IF NET WAS QUIESCENT, THIS WILL BE RIGHT AND DLCRS2: 2 ;WILL PREVENT BUFFERS FROM GETTING LOST ;^ ADD MORE HERE DLXEND:: ;END OF ASSIGNED DL10 AREA VARIABLES CONSTANTS ;THE PROGRAM THAT GOES ON THE MAGDMP TAPE IFG .-4000,.ERR BLOAT LOC 4000 BOOTST:: GORUG: MOVE A,RUGSA ;ENTER HERE TO START 11 IN RUG MOVEM A,SADR ;ENTER BELOW TO START 11 IN IOELEV BOOTER: CONI PAG,A ;FLUSH CACHE TRZN A,600000 JRST BOOTAA SWPUA CONSZ APR,200000 JRST .-1 CONO PAG,(A) BOOTAA: CONO DLC,400000 ;RESET DL10 MOVEI A,5000 SOJG A,. CONO DLB,DL10AR DATAO DLC,[40] ;STOP PDP11 DATAI DLC,A TRNE A,20 JRST .-2 MOVSI A,2 SOJG A,. CONO DLC,100020 ;PORT ENB DATAO DLC,[20] ;START PDP11 DATAI DLC,A TRNN A,20 JRST .-2 ;PDP11 IS NOW RUNNING OUT OF DL10 AREA IFLE 11CORL-40000,MOVSI Q,-11CORL ;LOAD ONLY 16K .ELSE MOVSI Q,-40000 BOOTLP: MOVE A,11CORE(Q) ;TELL 11 BOOTSTRAP PROGRAM TO STORE ONE WORD SKIPE FLAG JRST .-1 MOVEM A,DAT AOS FLAG AOBJN Q,BOOTLP SKIPE FLAG JRST .-1 MOVEI A,000407 ;BR FROM 100004 TO 100024 MOVEM A,DL10AR+2 MOVEI A,25. ;ALLOW TIME FOR -11 TO GET STARTED SOJG A,. CONO DLC,400000 ;THEN, QUICK, TURN OFF PORT ENB WHILE IT'S IN INIT CODE SKIPE -4000 JRST -4000 ;IF DDT IS PRESENT RETURN TO IT JRST -400 ;ELSE RETURN TO MAGDMP CONSTANTS VARIABLES LOC 5000 DL10AR: JRST 4,. 005001 ;100002/ CLR %1 005727 ;100004/ TST # FLAG: 0 ;100006/ 0 => 11 READY FOR WORD, NON-0 => WORD GIVEN 001775 ;100010/ BEQ 100004 012721 ;100012/ MOV #,(1)+ DAT: 0 ;100014/ VALUE TO BE STORED 005037 ;100016/ CLR @#FLAG 100006 ;100020/ 000770 ;100022/ BR 100004 000137 ;100024/ JMP @# SADR: 1 ;100026/ THE START ADDRESS BOOTSZ==.-DL10AR RUGSA: 0 ;START ADDR OF RUG/DDT (ALSO ASSUMED TO BE LOWEST LOC) LOC 6000 11CORE: BLOCK 11CORL BOOTEN: -1 ;MIDAS CORING BUG END GO