Cleaned up PDP-11/70 configs

This commit is contained in:
Jeff Parsons 2016-10-13 16:35:10 -07:00 • committed by Jeff Parsons
commit 854b40c419
28 changed files with 531 additions and 261 deletions

View file

@ -9,5 +9,6 @@ PDP-11/70 Machine Configurations
PCjs is adding support the following PDP-11/70 configurations:
* [PDP-11/70 Test Machine](/devices/pdp11/machine/1170/test/)
* [PDP-11/70 with VT100 Terminal](/devices/pdp11/machine/1170/vt100/)
* [PDP-11/70 Test Machine](/devices/pdp11/machine/1170/test/) ([Debugger](/devices/pdp11/machine/1170/test/debugger/))
* [PDP-11/70 with Front Panel](/devices/pdp11/machine/1170/panel) ([Debugger](/devices/pdp11/machine/1170/panel/debugger/))
* [PDP-11/70 with VT100 Terminal](/devices/pdp11/machine/1170/vt100/) ([Debugger](/devices/pdp11/machine/1170/vt100/debugger/))

View file

@ -0,0 +1,10 @@
---
layout: page
title: PDP-11/70 with Front Panel
permalink: /devices/pdp11/machine/1170/panel/
machines:
- id: test1170
type: pdp11
---
{% include machine.html id="test1170" %}

View file

@ -0,0 +1,11 @@
---
layout: page
title: PDP-11/70 with Front Panel and Debugger
permalink: /devices/pdp11/machine/1170/panel/debugger/
machines:
- id: test1170
type: pdp11
debugger: true
---
{% include machine.html id="test1170" %}

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel and Debugger</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" size="0x0570" file="/devices/pdp11/rom/custom/boot.json" writable="true"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" name="default"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/1170/debugger/leds.xml"/>
<debugger id="debugger" base="8" messages="" commands=""/>
</machine>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" size="0x0570" file="/devices/pdp11/rom/custom/boot.json" writable="true"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" name="default"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/1170/leds.xml"/>
</machine>

View file

@ -5,10 +5,6 @@ permalink: /devices/pdp11/machine/1170/test/
machines:
- id: test1170
type: pdp11
debugger: true
---
PDP-11/70 Test Machine
----------------------
{% include machine.html id="test1170" %}

View file

@ -0,0 +1,11 @@
---
layout: page
title: PDP-11/70 Test Machine with Debugger
permalink: /devices/pdp11/machine/1170/test/
machines:
- id: test1170
type: pdp11
debugger: true
---
{% include machine.html id="test1170" %}

View file

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 Test Machine</name>
<name pos="center">PDP-11/70 Test Machine with Debugger</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" size="0x0570" file="/devices/pdp11/rom/custom/boot.json" writable="true"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" name="default"/>
<serial id="dl11" adapter="0"/>
<panel ref="/devices/pdp11/panel/1170/led.xml"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/1170/debugger/test.xml"/>
<debugger id="debugger" base="8" messages="" commands=""/>
</machine>

View file

@ -3,12 +3,11 @@
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 Test Machine</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" size="0x0570" file="/devices/pdp11/rom/custom/boot.json" writable="true"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" name="default"/>
<serial id="dl11" adapter="0" binding="print"/>
<panel ref="/devices/pdp11/panel/1170/led.xml"/>
<debugger id="debugger" base="8" messages="" commands=""/>
<panel ref="/devices/pdp11/panel/1170/test.xml"/>
</machine>

View file

@ -5,8 +5,7 @@ permalink: /devices/pdp11/machine/1170/vt100/
machines:
- id: test1170
type: pdp11
debugger: true
config: /devices/pdp11/machine/1170/machine.xml
config: /devices/pdp11/machine/1170/vt100/machine.xml
connection: dl11->vt100.serialPort
- id: vt100
type: pc8080
@ -14,9 +13,6 @@ machines:
connection: serialPort->test1170.dl11
---
PDP-11/70 with VT100 Terminal
------------------------------------------
{% include machine.html id="test1170" %}
{% include machine.html id="vt100" %}

View file

@ -0,0 +1,19 @@
---
layout: page
title: PDP-11/70 with VT100 Terminal and Debugger
permalink: /devices/pdp11/machine/1170/vt100/
machines:
- id: test1170
type: pdp11
debugger: true
config: /devices/pdp11/machine/1170/vt100/debugger/machine.xml
connection: dl11->vt100.serialPort
- id: vt100
type: pc8080
config: /devices/pc8080/machine/vt100/machine.xml
connection: serialPort->test1170.dl11
---
{% include machine.html id="test1170" %}
{% include machine.html id="vt100" %}

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" size="0x0570" file="/devices/pdp11/rom/custom/boot.json" writable="true"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" name="default"/>
<serial id="dl11" adapter="0"/>
<panel ref="/devices/pdp11/panel/1170/debugger/leds.xml"/>
<debugger id="debugger" base="8" messages="" commands=""/>
</machine>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.1/machine.xsl"?>
<machine id="test1170" class="pdp11" border="1" pos="center" background="#FAEBD7">
<name pos="center">PDP-11/70 with Front Panel</name>
<computer id="computer" busWidth="22"/>
<cpu id="cpu" model="1170" cycles="6666667" resetAddr="0xC000" autoStart="true"/>
<ram id="ram" addr="0x0000" size="0xC000"/>
<rom id="rom" addr="0xC000" size="0x0570" file="/devices/pdp11/rom/custom/boot.json" writable="true"/>
<ram id="ram" addr="0x10000" size="0x34000"/>
<device id="default" name="default"/>
<serial id="dl11" adapter="0"/>
<panel ref="/devices/pdp11/panel/1170/leds.xml"/>
</machine>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<panel id="panel" width="100%" padding="8px">
<name>Control Panel</name>
<control type="container" class="pcjs-textarea" width="60%" padbottom="8px" padright="8px">
<control type="textarea" binding="print" width="100%" height="252px" pos="relative" style="resize:vertical;"/>
<control type="container" width="100%">
<control type="text" binding="debugInput" width="auto"/>
<control type="button" binding="debugEnter">Enter</control>
<control type="button" binding="clear">Clear</control>
</control>
</control>
<control type="container" class="pcjs-registers" width="35%" padleft="8px">
<control type="register" label="R0" binding="R0" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R1" binding="R1" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R2" binding="R2" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R3" binding="R3" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R4" binding="R4" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R5" binding="R5" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="SP" binding="R6" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="PC" binding="R7" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="PS" binding="PS" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="container" pos="left">
<control type="flag" label="N" binding="NF" width="8px" padright="4px" padbottom="8px">0</control>
<control type="flag" label="Z" binding="ZF" width="8px" padright="4px" padbottom="8px">0</control>
<control type="flag" label="V" binding="VF" width="8px" padright="4px" padbottom="8px">0</control>
<control type="flag" label="C" binding="CF" width="8px" padright="4px" padbottom="8px">0</control>
</control>
</control>
<control type="container" padbottom="8px" padleft="8px">
<control type="button" binding="run">Run</control>
<control type="button" binding="step">Step</control>
<control type="button" binding="reset">Reset</control>
<control type="button" binding="setSpeed">Fast</control>
</control>
</panel>

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<panel id="panel" width="100%" padding="8px">
<name>Control Panel</name>
<control type="container" class="pcjs-panel-group" width="100%" padbottom="8px">
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right">ADDRESS</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A0" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A1" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A2" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A3" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A4" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A5" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A6" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A7" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A8" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A9" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A10" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A11" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A12" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A13" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A14" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A15" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A16" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A17" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A18" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A19" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A20" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="A21" width="100%" container="center"/></control>
</control>
</control>
<control type="container" class="pcjs-panel-group" width="100%" padbottom="8px">
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right">DATA</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D0" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D1" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D2" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D3" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D4" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D5" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D6" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D7" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D8" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D9" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D10" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D11" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D12" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D13" width="100%" container="center"/></control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D14" width="100%" container="center"/></control>
</control>
<control type="container" class="pcjs-tripled" width="12%" pos="right">
<control type="container" class="pcjs-tripled-label" width="100%" pos="right" style="opacity:0">.</control>
<control type="container" class="pcjs-ledpad" width="33%" pos="right"><control type="rled" binding="D15" width="100%" container="center"/></control>
</control>
</control>
<control type="container" class="pcjs-textarea" width="60%" padtop="8px" padbottom="8px" padright="8px">
<control type="textarea" binding="print" width="100%" height="252px" pos="relative" style="resize:vertical;"/>
</control>
<control type="container" padbottom="8px" padleft="8px">
<control type="button" binding="run">Run</control>
<control type="button" binding="reset">Reset</control>
<control type="button" binding="setSpeed">Fast</control>
</control>
</panel>

View file

@ -3,32 +3,9 @@
<name>Control Panel</name>
<control type="container" class="pcjs-textarea" width="60%" padbottom="8px" padright="8px">
<control type="textarea" binding="print" width="100%" height="252px" pos="relative" style="resize:vertical;"/>
<control type="container" width="100%">
<control type="text" binding="debugInput" width="auto"/>
<control type="button" binding="debugEnter">Enter</control>
<control type="button" binding="clear">Clear</control>
</control>
</control>
<control type="container" class="pcjs-registers" width="35%" padleft="8px">
<control type="register" label="R0" binding="R0" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R1" binding="R1" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R2" binding="R2" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R3" binding="R3" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R4" binding="R4" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="R5" binding="R5" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="SP" binding="R6" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="PC" binding="R7" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="register" label="PS" binding="PS" pos="left" width="60px" padright="8px" padbottom="8px">0000</control>
<control type="container" pos="left">
<control type="flag" label="N" binding="NF" width="8px" padright="4px" padbottom="8px">0</control>
<control type="flag" label="Z" binding="ZF" width="8px" padright="4px" padbottom="8px">0</control>
<control type="flag" label="V" binding="VF" width="8px" padright="4px" padbottom="8px">0</control>
<control type="flag" label="C" binding="CF" width="8px" padright="4px" padbottom="8px">0</control>
</control>
</control>
<control type="container" padbottom="8px" padleft="8px">
<control type="button" binding="run">Run</control>
<control type="button" binding="step">Step</control>
<control type="button" binding="reset">Reset</control>
<control type="button" binding="setSpeed">Fast</control>
</control>

View file

@ -13,6 +13,9 @@ PDPjs is our PDP-11 machine emulation module. The code is being adapted from
the JavaScript [PDP 11/70 Emulator (v1.3)](http://skn.noip.me/pdp11/pdp11.html) written by
[Paul Nankervis](mailto:paulnank@hotmail.com).
See the list of available [PDP-11 Machines](/devices/pdp11/machine/), which includes a
[PDP-11/70 with Front Panel](/devices/pdp11/machine/1170/panel/) and [PDP-11/70 with VT100 Terminal](/devices/pdp11/machine/1170/vt100/).
PDPjs is currently comprised of the following non-shared components, as listed in
[package.json](../../package.json) (see the *pdp11Files* property):

View file

@ -216,7 +216,7 @@ BusPDP11.IOHANDLER = {
* Those fallbacks may not always be appropriate; for example, byte writes to some device registers
* must be zero-extended to update the entire word. For those cases, the fallback's "preliminary" read
* is issued with a zero address so that the handler can distinguish a normal read from one of these
* preliminary reads, and return an appropriate value for the update (ie, zero).
* preliminary reads (aka read-before-write), and return an appropriate value for the update (eg, zero).
*
* If none of these fallback behaviors are appropriate, the device has a simple recourse: register
* handlers for all possible addresses and sizes.
@ -543,10 +543,15 @@ BusPDP11.prototype.reset = function()
*/
BusPDP11.prototype.unknownAccess = function(addr, data, byteFlag)
{
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(MessagesPDP11.WARN)) {
/*
* TODO: For 22-bit machines, let's display addr as a 3-byte value (for a total of 9 octal digits)
*/
this.dbg.printMessage("warning: unknown I/O access (" + this.dbg.toStrBase(addr, 3) + "," + this.dbg.toStrBase(data) + "," + byteFlag + ")", true, true);
this.cpu.setPC(this.cpu.getLastPC());
this.cpu.stopCPU();
}
if (!this.nDisableTraps) {
if (DEBUGGER && this.dbg && this.dbg.messageEnabled(MessagesPDP11.WARN)) {
this.dbg.printMessage("warning: unrecognized I/O access(" + this.dbg.toStrBase(addr) + "," + this.dbg.toStrBase(data) + "," + byteFlag + ")", true, true);
}
this.cpu.trap(PDP11.TRAP.BUS_ERROR, addr);
}
return 0;

View file

@ -1039,6 +1039,20 @@ PDP11.opDECB = function(opCode)
/**
* opDIV(opCode)
*
* The instruction "DIV SRC,Rn" determines SRC using the DSTMODE portion of the opcode and Rn using
* the SRCMODE portion; Rn can only be a register (and it should be an EVEN-numbered register, lest you
* get unexpected results). The dividend (DST) is then calculated as:
*
* DST = (regs[Rn] << 16) | (regs[Rn|1])
*
* DST is divided by SRC, and the quotient is stored in regs[Rn] and the remainder in regs[Rn|1].
*
* For example:
*
* DIV R4,R0
*
* where R4 = 006400 and R0,R1 = 000000,015000 will result in R0,R1 = 000002,000000.
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/

View file

@ -534,6 +534,20 @@ CPUStatePDP11.prototype.getPC = function()
return this.regsGen[PDP11.REG.PC];
};
/**
* getLastPC()
*
* @this {CPUStatePDP11}
* @return {number}
*/
CPUStatePDP11.prototype.getLastPC = function()
{
/*
* As long as we're always snapping the PC before every opcode, we might as well use it....
*/
return this.regMMR2;
};
/**
* getPCWord()
*

View file

@ -1152,7 +1152,7 @@ if (DEBUGGER) {
DebuggerPDP11.prototype.message = function(sMessage, fAddress)
{
if (fAddress) {
sMessage += " @" + this.toStrAddr(this.newAddr(this.cpu.getPC()));
sMessage += " @" + this.toStrAddr(this.newAddr(this.cpu.getLastPC()));
}
if (this.bitsMessage & MessagesPDP11.BUFFER) {

View file

@ -421,11 +421,12 @@ var PDP11 = {
LKS: 0o177546, // KW11-L Clock Status
RCSR: 0o177560, // Console Terminal: Receiver Status Register
RBUF: 0o177562, // Console Terminal: Receiver Data Buffer Register
XCSR: 0o177564, // Console Terminal: Transmitter Status Register
XBUF: 0o177566, // Console Terminal: Transmitter Data Buffer Register
DISPLAY: 0o177570, // Console Switch and Display
RCSR: 0o177560, // Display Terminal: Receiver Status Register
RBUF: 0o177562, // Display Terminal: Receiver Data Buffer Register
XCSR: 0o177564, // Display Terminal: Transmitter Status Register
XBUF: 0o177566, // Display Terminal: Transmitter Data Buffer Register
CNSL: 0o177570, // Console Switch and Front Panel Display
MMR0: 0o177572, // 777572 17777572
MMR1: 0o177574, // 777574 17777574

View file

@ -46,10 +46,10 @@ if (NODE) {
*
* The Device component implements the following "default" devices:
*
* KW11
* DISPLAY Registers
* MMU Registers
* CPU Registers (eg, PSW)
* KW11 (KW11-L Line Time Clock)
* CNSL (Console Switch and Front Panel Display)
*
* as well providing access to all the MMU and CPU registers, PSW, etc.
*
* @constructor
* @extends Component
@ -59,14 +59,14 @@ function DevicePDP11(parmsDevice)
{
Component.call(this, "Device", parmsDevice, DevicePDP11, MessagesPDP11.DEVICE);
this.display = {
this.console = { // CNSL registers
data: 0,
address: 0,
misc: 0x14,
switches: 0
};
this.kw11 = {
this.kw11 = { // LW11 registers
csr: 0,
timer: -1 // initBus() will initialize this timer ID
};
@ -167,6 +167,33 @@ DevicePDP11.prototype.writeLKS = function(data, addr)
this.kw11.lks = data & ~PDP11.KW11.LKS.MON;
};
/**
* readCNSL(addr)
*
* If addr is set, then this a normal read, so we should return normal results (ie, switches);
* if addr is NOT set, then this is a read-before-write, so we must return the value being updated (ie, data).
*
* @this {DevicePDP11}
* @param {number} addr (eg, PDP11.UNIBUS.CNSL or 177570)
* @return {number}
*/
DevicePDP11.prototype.readCNSL = function(addr)
{
return (addr? this.console.switches : this.console.data) & 0xffff;
};
/**
* writeCNSL(data, addr)
*
* @this {DevicePDP11}
* @param {number} data
* @param {number} addr (eg, PDP11.UNIBUS.CNSL or 177570)
*/
DevicePDP11.prototype.writeCNSL = function(data, addr)
{
this.console.data = data;
};
/**
* readMMR0(addr)
*
@ -189,7 +216,7 @@ DevicePDP11.prototype.readMMR0 = function(addr)
DevicePDP11.prototype.writeMMR0 = function(data, addr)
{
this.cpu.setMMR0(data);
this.updateDisplayMode();
this.updateConsoleMode();
};
/**
@ -250,21 +277,21 @@ DevicePDP11.prototype.readMMR3 = function(addr)
DevicePDP11.prototype.writeMMR3 = function(data, addr)
{
this.cpu.setMMR3(data);
this.updateDisplayMode();
this.updateConsoleMode();
};
/**
* updateDisplayMode()
* updateConsoleMode()
*
* @this {DevicePDP11}
*/
DevicePDP11.prototype.updateDisplayMode = function()
DevicePDP11.prototype.updateConsoleMode = function()
{
/*
* Set bit to 1 (22-bit), 2 (18-bit), or 4 (16-bit)
*/
var bit = this.cpu.mmuEnable? ((this.cpu.regMMR3 & PDP11.MMR3.MMU_22BIT)? 1 : 2) : 4;
this.display.misc = (this.display.misc & ~7) | bit;
this.console.misc = (this.console.misc & ~7) | bit;
};
/**
@ -1024,7 +1051,7 @@ DevicePDP11.prototype.kw11_interrupt = function()
*/
DevicePDP11.prototype.reset = function()
{
this.display.misc = (this.display.misc & ~0x77) | 0x14; // kernel 16 bit
this.console.misc = (this.console.misc & ~0x77) | 0x14; // kernel 16 bit
this.kw11.lks = 0;
};
@ -1042,6 +1069,7 @@ DevicePDP11.UNIBUS_IOTABLE = {
[PDP11.UNIBUS.KDSAR0]: /* 172360 */ [null, null, DevicePDP11.prototype.readKDSAR, DevicePDP11.prototype.writeKDSAR, "KDSAR"],
[PDP11.UNIBUS.MMR3]: /* 172516 */ [null, null, DevicePDP11.prototype.readMMR3, DevicePDP11.prototype.writeMMR3, "MMR3"],
[PDP11.UNIBUS.LKS]: /* 177546 */ [null, null, DevicePDP11.prototype.readLKS, DevicePDP11.prototype.writeLKS, "LKS"],
[PDP11.UNIBUS.CNSL]: /* 177570 */ [null, null, DevicePDP11.prototype.readCNSL, DevicePDP11.prototype.writeCNSL, "CNSL"],
[PDP11.UNIBUS.MMR0]: /* 177572 */ [null, null, DevicePDP11.prototype.readMMR0, DevicePDP11.prototype.writeMMR0, "MMR0"],
[PDP11.UNIBUS.MMR1]: /* 177574 */ [null, null, DevicePDP11.prototype.readMMR1, DevicePDP11.prototype.writeIgnored, "MMR1"],
[PDP11.UNIBUS.MMR2]: /* 177576 */ [null, null, DevicePDP11.prototype.readMMR2, DevicePDP11.prototype.writeIgnored, "MMR2"],

View file

@ -262,7 +262,7 @@ SerialPortPDP11.prototype.initBus = function(cmp, bus, cpu, dbg)
this.triggerReceiveInterrupt = this.cpu.addTrigger(PDP11.DL11.RVEC, PDP11.DL11.PRI);
this.timerReceiveInterrupt = this.cpu.addTimer(function readyReceiver() {
this.timerReceiveInterrupt = this.cpu.addTimer(function() {
if (!(serial.rcsr & PDP11.DL11.RCSR.RD)) {
if (serial.abReceive.length) {
serial.rbuf = serial.abReceive.shift();
@ -276,7 +276,7 @@ SerialPortPDP11.prototype.initBus = function(cmp, bus, cpu, dbg)
this.triggerTransmitInterrupt = this.cpu.addTrigger(PDP11.DL11.XVEC, PDP11.DL11.PRI);
this.timerTransmitInterrupt = this.cpu.addTimer(function readyTransmitter() {
this.timerTransmitInterrupt = this.cpu.addTimer(function readyransmitter() {
serial.xcsr |= PDP11.DL11.XCSR.READY;
if (serial.xcsr & PDP11.DL11.XCSR.TIE) {
serial.cpu.setTrigger(serial.triggerTransmitInterrupt);

View file

@ -218,7 +218,7 @@ str.toOct = function(n, cch, fPrefix)
if (cch) {
if (cch > 11) cch = 11;
} else {
cch = (n & ~0xffff)? 11 : 6;
cch = (n & ~0xffff)? 11 : 6; // TODO: For our 22-bit machines, we really don't need more than 8 digits max
}
/*
* An initial "falsey" check for null takes care of both null and undefined;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long