perm filename M873YD.PAL[KL,SYS]2 blob
sn#212449 filedate 1976-04-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002
C00011 00003 .TITLE BOOTSTRAP LOADER M873-YD
C00022 ENDMK
C⊗;
comment ⊗
*173000/ 33727
173002/ -210 =177570
173004/ 1
173006/ 1010
173010/ 13707
173012/ -210 =177570
173014/ -66074 =111704
173016/ 5001
173020/ 5005
173022/ 424
173024/ -5000 =173000
173026/ 340
173030/ 13701
173032/ -210 =177570
173034/ -71477 =106301
173036/ -55077 =122701
173040/ 340
173042/ -76374 =101404
173044/ -55077 =122701
173046/ 60
173050/ -76777 =101001
173052/ 5001
173054/ 301
173056/ 42701
173060/ -10 =177770
173062/ 13705
173064/ -210 =177570
173066/ 5004
173070/ -72073 =105705
173072/ -77271 =100507
173074/ 12700
173076/ 5
173100/ 12702
173102/ -400 =177400
173104/ 12703
173106/ 4003
173110/ 301
173112/ 50103
173114/ 50100
173116/ 12701
173120/ -434 =177344
173122/ 12706
173124/ 24
173126/ 5705
173130/ -77374 =100404
173132/ 5306
173134/ -77776 =100002
173136/ 0
173140/ 770
173142/ 5
173144/ 10341
173146/ 5711
173150/ -77402 =100376
173152/ 5721
173154/ 5761
173156/ -4 =177774
173160/ -77416 =100362
173162/ 10211
173164/ 10041
173166/ -72067 =105711
173170/ -77402 =100376
173172/ 5721
173174/ -77024 =100754
173176/ 5741
173200/ -72767 =105011
173202/ -55100 =122700
173204/ 5
173206/ 1001
173210/ 137
173212/ 0
173214/ 776
173216/ 10037
173220/ 40
173222/ 402
173224/ -5000 =173000
173226/ 340
173230/ 10700
173232/ 410
173234/ 12700
173236/ 4015
173240/ 12702
173242/ -70000 =110000
173244/ 12703
173246/ 3
173250/ 5005
173252/ 721
173254/ 10137
173256/ 42
173260/ 12701
173262/ 44
173264/ 10221
173266/ 10321
173270/ 10421
173272/ 10521
173274/ 10621
173276/ 10021
173300/ 160
173302/ 2
173304/ -66074 =111704
173306/ 5005
173310/ 5001
173312/ 12700
173314/ 34400
173316/ 12702
173320/ -400 =177400
173322/ 12703
173324/ 626
173326/ 50100
173330/ 12701
173332/ -1100 =176700
173334/ 5
173336/ 10006
173340/ 42706
173342/ -10 =177770
173344/ 10661
173346/ 10
173350/ 32711 =32711
173352/ 4000
173354/ 1767
173356/ 12721
173360/ 21
173362/ 10306
173364/ 42706
173366/ -2000 =176000
173370/ 10661
173372/ 32
173374/ 10306
173376/ -77775 =100003
173400/ 12761
173402/ 10000
173404/ 30
173406/ 6206
173410/ 6206
173412/ -72772 =105006
173414/ -27772 =150006
173416/ -71772
173420/ -71572 =106206
173422/ -71572 =106206
173424/ 10661
173426/ 4
173430/ 10211
173432/ 10006
173434/ -72772 =105006
173436/ 306
173440/ 10641
173442/ -72067 =105711
173444/ -77402 =100376
173446/ 32711
173450/ 60000
173452/ 1330
173454/ 32761
173456/ -40000 =140000
173460/ 12
173462/ 1324
173464/ 22706
173466/ 71
173470/ 1250
173472/ 22737
173474/ 240
173476/ 0
173500/ 1643
173502/ 0
173504/ 641
173506/ 10037
173510/ 40
173512/ 10700
173514/ 657
173516/ 12700
173520/ 30500
173522/ 12702
173524/ -70000 =110000
173526/ 12703
173530/ 32631
173532/ 676
173534/ 10037
173536/ 40
173540/ 10700
173542/ 644
173544/ 5005
173546/ 12501
173550/ 12503
173552/ 12504
173554/ 11500
173556/ 12715
173560/ 340
173562/ 5745
173564/ 12702
173566/ -3440 =174340
173570/ 10715
173572/ 10506
173574/ 62702
173576/ 40
173600/ -72076 =105702
173602/ -77010 =100770
173604/ 32762
173606/ 4000
173610/ 34
173612/ 1770
173614/ 26217
173616/ 14
173620/ 1365
173622/ 5725
173624/ 10015
173626/ 10445
173630/ 10345
173632/ 10145
173634/ 12700
173636/ 130
173640/ 10204
173642/ 12420
173644/ 22700
173646/ 160
173650/ -76404 =101374
173652/ 10201
173654/ 62701
173656/ 32
173660/ 12721
173662/ 100
173664/ 5012
173666/ 5062
173670/ 20
173672/ 32711
173674/ 4000
173676/ 1775
173700/ 32762
173702/ 26
173704/ 36
173706/ 1403
173710/ 12711
173712/ 400
173714/ 0
173716/ 12762
173720/ 100
173722/ 32
173724/ 5062
173726/ 22
173730/ 12762
173732/ -70400
173734/ 16
173736/ 32711
173740/ 4000
173742/ 1775
173744/ -45067
173746/ 202
173750/ 1775
173752/ -77775 =100003
173754/ 22715
173756/ 240
173760/ 1403
173762/ 12711
173764/ 400
173766/ 0
173770/ 12762
173772/ 100
173774/ 32
173776/ 115
174000/ 200
⊗
.TITLE BOOTSTRAP LOADER M873-YD
;STARTUP OFFSETS
;SWITCH ADDRESS
; 1 000 SWITCH
; 2 304 RP04
; 3 014 DECTAPE
; 4 534 POWER
R0=%0
R1=%1
R2=%2
R3=%3
R4=%4
R5=%5
SP=%6
PC=%7
;TC11 REGISTERS
TCST=177340
TCCM=177342
TCWC=177344
TCBA=177346
;RP04 REGISTERS
RPCS1=176700
RPWC=176702
RPBA=176704
RPDA=176706
RPCS2=176710
RPDS=176712
RPER1=176714
RPAS=176716
RPLA=176720
RPDB=176722
RPMR=176724
RPDT=176726
RPSN=176730
RPOF=176732
RPDC=176734
RPCC=176736
RPER2=176740
RPER3=176742
RPEC1=176744
RPEC2=176746
SWREG=177570
.=173000
SW1GO: BIT @#SWREG,#1
BNE SW1ODD ;BRANCH IF BIT 15 ON IN SWITCH REGISTER
MOV @#SWREG,PC ;JUMP TO ADDRESS IN SWITCH REGISTER
.=173014
SW3GO: MOVB (PC),R4
CLR R1 ;ASSUME DRIVE ZERO
CLR R5 ;SIMULATE ZERO SWITCHES
BR SW1OD2
.=173024
173000
340
.=173030
SW1ODD: MOV @#SWREG,R1
ASLB R1
CMPB #340,R1
BLOS SW1OD1
CMPB #60,R1
BHI SW1OD1
CLR R1 ;ASSUME DRIVE ZERO
SW1OD1: SWAB R1 ;GET DRIVE NUMBER INTO LOW BYTE
BIC #177770,R1 ;KEEP LOW 3 BITS (DECTAPE DRIVE NUMBER)
MOV @#SWREG,R5
CLR R4
TSTB R5
BMI 173312 ;BRANCH IF SWREG BIT 7 IS ON
SW1OD2: MOV #5,R0 ;COMMAND FOR TCCM:DRIVE=0,RDATA,FORWARD,DO
MOV #-400,R2 ;SET UP WORD COUNT REGISTER
MOV #4003,R3 ;COMMAND FOR TCCM:DRIVE=0,RNUM,REVERSE,DO
SWAB R1 ;PUT DRIVE NUMBER IN HIGH BYTE
BIS R1,R3 ;OR DRIVE NUMBER INTO REVERSE COMMAND
BIS R1,R0 ;OR DRIVE NUMBER INTO READ FORWARD COMMAND
SW1OD5: MOV #TCCM+2,R1 ;AFTER AUTO DECREMENT WILL POINT AT TCCM
SW1OD3: MOV #24,SP ;USE SP AS A COUNTER
SW1OD4: TST R5
BMI SPIN ;BRANCH IF SWREG BIT 15 IS ON (TRY INDEFINITELY)
DEC SP ;BUMP COUNT
BPL SPIN ;BRANCH IF STILL NON-NEGATIVE
HALT
BR SW1OD3
;START RUNNING THE TC11 DECTAPE DRIVE
SPIN: RESET ;CAUSES TCBA TO BE SET TO ZERO
MOV R3,-(R1) ;START SPINNING BACKWARDS READING BLOCK NUMS
SPINL1: TST (R1) ;WAIT FOR AN ERROR (SHOULD RUN INTO THE
BPL SPINL1 ; FRONT END ZONE EVENTUALLY)
TST (R1)+ ;POINT AT TCWC
TST -4(R1) ;LOOK AT END ZONE BIT IN TCST
BPL SW1OD4 ;IF IT IS OFF TRY AGAIN (GOT SOME OTHER ERROR)
MOV R2,(R1) ;STORE WORD COUNT IN TCWC
MOV R0,-(R1) ;READ FORWARD CMD, LEAVE R1 POINTING AT TCCM
SPINL2: TSTB (R1) ;WAIT FOR READY
BPL SPINL2
TST (R1)+ ;TEST ERROR BIT, POINT R1 AT TCWC
BMI SW1OD4 ;BRANCH ON ERROR
TST -(R1) ;BUMP BACK TO TCCM
CLRB (R1) ;CLEAR FUNCTION, DO, INT ENB
CMPB #5,R0 ;SEE IF LAST COMMAND WAS FORWARD READ
BNE HLTLUP ;IF NOT THEN HALT
GOTHER: JMP @(PC)+ ;GO TO 0 ABSOLUTE (WHERE WE JUST READ 400 WDS INTO)
HLTLUP: 0
BR HLTLUP ;STAY HALTED IF PRESS CONTINUE
MOV R0,@#40 ;173216
BR 173230 ;173222
.=173224
173000
340
.=173230
UTIL: MOV PC,R0
BR UTIL1 ;SIMULATE JSP R0,UTIL1
MOV #4015,R0
MOV #110000,R2
MOV #3,R3
CLR R5
BR SW1OD5
UTIL1: MOV R1,@#42 ;SAVE R1 IN 42
MOV #44,R1
MOV R2,(R1)+ ;SAVE R2 IN 44
MOV R3,(R1)+ ;SAVE R3 IN 46
MOV R4,(R1)+ ;SAVE R4 IN 50
MOV R5,(R1)+ ;SAVE R5 IN 52
MOV SP,(R1)+ ;SAVE SP IN 54
MOV R0,(R1)+ ;SAVE R0 IN 56
JMP 2(R0) ;RETURN FROM SIMULATED JSP R0,UTIL1
;R3 AND R0 SPECIFY THE DISK ADDRESS.
;R3 BITS
; 15 ON MEANS 16 BIT / WORD FORMAT
; 0-8 CYLINDER
;10-14 TRACK
;R0 BITS
; 3-7 SECTOR ADDRESS
; 8-15 COMMAND (STORED IN LOW BYTE OF RPCS1)
.=173304
SW2GO: MOVB (PC),R4
CLR R5
CLR R1
MOV #34400,R0 ;71,,SECTOR 0 (71 = READ DATA COMMAND)
MOV #-400,R2 ;WORD COUNT
MOV #626,R3 ;CYLINDER 404 DECIMAL,TRACK 0,18 BIT FORMAT
BIS R1,R0
SW2GO1: MOV #RPCS1,R1
SW2GO2: RESET
MOV R0,SP
BIC #177770,SP
MOV SP,10(R1) ;SET DRIVE NUMBER IN RPCS2
BIT #4000,(R1) ;WAIT UNTIL DRIVE AVAILABLE
BEQ SW2GO2 ; ON THIS CONTROLLER
MOV #21,(R1)+ ;GIVE "READ-IN-PRESET" COMMAND
MOV R3,SP
BIC #176000,SP
MOV SP,32(R1) ;SETUP DESIRED CYLINDER ADDRESS
MOV R3,SP
BPL SW2GO3 ;BRANCH IF R3 BIT 15 IS OFF
MOV #10000,30(R1) ;SET 16 BIT / WORD FORMAT
SW2GO3: ASR SP
ASR SP
CLRB SP ;ALSO CLEARS C BIT
BISB R0,SP
RORB SP ;FLUSH LOW BIT AND ZERO HIGH BIT
ASRB SP
ASRB SP ;GET SECT ADDR TO BITS 0-4
MOV SP,4(R1) ;SET TRACK AND SECTOR ADDRESSES
MOV R2,(R1) ;SET WORD COUNT
MOV R0,SP
CLRB SP
SWAB SP
MOV SP,-(R1) ;GIVE COMMAND FROM LH OF R0
SW2GO4: TSTB (R1)
BPL SW2GO4 ;WAIT FOR READY
BIT #60000,(R1)
BNE SW2GO2 ;TRY AGAIN IF ERRORS
BIT #140000,12(R1)
BNE SW2GO2 ;TRY AGAIN IF ATTENTION OR ERRORS
CMP #71,SP ;DID WE JUST GIVE A READ COMMAND?
BNE HLTLUP ;NO, LOSE
CMP #240,@#0 ;IS FIRST WORD READ A NOP?
BEQ GOTHER ;YES, GO DO IT
HALT ;NO, LOSE. IF YOU CONTINUE....
BR GOTHER ;....THEN START UP AT ZERO
.=173506
UTIL2: MOV R0,@#40
MOV PC,R0 ;SIMULATE JSP R0,UTIL1
BR UTIL1
MOV #30500,R0
MOV #110000,R2
MOV #32631,R3
BR SW2GO1
.=173534
SW4GO: MOV R0,@#40
MOV PC,R0
BR UTIL1 ;SIMULATE JSP R0,UTIL1
CLR R5
MOV (R5)+,R1 ;C(0) → R1
MOV (R5)+,R3 ;C(2) → R3
MOV (R5)+,R4 ;C(4) → R4
MOV (R5),R0 ;C(6) → R0, R5 = 6
MOV #340,(R5) ;340 → C(6) (SET UP ERROR PS)
TST -(R5) ;R5 = 4
SW4GO1: MOV #174340,R2
MOV PC,(R5) ;STORE ADDR OF NEXT INSTR AS ERROR PC ( → C(4))
MOV R5,SP ;4 → SP
SW4GO2: ADD #40,R2
TSTB R2
BMI SW4GO1
BIT #4000,34(R2) ;LOOK AT 10 REQ INT (1) IN DTE STATUS REGISTER
BEQ SW4GO2
CMP 14(R2),(PC)
BNE SW4GO2
TST (R5)+ ;6 → R5
MOV R0,(R5) ;R0 → C(6)
MOV R4,-(R5) ;R4 → C(4)
MOV R3,-(R5) ;R3 → C(2)
MOV R1,-(R5) ;R1 → C(0)
MOV #130,R0
MOV R2,R4
SW4GO3: MOV (R4)+,(R0)+ ;COPY DTE REGISTERS TO 130
CMP #160,R0
BHI SW4GO3
MOV R2,R1
ADD #32,R1 ;POINTS AT DIAG2
MOV #100,(R1)+ ;RESET THAT DTE
CLR (R2) ;CLEAR DELAY COUNT
CLR 20(R2) ;CLEAR TO 10 ADDRESS
SW4GO4: BIT #4000,(R1) ;LOOK AT 10 REQ INT (1) IN STATUS
BEQ SW4GO4 ;WAIT UNTIL IT IS ON
BIT #26,36(R2) ;LOOK AT UNIBUS PARITY ERROR BITS IN DIAG3
BEQ SW4GO5
MOV #400,(R1) ;SET REQ 10 INT
HALT
SW4GO5: MOV #100,32(R2) ;RESET DTE AGAIN
CLR 22(R2) ;CLEAR TO 11 ADDRESS
MOV #107400,16(R2) ;START TRANSFER OF 400 WORDS, I BIT ON
SW4GO6: BIT #4000,(R1) ;WAIT FOR 10 REQ INT (1)
BEQ SW4GO6
SW4GO7: BITB #202,(R1) ;LOOK AT TO11 ERR AND NORM TERM
BEQ SW4GO7 ;WAIT FOR ONE TO COME ON
BPL SW4GO8 ;BRANCH IF NORM TERM CLEAR
CMP #NOP,(R5) ;MAKE SURE FIRST WORD TRANSFERRED WAS A NOP
BEQ SW4GO9
SW4GO8: MOV #400,(R1)
HALT
SW4GO9: MOV #100,32(R2) ;RESET AGAIN JUST TO MAKE SURE
JMP (R5) ;TRANSFER TO 0