diff --git a/Gemfile.lock b/Gemfile.lock
index bdab5d6c6..feac380ad 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -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
diff --git a/_config.yml b/_config.yml
index 4b36d20d5..fe5df2c08 100644
--- a/_config.yml
+++ b/_config.yml
@@ -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
diff --git a/_includes/machine-engines.html b/_includes/machine-engines.html
index 51951229a..1b68099fb 100644
--- a/_includes/machine-engines.html
+++ b/_includes/machine-engines.html
@@ -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 %}{% endcapture %}
diff --git a/_includes/machine-styles.html b/_includes/machine-styles.html
index 1f5ba10e0..a954cefb6 100644
--- a/_includes/machine-styles.html
+++ b/_includes/machine-styles.html
@@ -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 %}
- {% else %}
- {% capture machine_app %}{{ machine_type }}js{% endcapture %}
+ {% if machine_type == "c1p" %}
+ {% assign machine_app = "c1pjs" %}
+ {% elsif machine_type == "pdp11" %}
+ {% assign machine_app = "pdpjs" %}
+ {% else %}
+ {% 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 %}
diff --git a/devices/pdp11/machine/1170/machine.xml b/devices/pdp11/machine/1170/machine.xml
index 2dbff9c67..a97be9c25 100644
--- a/devices/pdp11/machine/1170/machine.xml
+++ b/devices/pdp11/machine/1170/machine.xml
@@ -1,5 +1,5 @@
-
+
PDP-11/70 Test Machine
diff --git a/devices/pdp11/machine/1170/test/machine.xml b/devices/pdp11/machine/1170/test/machine.xml
index 040b60897..2c7f044fb 100644
--- a/devices/pdp11/machine/1170/test/machine.xml
+++ b/devices/pdp11/machine/1170/test/machine.xml
@@ -1,5 +1,5 @@
-
+
PDP-11/70 Test Machine
diff --git a/docs/pcx86/examples/pcx86-dbg.js b/docs/pcx86/examples/pcx86-dbg.js
index 590af5c84..c865f1188 100644
--- a/docs/pcx86/examples/pcx86-dbg.js
+++ b/docs/pcx86/examples/pcx86-dbg.js
@@ -820,4 +820,4 @@ a):f("transformToFragment failed")):f("unable to transform XML: unsupported brow
function ws(a,b,c,d){if(!c&&b){d.push(b);a=lb[d[0]];b=null;for(var e in a)if(ma(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?Aa(b,null,!0,function(a,b){xs(b,d)}):xs(null,d)}else w("Error ("+c+") requesting "+a)}
function xs(a,b){var c,d,e,f=b[0],g=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=lb[f],k={},m;for(m in h){var n=h[m],t=ka(m);if("xml"==t){for(t=/[ \t]*]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=t.exec(h[m]);){var q=d[2];q&&(h[q]||(n=n.replace(d[0],"")))}d=m=ja(m)}else"xsl"==t&&(e=m=ja(m));k[m]=n}a&&(k[m="css"]=a);b[2]&&(k[m="parms"]=b[2]);b[3]&&(k[m="state"]=b[3]);d&&e?(a=JSON.stringify(k),g+=".js",c=c[1]+"var resources="+a+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"©"),a=Na(c,"javascript",!1,g),a=a+(', copy it to your web server as "'+g+'", and then add the following to your web page:\n\n')+('\n')+"...\n",a=a+('