Merge the last set of changes from the gh-pages branch

This commit is contained in:
Jeff Parsons 2016-12-04 11:31:03 -08:00 • committed by Jeff Parsons
commit d8f0e64329
30 changed files with 338 additions and 315 deletions

View file

@ -306,7 +306,7 @@ added, too.
When a PCjs machine runs in a browser, an XML machine configuration file is transformed into HTML with a set of DIVs
for each component: an "object" DIV whose *data-value* attribute provides the initialization parameters for the
corresponding component, along with a set of optional "control" DIVs that the component can bind to (eg, a "Run" button,
corresponding component, along with a set of optional "control" DIVs that the component can bind to (eg, a **Run** button,
or a visual representation of DIP switches, or whatever).
When a PCjs machine is run from the command-line, there is no XML, HTML, or DIVs involved; this is basically a
@ -379,7 +379,7 @@ where PCjs could run amok and destroy the planet.
Other parameters that can be passed via the URL:
- *autostart*: set it to "true" to allow all machines to start normally, "false" to prevent all machines from starting,
or "no" to prevent all machines from starting *unless* they have no "Run" button; e.g.:
or "no" to prevent all machines from starting *unless* they have no **Run** button; e.g.:
http://localhost:8088/?gort=debug&autostart=false

View file

@ -89,7 +89,7 @@ first prefix changed the instruction's addressing mode from 16-bit to 32-bit, an
16-bit. PCx86 should have simply ignored the second prefix.
With all of the above changes in place, PCx86 v1.18.4 is able to run Windows 95 Setup a bit farther, but still far from
completion. If you want to give it a spin yourself, start the machine below (click the "Run" button) and once it has
completion. If you want to give it a spin yourself, start the machine below (click the **Run** button) and once it has
finished booting, run SETUP from drive B, where the first Windows 95 diskette is already loaded.
If, when it crashes (and it will), you're interested in examining the instructions that were executed prior to the

View file

@ -37,7 +37,7 @@ component, [device.js](/modules/pdp11/lib/device.js), which has now been convert
The first new device component is [serialport.js](/modules/pdp11/lib/serialport.js), which is currently the
only means PDPjs has of communicating with the outside world. So you can try
[PDPjs connected to a VT100 Terminal](/devices/pdp11/machine/1170/vt100/), by clicking the "Run" button on the test machine.
[PDPjs connected to a VT100 Terminal](/devices/pdp11/machine/1170/vt100/), by clicking the **Run** button on the test machine.
The test machine is running [custom boot code](/apps/pdp11/boot/test/), adapted from boot code written by Paul, but due to the
lack of other device support, nothing can be booted yet.

View file

@ -24,9 +24,10 @@ and machines can now be configured to include a virtual paper tape reader, with
ready to be loaded.
In the real world, before you could load *any* paper tape, you had to first enter a
[Bootstrap Loader](/apps/pdp11/boot/bootstrap/). PDPjs has simplified that process by including the Bootstrap Loader as
just another paper tape image that you can "Read" directly into memory. Once that has been done, you can then load any
other paper tape image using the Bootstrap Loader, once you "Load" it into the paper tape reader.
[Bootstrap Loader](/apps/pdp11/boot/bootstrap/). PDPjs has simplified that process by including the "Bootstrap Loader"
as just another paper tape image that you can read directly into memory, using the **Read** button. Once that has been
done, you can then load any other paper tape image using the Bootstrap Loader, once you **Load** it into the paper tape
reader.
{% include machine.html id="test1120" %}

View file

@ -28,11 +28,11 @@ The latest release, v1.30.3, adds the following features:
- Support for DEC's [RL11 Disk Controller](/devices/pdp11/rl11/) has been implemented
To test RL11 support below, then select the "XXDP+ Diagnostics" disk from the "Disk Drive Controls",
click "Load", and wait for the message:
click **Load**, and wait for the message:
Mounted disk "XXDP+ Diagnostics" in drive RL0
Then start the machine (click "Run") and make sure the following prompt has been displayed:
Then start the machine (click **Run**) and make sure the following prompt has been displayed:
PDP-11 MONITOR V1.0

View file

@ -80,7 +80,7 @@ but unlike tapes like [PDP-11 BASIC](/apps/pdp11/tapes/basic/), they don't inclu
documentation for each test to learn the starting procedure, including any switches that should be set first.
However, PDPjs makes life a bit simpler for you. As noted for other [DEC PDP-11 Tape Images](/apps/pdp11/tapes/), any
"Absolute Format" tape can be read directly into RAM using the machine's "Read" button instead of "Load", allowing you
"Absolute Format" tape can be read directly into RAM using the machine's **Read** button instead of **Load**, allowing you
to bypass the usual three-step process of loading the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) in order to load the
[Absolute Loader](/apps/pdp11/tapes/absloader/) in order to load the desired tape.

View file

@ -10,13 +10,13 @@ I'm still trying to flush out lingering bugs in PDPjs. I'll give you an example
![Image of PDP-11/70 with 256Kb, Front Panel and Debugger](/blog/images/pdp-1170-panel-debugger.png)
After loading the "MD-11 11/70 CPU EXERCISER" paper tape image directly into memory using the "Load" button
(*not* "Attach"), and then loading the "RT-11 v4.0" disk image into drive RK0, and then finally issuing a few
After loading the "MD-11 11/70 CPU EXERCISER" paper tape image directly into memory using the **Read** button
(*not* **Load**), and then loading the "RT-11 v4.0" disk image into drive RK0, and then finally issuing a few
preliminary Debugger commands:
m rk11 on; bp 005254
we're ready to "let 'er rip," either by using the Debugger `g` command or clicking the "Run" button.
we're ready to "let 'er rip," either by using the Debugger `g` command or clicking the **Run** button.
You'll see a variety of disk-related messages from the RK11 component in the Control Panel window, which serves
both as the Debugger's output window and as the 11/70's terminal window. The output begins with:

View file

@ -11,13 +11,16 @@ To load any of the DEC PDP-11 paper tapes listed below, you will need to use a [
with a [PC11 High-Speed Paper Tape Reader/Punch](/devices/pdp11/pc11/), such as this
[PDP-11/20](/devices/pdp11/machine/1120/basic/debugger), and then follow this three-step process:
- "Read" the [DEC PDP-11 Bootstrap Loader](/apps/pdp11/boot/bootstrap/)
- "Load" the [Absolute Loader](absloader/) tape image, and read it with the Bootstrap Loader
- "Load" one of the "Absolute Format" tape images below, and read it with the Absolute Loader
- **Read** the [DEC PDP-11 Bootstrap Loader](/apps/pdp11/boot/bootstrap/)
- **Load** the [Absolute Loader](absloader/) tape image
- **Run** the Bootstrap Loader to read the Absolute Loader
- **Load** one of the "Absolute Format" tape images below
- **Run** the Absolute Loader to read the selected tape image
This mirrors the three-step "real world" process of loading paper tape software. Moreover, any "Absolute
Format" tape (which should include all the tapes listed below) can be loaded directly into RAM using the
machine's "Read" button instead of "Load". In most cases, that eliminates the first two steps.
This mirrors the multi-step "real world" process of loading paper tape software.
PDPjs simplifies that process: any "Absolute Format" tape (which should include all the tapes listed below) can be
loaded directly into RAM using the machine's **Read** button, replacing all the above steps with a single click.
Paper Tape Diagnostics
----------------------

View file

@ -13,7 +13,7 @@ website, we have been able to archive the PDP-11 diagnostics shown below. The t
[PC11](/modules/pdp11/lib/pc11.js), such as this [PDP-11/20 with Front Panel and Debugger](/devices/pdp11/machine/1120/panel/debugger/).
As noted for other [DEC PDP-11 Tape Images](/apps/pdp11/tapes/), these "Absolute Format" tapes can be read directly
into RAM using the machine's "Read" button instead of "Load", allowing you to bypass the usual three-step process of
into RAM using the machine's **Read** button instead of **Load**, allowing you to bypass the usual three-step process of
loading the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) in order to load the [Absolute Loader](/apps/pdp11/tapes/absloader/)
in order to load the desired tape.

View file

@ -16,7 +16,7 @@ All PCjs machines are built from the following sets of devices:
* [6502 Devices](c1p/) (e.g., [Challenger 1P](c1p/machine/))
* [8080 Devices](pc8080/) (e.g., [Space Invaders](pc8080/machine/invaders/), [VT100 Terminal](pc8080/machine/vt100/))
* [8086 Devices](pcx86/) (e.g., [IBM PC and compatibles](pcx86/machine/))
* [PDP-11 Devices](pdp11/) (e.g., [PDP-11/20](pdp11/machine/1120/), [PDP-11/70](pdp11/machine/1170/))
* [PDP-11 Devices](pdp11/) (e.g., [PDP-11/20](pdp11/machine/1120/), [PDP-11/45](pdp11/machine/1145/), [PDP-11/70](pdp11/machine/1170/))
These devices are user-installable components that you would typically find in a real personal computer,
such as keyboards, disk drive controllers with one or more drives, video cards, etc.

View file

@ -23,7 +23,7 @@ It is currently playable only in desktop browsers and uses the following hard-co
- D: Move Right
- L: Fire Missile
Click the "Run" button to start the simulation. You'll also find assorted
Click the **Run** button to start the simulation. You'll also find assorted
[Space Invaders Hardware Notes](#space-invaders-hardware-notes) below.
{% include machine.html id="invaders" %}

View file

@ -12,7 +12,7 @@ DEC VT100 Terminal with Debugger
--------------------------------
The [PC8080](/modules/pc8080/) machine below is configured to simulate a [VT100 Terminal](/devices/pc8080/machine/vt100/)
with a Control Panel and Debugger. When you press the "Run" button, it will start running the original
with a Control Panel and Debugger. When you press the **Run** button, it will start running the original
[VT100 Firmware](/devices/pc8080/rom/vt100/) inside the [PC8080](/modules/pc8080/) CPU emulator.
Information about [VT100 Keys](#vt100-keys) and assorted [Hardware Notes](#vt100-memory-usage) are provided below,
@ -208,8 +208,10 @@ Consequently, a VT100 [machine XML file](machine.xml) must set the Video compone
to "true", indicating that existing RAM should be used, and a new property, *bufferFormat* must be set to "vt100",
enabling support for the VT100's line data format; eg:
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="960" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" ...>
```xml
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="960" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24"/>
```
VT100 Screen and Character Dimensions
-------------------------------------

View file

@ -25,17 +25,17 @@ and then pre-loads the [Absolute Loader](/apps/pdp11/tapes/absloader/) tape imag
<device id="pc11" type="pc11" baudReceive="9600" autoMount='{PTR:{path:"/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json"}}'>...</device>
```
Click "Run" to load the [Absolute Loader](/apps/pdp11/tapes/absloader/).
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/),
click "Load" and then "Run".
click **Load** and then **Run**.
If you need to start over, select "Bootstrap Loader (16Kb)" from the list of tapes and click "Read" instead of
"Load", re-installing the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) directly into RAM.
If you need to start over, select "Bootstrap Loader (16Kb)" from the list of tapes and click **Read** instead of
**Load**, 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
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 reload the [Absolute Loader](/apps/pdp11/tapes/absloader/)
tape image, however.

View file

@ -26,17 +26,17 @@ and then pre-loads the [Absolute Loader](/apps/pdp11/tapes/absloader/) tape imag
<device id="pc11" type="pc11" baudReceive="9600" autoMount='{PTR:{path:"/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json"}}'>...</device>
```
Click "Run" to load the [Absolute Loader](/apps/pdp11/tapes/absloader/).
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/),
click "Load" and then "Run".
click **Load** and then **Run**.
If you need to start over, select "Bootstrap Loader (16Kb)" from the list of tapes and click "Read" instead of
"Load", re-installing the [Bootstrap Loader](/apps/pdp11/boot/bootstrap/) directly into RAM.
If you need to start over, select "Bootstrap Loader (16Kb)" from the list of tapes and click **Read** instead of
**Load**, 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
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 reload the [Absolute Loader](/apps/pdp11/tapes/absloader/)
tape image, however.

View file

@ -75,8 +75,8 @@ Here's a simple machine XML definition that's more useful:
[Example 1](examples/example1.html) shows the [XML](examples/example1.xml) in action.
Machine definitions can also include visual elements. For example, we can include a "Run" button with the CPU component.
Note that as soon as the machine is ready and the CPU starts running, the "Run" button will change to "Halt".
Machine definitions can also include visual elements. For example, we can include a **Run** button with the CPU component.
Note that as soon as the machine is ready and the CPU starts running, the **Run** button will change to **Halt**.
```xml
<machine id="ibm" class="pc" width="720px">
@ -174,7 +174,7 @@ All of the examples described above are available for [download](examples/).
If you have (or find) an IMG disk image file on a server, the PCjs web server provides a
[DiskDump API](/api/v1/dump) via endpoint "/api/v1/dump" that creates PCx86-compatible disks in JSON:
{{ site.url }}/api/v1/dump?disk=(file|url)&format=json
For example, let's say you found a disk image online, such as:

View file

@ -33,7 +33,7 @@ Attributes
* Provides an easy way to multiply the default CPU speed.
* *autoStart* (optional)
* This can be set to "true" or "false" to explicitly control whether or not the machine starts running automatically.
If this parameter is omitted, the machine will autostart only if no Debugger component is included and no "Run" button is defined.
If this parameter is omitted, the machine will autostart only if no Debugger component is included and no **Run** button is defined.
Also supports the attributes of *[Component](/docs/pcx86/component/)*. The *id* attribute is optional, since machines
currently support only one CPU component.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -195,21 +195,6 @@ CPUPDP11.prototype.initBus = function(cmp, bus, cpu, dbg)
if (control) this.cmp.setBinding(null, CPUPDP11.BUTTONS[i], control);
}
/*
* We've already saved the parmsCPU 'autoStart' setting, but there may be a machine (or URL) override.
*/
var sAutoStart = cmp.getMachineParm('autoStart');
if (sAutoStart != null) {
this.flags.autoStart = (sAutoStart == "true"? true : (sAutoStart == "false"? false : !!sAutoStart));
}
/*
* Start running automatically on power-up, assuming there's no Debugger and no "Run" button.
*/
if ((!DEBUGGER || !this.dbg) && this.bindings["run"] === undefined) {
this.flags.autoStart = true;
}
this.setReady();
};
@ -272,6 +257,21 @@ CPUPDP11.prototype.restore = function(data)
*/
CPUPDP11.prototype.powerUp = function(data, fRepower)
{
/*
* We've already saved the parmsCPU 'autoStart' setting, but there may be a machine (or URL) override.
*/
var sAutoStart = this.cmp.getMachineParm('autoStart');
if (sAutoStart != null) {
this.flags.autoStart = (sAutoStart == "true"? true : (sAutoStart == "false"? false : !!sAutoStart));
}
else if (this.flags.autoStart == null) {
/*
* If there's no explicit parmsCPU setting either, then we will autoStart if there's no Debugger and
* no "Run" button.
*/
this.flags.autoStart = ((!DEBUGGER || !this.dbg) && this.bindings["run"] === undefined);
}
if (!fRepower) {
this.finish();
if (!data || !this.restore) {
@ -298,6 +298,11 @@ CPUPDP11.prototype.powerUp = function(data, fRepower)
*/
this.println("No debugger detected");
}
if (this.flags.autoStart) {
this.println("CPU will auto-start");
} else {
this.println("CPU will not be auto-started, click Run to start");
}
}
/*
* The Computer component (which is responsible for all powerDown and powerUp notifications)
@ -1184,6 +1189,7 @@ CPUPDP11.prototype.startCPU = function(fUpdateFocus)
if (fUpdateFocus) this.cmp.setFocus(true);
this.cmp.start(this.msStartRun, this.getCycles());
}
if (!this.dbg) this.status("Started");
setTimeout(this.onRunTimeout, 0);
return true;
};

View file

@ -301,7 +301,7 @@ Component.getMachineResources = function(idMachine)
*/
Component.log = function(s, type)
{
if (DEBUG) {
if (!COMPILED) {
if (s) {
var sElapsed = "", sMsg = (type? (type + ": ") : "") + s;
if (typeof usr != "undefined") {
@ -352,7 +352,7 @@ Component.assert = function(f, s)
*/
Component.println = function(s, type, id)
{
if (DEBUG) {
if (!COMPILED) {
Component.log((id? (id + ": ") : "") + (s? ("\"" + s + "\"") : ""), type);
}
};
@ -368,7 +368,7 @@ Component.println = function(s, type, id)
*/
Component.notice = function(s, fPrintOnly, id)
{
if (DEBUG) {
if (!COMPILED) {
Component.println(s, "notice", id);
}
if (!fPrintOnly) web.alertUser((id? (id + ": ") : "") + s);
@ -381,7 +381,7 @@ Component.notice = function(s, fPrintOnly, id)
*/
Component.warning = function(s)
{
if (DEBUG) {
if (!COMPILED) {
Component.println(s, "warning");
}
web.alertUser(s);
@ -394,7 +394,7 @@ Component.warning = function(s)
*/
Component.error = function(s)
{
if (DEBUG) {
if (!COMPILED) {
Component.println(s, "error");
}
web.alertUser(s);
@ -716,7 +716,7 @@ Component.prototype = {
}
control.value += s + "\n";
control.scrollTop = control.scrollHeight;
if (DEBUG && window && window.console) console.log(s);
if (!COMPILED && window && window.console) console.log(s);
};
}(control));
/**
@ -750,7 +750,7 @@ Component.prototype = {
* @param {string} [type] is the message type
*/
log: function(s, type) {
if (DEBUG) {
if (!COMPILED) {
Component.log(s, type || this.id || this.type);
}
},

View file

@ -30,11 +30,15 @@
var Keys = {
/*
* Alphanumeric and other common (printable) ASCII codes.
* Keys and/or key combinations that generate common ASCII codes.
*
* TODO: Determine what we can do to get ALL constants like these inlined (enum doesn't seem to
* get the job done); the problem seems to be limited to property references that use quotes, which
* is why I've 'unquoted' as many of them as possible.
* NOTE: If you're looking for a general-purpose ASCII code table, see str.ASCII in strlib.js;
* if something's missing, that's probably the more appropriate table to add it to.
*
* TODO: The Closure Compiler doesn't inline all references to these values, at least those with
* quoted property names, which is why I've 'unquoted' as many of them as possible. One solution
* would be to add mnemonics for all of them, not just the non-printable ones (eg, SPACE instead
* of ' ', AMP instead of '&', etc.)
*/
ASCII: {
BREAK: 0, CTRL_A: 1, CTRL_B: 2, CTRL_C: 3, CTRL_D: 4, CTRL_E: 5, CTRL_F: 6, CTRL_G: 7,

View file

@ -553,12 +553,16 @@ str.trim = function(s)
};
/*
* Any codes commented out in the following table are deemed "printable"
* Future home of a general-purpose ASCII table. TODO: Flesh it out.
*/
str.ASCII = {
LF: 0x0A,
CR: 0x0D
};
/*
* Table for converting "unprintable" ASCII codes into mnemonics, to more clearly see what's being printed.
*/
str.aASCIICodes = {
0x00: "NUL",
0x01: "SOH", // (CTRL_A) Start of Heading
@ -570,10 +574,10 @@ str.aASCIICodes = {
0x07: "BEL", // (CTRL_G) Bell
0x08: "BS", // (CTRL_H) Backspace
0x09: "TAB", // (CTRL_I) Horizontal Tab
// 0x0A: "LF", // (CTRL_J) Line Feed (New Line)
0x0A: "LF", // (CTRL_J) Line Feed (New Line)
0x0B: "VT", // (CTRL_K) Vertical Tab
0x0C: "FF", // (CTRL_L) Form Feed (New Page)
// 0x0D: "CR", // (CTRL_M) Carriage Return
0x0D: "CR", // (CTRL_M) Carriage Return
0x0E: "SO", // (CTRL_N) Shift Out
0x0F: "SI", // (CTRL_O) Shift In
0x10: "DLE", // (CTRL_P) Data Link Escape
@ -602,7 +606,7 @@ str.aASCIICodes = {
*/
str.toASCIICode = function(b)
{
var s = str.aASCIICodes[b];
var s = (b != str.ASCII.CR && b != str.ASCII.LF? str.aASCIICodes[b] : null);
if (s) {
s = '<' + s + '>';
} else {

View file

@ -14,7 +14,7 @@ machines:
Selected Live Demos from [Graphics for the IBM PC](../)
---
All of the machine demos below are halted by default. Click the machine's "Run" button to start it running.
All of the machine demos below are halted by default. Click the machine's **Run** button to start it running.
From [Page 46](/modules/shared/templates/pdf.html?url=/pubs/pc/programming/Graphics_for_the_IBM_PC/pages/Graphics_for_the_IBM_PC 48.pdf&page=48&total=320):

View file

@ -126,6 +126,6 @@ VGA "Black Book" Test Machine
The [Compaq DeskPro 386](/devices/pcx86/machine/compaq/deskpro386/vga/2048kb/) machine below loads the
"VGA Tests (Black Book)" disk from the PCjs [Library](/disks/pcx86/library.xml) disk collection into Drive B.
Click the "Run" button to start the machine.
Click the **Run** button to start the machine.
{% include machine.html id="deskpro386" %}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long