1
0
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:
Lars Brinkhoff
2018-06-12 23:51:29 +02:00
parent f354118eba
commit 63aefb2432
3 changed files with 381 additions and 0 deletions

371
src/syseng/11boot.23 Executable file
View 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