Rolling out the first website update with the work-in-progress PDP-11 emulator
This commit is contained in:
parent
79eb483403
commit
b4b84b1c75
15 changed files with 502 additions and 422 deletions
80
Gemfile.lock
80
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
|
||||
|
|
|
|||
41
_config.yml
41
_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
|
||||
|
|
|
|||
|
|
@ -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 %}
|
||||
|
|
|
|||
|
|
@ -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 %}
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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
5
index.md
5
index.md
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in a new issue