perm filename M873YD.PAL[KL,SYS]3 blob sn#368258 filedate 1978-07-20 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
C00024 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

COMMENT ⊗
If switch 1 is pressed, the switch register is examined.  If the low bit is off
the machine transfers to the byte address in the switch register.  If the low
bit is on the format of the switch register is as follows:
Bits	Function
 15	Try indefinitely
10-8	Drive number
 7	Use RP04 instead of DECTAPE
 0	Must be on to decode this way
⊗

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

;DTE REGISTERS
DLYCNT=174400
DEXWD3=174402
TENAD1=174410
TENAD2=174412
TO10BC=174414
DIAG1=174430
DIAG2=174432
STATUS=174434
DIAG3=174436

SWREG=177570

;Here when switch 1 is pressed (SWITCH REG)
.=173000
SW1GO:	BIT @#SWREG,#1
	BNE SW1ODD		;BRANCH IF BIT 0 ON IN SWITCH REGISTER
	MOV @#SWREG,PC		;JUMP TO ADDRESS IN SWITCH REGISTER

;Here when switch 3 is pressed (DECTAPE)
.=173014
SW3GO:	MOVB (PC),R4		;R4 ← 1
	CLR R1			;ASSUME DRIVE ZERO
	CLR R5			;SIMULATE ZERO SWITCHES
	BR SW1OD2

.=173024
	173000			;CAUSE DC LO TRAP TO TRANSFER TO ROM
	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 SW2GO0		;BRANCH IF SWREG BIT 7 IS ON (RUN THE DISK)
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 UTIL

.=173224
	173000			;CAUSE DC LO TRAP TO TRANSFER TO RAM
	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 (RETURN ADDRESS) 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)

;Here when switch 2 pressed (RP04)
.=173304
SW2GO:	MOVB (PC),R4			;R4 ← 5
	CLR R5
	CLR R1
SW2GO0:	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			;SET DRIVE NUMBER IN 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


;Here when switch 4 pressed (done by KL10)
.=173534
SW4GO:	MOV R0,@#40		;SAVE R0 IN ABSOLUTE 40
	MOV PC,R0
	BR UTIL1		;SIMULATE JSP R0,UTIL1 (SAVE REGS IN LOW CORE)
	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 #DLYCNT-40,R2	;R2 = DLYCNT-40
	MOV PC,(R5)		;STORE ADDR OF NEXT INSTR AS ERROR PC ( → C(4))
	MOV R5,SP		;SP = 4
SW4GO2:	ADD #40,R2		;R2 = DLYCNT OF NEXT DTE
	TSTB R2			;OUT OF DTES YET?
	BMI SW4GO1		;YES, START OVER FROM DTE0
	BIT #4000,34(R2)	;LOOK AT 10 REQ INT (1) IN DTE STATUS REGISTER
	BEQ SW4GO2		;THIS ISN'T THE ONE, TRY THE NEXT DTE
	CMP 14(R2),(PC)		;COMPARE TO10BC WITH 14 (ASSUMING DEST IS DONE 1ST)
	BNE SW4GO2		;NOT THIS DTE
	TST (R5)+		;R5 = 6
	MOV R0,(R5)		;R0 → C(6)
	MOV R4,-(R5)		;R4 → C(4)
	MOV R3,-(R5)		;R3 → C(2)
	MOV R1,-(R5)		;R1 → C(0)  R5 = 0
	MOV #130,R0
	MOV R2,R4		;R4 = ADDRESS OF APPROPRIATE DTE
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, R1 POINTS AT STATUS
	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)		;SET REQ 10 INT
	HALT
SW4GO9:	MOV #100,32(R2)		;RESET AGAIN JUST TO MAKE SURE
	JMP (R5)		;TRANSFER TO 0

.END