Merge branch 'next-release'

This commit is contained in:
Jeff Parsons 2016-02-25 11:06:25 -08:00
commit e6117ee58e
145 changed files with 7371 additions and 5097 deletions

View file

@ -379,12 +379,12 @@ module.exports = function(grunt) {
}
}
},
"demos": {
"examples": {
files: [
{
cwd: "versions/pcjs/<%= pkg.version %>/",
src: ["pc.js", "pc-dbg.js", "components.css", "components.xsl"],
dest: "docs/pcjs/demos/",
dest: "docs/pcjs/examples/",
expand: true
}
],
@ -457,8 +457,8 @@ module.exports = function(grunt) {
cmd: "./modules/htmlout/bin/delete_indexes.sh",
args: []
},
"zipify-demos": {
options: {cwd: "docs/pcjs/demos"},
"zip-examples": {
options: {cwd: "docs/pcjs/examples"},
cmd: "./zip.sh",
args: ["v" + pkg.version + ".zip"]
}
@ -512,6 +512,6 @@ module.exports = function(grunt) {
grunt.registerTask("promote", ["replace:promote-to-version"]);
grunt.registerTask("clean", ["run:delete-indexes"]);
grunt.registerTask("copyfiles", grunt.option("rebuild")? ["copy"] : ["newer:copy"]);
grunt.registerTask("default-osx", ["compile", "copyfiles", "run:zipify-demos"]);
grunt.registerTask("default-osx", ["compile", "copyfiles", "run:zip-examples"]);
grunt.registerTask("default", ["compile", "copyfiles"]);
};

View file

@ -5,8 +5,12 @@ Welcome to [PCjs](/docs/about/pcjs/), the first IBM PC simulation to run in your
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](http://github.com/). The project includes:
* [PCjs](/docs/pcjs/), a simulation of the original IBM PC (circa 1981)
* [C1Pjs](/docs/c1pjs/), a simulation of the OSI Challenger 1P (circa 1978)
* [PCjs](/docs/pcjs/), a simulation of the IBM PC and PC compatibles
* [C1Pjs](/docs/c1pjs/), a simulation of the 6502-based OSI Challenger 1P
PCjs first simulated the 4.77Mhz 8088-based IBM PC, and has steadily evolved to support more classic machines,
including the IBM PC XT, the 80286-based IBM PC AT, and the 80386-based COMPAQ DeskPro 386. PCjs fully supports
the machines' original ROMs, video cards, etc, and all machines run at their original speeds.
All the simulations are written entirely in JavaScript. No Flash, Java or other plugins are required.
Supported browsers include modern versions of Chrome, Safari, Firefox, Internet Explorer (v9.0 and up), Edge,
@ -59,8 +63,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/demos/) and [remote](http://www.pcjs.org/)
operation.
with or without a web server, and examples are provided for both [local](/docs/pcjs/examples/) and
[remote](http://www.pcjs.org/) operation.
The project includes:
@ -76,7 +80,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/demos/)), your browser will probably be unable to load all of them, due to security restrictions.
[Demos](/docs/pcjs/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

View file

@ -17,7 +17,7 @@ right_brace: "}"
# Build settings
exclude: ["index.html", "**/index.html", "**/archive", "logs", "node_modules", "**/c64", "**/private", "src", "**/src", "tmp", "videos", "web", ".git", ".idea"]
exclude: ["index.html", "**/index.html", "**/archive", "**/c64", "blog/posts", "logs", "node_modules", "**/private", "src", "**/src", "tmp", "videos", "web", ".git", ".idea"]
markdown: kramdown
kramdown:
input: GFM

View file

@ -1,4 +1,5 @@
developer: true
url: "http://localhost:4000"
pcjs:
compiled: false

View file

@ -22,7 +22,7 @@ here and in markout.js. Examples include 'autopower' ('autoPower') and 'automou
{% endcomment %}
{% for machine in page.machines %}
{% capture machine_embed %}window.embed{{ machine.type | remove:'-dbg' | upcase }}{% endcapture %}
{% capture machine_embed %}embed{{ machine.type | remove:'-dbg' | upcase }}{% endcapture %}
{% if machine.autopower == nil %}
{% assign machine_autopower = "true" %}
{% else %}

View file

@ -0,0 +1,8 @@
{% comment %}
Used by pages like the one in /api/v1/dump/ to implement a client-side API.
{% endcomment %}
{% for script in page.scripts %}
<script type="text/javascript" src="{{ site.baseurl }}{{ script }}"></script>
{% endfor %}

View file

@ -17,6 +17,8 @@
{% include machine-engines.html %}
{% include page-scripts.html %}
{% include google-analytics.html %}
</body>

View file

@ -1,6 +1,6 @@
---
layout: post
title: Compaq DeskPro 386
title: COMPAQ DeskPro 386
date: 2015-02-22 11:00:00
category: 80386
permalink: /blog/2015/02/22/
@ -11,15 +11,15 @@ machines:
uncompiled: true
---
I finally dumped the [Compaq DeskPro 386/16 ROMs](/devices/pc/bios/compaq/deskpro386/) from the motherboard I bought
I finally dumped the [COMPAQ DeskPro 386/16 ROMs](/devices/pc/bios/compaq/deskpro386/) from the motherboard I bought
on ebay last year, so I'm ready to begin adding 80386 support to PCjs.
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
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/) test configuration is displayed below.
A [COMPAQ DeskPro 386](/devices/pc/machine/compaq/deskpro386/ega/2048kb/) 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

@ -1,6 +1,6 @@
---
layout: post
title: Compaq DeskPro 386 Update
title: COMPAQ DeskPro 386 Update
date: 2015-04-16 11:00:00
category: 80386
permalink: /blog/2015/04/16/
@ -11,7 +11,7 @@ machines:
uncompiled: true
---
PCjs can now boot the [Compaq DeskPro 386/16 ROM BIOS](/devices/pc/bios/compaq/deskpro386/).
PCjs can now boot the [COMPAQ DeskPro 386/16 ROM BIOS](/devices/pc/bios/compaq/deskpro386/).
There's still a problem with the hard disk controller, which I haven't looked into yet,
but booting from a floppy works.
@ -43,7 +43,7 @@ of the 80386's 4Gb address space are physically mapped to this ROM image.
replacing the ROM in the first megabyte with write-protected RAM; the top 64Kb of that
RAM must first be initialized with the 64Kb at %000F0000 prior to remapping. It's also
possible to copy external ROMs from %000C0000 through %000EFFFF into the bottom 64Kb of
that RAM, but this is only done for ROMs known to contain relocatable code; eg, a Compaq
that RAM, but this is only done for ROMs known to contain relocatable code; eg, a COMPAQ
Video Graphics Controller (VGC) Board.
> Every DeskPro 386 system must have a MINIMUM of 1Mb of RAM, of which either 256Kb,
@ -53,7 +53,7 @@ to the top of the 16th megabyte (ending at address %00FFFFFF), the last 128Kb of
is used by the "RAM Relocation" feature. The remaining memory immediately below that
128Kb (ie, below %00FE0000) can only be accessed by special system software, such as CEMM.
> Compaq refers to that remaining memory as "Compaq Built-in Memory".
> COMPAQ refers to that remaining memory as "Compaq Built-in Memory".
So there you have it. Once the ROM has relocated itself to RAM at the top of the 16th
megabyte, there are no less than THREE physical address ranges where ROM code and data
@ -75,7 +75,7 @@ accessible; the other two are not.
April 19, 2015 Update
---
Thanks to some sleuthing by [Michal Necasek](http://os2museum.com/), it turns out that my
assumptions about A20 management on the Compaq DeskPro 386 were incorrect.
assumptions about A20 management on the COMPAQ DeskPro 386 were incorrect.
He noted that, on page 398 of "DOS Internals" by Geoff Chappell, (c) 1994, the author says:
@ -114,7 +114,7 @@ protected-mode with A20 disabled -- an unwise thing to do on most machines:
;
; When we arrive here, the A20 line has been disabled; on most systems, that would
; mean that the ROM's GDT would only be accessible at the "low" ROM address (%0F0730),
; not the "high" address (%FF0730). But fortunately, A20 management on Compaq
; not the "high" address (%FF0730). But fortunately, A20 management on COMPAQ
; DeskPros affects wrap-around only from the 1st to the 2nd megabyte; no other address
; range is affected.
;
@ -140,12 +140,12 @@ I'm in the process of replacing that work-around with a much more compatible cha
on 32-bit bus configurations, which involves changing the physical address map for the 2nd megabyte
to match that of the 1st megabyte whenever A20 is disabled. I could probably get away with remapping
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.
DeskPro 386, I'm going to assume COMPAQ's A20 implementation affected the entire 2nd megabyte.
Here's my Compaq DeskPro 386/16 PCjs 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.
Here's my [COMPAQ DeskPro 386/16](/devices/pc/machine/compaq/deskpro386/ega/2048kb/) 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.
{% include machine.html id="deskpro386" %}

View file

@ -13,31 +13,31 @@ machines:
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's OS/2 1.0 in the [8Mhz IBM PC AT](/disks/pc/os2/ibm/1.0/) machine
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
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
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/programming/os2/microsoft/ptk/1.0/) documentation
[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/).
Aside from Microsoft's assembler (MASM) and C compiler (CL), the SDK included some other useful tools, such as the
**SDK Editor** (SDKED), which was essentially an OS/2 port of Mark Zbikowski's Editor (Z) that was used internally
at Microsoft for many years. It was renamed to the **Microsoft Editor** (M or MEP) with the release of Microsoft C
5.1, and it was later integrated into **Programmer's Workbench** (PWB), the text-mode Integrated Development
Environment (IDE) that came with Microsoft C 6.0.
Aside from **Microsoft Macro Assembler 5.00A** (MASM) and **Microsoft C Compiler 5.10 (Beta)** (CL), the SDK
included some other useful tools, such as the **SDK Editor** (SDKED), which was essentially an OS/2 port of
Mark Zbikowski's full-screen editor (Z) that was used internally at Microsoft for many years. It was renamed
to the **Microsoft Editor** (M or MEP) with the release of **Microsoft C Compiler 5.10**, and it was later integrated
into **Programmer's Workbench** (PWB), the text-mode Integrated Development Environment (IDE) that came with
**Microsoft C Compiler 6.0**.
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 an essential tool.
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.
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. I'll be adding a complete list of all the files
that came with SDK to that page in the near future.
To boot IBM OS/2 1.0 and tinker with the [SDK](/disks/pc/tools/microsoft/os2/sdk/1.02/), scroll down and
click the "Run" button.
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
[Microsoft® Operating System/2 Programmers Toolkit](/pubs/pc/software/os2/microsoft/ptk10/) and then write some code!
{% include machine.html id="ibm5170" %}

View file

@ -0,0 +1,94 @@
---
layout: post
title: Remembering COMPAQ
date: 2016-02-24 14:00:00
permalink: /blog/2016/02/24/
---
IBM is obviously the company everyone thinks of first when we talk about the IBM PC -- after all, IBM is right
there in the name. And they designed the thing. So IBM deserves lots of credit, especially the folks who worked
in Boca Raton at IBM's Entry Systems Division in the early 1980's.
However, IBM was a huge company that existed *before* the IBM PC and which still exists today; they had some built-in
advantages. The PC era also saw a lot of companies spring up from nowhere and then disappear just as quickly.
Some of them didn't do anything particularly innovative or noteworthy -- they probably just wanted to ride the PC wave
and make some easy money in the process.
I think one of the more exceptional companies from that era is COMPAQ. It's easy to dismiss COMPAQ as just another
"copy-cat" operation, but I think it's a mistake to dismiss any company in the PC business as simply "copying" or
"cloning" the IBM design. Companies like COMPAQ were really in the *compatibility* business.
Innovation in the PC industry would not have been as rapid and diverse if IBM had been the only supplier of
compatible machines and accessories. And IBM probably would have continued some of the monopolistic practices it had
perfected in the mainframe era, like exclusive service contracts. That might have been a win for IBM, but it almost
certainly would *not* have been a win for customers.
In 1982, the founders of COMPAQ took a big gamble, by reportedly investing around a million dollars to create
system software (ROM BIOS) that mimicked IBM's without infringing on it. I don't know if COMPAQ pioneered the concept
of "clean room" design, where the engineers designing and coding have no direct contact with the hardware and software
they're cloning, but they were certainly successful.
But that wasn't COMPAQ's most important contribution. That was just the price they had to "pay to play." Armed with
compatible hardware and software, COMPAQ proceeded to innovate in ways that IBM did not.
Look at COMPAQ's first product: the COMPAQ Portable. For starters, it was *portable*. And unlike
IBM machines, it didn't force you to choose between a higher-quality text-only (MDA) display or a lower-quality
graphics-capable (CGA) display. COMPAQ improved on IBM's mutually-exclusive display choices by creating a monochrome
display that could display both high-quality text *and* graphics.
IBM released their own portable unit a year later, but it looked suspciously COMPAQ-like, and it lacked COMPAQ's
innovative display.
That tradition of innovation at COMPAQ continued for many years. Sometimes they even seemed *more* concerned about
compatibility than IBM did. For example, faster machines sometimes broke speed-sensitive floppy-based copy protection
schemes, which COMPAQ tried to avoid by automatically *slowing* the machine down whenever a floppy drive was spinning.
To my knowledge, IBM never bothered with such a feature -- maybe IBM was simply being pragmatic, or perhaps they were
just a little arrogant, operating on the theory that if the universe revolves around IBM, then the planets will
simply realign *themselves* (translation: software vendors will release new versions if they want to remain IBM-compatible).
Sadly, COMPAQ was ultimately absorbed by another behemoth -- Hewlett Packard -- and then simply disappeared. Today,
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/bios/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,
you would think those things would be memorialized a bit better.
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,
since they are all machines I would like to see PCjs eventually support:
+ COMPAQ Portable
+ COMPAQ [Portable] Plus
+ COMPAQ DeskPro
+ COMPAQ DeskPro 286
+ COMPAQ Portable 286
+ COMPAQ Portable II
+ [COMPAQ DeskPro 386](/devices/pc/machine/compaq/deskpro386/)
+ COMPAQ Portable III
+ COMPAQ Portable 386
+ COMPAQ 386/20e
+ COMPAQ SLT Series (SLT/286)
+ COMPAQ LTE Series (LTE 286, LTE 386)
It's hard to stop at this point, because PCjs supports the 80386, and COMPAQ produced other 80386-based systems,
like those in the "LTE Lite" series. But I think I need to stick my original plan and draw a line at the end of the
1980s.
### Regarding The COMPAQ Name
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
called themselves `The COMPAQ Personal Computer MS-DOS`, but in 3.31, the copyright string changed to
`Compaq Computer Corp.`
Their all-caps practice also extended to at least *some* product names (eg, the `COMPAQ DESKPRO`), but I'm not sure
how strict they were, and I'm decidedly less so, which is why I use the name `COMPAQ DeskPro`.
*[@jeffpar](http://twitter.com/jeffpar)*
*February 24, 2016*

31
api/v1/dump/README.md Normal file
View file

@ -0,0 +1,31 @@
---
layout: page
title: PCjs DiskDump and FileDump API
permalink: /api/v1/dump/
scripts: # the following list of scripts should mirror what /modules/diskdump/lib/diskdump.js requires
- /modules/shared/lib/defines.js
- /modules/shared/lib/netlib.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/diskapi.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/component.js
- /modules/pcjs/lib/x86.js
- /modules/diskdump/lib/diskdump.js
---
PCjs DiskDump and FileDump API
===
The PCjs [DiskDump](/modules/diskdump/) and [FileDump](/modules/filedump/) API are not fully supported
by the current PCjs web server.
When **pcjs.org** switched from a Node.js web server running on
[Amazon Web Services](https://aws.amazon.com/elasticbeanstalk/) to
[GitHub Pages](https://pages.github.com/), the original server-side API had to be abandoned.
However, we're working on a client-side replacement of the API that will run
entirely in your browser, so hopefully portions of the original API will be available in the near future.
In the meantime, check out the
[Developer Notes](https://github.com/jeffpar/pcjs#user-content-developer-notes) section of the
[PCjs Project](https://github.com/jeffpar/pcjs) for instructions on running your own local copy of Node.js and the
PCjs web server.

17
api/v1/report/README.md Normal file
View file

@ -0,0 +1,17 @@
---
layout: page
title: PCjs Reporting API
permalink: /api/v1/report/
---
PCjs Reporting API
===
The PCjs Reporting API is not supported by the current PCjs web server.
When **pcjs.org** switched from a Node.js web server running on
[Amazon Web Services](https://aws.amazon.com/elasticbeanstalk/) to
[GitHub Pages](https://pages.github.com/), the original server-side API had to be abandoned.
However, if you're encountering a serious problem with any of the machines on **pcjs.org**, feel free to
[send a note](mailto:Jeff@pcjs.org) about the problem, along with a link to the machine. However, there is
no PCjs Customer Service Department, so we may or may not be able to help.

19
api/v1/user/README.md Normal file
View file

@ -0,0 +1,19 @@
---
layout: page
title: PCjs User API
permalink: /api/v1/user/
---
PCjs User API
===
The PCjs User API is not supported by the current PCjs web server.
When **pcjs.org** switched from a Node.js web server running on
[Amazon Web Services](https://aws.amazon.com/elasticbeanstalk/) to
[GitHub Pages](https://pages.github.com/), the original server-side API had to be abandoned.
Support for PCjs user accounts, including remote disk storage, is still partially supported by the
Node.js server implementation, so if you really want to try it, you'll have to check out the
[Developer Notes](https://github.com/jeffpar/pcjs#user-content-developer-notes) section of the
[PCjs Project](https://github.com/jeffpar/pcjs) for instructions on running your own local copy of Node.js and the
PCjs web server.

View file

@ -33,7 +33,7 @@ machines:
redirect_from:
- /configs/c1p/machines/array/
- /configs/c1p/machines/8kb/array/
- /devices/other/c1p/array.xml/
- /devices/c1p/array.xml/
---
Challenger 1P (8Kb) "Server Array"

View file

@ -5,7 +5,7 @@
<computer id="xt-ega-256k" name="IBM PC XT"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" test="false"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5160/basic/BASIC110.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5160/bios/1982-11-08/XTBIOS-REV1.json"/>

View file

@ -4,7 +4,7 @@
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
<computer id="xt-ega-640k" name="IBM PC XT" state="/devices/pc/machine/5160/ega/640kb/win101/state.json"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5160/basic/BASIC110.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5160/bios/1982-11-08/XTBIOS-REV1.json"/>

View file

@ -5,7 +5,7 @@
<computer id="xt-ega-640k" name="IBM PC XT"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5160/basic/BASIC110.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5160/bios/1982-11-08/XTBIOS-REV1.json"/>

View file

@ -5,7 +5,7 @@
<computer id="xt-ega-640k" name="IBM PC XT"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5160/basic/BASIC110.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5160/bios/1982-11-08/XTBIOS-REV1.json"/>

View file

@ -5,7 +5,7 @@
<computer id="xt-ega-640k" name="IBM PC XT" state="/devices/pc/machine/5160/ega/640kb/win101/state.json"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5160/basic/BASIC110.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5160/bios/1982-11-08/XTBIOS-REV1.json"/>

View file

@ -4,7 +4,7 @@
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
<computer id="xt-ega-640k" name="IBM PC XT" state="/devices/pc/machine/5160/ega/640kb/win101/state.json"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5160/basic/BASIC110.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5160/bios/1982-11-08/XTBIOS-REV1.json"/>

View file

@ -6,7 +6,7 @@
<cpu id="cpu286" model="80286"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x80000" comment=""/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/bios/1984-01-10/ATBIOS-REV1.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>

View file

@ -6,7 +6,7 @@
<cpu id="cpu286" model="80286" cycles="8000000"/>
<ram id="ramLow" addr="0x00000" test="true" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x80000" comment=""/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/bios/1985-11-15/ATBIOS-REV3.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>

View file

@ -6,7 +6,7 @@
<cpu id="cpu286" model="80286" cycles="8000000"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x80000" comment=""/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/bios/1985-11-15/ATBIOS-REV3.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-arrows.xml"/>

View file

@ -5,7 +5,7 @@
<computer id="at-ega-640k" name="IBM PC AT" buswidth="24"/>
<cpu id="cpu286" model="80286"/>
<ram id="ramLow" addr="0x00000" size="0xa0000"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/bios/1984-01-10/ATBIOS-REV1.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>

View file

@ -5,7 +5,7 @@
<computer id="at-ega-640k" name="IBM PC AT" buswidth="24"/>
<cpu id="cpu286" model="80286"/>
<ram id="ramLow" addr="0x00000" size="0xa0000"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/bios/1984-01-10/ATBIOS-REV1.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal.xml"/>

View file

@ -19,7 +19,7 @@ PCjs supports these IBM PC models:
along with these IBM PC-compatibles:
* [Compaq DeskPro 386](/devices/pc/machine/compaq/deskpro386/)
* [COMPAQ](/devices/pc/machine/compaq/) (eg, [DeskPro 386](/devices/pc/machine/compaq/deskpro386/))
We also support a few non-IBM [Devices](/devices/):

View file

@ -0,0 +1,187 @@
---
layout: page
title: COMPAQ Machines
permalink: /devices/pc/machine/compaq/
---
COMPAQ Machines
---
This is an evolving (and roughly chronological) list of COMPAQ machines from the 1980s, which PCjs may eventually
support:
+ [COMPAQ Portable](#compaq-portable)
+ [COMPAQ [Portable] Plus](#compaq-portable-plus-aka-compaq-plus)
+ [COMPAQ DeskPro](#compaq-deskpro)
+ [COMPAQ DeskPro 286](#compaq-deskpro-286)
+ [COMPAQ Portable 286](#compaq-portable-286)
+ [COMPAQ Portable II](#compaq-portable-ii)
+ [COMPAQ DeskPro 386](#compaq-deskpro-386)
+ [COMPAQ Portable III](#compaq-portable-iii)
+ [COMPAQ Portable 386](#compaq-portable-386)
+ [COMPAQ 386/20e](#compaq-38620e)
+ [COMPAQ SLT Series](#compaq-slt-series) (SLT/286)
+ [COMPAQ LTE Series](#compaq-lte-series) (LTE 286, LTE 386)
At the moment, only the [COMPAQ DeskPro 386](deskpro386/) is supported, but now that we have ROMs for a few other
COMPAQ machines -- most importantly, their **first** machine, the [COMPAQ Portable](/devices/pc/rom/compaq/bios/portable/) --
more should follow.
### Regarding The COMPAQ Name
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
called themselves `The COMPAQ Personal Computer MS-DOS`, but in 3.31, the copyright string changed to
`Compaq Computer Corp.`
Their all-caps practice also extended to at least *some* product names (eg, the `COMPAQ DESKPRO`), but I'm not sure
how strict they were, and I'm decidedly less so, which is why I use the name `COMPAQ DeskPro`.
The rest of this page will be used to collect information about the machines listed above.
---
COMPAQ Portable
---
The PCjs Project now has a [ROM Dump](/devices/pc/rom/compaq/bios/portable/) (REV C).
Reviewed in Byte Magazine, Jan 1983. Reprinted [here](http://blog.modernmechanix.com/byte-reviews-the-compaq-first-pc-clone/).
Also see [Wikipedia](https://en.wikipedia.org/wiki/Compaq_Portable).
COMPAQ Portable Plus (aka COMPAQ Plus)
---
Reviewed in Byte Magazine, Jul 1984, pp. 247-251: "The Compaq Plus".
COMPAQ DeskPro
---
Introduced June 28, 1984. Reviewed in Byte Magazine, May 1985, pp. 260-267. For use with MS-DOS 2.11.
**Model** | **Price** | **CPU** | **Options**
:-------- | :-------- | :---------------- | :------------------------------------------
Model 1 | $2495 | 4.77-7.14Mhz 8086 | 128Kb RAM, 1 FDD
Model 2 | $2995 | 4.77-7.14Mhz 8086 | 256Kb RAM, 2 FDD
Model 3 | $4995 | 4.77-7.14Mhz 8086 | 256Kb RAM, 1 FDD, 10Mb HDD
Model 4 | $7195 | 4.77-7.14Mhz 8086 | 640Kb RAM, 1 FDD, 10Mb HDD, 10Mb Tape Drive
| | |
COMPAQ DeskPro 286
---
Released in 1985 at the same time as the [COMPAQ Portable 286](#compaq-portable-286).
Reviewed in [InfoWorld](https://books.google.com/books?id=2i4EAAAAMBAJ&lpg=PA15&dq=infoworld%20compaq%20deskpro%201985&pg=PA15#v=onepage&q&f=false),
May 20, 1985: "Compaq Edges Past AT Speed and Memory: New Products Use Intel 80286 Processor For 30 Percent Speed Boost".
Updated to 12Mhz in 1987.
From [InfoWorld](https://books.google.com/books?id=yzAEAAAAMBAJ&lpg=PA56&ots=jBzxR3wcps&dq=%22compaq%20deskpro%20286%22&pg=PA56#v=onepage&q&f=false),
June 1987: "Compaq Brings 12-Mhz Machine to 286 Market"
COMPAQ Portable 286
---
Introduced in 1985.
**Model** | **Price** | **CPU** | **Options**
:-------- | :-------- | :---------------- | :----------------------------------------------------
| | 8Mhz 80286 | Up to 2.6Mb RAM, 1.2Mb FDD, 20Mb HDD, 10Mb Tape Drive
| | |
See this [COMPAQ Advertisement](http://www.computerhistory.org/revolution/mobile-computing/18/343/1658).
On July 8, 1985, the [Los Angeles Times](http://articles.latimes.com/1985-07-08/business/fi-9857_1_hard-disk-drive)
reported:
>It's not cheap and it's not for everyone. Equipped as described, the portable lists for $10,378 and contains
about $3,000 worth of extra RAM memory that cannot be utilized by any application software programs now on the market.
(It can be used to simulate a disk drive to speed up programs, however.)
>A standard Compaq Deskpro 286 with 512 kilobytes of RAM memory, a 30-megabyte hard disk and a monitor is priced
at $6,254, compared to IBM's similarly equipped enhanced PC AT that offers only a 20-megabyte hard disk. The Portable
286 with 512K of memory and 20-megabyte hard disk lists for $6,299.
COMPAQ Portable II
---
The COMPAQ Portable II ("slimmed-down version of the Portable 286", as described in Byte Magazine, Oct 1986) was
released on February 20, 1986. For use with MS-DOS 3.10.
**Model** | **Price** | **CPU** | **Options**
:-------- | :-------- | :---------------- | :------------------------------------------
Model 1 | $3499 | 6-8Mhz 80286 | 256Kb RAM, 1 FDD
Model 2 | $3599 | 6-8Mhz 80286 | 256Kb RAM, 2 FDD
Model 3 | $4799 | 6-8Mhz 80286 | 640Kb RAM, 1 FDD, 10Mb HDD
Model 4 | $4999 | 6-8Mhz 80286 | 640Kb RAM, 1 FDD, 20Mb HDD
| | |
Also see [Wikipedia](https://en.wikipedia.org/wiki/Compaq_Portable_II).
COMPAQ DeskPro 386
---
Released in late 1986.
PCjs has detailed information about the [DeskPro 386 ROMs](/devices/pc/rom/compaq/bios/deskpro386/) and system boards.
I also have the hard-to-find **COMPAQ Technical Reference Guide** for the DeskPro 386/25 (Vol. 1), which I'll post
at a later date.
COMPAQ Portable III
---
The PCjs Project now has a [ROM Dump](/devices/pc/rom/compaq/bios/portable3/) (REV K, 1987-01-29).
Reportedly intended to be an 80386-based machine, the Portable III was first released in 1987 as a 12Mhz
80286-based system.
**Model** | **Price** | **CPU** | **Options**
:-------- | :-------- | :---------------- | :----------------------------
| $5000+ | 12Mhz 80286 | 640Kb RAM, 1 FDD, 20-40Mb HDD
| | |
COMPAQ Portable 386
---
[TBD]
COMPAQ 386/20e
---
Released in late 1988. For use with MS-DOS 3.31.
COMPAQ SLT Series
---
From [Wikipedia](https://en.wikipedia.org/wiki/History_of_laptops#Compaq_SLT.2F286): "The COMPAQ SLT/286 debuted
in October 1988, being the first battery-powered laptop to support an internal hard disk drive and a VGA compatible
LCD screen. It weighed 14 lbs."
COMPAQ LTE Series
---
First model in 1989.
Also see [Wikipedia](https://en.wikipedia.org/wiki/Compaq_LTE).
### COMPAQ LTE 286
Various models, such as the [Model 40](http://www.overclockers.com/compaq-lte-286-model-40/).
### COMPAQ LTE 386
[TBD]

View file

@ -1,13 +1,13 @@
---
layout: page
title: Compaq DeskPro 386 Machines
title: COMPAQ DeskPro 386 Machines
permalink: /devices/pc/machine/compaq/deskpro386/
---
Compaq DeskPro 386 Machines
COMPAQ DeskPro 386 Machines
---
* [Compaq DeskPro 386 with 128Kb EGA and 2Mb RAM](ega/2048kb/)
* [Compaq DeskPro 386 with 256Kb EGA and 4Mb RAM](ega/4096kb/)
* [Compaq DeskPro 386 with VGA and 2Mb RAM](vga/2048kb/)
* [Compaq DeskPro 386 with VGA and 4Mb RAM, running Windows 95](vga/4096kb/)
* [COMPAQ DeskPro 386 with 128Kb EGA and 2Mb RAM](ega/2048kb/)
* [COMPAQ DeskPro 386 with 256Kb EGA and 4Mb RAM](ega/4096kb/)
* [COMPAQ DeskPro 386 with VGA and 2Mb RAM](vga/2048kb/)
* [COMPAQ DeskPro 386 with VGA and 4Mb RAM, running Windows 95](vga/4096kb/)

View file

@ -1,6 +1,6 @@
---
layout: page
title: "Compaq DeskPro 386 (2Mb) with EGA Display"
title: "COMPAQ DeskPro 386 (2Mb) with EGA Display"
permalink: /devices/pc/machine/compaq/deskpro386/ega/2048kb/
machines:
- type: pc-dbg

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.20.9/machine.xsl"?>
<machine id="deskpro386" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">Compaq DeskPro 386 (16Mhz), 128Kb EGA, 2048Kb RAM</name>
<computer id="deskpro386-ega-2048k" name="Compaq DeskPro 386" buswidth="32"/>
<name pos="center">COMPAQ DeskPro 386 (16Mhz), 128Kb EGA, 2048Kb RAM</name>
<computer id="deskpro386-ega-2048k" name="COMPAQ DeskPro 386" buswidth="32"/>
<cpu id="cpu386" model="80386" autostart="false"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="Compaq memory at 0xFA0000"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="COMPAQ memory at 0xFA0000"/>
<ram id="ramExt" addr="0x100000" size="0x100000" comment="Extended memory at 0x100000"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf8000" size="0x8000" alias="[0xf0000,0xffff0000,0xffff8000]" file="/devices/pc/rom/compaq/bios/deskpro386/1988-01-28/1988-01-28.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-arrows.xml"/>

View file

@ -1,6 +1,6 @@
---
layout: page
title: "Compaq DeskPro 386 (4Mb) with EGA Display"
title: "COMPAQ DeskPro 386 (4Mb) with EGA Display"
permalink: /devices/pc/machine/compaq/deskpro386/ega/4096kb/
machines:
- type: pc-dbg

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.20.9/machine.xsl"?>
<machine id="deskpro386" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">Compaq DeskPro 386 (16Mhz), 256Kb EGA, 4096Kb RAM</name>
<computer id="deskpro386-ega-2048k" name="Compaq DeskPro 386" buswidth="32"/>
<name pos="center">COMPAQ DeskPro 386 (16Mhz), 256Kb EGA, 4096Kb RAM</name>
<computer id="deskpro386-ega-2048k" name="COMPAQ DeskPro 386" buswidth="32"/>
<cpu id="cpu386" model="80386" autostart="false"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="Compaq memory at 0xFA0000"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="COMPAQ memory at 0xFA0000"/>
<ram id="ramExt" addr="0x100000" size="0x300000" comment="Extended memory at 0x100000"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf8000" size="0x8000" alias="[0xf0000,0xffff0000,0xffff8000]" file="/devices/pc/rom/compaq/bios/deskpro386/1988-01-28/1988-01-28.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-256kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-arrows.xml"/>

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.20.9/machine.xsl"?>
<machine id="deskpro386" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">Compaq DeskPro 386 (16Mhz), Compaq VGA, 2048Kb RAM</name>
<computer id="deskpro386-vga-2048k" name="Compaq DeskPro 386" buswidth="32"/>
<name pos="center">COMPAQ DeskPro 386 (16Mhz), COMPAQ VGA, 2048Kb RAM</name>
<computer id="deskpro386-vga-2048k" name="COMPAQ DeskPro 386" buswidth="32"/>
<cpu id="cpu386" model="80386" autostart="false"/>
<ram id="ramLow" addr="0x00000" test="true" size="0xa0000" comment="ROM BIOS memory test has NOT been disabled"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="Compaq memory at 0xFA0000"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="COMPAQ memory at 0xFA0000"/>
<ram id="ramExt" addr="0x100000" size="0x100000" comment="Extended memory at 0x100000"/>
<rom id="romVGA" addr="0xc0000" size="0x8000" file="/devices/pc/video/compaq/vga/109360-001/1987-10-27.json" notify="videoVGA"/>
<rom id="romBIOS" addr="0xf8000" size="0x8000" alias="[0xf0000,0xffff0000,0xffff8000]" file="/devices/pc/rom/compaq/bios/deskpro386/1988-01-28/1988-01-28.json"/>

View file

@ -1,6 +1,6 @@
---
layout: page
title: "Compaq DeskPro 386 (2Mb) with VGA Display"
title: "COMPAQ DeskPro 386 (2Mb) with VGA Display"
permalink: /devices/pc/machine/compaq/deskpro386/vga/2048kb/
machines:
- type: pc-dbg

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.20.9/machine.xsl"?>
<machine id="deskpro386" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">Compaq DeskPro 386 (16Mhz), IBM VGA, 2048Kb RAM, 20Mb Hard Disk</name>
<computer id="deskpro386-vga-2048k" name="Compaq DeskPro 386" buswidth="32"/>
<name pos="center">COMPAQ DeskPro 386 (16Mhz), IBM VGA, 2048Kb RAM, 20Mb Hard Disk</name>
<computer id="deskpro386-vga-2048k" name="COMPAQ DeskPro 386" buswidth="32"/>
<cpu id="cpu386" model="80386" autostart="false"/>
<ram id="ramLow" addr="0x00000" test="true" size="0xa0000" comment="ROM BIOS memory test has NOT been disabled"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="Compaq memory at 0xFA0000"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="COMPAQ memory at 0xFA0000"/>
<ram id="ramExt" addr="0x100000" size="0x100000" comment="Extended memory at 0x100000"/>
<rom id="romVGA" addr="0xc0000" size="0x6000" file="/devices/pc/video/ibm/vga/ibm-vga.json" notify="videoVGA[0x378d,0x3f8d]"/>
<rom id="romVGA" addr="0xc0000" size="0x6000" file="/devices/pc/video/ibm/vga/1986-10-27/ibm-vga.json" notify="videoVGA[0x378d,0x3f8d]"/>
<rom id="romBIOS" addr="0xf8000" size="0x8000" alias="[0xf0000,0xffff0000,0xffff8000]" file="/devices/pc/rom/compaq/bios/deskpro386/1988-01-28/1988-01-28.json"/>
<video ref="/devices/pc/video/ibm/vga/ibm-vga-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>

View file

@ -1,6 +1,6 @@
---
layout: page
title: "Compaq DeskPro 386 (4Mb) with VGA Display"
title: "COMPAQ DeskPro 386 (4Mb) with VGA Display"
permalink: /devices/pc/machine/compaq/deskpro386/vga/4096kb/
machines:
- type: pc-dbg

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.20.9/machine.xsl"?>
<machine id="deskpro386" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">Compaq DeskPro 386 (16Mhz), IBM VGA, 2048Kb RAM, 20Mb Hard Disk</name>
<computer id="deskpro386-vga-4096k" name="Compaq DeskPro 386" buswidth="32" state="/devices/pc/machine/compaq/deskpro386/vga/4096kb/state.json"/>
<name pos="center">COMPAQ DeskPro 386 (16Mhz), IBM VGA, 2048Kb RAM, 20Mb Hard Disk</name>
<computer id="deskpro386-vga-4096k" name="COMPAQ DeskPro 386" buswidth="32" state="/devices/pc/machine/compaq/deskpro386/vga/4096kb/state.json"/>
<cpu id="cpu386" model="80386" autostart="true"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="Compaq memory at 0xFA0000"/>
<ram id="ramCPQ" addr="0xfa0000" size="0x60000" comment="COMPAQ memory at 0xFA0000"/>
<ram id="ramExt" addr="0x100000" size="0x300000" comment="Extended memory at 0x100000"/>
<rom id="romVGA" addr="0xc0000" size="0x6000" file="/devices/pc/video/ibm/vga/ibm-vga.json" notify="videoVGA[0x378d,0x3f8d]"/>
<rom id="romVGA" addr="0xc0000" size="0x6000" file="/devices/pc/video/ibm/vga/1986-10-27/ibm-vga.json" notify="videoVGA[0x378d,0x3f8d]"/>
<rom id="romBIOS" addr="0xf8000" size="0x8000" alias="[0xf0000,0xffff0000,0xffff8000]" file="/devices/pc/rom/compaq/bios/deskpro386/1988-01-28/1988-01-28.json"/>
<video ref="/devices/pc/video/ibm/vga/ibm-vga-lockfs.xml"/>
<keyboard id="keyboard"/>

View file

@ -15,6 +15,6 @@ sitemap: false
Build Your Own PC
---
{% include build.html id="build-pc" %}
{% include machine-build.html id="build-pc" %}
{% include machine.html id="custom-pc" %}

View file

@ -11,22 +11,21 @@ BASIC ROMs
The project contains the following IBM PC BASIC ROMs:
* [IBM BASIC 1.00](5150/basic/BASIC100.json)
* [IBM BASIC 1.10](5160/basic/BASIC110.json)
* [IBM BASIC 1.00](5150/basic/BASIC100.json)
* [IBM BASIC 1.10](5160/basic/BASIC110.json)
BIOS ROMs
---
The project contains the following IBM PC BIOS ROMs:
* [Model 5150: Apr 24, 1981](5150/bios/1981-04-24/PCBIOS-REV1.json)
* [Model 5150: Oct 19, 1981](5150/bios/1981-10-19/PCBIOS-REV2.json)
* [Model 5150: Oct 27, 1982](5150/bios/1982-10-27/PCBIOS-REV3.json)
* [Model 5160: Nov 08, 1982](5160/bios/1982-11-08/XTBIOS-REV1.json)
* [Model 5160: May 09, 1986](5160/bios/1986-05-09/XTBIOS-REV3.json)
* [Model 5150: Apr 24, 1981](5150/bios/1981-04-24/PCBIOS-REV1.json)
* [Model 5150: Oct 19, 1981](5150/bios/1981-10-19/PCBIOS-REV2.json)
* [Model 5150: Oct 27, 1982](5150/bios/1982-10-27/PCBIOS-REV3.json)
* [Model 5160: Nov 08, 1982](5160/bios/1982-11-08/XTBIOS-REV1.json)
* [Model 5160: May 09, 1986](5160/bios/1986-05-09/XTBIOS-REV3.json)
As well as BIOS ROMs, with more detailed information, for the following machines:
* [Model 5170](5170/bios/)
* [Compaq DeskPro 386](compaq/bios/deskpro386/)
* [Compaq Portable III](compaq/bios/portable3/)
* [IBM PC AT Model 5170](5170/bios/)
* [COMPAQ Portable and DeskPro Machines](compaq/bios/)

View file

@ -0,0 +1,26 @@
---
layout: post
title: COMPAQ BIOS ROMs
date: 2016-02-24 14:00:00
permalink: /blog/2016/02/24/
---
COMPAQ BIOS ROMs
---
Since the PCjs Project is focused on the 1980's, this roughly chronological list of COMPAQ machines is limited to
that era:
+ [COMPAQ Portable](portable/)
+ COMPAQ [Portable] Plus
+ COMPAQ DeskPro
+ COMPAQ DeskPro 286
+ COMPAQ Portable 286
+ COMPAQ Portable II
+ [COMPAQ DeskPro 386](deskpro386/)
+ [COMPAQ Portable III](portable3/)
+ COMPAQ Portable 386
+ COMPAQ SLT Series
+ COMPAQ LTE Series
+ COMPAQ LTE 286
+ COMPAQ LTE 386

View file

@ -1,5 +1,5 @@
;
; ROM BIOS for Compaq DeskPro 386-16
; ROM BIOS for COMPAQ DeskPro 386-16
; Rev J.4, from parts 109592-001 and 109591-001, dated '01/28/88'
; (C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86,87-All rights reserved.
;
@ -42,7 +42,7 @@
; replacing the ROM in the first megabyte with write-protected RAM; the top 64Kb of that
; RAM must first be initialized with the 64Kb at %000F0000 prior to remapping. It's also
; possible to copy external ROMs from %000C0000 through %000EFFFF into the bottom 64Kb of
; that RAM, but this is only done for ROMs known to contain relocatable code; eg, a Compaq
; that RAM, but this is only done for ROMs known to contain relocatable code; eg, a COMPAQ
; Video Graphics Controller (VGC) Board.
;
; Every DeskPro 386 system must have a MINIMUM of 1Mb of RAM, of which either 256Kb,
@ -52,9 +52,9 @@
; is used by the "RAM Relocation" feature. The remaining memory immediately below that
; 128Kb (ie, below %00FE0000) can only be accessed by special system software, such as CEMM.
;
; Compaq refers to that remaining memory as "Compaq Built-in Memory".
; COMPAQ refers to that remaining memory as "Compaq Built-in Memory".
;
; As the Compaq 386/25 TechRef explains:
; As the COMPAQ 386/25 TechRef explains:
;
; A data structure in memory indicates how much of the COMPAQ Built-in Memory (F40000h
; to FE0000h) is [available and] in use. This memory is allocated downward (decreasing
@ -244,7 +244,7 @@ x80b3: xor dx,dx ; 000080B3 33D2 '3.'
;
; Returns ZF set if successful
;
; See Compaq 386/25 TechRef, p.4-98 for details
; See COMPAQ 386/25 TechRef, p.4-98 for details
;
x80e2: push bx ; 000080E2 53 'S'
push cx ; 000080E3 51 'Q'
@ -4803,7 +4803,7 @@ xa9e9: cs rep movsw ; 0000A9E9 F32EA5 '...'
call xc259 ; 0000A9FD E85918 '.Y.'
;
; Set bit 2 (reserved?) and bit 4 (memory size?) of ROM BIOS Video Mode Options byte @40:0087.
; It would appear that Compaq had a different conception of this byte; however, in the case of an
; It would appear that COMPAQ had a different conception of this byte; however, in the case of an
; adapter like the IBM VGA, it doesn't matter, since the IBM VGA ROM will rewrite this byte anyway.
;
or byte [0x87],0x14 ; 0000AA00 800E870014 '.....'
@ -10383,7 +10383,7 @@ xdabb: push bx ; 0000DABB 53 'S'
out 0x84,al ; 0000DAC0 E684 '..'
;
; This is special: move BL into AL, and then move AL back into BL.
; We'll give Compaq the benefit of the doubt and assume this is macro nonsense.
; We'll give COMPAQ the benefit of the doubt and assume this is macro nonsense.
;
mov al,bl ; 0000DAC2 8AC3 '..'
mov bl,al ; 0000DAC4 8AD8 '..'
@ -10454,7 +10454,7 @@ xdb31: pop bx ; 0000DB31 5B '['
;
; We then proceed to test the 128Kb starting at %FE0000 through %FFFFFF (the top of the 16Mb range),
; which is where this ROM (and potentially other ROMs) will be copied and then mapped to %0E0000
; through %0FFFFF. Compaq refers to this as "relocatable RAM".
; through %0FFFFF. COMPAQ refers to this as "relocatable RAM".
;
; On the second call (from xdb16), AH is 0x02 (the first 64Kb block after the first 128Kb), and on
; successful completion of that call, "00768 KB OK" will be displayed, referring to the first 640Kb
@ -10464,7 +10464,7 @@ xdb31: pop bx ; 0000DB31 5B '['
; successfully tests another 1024Kb, a total of "01792 KB OK" will be displayed.
;
; There appears to be a fourth call (from xd82e), where AH is 0xF0 (the first 64Kb of the last 1Mb
; of the first 16Mb); we place no memory there, and Compaq memory maps typically show no memory there,
; of the first 16Mb); we place no memory there, and COMPAQ memory maps typically show no memory there,
; so I'm not sure what that's all about. -JP
;
xdb33: push bx ; 0000DB33 53 'S'
@ -12978,7 +12978,7 @@ xf494: mov al,0x0 ; 0000F494 B000
;
; When we arrive here, the A20 line has been disabled; on most systems, that would
; mean that the ROM's GDT would only be accessible at the "low" ROM address (%0F0730),
; not the "high" address (%FF0730). But fortunately, A20 management on Compaq
; not the "high" address (%FF0730). But fortunately, A20 management on COMPAQ
; DeskPros affects wrap-around only from the 1st to the 2nd megabyte; no other address
; range is affected.
;

View file

@ -1,21 +1,22 @@
---
layout: page
title: Compaq DeskPro 386 ROMs
title: COMPAQ DeskPro 386 ROMs
permalink: /devices/pc/rom/compaq/bios/deskpro386/
redirect_from:
- /devices/pc/bios/compaq/deskpro386/
---
Compaq DeskPro 386 ROMs
COMPAQ DeskPro 386 ROMs
---
The oldest Compaq DeskPro 386 ROM I have is a Rev J.4 ROM from a "Version 2" motherboard designed
The oldest COMPAQ DeskPro 386 ROM I have is a Rev J.4 ROM from a "Version 2" motherboard designed
in 1987 and released in 1988.
[<img src="http://archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_Board_V2-640.jpg" alt="Compaq DeskPro 386 System Board Version 2"/>](http://archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_Board_V2.jpg)
Thanks to folks on the [Vintage Computer](http://www.vintage-computer.com/) forums, I also have a Rev N.1 ROM from 1989.
However, I'm still on the lookout for any "Version 1" motherboards from 1986, so that I can obtain dumps of Compaq's
However, I'm still on the lookout for any "Version 1" motherboards from 1986, so that I can obtain dumps of COMPAQ's
ROMs for their earliest 80386-based systems.
### System ROM Locations on COMPAQ DESKPRO 386 System Board Version 2 (Assembly No. 000558-001)
@ -58,22 +59,23 @@ from the two 16Kb BIN files provided by [Al Kossow](http://www.vintage-computer.
Dumping the ROMs
---
The *.hex* files for the 1988-01-28 DeskPro ROM were produced by running [eeprom_read](http://github.com/phooky/PROM/blob/master/tools/eeprom_read/eeprom_read.pde)
on a [chipKIT Uno32](http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,892,893&Prod=CHIPKIT-UNO32) Arduino-compatible
prototyping board, and capturing the serial port output on my MacBook Pro -- as outlined in
The *.hex* files for the 1988-01-28 DeskPro ROM were produced by running
[eeprom_read](http://github.com/phooky/PROM/blob/master/tools/eeprom_read/eeprom_read.pde)
on a [chipKIT Uno32](http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,892,893&Prod=CHIPKIT-UNO32)
Arduino-compatible prototyping board, and capturing the serial port output on my MacBook Pro -- as outlined in
"[Stick a Straw in Its Brain and Suck: How to Read a ROM](http://www.nycresistor.com/2012/07/07/stick-a-straw-in-its-brain-and-suck-how-to-read-a-rom/)"
by [NYC Resistor](http://www.nycresistor.com/) contributor [phooky](http://www.nycresistor.com/author/phooky/).
The DeskPro 386 ROMs were P27128A-2 chips, so I wired my Uno32 based on this [27128A](http://archive.pcjs.org/pubs/pc/datasheets/27128A.pdf)
datasheet -- the closest match I could find online.
The DeskPro 386 ROMs were P27128A-2 chips, so I wired my Uno32 based on this
[27128A](http://archive.pcjs.org/pubs/pc/datasheets/27128A.pdf) datasheet -- the closest match I could find online.
![<img src="http://archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_ROM_V2_Breadboard-640.jpg" alt="Compaq DeskPro 386 System ROM Version 2"/>](http://archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_ROM_V2_Breadboard.jpg)
On my first dump attempt, every ROM address returned 0xFF. After looking at the 27128A datasheet more closely, I noticed
the DEVICE OPERATION table indicated that, for a READ operation, /CE and /OE pins should be connected to INPUT LOW VOLTAGE,
while the /PGM should be connected to INPUT HIGH VOLTAGE. So I wired pin 27 (/PGM) to +5V instead of GND, and the dump
worked perfectly. The NYC Resistor article implied that every *active low* pin should be connected to GND, but apparently
there are exceptions to that general rule.
On my first dump attempt, every ROM address returned 0xFF. After looking at the 27128A datasheet more closely,
I noticed the DEVICE OPERATION table indicated that, for a READ operation, /CE and /OE pins should be connected to
INPUT LOW VOLTAGE, while the /PGM should be connected to INPUT HIGH VOLTAGE. So I wired pin 27 (/PGM) to +5V instead
of GND, and the dump worked perfectly. The NYC Resistor article implied that every *active low* pin should be
connected to GND, but apparently there are exceptions to that general rule.
Recreating ROM Source Code
---
@ -104,7 +106,7 @@ However, it does NOT produce a binary identical to the original ROM, in part bec
instructions that can be assembled multiple ways). It's possible the reassembled ROM may still work, but more research
is required.
One interesting section of the Compaq DeskPro ROM is this string at offset 0xE002:
One interesting section of the COMPAQ DeskPro ROM is this string at offset 0xE002:
db 'AUTHORS CAB93GLB93RWS93DJC93NPB(C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86'

View file

@ -0,0 +1,512 @@
CD 18 28 43 29 20 43 6F 70 79 72 69 67 68 74 20
43 4F 4D 50 41 51 20 43 6F 6D 70 75 74 65 72 20
43 6F 72 70 6F 72 61 74 69 6F 6E 2C 20 31 39 38
33 2C 20 41 6C 6C 20 72 69 67 68 74 73 20 72 65
73 65 72 76 65 64 2E 20 2A 4A 53 46 2A 50 4E 41
2A 43 48 4C 2A 43 52 4A 2A 20 20 FA B0 99 E6 63
B0 4D E6 61 B0 0C BA F2 03 EE 8C C8 8E D8 FC BB
0E E1 BD 02 00 B0 01 8A 17 EE B4 00 8B 77 03 8A
57 01 8A C4 EE AC 42 EE 4A FE C4 80 FC 10 75 F2
8A 17 80 FA D8 75 05 42 B0 30 EE 4A B8 20 07 8E
47 05 33 FF 8B 4F 07 F3 AB 8A 47 02 EE 83 C3 09
4D 75 C2 B0 74 E6 43 B0 13 E6 41 B0 00 E6 41 E6
0D B0 00 E6 08 B0 58 E6 0B E6 0C B0 00 E6 00 E6
00 E6 83 B0 FF E6 01 E6 01 B0 0E E6 0F 33 C0 8E
D0 BC 00 04 B0 13 E6 20 B0 08 E6 21 B0 09 E6 21
B0 FF E6 21 B0 36 E6 43 B0 FF E6 40 E6 40 B8 40
00 8E D8 A1 72 00 3D 34 12 75 15 E9 92 02 B8 B4
29 D4 F0 00 B0 00 08 D8 D4 2D B4 F0 00 B8 00 20
BD 26 E1 E9 95 00 33 DB 33 D2 33 C9 8E C2 33 FF
8B C7 32 C4 32 C6 32 C3 AA E2 F5 80 C6 08 80 FE
38 72 02 B5 80 77 03 80 C6 08 3B D6 72 DE E4 61
0C 30 E6 61 24 CF E6 61 33 D2 33 C9 8E DA 33 FF
8B C7 32 C4 32 C6 32 C3 32 05 75 25 47 E2 F1 E4
62 A8 C0 B0 00 75 1A 80 C6 08 80 FE 38 72 02 B5
80 77 03 80 C6 08 3B D6 72 D2 80 F3 FF 75 99 EB
24 B2 80 84 C2 75 04 D0 EA 73 F8 BD A1 E1 E9 85
00 47 47 BA 01 02 BD AC E1 E9 72 00 BB 70 17 BD
B5 E1 E9 5D 00 B8 00 40 E9 E5 01 BE 01 00 BB 00
08 8E DB C6 04 00 80 C7 08 80 FF A0 72 F3 BB 00
08 8E DB 80 34 FF 74 08 80 C7 08 80 FF A0 72 F1
8B F3 E4 61 0C 80 E6 61 93 E4 60 93 24 7F E6 61
FF E5 B0 B6 E6 43 B8 38 05 E6 42 8A C4 E6 42 E4
61 0C 03 E6 61 95 E8 08 00 95 E4 61 24 FD E6 61
C3 5D B9 04 01 E2 FE 4B 75 F8 FF E5 10 00 B9 04
00 D3 E2 49 EB 05 33 FF B9 04 00 B8 00 B8 8E C0
92 2E F7 26 1C E2 92 04 90 27 14 40 27 AA 47 E2
EF FF E5 F6 C6 C0 74 11 BB E8 03 E8 A4 FF BB FA
00 E8 BD FF 80 EE 40 EB EA F6 C6 30 74 11 BB FA
00 E8 8E FF BB FA 00 E8 A7 FF 80 EE 10 EB EA 8A
C6 E8 19 00 8A C2 E8 09 00 B0 0D E8 17 00 B0 0A
EB 13 8A E8 B1 04 D2 E8 E8 02 00 8A C5 24 0F 04
90 27 14 40 27 BB 07 00 B4 0E CD 10 C3 51 B9 64
00 B2 F4 F6 E2 EC A8 80 75 05 E2 F7 E9 79 03 F6
E2 EC 42 59 A8 40 C3 03 DF 02 07 00 08 FF FF FF
FF FF FF 50 E4 62 A8 C0 75 02 58 CF FC BA D4 03
B8 2D 30 BE B4 F0 BF 10 00 8C CB 8E DB BD E3 E2
E9 C0 0F BB 00 B8 8E C3 B9 00 20 33 FF B8 20 07
F3 AB BB F4 01 BD FB E2 E9 17 FF B0 2D 83 C2 04
EE 33 FF B9 0D 00 BE 19 E3 A4 47 E2 FC E4 62 A8
80 B0 31 75 02 B0 32 AA F4 50 41 52 49 54 59 20
43 48 45 43 4B 20 50 33 C0 B9 00 01 EE EE EC 3A
C4 75 0D EC 3A C4 75 08 FE C0 FE C4 E2 EE 58 C3
58 59 FF E3 23 FF 23 FF C3 E2 23 FF 23 FF 54 FF
23 FF 23 FF A5 FE 87 E9 23 FF 23 FF 23 FF 23 FF
57 EF 23 FF 65 F0 4D F8 41 F8 59 EC 39 E7 59 F8
2E E8 D2 EF 48 F9 F2 E6 6E FE 53 FF 53 FF A4 F0
C7 EF 00 00 1E E7 F8 03 F8 02 BC 03 78 03 78 02
14 14 14 14 01 01 01 01 1E 00 3E 00 03 01 03 07
92 BD A7 E3 E9 14 FE 33 ED 33 C0 33 FF 8E C5 B9
00 40 F3 AB 81 C5 00 08 3B EE 72 EF 8E C0 BE 44
E3 33 FF B9 21 00 8C C8 2E A5 AB E2 FB B0 80 E6
A0 B8 40 00 8E D8 B1 06 D3 ED 89 2E 13 00 89 16
72 00 32 FF F6 C3 01 74 0B 26 8C 45 FA 83 ED 40
89 2E 15 00 8E C0 BA 01 02 EC A8 0F 75 03 80 CF
10 BE 86 E3 BF 00 00 B9 02 00 2E AD 05 03 00 92
EC F6 D0 EE 8A E0 EC 3A C4 75 08 80 C7 02 92 2D
03 00 AB E2 E5 BE 8A E3 BF 08 00 B1 03 2E AD 92
EC F6 D0 EE 8A E0 EC 3A C4 75 05 80 C7 40 92 AB
E2 EB F6 C3 01 75 0D BF 78 00 B9 06 00 F3 2E A5
85 C9 75 F9 89 1E 10 00 C6 06 6A 00 00 E8 C4 07
8A C3 24 30 BB 9C E3 B1 04 D2 E8 2E D7 98 CD 10
B8 00 C0 E8 E0 01 3D 00 C8 72 F8 B8 40 00 8E D8
A0 65 00 24 F7 BA D8 03 EE BF 02 00 B9 55 AA 81
E1 FF 3F BA D4 03 B3 0E E8 C2 0E 4A B0 0E EE 42
EC 3A C5 75 43 4A B0 0F EE 42 EC 3A C1 75 39 F7
D1 4F 75 DB B8 00 B8 8E C0 33 DB 33 FF B9 00 40
8B C7 32 C4 7B 02 FE C0 32 C3 AA E2 F3 33 FF B9
00 40 8B C7 32 C4 7B 02 FE C0 32 C3 AE E1 F3 75
07 80 F3 FF 75 D5 EB 06 BA 01 65 E8 55 FD B8 20
07 33 FF B9 00 20 F3 AB BA D4 03 B3 0E E8 5D 0E
A0 65 00 0C 08 BA D8 03 EE E9 03 00 E9 D2 00 BE
00 E0 33 D2 B9 00 10 2E AD 03 D0 E2 FA 85 D2 74
06 BA 01 51 E8 1C FD BB 81 E5 BA 21 00 E8 F6 FD
B0 FF EE E4 61 8A D8 24 FE E6 61 33 C0 B9 00 01
B0 B6 E6 43 8A C4 E6 42 E6 42 B0 80 E6 43 E4 42
3A C4 75 2D E4 42 3A C4 75 27 FE C4 E2 E2 8A C3
E6 61 E4 61 BB 81 E5 BA 61 00 E8 B9 FD E6 61 BA
02 00 E6 C0 B9 06 00 91 E8 AB FD 91 42 E2 F8 EB
06 BA 01 01 E8 BC FC E4 61 0C 80 24 BF E6 61 24
7F E6 61 BB 28 00 E8 78 FC 0C 40 E6 61 B3 14 E8
6F FC E8 53 04 86 C4 3C AA 75 0E B3 14 E8 61 FC
E8 45 04 86 C4 0A C0 74 12 0A C0 74 03 E8 C2 FC
B0 20 E8 D0 FC BA 01 03 E8 78 FC BA BC 03 EC BB
D7 E5 E8 51 FD EB 06 BA 01 04 E8 66 FC BA BC 03
EE 0E 1F BE B7 E2 BB 04 00 FC BA F2 03 B0 FF E6
21 B0 00 EE B8 64 00 E8 BF 09 B0 0C EE B8 64 00
E8 B6 09 E8 C6 19 B0 1C B2 F2 EE E8 BE 19 B8 F4
01 E8 A5 09 E8 B5 19 B9 64 00 E8 80 FC E1 FB 74
07 F6 E2 EC A8 C0 74 06 BA 01 06 E8 15 FC B0 00
BA F2 03 EE B8 00 C8 E8 1C 00 3D 00 F4 76 F8 BB
2C 01 E8 AD FB 9C FA E4 21 24 BC E6 21 9D B0 EC
BA BE 03 EE CD 19 8E D8 33 DB 81 3F 55 AA 75 0F
FC 33 F6 33 C9 8A 6F 02 D1 E1 AC 02 D8 E2 FB BB
80 00 75 14 B8 40 00 8E C0 1E B8 03 00 50 8B EC
FF 5E 00 58 58 BB 00 02 03 C3 C3 8A E3 B9 FF FF
EC 84 C7 74 00 75 09 E2 F7 FE CC 75 F0 B4 80 C3
B4 00 C3 0D 0A 44 69 73 6B 65 74 74 65 20 65 72
72 6F 72 0D 0A 52 65 70 6C 61 63 65 20 61 6E 64
20 73 74 72 69 6B 65 20 61 6E 79 20 6B 65 79 20
77 68 65 6E 20 72 65 61 64 79 0D 0A 24 E9 81 03
50 56 1E B8 40 00 8E D8 B8 03 00 E8 5E 02 1F 5E
58 CF FB BB 40 00 8E DB B9 03 00 51 BA 00 00 8E
C2 B4 00 CD 13 BB 00 7C B9 01 00 B8 01 02 CD 13
59 73 06 E2 E6 CD 20 EB DA EA 00 7C 00 00 FB FC
50 53 56 BE A3 E6 2E AC 3C 24 74 05 E8 66 FB EB
F5 B4 00 CD 16 5E 5B 58 CF FB 53 51 52 56 1E BB
40 00 8E DB 81 E2 03 00 8B F2 B3 01 E8 FE 17 75
04 8A 9C 7C 00 D1 E6 8B 94 00 00 0B D2 74 10 84
E4 74 12 FE CC 74 41 FE CC 74 75 FE CC 74 2F 1F
5E 5A 59 5B CF 50 96 83 C2 03 B0 80 EE 83 EA 03
B1 04 D3 EE 81 E6 0E 00 2E 8B 84 1E E8 EE 8A C4
42 EE 42 42 58 24 1F EE 4A 4A 32 C0 EE 4A 83 C2
05 EC 8A E0 42 EC EB C7 50 52 83 C2 04 B0 03 EE
42 42 B7 20 E8 D4 FE 74 0D B7 10 E8 CD FE 74 06
4A B7 20 E8 C5 FE 5A 59 8A C1 84 E4 75 01 EE E8
7B 17 75 0A 83 C2 05 EC 24 60 0A E0 8A C1 EB 8F
83 C2 04 B0 01 EE 42 42 B7 20 E8 9E FE 74 22 BE
71 00 80 24 7F 4A B7 01 B4 80 B9 FF FF EC 84 C7
75 11 84 24 75 0B E2 F5 E8 42 17 75 ED FE CB 75
E9 EB CB 8A E0 83 EA 05 EC 80 E4 1E EB C0 17 04
00 03 80 01 C0 00 60 00 30 00 18 00 0C 00 FB FC
1E 56 55 8B EC BE 40 00 8E DE 84 E4 74 0E FE CC
74 31 FE CC 74 3E 5D 5E 1F CF FB 90 FA E8 CA 03
74 F8 E8 F8 16 75 0C 3B 36 82 00 75 0F 8B 36 80
00 EB 09 81 FE 3E 00 75 03 BE 1E 00 89 36 1A 00
FB EB D3 80 4E 0A 40 FA E8 9F 03 FB 74 C8 80 66
0A BF EB C2 A0 17 00 EB BD 0A E4 74 03 79 05 F9
C3 E9 94 00 80 FC 39 7F F7 8A DC 32 FF 2E 8A 87
7B F8 F6 05 08 75 EA F6 05 04 75 0E 24 7F F6 05
03 75 52 F6 05 40 75 41 EB 26 0A C0 78 25 80 FC
03 74 24 80 FC 0E 74 23 80 FC 1C 74 22 80 FC 37
74 13 3C 20 7E 0A 3C 61 7C 15 3C 7B 7D 11 24 1F
E8 69 00 F9 C3 B4 72 32 C0 EB F5 B0 7F EB F1 BE
F8 F8 E8 6F 0F 72 E9 EB EA 3C 61 7C E3 3C 7A 7F
DF 2C 20 EB DB 80 FC 0F 74 09 7F 0B 2E 8A 87 B5
F8 EB CD 32 C0 EB C9 BE C5 F8 E8 47 0F 72 C1 F6
05 40 75 BC 2C 20 EB B8 24 7F 3C 20 74 14 80 FC
02 7C 12 80 FC 0E 7C 0F 3C 61 7C 09 3C 7A 7F 05
32 C0 E8 07 00 F9 C3 80 C4 76 EB F4 FA 8B 36 1C
00 89 04 46 46 E8 F5 15 75 0C 3B 36 82 00 75 0F
8B 36 80 00 EB 09 81 FE 3E 00 75 03 BE 1E 00 3B
36 1A 00 74 06 89 36 1C 00 FB C3 FB 50 BB F3 00
E8 C2 00 58 C3 FF FF FB FC 50 53 51 52 55 56 57
1E 06 BB 40 00 8E DB BF 17 00 E4 60 8A E0 33 ED
B0 20 E6 20 E8 60 00 F6 06 18 00 08 74 21 80 FC
46 74 10 E8 D4 00 72 2E 80 FC 52 74 29 84 E4 78
25 EB 05 F6 05 04 74 1E 80 26 18 00 F7 EB 17 E8
FC 00 72 12 E8 B3 00 72 0D E8 A7 01 72 08 E8 D2
01 72 03 E8 A3 FE 85 ED 07 1F 5F 5E 5D 5A 59 5B
75 04 FA E8 06 00 58 CF E4 60 8A E0 E4 61 0C 80
E6 61 24 7F E6 61 C3 A0 6A 00 F6 05 08 74 1C F6
05 04 74 17 80 FC 4E 75 04 FE C0 EB 07 80 FC 4A
75 09 FE C8 78 0B A2 6A 00 EB 06 3A 26 69 00 74
13 88 26 69 00 84 E4 78 0B 33 DB 0A 1E 6A 00 74
03 E8 01 00 C3 E4 61 50 24 FC E6 61 B9 40 00 E2
FE 0C 02 E6 61 B9 40 00 E2 FE 4B 75 EB 58 E6 61
C3 1E 50 B8 40 00 8E D8 B8 0B FF E6 20 E4 20 84
C0 74 06 8A E0 B0 20 E6 20 88 26 6B 00 58 1F CF
FF C7 06 72 00 34 12 E9 D1 F5 8A C4 24 7F 0E 07
8B F7 57 BF C6 EA B7 08 B9 08 00 AE 74 09 D0 CF
73 01 46 E2 F6 5F C3 5F 0A E4 79 06 F6 D7 20 3C
F9 C3 08 3C FA 8A 3E 18 00 80 E7 F0 30 3D FB 80
FC 52 74 01 F9 C3 38 1D 2A 36 52 3A 45 46 80 FC
45 74 28 80 FC B8 74 3C 80 FC 53 74 48 80 FC 37
74 55 80 FC 52 74 5F 80 FC 46 74 63 80 FC 33 74
05 80 FC 34 75 03 EB 6D 90 F8 C3 F6 05 04 74 F9
80 0E 18 00 08 FA E8 F3 FE 45 FB F6 06 18 00 08
75 F9 F9 C3 50 33 C0 86 06 19 00 84 C0 74 03 E8
2A FE 58 EB D4 F6 05 08 74 CF F6 05 04 74 CA FA
E8 C9 FE FB E9 4A FF F6 05 03 74 BD FA E8 BC FE
45 CD 05 FB F9 C3 F6 06 18 00 80 74 AC F9 C3 F6
05 04 74 A5 80 0E 71 00 80 E8 C8 00 CD 1B 33 C0
E8 E9 FD F9 C3 F6 05 08 74 13 F6 05 04 74 0E 80
3E 49 00 02 74 0A 80 3E 49 00 03 74 03 E9 79 FF
E9 69 13 0A E4 78 0A 80 FC 3B 7C 05 80 FC 44 7E
02 F8 C3 B0 2D F6 05 08 75 10 B0 23 F6 05 04 75
09 B0 19 F6 05 03 75 02 32 C0 02 E0 32 C0 E8 9B
FD F9 C3 0A E4 78 0C 8A C4 24 7F 3C 47 7C 04 3C
53 7E 02 F8 C3 8A DC 80 EB 47 32 FF BE DD F8 2E
8A 00 F6 05 08 75 32 BE EA F8 F6 05 04 75 21 F6
05 03 75 15 F6 05 20 75 0B 3C 2E 7C 07 80 FC 4C
74 05 32 C0 E8 55 FD F9 C3 F6 05 20 75 EB EB F4
E8 61 0C 8A E0 72 EB EB EE 3C 30 7C EA 2C 30 8A
26 19 00 D5 0A A2 19 00 EB DD 8B 36 1A 00 3B 36
1C 00 AD C3 E8 26 13 B8 1E 00 9C FA 75 03 A1 80
00 A3 1A 00 A3 1C 00 9D C3 24 F1 D7 F2 23 F3 C2
F2 73 F7 12 F2 43 F5 42 F5 6F F3 6D F4 57 F4 3A
F2 1D F7 0D F7 6F F6 60 F2 FB 55 1E 06 57 56 52
51 53 50 8B EC 33 C0 8E D8 C4 36 78 00 B8 40 00
8E D8 C6 06 40 00 FF 73 02 CD 18 32 E4 8A 46 01
3D 06 00 7C 07 B4 01 32 C0 E9 62 01 A8 02 74 02
EB 21 A8 04 74 03 E9 07 01 A8 01 74 02 EB 0C E8
2F 02 88 26 41 00 32 C0 E9 43 01 A0 41 00 32 E4
E9 3B 01 E8 65 02 33 C0 8A 46 00 26 8A 4C 03 BA
80 00 D3 E2 F7 E2 2D 01 00 E6 05 86 C4 E6 05 86
C4 03 C3 73 0C 8A 66 01 F6 C4 04 75 04 B4 09 EB
6B E8 73 01 75 66 32 E4 8A 46 01 8B D8 D1 E3 2E
8B 87 4B EF E6 0B B0 02 E6 0A 8A FC E8 4E 12 75
03 80 CF 80 E8 17 01 E8 31 02 8A 7E 07 E8 0E 01
8A 7E 04 E8 08 01 83 C6 03 E8 F5 00 46 46 E8 F0
00 83 EE 05 E8 8A 01 75 3E B9 07 00 BF 42 00 E8
76 02 74 FB F6 E2 EC 88 05 47 E2 F3 F6 06 42 00
C0 74 22 F6 06 42 00 08 74 04 B4 80 EB 19 8A 26
43 00 F6 C4 30 74 04 D0 EC EB 0C F6 C4 03 74 03
80 C4 01 EB 02 B4 00 88 26 41 00 B0 06 E6 0A 32
C0 F6 C4 54 EB 28 91 E6 0C E4 05 8A D8 E4 05 8A
F8 26 8A 4C 03 B8 80 00 D3 E0 48 93 33 D2 F7 F3
0B D2 74 01 40 8A 66 00 2A E0 8A C4 8A E5 EB 4E
A8 01 75 0E E9 0C FF FA 8A 66 01 80 FC 04 73 02
CD 18 B0 4A E6 0B E8 62 01 B0 FF E6 05 E6 05 E8
95 00 74 02 EB A1 B0 02 E6 0A B7 4D E8 4F 00 8A
7E 07 D0 E7 D0 E7 0A 7E 06 E8 42 00 83 C6 03 E8
2F 00 83 C6 04 E8 29 00 83 EE 07 E9 36 FF 26 8A
5C 02 88 1E 40 00 80 66 16 FE 0A E4 74 04 80 4E
16 01 5B 5B 59 5A 5E 5F 07 1F 5D CF B7 03 E8 0D
00 E8 94 01 75 FB F6 E2 26 8B 1C 8A C3 EE E8 87
01 75 FB F6 E2 8A C7 EE C3 E8 3E 01 B9 64 00 E8
76 01 74 07 49 75 F8 B4 80 EB 19 F6 E2 B0 07 EE
8A 7E 06 E8 D8 FF E8 68 00 75 09 E8 47 00 A8 C0
B4 80 EB 02 0A E4 C3 B0 01 8A 4E 06 D2 E0 84 06
3E 00 75 09 08 06 3E 00 E8 BE FF 75 27 E8 FA 00
B7 0F E8 A9 FF E8 C3 00 E8 36 00 75 17 33 C0 26
0A 44 09 74 08 B9 04 01 E2 FE 48 75 F8 E8 05 00
A8 C0 B4 40 C3 B7 08 E8 84 FF B1 02 E8 09 01 74
FB F6 E2 EC FE C9 74 05 A2 42 00 EB EF A0 42 00
C3 B8 04 00 B9 FF FF F6 06 3E 00 80 75 0B E2 F7
FE C8 75 F0 E8 0A 00 B4 80 80 26 3E 00 7F 0A E4
C3 BA F2 03 A0 3F 00 24 0F 74 12 D0 E8 A8 04 74
02 B0 03 8A 26 3F 00 B1 04 D2 E4 0A C4 0C 08 EE
50 F6 E2 58 80 26 3E 00 00 0C 04 EE B9 FF FF F6
06 3E 00 80 75 07 49 75 F6 B4 80 EB 0D 80 26 3E
00 7F E8 80 FF E8 F4 FE 32 E4 C3 BA 10 00 8B 46
0C F7 E2 8B 5E 02 03 C3 12 D6 E6 0C E6 04 86 C4
E6 04 86 C4 8B D8 8A C2 E6 81 C3 8A 7E 07 D0 E7
D0 E7 0A 7E 06 E8 D6 FE 8A 7E 05 E8 D0 FE C3 46
66 4A 45 42 66 FF FF 50 1E B8 40 00 8E D8 80 0E
3E 00 80 B0 20 E6 20 1F 58 CF FA C6 06 40 00 FF
B0 10 8A 4E 06 D2 E0 0C 0C 0A 46 06 BA F2 03 EE
B1 04 D2 E8 84 06 3F 00 75 1C A2 3F 00 B0 01 84
46 01 74 12 FB B8 7D 00 26 8A 54 0A F6 E2 3D 00
00 74 03 E8 13 00 FB C3 BA F4 03 F6 E2 EC A8 80
74 F9 F6 E2 EC 42 A8 40 C3 B9 04 01 E2 FE 48 75
F8 C3 FF FF FF FF FF DF 02 25 02 08 2A FF 50 F6
00 04 FB 53 51 52 56 1E BB 40 00 8E DB 81 E2 03
00 8B F2 B3 12 E8 65 0F 75 04 8A 9C 78 00 D1 E6
8B 94 08 00 0B D2 74 16 50 FE CC 7C 17 FE CC 7C
38 FE CC 7C 44 58 EB 06 58 8A E7 80 F4 48 1F 5E
5A 59 5B CF EE 42 B9 00 E0 EC 24 F8 8A F8 A8 80
75 0B E2 F5 FE CB 75 EE 80 CF 01 EB DB 42 EC 24
1F 0C 01 EE 24 1E EE EB 0D 42 42 B0 08 EE B9 40
05 E2 FE 0C 04 EE 4A EB 01 42 EC 24 F8 8A F8 EB
B7 BA 82 03 B4 27 CD 21 36 8B 0E 04 00 36 8B 1E
14 00 B4 27 C3 FB 80 FC 0F 77 37 06 1E 55 57 56
53 51 52 50 FC 8B EC BE 40 00 8E DE 8B 16 63 00
BE 00 B8 F7 C2 40 00 75 03 BE 00 B0 8E C6 86 C4
8B F0 86 C4 81 E6 FF 00 D1 E6 2E FF 94 39 EC E9
74 07 CF FF 38 28 2D 0A 1F 06 19 1C 02 07 06 07
00 00 00 00 71 50 5A 0A 19 06 19 19 02 0D 0B 0C
00 00 00 00 38 28 2D 0A 7F 06 64 70 02 01 06 07
00 00 00 00 61 50 52 0F 19 06 19 19 02 0D 0B 0C
00 00 00 00 38 28 2D 0A 1F 06 19 1C 02 07 06 07
00 00 00 00 71 50 5A 0A 1F 06 19 1C 02 07 06 07
00 00 00 00 38 28 2D 0A 7F 06 64 70 02 01 06 07
00 00 00 00 61 50 52 0F 19 06 19 19 02 0D 0B 0C
00 00 00 00 3C 07 76 01 C3 8A 1E 10 00 80 E3 30
80 FB 30 75 0F BA B4 03 B0 07 BB 00 B0 B9 00 08
B4 01 EB 0B BA D4 03 BB 00 B8 B9 00 20 32 E4 A2
49 00 8E C3 89 16 63 00 86 E0 83 C2 04 EE 86 E0
51 83 EA 04 C7 06 4E 00 00 00 C6 06 62 00 00 32
E4 8B F0 D1 E6 2E 8B 84 73 F2 A3 4A 00 2E 8B 84
83 F2 A3 4C 00 D1 EE 2E 8A 84 93 F2 A2 65 00 2E
8A A4 9B F2 88 26 66 00 BF 10 00 E8 3E 00 59 B8
67 00 E8 A8 0D 75 03 B8 07 06 A3 60 00 A0 49 00
33 FF 3C 07 74 08 3C 04 7C 04 33 C0 EB 03 B8 20
07 F3 AB 1E 07 BF 50 00 33 C0 B1 08 F3 AB BB F4
01 E8 3D F0 A0 65 00 83 C2 04 EE C3 8A 2E 49 00
1E 33 DB 8E DB C5 36 74 00 80 FD 02 7C 1B 83 C6
10 80 FD 04 7C 13 83 C6 10 80 FD 07 7C 0B 83 C6
10 F6 C2 40 74 03 83 EE 20 BD 0F F2 E9 94 00 FB
1F C3 24 07 A2 62 00 98 F7 26 4C 00 A3 4E 00 91
D1 E9 B3 0C 8B 16 63 00 E8 32 01 A0 62 00 98 D1
E0 96 8B 8C 50 00 E8 09 01 C3 0A FF 75 0C 80 E3
1F A0 66 00 24 E0 0A C3 EB 0E B1 05 D2 E3 80 E3
20 A0 66 00 24 DF 0A C3 A2 66 00 83 C2 05 EE C3
A0 49 00 88 46 00 A0 4A 00 88 46 01 A0 62 00 88
46 07 C3 28 00 28 00 50 00 50 00 28 00 28 00 50
00 50 00 00 08 00 08 00 10 00 10 00 40 00 40 00
40 00 40 2C 28 2D 29 2A 2E 1E 29 30 30 30 30 30
30 3F 30 FA 24 F7 83 C2 04 EE 86 E0 42 EE 83 EA
05 32 E4 8B CF 8A C4 EE 42 FE C4 AC EE 4A E2 F5
FF E5 86 FB 32 FF D1 E3 8B 97 50 00 89 56 02 8B
0E 60 00 89 4E 04 C3 89 0E 60 00 A0 49 00 24 FE
3C 02 75 2A 33 DB 8E DB C5 36 74 00 80 7C 19 0D
75 1C F7 C1 18 18 75 16 8B D9 81 E3 60 60 8A C5
E8 11 00 8A E8 8A C1 E8 0A 00 8A C8 0B CB B3 0A
E8 4A 00 C3 24 0F B4 0E F6 E4 D1 E8 D1 E8 D1 E8
14 00 C3 80 FF 07 77 19 86 FB 32 FF D1 E3 8B 4E
02 89 8F 50 00 8A 7E 07 3A 3E 62 00 75 03 E8 01
00 C3 33 C0 86 C5 F7 26 4A 00 03 C8 A1 4E 00 D1
E8 03 C8 8B 16 63 00 B3 0E E8 01 00 C3 8A C3 EE
42 8A C5 EE 4A FE C3 8A C3 EE 42 8A C1 EE C3 8A
26 49 00 80 FC 04 72 05 80 EC 06 76 0A E8 6C 00
26 8B 05 89 46 00 C3 E8 84 00 8C C1 8E D9 8B F7
8C D1 8E C1 83 EC 08 8B FC B7 04 B3 02 8A 04 D0
FC 79 13 8A F0 8A 54 01 B9 08 00 D1 E2 79 01 F9
D0 D0 D1 E2 E2 F5 AA 81 F6 00 20 FE CB 75 DE 83
C6 50 FE CF 75 D5 8C C8 8E D8 BE 6E FA 8B FC E8
5E 00 73 11 33 C0 8E D8 C5 36 7C 00 8B FC E8 4F
00 72 02 04 80 83 C4 08 89 46 00 C3 8B F8 8A DF
32 FF A1 4C 00 F7 E3 8B D0 D1 E3 8B 9F 50 00 A0
4A 00 F6 E7 32 FF 03 C3 D1 E0 03 C2 97 C3 8A DF
32 FF D1 E3 8B 9F 50 00 33 D2 86 DA 8B FB D1 EF
D1 EF 03 FB F6 06 49 00 02 75 02 D1 E2 03 FA C3
8B C6 8B DF 32 ED BA 80 00 56 8B F0 8B FB B1 04
F3 A7 74 0B 05 08 00 4A 75 F0 5E 33 C0 F9 C3 5E
2B C6 B1 03 D3 E8 C3 80 3E 49 00 04 72 07 80 3E
49 00 07 75 1E E8 84 FF AA 47 E2 FC C3 80 3E 49
00 04 72 07 80 3E 49 00 07 75 08 8A E3 E8 6C FF
F3 AB C3 E8 88 FF 8A 5E 06 8A 3E 49 00 8C CA 8E
DA BE 6E FA 0A C0 79 08 33 D2 8E DA C5 36 7C 00
25 7F 00 D1 E0 D1 E0 D1 E0 03 F0 80 FF 06 74 63
83 EC 10 8B C4 57 06 8C D7 8E C7 51 53 8B F8 80
E3 03 B5 08 AC B1 08 D1 E2 D1 E2 D0 E0 73 02 0A
D3 FE C9 75 F2 8A C6 8A E2 AB FE CD 75 E6 5B 5A
07 5F 8C D0 8E D8 B9 04 00 8B F4 AD D0 FB 79 03
26 33 05 AB 81 C7 FE 1F AD D0 FB 79 03 26 33 05
AB 81 EF B2 1F E2 E4 81 EF 3E 01 4A 75 D8 83 C4
10 EB 2E 8A E3 8B D1 8B DE B9 04 00 8B F3 AC D0
FC 79 03 26 32 05 AA 81 C7 FF 1F AC D0 FC 79 03
26 32 05 AA 81 EF B1 1F E2 E4 81 EF 3F 01 4A 75
D8 C3 FD 8A 1E 4A 00 8B 56 02 3A D3 72 04 8A D3
FE CA F6 C4 01 74 0C 87 CA 2A F5 2A D1 F6 DE F6
DA EB 04 2A F5 2A D1 FE C6 FE C2 80 3E 49 00 04
72 07 80 3E 49 00 07 75 59 8B EB 2B EA 81 E5 FF
00 D1 E5 8B F8 8A C5 F6 E3 32 ED 03 C1 D1 E0 03
06 4E 00 97 8C C6 8E DE 8B F0 F6 E3 F7 C6 00 01
74 04 F7 D8 F7 DD D1 E0 03 C7 96 0A C0 74 14 3A
C6 73 10 2A F0 8A CA F3 A5 03 F5 03 FD FE CE 75
F4 8A F0 8A E7 B0 20 8A CA F3 AB 03 FD FE CE 75
F6 C3 80 3E 49 00 06 74 04 D0 E1 D0 E2 BD 50 00
52 8B F8 8A C5 32 ED 98 BA 40 01 F7 E2 03 C1 03
06 4E 00 97 8B F0 98 BA 40 01 F7 E2 F7 C6 00 01
74 10 F7 D8 F7 DD 81 C7 F0 20 80 3E 49 00 06 74
01 47 03 C7 8C C2 8E DA 96 5A 53 8B DF 0A C0 74
30 3A C6 73 2C 2A F0 50 D0 E6 D0 E6 8B C6 8B F0
8B FB 8A CA F3 A4 8B F0 8B FB 81 F6 00 20 81 F7
00 20 8A CA F3 A4 03 C5 03 DD FE CE 75 E0 58 8A
F0 D0 E6 D0 E6 58 8A C4 8B FB 8A CA F3 AA 8B FB
81 F7 00 20 8A CA F3 AA 03 DD FE CE 75 EA C3 E8
DB 08 75 04 8A 3E 62 00 3C 07 74 50 3C 08 74 38
3C 0A 74 4F 3C 0D 74 3C B9 01 00 B4 0A CD 10 B4
03 CD 10 FE C2 3A 16 4A 00 75 18 32 D2 FE C6 80
FE 19 75 0F FE CE B4 02 CD 10 B4 08 CD 10 8A FC
E8 37 00 B4 02 CD 10 C3 B4 03 CD 10 0A D2 74 F7
FE CA EB EF B4 03 CD 10 32 D2 EB E7 BB F4 01 E8
20 EB C3 B4 03 CD 10 80 FE 18 74 04 FE C6 EB D3
B4 08 CD 10 8A FC E8 01 00 C3 51 52 80 3E 49 00
07 74 09 80 3E 49 00 03 76 02 B7 00 B8 01 06 33
C9 B6 18 8A 16 4A 00 4A CD 10 5A 59 C3 E8 24 00
26 8A 05 F6 D7 22 C7 D2 E8 88 46 00 C3 E8 14 00
98 22 C3 D2 E0 D0 FC 79 04 26 30 05 C3 26 22 3D
0A C7 AA C3 33 FF 8B 56 02 D1 EA 73 03 BF 00 20
D1 E2 D1 E2 D1 E2 D1 E2 03 FA D1 E2 D1 E2 03 FA
B7 FE 80 3E 49 00 06 73 04 D1 D1 D0 E7 8A DF F6
D3 8B D1 D1 EA D1 EA D1 EA F6 D1 80 E1 07 D2 C7
03 FA C3 C6 46 01 00 83 C2 06 EC 83 EA 06 A8 04
75 6F A8 02 74 6F C6 46 01 01 B0 10 EE 42 EC 8A
E0 4A B0 11 EE 42 EC 4A 2B 06 4E 00 3D 05 10 7C
02 33 C0 32 FF 8A 1E 49 00 2E 8A 8F 0E F8 32 ED
2B C1 79 02 33 C0 8A 0E 4A 00 80 FB 04 72 37 80
FB 07 74 32 B1 28 F6 F1 8A C8 D0 E9 D0 E9 88 4E
03 88 66 02 D0 E0 88 46 05 B1 03 86 E0 32 E4 D3
E0 89 46 06 80 3E 49 00 06 75 06 D0 66 02 D1 66
06 83 C2 07 EE C3 F6 F1 88 46 03 88 66 02 B1 03
8A DC D3 E3 89 5E 06 D2 E0 88 46 05 EB E3 03 03
05 05 03 03 03 04 58 5A 59 5B 5E 5F 5D 1F 07 CF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FB 1E B8 40 00 8E D8 A1 13 00 1F CF FB 1E B8
40 00 8E D8 A1 10 00 1F CF 55 8B EC 80 4E 06 01
B4 86 5D CF 51 2E 8B 0C 46 46 2E 3A 24 74 05 E2
F7 F8 59 C3 46 2E 8A 04 F9 59 C3 FF 1B B1 32 B3
B4 B5 36 B7 B8 B9 B0 2D BD 08 89 71 77 65 72 74
79 75 69 6F 70 5B 5D 0D FF 61 73 64 66 67 68 6A
6B 6C BB A7 E0 FF 5C 7A 78 63 76 62 6E 6D AC AE
AF FF 2A FF 20 FF 1B 21 40 23 24 25 5E 26 2A 28
29 5F 2B 08 0F 0B 00 1A 7B 1B 7D 1C 0D 27 3A 28
22 29 7E 2B 7C 33 3C 34 3E 35 3F 39 20 37 38 39
2D 34 35 36 2B 31 32 33 30 2E 06 00 47 77 49 84
4B 73 4D 74 4F 75 51 76 06 00 07 1E 0C 1F 1A 1B
1B 1D 1C 0A 2B 1C FC BF 00 03 BE E0 F9 F3 2E A5
A1 50 02 2B 06 58 02 75 04 48 A2 00 03 BF 24 00
B8 87 E9 AB 8C C8 AB 83 C7 44 B8 E0 E6 AB 8C C8
AB B8 53 FF AB 8C C8 AB 8E C5 26 C4 06 12 00 A3
90 00 8C 06 92 00 FB C3 33 C9 8E D9 8B 1E 52 02
8B EB 83 C3 10 FA 8E D3 8B E1 8E C1 B9 47 00 E8
A4 FF 8E DC 53 BF 01 03 BA 82 03 B4 0F CD 21 0A
C0 74 2E BA 02 03 B4 09 CD 21 B8 01 0C CD 21 80
3D 00 75 0D C6 05 FF 3C 0D 75 06 B4 19 CD 21 04
41 24 5F 3C 41 72 DC A2 56 03 24 0F A2 82 03 EB
C4 33 C9 89 0E A3 03 89 0E A5 03 41 C7 06 90 03
00 02 33 D2 1E 8E DB B4 1A CD 21 1F E8 92 F6 49
53 CD 21 80 3D 00 74 0C BA 37 03 B4 09 CD 21 B8
08 0C CD 21 8E C5 8E DD BA 80 00 B4 1A CD 21 CB
00 00 0D 0A 49 6E 73 65 72 74 20 43 4F 4D 50 41
51 20 44 4F 53 20 64 69 73 6B 65 74 74 65 0D 0A
45 6E 74 65 72 20 64 72 69 76 65 20 73 70 65 63
69 66 69 65 72 20 24 0D 0A 0D 0A 52 65 69 6E 73
65 72 74 20 64 69 73 6B 65 74 74 65 20 69 6E 20
64 72 69 76 65 20 41 20 69 66 20 6E 65 63 65 73
73 61 72 79 0D 0A 53 74 72 69 6B 65 20 61 6E 79
20 6B 65 79 20 77 68 65 6E 20 72 65 61 64 79 0D
0A 24 00 42 41 53 49 43 41 20 20 45 58 45 00 00
00 00 00 00 00 00 7E 81 A5 81 BD 99 81 7E 7E FF
DB FF C3 E7 FF 7E 6C FE FE FE 7C 38 10 00 10 38
7C FE 7C 38 10 00 38 7C 38 FE FE 7C 38 7C 10 10
38 7C FE 7C 38 7C 00 00 18 3C 3C 18 00 00 FF FF
E7 C3 C3 E7 FF FF 00 3C 66 42 42 66 3C 00 FF C3
99 BD BD 99 C3 FF 0F 07 0F 7D CC CC CC 78 3C 66
66 66 3C 18 7E 18 3F 33 3F 30 30 70 F0 E0 7F 63
7F 63 63 67 E6 C0 99 5A 3C E7 E7 3C 5A 99 80 E0
F8 FE F8 E0 80 00 02 0E 3E FE 3E 0E 02 00 18 3C
7E 18 18 7E 3C 18 66 66 66 66 66 00 66 00 7F DB
DB 7B 1B 1B 1B 00 3E 63 38 6C 6C 38 CC 78 00 00
00 00 7E 7E 7E 00 18 3C 7E 18 7E 3C 18 FF 18 3C
7E 18 18 18 18 00 18 18 18 18 7E 3C 18 00 00 18
0C FE 0C 18 00 00 00 30 60 FE 60 30 00 00 00 00
C0 C0 C0 FE 00 00 00 24 66 FF 66 24 00 00 00 18
3C 7E FF FF 00 00 00 FF FF 7E 3C 18 00 00 00 00
00 00 00 00 00 00 30 78 78 30 30 00 30 00 6C 6C
6C 00 00 00 00 00 6C 6C FE 6C FE 6C 6C 00 30 7C
C0 78 0C F8 30 00 00 C6 CC 18 30 66 C6 00 38 6C
38 76 DC CC 76 00 60 60 C0 00 00 00 00 00 18 30
60 60 60 30 18 00 60 30 18 18 18 30 60 00 00 66
3C FF 3C 66 00 00 00 30 30 FC 30 30 00 00 00 00
00 00 00 30 30 60 00 00 00 FC 00 00 00 00 00 00
00 00 00 30 30 00 06 0C 18 30 60 C0 80 00 7C C6
CE DE F6 E6 7C 00 30 70 30 30 30 30 FC 00 78 CC
0C 38 60 CC FC 00 78 CC 0C 38 0C CC 78 00 1C 3C
6C CC FE 0C 1E 00 FC C0 F8 0C 0C CC 78 00 38 60
C0 F8 CC CC 78 00 FC CC 0C 18 30 30 30 00 78 CC
CC 78 CC CC 78 00 78 CC CC 7C 0C 18 70 00 00 30
30 00 00 30 30 00 00 30 30 00 00 30 30 60 18 30
60 C0 60 30 18 00 00 00 FC 00 00 FC 00 00 60 30
18 0C 18 30 60 00 78 CC 0C 18 30 00 30 00 7C C6
DE DE DE C0 78 00 30 78 CC CC FC CC CC 00 FC 66
66 7C 66 66 FC 00 3C 66 C0 C0 C0 66 3C 00 F8 6C
66 66 66 6C F8 00 FE 62 68 78 68 62 FE 00 FE 62
68 78 68 60 F0 00 3C 66 C0 C0 CE 66 3E 00 CC CC
CC FC CC CC CC 00 78 30 30 30 30 30 78 00 1E 0C
0C 0C CC CC 78 00 E6 66 6C 78 6C 66 E6 00 F0 60
60 60 62 66 FE 00 C6 EE FE FE D6 C6 C6 00 C6 E6
F6 DE CE C6 C6 00 38 6C C6 C6 C6 6C 38 00 FC 66
66 7C 60 60 F0 00 78 CC CC CC DC 78 1C 00 FC 66
66 7C 6C 66 E6 00 78 CC E0 70 1C CC 78 00 FC B4
30 30 30 30 78 00 CC CC CC CC CC CC FC 00 CC CC
CC CC CC 78 30 00 C6 C6 C6 D6 FE EE C6 00 C6 C6
6C 38 38 6C C6 00 CC CC CC 78 30 30 78 00 FE C6
8C 18 32 66 FE 00 78 60 60 60 60 60 78 00 C0 60
30 18 0C 06 02 00 78 18 18 18 18 18 78 00 10 38
6C C6 00 00 00 00 00 00 00 00 00 00 00 FF 30 30
18 00 00 00 00 00 00 00 78 0C 7C CC 76 00 E0 60
60 7C 66 66 DC 00 00 00 78 CC C0 CC 78 00 1C 0C
0C 7C CC CC 76 00 00 00 78 CC FC C0 78 00 38 6C
60 F0 60 60 F0 00 00 00 76 CC CC 7C 0C F8 E0 60
6C 76 66 66 E6 00 30 00 70 30 30 30 78 00 0C 00
0C 0C 0C CC CC 78 E0 60 66 6C 78 6C E6 00 70 30
30 30 30 30 78 00 00 00 CC FE FE D6 C6 00 00 00
F8 CC CC CC CC 00 00 00 78 CC CC CC 78 00 00 00
DC 66 66 7C 60 F0 00 00 76 CC CC 7C 0C 1E 00 00
DC 76 66 60 F0 00 00 00 7C C0 78 0C F8 00 10 30
7C 30 30 34 18 00 00 00 CC CC CC CC 76 00 00 00
CC CC CC 78 30 00 00 00 C6 D6 FE FE 6C 00 00 00
C6 6C 38 6C C6 00 00 00 CC CC CC 7C 0C F8 00 00
FC 98 30 64 FC 00 1C 30 30 E0 30 30 1C 00 18 18
18 00 18 18 18 00 E0 30 30 1C 30 30 E0 00 76 DC
00 00 00 00 00 00 00 10 38 6C C6 C6 FE 00 1E 50
B8 40 00 8E D8 58 50 FE CC 7C 07 FE CC 7C 15 58
1F CF 58 32 C0 86 06 70 00 50 8B 0E 6E 00 8B 16
6C 00 EB EB 89 0E 6E 00 89 16 6C 00 C6 06 70 00
00 EB DC FF FF 1E 52 50 B8 40 00 8E D8 FF 06 6C
00 75 04 FF 06 6E 00 83 3E 6E 00 18 75 13 B8 B0
00 2B 06 6C 00 75 0A A3 6C 00 A3 6E 00 40 A2 70
00 FE 0E 40 00 75 0B B0 0C BA F2 03 EE 80 26 3F
00 F0 B0 20 E6 20 CD 1C 58 5A 1F CF 33 FF 8E C7
BF 74 00 80 FC 33 74 05 B8 A4 F0 EB 03 B8 E4 F0
26 3B 05 74 44 FA AB 8C C8 AB FB A0 65 00 8A 26
66 00 8B 16 63 00 BF 0C 00 E8 C0 F2 BB F4 01 EB
05 FF FF E9 3B EB E8 E8 E2 8B 16 63 00 83 C2 04
A0 65 00 EE B4 0F CD 10 B4 03 CD 10 B4 02 CD 10
83 F9 67 74 04 B4 01 CD 10 33 ED F9 C3 F6 06 10
00 01 C3 CF 50 53 51 52 1E BB 40 00 8E DB B0 01
86 06 00 01 3C 01 74 40 FB B4 0F CD 10 8A EC 51
B4 03 CD 10 59 52 33 D2 B4 02 CD 10 B4 08 CD 10
E8 34 00 72 17 FE C2 3A D5 72 ED E8 20 00 72 0C
32 D2 FE C6 80 FE 19 72 DF E8 12 00 1A C9 5A B4
02 CD 10 FA 88 0E 00 01 1F 5A 59 5B 58 CF B0 0D
E8 04 00 72 16 B0 0A 52 33 D2 84 C0 75 02 B0 20
B4 00 CD 17 F6 C4 01 74 01 F9 5A C3 4B 8B CB 51
B9 64 00 E8 C7 E2 74 05 E2 F9 E9 4B E6 F6 E2 AC
EE 59 E2 EB C3 FF 43 20 20 20 43 4F 4D 50 41 51
EA 5B E0 00 F0 FF FF FF FF FF FF FF FF FF 9A 00

View file

@ -0,0 +1,130 @@
{"data":[
1126701261,1866670121,1769109872,544499815,1347243843,1126191425,1970302319,544367988,1886547779,1952543343,745434985,943272224,1092627507,1914727532,1952999273,1701978227,
1987208563,539911269,1179863594,1095651370,1279804202,1246905130,-98557910,1676057008,1642483120,-222688080,-930288125,-1141057394,45998350,-1979600896,11857431,-1979484277,
-997588649,-297620242,-2134573494,-227208964,-92268662,1107654104,1257124016,-1912135496,-13433529,-217624693,38242987,163808238,-1329433267,-1337727372,-1337858541,-431888896,
-436162547,-430395384,-1341331957,-436148736,-1333533184,-436082945,-435245055,-1900006641,67157200,551949232,568723632,568723888,568786864,1139160752,1088880560,1085817062,
-1579643392,876413042,-384469742,-1263009134,15782953,-670564176,-256627244,536918016,-371120451,-617414507,-919350733,-13385074,-1003305077,-1020082638,-2131369302,-25163578,
-1258130888,-2147256448,-700774202,1642389106,1642475532,1642516260,-919350733,-13378930,-1003305077,-1020082638,628426034,-453909945,-1329551262,-2145749760,-25163578,-1258130888,
-2147256448,-700774202,-209661326,-342264321,-2071940572,-805014078,-1107790870,-2048269919,-1169733888,-1396899327,7530977,-1122537285,1575608757,1073788928,-1107171863,12255233,
-958689784,-947912700,-1593868280,12317554,-2133094904,141885236,-2146908288,-244145921,1642394507,1642496012,-1822366573,1642495780,-1229920769,951600102,-1975327227,-465377596,
-436007839,149460321,1642370304,1642528036,79257027,1274995201,-436209547,79233040,1239601920,-13433365,-1207958343,-1064388608,653733522,76735004,1075062672,-498619865,
-152698897,292864198,-402396997,-88342620,-4331520,-348066176,818345706,-88403596,-7411712,-402588997,-293535833,-1964315888,1697990,166249098,-401756160,179306519,
-393604117,-388889423,-1979710744,68101317,1075062672,506663,281874100,1689866691,-151735808,-2136412958,-136182411,-167544343,1497558242,63127720,459487,-248,
1358954495,-1062706460,-816315787,64273148,-1104138824,281014452,-1899262976,-488391205,-1156595479,-1014056960,857735353,119585023,-189027341,-486818559,-1325459479,79856429,
-1174457362,431882253,-498621213,-1469913860,1966190720,-1439518718,1380012276,542725193,1128613955,860889163,16824768,988606190,-334662204,141935674,-989937410,-1017581854,
-469804712,-14418141,-14425405,-11206877,-14418141,-376963419,-14418141,-14418141,-14422185,-129109915,-329648063,-128325831,-271390674,-420284088,-11272594,-257622189,
61383,66643742,62653176,41419640,336860180,16843009,4063262,117637379,-475546222,872289513,868234221,-1178235137,-1410121728,134268289,-277680581,1153351822,
-1174457373,-930349023,-492067538,-427773701,4241568,112318606,780791251,378077203,-13500302,1946272758,1166812683,1089307642,1388169,29016206,262728706,-813694091,
-477708784,-1191182145,-1389494270,-1845492987,-288295188,988602506,-2146929212,764543687,-492109821,-477446427,-1325397825,-1834144253,-288295188,988602506,-2147125820,-1416478521,
-1007227934,-1089637119,112787576,-1523649792,-109721211,1056393,6948550,130344960,807715722,-1310483269,787010052,281909463,-390070088,3998176,-1191677240,-661782464,
604005792,64535287,180206,-2119543367,-1170210847,246612948,1242481384,1122897584,1975859948,263211587,988562158,-147229247,-613068847,-1900543816,870003648,1073789439,
-1003305077,-1057095045,-492125390,-1174457357,-947175424,41665586,-1020083970,1978917294,-819193,116118901,-396033606,548994389,-1174457593,-1410129920,-1291594566,241035278,
201352608,64535048,256494,-1107242263,-768352256,772800697,-489684051,1959953914,1359067654,-1141039896,565896577,-34150400,-454099024,618170977,862054142,16824768,
1139193520,1122419850,-2135932186,1122255846,762692666,-1002814748,-989976715,-1014308126,1642357222,-1159364165,-1175977887,-1167988995,-1058668542,-1862269255,-1845646360,-336010686,
16890374,-453198616,612371553,610395839,-1151211905,2028470312,-432009988,-401296543,1407777903,1019512324,-1290898006,-60692460,-2046540312,1958742724,1958742546,-54335485,
-790093648,50445052,-1157859096,-1142160452,1374217687,-1173951491,1726481409,62700284,-1105260818,79422135,-222626816,-419450877,-301944799,-402627400,212863423,6600942,
-402016536,481302982,-386993486,-189261378,161867777,-1189497368,-2132279196,1962664444,-320670201,108314792,-402259526,11598869,-301731142,-389545800,3997724,-1141344524,
-1377304276,-453337861,-423877599,-323969759,-301744454,-661775923,1065474867,259369557,871773180,40864457,44884433,-1141120296,343212160,-1912586056,62398144,-326414336,
1476419327,33602392,-1966882045,-17949,1959232748,-502696704,1976368887,-1014975248,230883508,1936278538,1953785195,1919230053,225603442,1885688330,1701011820,1684955424,
1920234272,543517545,544829025,544826731,1852139639,1634038304,168655204,58845476,-1205971376,-661782464,-402652232,1579090526,-1141125288,-611450816,1358955449,-1912602438,
-855591742,2080422675,-1207959111,332202497,-502893735,-350171674,2080434906,-50659328,-1101638832,-1406212445,91497532,-335845656,-855591691,1482382870,1364458447,-1155639726,
-611450816,254593,28570251,1964506856,2090633732,-1947807488,184549524,-2079296302,-32344860,-29264692,-25856820,523203788,1532582494,-2087300913,-2135948350,65700846,
-288160591,976513,512002862,-997527832,1111682626,-299948968,-1070446006,-1031582994,-527766523,-940839870,-1031581104,-301748220,548880962,1962857704,-401557747,108330701,
-400509110,1499135685,-461061750,-387055243,175445883,-335166845,-536190940,-1880374902,-1341865341,1111682561,-1628954441,-1105038082,612368497,28789375,-4620108,-947589889,
612634997,-169735307,1964458728,1976303341,-1966347287,99255264,518291692,68665579,25166592,6291648,1572912,-50659316,-1957341666,4243180,-461054322,-855765388,
-855756428,1583169140,-1862545633,63629562,-118949772,990672150,1962967606,-2143909105,-2130056448,1962950398,2014723,1717897,-2133595141,-96466354,-83648536,1719715956,
-1024737526,-352315488,1961102013,-117081853,9759171,2134506624,853314295,-2020987137,100071547,-152406776,242549765,100040484,-162368253,1098203141,-1073076501,-58710664,
-2145094653,594808572,1948056704,939294754,540808052,1631324798,2067535228,522457469,-117413400,846378179,-1326060608,-1091441793,1877539064,-337022449,2086747370,2138717411,
-350212897,268206299,192874868,-1249408466,852356088,-1094063168,1206450373,-155094513,-1133166587,-1192550356,540835620,-58715020,-2146272254,259788540,159146300,92240444,
132694066,-2134640384,-185895228,473336826,1174702336,368437318,909839477,259326082,8402571,-25097749,57999422,989863614,1946163766,473336070,-71042304,15973200,
1476444904,-67108925,1364414716,1465275730,1085998622,-1076130304,1625554967,-315367286,551952560,-167747352,134223878,-58711692,-401574842,779223252,1951595648,2028241961,
-167384283,510919685,1582720,-401085449,309461244,1912648680,27781133,-756545422,-402427391,-309985629,1583292167,1532582493,-386268043,-816316410,-527802140,-2146672156,
2133090790,-1597808154,100008042,-165907448,393479173,1968110720,-339673596,1258061831,-922875531,1789004664,973531904,1946183974,1764132883,2028241920,182137611,1946184222,
124931,1348592835,1642527780,-503299911,-436073218,4241761,1967914722,1642485995,-1202708797,-661782464,-419492936,-2078219232,-1979288384,-434065184,1797687328,-820029440,
1913047039,-384683008,-997526063,118390564,-1084754037,146270918,-1375729479,-808449676,-498728589,1606639606,108651530,1008785398,1007207417,406751994,-253263872,-2131018448,
24400636,490259449,978466346,-58702267,-2144832443,1014282492,1951661184,939294792,-58698380,-2141227950,1668564732,1949564032,888963077,1844118389,-154929008,-109837307,
1576576,-202835448,-151304706,134223878,-1007027851,-2034224304,-2080368378,-402426688,-346489302,134608596,100061044,-87395324,-67188248,-151041303,-1116470523,-21174022,
-83505851,116835321,1954545688,-154928724,-1519123451,7409280,13166720,-1070392371,-100800024,134608579,100012916,-2146536444,33573182,1048578676,1946353737,-8787709,
169044457,-2146797340,92027900,2118450304,-1329334270,134608429,598741109,1963197942,-166088695,41222917,-536690638,-1679245262,180615677,-1978894108,1014965444,1006926919,
-134054317,-2133030205,-13482005,788061630,100008074,-1103989496,100071658,-165579516,359990021,1965032950,2083404811,1291616263,-1070463628,-100837912,537261763,-185865355,
-1978899992,-336891168,2083536110,-1976554262,-721413850,1679882,915135979,909836314,-1012072420,-1206704408,-90439650,-2136931467,1745664,-1660937053,-672062269,-1024252942,
318206962,1123369970,1844670453,989091828,234298866,1626763255,508951538,1381390086,-1957670063,-1900006420,2016855256,4241408,113694862,1946091584,840486146,21400292,
2080376381,838972423,23259584,41157288,78127595,132711284,1946265601,-401806590,646447663,-1070464959,-1610529815,-466485183,-402572311,-1070398875,637552266,-1174188918,
-489488256,19784439,-2046433792,-2046433596,1942160324,23497228,1963246838,-351685628,24373355,-466459019,-1962850678,786682328,-280262773,45091814,-58062106,1964134120,
-2133884925,-402581528,2122973745,17754119,-402358646,-964493048,16115715,-253213114,99517184,1963035368,506174,-402636097,-76283274,-1997741322,-203274491,4327158,
-165514048,134234630,-2135686028,646584811,-990511037,-805014480,-166925332,57934788,-352205696,-2013219838,-1342160602,839575046,1422194368,-426694421,-1979325428,-1979325224,
1284122360,8435715,-1823940397,-201862605,24433163,6720064,-997531606,1324082570,242549160,-83948311,-2147391862,41092348,1253054669,1659374566,-419450879,-402266619,
41156757,45130219,1303841510,-1979691032,-405796994,2114643920,4384774,-402405757,-964493265,2746372,-385356157,-1977155786,512229980,1719664704,-469041642,1317012596,
1532690710,1600019033,-815980793,233309111,26535936,-487130251,-1977840858,-2014777661,-151292671,-288912670,20900035,-402627399,125043062,-1258785463,-166073472,-301485854,
-402227574,1760100312,-402033408,-1062731705,48988340,-1329339382,105810433,109371602,158662718,4064776,1979694824,16443431,-1444409417,12839167,1962948328,650130199,
1946764298,17086728,1967718114,387320,1085587624,-402081853,45219716,1946225128,-320669957,91539966,-352304478,4366575,309443,-150995015,-2147467770,-136180875,
-260716290,-1275065624,1042710656,-469074176,66239171,603996064,-804097009,1946462440,-1979469822,-1325383898,182768132,-301462332,1491269200,4073088,-301724672,-150995015,
-2147467770,1967720309,-343886602,1042710541,-2132246784,-17504001,-1161567182,1183514640,-1948059892,-1023212962,216454674,-997849882,-997849882,-1031087989,-1966898714,-405796994,
2114643920,-19470330,-402293110,1187249872,1111837286,1358954342,4241438,243325070,-1333788610,522249760,-956641448,-16760826,1317671088,216060422,105253388,-301731142,
-388889423,4130436,1067588725,-2080264192,309592390,8239355,173312550,4055798,-402426880,-1006960621,-167512902,-2136412958,-487130764,1084769004,17086915,1967718114,
-15368,-536870913,134358274,-162463958,1408959488,508973649,-1912586053,65176027,-1275950336,258336786,-1668676491,-422510472,562315,376754699,2093809232,2093809175,
2093809208,116086852,-2132309416,1579108596,-816096934,12141294,-131797792,-2136409974,-169735307,-294269954,-352202880,619463387,-301921249,-336716252,-1337834995,1085926920,
218030597,-347410940,619463169,-336033032,58899127,567093172,68062006,512439808,666107924,-58655805,104298255,1448563998,1347572051,-1091793924,-561119168,6493835,
-138936130,1962950850,-1342128637,-997800306,-997789557,16770689,-13703471,-370394732,-3209356,170731576,471402015,117835522,0,173690993,421070361,202050818,
0,170731576,1885603455,117833986,0,257052769,421070361,202050818,0,170731576,471402015,117835522,0,173690993,471402015,117835522,
0,170731576,1885603455,117833986,0,257052769,421070361,202050818,0,24512316,270437059,820215808,1966144384,62175759,12257200,134265264,
199950772,-1157376838,12171264,-1562103264,-1014103991,6493833,-1031544698,-528028156,82477905,5113543,113639424,838860898,-772764700,-2071253274,1252258419,-2071253504,
1285812867,787403008,-225213302,771777954,-224680822,6694536,-402648897,-1202126786,-1461190553,-1207732979,1621296647,4825088,121438003,71043188,-1070398340,548930539,
514585351,5291783,145866803,-189027341,-264378367,-2097125984,-1007811390,4796042,-1898237154,1949746651,50167808,-964486276,83722256,-964488324,134053904,-964490372,
1086518800,-293403788,-233849568,-83847959,119849759,-1744805214,4990711,-1862250845,213117393,6493835,-1610534168,-778567582,-1937008928,166199376,-16071935,-478147467,
6725663,-1022697436,95489771,-478092334,6725664,-1022697692,-2097125726,-1007811134,-2013247072,1251999814,21399552,-2013240672,683870022,1342187520,671109120,1342187520,
20480,524296,1048592,4194368,742391872,707341608,808001070,808464432,-97501392,-1031538908,-528028156,-360452542,-1947979259,-289109297,-1396375998,-169719058,
-75045377,-472776910,5281675,-1962781047,-1996464114,-1983708082,-1610588146,-31195063,712311356,-611394765,7616197,219774080,-1040769931,376772632,-478029429,-980787104,
-1979706904,-389969176,-930480118,179555083,-1023391000,246681380,-388897546,-388896559,-2134704108,427231231,-13436026,1317790673,1351584002,125733376,6438458,31982453,
-1070349568,653772166,-939327414,-788509023,-1949826072,-1291820266,124942,-289174845,-289043902,-1966866870,-1975324989,-1966870847,-2147464922,91358460,1980165248,7137290,
-1996125402,-389873594,-1047789436,-141829746,-1047604852,-1962349437,-1291536388,-805008894,-1978435076,22317808,-788526919,-117343774,-489566000,-2119502366,-31457034,-2082572853,
-805416762,-930294411,1858001038,-386102278,292749406,-661733325,8140485,1340669067,67269120,147096448,-1023392119,-544540533,1285685042,-1947994368,-1948003888,-1610592097,
-403308470,-1023148238,-1039933231,-544554089,-472776910,5283723,-628698573,-271451253,-83628079,4785910,-788368126,-1007025182,-544487797,-2135233230,-259303936,78773131,
192194547,1241516037,861859957,1589901760,61982251,-2134644525,67127614,1048577906,1963393097,-8067042,-52279382,1228832963,124912640,4800128,-1979157241,-9639709,
-389829645,1586167688,1228835334,-1899328512,-93405478,142196746,-628174285,8140485,-788496603,-773795360,-2131754016,1668548351,-1961825149,-1945741372,1372032727,-2131195053,
146080739,-787959380,-790441502,167932896,1976172243,-1966699790,-838947870,1515972213,-796107001,79288462,-1376482560,58325968,-1425722586,536790913,2046546093,87238147,
-1292926549,-2115706337,1241595631,-997992331,-1976636656,-1949201437,309726,-793971829,637762044,-2119563982,-1407189049,58326224,-1442500058,531754881,-276699934,1967784255,
-1963080744,-1962915298,-751173034,-745929614,-990459138,-2029227007,720710346,-153159983,704965594,-19846411,-2134704442,67127614,1048577906,1963393097,736856921,-1736214,
-1947873024,-154825992,65876707,65065409,-1761587706,-561068404,-470355829,16828151,-654900108,-523117065,177653507,974419136,705721286,-204829968,66388901,1976499965,
-1963947276,-1977569049,61600714,1976499965,1048626166,1946550345,-790507516,5291490,-1963422894,-1729285435,-150912838,62981090,-1761587706,-1164382069,-487128768,16828151,
-654897036,-947790345,1048584432,1946550345,-956086527,-628178292,-1957471594,1958742751,1942370864,1357916716,-422517040,-259275125,-896861301,-259283725,-159253621,-142532608,
-896917504,-989616909,-822158077,-1973886859,-790179600,-997566234,-896861301,-74732813,536934273,-1426863478,-822158077,-389813643,74778843,6438538,1349781308,947128380,
1333004860,1014238524,-1275067975,-1273967350,-32453373,1242970818,840463616,-2134442286,259332606,45403902,146018509,-58060595,-1275054104,-1022309118,281871284,-143338998,
-269759746,281871284,-403975630,-402524997,-1262228704,-2146382589,74717438,-739522818,281872564,32046218,1381090048,4800128,-2146864121,50350398,11993718,856031672,
-1978091831,1241532950,1499074765,2418883,-167409114,-758701353,4622568,1370307,-758963560,2046611680,87041540,1025648323,-1012218102,1452015411,1944768770,536919811,
-489561391,-489561391,-489555453,-100408623,1048641207,1929773129,-791555836,-153122073,-774796333,-773139990,-2133723414,-942536735,-960235005,-2097151674,-2081683774,78120682,
44593013,1187409780,279970049,-1964227858,296766176,1256997614,5113387,2081424701,851456770,1226738431,-1886769664,-315426802,41533739,243974195,-75497398,-2143849980,
846465019,-235525967,-372193142,1317595600,40273923,1183375568,-2046578427,-740019488,105286112,4800128,-804883194,1724973670,130188038,-235486226,-2013051256,61932134,
-472654710,-771334519,88508640,50586603,50529541,1515717635,1600019289,-821616803,-1,-1,-1,-1,-1,-1,-1,-1,
-1205928961,-661782464,520098721,-1205929009,-661782464,520097953,-326412849,17190528,-815954252,210447953,976111174,-502959068,-1017513737,76164678,-3974663,-1288523493,
-1221151308,766556600,1904806077,1953654135,1869182329,224222064,1685283327,1785227110,-1480889237,2052915168,1651925880,-1364431506,-13959249,555482912,623125312,673850974,
137060137,436210447,477961083,674899725,729688354,876360572,960443710,959985440,909456429,858927403,405040,-2075560121,1951232843,1985049935,503775238,454696716,
169614619,-1073996757,-524418304,-1523649543,721572001,1963087878,10635268,2408195,-1410758728,-2085894004,-524794681,-930305050,-11290453,-1412920149,-1004092018,-1560276474,
109838480,-1006960494,-644953805,38936203,-1014764661,-745604592,-1047600757,-402634823,-594608220,50446163,-1274838342,169987343,-1171360576,162792194,28844493,-2145268468,
225771581,1023346118,-1274645235,69324057,1012868161,-1562611135,254018390,-352091486,-1983302716,-1996250354,1090757902,59770567,-768409088,-1260679650,522308890,1240896232,
-2145268397,208928829,-1274857542,-1205744375,567086088,-577845874,-1275035462,-886977254,168624128,1702063689,1126200434,1095781711,1329864785,1768169555,1952803699,168650100,
1702129221,1919164530,543520361,1667592307,1701406313,220471410,1376390410,1936615781,544502373,1802725732,1702130789,544106784,1986622052,541139045,1847617129,1936024421,
2037539187,1951599117,1701538162,2037276960,2036689696,1701345056,1701978222,226059361,1107305482,1128878913,1159733313,17752,0,-2122448896,-1715633755,-8487295,
-406585381,-26444033,947715838,940572688,947715708,2084044816,2097086008,269515832,2097052728,31800,406600728,-65536,-406600729,1006698495,1715618406,-1006698436,
-1715618407,118489027,-859013873,1715239116,406611558,859773054,1882206271,1669325040,1734566783,1520025830,1021830972,-528443046,-520552712,235012224,239009342,1008205826,
2115508350,1717966908,6710886,-612433818,454786011,1665007643,946629688,30924,2122186752,1008205950,1014896766,1008271128,404232318,404226072,1014896664,402653208,
403504652,805306368,811662944,0,-20922176,603979776,610729830,402653184,-33220,-16777216,406617855,0,0,2016411648,3158136,1819017264,
108,1819017216,1828613374,2083520620,-133400384,-973078480,1714428108,1815609542,-857967048,1616904310,192,806879232,811622496,811597848,806885400,1711276128,
1715273532,805306368,808516656,0,805306368,24624,64512,0,805306368,201719856,-1067438056,-964951936,-420028722,1882194044,808464432,-864550660,
-866109428,-864550660,-871614452,1008468088,218025068,-1057226722,-871625480,1614282872,-858982208,-855900040,808458252,-864550864,-859014964,-864550792,403471564,805306480,
805306416,805306416,805306416,806903856,811647072,24,-67108612,811597824,806882328,-864550816,3151884,-964952016,-1059135778,2016411768,-855847732,1727791308,
1717992550,1715208444,1723908288,1828192316,1818650214,1660813560,1651013736,1660813566,1617459304,1715208432,1724825792,-859045826,-858981172,813170892,808464432,203292792,
-859042804,1726349432,1718384748,1626341606,1717723232,-289013506,-958988546,-423231290,-959521034,1815609542,1824966342,1727791160,1616936038,-864550672,2027736268,1727791132,
1718385766,-864550682,-870551328,-1258553224,808464432,-859045768,-858993460,-859045636,2026687692,-960102352,-285288762,-960102202,1815623788,-859045690,808483020,-956432264,
1714559116,1618477310,1616928864,1623195768,101455920,410517506,404232216,940572792,50796,0,0,808517376,24,0,-864285576,1625292918,
1717992544,220,-859779976,203161720,-859014132,118,-1057174408,1815609464,1616965728,240,2093796470,1625356300,1717991020,3145958,808464496,786552,
-871625716,1625323724,1819831398,812646630,808464432,120,-687931700,198,-858993416,204,-858993544,120,2087085788,61536,2093796470,7692,
1617327836,240,209240188,806355192,875573372,24,-858993460,118,2026687692,48,-16853306,108,1815637190,198,2093796556,63500,
1680906492,807141628,808509488,404226076,404226072,819986456,808459312,-596246304,0,268435456,-960074696,1344143614,-1912586056,-28288808,-33063732,1477803212,
844680991,1879475904,244011008,378208366,-336920468,7212681,7083657,7341766,-2299136,1347559167,-1912586056,1812398040,-16485120,-2097123834,402681406,-1330113675,
1812343552,-1559595776,1856176236,1889681408,1074724352,-1341426432,66238988,1059487982,548466688,483205350,-820028840,-946929869,-2147453761,91501564,-336550728,-253446141,
1946499878,-1934886332,-1594119224,646578277,378208358,213844067,-222238720,-352193349,-369099003,-387388613,1662421986,79856384,-301963872,281874356,281871284,281871028,
1952971139,-855526396,-101895408,268891843,-809303808,1381061456,4242206,28367758,16778886,1081344316,-854608645,1374456336,281871284,-768388519,281871028,281872564,
1912616168,985857559,-387091755,208797728,-956378574,1914306176,1239263,-1269118694,-99562238,16780936,1532582431,229691224,1912603880,1376432150,-1065037261,548405877,
399311028,1946273014,-1017448191,1372293963,-402627399,91546311,1273625058,-1394411802,-337487378,541327299,1329799200,1363234893,14703594,-16,-1,10158079]
}

View file

@ -0,0 +1,52 @@
---
layout: page
title: Compaq Portable Computer ROMs
permalink: /devices/pc/rom/compaq/bios/portable/
---
Compaq Portable Computer ROMs
---
The oldest COMPAQ Portable Computer ROM I have is an 8Kb [Rev C ROM](100666-001-REVC.json) from a REV D system board.
[<img src="http://archive.pcjs.org/pubs/pc/reference/compaq/images/COMPAQ_Portable_System_Board.jpg" alt="Compaq Portable System Board REV D"/>](http://archive.pcjs.org/pubs/pc/reference/compaq/images/COMPAQ_Portable_System_Board-FULL.jpg)
Printed on the back of the system board:
(C) COMPAQ COMPUTER CORP. 1982
BOARD NO. 000006-001 REV D 84490
Curiously, the system board contains two mask ROMs (AM9265DPC), both labeled `1000666-001 REV.C` but with two different
identifiers: `34569 8350KME` on the ROM in socket U40, and `34569 8350LME` on the ROM the socket below U40. However,
when I dumped the ROMs with my homemade ROM reader, their contents were identical.
I've seen pictures of other COMPAQ Portable system boards with only one mask ROM installed, so I'm puzzled as to why
my board contains two. Do the contents of the second ROM show up in a different part of the address space? Unless
I'm someday able to power and test this board, I may never know.
Some clues can be found in this
[COMPAQ Portable/Plus Maintenance Guide (Excerpt)](http://archive.pcjs.org/pubs/pc/reference/compaq/portable/Compaq_Portable_Plus_Support_Discontinued.pdf).
Older (REV B) system boards apparently *did* require 2 ROMs, at locations U40 and U47. REV C and later system boards
required only 1 (REV C or later) ROM at location U40.
That's all well and good, but it still doesn't explain why my REV D system board contains 2 ROMs. It just raises
more questions. For example, why did *older* system boards require 2 ROMs? Were the earlier BIOS revisions larger
or the ROMs smaller (eg, 4Kb instead of 8Kb)?
Also, I've come across some other computer history sites that claim the COMPAQ Portable contained "12Kb" of ROM.
Hmmm.
### System ROM Revisions
Thanks to the aforementioned Maintenance Guide excerpt, we know that these other COMPAQ Portable ROM revisions existed;
however, REV C is the only revision currently available here.
Rev ROM # Size Date
--- ---------- ---- ----
B 100518-001
C 100666-001 8Kb None
E 100298-004
F 100298-005
G 105681-001
H 106265-001
J 106265-002

View file

@ -0,0 +1,166 @@
/* CPQPATCH 1.0 by John Elliott.
*
* Patches the BIOS ROM of the Compaq Portable (revision C) to support
* booting from a hard drive.
*
* This program is public domain.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char rom[8192];
#ifdef __PACIFIC__
#define AV0 "CPQPATCH"
#define EXIT_FAILURE -1
#define EXIT_SUCCESS 0
#else
#define AV0 argv[0]
#endif
/* First patch: New INT19 vector */
static unsigned char p0[] = { 0x20, 0xf8 }; /* DW 0xF820 */
/* Second patch: Convert old INT19 into a subroutine */
static unsigned char p1[] = { /* Enter with DH = 0 DL = drive */
0xbb, 0x40, 0x00, /* P1: MOV BX, 0x40 ;BIOS dseg */
0x8E, 0xDB, /* MOV DS, BX */
0xB9, 0x03, 0x00, /* MOV CX, 0x0003 ;Try 3 times */
0x51, /* TRY: PUSH CX ;Save count */
0x52, /* PUSH DX ;Save drive */
0xBB, 0x00, 0x00, /* MOV BX, 0x0000 ;Load to */
0x8E, 0xC3, /* MOV ES, BX ;segment 0 */
0xB4, 0x00, /* MOV AH, 0x00 ;Reset FDC */
0xCD, 0x13, /* INT 0x13 ;BIOS disk */
0x5A, /* POP DX ;Get drive */
0x52, /* PUSH DX ;Save again */
0xBB, 0x00, 0x7C, /* MOV BX, 0x7C00 ;Load addr */
0xB9, 0x01, 0x00, /* MOV CX, 0x0001 ;Cyl 0 sec 1 */
0xB8, 0x01, 0x02, /* MOV AX, 0x0201 ;Read sector */
0xCD, 0x13, /* INT 0x13 ;BIOS disk */
0x5A, /* POP DX ;drive */
0x59, /* POP CX ;count */
0x73, 0x03, /* JNC OK ;It worked */
0xE2, 0xE2, /* LOOP TRY ;Retry */
0xF9, /* STC ;It failed */
0xC3, /* RET */
0x00, 0x00, 0x00, 0x00, /* ;Unused */
};
/* Third patch: New INT19 entry point. This replaces an unused area. */
static unsigned char p2[] = {
0xfb, /* STI */
0xBA, 0x00, 0x00, /* TR2: MOV DX, 0x0000 ;Floppy */
0xE8, 0xCB, 0xEE, /* CALL P1 ;Try it */
0x73, 0x0B, /* JNC GO ;It worked! */
0xB2, 0x80, /* MOV DL, 0x80 ;Hard drive */
0xE8, 0xC4, 0xEE, /* CALL P1 ;Try it */
0x73, 0x04, /* JNC GO ;It worked! */
0xCD, 0x20, /* INT 0x20 ;See below */
0xEB, 0xED, /* JMPS TR2 ;Loop forever*/
0xEA, 0x00, 0x7C, /* GO: JMPF 0x0000:0x7C00 ;Go to sector*/
0x00, 0x00,
0x00, /* DB 0 ;word align */
0xEC, 0x7E, /* DW 07EECh ;checksum */
0x00, 0x00, 0x00, 0x00, /* ;Unused */
/* Note on the INT 0x20: This is not 'program termination' at boot time. The
* Compaq BIOS hooks it and uses it to display the message:
*
* Diskette error
* Replace and strike any key when ready
*
*/
};
void patch()
{
memcpy(rom + 0x0376, p0, sizeof(p0));
memcpy(rom + 0x06f2, p1, sizeof(p1));
memcpy(rom + 0x1820, p2, sizeof(p2));
}
unsigned short checksum()
{
unsigned short total, cur;
int n;
total = 0;
for (n = 0; n < 8192; n++)
{
cur = rom[n];
++n;
cur |= (((unsigned short)rom[n]) << 8);
total += cur;
}
return total;
}
int main(int argc, char **argv)
{
FILE *fp;
unsigned short sum;
if (argc < 3)
{
fprintf(stderr, "Syntax: %s old_rom new_rom\n\n"
/* 1...5...10...15...20...25...30...35...40*/
"Patches the BIOS ROM of the Compaq\n"
"Portable (revision C) to support booting\n"
"from a hard drive.\n\n"
"This program is public domain.", AV0);
return EXIT_SUCCESS;
}
fp = fopen(argv[1], "rb");
if (!fp)
{
perror(argv[1]);
return EXIT_FAILURE;
}
if (fread(rom, 1, sizeof(rom), fp) < (int)sizeof(rom))
{
fprintf(stderr, "Could not read 8k from %s\n", argv[1]);
fclose(fp);
return EXIT_FAILURE;
}
fclose(fp);
if (memcmp(rom + 0x1FEA, "COMPAQ", 6))
{
fprintf(stderr, "COMPAQ signature not found in %s\n", argv[1]);
return EXIT_FAILURE;
}
if (rom[0x1FE6] != 'C')
{
fprintf(stderr, "ROM revision is not C. This may not work.\n");
}
sum = checksum();
if (sum != 0)
{
fprintf(stderr, "ROM checksum is 0x%04x (should be 0). This "
"may not work.\n", sum);
}
patch();
sum = checksum();
if (sum != 0)
{
fprintf(stderr, "New checksum is 0x%04x (should be 0). This "
"may not work.\n", sum);
}
fp = fopen(argv[2], "wb");
if (!fp)
{
perror(argv[2]);
return EXIT_FAILURE;
}
if (fwrite(rom, 1, sizeof(rom), fp) < (int)sizeof(rom))
{
fprintf(stderr, "Could not write 8k to %s\n", argv[2]);
fclose(fp);
return EXIT_FAILURE;
}
fclose(fp);
return EXIT_SUCCESS;
}

View file

@ -0,0 +1,67 @@
CPQPATCH v1.0 12 August 2008, John Elliott
=============================================================================
CPQPATCH patches the BIOS ROM of a Compaq Portable so that it can boot from
a hard drive whose own ROM doesn't support booting an XT.
To explain a little:
- On the original PC and XT, the BIOS ROM doesn't know anything about hard
drives. The hard drive controller comes with its own ROM, and this handles all
aspects of the drives, including booting from them.
- On AT-class machines, the BIOS ROM does know about hard drives, and supports
ATA drives itself. Additional hard drive controllers (eg: SCSI) can get away
with just adding the drives to the system; the BIOS handles booting.
So, I had a Compaq portable, and an add-on drive for it (2Mb of flash on an
ISA card) which left booting up to the BIOS. The attached program will patch
the revision C ROM so that it will boot from my add-on drive. It should also
work with the Future Domain TMC-850 (firmware 8.4 or 8.5).
The C source (cpqpatch.c) includes the assembly language source code for
the changes made.
To use CPQPATCH:
~~~~~~~~~~~~~~~~
You will need:
* A Compaq Portable
* An EPROM burner
* A 2764 EPROM, 28c64 EEPROM, or compatible chip.
1. Get hold of a Compaq Portable BIOS image (revision C). This should be an 8k
file. If you have a Portable, you can check the BIOS revision with DEBUG:
A>DEBUG
-DFFFE:6,f
FFFE:0006 43 20 20 20 43 4F 4D 50 51 51 C COMPAQ
-
The 'C' by itself is the revision number.
Either save the ROM with DEBUG, or image it once you've dismantled the PC.
2. Take the motherboard out of the Portable.
3. Remove the BIOS ROM. This should be marked 100666-1 (or 1006661) and be
plugged into a socket near the DIP switches. If you haven't imaged it, do so
now.
4. Run CPQPATCH:
CPQPATCH bios.bin new.bin
where "bios.bin" is the original BIOS, and "new.bin" is the name you want to
give to the patched version.
5. Burn "new.bin" to an EPROM or EEPROM.
6. Put that EPROM/EEPROM in the socket where the BIOS ROM came from. The
silkscreening on the board should show you which way round it goes, but in
case it doesn't, the end with the notch should point in the direction of the
ISA slots.
7. Put the whole thing back together, power it up, and hope it works.

View file

@ -1,12 +1,12 @@
---
layout: page
title: Compaq Portable III Information
title: COMPAQ Portable III ROMs
permalink: /devices/pc/rom/compaq/bios/portable3/
redirect_from:
- /devices/pc/bios/compaq/portable3/
---
Compaq Portable III Information
COMPAQ Portable III ROMs
---
### System ROM Locations

View file

@ -17,6 +17,6 @@ PCjs supports the following IBM PC video adapters:
More detailed information is available for the following IBM-compatible video adapters:
* [ATI VGA](/devices/pc/video/ati/vga/)
* [Compaq EGA](/devices/pc/video/compaq/ega/)
* [Compaq VGA](/devices/pc/video/compaq/vga/)
* [COMPAQ EGA](/devices/pc/video/compaq/ega/)
* [COMPAQ VGA](/devices/pc/video/compaq/vga/)
* [Paradise VGA](/devices/pc/video/paradise/vga/)

View file

@ -19,11 +19,11 @@ Each ROM chip apparently contains 32Kb of data, but only the upper 16Kb of each
and merge them into a single 64Kb file, using the PCjs [FileDump](/modules/filedump/lib/) utility:
filedump --file=VGA_Wonder_V3-1.02_EVEN.BIN --merge=VGA_Wonder_V3-1.02_ODD.BIN --format=rom --output=VGA_Wonder_V3-1.02.rom
filedump --file=1988-11-11/archive/VGA_Wonder_V3-1.02_EVEN.BIN --merge=1988-11-11/archive/VGA_Wonder_V3-1.02_ODD.BIN --format=rom --output=1988-11-11/archive/VGA_Wonder_V3-1.02.rom
Then, within the resulting 64Kb file, we extract the ROM code+data from the upper 32Kb:
filedump --file=VGA_Wonder_V3-1.02.rom --offset=32768 --format=json --output=VGA_Wonder_V3-1.02.json
filedump --file=1988-11-11/archive/VGA_Wonder_V3-1.02.rom --offset=32768 --format=json --output=1988-11-11/VGA_Wonder_V3-1.02.json
And now we have a JSON-encoded ROM image that PCjs machines can load.
@ -31,7 +31,7 @@ And now we have a JSON-encoded ROM image that PCjs machines can load.
To create a human-readable dump, you can use the following command:
filedump --file=VGA_Wonder_V3-1.02.json --format=bytes --comments
filedump --file=1988-11-11/VGA_Wonder_V3-1.02.json --format=bytes --comments
Here are the first 12 lines from that dump:
@ -47,4 +47,3 @@ Here are the first 12 lines from that dump:
0x72,0x20,0x42,0x69,0x6F,0x73,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x20, // 0x00000090 r Bios, Version
0x56,0x33,0x2D,0x31,0x2E,0x30,0x32,0x20,0x0D,0x0A,0x00,0x1E,0x06,0x57,0x56,0x55, // 0x000000A0 V3-1.02 .....WVU
0x52,0x51,0x53,0x50,0xBA,0xE8,0x46,0xB0,0x16,0xEE,0xBA,0x02,0x01,0xB0,0x01,0xEE, // 0x000000B0 RQSP..F.........

View file

@ -1,13 +1,13 @@
---
layout: page
title: "Compaq Enhanced Color Graphics Board (EGA)"
title: "COMPAQ Enhanced Color Graphics Board (EGA)"
permalink: /devices/pc/video/compaq/ega/
---
Compaq Enhanced Color Graphics Board (EGA)
COMPAQ Enhanced Color Graphics Board (EGA)
---
Our Compaq [EGA ROM BIOS](000412-001B/compaq-ega.json) comes from
Our COMPAQ [EGA ROM BIOS](000412-001B/compaq-ega.json) comes from
[bitsavers](http://bitsavers.trailing-edge.com/pdf/compaq/firmware/000412-001B_EGA/).
cd 000412-001B

View file

@ -1,15 +1,15 @@
---
layout: page
title: "Compaq Video Graphics Controller (VGA)"
title: "COMPAQ Video Graphics Controller (VGA)"
permalink: /devices/pc/video/compaq/vga/
---
Compaq Video Graphics Controller (VGA)
COMPAQ Video Graphics Controller (VGA)
---
This is the Compaq Video Graphics Controller Board, one of the earliest VGA boards Compaq released
This is the COMPAQ Video Graphics Controller Board, one of the earliest VGA boards COMPAQ released
for its DeskPro 386 line.
[<img src="http://archive.pcjs.org/devices/pc/video/compaq/vga/109360-001/Compaq_VGA_109360-001-640.jpg" alt="Compaq VGA Board"/>](http://archive.pcjs.org/devices/pc/video/compaq/vga/109360-001/Compaq_VGA_109360-001.jpg)
[<img src="http://archive.pcjs.org/devices/pc/video/compaq/vga/109360-001/Compaq_VGA_109360-001-640.jpg" alt="COMPAQ VGA Board"/>](http://archive.pcjs.org/devices/pc/video/compaq/vga/109360-001/Compaq_VGA_109360-001.jpg)
It was featured in the February 16, 1988 of PC Magazine (p.188). At that time, it retailed for $599, and it was described
as "the sharpest, fastest IBM-standard video board you can slide into your PC." The article goes on to say:
@ -62,7 +62,7 @@ And for those who want a binary file, the FileDump API can be used to recreate b
> [http://localhost:8088/api/v1/dump?file=/devices/pc/video/compaq/vga/109360-001/1988-05-18.json&format=rom](http://localhost:8088/api/v1/dump?file=/devices/pc/video/compaq/vga/109360-001/1988-05-18.json&format=rom)
The Compaq VGA ROM BIOS concludes with the usual copyright string and author initials:
The COMPAQ VGA ROM BIOS concludes with the usual copyright string and author initials:
Copyright COMPAQ Computer Corporation, 1982, 1983, 1984, 1985, 1986, 1987, 1988
RWS*PNA*NPB*DJC*CAB*ALL*

View file

@ -1,4 +1,4 @@
;
Aa;
; ROM BIOS for IBM VGA Adapter (aka IBM PS/2 Display Adapter)
; (C)COPYRIGHT IBM Corp. 1984, 1986 10/27/86
;

View file

@ -13,10 +13,10 @@ Browse [IBM PC](pc/) and [Challenger 1P](c1p/) disk archives.
PCjs works best with disk images in a **JSON** format, to save conversion time, so that's the only
disk image format you'll find on the PCjs website.
To convert any of our **JSON** disk images back into an **IMG** file, you can use the DiskDump API
To convert any of our **JSON** disk images back into an **IMG** file, you can use the [DiskDump API](/api/v1/dump)
with the *format* parameter set to `img` instead of `json`. For example:
http://localhost:8088/api/v1/dump?disk=/disks/pc/dos/ibm/2.00/PCDOS200-DISK1.json&format=img
{{ site.url }}/api/v1/dump?disk=/disks/pc/dos/ibm/2.00/PCDOS200-DISK1.json&format=img
In fact, when browsing the disk archives, the PCjs web server automatically provides "onclick" handlers
for links to JSON-encoded disk images, which will invoke the API for you.

View file

@ -211,9 +211,9 @@ or with the "--path" option, which specifies either a single file or a set files
node diskdump --path="./apps/pc/1981/visicalc/bin/vc.com;../readme.md" --format=json --output=./apps/pc/1981/visicalc/disk.json
or via the PCjs server's DiskDump API:
or via the PCjs server's [DiskDump API](/api/v1/dump):
http://www.pcjs.org/api/v1/dump?path=/apps/pc/1981/visicalc/bin/vc.com&format=json
{{ site.url }}/api/v1/dump?path=/apps/pc/1981/visicalc/bin/vc.com&format=json
Learn more about PCjs disk image formats [here](/disks/).

View file

@ -140,6 +140,7 @@
<disk path="/disks/pc/os2/misc/1.0/OS210-88286.json">OS/2 1.0 Debugger</disk>
<disk path="/disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107.json">OS/2 SIZZLE (v7.68.18)</disk>
<disk path="/disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107-DEBUG.json">OS/2 SIZZLE (v7.68.18 DEBUG)</disk>
<disk path="/disks/pc/os2/misc/cruiser/OS2SDK-048014.100.json">OS/2 CRUISER (048014.100)</disk>
<disk path="/disks/pc/windows/1.00/WIN100-DISK1.json">Windows 1.00 (SETUP)</disk>
<disk path="/disks/pc/windows/1.00/WIN100-DISK2.json">Windows 1.00 (BUILD)</disk>
<disk path="/disks/pc/windows/1.00/WIN100-DISK3.json">Windows 1.00 (UTILITY)</disk>

View file

@ -25,6 +25,10 @@ digits are the day of the year (294 or October 21).
Directory listings of the four 1.44Mb distribution diskettes are provided below.
IBM OS/2 1.0 has been pre-installed on this machine's 20Mb hard disk, along with a copy of the
[Microsoft OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/), as discussed in this
[blog post](/blog/2015/12/27/).
{% include machine.html id="ibm5170" %}
### Directory of IBM OS/2 1.0 (1.44M Install)

View file

@ -3,10 +3,10 @@
<machine id="ibm5170" class="pc" border="1" pos="center" background="#FAEBD7">
<name>IBM PC AT (8Mhz), 128Kb EGA, 2Mb RAM, 20Mb Hard Disk</name>
<computer id="at-ega-2048k" name="IBM PC AT" buswidth="24"/>
<cpu id="cpu286" model="80286" cycles="8000000"/>
<cpu id="cpu286" model="80286" cycles="8000000" autostart="true"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x160000" comment=""/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/1984-09-13/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/rom/5170/bios/1985-11-15/ATBIOS-REV3.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-lockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-arrows.xml"/>

View file

@ -30,7 +30,7 @@ of OS/2 when it was still a work-in-progress. Not all of the disks run properly
The [OS/2 FOOTBALL Boot Disk (v7.68.17)](/disks/pc/os2/misc/football/87058/) contained a prototype version of OS/2
from February 1987 that was designed to test two important new features of the Intel 80386 processor: paging and V86-mode.
This prototype was forked from pre-1.0 OS/2 sources, and the only hardware it supported was the Compaq DeskPro 386-16.
This prototype was forked from pre-1.0 OS/2 sources, and the only hardware it supported was the COMPAQ DeskPro 386-16.
* **OS/2 FOOTBALL Boot Disk (v4.41.00)**

File diff suppressed because one or more lines are too long

View file

@ -32,7 +32,7 @@ However, another underlying goal was to demonstrate to IBM that Microsoft was ah
considerations for OS/2. Up to this point, all OS/2 design and development work had been 16-bit, since the
dominant state-of-the-art Intel CPU at the time was the 80286.
The FOOTBALL prototype was based on pre-1.0 OS/2 sources, and the only hardware it supported was the Compaq DeskPro
The FOOTBALL prototype was based on pre-1.0 OS/2 sources, and the only hardware it supported was the COMPAQ DeskPro
386-16. The source code was later sent to IBM, who in early April 1987 was adapting it to run on the Model 80 PS/2.
After OS/2 1.0 was finished in October 1987, FOOTBALL changes were merged into a fresh set of 1.0 sources, which
@ -47,7 +47,7 @@ We also have an original [FOOTBALL Design Document](#football-design-document) d
Booting FOOTBALL
---
When booting on a [Compaq DeskPro 386-16 with 4Mb of RAM](/devices/pc/machine/compaq/deskpro386/ega/4096kb/),
When booting on a [COMPAQ DeskPro 386-16 with 4Mb of RAM](/devices/pc/machine/compaq/deskpro386/ega/4096kb/),
the following information is output to COM2 by the kernel's built-in debugger:
bx=001d, cx=f905, dx=0700, cs=1770, ds=1b10

View file

@ -20,4 +20,7 @@
<disk id="disk06" size="1228800" chs="80:2:15" img="cpdos/archive/SIZZLE-76818-19870107-DEBUG.img" href="/disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107-DEBUG.json" md5="9c9270b83aea4798f2618d38465f56b8" md5json="bd6baaa820d6ff254f81ec7d7ff07e67">
<name>OS/2 SIZZLE (v7.68.18 DEBUG)</name>
</disk>
<disk id="disk07" size="1228800" chs="80:2:15" img="cruiser/archive/OS2SDK-048014.100.img" href="/disks/pc/os2/misc/cruiser/OS2SDK-048014.100.json" md5="348ee09ced86af5e3211fccff87113c5" md5json="41a64f6ee27fd064c9ae7c04d9eecb88">
<name>OS/2 CRUISER (048014.100)</name>
</disk>
</manifest>

View file

@ -13,7 +13,7 @@ that allows the SDK installation script to finish.
This SDK was released in December 1987 along with [Microsoft OS/2 1.0](/disks/pc/os2/microsoft/1.0/).
We do not have any of the printed documentation that came with the SDK, such as the *Installation Guide*, but we do
have the [Microsoft® Operating System/2 Programmers Toolkit](/pubs/pc/programming/os2/microsoft/ptk/1.0/) documentation
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/).
Other documentation is available for selected OS/2 SDK tools:

View file

@ -28,9 +28,9 @@ Our [Publication Archive](/pubs/) includes these PC-related resources:
* [CPU Documents](/pubs/pc/reference/intel/)
* [Datasheets](/pubs/pc/datasheets/)
* [Magazines](/pubs/pc/magazines/)
* [Programming Guides](/pubs/pc/programming/) (eg, [OS/2](/pubs/pc/programming/os2/))
* [Programming Guides](/pubs/pc/programming/)
* [Reference Manuals](/pubs/pc/reference/)
* [Software User Guides](/pubs/pc/software/)
* [Software User and Development Guides](/pubs/pc/software/) (eg, DOS, [OS/2](/pubs/pc/software/os2/), Windows)
And publications related to Ohio Scientific's 6502-based Challenger 1P:

View file

@ -28,10 +28,10 @@ capabilities can be found in the [Documentation](/docs/).
The first JavaScript Machines simulation 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/),
and finally [{{ site.pcjs.domain }}]({{ site.url }}/). 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/).
C1Pjs v1.0 was released in July 2012, originally on ecpsim.org and cpusim.org, and then
[jsmachines.net](http://jsmachines.net/), which has since become [{{ site.pcjs.domain }}]({{ site.url }}/).
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/).
---
@ -40,9 +40,10 @@ at [osiweb.org](http://osiweb.org/).
The next JavaScript Machines simulation was [PCjs](/docs/about/pcjs/), which simulates the original IBM PC, IBM PC XT,
and IBM PC AT.
[PCjs](/docs/about/pcjs/) emulates the Intel 8088 and 80286 CPUs, as well as IBM Monochrome Display Adapter (MDA),
Color Graphics Adapter (CGA), and Enhanced Graphics Adapter (EGA) video cards, along with assorted motherboard and
expansion bus components. It also includes an optional Debugger and a user-configurable Control Panel.
[PCjs](/docs/about/pcjs/) 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/).
PCjs 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.

View file

@ -15,65 +15,117 @@ fast, it works well in all modern web browsers (both desktop and mobile), and it
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 XT "[Server Array](/devices/pc/machine/5160/cga/256kb/array/)"
featuring multiple PCs running side-by-side.
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 or EGA), serial ports, mouse, and more. See the
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* 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 "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), 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.
+ 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
The following features are targeted for version 1.16.x:
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.
+ Improved EGA compatibility
+ 80286 protected-mode support
+ Improvements to PC AT hardware emulation
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
+ v1.15 introduced PC AT (Model 5170) emulation, as discussed in the [blog](/blog/2014/09/13/).
+ v1.14 introduced limited EGA emulation, as discussed in the [blog](/blog/2014/07/30/).
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

@ -12,7 +12,7 @@ PCjs Documentation
---
[PCjs](/docs/about/pcjs/) is a full-featured IBM PC, PC XT and PC AT emulator written entirely in JavaScript.
After you've read the Documentation, play with the [Demos](demos/).
After you've read the Documentation, play with the [Examples](examples/).
{% include machine.html id="ibm5150" %}
@ -23,29 +23,29 @@ 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. Components include:
A PCjs machine XML file defines all a machine's components, including:
* [Chipset](/docs/pcjs/chipset/)
* [Computer](/docs/pcjs/computer/)
* [Control Panel](/docs/pcjs/panel/)
* [CPU](/docs/pcjs/cpu/)
* [Debugger](/docs/pcjs/debugger/)
* [Floppy Disk Controller](/docs/pcjs/fdc/)
* [Hard Disk Controller](/docs/pcjs/hdc/)
* [Keyboard](/docs/pcjs/keyboard/)
* [Mouse](/docs/pcjs/mouse/)
* [RAM](/docs/pcjs/ram/)
* [ROM](/docs/pcjs/rom/)
* [Parallel Port](/docs/pcjs/parallel/)
* [Serial Port](/docs/pcjs/serial/)
* [Video Adapter](/docs/pcjs/video/)
* [Chipset](chipset/)
* [Computer](computer/)
* [Control Panel](panel/)
* [CPU](cpu/)
* [Debugger](debugger/)
* [Floppy Disk Controller](fdc/)
* [Hard Disk Controller](hdc/)
* [Keyboard](keyboard/)
* [Mouse](mouse/)
* [RAM](ram/)
* [ROM](rom/)
* [Parallel Port](parallel/)
* [Serial Port](serial/)
* [Video Adapter](video/)
Here's a simple machine XML file that includes an 8088 CPU and 16Kb of RAM:
<machine id="ibm">
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" size="0x04000"/>
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" size="0x04000"/>
</machine>
However, that machine isn't usable, since it lacks a keyboard, screen, or any code (ROMs) to execute.
@ -53,115 +53,132 @@ However, that machine isn't usable, since it lacks a keyboard, screen, or any co
A simple machine definition that actually works might look like:
<machine id="ibm" class="pc" width="720px">
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" size="0x04000"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1981-04-24.json"/>
<keyboard id="keyboard"/>
<video id="videoMDA" model="mda" screenwidth="720" screenheight="350" charset="ibm-mda-cga.json">
<name>Monochrome Display</name>
</video>
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000"/>
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088"/>
<ram id="ramLow" addr="0x00000" size="0x04000"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="1981-04-24.json"/>
<keyboard id="keyboard"/>
<video id="videoMDA" model="mda" screenwidth="720" screenheight="350" charset="ibm-mda-cga.json">
<name>Monochrome Display</name>
</video>
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000"/>
</machine>
Here is a [demo](/docs/pcjs/demos/sample1.html) of this machine's [XML](/docs/pcjs/demos/sample1.xml) file.
Here is an [example](examples/example1.html) of this machine's [XML](examples/example1.xml) file.
Machine definitions can also include visual elements. For example, we can include a "Run" button with the CPU component.
Note that as soon as the machine is ready and the CPU starts running, the "Run" button will change to "Halt".
<machine id="ibm" class="pc" width="720px">
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088">
<control type="button" class="input" binding="run">Run</control>
</cpu>
...
<computer id="pc" name="IBM PC"/>
<cpu id="cpu8088" model="8088">
<control type="button" class="input" binding="run">Run</control>
</cpu>
...
</machine>
Next, we can add a Floppy Disk Controller (FDC) component. And since we want to be able to "load" and "unload" floppy
disks at will, we'll include some UI controls.
<machine id="ibm" class="pc" width="720px">
<fdc id="fdcNEC" automount="{A: {name: 'PC-DOS 1.0', path: 'pcdos-1.00.json'}}">
<control type="container">
<control type="list" class="input" binding="listDrives"/>
<control type="list" class="input" binding="listDisks">
<disk path="">None</disk>
<disk path="pcdos-1.00.json">PC-DOS 1.0</disk>
</control>
<control type="button" class="input" binding="loadDrive">Load</control>
</control>
</fdc>
...
<fdc id="fdcNEC" automount="{A: {name: 'PC-DOS 1.0', path: 'pcdos-1.00.json'}}">
<control type="container">
<control type="list" class="input" binding="listDrives"/>
<control type="list" class="input" binding="listDisks">
<disk path="">None</disk>
<disk path="pcdos-1.00.json">PC-DOS 1.0</disk>
</control>
<control type="button" class="input" binding="loadDrive">Load</control>
</control>
</fdc>
...
</machine>
Here is a [demo](/docs/pcjs/demos/sample2.html) of the updated machine's [XML](/docs/pcjs/demos/sample2.xml) file.
Here is an [example](examples/example2.html) of the updated machine's [XML](examples/example2.xml)
file.
### Loading Machine XML Files
Inside a web page, add a &lt;div&gt; to contain the machine, load the **pc.js** script
(**pc-dbg.js** if you need the PCjs [Debugger](/docs/pcjs/debugger/)), and then call *window.embedPC()*:
Inside a web page, add a &lt;div&gt; to contain the machine, load the *pc.js* script
(*pc-dbg.js* if you need the PCjs [Debugger](debugger/)), and then call *embedPC()*:
<div id="sample2"/>
<div id="example2"/>
<script type="text/javascript" src="pc.js"/>
<script type="text/javascript">
window.embedPC("sample2", "sample2.xml", "components.xsl");
embedPC("example2", "example2.xml", "components.xsl");
</script>
In fact, this is exactly what we did in the previous [demo](/docs/pcjs/demos/sample2.html).
In fact, this is exactly what we did in the previous [example](examples/example2.html).
*window.embedPC()* requires 3 parameters:
*embedPC()* accepts 4 parameters:
- The *id* of the machine &lt;div&gt; (e.g., "sample2");
- The *url* of the machine XML file (e.g., "sample2.xml");
- The *id* of the machine &lt;div&gt; (e.g., "example2");
- The *url* of the machine XML file (e.g., "example2.xml");
- The *url* of the components XSL file (e.g., "components.xsl")
- Any *parms* that should be passed to the machine components during initialization
**components.xsl** (and the corresponding **components.css**) are included with the PCjs scripts in the samples download below.
The first 3 parameters are required; the *parms* parameter is optional. If *parms* is specified, it should
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"}}}'
*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.css*, which your web page should also load, usually with a &lt;link&gt; tag inside the &lt;head&gt;
element; eg:
<link rel="stylesheet" type="text/css" href="components.css">
### Using the PCjs Debugger
To create a configuration that includes the PCjs Debugger, you need to:
- Add [Debugger](/docs/pcjs/debugger/) and [Control Panel](/docs/pcjs/panel/) components to the machine XML file;
- 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 *pc-dbg.js* instead of *pc.js*.
Take a look at the [sample3a](/docs/pcjs/demos/sample3a.html) demo (with [XML file](/docs/pcjs/demos/sample3a.xml)) for an example.
Take a look at the [example3a](examples/example3a.html) example
(with [XML file](examples/example3a.xml)).
The debugger gives you access to more capabilities than mere debugging. For example, you can use the **load** command
to load diskette sectors into memory ("l &lt;addr&gt; &lt;drive&gt; ...") or dump an entire diskette as JSON ("l json &lt;drive&gt;").
You can also **halt** a machine ("h") and **dump** its entire state as JSON ("d state"). You can save that state in a .json file,
and then use that state to initialize a new machine (as long as it uses the same machine *id*).
The debugger gives you access to more capabilities than mere debugging. For example, you can use the **load**
command to load diskette sectors into memory ("l [addr] [drive #] ...") or the **dump** command to dump an entire
diskette as JSON ("d disk [drive #]"). You can also **halt** a machine ("h") and **dump** its entire state as JSON
("d state"). You can save that state in a .json file, and then use that state to initialize a new machine (as long as
it uses the same machine *id*).
In fact, the [sample3b](/docs/pcjs/demos/sample3b.html) demo (with [XML file](/docs/pcjs/demos/sample3b.xml))
does just that, using JSON dumps created from [sample3a](/docs/pcjs/demos/sample3a.html) after starting VisiCalc.
See the *state* attribute on the [Computer](/docs/pcjs/computer/) component for more information on state files.
In fact, the [example3b](examples/example3b.html) example (with [XML file](examples/example3b.xml))
does just that, using JSON dumps created from [example3a](examples/example3a.html) after starting VisiCalc.
See the *state* attribute on the [Computer](computer/) component for more information on state files.
### Running PCjs On Your Own Server
All of the demos described above are available for [download](/docs/pcjs/demos/).
All of the examples described above are available for [download](examples/).
### Creating PCjs-Compatible Disk Images
If you have (or find) an IMG disk image file on a server, the PCjs web server provides a **DiskDump API** via endpoint
"/api/v1/dump" that creates PCjs-compatible disks in JSON:
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:
http://localhost:8088/api/v1/dump?disk=(file|url)&format=json
{{ site.url }}/api/v1/dump?disk=(file|url)&format=json
For example, let's say you found a disk image online:
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
To convert it to a PCjs-compatible JSON format, use the following command:
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),
save the resulting JSON file to a folder on your server, and then update your machine XML file(s) to use that file.
http://localhost:8088/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/pc/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.
If necessary, you can also reverse the process, converting a JSON disk image back into an IMG file:
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):
http://localhost:8088/api/v1/dump?disk=http://www.pcjs.org/disks/pc/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
Although PCjs will accept IMG disk image files, it must call the **DiskDump API** to convert the image
Although PCjs 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),

View file

@ -1,34 +0,0 @@
---
layout: page
title: PCjs Documentation Demos
permalink: /docs/pcjs/demos/
machines:
- type: pc
id: sample3
config: /docs/pcjs/demos/sample3b.xml
---
PCjs Documentation Demos
---
This folder provides all the self-contained [PCjs](/docs/about/pcjs/) demos described in the [Documentation](/docs/pcjs/).
To use them, download [samples.zip](samples.zip), unzip it into a folder on your desktop computer or web server,
and experiment with them in your web browser. Since all these samples are self-contained, they should work with either
the "file:" or "http:" protocol.
+ Check out the sample HTML and XML files:
- [sample1.html](sample1.html) and [sample1.xml](sample1.xml)
- [sample2.html](sample2.html) and [sample2.xml](sample2.xml)
- [sample3a.html](sample3a.html) and [sample3a.xml](sample3a.xml)
- [sample3b.html](sample3b.html) and [sample3b.xml](sample3b.xml)
+ 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.
Have fun!
{% include machine.html id="sample3" %}
[Return to [PCjs Documentation](..)]

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -1,4 +0,0 @@
#!/bin/sh
if [ ! -d zips ]; then mkdir zips; fi
zip -q zips/$1 * -x samples*.zip zip.sh
cp zips/$1 samples.zip

View file

@ -0,0 +1,36 @@
---
layout: page
title: PCjs Documentation Examples
permalink: /docs/pcjs/examples/
machines:
- type: pc
id: example3
config: /docs/pcjs/examples/example3b.xml
redirect_from:
- /docs/pcjs/demos/
---
PCjs Documentation Examples
---
This folder provides all the self-contained [PCjs](/docs/about/pcjs/) examples described in the [Documentation](/docs/pcjs/).
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
the "file:" or "http:" protocol.
+ Check out the example HTML and XML files:
- [example1.html](example1.html) and [example1.xml](example1.xml)
- [example2.html](example2.html) and [example2.xml](example2.xml)
- [example3a.html](example3a.html) and [example3a.xml](example3a.xml)
- [example3b.html](example3b.html) and [example3b.xml](example3b.xml)
+ 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.
Have fun!
{% include machine.html id="example3" %}
[Return to [PCjs Documentation](..)]

View file

@ -2,15 +2,15 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pcjs.org | /docs/pcjs/demos/sample2.html</title>
<title>pcjs.org | /docs/pcjs/demos/example1.html</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="components.css">
<script type="text/javascript" src="pc.js"></script>
</head>
<body style="font-family: Helvetica, Arial, sans-serif;">
<div id="sample2"></div>
<div id="example1"></div>
<script type="text/javascript">
window.embedPC("sample2", "sample2.xml", "components.xsl");
embedPC("example1", "example1.xml", "components.xsl");
</script>
</body>
</html>

View file

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

View file

@ -2,15 +2,15 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pcjs.org | /docs/pcjs/demos/sample1.html</title>
<title>pcjs.org | /docs/pcjs/demos/example2.html</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="components.css">
<script type="text/javascript" src="pc.js"></script>
</head>
<body style="font-family: Helvetica, Arial, sans-serif;">
<div id="sample1"></div>
<div id="example2"></div>
<script type="text/javascript">
window.embedPC("sample1", "sample1.xml", "components.xsl");
embedPC("example2", "example2.xml", "components.xsl");
</script>
</body>
</html>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<machine id="sample2" class="pc" width="720px">
<machine id="example2" class="pc" 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"/>

File diff suppressed because one or more lines are too long

View file

@ -2,15 +2,15 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pcjs.org | /docs/pcjs/demos/sample3a.html</title>
<title>pcjs.org | /docs/pcjs/demos/example3a.html</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="components.css">
<script type="text/javascript" src="pc-dbg.js"></script>
</head>
<body style="font-family: Helvetica, Arial, sans-serif;">
<div id="sample3"></div>
<div id="example3"></div>
<script type="text/javascript">
window.embedPC("sample3", "sample3a.xml", "components.xsl");
embedPC("example3", "example3a.xml", "components.xsl");
</script>
</body>
</html>

View file

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

View file

@ -2,15 +2,15 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pcjs.org | /docs/pcjs/demos/sample3b.html</title>
<title>pcjs.org | /docs/pcjs/demos/example3b.html</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="components.css">
<script type="text/javascript" src="pc.js"></script>
</head>
<body style="font-family: Helvetica, Arial, sans-serif;">
<div id="sample3"></div>
<div id="example3"></div>
<script type="text/javascript">
window.embedPC("sample3", "sample3b.xml", "components.xsl");
embedPC("example3", "example3b.xml", "components.xsl");
</script>
</body>
</html>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<machine id="sample3" class="pc" width="720px">
<computer id="pc" name="IBM PC" state="sample3.json"/>
<machine id="example3" class="pc" 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"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="ibm-basic-1.00.json"/>

Binary file not shown.

1237
docs/pcjs/examples/pc-dbg.js Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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