.TITLE ABSLDR .SBTTL ABSOLUTE LOADER FOR DOS, RT11, RSTS, ETC. .IDENT /V01.01/ ;+ ; COPYRIGHT 1974, DIGITAL EQUIPMENT INC. ; MAYNARD, MA 01754, USA ; PROGRAMMED BY MARTIN MINOW, DEC, STOCKHOLM ; 1974-MAR-25 ; ; ABSLDR STARTS THE ABSOLUTE LOADER UNDER DOS, RT11, OR RSTS. ; TO SETUP THE PROGRAM, LINK AND RUN AS FOLLOWS: ; DOS OR RT11: (/E SWITCH ISN'T USED FOR RT11) ; LINK #ABSLDR END OF ABSLDR .IFF ;YES, OUR TURN ; COMPUTE TOP OF CORE MOV #TEST1,@#4 ;SETUP NXM TRAP ADDRESS CLR R0 ;START LOW CORE: TST @R0 ;IS IT THERE ADD #20000,R0 ;YES, TRY ANOTHER BR CORE ;KEEP ON TRYING TEST1: ;HERE WHEN OUT OF RANGE .ENDC ; R0 HAS FIRST LOCATION PAST TOP OF CORE MOV #KBCSR,-(R0) ;ASSUME NO HSR .IF NDF ONLYKB ;SHOULD WE CHECK MOV #TEST2,@#4 ;SETUP NXM TRAP FOR CHECK TST @#PRCSR ;IS IT THERE? MOV #PRCSR,@R0 ;YES, SET IT UP TEST2: ;HERE AFTER NXM TRAP .ENDC MOV R0,MEMSIZ ;SAVE FOR BOOT LOADER CLRB MEMSIZ ;JUST HIGH BTYE, PLEASE ; NOW RELOCATE MOV #6,@#4 ;STOP IF TROUBLE MOV #ENDLDR,R1 ;R1 -> END IN LOWCORE MOVE: MOV -(R1),-(R0) ;MOVE OUT ONE WORD CMP R1,#ABSLDR ;AT THE BEGINNING? BHI MOVE ;NOT YET, MOVE MORE MOV R0,PC ;DONE, SO START .PAGE .SBTTL THE LOADER ITSELF ; NOTE, THIS VERSION OF THE ABSOLUTE LOADER IS POSITION-INDEPENDENT ; L.CKSM= %0 ;CHECKSUM L.ADR= %1 L.BC= %2 L.BYT= %3 L.PTR= %5 L.SR= 177570 ;SWITCH REGISTER ; ; ; START OF LOADER ; ABSLDR: L.LD1: MOV PC,SP CMP -(SP),-(SP) MOV PC,L.PTR ADD #L.READ-.,L.PTR CLR L.ADR L.LD1B: MOV @#L.SR,@SP ROR @SP BCS L.LD1C CLR @SP BR L.LD2 L.LD1C: ASL @SP BNE L.LD2 MOV L.ADR,@SP ; ; LOOK FOR THE BEGINNING OF A BLOCK ; L.LD2: CLR L.CKSM JSR PC,@L.PTR DECB L.BYT BNE L.LD2 JSR PC,@L.PTR ; ; INPUT AND SAVE BYTE COUNT ; JSR PC,L.GWRD MOV R4,L.BC SUB #4,L.BC CMP #2,L.BC BEQ L.JMP JSR PC,L.GWRD ADD @SP,R4 MOV R4,L.ADR ; ; READ IN REST OF DATA ; L.LD3: JSR PC,@L.PTR BGE L.LD4 TSTB L.CKSM BEQ L.LD2 L.BAD: HALT BR L.LD2 L.LD4: MOVB L.BYT,(L.ADR)+ BR L.LD3 ; ; INPUT A FRAME, DECREMENT BYTE COUNT AND DO CHECKSUM ; L.READ: MOV L.DEV,L.BYT INCB @L.BYT L.R1: TSTB @L.BYT BPL L.R1 MOVB 2(L.BYT),L.BYT ADD L.BYT,L.CKSM BIC #177400,L.BYT DEC L.BC RTS PC ; ; ASSEMBLE ONE WORD ; L.GWRD: MOV (SP)+,L.TMP JSR PC,@L.PTR MOV L.BYT,R4 JSR PC,@L.PTR SWAB L.BYT BIC #377,L.BYT BIS L.BYT,R4 MOV L.TMP,PC ; ; CHECK JUMP ADDRESS ; L.JMP: JSR PC,L.GWRD JSR PC,@L.PTR TSTB L.CKSM BNE L.BAD ASR R4 BCC L.JMP1 HALT BR L.LD1B L.JMP1: ASL R4 ADD @SP,R4 JMP @R4 L.TMP: .WORD 0 ; ; ; NOW FOR THE BOOT LOADER ; .= ABSLDR+244 ;RELOCATE BOOT LOADER .WORD 16701,26,12702,352,5211,105711,100376 .WORD 116162,2 MEMSIZ: .WORD 0 ;FILLED IN BY RELOCATER .WORD 5267,177756,765 L.DEV= . ;SETUP BY RELOCATER ENDLDR= . ;END OF ABSLDR .END BEGIN ;END OF PROGRAM