Skip to content
This repository has been archived by the owner on Dec 24, 2020. It is now read-only.

Commit

Permalink
Merge branch 'next-release'
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffpar committed Nov 8, 2016
2 parents 8eb70b7 + 8ccf8c1 commit 2c606ae
Show file tree
Hide file tree
Showing 18 changed files with 242 additions and 195 deletions.
1 change: 1 addition & 0 deletions apps/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ PCjs also includes a small collection of disk images in the [Disk Libraries](/di

* [IBM PC](/disks/pcx86/)
* [Challenger 1P](/disks/c1p/)
* [DEC](/disks/dec/)

---

Expand Down
5 changes: 3 additions & 2 deletions devices/pdp11/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ PDP-11 Device Configurations
[PDP-11 Machines](/devices/pdp11/machine/) rely on a variety of machine configuration files and resources, including:

* [Control Panels](panel/)
* [Serial Interface for Display Terminals (DL11)](dl11/)
* [High-Speed Paper Tape Reader/Punch (PC11)](pc11/)
* Serial Interface for Display Terminals [(DL11)](dl11/)
* High-Speed Paper Tape Reader/Punch [(PC11)](pc11/)
* Disk Controllers ([RL11](rl11/))
* [ROM Images](rom/)

Sample machines include a
Expand Down
2 changes: 1 addition & 1 deletion devices/pdp11/machine/1120/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ PDPjs is currently being tested with the following PDP-11/20 machine configurati
* [PDP-11/20 Bootstrap Loader Demo](/devices/pdp11/machine/1120/bootstrap/) (with [Debugger](/devices/pdp11/machine/1120/bootstrap/debugger/))
* [PDP-11/20 BASIC Demo](/devices/pdp11/machine/1120/basic/) (with [Debugger](/devices/pdp11/machine/1120/basic/debugger/))

The "Demo" machines come with 16Kb of RAM and a [PC11 Paper Tape Reader](/devices/pdp11/pc11/). The "Boot Test" machine
The "Demo" machines come with 16Kb of RAM and a [PC11 Paper Tape Reader](/devices/pdp11/pc11/). The "Boot Monitor" machine
has 56Kb of RAM.
82 changes: 0 additions & 82 deletions devices/pdp11/machine/1170/panel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,85 +10,3 @@ machines:
{% include machine.html id="test1170" %}

This machine is also available with our built-in [Debugger](debugger/).

Front Panel Basics
------------------

From the [PDP-11/70 Handbook (1979)](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Handbook_1979.pdf), Chapter 10,
p. 325:

> ### CONSOLE OPERATION
> The PDP-11/70 console allows direct control of the computer system. It contains a power switch for the CPU,
which is also usually used as the Master Switch for the system. The console is used for starting, stopping, resetting,
and debugging. Lights and switches provide the facilities for monitoring operation, system control, and maintenance.
Debugging and detailed tracing of operations can be accomplished by having the computer execute single instructions or
single cycles. Contents of all locations can be examined, and data can be entered manually from the console switches.

The PDPjs Front Panel replicates most (but not all) the features of a real PDP-11/70 Console. The switches, which
PDPjs displays as green to make them stand out from the rest of the traditional pink-and-magenta controls, are summarized
below.

### 0..21

Switches 0 to 21 control bits 0 to 21 of the SWITCH register. The UP position represents a 1, and the DOWN position
represents a 0. Once all the bits have been set, you can choose to load the contents of the SWITCH register into the
ADDRESS register (as displayed by the top row of LEDs), or directly into the memory location referenced by the ADDRESS
register (where it will become the DATA displayed by the second row of LEDs).

The SWITCH, ADDRESS, and DATA (aka DISPLAY) registers are all internal to the Front Panel hardware, and should not be
confused with CPU registers.

### TEST

This is a momentary switch that is normally in the DOWN position. When held in the UP position, it turns on all LEDs.
This "lamp test" was more important in the days when the lights were produced by bulbs with filaments that could burn out,
and if you didn't realize that a particular light was "burned out", you could mistake it for a zero.

While the TEST switch is more "cute" than useful on a virtual Front Panel, we have added one "innovation" to the switch:
pressing it also returns all the SWITCH register switches (0-21) to their DOWN position.

### LOAD [ADRS]

This is a momentary switch that is normally in the UP position. When pressed DOWN, it copies the SWITCH register to the
ADDRESS register.

### EXAM

This is a momentary switch that is normally in the UP position. When pressed DOWN, it reads the memory location referenced
by the ADDRESS register and displays it in the DATA register. If pressed repeatedly, each repetition also automatically
adds 2 to the ADDRESS register, making it easier to examine a series of words. Note that if the CPU registers are being
examined (starting at address 177700), the ADDRESS register will advance by 1 instead of 2.

Another "innovation" unique to PDPjs: if the STEP switch is toggled from the UP to the DOWN position, repeated EXAM or DEP
operations will decrease the ADDRESS register instead of increasing it.

### DEP

This is a momentary switch that is normally in the DOWN position. When pressed UP, it writes the contents of the SWITCH
register to the memory location referenced by the ADDRESS register, and displays the result in the DATA register. Like the
EXAM switch, if DEP is pressed repeatedly, each repetition also automatically adds 2 to the ADDRESS register, making it easier
to deposit the same value to a series of words.

### CONT

This is a momentary switch that is normally in the UP position. When pressed DOWN, it will start the CPU if it's currently
halted. If the CPU is already running, CONT has no effect. Also, if the ENABLE/HALT switch is in the DOWN (HALT) position,
then the CPU will continue for only ONE instruction and then stop again.

### ENABLE/HALT

This switch is a toggle that is normally in the UP (ENABLE) position. If it pressed DOWN while the CPU is running, the CPU will
stop. Once the CPU is stopped, this switch has no effect, other than determining what CONT will do when pressed.

### STEP

On a real PDP-11, this would select between cycle-stepping vs. instruction-stepping. Since PDPjs doesn't support cycle-stepping,
this switch has no effect (except as described above when the EXAM or DEP switches are pressed repeatedly).

### START

The START switch is similar to CONT, but it also performs the equivalent a RESET instruction before starting the CPU, so
unless you're starting execution at the beginning of a program, using START instead of CONT to continue execution is probably
not a good idea. Also, if the ENABLE/HALT switch is in the DOWN (HALT) position, START will still reset the machine but not
execute anything.
2 changes: 1 addition & 1 deletion devices/pdp11/machine/1170/panel/debugger/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Toggle-Ins

As DEC notes in the [PDP-11/70 Maintenance Service Guide](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Maintenance_Service_Guide_Apr88.pdf),
Chapter 4: "There are several useful toggle-ins that are probably not very well known." Excerpts are provided below. If you're
not sure how to "toggle in" code using a Front Panel, check out [Front Panel Basics](/devices/pdp11/machine/1170/panel/#front-panel-basics).
not sure how to "toggle in" code using a Front Panel, check out [Front Panel Basics](/devices/pdp11/panel/1170/#front-panel-basics).

However, since the above machine also includes the PDPjs Debugger, you'll find that it's much easier to use the Debugger commands
described below to load and execute these "toggle-ins".
Expand Down
2 changes: 1 addition & 1 deletion devices/pdp11/machine/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ permalink: /devices/pdp11/machine/
PDP-11 Machine Configurations
-----------------------------

[PDPjs](/modules/pdp11/), our PDP-11 emulation module, supports the following PDP-11 machines:
[PDP-11 Devices](/devices/pdp11/) are used to build a variety of PDP-11 machines:

* [PDP-11/20](/devices/pdp11/machine/1120/)
* PDP-11/45
Expand Down
86 changes: 86 additions & 0 deletions devices/pdp11/panel/1170/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,90 @@ permalink: /devices/pdp11/panel/1170/
PDP-11/70 Control Panels
------------------------

The following Control Panel configurations are available:

* [PDP-11/70 Front Panel](front.xml) (with [Debugger](debugger/front.xml))

Use this [PDP-11/70](/devices/pdp11/machine/1170/panel/debugger/) to see the [PDP-11/70 Front Panel](debugger/front.xml) in action.

Front Panel Basics
------------------

From the [PDP-11/70 Handbook (1979)](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Handbook_1979.pdf), Chapter 10,
p. 325:

> ### CONSOLE OPERATION
> The PDP-11/70 console allows direct control of the computer system. It contains a power switch for the CPU,
which is also usually used as the Master Switch for the system. The console is used for starting, stopping, resetting,
and debugging. Lights and switches provide the facilities for monitoring operation, system control, and maintenance.
Debugging and detailed tracing of operations can be accomplished by having the computer execute single instructions or
single cycles. Contents of all locations can be examined, and data can be entered manually from the console switches.

The PDPjs Front Panel replicates most (but not all) the features of a real PDP-11/70 Console. The switches, which
PDPjs displays as green to make them stand out from the rest of the traditional pink-and-magenta controls, are summarized
below.

### 0..21

Switches 0 to 21 control bits 0 to 21 of the SWITCH register. The UP position represents a 1, and the DOWN position
represents a 0. Once all the bits have been set, you can choose to load the contents of the SWITCH register into the
ADDRESS register (as displayed by the top row of LEDs), or directly into the memory location referenced by the ADDRESS
register (where it will become the DATA displayed by the second row of LEDs).

The SWITCH, ADDRESS, and DATA (aka DISPLAY) registers are all internal to the Front Panel hardware, and should not be
confused with CPU registers.

### TEST

This is a momentary switch that is normally in the DOWN position. When held in the UP position, it turns on all LEDs.
This "lamp test" was more important in the days when the lights were produced by bulbs with filaments that could burn out,
and if you didn't realize that a particular light was "burned out", you could mistake it for a zero.

While the TEST switch is more "cute" than useful on a virtual Front Panel, we have added one "innovation" to the switch:
pressing it also returns all the SWITCH register switches (0-21) to their DOWN position.

### LOAD [ADRS]

This is a momentary switch that is normally in the UP position. When pressed DOWN, it copies the SWITCH register to the
ADDRESS register.

### EXAM

This is a momentary switch that is normally in the UP position. When pressed DOWN, it reads the memory location referenced
by the ADDRESS register and displays it in the DATA register. If pressed repeatedly, each repetition also automatically
adds 2 to the ADDRESS register, making it easier to examine a series of words. Note that if the CPU registers are being
examined (starting at address 177700), the ADDRESS register will advance by 1 instead of 2.

Another "innovation" unique to PDPjs: if the STEP switch is toggled from the UP to the DOWN position, repeated EXAM or DEP
operations will decrease the ADDRESS register instead of increasing it.

### DEP

This is a momentary switch that is normally in the DOWN position. When pressed UP, it writes the contents of the SWITCH
register to the memory location referenced by the ADDRESS register, and displays the result in the DATA register. Like the
EXAM switch, if DEP is pressed repeatedly, each repetition also automatically adds 2 to the ADDRESS register, making it easier
to deposit the same value to a series of words.

### CONT

This is a momentary switch that is normally in the UP position. When pressed DOWN, it will start the CPU if it's currently
halted. If the CPU is already running, CONT has no effect. Also, if the ENABLE/HALT switch is in the DOWN (HALT) position,
then the CPU will continue for only ONE instruction and then stop again.

### ENABLE/HALT

This switch is a toggle that is normally in the UP (ENABLE) position. If it pressed DOWN while the CPU is running, the CPU will
stop. Once the CPU is stopped, this switch has no effect, other than determining what CONT will do when pressed.

### STEP

On a real PDP-11, this would select between cycle-stepping vs. instruction-stepping. Since PDPjs doesn't support cycle-stepping,
this switch has no effect (except as described above when the EXAM or DEP switches are pressed repeatedly).

### START

The START switch is similar to CONT, but it also performs the equivalent a RESET instruction before starting the CPU, so
unless you're starting execution at the beginning of a program, using START instead of CONT to continue execution is probably
not a good idea. Also, if the ENABLE/HALT switch is in the DOWN (HALT) position, START will still reset the machine but not
execute anything.
24 changes: 12 additions & 12 deletions devices/pdp11/rl11/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ permalink: /devices/pdp11/rl11/
RL11 Disk Controller
--------------------

The RL11 Disk Controller controls up to four RL01 or RL02 disk drives, which in turn read/write RL01K or
[RL02K](/disks/dec/rl02k/) disk cartridges.

Machines containing the [RL11 Component](/modules/pdp11/lib/pc11.js) include:

- [PDP-11/70 Boot Monitor](/devices/pdp11/machine/1170/monitor/) (with [Debugger](/devices/pdp11/machine/1170/monitor/debugger/))
- [PDP-11/70 with Front Panel](/devices/pdp11/machine/1170/panel/) (with [Debugger](/devices/pdp11/machine/1170/panel/debugger/))

PCjs has archived a selection of [RL02K Disk Images](/disks/dec/rl02k/) for use by those machines, most of which are
PCjs has archived a selection of [RL02K Disk Images](/disks/dec/rl02k/) for use by those machines, which are
listed in the following RL11 Device XML file:

- [Default](/devices/pdp11/rl11/default.xml)
Expand All @@ -25,18 +28,15 @@ Device XML files not only configure a device, but also list all the resource the
used to control the device, such as choosing which disks should be "auto-mounted" by the RL11 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">
<name>Paper Tape Controls</name>
<device id="rl11" type="rl11" autoMount='{RL3:{path:"http://archive.pcjs.org/disks/dec/rl02k/RL02K-XXDP.json"}}' pos="left" width="35%" padLeft="8px" padBottom="8px">
<name>Disk Drive Controls</name>
<control type="container">
<control type="list" binding="listTapes">
<tape id="tape00" name="Bootstrap Loader (16Kb)" path="/apps/pdp11/boot/bootstrap/BOOTSTRAP-16KB.json"/>
<tape id="tape01" name="Absolute Loader" path="/apps/pdp11/tapes/absloader/DEC-11-L2PC-PO.json"/>
<tape id="tape02" name="BASIC (Single User)" path="/apps/pdp11/tapes/basic/DEC-11-AJPB-PB.json"/>
<control type="list" binding="listDrives"/>
<control type="list" binding="listDisks">
<disk id="rl3" name="XXDP+ Diagnostics" path="http://archive.pcjs.org/disks/dec/rl02k/RL02K-XXDP.json"/>
</control>
<control type="button" binding="attachTape">Attach</control>
<control type="button" binding="loadTape">Load</control>
<control type="description" binding="descTape" padRight="8px"/>
<control type="file" binding="mountTape"/>
<control type="progress" binding="readProgress" pos="default" width="250px" padTop="8px">Tape Progress</control>
<control type="button" binding="loadDrive">Load</control>
<control type="description" binding="descDisk" padRight="8px"/>
<control type="file" binding="mountDisk"/>
</control>
</device>
2 changes: 1 addition & 1 deletion devices/pdp11/rl11/default.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<control type="container">
<control type="list" binding="listDrives"/>
<control type="list" binding="listDisks">
<disk id="rl3" name="XXDP Diagnostics" path="http://archive.pcjs.org/disks/dec/rl02k/RL02K-XXDP.json"/>
<disk id="rl3" name="XXDP+ Diagnostics" path="http://archive.pcjs.org/disks/dec/rl02k/RL02K-XXDP.json"/>
</control>
<control type="button" binding="loadDrive">Load</control>
<control type="description" binding="descDisk" padRight="8px"/>
Expand Down
1 change: 1 addition & 0 deletions disks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Browse these PCjs Disk Libraries:

* [IBM PC](pcx86/)
* [Challenger 1P](c1p/)
* [DEC](dec/)

Additional selected software is available in the PCjs [Software Archives](/apps/).

Expand Down
16 changes: 16 additions & 0 deletions disks/dec/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
layout: page
title: DEC Disk Images
permalink: /disks/dec/
---

DEC Disk Images
---------------

The DEC disk images we have archived are organized by type:

* RL01K
* [RL02K](rl02k/)

RL01K and RL02K disks are both single-platter cartridges with capacities of 5Mb and 10Mb, respectively,
and are designed to be used with an [RL11 Disk Controller](/devices/pdp11/rl11/).
13 changes: 13 additions & 0 deletions disks/dec/rl02k/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
layout: page
title: DEC RL02K Disk Images
permalink: /disks/dec/rl02k/
---

DEC RL02K Disk Images
---------------------

RL02K disks are single-platter cartridges with 512 tracks per side, 40 sectors per track, and a sector size of 256 bytes,
for a total capacity of 10Mb. They are used with an [RL11 Disk Controller](/devices/pdp11/rl11/).

* XXDP+ Diagnostics [[source](http://skn.noip.me/pdp11/)]
4 changes: 3 additions & 1 deletion modules/pdp11/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ PDP-11 Machine Emulation Module (PDPjs)
Overview
---
PDPjs, our PDP-11 machine emulation module, is adapted from
the JavaScript [PDP 11/70 Emulator (v1.4)](http://skn.noip.me/pdp11/pdp11.html) written by
the [PDP 11/70 Emulator (v1.4)](http://skn.noip.me/pdp11/pdp11.html) written by
[Paul Nankervis](mailto:[email protected]).

See the list of available [PDP-11 Machines](/devices/pdp11/machine/), which includes a
Expand All @@ -33,5 +33,7 @@ PDPjs is currently comprised of the following non-shared components, as listed i
* [keyboard.js](/modules/pdp11/lib/keyboard.js)
* [serialport.js](/modules/pdp11/lib/serialport.js)
* [pc11.js](/modules/pdp11/lib/pc11.js)
* [disk.js](/modules/pdp11/lib/disk.js)
* [rl11.js](/modules/pdp11/lib/rl11.js)
* [debugger.js](/modules/pdp11/lib/debugger.js)
* [computer.js](/modules/pdp11/lib/computer.js)
3 changes: 2 additions & 1 deletion modules/pdp11/lib/defines.js
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,8 @@ var PDP11 = {
DELAY: 0,
LKS: {
IE: 0x0040, // Interrupt Enable
MON: 0x0080 // Monitor
MON: 0x0080, // Monitor
MASK: 0x00C0 // these are the only bits that can read or written
}
},
PC11: { // High Speed Reader & Punch (PR11 is a Reader-only unit)
Expand Down
25 changes: 16 additions & 9 deletions modules/pdp11/lib/device.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,18 +140,17 @@ DevicePDP11.prototype.initBus = function(cmp, bus, cpu, dbg)
*/
DevicePDP11.prototype.reset = function()
{
this.kw11.lks = 0;
this.kw11.lks = PDP11.KW11.LKS.MON;
this.cpu.setTimer(this.kw11.timer, 1000/60, true);
};

/**
* interruptKW11()
*
* We used to call this function only when the the KW11's "Interrupt Enable" bit was set,
* but now we call it at 60Hz regardless. In part, this was so we could piggy-back on
* it to drive display updates, but more importantly, the KW11's "Monitor" bit is supposed
* to be set at the "line frequency" independent of whether KW11 interrupts are enabled.
* So we should actually be more compatible now.
* but now we call it at 60Hz regardless. In part, this was so we could piggy-back on it
* to drive display updates, but more importantly, the KW11's "Monitor" bit is supposed to
* be set at the "line frequency" independent of whether KW11 interrupts are enabled or not.
*
* @this {DevicePDP11}
*/
Expand All @@ -174,9 +173,12 @@ DevicePDP11.prototype.interruptKW11 = function()
*/
DevicePDP11.prototype.readLKS = function(addr)
{
var result = this.kw11.lks;
this.kw11.lks &= ~PDP11.KW11.LKS.MON;
return result;
/*
* NOTE: The original code always cleared LKS.MON (bit 7) after snapping the value for the read,
* but based on DEC's "Non-Interrupt Mode" programming examples, it's clear that's not how LKS.MON
* operates; if the caller wants to clear it, they must explicitly clear it with a write.
*/
return this.kw11.lks;
};

/**
Expand All @@ -188,7 +190,12 @@ DevicePDP11.prototype.readLKS = function(addr)
*/
DevicePDP11.prototype.writeLKS = function(data, addr)
{
this.kw11.lks = data & ~PDP11.KW11.LKS.MON;
/*
* NOTE: The original code always cleared LKS.MON (bit 7) as part of any write, but based on DEC's
* "Non-Interrupt Mode" programming examples, which explicitly CLRB after TSTB reveals LKS.MON is set,
* I think that was wrong, and that all a write should do is mask off all the other (non-writable) bits.
*/
this.kw11.lks = data & PDP11.KW11.LKS.MASK;
};

/**
Expand Down
1 change: 1 addition & 0 deletions pubs/dec/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ permalink: /pubs/dec/
Digital Equipment Corporation (DEC) Publications
------------------------------------------------

* [PDP-11](pdp11/)
* [VT100](vt100/)
Loading

0 comments on commit 2c606ae

Please sign in to comment.