Fixed machine array demos, by permitting machine IDs with hyphenated numeric suffixes to use a machine state file created with an unhyphenated machine ID, and added a demo of Windows 1.0 (the "Premiere Edition")

This commit is contained in:
Jeff Parsons 2017-06-23 14:00:27 -07:00 committed by Jeff Parsons
commit 503cda40f7
27 changed files with 99 additions and 57 deletions

View file

@ -4,13 +4,13 @@ title: IBM PC XT (Model 5160, 256Kb, 10Mb Drive) Machine Array with CGA Displays
permalink: /devices/pcx86/machine/5160/cga/256kb/array/
machines:
- type: pcx86
id: ibm5160a
id: ibm5160-1
- type: pcx86
id: ibm5160b
id: ibm5160-2
---
IBM PC XT Machine Array with CGA Displays
---
-----------------------------------------
### Demonstration of Multiple IBM PCs on a Single Web Page
@ -18,6 +18,6 @@ The simulations below are identical PC XT configurations, each with a clock spee
and a CGA display, using the original IBM PC Model 5160 ROM BIOS and CGA font ROM. Each also includes an
empty/unformatted 10Mb hard disk. Use FDISK and then FORMAT to turn it into a usable C: drive.
{% include machine.html id="ibm5160a" %}
{% include machine.html id="ibm5160-1" %}
{% include machine.html id="ibm5160b" %}
{% include machine.html id="ibm5160-2" %}

View file

@ -3,28 +3,36 @@ layout: page
title: IBM PC XT (Model 5160, 256Kb, 10Mb Drive) Machine Array with EGA Displays
permalink: /devices/pcx86/machine/5160/ega/640kb/array/
machines:
- type: pcx86
id: ibm5160a
- type: pcx86
id: ibm5160b
- type: pcx86
id: ibm5160c
- type: pcx86
id: ibm5160d
- id: ibm5160-ega-win101-1
type: pcx86
state: /disks/pcx86/windows/1.01/state.json
drives: '[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-EGA.json"}]'
- id: ibm5160-ega-win101-2
type: pcx86
state: /disks/pcx86/windows/1.01/state.json
drives: '[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-EGA.json"}]'
- id: ibm5160-ega-win101-3
type: pcx86
state: /disks/pcx86/windows/1.01/state.json
drives: '[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-EGA.json"}]'
- id: ibm5160-ega-win101-4
type: pcx86
state: /disks/pcx86/windows/1.01/state.json
drives: '[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-EGA.json"}]'
---
IBM PC XT Machine Array with EGA Displays
---
-----------------------------------------
### Demonstration of Multiple IBM PCs on a Single Web Page
The simulations below are identical PC XT configurations, each with a clock speed of 4.77Mhz, 640Kb of RAM,
and a 128Kb EGA connected to an Enhanced Color Display, using the original IBM EGA BIOS.
{% include machine.html id="ibm5160a" %}
{% include machine.html id="ibm5160-ega-win101-1" %}
{% include machine.html id="ibm5160b" %}
{% include machine.html id="ibm5160-ega-win101-2" %}
{% include machine.html id="ibm5160c" %}
{% include machine.html id="ibm5160-ega-win101-3" %}
{% include machine.html id="ibm5160d" %}
{% include machine.html id="ibm5160-ega-win101-4" %}

View file

@ -2,7 +2,7 @@
<?xml-stylesheet type="text/xsl" href="/versions/pcx86/1.35.1/machine.xsl"?>
<machine id="ibm5160" type="pcx86" border="1" width="680px" float="left" background="default">
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Disk</name>
<computer id="xt-ega-640k" name="IBM PC XT" state="/disks/pcx86/windows/1.01/ibm5160-ega.json"/>
<computer id="xt-ega-640k" name="IBM PC XT"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="0xa0000 (640Kb) size overrides SW1|ROM BIOS memory test has been disabled"/>
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pcx86/hdc/ibm-xebec-1982.json"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pcx86/rom/5160/basic/BASIC110.json"/>
@ -14,7 +14,7 @@
<control type="button" binding="setSpeed">Fast</control>
</cpu>
<chipset id="chipset" model="5160" sw1="01001101"/>
<hdc ref="/disks/pcx86/fixed/10mb/pcdos200-win101-ega.xml"/>
<hdc ref="/disks/pcx86/fixed/10mb/unformatted.xml"/>
<serial id="com2" adapter="2"/>
<mouse serial="com2"/>
</machine>

View file

@ -17,7 +17,7 @@
<control type="switches" label="SW1" binding="sw1" left="0px"/>
<control type="description" binding="swdesc" left="0px"/>
</chipset>
<hdc ref="/disks/pcx86/fixed/10mb/pcdos200-win101-ega.xml"/>
<hdc ref="/disks/pcx86/fixed/10mb/unformatted.xml"/>
<serial id="com1" adapter="1" binding="print"/>
<serial id="com2" adapter="2"/>
<mouse serial="com2"/>

View file

@ -12,7 +12,7 @@
<fdc ref="/disks/pcx86/compiled/library.xml"/>
<keyboard ref="/devices/pcx86/keyboard/us83-buttons-functions.xml"/>
<chipset id="chipset" model="5160" sw1="01001101"/>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3}]'/>
<hdc ref="/disks/pcx86/fixed/10mb/unformatted.xml"/>
<serial id="com2" adapter="2"/>
<mouse serial="com2"/>
</machine>

View file

@ -5,7 +5,7 @@ permalink: /disks/pcx86/dos/ibm/3.00/
---
PC-DOS 3.00
---
-----------
PC-DOS 3.00 was announced on August 14, 1984 and released in September 1984.

View file

@ -5,7 +5,7 @@ permalink: /disks/pcx86/dos/ibm/3.10/
---
PC-DOS 3.10
---
-----------
PC-DOS 3.10 was announced on August 14, 1984 (along with [PC-DOS 3.00](/disks/pcx86/dos/ibm/3.00/)) and released
on April 2, 1985.

View file

@ -5,7 +5,7 @@ permalink: /disks/pcx86/dos/ibm/3.20/
---
PC-DOS 3.20
---
-----------
PC-DOS 3.20 was first announced on March 18, 1986 and released later that year.

File diff suppressed because one or more lines are too long

View file

@ -5,11 +5,11 @@ permalink: /disks/pcx86/fixed/10mb/
---
10Mb Hard Drive (Fixed Disk) Images
---
-----------------------------------
This folder contains the following 10Mb fixed disk images:
* [Empty formatted disk](PCDOS200-EMPTY.json)
* [Empty formatted disk](PCDOS200-EMPTY.json) ([XML](pcdos200-empty.xml))
* [PC-DOS 2.00 with Windows 1.01 for CGA](PCDOS200-WIN101-CGA.json) ([XML](pcdos200-win101-cga.xml))
* [PC-DOS 2.00 with Windows 1.01 for EGA](PCDOS200-WIN101-EGA.json) ([XML](pcdos200-win101-ega.xml))
@ -28,10 +28,10 @@ or by reference:
### Notes Regarding 10Mb Disks
The [Empty formatted disk](PCDOS200-EMPTY.json) is *completely* empty. It was partitioned with the PC-DOS 2.00 **FDISK** utility,
allocating the entire disk to a single DOS partition, and then it was formatted with the PC-DOS 2.00 **FORMAT** utility.
Neither the **FORMAT** "/S" option nor the **SYS** command were used, so no system files were transferred, leaving
the disk completely empty and non-bootable.
The [Empty formatted disk](PCDOS200-EMPTY.json) is *completely* empty. It was partitioned with the PC-DOS 2.00
**FDISK** utility, allocating the entire disk to a single DOS partition, and then it was formatted with the PC-DOS 2.00
**FORMAT** utility. Neither the **FORMAT** "/S" option nor the **SYS** command were used, so no system files were
transferred, leaving the disk completely empty and non-bootable.
After formatting, PC-DOS 2.00 reports:
@ -75,7 +75,7 @@ is not allowed, another 2 sectors are lost, bringing the total FAT file system o
Thus, actual free space is (20739 - 51) * 512, or 10,592,256 bytes, which is exactly what DOS reports as the available
space.
Some sources on the internet (eg, [http://www.wikiwand.com/en/Timeline_of_DOS_operating_systems](http://www.wikiwand.com/en/Timeline_of_DOS_operating_systems))
Some sources on the internet (eg,[http://www.wikiwand.com/en/Timeline_of_DOS_operating_systems](http://www.wikiwand.com/en/Timeline_of_DOS_operating_systems))
claim that the FAT file system overhead for the XT's 10Mb disk is "50 sectors". As they explain:
"The fixed disk has 10,618,880 bytes of raw space: 305 cylinders (the equivalent of tracks) × 2 platters

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-EMPTY.json"}]' padLeft="8px" padBottom="8px">
<control type="button" binding="saveHD0">Save HD</control>
</hdc>

View file

@ -1,2 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-CGA.json",type:3}]'/>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-CGA.json"}]' padLeft="8px" padBottom="8px">
<control type="button" binding="saveHD0">Save HD</control>
</hdc>

View file

@ -1,2 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-EGA.json",type:3}]'/>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS200-WIN101-EGA.json"}]' padLeft="8px" padBottom="8px">
<control type="button" binding="saveHD0">Save HD</control>
</hdc>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3}]' padLeft="8px" padBottom="8px">
<control type="button" binding="saveHD0">Save HD</control>
</hdc>

View file

@ -5,7 +5,7 @@ permalink: /disks/pcx86/fixed/20mb/
---
20Mb Hard Drive (Fixed Disk) Images
---
-----------------------------------
This folder contains the following 20Mb disk images:

View file

@ -1,16 +1,28 @@
---
layout: page
title: Microsoft Windows 1.00
title: Microsoft Windows 1.0
permalink: /disks/pcx86/windows/1.00/
machines:
- id: ibm5160-ega-win100
type: pcx86
state: /disks/pcx86/windows/1.00/state.json
config: /devices/pcx86/machine/5160/ega/640kb/machine.xml
drives: '[{name:"10Mb Hard Disk",type:3,path:"/disks/pcx86/fixed/10mb/PCDOS310-WIN100-EGA.json"}]'
autoMount:
A:
path: /disks/pcx86/dos/ibm/3.10/PCDOS310-DISK1.json
B:
name: /disks/pcx86/dos/ibm/3.10/PCDOS310-DISK1.json
---
Microsoft Windows 1.00 ("Premiere Edition")
---
Microsoft Windows 1.0 ("Premiere Edition")
------------------------------------------
Windows 1.00 was not a public release. Microsoft released these disks (dubbed the "Premiere Edition") to selected
vendors, analysts, and members of the press in Summer 1985 to obtain feedback on the product.
Windows 1.0 was not a public release. Microsoft released these disks (dubbed the "Premiere Edition") to selected
vendors, analysts, and members of the press in Summer 1985 to obtain feedback on the product. [Windows 1.01](../1.01/)
was the first public release.
[Windows 1.01](../1.01/) was the first public release.
{% include machine.html id="ibm5160-ega-win100" %}
Directory listings of the four 360Kb distribution diskettes are provided below.

File diff suppressed because one or more lines are too long

View file

@ -9,7 +9,7 @@ Microsoft Windows
Information is available for assorted versions of Microsoft Windows:
* [Microsoft Windows 1.00](/disks/pcx86/windows/1.00/)
* [Microsoft Windows 1.00 (Demo)](/disks/pcx86/windows/1.00/)
* [Microsoft Windows 1.01 (Demo)](/disks/pcx86/windows/1.01/)
* [Microsoft Windows 1.02](/disks/pcx86/windows/1.02/)
* [Microsoft Windows 1.03](/disks/pcx86/windows/1.03/)

View file

@ -864,7 +864,7 @@ function LB(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms)
function QB(a,b){var c=new Zf(a,"1.35.1",RB);if(c.load()&&SB(c)){var d=c.get(TB),e=b?b.get(TB):"unknown";d!=e&&(a.Da("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}l=KB.prototype;
l.Mf=function(a){void 0===a&&(a=this.A||(this.L?UB:MB));if(!this.B){this.B++;var b=!1,c=!1;this.Y=!1;var d=this.M||new Zf(this,"1.35.1");if(a==VB)b=!0;else if(a>MB){if(d.load(this.L)){this.F=new Zf(this,"1.35.1",WB);this.F.load()&&(XB(this,d)&&(a=YB),ZB(this.F));this.F.set(TB,Ea());$B(this.F);var e=this.A&&!this.I;if(a==UB||ub("Click OK to restore the previous PCx86 machine state, or CANCEL to reset the machine.")){if(c=SB(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==f&&
"no machine state"!=g?(this.Da("Error: "+g),"unable to verify user"==g&&(Va(aC,""),this.C=null)):this.P(f+": "+g),ZB(d),d.load()?(c=SB(d),e=!0):c=!1))}e&&QB(this,c?d:null)}else a==YB&&d.clear()}else QB(this);delete this.L;delete this.M}e=vb(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.H&&(c=bC(this,g,d,b,c));b=[d,a,c];a!=VB?PB(this,this.oj,b):this.oj(b)}};
function bC(a,b,c,d,e){if(!b.da.Yb){b.da.Yb=!0;if(b.Xb){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Xb(f,d)&&f&&(b.Da("Unable to restore hardware state")&&(a.W&&!a.Z?(c.clear(),a.A=MB,window&&window.location.reload()):a.Y=!0),b.Xb(null),e=!1)}if(!d&&b.zj)for(a=b.zj.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
function bC(a,b,c,d,e){if(!b.da.Yb){b.da.Yb=!0;if(b.Xb){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/-[0-9]+\./i,"."))));"string"===typeof f&&(f=null);!b.Xb(f,d)&&f&&(b.Da("Unable to restore hardware state")&&(a.W&&!a.Z?(c.clear(),a.A=MB,window&&window.location.reload()):a.Y=!0),b.Xb(null),e=!1)}if(!d&&b.zj)for(a=b.zj.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
l.oj=function(a){var b=a[0],c=0>a[1];a=a[2];this.ga=!0;this.da.Yb=!0;var d=this.na.power;d&&(d.textContent="Shutdown");this.H&&(bC(this,this.H,b,c,a),this.H.mf());this.Y&&(XB(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.B=0};
function XB(a,b){if(!a.da.Tf){if(ub("There may be a problem with your PCx86 machine.\n\nTo help us diagnose it, click OK to send this PCx86 machine state to http://www.pcjs.org.")){var c=a.C||"";b=b.toString();var d={app:"PCx86",ver:"1.35.1"};d.url=a.ea;d.user=c;d.type="bug";d.data=b;Na("http://www.pcjs.org/api/v1/report",d,!0)}return!0}return!1}
function rB(a,b,c){var d,e="none";if(a.B)return null;a.B--;var f=new Zf(a,"1.35.1"),g=new Zf(a,"1.35.1",RB),h=Ea();g.set(TB,h);f.set(TB,h);f.set(cC,"1.35.1");f.set(dC,window?window.location.href:null);f.set(eC,Pa());a.H&&a.H.Wb&&(c&&a.H.Jb(),d=a.H.Wb(b,c),"object"===typeof d&&f.set(a.H.id,d),c&&(a.H.da.Yb=!1,!1===d&&(e=null)));for(var h=vb(a.id),k=0;k<h.length;k++){var m=h[k];m.da.Yb&&(m.Wb&&(d=m.Wb(b,c),"object"===typeof d&&f.set(m.id,d)),c&&(m.da.Yb=!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.C&&fC(a,

View file

@ -667,7 +667,7 @@ function Qu(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms)
function Vu(a,b){var c=new Te(a,"1.35.1",Wu);if(c.load()&&Xu(c)){var d=c.get(Yu),e=b?b.get(Yu):"unknown";d!=e&&(a.wa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}k=Pu.prototype;
k.af=function(a){void 0===a&&(a=this.A||(this.K?Zu:Ru));if(!this.C){this.C++;var b=!1,c=!1;this.W=!1;var d=this.L||new Te(this,"1.35.1");if(a==$u)b=!0;else if(a>Ru){if(d.load(this.K)){this.F=new Te(this,"1.35.1",av);this.F.load()&&(bv(this,d)&&(a=cv),dv(this.F));this.F.set(Yu,wa());ev(this.F);var e=this.A&&!this.H;if(a==Zu||ab("Click OK to restore the previous PCx86 machine state, or CANCEL to reset the machine.")){if(c=Xu(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==f&&
"no machine state"!=g?(this.wa("Error: "+g),"unable to verify user"==g&&(Ja(fv,""),this.B=null)):this.Zb(f+": "+g),dv(d),d.load()?(c=Xu(d),e=!0):c=!1))}e&&Vu(this,c?d:null)}else a==cv&&d.clear()}else Vu(this);delete this.K;delete this.L}e=bb(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.U&&(c=gv(this,g,d,b,c));b=[d,a,c];a!=$u?Uu(this,this.mi,b):this.mi(b)}};
function gv(a,b,c,d,e){if(!b.aa.Pb){b.aa.Pb=!0;if(b.Ob){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ob(f,d)&&f&&(b.wa("Unable to restore hardware state")&&(a.V&&!a.X?(c.clear(),a.A=Ru,window&&window.location.reload()):a.W=!0),b.Ob(null),e=!1)}if(!d&&b.vi)for(a=b.vi.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
function gv(a,b,c,d,e){if(!b.aa.Pb){b.aa.Pb=!0;if(b.Ob){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/-[0-9]+\./i,"."))));"string"===typeof f&&(f=null);!b.Ob(f,d)&&f&&(b.wa("Unable to restore hardware state")&&(a.V&&!a.X?(c.clear(),a.A=Ru,window&&window.location.reload()):a.W=!0),b.Ob(null),e=!1)}if(!d&&b.vi)for(a=b.vi.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
k.mi=function(a){var b=a[0],c=0>a[1];a=a[2];this.ea=!0;this.aa.Pb=!0;var d=this.ia.power;d&&(d.textContent="Shutdown");this.U&&(gv(this,this.U,b,c,a),this.U.Fe());this.W&&(bv(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.C=0};
function bv(a,b){if(!a.aa.hf){if(ab("There may be a problem with your PCx86 machine.\n\nTo help us diagnose it, click OK to send this PCx86 machine state to http://www.pcjs.org.")){var c=a.B||"";b=b.toString();var d={app:"PCx86",ver:"1.35.1"};d.url=a.ca;d.user=c;d.type="bug";d.data=b;Ea("http://www.pcjs.org/api/v1/report",d,!0)}return!0}return!1}
function hv(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new Te(a,"1.35.1"),g=new Te(a,"1.35.1",Wu),h=wa();g.set(Yu,h);f.set(Yu,h);f.set(iv,"1.35.1");f.set(jv,window?window.location.href:null);f.set(kv,window?window.navigator.userAgent:"");a.U&&a.U.Nb&&(c&&Tc(a.U),d=a.U.Nb(b,c),"object"===typeof d&&f.set(a.U.id,d),c&&(a.U.aa.Pb=!1,!1===d&&(e=null)));for(var h=bb(a.id),l=0;l<h.length;l++){var m=h[l];m.aa.Pb&&(m.Nb&&(d=m.Nb(b,c),"object"===typeof d&&f.set(m.id,d)),c&&(m.aa.Pb=!1,!1===d&&(e=

View file

@ -2686,11 +2686,15 @@ DiskDump.prototype.convertToJSON = function()
var bMediaTypeBPB = this.bufDisk.readUInt8(offBootSector + DiskAPI.BPB.MEDIA_TYPE);
var nSectorsTotalBPB = this.bufDisk.readUInt16LE(offBootSector + DiskAPI.BPB.TOTAL_SECS);
var nSectorsPerCylinderBPB = nSectorsPerTrackBPB * nHeadsBPB;
var nCylindersBPB = Math.floor(nSectorsTotalBPB / nSectorsPerCylinderBPB);
var nSectorsHiddenBPB = this.bufDisk.readUInt16LE(offBootSector + DiskAPI.BPB.HIDDEN_SECS);
var nCylindersBPB = (nSectorsHiddenBPB + nSectorsTotalBPB) / nSectorsPerCylinderBPB;
if (diskFormat) {
if (nCylinders != nCylindersBPB) {
DiskDump.logWarning("BPB cylinders (" + nCylindersBPB + ") do not match actual cylinders (" + nCylinders + ")");
if (nCylinders - nCylindersBPB == 1) {
DiskDump.logWarning("the BIOS may have reserved the last cylinder for diagnostics");
}
}
if (nHeads != nHeadsBPB) {
DiskDump.logWarning("BPB heads (" + nHeadsBPB + ") do not match actual heads (" + nHeads + ")");

View file

@ -645,15 +645,17 @@ class Computer extends Component {
if (!data) {
/*
* This is a hack that makes it possible for a machine whose ID has been
* supplemented with a suffix (a single letter or digit) to find object IDs
* in states created from a machine without the suffix.
* supplemented with a hyphenated numeric suffix to find object IDs in states
* created from a machine without such a suffix.
*
* For example, if a state file was created from a machine with ID "ibm5160"
* but the current machine is "ibm5160a", this attempts a second lookup with
* but the current machine is "ibm5160-1", this attempts a second lookup with
* "ibm5160", enabling us to find objects that match the original machine ID
* (eg, "ibm5160.romEGA").
*
* See /devices/pcx86/machine/5160/ega/640kb/array/ for examples of this.
*/
data = stateComputer.get(component.id.replace(/[a-z0-9]\./i, '.'));
data = stateComputer.get(component.id.replace(/-[0-9]+\./i, '.'));
}
}

View file

@ -864,7 +864,7 @@ function LB(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms)
function QB(a,b){var c=new Zf(a,"1.35.1",RB);if(c.load()&&SB(c)){var d=c.get(TB),e=b?b.get(TB):"unknown";d!=e&&(a.Da("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}l=KB.prototype;
l.Mf=function(a){void 0===a&&(a=this.A||(this.L?UB:MB));if(!this.B){this.B++;var b=!1,c=!1;this.Y=!1;var d=this.M||new Zf(this,"1.35.1");if(a==VB)b=!0;else if(a>MB){if(d.load(this.L)){this.F=new Zf(this,"1.35.1",WB);this.F.load()&&(XB(this,d)&&(a=YB),ZB(this.F));this.F.set(TB,Ea());$B(this.F);var e=this.A&&!this.I;if(a==UB||ub("Click OK to restore the previous PCx86 machine state, or CANCEL to reset the machine.")){if(c=SB(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==f&&
"no machine state"!=g?(this.Da("Error: "+g),"unable to verify user"==g&&(Va(aC,""),this.C=null)):this.P(f+": "+g),ZB(d),d.load()?(c=SB(d),e=!0):c=!1))}e&&QB(this,c?d:null)}else a==YB&&d.clear()}else QB(this);delete this.L;delete this.M}e=vb(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.H&&(c=bC(this,g,d,b,c));b=[d,a,c];a!=VB?PB(this,this.oj,b):this.oj(b)}};
function bC(a,b,c,d,e){if(!b.da.Yb){b.da.Yb=!0;if(b.Xb){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Xb(f,d)&&f&&(b.Da("Unable to restore hardware state")&&(a.W&&!a.Z?(c.clear(),a.A=MB,window&&window.location.reload()):a.Y=!0),b.Xb(null),e=!1)}if(!d&&b.zj)for(a=b.zj.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
function bC(a,b,c,d,e){if(!b.da.Yb){b.da.Yb=!0;if(b.Xb){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/-[0-9]+\./i,"."))));"string"===typeof f&&(f=null);!b.Xb(f,d)&&f&&(b.Da("Unable to restore hardware state")&&(a.W&&!a.Z?(c.clear(),a.A=MB,window&&window.location.reload()):a.Y=!0),b.Xb(null),e=!1)}if(!d&&b.zj)for(a=b.zj.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
l.oj=function(a){var b=a[0],c=0>a[1];a=a[2];this.ga=!0;this.da.Yb=!0;var d=this.na.power;d&&(d.textContent="Shutdown");this.H&&(bC(this,this.H,b,c,a),this.H.mf());this.Y&&(XB(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.B=0};
function XB(a,b){if(!a.da.Tf){if(ub("There may be a problem with your PCx86 machine.\n\nTo help us diagnose it, click OK to send this PCx86 machine state to http://www.pcjs.org.")){var c=a.C||"";b=b.toString();var d={app:"PCx86",ver:"1.35.1"};d.url=a.ea;d.user=c;d.type="bug";d.data=b;Na("http://www.pcjs.org/api/v1/report",d,!0)}return!0}return!1}
function rB(a,b,c){var d,e="none";if(a.B)return null;a.B--;var f=new Zf(a,"1.35.1"),g=new Zf(a,"1.35.1",RB),h=Ea();g.set(TB,h);f.set(TB,h);f.set(cC,"1.35.1");f.set(dC,window?window.location.href:null);f.set(eC,Pa());a.H&&a.H.Wb&&(c&&a.H.Jb(),d=a.H.Wb(b,c),"object"===typeof d&&f.set(a.H.id,d),c&&(a.H.da.Yb=!1,!1===d&&(e=null)));for(var h=vb(a.id),k=0;k<h.length;k++){var m=h[k];m.da.Yb&&(m.Wb&&(d=m.Wb(b,c),"object"===typeof d&&f.set(m.id,d)),c&&(m.da.Yb=!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.C&&fC(a,

File diff suppressed because one or more lines are too long

View file

@ -74457,15 +74457,17 @@ class Computer extends Component {
if (!data) {
/*
* This is a hack that makes it possible for a machine whose ID has been
* supplemented with a suffix (a single letter or digit) to find object IDs
* in states created from a machine without the suffix.
* supplemented with a hyphenated numeric suffix to find object IDs in states
* created from a machine without such a suffix.
*
* For example, if a state file was created from a machine with ID "ibm5160"
* but the current machine is "ibm5160a", this attempts a second lookup with
* but the current machine is "ibm5160-1", this attempts a second lookup with
* "ibm5160", enabling us to find objects that match the original machine ID
* (eg, "ibm5160.romEGA").
*
* See /devices/pcx86/machine/5160/ega/640kb/array/ for examples of this.
*/
data = stateComputer.get(component.id.replace(/[a-z0-9]\./i, '.'));
data = stateComputer.get(component.id.replace(/-[0-9]+\./i, '.'));
}
}

View file

@ -667,7 +667,7 @@ function Qu(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms)
function Vu(a,b){var c=new Te(a,"1.35.1",Wu);if(c.load()&&Xu(c)){var d=c.get(Yu),e=b?b.get(Yu):"unknown";d!=e&&(a.wa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}k=Pu.prototype;
k.af=function(a){void 0===a&&(a=this.A||(this.K?Zu:Ru));if(!this.C){this.C++;var b=!1,c=!1;this.W=!1;var d=this.L||new Te(this,"1.35.1");if(a==$u)b=!0;else if(a>Ru){if(d.load(this.K)){this.F=new Te(this,"1.35.1",av);this.F.load()&&(bv(this,d)&&(a=cv),dv(this.F));this.F.set(Yu,wa());ev(this.F);var e=this.A&&!this.H;if(a==Zu||ab("Click OK to restore the previous PCx86 machine state, or CANCEL to reset the machine.")){if(c=Xu(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==f&&
"no machine state"!=g?(this.wa("Error: "+g),"unable to verify user"==g&&(Ja(fv,""),this.B=null)):this.Zb(f+": "+g),dv(d),d.load()?(c=Xu(d),e=!0):c=!1))}e&&Vu(this,c?d:null)}else a==cv&&d.clear()}else Vu(this);delete this.K;delete this.L}e=bb(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.U&&(c=gv(this,g,d,b,c));b=[d,a,c];a!=$u?Uu(this,this.mi,b):this.mi(b)}};
function gv(a,b,c,d,e){if(!b.aa.Pb){b.aa.Pb=!0;if(b.Ob){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ob(f,d)&&f&&(b.wa("Unable to restore hardware state")&&(a.V&&!a.X?(c.clear(),a.A=Ru,window&&window.location.reload()):a.W=!0),b.Ob(null),e=!1)}if(!d&&b.vi)for(a=b.vi.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
function gv(a,b,c,d,e){if(!b.aa.Pb){b.aa.Pb=!0;if(b.Ob){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/-[0-9]+\./i,"."))));"string"===typeof f&&(f=null);!b.Ob(f,d)&&f&&(b.wa("Unable to restore hardware state")&&(a.V&&!a.X?(c.clear(),a.A=Ru,window&&window.location.reload()):a.W=!0),b.Ob(null),e=!1)}if(!d&&b.vi)for(a=b.vi.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
k.mi=function(a){var b=a[0],c=0>a[1];a=a[2];this.ea=!0;this.aa.Pb=!0;var d=this.ia.power;d&&(d.textContent="Shutdown");this.U&&(gv(this,this.U,b,c,a),this.U.Fe());this.W&&(bv(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.C=0};
function bv(a,b){if(!a.aa.hf){if(ab("There may be a problem with your PCx86 machine.\n\nTo help us diagnose it, click OK to send this PCx86 machine state to http://www.pcjs.org.")){var c=a.B||"";b=b.toString();var d={app:"PCx86",ver:"1.35.1"};d.url=a.ca;d.user=c;d.type="bug";d.data=b;Ea("http://www.pcjs.org/api/v1/report",d,!0)}return!0}return!1}
function hv(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new Te(a,"1.35.1"),g=new Te(a,"1.35.1",Wu),h=wa();g.set(Yu,h);f.set(Yu,h);f.set(iv,"1.35.1");f.set(jv,window?window.location.href:null);f.set(kv,window?window.navigator.userAgent:"");a.U&&a.U.Nb&&(c&&Tc(a.U),d=a.U.Nb(b,c),"object"===typeof d&&f.set(a.U.id,d),c&&(a.U.aa.Pb=!1,!1===d&&(e=null)));for(var h=bb(a.id),l=0;l<h.length;l++){var m=h[l];m.aa.Pb&&(m.Nb&&(d=m.Nb(b,c),"object"===typeof d&&f.set(m.id,d)),c&&(m.aa.Pb=!1,!1===d&&(e=

File diff suppressed because one or more lines are too long