; File: BROM30.MAC ; .TITLE BOOTSTRAP PD,DD .ENABL LC ; Memory sizer+test+: ; Datacommunication bootstraps for serial DL(V)-11 ; and parallel line DR(V)-11 ; H.H. NKG Dec-81 .ASECT ;ORIGIN=100000 .IIF NDF,ORIGIN ORIGIN=173000 .=ORIGIN START: BR PDBOOT ; 773000 PD entry JMP DDBOOT ; 773002 DD .SBTTL MEMORY SIZER+TEST ;------------------------ MEM: MOV PC,R1 ;Go size memory BR MEMSIZ ;Subr. call CLR R3 ;Set test data=0 BR MEMDO ;Do memory test ; ; SIZER: inp. R1=Return addres, outp. R4=Highest adr. R2=2 ; MEMSIZ: MOV #340,R0 ;PRIO 7 MTPS R0 RESET MOV #6,R2 ;R2->PS in Time out vector MFPS @R2 ;Load status vector MOV #2$,-(R2) ;Interrupt entry CLR R4 ;Set start adres MOV #1000,SP ;Set stack 1$: MOV @R4,@R4 ;Read+write mem. loc. TST (R4)+ ;If no trap, skip to next BR 1$ 2$: BIT -(R4),-(R2) ;Set R4 to highest writable adres, R2=2 MOV R4,SP ;Set stack at top of memory JMP 2(R1) ;Return to caller. ; Memory test MEMDO: CLR R2 ;Start adres ADDRT: MOV R2,@R2 ;Store adres at adres. TST (R2)+ ;Skip to next CMP R2,R4 ;All adresses done? BLOS ADDRT ;If LOS no CHECK: CMP -(R2),R2 ;Check data. BEQ ADCONT ;If EQ no comparison error MERROR: HALT ; Expected data is in R2, bad data is pointed to by adres in R2 ; Type "P" to continue test! ADCONT: TST R2 BNE CHECK ;If NE continue test. .SBTTL Memory data storage test ;-------------------------------- MEMT: MOV R3,(R2)+ ;Move backgrnd data to memory CMP R2,R4 ;All done? BLOS MEMT WALK: COM R3 ;Complement testdata. XOR R3,-(R2) ;Use backgr.& testdata to set all 1's COM @R2 ;Check for all 1's BEQ DCONT HALT ; ; Expected data in R3, bad data pointed to by R2. Type "P" to proceed. ; DCONT: COM R3 ;Get previous backgr. data XOR R3,@R2 ;Restore backgr. data for current loc. TST R2 ;Done with one pass? BNE WALK ; ; Pattern has walked through all memory. Go back examining backgr. ; data to make sure it was not affected by modif. of other locations. ; BACK: CMP R3,(R2)+ ;Is backgr. still valid? BEQ BGCONT HALT ;MEMORY BACKGROUND DATA ERROR!! BGCONT: CMP R2,R4 ;Scanned all of backgr. yet? BLOS BACK CLR R2 ;Else restore R2 to low mem. limit. COM R3 ;Flip to other pattern. BNE MEMT JMP 2(R5) ;Test complete, return. .SBTTL BOOTSTRAP READ ROUTINE for DR(V)-11(C) ;--------------------------------------------- PDCSR=167770 ;status RTRCNT=8. ;Retry count PDBOOT: MOV PC,R5 ;Set up return BRMEM: BR MEM MOV #RTRCNT,-(SP) ;Retry on stack. BRESTR: CLR R2 ;Memory buff adress MOV #PDCSR,R0 ;Output status reg. WAIT: TSTB @R0 ;Output ready? BPL WAIT TST 4(R0) ;clear input reg. ; ; Init DRJOB ; MOV #4,R3 ;INIT CALL BCHROS ;1X CALL BCHROS ;2X CALL BICHR ;wait for input CMPB R1,#20 ;continue? BNE BFATAL ; ; Send command packet. ; CLR R4 ;Clear checksum=R4. MOV #CMDPKT,R5 ;Point to packet. 1$: MOV (R5)+,R3 ;Get packet word. ADD R3,R4 ;update ADC R4 ; checksum. CALL BCHROS ;send word CMP R5,#PDBLK ;End of packet BLOS 1$ ;no MOV R4,R3 ;And send CALL BCHROS ; Checksum ; ; Receive bootstrap data and store them. ; BRDPKT: CALL BICHR ;R1 contains receiv. word. MOV #256.,R4 ;Set to full packet count. TSTB R3 ;O.K. BEQ 3$ ;Yes, then go. CLR R4 ;No. BISB R3,R4 ;R3 " swapped R1, packetwordcnt. 3$: MOV R1,R5 ;init checksum CMPB R1,#1 ;data packet? BNE BEND ;no, then must be endpacket. 2$: CALL BICHR ;input next. MOV R1,(R2)+ ;store data in memory buff. ADD R1,R5 ;Update ADC R5 ; checksum DEC R4 ;done? BGT 2$ CALL BICHR ;checksum! CMP R1,R5 ;O.K.? BNE BFATAL ;no, then branch. BR BRDPKT ;and again. BEND: CALL BICHR ;Receive Endpacket MOV R3,R2 ;Save succescode. 1$: ADD R1,R5 ;and ADC R5 ; receive CALL BICHR ; rest DEC R4 ; of BNE 1$ ; End- CMP R1,R5 ; packet. BNE BFATAL ;checksum O.K.? TSTB R2 ;check succes code. BMI BFATAL ;Succes or error? TST (SP)+ ;Pop off RTRCNT CLR R0 ;Device unitnr. 0 CLR PC ;START AT 000000! BFATAL: DEC @SP ;1 RETRY less! BNE BRESTR HALT ;Fatal halt, nothing works! ; ; ; BICHR: TST (R0) ;Input ready bit = highest bit! BPL BICHR MOV 4(R0),R1 ;R0 points to status reg.: MOV R1,R3 ;COPY, lowbyte R3=packet word cnt. SWAB R3 ; 2 = PD$CSR+2 = output buffer RETURN ; 4 = PD$CSR+4 = input buffer BCHROS: MOV R3,2(R0) 1$: TSTB (R0) ;Output ready bit = No. 7 !! BPL 1$ RETURN CMDPKT: .BYTE 2,5,2,0 ;Ask for a read. PDUNIT: .WORD 0,0 PDBTCT: .WORD 256. ;Nr. words to read PDBLK: .WORD 0 ; .SBTTL BOOTSTRAP READ ROUTINE for DL-11 or equivalent ;------------------------------------------------------ DDCSR=176500 DDBOOT: MOV PC,R5 ;Set up return BR BRMEM MOV #RTRCNT,-(SP) DRESTR: CLR R2 MOV #DDCSR+4,R0 ;R0=Transmitter status MOV #1,@R0 ;Set break bit MOV #177777,R3 ;Dummy chars CALL DCHROS 1$: TSTB @R0 BPL 1$ CLR @R0 MOV (PC)+,R3 .BYTE 4,4 ;INITs CALL DCHROS TST -2(R0) CALL DICHR CMPB R3,#20 ;CONTINUE BNE DFATAL CLR R4 MOV #CMBPKT,R5 2$: MOV (R5)+,R3 ADD R3,R4 ADC R4 CALL DCHROS CMP R5,#DDBLK BLOS 2$ MOV R4,R3 CALL DCHROS ;Checksum commandpkt DDPKT: CALL DICHP2 MOVB R3,R4 RORB R4 MOV R1,-(SP) ;Init checksum CMPB R1,#1 ;Data-packet? BNE DEND 2$: CALL @R5 MOV R1,(R2)+ ADD R1,@SP ADC @SP DECB R4 BGT 2$ CALL (R5) CMP R1,(SP)+ BNE DFATAL BR DDPKT DEND: CALL (R5) TSTB R3 BMI BOTH 1$: ADD R1,@SP ADC @SP CALL (R5) DEC R4 BNE 1$ CMP R1,(SP)+ BNE DFATAL TST (SP)+ ;Pop off RTRCNT CLR R0 ;Device unitnr. 0 CLR PC ;And start at 000000 BOTH: TST (SP)+ ;Pop off saved checksum. DFATAL: DEC @SP ;All retried? BNE DRESTR HALT ;Nothing to be done! DICHP2: MOV PC,R5 CLR R1 CALL @PC DICHR: TSTB -4(R0) BPL DICHR MOVB -2(R0),R3 BISB R3,R1 SWAB R1 RETURN DCHROS: CALL @PC 1$: TSTB @R0 BPL 1$ MOV R3,2(R0) SWAB R3 RETURN CMBPKT: .BYTE 2,10.,2,0 DDUNIT: .WORD 0,0 DDBTCT: .WORD 512. DDBLK: .WORD 0 ; .END START