Difference between revisions of "PDP-11 Bootstrap Loader"

From Computer History Wiki
Jump to: navigation, search
(Program: correct loc)
m (Better cat)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
The '''PDP-11 Bootstrap Loader''' is a short [[program]] designed to be loaded into the [[main memory]] on a [[PDP-11]] via the [[front panel]]; it is then run to load an initial program into the machine. I.e it is a way of [[bootstrap]]ping a totally empty machine, one with no [[Read-only memory|ROM]].
+
The '''PDP-11 Bootstrap Loader''' is a short [[program]] designed to be loaded into the [[main memory]] on a [[PDP-11]] via the [[front panel]]; it is then run to load an initial program into the machine. I.e. it is a way of [[bootstrap]]ping a totally empty machine, one with no [[Read-only memory|ROM]].
  
 
It is designed to be absolutely as short as possible (since it is manually toggled in via the [[switch register]]), and therefore has limitations, including how long a program can be loaded using it, and where in memory that program can be placed. The usual program to load with it is the [[PDP-11 Absolute Loader]], which relaxes both of those limitations.
 
It is designed to be absolutely as short as possible (since it is manually toggled in via the [[switch register]]), and therefore has limitations, including how long a program can be loaded using it, and where in memory that program can be placed. The usual program to load with it is the [[PDP-11 Absolute Loader]], which relaxes both of those limitations.
Line 11: Line 11:
 
The program starts with the pointer set to itself, so the blank leader at the start of the data for the bootstrap loader (originally contained on [[paper tape]]s) starts with a special leader code which causes this to be left un-changed.
 
The program starts with the pointer set to itself, so the blank leader at the start of the data for the bootstrap loader (originally contained on [[paper tape]]s) starts with a special leader code which causes this to be left un-changed.
  
The buffer pointer is then modified to point it slightly before the bootrap loader in memory, so at the end of the load the newly loaded code then progressively overlays the first several [[instruction]]s of the bootstrap loader itself, finally patching the buffer pointer to point at the branch instruction, which is then modified to jump to the newly loaded code.
+
The buffer pointer is then modified to point it slightly before the bootstrap loader in memory, so at the end of the load the newly loaded code then progressively overlays the first several [[instruction]]s of the bootstrap loader itself, finally patching the buffer pointer to point at the branch instruction, which is then modified to jump to the newly loaded code.
  
 
===Code===
 
===Code===
Line 21: Line 21:
 
  0x7746 000026
 
  0x7746 000026
 
  0x7750 012702 LOOP: MOV (PC)+, R2 ; Get buffer offset
 
  0x7750 012702 LOOP: MOV (PC)+, R2 ; Get buffer offset
  0x7752 000352 OFFSET: 0352
+
  0x7752 000352 OFFSET: .-LOAD
 
  0x7754 005211 INC @R1 ; Turn on reader
 
  0x7754 005211 INC @R1 ; Turn on reader
 
  0x7756 105711 READY: TSTB @R1 ; Done?
 
  0x7756 105711 READY: TSTB @R1 ; Done?
Line 40: Line 40:
 
* Load offset (1 byte)
 
* Load offset (1 byte)
 
* Program to be loaded (up to 0344 bytes)
 
* Program to be loaded (up to 0344 bytes)
* Copy of boostrap loader (first 7 bytes)
+
* Copy of boostrap loader (first 6 bytes)
* Branch offset (1 byte)
+
* Offset to branch (1 byte)
 +
* Branch modification (1 byte)
  
 
==Others==
 
==Others==
Line 53: Line 54:
 
The Bootstrap Loader is documented in some detail in the "paper tape software programming handbook" (DEC-11-GGPB-D), pp. 6-1 to 6-8.
 
The Bootstrap Loader is documented in some detail in the "paper tape software programming handbook" (DEC-11-GGPB-D), pp. 6-1 to 6-8.
  
{{PDP-11}}
+
[[Category: PDP-11 Software]]
 
+
[[Category: PDP-11 File Formats]]
[[Category: PDP-11s]]
 

Latest revision as of 18:52, 16 November 2023

The PDP-11 Bootstrap Loader is a short program designed to be loaded into the main memory on a PDP-11 via the front panel; it is then run to load an initial program into the machine. I.e. it is a way of bootstrapping a totally empty machine, one with no ROM.

It is designed to be absolutely as short as possible (since it is manually toggled in via the switch register), and therefore has limitations, including how long a program can be loaded using it, and where in memory that program can be placed. The usual program to load with it is the PDP-11 Absolute Loader, which relaxes both of those limitations.

The original bootstrap loader is self-modifying code, since this allows a very short program. The program is not directly self-modifying; rather, the nature of its input is such that it modifies the bootstrap loader as it is read in. (Most bootstrap loader input files eventually restore the bootstrap loader to its original condition, allowing it to be re-used.)

Program

The bootstrap loader contains two locations which are modified by reading the input: the first is a pointer to the buffer in which to place data being read in; the second is a branch back to the beginning of the data input loop.

The program starts with the pointer set to itself, so the blank leader at the start of the data for the bootstrap loader (originally contained on paper tapes) starts with a special leader code which causes this to be left un-changed.

The buffer pointer is then modified to point it slightly before the bootstrap loader in memory, so at the end of the load the newly loaded code then progressively overlays the first several instructions of the bootstrap loader itself, finally patching the buffer pointer to point at the branch instruction, which is then modified to jump to the newly loaded code.

Code

This is the actual bootstrap program:

	LOAD = 0x7400				; Buffer address

0x7744	016701	BEGIN:	MOV	DEVICE, R1	; Get Device CSR
0x7746	000026
0x7750	012702	LOOP:	MOV	(PC)+, R2	; Get buffer offset
0x7752	000352	OFFSET:	.-LOAD
0x7754	005211		INC	@R1		; Turn on reader
0x7756	105711	READY:	TSTB	@R1		; Done?
0x7760	100376		BPL	READY
0x7762	116162		MOVB	2(R1), LOAD(R2)	; Transfer
0x7764	000002
0x7766	0x7400
0x7770	005267		INC	OFFSET		; Bump buffer offset
0x7772	177756
0x7774	000765		BR	LOOP
0x7776	yyyyyy	DEVICE:	yyyyyy			; Input device CSR address

Bootstrap Loader format

The format of boostrap loader input is as follows:

  • Leader (all bytes 0351)
  • Load offset (1 byte)
  • Program to be loaded (up to 0344 bytes)
  • Copy of boostrap loader (first 6 bytes)
  • Offset to branch (1 byte)
  • Branch modification (1 byte)

Others

Several PDP-11 bootstrap ROMs, e.g. the BM792-YA, BM792-YK and BM873 ROM are prepared to read programs in bootstrap loader format. The code in them is obviously not self-modifying, but reacts to the bootstrap loader input format to produce the same effects.

ODT in the LSI-11 CPUs also has a command to load programs in bootstrap loader format.

Further reading

The Bootstrap Loader is documented in some detail in the "paper tape software programming handbook" (DEC-11-GGPB-D), pp. 6-1 to 6-8.