More README updates, particularly in regard to DEC's Absolute Loader
This commit is contained in:
parent
ded8c1841d
commit
5d5629c27b
12 changed files with 97 additions and 52 deletions
|
|
@ -7,8 +7,8 @@ permalink: /apps/pdp11/boot/bootstrap/
|
|||
DEC PDP-11 Bootstrap Loader
|
||||
---------------------------
|
||||
|
||||
The **Bootstrap Loader** is a small program that loads the **[Absolute Loader](/apps/pdp11/tapes/absloader/)**,
|
||||
which is then used to load other PDP-11 tapes, such as **[BASIC (Single User)](/apps/pdp11/tabes/basic/)**.
|
||||
The **Bootstrap Loader** is a small program that loads the [Absolute Loader](/apps/pdp11/tapes/absloader/),
|
||||
which is then used to load other PDP-11 tapes, such as [BASIC (Single User)](/apps/pdp11/tabes/basic/).
|
||||
|
||||
Here's what the **Bootstrap Loader** looks like:
|
||||
|
||||
|
|
|
|||
|
|
@ -15,14 +15,5 @@ We have archived the following DEC PDP-11 Tapes:
|
|||
along with a copy of the [DEC PDP-11 Bootstrap Loader](/apps/pdp11/boot/bootstrap/), which is required if you actually want
|
||||
to load any of the above tapes into memory using the [PC11 High-Speed Paper Tape Reader/Punch](/devices/pdp11/pc11/).
|
||||
|
||||
To make it easy for PDPjs machines to load these tapes, we created the following High-Speed
|
||||
Paper Tape Reader (PC11) configurations:
|
||||
|
||||
- [demo.xml](/devices/pdp11/pc11/demo.xml)
|
||||
|
||||
which is typically instantiated by a Machine XML file using:
|
||||
|
||||
<device ref="/devices/pdp11/pc11/demo.xml"/>
|
||||
|
||||
These configuration files create UI controls that allow you to choose from a set of tapes that are automatically sent
|
||||
to the machine's PC11 device.
|
||||
For the most part, the tapes we have archived are in the DEC Absolute Loader format. More information about that format
|
||||
is on the [Absolute Loader](absloader/) page.
|
||||
|
|
|
|||
|
|
@ -8,10 +8,48 @@ DEC PDP-11 Absolute Loader
|
|||
--------------------------
|
||||
|
||||
The Absolute Loader is a special tape image that must be loaded in order to load *other* tapes
|
||||
which use the Absolute Loader format. To see the Absolute Loader in action, start with the
|
||||
[Bootstrap Loader Demo](/devices/pdp11/machine/1120/bootstrap/debugger/).
|
||||
that use what we'll call the "Absolute Format." To see the Absolute Loader in action, start with the
|
||||
[PDP-11/20 Bootstrap Loader Demo](/devices/pdp11/machine/1120/bootstrap/debugger/).
|
||||
|
||||
PCjs has archived the following DEC resources:
|
||||
The *loadImage()* interface of the [PDPjs RAM Component](/modules/pdp11/lib/ram.js) explains what
|
||||
we know about the "Absolute Format":
|
||||
|
||||
Data on tapes in the "Absolute Format" is organized into blocks; each block begins with
|
||||
a 6-byte header:
|
||||
|
||||
2-byte signature (0x0001)
|
||||
2-byte block length (N + 6, because it includes the 6-byte header)
|
||||
2-byte load address
|
||||
|
||||
followed by N data bytes. If N is zero, then the 2-byte load address is the exec address,
|
||||
unless the address is odd (usually 1). DEC's Absolute Loader jumps to the exec address
|
||||
in former case, halts in the latter.
|
||||
|
||||
All values are stored "little endian" (low byte followed by high byte), just like the
|
||||
PDP-11's memory architecture.
|
||||
|
||||
After the data bytes, there is a single checksum byte. The 8-bit sum of all the bytes in
|
||||
the block (including the header bytes and checksum byte) should be zero.
|
||||
|
||||
ANOMALIES: Tape files don't always begin with a signature word, so I allow any number of
|
||||
leading zeros before the first signature. Tape files don't always end cleanly either, so as
|
||||
soon as I see an invalid signature, I break out of the loop without signalling an error, as
|
||||
long as at least ONE block was successfully processed. In fact, it's possible that as
|
||||
soon as a block with ZERO data bytes is encountered, processing is supposed to stop, but
|
||||
I haven't examined enough tapes (or the Absolute Loader code) to know for sure.
|
||||
|
||||
[Other sites](http://www.retrocmp.com/stories/dec-pc05-papertape/242-dec-pc05-working-with-paper-tapes)
|
||||
have referred to this tape format as the "Standard Absolute" format, but I've not found confirmation of
|
||||
that terminology in any DEC publication. In fact, I think that term may have been a misreading of instructions
|
||||
found in DEC manuals like the ["MEM EXER 16K" Diagnostics Manual](http://archive.pcjs.org/pubs/dec/pdp11/other/AC-9045F-MC_CZQMCF0-0-124K-Mem-Exer-16k_Feb78.pdf):
|
||||
|
||||
Load the program using any standard absolute loader.
|
||||
|
||||
The most notable feature of the "Absolute Format" is that it contains no relocation information; it is
|
||||
designed for code that has been linked to run at a fixed ("absolute") address, or position-independent code
|
||||
for which a specific address has been selected, based on the amount of RAM present in the target machine.
|
||||
|
||||
PCjs has archived the following Absolute Loader resources:
|
||||
|
||||
- [Absolute Loader](DEC-11-L2PC-PO.json)
|
||||
- [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/other/DEC-11-UABLA-A-LA_PDP-11AbsoluteLoaderListing_Jun75.pdf)
|
||||
|
|
|
|||
|
|
@ -13,12 +13,12 @@ machines:
|
|||
DEC PDP-11 BASIC
|
||||
----------------
|
||||
|
||||
The first PCjs machine to run DEC PDP-11 BASIC was this [PDP-11/20](/devices/pdp11/machine/1120/basic/debugger/),
|
||||
The first PDPjs machine to run DEC PDP-11 BASIC was this [PDP-11/20](/devices/pdp11/machine/1120/basic/debugger/),
|
||||
shown below.
|
||||
|
||||
{% include machine.html id="test1120" %}
|
||||
|
||||
PCjs has archived these DEC PDP-11 BASIC resources:
|
||||
PCjs has archived the following DEC PDP-11 BASIC resources:
|
||||
|
||||
- [BASIC (Single User) Tape Image](DEC-11-AJPB-PB.json)
|
||||
- [LISTING OF BASIC/PTS (March 1974)](http://archive.pcjs.org/pubs/dec/pdp11/basic/AB-2045B-SC_BASIC_PTS_Listing_Mar77.pdf)
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ machines:
|
|||
PDP-11/20 BASIC Demo
|
||||
--------------------
|
||||
|
||||
This machine pre-loads the **[DEC PDP-11 BASIC](/apps/pdp11/tapes/basic/)** tape image into 16Kb of RAM:
|
||||
This machine pre-loads the [DEC PDP-11 BASIC](/apps/pdp11/tapes/basic/) tape image into 16Kb of RAM:
|
||||
|
||||
<ram id="ram" addr="0x0000" size="0x4000" file="/apps/pdp11/tapes/basic/DEC-11-AJPB-PB.json"/>
|
||||
|
||||
You can also manually load it into memory using the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)**.
|
||||
You can also manually load it into memory using the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/).
|
||||
See the [Bootstrap Loader Demo](/devices/pdp11/machine/1120/bootstrap/) for details.
|
||||
|
||||
{% include machine.html id="test1120" %}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ machines:
|
|||
PDP-11/20 BASIC Demo (with Debugger)
|
||||
------------------------------------
|
||||
|
||||
This machine pre-loads the **[DEC PDP-11 BASIC](/apps/pdp11/tapes/basic/)** tape image into 16Kb of RAM:
|
||||
This machine pre-loads the [DEC PDP-11 BASIC](/apps/pdp11/tapes/basic/) tape image into 16Kb of RAM:
|
||||
|
||||
<ram id="ram" addr="0x0000" size="0x4000" file="/apps/pdp11/tapes/basic/DEC-11-AJPB-PB.json"/>
|
||||
|
||||
You can also manually load it into memory using the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)**.
|
||||
You can also manually load it into memory using the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/).
|
||||
See the [Bootstrap Loader Demo (with Debugger)](/devices/pdp11/machine/1120/bootstrap/debugger/) for details.
|
||||
|
||||
There are also some [Debugging Notes](/apps/pdp11/tapes/basic/#debugging-notes) on the
|
||||
|
|
|
|||
|
|
@ -7,29 +7,29 @@ machines:
|
|||
type: pdp11
|
||||
---
|
||||
|
||||
Bootstrap Loader Demo
|
||||
---------------------
|
||||
PDP-11/20 Bootstrap Loader Demo
|
||||
-------------------------------
|
||||
|
||||
This machine pre-loads the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)** code into 16Kb of RAM:
|
||||
This machine pre-loads the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) code into 16Kb of RAM:
|
||||
|
||||
<ram id="ram" addr="0x0000" size="0x4000" file="/apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.json"/>
|
||||
|
||||
and then pre-attaches the **[Absolute Loader](/apps/pdp11/tapes/absloader/)** tape image to the PC11 Paper Tape Reader:
|
||||
and then pre-attaches the [Absolute Loader](/apps/pdp11/tapes/absloader/) tape image to the PC11 Paper Tape Reader:
|
||||
|
||||
<device id="pc11" type="pc11" baudReceive="9600" autoMount='{path:"/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json"}' ...>...</device>
|
||||
|
||||
Click "Run" to load the **[Absolute Loader](/apps/pdp11/tapes/absloader/)**.
|
||||
When the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)** is finished, it will HALT,
|
||||
leaving the **[Absolute Loader](/apps/pdp11/tapes/absloader/)** ready to run immediately after the HALT.
|
||||
Click "Run" to load the [Absolute Loader](/apps/pdp11/tapes/absloader/).
|
||||
When the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) is finished, it will HALT,
|
||||
leaving the [Absolute Loader](/apps/pdp11/tapes/absloader/) ready to run immediately after the HALT.
|
||||
|
||||
You can then select another tape image in the Absolute Loader format, such as **[BASIC (Single User)](/apps/pdp11/tapes/basic/)**,
|
||||
You can then select another tape image in the Absolute Loader format, such as [BASIC (Single User)](/apps/pdp11/tapes/basic/),
|
||||
click "Attach" and then "Run".
|
||||
|
||||
If you need to start over, select "Bootstrap Loader (16Kb)" from the list of tapes and click "Load" instead of
|
||||
"Attach", re-installing the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)** directly into RAM.
|
||||
"Attach", re-installing the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) directly into RAM.
|
||||
|
||||
Alternatively, just press the "Reset" button. The RAM component was recently updated to restore pre-loaded images whenever
|
||||
the entire machine is reset. You'll still need to manually re-attach the **[Absolute Loader](/apps/pdp11/tapes/absloader/)**
|
||||
the entire machine is reset. You'll still need to manually re-attach the [Absolute Loader](/apps/pdp11/tapes/absloader/)
|
||||
tape image, however.
|
||||
|
||||
{% include machine.html id="test1120" %}
|
||||
|
|
|
|||
|
|
@ -8,29 +8,29 @@ machines:
|
|||
debugger: true
|
||||
---
|
||||
|
||||
Bootstrap Loader Demo (with Debugger)
|
||||
-------------------------------------
|
||||
PDP-11/20 Bootstrap Loader Demo (with Debugger)
|
||||
-----------------------------------------------
|
||||
|
||||
This machine pre-loads the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)** code into 16Kb of RAM:
|
||||
This machine pre-loads the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) code into 16Kb of RAM:
|
||||
|
||||
<ram id="ram" addr="0x0000" size="0x4000" file="/apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.json"/>
|
||||
|
||||
and then pre-attaches the **[Absolute Loader](/apps/pdp11/tapes/absloader/)** tape image to the PC11 Paper Tape Reader:
|
||||
and then pre-attaches the [Absolute Loader](/apps/pdp11/tapes/absloader/) tape image to the PC11 Paper Tape Reader:
|
||||
|
||||
<device id="pc11" type="pc11" baudReceive="9600" autoMount='{path:"/apps/pdp11/tapes/DEC-11-L2PC-PO.json"}' ...>...</device>
|
||||
|
||||
Click "Run" to load the **[Absolute Loader](/apps/pdp11/tapes/absloader/)**.
|
||||
When the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)** is finished, it will HALT,
|
||||
leaving the **[Absolute Loader](/apps/pdp11/tapes/absloader/)** ready to run immediately after the HALT.
|
||||
Click "Run" to load the [Absolute Loader](/apps/pdp11/tapes/absloader/).
|
||||
When the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) is finished, it will HALT,
|
||||
leaving the [Absolute Loader](/apps/pdp11/tapes/absloader/) ready to run immediately after the HALT.
|
||||
|
||||
You can then select another tape image in the Absolute Loader format, such as **[BASIC (Single User)](/apps/pdp11/tapes/basic/)**,
|
||||
You can then select another tape image in the Absolute Loader format, such as [BASIC (Single User)](/apps/pdp11/tapes/basic/),
|
||||
click "Attach" and then "Run".
|
||||
|
||||
If you need to start over, select "Bootstrap Loader (16Kb)" from the list of tapes and click "Load" instead of
|
||||
"Attach", re-installing the **[Bootstrap Loader](/apps/pdp11/boot/bootstrap/)** directly into RAM.
|
||||
"Attach", re-installing the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) directly into RAM.
|
||||
|
||||
Alternatively, just press the "Reset" button. The RAM component was recently updated to restore pre-loaded images whenever
|
||||
the entire machine is reset. You'll still need to manually re-attach the **[Absolute Loader](/apps/pdp11/tapes/absloader/)**
|
||||
the entire machine is reset. You'll still need to manually re-attach the [Absolute Loader](/apps/pdp11/tapes/absloader/)
|
||||
tape image, however.
|
||||
|
||||
{% include machine.html id="test1120" %}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ machines:
|
|||
type: pdp11
|
||||
---
|
||||
|
||||
Boot Test
|
||||
---------
|
||||
PDP-11/20 Boot Test
|
||||
-------------------
|
||||
|
||||
This machine pre-loads the **[PDP-11 Boot Test](/apps/pdp11/boot/test/)** code into RAM:
|
||||
This machine pre-loads the [PDP-11 Boot Test](/apps/pdp11/boot/test/) code into RAM:
|
||||
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/test/BOOTTEST.json" load="0xC000" exec="0xC000"/>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ machines:
|
|||
debugger: true
|
||||
---
|
||||
|
||||
Boot Test (with Debugger)
|
||||
-------------------------
|
||||
PDP-11/20 Boot Test (with Debugger)
|
||||
-----------------------------------
|
||||
|
||||
This machine pre-loads the **[PDP-11 Boot Test](/apps/pdp11/boot/test/)** code into RAM:
|
||||
This machine pre-loads the [PDP-11 Boot Test](/apps/pdp11/boot/test/) code into RAM:
|
||||
|
||||
<ram id="ram" addr="0x0000" size="0xE000" file="/apps/pdp11/boot/test/BOOTTEST.json" load="0xC000" exec="0xC000"/>
|
||||
|
||||
|
|
|
|||
|
|
@ -9,12 +9,24 @@ PC11 High-Speed Paper Tape Reader/Punch
|
|||
|
||||
PDPjs implements the PC11 component in [pc11.js](/modules/pdp11/lib/pc11.js).
|
||||
|
||||
A selection of [Paper Tape Images](/apps/pdp11/tapes/) have been archived for use by PDPjs machines:
|
||||
PDPjs machines that contain a PC11 Tape Reader include:
|
||||
|
||||
- [Bootstrap Loader Demo](/devices/pdp11/machine/1120/bootstrap/)
|
||||
- [PDP-11/20 BASIC Demo](/devices/pdp11/machine/1120/basic/) (with [Debugger](/devices/pdp11/machine/1120/basic/debugger/))
|
||||
|
||||
The tape images are typically listed in a common configuration file that all machines can use, such as [demo.xml](demo.xml):
|
||||
We have archived a selection of [Paper Tape Images](/apps/pdp11/tapes/) for use by those machines.
|
||||
|
||||
To make it easy for PDPjs machines to load those tapes, we created the following High-Speed Paper Tape Reader (PC11)
|
||||
Device XML file:
|
||||
|
||||
- [Demo](/devices/pdp11/pc11/demo.xml)
|
||||
|
||||
which is typically referenced by a Machine XML file as:
|
||||
|
||||
<device ref="/devices/pdp11/pc11/demo.xml"/>
|
||||
|
||||
Device XML files typically configure the device, list all the resource the device will use, and define UI elements
|
||||
used to control the device, such as choosing which tape should be "attached" to the PC11 device. For example:
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<device id="pc11" type="pc11" baudReceive="9600" autoMount='{path:"/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json"}' pos="left" width="35%" padLeft="8px" padBottom="8px">
|
||||
|
|
|
|||
|
|
@ -249,6 +249,9 @@ RAMPDP11.prototype.reset = function()
|
|||
/**
|
||||
* loadImage(aBytes, addrLoad, addrExec, addrInit, fReset)
|
||||
*
|
||||
* If the array contains an image in the "Absolute Format," load it as specified by
|
||||
* the format; otherwise, load it as-is using the address(es) supplied.
|
||||
*
|
||||
* @this {RAMPDP11}
|
||||
* @param {Array|Uint8Array} aBytes
|
||||
* @param {number|null} [addrLoad]
|
||||
|
|
@ -261,14 +264,15 @@ RAMPDP11.prototype.loadImage = function(aBytes, addrLoad, addrExec, addrInit, fR
|
|||
{
|
||||
var fLoaded = false;
|
||||
/*
|
||||
* Data on tapes is organized into blocks; each block begins with a 6-byte header:
|
||||
* Data on tapes in the "Absolute Format" is organized into blocks; each block begins with
|
||||
* a 6-byte header:
|
||||
*
|
||||
* 2-byte signature (0x0001)
|
||||
* 2-byte block length (N + 6, because it includes the 6-byte header)
|
||||
* 2-byte load address
|
||||
*
|
||||
* followed by N data bytes. If N is zero, then the 2-byte load address is the exec address,
|
||||
* unless the address is odd (usually 1). DEC's "Absolute Loader" jumps to the exec address
|
||||
* unless the address is odd (usually 1). DEC's Absolute Loader jumps to the exec address
|
||||
* in former case, halts in the latter.
|
||||
*
|
||||
* All values are stored "little endian" (low byte followed by high byte), just like the
|
||||
|
|
|
|||
Loading…
Reference in a new issue