Starting work on disambiguating PCjs the emulator from PCjs the project/website; the emulator will become PCx86

This commit is contained in:
Jeff Parsons 2016-05-16 20:53:57 -07:00
commit 288f28055d
1519 changed files with 16242 additions and 6939 deletions

View file

@ -11,7 +11,7 @@ Documentation
Help is available for the following JavaScript Machines:
* [PCjs](/docs/pcjs/)
* [PCjs](/docs/pcx86/)
* [C1Pjs](/docs/c1pjs/)
{% if site.developer %}

View file

@ -37,18 +37,18 @@ on the [OSI Discussion Forum](http://osiweb.org/osiforum/index.php) at [osiweb.o
### Emulating the IBM PC
The next JavaScript Machines simulation was [PCjs](/docs/about/pcjs/), which simulates the original IBM PC, IBM PC XT,
and IBM PC AT. Browse the [source code](/modules/pcjs/) here or on [GitHub](https://github.com/jeffpar/pcjs).
The next JavaScript Machines simulation was [PCx86](/docs/about/pcx86/), which simulates the original IBM PC, IBM PC XT,
and IBM PC AT. Browse the [source code](/modules/pcx86/) here or on [GitHub](https://github.com/jeffpar/pcjs).
[PCjs](/docs/about/pcjs/) emulates the Intel 8088, 80186, 80286 and 80386 CPUs, as well as IBM Monochrome Display
[PCx86](/docs/about/pcx86/) emulates the Intel 8088, 80186, 80286 and 80386 CPUs, as well as IBM Monochrome Display
Adapter (MDA), Color Graphics Adapter (CGA), Enhanced Graphics Adapter (EGA), and Video Graphics Array (VGA) video
cards, along with assorted motherboard and expansion bus components. It also includes an optional
[Debugger](/docs/pcjs/debugger/) and a user-configurable [Control Panel](/docs/pcjs/panel/).
[Debugger](/docs/pcx86/debugger/) and a user-configurable [Control Panel](/docs/pcx86/panel/).
PCjs v1.0 was released on [jsmachines.net](http://jsmachines.net/) in late 2012, and the JavaScript Machines Project,
PCx86 v1.0 was released on [jsmachines.net](http://jsmachines.net/) in late 2012, and the JavaScript Machines Project,
with its second full-featured machine emulation, was launched.
Read [About PCjs](/docs/about/pcjs/) to learn more about its history, features, and upcoming improvements.
Read [About PCx86](/docs/about/pcx86/) to learn more about its history, features, and upcoming improvements.
---
@ -66,7 +66,7 @@ The goals included:
The PCjs web server includes a number of custom Node modules that provide many of the same server-side features
found on [jsmachines.net](http://jsmachines.net/), including new ROM and disk image conversion APIs, and a
Markdown module that supports a subset of the [Markdown syntax](http://daringfireball.net/projects/markdown/syntax),
including extensions to the link syntax that make it easy to embed C1Pjs and PCjs machine files in Markdown documents.
including extensions to the link syntax that make it easy to embed C1Pjs and PCx86 machine files in Markdown documents.
---

View file

@ -1,131 +0,0 @@
---
layout: page
title: About PCjs
permalink: /docs/about/pcjs/
redirect_from:
- /pc/
- /pcjs/
---
About PCjs
---
PCjs is a IBM PC/XT/AT simulator written entirely in [JavaScript](/modules/pcjs/). It's designed to load and run
fast, it works well in all modern web browsers (both desktop and mobile), and it's easy to customize. It is part of
the [PCjs Project](https://github.com/jeffpar/pcjs), an open source project on [GitHub](http://github.com/).
Check out the [Demos](/#demos) on the home page, and all the other PCjs [Application](/apps/pc/), [Disk](/disks/pc/),
and [Machine](/devices/pc/machine/) demos, including an [IBM PC Dual Display System](/devices/pc/machine/5150/dual/64kb/)
demo of multiple monitor support, and [IBM PC XT "Server Array"](/devices/pc/machine/5160/cga/256kb/array/) and
[Windows 1.01 "Server Array"](/devices/pc/machine/5160/ega/640kb/array/) demos of multiple machines running side-by-side.
### Features
+ Build your own IBM PC, PC XT, and PC AT simulations using simple XML machine configuration files.
You decide how much RAM you want, how many disk drives, which disk images to include (and which should be
pre-loaded), what kind of video adapter (MDA, CGA, EGA or VGA), serial ports, mouse, and more. See the
[Documentation](/docs/pcjs/) for details.
+ Excellent IBM hardware compatibility ensures all the original IBM BIOS ROMs operate properly, and that the
machines run at their original speed. Even obsolete hardware, such as the original PC XT hard disk controller,
is supported.
+ The CPU component is easily configured to emulate an 8088, 80186, 80286, or 80386. A target speed can also
be specified, and in some cases, even specific CPU *steppings* (including specific errata) can be enabled.
+ Similarly, the FPU (floating-point) component can be configured to emulate an 8087, 80287, or 80387; however,
only 8087 support is complete at this point.
+ The modular design allows you to specify which components to enable, and which external controls
to display for each component. You can choose the size of the display window created by the [Video](/docs/pcjs/video/)
component, add **Halt** or **Speed** buttons to the [CPU](/docs/pcjs/cpu/) component, display clickable "DIP Switches"
for the [Chipset](/docs/pcjs/chipset/) component, or even design your own [Control Panel](/docs/pcjs/panel/).
+ The UI includes a responsive design that tailors itself to your browser and device, and support for touch events
and soft keyboards means you get the best possible emulation experience -- better than any other browser-based
emulator currently available. It almost feels like your DOS and Windows mouse-based applications have been rewritten
to work with your iPad or iPhone -- almost. Please note, however, that some mobile devices provide better support than
others.
+ A fully-integrated [Debugger](/docs/pcjs/debugger/) is available. Disassemble code, set breakpoints on
memory write/read/execution addresses, dump and edit memory, dump disk sectors, enable/disable categories of diagnostic
messages, and view instruction history, cycle counts and more. The Debugger does not rely on CPU breakpoint
instructions or the trace flag, and does not alter the machine state in any way, allowing you to debug anything,
including 8086 debuggers.
+ Machines created with the [Computer](/docs/pcjs/computer/) *resume* property set will save their entire machine
state using your browser's local storage, so that any changes are preserved when your browser closes, including
disk modifications. Any files you create or modify *inside* the machine will still be there when you return.
TIP: To restore a diskette's original contents, simply press the "Download" button again.
+ Machine states can also be dumped (using the built-in [Debugger](/docs/pcjs/debugger/)), saved as JSON files, and
pre-loaded into a machine, bypassing the normal boot process. You can even combine a pre-defined state with the
"resume" feature, preserving any changes you make to the machine's original state.
+ Most modern web browsers are supported, including IE (v9.0 and higher), Edge, Safari, Firefox, Chrome and Opera,
and no JavaScript extensions (typed arrays) or third-party libraries are required. Safari is recommended for iOS
users, Chrome or Firefox for other platforms.
### Future
PCjs has been been steadily evolving for almost 4 years now, in much the same way that the PC architecture evolved,
first with the 8088-based IBM PC in 1981, then with the 80286-based IBM PC AT in 1984, and finally the 80386 and the
first 32-bit PC architecture introduced by COMPAQ in late 1986.
PCjs will remain focused on 1980's era hardware and software, so there are currently no plans to move beyond the
80386. Some of the PCjs demos do include software from the 1990's (eg, DOS 5.0, Windows 3.x, and Windows 95), but the
project's priority is older software, especially software that is difficult and sometimes impossible to run on newer
hardware.
Some of the features planned for future releases include:
+ Improved FPU compatibility, with accurate cycle counts
+ Improved Video compatibility (eg, custom EGA and VGA fonts)
### History
A more [complete list of releases](https://github.com/jeffpar/pcjs/releases) is on GitHub, but here are some highlights:
+ v1.20 added 8087 coprocessor (FPU) support, [OS/2 improvements](http://www.pcjs.org/blog/2016/02/08/),
and new Disk/Machine [Save Options](http://www.pcjs.org/blog/2016/02/17/).
+ v1.19 improved 80386 compatibility and added support for [Windows 95](http://www.pcjs.org/blog/2015/09/21/).
+ v1.18 added basic 80386 CPU functionality and [COMPAQ DeskPro 386](http://www.pcjs.org/blog/2015/04/16/) emulation.
+ v1.16 added support for [OS/2 1.0](http://www.pcjs.org/blog/2014/12/04/), the Microsoft/IBM multitasking operating
system introduced in December 1987 for 80286-based machines.
+ v1.15 introduced [IBM PC AT](http://www.pcjs.org/blog/2014/09/13/) (Model 5170) emulation.
+ v1.14 added basic [EGA Support](http://www.pcjs.org/blog/2014/07/30/) and the ability to run Windows 1.01
in color.
+ v1.13 introduced manifest files that describe software packages that can be used with PCjs.
More information on software manifests is available [here](/apps/).
+ v1.12.1 coincided with the first release of the new PCjs web server running on [Node.js](http://nodejs.org).
The new server includes ROM and disk image conversion APIs, as well as a
[Markdown](http://daringfireball.net/projects/markdown/syntax) module that supports link extensions
for embedding C1Pjs and PCjs machine files in Markdown documents and automatically converts "README.md"
files into "index.html" web pages.
+ v1.11 improved the *embedPC()* and *embedC1P()* functions, so now you can embed XML machine configuration files
that reference other configuration files, such as an external [Keyboard](/docs/pcjs/keyboard/) or
[Control Panel](/docs/pcjs/panel/) XML layout. It does this by building the entire XML configuration internally,
rather than relying on XSLT's *document()* function, which doesn't seem to work in all JavaScript XSLT processors.
+ v1.10 fixed embedding in Internet Explorer 11 (Microsoft removed "MSIE" from their default user-agent string).
The ability to embed multiple PCs on a single web page is now supported as well.
+ v1.08 added soft-keyboard support, which isn't quite finished (sticky-shift and auto-repeat will be added in a future
version), but it's good enough for use on iPads. Browse [IBM PC Machine Configurations](/devices/pc/machine/) for
machines that include a soft-keyboard.
+ v1.06c added support for user-defined diskette images. Select "Remote Disk" from the diskette list, click
"Download", and enter a URL at the prompt. See **Creating PCjs-Compatible Disk Images** in the
[PCjs Documentation](/docs/pcjs/) for more information about supported disk images.
+ v1.05b added support for webkitAudioContext, bringing your simulated IBM PC's speaker to life. Relive the thrill
of running MUSIC.BAS and listening to those classic tunes. *Sound support is still experimental*.

View file

@ -1,31 +1,33 @@
---
layout: page
title: PCjs Documentation
permalink: /docs/pcjs/
title: PCx86 Documentation
permalink: /docs/pcx86/
redirect_from:
- /docs/pcjs/
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
---
PCjs Documentation
PCx86 Documentation
---
[PCjs](/docs/about/pcjs/) is a full-featured IBM PC, PC XT and PC AT emulator written entirely in JavaScript.
[PCx86](/docs/about/pcx86/) is a full-featured IBM PC, PC XT and PC AT emulator written entirely in JavaScript.
After you've read the Documentation, check out the [Examples](examples/), read the [Source Code](/modules/pcjs/),
After you've read the Documentation, check out the [Examples](examples/), read the [Source Code](/modules/pcx86/),
and experiment!
{% include machine.html id="ibm5150" %}
The [simulation](/devices/pc/machine/5150/mda/64kb/) above features an Intel 8088
The [simulation](/devices/pcx86/machine/5150/mda/64kb/) above features an Intel 8088
running at 4.77Mhz, with 64Kb of RAM and an IBM Monochrome Display Adapter. To create your
own simulation, all you need is the PCjs script and a machine XML file, along with a couple
own simulation, all you need is the PCx86 script and a machine XML file, along with a couple
of XSL and CSS support files (included in the ZIP file below).
### Creating Machine XML Files
A PCjs machine XML file defines all a machine's components, including:
A PCx86 machine XML file defines all a machine's components, including:
* [Chipset](chipset/)
* [Computer](computer/)
@ -110,12 +112,12 @@ file.
### Loading Machine XML Files
Inside a web page, add a <div> to contain the machine, load the *pc.js* script
(*pc-dbg.js* if you need the PCjs [Debugger](debugger/)), and then call *embedPC()*:
Inside a web page, add a <div> to contain the machine, load the *pcx86.js* script
(*pcx86-dbg.js* if you need the PCx86 [Debugger](debugger/)), and then call *embedPC()*:
```xml
<div id="example2"/>
<script type="text/javascript" src="pc.js"/>
<script type="text/javascript" src="pcx86.js"/>
<script type="text/javascript">
embedPC("example2", "example2.xml", "components.xsl");
</script>
@ -134,10 +136,10 @@ The first 3 parameters are required; the *parms* parameter is optional. If *par
contain a single-quoted JSON object definition, with properties intended to override those specified in the
machine XML file; eg:
'{messages:"warn",autoMount:{"A":{"path":"/disks/pc/dos/ibm/1.00/PCDOS100.json"}}}'
'{messages:"warn",autoMount:{"A":{"path":"/disks/pcx86/dos/ibm/1.00/PCDOS100.json"}}}'
*components.xsl* (and the corresponding *components.css*) are included with the PCjs scripts in the
[Examples](#running-pcjs-on-your-own-server) download. Every version of *components.xsl* has a corresponding
*components.xsl* (and the corresponding *components.css*) are included with the PCx86 scripts in the
[Examples](#running-pcx86-on-your-own-server) download. Every version of *components.xsl* has a corresponding
*components.css*, which your web page should also load, usually with a &lt;link&gt; tag inside the &lt;head&gt;
element; eg:
@ -145,13 +147,13 @@ element; eg:
<link rel="stylesheet" type="text/css" href="components.css">
```
### Using the PCjs Debugger
### Using the PCx86 Debugger
To create a configuration that includes the PCjs Debugger, you need to:
To create a configuration that includes the PCx86 Debugger, you need to:
- Add [Debugger](debugger/) and [Control Panel](panel/) components to the machine XML file;
- Add debugger controls to the Control Panel, such as Run, Step, Reset, etc;
- Change your web page to load *pc-dbg.js* instead of *pc.js*.
- Change your web page to load *pcx86-dbg.js* instead of *pcx86.js*.
Take a look at the [example3a](examples/example3a.html) example
(with [XML file](examples/example3a.xml)).
@ -166,33 +168,33 @@ In fact, the [example3b](examples/example3b.html) example (with [XML file](examp
does just that, using JSON dumps created from [example3a](examples/example3a.html) after starting VisiCalc.
See the *state* property on the [Computer](computer/) component for more information on state files.
### Running PCjs On Your Own Server
### Running PCx86 On Your Own Server
All of the examples described above are available for [download](examples/).
### Creating PCjs-Compatible Disk Images
### Creating PCx86-Compatible Disk Images
If you have (or find) an IMG disk image file on a server, the PCjs web server provides a
[DiskDump API](/api/v1/dump) via endpoint "/api/v1/dump" that creates PCjs-compatible disks in JSON:
[DiskDump API](/api/v1/dump) via endpoint "/api/v1/dump" that creates PCx86-compatible disks in JSON:
{{ site.url }}/api/v1/dump?disk=(file|url)&format=json
For example, let's say you found a disk image online, such as:
http://archive.pcjs.org/disks/pc/dos/ibm/1.00/PCDOS100.img
http://archive.pcjs.org/disks/pcx86/dos/ibm/1.00/PCDOS100.img
To convert it to a PCjs-compatible JSON format, issue the following
[request](/api/v1/dump?disk=http://archive.pcjs.org/disks/pc/dos/ibm/1.00/PCDOS100.img&format=json),
To convert it to a PCx86-compatible JSON format, issue the following
[request](/api/v1/dump?disk=http://archive.pcjs.org/disks/pcx86/dos/ibm/1.00/PCDOS100.img&format=json),
save the resulting JSON file to a folder on your server, and then update your machine XML file(s) to use that file.
{{ site.url }}/api/v1/dump?disk=http://archive.pcjs.org/disks/pc/dos/ibm/1.00/PCDOS100.img&format=json
{{ site.url }}/api/v1/dump?disk=http://archive.pcjs.org/disks/pcx86/dos/ibm/1.00/PCDOS100.img&format=json
If necessary, you can also reverse the process and convert a JSON disk image back into an IMG file, with the
this [request](/api/v1/dump?disk=http://www.pcjs.org/disks/pc/dos/ibm/1.00/PCDOS100.json&format=img):
this [request](/api/v1/dump?disk=http://www.pcjs.org/disks/pcx86/dos/ibm/1.00/PCDOS100.json&format=img):
{{ site.url }}/api/v1/dump?disk={{ site.url }}/disks/pc/dos/ibm/1.00/PCDOS100.json&format=img
{{ site.url }}/api/v1/dump?disk={{ site.url }}/disks/pcx86/dos/ibm/1.00/PCDOS100.json&format=img
Although PCjs will accept IMG disk image files, it must call the [DiskDump API](/api/v1/dump) to convert the image
Although PCx86 will accept IMG disk image files, it must call the [DiskDump API](/api/v1/dump) to convert the image
every time it's loaded, so it's *much* faster and more efficient to use pre-converted JSON-encoded disk images.
Remember that PC and PC XT machines supported only 160Kb diskettes (on any version of PC-DOS),
@ -202,4 +204,4 @@ The 1.2Mb diskette format was introduced with the PC AT, and 720Kb and 1.44Mb di
supported later on 8Mhz PC AT and PS/2 models. So, when using any of these larger formats, be sure you're
also using a compatible machine configuration.
Learn more about PCjs disk images [here](/disks/).
Learn more about PCx86 disk images [here](/disks/).

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;chipset&gt; Element
permalink: /docs/pcjs/chipset/
title: PCx86 &lt;chipset&gt; Element
permalink: /docs/pcx86/chipset/
---
PCjs ChipSet Component
PCx86 ChipSet Component
---
Format
@ -87,7 +87,7 @@ Attributes
yyyy-mm-ddThh:mm:ss
* Also supports the attributes of *[Component](/docs/pcjs/component/)*.
* Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -114,7 +114,7 @@ Output
```html
<div id="..." class="pc-chipset pc-component">
<div class="pc-container">
<div class="pcjs-chipset" data-value="id:'...',name:'...',model:'...',sw1:'...',sw2:'...'">
<div class="pcx86-chipset" data-value="id:'...',name:'...',model:'...',sw1:'...',sw2:'...'">
</div>
</div>
</div>
@ -123,7 +123,7 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]
<!-- NOTE: I had to "escape" the hashmarks above, otherwise PhpStorm's Markdown plugin would preview them as
headings; I think that's a bug in the plugin, because my reading of Markdown's syntax for the "Atx-style headers"

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;component&gt; Element
permalink: /docs/pcjs/component/
title: PCx86 &lt;component&gt; Element
permalink: /docs/pcx86/component/
---
PCjs Component
PCx86 Component
---
Format
@ -38,7 +38,7 @@ Attributes
Example
---
```xml
<component id="ibm5150" class="pcjs" width="740px" pos="center" border="1">
<component id="ibm5150" class="pcx86" width="740px" pos="center" border="1">
...
</component>
```
@ -53,4 +53,4 @@ Output
</div>
```
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;computer&gt; Element
permalink: /docs/pcjs/computer/
title: PCx86 &lt;computer&gt; Element
permalink: /docs/pcx86/computer/
---
PCjs Computer Component
PCx86 Computer Component
---
Format
@ -62,7 +62,7 @@ Output
```html
<div id="..." class="pc-computer pc-component" style="">
<div class="pc-container" style="">
<div class="pcjs-computer" data-value="id:'...',name:'...',resume:'...',state:'...'">
<div class="pcx86-computer" data-value="id:'...',name:'...',resume:'...',state:'...'">
</div>
</div>
</div>
@ -71,4 +71,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;cpu&gt; Element
permalink: /docs/pcjs/cpu/
title: PCx86 &lt;cpu&gt; Element
permalink: /docs/pcx86/cpu/
---
PCjs CPU Component
PCx86 CPU Component
---
Format
@ -33,7 +33,7 @@ Attributes
* This can be set to "true" or "false" to explicitly control whether or not the machine starts running automatically.
If this parameter is omitted, the machine will autostart only if no Debugger component is included and no "Run" button is defined.
Also supports the attributes of *[Component](/docs/pcjs/component/)*. The *id* attribute is optional, since machines
Also supports the attributes of *[Component](/docs/pcx86/component/)*. The *id* attribute is optional, since machines
currently support only one CPU component.
@ -43,7 +43,7 @@ Bindings
* For use with a control of type *button*, to start/stop the CPU.
* *reset*
* For use with a control of type *button*, to reset the CPU. This binding actually belongs to the
*[Computer](/docs/pcjs/computer/)* component, because every component is reset, but the CPU offers the binding
*[Computer](/docs/pcx86/computer/)* component, because every component is reset, but the CPU offers the binding
for convenience.
* *speed*
* For use with any control with an *textContent* property, to display the current CPU speed.
@ -65,7 +65,7 @@ Output
```html
<div id="..." class="pc-cpu pc-component" style="">
<div class="pc-container" style="">
<div class="pcjs-cpu" data-value="id:'...',name:'...',model:'...',cycles:'...',multiplier:'...',autoStart:'...'">
<div class="pcx86-cpu" data-value="id:'...',name:'...',model:'...',cycles:'...',multiplier:'...',autoStart:'...'">
</div>
</div>
</div>
@ -74,4 +74,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;debugger&gt; Element
permalink: /docs/pcjs/debugger/
title: PCx86 &lt;debugger&gt; Element
permalink: /docs/pcx86/debugger/
---
PCjs Debugger Component
PCx86 Debugger Component
---
Format
@ -23,7 +23,7 @@ Attributes
* One or more message categories to enable, separated by |. By default, all message categories are disabled.
See the Debugger's "m" command for a current list of message categories.
Also supports the attributes of *[Component](/docs/pcjs/component/)*. The *id* attribute is optional, since machines
Also supports the attributes of *[Component](/docs/pcx86/component/)*. The *id* attribute is optional, since machines
currently support only one Debugger component.
Bindings
@ -51,7 +51,7 @@ Output
```html
<div id="..." class="pc-debugger pc-component" style="">
<div class="pc-container" style="">
<div class="pcjs-debugger" data-value="id:'...',name:'...',messages:'...'">
<div class="pcx86-debugger" data-value="id:'...',name:'...',messages:'...'">
</div>
</div>
</div>
@ -60,4 +60,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,20 +1,21 @@
---
layout: page
title: PCjs Documentation Examples
permalink: /docs/pcjs/examples/
title: PCx86 Documentation Examples
permalink: /docs/pcx86/examples/
machines:
- type: pc
- type: pcx86
id: example3
config: /docs/pcjs/examples/example3b.xml
config: /docs/pcx86/examples/example3b.xml
redirect_from:
- /docs/pcjs/demos/
- /docs/pcjs/demos/sample1.html/
- /docs/pcx86/demos/
- /docs/pcx86/demos/sample1.html/
---
PCjs Documentation Examples
PCx86 Documentation Examples
---
This folder provides all the self-contained [PCjs](/docs/about/pcjs/) examples described in the [Documentation](/docs/pcjs/).
This folder provides all the self-contained [PCx86](/docs/about/pcx86/) examples described in the
[Documentation](/docs/pcx86/).
To use them, download [examples.zip](examples.zip), unzip it into a folder on your desktop computer or web server,
and experiment with them in your web browser. Since all these examples are self-contained, they should work with either
@ -28,10 +29,11 @@ the "file:" or "http:" protocol.
+ Feel free to copy/paste additional components from other machine XML files on [pcjs.org](http://www.pcjs.org/).
+ Remember to display the appropriate attribution on anything you share publicly; e.g.:
[PCjs](http://pcjs.org) © 2012-2016 by [Jeff Parsons](mailto:Jeff@pcjs.org) ([@jeffpar](http://twitter.com/jeffpar))
+ Stay in sync with the [PCjs repository](https://github.com/jeffpar/pcjs), to keep your copy of PCjs up-to-date.
+ Stay in sync with the [PCjs Project](https://github.com/jeffpar/pcjs) repository on GitHub, to keep your copy of PCjs
up-to-date.
Have fun!
{% include machine.html id="example3" %}
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -13,11 +13,11 @@
<xsl:variable name="CSSCLASS">pcjs</xsl:variable>
<xsl:variable name="APPCLASS">pcjs</xsl:variable>
<xsl:variable name="APPNAME">PCjs</xsl:variable>
<xsl:variable name="APPVERSION">1.22.1</xsl:variable>
<xsl:variable name="APPVERSION">1.23.0</xsl:variable>
<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
<xsl:template name="componentStyles">
<link rel="stylesheet" type="text/css" href="/versions/pcjs/1.22.1/components.css"/>
<link rel="stylesheet" type="text/css" href="/versions/pcx86/1.23.0/components.css"/>
</xsl:template>
<xsl:template name="componentScripts">

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<machine id="example1" class="pc" width="720px">
<machine id="example1" class="pcx86" width="720px">
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088" autostart="true"/>
<ram id="ramLow" addr="0x00000" size="0x10000"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<machine id="example2" class="pc" width="720px">
<machine id="example2" class="pcx86" width="720px">
<computer id="pc" name="IBM PC"/>
<ram id="ramLow" addr="0x00000" size="0x10000"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<machine id="example3" class="pc" border="0" width="900px">
<machine id="example3" class="pcx86" border="0" width="900px">
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088" autoStart="true"/>
<debugger id="debugger"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<machine id="example3" class="pc" width="720px">
<machine id="example3" class="pcx86" width="720px">
<computer id="pc" name="IBM PC" state="example3.json"/>
<cpu id="cpu8088" model="8088" autoStart="true"/>
<ram id="ramLow" addr="0x00000" size="0x10000"/>

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;fdc&gt; Element
permalink: /docs/pcjs/fdc/
title: PCx86 &lt;fdc&gt; Element
permalink: /docs/pcx86/fdc/
---
PCjs Floppy Drive Controller (FDC) Component
PCx86 Floppy Drive Controller (FDC) Component
---
Format
@ -32,7 +32,7 @@ Attributes
'{A: {name: "PC-DOS 1.0", path: "pcdos-1.00.json"}}'
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -40,7 +40,7 @@ Bindings
For use with a control of type *list*. The list will be populated automatically with a series of &lt;option&gt;
elements based on the number of floppy drives, as determined by the SW1 settings obtained from the
[ChipSet](/docs/pcjs/chipset/) component.
[ChipSet](/docs/pcx86/chipset/) component.
* *listDisks*
@ -72,7 +72,7 @@ Output
```html
<div id="..." class="pc-fdc pc-component">
<div class="pc-container">
<div class="pcjs-fdc" data-value="id:'...',name:'...',listDrives:'...',listDisks:'...',loadDrive:'...'">
<div class="pcx86-fdc" data-value="id:'...',name:'...',listDrives:'...',listDisks:'...',loadDrive:'...'">
</div>
</div>
</div>
@ -81,4 +81,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;hdc&gt; Element
permalink: /docs/pcjs/hdc/
title: PCx86 &lt;hdc&gt; Element
permalink: /docs/pcx86/hdc/
---
PCjs Hard Drive Controller (HDC) Component
PCx86 Hard Drive Controller (HDC) Component
---
Format
@ -49,18 +49,18 @@ Attributes
For the Xebec (*'xt'*) controller, you should install the Xebec ROM; eg:
```xml
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pcx86/hdc/ibm-xebec-1982.json"/>
```
For the Western Digital (*'at'*) controller, use a Model 5170 (or newer) ROM module; eg:
```xml
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/1984-01-10/1984-01-10.json"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pcx86/rom/5170/1984-01-10/1984-01-10.json"/>
```
The default *type* setting is *'xt'*.
* Also supports the attributes of *[Component](/docs/pcjs/component/)*.
* Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -77,7 +77,7 @@ Output
```html
<div id="..." class="pc-hdc pc-component">
<div class="pc-container">
<div class="pcjs-hdc" data-value="id:'...',name:'...',drives:'...'">
<div class="pcx86-hdc" data-value="id:'...',name:'...',drives:'...'">
</div>
</div>
</div>
@ -86,4 +86,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;keyboard&gt; Element
permalink: /docs/pcjs/keyboard/
title: PCx86 &lt;keyboard&gt; Element
permalink: /docs/pcx86/keyboard/
---
PCjs Keyboard Component
PCx86 Keyboard Component
---
Format
@ -25,7 +25,7 @@ Attributes
* us84: US keyboard with 84-key layout
* us101: US keyboard with 101-key layout
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -47,7 +47,7 @@ Example
<keyboard id="keyboard" model="us83"/>
```
See [/devices/pc/keyboard/us83-softkeys.xml](/devices/pc/keyboard/us83-softkeys.xml) for an example that provides a
See [/devices/pcx86/keyboard/us83-softkeys.xml](/devices/pcx86/keyboard/us83-softkeys.xml) for an example that provides a
complete "soft keyboard".
Output
@ -55,7 +55,7 @@ Output
```html
<div id="..." class="pc-keyboard pc-component">
<div class="pc-container">
<div class="pcjs-keyboard" data-value="id:'...',name:'...',model:'...',...">
<div class="pcx86-keyboard" data-value="id:'...',name:'...',model:'...',...">
</div>
</div>
</div>
@ -64,4 +64,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;machine&gt; Element
permalink: /docs/pcjs/machine/
title: PCx86 &lt;machine&gt; Element
permalink: /docs/pcx86/machine/
---
PCjs Machine Component
PCx86 Machine Component
---
Format
@ -17,15 +17,15 @@ Purpose
---
Container for a complete machine definition.
Machines are components that contain other components. See [Component](/docs/pcjs/component/) for more details.
Machines are components that contain other components. See [Component](/docs/pcx86/component/) for more details.
Attributes
---
* *class* (required)
For PCjs machines, this must be set to "pcjs", indicating the machine belongs to PCjs.
For PCx86 machines, this must be set to "pcx86", indicating the machine belongs to the PCx86 application.
* Also supports the attributes of [Component](/docs/pcjs/component/). The *id* attribute is optional for a machine,
* Also supports the attributes of [Component](/docs/pcx86/component/). The *id* attribute is optional for a machine,
unless there is more than one machine on a page, in which case each machine must have a unique *id*.
Bindings
@ -35,7 +35,7 @@ None.
Example
---
```xml
<machine id="ibm5150" class="pcjs" width="740px" pos="center" border="1" style="background-color:#FAEBD7">...</machine>
<machine id="ibm5150" class="pcx86" width="740px" pos="center" border="1" style="background-color:#FAEBD7">...</machine>
```
Output
@ -48,4 +48,4 @@ Output
</div>
```
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;mouse&gt; Element
permalink: /docs/pcjs/mouse/
title: PCx86 &lt;mouse&gt; Element
permalink: /docs/pcx86/mouse/
---
PCjs Mouse Component
PCx86 Mouse Component
---
Format
@ -24,7 +24,7 @@ Attributes
Specifies the id of the Serial component that the mouse must be connected to.
As support for more types of mouse hardware are added, new attributes will be added. Also supports the attributes
of *[Component](/docs/pcjs/component/)*.
of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -41,10 +41,10 @@ Output
```html
<div id="..." class="pc-mouse pc-component">
<div class="pc-container">
<div class="pcjs-mouse" data-value="id:'...',name:'...',serial:'...'>
<div class="pcx86-mouse" data-value="id:'...',name:'...',serial:'...'>
</div>
</div>
</div>
```
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;panel&gt; Element
permalink: /docs/pcjs/panel/
title: PCx86 &lt;panel&gt; Element
permalink: /docs/pcx86/panel/
---
PCjs Control Panel Component
PCx86 Control Panel Component
---
Format
@ -16,8 +16,8 @@ Format
Purpose
---
Creates an instance of the Control Panel component, which simply acts as a container for controls that the
machine wants to bind to the [Computer](/docs/pcjs/computer/), [CPU](/docs/pcjs/cpu/), [Keyboard](/docs/pcjs/keyboard/)
and/or [Debugger](/docs/pcjs/debugger/) components.
machine wants to bind to the [Computer](/docs/pcx86/computer/), [CPU](/docs/pcx86/cpu/), [Keyboard](/docs/pcx86/keyboard/)
and/or [Debugger](/docs/pcx86/debugger/) components.
Attributes
---
@ -25,8 +25,8 @@ None.
Bindings
---
Refer to available bindings in the [Computer](/docs/pcjs/computer/), [CPU](/docs/pcjs/cpu/), [Keyboard](/docs/pcjs/keyboard/)
and [Debugger](/docs/pcjs/debugger/) components.
Refer to available bindings in the [Computer](/docs/pcx86/computer/), [CPU](/docs/pcx86/cpu/), [Keyboard](/docs/pcx86/keyboard/)
and [Debugger](/docs/pcx86/debugger/) components.
Example
---
@ -44,14 +44,14 @@ Example
</panel>
```
See [/devices/pc/panel/default.xml](/devices/pc/panel/default.xml) for a more complete example.
See [/devices/pcx86/panel/default.xml](/devices/pcx86/panel/default.xml) for a more complete example.
Output
---
```html
<div id="..." class="pc-panel pc-component">
<div class="pc-container">
<div class="pcjs-panel" data-value="id:'...',name:'...'">
<div class="pcx86-panel" data-value="id:'...',name:'...'">
</div>
</div>
</div>
@ -60,4 +60,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;parallel&gt; Element
permalink: /docs/pcjs/parallel/
title: PCx86 &lt;parallel&gt; Element
permalink: /docs/pcx86/parallel/
---
PCjs ParallelPort Component
PCx86 ParallelPort Component
---
Format
@ -30,7 +30,7 @@ Attributes
For example, if you've defined a Control Panel with a &lt;textarea&gt; control bound to "print", specifying a
binding of "print" for the Parallel Port component will bind its port to the same control.
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -50,10 +50,10 @@ Output
```html
<div id="..." class="pc-parallel pc-component">
<div class="pc-container">
<div class="pcjs-parallel" data-value="id:'...',name:'...',adapter:'...',binding:'...'">
<div class="pcx86-parallel" data-value="id:'...',name:'...',adapter:'...',binding:'...'">
</div>
</div>
</div>
```
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;ram&gt; Element
permalink: /docs/pcjs/ram/
title: PCx86 &lt;ram&gt; Element
permalink: /docs/pcx86/ram/
---
PCjs Random-Access Memory (RAM) Component
PCx86 Random-Access Memory (RAM) Component
---
Format
@ -26,14 +26,14 @@ Attributes
* *size* (optional; default is 0x00000)
The amount of RAM, in bytes. If the size is omitted (or 0), the [ChipSet](/docs/pcjs/chipset/) component
The amount of RAM, in bytes. If the size is omitted (or 0), the [ChipSet](/docs/pcx86/chipset/) component
is queried for the amount of RAM indicated by SW1/SW2.
* *test* (optional; default is true)
Disables the ROM BIOS memory test when set to "false".
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -54,7 +54,7 @@ Output
```html
<div id="..." class="pc-ram pc-component">
<div class="pc-container">
<div class="pcjs-ram" data-value="id:'...',name:'...',addr:'...',size:'...',test:'...'">
<div class="pcx86-ram" data-value="id:'...',name:'...',addr:'...',size:'...',test:'...'">
</div>
</div>
</div>
@ -63,4 +63,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;rom&gt; Element
permalink: /docs/pcjs/rom/
title: PCx86 &lt;rom&gt; Element
permalink: /docs/pcx86/rom/
---
PCjs Read-Only Memory (ROM) Component
PCx86 Read-Only Memory (ROM) Component
---
Format
@ -33,11 +33,11 @@ Attributes
* *notify* (optional)
The *id* of a component to notify when *file* has been loaded. For example, the *[Video](/docs/pcjs/video/)*
The *id* of a component to notify when *file* has been loaded. For example, the *[Video](/docs/pcx86/video/)*
component may need to know when an external video ROM has been loaded. Any component can load its own files,
including ROM image files, but it's simpler to use the ROM component and request notification.
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -46,7 +46,7 @@ None.
Example
---
```xml
<rom id="romBIOS" addr="0xfe000" size="0x02000" file="/devices/pc/rom/5150/bios/1981-04-24.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x02000" file="/devices/pcx86/rom/5150/bios/1981-04-24.json"/>
```
Output
@ -54,10 +54,10 @@ Output
```html
<div id="..." class="pc-rom pc-component">
<div class="pc-container">
<div class="pcjs-rom" data-value="id:'...',name:'...',addr:'...',size:'...',file:'...'">
<div class="pcx86-rom" data-value="id:'...',name:'...',addr:'...',size:'...',file:'...'">
</div>
</div>
</div>
```
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;serial&gt; Element
permalink: /docs/pcjs/serial/
title: PCx86 &lt;serial&gt; Element
permalink: /docs/pcx86/serial/
---
PCjs SerialPort Component
PCx86 SerialPort Component
---
Format
@ -30,7 +30,7 @@ Attributes
For example, if you've defined a Control Panel with a &lt;textarea&gt; control bound to "print", specifying a
binding of "print" for the Serial Port component will bind its port to the same control.
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -50,10 +50,10 @@ Output
```html
<div id="..." class="pc-serial pc-component">
<div class="pc-container">
<div class="pcjs-serial" data-value="id:'...',name:'...',adapter:'...',binding:'...'">
<div class="pcx86-serial" data-value="id:'...',name:'...',adapter:'...',binding:'...'">
</div>
</div>
</div>
```
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]

View file

@ -1,10 +1,10 @@
---
layout: page
title: PCjs &lt;video&gt; Element
permalink: /docs/pcjs/video/
title: PCx86 &lt;video&gt; Element
permalink: /docs/pcx86/video/
---
PCjs Video Component
PCx86 Video Component
---
Format
@ -30,7 +30,7 @@ Attributes
* "cga" (Color Graphics Adapter)
* "ega" (Enhanced Graphics Adapter)
If *model* is not set, the SW1 switch block settings from the [ChipSet](/docs/pcjs/chipset/) component will
If *model* is not set, the SW1 switch block settings from the [ChipSet](/docs/pcx86/chipset/) component will
determine the video model to use ("mda" or "cga" only).
* *screenWidth*, *screenHeight* (required)
@ -63,7 +63,7 @@ Attributes
true enables HTML5 canvas image smoothing, false disables it (if not specified, the browser's default is used);
can also be present as a URL parameter.
Also supports the attributes of *[Component](/docs/pcjs/component/)*.
Also supports the attributes of *[Component](/docs/pcx86/component/)*.
Bindings
---
@ -85,7 +85,7 @@ Output
```html
<div id="..." class="pc-video pc-component">
<div class="pc-container">
<div class="pcjs-video" data-value="...">
<div class="pcx86-video" data-value="...">
</div>
</div>
</div>
@ -94,4 +94,4 @@ Output
Also, if any controls are defined, another &lt;div&gt; of class="pc-controls" is created in the container &lt;div&gt;,
with each control inside a &lt;div&gt; of class="pc-control".
[Return to [PCjs Documentation](..)]
[Return to [PCx86 Documentation](..)]