mirror of
https://github.com/PDP-10/its.git
synced 2026-02-23 15:52:10 +00:00
11BOOT - Boot IO-11 on KL10.
This commit is contained in:
371
src/syseng/11boot.23
Executable file
371
src/syseng/11boot.23
Executable file
@@ -0,0 +1,371 @@
|
||||
TITLE 11BOOT - BOOT I/O 11 ON KL10
|
||||
|
||||
;LOADS DSK:KLRUG BIN AND DSK:IOELEV BIN, GIVES SYMBOLS TO RUG, AND
|
||||
;MAKES DSK:@ BOOT11 WHICH IS TO BE PUT ON THE MAGDMP TAPE.
|
||||
|
||||
.MLLIT==1
|
||||
|
||||
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==16.*1024.
|
||||
|
||||
INCH==1
|
||||
OUCH==2
|
||||
|
||||
OPENI: SETZ
|
||||
SIXBIT/OPEN/
|
||||
[.UII,,INCH]
|
||||
[SIXBIT/DSK/]
|
||||
[SIXBIT/IOELEV/]
|
||||
SETZ [SIXBIT/BIN/]
|
||||
|
||||
OPENR: SETZ
|
||||
SIXBIT/OPEN/
|
||||
[.UII,,INCH]
|
||||
[SIXBIT/DSK/]
|
||||
[SIXBIT/KLRUG/]
|
||||
SETZ [SIXBIT/BIN/]
|
||||
|
||||
OPENO: SETZ
|
||||
SIXBIT/OPEN/
|
||||
[.BIO,,OUCH]
|
||||
[SIXBIT/DSK/]
|
||||
[SIXBIT/@/]
|
||||
SETZ [SIXBIT/BOOT11/]
|
||||
|
||||
LPDL==50
|
||||
PDL: -LPDL,,.
|
||||
BLOCK LPDL
|
||||
|
||||
RWORD: .IOT INCH,W
|
||||
TDNE W,[-400]
|
||||
.VALUE
|
||||
.IOT INCH,A
|
||||
TDNE A,[-400]
|
||||
.VALUE
|
||||
LSH A,8
|
||||
IOR W,A
|
||||
POPJ P,
|
||||
|
||||
GO: MOVE P,PDL
|
||||
SETZM 11CORE
|
||||
MOVE A,[11CORE,,11CORE+1]
|
||||
BLT A,11CORE+11CORL-1
|
||||
.CALL OPENR ;LOAD RUG
|
||||
.VALUE
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
.CALL OPENI ;LOAD IOELEVEN
|
||||
.VALUE
|
||||
PUSHJ P,ALOAD
|
||||
MOVEM W,SADR
|
||||
PUSHJ P,SLOAD ;LOAD SYMBOLS INTO CORE IMAGE FOR RUG
|
||||
JRST LDEND
|
||||
|
||||
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
|
||||
MOVEI J,2*11CORE(W) ;FIGURE OUT WHERE IT GOES
|
||||
ROT J,-1
|
||||
SKIPL J
|
||||
TLOA J,001000
|
||||
HRLI J,101000
|
||||
DPB A,J
|
||||
ADDI W,1
|
||||
SOJG Q,LD1
|
||||
.IOT INCH,A ;IGNORE CHECKSUM
|
||||
JRST ALOAD
|
||||
|
||||
JBLK: .IOT INCH,A ;GOBBLE CHECKSUM
|
||||
SKIPE Q
|
||||
.VALUE
|
||||
POPJ P, ;RETURN FROM ALOAD WITH START ADDR IN W
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
LDEND: .CLOSE INCH,
|
||||
.VALUE [ASCIZ|RUGSA/P|]
|
||||
.CALL OPENO
|
||||
.VALUE
|
||||
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,
|
||||
.BREAK 16,040000
|
||||
|
||||
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
|
||||
|
||||
;THE PROGRAM THAT GOES ON THE MAGDMP TAPE
|
||||
|
||||
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
|
||||
|
||||
MOVSI Q,-11CORL
|
||||
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
|
||||
|
||||
RUGSA: 0 ;PDP11 START ADDRESS OF RUG
|
||||
CONSTANTS
|
||||
|
||||
LOC 5000
|
||||
DL10AR: JRST 4,.
|
||||
005001 ;100002/ CLR %1
|
||||
005727 ;100004/ TST #0
|
||||
FLAG: 0 ;100006/ 0 => 11 READY FOR WORD, NON-0 => WORD GIVEN
|
||||
001775 ;100010/ BEQ 100004
|
||||
012721 ;100012/ MOV #0,(1)+
|
||||
DAT: 0 ;100014/ VALUE TO BE STORED
|
||||
005037 ;100016/ CLR @#FLAG
|
||||
100006 ;100020/
|
||||
000770 ;100022/ BR 100004
|
||||
000137 ;100024/ JMP @#1
|
||||
SADR: 1 ;100026/ THE START ADDRESS
|
||||
|
||||
LOC 6000
|
||||
11CORE: BLOCK 11CORL
|
||||
|
||||
BOOTEN: -1 ;MIDAS CORING BUG
|
||||
|
||||
END GO
|
||||
|
||||
Reference in New Issue
Block a user