From b4b84b1c751cb0b94ba00f1f434e9fbadf1478b2 Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 6 Oct 2016 09:54:49 -0700 Subject: [PATCH] Rolling out the first website update with the work-in-progress PDP-11 emulator --- Gemfile.lock | 80 ++-- _config.yml | 41 +- _includes/machine-engines.html | 11 +- _includes/machine-styles.html | 16 +- devices/pdp11/machine/1170/machine.xml | 2 +- devices/pdp11/machine/1170/test/machine.xml | 2 +- docs/pcx86/examples/pcx86-dbg.js | 2 +- docs/pcx86/examples/pcx86.js | 2 +- index.md | 5 +- modules/pdp11/lib/computer.js | 4 +- modules/pdp11/lib/cpustate.js | 34 +- versions/pcx86/1.30.0/pcx86-dbg.js | 2 +- versions/pcx86/1.30.0/pcx86.js | 2 +- versions/pdpjs/1.30.0/pdp11-dbg.js | 423 ++++++++++---------- versions/pdpjs/1.30.0/pdp11.js | 298 +++++++------- 15 files changed, 502 insertions(+), 422 deletions(-) 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+('