Initial commit (a clone of the jsmachines project as of v1.15.3)

This commit is contained in:
jeffpar 2014-09-27 14:52:57 -07:00
commit a5e3e6a59d
714 changed files with 130602 additions and 0 deletions

82
docs/about/README.md Normal file
View file

@ -0,0 +1,82 @@
About JavaScript Machines
---
The JavaScript Machines (**JSMachines**) project is a collection of computer simulations written in JavaScript,
maintained on [GitHub](http://github.com/), and hosted at [pcjs.org](http://www.pcjs.org/) (formerly
[jsmachines.net](http://jsmachines.net/)).
The goals of the 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.
The simulations are written entirely in JavaScript and run well in a variety of web browsers, on both
desktop and mobile devices. Machines are created with simple XML files that define a set of machine components,
along with the features that each component should enable. More details about machine definitions and component
capabilities can be found in the [Documentation](/docs/).
---
### Emulating the Challenger 1P
The first **JSMachines** application was [C1Pjs](/docs/c1pjs/), a simulation of the
Challenger 1P, which was a 6502-based microcomputer introduced by Ohio Scientific in 1978.
C1Pjs v1.0 was released in July 2012, first on ecpsim.org and cpusim.org, then on [jsmachines.net](http://jsmachines.net/c1pjs),
and finally [pcjs.org](http://www.pcjs.org/). More information about the first release of C1Pjs was also
[posted](http://osiweb.org/osiforum/viewtopic.php?f=3&t=103) on the [OSI Discussion Forum](http://osiweb.org/osiforum/index.php)
at [osiweb.org](http://osiweb.org/).
---
### Emulating the IBM PC
The next **JSMachines** application was [PCjs](/docs/about/pcjs/), which simulates the original IBM PC and IBM PC XT.
[PCjs](/docs/about/pcjs/) emulates the Intel 8088 CPU, as well as IBM Monochrome Display Adapter (MDA) and
Color Display Adapter (CGA) video cards, along with assorted motherboard and expansion bus components. It also
includes an optional debugger and a user-configurable control panel.
PCjs v1.0 was released on [jsmachines.net](http://jsmachines.net/) in late 2012, and the **JSMachines** project,
with its second full-featured machine emulation, was launched.
See the PCjs [History](/docs/about/pcjs/) for information about more recent releases.
---
### Migrating to Node.js
The **JSMachines** project was migrated to a [Node.js](http://nodejs.org) web server ([pcjs.org](http://www.pcjs.org/))
in 2014.
The goals included:
- Using JavaScript exclusively, for both client and server development
- Leveraging the Node.js web server to provide more sophisticated I/O capabilities
- Improving overall website design, including structure, appearance and responsiveness
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.
---
### License
The **JSMachines** project is maintained on [GitHub](http://github.com/) (public release date TBD). The portions
of the project that have been published here are free for redistribution and/or modification under the terms
of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
You are required to include the appropriate copyright notice (e.g., `PCjs v1.13.5 © 2012-2014 by @jeffpar`)
in every source code file of every copy or modified version of this work, and to display that copyright notice
on every screen that loads or runs any version of this software.
See [COPYING](/COPYING) for details.
---
### More Information
If you have questions or run into any problems, you're welcome to [tweet](http://twitter.com/jeffpar) or
[email](mailto:Jeff@pcjs.org).

69
docs/about/pcjs/README.md Normal file
View file

@ -0,0 +1,69 @@
About PCjs
---
PCjs is a IBM PC and PC XT simulator written entirely in JavaScript. It's designed to load and run extremely
fast, it works well in all modern web browsers (both desktop and mobile), and it's easy to customize.
Check out the [Demos](/#demos) on the home page, and all the other PCjs [Application](/apps/pc/), [Boot Disk](/disks/pc/)
and [Machine](/configs/pc/machines/) demos, including an IBM PC XT "[Server Array](/configs/pc/machines/5160/cga/256kb/array/)"
featuring multiple PCs running side-by-side.
### Features
+ Build your own IBM PC and IBM PC XT 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 or EGA), serial ports, mouse, and more. See the
[Documentation](/docs/pcjs/) for details.
+ 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/).
+ 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* attribute 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 "Load" 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), 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
More hardware suport is targeted for version 1.20.0, including:
+ Complete EGA emulation
+ 80286 CPU emulation
+ PC AT hardware emulation
Limited EGA emulation is currently available as of version 1.14.0.
### History
+ v1.14.0 introduced limited EGA emulation, as discussed on our [Blog](/blog/2014/07/30/).
+ v1.13.0 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 **JSMachines** README.md documents
and automatically converts them into 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](/configs/pc/machines/) for
machines that include a soft-keyboard.
+ v1.06c added support for user-defined diskette images. Select "User-defined URL..." from the diskette list and click
"Load". 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*.