Starting work on disambiguating PCjs the emulator from PCjs the project/website; the emulator will become PCx86
This commit is contained in:
parent
7c3aab2a7e
commit
288f28055d
1519 changed files with 16242 additions and 6939 deletions
|
|
@ -26,7 +26,7 @@ syntax, which is more than sufficient to handle all the site's **README.md** fil
|
|||
have used a third-party Markdown library, but this was more educational, and it was easy to add extra features,
|
||||
like the ability to embed JavaScript machines with a single Markdown-style link; eg:
|
||||
|
||||
[IBM PC](/devices/pc/machine/5150/mda/64kb/ "PCjs:ibm5150")
|
||||
[IBM PC](/devices/pcx86/machine/5150/mda/64kb/ "PCjs:ibm5150")
|
||||
|
||||
The script takes care of the rest, adding the appropriate stylesheets and PCjs scripts automatically.
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ I had more grandiose plans, including a command-line prompt written in JavaScrip
|
|||
navigate the site exactly as you would an IBM PC hard drive from a "DOS prompt", and I may try something
|
||||
like that later, but don't hold your breath.
|
||||
|
||||
I've tried to improve the organization of all the [Machine Configuration Files](/devices/pc/machine/) as well.
|
||||
I've tried to improve the organization of all the [Machine Configuration Files](/devices/pcx86/machine/) as well.
|
||||
The variety of configurations was getting out of hand. It's a bit tidier now, but there's still room for
|
||||
improvement.
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ while I can understand some whitespace inconsistencies across web servers, I wou
|
|||
on the server to modify file contents.
|
||||
|
||||
I finally confirmed that the files were indeed modified on the server, by using Azure's FTP browser. For example,
|
||||
[us83-buttons-minimal.xml](/devices/pc/keyboard/us83-buttons-minimal.xml) is currently 622 bytes locally, but on the
|
||||
[us83-buttons-minimal.xml](/devices/pcx86/keyboard/us83-buttons-minimal.xml) is currently 622 bytes locally, but on the
|
||||
Azure server, the reported size is 632 bytes -- one extra CR for each of the file's 10 lines. After a little more
|
||||
digging, I [learned something new](http://git-scm.com/book/ch7-1.html#Formatting-and-Whitespace) about **Git**: it
|
||||
has a setting called `core.autocrlf` which, for me on OS X, defaults to `input` (meaning "convert CR/LF to LF on commit
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ Don't believe me? Just ask [Google](https://www.google.com/#q=node+express+safa
|
|||
stylesheets. And occasionally Safari -- and ONLY Safari -- will render those XML files as blank pages.
|
||||
|
||||
For example, here's the
|
||||
[machine.xml](/devices/pc/machine/5150/mda/64kb/machine.xml) file that's also embedded on the
|
||||
[machine.xml](/devices/pcx86/machine/5150/mda/64kb/machine.xml) file that's also embedded on the
|
||||
[{{ site.pcjs.domain }}]({{ site.url }}/) home page.
|
||||
|
||||
When Safari fetched that XML file from an Apache web server (what I used before switching to Node),
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ v1.13.7 of PCjs contains a few minor improvements, mostly in terms of rendering
|
|||
efficiently. The rest of the changes to the website involved beefing up support for both "software manifests"
|
||||
and "document manifests."
|
||||
|
||||
To that end, there's a new [/pubs/](/pubs/) directory for old documents, and [/disks/pc/](/disks/pc/) contains
|
||||
To that end, there's a new [/pubs/](/pubs/) directory for old documents, and [/disks/pcx86/](/disks/pcx86/) contains
|
||||
more disk images, with more on the way. I have a TON of old diskette images, and it has taken more time to organize
|
||||
them and create manifests than I would like.
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ permalink: /blog/2014/07/30/
|
|||
---
|
||||
|
||||
PCjs v1.14.0 now includes basic EGA support. It emulates the EGA hardware well enough to pass the IBM EGA BIOS
|
||||
diagnostics and run [Windows 1.01](/devices/pc/machine/5160/ega/640kb/win101/) in color. Check out our
|
||||
[Windows 1.01 "Server Array"](/devices/pc/machine/5160/ega/640kb/array/) demo.
|
||||
diagnostics and run [Windows 1.01](/devices/pcx86/machine/5160/ega/640kb/win101/) in color. Check out our
|
||||
[Windows 1.01 "Server Array"](/devices/pcx86/machine/5160/ega/640kb/array/) demo.
|
||||
|
||||
[<img src="/blog/images/win101-array-demo-small.jpg" alt='Windows 1.01 "Server Array" Demo'/>](/blog/images/win101-array-demo.jpg)
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ window, which the browser will then scale up or down, unless a specific overall
|
|||
|
||||
The second required XML element is a <rom> element to load the EGA ROM; eg:
|
||||
|
||||
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm-ega.json" notify="videoEGA"/>
|
||||
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pcx86/video/ibm-ega.json" notify="videoEGA"/>
|
||||
|
||||
The *notify* attribute must match the *id* of the <video> element, so that the Video component can load
|
||||
the initial 8x14 and 8x8 fonts from the ROM. Support for dynamic loading of fonts from plane 2 of the EGA's memory
|
||||
|
|
|
|||
|
|
@ -6,20 +6,20 @@ category: 80286
|
|||
permalink: /blog/2014/08/28/
|
||||
---
|
||||
|
||||
The next milestone for PCjs is complete 80286 emulation. My hope is to have it working by the end of the year.
|
||||
The next milestone for PCx86 is complete 80286 emulation. My hope is to have it working by the end of the year.
|
||||
|
||||
PCjs version 1.15.0 is the first step on the path to full 80286 support. It includes changes to the physical
|
||||
PCx86 version 1.15.0 is the first step on the path to full 80286 support. It includes changes to the physical
|
||||
memory manager and separate real-mode and protected-mode address evaluators. The Debugger supports physical
|
||||
addresses (eg, %FE05B is the same as F000:E05B, assuming real-mode operation), along with breakpoint commands that
|
||||
stop execution on port input/output operations. And the ChipSet component now contains "infrastructure" (a
|
||||
fancy way of saying "partial support") for multiple PICs, DMA controllers, the 8042 keyboard controller (including
|
||||
A20 support), and a bit more -- but not much.
|
||||
|
||||
One of the challenges is creating a single "universal" version of PCjs that can adapt itself to different machine
|
||||
One of the challenges is creating a single "universal" version of PCx86 that can adapt itself to different machine
|
||||
types without impacting performance. There will not be a **pc8088.js** or a **pc80286.js** or whatever. There will
|
||||
only be **pc.js**.
|
||||
only be **pcx86.js**.
|
||||
|
||||
Up until now, all PCjs machine XML files assumed an 8088 CPU with a 20-bit bus and a model 5150 or 5160 motherboard.
|
||||
Up until now, all PCx86 machine XML files assumed an 8088 CPU with a 20-bit bus and a model 5150 or 5160 motherboard.
|
||||
But now, a machine XML file can specify:
|
||||
|
||||
<computer name="IBM PC AT" buswidth="24"/>
|
||||
|
|
@ -28,17 +28,17 @@ But now, a machine XML file can specify:
|
|||
...
|
||||
|
||||
Conventional emulators are usually NOT able to run original BIOS images, or simulate original PC hardware,
|
||||
or even run at the same speed as the original PC, making some software difficult or impossible to use. PCjs takes a
|
||||
different approach, by attempting to simulate an entire PC as it originally existed. Which is why a PCjs simulation
|
||||
or even run at the same speed as the original PC, making some software difficult or impossible to use. PCx86 takes a
|
||||
different approach, by attempting to simulate an entire PC as it originally existed. Which is why a PCx86 simulation
|
||||
of an IBM PC does NOT run at whatever speed your modern PC happens to run in V86-mode or whatever speed your
|
||||
browser's JavaScript engine tops out at.
|
||||
|
||||
No, a PCjs simulation of a 4.77Mhz IBM PC runs at 4.77Mhz. And a PCjs simulation of a 6Mhz IBM PC AT will run at
|
||||
No, a PCx86 simulation of a 4.77Mhz IBM PC runs at 4.77Mhz. And a PCx86 simulation of a 6Mhz IBM PC AT will run at
|
||||
6Mhz. If you want to run the simulation faster, you have that option, but that's not the default. And I'm not saying
|
||||
that PCjs is *exact* -- exactness is an exercise I'm leaving for another day and/or to other developers who are even
|
||||
more obsessive than I am. I'm just saying that original PCs represent the targets that PCjs is shooting for.
|
||||
that PCx86 is *exact* -- exactness is an exercise I'm leaving for another day and/or to other developers who are even
|
||||
more obsessive than I am. I'm just saying that original PCs represent the targets that PCx86 is shooting for.
|
||||
|
||||
PCjs 1.15.0 can now load and run the IBM 5170 ROM BIOS up to the first 80286-specific opcode, so it's off and running.
|
||||
PCx86 1.15.0 can now load and run the IBM 5170 ROM BIOS up to the first 80286-specific opcode, so it's off and running.
|
||||
Although "running" isn't quite the right metaphor, because the process of bringing a new machine simulation to
|
||||
completion is a *very* long series of baby steps.
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ category: Releases
|
|||
permalink: /blog/2014/09/13/
|
||||
---
|
||||
|
||||
My first IBM PC AT (Model 5170) [Test Configuration](/devices/pc/machine/5170/ega/640kb/rev1/debugger/) finally
|
||||
boots to a PC-DOS prompt. The configuration uses the original [IBM Model 5170 ROM BIOS](/devices/pc/rom/5170/),
|
||||
My first IBM PC AT (Model 5170) [Test Configuration](/devices/pcx86/machine/5170/ega/640kb/rev1/debugger/) finally
|
||||
boots to a PC-DOS prompt. The configuration uses the original [IBM Model 5170 ROM BIOS](/devices/pcx86/rom/5170/),
|
||||
dated January 10, 1984.
|
||||
|
||||
Getting through the BIOS "POST" (Power-On Self Test) diagnostics was like running an obstacle course, with various
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@ category: JavaScript
|
|||
permalink: /blog/2014/10/13/
|
||||
---
|
||||
|
||||
I just added my first [8Mhz IBM PC AT](/devices/pc/machine/5170/ega/1152kb/rev3/debugger/) machine configuration
|
||||
to the list of [IBM PC Machine Configurations](/devices/pc/machine/), and not surprisingly, the new machine
|
||||
I just added my first [8Mhz IBM PC AT](/devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/) machine configuration
|
||||
to the list of [IBM PC Machine Configurations](/devices/pcx86/machine/), and not surprisingly, the new machine
|
||||
fails to boot.
|
||||
|
||||
This machine uses the 3rd [ROM BIOS](/devices/pc/rom/5170/) that IBM released for the PC AT, a revision that
|
||||
This machine uses the 3rd [ROM BIOS](/devices/pcx86/rom/5170/) that IBM released for the PC AT, a revision that
|
||||
included support for 3.5-inch 1.44Mb diskettes -- which will be nice, because I have a number of 1.44Mb diskette
|
||||
images I would like to be able to read in a PCjs machine.
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ category: Releases
|
|||
permalink: /blog/2014/10/17/
|
||||
---
|
||||
|
||||
The [8Mhz IBM PC AT](/devices/pc/machine/5170/ega/1152kb/rev3/debugger/) machine configuration now boots in
|
||||
The [8Mhz IBM PC AT](/devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/) machine configuration now boots in
|
||||
[PCjs v1.15.5](https://github.com/jeffpar/pcjs/releases/tag/v1.15.5), which includes the following fixes:
|
||||
|
||||
+ The BIOS expects memory refresh to occur roughly every 16us, which I've resolved by tying the state
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ permalink: /blog/2014/10/23/
|
|||
---
|
||||
|
||||
[PCjs v1.15.6](https://github.com/jeffpar/pcjs/releases/tag/v1.15.6) is a fairly minor update that fixes a few
|
||||
Floppy Disk Controller (FDC) issues and one CPU emulation bug that prevented [PC-DOS 7.00](/disks/pc/dos/ibm/7.00/)
|
||||
Floppy Disk Controller (FDC) issues and one CPU emulation bug that prevented [PC-DOS 7.00](/disks/pcx86/dos/ibm/7.00/)
|
||||
from working properly.
|
||||
|
||||
There are also some Debugger improvements; for example, if you turn on "fdc" and "int" messages in the
|
||||
|
|
@ -19,9 +19,9 @@ PC-DOS 7.00 still can't be setup from its specially-formatted 1.84Mb
|
|||
through "PC-DOS 7.00 (Disk 5)", so your best bet is to boot from the 1.44Mb "PC-DOS 7.00 (1.44M Boot)".
|
||||
|
||||
Note that you must also use a fairly new 80286 machine configuration, like this
|
||||
[8Mhz IBM PC AT](/devices/pc/machine/5170/ega/1152kb/rev3/debugger/),
|
||||
[8Mhz IBM PC AT](/devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/),
|
||||
in order to use 1.44Mb diskette images; previous models did not support 3.5-inch diskette drives, unless they had been
|
||||
retrofitted with a newer [BIOS](/devices/pc/rom/5170/).
|
||||
retrofitted with a newer [BIOS](/devices/pcx86/rom/5170/).
|
||||
|
||||
*[@jeffpar](http://twitter.com/jeffpar)*
|
||||
*October 23, 2014*
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ permalink: /blog/2014/10/28/
|
|||
|
||||
[PCjs v1.15.7](https://github.com/jeffpar/pcjs/releases/tag/v1.15.7) adds support for the
|
||||
[XDF Diskette Format](http://www.os2museum.com/wp/the-xdf-diskette-format/), which was used in
|
||||
[PC-DOS 7.00](/disks/pc/dos/ibm/7.00/).
|
||||
[PC-DOS 7.00](/disks/pcx86/dos/ibm/7.00/).
|
||||
|
||||
However, this support is referred to as "fake" XDF support, because it requires using JSON disk images created
|
||||
by DiskDump *without* the experimental "--xdf" option, which is an option that attempts to encode XDF sectors as they
|
||||
|
|
|
|||
|
|
@ -7,21 +7,21 @@ permalink: /blog/2014/12/04/
|
|||
---
|
||||
|
||||
Exciting news for OS/2 fans: PCjs (v1.16.1) is now able to run OS/2 1.0 on
|
||||
[IBM PC AT Machine Configurations](/devices/pc/machine/#model-5170-machine-configurations). This is the culmination
|
||||
[IBM PC AT Machine Configurations](/devices/pcx86/machine/#model-5170-machine-configurations). This is the culmination
|
||||
of recent work in PCjs to fully emulate the Intel 80286 processor and 16-bit protected-mode, including undocumented
|
||||
features like [LOADALL](/pubs/pc/reference/intel/80286/loadall/) and triple-fault resets.
|
||||
|
||||
For a quick demo, try the [OS/2 1.0 Debugger Disk](/disks/pc/os2/misc/1.0/88286/). In a few seconds,
|
||||
For a quick demo, try the [OS/2 1.0 Debugger Disk](/disks/pcx86/os2/misc/1.0/88286/). In a few seconds,
|
||||
you'll see a very rudimentary OS/2 shell (a slimmed-down version of the OS/2 Program Selector) that allows you to
|
||||
start the protected-mode command interpreter ("Start a Program") or the real-mode command interpreter ("command.com").
|
||||
|
||||
[<img src="/blog/images/os2-debugger.jpg" alt="OS/2 1.0 With Kernel Debugger"/>](/disks/pc/os2/misc/1.0/88286/)
|
||||
[<img src="/blog/images/os2-debugger.jpg" alt="OS/2 1.0 With Kernel Debugger"/>](/disks/pcx86/os2/misc/1.0/88286/)
|
||||
|
||||
As an added bonus, the Model 5170 machines feature two serial ports, with COM1 connected to a simulated serial
|
||||
mouse and COM2 connected to the **Control Panel** output window.
|
||||
|
||||
Once you've booted the [OS/2 1.0 Debugger Disk](/disks/pc/os2/misc/1.0/88286/) from the assortment of
|
||||
[OS/2 Prototype Disks](/disks/pc/os2/misc/), you can click on the **Control Panel** output window, press Ctrl-C, and
|
||||
Once you've booted the [OS/2 1.0 Debugger Disk](/disks/pcx86/os2/misc/1.0/88286/) from the assortment of
|
||||
[OS/2 Prototype Disks](/disks/pcx86/os2/misc/), you can click on the **Control Panel** output window, press Ctrl-C, and
|
||||
find yourself magically transported into the OS/2 Kernel Debugger. The **Control Panel** display is functioning
|
||||
as both the output window for all PCjs messages and PCjs Debugger commands, as well as a serial input/output device
|
||||
(aka "Dumb Terminal") for any software inside the machine communicating via COM2: in this case, the OS/2 Kernel Debugger.
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
---
|
||||
layout: post
|
||||
title: PCjs Uncompiled
|
||||
title: PCx86 Uncompiled
|
||||
date: 2015-01-17 11:00:00
|
||||
category: Features
|
||||
permalink: /blog/2015/01/17/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: at-ega-1152k-rev3
|
||||
debugger: true
|
||||
uncompiled: true
|
||||
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/machine.xml
|
||||
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/machine.xml
|
||||
---
|
||||
|
||||
Most machines on [{{ site.pcjs.domain }}](/) run with a compiled version of PCjs, which is produced
|
||||
by running PCjs JavaScript source code through Google's Closure Compiler, yielding a smaller (minified)
|
||||
Most PCx86 machines on [{{ site.pcjs.domain }}](/) run with a compiled version of PCx86, which is produced
|
||||
by running the PCx86 JavaScript source code through Google's Closure Compiler, yielding a smaller (minified)
|
||||
version that loads and runs much faster than the original source code.
|
||||
|
||||
However, certain features are disabled in the compiled versions, including a new BACKTRACK feature that
|
||||
|
|
@ -21,7 +21,7 @@ makes it possible to track the contents of memory locations and registers back t
|
|||
or file location). Once the BACKTRACK feature is finished, it will be folded into the compiled code, but until
|
||||
then, the only way to experiment with it is by running the uncompiled code.
|
||||
|
||||
To make it easier to launch machines with uncompiled code, a PCjs machine definition can now set `uncompiled`
|
||||
To make it easier to launch machines with uncompiled code, a PCx86 machine definition can now set `uncompiled`
|
||||
to *true*, overriding the value of `site.pcjs.compiled` in **_config.yml**.
|
||||
|
||||
Here's what a typical Markdown file would look like:
|
||||
|
|
@ -30,11 +30,11 @@ Here's what a typical Markdown file would look like:
|
|||
---
|
||||
...
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: at-ega-1152k-rev3
|
||||
debugger: true
|
||||
uncompiled: true
|
||||
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
|
||||
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
|
||||
---
|
||||
...
|
||||
{% include machine.html id="at-ega-1152k-rev3" %}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
---
|
||||
layout: post
|
||||
title: New PCjs Control Panel
|
||||
title: New PCx86 Control Panel
|
||||
date: 2015-01-28 11:00:00
|
||||
category: Control Panel
|
||||
permalink: /blog/2015/01/28/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: at-ega-1152k-rev3
|
||||
debugger: true
|
||||
uncompiled: true
|
||||
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
|
||||
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml
|
||||
---
|
||||
|
||||
A new PCjs Control Panel is under development, featuring a new "Display Panel" that will provide a variety of
|
||||
A new PCx86 Control Panel is under development, featuring a new "Display Panel" that will provide a variety of
|
||||
information about the machine, in real-time, and operate more efficiently than previous DOM-based Control Panels.
|
||||
|
||||
A preview of the layout is shown below. There's not much to see yet, as this is very much a work-in-progress.
|
||||
|
|
|
|||
|
|
@ -5,22 +5,22 @@ date: 2015-02-22 11:00:00
|
|||
category: 80386
|
||||
permalink: /blog/2015/02/22/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: deskpro386
|
||||
debugger: true
|
||||
uncompiled: true
|
||||
config: /devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
|
||||
config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
|
||||
---
|
||||
|
||||
I finally dumped the [COMPAQ DeskPro 386/16 ROMs](/devices/pc/rom/compaq/deskpro386/) from the motherboard I bought
|
||||
on ebay last year, so I'm ready to begin adding 80386 support to PCjs.
|
||||
I finally dumped the [COMPAQ DeskPro 386/16 ROMs](/devices/pcx86/rom/compaq/deskpro386/) from the motherboard I bought
|
||||
on ebay last year, so I'm ready to begin adding 80386 support to PCx86.
|
||||
|
||||
I'd also like to locate a copy of the "COMPAQ DeskPro 386 Technical Reference Guide, Volumes 1 and 2". It's not hard
|
||||
to find COMPAQ Maintenance and Service guides online, but their Technical Reference guides are much rarer, perhaps because
|
||||
they were expensive ($149) and not many were sold. Anyway, I'm hoping to either borrow or buy a copy, and then scan and
|
||||
post it.
|
||||
|
||||
A [COMPAQ DeskPro 386](/devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/) test configuration is displayed below.
|
||||
A [COMPAQ DeskPro 386](/devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/) test configuration is displayed below.
|
||||
The configuration doesn't run, and the debugger can't disassemble 80386-specific code yet, but this is what I will be
|
||||
using to test and debug my changes over the next few months.
|
||||
|
||||
|
|
|
|||
|
|
@ -5,22 +5,22 @@ date: 2015-04-16 11:00:00
|
|||
category: 80386
|
||||
permalink: /blog/2015/04/16/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: deskpro386
|
||||
debugger: true
|
||||
uncompiled: true
|
||||
config: /devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
|
||||
config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml
|
||||
---
|
||||
|
||||
PCjs can now boot the [COMPAQ DeskPro 386/16 ROM BIOS](/devices/pc/rom/compaq/deskpro386/).
|
||||
PCx86 can now boot the [COMPAQ DeskPro 386/16 ROM BIOS](/devices/pcx86/rom/compaq/deskpro386/).
|
||||
|
||||
There's still a problem with the hard disk controller, which I haven't looked into yet,
|
||||
but booting from a floppy works.
|
||||
|
||||
While working through issues with this ROM BIOS, I created some lightly-annotated
|
||||
[source code](/devices/pc/rom/compaq/deskpro386/1988-01-28/1988-01-28.asm) that can be re-assembled
|
||||
[source code](/devices/pcx86/rom/compaq/deskpro386/1988-01-28/1988-01-28.asm) that can be re-assembled
|
||||
with [NASM](http://www.nasm.us/). The initial process of creating the source code is
|
||||
explained [here](/devices/pc/rom/compaq/deskpro386/#recreating-rom-source-code).
|
||||
explained [here](/devices/pcx86/rom/compaq/deskpro386/#recreating-rom-source-code).
|
||||
|
||||
At the top of the source code, I explain a few important details about ROM addresses that
|
||||
are worth recapping here:
|
||||
|
|
@ -129,7 +129,7 @@ protected-mode with A20 disabled -- an unwise thing to do on most machines:
|
|||
mov cr0,eax ; 0000F4A4 0F2200
|
||||
jmp 0x28:xf4ac ; 0000F4A7 EAACF42800
|
||||
|
||||
Before fully understanding the DeskPro's unusual A20 management, PCjs worked around it by
|
||||
Before fully understanding the DeskPro's unusual A20 management, PCx86 worked around it by
|
||||
redirecting all A20 changes from the Bus component to the CPU component, giving the CPU first
|
||||
crack at any changes to A20. If the CPU was in real-mode, it would simply pass the A20 request
|
||||
on to the Bus. However, if the CPU was in protected-mode, it would maintain the requested
|
||||
|
|
@ -143,7 +143,7 @@ to match that of the 1st megabyte whenever A20 is disabled. I could probably ge
|
|||
only the first 64Kb of the 2nd megabyte, but until I'm actually able to run some tests on a real
|
||||
DeskPro 386, I'm going to assume COMPAQ's A20 implementation affected the entire 2nd megabyte.
|
||||
|
||||
Here's my [COMPAQ DeskPro 386/16](/devices/pc/machine/compaq/deskpro386/ega/2048kb/debugger/) test
|
||||
Here's my [COMPAQ DeskPro 386/16](/devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/) test
|
||||
configuration. Set a breakpoint at F000:F498 ("bp f000:f498") in the Debugger panel to see the above
|
||||
code in action. When the machine is operating in real-mode, you can use the "rp" command to dump all
|
||||
the registers, including the current base and limit values loaded into the segment registers.
|
||||
|
|
|
|||
|
|
@ -21,10 +21,10 @@ could only be used in PC, XT, and AT-compatible systems. I'll refer to it here
|
|||
The VGA ROM used here is assumed to have come from an original IBM VGA. It's unknown if IBM ever made any
|
||||
revisions to the VGA ROM. With the introduction of the PS/2 family and the VGA, IBM decided to no longer publish
|
||||
the source code for its ROMs, so I've created some assemblable source code from the IBM VGA ROM
|
||||
[here](/devices/pc/video/ibm/vga/).
|
||||
[here](/devices/pcx86/video/ibm/vga/).
|
||||
|
||||
I've finally started debugging a machine configuration that uses the IBM VGA ROM. Since the VGA and the 80386 are
|
||||
contemporaries, I'm using an [80386 machine configuration](/devices/pc/machine/compaq/deskpro386/vga/2048kb/debugger/).
|
||||
contemporaries, I'm using an [80386 machine configuration](/devices/pcx86/machine/compaq/deskpro386/vga/2048kb/debugger/).
|
||||
However, I don't expect the IBM VGA ROM to require any 80386 support or PS/2-specific features.
|
||||
|
||||
The first problem I ran into was here:
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ category: Video
|
|||
permalink: /blog/2015/06/05/
|
||||
---
|
||||
|
||||
I was playing with different video modes using this [IBM PC AT w/EGA](/devices/pc/machine/5170/ega/640kb/rev1/debugger/),
|
||||
I was playing with different video modes using this [IBM PC AT w/EGA](/devices/pcx86/machine/5170/ega/640kb/rev1/debugger/),
|
||||
and I discovered an odd problem.
|
||||
|
||||
For example, when I ran this code:
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@ date: 2015-07-17 11:00:00
|
|||
category: Windows 95
|
||||
permalink: /blog/2015/07/17/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: deskpro386
|
||||
debugger: true
|
||||
state: /disks/pc/windows/win95/4.00.950/deskpro386.json
|
||||
config: /devices/pc/machine/compaq/deskpro386/vga/4096kb/debugger/machine.xml
|
||||
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}]'
|
||||
state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json
|
||||
config: /devices/pcx86/machine/compaq/deskpro386/vga/4096kb/debugger/machine.xml
|
||||
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pcx86/fixed/68mb/win95.json"}]'
|
||||
autoMount: ''
|
||||
---
|
||||
|
||||
This week (July 14, 2015) was the 20th anniversary of Windows 95 RTM ("Release To Manufacturing"). So I decided to
|
||||
throw a PCjs party and try running Windows 95 Setup inside a PCjs machine for the first time.
|
||||
throw a PCjs party and try running Windows 95 Setup inside a PCx86 machine for the first time.
|
||||
|
||||
Sadly, it immediately failed:
|
||||
|
||||
|
|
@ -52,17 +52,17 @@ The failing code:
|
|||
0E36:0927 07 POP ES
|
||||
0E36:0928 C3 RET
|
||||
|
||||
was easily fixed with a change to [x86cpu.js](/modules/pcjs/lib/x86cpu.js), allowing the IOPL bits to be
|
||||
was easily fixed with a change to [x86cpu.js](/modules/pcx86/lib/x86cpu.js), allowing the IOPL bits to be
|
||||
modified in real-mode on an 80386. When I had previously tweaked setPS() to accomodate 80286/80386 discrimination
|
||||
logic in OS/2 1.0, there was no 80386 support in PCjs at that time, so it was sufficient to *never* allow the
|
||||
logic in OS/2 1.0, there was no 80386 support in PCx86 at that time, so it was sufficient to *never* allow the
|
||||
IOPL bits to be altered in real-mode.
|
||||
|
||||
The next problem was triggered by Setup's CAB ("Diamond") decompression code, which uses all 32 bits
|
||||
of the 80386's 32-bit registers. That in itself was not a problem, but by leaving stray bits in the upper halves of
|
||||
registers like EDX, it exposed a bug in the PCjs I/O instruction handlers, which neglected to mask EDX with 0xFFFF before
|
||||
registers like EDX, it exposed a bug in the PCx86 I/O instruction handlers, which neglected to mask EDX with 0xFFFF before
|
||||
performing port lookups, causing mysterious I/O failures that usually manifested themselves as hard disk I/O errors.
|
||||
|
||||
Then PCjs crashed in the middle of the decompression of the first CAB file (MINI.CAB). It turned out the stack
|
||||
Then PCx86 crashed in the middle of the decompression of the first CAB file (MINI.CAB). It turned out the stack
|
||||
had been improperly adjusted because a "RETF n" instruction mistakenly believed that a stack switch had occurred.
|
||||
This was, in fact, a left-over condition from a protected-mode stack-switch. That was easily cleared.
|
||||
|
||||
|
|
@ -75,7 +75,7 @@ fixed by flagging the opcode as genuinely invalid.
|
|||
|
||||
> SIDEBAR
|
||||
|
||||
> By default, PCjs marks opcodes as invalid *only* if they have been confirmed invalid. PCjs considers the vast
|
||||
> By default, PCx86 marks opcodes as invalid *only* if they have been confirmed invalid. PCx86 considers the vast
|
||||
majority of unused/undocumented opcodes to be merely "undefined" until I've seen them in the wild. An instruction will
|
||||
be marked invalid if I either discover that real hardware treats it as an Invalid Opcode (by throwing the exception)
|
||||
*or* that real software expects it to. For opcode 0x0F,0xFF, it was the latter.
|
||||
|
|
@ -86,9 +86,9 @@ I consider it a misnomer to refer to any invalid instruction as "undefined".
|
|||
|
||||
The other recent Windows 95 oddity I ran into was an instruction with multiple address-override (0x67) prefixes; the
|
||||
first prefix changed the instruction's addressing mode from 16-bit to 32-bit, and the second prefix changed it back to
|
||||
16-bit. PCjs should have simply ignored the second prefix.
|
||||
16-bit. PCx86 should have simply ignored the second prefix.
|
||||
|
||||
With all of the above changes in place, PCjs v1.18.4 is able to run Windows 95 Setup a bit farther, but still far from
|
||||
With all of the above changes in place, PCx86 v1.18.4 is able to run Windows 95 Setup a bit farther, but still far from
|
||||
completion. If you want to give it a spin yourself, start the machine below (click the "Run" button) and once it has
|
||||
finished booting, run SETUP from drive B, where the first Windows 95 diskette is already loaded.
|
||||
|
||||
|
|
@ -103,9 +103,9 @@ diskette.
|
|||
August 13, 2015 Update
|
||||
---
|
||||
|
||||
PCjs v1.18.8 has made a little more progress running Windows 95 Setup, but CAB decompression still fails almost
|
||||
PCx86 v1.18.8 has made a little more progress running Windows 95 Setup, but CAB decompression still fails almost
|
||||
immediately. To monitor DOS calls until the first 36-byte read of PRECOPY1.CAB, try setting the following
|
||||
breakpoint and then starting the machine, using the PCjs Debugger *input* field next to the **Enter** button:
|
||||
breakpoint and then starting the machine, using the PCx86 Debugger *input* field next to the **Enter** button:
|
||||
|
||||
m dos off
|
||||
bp 1ED4:16B4 "set fn=ah;dos;if fn!=3f||cx!=24"
|
||||
|
|
@ -132,7 +132,7 @@ second breakpoint can check the value on exit.
|
|||
|
||||
Regarding the other Debugger commands shown above, the `dos` command describes the current DOS operation
|
||||
(alternatively, you could use the `m int on; m dos on` commands to turn on DOS interrupt messages). The `di`
|
||||
command dumps PCjs BACKTRACK(tm) information, to help you visually confirm which INT 0x21 calls are reading
|
||||
command dumps PCx86 BACKTRACK(tm) information, to help you visually confirm which INT 0x21 calls are reading
|
||||
PRECOPY1.CAB. Finally, the `if` command evaluates the given expression, and if the result is non-zero ("true"),
|
||||
all subsequent commands are executed, up to to any `else` command; otherwise, only commands after the `else`
|
||||
command will be executed, and if there is no `else` command, execution will stop.
|
||||
|
|
@ -142,17 +142,17 @@ are evaluated using traditional operator precedence (ie, the same as C or JavaSc
|
|||
parentheses, assignment operators, and unary or ternary operators, are not supported in expressions.
|
||||
|
||||
This test machine below has been updated to load WDEB386.EXE prior to starting B:SETUP.EXE, if you prefer using
|
||||
WDEB386. Make sure the machine is running (ie, click the **Run** button, or use the PCjs Debugger "g" command),
|
||||
WDEB386. Make sure the machine is running (ie, click the **Run** button, or use the PCx86 Debugger "g" command),
|
||||
and then click on the Debugger *output* control to give it focus and press CTRL-C to trigger WDEB386.
|
||||
|
||||
The Debugger *input* field is used exclusively for PCjs Debugger commands, whereas the *output* textarea combines
|
||||
all Debugger output *and* WDEB386 COM2 serial port I/O. You can even use the PCjs Debugger to debug
|
||||
The Debugger *input* field is used exclusively for PCx86 Debugger commands, whereas the *output* textarea combines
|
||||
all Debugger output *and* WDEB386 COM2 serial port I/O. You can even use the PCx86 Debugger to debug
|
||||
the WDEB386 debugger; just make sure the appropriate text control has focus before typing a command.
|
||||
|
||||
To help reduce confusion, the PCjs Debugger displays a double-character command prefix, to differentiate its commands
|
||||
To help reduce confusion, the PCx86 Debugger displays a double-character command prefix, to differentiate its commands
|
||||
from WDEB386's single-character command prompt -- but it's still easy to get confused.
|
||||
|
||||
A quick recap of those command prefixes (which you won't see until AFTER you've typed a PCjs command):
|
||||
A quick recap of those command prefixes (which you won't see until AFTER you've typed a PCx86 command):
|
||||
|
||||
* `>>` indicates real-mode
|
||||
* `##` indicates protected-mode
|
||||
|
|
@ -165,7 +165,7 @@ A quick recap of those command prefixes (which you won't see until AFTER you've
|
|||
August 21, 2015 Update
|
||||
---
|
||||
|
||||
PCjs v1.19.1 has finally solved a number of nagging bugs. The CAB decompression code itself was running
|
||||
PCx86 v1.19.1 has finally solved a number of nagging bugs. The CAB decompression code itself was running
|
||||
fine; it would crash after loading a 32-bit value into EAX *and* a timer interrupt occurred. A path
|
||||
through the interrupt handler was trashing the upper bits of EAX. The culprit: any of the MOV instructions
|
||||
that move an immediate value into one of the "high" 8-bit registers (AH, BH, CH, or DH). Those instructions
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ date: 2015-09-21 11:00:00
|
|||
category: Windows 95
|
||||
permalink: /blog/2015/09/21/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: deskpro386
|
||||
state: /disks/pc/windows/win95/4.00.950/deskpro386.json
|
||||
config: /devices/pc/machine/compaq/deskpro386/vga/4096kb/machine.xml
|
||||
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}]'
|
||||
state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json
|
||||
config: /devices/pcx86/machine/compaq/deskpro386/vga/4096kb/machine.xml
|
||||
drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pcx86/fixed/68mb/win95.json"}]'
|
||||
autoMount: ''
|
||||
---
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ converts an immediate signed byte into a signed word. Those variations were fai
|
|||
a 16-bit operand size was in effect, and if the destination was a register, the upper 16 bits of that register
|
||||
could become corrupted.
|
||||
|
||||
The [Windows 95 Test Machine](/disks/pc/windows/win95/4.00.950/) hard disk has been updated
|
||||
The [Windows 95 Test Machine](/disks/pcx86/windows/win95/4.00.950/) hard disk has been updated
|
||||
with a complete set of Windows 95 files from a "Compact" installation, and first boot has finished, so instead
|
||||
of the initial "Getting ready to run Windows 95 for the first time..." splash screen, you'll see the normal
|
||||
Windows 95 startup screen.
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ and the following "Front Matter" (YAML) must appear at the top of the Markdown f
|
|||
---
|
||||
...
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: ibm5150
|
||||
---
|
||||
|
||||
|
|
@ -74,13 +74,13 @@ You may also use `config` to specify a machine XML configuration file if not usi
|
|||
a JSON-encoded machine state file if the machine requires a predefined state; and `uncompiled` may be set to *true*
|
||||
to force a machine to use uncompiled sources, overriding the value of `site.pcjs.compiled` in **_config.yml**.
|
||||
|
||||
For example, the PCjs Home page contains two machines, so this appears at the top of the
|
||||
For example, the PCjs home page contains two machines, so this appears at the top of the
|
||||
[Markdown file](https://raw.githubusercontent.com/jeffpar/pcjs/master/index.md):
|
||||
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: ibm5150
|
||||
config: /devices/pc/machine/5150/mda/64kb/machine.xml
|
||||
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
|
||||
- type: c1p
|
||||
id: demoC1P
|
||||
config: /devices/c1p/machine/8kb/large/machine.xml
|
||||
|
|
@ -89,13 +89,13 @@ If necessary, you can also override some of the settings in a machine XML file.
|
|||
FDC `autoMount` setting, making it easy to reuse the same machine XML file with different boot disks:
|
||||
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: deskpro386
|
||||
debugger: true
|
||||
autoMount:
|
||||
A:
|
||||
path: /disks/pc/os2/misc/football/FOOTBALL-76817.json
|
||||
config: /devices/pc/machine/compaq/deskpro386/ega/4096kb/debugger/machine.xml
|
||||
path: /disks/pcx86/os2/misc/football/FOOTBALL-76817.json
|
||||
config: /devices/pcx86/machine/compaq/deskpro386/ega/4096kb/debugger/machine.xml
|
||||
|
||||
Other settings that can currently be overridden include:
|
||||
|
||||
|
|
@ -104,11 +104,11 @@ Other settings that can currently be overridden include:
|
|||
+ `messages`
|
||||
+ `state`
|
||||
|
||||
Additional overrides will be added as needed. See the [Windows 95 Demo](/disks/pc/windows/win95/4.00.950/)
|
||||
machine and its associated [Markdown file](https://raw.githubusercontent.com/jeffpar/pcjs/master/disks/pc/windows/win95/4.00.950/README.md)
|
||||
Additional overrides will be added as needed. See the [Windows 95 Demo](/disks/pcx86/windows/win95/4.00.950/)
|
||||
machine and its associated [Markdown file](https://raw.githubusercontent.com/jeffpar/pcjs/master/disks/pcx86/windows/win95/4.00.950/README.md)
|
||||
for more override examples, including how to set `autoMount` to *not* mount any diskettes.
|
||||
|
||||
I will continue to include a Node web server with the PCjs project, but it's now intended for development
|
||||
I will continue to include a Node web server with the PCjs Project, but it's now intended for development
|
||||
purposes only (not production servers). I've updated the PCjs MarkOut component to parse any "Front Matter"
|
||||
at the top of the PCjs Markdown files, and to convert all new Jekyll-style embedded machines and screenshots
|
||||
to the older Markdown-compatible formats, so pages generated by the Node web server should still function
|
||||
|
|
|
|||
|
|
@ -5,23 +5,23 @@ date: 2015-12-27 11:00:00
|
|||
category: OS/2
|
||||
permalink: /blog/2015/12/27/
|
||||
machines:
|
||||
- type: pc
|
||||
- type: pcx86
|
||||
id: ibm5170
|
||||
debugger: true
|
||||
config: /devices/pc/machine/5170/ega/2048kb/rev3/debugger/machine.xml
|
||||
drives: '[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/IBMOS210-EGA.json"}]'
|
||||
config: /devices/pcx86/machine/5170/ega/2048kb/rev3/debugger/machine.xml
|
||||
drives: '[{name:"20Mb Hard Disk",type:2,path:"/disks/pcx86/fixed/20mb/IBMOS210-EGA.json"}]'
|
||||
automount: ''
|
||||
---
|
||||
|
||||
Just for fun (because I have a warped sense of fun), I decided to revisit some of the old OS/2 software I wrote
|
||||
almost 30 years ago. But first, I needed an OS/2 development environment.
|
||||
|
||||
So I started with a clean install of [IBM OS/2 1.0](/disks/pc/os2/ibm/1.0/) in the 8Mhz IBM PC AT machine
|
||||
So I started with a clean install of [IBM OS/2 1.0](/disks/pcx86/os2/ibm/1.0/) in the 8Mhz IBM PC AT machine
|
||||
below, by booting from the "IBM OS/2 1.0 (1.44M Install)" diskette in drive A and reformatting the machine's 20Mb
|
||||
drive C.
|
||||
|
||||
Next, I installed the [MS OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/). This SDK was released
|
||||
in December 1987 along with [Microsoft OS/2 1.0](/disks/pc/os2/microsoft/1.0/). I don't have any of the
|
||||
Next, I installed the [MS OS/2 SDK 1.02](/disks/pcx86/tools/microsoft/os2/sdk/1.02/). This SDK was released
|
||||
in December 1987 along with [Microsoft OS/2 1.0](/disks/pcx86/os2/microsoft/1.0/). I don't have any of the
|
||||
printed documentation that came with the SDK, such as the *Installation Guide*, but I do have the
|
||||
[Microsoft® Operating System/2 Programmer’s Toolkit](/pubs/pc/software/os2/microsoft/ptk10/) documentation
|
||||
from March 1988, thanks to the [OS/2 Museum](http://www.os2museum.com/wp/os2-history/os2-library/os2-1-x-programming/).
|
||||
|
|
@ -35,11 +35,11 @@ into **Programmer's Workbench** (PWB), the text-mode Integrated Development Envi
|
|||
|
||||
With the introduction of graphical IDEs, such as Visual BASIC in 1991, Visual C++ in 1993, and Visual Studio in 1995,
|
||||
this stand-alone, text-mode editor became obsolete, but in the 1980s, it was a valuable tool. You can learn more
|
||||
about [SDKED](/disks/pc/tools/microsoft/os2/sdk/1.02/#using-sdked) on the
|
||||
[MS OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/) page.
|
||||
about [SDKED](/disks/pcx86/tools/microsoft/os2/sdk/1.02/#using-sdked) on the
|
||||
[MS OS/2 SDK 1.02](/disks/pcx86/tools/microsoft/os2/sdk/1.02/) page.
|
||||
|
||||
Our [IBM OS/2 1.0](/disks/pc/os2/ibm/1.0/) demo machine (shown below) has the
|
||||
[MS OS/2 SDK 1.02](/disks/pc/tools/microsoft/os2/sdk/1.02/) pre-installed, so check out our copy of the
|
||||
Our [IBM OS/2 1.0](/disks/pcx86/os2/ibm/1.0/) demo machine (shown below) has the
|
||||
[MS OS/2 SDK 1.02](/disks/pcx86/tools/microsoft/os2/sdk/1.02/) pre-installed, so check out our copy of the
|
||||
[Microsoft® Operating System/2 Programmer’s Toolkit](/pubs/pc/software/os2/microsoft/ptk10/) and then write some code!
|
||||
|
||||
{% include machine.html id="ibm5170" %}
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ performance improvements were tested before being merged back into the main bran
|
|||
Another branch was **FOOTBALL** (aka **PIGSKIN**), an early 80386-based prototype intended to test the viability
|
||||
of the running multiple DOS applications in V86-mode. Sometimes this 80386 version was also called **386DOS**,
|
||||
to distinguish it from **286DOS**. More details are in this
|
||||
[FOOTBALL Design Document](/disks/pc/os2/misc/football/87058/#football-design-document).
|
||||
[FOOTBALL Design Document](/disks/pcx86/os2/misc/football/87058/#football-design-document).
|
||||
|
||||
To shed some light on those efforts, I recently added a few [OS/2 Prototype Disks](/disks/pc/os2/misc/): a small
|
||||
To shed some light on those efforts, I recently added a few [OS/2 Prototype Disks](/disks/pcx86/os2/misc/): a small
|
||||
collection of early (mostly pre-1.0) OS/2 boot disks that provide a glimpse of what some of those early OS/2 builds
|
||||
looked like.
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ Getting these early versions of OS/2 to run in **PCjs** has been a bit of a chal
|
|||
but also some lingering issues. Debugging continues.
|
||||
|
||||
Part of the problem is that these pre-1.0 builds still contain a few bugs. Also, the original
|
||||
[OS/2 FOOTBALL Boot Disk](/disks/pc/os2/misc/football/87058/) from February 1987 was developed and
|
||||
[OS/2 FOOTBALL Boot Disk](/disks/pcx86/os2/misc/football/87058/) from February 1987 was developed and
|
||||
tested exclusively on Compaq DeskPro 386 machines from late 1986, so it has some uncommon 80386 dependencies:
|
||||
|
||||
* The [80386 LOADALL](/pubs/pc/reference/intel/80386/loadall/) instruction
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@ permalink: /blog/2016/02/08/
|
|||
---
|
||||
|
||||
The new release of PCjs (v1.20.8) is a fairly minor update, but it's an important one for **FOOTBALL** fans, resolving
|
||||
two annoying problems with the [OS/2 FOOTBALL Boot Disk](/disks/pc/os2/misc/football/87058/): mysterious hard-error popups
|
||||
two annoying problems with the [OS/2 FOOTBALL Boot Disk](/disks/pcx86/os2/misc/football/87058/): mysterious hard-error popups
|
||||
and blank screens.
|
||||
|
||||
A hard-error popup would occur when FOOTBALL tried to initialize a non-existent PRN device. To resolve that, PCjs
|
||||
now provides basic parallel port emulation, in the form of a [ParallelPort](/docs/pcjs/parallel/) component that you
|
||||
now provides basic parallel port emulation, in the form of a [ParallelPort](/docs/pcx86/parallel/) component that you
|
||||
include in a machine XML file with the <parallel> element, in much the same way you include the
|
||||
[SerialPort](/docs/pcjs/serial/) component with the <serial> element. This [Compaq DeskPro 386]
|
||||
(/devices/pc/machine/compaq/deskpro386/ega/4096kb/debugger/) machine used to run FOOTBALL has now been updated to
|
||||
[SerialPort](/docs/pcx86/serial/) component with the <serial> element. This [Compaq DeskPro 386]
|
||||
(/devices/pcx86/machine/compaq/deskpro386/ega/4096kb/debugger/) machine used to run FOOTBALL has now been updated to
|
||||
include one parallel port.
|
||||
|
||||
The other problem was that switching between sessions with the **SysReq** key would often result in a blank screen;
|
||||
|
|
@ -23,21 +23,21 @@ exposed a PCjs memory-management bug. The upshot is that whenever the Video com
|
|||
buffer (which is *physical* memory), it must tell the CPU to flush any linear-to-physical mappings that may still refer
|
||||
to the old physical memory.
|
||||
|
||||
With these changes, the [OS/2 FOOTBALL Boot Disk](/disks/pc/os2/misc/football/87058/) appears to be quite usable now.
|
||||
With these changes, the [OS/2 FOOTBALL Boot Disk](/disks/pcx86/os2/misc/football/87058/) appears to be quite usable now.
|
||||
Feel free to give it a few kicks!
|
||||
|
||||
---
|
||||
|
||||
I've also tidied up a few things in the [Devices](/devices/) folder. ROM images used to be stored under
|
||||
`/devices/pc/basic/` and `/devices/pc/bios/`, but BASIC and BIOS ROM images aren't actually devices; they are the
|
||||
`/devices/pcx86/basic/` and `/devices/pcx86/bios/`, but BASIC and BIOS ROM images aren't actually devices; they are the
|
||||
*contents* of ROM devices. So, with that in mind, I've made the following rearrangements:
|
||||
|
||||
* `/devices/pc/bios/5150/*` => `/devices/pc/rom/5150/*`
|
||||
* `/devices/pc/bios/5160/*` => `/devices/pc/rom/5160/*`
|
||||
* `/devices/pc/bios/5170/*` => `/devices/pc/rom/5170/*`
|
||||
* `/devices/pc/bios/compaq/*` => `/devices/pc/rom/compaq/*`
|
||||
* `/devices/pc/basic/ibm-basic-1.00.json` => `/devices/pc/rom/5150/basic/BASIC100.json`
|
||||
* `/devices/pc/basic/ibm-basic-1.10.json` => `/devices/pc/rom/5160/basic/BASIC110.json`
|
||||
* `/devices/pcx86/bios/5150/*` => `/devices/pcx86/rom/5150/*`
|
||||
* `/devices/pcx86/bios/5160/*` => `/devices/pcx86/rom/5160/*`
|
||||
* `/devices/pcx86/bios/5170/*` => `/devices/pcx86/rom/5170/*`
|
||||
* `/devices/pcx86/bios/compaq/*` => `/devices/pcx86/rom/compaq/*`
|
||||
* `/devices/pcx86/basic/ibm-basic-1.00.json` => `/devices/pcx86/rom/5150/basic/BASIC100.json`
|
||||
* `/devices/pcx86/basic/ibm-basic-1.10.json` => `/devices/pcx86/rom/5160/basic/BASIC110.json`
|
||||
|
||||
This structure mirrors what was done with Machine and Video devices, where the devices are organized
|
||||
first by manufacturer (IBM or COMPAQ) and then by type (MDA, CGA, EGA, etc).
|
||||
|
|
@ -48,7 +48,7 @@ for example, models 5150 through 5170 refer to IBM PC models.
|
|||
---
|
||||
|
||||
The project currently includes only two BASIC ROM versions, C1.00 and C1.10, which were initially released with the
|
||||
first model 5150 and 5160 machines, respectively. For more details, see [IBM PC ROMs](/devices/pc/rom/).
|
||||
first model 5150 and 5160 machines, respectively. For more details, see [IBM PC ROMs](/devices/pcx86/rom/).
|
||||
|
||||
I believe there was also a BASIC ROM version 1.20 released for IBM PCjr, but since PCjs does not yet emulate the PCjr,
|
||||
it has not been added to the project.
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ date: 2016-02-17 14:00:00
|
|||
permalink: /blog/2016/02/17/
|
||||
---
|
||||
|
||||
PCjs (v1.20.9) now offers new, *much* easier ways to save disks and machines, thanks to the new
|
||||
PCx86 (v1.20.9) now offers new, *much* easier ways to save disks and machines, thanks to the new
|
||||
[Save Disk](/blog/2016/02/17/#saving-disks) and [Save Machine](/blog/2016/02/17/#saving-machines) features.
|
||||
With one click, PCjs can now generate a single download containing everything you need to embed any of our
|
||||
With one click, PCx86 can now generate a single download containing everything you need to embed any of our
|
||||
IBM PC demos on your own web page.
|
||||
|
||||
Saving Disks
|
||||
|
|
@ -18,7 +18,7 @@ to the floppy disk controls. Select the drive first, and then whatever diskette
|
|||
in that drive will be saved in your local machine's Downloads folder when you click **Save**.
|
||||
|
||||
If you made any changes to that disk after it was loaded, those changes will be included, so if you want a pristine
|
||||
copy of the disk, click the **Load** button first. PCjs will ask you to confirm that you really want to reload the
|
||||
copy of the disk, click the **Load** button first. PCx86 will ask you to confirm that you really want to reload the
|
||||
disk and discard any changes.
|
||||
|
||||
Note that the disk *should* be downloaded as an **.img** file, which is nothing more than a sector-by-sector binary
|
||||
|
|
@ -41,7 +41,7 @@ in your Downloads folder, so the OS X Terminal command `chmod -w PCDOS200-DISK1.
|
|||
`chmod +w PCDOS200-DISK1.img` will make it writable again.
|
||||
|
||||
**NOTE**: Some browsers, notably Safari, do not support named downloads, so any disks you download will end up
|
||||
with default names like "Unknown" or "download". PCjs will still try to let you know what the original filename was,
|
||||
with default names like "Unknown" or "download". PCx86 will still try to let you know what the original filename was,
|
||||
so that you can rename it appropriately.
|
||||
|
||||
Saving Machines
|
||||
|
|
@ -52,46 +52,46 @@ You can choose to save a machine in its initial state, or make changes to any of
|
|||
All your changes should be preserved.
|
||||
|
||||
Under the bottom-left corner of any IBM PC on the PCjs [website](/), you should now see a
|
||||
[**Save Machine**] link. When you click that link, PCjs will generate a large chunk of JavaScript containing
|
||||
[**Save Machine**] link. When you click that link, PCx86 will generate a large chunk of JavaScript containing
|
||||
everything that machine needs to run, including:
|
||||
|
||||
* The machine XML configuration file (eg, "machine.xml")
|
||||
* The machine XSL transformation file (eg, "components.xsl")
|
||||
* The machine CSS stylesheet file (eg, "components.css")
|
||||
* The machine state file (eg, "state.json")
|
||||
* The PCjs machine emulation script (eg, "pc.js")
|
||||
* The PCx86 machine emulation script (eg, "pcx86.js")
|
||||
* Copies of all the disk images mounted by the machine
|
||||
|
||||
Let's say you want to save the IBM PC on the PCjs [home page](/). When you click **Save Machine**, two things should
|
||||
Let's say you want to save the IBM PC on the PCx86 [home page](/). When you click **Save Machine**, two things should
|
||||
happen:
|
||||
|
||||
* A file will be downloaded (eg, "pc.js")
|
||||
* A file will be downloaded (eg, "pcx86.js")
|
||||
* A dialog box will appear with some markup to copy-and-paste
|
||||
|
||||
The dialog box should provide the following information:
|
||||
|
||||
Check your Downloads folder for "pc.js", copy it to your web server as "pc.js",
|
||||
Check your Downloads folder for "pcx86.js", copy it to your web server as "pcx86.js",
|
||||
and then add the following to your web page:
|
||||
|
||||
<div id="ibm5150"></div>
|
||||
...
|
||||
<script type="text/javascript" src="pc.js"></script>
|
||||
<script type="text/javascript" src="pcx86.js"></script>
|
||||
<script type="text/javascript">embedPC("ibm5150","machine.xml","components.xsl");</script>
|
||||
|
||||
The machine should appear where the <div> is located.
|
||||
|
||||
Copy the downloaded file to your own web server as **pc.js**, then create or edit a web page and insert the above text.
|
||||
If **pc.js** and your web page are in different folders, then you'll also need to update *src* to include the exact
|
||||
Copy the downloaded file to your own web server as **pcx86.js**, then create or edit a web page and insert the above text.
|
||||
If **pcx86.js** and your web page are in different folders, then you'll also need to update *src* to include the exact
|
||||
location of the script.
|
||||
|
||||
Some notes:
|
||||
|
||||
* PCjs may attempt to name the downloaded file **pc.json** instead of **pc.js**, because a file with a ".js"
|
||||
* PCx86 may attempt to name the downloaded file **pcx86.json** instead of **pcx86.js**, because a file with a ".js"
|
||||
extension could cause your web browser to block the download.
|
||||
|
||||
* For browsers that don't support named downloads, PCjs will attempt to open a new window/tab instead. Make sure
|
||||
you copy the *entire* contents of that window into a file named to **pc.js** (or **pc-dbg.js** if the machine is
|
||||
using the built-in PCjs debugger).
|
||||
* For browsers that don't support named downloads, PCx86 will attempt to open a new window/tab instead. Make sure
|
||||
you copy the *entire* contents of that window into a file named to **pcx86.js** (or **pcx86-dbg.js** if the machine is
|
||||
using the built-in PCx86 debugger).
|
||||
|
||||
* Your browser may also impose size limitations on the download. If nothing happens, the machine data may be too
|
||||
large for your browser; try a different browser (eg, Firefox or Safari) or a different machine.
|
||||
|
|
@ -113,7 +113,7 @@ Some notes:
|
|||
|
||||
<script type="text/javascript">embedPC("ibm5150","machine.xml","components.xsl","{state:null}");</script>
|
||||
|
||||
While the [PCjs Documentation](/docs/pcjs/) explains how to create a *new* machine, by writing your own machine
|
||||
While the [PCx86 Documentation](/docs/pcx86/) explains how to create a *new* machine, by writing your own machine
|
||||
XML file and manually copying all the other pieces, the new **Save Machine** feature is the best way to save
|
||||
any *existing* IBM PC and embed it on any other website.
|
||||
|
||||
|
|
|
|||
|
|
@ -50,12 +50,12 @@ all we have are the memories.
|
|||
### Speaking of Memories
|
||||
|
||||
In particular, Read-Only Memories: we have precious few of those, too. I finally obtained
|
||||
a [ROM Dump](/devices/pc/rom/compaq/portable/) from COMPAQ's first machine, the COMPAQ Portable, but I had to buy
|
||||
a [ROM Dump](/devices/pcx86/rom/compaq/portable/) from COMPAQ's first machine, the COMPAQ Portable, but I had to buy
|
||||
a system board on ebay to get it. Considering all the effort (and money) that COMPAQ invested in writing that code,
|
||||
it's a bit depressing that these things haven't been properly preserved and memorialized.
|
||||
|
||||
Looking ahead to the day when PCjs will be able to simulate the original COMPAQ Portable, I thought it would be a good
|
||||
idea to create my own roughly chronological list of [COMPAQ Machines](/devices/pc/machine/compaq/) from the 1980s,
|
||||
idea to create my own roughly chronological list of [COMPAQ Machines](/devices/pcx86/machine/compaq/) from the 1980s,
|
||||
since they are all machines I would like to see PCjs eventually support:
|
||||
|
||||
- COMPAQ Portable
|
||||
|
|
@ -64,7 +64,7 @@ since they are all machines I would like to see PCjs eventually support:
|
|||
- COMPAQ DeskPro 286
|
||||
- COMPAQ Portable 286
|
||||
- COMPAQ Portable II
|
||||
- [COMPAQ DeskPro 386](/devices/pc/machine/compaq/deskpro386/)
|
||||
- [COMPAQ DeskPro 386](/devices/pcx86/machine/compaq/deskpro386/)
|
||||
- COMPAQ Portable III
|
||||
- COMPAQ DeskPro 386/20
|
||||
- COMPAQ Portable 386
|
||||
|
|
@ -82,8 +82,8 @@ and LTE Lite series. But I think I need to stick to my original plan and draw a
|
|||
|
||||
As best I can tell, COMPAQ preferred to print its company name in all-caps, so that's my practice as well.
|
||||
|
||||
However, it seems that sometime between the release of [COMPAQ MS-DOS 3.10](/disks/pc/dos/compaq/3.10/) and
|
||||
[COMPAQ MS-DOS 3.31](/disks/pc/dos/compaq/3.31/), there may have been a shift in policy. Both products still
|
||||
However, it seems that sometime between the release of [COMPAQ MS-DOS 3.10](/disks/pcx86/dos/compaq/3.10/) and
|
||||
[COMPAQ MS-DOS 3.31](/disks/pcx86/dos/compaq/3.31/), there may have been a shift in policy. Both products still
|
||||
called themselves `The COMPAQ Personal Computer MS-DOS`, but in 3.31, the copyright string changed to
|
||||
`Compaq Computer Corp.`
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ date: 2016-03-06 09:00:00
|
|||
permalink: /blog/2016/03/06/
|
||||
---
|
||||
|
||||
Yesterday, I fired up [Windows 3.1](/disks/pc/windows/3.10/) and played a complete game of
|
||||
Yesterday, I fired up [Windows 3.1](/disks/pcx86/windows/3.10/) and played a complete game of
|
||||
[Windows Solitaire](https://en.wikipedia.org/wiki/Microsoft_Solitaire) on my iPad. It was a bit, um, touchy,
|
||||
but it worked.
|
||||
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@ permalink: /blog/2016/03/12/
|
|||
---
|
||||
|
||||
I recently added some more demos to the PCjs Project, to showcase its ability to run old 80286-based and
|
||||
80386-based software, such as [Windows/386](/disks/pc/windows/2.0x/), [Windows 3.0](/disks/pc/windows/3.00/),
|
||||
[Windows 3.1](/disks/pc/windows/3.10/), and [Windows 95](/disks/pc/windows/win95/4.00.950/).
|
||||
80386-based software, such as [Windows/386](/disks/pcx86/windows/2.0x/), [Windows 3.0](/disks/pcx86/windows/3.00/),
|
||||
[Windows 3.1](/disks/pcx86/windows/3.10/), and [Windows 95](/disks/pcx86/windows/win95/4.00.950/).
|
||||
|
||||
{% include screenshot.html src="/disks/pc/windows/2.0x/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows/386 2.01" link="/disks/pc/windows/2.0x/" %}
|
||||
{% include screenshot.html src="/disks/pc/windows/3.00/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/EGA, Windows 3.00" link="/disks/pc/windows/3.00/" %}
|
||||
{% include screenshot.html src="/disks/pc/windows/3.10/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/VGA, Windows 3.10" link="/disks/pc/windows/3.10/" %}
|
||||
{% include screenshot.html src="/disks/pc/windows/win95/4.00.950/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows 95" link="/disks/pc/windows/win95/4.00.950/" %}
|
||||
{% include screenshot.html src="/disks/pcx86/windows/2.0x/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows/386 2.01" link="/disks/pcx86/windows/2.0x/" %}
|
||||
{% include screenshot.html src="/disks/pcx86/windows/3.00/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/EGA, Windows 3.00" link="/disks/pcx86/windows/3.00/" %}
|
||||
{% include screenshot.html src="/disks/pcx86/windows/3.10/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/VGA, Windows 3.10" link="/disks/pcx86/windows/3.10/" %}
|
||||
{% include screenshot.html src="/disks/pcx86/windows/win95/4.00.950/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows 95" link="/disks/pcx86/windows/win95/4.00.950/" %}
|
||||
|
||||
As the [OS/2 Museum](http://www.os2museum.com/wp/windows386-2-01/) points out, [Windows/386 2.01](/disks/pc/windows/2.0x/)
|
||||
As the [OS/2 Museum](http://www.os2museum.com/wp/windows386-2-01/) points out, [Windows/386 2.01](/disks/pcx86/windows/2.0x/)
|
||||
was the first Microsoft product to specifically target the 80386. However, not only was it *not* a 32-bit operating
|
||||
system, it didn't even run Windows applications in protected-mode. Windows apps ran in V86-mode, and even then, *only*
|
||||
if you started Windows by running `WIN386.EXE`.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ permalink: /blog/2016/05/04/
|
|||
This was the week of The Sharpening.
|
||||
|
||||
A while back, I updated most of the machines to use higher-resolution "screens". For example, a typical
|
||||
[EGA video configuration](/devices/pc/video/ibm/ega/1984-09-13/128kb-autolockfs.xml) now specifies a *screenWidth*
|
||||
[EGA video configuration](/devices/pcx86/video/ibm/ega/1984-09-13/128kb-autolockfs.xml) now specifies a *screenWidth*
|
||||
of 1280 and *screenHeight* of 700, dimensions which are exactly twice the standard EGA resolution.
|
||||
|
||||
That change had no effect on the machine's operation, but it did improve the machine's appearance, because
|
||||
|
|
@ -16,8 +16,8 @@ most people are using much higher resolution monitors today, so by using a highe
|
|||
less interpolation is happening when a machine's screen image is scaled up to fill your browser window.
|
||||
|
||||
The amount of scaling *also* depends on whether the machine allows itself to be stretched to fill the browser window.
|
||||
For example, this [machine](/devices/pc/machine/5160/ega/640kb/array/machine.xml) (used by the
|
||||
[EGA Machine Array Demo](/devices/pc/machine/5160/ega/640kb/array/)) is limited to an overall *width* of 680 pixels,
|
||||
For example, this [machine](/devices/pcx86/machine/5160/ega/640kb/array/machine.xml) (used by the
|
||||
[EGA Machine Array Demo](/devices/pcx86/machine/5160/ega/640kb/array/)) is limited to an overall *width* of 680 pixels,
|
||||
no matter how large you make your browser window:
|
||||
|
||||
```xml
|
||||
|
|
@ -46,7 +46,7 @@ All the browsers I've tested so far (Chrome, Firefox, and Safari) support a
|
|||
which eliminates much of the fuzziness that would occur when copying pixels from the lower-resolution *buffer* canvas
|
||||
to the higher-resolution *screen* canvas.
|
||||
|
||||
So I've added a new [Video](/docs/pcjs/video/) property named *smoothing* that can be set to "true" or "false",
|
||||
So I've added a new [Video](/docs/pcx86/video/) property named *smoothing* that can be set to "true" or "false",
|
||||
and I've set it to "false" for most machines in the project. If *smoothing* is not set, your browser continues to
|
||||
use its default interpolation method.
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ while the right one does not.
|
|||
Aspect Ratio
|
||||
---
|
||||
|
||||
The *smoothing* property joins another recent [Video](/docs/pcjs/video/) property, *aspect*, that was added in a
|
||||
The *smoothing* property joins another recent [Video](/docs/pcx86/video/) property, *aspect*, that was added in a
|
||||
[release](https://github.com/jeffpar/pcjs/releases/tag/v1.21.5) last month.
|
||||
|
||||
To recap, aspect ratio is display width divided by display height, but the choice of aspect ratio is complicated by
|
||||
|
|
@ -79,7 +79,7 @@ containing one or more PCjs machines.
|
|||
|
||||
For example:
|
||||
|
||||
http://www.pcjs.org/disks/pc/dos/ibm/1.00/?aspect=2.0
|
||||
http://www.pcjs.org/disks/pcx86/dos/ibm/1.00/?aspect=2.0
|
||||
|
||||
will modify the height of the machine's screen to conform to the requested aspect ratio of 2.0. The screen should still
|
||||
be responsive to any browser resizing while still retaining that aspect ratio.
|
||||
|
|
|
|||
Loading…
Reference in a new issue