All these bootstraps (except paper tape) are designed to read in 512 bytes
into locations 0-776, and then start program execution at 0. If you are
having system problems, then it pays to have the bootstrap halt, so that
you can check for error conditions in device registers. Also, check location
0, which is normally 240 for DEC bootstraps and 407 or 411 (separate I/D space)
for Unix (unless it's a tight load, and the a.out header has been removed).
Some DEC bootstraps refuse to load boot blocks that don't begin with 240.
If you have doubts, load location 0 with 777 before you start the bootstrap.
Toggle in these programs starting at location 1000. To be safe, load a trap
catcher into the following locations, and if you get a halt at 6 or 12,
check the program or missing device. If it halts at 26, then you have
power supply problems. If the CPU loops on location 0 (can show as location 2
on CPUs with data displays) then the bootblock wasn't loaded.
Location Contents Comment
=======================================
000000 000777 Loop at location zero if
000002 000000 secondary bootstrap isn't loaded
000004 000006 Bus error
000006 000000
000010 000012 Reserved instruction
000012 000000
000024 000026 Power failure
000026 000000
PC Paper Tape or Teletype
The paper tape bootstrap is a two stage process. First the
bootstrap loader must be toggled in at the appropriate location
(set table for xx). A special bootstrap tape (Absolute Loader)
must be in the reader
with the leader (punch 351) in the read frame. The program is then started
at location xx7744. The program is self-modifying, so if you read the
wrong tape, or position it incorrectly, it will corrupt itself. The
program will halt when the last frame of the loader is read. Put in the
tape you want loaded (on blank leader) and press continue or start at
xx7500
Loc. Cont. Label Instruction Comment
================================================
xx7744 016701 mov device,r1 get csr address
xx7746 000026
xx7750 012702 loop: mov #offset,r2 get offset
xx7752 000352 offset:
xx7754 005211 inc (r1) read frame
xx7756 105711 wait: tstb (r1) wait for ready
xx7760 100376 bpl wait
xx7762 116162 movb (r1),bnk(r2) store data
xx7764 000002
xx7766 xx7400
xx7770 005267 inc offset bump address
xx7772 177756
xx7774 000765 br loop
xx7776 177550 device: HSR csr, or 177560 for teletype
Where
xx Memory Size
===========================
017744 4k
037744 8K
057744 12K
077744 16k
117744 20k
137744 24k
157744 28k
RK02/03/05 Disk Unit 0
Loc. Cont. Instruction Comment
=======================================
001000 012700 mov #rkwc, r0 controller address
001002 177406
001004 012710 mov #-256,(r0) set the word count
001006 177400
001010 012740 mov #5,-(r0) read command
001012 000005
001014 105710 tstb (r0) wait for ready
001016 100376 bpl .-2
001020 000000 halt (or 005007 to auto start)
RK02/03/05 Disk Unit x
Loc. Cont. Instruction Comment
=======================================
001000 012737 mov #unit,rkda set the unit address
001002 000000 unit 0
020000 unit 1
040000 unit 2
060000 unit 3
001004 177412
001006 012700 mov #rkwc, r0 controller address
001010 177406
001012 012710 mov #-256,(r0) set the word count
001014 177400
001016 012740 mov #5,-(r0) read command
001020 000005
001022 105710 tstb (r0) wait for ready
001024 100376 bpl .-2
001026 000000 halt (or 005007 to auto start)
RK06 Disk
Loc. Cont. Instruction Comment
=======================================
001000 012700 mov #rkcs1,r0 controller register
001002 177440
001004 012710 mov #cmd,(r0)
001006 000003
001010 032710 bit #flags,(r0) wait for ready or error
001012 100200
001014 001775 beq .-4
001016 012760 mov #-256,2(r0) set the word count
001020 177400
001022 000002
001024 012710 mov #cmd,(r0) read block
001026 000021
001030 032710 bit #flags,(r0) wait for ready or error
001032 100200
001034 001775 beq .-4
001036 000000 halt (or 5007 for auto start)
RK07 Disk
Loc. Cont. Instruction Comment
=======================================
001000 012700 mov #rkcs1,r0 controller register
001002 177440
001004 012710 mov #cmd,(r0)
001006 002003
001010 032710 bit #flags,(r0) wait for ready or error
001012 100200
001014 001775 beq .-4
001016 012760 mov #-256,2(r0) set the word count
001020 177400
001022 000002
001024 012710 mov #cmd,(r0) read block
001026 000021
001030 032710 bit #flags,(r0) wait for ready or error
001032 100200
001034 001775 beq .-4
001036 000000 halt (or 5007 for auto start)
RL01/02 Disk
Loc. Cont. Instruction Comment
=======================================
001000 012700 mov #rlcs,r0 controller address
001002 174400
001004 012760 mov #cmd,4(r0) seek command data
001006 000013
001010 000004
001012 012710 mov #cmd,(r0) get status
001014 000004
001016 105710 tstb (r0) wait ready
001020 100376 bpl .-2
001022 005060 clr 2(r0) zero bus address
001024 000002
001026 005060 clr 4(r0) zero disk address
001030 000004
001032 012760 mov #-256,6(r0) set the byte count
001034 177400
001036 000006
001040 012710 mov #cmd,(r0) read block
001042 000014
001044 105710 tstb (r0) wait ready
001046 100376 bpl .-2
001050 000000 halt (or 5007 to auto start)
RP03 Disk
Loc. Cont. Instruction Comment
=======================================
001000 012700 mov #rpwc, r0 controller address
001002 176726
001004 005040 clr -(r0) clear disk address
001006 005040 clr -(r0) clear cylinder address
001010 005040 clr -(r0) clear bus address
001012 012740 mov #-256,-(r0) set work count for 512 bytes
001014 177400
001016 012740 mov #cmd,-(r0) read block
001020 000005
001022 105710 tstb (r0) wait ready
001024 100376 bpl .-2
001026 00000 halt (or 5007 for auto start)
TC-11 DECtape
Loc. Cont. Instruction Comment
=======================================
001000 012700 mov #tcwc control register address
001002 177344
001004 012710 mov #-256,(r0) set word count for 512 bytes
001006 177400
001010 012740 mov #4002,-(r0) find position
001012 004002
001014 005710 tst (r0) wait for ready
001016 100376 br .-2
001020 012710 mov #3,(r0) read block 0
001022 000003
001024 105710 tstb (r0) wait for ready
001026 100376 bpl .-2
001030 012710 mov #5,(r0) stop tape
001032 000005
001034 105710 tstb (r0) wait for ready
001036 100376 bpl .-2
001040 000000 halt (or 5007 to auto start)
TM-11 Magnetic Tape
Please note that this bootstrap starts at 010000 instead of 01000 to
allow for large boot blocks. If the bootstrap loops at location 10034
then there was an error reading the tape.
Loc. Cont. Instruction Comment
=======================================
010000 012700 mov #mtbrc,r0 controller address
010002 172524
010004 005310 dec (r0) set to -1
010006 012740 mov #cmd,-(r0) high density, skip block
010010 060011
010012 105710 tstb (r0) wait ready
010014 100376 bpl .-2
010016 005710 tst (r0) test for error
010020 100767 bpl start try again on error
010022 012710 mov #cmd,(r0) read block
010024 060003
010026 105710 tstb (r0) wait ready
010030 100376 bpl .-2
010032 005710 tst (r0) test for error
010034 100777 bpl . loop for ever on error
010036 000000 halt (or 5007 to auto start)