; Dump of M9301-YA boot roms ; 23-034A9, 23-035A9, 23-036A9, and 23-037A9 ; This code depends on the fact that when location 173024 is read, ; the M9312 _modifies_ the data on the bus with the contents of S1. ; So treat references to 173024 like refernces to a register that ; allows S1 to be read. S1LOC = 173024 ; Low bank - contains CPU tests, and TA11 and RX11 bootsraps ; CPU Test 1 - Single operand tests 165000 005001 DIAGS: CLR R1 165002 005201 INC R1 165004 005101 COM R1 165006 006201 ASR R1 165010 006301 ASL R1 165012 006001 ROR R1 165014 005701 TST R1 ; Doesn't do anything? 165016 005401 NEG R1 165020 005301 DEC R1 165022 005601 SBC R1 165024 006101 ROL R1 165026 005501 ADC R1 165030 000301 SWAB R1 165032 001377 BNE . ; Loop on failure ; CPU Test 2 - Double operand tests 165034 012702 MOV #DOPDAT, R2 165036 165112 165040 011201 MOV @R2, R1 165042 022201 CMP (R2)+, R1 165044 001377 BNE . 165046 063201 ADD @(R2)+, R1 165050 165201 SUB @-(R2), R1 165052 044201 BIC -(R2), R1 165054 056201 BIS 4(R2), R1 165056 000004 165060 037201 BIT @6(R2), R1 165062 000006 165064 001777 BEQ . ; Loop on failure ; CPU Test 3 - Jump tests 165066 012701 MOV #JMPT, R1 165070 165074 165072 000111 JMP @R1 165074 000121 JMPT: JMP (R1)+ ; See M9312 Maint Man 165076 012701 MOV #JMPD, R1 165100 165106 165102 000131 JMP @(R1)+ 165104 000111 JMP @R1 ; Goes to BR below 165106 165104 JMPD: ; Jump test data 165110 000412 BR TST4 ; Next test 165112 165112 DOPDAT: ; Double op test data 165114 165122 165116 177777 165120 165116 165122 000001 165124 100000 BYTDAT: ; Byte test data 165126 177777 ; Double op non-mod test data 165130 177777 165132 177777 165134 177777 ; CPU Test 4 - Byte single operand tests 165136 105767 TST4: TSTB -16(PC) ; Should be zero (165124) 165140 177762 165142 001377 BNE . ; Loop on error 165144 012702 MOV #BYTDAT, R2 165146 165124 165150 105722 TSTB (R2)+ 165152 001377 BNE . ; Loop on error 165154 105712 TSTB @R2 165156 100377 BPL . ; Loop on error ; CPU Test 5 - Double operand non-modifying tests 165160 012703 MOV #165130, R3 165162 165130 165164 012702 MOV #165132, R2 165166 165132 165170 021322 CMP @R3, (R2)+ 165172 001377 BNE . ; Loop on error 165174 034342 BIT -(R3), -(R2) 165176 001777 BEQ . ; Loop on error ; Done with quick CPU checks, look to see if secondary tests or autoboot ; are desired, or just an immediate entry to the console, or a simulated ; power-fail restart ; Why the efff does anyone use pc-relative code in code which is not ; relocatable? It's not like it takes any less room! 165200 016701 MOV S1LOC, R1 ; PC = 165204 165202 005620 ; PC+5620 = 173024 165204 042701 BIC #177001, R1 ; Something other than quick console? 165206 177001 165210 001002 BNE 165216 ; Yes 165212 000167 JMP CONSEM ; PC = 165216 165214 005612 ; PC+5612 = 173030 165216 005000 CLR R0 165220 032701 BIT #774, R1 ; See if vector through PFR wanted 165222 000774 165224 001003 BNE TST6 ; No, keep going with tests 165226 012706 MOV #24, SP 165230 000024 165232 000002 RTI ; Simulates vector through PFR ; CPU Test 6 - Double operand modifying byte tests 165234 012705 TST6: MOV #MODDAT, R5 165236 165320 165240 012702 MOV #500, R2 165242 000500 165244 011503 MOV @R5, R3 165246 005012 CLR @R2 165250 112512 MOVB (R5)+, @R2 165252 005202 INC R2 165254 112512 MOVB (R5)+, @R2 165256 005302 DEC R2 165260 023512 CMP @(R5)+, @R2 165262 001015 BNE 165316 165264 005202 INC R2 165266 143522 BICB @(R5)+, (R2)+ 165270 024542 CMP -(R5), -(R2) 165272 143522 BICB @(R5)+, (R2)+ 165274 001010 BNE 165316 165276 011502 MOV @R5, R2 165300 016505 MOV -6(R5), R5 165302 177772 165304 110532 MOVB R4, @(R2)+ 165306 150572 BISB R5, @0(R2) 165310 000000 165312 020352 CMP R3, @-(R2) 165314 001407 BEQ TST7 165316 000000 HALT ; Test failure 165320 177777 MODDAT: ; Test data for test 6 165322 165320 165324 165130 165326 165330 165330 000500 165332 000501 ; CPU Test 7 - JSR tests 165334 012701 TST7: MOV #JSRT, R1 165336 165356 165340 011206 MOV @R2, SP ; Set stack to 500 (from above) 165342 005726 TST (SP)+ 165344 004311 JSR R3, @R1 165346 000000 JSRERR: HALT ; Halt on no jump 165350 004361 JSR R3, 4(R1) ; Try second JSR target 165352 000004 165354 000406 BR TST8 ; Now do memory test ; First JSR target 165356 005723 JSRT: TST (R3)+ 165360 001372 BNE JSRERR ; Halt on failure ; Second JSR target 165362 021605 CMP @SP, R5 165364 001370 BNE JSRERR ; Halt on failure 165366 000203 RTS R3 ; Next one 165370 000000 HALT ; Halt on no return ; Test 8 - Memory tests ; ; Will blow up spectacularly if there's a NXM in the first 8KB 165372 005006 TST8: CLR SP ; Set up to clear/test first 165374 012705 MOV #17776, R5 ; 8KB of memory 165376 017776 165400 005003 CLR R3 ; Fill with zeros 165402 010701 MOV PC, R1 ; Come back below when tested 165404 000430 BR TSTMEM 165406 012705 MOV #160000, R5 ; Now try up to top of address space 165410 160000 165412 012702 MOV #6, R2 ; Set up NXM vector 165414 000006 165416 012712 MOV #340, @R2 165420 000340 165422 010742 MOV PC, -(R2) ; Execution will jump to next inst on NXM 165424 012706 MOV #502, SP ; Reset stack 165426 000502 165430 005745 TST -(R5) ; See if that location's there 165432 012712 MOV #CONSEM, (R2) ; OK, finally found some memory 165434 173030 ; Set up to fall into console if NXM 165436 010701 MOV PC, R1 ; Come back below when tested 165440 000412 BR TSTMEM 165442 016702 MOV S1LOC, R2 ; PC = 165446 165444 005356 ; PC+5356 = 173024 165446 032702 BIT #770, R2 ; Auto-boot requested? 165450 000770 BR 165432 ; Results unused????? 165452 001402 BEQ 165460 ; How does the code get here??? 165454 022222 CMP (R2)+, (R2)+ 165456 000401 BR 165462 165460 010402 MOV R4, R2 165462 000167 JMP DOBOOT ; PC = 165466 165464 005734 ; PC+5734 = 173422 165466 010602 TSTMEM: MOV SP, R2 ; Work from 'top of stack' up 165470 010322 MOV R3, (R2)+ ; Fill with given constant 165472 020205 CMP R2, R5 ; R5 contains top 165474 101775 BLOS .-2 165476 005103 COM R3 ; Switch to inverse 165500 020342 MEMLP: CMP R3, -(R2) ; First, make sure it wrote OK 165502 001411 BEQ MEMERR ; Fail, halt 165504 010312 MOV R3, @R2 ; Now write other way 165506 020312 CMP R3, @R2 165510 001006 BNE MEMERR ; Fail, halt 165512 020206 CMP R2, SP ; All the way to the bottom? 165514 101371 BHI MEMLP 165516 005703 TST R3 ; Do second pass? 165520 001362 BNE TSTMEM ; Yes; otherwise use return in R1 165522 000167 JMP R1RTN ; PC = 165526 165524 005556 ; PC+5556 = 173304 165526 010300 MEMERR: MOV R3, R0 ; Set up to display error 165530 011204 MOV @R2, R4 ; data on restart 165532 010206 MOV R2, R6 165534 000000 HALT ; Halt on failure ; TA11 boot? 165536 000304 SWAB R4 165540 010411 MOV R4, @R1 165542 012705 MOV #165624, R5 165544 165624 165546 012704 MOV #375, R4 165550 000375 165552 112503 MOVB (R5)+, R3 165554 112511 MOVB (R5)+, @R1 165556 100407 BMI 165576 165560 130311 BITB R3, @R1 165562 001776 BEQ .-1 165564 105204 INCB R4 165566 100772 BPL 165554 165570 116114 MOVB 2(R1), @R4 165572 000002 165574 000771 BR 165560 165576 005711 TST @R1 165600 100407 BMI 165620 165602 010103 MOV R1, R3 165604 122737 CMPB #240, @#0 ; check for 240 magic number 165606 000240 165610 000000 165612 001002 BNE 165620 165614 010300 MOV R3, R0 ; drive number 165616 005007 CLR PC ; jump to 0 ; return to console emulator? 165620 000167 JMP 5552(PC) ; PC = 165624 165622 005552 ; PC+5552 = 173376 165624 017640 165626 002415 165630 112024 ; RX11 boot ; R1 == CSR ; R0 == drive number 165632 012704 MOV #123667, R4 ; status masks 247 (10100111), 167 (01101111) 165634 123667 ; 10100111 10110111 165636 010003 MOV R0, R3 ; save drive number 165640 131700 BITB @PC, R0 ; AND 01 (hack - uses low byte of next inst) 165642 001001 BNE 165646 ; go if not drive 0 165644 000304 SWAB R4 ; swap mask bytes ; RESET has init'd RX01 and cleared status 165646 105711 TSTB (R1) ; read RXCS 165650 001776 BEQ 165646 ; loop until TR or DONE is set 165652 012705 MOV #000003, R5 ; load R5 as pass counter 165654 000003 ; first pass issue read sector command ; second pass load RXDB with sector number ; third pass load RXDB with track number ; fourth pass, R5 == C == 0, issue empty buffer command 165656 000261 SEC ; set C for first pass flag 165660 010411 MOV R4, (R1) ; issue a command to the drive ; pass 1 ; CSR writable bits 0100000001011111 ; drive 0 -> 1011011110100111 ; 0000000000000111 ; FUNC=READ SECTOR, GO, DRIVE 0 ; drive 1 -> 1010011110110111 ; 0000000000010111 ; FUNC=READ SECTOR, GO, DRIVE 1 165662 141704 BICB (PC), R4 ; clear bits in R4 command/mask ; 0011001001000100 ; setup for fourth pass ; drive 0 -> 1000010110100011 ; FUNC=EMPTY BUFFER, GO, DRIVE 0 ; drive 1 -> 1000010110110011 ; FUNC=EMPTY BUFFER, GO, DRIVE 1 165664 031104 BIT (R1), R4 ; read status of the drive and mask it ; CSR readable bits 1000000011100000 ; drive 0 -> 1000010110100011 ; drive 1 -> 1000010110110011 ; 1000000010100000 ; ERROR, TR, DONE 165666 001776 BEQ .-1 ; no error, not done and no transfer request, loop 165670 100753 BMI 165620 ; ERROR bit is set, go 165672 103405 BLO 165706 ; C = 1, still working on sector read command, go 165674 131104 BITB (R1), R4 ; AND CSR with TR, DONE mask 165676 100342 BPL 165604 ; TR = 0, DONE = 1, done with buffer empty, go 165700 116125 MOVB 2(R1), (R5)+ ; transfer sector data to low memory 165702 000002 165704 000767 BR 165664 165706 006205 ASR R5 ; lsb into C 165710 103363 BHIS 165660 ; C = 0, go and R5 is now zero 165712 112761 MOVB #000001,2(R1) ; write 1 to RXDB for sector and track 165714 000001 165716 000002 165720 000761 BR 165664 ; Junk ASCII (part of program listing) 165722 020040 165724 020040 165726 032063 165730 030411 165732 031467 165734 033462 165736 004466 165740 030060 165742 030065 165744 030460 165746 004411 165750 004411 165752 046103 165754 004522 165756 030522 165760 004411 165762 044473 165764 042116 165766 054105 165770 052040 165772 020117 165774 040524 165776 046102 ; High bank - contains console emulator and all bootsraps other than ; TA11 and RX11 ; The general format of each entry point is that it contains a pair of ; branches, the first to a shared jump to the diagnostic, the second to ; the boot code. ; The boot code assumes that following that pair of branches, there will ; be i) a pointer to the devices CSR, and ii) a per-device code stub, to ; which the boot code jumps after doing some basic setup. Generally, the ; stub then leaves to some common code for that class of device (disk, ; tape, per character device, etc). ; In general, throughout the code below, R1 and R3 are used to hold ; 'subroutine' return points. On the 'call', Rx points to the location ; _before_ the location to return to; on 'return', the 'return point' ; is advanced _over_ two words, then jumps to the second word. This allows ; code of the form: ; ; MOV PC, Rx ; call-via-branch ; single-word-instruct ; call-via-branch ; single-word-instruct ; call-via-branch ; etc ; ; without needing to reload the return point (in Rx) each time. ; Entry point -- Console emulator w/ CPU Diagnostics ; DIP switches xx11111111 (173000) 173000 000574 BR GODIAG ; Entry point -- Diagnostics, then emulate power-fail restart trap through 24 ; DIP switches xx11111110 (173002) 173002 000573 BR GODIAG ; Commands (stuck here apparently because they just fill the hole between ; the two entries above, and the power-fail prototype PS/PC below, which ; _must_ be at 173024) ; Deposit command 173004 010701 MOV PC, R1 ; Get new data 173006 000467 BR RDNUM 173010 010015 MOV R0, @R5 ; Store it 173012 000421 BR DOCMD ; Back to console emulator ; Load address command 173014 010701 MOV PC, R1 ; Get address 173016 000463 BR RDNUM 173020 010005 MOV R0, R5 ; R5 hold current address 173022 000414 BR DOCMD ; Back to console emulator ; Power-on auto-start prototype PC+PS; actual new PC is or'd with ; switch S1-3 (bit 8, 4xx) through S1-10 (bit 1, 2) ; Location 173024 is magic - see comment in header 173024 173000 ; PC - prototype entry 173026 000340 ; PS - no interrupts ; Entry point -- Console Emulator ; DIP switches xx11110011 (173030) 173030 010701 CONSEM: MOV PC, R1 ; Save return point 173032 000516 BR PRCRLF ; And print 173034 000240 NOP ; Print R0 173036 000525 BR PRNUM 173040 010400 MOV R4, R0 ; Print R4 173042 000523 BR PRNUM 173044 010600 MOV SP, R0 ; Print SP 173046 000521 BR PRNUM 173050 010500 MOV R5, R0 ; Print R5 173052 000517 BR PRNUM ; Then fall through ; Console code - prompt and boot/command decode 173054 005004 CONS: CLR R4 173056 012700 DOCMD: MOV #CMDTBL, R0 ; Pointer to prompt and 173060 173726 ; table of commands 173062 112002 PRPRMT: MOVB (R0)+, R2 ; Get prompt character 173064 010703 MOV PC, R3 173066 000466 BR PRCH ; Print it 173070 001374 BNE PRPRMT ; Not null end marker, keep going 173072 010703 GETCMD: MOV PC, R3 173074 000455 BR GETCH ; Read character (into R2) 173076 000302 SWAB R2 173100 001774 BEQ GETCMD ; On null char, try again 173102 005001 CLR R1 ; Boot/command number 173104 020220 CHKCMD: CMP R2, (R0)+ ; Does this entry match? 173106 001404 BEQ 173120 ; Yes, go create xfer loc 173110 005201 INC R1 ; No, increment command number 173112 005710 TST (R0) ; End of table (0 entry indicates) 173114 001373 BNE CHKCMD ; No, try next one 173116 000757 BR DOCMD ; Didn't recognize, restart 173120 012702 MOV #175400, R2 ; Prepare to construct boot / 173122 175400 ; command location 173124 156102 BISB ENTLOC(R1), R2 ; Add in index (command number) 173126 173764 173130 006302 ASL R2 ; Convert to words 173132 020204 CMP R2, R4 ; ?? 173134 001001 BNE 173140 173136 005725 TST (R5)+ ; ?? 173140 010204 MOV R2, R4 173142 020127 CMP R1, #10 ; Boot, or command 173144 000010 173146 103133 BGT GODEV ; Command 173150 010701 MOV PC, R1 173152 000405 BR RDNUM 173154 105737 TSTB @#S1LOC 173156 173024 173160 001115 BNE SETMEM 173162 000137 JMP TST6 ; Do rest of diagnostics first 173164 165234 ; Read in an octal number into R0; return via R1 173166 005000 RDNUM: CLR R0 ; Accumulate sum in R0 173170 005002 NUMLP: CLR R2 ; Clear high part of R2 (for range check) 173172 010703 MOV PC, R3 ; Get a character (echoed) in R2 173174 000415 BR GETCH 173176 120227 CMPB R2, #15 ; Was it a CR? 173200 000015 173202 001440 BEQ R1RTN ; OK, done 173204 162702 SUBB #70, R2 ; Convert ASCII to digit, with 173206 000070 ; range checking 173210 062702 ADD #10, R2 173212 000010 173214 103317 BCC CONS ; Character out of range, restart console 173216 006300 ASL R0 ; R0 << 3 173220 006300 ASL R0 173222 006300 ASL R0 173224 050200 BIS R2, R0 ; Stick nex digit into low bits 173226 000760 BR NUMLP ; Get a character (returned in R2) and echo (via fall-through); ; return via R3 173230 105737 GETCH: TSTB @#177560 ; Check ready bit on console CSR input 173232 177560 173234 100375 BPL .-2 ; Loop until character available 173236 105002 CLRB R2 ; Load data character into R2 173240 153702 BISB @#177562, R2 ; MOVB would bash high bits of R2 173242 177562 ; Type a character (in R2); return via R3 173244 105737 PRCH: TSTB @#177564 ; Check ready bit on console CSR output 173246 177564 173250 100375 BPL .-2 ; Loop until transmit buffer empty 173252 110237 MOVB R2, @#177566 ; Echo the received character 173254 177566 173256 022323 CMP (R3)+, (R3)+ ; Fix-up return location 173260 142702 BICB 000200, R2 ; Clear bit 7 of input character 173262 000200 173264 000163 JMP -2(R3) ; R3 left pointing after return so that 173266 177776 ; multiple calls don't need to reload ; Print a CR/LF pair; return via R1 173270 012702 PRCRLF: MOV #5015, R2 ; 'CR/LF' 173272 005015 ; Print two characters; ; return via R1 173274 010703 PRDBL: MOV PC, R3 ; Save return point 173276 000762 BR PRCH ; Print the CR 173300 000302 SWAB R2 173302 000760 BR PRCH ; Now the LF ; Utility - advances 'return point' kept in R1 over two words, then jumps ; to the second one (see comment at head of second bank about use of R1 ; as a return point) 173304 022121 R1RTN: CMP (R1)+, (R1)+ 173306 000161 JMP -2(R1) 173310 177776 ; Print a number; called with number to print in R0, 'return point' in R1 ; ; Algorithm is somewhat obscure, I don't totally understand it 173312 012702 PRNUM: MOV #30, R2 ; Prepare to compute digit 173314 000030 ; This will print leading '0' 173316 000261 SEC 173320 006100 NUMLP: ROL R0 173322 106102 ROL R2 173324 010703 MOV PC, R3 ; Print previous digit 173326 000746 BR PRCH 173330 012702 MOV #20206, R2 ; Constant is '0'/8+0200 (low) 173332 020206 ; and ' ' (high) 173334 006300 NUMDIV: ASL R0 173336 001403 BEQ NUMDN ; All bits now printed? 173340 106102 ROLB R2 173342 103774 BCS NUMDIV ; Was the high bit a 1? 173344 000765 BR NUMLP ; No, set up for next digit 173346 105002 NUMDN: CLRB R2 173350 000751 BR PRDBL ; More action routines for console emulator; both called with current ; location in R5 ; Start 173352 000005 START: RESET 173354 000115 JMP @R5 ; No return, of course ; Examine; print location, then contents 173356 010500 EXAM: MOV R5, R0 173360 010701 MOV PC, R1 173362 000753 BR PRNUM 173364 011500 MOV @R5, R0 173366 000751 BR PRNUM 173370 000632 BR DOCMD ; Back to console emulator ; Shared jump to diagnostic 173372 000137 GODIAG: JMP @#DIAGS ; Jump to diagnostics 173374 165000 ; ?? 173376 005316 DEC @SP ; ?? 173400 001014 BNE STDEV 173402 000000 HALT ; Common code to set up auto-boot 173404 005000 GOBOOT: CLR R0 173406 013704 MOV @#S1LOC, R4 ; Get boot type from 'S1' 173410 173024 173412 005724 TST (R4)+ ; Skip over 'BR GOBOOT' in entry 173414 010402 SETMEM: MOV R4, R2 ; R2 now points to device address 173416 012705 MOV #17776, R5 ; Assume 4KW memory, get top 173420 017776 173422 012201 DOBOOT: MOV (R2)+, R1 ; Get device address 173424 010506 MOV R5, SP ; Set stack to top of min memory 173426 012716 MOV #4012, (SP) ; ?? 173430 004012 173432 000005 STDEV: RESET 173434 010004 MOV R0, R4 ; drive number (?) 173436 000112 GODEV: JMP @R2 ; Jump to per-device code, in ; entry point after CSR loc ; Entry point -- RK11 Boot w/ Diagnostic ; DIP switches xx01101111 (173440) 173440 000754 BR GODIAG ; Entry point -- RK11 boot ; DIP switches xx01101110 (173442) 173442 000760 BR GOBOOT 173444 177404 ; RK11 CSR 173446 052704 BIS #10, R4 173450 000010 173452 006304 ASL R4 173454 103376 BPL .-1 173456 010461 MOV R4, 6(R1) 173460 000006 173462 005004 CLR R4 173464 000405 BR 173500 ; Entry point -- RP11 Boot w/ Diagnostic ; DIP switches xx01100100 (173466) 173466 000741 BR GODIAG ; Entry point -- RP11 Boot ; DIP switches xx01100011 (173470) 173470 000745 BR GOBOOT 173472 176714 ; RP11 CSR 173474 000304 SWAB R4 173476 010411 MOV R1, @R1 173500 062704 ADD #5, R4 173502 000005 173504 000435 BR 173600 ; Entry point -- TC11 Boot w/ Diagnostic ; DIP switches xx01101100 (173506) 173506 000731 BR GODIAG ; Entry point -- TC11 Boot ; DIP switches xx01101011 (173510) 173510 000735 BR GOBOOT 173512 177342 ; TC11 Command 173514 000412 BR TPBOOT 173516 004011 JSR R0, @R1 173520 174002 173522 100000 ; Entry point -- TM11 Boot w/ Diagnostic ; DIP switches xx01100101 (173524) 173524 000722 BR GODIAG ; Entry point -- TM11 Boot ; DIP switches xx01100100 (173526) 173526 000726 BR GOBOOT 173530 172522 ; TM11 Command 173532 000403 BR TPBOOT 173534 060017 173536 177772 173540 000200 ; Shared tape booting code 173542 010203 TPBOOT: MOV R2, R3 173544 005723 TST (R3)+ 173546 000304 SWAB R4 173550 062304 ADD @R3, R4 173552 010421 MOV R4, (R1)+ 173554 005311 DEC @R1 173556 062704 ADD #-6, R4 173560 177772 173562 010441 MOV R4, -(R1) 173564 062304 ADD (R3)+, R4 173566 031311 BIT @R3, @R1 173570 001776 BEQ .-1 173572 122341 CMPB (R3)+, -(R1) 173574 122321 CMPB (R3)+, (R1)+ 173576 001277 BNE 173376 173600 012761 MOV #-1000, 2(R1) 173602 177000 173604 000002 173606 010411 MOV R4, @R1 173610 105711 TSTB @R1 173612 100376 BPL .-1 173614 005711 TST @R1 173616 100667 BMI 173376 173620 105011 CLB @R1 173622 005007 CLR PC ; Jump to zero ; Entry point -- TA11 Boot w/ Diagnostic ; DIP switches xx00110101 (173624) 173624 000662 BR GODIAG ; Entry point -- TA11 Boot ; DIP switches xx00110100 (173626) 173626 000666 BR GOBOOT 173630 177500 ; TA11 CSR address 173632 000137 JMP 165536 173634 165536 ; Entry point -- RX11 Boot w/ Diagnostic ; DIP switches xx00110000 (173636) 173636 000655 BR GODIAG ; Entry point -- RX11 Boot ; DIP switches xx00101111 (173640) 173640 000661 BR GOBOOT 173642 177170 ; RX11 CSR address 173644 000137 JMP 165632 173646 165632 ; Entry point -- DL11 Boot w/ Diagnostic ; DIP switches xx00101011 (173650) 173650 000650 BR GODIAG ; Entry point -- DL11 Boot ; DIP switches xx00101010 (173652) 173652 000654 BR GOBOOT 173654 177560 ; DL11 CSR address 173656 000403 BR CHARBT ; Entry point -- PC11 Boot w/ Diagnostic ; DIP switches xx00100111 (173660) 173660 000644 BR GODIAG ; Entry point -- PC11 Boot ; DIP switches xx00100110 (173662) 173662 000650 BR GOBOOT 173664 177550 ; PC11 CSR address ; Character-at-a-time device boot 173666 010115 CHARBT: MOV R1, (R5) ; top of memory xxx776 173670 042705 BIC #000024, R5 ; xxx752 173672 000024 173674 010515 MOV R5, (R5) ; loop entry 173676 011503 MOV (R5), R3 173700 005211 INC (R1) ; set ready run flag 173702 105711 TSTB (R1) ; check char ready bit 173704 100376 BPL 173702 ; no char yet, go 173706 116113 MOVB 2(R1), (R3) ; get char and store 173710 000002 173712 005215 INC (R5) 173714 120327 CMPB R3,#000375 173716 000375 173720 001366 BNE 173676 173722 105223 INCB (R3)+ 173724 000143 JMP -(R3) ; Bootstrap / command table 173726 005015 CMDTBL: ; LF/CR 173730 000044 ; NULL, $ 173732 052124 ; T, T TT teletype reader 173734 045504 ; K, D DK RK11 173736 052104 ; T, D DT DECtape 173740 052115 ; T, M MT magtape 173742 050104 ; P, D DP RP02/03 173744 052103 ; T, C CT cassette tape 173746 051120 ; R, P PR paper tape 173750 054104 ; X, D DX diskette 173752 006523 ; CR, S start 173754 020105 ; SP, E examine 173756 020104 ; SP, D deposit 173760 020114 ; SP, L load address 173762 000000 ; End of table marker ; Table of boot strap entry location / command addresses, indexed ; by entry number in table above 173764 111326 ENTLOC: ; DK, TT 173766 126245 ; MT, DT 173770 146235 ; CT, DP 173772 150732 ; DX, PR 173774 073565 ; examine, start 173776 003002 ; load, deposit