Rolling out the first website update with the work-in-progress PDP-11 emulator

This commit is contained in:
Jeff 2016-10-06 09:54:49 -07:00 • committed by Jeff Parsons
commit b4b84b1c75
15 changed files with 502 additions and 422 deletions

View file

@ -1,7 +1,7 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (4.2.6)
activesupport (4.2.7)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
@ -12,51 +12,56 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.10.0)
colorator (0.1)
ethon (0.9.0)
colorator (1.1.0)
ethon (0.9.1)
ffi (>= 1.3.0)
execjs (2.7.0)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.10)
ffi (1.9.14)
forwardable-extended (2.6.0)
gemoji (2.1.0)
github-pages (80)
github-pages-health-check (= 1.1.0)
jekyll (= 3.1.6)
github-pages (97)
activesupport (= 4.2.7)
github-pages-health-check (= 1.2.0)
jekyll (= 3.2.1)
jekyll-coffeescript (= 1.0.1)
jekyll-feed (= 0.5.1)
jekyll-gist (= 1.4.0)
jekyll-github-metadata (= 1.11.1)
jekyll-mentions (= 1.1.2)
jekyll-github-metadata (= 2.1.0)
jekyll-mentions (= 1.2.0)
jekyll-paginate (= 1.1.0)
jekyll-redirect-from (= 0.10.0)
jekyll-redirect-from (= 0.11.0)
jekyll-sass-converter (= 1.3.0)
jekyll-seo-tag (= 1.4.0)
jekyll-seo-tag (= 2.0.0)
jekyll-sitemap (= 0.10.0)
jemoji (= 0.6.2)
kramdown (= 1.10.0)
jekyll-swiss (= 0.4.0)
jemoji (= 0.7.0)
kramdown (= 1.11.1)
liquid (= 3.0.6)
listen (= 3.0.6)
mercenary (~> 0.3)
rouge (= 1.10.1)
minima (= 1.2.0)
rouge (= 1.11.1)
terminal-table (~> 1.4)
github-pages-health-check (1.1.0)
github-pages-health-check (1.2.0)
addressable (~> 2.3)
net-dns (~> 0.8)
octokit (~> 4.0)
public_suffix (~> 1.4)
typhoeus (~> 0.7)
html-pipeline (2.4.1)
activesupport (>= 2, < 5)
html-pipeline (2.4.2)
activesupport (>= 2)
nokogiri (>= 1.4)
i18n (0.7.0)
jekyll (3.1.6)
colorator (~> 0.1)
jekyll (3.2.1)
colorator (~> 1.0)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1)
kramdown (~> 1.3)
liquid (~> 3.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (~> 1.7)
safe_yaml (~> 1.0)
jekyll-coffeescript (1.0.1)
@ -64,56 +69,65 @@ GEM
jekyll-feed (0.5.1)
jekyll-gist (1.4.0)
octokit (~> 4.2)
jekyll-github-metadata (1.11.1)
jekyll-github-metadata (2.1.0)
jekyll (~> 3.1)
octokit (~> 4.0)
jekyll-mentions (1.1.2)
jekyll-mentions (1.2.0)
activesupport (~> 4.0)
html-pipeline (~> 2.3)
jekyll (~> 3.0)
jekyll-paginate (1.1.0)
jekyll-redirect-from (0.10.0)
jekyll-redirect-from (0.11.0)
jekyll (>= 2.0)
jekyll-sass-converter (1.3.0)
sass (~> 3.2)
jekyll-seo-tag (1.4.0)
jekyll (~> 3.0)
jekyll-seo-tag (2.0.0)
jekyll (~> 3.1)
jekyll-sitemap (0.10.0)
jekyll-watch (1.4.0)
jekyll-swiss (0.4.0)
jekyll-watch (1.5.0)
listen (~> 3.0, < 3.1)
jemoji (0.6.2)
jemoji (0.7.0)
activesupport (~> 4.0)
gemoji (~> 2.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0)
json (1.8.3)
kramdown (1.10.0)
kramdown (1.11.1)
liquid (3.0.6)
listen (3.0.6)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9.7)
mercenary (0.3.6)
mini_portile2 (2.0.0)
minitest (5.9.0)
mini_portile2 (2.1.0)
minima (1.2.0)
minitest (5.9.1)
multipart-post (2.0.0)
net-dns (0.8.0)
nokogiri (1.6.7.2)
mini_portile2 (~> 2.0.0.rc2)
nokogiri (1.6.8.1)
mini_portile2 (~> 2.1.0)
octokit (4.3.0)
sawyer (~> 0.7.0, >= 0.5.3)
pathutil (0.14.0)
forwardable-extended (~> 2.6)
public_suffix (1.5.3)
rb-fsevent (0.9.7)
rb-inotify (0.9.7)
ffi (>= 0.5.0)
rouge (1.10.1)
rouge (1.11.1)
safe_yaml (1.0.4)
sass (3.4.22)
sawyer (0.7.0)
addressable (>= 2.3.5, < 2.5)
faraday (~> 0.8, < 0.10)
terminal-table (1.5.2)
terminal-table (1.7.3)
unicode-display_width (~> 1.1.1)
thread_safe (0.3.5)
typhoeus (0.8.0)
ethon (>= 0.8.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
unicode-display_width (1.1.1)
PLATFORMS
ruby

View file

@ -3,10 +3,11 @@
title: "PCjs Machines"
email: Jeff@pcjs.org
description: >
PCjs: Home of the original IBM PC emulator in a browser.
Classic computer simulations in JavaScript, including the IBM PC and other x86-based machines, 6502-based
machines such as the Ohio Scientific Challenger 1P, and 8080-based machines such as Space Invaders and the DEC VT100 Terminal.
Includes an archive of historical PC software and publications.
Welcome to PCjs, home of the original IBM PC in a web browser.
PCjs provides a variety of computer emulators written in JavaScript, including PCx86 for x86-based machines
(up through the 80386), C1Pjs for the 6502-based Ohio Scientific Challenger 1P, PC8080 for 8080-based machines
such as Space Invaders and the DEC VT100 Terminal, and PDPjs for PDP-11 machines like the 11/45 and 11/70.
PCjs also provides an archive of selected historical PC software, publications, and reference materials.
baseurl: "" # "/pcjs" when using http://jeffpar.github.io or "" when using http://www.pcjs.org
url: "http://www.pcjs.org" # "http://jeffpar.github.io" or "http://www.pcjs.org"
twitter_username: jeffpar
@ -18,7 +19,7 @@ encoding: UTF-8
# Build settings
exclude: ["index.html", "**/index.html", "**/archive", "**/c64", "logs", "node_modules", "projects", "**/private", "src", "**/src", "tmp", "**/tmp", "videos", "web", ".git", ".idea"]
exclude: ["index.html", "**/index.html", "**/archive", "**/ecp", "**/c64", "logs", "node_modules", "projects", "**/private", "**/rt11", "src", "**/src", "tmp", "**/tmp", "videos", "web", ".git", ".idea"]
markdown: kramdown
kramdown:
input: GFM
@ -32,7 +33,7 @@ gems:
pcjs:
domain: pcjs.org # whereas site.url is used for linking purposes, site.pcjs.domain is used for display purposes
version: 1.24.1 # IMPORTANT: keep pcjs.version in sync with package.json:version
version: 1.30.0 # IMPORTANT: keep pcjs.version in sync with package.json:version
compiled: true # by default, the compiled pcjs.version scripts will be used (eg, pcx86.js or pcx86-dbg.js)
c1p_scripts: # if pcjs.compiled is false, the following scripts will be included instead, in the order listed
- /modules/shared/lib/defines.js
@ -127,3 +128,31 @@ pcjs:
- /modules/shared/lib/state.js
- /modules/shared/lib/embed.js
- /modules/shared/lib/save.js
pdp11_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/keys.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pdp11/lib/defines.js
- /modules/pdp11/lib/messages.js
- /modules/pdp11/lib/panel.js
- /modules/pdp11/lib/bus.js
- /modules/pdp11/lib/device.js
- /modules/pdp11/lib/memory.js
- /modules/pdp11/lib/cpu.js
- /modules/pdp11/lib/cpustate.js
- /modules/pdp11/lib/cpuops.js
- /modules/pdp11/lib/rom.js
- /modules/pdp11/lib/ram.js
- /modules/pdp11/lib/keyboard.js
- /modules/pdp11/lib/serialport.js
- /modules/shared/lib/debugger.js
- /modules/pdp11/lib/debugger.js
- /modules/pdp11/lib/computer.js
- /modules/shared/lib/state.js
- /modules/shared/lib/embed.js

View file

@ -5,7 +5,7 @@ in the Front Matter of our Markdown documents, for compatibility with the Jekyll
'id' (eg, "ibm5150")
'name' (eg, "IBM PC (Model 5150) with Monochrome Display")
'type' (eg, "c1p", "pcx86", "pc8080")
'type' (eg, "c1p", "pcx86", "pc8080", "pdp11")
'debugger' (default is false)
'config' (default is "machine.xml")
'template' (default is "machine.xsl")
@ -35,10 +35,12 @@ of our Markdown or XML documents. Examples: 'automount' becomes 'autoMount', 'a
{% endcomment %}
{% for machine in page.machines %}
{% capture machine_type %}{{ machine.type | remove:"-dbg" }}{% endcapture %}
{% if machine_type != "c1p" %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% if machine_type == "c1p" %}
{% assign machine_app = "c1pjs" %}
{% elsif machine_type == "pdp11" %}
{% assign machine_app = "pdpjs" %}
{% else %}
{% capture machine_app %}{{ machine_type }}js{% endcapture %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% endif %}
{% if machine.debugger %}
{% capture machine_file %}{{ machine_type }}-dbg{% endcapture %}
@ -112,6 +114,7 @@ of our Markdown or XML documents. Examples: 'automount' becomes 'autoMount', 'a
{% if machine_type == "c1p" %}{% assign array_scripts = site.pcjs.c1p_scripts %}{% endif %}
{% if machine_type == "pcx86" %}{% assign array_scripts = site.pcjs.pcx86_scripts %}{% endif %}
{% if machine_type == "pc8080" %}{% assign array_scripts = site.pcjs.pc8080_scripts %}{% endif %}
{% if machine_type == "pdp11" %}{% assign array_scripts = site.pcjs.pdp11_scripts %}{% endif %}
{% for script in array_scripts %}
{% if script != "/modules/shared/lib/nodebug.js" or machine.debug != true %}
{% capture machine_script %}<script type="text/javascript" src="{{ site.baseurl }}{{ script }}"></script>{% endcapture %}

View file

@ -1,15 +1,17 @@
{% for machine in page.machines %}
{% capture machine_type %}{{ machine.type | remove:"-dbg" }}{% endcapture %}
{% if machine_type != "c1p" %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% if machine_type == "c1p" %}
{% assign machine_app = "c1pjs" %}
{% elsif machine_type == "pdp11" %}
{% assign machine_app = "pdpjs" %}
{% else %}
{% capture machine_app %}{{ machine_type }}js{% endcapture %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% endif %}
{% unless site.pcjs.compiled == true and machine.uncompiled != true %}
{% if machine_type != "c1p" %}
{% capture machine_style %}{{ site.baseurl }}/modules/shared/templates/components.css{% endcapture %}
{% if machine_type == "c1p" %}
{% capture machine_style %}{{ site.baseurl }}/modules/c1pjs/templates/components.css{% endcapture %}
{% else %}
{% capture machine_style %}{{ site.baseurl }}/modules/{{ machine_app }}/templates/components.css{% endcapture %}
{% capture machine_style %}{{ site.baseurl }}/modules/shared/templates/components.css{% endcapture %}
{% endif %}
{% else %}
{% capture machine_style %}{{ site.baseurl }}/versions/{{ machine_app }}/{{ site.pcjs.version }}/components.css{% endcapture %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdp11/1.30.0/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.0/machine.xsl"?>
<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"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdp11/1.30.0/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pdpjs/1.30.0/machine.xsl"?>
<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"/>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -16,8 +16,9 @@ one of several JavaScript Machines in the [PCjs Project](https://github.com/jeff
includes:
* [PCx86](/docs/pcx86/), an x86-based IBM PC and PC-compatible emulator
* [PC8080](/modules/pc8080/), an 8080-based machine emulator (e.g., [Space Invaders](/devices/pc8080/machine/invaders/), [VT100 Terminal](/devices/pc8080/machine/vt100/))
* [C1Pjs](/docs/c1pjs/), a 6502-based emulation of the Ohio Scientific [Challenger 1P](/devices/c1p/)
* [PC8080](/modules/pc8080/), an 8080 machine emulator (e.g., [Space Invaders](/devices/pc8080/machine/invaders/), [VT100 Terminal](/devices/pc8080/machine/vt100/))
* [C1Pjs](/docs/c1pjs/), an emulation of the 6502-based Ohio Scientific [Challenger 1P](/devices/c1p/)
* [PDPjs](/modules/pdp11/), a PDP-11 machine emulator currently in development (e.g., [PDP-11/70](/devices/pdp11/machine/1170/))
All PCjs computer simulations are written entirely in [JavaScript](/modules/). No Flash, Java or other plugins are
required. Supported browsers include modern versions of Chrome, Safari, Firefox, Internet Explorer (v9.0 and up), Edge,

View file

@ -183,7 +183,7 @@ function ComputerPDP11(parmsComputer, parmsMachine, fSuspended) {
}
}
this.println(PDP11.APPNAME + " v" + (XMLVERSION || PDP11.APPVERSION) + "\n" + COPYRIGHT + "\n" + LICENSE);
this.println(PDP11.APPNAME + " v" + PDP11.APPVERSION + "\n" + COPYRIGHT + "\n" + LICENSE);
this.println("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis <paulnank@hotmail.com>");
@ -1458,7 +1458,7 @@ ComputerPDP11.init = function()
/*
* In non-COMPILED builds, embedMachine() may have set XMLVERSION.
*/
if (!COMPILED && PDP11.XMLVERSION) PDP11.APPVERSION = PDP11.XMLVERSION;
if (!COMPILED && XMLVERSION) PDP11.APPVERSION = XMLVERSION;
var aeMachines = Component.getElementsByClass(document, PDP11.APPCLASS + "-machine");

View file

@ -205,9 +205,7 @@ CPUStatePDP11.prototype.resetRegs = function()
this.mmuMask = [ // mask to control I&D access for each mode
0x7, 0x7, 0x7, 0x7
];
/**
* @type {Array.<InterruptEvent>}
*/
/** @type {Array.<InterruptEvent>} */
this.interruptQueue = [];
this.opFlags |= PDP11.OPFLAG.INTQ;
this.initMemoryAccess();
@ -617,12 +615,30 @@ CPUStatePDP11.prototype.interrupt = function(delay, priority, vector, callback)
}
delay -= this.interruptQueue[i].delay;
}
this.interruptQueue.splice(i + 1, 0, {
"delay": delay,
"priority": (priority << 5) & 0xe0,
"vector": vector,
"callback": callback
});
/*
* NOTE regarding a Google Closure Compiler "bug": if an InterruptEvent is inserted into the
* interruptQueue with the named properties below, they will never be seen by the rest of the
* code, because the compiler renames all other property references EXCEPT these.
*
* this.interruptQueue.splice(i + 1, 0, {
* "delay": delay,
* "priority": (priority << 5) & 0xe0,
* "vector": vector,
* "callback": callback
* });
*
* Perhaps if the inlined object had been explicitly @typed, that wouldn't have happened, but
* I'm playing it safe now: I've taken the object out-of-line, removed the quoted property names,
* and explicitly typed it. The compiler re-inlines the object with correctly renamed properties.
*/
/** @type {InterruptEvent} */
var interruptEvent = {
delay: delay,
priority: (priority << 5) & 0xe0,
vector: vector,
callback: callback
};
this.interruptQueue.splice(i + 1, 0, interruptEvent);
}
this.opFlags |= PDP11.OPFLAG.INTQ;
};

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