TMSCP bootstrap
Lyle Bickley
lbickley at bickleywest.com
Sun Aug 14 11:05:33 CDT 2005
Great find! Thanks Al.
Lyle
On Saturday 13 August 2005 22:23, Al Kossow wrote:
> Until a MU prom can be found, this may help.
>
> --
>
> In article <33299DEC.2DB7 at ix.netcom.com>,
>
> Bill Hockridge <beh_inc at ix.netcom.com> 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 at 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
--
Lyle Bickley
Bickley Consulting West Inc.
Mountain View, CA
http://bickleywest.com
"Black holes are where God is dividing by zero"
More information about the cctalk
mailing list