Merge branch 'master' into gh-pages

This commit is contained in:
Jeff Parsons 2016-05-23 15:34:53 -07:00
commit b3790ad5f2
1635 changed files with 54568 additions and 23576 deletions

2
.gitignore vendored
View file

@ -20,5 +20,7 @@ c64/
ecp/
projects/
private/
restricted/
src/
tmp/
unlisted/

View file

@ -108,7 +108,7 @@ module.exports = function(grunt) {
* "<%= pkg.name %>"
*
* which would be fine for most of my needs, but some of the information I need
* from the package.json is not in string form (eg, pcJSFiles, which is an array of
* from the package.json is not in string form (eg, pcX86Files, which is an array of
* file names). So I create a "pkg" variable first, which allows me to do both.
*/
@ -117,14 +117,14 @@ module.exports = function(grunt) {
* @property {string} name
* @property {string} version
* @property {Array.<string>} c1pJSFiles
* @property {Array.<string>} pcJSFiles
* @property {Array.<string>} pcX86Files
* @property {Array.<string>} pc8080Files
* @property {Array.<string>} closureCompilerExterns
*/
var pkg = grunt.file.readJSON("package.json");
var tmpC1Pjs = "./tmp/c1pjs/" + pkg.version + "/c1p.js";
var tmpPCjs = "./tmp/pcjs/" + pkg.version + "/pc.js";
var tmpPCx86 = "./tmp/pcx86/" + pkg.version + "/pcx86.js";
var tmpPC8080 = "./tmp/pc8080/" + pkg.version + "/pc8080.js";
grunt.initConfig({
@ -153,18 +153,18 @@ module.exports = function(grunt) {
src: pkg.c1pJSFiles,
dest: "./versions/c1pjs/" + pkg.version + "/c1p-dbg.js"
},
"pc.js": {
src: pkg.pcJSFiles,
dest: "./versions/pcjs/" + pkg.version + "/pc.js",
"pcx86.js": {
src: pkg.pcX86Files,
dest: "./versions/pcx86/" + pkg.version + "/pcx86.js",
options: {
process: function(src, filepath) {
return (path.basename(filepath) == "debugger.js"? "" : src);
}
}
},
"pc-dbg.js": {
src: pkg.pcJSFiles,
dest: "./versions/pcjs/" + pkg.version + "/pc-dbg.js"
"pcx86-dbg.js": {
src: pkg.pcX86Files,
dest: "./versions/pcx86/" + pkg.version + "/pcx86-dbg.js"
},
"pc8080.js": {
src: pkg.pc8080Files,
@ -190,9 +190,9 @@ module.exports = function(grunt) {
}
}
},
"tmp-pcjs": {
src: pkg.pcJSFiles,
dest: tmpPCjs,
"tmp-pcx86": {
src: pkg.pcX86Files,
dest: tmpPCx86,
options: {
banner: '"use strict";\n\n',
process: function(src, filepath) {
@ -225,9 +225,9 @@ module.exports = function(grunt) {
src: pkg.c1pJSFiles,
dest: tmpC1Pjs
},
"pc.js": {
src: pkg.pcJSFiles,
dest: tmpPCjs
"pcx86.js": {
src: pkg.pcX86Files,
dest: tmpPCx86
},
"pc8080.js": {
src: pkg.pc8080Files,
@ -290,7 +290,7 @@ module.exports = function(grunt) {
*/
TEMPcompilerOpts: {
// create_source_map: "./tmp/c1pjs/" + pkg.version + "/c1p.map",
define: ["\"APPNAME='C1Pjs'\"", "\"APPVERSION='" + pkg.version + "'\"", "DEBUGGER=false",
define: ["\"APPVERSION='" + pkg.version + "'\"", "DEBUGGER=false",
"\"SITEHOST='www.pcjs.org'\"", "COMPILED=true", "DEBUG=false"],
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/c1pjs/" + pkg.version + "/c1p.map\""
output_wrapper: "\"(function(){%output%})();\""
@ -302,7 +302,7 @@ module.exports = function(grunt) {
"c1p-dbg.js": {
TEMPcompilerOpts: {
// create_source_map: "./tmp/c1pjs/" + pkg.version + "/c1p-dbg.map",
define: ["\"APPNAME='C1Pjs'\"", "\"APPVERSION='" + pkg.version + "'\"",
define: ["\"APPVERSION='" + pkg.version + "'\"",
"\"SITEHOST='www.pcjs.org'\"", "COMPILED=true", "DEBUG=false"],
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/c1pjs/" + pkg.version + "/c1p-dbg.map\""
output_wrapper: "\"(function(){%output%})();\""
@ -311,37 +311,37 @@ module.exports = function(grunt) {
src: tmpC1Pjs,
dest: "./versions/c1pjs/" + pkg.version + "/c1p-dbg.js"
},
"pc.js": {
"pcx86.js": {
TEMPcompilerOpts: {
// create_source_map: "./tmp/pcjs/" + pkg.version + "/pc.map",
define: ["\"APPNAME='PCjs'\"", "\"APPVERSION='" + pkg.version + "'\"", "DEBUGGER=false",
// create_source_map: "./tmp/pcx86/" + pkg.version + "/pcx86.map",
define: ["\"APPVERSION='" + pkg.version + "'\"", "DEBUGGER=false",
"\"SITEHOST='www.pcjs.org'\"", "COMPILED=true", "DEBUG=false", "BACKTRACK=false", "I386=true"],
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/pcjs/" + pkg.version + "/pc.map\""
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/pcx86/" + pkg.version + "/pcx86.map\""
output_wrapper: "\"(function(){%output%})();\""
},
// src: pkg.pcJSFiles,
src: tmpPCjs,
dest: "./versions/pcjs/" + pkg.version + "/pc.js"
// src: pkg.pcX86Files,
src: tmpPCx86,
dest: "./versions/pcx86/" + pkg.version + "/pcx86.js"
},
"pc-dbg.js": {
"pcx86-dbg.js": {
/*
* Technically, this is the one case we don't need to override the default 'define' settings, but maybe it's best to be explicit.
*/
TEMPcompilerOpts: {
// create_source_map: "./tmp/pcjs/" + pkg.version + "/pc-dbg.map",
define: ["\"APPNAME='PCjs'\"", "\"APPVERSION='" + pkg.version + "'\"",
// create_source_map: "./tmp/pcx86/" + pkg.version + "/pcx86-dbg.map",
define: ["\"APPVERSION='" + pkg.version + "'\"",
"\"SITEHOST='www.pcjs.org'\"", "COMPILED=true", "DEBUG=false", "BACKTRACK=false", "I386=true"],
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/pcjs/" + pkg.version + "/pc-dbg.map\""
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/pcx86/" + pkg.version + "/pcx86-dbg.map\""
output_wrapper: "\"(function(){%output%})();\""
},
// src: pkg.pcJSFiles,
src: tmpPCjs,
dest: "./versions/pcjs/" + pkg.version + "/pc-dbg.js"
// src: pkg.pcX86Files,
src: tmpPCx86,
dest: "./versions/pcx86/" + pkg.version + "/pcx86-dbg.js"
},
"pc8080.js": {
TEMPcompilerOpts: {
// create_source_map: "./tmp/pc8080/" + pkg.version + "/pc8080.map",
define: ["\"APPNAME='PC8080'\"", "\"APPVERSION='" + pkg.version + "'\"",
define: ["\"APPVERSION='" + pkg.version + "'\"",
"\"SITEHOST='www.pcjs.org'\"", "COMPILED=true", "DEBUG=false", "DEBUGGER=false"],
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/pc8080/" + pkg.version + "/pc8080.map\""
output_wrapper: "\"(function(){%output%})();\""
@ -356,7 +356,7 @@ module.exports = function(grunt) {
*/
TEMPcompilerOpts: {
// create_source_map: "./tmp/pc8080/" + pkg.version + "/pc8080-dbg.map",
define: ["\"APPNAME='PC8080'\"", "\"APPVERSION='" + pkg.version + "'\"",
define: ["\"APPVERSION='" + pkg.version + "'\"",
"\"SITEHOST='www.pcjs.org'\"", "COMPILED=true", "DEBUG=false", "DEBUGGER=true"],
// output_wrapper: "\"(function(){%output%})();//@ sourceMappingURL=/tmp/pc8080/" + pkg.version + "/pc8080-dbg.map\""
output_wrapper: "\"(function(){%output%})();\""
@ -402,19 +402,19 @@ module.exports = function(grunt) {
}
}
},
"pcjs": {
"pcx86": {
files: [
{
cwd: "modules/shared/templates/",
src: ["common.css", "common.xsl", "components.*", "document.css", "document.xsl", "machine.xsl", "manifest.xsl", "outline.xsl"],
dest: "versions/pcjs/<%= pkg.version %>/",
dest: "versions/pcx86/<%= pkg.version %>/",
expand: true
}
],
options: {
process: function(content, srcPath) {
var s = content.replace(/(<xsl:variable name="APPVERSION">)[^<]*(<\/xsl:variable>)/g, "$1" + pkg.version + "$2");
s = s.replace(/"[^"]*\/?(common.css|common.xsl|components.css|components.xsl|document.css|document.xsl)"/g, '"/versions/pcjs/' + pkg.version + '/$1"');
s = s.replace(/"[^"]*\/?(common.css|common.xsl|components.css|components.xsl|document.css|document.xsl)"/g, '"/versions/pcx86/' + pkg.version + '/$1"');
s = s.replace(/[ \t]*\/\*[^\*][\s\S]*?\*\//g, "").replace(/[ \t]*<!--[^@]*?-->[ \t]*\n?/g, "");
return s;
}
@ -443,9 +443,9 @@ module.exports = function(grunt) {
"examples": {
files: [
{
cwd: "versions/pcjs/<%= pkg.version %>/",
src: ["pc.js", "pc-dbg.js", "components.css", "components.xsl"],
dest: "docs/pcjs/examples/",
cwd: "versions/pcx86/<%= pkg.version %>/",
src: ["pcx86.js", "pcx86-dbg.js", "components.css", "components.xsl"],
dest: "docs/pcx86/examples/",
expand: true
}
],
@ -520,14 +520,14 @@ module.exports = function(grunt) {
args: []
},
"zip-examples": {
options: {cwd: "docs/pcjs/examples"},
options: {cwd: "docs/pcx86/examples"},
cmd: "./zip.sh",
args: ["v" + pkg.version + ".zip"]
}
},
replace: {
"fix-source-maps": {
src: ["./tmp/c1pjs/" + pkg.version + "/c1p*.map", "./tmp/pcjs/" + pkg.version + "/pc*.map"],
src: ["./tmp/c1pjs/" + pkg.version + "/c1p*.map", "./tmp/pcx86/" + pkg.version + "/pc*.map"],
overwrite: true,
replacements: [
{
@ -560,13 +560,13 @@ module.exports = function(grunt) {
grunt.loadTasks("modules/grunts/prepjs/tasks");
grunt.registerTask("preCompiler", grunt.option("rebuild")? ["concat:tmp-c1pjs", "concat:tmp-pcjs", "concat:tmp-pc8080"] : ["newer:concat:tmp-c1pjs", "newer:concat:tmp-pcjs", "newer:concat:tmp-pc8080"]);
grunt.registerTask("preCompiler", grunt.option("rebuild")? ["concat:tmp-c1pjs", "concat:tmp-pcx86", "concat:tmp-pc8080"] : ["newer:concat:tmp-c1pjs", "newer:concat:tmp-pcx86", "newer:concat:tmp-pc8080"]);
grunt.registerTask("compile", ["preCompiler", "closureCompiler", "replace:fix-source-maps"]);
grunt.registerTask('nocompile', function(target) {
if (!target) {
grunt.task.run(["concat:c1p.js", "concat:c1p-dbg.js", "concat:pc.js", "concat:pc-dbg.js"]);
grunt.task.run(["concat:c1p.js", "concat:c1p-dbg.js", "concat:pcx86.js", "concat:pcx86-dbg.js"]);
} else {
grunt.task.run("concat:" + target);
}

142
README.md
View file

@ -1,33 +1,31 @@
PCjs: The Virtual IBM PC
PCjs Machines
===
Welcome to [PCjs](/docs/about/pcjs/), the first IBM PC simulation to run in your web browser without any plugins.
It was added to the [JavaScript Machines](/docs/about/) project in Fall 2012, and it is now part of the
[PCjs Project](https://github.com/jeffpar/pcjs) on GitHub.
Welcome to PCjs, home of [PCx86](/docs/pcx86/), the original IBM PC simulation written entirely JavaScript. It is
one of several JavaScript Machines in the [PCjs Project](https://github.com/jeffpar/pcjs), an open-source project that
includes:
The project includes the following web-based emulators:
* [PCx86](/docs/pcx86/), an x86-based IBM PC and PC-compatible emulator
* [PC8080](/modules/pc8080/), a 8080-based machine emulator (e.g., [Space Invaders](/devices/pc8080/machine/invaders/))
* [C1Pjs](/docs/c1pjs/), a 6502-based emulation of the Ohio Scientific [Challenger 1P](/devices/c1p/)
* [PCjs](/docs/pcjs/), an x86-based IBM PC and PC-compatible emulator
* [PC8080](/modules/pc8080/), a 8080-based generic machine emulator
* [C1Pjs](/docs/c1pjs/), a 6502-based Ohio Scientific Challenger 1P emulator
PCjs first simulated the 4.77Mhz 8088-based IBM PC, and has steadily evolved to support more classic x86 machines,
including the IBM PC XT, the 80286-based IBM PC AT, and the 80386-based COMPAQ DeskPro 386. PCjs fully supports
the original machine ROMs, video cards, etc, and all machines run at their original speeds.
All the 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,
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,
and assorted mobile browsers.
[Embedded IBM PC](/devices/pc/machine/5150/mda/64kb/ "PCjs:ibm5150")
[Embedded IBM PC](/devices/pcx86/machine/5150/mda/64kb/ "PCx86:ibm5150")
The [simulation](/devices/pc/machine/5150/mda/64kb/) above features an Intel 8088 running at 4.77Mhz,
with 64Kb of RAM and an IBM Monochrome Display Adapter. For more control, there are also
[Control Panel](/devices/pc/machine/5150/mda/64kb/debugger/) and [Soft Keyboard](/devices/pc/machine/5150/mda/64kb/softkbd/)
configurations, featuring the built-in PCjs Debugger. For even greater control, build your own PC. The
[PCjs Documentation](/docs/pcjs/) will help you get started.
The [JavaScript Machine](/devices/pcx86/machine/5150/mda/64kb/) above uses [PCx86](/docs/pcx86/) configured with an Intel
8088 running at 4.77Mhz, with 64Kb of RAM and an IBM Monochrome Display Adapter. For more control, there are also
[Control Panel](/devices/pcx86/machine/5150/mda/64kb/debugger/) and [Soft Keyboard](/devices/pcx86/machine/5150/mda/64kb/softkbd/)
configurations, featuring the built-in PCx86 Debugger. For even greater control, build your own PC. The
[PCx86 Documentation](/docs/pcx86/) will help you get started.
The goals of the [JavaScript Machines](/docs/about/) project are to create fast, full-featured simulations of classic
PCx86 has steadily evolved to support more classic x86-based machines, including the IBM PC XT, the 80286-based IBM PC AT,
and the 80386-based COMPAQ DeskPro 386. PCx86 fully supports the original machine ROMs, video cards, etc, and all
machines run at their original speeds.
The goals of the [PCjs Project](/docs/about/) project are to create fast, full-featured simulations of classic
computer hardware, help people understand how these early machines worked, make it easy to experiment with different
machine configurations, and provide a platform for running and analyzing old computer software.
@ -35,27 +33,27 @@ Demos
---
Some pre-configured machines are shown below, ready to run BASIC, DOS, Windows, OS/2, and other assorted software.
![IBM PC running VisiCalc](/apps/pc/1981/visicalc/thumbnail.jpg "link:/apps/pc/1981/visicalc/:200:120")
![IBM PC running DONKEY.BAS](/devices/pc/machine/5150/cga/64kb/donkey/thumbnail.jpg "link:/devices/pc/machine/5150/cga/64kb/donkey/:200:120")
![IBM PC AT w/EGA, OS/2 1.0](/disks/pc/os2/ibm/1.0/thumbnail.jpg "link:/disks/pc/os2/ibm/1.0/:200:120")
![IBM PC XT w/CGA, Windows 1.01](/devices/pc/machine/5160/cga/256kb/win101/thumbnail.jpg "link:/devices/pc/machine/5160/cga/256kb/win101/:200:120")
![IBM PC XT w/EGA, Windows 1.01](/disks/pc/windows/1.01/thumbnail.jpg "link:/disks/pc/windows/1.01/:200:120")
![COMPAQ DeskPro 386, Windows/386](/disks/pc/windows/2.0x/thumbnail.jpg "link:/disks/pc/windows/2.0x/:200:120")
![IBM PC AT w/EGA, Windows 3.00](/disks/pc/windows/3.00/thumbnail.jpg "link:/disks/pc/windows/3.00/:200:120")
![IBM PC AT w/VGA, Windows 3.10](/disks/pc/windows/3.10/thumbnail.jpg "link:/disks/pc/windows/3.10/:200:120")
![COMPAQ DeskPro 386, Windows 95](/disks/pc/windows/win95/4.00.950/thumbnail.jpg "link:/disks/pc/windows/win95/4.00.950/:200:120")
![IBM PC w/MDA, CP/M-86](/disks/pc/cpm/1.1b/thumbnail.jpg "link:/disks/pc/cpm/1.1b/:200:120")
![IBM PC w/MDA, Microsoft Adventure](/disks/pc/games/microsoft/adventure/thumbnail.jpg "link:/disks/pc/games/microsoft/adventure/:200:120")
![IBM PC w/CGA, Zork I](/disks/pc/games/infocom/zork1/thumbnail.jpg "link:/disks/pc/games/infocom/zork1/:200:120")
![IBM PC running VisiCalc](/apps/pcx86/1981/visicalc/thumbnail.jpg "link:/apps/pcx86/1981/visicalc/:200:120")
![IBM PC running DONKEY.BAS](/devices/pcx86/machine/5150/cga/64kb/donkey/thumbnail.jpg "link:/devices/pcx86/machine/5150/cga/64kb/donkey/:200:120")
![IBM PC AT w/EGA, OS/2 1.0](/disks/pcx86/os2/ibm/1.0/thumbnail.jpg "link:/disks/pcx86/os2/ibm/1.0/:200:120")
![IBM PC XT w/CGA, Windows 1.01](/devices/pcx86/machine/5160/cga/256kb/win101/thumbnail.jpg "link:/devices/pcx86/machine/5160/cga/256kb/win101/:200:120")
![IBM PC XT w/EGA, Windows 1.01](/disks/pcx86/windows/1.01/thumbnail.jpg "link:/disks/pcx86/windows/1.01/:200:120")
![COMPAQ DeskPro 386, Windows/386](/disks/pcx86/windows/2.0x/thumbnail.jpg "link:/disks/pcx86/windows/2.0x/:200:120")
![IBM PC AT w/EGA, Windows 3.00](/disks/pcx86/windows/3.00/thumbnail.jpg "link:/disks/pcx86/windows/3.00/:200:120")
![IBM PC AT w/VGA, Windows 3.10](/disks/pcx86/windows/3.10/thumbnail.jpg "link:/disks/pcx86/windows/3.10/:200:120")
![COMPAQ DeskPro 386, Windows 95](/disks/pcx86/windows/win95/4.00.950/thumbnail.jpg "link:/disks/pcx86/windows/win95/4.00.950/:200:120")
![IBM PC w/MDA, CP/M-86](/disks/pcx86/cpm/1.1b/thumbnail.jpg "link:/disks/pcx86/cpm/1.1b/:200:120")
![IBM PC w/MDA, Microsoft Adventure](/disks/pcx86/games/microsoft/adventure/thumbnail.jpg "link:/disks/pcx86/games/microsoft/adventure/:200:120")
![IBM PC w/CGA, Zork I](/disks/pcx86/games/infocom/zork1/thumbnail.jpg "link:/disks/pcx86/games/infocom/zork1/:200:120")
There are many more [PCjs Demos](/devices/pc/machine/#ready-to-run-app-demos), including an
[IBM PC with Dual Displays](/devices/pc/machine/5150/dual/64kb/) demonstrating early multi-monitor support,
and multiple IBM PC XT machines running side-by-side with [CGA Displays](/devices/pc/machine/5160/cga/256kb/array/)
and [EGA Displays](/devices/pc/machine/5160/ega/640kb/array/).
There are many more [PCx86 Demos](/devices/pcx86/machine/#ready-to-run-app-demos), including an
[IBM PC with Dual Displays](/devices/pcx86/machine/5150/dual/64kb/) demonstrating early multi-monitor support,
and multiple IBM PC XT machines running side-by-side with [CGA Displays](/devices/pcx86/machine/5160/cga/256kb/array/)
and [EGA Displays](/devices/pcx86/machine/5160/ega/640kb/array/).
C1Pjs
---
Below is the [OSI Challenger C1P](/docs/c1pjs/), another simulation in the JavaScript Machines project.
Below is the [OSI Challenger C1P](/docs/c1pjs/), another simulation in the PCjs Project.
It simulates Ohio Scientific's 6502-based microcomputer, released in 1978. More details about this simulation
and the original machine are available in the [C1Pjs Documentation](/docs/c1pjs/).
@ -69,8 +67,8 @@ Developer Notes
---
The [PCjs repository](https://github.com/jeffpar/pcjs) on GitHub contains everything needed to run PCjs
computer simulations. The [PCjs](/docs/pcjs/) and [C1Pjs](/docs/c1pjs/) emulators run in any modern web browser,
with or without a web server, and examples are provided for both [local](/docs/pcjs/examples/) and
computer simulations. The [PCx86](/docs/pcx86/) and [C1Pjs](/docs/c1pjs/) emulators run in any modern web browser,
with or without a web server, and examples are provided for both [local](/docs/pcx86/examples/) and
[remote](http://www.pcjs.org/) operation.
The project includes:
@ -78,8 +76,8 @@ The project includes:
- A simple Node-based web server ([server.js](server.js))
- Custom Node modules used by the web server ([HTMLOut](modules/htmlout/), [MarkOut](modules/markout/), [DiskDump](modules/diskdump/), [FileDump](modules/filedump/))
- A variety of IBM PC and C1P configuration and resource files (see [/apps](apps/), [/devices](devices/) and [/disks](disks/))
- The [PCjs](modules/pcjs/lib/) and [C1Pjs](modules/c1pjs/lib/) client applications, both "compiled" and uncompiled
- A smattering of [PCjs](docs/pcjs/) and [C1Pjs](docs/c1pjs/) documentation, along with [blog posts](blog/), related [publications](pubs/) and more
- The [PCx86](modules/pcjs/lib/) and [C1Pjs](modules/c1pjs/lib/) client applications, both "compiled" and uncompiled
- A smattering of [PCx86](docs/pcx86/) and [C1Pjs](docs/c1pjs/) documentation, along with [blog posts](blog/), related [publications](pubs/) and more
The bundled web server is not strictly required. Any web server (Node, Apache, Nginx, etc) that can serve the necessary
JavaScript files to your browser will work. However, instructions for doing that are beyond the scope of this introduction.
@ -87,7 +85,7 @@ JavaScript files to your browser will work. However, instructions for doing tha
In fact, you can run PCjs simulations without a web server at all, using the "file:" protocol instead of "http:".
However, most of the machine configurations require additional resource files (ROMs, disk images, etc), which are
included in the project, but unless all the resource files are moved into a single directory (as they are in these
[Demos](/docs/pcjs/examples/)), your browser will probably be unable to load all of them, due to security restrictions.
[Demos](/docs/pcx86/examples/)), your browser will probably be unable to load all of them, due to security restrictions.
Using the bundled web server is the preferred solution.
The project includes a large selection of disk images, and a powerful [DiskDump](modules/diskdump/) utility that
@ -180,8 +178,8 @@ OS X users may also need to preface this command with `sudo`:
Now you can run `grunt` anywhere within the PCjs project to build an updated version. If no command-line arguments
are specified, `grunt` runs the "default" task defined by [Gruntfile.js](Gruntfile.js); that task runs Google's
[Closure Compiler](https://developers.google.com/closure/compiler/) if any of the target files (eg, pc.js or pc-dbg.js
in the [/versions](versions/) directory) are out-of date.
[Closure Compiler](https://developers.google.com/closure/compiler/) if any of the target files (eg, pcx86.js or
pcx86-dbg.js in the [/versions](versions/) directory) are out-of date.
To ensure consistent compilation results, a copy of the Closure Compiler has been checked into the
[/bin](bin/) folder. This version of Closure Compiler, in turn, requires Java v7 or later. Use the following
@ -234,10 +232,10 @@ pcjs.org home page ([index.md](index.md)):
layout: page
permalink: /
machines:
- type: pc
- type: pcx86
id: ibm5150
name: "IBM PC (Model 5150) with Monochrome Display"
config: /devices/pc/machine/5150/mda/64kb/machine.xml
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
- type: c1p
id: demoC1P
config: /devices/c1p/machine/8kb/large/machine.xml
@ -254,43 +252,43 @@ For more information on all the machine options supported in a Markdown file, se
### From The Command-Line
The PCjs client app can also be run from the command-line mode using Node, making it possible to script the application,
The PCx86 client app can also be run from the command-line mode using Node, making it possible to script the application,
run a series of automated tests, etc:
cd modules/pcjs/bin
node pcjs
cd modules/pcx86/bin
node pcx86
The [pcjs](modules/pcjs/bin/pcjs) script in [modules/pcjs/bin](modules/pcjs/bin) loads
all the PCjs browser scripts listed in the root [package.json](/package.json) and then starts a Node REPL
The [pcx86](modules/pcx86/bin/pcx86) script in [modules/pcx86/bin](modules/pcx86/bin) loads
all the PCx86 browser scripts listed in the root [package.json](/package.json) and then starts a Node REPL
("read-eval-print loop"). The REPL handles a few special commands (eg, "load", "quit") and passes anything else
to the PCjs Debugger component. If no Debugger component has been created yet, or if the Debugger didn't recognize
to the PCx86 Debugger component. If no Debugger component has been created yet, or if the Debugger didn't recognize
the command, then it's passed on to *eval()*, like a good little REPL.
Use the "load" command to load a JSON machine configuration file. A sample
[ibm5150.json](modules/pcjs/bin/ibm5150.json) is provided in the *bin* directory, which is a "JSON-ified" version
of the [machine.xml](devices/pc/machine/5150/mda/64kb/machine.xml) displayed on the [pcjs.org](http://www.pcjs.org/)
[ibm5150.json](modules/pcx86/bin/ibm5150.json) is provided in the *bin* directory, which is a "JSON-ified" version
of the [machine.xml](devices/pcx86/machine/5150/mda/64kb/machine.xml) displayed on the [pcjs.org](http://www.pcjs.org/)
home page.
The command-line loader creates all the JSON-defined machine components in the same order that the browser creates
XML-defined components. You can also issue the "load" command directly from the command-line:
node pcjs --cmd="load ibm5150.json"
node pcx86 --cmd="load ibm5150.json"
In fact, any number of "--cmd" arguments can be included on the command-line. A batch file syntax will eventually be
added, too.
When PCjs runs in a browser, an XML machine configuration file is transformed into HTML with a set of DIVs for each
component: an "object" DIV whose *data-value* attribute provides the initialization parameters for the corresponding
component, along with a set of optional "control" DIVs that the component can bind to (eg, a "Run" button, or a visual
representation of DIP switches, or whatever).
When a PCjs machine runs in a browser, an XML machine configuration file is transformed into HTML with a set of DIVs
for each component: an "object" DIV whose *data-value* attribute provides the initialization parameters for the
corresponding component, along with a set of optional "control" DIVs that the component can bind to (eg, a "Run" button,
or a visual representation of DIP switches, or whatever).
When PCjs is run from the command-line, there is no XML, HTML, or DIVs involved; this is basically a "headless" version
of PCjs, so there is no simple way to view a machine's video display or interact with its keyboard, mouse, etc.
You have to use Debugger commands to dump the machine's video buffer.
When a PCjs machine is run from the command-line, there is no XML, HTML, or DIVs involved; this is basically a
"headless" version of the machine, so there is no simple way to view its video display or interact with its keyboard,
mouse, etc. You have to use Debugger commands to dump the machine's video buffer.
Since I was not inclined to add XML support to my Node environment, this has created some divergence between client
and server operation: PCjs on the client supports *only* XML machine configuration files, whereas PCjs on the server
supports *only* JSON machine configuration files.
and server operation: PCjs machines on the client supports *only* XML machine configuration files, whereas PCjs machines
on the server supports *only* JSON machine configuration files.
I haven't decided whether I'll add support for JSON configuration files to the client, or add some XML-to-JSON conversion
to the server, or both.
@ -327,7 +325,7 @@ A complete list of command-line options can be found in [server.js](server.js).
### Client Components
A special command parameter ("gort") can be appended to the URL to request uncompiled client source files, making PCjs
A special command parameter ("gort") can be appended to the URL to request uncompiled client source files, making PCx86
and C1Pjs much easier to debug, albeit much slower:
http://localhost:8088/?gort=debug
@ -335,7 +333,7 @@ and C1Pjs much easier to debug, albeit much slower:
The "gort=debug" command is unnecessary if the server is started with `--debug`; the server always serves uncompiled
files when running in debug mode.
Conversely, if the server is in debug mode but you want to test a compiled version of PCjs, use:
Conversely, if the server is in debug mode but you want to test a compiled version of PCx86, use:
http://localhost:8088/?gort=release
@ -373,7 +371,7 @@ To start developing features for a new version of PCjs, here are the recommended
1. Change the version number in the root [package.json](package.json) and [_config.yml](_config.yml)
2. Run the "grunt promote" task to bump the version in all the machine XML files
3. Make changes
4. Run "grunt" to build new versions of the apps (eg, "/versions/pcjs/1.x.x/pc.js")
4. Run "grunt" to build new versions of the apps (eg, "/versions/pcx86/1.x.x/pcx86.js")
You might also want to check out the blog post on [PCjs Coding Conventions](http://www.pcjs.org/blog/2014/09/30/).
@ -403,7 +401,7 @@ manually or with the Grunt "clean" task:
License
---
The [PCjs Project](https://github.com/jeffpar/pcjs) is now an open source project on [GitHub](http://github.com/).
The [PCjs Project](https://github.com/jeffpar/pcjs) is now an open-source project on [GitHub](http://github.com/).
All published portions are free for redistribution and/or modification under the terms of the
[GNU General Public License](/LICENSE) as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
@ -419,8 +417,8 @@ See [LICENSE](/LICENSE) for details.
More Information
---
Learn more about the [JavaScript Machines](/docs/about/) Project and [PCjs](/docs/about/pcjs/). To
create your own PCjs machines, see the [Documentation](/docs/pcjs/) for details.
Learn more about the [PCjs Project](/docs/about/) and [PCx86](/docs/about/pcx86/). To
create your own PCx86 machines, see the [PCx86 Documentation](/docs/pcx86/) for details.
If you have questions or run into any problems, feel free to [tweet](http://twitter.com/jeffpar) or
[email](mailto:Jeff@pcjs.org).

View file

@ -1,13 +1,12 @@
# Site settings
title: "PCjs: The Virtual IBM PC"
title: "PCjs Machines"
email: Jeff@pcjs.org
description: >
PCjs: The Original IBM PC in a Browser.
Classic computer simulations in JavaScript.
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.
Includes an archive of historical PC software and publications.
Additional computer simulations in JavaScript include the 6502-based Ohio Scientific Challenger 1P and 8080-based
machines, including arcade machines such as Space Invaders.
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
@ -33,52 +32,9 @@ gems:
pcjs:
domain: pcjs.org # whereas site.url is used for linking purposes, site.pcjs.domain is used for display purposes
version: 1.22.1 # IMPORTANT: keep pcjs.version in sync with package.json:version
compiled: true # by default, the compiled pcjs.version scripts will be used (eg, pc.js or pc-dbg.js)
pc_scripts: # if pcjs.compiled is false, the following scripts will be included instead, in the order listed
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/diskapi.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pcjs/lib/defines.js
- /modules/pcjs/lib/x86.js
- /modules/pcjs/lib/interrupts.js
- /modules/pcjs/lib/messages.js
- /modules/pcjs/lib/panel.js
- /modules/pcjs/lib/bus.js
- /modules/pcjs/lib/memory.js
- /modules/pcjs/lib/cpu.js
- /modules/pcjs/lib/x86seg.js
- /modules/pcjs/lib/x86cpu.js
- /modules/pcjs/lib/x86fpu.js
- /modules/pcjs/lib/x86func.js
- /modules/pcjs/lib/x86help.js
- /modules/pcjs/lib/x86mods.js
- /modules/pcjs/lib/x86ops.js
- /modules/pcjs/lib/x86op0f.js
- /modules/pcjs/lib/chipset.js
- /modules/pcjs/lib/rom.js
- /modules/pcjs/lib/ram.js
- /modules/pcjs/lib/keyboard.js
- /modules/pcjs/lib/video.js
- /modules/pcjs/lib/parallelport.js
- /modules/pcjs/lib/serialport.js
- /modules/pcjs/lib/mouse.js
- /modules/pcjs/lib/disk.js
- /modules/pcjs/lib/fdc.js
- /modules/pcjs/lib/hdc.js
- /modules/pcjs/lib/debugger.js
- /modules/pcjs/lib/state.js
- /modules/pcjs/lib/computer.js
- /modules/shared/lib/embed.js
- /modules/shared/lib/save.js
c1p_scripts:
version: 1.23.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
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/dumpapi.js
@ -99,6 +55,49 @@ pcjs:
- /modules/c1pjs/lib/debugger.js
- /modules/c1pjs/lib/computer.js
- /modules/shared/lib/embed.js
pcx86_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/diskapi.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pcx86/lib/defines.js
- /modules/pcx86/lib/x86.js
- /modules/pcx86/lib/interrupts.js
- /modules/pcx86/lib/messages.js
- /modules/pcx86/lib/panel.js
- /modules/pcx86/lib/bus.js
- /modules/pcx86/lib/memory.js
- /modules/pcx86/lib/cpu.js
- /modules/pcx86/lib/x86seg.js
- /modules/pcx86/lib/x86cpu.js
- /modules/pcx86/lib/x86fpu.js
- /modules/pcx86/lib/x86func.js
- /modules/pcx86/lib/x86help.js
- /modules/pcx86/lib/x86mods.js
- /modules/pcx86/lib/x86ops.js
- /modules/pcx86/lib/x86op0f.js
- /modules/pcx86/lib/chipset.js
- /modules/pcx86/lib/rom.js
- /modules/pcx86/lib/ram.js
- /modules/pcx86/lib/keyboard.js
- /modules/pcx86/lib/video.js
- /modules/pcx86/lib/parallelport.js
- /modules/pcx86/lib/serialport.js
- /modules/pcx86/lib/mouse.js
- /modules/pcx86/lib/disk.js
- /modules/pcx86/lib/fdc.js
- /modules/pcx86/lib/hdc.js
- /modules/pcx86/lib/debugger.js
- /modules/pcx86/lib/state.js
- /modules/pcx86/lib/computer.js
- /modules/shared/lib/embed.js
- /modules/shared/lib/save.js
pc8080_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/dumpapi.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", "pc", "pc8080")
'type' (eg, "c1p", "pcx86", "pc8080")
'debugger' (default is false)
'config' (default is "machine.xml")
'template' (default is "machine.xsl")
@ -34,17 +34,23 @@ 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 != "pc" and machine_type != "c1p" %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% else %}
{% capture machine_app %}{{ machine_type }}js{% endcapture %}
{% if machine_type != "c1p" %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% else %}
{% capture machine_app %}{{ machine_type }}js{% endcapture %}
{% endif %}
{% if machine.debugger %}
{% capture machine_file %}{{ machine_type }}-dbg{% endcapture %}
{% assign machine_debugger = true %}
{% else %}
{% capture machine_file %}{{ machine.type }}{% endcapture %}
{% if machine.type != machine_type %}
{% assign machine_debugger = true %}
{% else %}
{% assign machine_debugger = false %}
{% endif %}
{% endif %}
{% capture machine_embed %}embed{{ machine_type | upcase }}{% endcapture %}
{% capture machine_embed %}embed{{ machine_type | upcase | replace:"X86","x86" }}{% endcapture %}
{% if machine.automount != nil %}
{% if machine.automount == "" %}
{% assign machine_autoMount = "{}" %}
@ -103,7 +109,7 @@ of our Markdown or XML documents. Examples: 'automount' becomes 'autoMount', 'a
{% endif %}
{% else %}
{% if machine_type == "c1p" %}{% assign array_scripts = site.pcjs.c1p_scripts %}{% endif %}
{% if machine_type == "pc" %}{% assign array_scripts = site.pcjs.pc_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 %}
{% for script in array_scripts %}
{% if script != "/modules/shared/lib/nodebug.js" or machine.debug != true %}
@ -116,7 +122,7 @@ of our Markdown or XML documents. Examples: 'automount' becomes 'autoMount', 'a
{% endif %}
{% endif %}
{% if script contains "js/lib/defines.js" %}
{% if machine.debugger != true %}
{% if machine_debugger != true %}
{{ machine_script | replace:"defines.js","nodebugger.js" }}
{% endif %}
{% endif %}

View file

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

View file

@ -26,7 +26,7 @@ syntax, which is more than sufficient to handle all the site's **README.md** fil
have used a third-party Markdown library, but this was more educational, and it was easy to add extra features,
like the ability to embed JavaScript machines with a single Markdown-style link; eg:
[IBM PC](/devices/pc/machine/5150/mda/64kb/ "PCjs:ibm5150")
[IBM PC](/devices/pcx86/machine/5150/mda/64kb/ "PCjs:ibm5150")
The script takes care of the rest, adding the appropriate stylesheets and PCjs scripts automatically.
@ -34,7 +34,7 @@ I had more grandiose plans, including a command-line prompt written in JavaScrip
navigate the site exactly as you would an IBM PC hard drive from a "DOS prompt", and I may try something
like that later, but don't hold your breath.
I've tried to improve the organization of all the [Machine Configuration Files](/devices/pc/machine/) as well.
I've tried to improve the organization of all the [Machine Configuration Files](/devices/pcx86/machine/) as well.
The variety of configurations was getting out of hand. It's a bit tidier now, but there's still room for
improvement.

View file

@ -21,7 +21,7 @@ while I can understand some whitespace inconsistencies across web servers, I wou
on the server to modify file contents.
I finally confirmed that the files were indeed modified on the server, by using Azure's FTP browser. For example,
[us83-buttons-minimal.xml](/devices/pc/keyboard/us83-buttons-minimal.xml) is currently 622 bytes locally, but on the
[us83-buttons-minimal.xml](/devices/pcx86/keyboard/us83-buttons-minimal.xml) is currently 622 bytes locally, but on the
Azure server, the reported size is 632 bytes -- one extra CR for each of the file's 10 lines. After a little more
digging, I [learned something new](http://git-scm.com/book/ch7-1.html#Formatting-and-Whitespace) about **Git**: it
has a setting called `core.autocrlf` which, for me on OS X, defaults to `input` (meaning "convert CR/LF to LF on commit

View file

@ -11,7 +11,7 @@ are simple XML files that describe a piece of software (an application, an opera
link to a PCjs machine configuration capable of running the software, along with a "ready-to-run" machine state file.
Conversely, a PCjs machine XML file can refer back to the manifest, to obtain a list of disk images.
Here are some [demos](/apps/pc/) of "ready-to-run" apps on [PCjs](/docs/about/pcjs/).
Here are some [Demos](/apps/pc/) of "ready-to-run" apps on [PCjs](/docs/about/).
There have been lots of server-side changes recently, including API improvements that make it easy (well, *easier*)
to dynamically create diskette images from a list of files, or even an entire folder (including all subfolders),

View file

@ -13,7 +13,7 @@ Don't believe me? Just ask [Google](https://www.google.com/#q=node+express+safa
stylesheets. And occasionally Safari -- and ONLY Safari -- will render those XML files as blank pages.
For example, here's the
[machine.xml](/devices/pc/machine/5150/mda/64kb/machine.xml) file that's also embedded on the
[machine.xml](/devices/pcx86/machine/5150/mda/64kb/machine.xml) file that's also embedded on the
[{{ site.pcjs.domain }}]({{ site.url }}/) home page.
When Safari fetched that XML file from an Apache web server (what I used before switching to Node),

View file

@ -10,7 +10,7 @@ v1.13.7 of PCjs contains a few minor improvements, mostly in terms of rendering
efficiently. The rest of the changes to the website involved beefing up support for both "software manifests"
and "document manifests."
To that end, there's a new [/pubs/](/pubs/) directory for old documents, and [/disks/pc/](/disks/pc/) contains
To that end, there's a new [/pubs/](/pubs/) directory for old documents, and [/disks/pcx86/](/disks/pcx86/) contains
more disk images, with more on the way. I have a TON of old diskette images, and it has taken more time to organize
them and create manifests than I would like.

View file

@ -7,14 +7,16 @@ permalink: /blog/2014/07/30/
---
PCjs v1.14.0 now includes basic EGA support. It emulates the EGA hardware well enough to pass the IBM EGA BIOS
diagnostics and run [Windows 1.01](/devices/pc/machine/5160/ega/640kb/win101/) in color. Check out our
[Windows 1.01 "Server Array"](/devices/pc/machine/5160/ega/640kb/array/) demo.
diagnostics and run [Windows 1.01](/devices/pcx86/machine/5160/ega/640kb/win101/) in color. Check out our
[Windows 1.01 "Server Array"](/devices/pcx86/machine/5160/ega/640kb/array/) demo.
[<img src="/blog/images/win101-array-demo-small.jpg" alt='Windows 1.01 "Server Array" Demo'/>](/blog/images/win101-array-demo.jpg)
EGA support is added to a **machine.xml** file using two XML elements; eg:
<video id="videoEGA" model="ega" memory="0x20000" screenwidth="640" screenheight="350"/>
```xml
<video id="videoEGA" model="ega" memory="0x20000" screenwidth="640" screenheight="350"/>
```
The *model* attribute must be set to "ega" and the *memory* attribute should be set to the amount of memory
desired on the card; valid memory sizes are:
@ -29,7 +31,9 @@ window, which the browser will then scale up or down, unless a specific overall
The second required XML element is a &lt;rom&gt; element to load the EGA ROM; eg:
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm-ega.json" notify="videoEGA"/>
```xml
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pcx86/video/ibm-ega.json" notify="videoEGA"/>
```
The *notify* attribute must match the *id* of the &lt;video&gt; element, so that the Video component can load
the initial 8x14 and 8x8 fonts from the ROM. Support for dynamic loading of fonts from plane 2 of the EGA's memory

View file

@ -6,39 +6,41 @@ category: 80286
permalink: /blog/2014/08/28/
---
The next milestone for PCjs is complete 80286 emulation. My hope is to have it working by the end of the year.
The next milestone for PCx86 is complete 80286 emulation. My hope is to have it working by the end of the year.
PCjs version 1.15.0 is the first step on the path to full 80286 support. It includes changes to the physical
PCx86 version 1.15.0 is the first step on the path to full 80286 support. It includes changes to the physical
memory manager and separate real-mode and protected-mode address evaluators. The Debugger supports physical
addresses (eg, %FE05B is the same as F000:E05B, assuming real-mode operation), along with breakpoint commands that
stop execution on port input/output operations. And the ChipSet component now contains "infrastructure" (a
fancy way of saying "partial support") for multiple PICs, DMA controllers, the 8042 keyboard controller (including
A20 support), and a bit more -- but not much.
One of the challenges is creating a single "universal" version of PCjs that can adapt itself to different machine
One of the challenges is creating a single "universal" version of PCx86 that can adapt itself to different machine
types without impacting performance. There will not be a **pc8088.js** or a **pc80286.js** or whatever. There will
only be **pc.js**.
only be **pcx86.js**.
Up until now, all PCjs machine XML files assumed an 8088 CPU with a 20-bit bus and a model 5150 or 5160 motherboard.
Up until now, all PCx86 machine XML files assumed an 8088 CPU with a 20-bit bus and a model 5150 or 5160 motherboard.
But now, a machine XML file can specify:
<computer name="IBM PC AT" buswidth="24"/>
<cpu model="80286"/>
<chipset model="5170"/>
...
```xml
<computer name="IBM PC AT" buswidth="24"/>
<cpu model="80286"/>
<chipset model="5170"/>
...
```
Conventional emulators are usually NOT able to run original BIOS images, or simulate original PC hardware,
or even run at the same speed as the original PC, making some software difficult or impossible to use. PCjs takes a
different approach, by attempting to simulate an entire PC as it originally existed. Which is why a PCjs simulation
or even run at the same speed as the original PC, making some software difficult or impossible to use. PCx86 takes a
different approach, by attempting to simulate an entire PC as it originally existed. Which is why a PCx86 simulation
of an IBM PC does NOT run at whatever speed your modern PC happens to run in V86-mode or whatever speed your
browser's JavaScript engine tops out at.
No, a PCjs simulation of a 4.77Mhz IBM PC runs at 4.77Mhz. And a PCjs simulation of a 6Mhz IBM PC AT will run at
No, a PCx86 simulation of a 4.77Mhz IBM PC runs at 4.77Mhz. And a PCx86 simulation of a 6Mhz IBM PC AT will run at
6Mhz. If you want to run the simulation faster, you have that option, but that's not the default. And I'm not saying
that PCjs is *exact* -- exactness is an exercise I'm leaving for another day and/or to other developers who are even
more obsessive than I am. I'm just saying that original PCs represent the targets that PCjs is shooting for.
that PCx86 is *exact* -- exactness is an exercise I'm leaving for another day and/or to other developers who are even
more obsessive than I am. I'm just saying that original PCs represent the targets that PCx86 is shooting for.
PCjs 1.15.0 can now load and run the IBM 5170 ROM BIOS up to the first 80286-specific opcode, so it's off and running.
PCx86 1.15.0 can now load and run the IBM 5170 ROM BIOS up to the first 80286-specific opcode, so it's off and running.
Although "running" isn't quite the right metaphor, because the process of bringing a new machine simulation to
completion is a *very* long series of baby steps.

View file

@ -6,8 +6,8 @@ category: Releases
permalink: /blog/2014/09/13/
---
My first IBM PC AT (Model 5170) [Test Configuration](/devices/pc/machine/5170/ega/640kb/rev1/debugger/) finally
boots to a PC-DOS prompt. The configuration uses the original [IBM Model 5170 ROM BIOS](/devices/pc/rom/5170/),
My first IBM PC AT (Model 5170) [Test Configuration](/devices/pcx86/machine/5170/ega/640kb/rev1/debugger/) finally
boots to a PC-DOS prompt. The configuration uses the original [IBM Model 5170 ROM BIOS](/devices/pcx86/rom/5170/),
dated January 10, 1984.
Getting through the BIOS "POST" (Power-On Self Test) diagnostics was like running an obstacle course, with various
@ -55,8 +55,8 @@ There's still no support for [LOADALL](/pubs/pc/reference/intel/80286/loadall/)
call gates or task gates, nor for conforming code segments or expand-down data segments. 80286-specific cycle
counts haven't been incorporated yet, either. The list of remaining 80286 features is long.
And there's plenty of hardware support left to do: I haven't looked at the AT hard disk controller yet (which
I believe is significantly different from the XT hard disk controller), and the keyboard *barely* works; the 8042
And there's plenty of hardware support left to do: I haven't looked at the AT hard drive controller yet (which
I believe is significantly different from the XT hard drive controller), and the keyboard *barely* works; the 8042
Keyboard Controller and AT keyboard had a number of features that older PC/XT keyboards did not (like LEDs and
programmable repeat rate).

View file

@ -121,7 +121,7 @@ if (DEBUG) this.log('load("' + sFileURL + '")');
```
There are a number of other important shared constants in [/modules/shared/lib/defines.js](/modules/shared/lib/defines.js)
and PCjs-specific constants in [/modules/pcjs/lib/defines.js](/modules/pcjs/lib/defines.js); refer
and PCjs-specific constants in [/modules/pcx86/lib/defines.js](/modules/pcx86/lib/defines.js); refer
to those files for more information.
### Braces and Parentheses

View file

@ -17,7 +17,7 @@ can boot and run in real-mode now, but there's still a lot of protected-mode wor
this year is to boot OS/2 1.0.
There are also a lot of rough edges left to polish. Holes in EGA emulation remain to be filled (support for dynamically
loaded fonts is one of the bigger ones). And the PC AT Keyboard, along with the 8042 and Hard Disk controllers, are all
loaded fonts is one of the bigger ones). And the PC AT Keyboard, along with the 8042 and Hard Drive controllers, are all
just limping along at the moment.
Longer term, I'm looking forward to building some new tools, including an "IBM PC Configurator" that will take some

View file

@ -6,11 +6,11 @@ category: JavaScript
permalink: /blog/2014/10/13/
---
I just added my first [8Mhz IBM PC AT](/devices/pc/machine/5170/ega/1152kb/rev3/debugger/) machine configuration
to the list of [IBM PC Machine Configurations](/devices/pc/machine/), and not surprisingly, the new machine
I just added my first [8Mhz IBM PC AT](/devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/) machine configuration
to the list of [IBM PC Machine Configurations](/devices/pcx86/machine/), and not surprisingly, the new machine
fails to boot.
This machine uses the 3rd [ROM BIOS](/devices/pc/rom/5170/) that IBM released for the PC AT, a revision that
This machine uses the 3rd [ROM BIOS](/devices/pcx86/rom/5170/) that IBM released for the PC AT, a revision that
included support for 3.5-inch 1.44Mb diskettes -- which will be nice, because I have a number of 1.44Mb diskette
images I would like to be able to read in a PCjs machine.

View file

@ -6,23 +6,23 @@ category: Releases
permalink: /blog/2014/10/17/
---
The [8Mhz IBM PC AT](/devices/pc/machine/5170/ega/1152kb/rev3/debugger/) machine configuration now boots in
The [8Mhz IBM PC AT](/devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/) machine configuration now boots in
[PCjs v1.15.5](https://github.com/jeffpar/pcjs/releases/tag/v1.15.5), which includes the following fixes:
+ The BIOS expects memory refresh to occur roughly every 16us, which I've resolved by tying the state
of the refresh bit in port 0x61 to bit 6 of the CPU cycle count (see *in8042RWReg()* in [chipset.js](/modules/pcjs/lib/chipset.js));
of the refresh bit in port 0x61 to bit 6 of the CPU cycle count (see *in8042RWReg()* in [chipset.js](/modules/pcx86/lib/chipset.js));
the original AT BIOS was satisfied with a refresh bit that merely alternated, whereas the new AT BIOS
is much more particular about the rate at which that bit changes, since many hard-coded delay-loops have
now been replaced with code that waits for a specific number of refresh cycles.
+ The 8042 Keyboard Controller emulation needed a few more tweaks, mainly with respect to what happens
when the keyboard's "clock" line is toggled (see *set8042CmdData()* in [chipset.js](/modules/pcjs/lib/chipset.js)).
when the keyboard's "clock" line is toggled (see *set8042CmdData()* in [chipset.js](/modules/pcx86/lib/chipset.js)).
+ The Floppy Disk Controller needed to add support for the "READ ID" command, in order for the BIOS
+ The Floppy Drive Controller needed to add support for the "READ ID" command, in order for the BIOS
"double-stepping" test to work (double-stepping is required on an 80-track drive when attempting to read
a 40-track diskette).
+ The BIOS Diskette Reset function does something odd after resetting the Floppy Disk Controller: it
+ The BIOS Diskette Reset function does something odd after resetting the Floppy Drive Controller: it
issues not one but *four* "SENSE INTERRUPT STATUS" commands to the FDC, and expects each response to
return an incrementally larger drive number. I found this a bit mystifying, considering that IBM's
own FDC/HDC "combo card" supports a maximum of *two* diskette drives. But, there's no point arguing
@ -32,7 +32,7 @@ with a BIOS that's almost 30 years old.
to run SETUP after installing a second hard drive. So, when the CMOS reports only one hard drive installed,
the BIOS probes for a second hard drive anyway, and it does so by simply writing the drive number to the ATC's
"DRVHD" register and then immediately reading the "STATUS" register, without issuing any intervening command.
It was an easy fix to *outATCDrvHd()* in [hdc.js](/modules/pcjs/lib/hdc.js), but I was surprised
It was an easy fix to *outATCDrvHd()* in [hdc.js](/modules/pcx86/lib/hdc.js), but I was surprised
to discover that the ATC had this behavior, and now I'm wondering if there are any other I/O operations
that must immediately update the "STATUS" register.

View file

@ -7,7 +7,7 @@ permalink: /blog/2014/10/23/
---
[PCjs v1.15.6](https://github.com/jeffpar/pcjs/releases/tag/v1.15.6) is a fairly minor update that fixes a few
Floppy Disk Controller (FDC) issues and one CPU emulation bug that prevented [PC-DOS 7.00](/disks/pc/dos/ibm/7.00/)
Floppy Drive Controller (FDC) issues and one CPU emulation bug that prevented [PC-DOS 7.00](/disks/pcx86/dos/ibm/7.00/)
from working properly.
There are also some Debugger improvements; for example, if you turn on "fdc" and "int" messages in the
@ -19,9 +19,9 @@ PC-DOS 7.00 still can't be setup from its specially-formatted 1.84Mb
through "PC-DOS 7.00 (Disk 5)", so your best bet is to boot from the 1.44Mb "PC-DOS 7.00 (1.44M Boot)".
Note that you must also use a fairly new 80286 machine configuration, like this
[8Mhz IBM PC AT](/devices/pc/machine/5170/ega/1152kb/rev3/debugger/),
[8Mhz IBM PC AT](/devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/),
in order to use 1.44Mb diskette images; previous models did not support 3.5-inch diskette drives, unless they had been
retrofitted with a newer [BIOS](/devices/pc/rom/5170/).
retrofitted with a newer [BIOS](/devices/pcx86/rom/5170/).
*[@jeffpar](http://twitter.com/jeffpar)*
*October 23, 2014*

View file

@ -8,7 +8,7 @@ permalink: /blog/2014/10/28/
[PCjs v1.15.7](https://github.com/jeffpar/pcjs/releases/tag/v1.15.7) adds support for the
[XDF Diskette Format](http://www.os2museum.com/wp/the-xdf-diskette-format/), which was used in
[PC-DOS 7.00](/disks/pc/dos/ibm/7.00/).
[PC-DOS 7.00](/disks/pcx86/dos/ibm/7.00/).
However, this support is referred to as "fake" XDF support, because it requires using JSON disk images created
by DiskDump *without* the experimental "--xdf" option, which is an option that attempts to encode XDF sectors as they

View file

@ -7,21 +7,21 @@ permalink: /blog/2014/12/04/
---
Exciting news for OS/2 fans: PCjs (v1.16.1) is now able to run OS/2 1.0 on
[IBM PC AT Machine Configurations](/devices/pc/machine/#model-5170-machine-configurations). This is the culmination
[IBM PC AT Machine Configurations](/devices/pcx86/machine/#model-5170-machine-configurations). This is the culmination
of recent work in PCjs to fully emulate the Intel 80286 processor and 16-bit protected-mode, including undocumented
features like [LOADALL](/pubs/pc/reference/intel/80286/loadall/) and triple-fault resets.
For a quick demo, try the [OS/2 1.0 Debugger Disk](/disks/pc/os2/misc/1.0/88286/). In a few seconds,
For a quick demo, try the [OS/2 1.0 Debugger Disk](/disks/pcx86/os2/misc/1.0/88286/). In a few seconds,
you'll see a very rudimentary OS/2 shell (a slimmed-down version of the OS/2 Program Selector) that allows you to
start the protected-mode command interpreter ("Start a Program") or the real-mode command interpreter ("command.com").
[<img src="/blog/images/os2-debugger.jpg" alt="OS/2 1.0 With Kernel Debugger"/>](/disks/pc/os2/misc/1.0/88286/)
[<img src="/blog/images/os2-debugger.jpg" alt="OS/2 1.0 With Kernel Debugger"/>](/disks/pcx86/os2/misc/1.0/88286/)
As an added bonus, the Model 5170 machines feature two serial ports, with COM1 connected to a simulated serial
mouse and COM2 connected to the **Control Panel** output window.
Once you've booted the [OS/2 1.0 Debugger Disk](/disks/pc/os2/misc/1.0/88286/) from the assortment of
[OS/2 Prototype Disks](/disks/pc/os2/misc/), you can click on the **Control Panel** output window, press Ctrl-C, and
Once you've booted the [OS/2 1.0 Debugger Disk](/disks/pcx86/os2/misc/1.0/88286/) from the assortment of
[OS/2 Prototype Disks](/disks/pcx86/os2/misc/), you can click on the **Control Panel** output window, press Ctrl-C, and
find yourself magically transported into the OS/2 Kernel Debugger. The **Control Panel** display is functioning
as both the output window for all PCjs messages and PCjs Debugger commands, as well as a serial input/output device
(aka "Dumb Terminal") for any software inside the machine communicating via COM2: in this case, the OS/2 Kernel Debugger.

View file

@ -1,19 +1,19 @@
---
layout: post
title: PCjs Uncompiled
title: PCx86 Uncompiled
date: 2015-01-17 11:00:00
category: Features
permalink: /blog/2015/01/17/
machines:
- type: pc
- type: pcx86
id: at-ega-1152k-rev3
debugger: true
uncompiled: true
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/machine.xml
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/machine.xml
---
Most machines on [{{ site.pcjs.domain }}](/) run with a compiled version of PCjs, which is produced
by running PCjs JavaScript source code through Google's Closure Compiler, yielding a smaller (minified)
Most PCx86 machines on [{{ site.pcjs.domain }}](/) run with a compiled version of PCx86, which is produced
by running the PCx86 JavaScript source code through Google's Closure Compiler, yielding a smaller (minified)
version that loads and runs much faster than the original source code.
However, certain features are disabled in the compiled versions, including a new BACKTRACK feature that
@ -21,7 +21,7 @@ makes it possible to track the contents of memory locations and registers back t
or file location). Once the BACKTRACK feature is finished, it will be folded into the compiled code, but until
then, the only way to experiment with it is by running the uncompiled code.
To make it easier to launch machines with uncompiled code, a PCjs machine definition can now set `uncompiled`
To make it easier to launch machines with uncompiled code, a PCx86 machine definition can now set `uncompiled`
to *true*, overriding the value of `site.pcjs.compiled` in **_config.yml**.
Here's what a typical Markdown file would look like:
@ -30,11 +30,11 @@ Here's what a typical Markdown file would look like:
---
...
machines:
- type: pc
- type: pcx86
id: at-ega-1152k-rev3
debugger: true
uncompiled: true
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
---
...
{% include machine.html id="at-ega-1152k-rev3" %}

View file

@ -1,18 +1,18 @@
---
layout: post
title: New PCjs Control Panel
title: New PCx86 Control Panel
date: 2015-01-28 11:00:00
category: Control Panel
permalink: /blog/2015/01/28/
machines:
- type: pc
- type: pcx86
id: at-ega-1152k-rev3
debugger: true
uncompiled: true
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
---
A new PCjs Control Panel is under development, featuring a new "Display Panel" that will provide a variety of
A new PCx86 Control Panel is under development, featuring a new "Display Panel" that will provide a variety of
information about the machine, in real-time, and operate more efficiently than previous DOM-based Control Panels.
A preview of the layout is shown below. There's not much to see yet, as this is very much a work-in-progress.

View file

@ -5,22 +5,22 @@ date: 2015-02-22 11:00:00
category: 80386
permalink: /blog/2015/02/22/
machines:
- type: pc
- type: pcx86
id: deskpro386
debugger: true
uncompiled: true
config: /devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
---
I finally dumped the [COMPAQ DeskPro 386/16 ROMs](/devices/pc/rom/compaq/deskpro386/) from the motherboard I bought
on ebay last year, so I'm ready to begin adding 80386 support to PCjs.
I finally dumped the [COMPAQ DeskPro 386/16 ROMs](/devices/pcx86/rom/compaq/deskpro386/) from the motherboard I bought
on ebay last year, so I'm ready to begin adding 80386 support to PCx86.
I'd also like to locate a copy of the "COMPAQ DeskPro 386 Technical Reference Guide, Volumes 1 and 2". It's not hard
to find COMPAQ Maintenance and Service guides online, but their Technical Reference guides are much rarer, perhaps because
they were expensive ($149) and not many were sold. Anyway, I'm hoping to either borrow or buy a copy, and then scan and
post it.
A [COMPAQ DeskPro 386](/devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/) test configuration is displayed below.
A [COMPAQ DeskPro 386](/devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/) test configuration is displayed below.
The configuration doesn't run, and the debugger can't disassemble 80386-specific code yet, but this is what I will be
using to test and debug my changes over the next few months.

View file

@ -5,22 +5,22 @@ date: 2015-04-16 11:00:00
category: 80386
permalink: /blog/2015/04/16/
machines:
- type: pc
- type: pcx86
id: deskpro386
debugger: true
uncompiled: true
config: /devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
---
PCjs can now boot the [COMPAQ DeskPro 386/16 ROM BIOS](/devices/pc/rom/compaq/deskpro386/).
PCx86 can now boot the [COMPAQ DeskPro 386/16 ROM BIOS](/devices/pcx86/rom/compaq/deskpro386/).
There's still a problem with the hard disk controller, which I haven't looked into yet,
There's still a problem with the Hard Drive Controller, which I haven't looked into yet,
but booting from a floppy works.
While working through issues with this ROM BIOS, I created some lightly-annotated
[source code](/devices/pc/rom/compaq/deskpro386/1988-01-28/1988-01-28.asm) that can be re-assembled
[source code](/devices/pcx86/rom/compaq/deskpro386/1988-01-28/1988-01-28.asm) that can be re-assembled
with [NASM](http://www.nasm.us/). The initial process of creating the source code is
explained [here](/devices/pc/rom/compaq/deskpro386/#recreating-rom-source-code).
explained [here](/devices/pcx86/rom/compaq/deskpro386/#recreating-rom-source-code).
At the top of the source code, I explain a few important details about ROM addresses that
are worth recapping here:
@ -129,7 +129,7 @@ protected-mode with A20 disabled -- an unwise thing to do on most machines:
mov cr0,eax ; 0000F4A4 0F2200
jmp 0x28:xf4ac ; 0000F4A7 EAACF42800
Before fully understanding the DeskPro's unusual A20 management, PCjs worked around it by
Before fully understanding the DeskPro's unusual A20 management, PCx86 worked around it by
redirecting all A20 changes from the Bus component to the CPU component, giving the CPU first
crack at any changes to A20. If the CPU was in real-mode, it would simply pass the A20 request
on to the Bus. However, if the CPU was in protected-mode, it would maintain the requested
@ -143,7 +143,7 @@ to match that of the 1st megabyte whenever A20 is disabled. I could probably ge
only the first 64Kb of the 2nd megabyte, but until I'm actually able to run some tests on a real
DeskPro 386, I'm going to assume COMPAQ's A20 implementation affected the entire 2nd megabyte.
Here's my [COMPAQ DeskPro 386/16](/devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/) test
Here's my [COMPAQ DeskPro 386/16](/devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/) test
configuration. Set a breakpoint at F000:F498 ("bp f000:f498") in the Debugger panel to see the above
code in action. When the machine is operating in real-mode, you can use the "rp" command to dump all
the registers, including the current base and limit values loaded into the segment registers.

View file

@ -21,10 +21,10 @@ could only be used in PC, XT, and AT-compatible systems. I'll refer to it here
The VGA ROM used here is assumed to have come from an original IBM VGA. It's unknown if IBM ever made any
revisions to the VGA ROM. With the introduction of the PS/2 family and the VGA, IBM decided to no longer publish
the source code for its ROMs, so I've created some assemblable source code from the IBM VGA ROM
[here](/devices/pc/video/ibm/vga/).
[here](/devices/pcx86/video/ibm/vga/).
I've finally started debugging a machine configuration that uses the IBM VGA ROM. Since the VGA and the 80386 are
contemporaries, I'm using an [80386 machine configuration](/devices/pc/machine/compaq/deskpro386/vga/2048kb/debugger/).
contemporaries, I'm using an [80386 machine configuration](/devices/pcx86/machine/compaq/deskpro386/vga/2048kb/debugger/).
However, I don't expect the IBM VGA ROM to require any 80386 support or PS/2-specific features.
The first problem I ran into was here:

View file

@ -6,7 +6,7 @@ category: Video
permalink: /blog/2015/06/05/
---
I was playing with different video modes using this [IBM PC AT w/EGA](/devices/pc/machine/5170/ega/640kb/rev1/debugger/),
I was playing with different video modes using this [IBM PC AT w/EGA](/devices/pcx86/machine/5170/ega/640kb/rev1/debugger/),
and I discovered an odd problem.
For example, when I ran this code:

View file

@ -5,17 +5,17 @@ date: 2015-07-17 11:00:00
category: Windows 95
permalink: /blog/2015/07/17/
machines:
- type: pc
- type: pcx86
id: deskpro386
debugger: true
state: /disks/pc/windows/win95/4.00.950/deskpro386.json
config: /devices/pc/machine/compaq/deskpro386/vga/4096kb/debugger/machine.xml
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}]'
state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json
config: /devices/pcx86/machine/compaq/deskpro386/vga/4096kb/debugger/machine.xml
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pcx86/fixed/68mb/win95.json"}]'
autoMount: ''
---
This week (July 14, 2015) was the 20th anniversary of Windows 95 RTM ("Release To Manufacturing"). So I decided to
throw a PCjs party and try running Windows 95 Setup inside a PCjs machine for the first time.
throw a PCjs party and try running Windows 95 Setup inside a PCx86 machine for the first time.
Sadly, it immediately failed:
@ -52,17 +52,17 @@ The failing code:
0E36:0927 07 POP ES
0E36:0928 C3 RET
was easily fixed with a change to [x86cpu.js](/modules/pcjs/lib/x86cpu.js), allowing the IOPL bits to be
was easily fixed with a change to [x86cpu.js](/modules/pcx86/lib/x86cpu.js), allowing the IOPL bits to be
modified in real-mode on an 80386. When I had previously tweaked setPS() to accomodate 80286/80386 discrimination
logic in OS/2 1.0, there was no 80386 support in PCjs at that time, so it was sufficient to *never* allow the
logic in OS/2 1.0, there was no 80386 support in PCx86 at that time, so it was sufficient to *never* allow the
IOPL bits to be altered in real-mode.
The next problem was triggered by Setup's CAB ("Diamond") decompression code, which uses all 32 bits
of the 80386's 32-bit registers. That in itself was not a problem, but by leaving stray bits in the upper halves of
registers like EDX, it exposed a bug in the PCjs I/O instruction handlers, which neglected to mask EDX with 0xFFFF before
registers like EDX, it exposed a bug in the PCx86 I/O instruction handlers, which neglected to mask EDX with 0xFFFF before
performing port lookups, causing mysterious I/O failures that usually manifested themselves as hard disk I/O errors.
Then PCjs crashed in the middle of the decompression of the first CAB file (MINI.CAB). It turned out the stack
Then PCx86 crashed in the middle of the decompression of the first CAB file (MINI.CAB). It turned out the stack
had been improperly adjusted because a "RETF n" instruction mistakenly believed that a stack switch had occurred.
This was, in fact, a left-over condition from a protected-mode stack-switch. That was easily cleared.
@ -75,7 +75,7 @@ fixed by flagging the opcode as genuinely invalid.
> SIDEBAR
> By default, PCjs marks opcodes as invalid *only* if they have been confirmed invalid. PCjs considers the vast
> By default, PCx86 marks opcodes as invalid *only* if they have been confirmed invalid. PCx86 considers the vast
majority of unused/undocumented opcodes to be merely "undefined" until I've seen them in the wild. An instruction will
be marked invalid if I either discover that real hardware treats it as an Invalid Opcode (by throwing the exception)
*or* that real software expects it to. For opcode 0x0F,0xFF, it was the latter.
@ -86,9 +86,9 @@ I consider it a misnomer to refer to any invalid instruction as "undefined".
The other recent Windows 95 oddity I ran into was an instruction with multiple address-override (0x67) prefixes; the
first prefix changed the instruction's addressing mode from 16-bit to 32-bit, and the second prefix changed it back to
16-bit. PCjs should have simply ignored the second prefix.
16-bit. PCx86 should have simply ignored the second prefix.
With all of the above changes in place, PCjs v1.18.4 is able to run Windows 95 Setup a bit farther, but still far from
With all of the above changes in place, PCx86 v1.18.4 is able to run Windows 95 Setup a bit farther, but still far from
completion. If you want to give it a spin yourself, start the machine below (click the "Run" button) and once it has
finished booting, run SETUP from drive B, where the first Windows 95 diskette is already loaded.
@ -103,9 +103,9 @@ diskette.
August 13, 2015 Update
---
PCjs v1.18.8 has made a little more progress running Windows 95 Setup, but CAB decompression still fails almost
PCx86 v1.18.8 has made a little more progress running Windows 95 Setup, but CAB decompression still fails almost
immediately. To monitor DOS calls until the first 36-byte read of PRECOPY1.CAB, try setting the following
breakpoint and then starting the machine, using the PCjs Debugger *input* field next to the **Enter** button:
breakpoint and then starting the machine, using the PCx86 Debugger *input* field next to the **Enter** button:
m dos off
bp 1ED4:16B4 "set fn=ah;dos;if fn!=3f||cx!=24"
@ -113,7 +113,9 @@ breakpoint and then starting the machine, using the PCjs Debugger *input* field
Alternatively, you can hard-code those commands into the Debugger component of the machine.xml file; eg:
<debugger id="debugger" messages="fault|tss|int" commands='m dos off;bp 1ED4:16B4 "set fn=ah;dos;if fn!=3f||cx!=24"'/>
```xml
<debugger id="debugger" messages="fault|tss|int" commands='m dos off;bp 1ED4:16B4 "set fn=ah;dos;if fn!=3f||cx!=24"'/>
```
Once the 36-byte read is hit, you'll probably want to stop on the next instruction that examine those bytes,
by using a memory read breakpoint:
@ -132,7 +134,7 @@ second breakpoint can check the value on exit.
Regarding the other Debugger commands shown above, the `dos` command describes the current DOS operation
(alternatively, you could use the `m int on; m dos on` commands to turn on DOS interrupt messages). The `di`
command dumps PCjs BACKTRACK(tm) information, to help you visually confirm which INT 0x21 calls are reading
command dumps PCx86 BACKTRACK(tm) information, to help you visually confirm which INT 0x21 calls are reading
PRECOPY1.CAB. Finally, the `if` command evaluates the given expression, and if the result is non-zero ("true"),
all subsequent commands are executed, up to to any `else` command; otherwise, only commands after the `else`
command will be executed, and if there is no `else` command, execution will stop.
@ -142,17 +144,17 @@ are evaluated using traditional operator precedence (ie, the same as C or JavaSc
parentheses, assignment operators, and unary or ternary operators, are not supported in expressions.
This test machine below has been updated to load WDEB386.EXE prior to starting B:SETUP.EXE, if you prefer using
WDEB386. Make sure the machine is running (ie, click the **Run** button, or use the PCjs Debugger "g" command),
WDEB386. Make sure the machine is running (ie, click the **Run** button, or use the PCx86 Debugger "g" command),
and then click on the Debugger *output* control to give it focus and press CTRL-C to trigger WDEB386.
The Debugger *input* field is used exclusively for PCjs Debugger commands, whereas the *output* textarea combines
all Debugger output *and* WDEB386 COM2 serial port I/O. You can even use the PCjs Debugger to debug
The Debugger *input* field is used exclusively for PCx86 Debugger commands, whereas the *output* textarea combines
all Debugger output *and* WDEB386 COM2 serial port I/O. You can even use the PCx86 Debugger to debug
the WDEB386 debugger; just make sure the appropriate text control has focus before typing a command.
To help reduce confusion, the PCjs Debugger displays a double-character command prefix, to differentiate its commands
To help reduce confusion, the PCx86 Debugger displays a double-character command prefix, to differentiate its commands
from WDEB386's single-character command prompt -- but it's still easy to get confused.
A quick recap of those command prefixes (which you won't see until AFTER you've typed a PCjs command):
A quick recap of those command prefixes (which you won't see until AFTER you've typed a PCx86 command):
* `>>` indicates real-mode
* `##` indicates protected-mode
@ -165,7 +167,7 @@ A quick recap of those command prefixes (which you won't see until AFTER you've
August 21, 2015 Update
---
PCjs v1.19.1 has finally solved a number of nagging bugs. The CAB decompression code itself was running
PCx86 v1.19.1 has finally solved a number of nagging bugs. The CAB decompression code itself was running
fine; it would crash after loading a 32-bit value into EAX *and* a timer interrupt occurred. A path
through the interrupt handler was trashing the upper bits of EAX. The culprit: any of the MOV instructions
that move an immediate value into one of the "high" 8-bit registers (AH, BH, CH, or DH). Those instructions

View file

@ -5,11 +5,11 @@ date: 2015-09-21 11:00:00
category: Windows 95
permalink: /blog/2015/09/21/
machines:
- type: pc
- type: pcx86
id: deskpro386
state: /disks/pc/windows/win95/4.00.950/deskpro386.json
config: /devices/pc/machine/compaq/deskpro386/vga/4096kb/machine.xml
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}]'
state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json
config: /devices/pcx86/machine/compaq/deskpro386/vga/4096kb/machine.xml
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pcx86/fixed/68mb/win95.json"}]'
autoMount: ''
---
@ -21,7 +21,7 @@ converts an immediate signed byte into a signed word. Those variations were fai
a 16-bit operand size was in effect, and if the destination was a register, the upper 16 bits of that register
could become corrupted.
The [Windows 95 Test Machine](/disks/pc/windows/win95/4.00.950/) hard disk has been updated
The [Windows 95 Test Machine](/disks/pcx86/windows/win95/4.00.950/) hard disk has been updated
with a complete set of Windows 95 files from a "Compact" installation, and first boot has finished, so instead
of the initial "Getting ready to run Windows 95 for the first time..." splash screen, you'll see the normal
Windows 95 startup screen.

View file

@ -178,18 +178,24 @@ still continue to run, and if there was no multiplication problem, you would not
PCjs v1.20.0 now supports a "stepping" attribute on the &lt;cpu&gt; element, which you can use to simulate specific
stepping behavior. For example, a *machine.xml* file with the following CPU definition:
<cpu id="cpu386" model="80386" stepping="b0"/>
```xml
<cpu id="cpu386" model="80386" stepping="b0"/>
```
will cause Windows 95 to abort exactly as described as above. Similarly, selecting a 80386 B1 stepping:
<cpu id="cpu386" model="80386" stepping="b1"/>
```xml
<cpu id="cpu386" model="80386" stepping="b1"/>
```
will cause Windows 95 to display the 32-bit multiplication warning shown above (PCjs deliberately fails the exact
multiplication test that Windows 95 performs).
If you want to simulate a B1 stepping that does *not* have the 32-bit multiplication flaw, set the stepping to B2:
<cpu id="cpu386" model="80386" stepping="b2"/>
```xml
<cpu id="cpu386" model="80386" stepping="b2"/>
```
B2 was not an actual 80386 stepping; it is a *pseudo-stepping* that provides a simple way of specifying a B1 80386 that
passes all 32-bit multiplication tests.

View file

@ -50,7 +50,7 @@ and the following "Front Matter" (YAML) must appear at the top of the Markdown f
---
...
machines:
- type: pc
- type: pcx86
id: ibm5150
---
@ -74,13 +74,13 @@ You may also use `config` to specify a machine XML configuration file if not usi
a JSON-encoded machine state file if the machine requires a predefined state; and `uncompiled` may be set to *true*
to force a machine to use uncompiled sources, overriding the value of `site.pcjs.compiled` in **_config.yml**.
For example, the PCjs Home page contains two machines, so this appears at the top of the
For example, the PCjs home page contains two machines, so this appears at the top of the
[Markdown file](https://raw.githubusercontent.com/jeffpar/pcjs/master/index.md):
machines:
- type: pc
- type: pcx86
id: ibm5150
config: /devices/pc/machine/5150/mda/64kb/machine.xml
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
- type: c1p
id: demoC1P
config: /devices/c1p/machine/8kb/large/machine.xml
@ -89,13 +89,13 @@ If necessary, you can also override some of the settings in a machine XML file.
FDC `autoMount` setting, making it easy to reuse the same machine XML file with different boot disks:
machines:
- type: pc
- type: pcx86
id: deskpro386
debugger: true
autoMount:
A:
path: /disks/pc/os2/misc/football/FOOTBALL-76817.json
config: /devices/pc/machine/compaq/deskpro386/ega/4096kb/debugger/machine.xml
path: /disks/pcx86/os2/misc/football/FOOTBALL-76817.json
config: /devices/pcx86/machine/compaq/deskpro386/ega/4096kb/debugger/machine.xml
Other settings that can currently be overridden include:
@ -104,11 +104,11 @@ Other settings that can currently be overridden include:
+ `messages`
+ `state`
Additional overrides will be added as needed. See the [Windows 95 Demo](/disks/pc/windows/win95/4.00.950/)
machine and its associated [Markdown file](https://raw.githubusercontent.com/jeffpar/pcjs/master/disks/pc/windows/win95/4.00.950/README.md)
Additional overrides will be added as needed. See the [Windows 95 Demo](/disks/pcx86/windows/win95/4.00.950/)
machine and its associated [Markdown file](https://raw.githubusercontent.com/jeffpar/pcjs/master/disks/pcx86/windows/win95/4.00.950/README.md)
for more override examples, including how to set `autoMount` to *not* mount any diskettes.
I will continue to include a Node web server with the PCjs project, but it's now intended for development
I will continue to include a Node web server with the PCjs Project, but it's now intended for development
purposes only (not production servers). I've updated the PCjs MarkOut component to parse any "Front Matter"
at the top of the PCjs Markdown files, and to convert all new Jekyll-style embedded machines and screenshots
to the older Markdown-compatible formats, so pages generated by the Node web server should still function

View file

@ -5,23 +5,23 @@ date: 2015-12-27 11:00:00
category: OS/2
permalink: /blog/2015/12/27/
machines:
- type: pc
- type: pcx86
id: ibm5170
debugger: true
config: /devices/pc/machine/5170/ega/2048kb/rev3/debugger/machine.xml
drives: '[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/IBMOS210-EGA.json"}]'
config: /devices/pcx86/machine/5170/ega/2048kb/rev3/debugger/machine.xml
drives: '[{name:"20Mb Hard Disk",type:2,path:"/disks/pcx86/fixed/20mb/IBMOS210-EGA.json"}]'
automount: ''
---
Just for fun (because I have a warped sense of fun), I decided to revisit some of the old OS/2 software I wrote
almost 30 years ago. But first, I needed an OS/2 development environment.
So I started with a clean install of [IBM OS/2 1.0](/disks/pc/os2/ibm/1.0/) in the 8Mhz IBM PC AT machine
So I started with a clean install of [IBM OS/2 1.0](/disks/pcx86/os2/ibm/1.0/) in the 8Mhz IBM PC AT machine
below, by booting from the "IBM OS/2 1.0 (1.44M Install)" diskette in drive A and reformatting the machine's 20Mb
drive C.
Next, I installed the [MS OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/). This SDK was released
in December 1987 along with [Microsoft OS/2 1.0](/disks/pc/os2/microsoft/1.0/). I don't have any of the
Next, I installed the [MS OS/2 SDK 1.02](/disks/pcx86/tools/microsoft/os2/sdk/1.02/). This SDK was released
in December 1987 along with [Microsoft OS/2 1.0](/disks/pcx86/os2/microsoft/1.0/). I don't have any of the
printed documentation that came with the SDK, such as the *Installation Guide*, but I do have the
[Microsoft® Operating System/2 Programmers Toolkit](/pubs/pc/software/os2/microsoft/ptk10/) documentation
from March 1988, thanks to the [OS/2 Museum](http://www.os2museum.com/wp/os2-history/os2-library/os2-1-x-programming/).
@ -35,11 +35,11 @@ into **Programmer's Workbench** (PWB), the text-mode Integrated Development Envi
With the introduction of graphical IDEs, such as Visual BASIC in 1991, Visual C++ in 1993, and Visual Studio in 1995,
this stand-alone, text-mode editor became obsolete, but in the 1980s, it was a valuable tool. You can learn more
about [SDKED](/disks/pc/tools/microsoft/os2/sdk/1.02/#using-sdked) on the
[MS OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/) page.
about [SDKED](/disks/pcx86/tools/microsoft/os2/sdk/1.02/#using-sdked) on the
[MS OS/2 SDK 1.02](/disks/pcx86/tools/microsoft/os2/sdk/1.02/) page.
Our [IBM OS/2 1.0](/disks/pc/os2/ibm/1.0/) demo machine (shown below) has the
[MS OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/) pre-installed, so check out our copy of the
Our [IBM OS/2 1.0](/disks/pcx86/os2/ibm/1.0/) demo machine (shown below) has the
[MS OS/2 SDK 1.02](/disks/pcx86/tools/microsoft/os2/sdk/1.02/) pre-installed, so check out our copy of the
[Microsoft® Operating System/2 Programmers Toolkit](/pubs/pc/software/os2/microsoft/ptk10/) and then write some code!
{% include machine.html id="ibm5170" %}

View file

@ -15,9 +15,9 @@ performance improvements were tested before being merged back into the main bran
Another branch was **FOOTBALL** (aka **PIGSKIN**), an early 80386-based prototype intended to test the viability
of the running multiple DOS applications in V86-mode. Sometimes this 80386 version was also called **386DOS**,
to distinguish it from **286DOS**. More details are in this
[FOOTBALL Design Document](/disks/pc/os2/misc/football/87058/#football-design-document).
[FOOTBALL Design Document](/disks/pcx86/os2/misc/football/87058/#football-design-document).
To shed some light on those efforts, I recently added a few [OS/2 Prototype Disks](/disks/pc/os2/misc/): a small
To shed some light on those efforts, I recently added a few [OS/2 Prototype Disks](/disks/pcx86/os2/misc/): a small
collection of early (mostly pre-1.0) OS/2 boot disks that provide a glimpse of what some of those early OS/2 builds
looked like.
@ -25,7 +25,7 @@ Getting these early versions of OS/2 to run in **PCjs** has been a bit of a chal
but also some lingering issues. Debugging continues.
Part of the problem is that these pre-1.0 builds still contain a few bugs. Also, the original
[OS/2 FOOTBALL Boot Disk](/disks/pc/os2/misc/football/87058/) from February 1987 was developed and
[OS/2 FOOTBALL Boot Disk](/disks/pcx86/os2/misc/football/87058/) from February 1987 was developed and
tested exclusively on Compaq DeskPro 386 machines from late 1986, so it has some uncommon 80386 dependencies:
* The [80386 LOADALL](/pubs/pc/reference/intel/80386/loadall/) instruction

View file

@ -6,14 +6,14 @@ permalink: /blog/2016/02/08/
---
The new release of PCjs (v1.20.8) is a fairly minor update, but it's an important one for **FOOTBALL** fans, resolving
two annoying problems with the [OS/2 FOOTBALL Boot Disk](/disks/pc/os2/misc/football/87058/): mysterious hard-error popups
two annoying problems with the [OS/2 FOOTBALL Boot Disk](/disks/pcx86/os2/misc/football/87058/): mysterious hard-error popups
and blank screens.
A hard-error popup would occur when FOOTBALL tried to initialize a non-existent PRN device. To resolve that, PCjs
now provides basic parallel port emulation, in the form of a [ParallelPort](/docs/pcjs/parallel/) component that you
now provides basic parallel port emulation, in the form of a [ParallelPort](/docs/pcx86/parallel/) component that you
include in a machine XML file with the &lt;parallel&gt; element, in much the same way you include the
[SerialPort](/docs/pcjs/serial/) component with the &lt;serial&gt; element. This [Compaq DeskPro 386]
(/devices/pc/machine/compaq/deskpro386/ega/4096kb/debugger/) machine used to run FOOTBALL has now been updated to
[SerialPort](/docs/pcx86/serial/) component with the &lt;serial&gt; element. This [Compaq DeskPro 386]
(/devices/pcx86/machine/compaq/deskpro386/ega/4096kb/debugger/) machine used to run FOOTBALL has now been updated to
include one parallel port.
The other problem was that switching between sessions with the **SysReq** key would often result in a blank screen;
@ -23,21 +23,21 @@ exposed a PCjs memory-management bug. The upshot is that whenever the Video com
buffer (which is *physical* memory), it must tell the CPU to flush any linear-to-physical mappings that may still refer
to the old physical memory.
With these changes, the [OS/2 FOOTBALL Boot Disk](/disks/pc/os2/misc/football/87058/) appears to be quite usable now.
With these changes, the [OS/2 FOOTBALL Boot Disk](/disks/pcx86/os2/misc/football/87058/) appears to be quite usable now.
Feel free to give it a few kicks!
---
I've also tidied up a few things in the [Devices](/devices/) folder. ROM images used to be stored under
`/devices/pc/basic/` and `/devices/pc/bios/`, but BASIC and BIOS ROM images aren't actually devices; they are the
`/devices/pcx86/basic/` and `/devices/pcx86/bios/`, but BASIC and BIOS ROM images aren't actually devices; they are the
*contents* of ROM devices. So, with that in mind, I've made the following rearrangements:
* `/devices/pc/bios/5150/*` => `/devices/pc/rom/5150/*`
* `/devices/pc/bios/5160/*` => `/devices/pc/rom/5160/*`
* `/devices/pc/bios/5170/*` => `/devices/pc/rom/5170/*`
* `/devices/pc/bios/compaq/*` => `/devices/pc/rom/compaq/*`
* `/devices/pc/basic/ibm-basic-1.00.json` => `/devices/pc/rom/5150/basic/BASIC100.json`
* `/devices/pc/basic/ibm-basic-1.10.json` => `/devices/pc/rom/5160/basic/BASIC110.json`
* `/devices/pcx86/bios/5150/*` => `/devices/pcx86/rom/5150/*`
* `/devices/pcx86/bios/5160/*` => `/devices/pcx86/rom/5160/*`
* `/devices/pcx86/bios/5170/*` => `/devices/pcx86/rom/5170/*`
* `/devices/pcx86/bios/compaq/*` => `/devices/pcx86/rom/compaq/*`
* `/devices/pcx86/basic/ibm-basic-1.00.json` => `/devices/pcx86/rom/5150/basic/BASIC100.json`
* `/devices/pcx86/basic/ibm-basic-1.10.json` => `/devices/pcx86/rom/5160/basic/BASIC110.json`
This structure mirrors what was done with Machine and Video devices, where the devices are organized
first by manufacturer (IBM or COMPAQ) and then by type (MDA, CGA, EGA, etc).
@ -48,7 +48,7 @@ for example, models 5150 through 5170 refer to IBM PC models.
---
The project currently includes only two BASIC ROM versions, C1.00 and C1.10, which were initially released with the
first model 5150 and 5160 machines, respectively. For more details, see [IBM PC ROMs](/devices/pc/rom/).
first model 5150 and 5160 machines, respectively. For more details, see [IBM PC ROMs](/devices/pcx86/rom/).
I believe there was also a BASIC ROM version 1.20 released for IBM PCjr, but since PCjs does not yet emulate the PCjr,
it has not been added to the project.

View file

@ -5,9 +5,9 @@ date: 2016-02-17 14:00:00
permalink: /blog/2016/02/17/
---
PCjs (v1.20.9) now offers new, *much* easier ways to save disks and machines, thanks to the new
PCx86 (v1.20.9) now offers new, *much* easier ways to save disks and machines, thanks to the new
[Save Disk](/blog/2016/02/17/#saving-disks) and [Save Machine](/blog/2016/02/17/#saving-machines) features.
With one click, PCjs can now generate a single download containing everything you need to embed any of our
With one click, PCx86 can now generate a single download containing everything you need to embed any of our
IBM PC demos on your own web page.
Saving Disks
@ -18,7 +18,7 @@ to the floppy disk controls. Select the drive first, and then whatever diskette
in that drive will be saved in your local machine's Downloads folder when you click **Save**.
If you made any changes to that disk after it was loaded, those changes will be included, so if you want a pristine
copy of the disk, click the **Load** button first. PCjs will ask you to confirm that you really want to reload the
copy of the disk, click the **Load** button first. PCx86 will ask you to confirm that you really want to reload the
disk and discard any changes.
Note that the disk *should* be downloaded as an **.img** file, which is nothing more than a sector-by-sector binary
@ -41,7 +41,7 @@ in your Downloads folder, so the OS X Terminal command `chmod -w PCDOS200-DISK1.
`chmod +w PCDOS200-DISK1.img` will make it writable again.
**NOTE**: Some browsers, notably Safari, do not support named downloads, so any disks you download will end up
with default names like "Unknown" or "download". PCjs will still try to let you know what the original filename was,
with default names like "Unknown" or "download". PCx86 will still try to let you know what the original filename was,
so that you can rename it appropriately.
Saving Machines
@ -52,46 +52,46 @@ You can choose to save a machine in its initial state, or make changes to any of
All your changes should be preserved.
Under the bottom-left corner of any IBM PC on the PCjs [website](/), you should now see a
[**Save Machine**] link. When you click that link, PCjs will generate a large chunk of JavaScript containing
[**Save Machine**] link. When you click that link, PCx86 will generate a large chunk of JavaScript containing
everything that machine needs to run, including:
* The machine XML configuration file (eg, "machine.xml")
* The machine XSL transformation file (eg, "components.xsl")
* The machine CSS stylesheet file (eg, "components.css")
* The machine state file (eg, "state.json")
* The PCjs machine emulation script (eg, "pc.js")
* The PCx86 machine emulation script (eg, "pcx86.js")
* Copies of all the disk images mounted by the machine
Let's say you want to save the IBM PC on the PCjs [home page](/). When you click **Save Machine**, two things should
Let's say you want to save the IBM PC on the PCx86 [home page](/). When you click **Save Machine**, two things should
happen:
* A file will be downloaded (eg, "pc.js")
* A file will be downloaded (eg, "pcx86.js")
* A dialog box will appear with some markup to copy-and-paste
The dialog box should provide the following information:
Check your Downloads folder for "pc.js", copy it to your web server as "pc.js",
Check your Downloads folder for "pcx86.js", copy it to your web server as "pcx86.js",
and then add the following to your web page:
<div id="ibm5150"></div>
...
<script type="text/javascript" src="pc.js"></script>
<script type="text/javascript">embedPC("ibm5150","machine.xml","components.xsl");</script>
<div id="ibm5150"></div>
...
<script type="text/javascript" src="pcx86.js"></script>
<script type="text/javascript">embedPC("ibm5150","machine.xml","components.xsl");</script>
The machine should appear where the <div> is located.
Copy the downloaded file to your own web server as **pc.js**, then create or edit a web page and insert the above text.
If **pc.js** and your web page are in different folders, then you'll also need to update *src* to include the exact
Copy the downloaded file to your own web server as **pcx86.js**, then create or edit a web page and insert the above text.
If **pcx86.js** and your web page are in different folders, then you'll also need to update *src* to include the exact
location of the script.
Some notes:
* PCjs may attempt to name the downloaded file **pc.json** instead of **pc.js**, because a file with a ".js"
* PCx86 may attempt to name the downloaded file **pcx86.json** instead of **pcx86.js**, because a file with a ".js"
extension could cause your web browser to block the download.
* For browsers that don't support named downloads, PCjs will attempt to open a new window/tab instead. Make sure
you copy the *entire* contents of that window into a file named to **pc.js** (or **pc-dbg.js** if the machine is
using the built-in PCjs debugger).
* For browsers that don't support named downloads, PCx86 will attempt to open a new window/tab instead. Make sure
you copy the *entire* contents of that window into a file named to **pcx86.js** (or **pcx86-dbg.js** if the machine is
using the built-in PCx86 debugger).
* Your browser may also impose size limitations on the download. If nothing happens, the machine data may be too
large for your browser; try a different browser (eg, Firefox or Safari) or a different machine.
@ -110,10 +110,12 @@ Some notes:
So, even if the original machine always powers on from scratch, the *copied* machine will always resume at the point
it was saved. This behavior, however, can be disabled by passing a *parms* object as the 4th parameter to the
*embedPC()* call, overriding the 'state' property:
<script type="text/javascript">embedPC("ibm5150","machine.xml","components.xsl","{state:null}");</script>
While the [PCjs Documentation](/docs/pcjs/) explains how to create a *new* machine, by writing your own machine
```xml
<script type="text/javascript">embedPC("ibm5150","machine.xml","components.xsl","{state:null}");</script>
```
While the [PCx86 Documentation](/docs/pcx86/) explains how to create a *new* machine, by writing your own machine
XML file and manually copying all the other pieces, the new **Save Machine** feature is the best way to save
any *existing* IBM PC and embed it on any other website.

View file

@ -50,12 +50,12 @@ all we have are the memories.
### Speaking of Memories
In particular, Read-Only Memories: we have precious few of those, too. I finally obtained
a [ROM Dump](/devices/pc/rom/compaq/portable/) from COMPAQ's first machine, the COMPAQ Portable, but I had to buy
a [ROM Dump](/devices/pcx86/rom/compaq/portable/) from COMPAQ's first machine, the COMPAQ Portable, but I had to buy
a system board on ebay to get it. Considering all the effort (and money) that COMPAQ invested in writing that code,
it's a bit depressing that these things haven't been properly preserved and memorialized.
Looking ahead to the day when PCjs will be able to simulate the original COMPAQ Portable, I thought it would be a good
idea to create my own roughly chronological list of [COMPAQ Machines](/devices/pc/machine/compaq/) from the 1980s,
idea to create my own roughly chronological list of [COMPAQ Machines](/devices/pcx86/machine/compaq/) from the 1980s,
since they are all machines I would like to see PCjs eventually support:
- COMPAQ Portable
@ -64,7 +64,7 @@ since they are all machines I would like to see PCjs eventually support:
- COMPAQ DeskPro 286
- COMPAQ Portable 286
- COMPAQ Portable II
- [COMPAQ DeskPro 386](/devices/pc/machine/compaq/deskpro386/)
- [COMPAQ DeskPro 386](/devices/pcx86/machine/compaq/deskpro386/)
- COMPAQ Portable III
- COMPAQ DeskPro 386/20
- COMPAQ Portable 386
@ -82,8 +82,8 @@ and LTE Lite series. But I think I need to stick to my original plan and draw a
As best I can tell, COMPAQ preferred to print its company name in all-caps, so that's my practice as well.
However, it seems that sometime between the release of [COMPAQ MS-DOS 3.10](/disks/pc/dos/compaq/3.10/) and
[COMPAQ MS-DOS 3.31](/disks/pc/dos/compaq/3.31/), there may have been a shift in policy. Both products still
However, it seems that sometime between the release of [COMPAQ MS-DOS 3.10](/disks/pcx86/dos/compaq/3.10/) and
[COMPAQ MS-DOS 3.31](/disks/pcx86/dos/compaq/3.31/), there may have been a shift in policy. Both products still
called themselves `The COMPAQ Personal Computer MS-DOS`, but in 3.31, the copyright string changed to
`Compaq Computer Corp.`

View file

@ -5,7 +5,7 @@ date: 2016-03-06 09:00:00
permalink: /blog/2016/03/06/
---
Yesterday, I fired up [Windows 3.1](/disks/pc/windows/3.10/) and played a complete game of
Yesterday, I fired up [Windows 3.1](/disks/pcx86/windows/3.10/) and played a complete game of
[Windows Solitaire](https://en.wikipedia.org/wiki/Microsoft_Solitaire) on my iPad. It was a bit, um, touchy,
but it worked.

View file

@ -6,15 +6,15 @@ permalink: /blog/2016/03/12/
---
I recently added some more demos to the PCjs Project, to showcase its ability to run old 80286-based and
80386-based software, such as [Windows/386](/disks/pc/windows/2.0x/), [Windows 3.0](/disks/pc/windows/3.00/),
[Windows 3.1](/disks/pc/windows/3.10/), and [Windows 95](/disks/pc/windows/win95/4.00.950/).
80386-based software, such as [Windows/386](/disks/pcx86/windows/2.0x/), [Windows 3.0](/disks/pcx86/windows/3.00/),
[Windows 3.1](/disks/pcx86/windows/3.10/), and [Windows 95](/disks/pcx86/windows/win95/4.00.950/).
{% include screenshot.html src="/disks/pc/windows/2.0x/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows/386 2.01" link="/disks/pc/windows/2.0x/" %}
{% include screenshot.html src="/disks/pc/windows/3.00/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/EGA, Windows 3.00" link="/disks/pc/windows/3.00/" %}
{% include screenshot.html src="/disks/pc/windows/3.10/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/VGA, Windows 3.10" link="/disks/pc/windows/3.10/" %}
{% include screenshot.html src="/disks/pc/windows/win95/4.00.950/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows 95" link="/disks/pc/windows/win95/4.00.950/" %}
{% include screenshot.html src="/disks/pcx86/windows/2.0x/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows/386 2.01" link="/disks/pcx86/windows/2.0x/" %}
{% include screenshot.html src="/disks/pcx86/windows/3.00/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/EGA, Windows 3.00" link="/disks/pcx86/windows/3.00/" %}
{% include screenshot.html src="/disks/pcx86/windows/3.10/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/VGA, Windows 3.10" link="/disks/pcx86/windows/3.10/" %}
{% include screenshot.html src="/disks/pcx86/windows/win95/4.00.950/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows 95" link="/disks/pcx86/windows/win95/4.00.950/" %}
As the [OS/2 Museum](http://www.os2museum.com/wp/windows386-2-01/) points out, [Windows/386 2.01](/disks/pc/windows/2.0x/)
As the [OS/2 Museum](http://www.os2museum.com/wp/windows386-2-01/) points out, [Windows/386 2.01](/disks/pcx86/windows/2.0x/)
was the first Microsoft product to specifically target the 80386. However, not only was it *not* a 32-bit operating
system, it didn't even run Windows applications in protected-mode. Windows apps ran in V86-mode, and even then, *only*
if you started Windows by running `WIN386.EXE`.

View file

@ -8,7 +8,7 @@ permalink: /blog/2016/05/04/
This was the week of The Sharpening.
A while back, I updated most of the machines to use higher-resolution "screens". For example, a typical
[EGA video configuration](/devices/pc/video/ibm/ega/1984-09-13/128kb-autolockfs.xml) now specifies a *screenWidth*
[EGA video configuration](/devices/pcx86/video/ibm/ega/1984-09-13/128kb-autolockfs.xml) now specifies a *screenWidth*
of 1280 and *screenHeight* of 700, dimensions which are exactly twice the standard EGA resolution.
That change had no effect on the machine's operation, but it did improve the machine's appearance, because
@ -16,8 +16,8 @@ most people are using much higher resolution monitors today, so by using a highe
less interpolation is happening when a machine's screen image is scaled up to fill your browser window.
The amount of scaling *also* depends on whether the machine allows itself to be stretched to fill the browser window.
For example, this [machine](/devices/pc/machine/5160/ega/640kb/array/machine.xml) (used by the
[EGA Machine Array Demo](/devices/pc/machine/5160/ega/640kb/array/)) is limited to an overall *width* of 680 pixels,
For example, this [machine](/devices/pcx86/machine/5160/ega/640kb/array/machine.xml) (used by the
[EGA Machine Array Demo](/devices/pcx86/machine/5160/ega/640kb/array/)) is limited to an overall *width* of 680 pixels,
no matter how large you make your browser window:
```xml
@ -46,7 +46,7 @@ All the browsers I've tested so far (Chrome, Firefox, and Safari) support a
which eliminates much of the fuzziness that would occur when copying pixels from the lower-resolution *buffer* canvas
to the higher-resolution *screen* canvas.
So I've added a new [Video](/docs/pcjs/video/) property named *smoothing* that can be set to "true" or "false",
So I've added a new [Video](/docs/pcx86/video/) property named *smoothing* that can be set to "true" or "false",
and I've set it to "false" for most machines in the project. If *smoothing* is not set, your browser continues to
use its default interpolation method.
@ -66,7 +66,7 @@ while the right one does not.
Aspect Ratio
---
The *smoothing* property joins another recent [Video](/docs/pcjs/video/) property, *aspect*, that was added in a
The *smoothing* property joins another recent [Video](/docs/pcx86/video/) property, *aspect*, that was added in a
[release](https://github.com/jeffpar/pcjs/releases/tag/v1.21.5) last month.
To recap, aspect ratio is display width divided by display height, but the choice of aspect ratio is complicated by
@ -79,7 +79,7 @@ containing one or more PCjs machines.
For example:
http://www.pcjs.org/disks/pc/dos/ibm/1.00/?aspect=2.0
http://www.pcjs.org/disks/pcx86/dos/ibm/1.00/?aspect=2.0
will modify the height of the machine's screen to conform to the requested aspect ratio of 2.0. The screen should still
be responsive to any browser resizing while still retaining that aspect ratio.

View file

@ -10,7 +10,7 @@ scripts: # the following list of scripts should mirror what /modules/diskdump/li
- /modules/shared/lib/diskapi.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/component.js
- /modules/pcjs/lib/x86.js
- /modules/pcx86/lib/x86.js
- /modules/diskdump/lib/diskdump.js
---

View file

@ -8,7 +8,7 @@ Application Archives
---
Browse classic application software for the following machines:
- [IBM PC](pc/)
- [IBM PC](pcx86/)
- [Challenger 1P](c1p/)
### Software Application Manifests
@ -34,47 +34,53 @@ the following information about the software:
- Disk(s) (one or more entries describing sets of files and/or disk images)
The distinctions made by Type and Category are a bit arbitrary and likely to change. For now,
Type is merely a reflection of how we initially filed the original [disks](/disks/pc/), while Category
Type is merely a reflection of how we initially filed the original [disks](/disks/pcx86/), while Category
provides more detail.
### Example: VisiCalc
VisiCalc is stored in an [/apps folder](/apps/pc/1981/visicalc/), and two relevant files are
described by &lt;file&gt; entries in its [manifest](/apps/pc/1981/visicalc/manifest.xml):
VisiCalc is stored in an [/apps folder](/apps/pcx86/1981/visicalc/), and two relevant files are
described by &lt;file&gt; entries in its [manifest](/apps/pcx86/1981/visicalc/manifest.xml):
<manifest>
<title>VisiCalc</title>
<version>VC-176Y2-IBM-TEST</version>
<type>Application</type>
<category>Productivity</category>
<company>Software Arts</company>
<releaseDate>December 16, 1981</releaseDate>
<machine href="/devices/pc/machine/5150/mda/64kb/machine.xml" state="/apps/pc/1981/visicalc/state.json"/>
<disk id="disk" dir="/apps/pc/1981/visicalc/bin/">
<file>VC.COM</file>
<file dir="../">README.md</file>
<link href="http://www.bricklin.com/history/vclicense.htm">VisiCalc License</link>
</disk>
</manifest>
```xml
<manifest>
<title>VisiCalc</title>
<version>VC-176Y2-IBM-TEST</version>
<type>Application</type>
<category>Productivity</category>
<company>Software Arts</company>
<releaseDate>December 16, 1981</releaseDate>
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml" state="/apps/pcx86/1981/visicalc/state.json"/>
<disk id="disk" dir="/apps/pcx86/1981/visicalc/bin/">
<file>VC.COM</file>
<file dir="../">README.md</file>
<link href="http://www.bricklin.com/history/vclicense.htm">VisiCalc License</link>
</disk>
</manifest>
```
Since this [manifest](/apps/pc/1981/visicalc/manifest.xml) also contains a &lt;machine&gt; entry,
Since this [manifest](/apps/pcx86/1981/visicalc/manifest.xml) also contains a &lt;machine&gt; entry,
the default manifest stylesheet will automatically load and launch the associated
[PCjs machine](/devices/pc/machine/5150/mda/64kb/machine.xml). The machine will boot or resume according
to its own &lt;[computer](/docs/pcjs/computer/)&gt; settings, unless the manifest overrides the machine's
[PCjs machine](/devices/pcx86/machine/5150/mda/64kb/machine.xml). The machine will boot or resume according
to its own &lt;[computer](/docs/pcx86/computer/)&gt; settings, unless the manifest overrides the machine's
default state with its own *state* setting; eg:
<machine href="/devices/pc/machine/5150/mda/64kb/machine.xml" state="/apps/pc/1981/visicalc/state.json"/>
```xml
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml" state="/apps/pcx86/1981/visicalc/state.json"/>
```
The machine.xml file, in turn, refers to a [sample set](/disks/pc/samples.xml) of disk images, one of which is:
The machine.xml file, in turn, refers to a [sample set](/disks/pcx86/samples.xml) of disk images, one of which is:
<manifest ref="/apps/pc/1981/visicalc/manifest.xml" disk="*"/>
```xml
<manifest ref="/apps/pcx86/1981/visicalc/manifest.xml" disk="*"/>
```
which refers to the &lt;disk&gt; entry in the VisiCalc manifest -- which brings us full circle.
Since that &lt;disk&gt; entry is just a reference to a folder, PCjs must first convert it to a disk image,
using the following API request:
http://localhost:8088/api/v1/dump?path=/apps/pc/1981/visicalc/bin/VC.COM;../README.md&format=json
http://localhost:8088/api/v1/dump?path=/apps/pcx86/1981/visicalc/bin/VC.COM;../README.md&format=json
The PCjs DiskDump module processes the dump request and generates a JSON-encoded DOS 2.x-compatible disk image
containing all the specified files.
@ -83,11 +89,13 @@ However, to avoid the PCjs web server re-generating the same disk image for ever
have saved that JSON-encoded image as static file on the server, and then added an *href* attribute to the manifest's
&lt;disk&gt; entry:
<manifest>
<disk id="disk01" dir="/apps/pc/1981/visicalc/archive/" href="/apps/pc/1981/visicalc/disk.json">
...
</disk>
</manifest>
```xml
<manifest>
<disk id="disk01" dir="/apps/pcx86/1981/visicalc/archive/" href="/apps/pcx86/1981/visicalc/disk.json">
...
</disk>
</manifest>
```
PCjs always prefers a resource specified by *href*. While the &lt;file&gt; entries are now superfluous, they
still serve to document the contents of the disk image, and are still necessary if the disk image ever needs to
@ -95,26 +103,28 @@ be re-generated.
### Example: CP/M-86
CPM-86 is stored as two disk images in a [/disks folder](/disks/pc/cpm/1.1b/). The disk images are described in that
folder's [manifest](/disks/pc/cpm/1.1b/manifest.xml):
CPM-86 is stored as two disk images in a [/disks folder](/disks/pcx86/cpm/1.1b/). The disk images are described in that
folder's [manifest](/disks/pcx86/cpm/1.1b/manifest.xml):
```xml
<manifest>
<title>CP/M-86</title>
<version>1.1B</version>
<type>OS</type>
<category>Operating System</category>
<company href="http://en.wikipedia.org/wiki/Digital_Research">Digital Research</company>
<publisher href="http://en.wikipedia.org/wiki/Eagle_Computer">Eagle Computer</publisher>
<releaseDate>May 20, 1983</releaseDate>
<machine href="/disks/pcx86/cpm/1.1b/machine.xml"/>
<disk id="disk01" href="/disks/pcx86/cpm/1.1b/cpm86-disk1.json">
<name>CP/M-86 (Disk 1)</name>
</disk>
<disk id="disk02" href="/disks/pcx86/cpm/1.1b/cpm86-disk2.json">
<name>CP/M-86 (Disk 2)</name>
</disk>
</manifest>
```
<manifest>
<title>CP/M-86</title>
<version>1.1B</version>
<type>OS</type>
<category>Operating System</category>
<company href="http://en.wikipedia.org/wiki/Digital_Research">Digital Research</company>
<publisher href="http://en.wikipedia.org/wiki/Eagle_Computer">Eagle Computer</publisher>
<releaseDate>May 20, 1983</releaseDate>
<machine href="/disks/pc/cpm/1.1b/machine.xml"/>
<disk id="disk01" href="/disks/pc/cpm/1.1b/cpm86-disk1.json">
<name>CP/M-86 (Disk 1)</name>
</disk>
<disk id="disk02" href="/disks/pc/cpm/1.1b/cpm86-disk2.json">
<name>CP/M-86 (Disk 2)</name>
</disk>
</manifest>
In this case, the software was "born" as disk images (non-DOS disk images at that), so we don't
bother listing the contents of those images with &lt;file&gt; entries inside the &lt;disk&gt; entries.
@ -123,10 +133,14 @@ the disk images.
If a machine file wanted to use only the first disk, then it would specify:
<manifest ref="/disks/pc/cpm/1.1b/manifest.xml" disk="disk01"/>
```xml
<manifest ref="/disks/pcx86/cpm/1.1b/manifest.xml" disk="disk01"/>
```
and if it wanted to use all the disks listed in the manifest, it would specify:
<manifest ref="/disks/pc/cpm/1.1b/manifest.xml" disk="*"/>
```xml
<manifest ref="/disks/pcx86/cpm/1.1b/manifest.xml" disk="*"/>
```
which is what our [CP/M Machine Configuration](/disks/pc/cpm/1.1b/machine.xml) does.
which is what our [CP/M Machine Configuration](/disks/pcx86/cpm/1.1b/machine.xml) does.

File diff suppressed because one or more lines are too long

View file

@ -1,15 +0,0 @@
---
layout: page
title: "Executive Suite (1982)"
permalink: /apps/pc/1982/esuite/
machines:
- type: pc
id: ibm5160
config: /devices/pc/machine/5160/mda/256kb/fake188/machine.xml
state: /apps/pc/1982/esuite/state.json
---
Executive Suite (1982)
---
{% include machine.html id="ibm5160" %}

View file

@ -1,15 +0,0 @@
---
layout: page
title: "Rogue (1985)"
permalink: /apps/pc/1985/rogue/
machines:
- type: pc
id: ibm5160
config: /devices/pc/machine/5160/cga/640kb/machine.xml
state: /apps/pc/1985/rogue/state.json
---
Rogue (1985)
---
{% include machine.html id="ibm5160" %}

View file

@ -1,34 +0,0 @@
CACHE MANIFEST
/apps/pc/1985/rogue/manifest.xml
/versions/pcjs/1.16.0/manifest.xsl
/versions/pcjs/1.16.0/common.xsl
/versions/pcjs/1.16.0/components.xsl
/devices/pc/machine/5160/cga/640kb/machine.xml
/devices/pc/keyboard/us83-buttons-minimal.xml
/disks/pc/library.xml
/disks/pc/dos/microsoft/3.20/manifest.xml
/disks/pc/dos/microsoft/4.0M/manifest.xml
/disks/pc/tools/microsoft/basic/manifest.xml
/disks/pc/tools/microsoft/c/4.00/manifest.xml
/disks/pc/tools/microsoft/masm/4.00/manifest.xml
/disks/pc/tools/microsoft/mouse/5.00/manifest.xml
/disks/pc/apps/lotus/123/1.0a/manifest.xml
/disks/pc/apps/microsoft/word/3.0/manifest.xml
/disks/pc/apps/microsoft/word/3.1/manifest.xml
/disks/pc/apps/microsoft/word/5.0/manifest.xml
/disks/pc/apps/microsoft/winword/2.0c/manifest.xml
/apps/pc/1981/visicalc/manifest.xml
/apps/pc/1982/esuite/manifest.xml
/apps/pc/1987/thinktank/manifest.xml
/apps/pc/1992/moria/manifest.xml
/versions/pcjs/1.16.0/common.css
/versions/pcjs/1.16.0/components.css
/versions/pcjs/1.16.0/pc.js
/devices/pc/hdc/ibm-xebec-1982.json
/devices/pc/rom/5160/basic/BASIC110.json
/devices/pc/rom/5160/1982-11-08/XTBIOS-REV1.json
/devices/pc/video/ibm/cga/ibm-cga.json
/disks/pc/dos/ibm/2.00/PCDOS200-DISK1.json
/disks/pc/dos/ibm/2.00/PCDOS200-DISK2.json
/apps/pc/1985/rogue/state.json
/apps/pc/1985/rogue/disk.json

View file

@ -1,15 +0,0 @@
---
layout: page
title: "ThinkTank (1987)"
permalink: /apps/pc/1987/thinktank/
machines:
- type: pc
id: ibm5160
config: /devices/pc/machine/5160/cga/640kb/machine.xml
state: /apps/pc/1987/thinktank/state.json
---
ThinkTank (1987)
---
{% include machine.html id="ibm5160" %}

View file

@ -1,15 +0,0 @@
---
layout: page
title: "The Dungeons of Moria (1992)"
permalink: /apps/pc/1992/moria/
machines:
- type: pc
id: ibm5160
config: /devices/pc/machine/5160/cga/640kb/machine.xml
state: /apps/pc/1992/moria/state.json
---
The Dungeons of Moria (1992)
---
{% include machine.html id="ibm5160" %}

File diff suppressed because one or more lines are too long

View file

@ -1,65 +0,0 @@
---
layout: page
title: IBM PC Application Archive
permalink: /apps/pc/
---
IBM PC Application Archive
---
Below are selected demos of classic IBM PC applications running on [PCjs](/docs/about/pcjs/).
* [VisiCalc (1981)](1981/visicalc/)
* [Executive Suite (1982)](1982/esuite/)
* [Rogue (1985)](1985/rogue/)
* [ThinkTank (1987)](1987/thinktank/)
* [The Dungeons of Moria (1992)](1992/moria/)
A list of all the software available to PCjs machines can be found in the [IBM PC Disk Library](/disks/pc/).
### Creating IBM PC Application Demos
Demos in our [Application Archives](/apps/) combine [Software Application Manifests](/apps/#software-application-manifests)
with [Machine Configurations](/devices/pc/machine/).
We'll use the [VisiCalc Demo](1981/visicalc/) as an example. First you must choose a machine configuration.
For VisiCalc, we chose a Model 5150 machine with a Monochrome Display, and then inserted a link to that machine
in the demo's [manifest](1981/visicalc/manifest.xml):
<machine href="/devices/pc/machine/5150/mda/64kb/machine.xml"/>
Next, the [manifest](1981/visicalc/manifest.xml) required a disk image containing the VisiCalc program
(VC.COM). We used the [DiskDump](/modules/diskdump/) module to create that disk image:
cd apps/pc/1981/visicalc
node ../../../../modules/diskdump/bin/diskdump --path="archive/VC.COM;../README.md" --format=json --output=disk.json --manifest
The DiskDump command created a disk image named "disk.json" containing two files ("VC.COM" from the "archive" subdirectory,
and "README.md" from the "archive" parent directory) and automatically added that disk image to the demo's [manifest](1981/visicalc/manifest.xml):
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pc/1981/visicalc/disk.json" md5="61494f998d5fb0e31e7b8bd99f1cc588" md5json="3ad82ed815725e6bd786f92a4714e84f">
<file size="27520" time="1981-12-16 23:00:00" attr="0x20" md5="28997dfedb2440c6054d8be835be8634">VC.COM</file>
<file dir="../">README.md</file>
</disk>
Now that the manifest contains a disk image, we were able to add the manifest to our set of [Sample Disks](/disks/pc/samples.xml):
<manifest ref="/apps/pc/1981/visicalc/manifest.xml" disk="*"/>
Next, we started a version of our chosen machine that's also configured to use the Debugger, by loading
the following **machine.xml** into a web browser (it's assumed the Node web server is already running on port 8088):
http://localhost:8088/devices/pc/machine/5150/mda/64kb/debugger/machine.xml
Then we booted DOS, loaded the VisiCalc disk, ran VisiCalc, pressed the Debugger's "Halt" button, pressed "Clear" to
clear the Debugger's output window, and typed the following Debugger command:
d state
We copied-and-pasted the entire contents of the Debugger's output window into a file named "state.json", and then updated
the &lt;machine&gt; entry in the [manifest](1981/visicalc/manifest.xml):
<machine href="/devices/pc/machine/5150/mda/64kb/machine.xml" state="/apps/pc/1981/visicalc/state.json"/>
It's important to use a state file *only* with the machine configuration it was created with; in this case, we're OK,
because the only difference between the two chosen Model 5150 machines is the addition of the Debugger.

View file

@ -1,7 +1,9 @@
---
layout: page
title: IBM PC Applications (1981)
permalink: /apps/pc/1981/
permalink: /apps/pcx86/1981/
redirect_from:
- /apps/pc/1981/
---
IBM PC Applications (1981)

View file

@ -1,12 +1,14 @@
---
layout: page
title: "VisiCalc (1981)"
permalink: /apps/pc/1981/visicalc/
permalink: /apps/pcx86/1981/visicalc/
redirect_from:
- /apps/pc/1981/visicalc/
machines:
- type: pc
- type: pcx86
id: ibm5150
config: /devices/pc/machine/5150/mda/64kb/machine.xml
state: /apps/pc/1981/visicalc/state.json
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
state: /apps/pcx86/1981/visicalc/state.json
---
VisiCalc (1981)

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.22.1/manifest.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.23.0/manifest.xsl"?>
<manifest type="software">
<title>VisiCalc</title>
<!-- Since version numbers are incorporated into the disk image names, and this version number is a bit ugly, we're not exposing it with the normal "version" tag -->
@ -11,8 +11,8 @@
<author href="http://www.frankston.com/public/?name=ImplementingVisiCalc">Bob Frankston</author>
<releaseDate>December 16, 1981</releaseDate>
<license href="http://www.bricklin.com/history/vclicense.htm">Lotus Development</license>
<machine href="/devices/pc/machine/5150/mda/64kb/machine.xml" state="/apps/pc/1981/visicalc/state.json"/>
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pc/1981/visicalc/disk.json" md5="61494f998d5fb0e31e7b8bd99f1cc588" md5json="3ad82ed815725e6bd786f92a4714e84f">
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml" state="/apps/pcx86/1981/visicalc/state.json"/>
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pcx86/1981/visicalc/disk.json" md5="61494f998d5fb0e31e7b8bd99f1cc588" md5json="3ad82ed815725e6bd786f92a4714e84f">
<name>VisiCalc (1981)</name>
<file size="27520" time="1981-12-16 23:00:00" attr="0x20" md5="28997dfedb2440c6054d8be835be8634">VC.COM</file>
<file dir="../">README.md</file>

File diff suppressed because one or more lines are too long

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before After
Before After

View file

@ -1,7 +1,9 @@
---
layout: page
title: IBM PC Applications (1982)
permalink: /apps/pc/1982/
permalink: /apps/pcx86/1982/
redirect_from:
- /apps/pc/1982/
---
IBM PC Applications (1982)

View file

@ -0,0 +1,17 @@
---
layout: page
title: "Executive Suite (1982)"
permalink: /apps/pcx86/1982/esuite/
redirect_from:
- /apps/pc/1982/esuite/
machines:
- type: pcx86
id: ibm5160
config: /devices/pcx86/machine/5160/mda/256kb/fake188/machine.xml
state: /apps/pcx86/1982/esuite/state.json
---
Executive Suite (1982)
---
{% include machine.html id="ibm5160" %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.22.1/manifest.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.23.0/manifest.xsl"?>
<manifest type="software">
<title>Executive Suite</title>
<version/>
@ -7,8 +7,8 @@
<category>Text Simulation</category>
<author>Armonk Corporation</author>
<releaseDate>1982</releaseDate>
<machine href="/devices/pc/machine/5160/mda/256kb/fake188/machine.xml" state="/apps/pc/1982/esuite/state.json"/>
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/" href="/apps/pc/1982/esuite/disk.json" md5="7721a7bc9fcbd0005e7c1d87ecc055c5" md5json="dbf0a2c0176b8128d87e2465794764f4">
<machine href="/devices/pcx86/machine/5160/mda/256kb/fake188/machine.xml" state="/apps/pcx86/1982/esuite/state.json"/>
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/" href="/apps/pcx86/1982/esuite/disk.json" md5="7721a7bc9fcbd0005e7c1d87ecc055c5" md5json="dbf0a2c0176b8128d87e2465794764f4">
<name>Executive Suite (1982)</name>
<file size="384" time="2000-02-29 08:04:48" attr="0x20" md5="3e638560a5f483cdbd1be486b07c767e">ESUITE.COM</file>
<file size="163840" time="2000-02-29 06:57:40" attr="0x20" md5="dcc72026cdc906109cf0e3b2d07ffd5d">GAME.DAT</file>

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,9 @@
---
layout: page
title: IBM PC Applications (1985)
permalink: /apps/pc/1985/
permalink: /apps/pcx86/1985/
redirect_from:
- /apps/pc/1985/
---
IBM PC Applications (1985)

View file

@ -0,0 +1,17 @@
---
layout: page
title: "Rogue (1985)"
permalink: /apps/pcx86/1985/rogue/
redirect_from:
- /apps/pc/1985/rogue/
machines:
- type: pcx86
id: ibm5160
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
state: /apps/pcx86/1985/rogue/state.json
---
Rogue (1985)
---
{% include machine.html id="ibm5160" %}

View file

@ -0,0 +1,34 @@
CACHE MANIFEST
/apps/pcx86/1985/rogue/manifest.xml
/versions/pcx86/current/manifest.xsl
/versions/pcx86/current/common.xsl
/versions/pcx86/current/components.xsl
/devices/pcx86/machine/5160/cga/640kb/machine.xml
/devices/pcx86/keyboard/us83-buttons-minimal.xml
/disks/pcx86/library.xml
/disks/pcx86/dos/microsoft/3.20/manifest.xml
/disks/pcx86/dos/microsoft/4.0M/manifest.xml
/disks/pcx86/tools/microsoft/basic/manifest.xml
/disks/pcx86/tools/microsoft/c/4.00/manifest.xml
/disks/pcx86/tools/microsoft/masm/4.00/manifest.xml
/disks/pcx86/tools/microsoft/mouse/5.00/manifest.xml
/disks/pcx86/apps/lotus/123/1.0a/manifest.xml
/disks/pcx86/apps/microsoft/word/3.0/manifest.xml
/disks/pcx86/apps/microsoft/word/3.1/manifest.xml
/disks/pcx86/apps/microsoft/word/5.0/manifest.xml
/disks/pcx86/apps/microsoft/winword/2.0c/manifest.xml
/apps/pcx86/1981/visicalc/manifest.xml
/apps/pcx86/1982/esuite/manifest.xml
/apps/pcx86/1987/thinktank/manifest.xml
/apps/pcx86/1992/moria/manifest.xml
/versions/pcx86/current/common.css
/versions/pcx86/current/components.css
/versions/pcx86/current/pcx86.js
/devices/pcx86/hdc/ibm-xebec-1982.json
/devices/pcx86/rom/5160/basic/BASIC110.json
/devices/pcx86/rom/5160/1982-11-08/XTBIOS-REV1.json
/devices/pcx86/video/ibm/cga/ibm-cga.json
/disks/pcx86/dos/ibm/2.00/PCDOS200-DISK1.json
/disks/pcx86/dos/ibm/2.00/PCDOS200-DISK2.json
/apps/pcx86/1985/rogue/state.json
/apps/pcx86/1985/rogue/disk.json

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.22.1/manifest.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.23.0/manifest.xsl"?>
<manifest type="software">
<title>Rogue</title>
<version/>
@ -12,7 +12,7 @@
<author>Ken Arnold</author>
<author>Jon Lane</author>
<author>Michael Toy</author>
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pc/1985/rogue/disk.json" md5="91fab29636a7517e17eaa38b30ff156a" md5json="c531e9f249b20adad667a3c376e427c8">
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pcx86/1985/rogue/disk.json" md5="91fab29636a7517e17eaa38b30ff156a" md5json="c531e9f249b20adad667a3c376e427c8">
<name>Rogue (1985)</name>
<file size="14016" time="1985-03-25 14:33:18" attr="0x20" md5="e8f7c7b97210f480c7b741a0d58951bd">MKOPT.EXE</file>
<file size="2616" time="1995-09-01 18:46:18" attr="0x20" md5="275fd64a3502af22b56e23934c79e9ef">ROGUE.COM</file>
@ -21,5 +21,5 @@
<file size="16391" time="1985-03-25 16:53:10" attr="0x20" md5="afb883b611c35f79f2a5168365349ba7">ROGUE.PIC</file>
<file size="0" time="1995-08-26 12:11:38" attr="0x20">ROGUE.SCR</file>
</disk>
<machine href="/devices/pc/machine/5160/cga/640kb/machine.xml" state="/apps/pc/1985/rogue/state.json"/>
<machine href="/devices/pcx86/machine/5160/cga/640kb/machine.xml" state="/apps/pcx86/1985/rogue/state.json"/>
</manifest>

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,9 @@
---
layout: page
title: IBM PC Applications (1987)
permalink: /apps/pc/1987/
permalink: /apps/pcx86/1987/
redirect_from:
- /apps/pc/1987/
---
IBM PC Applications (1987)

View file

@ -0,0 +1,17 @@
---
layout: page
title: "ThinkTank (1987)"
permalink: /apps/pcx86/1987/thinktank/
redirect_from:
- /apps/pc/1987/thinktank/
machines:
- type: pcx86
id: ibm5160
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
state: /apps/pcx86/1987/thinktank/state.json
---
ThinkTank (1987)
---
{% include machine.html id="ibm5160" %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.22.1/manifest.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.23.0/manifest.xsl"?>
<manifest type="software">
<title>ThinkTank</title>
<version>2.41NP</version>
@ -7,7 +7,7 @@
<category>Productivity</category>
<company>Living Videotext</company>
<releaseDate>September 25, 1987</releaseDate>
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/" href="/apps/pc/1987/thinktank/disk.json" md5="94053339672452fba42da85481893d68" md5json="bd39020bff244db9af3ac9eb656e7878">
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/" href="/apps/pcx86/1987/thinktank/disk.json" md5="94053339672452fba42da85481893d68" md5json="bd39020bff244db9af3ac9eb656e7878">
<name>ThinkTank (1987)</name>
<file size="6" time="2012-11-20 15:29:40" attr="0x20" md5="50b68f3f99eda119c661b2b50cb9f4de">AUTOEXEC.BAT</file>
<file size="8192" time="2012-11-20 15:29:35" attr="0x20" md5="3355afbc122700f13647ee0d1bbf9ed7">READ_ME.DB</file>
@ -49,5 +49,5 @@
<file size="512" time="2012-11-20 15:32:46" attr="0x20" md5="05f711f1c096454617eb18b31a48905f" dir="TMPLATES/">UPGRADE.TXT</file>
<file size="3072" time="2012-11-20 15:32:11" attr="0x20" md5="20ded226630726d7b26d0ec7832753d0" dir="TMPLATES/">WTMEASUR.TXT</file>
</disk>
<machine href="/devices/pc/machine/5160/cga/640kb/machine.xml" state="/apps/pc/1987/thinktank/state.json"/>
<machine href="/devices/pcx86/machine/5160/cga/640kb/machine.xml" state="/apps/pcx86/1987/thinktank/state.json"/>
</manifest>

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,9 @@
---
layout: page
title: IBM PC Applications (1988)
permalink: /apps/pc/1988/
permalink: /apps/pcx86/1988/
redirect_from:
- /apps/pc/1988/
---
IBM PC Applications (1988)

View file

@ -1,7 +1,9 @@
---
layout: page
title: The Dungeons of Moria (1988)
permalink: /apps/pc/1988/moria/
permalink: /apps/pcx86/1988/moria/
redirect_from:
- /apps/pc/1988/moria/
---
The Dungeons of Moria (1988)

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.22.1/manifest.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.23.0/manifest.xsl"?>
<manifest type="software">
<title>The Dungeons of Moria</title>
<version>4.872</version>
@ -14,7 +14,7 @@
<name>D. G. Kneller</name>
<desc>MSDOS port</desc>
</author>
<disk id="disk01" size="1228800" chs="80:2:15" dir="archive/" href="/apps/pc/1988/moria/disk.json" md5="7bb84a7ac4e9b03e8cd1e6753b1359fb" md5json="7630122397a57af2d0c767141af3817c">
<disk id="disk01" size="1228800" chs="80:2:15" dir="archive/" href="/apps/pcx86/1988/moria/disk.json" md5="7bb84a7ac4e9b03e8cd1e6753b1359fb" md5json="7630122397a57af2d0c767141af3817c">
<name>Moria 4.872 (1988)</name>
<file size="11143" time="1988-11-01 00:00:00" attr="0x20" md5="dae278b77133f32949d0e8940f944c0d">CONFIG.DOC</file>
<file size="91154" time="1991-06-01 14:50:02" attr="0x20" md5="66593e83a2aa3870d7a9e8b43079ce42">GOD</file>

View file

@ -1,7 +1,9 @@
---
layout: page
title: IBM PC Applications (1992)
permalink: /apps/pc/1992/
permalink: /apps/pcx86/1992/
redirect_from:
- /apps/pc/1992/
---
IBM PC Applications (1992)

View file

@ -0,0 +1,17 @@
---
layout: page
title: "The Dungeons of Moria (1992)"
permalink: /apps/pcx86/1992/moria/
redirect_from:
- /apps/pc/1992/moria/
machines:
- type: pcx86
id: ibm5160
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
state: /apps/pcx86/1992/moria/state.json
---
The Dungeons of Moria (1992)
---
{% include machine.html id="ibm5160" %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.22.1/manifest.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.23.0/manifest.xsl"?>
<manifest type="software">
<title>The Dungeons of Moria</title>
<version>5.5</version>
@ -92,7 +92,7 @@
<name>Ben Schreiber</name>
<desc>Macintosh port for Think C</desc>
</contributor>
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/bin/" href="/apps/pc/1992/moria/disk.json" md5="da0023280238bc2ee9053ad2b9548816" md5json="1473be159bb5f9001db31c06b3a366c1">
<disk id="disk01" size="368640" chs="40:2:9" dir="archive/bin/" href="/apps/pcx86/1992/moria/disk.json" md5="da0023280238bc2ee9053ad2b9548816" md5json="1473be159bb5f9001db31c06b3a366c1">
<name>Moria 5.5 (1992)</name>
<file size="6074" time="1992-11-01 23:15:36" attr="0x20" md5="078aca44b845ee8a787a324c1e827200">EXP.DOC</file>
<file size="2560" time="1992-11-01 23:15:36" attr="0x20" md5="a5c8620efd0dc841956f9cdc2e46220a">MORIA.CNF</file>
@ -108,5 +108,5 @@
<file size="2193" time="1992-11-01 23:15:44" attr="0x20" md5="cac18aa1420a33b231295f468c360f96">VERSION.HLP</file>
<file size="423" time="1992-11-01 23:15:44" attr="0x20" md5="07fdaebf594f9b34d54544c2b6aa36d8">WELCOME.HLP</file>
</disk>
<machine href="/devices/pc/machine/5160/cga/640kb/machine.xml" state="/apps/pc/1992/moria/state.json"/>
<machine href="/devices/pcx86/machine/5160/cga/640kb/machine.xml" state="/apps/pcx86/1992/moria/state.json"/>
</manifest>

File diff suppressed because one or more lines are too long

78
apps/pcx86/README.md Normal file
View file

@ -0,0 +1,78 @@
---
layout: page
title: IBM PC Application Archive
permalink: /apps/pcx86/
redirect_from:
- /apps/pc/
---
IBM PC Application Archive
---
Below are selected [PCx86](/docs/about/pcx86/) demos of classic IBM PC applications:
* [VisiCalc (1981)](1981/visicalc/)
* [Executive Suite (1982)](1982/esuite/)
* [Rogue (1985)](1985/rogue/)
* [ThinkTank (1987)](1987/thinktank/)
* [The Dungeons of Moria (1992)](1992/moria/)
A list of all the software available to PCx86 machines can be found in the [IBM PC Disk Library](/disks/pcx86/).
### Creating IBM PC Application Demos
Demos in our [Application Archives](/apps/) combine
[Software Application Manifests](/apps/#software-application-manifests) with
[Machine Configurations](/devices/pcx86/machine/).
We'll use the [VisiCalc Demo](1981/visicalc/) as an example. First, we choose a machine configuration.
For VisiCalc, we chose a Model 5150 machine with a Monochrome Display, and then inserted a link to that machine
in the demo's [manifest](1981/visicalc/manifest.xml):
```xml
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml"/>
```
Next, the [manifest](1981/visicalc/manifest.xml) requires a disk image containing the VisiCalc program
(VC.COM). We used the [DiskDump](/modules/diskdump/) module to create that disk image:
cd apps/pcx86/1981/visicalc
node ../../../../modules/diskdump/bin/diskdump --path="archive/VC.COM;../README.md" --format=json --output=disk.json --manifest
The DiskDump command created a disk image named "disk.json" containing two files ("VC.COM" from the "archive"
subdirectory, and "README.md" from the "archive" parent directory) and automatically added that disk image to the demo's
[manifest](1981/visicalc/manifest.xml):
```xml
<disk id="disk01" size="163840" chs="40:1:8" dir="archive/" href="/apps/pcx86/1981/visicalc/disk.json" md5="61494f998d5fb0e31e7b8bd99f1cc588" md5json="3ad82ed815725e6bd786f92a4714e84f">
<file size="27520" time="1981-12-16 23:00:00" attr="0x20" md5="28997dfedb2440c6054d8be835be8634">VC.COM</file>
<file dir="../">README.md</file>
</disk>
```
Now that the manifest contains a disk image, we were able to add the manifest to our set of
[Sample Disks](/disks/pcx86/samples.xml):
```xml
<manifest ref="/apps/pcx86/1981/visicalc/manifest.xml" disk="*"/>
```
Next, we started a version of our chosen machine that's also configured to use the Debugger, by loading
the following **machine.xml** into a web browser (it's assumed the Node web server is already running on port 8088):
http://localhost:8088/devices/pcx86/machine/5150/mda/64kb/debugger/machine.xml
Then we booted DOS, loaded the VisiCalc disk, ran VisiCalc, pressed the Debugger's "Halt" button, pressed "Clear" to
clear the Debugger's output window, and typed the following Debugger command:
d state
We copied-and-pasted the entire contents of the Debugger's output window into a file named "state.json", and then
updated the &lt;machine&gt; entry in the [manifest](1981/visicalc/manifest.xml):
```xml
<machine href="/devices/pcx86/machine/5150/mda/64kb/machine.xml" state="/apps/pcx86/1981/visicalc/state.json"/>
```
It's important to use a state file *only* with the machine configuration it was created with; in this case, we're OK,
because the only difference between the two chosen Model 5150 machines is the addition of the Debugger.

View file

@ -13,9 +13,9 @@ Device Configurations
All PCjs machines are built from the following collections of devices:
* 6502-based Devices (e.g., [Challenger 1P](c1p/machine/))
* [6502-based Devices](c1p/) (e.g., [Challenger 1P](c1p/machine/))
* [8080-based Devices](pc8080/) (e.g., [Space Invaders](pc8080/machine/invaders/))
* [8086-based Devices](pc/) (e.g., [IBM PC, including 80286 and 80386-based compatibles](pc/machine/))
* [8086-based Devices](pcx86/) (e.g., [IBM PC, including 80286 and 80386-based compatibles](pcx86/machine/))
These devices are user-installable components that you would typically find in a real personal computer,
such as keyboards, disk controllers with one or more disk drives, video cards, etc.
such as keyboards, disk drive controllers with one or more drives, video cards, etc.

View file

@ -7,6 +7,16 @@ permalink: /devices/c1p/
Challenger 1P Device Configurations
---
This folder contains the components for all [Challenger 1P Machine Configurations](machine/).
All our [Challenger 1P Machines](machine/) are built from a collection of devices, including:
[Applications](/apps/c1p/) and [Disk Images](/disks/c1p/) are also available.
* [Control Panel](panel/)
* CPU (6502)
* Debugger
* Floppy Drive Controller
* Keyboard
* RAM
* [ROM](rom/)
* Serial Port
* [Video](video/)
The project also includes an assortment of Challenger 1P [Applications](/apps/c1p/) and [Disk Images](/disks/c1p/).

View file

@ -3,8 +3,9 @@ layout: page
title: OSI Challenger 1P (32Kb) with Disk Support
permalink: /devices/c1p/machine/32kb/
machines:
- type: c1p-dbg
- type: c1p
id: c1p32kb
debugger: true
---
{% include machine.html id="c1p32kb" %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/machine.xsl"?>
<machine id="c1psim" class="c1p" border="1" width="100%" padbottom="8px" background="#FAEBD7" style="padding-bottom:8px">
<name>OSI Challenger 1P (32Kb) with Disk Support</name>
<computer id="c1p" name="Challenger 1P">

View file

@ -3,8 +3,9 @@ layout: page
title: OSI Challenger 1P (8Kb) with Additional Software
permalink: /devices/c1p/machine/8kb/all/debugger/
machines:
- type: c1p-dbg
- type: c1p
id: c1p8kb
debugger: true
---
{% include machine.html id="c1p8kb" %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/machine.xsl"?>
<machine id="c1pAll" class="c1p" border="1" width="100%" padbottom="8px" background="#FAEBD7" style="padding-bottom:8px">
<name>OSI Challenger 1P (8Kb, Additional Software)</name>
<computer id="c1p" name="Challenger 1P">

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/machine.xsl"?>
<machine id="c1pAll" class="c1p" border="1" pos="center" background="#FAEBD7" style="padding-bottom:8px">
<name>OSI Challenger 1P (8Kb, Additional Software)</name>
<computer id="c1p" name="Challenger 1P">

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/outline.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/outline.xsl"?>
<outline>
<title>Challenger 1P (8Kb) "Server Array"</title>
<machine id="OSI1" ref="/devices/c1p/machine/8kb/small/machine.xml"/>

View file

@ -3,8 +3,9 @@ layout: page
title: OSI Challenger 1P (8Kb) with Large Display
permalink: /devices/c1p/machine/8kb/large/debugger/
machines:
- type: c1p-dbg
- type: c1p
id: c1p8kb
debugger: true
---
{% include machine.html id="c1p8kb" %}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/machine.xsl"?>
<machine id="c1p8kb" class="c1p" border="1" width="100%" background="#FAEBD7" style="padding-bottom:8px">
<name>OSI Challenger 1P (8Kb) with Debugger</name>
<computer id="c1p" name="Challenger 1P">

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/machine.xsl"?>
<machine id="c1pLarge" class="c1p" border="1" pos="center" background="#FAEBD7" style="padding-bottom:8px">
<name pos="center">OSI Challenger 1P (circa 1978)</name>
<computer id="c1p" name="Challenger 1P">

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.22.1/machine.xsl"?>
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.23.0/machine.xsl"?>
<machine id="c1pSmall" class="c1p" border="1" width="272px" pos="left" padding="16px" background="#FAEBD7" style="padding-bottom:8px">
<computer id="c1p" name="Challenger 1P">
<module type="cpu" refid="cpu6502" start="0x0000" end="0xffff"/>

View file

@ -9,11 +9,11 @@ Challenger 1P Machine Configurations
Here are some sample C1P Machine Configurations:
* [8kb with Large Display](8kb/large/) ([Debugger](8kb/large/debugger/))
* [8kb with Small Display](8kb/small/)
* [8kb with Large Display w/Additional Software](8kb/all/) ([Debugger](8kb/all/debugger/))
* [8kb "Server Array" Demo](8kb/array/)
* [32kb with Diskette Support](32kb/)
- [8kb with Small Display](8kb/small/)
- [8kb with Large Display](8kb/large/) ([Debugger](8kb/large/debugger/))
- [8kb with Large Display w/Additional Software](8kb/all/) ([Debugger](8kb/all/debugger/))
- [8kb "Server Array" Demo](8kb/array/)
- [32kb with Diskette Support](32kb/)
See the [C1Pjs Documentation](/docs/c1pjs/) for operational details of the emulator.

View file

@ -0,0 +1,15 @@
---
layout: page
title: Challenger 1P Control Panels
permalink: /devices/c1p/panel/
---
Challenger 1P Control Panels
---
A Control Panel is a collection of machine controls (e.g., buttons, register values, etc) bound to the *CPU* and
*Debugger* components and usually defined in a separate XML file.
The following C1P Control Panels are available:
- [default.xml](default.xml)

View file

@ -1,2 +1,371 @@
Folder for Challenger 1P ROMs
---
layout: page
title: Challenger 1P ROMs
permalink: /devices/c1p/rom/
---
Challenger 1P ROMs
---
The following ROMs are available:
- [BASIC (8Kb)](basic.json) ([HEX](basic.hex))
- [BASIC (8Kb) with GC Patch](basic-gcpatch.json) ([HEX](basic-gcpatch.hex))
- [SYSTEM (2Kb)](system.json) ([HEX](system.hex))
BASIC Garbage Collection (GC) Patch
---
The following information comes from BAS3FIX.TXT in the ["Fixed BASIC3 ROM"](http://osiweb.org/roms/basfix02.zip) ZIP
archive at [osiweb.org](http://osiweb.org/software.html#BASIC_ROMS). The patch was created in 2001 and is attributed to
"[Ed](http://dxforth.netbay.com.au/)" (formerly at http://www.netbay.com.au/~dxforth/).
New OSI/UK101 ROM BASIC garbage collection bug patch
----------------------------------------------------
The 8K ROM BASIC supplied with the OSI Superboard II and
UK101 computers contains a bug in the garbage collector
routine (see Listing 1). A patch was subsequently made
available in the form of an updated BASIC 3 ROM (for the
UK101 at least). The code is shown in Listing 3.
Unfortunately the patch was not a complete solution and
corrupted strings could still occur - see Listing 2.
Listing 4 shows a new garbage collector patch that fixes
all the problems. It is a combination of the original
patch with changes found in later versions of Microsoft
6502 BASIC.
Implementing the patch requires replacing of the BASIC 3
ROM. Binary and hex dumps for the new ROM are enclosed.
The patch and rom images suit either the OSI or UK101 ROM
BASIC.
4-Oct-2001
-----------------------------------------------------------
[Listing 1]
Demonstrates garbage collection bug in OSI/UK101 ROM BASIC.
10 DIM A$(3)
RUN
PRINT FRE(0) (machine hangs)
[Listing 2]
String corruption occurs with an unmodified ROM BASIC or
the original garbage collection patch. Before entering
the program, perform a Cold start and enter 1000 for the
memory size.
5 A$="+"
10 A$="-"+A$+"-"
20 A$="+"+A$+"+"
30 PRINT A$
40 GOTO 10
[Listing 3]
Original garbage collection patch
B147 LDX $85
LDA $86
B14B STX $81
STA $82
LDY #0
STY $9D
LDA $7F
LDX $80
STA $AA
STX $AB
LDA #$68
STA $71
STY $72
B161 CMP $65
BEQ $B16A
JSR $B1D7
BEQ $B161
B16A LDA #6
STA $A0
LDA $7B
LDX $7C
STA $71
STX $72
B176 CPX $7E
BNE $B17E
CMP $7D
BEQ $B183
B17E JSR $B1D1
BEQ $B176
B183 STA $A4
STX $A5
LDA #4
STA $A0
B18B LDA $A4
LDX $A5
B18F CPX $80
BNE $B19A
CMP $7F
BNE $B19A
JMP $B216
B19A STA $71
STX $72
LDY #1
LDA ($71),Y
PHP
INY
LDA ($71),Y
ADC $A4
STA $A4
INY
LDA ($71),Y
ADC $A5
STA $A5
PLP
BPL $B18B
INY
LDA ($71),Y
ASL A
ADC #5
ADC $71
STA $71
BCC $B1C2
INC $72
B1C2 LDX $72
B1C4 CPX $A5
BNE $B1CC
CMP $A4
BEQ $B18F
B1CC JSR $B1D7
BEQ $B1C4
B1D1 INY
LDA ($71),Y
BPL $B206
INY
B1D7 LDA ($71),Y
BEQ $B206
INY
LDA ($71),Y
TAX
INY
LDA ($71),Y
CMP $82
BCC $B1EC
BNE $B206
CPX $81
BCS $B206
B1EC CMP $AB
BCC $B206
BNE $B1F6
CPX $AA
BCC $B206
B1F6 STX $AA
STA $AB
LDA $71
LDX $72
STA $9C
STX $9D
DEY
DEY
STY $A2
B206 LDA $A0
CLC
ADC $71
STA $71
BCC $B211
INC $72
B211 LDX $72
LDY #0
RTS
B216 DEC $A0
LDX $9D
BEQ $B211
LDY $A2
CLC
LDA ($9C),Y
ADC $AA
STA $A6
LDA $AB
ADC #0
STA $A7
LDA $81
LDX $82
STA $A4
STX $A5
JSR LA1D6
LDY $A2
INY
LDA $A4
STA ($9C),Y
TAX
INC $A5
LDA $A5
INY
STA ($9C),Y
JMP $B14B
.BYTE $53,$54,$49,$42,$4F ; RUBBISH
[Listing 4]
New garbage collection patch
1 ; NEW GARBAGE COLLECTION FIX FOR
2 ; OSI/UK101 ROM BASIC 4-Oct-2001
3
4 B147 *= $B147
5
6 B147 A6 85 LDX $85
7 B149 A5 86 LDA $86
8 B14B 86 81 L1 STX $81
9 B14D 85 82 STA $82
10 B14F A0 00 LDY #0
11 B151 84 9D STY $9D
12 B153 84 9C STY $9C
13 B155 A5 7F LDA $7F
14 B157 A6 80 LDX $80
15 B159 85 AA STA $AA
16 B15B 86 AB STX $AB
17 B15D A9 68 LDA #$68
18 B15F 85 71 STA $71
19 B161 84 72 STY $72
20 B163 C5 65 L2 CMP $65
21 B165 F0 05 BEQ L3
22 B167 20 D8 B1 JSR L14
23 B16A F0 F7 BEQ L2
24 B16C A9 06 L3 LDA #6
25 B16E 85 A0 STA $A0
26 B170 A5 7B LDA $7B
27 B172 A6 7C LDX $7C
28 B174 85 71 STA $71
29 B176 86 72 STX $72
30 B178 E4 7E L4 CPX $7E
31 B17A D0 04 BNE L5
32 B17C C5 7D CMP $7D
33 B17E F0 05 BEQ L6
34 B180 20 D2 B1 L5 JSR L13
35 B183 F0 F3 BEQ L4
36 B185 85 A4 L6 STA $A4
37 B187 86 A5 STX $A5
38 B189 A9 04 LDA #4
39 B18B 85 A0 STA $A0
40 B18D A5 A4 L7 LDA $A4
41 B18F A6 A5 LDX $A5
42 B191 E4 80 L8 CPX $80
43 B193 D0 04 BNE L9
44 B195 C5 7F CMP $7F
45 B197 F0 7E BEQ L19
46
47 B199 85 71 L9 STA $71
48 B19B 86 72 STX $72
49 B19D A0 01 LDY #1
50 B19F B1 71 LDA ($71),Y
51 B1A1 08 PHP
52 B1A2 C8 INY
53 B1A3 B1 71 LDA ($71),Y
54 B1A5 65 A4 ADC $A4
55 B1A7 85 A4 STA $A4
56 B1A9 C8 INY
57 B1AA B1 71 LDA ($71),Y
58 B1AC 65 A5 ADC $A5
59 B1AE 85 A5 STA $A5
60 B1B0 28 PLP
61 B1B1 10 DA BPL L7
62 B1B3 C8 INY
63 B1B4 B1 71 LDA ($71),Y
64 B1B6 A0 00 LDY #0
65 B1B8 0A ASL A
66 B1B9 69 05 ADC #5
67 B1BB 65 71 ADC $71
68 B1BD 85 71 STA $71
69 B1BF 90 02 BCC L10
70 B1C1 E6 72 INC $72
71 B1C3 A6 72 L10 LDX $72
72 B1C5 E4 A5 L11 CPX $A5
73 B1C7 D0 04 BNE L12
74 B1C9 C5 A4 CMP $A4
75 B1CB F0 C4 BEQ L8
76 B1CD 20 D8 B1 L12 JSR L14
77 B1D0 F0 F3 BEQ L11
78
79 B1D2 C8 L13 INY
80 B1D3 B1 71 LDA ($71),Y
81 B1D5 10 30 BPL L17
82 B1D7 C8 INY
83 B1D8 B1 71 L14 LDA ($71),Y
84 B1DA F0 2B BEQ L17
85 B1DC C8 INY
86 B1DD B1 71 LDA ($71),Y
87 B1DF AA TAX
88 B1E0 C8 INY
89 B1E1 B1 71 LDA ($71),Y
90 B1E3 C5 82 CMP $82
91 B1E5 90 06 BCC L15
92 B1E7 D0 1E BNE L17
93 B1E9 E4 81 CPX $81
94 B1EB B0 1A BCS L17
95 B1ED C5 AB L15 CMP $AB
96 B1EF 90 16 BCC L17
97 B1F1 D0 04 BNE L16
98 B1F3 E4 AA CPX $AA
99 B1F5 90 10 BCC L17
100 B1F7 86 AA L16 STX $AA
101 B1F9 85 AB STA $AB
102 B1FB A5 71 LDA $71
103 B1FD A6 72 LDX $72
104 B1FF 85 9C STA $9C
105 B201 86 9D STX $9D
106 B203 88 DEY
107 B204 88 DEY
108 B205 84 A2 STY $A2
109 B207 A5 A0 L17 LDA $A0
110 B209 18 CLC
111 B20A 65 71 ADC $71
112 B20C 85 71 STA $71
113 B20E 90 02 BCC L18
114 B210 E6 72 INC $72
115 B212 A6 72 L18 LDX $72
116 B214 A0 00 LDY #0
117 B216 60 RTS
118
119 B217 C6 A0 L19 DEC $A0
120 B219 A5 9D LDA $9D
121 B21B 05 9C ORA $9C
122 B21D F0 F3 BEQ L18
123 B21F A4 A2 LDY $A2
124 B221 18 CLC
125 B222 B1 9C LDA ($9C),Y
126 B224 65 AA ADC $AA
127 B226 85 A6 STA $A6
128 B228 A5 AB LDA $AB
129 B22A 69 00 ADC #0
130 B22C 85 A7 STA $A7
131 B22E A5 81 LDA $81
132 B230 A6 82 LDX $82
133 B232 85 A4 STA $A4
134 B234 86 A5 STX $A5
135 B236 20 D6 A1 JSR $A1D6
136 B239 A4 A2 LDY $A2
137 B23B C8 INY
138 B23C A5 A4 LDA $A4
139 B23E 91 9C STA ($9C),Y
140 B240 AA TAX
141 B241 E6 A5 INC $A5
142 B243 A5 A5 LDA $A5
143 B245 C8 INY
144 B246 91 9C STA ($9C),Y
145 B248 4C 4B B1 JMP L1
146
147 B24B FF FF .BYTE $FF,$FF
148
149 B24D .END

View file

@ -1,5 +1,5 @@
/*
* Contents of ROM image: http://www.pcjs.org/devices/c1p/roms/basic-gcpatch.rom
* Contents of ROM image: http://archive.pcjs.org/devices/c1p/rom/basic-gcpatch.rom
*/
[0x39,0xa6,0x55,0xa5,0x3f,0xaa,0x0b,0xa7,0x22,0xa9,0x00,0xad,0x4e,0xa9,0xb8,0xa7, // 0x0000: 9.U.?..."...N...
0xb8,0xa6,0x90,0xa6,0x3b,0xa7,0x19,0xa6,0x9b,0xa6,0xe5,0xa6,0x4e,0xa7,0x37,0xa6, // 0x0010: ....;.......N.7.
@ -29,7 +29,7 @@
0x20,0x00,0x0d,0x0a,0x4f,0x4b,0x0d,0x0a,0x00,0x0d,0x0a,0x42,0x52,0x45,0x41,0x4b, // 0x0190: ...OK.....BREAK
0x00,0xba,0xe8,0xe8,0xe8,0xe8,0xbd,0x01,0x01,0xc9,0x81,0xd0,0x21,0xa5,0x98,0xd0, // 0x01a0: ............!...
0x0a,0xbd,0x02,0x01,0x85,0x97,0xbd,0x03,0x01,0x85,0x98,0xdd,0x03,0x01,0xd0,0x07, // 0x01b0: ................
0xa5,0x97,0xdd,0x02,0x01,0xf0,0x07,0x8a,0x18,0x69,0x10,0xaa,0xd0,0xd8,0x60,0x20, // 0x01c0: .........i....`
0xa5,0x97,0xdd,0x02,0x01,0xf0,0x07,0x8a,0x18,0x69,0x10,0xaa,0xd0,0xd8,0x60,0x20, // 0x01c0: .........i....`
0x1f,0xa2,0x85,0x7f,0x84,0x80,0x38,0xa5,0xa6,0xe5,0xaa,0x85,0x71,0xa8,0xa5,0xa7, // 0x01d0: ......8.....q...
0xe5,0xab,0xaa,0xe8,0x98,0xf0,0x23,0xa5,0xa6,0x38,0xe5,0x71,0x85,0xa6,0xb0,0x03, // 0x01e0: ......#..8.q....
0xc6,0xa7,0x38,0xa5,0xa4,0xe5,0x71,0x85,0xa4,0xb0,0x08,0xc6,0xa5,0x90,0x04,0xb1, // 0x01f0: ..8...q.........
@ -38,10 +38,10 @@
0x82,0x90,0x28,0xd0,0x04,0xc5,0x81,0x90,0x22,0x48,0xa2,0x08,0x98,0x48,0xb5,0xa3, // 0x0220: ..(....."H...H..
0xca,0x10,0xfa,0x20,0x47,0xb1,0xa2,0xf8,0x68,0x95,0xac,0xe8,0x30,0xfa,0x68,0xa8, // 0x0230: ... G...h...0.h.
0x68,0xc4,0x82,0x90,0x06,0xd0,0x05,0xc5,0x81,0xb0,0x01,0x60,0xa2,0x0c,0x46,0x64, // 0x0240: h..........`..Fd
0x20,0x6c,0xa8,0x20,0xe3,0xa8,0xbd,0x64,0xa1,0x20,0xe5,0xa8,0xbd,0x65,0xa1,0x20, // 0x0250: l. ...d. ...e.
0x20,0x6c,0xa8,0x20,0xe3,0xa8,0xbd,0x64,0xa1,0x20,0xe5,0xa8,0xbd,0x65,0xa1,0x20, // 0x0250: l. ...d. ...e.
0xe5,0xa8,0x20,0x91,0xa4,0xa9,0x86,0xa0,0xa1,0x20,0xc3,0xa8,0xa4,0x88,0xc8,0xf0, // 0x0260: .. ...... ......
0x03,0x20,0x53,0xb9,0x46,0x64,0xa9,0x92,0xa0,0xa1,0x20,0x03,0x00,0x20,0x57,0xa3, // 0x0270: . S.Fd.... .. W.
0x86,0xc3,0x84,0xc4,0x20,0xbc,0x00,0xf0,0xf4,0xa2,0xff,0x86,0x88,0x90,0x06,0x20, // 0x0280: .... ..........
0x86,0xc3,0x84,0xc4,0x20,0xbc,0x00,0xf0,0xf4,0xa2,0xff,0x86,0x88,0x90,0x06,0x20, // 0x0280: .... ..........
0xa6,0xa3,0x4c,0xf6,0xa5,0x20,0x7f,0xa7,0x20,0xa6,0xa3,0x84,0x5d,0x20,0x32,0xa4, // 0x0290: ..L.. .. ...] 2.
0x90,0x44,0xa0,0x01,0xb1,0xaa,0x85,0x72,0xa5,0x7b,0x85,0x71,0xa5,0xab,0x85,0x74, // 0x02a0: .D.....r.{.q...t
0xa5,0xaa,0x88,0xf1,0xaa,0x18,0x65,0x7b,0x85,0x7b,0x85,0x73,0xa5,0x7c,0x69,0xff, // 0x02b0: ......e{.{.s.|i.
@ -59,7 +59,7 @@
0xc9,0x5f,0xf0,0xd7,0xe0,0x47,0xb0,0x04,0x95,0x13,0xe8,0x2c,0xa9,0x07,0x20,0xe5, // 0x0370: ._...G.....,.. .
0xa8,0xd0,0xd6,0x4c,0x66,0xa8,0x20,0xeb,0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea, // 0x0380: ...Lf. .........
0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x29,0x7f,0xc9,0x0f,0xd0,0x08,0x48,0xa5,0x64, // 0x0390: .......).....H.d
0x49,0xff,0x85,0x64,0x68,0x60,0xa6,0xc3,0xa0,0x04,0x84,0x60,0xb5,0x00,0xc9,0x20, // 0x03a0: I..dh`.....`...
0x49,0xff,0x85,0x64,0x68,0x60,0xa6,0xc3,0xa0,0x04,0x84,0x60,0xb5,0x00,0xc9,0x20, // 0x03a0: I..dh`.....`...
0xf0,0x3a,0x85,0x5c,0xc9,0x22,0xf0,0x58,0x24,0x60,0x70,0x30,0xc9,0x3f,0xd0,0x04, // 0x03b0: .:.\.".X$`p0.?..
0xa9,0x97,0xd0,0x28,0xc9,0x30,0x90,0x04,0xc9,0x3c,0x90,0x20,0x84,0xba,0xa0,0x00, // 0x03c0: ...(.0...<. ....
0x84,0x5d,0x88,0x86,0xc3,0xca,0xc8,0xe8,0xb5,0x00,0xc9,0x20,0xf0,0xf9,0x38,0xf9, // 0x03d0: .]......... ..8.
@ -77,7 +77,7 @@
0xa6,0xa2,0x68,0x86,0x65,0x68,0x8d,0xfd,0x01,0x68,0x8d,0xfe,0x01,0xa2,0xfc,0x9a, // 0x0490: ..h.eh...h......
0xa9,0x00,0x85,0x8c,0x85,0x61,0x60,0x18,0xa5,0x79,0x69,0xff,0x85,0xc3,0xa5,0x7a, // 0x04a0: .....a`..yi....z
0x69,0xff,0x85,0xc4,0x60,0x90,0x06,0xf0,0x04,0xc9,0xa4,0xd0,0xe9,0x20,0x7f,0xa7, // 0x04b0: i...`........ ..
0x20,0x32,0xa4,0x20,0xc2,0x00,0xf0,0x0c,0xc9,0xa4,0xd0,0x94,0x20,0xbc,0x00,0x20, // 0x04c0: 2. ........ ..
0x20,0x32,0xa4,0x20,0xc2,0x00,0xf0,0x0c,0xc9,0xa4,0xd0,0x94,0x20,0xbc,0x00,0x20, // 0x04c0: 2. ........ ..
0x7f,0xa7,0xd0,0x8c,0x68,0x68,0xa5,0x11,0x05,0x12,0xd0,0x06,0xa9,0xff,0x85,0x11, // 0x04d0: ....hh..........
0x85,0x12,0xa0,0x01,0x84,0x60,0xb1,0xaa,0xf0,0x41,0x20,0x29,0xa6,0x20,0x6c,0xa8, // 0x04e0: .....`...A ). l.
0xc8,0xb1,0xaa,0xaa,0xc8,0xb1,0xaa,0xc5,0x12,0xd0,0x04,0xe4,0x11,0xf0,0x02,0xb0, // 0x04f0: ................
@ -116,9 +116,9 @@
0x68,0x85,0x87,0x68,0x85,0x88,0x68,0x85,0xc3,0x68,0x85,0xc4,0x20,0x1a,0xa7,0x98, // 0x0700: h..h..h..h.. ...
0x18,0x65,0xc3,0x85,0xc3,0x90,0x02,0xe6,0xc4,0x60,0xa2,0x3a,0x2c,0xa2,0x00,0x86, // 0x0710: .e.......`.:,...
0x5b,0xa0,0x00,0x84,0x5c,0xa5,0x5c,0xa6,0x5b,0x85,0x5b,0x86,0x5c,0xb1,0xc3,0xf0, // 0x0720: [...\.\.[.[.\...
0xe8,0xc5,0x5c,0xf0,0xe4,0xc8,0xc9,0x22,0xf0,0xeb,0xd0,0xf1,0x20,0xc1,0xaa,0x20, // 0x0730: ..\....".... ..
0xc2,0x00,0xc9,0x88,0xf0,0x05,0xa9,0xa0,0x20,0x03,0xac,0xa5,0xac,0xd0,0x05,0x20, // 0x0740: ........ ......
0x1d,0xa7,0xf0,0xbb,0x20,0xc2,0x00,0xb0,0x03,0x4c,0xb9,0xa6,0x4c,0xff,0xa5,0x20, // 0x0750: .... ....L..L..
0xe8,0xc5,0x5c,0xf0,0xe4,0xc8,0xc9,0x22,0xf0,0xeb,0xd0,0xf1,0x20,0xc1,0xaa,0x20, // 0x0730: ..\....".... ..
0xc2,0x00,0xc9,0x88,0xf0,0x05,0xa9,0xa0,0x20,0x03,0xac,0xa5,0xac,0xd0,0x05,0x20, // 0x0740: ........ ......
0x1d,0xa7,0xf0,0xbb,0x20,0xc2,0x00,0xb0,0x03,0x4c,0xb9,0xa6,0x4c,0xff,0xa5,0x20, // 0x0750: .... ....L..L..
0xae,0xb3,0x48,0xc9,0x8c,0xf0,0x04,0xc9,0x88,0xd0,0x91,0xc6,0xaf,0xd0,0x04,0x68, // 0x0760: ..H............h
0x4c,0x02,0xa6,0x20,0xbc,0x00,0x20,0x7f,0xa7,0xc9,0x2c,0xf0,0xee,0x68,0x60,0xa2, // 0x0770: L.. .. ...,..h`.
0x00,0x86,0x11,0x86,0x12,0xb0,0xf7,0xe9,0x2f,0x85,0x5b,0xa5,0x12,0x85,0x71,0xc9, // 0x0780: ......../.[...q.
@ -128,7 +128,7 @@
0xa9,0xab,0x20,0x03,0xac,0xa5,0x5f,0x48,0x20,0xc1,0xaa,0x68,0x2a,0x20,0xb3,0xaa, // 0x07c0: .. ..._H ..h* ..
0xd0,0x03,0x4c,0x74,0xb7,0xa0,0x02,0xb1,0xae,0xc5,0x82,0x90,0x17,0xd0,0x07,0x88, // 0x07d0: ..Lt............
0xb1,0xae,0xc5,0x81,0x90,0x0e,0xa4,0xaf,0xc4,0x7c,0x90,0x08,0xd0,0x0d,0xa5,0xae, // 0x07e0: .........|......
0xc5,0x7b,0xb0,0x07,0xa5,0xae,0xa4,0xaf,0x4c,0x11,0xa8,0xa0,0x00,0xb1,0xae,0x20, // 0x07f0: .{......L......
0xc5,0x7b,0xb0,0x07,0xa5,0xae,0xa4,0xaf,0x4c,0x11,0xa8,0xa0,0x00,0xb1,0xae,0x20, // 0x07f0: .{......L......
0x9c,0xb0,0xa5,0x9e,0xa4,0x9f,0x85,0xb8,0x84,0xb9,0x20,0x8a,0xb2,0xa9,0xac,0xa0, // 0x0800: .......... .....
0x00,0x85,0x9e,0x84,0x9f,0x20,0xeb,0xb2,0xa0,0x00,0xb1,0x9e,0x91,0x97,0xc8,0xb1, // 0x0810: ..... ..........
0x9e,0x91,0x97,0xc8,0xb1,0x9e,0x91,0x97,0x60,0x20,0xc6,0xa8,0x20,0xc2,0x00,0xf0, // 0x0820: ........` .. ...
@ -200,7 +200,7 @@
0xaf,0x48,0xa5,0xae,0x48,0x8a,0x48,0x20,0xae,0xb3,0x68,0xa8,0x8a,0x48,0x4c,0x56, // 0x0c40: .H..H.H ..h..HLV
0xac,0x20,0xf5,0xab,0x68,0xa8,0xb9,0xde,0x9f,0x85,0xa2,0xb9,0xdf,0x9f,0x85,0xa3, // 0x0c50: . ..h...........
0x20,0xa1,0x00,0x4c,0xb0,0xaa,0xa0,0xff,0x2c,0xa0,0x00,0x84,0x5d,0x20,0x05,0xae, // 0x0c60: ..L....,...] ..
0xa5,0xae,0x45,0x5d,0x85,0x5b,0xa5,0xaf,0x45,0x5d,0x85,0x5c,0x20,0x9b,0xb7,0x20, // 0x0c70: ..E].[..E].\ ..
0xa5,0xae,0x45,0x5d,0x85,0x5b,0xa5,0xaf,0x45,0x5d,0x85,0x5c,0x20,0x9b,0xb7,0x20, // 0x0c70: ..E].[..E].\ ..
0x05,0xae,0xa5,0xaf,0x45,0x5d,0x25,0x5c,0x45,0x5d,0xa8,0xa5,0xae,0x45,0x5d,0x25, // 0x0c80: ....E]%\E]...E]%
0x5b,0x45,0x5d,0x4c,0xc1,0xaf,0x20,0xb3,0xaa,0xb0,0x13,0xa5,0xb7,0x09,0x7f,0x25, // 0x0c90: [E]L.. ........%
0xb4,0x85,0xb4,0xa9,0xb3,0xa0,0x00,0x20,0xf8,0xb7,0xaa,0x4c,0xe1,0xac,0xa9,0x00, // 0x0ca0: ....... ...L....
@ -225,11 +225,11 @@
0xaa,0xc8,0x91,0xaa,0xc8,0x91,0xaa,0xa5,0xaa,0x18,0x69,0x02,0xa4,0xab,0x90,0x01, // 0x0dd0: ..........i.....
0xc8,0x85,0x95,0x84,0x96,0x60,0xa5,0x5d,0x0a,0x69,0x05,0x65,0xaa,0xa4,0xab,0x90, // 0x0de0: .....`.].i.e....
0x01,0xc8,0x85,0xa4,0x84,0xa5,0x60,0x90,0x80,0x00,0x00,0x20,0xbc,0x00,0x20,0xad, // 0x0df0: ......`.... .. .
0xaa,0xa5,0xb0,0x30,0x0d,0xa5,0xac,0xc9,0x90,0x90,0x09,0xa9,0xf7,0xa0,0xad,0x20, // 0x0e00: ...0...........
0xaa,0xa5,0xb0,0x30,0x0d,0xa5,0xac,0xc9,0x90,0x90,0x09,0xa9,0xf7,0xa0,0xad,0x20, // 0x0e00: ...0...........
0xf8,0xb7,0xd0,0x74,0x4c,0x31,0xb8,0xa5,0x5e,0x48,0xa5,0x5f,0x48,0xa0,0x00,0x98, // 0x0e10: ...tL1..^H._H...
0x48,0xa5,0x94,0x48,0xa5,0x93,0x48,0x20,0xfb,0xad,0x68,0x85,0x93,0x68,0x85,0x94, // 0x0e20: H..H..H ..h..h..
0x68,0xa8,0xba,0xbd,0x02,0x01,0x48,0xbd,0x01,0x01,0x48,0xa5,0xae,0x9d,0x02,0x01, // 0x0e30: h.....H...H.....
0xa5,0xaf,0x9d,0x01,0x01,0xc8,0x20,0xc2,0x00,0xc9,0x2c,0xf0,0xd2,0x84,0x5d,0x20, // 0x0e40: ...... ...,...]
0xa5,0xaf,0x9d,0x01,0x01,0xc8,0x20,0xc2,0x00,0xc9,0x2c,0xf0,0xd2,0x84,0x5d,0x20, // 0x0e40: ...... ...,...]
0xfb,0xab,0x68,0x85,0x5f,0x68,0x85,0x5e,0xa6,0x7d,0xa5,0x7e,0x86,0xaa,0x85,0xab, // 0x0e50: ..h._h.^.}.~....
0xc5,0x80,0xd0,0x04,0xe4,0x7f,0xf0,0x39,0xa0,0x00,0xb1,0xaa,0xc8,0xc5,0x93,0xd0, // 0x0e60: .......9........
0x06,0xa5,0x94,0xd1,0xaa,0xf0,0x16,0xc8,0xb1,0xaa,0x18,0x65,0xaa,0xaa,0xc8,0xb1, // 0x0e70: ...........e....
@ -306,12 +306,12 @@
0x81,0x90,0x02,0xe6,0x82,0x68,0x86,0x71,0x84,0x72,0x60,0xc4,0x67,0xd0,0x0c,0xc5, // 0x12e0: .....h.q.r`.g...
0x66,0xd0,0x08,0x85,0x65,0xe9,0x03,0x85,0x66,0xa0,0x00,0x60,0x20,0xb1,0xb3,0x8a, // 0x12f0: f...e...f..` ...
0x48,0xa9,0x01,0x20,0xa4,0xb0,0x68,0xa0,0x00,0x91,0xad,0x68,0x68,0x4c,0xed,0xb0, // 0x1300: H.. ..h....hhL..
0x20,0x6f,0xb3,0xd1,0x9e,0x98,0x90,0x04,0xb1,0x9e,0xaa,0x98,0x48,0x8a,0x48,0x20, // 0x1310: o..........H.H
0x20,0x6f,0xb3,0xd1,0x9e,0x98,0x90,0x04,0xb1,0x9e,0xaa,0x98,0x48,0x8a,0x48,0x20, // 0x1310: o..........H.H
0xa4,0xb0,0xa5,0x9e,0xa4,0x9f,0x20,0xba,0xb2,0x68,0xa8,0x68,0x18,0x65,0x71,0x85, // 0x1320: ...... ..h.h.eq.
0x71,0x90,0x02,0xe6,0x72,0x98,0x20,0x9c,0xb2,0x4c,0xed,0xb0,0x20,0x6f,0xb3,0x18, // 0x1330: q...r. ..L.. o..
0xf1,0x9e,0x49,0xff,0x4c,0x16,0xb3,0xa9,0xff,0x85,0xaf,0x20,0xc2,0x00,0xc9,0x29, // 0x1340: ..I.L...... ...)
0xf0,0x06,0x20,0x01,0xac,0x20,0xae,0xb3,0x20,0x6f,0xb3,0xca,0x8a,0x48,0x18,0xa2, // 0x1350: .. .. .. o...H..
0x00,0xf1,0x9e,0xb0,0xb8,0x49,0xff,0xc5,0xaf,0x90,0xb3,0xa5,0xaf,0xb0,0xaf,0x20, // 0x1360: .....I.........
0x00,0xf1,0x9e,0xb0,0xb8,0x49,0xff,0xc5,0xaf,0x90,0xb3,0xa5,0xaf,0xb0,0xaf,0x20, // 0x1360: .....I.........
0xfb,0xab,0x68,0x85,0xa2,0x68,0x85,0xa3,0x68,0x68,0x68,0xaa,0x68,0x85,0x9e,0x68, // 0x1370: ..h..h..hhh.h..h
0x85,0x9f,0xa0,0x00,0x8a,0xf0,0x21,0xe6,0xa2,0x6c,0xa2,0x00,0x20,0x92,0xb3,0x4c, // 0x1380: ......!..l.. ..L
0xd0,0xaf,0x20,0xb3,0xb2,0xa2,0x00,0x86,0x5f,0xa8,0x60,0x20,0x92,0xb3,0xf0,0x08, // 0x1390: .. ....._.` ....
@ -320,7 +320,7 @@
0xd0,0x03,0x4c,0xf1,0xb4,0xa6,0xc3,0xa4,0xc4,0x86,0xba,0x84,0xbb,0xa6,0x71,0x86, // 0x13c0: ..L...........q.
0xc3,0x18,0x65,0x71,0x85,0x73,0xa6,0x72,0x86,0xc4,0x90,0x01,0xe8,0x86,0x74,0xa0, // 0x13d0: ..eq.s.r......t.
0x00,0xb1,0x73,0x48,0xa9,0x00,0x91,0x73,0x20,0xc2,0x00,0x20,0x87,0xb8,0x68,0xa0, // 0x13e0: ..sH...s .. ..h.
0x00,0x91,0x73,0xa6,0xba,0xa4,0xbb,0x86,0xc3,0x84,0xc4,0x60,0x20,0xad,0xaa,0x20, // 0x13f0: ..s........` ..
0x00,0x91,0x73,0xa6,0xba,0xa4,0xbb,0x86,0xc3,0x84,0xc4,0x60,0x20,0xad,0xaa,0x20, // 0x13f0: ..s........` ..
0x08,0xb4,0x20,0x01,0xac,0x4c,0xae,0xb3,0xa5,0xb0,0x30,0x9c,0xa5,0xac,0xc9,0x91, // 0x1400: .. ..L....0.....
0xb0,0x96,0x20,0x31,0xb8,0xa5,0xae,0xa4,0xaf,0x84,0x11,0x85,0x12,0x60,0x20,0x08, // 0x1410: .. 1.........` .
0xb4,0xa0,0x00,0xb1,0x11,0xa8,0x4c,0xd0,0xaf,0x20,0xfc,0xb3,0x8a,0xa0,0x00,0x91, // 0x1420: ......L.. ......
@ -365,7 +365,7 @@
0xa5,0xb0,0x49,0xff,0x30,0x05,0x68,0x68,0x4c,0xf1,0xb4,0x4c,0x64,0xb5,0x20,0xab, // 0x1690: ..I.0.hhL..Ld. .
0xb7,0xaa,0xf0,0x10,0x18,0x69,0x02,0xb0,0xf2,0xa2,0x00,0x86,0xb8,0x20,0x7c,0xb4, // 0x16a0: .....i....... |.
0xe6,0xac,0xf0,0xe7,0x60,0x84,0x20,0x00,0x00,0x20,0xab,0xb7,0xa9,0xb5,0xa0,0xb6, // 0x16b0: ....`. .. ......
0xa2,0x00,0x86,0xb8,0x20,0x4b,0xb7,0x4c,0xcd,0xb6,0x20,0x4d,0xb6,0xf0,0x68,0x20, // 0x16c0: .... K.L.. M..h
0xa2,0x00,0x86,0xb8,0x20,0x4b,0xb7,0x4c,0xcd,0xb6,0x20,0x4d,0xb6,0xf0,0x68,0x20, // 0x16c0: .... K.L.. M..h
0xba,0xb7,0xa9,0x00,0x38,0xe5,0xac,0x85,0xac,0x20,0x73,0xb6,0xe6,0xac,0xf0,0xbb, // 0x16d0: ....8.... s.....
0xa2,0xfd,0xa9,0x01,0xa4,0xb4,0xc4,0xad,0xd0,0x0a,0xa4,0xb5,0xc4,0xae,0xd0,0x04, // 0x16e0: ................
0xa4,0xb6,0xc4,0xaf,0x08,0x2a,0x90,0x09,0xe8,0x95,0x77,0xf0,0x2a,0x10,0x2c,0xa9, // 0x16f0: .....*....w.*.,.
@ -399,7 +399,7 @@
0xc9,0xa4,0xf0,0x0e,0xc9,0x2d,0xf0,0x0a,0xc9,0xa3,0xf0,0x08,0xc9,0x2b,0xf0,0x04, // 0x18b0: .....-.......+..
0xd0,0x07,0x66,0xab,0x20,0xbc,0x00,0x90,0x5c,0x24,0xab,0x10,0x0e,0xa9,0x00,0x38, // 0x18c0: ..f. ...\$.....8
0xe5,0xa9,0x4c,0xdd,0xb8,0x66,0xaa,0x24,0xaa,0x50,0xc3,0xa5,0xa9,0x38,0xe5,0xa8, // 0x18d0: ..L..f.$.P...8..
0x85,0xa9,0xf0,0x12,0x10,0x09,0x20,0xb9,0xb6,0xe6,0xa9,0xd0,0xf9,0xf0,0x07,0x20, // 0x18e0: ...... ........
0x85,0xa9,0xf0,0x12,0x10,0x09,0x20,0xb9,0xb6,0xe6,0xa9,0xd0,0xf9,0xf0,0x07,0x20, // 0x18e0: ...... ........
0x9e,0xb6,0xc6,0xa9,0xd0,0xf9,0xa5,0xb1,0x30,0x01,0x60,0x4c,0xef,0xba,0x48,0x24, // 0x18f0: ........0.`L..H$
0xaa,0x10,0x02,0xe6,0xa8,0x20,0x9e,0xb6,0x68,0x38,0xe9,0x30,0x20,0x12,0xb9,0x4c, // 0x1900: ..... ..h8.0 ..L
0x9e,0xb8,0x48,0x20,0xab,0xb7,0x68,0x20,0xdb,0xb7,0xa5,0xb7,0x45,0xb0,0x85,0xb8, // 0x1910: ..H ..h ....E...
@ -434,7 +434,7 @@
0xb5,0xa9,0x9c,0xa0,0x00,0x20,0xfb,0xb5,0x20,0x1b,0xbb,0x68,0x4a,0x90,0x0a,0xa5, // 0x1ae0: ..... .. ..hJ...
0xac,0xf0,0x06,0xa5,0xb0,0x49,0xff,0x85,0xb0,0x60,0x81,0x38,0xaa,0x3b,0x06,0x74, // 0x1af0: .....I...`.8.;.t
0x63,0x90,0x8c,0x77,0x23,0x0c,0xab,0x7a,0x1e,0x94,0x00,0x7c,0x63,0x42,0x80,0x7e, // 0x1b00: c..w#..z...|cB.~
0x75,0xfe,0xd0,0x80,0x31,0x72,0x15,0x81,0x00,0x00,0x00,0xa9,0xfa,0xa0,0xba,0x20, // 0x1b10: u...1r.........
0x75,0xfe,0xd0,0x80,0x31,0x72,0x15,0x81,0x00,0x00,0x00,0xa9,0xfa,0xa0,0xba,0x20, // 0x1b10: u...1r.........
0xfb,0xb5,0xa5,0xb9,0x69,0x50,0x90,0x03,0x20,0xc2,0xb7,0x85,0xa3,0x20,0xae,0xb7, // 0x1b20: ....iP.. .... ..
0xa5,0xac,0xc9,0x88,0x90,0x03,0x20,0x90,0xb6,0x20,0x62,0xb8,0xa5,0x5b,0x18,0x69, // 0x1b30: ...... .. b..[.i
0x81,0xf0,0xf3,0x38,0xe9,0x01,0x48,0xa2,0x04,0xb5,0xb3,0xb4,0xac,0x95,0xac,0x94, // 0x1b40: ...8..H.........
@ -449,7 +449,7 @@
0xa9,0xb8,0xa0,0xbb,0x20,0xfb,0xb5,0xa9,0xbc,0xa0,0xbb,0x20,0x6c,0xb4,0xa6,0xaf, // 0x1bd0: .... ...... l...
0xa5,0xad,0x85,0xaf,0x86,0xad,0xa9,0x00,0x85,0xb0,0xa5,0xac,0x85,0xb9,0xa9,0x80, // 0x1be0: ................
0x85,0xac,0x20,0xd5,0xb4,0xa2,0xd4,0xa0,0x00,0x4c,0x78,0xb7,0xa9,0x78,0xa0,0xbc, // 0x1bf0: .. ......Lx..x..
0x20,0x6c,0xb4,0x20,0xab,0xb7,0xa9,0x7c,0xa0,0xbc,0xa6,0xb7,0x20,0xc2,0xb6,0x20, // 0x1c00: l. ...|.... ..
0x20,0x6c,0xb4,0x20,0xab,0xb7,0xa9,0x7c,0xa0,0xbc,0xa6,0xb7,0x20,0xc2,0xb6,0x20, // 0x1c00: l. ...|.... ..
0xab,0xb7,0x20,0x62,0xb8,0xa9,0x00,0x85,0xb8,0x20,0x58,0xb4,0xa9,0x80,0xa0,0xbc, // 0x1c10: .. b..... X.....
0x20,0x55,0xb4,0xa5,0xb0,0x48,0x10,0x0d,0x20,0x4e,0xb4,0xa5,0xb0,0x30,0x09,0xa5, // 0x1c20: U...H.. N...0..
0x63,0x49,0xff,0x85,0x63,0x20,0xef,0xba,0xa9,0x80,0xa0,0xbc,0x20,0x6c,0xb4,0x68, // 0x1c30: cI..c ...... l.h
@ -460,7 +460,7 @@
0x7f,0x00,0x00,0x00,0x04,0x86,0x1e,0xd7,0xfb,0x87,0x99,0x26,0x65,0x87,0x23,0x34, // 0x1c80: ...........&e.#4
0x58,0x86,0xa5,0x5d,0xe1,0x83,0x49,0x0f,0xdb,0xa5,0xb0,0x48,0x10,0x03,0x20,0xef, // 0x1c90: X..]..I....H.. .
0xba,0xa5,0xac,0x48,0xc9,0x81,0x90,0x07,0xa9,0x9c,0xa0,0xb5,0x20,0xca,0xb6,0xa9, // 0x1ca0: ...H........ ...
0xc9,0xa0,0xbc,0x20,0x6e,0xbb,0x68,0xc9,0x81,0x90,0x07,0xa9,0x78,0xa0,0xbc,0x20, // 0x1cb0: ... n.h.....x..
0xc9,0xa0,0xbc,0x20,0x6e,0xbb,0x68,0xc9,0x81,0x90,0x07,0xa9,0x78,0xa0,0xbc,0x20, // 0x1cb0: ... n.h.....x..
0x55,0xb4,0x68,0x10,0x03,0x4c,0xef,0xba,0x60,0x08,0x78,0x3a,0xc5,0x37,0x7b,0x83, // 0x1cc0: U.h..L..`.x:.7{.
0xa2,0x5c,0x7c,0x2e,0xdd,0x4d,0x7d,0x99,0xb0,0x1e,0x7d,0x59,0xed,0x24,0x7e,0x91, // 0x1cd0: .\|..M}...}Y.$~.
0x72,0x00,0x7e,0x4c,0xb9,0x73,0x7f,0xaa,0xaa,0x53,0x81,0x00,0x00,0x00,0xe6,0xc3, // 0x1ce0: r.~L.s...S......
@ -472,7 +472,7 @@
0x85,0x0b,0x84,0x0c,0xa9,0x48,0x85,0x0f,0xa9,0x38,0x85,0x10,0xa2,0x1c,0xbd,0xed, // 0x1d40: .....H...8......
0xbc,0x95,0xbb,0xca,0xd0,0xf8,0x8a,0x85,0xb2,0x85,0x67,0x85,0x0d,0x85,0x0e,0x48, // 0x1d50: ..........g....H
0x85,0x64,0xa9,0x03,0x85,0xa0,0xa9,0x2c,0x85,0x12,0x20,0x6c,0xa8,0xa2,0x68,0x86, // 0x1d60: .d.....,.. l..h.
0x65,0xa9,0x72,0xa0,0xbe,0x20,0xc3,0xa8,0x20,0x46,0xa9,0x86,0xc3,0x84,0xc4,0x20, // 0x1d70: e.r.. .. F.....
0x65,0xa9,0x72,0xa0,0xbe,0x20,0xc3,0xa8,0x20,0x46,0xa9,0x86,0xc3,0x84,0xc4,0x20, // 0x1d70: e.r.. .. F.....
0xbc,0x00,0xc9,0x41,0xf0,0x84,0xa8,0xd0,0x21,0xa9,0x00,0xa0,0x03,0x85,0x11,0x84, // 0x1d80: ...A....!.......
0x12,0xa0,0x00,0xe6,0x11,0xd0,0x02,0xe6,0x12,0xa9,0x92,0x91,0x11,0xd1,0x11,0xd0, // 0x1d90: ................
0x15,0x0a,0x91,0x11,0xd1,0x11,0xf0,0xeb,0xd0,0x0c,0x20,0xc2,0x00,0x20,0x7f,0xa7, // 0x1da0: .......... .. ..
@ -490,7 +490,7 @@
0x41,0x52,0x44,0x20,0x57,0x2e,0x20,0x57,0x45,0x49,0x4c,0x41,0x4e,0x44,0x2e,0x0d, // 0x1e60: ARD W. WEILAND..
0x0a,0x00,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x53,0x49,0x5a,0x45,0x00,0x54,0x45, // 0x1e70: ..MEMORY SIZE.TE
0x52,0x4d,0x49,0x4e,0x41,0x4c,0x20,0x57,0x49,0x44,0x54,0x48,0x00,0x20,0x42,0x59, // 0x1e80: RMINAL WIDTH. BY
0x54,0x45,0x53,0x20,0x46,0x52,0x45,0x45,0x0d,0x0a,0x0d,0x0a,0x4f,0x53,0x49,0x20, // 0x1e90: TES FREE....OSI
0x54,0x45,0x53,0x20,0x46,0x52,0x45,0x45,0x0d,0x0a,0x0d,0x0a,0x4f,0x53,0x49,0x20, // 0x1e90: TES FREE....OSI
0x36,0x35,0x30,0x32,0x20,0x42,0x41,0x53,0x49,0x43,0x20,0x56,0x45,0x52,0x53,0x49, // 0x1ea0: 6502 BASIC VERSI
0x4f,0x4e,0x20,0x31,0x2e,0x30,0x20,0x52,0x45,0x56,0x20,0x33,0x2e,0x32,0x0d,0x0a, // 0x1eb0: ON 1.0 REV 3.2..
0x43,0x4f,0x50,0x59,0x52,0x49,0x47,0x48,0x54,0x20,0x31,0x39,0x37,0x37,0x20,0x42, // 0x1ec0: COPYRIGHT 1977 B
@ -501,7 +501,7 @@
0xf0,0xf5,0x29,0x7f,0x60,0x48,0xad,0x00,0xfc,0x4a,0x4a,0x90,0xf9,0x68,0x8d,0x01, // 0x1f10: ..).`H...JJ..h..
0xfc,0x60,0xa9,0x03,0x8d,0x00,0xfc,0xa9,0xb1,0x8d,0x00,0xfc,0x60,0x8d,0x02,0x02, // 0x1f20: .`..........`...
0x48,0x8a,0x48,0x98,0x48,0xad,0x02,0x02,0xf0,0x33,0xac,0x06,0x02,0xf0,0x08,0xa2, // 0x1f30: H.H.H....3......
0x40,0xca,0xd0,0xfd,0x88,0xd0,0xf8,0xc9,0x0a,0xf0,0x2b,0xc9,0x0d,0xd0,0x06,0x20, // 0x1f40: @.........+....
0x40,0xca,0xd0,0xfd,0x88,0xd0,0xf8,0xc9,0x0a,0xf0,0x2b,0xc9,0x0d,0xd0,0x06,0x20, // 0x1f40: @.........+....
0xd5,0xbf,0x4c,0x6d,0xbf,0x8d,0x01,0x02,0x20,0xc2,0xbf,0xee,0x00,0x02,0xad,0xe1, // 0x1f50: ..Lm.... .......
0xff,0x18,0x6d,0xe0,0xff,0xcd,0x00,0x02,0x30,0x09,0x20,0xde,0xbf,0x68,0xa8,0x68, // 0x1f60: ..m.....0. ..h.h
0xaa,0x68,0x60,0x20,0xd8,0xbf,0x20,0xc2,0xbf,0xad,0xe0,0xff,0x29,0xe0,0x8d,0x02, // 0x1f70: .h` .. .....)...

View file

@ -1,5 +1,5 @@
/*
* Contents of ROM image: http://www.pcjs.org/devices/c1p/roms/basic.rom
* Contents of ROM image: http://archive.pcjs.org/devices/c1p/rom/basic.rom
*/
[0x39,0xa6,0x55,0xa5,0x3f,0xaa,0x0b,0xa7,0x22,0xa9,0x00,0xad,0x4e,0xa9,0xb8,0xa7, // 0x0000: 9.U.?..."...N...
0xb8,0xa6,0x90,0xa6,0x3b,0xa7,0x19,0xa6,0x9b,0xa6,0xe5,0xa6,0x4e,0xa7,0x37,0xa6, // 0x0010: ....;.......N.7.
@ -29,7 +29,7 @@
0x20,0x00,0x0d,0x0a,0x4f,0x4b,0x0d,0x0a,0x00,0x0d,0x0a,0x42,0x52,0x45,0x41,0x4b, // 0x0190: ...OK.....BREAK
0x00,0xba,0xe8,0xe8,0xe8,0xe8,0xbd,0x01,0x01,0xc9,0x81,0xd0,0x21,0xa5,0x98,0xd0, // 0x01a0: ............!...
0x0a,0xbd,0x02,0x01,0x85,0x97,0xbd,0x03,0x01,0x85,0x98,0xdd,0x03,0x01,0xd0,0x07, // 0x01b0: ................
0xa5,0x97,0xdd,0x02,0x01,0xf0,0x07,0x8a,0x18,0x69,0x10,0xaa,0xd0,0xd8,0x60,0x20, // 0x01c0: .........i....`
0xa5,0x97,0xdd,0x02,0x01,0xf0,0x07,0x8a,0x18,0x69,0x10,0xaa,0xd0,0xd8,0x60,0x20, // 0x01c0: .........i....`
0x1f,0xa2,0x85,0x7f,0x84,0x80,0x38,0xa5,0xa6,0xe5,0xaa,0x85,0x71,0xa8,0xa5,0xa7, // 0x01d0: ......8.....q...
0xe5,0xab,0xaa,0xe8,0x98,0xf0,0x23,0xa5,0xa6,0x38,0xe5,0x71,0x85,0xa6,0xb0,0x03, // 0x01e0: ......#..8.q....
0xc6,0xa7,0x38,0xa5,0xa4,0xe5,0x71,0x85,0xa4,0xb0,0x08,0xc6,0xa5,0x90,0x04,0xb1, // 0x01f0: ..8...q.........
@ -38,10 +38,10 @@
0x82,0x90,0x28,0xd0,0x04,0xc5,0x81,0x90,0x22,0x48,0xa2,0x08,0x98,0x48,0xb5,0xa3, // 0x0220: ..(....."H...H..
0xca,0x10,0xfa,0x20,0x47,0xb1,0xa2,0xf8,0x68,0x95,0xac,0xe8,0x30,0xfa,0x68,0xa8, // 0x0230: ... G...h...0.h.
0x68,0xc4,0x82,0x90,0x06,0xd0,0x05,0xc5,0x81,0xb0,0x01,0x60,0xa2,0x0c,0x46,0x64, // 0x0240: h..........`..Fd
0x20,0x6c,0xa8,0x20,0xe3,0xa8,0xbd,0x64,0xa1,0x20,0xe5,0xa8,0xbd,0x65,0xa1,0x20, // 0x0250: l. ...d. ...e.
0x20,0x6c,0xa8,0x20,0xe3,0xa8,0xbd,0x64,0xa1,0x20,0xe5,0xa8,0xbd,0x65,0xa1,0x20, // 0x0250: l. ...d. ...e.
0xe5,0xa8,0x20,0x91,0xa4,0xa9,0x86,0xa0,0xa1,0x20,0xc3,0xa8,0xa4,0x88,0xc8,0xf0, // 0x0260: .. ...... ......
0x03,0x20,0x53,0xb9,0x46,0x64,0xa9,0x92,0xa0,0xa1,0x20,0x03,0x00,0x20,0x57,0xa3, // 0x0270: . S.Fd.... .. W.
0x86,0xc3,0x84,0xc4,0x20,0xbc,0x00,0xf0,0xf4,0xa2,0xff,0x86,0x88,0x90,0x06,0x20, // 0x0280: .... ..........
0x86,0xc3,0x84,0xc4,0x20,0xbc,0x00,0xf0,0xf4,0xa2,0xff,0x86,0x88,0x90,0x06,0x20, // 0x0280: .... ..........
0xa6,0xa3,0x4c,0xf6,0xa5,0x20,0x7f,0xa7,0x20,0xa6,0xa3,0x84,0x5d,0x20,0x32,0xa4, // 0x0290: ..L.. .. ...] 2.
0x90,0x44,0xa0,0x01,0xb1,0xaa,0x85,0x72,0xa5,0x7b,0x85,0x71,0xa5,0xab,0x85,0x74, // 0x02a0: .D.....r.{.q...t
0xa5,0xaa,0x88,0xf1,0xaa,0x18,0x65,0x7b,0x85,0x7b,0x85,0x73,0xa5,0x7c,0x69,0xff, // 0x02b0: ......e{.{.s.|i.
@ -59,7 +59,7 @@
0xc9,0x5f,0xf0,0xd7,0xe0,0x47,0xb0,0x04,0x95,0x13,0xe8,0x2c,0xa9,0x07,0x20,0xe5, // 0x0370: ._...G.....,.. .
0xa8,0xd0,0xd6,0x4c,0x66,0xa8,0x20,0xeb,0xff,0xea,0xea,0xea,0xea,0xea,0xea,0xea, // 0x0380: ...Lf. .........
0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x29,0x7f,0xc9,0x0f,0xd0,0x08,0x48,0xa5,0x64, // 0x0390: .......).....H.d
0x49,0xff,0x85,0x64,0x68,0x60,0xa6,0xc3,0xa0,0x04,0x84,0x60,0xb5,0x00,0xc9,0x20, // 0x03a0: I..dh`.....`...
0x49,0xff,0x85,0x64,0x68,0x60,0xa6,0xc3,0xa0,0x04,0x84,0x60,0xb5,0x00,0xc9,0x20, // 0x03a0: I..dh`.....`...
0xf0,0x3a,0x85,0x5c,0xc9,0x22,0xf0,0x58,0x24,0x60,0x70,0x30,0xc9,0x3f,0xd0,0x04, // 0x03b0: .:.\.".X$`p0.?..
0xa9,0x97,0xd0,0x28,0xc9,0x30,0x90,0x04,0xc9,0x3c,0x90,0x20,0x84,0xba,0xa0,0x00, // 0x03c0: ...(.0...<. ....
0x84,0x5d,0x88,0x86,0xc3,0xca,0xc8,0xe8,0xb5,0x00,0xc9,0x20,0xf0,0xf9,0x38,0xf9, // 0x03d0: .]......... ..8.
@ -77,7 +77,7 @@
0xa6,0xa2,0x68,0x86,0x65,0x68,0x8d,0xfd,0x01,0x68,0x8d,0xfe,0x01,0xa2,0xfc,0x9a, // 0x0490: ..h.eh...h......
0xa9,0x00,0x85,0x8c,0x85,0x61,0x60,0x18,0xa5,0x79,0x69,0xff,0x85,0xc3,0xa5,0x7a, // 0x04a0: .....a`..yi....z
0x69,0xff,0x85,0xc4,0x60,0x90,0x06,0xf0,0x04,0xc9,0xa4,0xd0,0xe9,0x20,0x7f,0xa7, // 0x04b0: i...`........ ..
0x20,0x32,0xa4,0x20,0xc2,0x00,0xf0,0x0c,0xc9,0xa4,0xd0,0x94,0x20,0xbc,0x00,0x20, // 0x04c0: 2. ........ ..
0x20,0x32,0xa4,0x20,0xc2,0x00,0xf0,0x0c,0xc9,0xa4,0xd0,0x94,0x20,0xbc,0x00,0x20, // 0x04c0: 2. ........ ..
0x7f,0xa7,0xd0,0x8c,0x68,0x68,0xa5,0x11,0x05,0x12,0xd0,0x06,0xa9,0xff,0x85,0x11, // 0x04d0: ....hh..........
0x85,0x12,0xa0,0x01,0x84,0x60,0xb1,0xaa,0xf0,0x41,0x20,0x29,0xa6,0x20,0x6c,0xa8, // 0x04e0: .....`...A ). l.
0xc8,0xb1,0xaa,0xaa,0xc8,0xb1,0xaa,0xc5,0x12,0xd0,0x04,0xe4,0x11,0xf0,0x02,0xb0, // 0x04f0: ................
@ -116,9 +116,9 @@
0x68,0x85,0x87,0x68,0x85,0x88,0x68,0x85,0xc3,0x68,0x85,0xc4,0x20,0x1a,0xa7,0x98, // 0x0700: h..h..h..h.. ...
0x18,0x65,0xc3,0x85,0xc3,0x90,0x02,0xe6,0xc4,0x60,0xa2,0x3a,0x2c,0xa2,0x00,0x86, // 0x0710: .e.......`.:,...
0x5b,0xa0,0x00,0x84,0x5c,0xa5,0x5c,0xa6,0x5b,0x85,0x5b,0x86,0x5c,0xb1,0xc3,0xf0, // 0x0720: [...\.\.[.[.\...
0xe8,0xc5,0x5c,0xf0,0xe4,0xc8,0xc9,0x22,0xf0,0xeb,0xd0,0xf1,0x20,0xc1,0xaa,0x20, // 0x0730: ..\....".... ..
0xc2,0x00,0xc9,0x88,0xf0,0x05,0xa9,0xa0,0x20,0x03,0xac,0xa5,0xac,0xd0,0x05,0x20, // 0x0740: ........ ......
0x1d,0xa7,0xf0,0xbb,0x20,0xc2,0x00,0xb0,0x03,0x4c,0xb9,0xa6,0x4c,0xff,0xa5,0x20, // 0x0750: .... ....L..L..
0xe8,0xc5,0x5c,0xf0,0xe4,0xc8,0xc9,0x22,0xf0,0xeb,0xd0,0xf1,0x20,0xc1,0xaa,0x20, // 0x0730: ..\....".... ..
0xc2,0x00,0xc9,0x88,0xf0,0x05,0xa9,0xa0,0x20,0x03,0xac,0xa5,0xac,0xd0,0x05,0x20, // 0x0740: ........ ......
0x1d,0xa7,0xf0,0xbb,0x20,0xc2,0x00,0xb0,0x03,0x4c,0xb9,0xa6,0x4c,0xff,0xa5,0x20, // 0x0750: .... ....L..L..
0xae,0xb3,0x48,0xc9,0x8c,0xf0,0x04,0xc9,0x88,0xd0,0x91,0xc6,0xaf,0xd0,0x04,0x68, // 0x0760: ..H............h
0x4c,0x02,0xa6,0x20,0xbc,0x00,0x20,0x7f,0xa7,0xc9,0x2c,0xf0,0xee,0x68,0x60,0xa2, // 0x0770: L.. .. ...,..h`.
0x00,0x86,0x11,0x86,0x12,0xb0,0xf7,0xe9,0x2f,0x85,0x5b,0xa5,0x12,0x85,0x71,0xc9, // 0x0780: ......../.[...q.
@ -128,7 +128,7 @@
0xa9,0xab,0x20,0x03,0xac,0xa5,0x5f,0x48,0x20,0xc1,0xaa,0x68,0x2a,0x20,0xb3,0xaa, // 0x07c0: .. ..._H ..h* ..
0xd0,0x03,0x4c,0x74,0xb7,0xa0,0x02,0xb1,0xae,0xc5,0x82,0x90,0x17,0xd0,0x07,0x88, // 0x07d0: ..Lt............
0xb1,0xae,0xc5,0x81,0x90,0x0e,0xa4,0xaf,0xc4,0x7c,0x90,0x08,0xd0,0x0d,0xa5,0xae, // 0x07e0: .........|......
0xc5,0x7b,0xb0,0x07,0xa5,0xae,0xa4,0xaf,0x4c,0x11,0xa8,0xa0,0x00,0xb1,0xae,0x20, // 0x07f0: .{......L......
0xc5,0x7b,0xb0,0x07,0xa5,0xae,0xa4,0xaf,0x4c,0x11,0xa8,0xa0,0x00,0xb1,0xae,0x20, // 0x07f0: .{......L......
0x9c,0xb0,0xa5,0x9e,0xa4,0x9f,0x85,0xb8,0x84,0xb9,0x20,0x8a,0xb2,0xa9,0xac,0xa0, // 0x0800: .......... .....
0x00,0x85,0x9e,0x84,0x9f,0x20,0xeb,0xb2,0xa0,0x00,0xb1,0x9e,0x91,0x97,0xc8,0xb1, // 0x0810: ..... ..........
0x9e,0x91,0x97,0xc8,0xb1,0x9e,0x91,0x97,0x60,0x20,0xc6,0xa8,0x20,0xc2,0x00,0xf0, // 0x0820: ........` .. ...
@ -200,7 +200,7 @@
0xaf,0x48,0xa5,0xae,0x48,0x8a,0x48,0x20,0xae,0xb3,0x68,0xa8,0x8a,0x48,0x4c,0x56, // 0x0c40: .H..H.H ..h..HLV
0xac,0x20,0xf5,0xab,0x68,0xa8,0xb9,0xde,0x9f,0x85,0xa2,0xb9,0xdf,0x9f,0x85,0xa3, // 0x0c50: . ..h...........
0x20,0xa1,0x00,0x4c,0xb0,0xaa,0xa0,0xff,0x2c,0xa0,0x00,0x84,0x5d,0x20,0x05,0xae, // 0x0c60: ..L....,...] ..
0xa5,0xae,0x45,0x5d,0x85,0x5b,0xa5,0xaf,0x45,0x5d,0x85,0x5c,0x20,0x9b,0xb7,0x20, // 0x0c70: ..E].[..E].\ ..
0xa5,0xae,0x45,0x5d,0x85,0x5b,0xa5,0xaf,0x45,0x5d,0x85,0x5c,0x20,0x9b,0xb7,0x20, // 0x0c70: ..E].[..E].\ ..
0x05,0xae,0xa5,0xaf,0x45,0x5d,0x25,0x5c,0x45,0x5d,0xa8,0xa5,0xae,0x45,0x5d,0x25, // 0x0c80: ....E]%\E]...E]%
0x5b,0x45,0x5d,0x4c,0xc1,0xaf,0x20,0xb3,0xaa,0xb0,0x13,0xa5,0xb7,0x09,0x7f,0x25, // 0x0c90: [E]L.. ........%
0xb4,0x85,0xb4,0xa9,0xb3,0xa0,0x00,0x20,0xf8,0xb7,0xaa,0x4c,0xe1,0xac,0xa9,0x00, // 0x0ca0: ....... ...L....
@ -225,11 +225,11 @@
0xaa,0xc8,0x91,0xaa,0xc8,0x91,0xaa,0xa5,0xaa,0x18,0x69,0x02,0xa4,0xab,0x90,0x01, // 0x0dd0: ..........i.....
0xc8,0x85,0x95,0x84,0x96,0x60,0xa5,0x5d,0x0a,0x69,0x05,0x65,0xaa,0xa4,0xab,0x90, // 0x0de0: .....`.].i.e....
0x01,0xc8,0x85,0xa4,0x84,0xa5,0x60,0x90,0x80,0x00,0x00,0x20,0xbc,0x00,0x20,0xad, // 0x0df0: ......`.... .. .
0xaa,0xa5,0xb0,0x30,0x0d,0xa5,0xac,0xc9,0x90,0x90,0x09,0xa9,0xf7,0xa0,0xad,0x20, // 0x0e00: ...0...........
0xaa,0xa5,0xb0,0x30,0x0d,0xa5,0xac,0xc9,0x90,0x90,0x09,0xa9,0xf7,0xa0,0xad,0x20, // 0x0e00: ...0...........
0xf8,0xb7,0xd0,0x74,0x4c,0x31,0xb8,0xa5,0x5e,0x48,0xa5,0x5f,0x48,0xa0,0x00,0x98, // 0x0e10: ...tL1..^H._H...
0x48,0xa5,0x94,0x48,0xa5,0x93,0x48,0x20,0xfb,0xad,0x68,0x85,0x93,0x68,0x85,0x94, // 0x0e20: H..H..H ..h..h..
0x68,0xa8,0xba,0xbd,0x02,0x01,0x48,0xbd,0x01,0x01,0x48,0xa5,0xae,0x9d,0x02,0x01, // 0x0e30: h.....H...H.....
0xa5,0xaf,0x9d,0x01,0x01,0xc8,0x20,0xc2,0x00,0xc9,0x2c,0xf0,0xd2,0x84,0x5d,0x20, // 0x0e40: ...... ...,...]
0xa5,0xaf,0x9d,0x01,0x01,0xc8,0x20,0xc2,0x00,0xc9,0x2c,0xf0,0xd2,0x84,0x5d,0x20, // 0x0e40: ...... ...,...]
0xfb,0xab,0x68,0x85,0x5f,0x68,0x85,0x5e,0xa6,0x7d,0xa5,0x7e,0x86,0xaa,0x85,0xab, // 0x0e50: ..h._h.^.}.~....
0xc5,0x80,0xd0,0x04,0xe4,0x7f,0xf0,0x39,0xa0,0x00,0xb1,0xaa,0xc8,0xc5,0x93,0xd0, // 0x0e60: .......9........
0x06,0xa5,0x94,0xd1,0xaa,0xf0,0x16,0xc8,0xb1,0xaa,0x18,0x65,0xaa,0xaa,0xc8,0xb1, // 0x0e70: ...........e....
@ -306,12 +306,12 @@
0x81,0x90,0x02,0xe6,0x82,0x68,0x86,0x71,0x84,0x72,0x60,0xc4,0x67,0xd0,0x0c,0xc5, // 0x12e0: .....h.q.r`.g...
0x66,0xd0,0x08,0x85,0x65,0xe9,0x03,0x85,0x66,0xa0,0x00,0x60,0x20,0xb1,0xb3,0x8a, // 0x12f0: f...e...f..` ...
0x48,0xa9,0x01,0x20,0xa4,0xb0,0x68,0xa0,0x00,0x91,0xad,0x68,0x68,0x4c,0xed,0xb0, // 0x1300: H.. ..h....hhL..
0x20,0x6f,0xb3,0xd1,0x9e,0x98,0x90,0x04,0xb1,0x9e,0xaa,0x98,0x48,0x8a,0x48,0x20, // 0x1310: o..........H.H
0x20,0x6f,0xb3,0xd1,0x9e,0x98,0x90,0x04,0xb1,0x9e,0xaa,0x98,0x48,0x8a,0x48,0x20, // 0x1310: o..........H.H
0xa4,0xb0,0xa5,0x9e,0xa4,0x9f,0x20,0xba,0xb2,0x68,0xa8,0x68,0x18,0x65,0x71,0x85, // 0x1320: ...... ..h.h.eq.
0x71,0x90,0x02,0xe6,0x72,0x98,0x20,0x9c,0xb2,0x4c,0xed,0xb0,0x20,0x6f,0xb3,0x18, // 0x1330: q...r. ..L.. o..
0xf1,0x9e,0x49,0xff,0x4c,0x16,0xb3,0xa9,0xff,0x85,0xaf,0x20,0xc2,0x00,0xc9,0x29, // 0x1340: ..I.L...... ...)
0xf0,0x06,0x20,0x01,0xac,0x20,0xae,0xb3,0x20,0x6f,0xb3,0xca,0x8a,0x48,0x18,0xa2, // 0x1350: .. .. .. o...H..
0x00,0xf1,0x9e,0xb0,0xb8,0x49,0xff,0xc5,0xaf,0x90,0xb3,0xa5,0xaf,0xb0,0xaf,0x20, // 0x1360: .....I.........
0x00,0xf1,0x9e,0xb0,0xb8,0x49,0xff,0xc5,0xaf,0x90,0xb3,0xa5,0xaf,0xb0,0xaf,0x20, // 0x1360: .....I.........
0xfb,0xab,0x68,0x85,0xa2,0x68,0x85,0xa3,0x68,0x68,0x68,0xaa,0x68,0x85,0x9e,0x68, // 0x1370: ..h..h..hhh.h..h
0x85,0x9f,0xa0,0x00,0x8a,0xf0,0x21,0xe6,0xa2,0x6c,0xa2,0x00,0x20,0x92,0xb3,0x4c, // 0x1380: ......!..l.. ..L
0xd0,0xaf,0x20,0xb3,0xb2,0xa2,0x00,0x86,0x5f,0xa8,0x60,0x20,0x92,0xb3,0xf0,0x08, // 0x1390: .. ....._.` ....
@ -320,7 +320,7 @@
0xd0,0x03,0x4c,0xf1,0xb4,0xa6,0xc3,0xa4,0xc4,0x86,0xba,0x84,0xbb,0xa6,0x71,0x86, // 0x13c0: ..L...........q.
0xc3,0x18,0x65,0x71,0x85,0x73,0xa6,0x72,0x86,0xc4,0x90,0x01,0xe8,0x86,0x74,0xa0, // 0x13d0: ..eq.s.r......t.
0x00,0xb1,0x73,0x48,0xa9,0x00,0x91,0x73,0x20,0xc2,0x00,0x20,0x87,0xb8,0x68,0xa0, // 0x13e0: ..sH...s .. ..h.
0x00,0x91,0x73,0xa6,0xba,0xa4,0xbb,0x86,0xc3,0x84,0xc4,0x60,0x20,0xad,0xaa,0x20, // 0x13f0: ..s........` ..
0x00,0x91,0x73,0xa6,0xba,0xa4,0xbb,0x86,0xc3,0x84,0xc4,0x60,0x20,0xad,0xaa,0x20, // 0x13f0: ..s........` ..
0x08,0xb4,0x20,0x01,0xac,0x4c,0xae,0xb3,0xa5,0xb0,0x30,0x9c,0xa5,0xac,0xc9,0x91, // 0x1400: .. ..L....0.....
0xb0,0x96,0x20,0x31,0xb8,0xa5,0xae,0xa4,0xaf,0x84,0x11,0x85,0x12,0x60,0x20,0x08, // 0x1410: .. 1.........` .
0xb4,0xa0,0x00,0xb1,0x11,0xa8,0x4c,0xd0,0xaf,0x20,0xfc,0xb3,0x8a,0xa0,0x00,0x91, // 0x1420: ......L.. ......
@ -365,7 +365,7 @@
0xa5,0xb0,0x49,0xff,0x30,0x05,0x68,0x68,0x4c,0xf1,0xb4,0x4c,0x64,0xb5,0x20,0xab, // 0x1690: ..I.0.hhL..Ld. .
0xb7,0xaa,0xf0,0x10,0x18,0x69,0x02,0xb0,0xf2,0xa2,0x00,0x86,0xb8,0x20,0x7c,0xb4, // 0x16a0: .....i....... |.
0xe6,0xac,0xf0,0xe7,0x60,0x84,0x20,0x00,0x00,0x20,0xab,0xb7,0xa9,0xb5,0xa0,0xb6, // 0x16b0: ....`. .. ......
0xa2,0x00,0x86,0xb8,0x20,0x4b,0xb7,0x4c,0xcd,0xb6,0x20,0x4d,0xb6,0xf0,0x68,0x20, // 0x16c0: .... K.L.. M..h
0xa2,0x00,0x86,0xb8,0x20,0x4b,0xb7,0x4c,0xcd,0xb6,0x20,0x4d,0xb6,0xf0,0x68,0x20, // 0x16c0: .... K.L.. M..h
0xba,0xb7,0xa9,0x00,0x38,0xe5,0xac,0x85,0xac,0x20,0x73,0xb6,0xe6,0xac,0xf0,0xbb, // 0x16d0: ....8.... s.....
0xa2,0xfd,0xa9,0x01,0xa4,0xb4,0xc4,0xad,0xd0,0x0a,0xa4,0xb5,0xc4,0xae,0xd0,0x04, // 0x16e0: ................
0xa4,0xb6,0xc4,0xaf,0x08,0x2a,0x90,0x09,0xe8,0x95,0x77,0xf0,0x2a,0x10,0x2c,0xa9, // 0x16f0: .....*....w.*.,.
@ -399,7 +399,7 @@
0xc9,0xa4,0xf0,0x0e,0xc9,0x2d,0xf0,0x0a,0xc9,0xa3,0xf0,0x08,0xc9,0x2b,0xf0,0x04, // 0x18b0: .....-.......+..
0xd0,0x07,0x66,0xab,0x20,0xbc,0x00,0x90,0x5c,0x24,0xab,0x10,0x0e,0xa9,0x00,0x38, // 0x18c0: ..f. ...\$.....8
0xe5,0xa9,0x4c,0xdd,0xb8,0x66,0xaa,0x24,0xaa,0x50,0xc3,0xa5,0xa9,0x38,0xe5,0xa8, // 0x18d0: ..L..f.$.P...8..
0x85,0xa9,0xf0,0x12,0x10,0x09,0x20,0xb9,0xb6,0xe6,0xa9,0xd0,0xf9,0xf0,0x07,0x20, // 0x18e0: ...... ........
0x85,0xa9,0xf0,0x12,0x10,0x09,0x20,0xb9,0xb6,0xe6,0xa9,0xd0,0xf9,0xf0,0x07,0x20, // 0x18e0: ...... ........
0x9e,0xb6,0xc6,0xa9,0xd0,0xf9,0xa5,0xb1,0x30,0x01,0x60,0x4c,0xef,0xba,0x48,0x24, // 0x18f0: ........0.`L..H$
0xaa,0x10,0x02,0xe6,0xa8,0x20,0x9e,0xb6,0x68,0x38,0xe9,0x30,0x20,0x12,0xb9,0x4c, // 0x1900: ..... ..h8.0 ..L
0x9e,0xb8,0x48,0x20,0xab,0xb7,0x68,0x20,0xdb,0xb7,0xa5,0xb7,0x45,0xb0,0x85,0xb8, // 0x1910: ..H ..h ....E...
@ -434,7 +434,7 @@
0xb5,0xa9,0x9c,0xa0,0x00,0x20,0xfb,0xb5,0x20,0x1b,0xbb,0x68,0x4a,0x90,0x0a,0xa5, // 0x1ae0: ..... .. ..hJ...
0xac,0xf0,0x06,0xa5,0xb0,0x49,0xff,0x85,0xb0,0x60,0x81,0x38,0xaa,0x3b,0x06,0x74, // 0x1af0: .....I...`.8.;.t
0x63,0x90,0x8c,0x77,0x23,0x0c,0xab,0x7a,0x1e,0x94,0x00,0x7c,0x63,0x42,0x80,0x7e, // 0x1b00: c..w#..z...|cB.~
0x75,0xfe,0xd0,0x80,0x31,0x72,0x15,0x81,0x00,0x00,0x00,0xa9,0xfa,0xa0,0xba,0x20, // 0x1b10: u...1r.........
0x75,0xfe,0xd0,0x80,0x31,0x72,0x15,0x81,0x00,0x00,0x00,0xa9,0xfa,0xa0,0xba,0x20, // 0x1b10: u...1r.........
0xfb,0xb5,0xa5,0xb9,0x69,0x50,0x90,0x03,0x20,0xc2,0xb7,0x85,0xa3,0x20,0xae,0xb7, // 0x1b20: ....iP.. .... ..
0xa5,0xac,0xc9,0x88,0x90,0x03,0x20,0x90,0xb6,0x20,0x62,0xb8,0xa5,0x5b,0x18,0x69, // 0x1b30: ...... .. b..[.i
0x81,0xf0,0xf3,0x38,0xe9,0x01,0x48,0xa2,0x04,0xb5,0xb3,0xb4,0xac,0x95,0xac,0x94, // 0x1b40: ...8..H.........
@ -449,7 +449,7 @@
0xa9,0xb8,0xa0,0xbb,0x20,0xfb,0xb5,0xa9,0xbc,0xa0,0xbb,0x20,0x6c,0xb4,0xa6,0xaf, // 0x1bd0: .... ...... l...
0xa5,0xad,0x85,0xaf,0x86,0xad,0xa9,0x00,0x85,0xb0,0xa5,0xac,0x85,0xb9,0xa9,0x80, // 0x1be0: ................
0x85,0xac,0x20,0xd5,0xb4,0xa2,0xd4,0xa0,0x00,0x4c,0x78,0xb7,0xa9,0x78,0xa0,0xbc, // 0x1bf0: .. ......Lx..x..
0x20,0x6c,0xb4,0x20,0xab,0xb7,0xa9,0x7c,0xa0,0xbc,0xa6,0xb7,0x20,0xc2,0xb6,0x20, // 0x1c00: l. ...|.... ..
0x20,0x6c,0xb4,0x20,0xab,0xb7,0xa9,0x7c,0xa0,0xbc,0xa6,0xb7,0x20,0xc2,0xb6,0x20, // 0x1c00: l. ...|.... ..
0xab,0xb7,0x20,0x62,0xb8,0xa9,0x00,0x85,0xb8,0x20,0x58,0xb4,0xa9,0x80,0xa0,0xbc, // 0x1c10: .. b..... X.....
0x20,0x55,0xb4,0xa5,0xb0,0x48,0x10,0x0d,0x20,0x4e,0xb4,0xa5,0xb0,0x30,0x09,0xa5, // 0x1c20: U...H.. N...0..
0x63,0x49,0xff,0x85,0x63,0x20,0xef,0xba,0xa9,0x80,0xa0,0xbc,0x20,0x6c,0xb4,0x68, // 0x1c30: cI..c ...... l.h
@ -460,7 +460,7 @@
0x7f,0x00,0x00,0x00,0x04,0x86,0x1e,0xd7,0xfb,0x87,0x99,0x26,0x65,0x87,0x23,0x34, // 0x1c80: ...........&e.#4
0x58,0x86,0xa5,0x5d,0xe1,0x83,0x49,0x0f,0xdb,0xa5,0xb0,0x48,0x10,0x03,0x20,0xef, // 0x1c90: X..]..I....H.. .
0xba,0xa5,0xac,0x48,0xc9,0x81,0x90,0x07,0xa9,0x9c,0xa0,0xb5,0x20,0xca,0xb6,0xa9, // 0x1ca0: ...H........ ...
0xc9,0xa0,0xbc,0x20,0x6e,0xbb,0x68,0xc9,0x81,0x90,0x07,0xa9,0x78,0xa0,0xbc,0x20, // 0x1cb0: ... n.h.....x..
0xc9,0xa0,0xbc,0x20,0x6e,0xbb,0x68,0xc9,0x81,0x90,0x07,0xa9,0x78,0xa0,0xbc,0x20, // 0x1cb0: ... n.h.....x..
0x55,0xb4,0x68,0x10,0x03,0x4c,0xef,0xba,0x60,0x08,0x78,0x3a,0xc5,0x37,0x7b,0x83, // 0x1cc0: U.h..L..`.x:.7{.
0xa2,0x5c,0x7c,0x2e,0xdd,0x4d,0x7d,0x99,0xb0,0x1e,0x7d,0x59,0xed,0x24,0x7e,0x91, // 0x1cd0: .\|..M}...}Y.$~.
0x72,0x00,0x7e,0x4c,0xb9,0x73,0x7f,0xaa,0xaa,0x53,0x81,0x00,0x00,0x00,0xe6,0xc3, // 0x1ce0: r.~L.s...S......
@ -472,7 +472,7 @@
0x85,0x0b,0x84,0x0c,0xa9,0x48,0x85,0x0f,0xa9,0x38,0x85,0x10,0xa2,0x1c,0xbd,0xed, // 0x1d40: .....H...8......
0xbc,0x95,0xbb,0xca,0xd0,0xf8,0x8a,0x85,0xb2,0x85,0x67,0x85,0x0d,0x85,0x0e,0x48, // 0x1d50: ..........g....H
0x85,0x64,0xa9,0x03,0x85,0xa0,0xa9,0x2c,0x85,0x12,0x20,0x6c,0xa8,0xa2,0x68,0x86, // 0x1d60: .d.....,.. l..h.
0x65,0xa9,0x72,0xa0,0xbe,0x20,0xc3,0xa8,0x20,0x46,0xa9,0x86,0xc3,0x84,0xc4,0x20, // 0x1d70: e.r.. .. F.....
0x65,0xa9,0x72,0xa0,0xbe,0x20,0xc3,0xa8,0x20,0x46,0xa9,0x86,0xc3,0x84,0xc4,0x20, // 0x1d70: e.r.. .. F.....
0xbc,0x00,0xc9,0x41,0xf0,0x84,0xa8,0xd0,0x21,0xa9,0x00,0xa0,0x03,0x85,0x11,0x84, // 0x1d80: ...A....!.......
0x12,0xa0,0x00,0xe6,0x11,0xd0,0x02,0xe6,0x12,0xa9,0x92,0x91,0x11,0xd1,0x11,0xd0, // 0x1d90: ................
0x15,0x0a,0x91,0x11,0xd1,0x11,0xf0,0xeb,0xd0,0x0c,0x20,0xc2,0x00,0x20,0x7f,0xa7, // 0x1da0: .......... .. ..
@ -490,7 +490,7 @@
0x41,0x52,0x44,0x20,0x57,0x2e,0x20,0x57,0x45,0x49,0x4c,0x41,0x4e,0x44,0x2e,0x0d, // 0x1e60: ARD W. WEILAND..
0x0a,0x00,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x53,0x49,0x5a,0x45,0x00,0x54,0x45, // 0x1e70: ..MEMORY SIZE.TE
0x52,0x4d,0x49,0x4e,0x41,0x4c,0x20,0x57,0x49,0x44,0x54,0x48,0x00,0x20,0x42,0x59, // 0x1e80: RMINAL WIDTH. BY
0x54,0x45,0x53,0x20,0x46,0x52,0x45,0x45,0x0d,0x0a,0x0d,0x0a,0x4f,0x53,0x49,0x20, // 0x1e90: TES FREE....OSI
0x54,0x45,0x53,0x20,0x46,0x52,0x45,0x45,0x0d,0x0a,0x0d,0x0a,0x4f,0x53,0x49,0x20, // 0x1e90: TES FREE....OSI
0x36,0x35,0x30,0x32,0x20,0x42,0x41,0x53,0x49,0x43,0x20,0x56,0x45,0x52,0x53,0x49, // 0x1ea0: 6502 BASIC VERSI
0x4f,0x4e,0x20,0x31,0x2e,0x30,0x20,0x52,0x45,0x56,0x20,0x33,0x2e,0x32,0x0d,0x0a, // 0x1eb0: ON 1.0 REV 3.2..
0x43,0x4f,0x50,0x59,0x52,0x49,0x47,0x48,0x54,0x20,0x31,0x39,0x37,0x37,0x20,0x42, // 0x1ec0: COPYRIGHT 1977 B
@ -501,7 +501,7 @@
0xf0,0xf5,0x29,0x7f,0x60,0x48,0xad,0x00,0xfc,0x4a,0x4a,0x90,0xf9,0x68,0x8d,0x01, // 0x1f10: ..).`H...JJ..h..
0xfc,0x60,0xa9,0x03,0x8d,0x00,0xfc,0xa9,0xb1,0x8d,0x00,0xfc,0x60,0x8d,0x02,0x02, // 0x1f20: .`..........`...
0x48,0x8a,0x48,0x98,0x48,0xad,0x02,0x02,0xf0,0x33,0xac,0x06,0x02,0xf0,0x08,0xa2, // 0x1f30: H.H.H....3......
0x40,0xca,0xd0,0xfd,0x88,0xd0,0xf8,0xc9,0x0a,0xf0,0x2b,0xc9,0x0d,0xd0,0x06,0x20, // 0x1f40: @.........+....
0x40,0xca,0xd0,0xfd,0x88,0xd0,0xf8,0xc9,0x0a,0xf0,0x2b,0xc9,0x0d,0xd0,0x06,0x20, // 0x1f40: @.........+....
0xd5,0xbf,0x4c,0x6d,0xbf,0x8d,0x01,0x02,0x20,0xc2,0xbf,0xee,0x00,0x02,0xad,0xe1, // 0x1f50: ..Lm.... .......
0xff,0x18,0x6d,0xe0,0xff,0xcd,0x00,0x02,0x30,0x09,0x20,0xde,0xbf,0x68,0xa8,0x68, // 0x1f60: ..m.....0. ..h.h
0xaa,0x68,0x60,0x20,0xd8,0xbf,0x20,0xc2,0xbf,0xad,0xe0,0xff,0x29,0xe0,0x8d,0x02, // 0x1f70: .h` .. .....)...

View file

@ -1,5 +1,5 @@
/*
* Contents of ROM image: http://www.pcjs.org/devices/c1p/roms/system.rom
* Contents of ROM image: http://archive.pcjs.org/devices/c1p/rom/system.rom
*/
[0xa0,0x00,0x8c,0x01,0xc0,0x8c,0x00,0xc0,0xa2,0x04,0x8e,0x01,0xc0,0x8c,0x03,0xc0, // 0x0000: ................
0x88,0x8c,0x02,0xc0,0x8e,0x03,0xc0,0x8c,0x02,0xc0,0xa9,0xfb,0xd0,0x09,0xa9,0x02, // 0x0010: ................
@ -7,18 +7,18 @@
0x02,0xc0,0x20,0x99,0xff,0x09,0x08,0x8d,0x02,0xc0,0xa2,0x18,0x20,0x85,0xff,0xf0, // 0x0030: .. ......... ...
0xdd,0xa2,0x7f,0x8e,0x02,0xc0,0x20,0x85,0xff,0xad,0x00,0xc0,0x30,0xfb,0xad,0x00, // 0x0040: ...... .....0...
0xc0,0x10,0xfb,0xa9,0x03,0x8d,0x10,0xc0,0xa9,0x58,0x8d,0x10,0xc0,0x20,0x90,0xff, // 0x0050: .........X... ..
0x85,0xfe,0xaa,0x20,0x90,0xff,0x85,0xfd,0x20,0x90,0xff,0x85,0xff,0xa0,0x00,0x20, // 0x0060: ... .... ......
0x85,0xfe,0xaa,0x20,0x90,0xff,0x85,0xfd,0x20,0x90,0xff,0x85,0xff,0xa0,0x00,0x20, // 0x0060: ... .... ......
0x90,0xff,0x91,0xfd,0xc8,0xd0,0xf8,0xe6,0xfe,0xc6,0xff,0xd0,0xf2,0x86,0xfe,0xa9, // 0x0070: ................
0xff,0x8d,0x02,0xc0,0x60,0xa0,0xf8,0x88,0xd0,0xfd,0x55,0xff,0xca,0xd0,0xf6,0x60, // 0x0080: ....`.....U....`
0xad,0x10,0xc0,0x4a,0x90,0xfa,0xad,0x11,0xc0,0x60,0x48,0x2f,0x44,0x2f,0x4d,0x3f, // 0x0090: ...J.....`H/D/M?
0xd8,0xa2,0xd8,0xa9,0xd0,0x85,0xfe,0xa0,0x00,0x84,0xfd,0xa9,0x20,0x91,0xfd,0xc8, // 0x00a0: ............ ...
0xd0,0xfb,0xe6,0xfe,0xe4,0xfe,0xd0,0xf5,0xa9,0x03,0x8d,0x00,0xfc,0xa9,0xb1,0x8d, // 0x00b0: ................
0x00,0xfc,0xb9,0x9a,0xff,0x30,0x0e,0x99,0xc6,0xd0,0xae,0x01,0xfe,0xd0,0x03,0x20, // 0x00c0: .....0.........
0x0b,0xfe,0xc8,0xd0,0xed,0xad,0x01,0xfe,0xd0,0x05,0x20,0x00,0xfe,0xb0,0x03,0x20, // 0x00d0: .......... ....
0x00,0xfc,0xb9,0x9a,0xff,0x30,0x0e,0x99,0xc6,0xd0,0xae,0x01,0xfe,0xd0,0x03,0x20, // 0x00c0: .....0.........
0x0b,0xfe,0xc8,0xd0,0xed,0xad,0x01,0xfe,0xd0,0x05,0x20,0x00,0xfe,0xb0,0x03,0x20, // 0x00d0: .......... ....
0xed,0xfe,0xc9,0x48,0xf0,0x0a,0xc9,0x44,0xd0,0x0c,0x20,0x00,0xff,0x4c,0x00,0x22, // 0x00e0: ...H...D.. ..L."
0x4c,0x00,0xfd,0x20,0x00,0xff,0x6c,0xfc,0xfe,0xea,0x30,0x01,0xa0,0xff,0xc0,0x01, // 0x00f0: L.. ..l...0.....
0x8a,0x48,0x98,0x48,0xa9,0x01,0x8d,0x00,0xdf,0xae,0x00,0xdf,0xd0,0x05,0x0a,0xd0, // 0x0100: .H.H............
0xf5,0xf0,0x53,0x4a,0x90,0x09,0x2a,0xe0,0x21,0xd0,0xf3,0xa9,0x1b,0xd0,0x21,0x20, // 0x0110: ..SJ..*.!.....!
0xf5,0xf0,0x53,0x4a,0x90,0x09,0x2a,0xe0,0x21,0xd0,0xf3,0xa9,0x1b,0xd0,0x21,0x20, // 0x0110: ..SJ..*.!.....!
0xc8,0xfd,0x98,0x8d,0x13,0x02,0x0a,0x0a,0x0a,0x38,0xed,0x13,0x02,0x8d,0x13,0x02, // 0x0120: .........8......
0x8a,0x4a,0x20,0xc8,0xfd,0xd0,0x2f,0x18,0x98,0x6d,0x13,0x02,0xa8,0xb9,0xcf,0xfd, // 0x0130: .J .../..m......
0xcd,0x15,0x02,0xd0,0x26,0xce,0x14,0x02,0xf0,0x2b,0xa0,0x05,0xa2,0xc8,0xca,0xd0, // 0x0140: ....&....+......
@ -37,7 +37,7 @@
0x85,0xff,0xa9,0x00,0x85,0xfe,0x85,0xfb,0xa8,0xa9,0x20,0x91,0xfe,0xc8,0xd0,0xfb, // 0x0210: .......... .....
0xe6,0xff,0xe4,0xff,0xd0,0xf5,0x84,0xff,0xf0,0x19,0x20,0xe9,0xfe,0xc9,0x2f,0xf0, // 0x0220: .......... .../.
0x1e,0xc9,0x47,0xf0,0x17,0xc9,0x4c,0xf0,0x43,0x20,0x93,0xfe,0x30,0xec,0xa2,0x02, // 0x0230: ..G...L.C ..0...
0x20,0xda,0xfe,0xb1,0xfe,0x85,0xfc,0x20,0xac,0xfe,0xd0,0xde,0x6c,0xfe,0x00,0x20, // 0x0240: ...... ....l..
0x20,0xda,0xfe,0xb1,0xfe,0x85,0xfc,0x20,0xac,0xfe,0xd0,0xde,0x6c,0xfe,0x00,0x20, // 0x0240: ...... ....l..
0xe9,0xfe,0xc9,0x2e,0xf0,0xd4,0xc9,0x0d,0xd0,0x0f,0xe6,0xfe,0xd0,0x02,0xe6,0xff, // 0x0250: ................
0xa0,0x00,0xb1,0xfe,0x85,0xfc,0x4c,0x77,0xfe,0x20,0x93,0xfe,0x30,0xe1,0xa2,0x00, // 0x0260: ......Lw. ..0...
0x20,0xda,0xfe,0xa5,0xfc,0x91,0xfe,0x20,0xac,0xfe,0xd0,0xd3,0x85,0xfb,0xf0,0xcf, // 0x0270: ...... ........
@ -56,7 +56,7 @@
0xc8,0xd0,0xf5,0x20,0xb8,0xff,0xc9,0x4d,0xd0,0x03,0x4c,0x00,0xfe,0xc9,0x57,0xd0, // 0x0340: ... ...M..L...W.
0x03,0x4c,0x00,0x00,0xc9,0x43,0xd0,0xa8,0xa9,0x00,0xaa,0xa8,0x4c,0x11,0xbd,0x43, // 0x0350: .L...C......L..C
0x2f,0x57,0x2f,0x4d,0x20,0x3f,0x00,0x20,0x2d,0xbf,0x48,0xad,0x05,0x02,0xf0,0x22, // 0x0360: /W/M ?. -.H...."
0x68,0x20,0x15,0xbf,0xc9,0x0d,0xd0,0x1b,0x48,0x8a,0x48,0xa2,0x0a,0xa9,0x00,0x20, // 0x0370: h ......H.H....
0x68,0x20,0x15,0xbf,0xc9,0x0d,0xd0,0x1b,0x48,0x8a,0x48,0xa2,0x0a,0xa9,0x00,0x20, // 0x0370: h ......H.H....
0x15,0xbf,0xca,0xd0,0xfa,0x68,0xaa,0x68,0x60,0x48,0xce,0x03,0x02,0xa9,0x00,0x8d, // 0x0380: .....h.h`H......
0x05,0x02,0x68,0x60,0x48,0xa9,0x01,0xd0,0xf6,0xad,0x12,0x02,0xd0,0x19,0xa9,0x01, // 0x0390: ..h`H...........
0x8d,0x00,0xdf,0x2c,0x00,0xdf,0x50,0x0f,0xa9,0x04,0x8d,0x00,0xdf,0x2c,0x00,0xdf, // 0x03a0: ...,..P......,..
@ -71,7 +71,7 @@
0x1c,0xa9,0xff,0x8d,0x02,0xc0,0x20,0xa5,0xfc,0x29,0xf7,0x8d,0x02,0xc0,0x20,0xa5, // 0x0430: ...... ..).... .
0xfc,0x09,0x08,0x8d,0x02,0xc0,0xa2,0x18,0x20,0x91,0xfc,0xf0,0xdd,0xa2,0x7f,0x8e, // 0x0440: ........ .......
0x02,0xc0,0x20,0x91,0xfc,0xad,0x00,0xc0,0x30,0xfb,0xad,0x00,0xc0,0x10,0xfb,0xa9, // 0x0450: .. .....0.......
0x03,0x8d,0x10,0xc0,0xa9,0x58,0x8d,0x10,0xc0,0x20,0x9c,0xfc,0x85,0xfe,0xaa,0x20, // 0x0460: .....X... .....
0x03,0x8d,0x10,0xc0,0xa9,0x58,0x8d,0x10,0xc0,0x20,0x9c,0xfc,0x85,0xfe,0xaa,0x20, // 0x0460: .....X... .....
0x9c,0xfc,0x85,0xfd,0x20,0x9c,0xfc,0x85,0xff,0xa0,0x00,0x20,0x9c,0xfc,0x91,0xfd, // 0x0470: .... ...... ....
0xc8,0xd0,0xf8,0xe6,0xfe,0xc6,0xff,0xd0,0xf2,0x86,0xfe,0xa9,0xff,0x8d,0x02,0xc0, // 0x0480: ................
0x60,0xa0,0xf8,0x88,0xd0,0xfd,0x55,0xff,0xca,0xd0,0xf6,0x60,0xa0,0x10,0xc0,0x4a, // 0x0490: `.....U....`...J
@ -82,7 +82,7 @@
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0x04e0: ................
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0x04f0: ................
0x8a,0x48,0x98,0x48,0xa9,0x01,0x20,0xbe,0xfc,0x20,0xc6,0xfc,0xd0,0x05,0x0a,0xd0, // 0x0500: .H.H.. .. ......
0xf5,0xf0,0x53,0x4a,0x90,0x09,0x2a,0xe0,0x21,0xd0,0xf3,0xa9,0x1b,0xd0,0x21,0x20, // 0x0510: ..SJ..*.!.....!
0xf5,0xf0,0x53,0x4a,0x90,0x09,0x2a,0xe0,0x21,0xd0,0xf3,0xa9,0x1b,0xd0,0x21,0x20, // 0x0510: ..SJ..*.!.....!
0xc8,0xfd,0x98,0x8d,0x13,0x02,0x0a,0x0a,0x0a,0x38,0xed,0x13,0x02,0x8d,0x13,0x02, // 0x0520: .........8......
0x8a,0x4a,0x20,0xc8,0xfd,0xd0,0x2f,0x18,0x98,0x6d,0x13,0x02,0xa8,0xb9,0xcf,0xfd, // 0x0530: .J .../..m......
0xcd,0x15,0x02,0xd0,0x26,0xce,0x14,0x02,0xf0,0x2b,0xa0,0x05,0xa2,0xc8,0xca,0xd0, // 0x0540: ....&....+......
@ -101,7 +101,7 @@
0x85,0xff,0xa9,0x00,0x85,0xfe,0x85,0xfb,0xa8,0xa9,0x20,0x91,0xfe,0xc8,0xd0,0xfb, // 0x0610: .......... .....
0xe6,0xff,0xe4,0xff,0xd0,0xf5,0x84,0xff,0xf0,0x19,0x20,0xe9,0xfe,0xc9,0x2f,0xf0, // 0x0620: .......... .../.
0x1e,0xc9,0x47,0xf0,0x17,0xc9,0x4c,0xf0,0x43,0x20,0x93,0xfe,0x30,0xec,0xa2,0x02, // 0x0630: ..G...L.C ..0...
0x20,0xda,0xfe,0xb1,0xfe,0x85,0xfc,0x20,0xac,0xfe,0xd0,0xde,0x6c,0xfe,0x00,0x20, // 0x0640: ...... ....l..
0x20,0xda,0xfe,0xb1,0xfe,0x85,0xfc,0x20,0xac,0xfe,0xd0,0xde,0x6c,0xfe,0x00,0x20, // 0x0640: ...... ....l..
0xe9,0xfe,0xc9,0x2e,0xf0,0xd4,0xc9,0x0d,0xd0,0x0f,0xe6,0xfe,0xd0,0x02,0xe6,0xff, // 0x0650: ................
0xa0,0x00,0xb1,0xfe,0x85,0xfc,0x4c,0x77,0xfe,0x20,0x93,0xfe,0x30,0xe1,0xa2,0x00, // 0x0660: ......Lw. ..0...
0x20,0xda,0xfe,0xa5,0xfc,0x91,0xfe,0x20,0xac,0xfe,0xd0,0xd3,0x85,0xfb,0xf0,0xcf, // 0x0670: ...... ........
@ -113,7 +113,7 @@
0x30,0x03,0x18,0x69,0x07,0x99,0xc6,0xd0,0xc8,0x60,0xa0,0x04,0x0a,0x0a,0x0a,0x0a, // 0x06d0: 0..i.....`......
0x2a,0x36,0xfc,0x36,0xfd,0x88,0xd0,0xf8,0x60,0xa5,0xfb,0xd0,0x93,0x4c,0x00,0xfd, // 0x06e0: *6.6....`....L..
0xba,0xff,0x69,0xff,0x9b,0xff,0x8b,0xff,0x96,0xff,0x30,0x01,0x00,0xfe,0xc0,0x01, // 0x06f0: ..i.......0.....
0xd8,0xa2,0x28,0x9a,0xa0,0x0a,0xb9,0xef,0xfe,0x99,0x17,0x02,0x88,0xd0,0xf7,0x20, // 0x0700: ..(............
0xd8,0xa2,0x28,0x9a,0xa0,0x0a,0xb9,0xef,0xfe,0x99,0x17,0x02,0x88,0xd0,0xf7,0x20, // 0x0700: ..(............
0xa6,0xfc,0x8c,0x12,0x02,0x8c,0x03,0x02,0x8c,0x05,0x02,0x8c,0x06,0x02,0xad,0xe0, // 0x0710: ................
0xff,0x8d,0x00,0x02,0xa9,0x20,0x99,0x00,0xd3,0x99,0x00,0xd2,0x99,0x00,0xd1,0x99, // 0x0720: ..... ..........
0x00,0xd0,0xc8,0xd0,0xf1,0xb9,0x5f,0xff,0xf0,0x06,0x20,0x2d,0xbf,0xc8,0xd0,0xf5, // 0x0730: ......_... -....

View file

@ -0,0 +1,14 @@
---
layout: page
title: Challenger 1P Video Resources
permalink: /devices/c1p/video/
---
Challenger 1P Video Resources
---
The following C1P Video Character Generator images available:
- [8x8](chargen1x.png)
- [16x16](chargen2x.png)
- [32x32](chargen4x.png)

Some files were not shown because too many files have changed in this diff Show more