In article <33299DEC.2DB7@ix.netcom.com>,
Bill Hockridge  <beh_inc@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@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


