In article <33299DEC.2DB7@ix.netcom.com>, Bill Hockridge wrote: >I'm looking for the bootstrap loader code to boot a PDP-11/70 from a >TU-81 plus tape drive (M8739 controller card). > >Does anyone have access to the loader code or know where I can find it? Below are some responses that Robin Birch collected and then forwarded to me when I asked a similar question. These form the very first entries in an archive of bootstraps that is available at http://sunsite.unc.edu/pub/academic/computer-science/history/pdp-11/bootstraps The original attributions for the bootstraps below belong with BSD 2.x (through Steven Schultz) and RT-11 (through Bob Schor). Tim. (shoppa@triumf.ca) ----------------cut here--------- Here's the TMSCP togglein routine. You start depositing at location 01000. The source is included. as -o a.out tk.s strip a.out dd if=a.out of=b.out bs=16 skip=1 od b.out The 'dd' is needed to removed the a.out header. Enjoy. Steven #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create: # b.od # tk.s # This archive created: Sun Jan 21 14:06:24 1996 export PATH; PATH=/bin:/usr/bin:$PATH if test -f 'b.od' then echo shar: "will not over-write existing file 'b.od'" else cat << \SHAR_EOF > 'b.od' 0000000 000000 000000 000000 000000 000000 000000 000000 000000 * 0001000 005701 001002 012701 174500 005021 012704 004000 005002 0001020 105022 020204 103775 010705 062705 000234 005711 100002 0001040 005741 000762 030411 001772 012511 006304 100367 012737 0001060 000400 002102 012737 000044 002100 010037 002110 012737 0001100 000011 002114 012737 020000 002116 012702 002004 012722 0001120 002020 010203 010422 012722 002104 010422 014102 005713 0001140 100776 105737 002032 001320 012702 002114 012722 000045 0001160 012722 020002 005022 005022 005022 010413 010437 002012 0001200 011102 005713 100776 105737 002032 001276 012702 002114 0001220 012722 000041 012722 020000 012722 001000 005022 005022 0001240 010413 010437 002012 011102 005713 100776 105737 002032 0001260 001253 005007 100000 002004 000000 000001 0001274 SHAR_EOF fi if test -f 'tk.s' then echo shar: "will not over-write existing file 'tk.s'" else cat << \SHAR_EOF > 'tk.s' . = .+ 01000 / TMSCP bootrom code. / R0 = Unit to boot from / R1 = CSR of controller (0 if default 174500 to be used) start: tst r1 bne rewind mov $174500,r1 rewind: clr (r1)+ / start tk init sequence / move pointer to tksa register mov $4000,r4 / state test bit to step 1 clr r2 / clear bottom 4000(8) bytes 1: clrb (r2)+ cmp r2,r4 blo 1b mov pc,r5 / position independent address add $cmdtbl-.,r5 / of init seq table 2: tst (r1) / error ? bpl 1f / no - skip the backup tst -(r1) / put CSR back to entry value br rewind / might as well go try again 1: bit r4,(r1) / current step done ? beq 2b / no mov (r5)+,(r1) / yes, load next step info from table asl r4 / change state test bit to next step bpl 2b / if all steps not done, go back / r4 now = 100000, TK_OWN bit mov $400,*$cmdhdr+2 / tape VCID = 1 mov $36.,*$cmdhdr / command packet length / don't set response packet length, / little shakey but it works. mov r0,*$unit / set unit in packet mov $11,*$tkcmd+8. / on-line command opcode mov $20000,*$tkcmd+10. / set clear serious exception mov $ring,r2 / initialize cmd/rsp ring mov $tkrsp,(r2)+ / address of response packet mov r2,r3 / save address "ring+2" mov r4,(r2)+ / set TK owner mov $tkcmd,(r2)+ / address of command packet mov r4,(r2)+ / set TK owner mov -(r1),r2 / start TK polling 3: tst (r3) / wait for response (ring+2) bmi 3b tstb *$tkrsp+10. bne rewind mov $tkcmd+8.,r2 mov $45,(r2)+ / reposition opcode mov $20002,(r2)+ / set rewind & clear serious exception clr (r2)+ / clear record/object count clr (r2)+ / zzz2 clr (r2)+ / clear tape mark count mov r4,(r3) / set TK owner of response (ring+2) mov r4,*$ring+6 / set TK owner of command mov (r1),r2 / start TK polling 1: tst (r3) / wait for response (ring+2) bmi 1b tstb *$tkrsp+10. / does returned status = SUCCESS ? bne rewind / no, hang mov $tkcmd+8.,r2 mov $41,(r2)+ / read opcode mov $20000,(r2)+ / set clear serious exception mov $512.,(r2)+ / byte count clr (r2)+ / zzz2 clr (r2)+ / buffer address is 0 mov r4,(r3) / set TK owner of response (ring+2) mov r4,*$ring+6 / set TK owner of command mov (r1),r2 / start TK polling 1: tst (r3) / wait for response (ring+2) bmi 1b tstb *$tkrsp+10. / does returned status = SUCCESS ? bne rewind / no, hang clr pc cmdtbl: 100000 / TK_ERR, init step 1 ring / address of ringbase 0 / hi ringbase address 1 / TK go bit end: cmdint = 2000 / TMSCP stuff starts at 1kb rspint = cmdint+2. ring = rspint+2. rsphdr = ring+8. tkrsp = rsphdr+4. cmdhdr = tkrsp+48. tkcmd = cmdhdr+4. unit = tkcmd+4 SHAR_EOF fi exit 0 # End of shell archive ---------------------------------------------------------------------------- TMSCP Bootstrap RT-11 Installation Guide (AA-H376F-TC) Toggle the following instructions into memory, starting at address 076026 (the last instruction goes into 076176). When done, check to make sure all addresses have the correct content, then start running from 076026. Note that this asssumes that a bootable tape is loaded in the MU: device. 076100 100077 076102 105237 076104 100075 076106 010037 076110 100104 076112 112437 076114 100115 076116 112437 076120 100110 076122 010522 076124 010522 076026 005000 076126 012722 076030 012701 076130 100100 076032 174500 076132 010512 076034 012704 076134 024242 076036 076160 076136 005711 076040 012705 076140 005712 076042 004000 076142 100776 076044 010102 076144 005737 076046 012422 076146 100012 076050 005712 076150 001331 076052 100770 076152 105704 076054 031205 076154 100344 076056 001774 076156 005007 076060 012412 076160 046525 076062 006305 076162 100000 076064 100371 076164 100200 076066 010502 076166 000000 076070 005022 076170 000001 076072 105702 076172 004400 076074 100375 076174 020476 076076 105237 076176 020402