Changed the default page "exit" event handler from "onunload" to "pagehide" for iOS; hopefully, auto-resume machines will work better on mobile devices with that change

This commit is contained in:
Jeff Parsons 2017-06-25 08:32:27 -07:00 committed by Jeff Parsons
commit 7457e4e44f
43 changed files with 132 additions and 117 deletions

View file

@ -5,8 +5,8 @@ date: 2015-01-17 11:00:00
category: Features category: Features
permalink: /blog/2015/01/17/ permalink: /blog/2015/01/17/
machines: machines:
- type: pcx86 - id: at-ega-1152k-rev3
id: at-ega-1152k-rev3 type: pcx86
debugger: true debugger: true
uncompiled: true uncompiled: true
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/machine.xml config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/machine.xml

View file

@ -5,8 +5,8 @@ date: 2015-01-28 11:00:00
category: Control Panel category: Control Panel
permalink: /blog/2015/01/28/ permalink: /blog/2015/01/28/
machines: machines:
- type: pcx86 - id: at-ega-1152k-rev3
id: at-ega-1152k-rev3 type: pcx86
debugger: true debugger: true
uncompiled: true uncompiled: true
config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml config: /devices/pcx86/machine/5170/ega/1152kb/rev3/debugger/backtrack/machine.xml

View file

@ -5,8 +5,8 @@ date: 2015-02-22 11:00:00
category: 80386 category: 80386
permalink: /blog/2015/02/22/ permalink: /blog/2015/02/22/
machines: machines:
- type: pcx86 - id: deskpro386
id: deskpro386 type: pcx86
debugger: true debugger: true
uncompiled: true uncompiled: true
config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml

View file

@ -5,8 +5,8 @@ date: 2015-04-16 11:00:00
category: 80386 category: 80386
permalink: /blog/2015/04/16/ permalink: /blog/2015/04/16/
machines: machines:
- type: pcx86 - id: deskpro386
id: deskpro386 type: pcx86
debugger: true debugger: true
uncompiled: true uncompiled: true
config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml config: /devices/pcx86/machine/compaq/deskpro386/ega/2048kb/debugger/machine.xml

View file

@ -5,13 +5,17 @@ date: 2015-07-17 11:00:00
category: Windows 95 category: Windows 95
permalink: /blog/2015/07/17/ permalink: /blog/2015/07/17/
machines: machines:
- type: pcx86 - id: deskpro386
id: deskpro386 type: pcx86
debugger: true debugger: true
state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json
config: /devices/pcx86/machine/compaq/deskpro386/vga/4096kb/debugger/machine.xml 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"}]' drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pcx86/fixed/68mb/win95.json"}]'
autoMount: '' autoMount:
A:
name: None
B:
name: None
--- ---
This week (July 14, 2015) was the 20th anniversary of Windows 95 RTM ("Release To Manufacturing"). So I decided to This week (July 14, 2015) was the 20th anniversary of Windows 95 RTM ("Release To Manufacturing"). So I decided to

View file

@ -5,12 +5,16 @@ date: 2015-09-21 11:00:00
category: Windows 95 category: Windows 95
permalink: /blog/2015/09/21/ permalink: /blog/2015/09/21/
machines: machines:
- type: pcx86 - id: deskpro386
id: deskpro386 type: pcx86
state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json state: /disks/pcx86/windows/win95/4.00.950/deskpro386.json
config: /devices/pcx86/machine/compaq/deskpro386/vga/4096kb/machine.xml 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"}]' drives: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pcx86/fixed/68mb/win95.json"}]'
autoMount: '' autoMount:
A:
name: None
B:
name: None
--- ---
Today, the last serious bug preventing a successful boot of Windows 95 was fixed. I won't bore you with Today, the last serious bug preventing a successful boot of Windows 95 was fixed. I won't bore you with

View file

@ -5,8 +5,8 @@ date: 2015-12-27 11:00:00
category: OS/2 category: OS/2
permalink: /blog/2015/12/27/ permalink: /blog/2015/12/27/
machines: machines:
- type: pcx86 - id: ibm5170
id: ibm5170 type: pcx86
debugger: true debugger: true
config: /devices/pcx86/machine/5170/ega/2048kb/rev3/debugger/machine.xml config: /devices/pcx86/machine/5170/ega/2048kb/rev3/debugger/machine.xml
drives: '[{name:"20Mb Hard Disk",type:2,path:"http://archive.pcjs.org/disks/pcx86/fixed/20mb/IBMOS210-EGA.json"}]' drives: '[{name:"20Mb Hard Disk",type:2,path:"http://archive.pcjs.org/disks/pcx86/fixed/20mb/IBMOS210-EGA.json"}]'

View file

@ -4,8 +4,8 @@ title: The VT100 Terminal
date: 2016-08-03 18:00:00 date: 2016-08-03 18:00:00
permalink: /blog/2016/08/03/ permalink: /blog/2016/08/03/
machines: machines:
- type: pc8080 - id: vt100
id: vt100 type: pc8080
config: /devices/pc8080/machine/vt100/machine.xml config: /devices/pc8080/machine/vt100/machine.xml
--- ---

View file

@ -4,8 +4,8 @@ title: Adventures in Archiving
date: 2017-06-15 22:00:00 date: 2017-06-15 22:00:00
permalink: /blog/2017/06/15/ permalink: /blog/2017/06/15/
machines: machines:
- type: pcx86 - id: ibm5150
id: ibm5150 type: pcx86
config: /devices/pcx86/machine/5150/cga/64kb/machine.xml config: /devices/pcx86/machine/5150/cga/64kb/machine.xml
autoMount: autoMount:
A: A:

View file

@ -3,8 +3,8 @@ layout: page
title: "VisiCalc (1981)" title: "VisiCalc (1981)"
permalink: /apps/pcx86/1981/visicalc/ permalink: /apps/pcx86/1981/visicalc/
machines: machines:
- type: pcx86 - id: ibm5150-visicalc
id: ibm5150-visicalc type: pcx86
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
resume: 1 resume: 1
state: /apps/pcx86/1981/visicalc/state.json state: /apps/pcx86/1981/visicalc/state.json

View file

@ -3,8 +3,8 @@ layout: page
title: "Executive Suite (1982)" title: "Executive Suite (1982)"
permalink: /apps/pcx86/1982/esuite/ permalink: /apps/pcx86/1982/esuite/
machines: machines:
- type: pcx86 - id: ibm5160-esuite
id: ibm5160-esuite type: pcx86
config: /devices/pcx86/machine/5160/mda/256kb/fake188/machine.xml config: /devices/pcx86/machine/5160/mda/256kb/fake188/machine.xml
state: /apps/pcx86/1982/esuite/state.json state: /apps/pcx86/1982/esuite/state.json
--- ---

View file

@ -3,8 +3,8 @@ layout: page
title: "RatBas (1982)" title: "RatBas (1982)"
permalink: /apps/pcx86/1982/ratbas/ permalink: /apps/pcx86/1982/ratbas/
machines: machines:
- type: pcx86 - id: ibm5150-ratbas
id: ibm5150-ratbas type: pcx86
config: /devices/pcx86/machine/5150/cga/256kb/machine.xml config: /devices/pcx86/machine/5150/cga/256kb/machine.xml
autoMount: autoMount:
A: A:

View file

@ -3,8 +3,8 @@ layout: page
title: "Adventures in Math (1983)" title: "Adventures in Math (1983)"
permalink: /apps/pcx86/1983/adventmath/ permalink: /apps/pcx86/1983/adventmath/
machines: machines:
- type: pcx86 - id: ibm5150-adventmath
id: ibm5150-adventmath type: pcx86
config: /devices/pcx86/machine/5150/cga/64kb/machine.xml config: /devices/pcx86/machine/5150/cga/64kb/machine.xml
resume: 1 resume: 1
autoMount: autoMount:

View file

@ -3,8 +3,8 @@ layout: page
title: "Rogue (1985)" title: "Rogue (1985)"
permalink: /apps/pcx86/1985/rogue/ permalink: /apps/pcx86/1985/rogue/
machines: machines:
- type: pcx86 - id: ibm5160-rogue
id: ibm5160-rogue type: pcx86
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
state: /apps/pcx86/1985/rogue/state.json state: /apps/pcx86/1985/rogue/state.json
resume: 1 resume: 1

View file

@ -3,8 +3,8 @@ layout: page
title: "ThinkTank (1987)" title: "ThinkTank (1987)"
permalink: /apps/pcx86/1987/thinktank/ permalink: /apps/pcx86/1987/thinktank/
machines: machines:
- type: pcx86 - id: ibm5160-thinktank
id: ibm5160-thinktank type: pcx86
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
state: /apps/pcx86/1987/thinktank/state.json state: /apps/pcx86/1987/thinktank/state.json
--- ---

View file

@ -3,8 +3,8 @@ layout: page
title: "The Dungeons of Moria (1992)" title: "The Dungeons of Moria (1992)"
permalink: /apps/pcx86/1992/moria/ permalink: /apps/pcx86/1992/moria/
machines: machines:
- type: pcx86 - id: ibm5160-moria55
id: ibm5160-moria55 type: pcx86
config: /devices/pcx86/machine/5160/cga/640kb/machine.xml config: /devices/pcx86/machine/5160/cga/640kb/machine.xml
state: /apps/pcx86/1992/moria/state.json state: /apps/pcx86/1992/moria/state.json
--- ---

View file

@ -17,12 +17,14 @@ A list of all the software available to PCx86 machines can be found in the [IBM
### 1981 ### 1981
* [DONKEY.BAS](1981/donkey/) * [DONKEY.BAS](1981/donkey/)
* [Microsoft Adventure](/disks/pcx86/games/microsoft/adventure/)
* [VisiCalc](1981/visicalc/) * [VisiCalc](1981/visicalc/)
### 1982 ### 1982
* [Executive Suite](1982/esuite/) * [Executive Suite](1982/esuite/)
* [RatBas v2.13](1982/ratbas/) * [RatBas v2.13](1982/ratbas/)
* [Zork I](/disks/pcx86/games/infocom/zork1/)
### 1983 ### 1983

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (32Kb) with Disk Support title: OSI Challenger 1P (32Kb) with Disk Support
permalink: /devices/c1p/machine/32kb/ permalink: /devices/c1p/machine/32kb/
machines: machines:
- type: c1p - id: c1p32kb
id: c1p32kb type: c1p
debugger: true debugger: true
--- ---

View file

@ -5,7 +5,7 @@ permalink: /devices/c1p/machine/8kb/
--- ---
Challenger 1P Machine Configurations with 8Kb Challenger 1P Machine Configurations with 8Kb
--- ---------------------------------------------
Here are some sample C1P Machine Configurations with 8Kb: Here are some sample C1P Machine Configurations with 8Kb:

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (8Kb) with Additional Software title: OSI Challenger 1P (8Kb) with Additional Software
permalink: /devices/c1p/machine/8kb/all/debugger/ permalink: /devices/c1p/machine/8kb/all/debugger/
machines: machines:
- type: c1p - id: c1p8kb
id: c1p8kb type: c1p
debugger: true debugger: true
--- ---

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (8Kb) with Additional Software title: OSI Challenger 1P (8Kb) with Additional Software
permalink: /devices/c1p/machine/8kb/all/ permalink: /devices/c1p/machine/8kb/all/
machines: machines:
- type: c1p - id: c1p8kb
id: c1p8kb type: c1p
--- ---
{% include machine.html id="c1p8kb" %} {% include machine.html id="c1p8kb" %}

View file

@ -3,32 +3,32 @@ layout: page
title: OSI Challenger 1P (8Kb) "Server Array" title: OSI Challenger 1P (8Kb) "Server Array"
permalink: /devices/c1p/machine/8kb/array/ permalink: /devices/c1p/machine/8kb/array/
machines: machines:
- type: c1p - id: osi1
id: osi1 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi2
id: osi2 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi3
id: osi3 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi4
id: osi4 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi5
id: osi5 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi6
id: osi6 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi7
id: osi7 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi8
id: osi8 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
- type: c1p - id: osi9
id: osi9 type: c1p
config: /devices/c1p/machine/8kb/small/machine.xml config: /devices/c1p/machine/8kb/small/machine.xml
redirect_from: redirect_from:
- /configs/c1p/machines/array/ - /configs/c1p/machines/array/

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (8Kb) with Small Display title: OSI Challenger 1P (8Kb) with Small Display
permalink: /devices/c1p/machine/8kb/embed/ permalink: /devices/c1p/machine/8kb/embed/
machines: machines:
- type: c1p - id: c1pEmbed
id: c1pEmbed type: c1p
redirect_from: redirect_from:
- /configs/c1p/machines/8kb/embed/ - /configs/c1p/machines/8kb/embed/
- /demos/c1p/embed.xml/ - /demos/c1p/embed.xml/

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (8Kb) with Large Display title: OSI Challenger 1P (8Kb) with Large Display
permalink: /devices/c1p/machine/8kb/large/debugger/ permalink: /devices/c1p/machine/8kb/large/debugger/
machines: machines:
- type: c1p - id: c1p8kb
id: c1p8kb type: c1p
debugger: true debugger: true
--- ---

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (8Kb) with Large Display title: OSI Challenger 1P (8Kb) with Large Display
permalink: /devices/c1p/machine/8kb/large/ permalink: /devices/c1p/machine/8kb/large/
machines: machines:
- type: c1p - id: c1p8kb
id: c1p8kb type: c1p
redirect_from: redirect_from:
- /configs/c1p/machines/8kb/large/ - /configs/c1p/machines/8kb/large/
- /configs/c1p/machines/8kb/large/machine.xml/ - /configs/c1p/machines/8kb/large/machine.xml/

View file

@ -3,8 +3,8 @@ layout: page
title: OSI Challenger 1P (8Kb) with Small Display title: OSI Challenger 1P (8Kb) with Small Display
permalink: /devices/c1p/machine/8kb/small/ permalink: /devices/c1p/machine/8kb/small/
machines: machines:
- type: c1p - id: c1p8kb
id: c1p8kb type: c1p
--- ---
{% include machine.html id="c1p8kb" %} {% include machine.html id="c1p8kb" %}

View file

@ -5,7 +5,7 @@ permalink: /devices/c1p/machine/
--- ---
Challenger 1P Machine Configurations Challenger 1P Machine Configurations
--- ------------------------------------
Here are some sample C1P Machine Configurations: Here are some sample C1P Machine Configurations:

View file

@ -5,7 +5,7 @@ permalink: /devices/pc8080/machine/
--- ---
PC8080 Machine Configurations PC8080 Machine Configurations
--- -----------------------------
The following 8080-based machines are currently available: The following 8080-based machines are currently available:

View file

@ -5,8 +5,8 @@ permalink: /devices/pc8080/machine/exerciser/
redirect_from: redirect_from:
- /devices/pc8080/machine/test/ - /devices/pc8080/machine/test/
machines: machines:
- type: pc8080 - id: test8080
id: test8080 type: pc8080
debugger: true debugger: true
--- ---

View file

@ -3,8 +3,8 @@ layout: page
title: Space Invaders (1978) title: Space Invaders (1978)
permalink: /devices/pc8080/machine/invaders/ permalink: /devices/pc8080/machine/invaders/
machines: machines:
- type: pc8080 - id: invaders
id: invaders type: pc8080
--- ---
Space Invaders (1978) Space Invaders (1978)

View file

@ -3,8 +3,8 @@ layout: page
title: Space Invaders (1978) with Debugger title: Space Invaders (1978) with Debugger
permalink: /devices/pc8080/machine/invaders/debugger/ permalink: /devices/pc8080/machine/invaders/debugger/
machines: machines:
- type: pc8080 - id: invaders
id: invaders type: pc8080
debugger: true debugger: true
--- ---

View file

@ -3,28 +3,28 @@ layout: page
title: PDP-11/70 "Server Array" title: PDP-11/70 "Server Array"
permalink: /devices/pdp11/machine/1170/array/ permalink: /devices/pdp11/machine/1170/array/
machines: machines:
- type: pdp11 - id: test1170-1
id: test1170a type: pdp11
autoStart: true autoStart: true
config: /devices/pdp11/machine/1170/panel/machine.xml config: /devices/pdp11/machine/1170/panel/machine.xml
- type: pdp11 - id: test1170-2
id: test1170b type: pdp11
autoStart: true autoStart: true
config: /devices/pdp11/machine/1170/panel/machine.xml config: /devices/pdp11/machine/1170/panel/machine.xml
- type: pdp11 - id: test1170-3
id: test1170c type: pdp11
autoStart: true autoStart: true
config: /devices/pdp11/machine/1170/panel/machine.xml config: /devices/pdp11/machine/1170/panel/machine.xml
- type: pdp11 - id: test1170-4
id: test1170d type: pdp11
autoStart: true autoStart: true
config: /devices/pdp11/machine/1170/panel/machine.xml config: /devices/pdp11/machine/1170/panel/machine.xml
--- ---
{% include machine.html id="test1170a" %} {% include machine.html id="test1170-1" %}
{% include machine.html id="test1170b" %} {% include machine.html id="test1170-2" %}
{% include machine.html id="test1170c" %} {% include machine.html id="test1170-3" %}
{% include machine.html id="test1170d" %} {% include machine.html id="test1170-4" %}

View file

@ -3,8 +3,8 @@ layout: page
title: C1Pjs Documentation title: C1Pjs Documentation
permalink: /docs/c1pjs/ permalink: /docs/c1pjs/
machines: machines:
- type: c1p-dbg - id: c1p8kb
id: c1p8kb type: c1p-dbg
config: /devices/c1p/machine/8kb/large/debugger/machine.xml config: /devices/c1p/machine/8kb/large/debugger/machine.xml
redirect_from: redirect_from:
- /c1p/ - /c1p/

View file

@ -3,8 +3,8 @@ layout: page
title: Embedding The C1Pjs Simulator title: Embedding The C1Pjs Simulator
permalink: /docs/c1pjs/embed/ permalink: /docs/c1pjs/embed/
machines: machines:
- type: c1p - id: c1p8kb
id: c1p8kb type: c1p
config: /devices/c1p/machine/8kb/embed/machine.xml config: /devices/c1p/machine/8kb/embed/machine.xml
redirect_from: redirect_from:
- /configs/c1p/embed/ - /configs/c1p/embed/

View file

@ -3,14 +3,14 @@ layout: page
title: PCx86 Documentation title: PCx86 Documentation
permalink: /docs/pcx86/ permalink: /docs/pcx86/
machines: machines:
- type: pcx86 - id: ibm5150
id: ibm5150 type: pcx86
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
resume: 1 resume: 1
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
--- ---
PCx86 Documentation PCx86 Documentation
--- -------------------
[PCx86](/docs/about/pcx86/) is a full-featured [IBM PC and PC-compatible](/devices/pcx86/machine/) emulator written [PCx86](/docs/about/pcx86/) is a full-featured [IBM PC and PC-compatible](/devices/pcx86/machine/) emulator written
entirely in JavaScript. It supports a variety of XT and AT class machines, with processors ranging from the 8088 entirely in JavaScript. It supports a variety of XT and AT class machines, with processors ranging from the 8088

View file

@ -3,13 +3,13 @@ layout: page
title: PCx86 Documentation Examples title: PCx86 Documentation Examples
permalink: /docs/pcx86/examples/ permalink: /docs/pcx86/examples/
machines: machines:
- type: pcx86 - id: example3
id: example3 type: pcx86
config: /docs/pcx86/examples/example3b.xml config: /docs/pcx86/examples/example3b.xml
--- ---
PCx86 Documentation Examples PCx86 Documentation Examples
--- ----------------------------
This folder provides all the self-contained [PCx86](/docs/about/pcx86/) examples described in the This folder provides all the self-contained [PCx86](/docs/about/pcx86/) examples described in the
[Documentation](/docs/pcx86/). [Documentation](/docs/pcx86/).

View file

@ -68,8 +68,9 @@ function Xa(a){if(!Ya){var b,c={};if(window){b||(b=window.location.search.substr
function Za(a,b,c,d){var e=null;b="data:application/"+b+(c?";base64":"")+",";b=Wa("Firefox")?b+(c?a:encodeURIComponent(a)):b+(c?a:encodeURI(a));d&&(e=document.createElement("a"),"string"!=typeof e.download&&(e=null));e?(e.href=b,e.download=d,document.body.appendChild(e),e.click(),document.body.removeChild(e),a="Check your Downloads folder for "+d+"."):(window.open(b),a="Check your browser for a new window/tab containing the requested data"+(d?" ("+d+")":"")+".");return a} function Za(a,b,c,d){var e=null;b="data:application/"+b+(c?";base64":"")+",";b=Wa("Firefox")?b+(c?a:encodeURIComponent(a)):b+(c?a:encodeURI(a));d&&(e=document.createElement("a"),"string"!=typeof e.download&&(e=null));e?(e.href=b,e.download=d,document.body.appendChild(e),e.click(),document.body.removeChild(e),a="Check your Downloads folder for "+d+"."):(window.open(b),a="Check your browser for a new window/tab containing the requested data"+(d?" ("+d+")":"")+".");return a}
function $a(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}function ab(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}function bb(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}} function $a(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}function ab(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}function bb(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}
function eb(a){gb.init.push(a)}function hb(a){if(jb)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){kb(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function lb(a){!jb&&a?(jb=!0,mb&&nb("init"),ob&&nb("show")):jb=a}function nb(a){gb[a]&&hb(gb[a])}var Ya=null,gb={init:[],show:[],exit:[]},mb=!1,ob=!1,jb=!0,Ta=null;bb("onload",function(){mb=!0;hb(gb.init)});bb("onpageshow",function(){ob=!0;hb(gb.show)}); function eb(a){gb.init.push(a)}function hb(a){if(jb)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){kb(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function lb(a){!jb&&a?(jb=!0,mb&&nb("init"),ob&&nb("show")):jb=a}function nb(a){gb[a]&&hb(gb[a])}var Ya=null,gb={init:[],show:[],exit:[]},mb=!1,ob=!1,jb=!0,Ta=null;bb("onload",function(){mb=!0;hb(gb.init)});bb("onpageshow",function(){ob=!0;hb(gb.show)});
bb(Wa("Opera")||Wa("iOS")?"onunload":"onbeforeunload",function(){hb(gb.exit)});function pb(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.zj=b.comment;this.Qk=b;this.exports={};this.na=this.bindings={};a=this.id.indexOf(".");0>a?this.ce=this.id:(this.ye=this.id.substr(0,a),this.ce=this.id.substr(a+1));this.da={ready:!1,qf:!1,bh:!1,Yb:!1,Tf:!1,error:!1};this.rg=null;this.da.error=!1;this.ic=c||0;this.ba=this.H=this.ka=this.pa=this.Je=null;qb.push(this)} bb(Wa("iOS")?"onpagehide":Wa("Opera")?"onunload":"onbeforeunload",function(){hb(gb.exit)});
function sb(a,b,c){tb[a]&&b&&(tb[a][b]=c)}function kb(a){window&&window.alert(a)}function ub(a){var b=!1;window&&(b=window.confirm(a));return b}function vb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<qb.length;b++){var d=qb[b];a&&d.id.indexOf(a)||c.push(d)}return c}function wb(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<qb.length;c++)if(qb[c].id===a)return qb[c]}return null} function pb(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.zj=b.comment;this.Qk=b;this.exports={};this.na=this.bindings={};a=this.id.indexOf(".");0>a?this.ce=this.id:(this.ye=this.id.substr(0,a),this.ce=this.id.substr(a+1));this.da={ready:!1,qf:!1,bh:!1,Yb:!1,Tf:!1,error:!1};this.rg=null;this.da.error=!1;this.ic=c||0;this.ba=this.H=this.ka=this.pa=this.Je=null;qb.push(this)}function sb(a,b,c){tb[a]&&b&&(tb[a][b]=c)}function kb(a){window&&window.alert(a)}
function ub(a){var b=!1;window&&(b=window.confirm(a));return b}function vb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<qb.length;b++){var d=qb[b];a&&d.id.indexOf(a)||c.push(d)}return c}function wb(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<qb.length;c++)if(qb[c].id===a)return qb[c]}return null}
function yb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<qb.length;d++)if(c)c==qb[d]&&(c=null);else if(!(a!=qb[d].type||b&&qb[d].id.indexOf(b)))return qb[d]}return null}function zb(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){kb(c.message+" ("+a+")")}return b}function Ab(a,b,c){var d;b&&(void 0===d&&(d="Panel"),(d=yb(d,a.id))&&(b=d.na[b])&&a.Cb(null,c,b))} function yb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<qb.length;d++)if(c)c==qb[d]&&(c=null);else if(!(a!=qb[d].type||b&&qb[d].id.indexOf(b)))return qb[d]}return null}function zb(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){kb(c.message+" ("+a+")")}return b}function Ab(a,b,c){var d;b&&(void 0===d&&(d="Panel"),(d=yb(d,a.id))&&(b=d.na[b])&&a.Cb(null,c,b))}
function Bb(a,b){b=Cb(b.parentNode,"pcx86-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){var g=f.getAttribute("class");if(g)for(var h=g.split(" "),k=0;k<h.length;k++)switch(g=h[k],g){case "pcx86-binding":(g=zb(f))&&g.binding&&a.Cb(g.type,g.binding,f,g.value),k=h.length}}}} function Bb(a,b){b=Cb(b.parentNode,"pcx86-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){var g=f.getAttribute("class");if(g)for(var h=g.split(" "),k=0;k<h.length;k++)switch(g=h[k],g){case "pcx86-binding":(g=zb(f))&&g.binding&&a.Cb(g.type,g.binding,f,g.value),k=h.length}}}}
function Cb(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c} function Cb(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}

View file

@ -66,7 +66,7 @@ function Ja(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return
function La(a){if(!Ma){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Ma=c}return Ma[a]||Ma[a.toLowerCase()]} function La(a){if(!Ma){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}Ma=c}return Ma[a]||Ma[a.toLowerCase()]}
function Na(a,b,c,d){var e=null;b="data:application/"+b+(c?";base64":"")+",";b=Ka("Firefox")?b+(c?a:encodeURIComponent(a)):b+(c?a:encodeURI(a));d&&(e=document.createElement("a"),"string"!=typeof e.download&&(e=null));e?(e.href=b,e.download=d,document.body.appendChild(e),e.click(),document.body.removeChild(e),a="Check your Downloads folder for "+d+"."):(window.open(b),a="Check your browser for a new window/tab containing the requested data"+(d?" ("+d+")":"")+".");return a} function Na(a,b,c,d){var e=null;b="data:application/"+b+(c?";base64":"")+",";b=Ka("Firefox")?b+(c?a:encodeURIComponent(a)):b+(c?a:encodeURI(a));d&&(e=document.createElement("a"),"string"!=typeof e.download&&(e=null));e?(e.href=b,e.download=d,document.body.appendChild(e),e.click(),document.body.removeChild(e),a="Check your Downloads folder for "+d+"."):(window.open(b),a="Check your browser for a new window/tab containing the requested data"+(d?" ("+d+")":"")+".");return a}
function Oa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Pa(a){Qa.init.push(a)}function Ra(a){if(Sa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){r(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function Ta(a){!Sa&&a?(Sa=!0,Ua&&Va("init"),Wa&&Va("show")):Sa=a}function Va(a){Qa[a]&&Ra(Qa[a])}var Ma=null,Qa={init:[],show:[],exit:[]},Ua=!1,Wa=!1,Sa=!0,Ha=null; function Oa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Pa(a){Qa.init.push(a)}function Ra(a){if(Sa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){r(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function Ta(a){!Sa&&a?(Sa=!0,Ua&&Va("init"),Wa&&Va("show")):Sa=a}function Va(a){Qa[a]&&Ra(Qa[a])}var Ma=null,Qa={init:[],show:[],exit:[]},Ua=!1,Wa=!1,Sa=!0,Ha=null;
Oa("onload",function(){Ua=!0;Ra(Qa.init)});Oa("onpageshow",function(){Wa=!0;Ra(Qa.show)});Oa(Ka("Opera")||Ka("iOS")?"onunload":"onbeforeunload",function(){Ra(Qa.exit)}); Oa("onload",function(){Ua=!0;Ra(Qa.init)});Oa("onpageshow",function(){Wa=!0;Ra(Qa.show)});Oa(Ka("iOS")?"onpagehide":Ka("Opera")?"onunload":"onbeforeunload",function(){Ra(Qa.exit)});
function t(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.vi=b.comment;this.Jj=b;this.exports={};this.ia=this.bindings={};a=this.id.indexOf(".");0>a?this.Ud=this.id:(this.Wd=this.id.substr(0,a),this.Ud=this.id.substr(a+1));this.aa={ready:!1,yf:!1,ng:!1,Pb:!1,hf:!1,error:!1};this.Hf=null;this.aa.error=!1;this.Ea=this.U=this.ma=this.oa=this.Ef=null;Xa.push(this)}function Ya(a,b,c){Za[a]&&b&&(Za[a][b]=c)}function r(a){window&&window.alert(a)} function t(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.vi=b.comment;this.Jj=b;this.exports={};this.ia=this.bindings={};a=this.id.indexOf(".");0>a?this.Ud=this.id:(this.Wd=this.id.substr(0,a),this.Ud=this.id.substr(a+1));this.aa={ready:!1,yf:!1,ng:!1,Pb:!1,hf:!1,error:!1};this.Hf=null;this.aa.error=!1;this.Ea=this.U=this.ma=this.oa=this.Ef=null;Xa.push(this)}function Ya(a,b,c){Za[a]&&b&&(Za[a][b]=c)}function r(a){window&&window.alert(a)}
function ab(a){var b=!1;window&&(b=window.confirm(a));return b}function bb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Xa.length;b++){var d=Xa[b];a&&d.id.indexOf(a)||c.push(d)}return c}function cb(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<Xa.length;c++)if(Xa[c].id===a)return Xa[c]}return null} function ab(a){var b=!1;window&&(b=window.confirm(a));return b}function bb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Xa.length;b++){var d=Xa[b];a&&d.id.indexOf(a)||c.push(d)}return c}function cb(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<Xa.length;c++)if(Xa[c].id===a)return Xa[c]}return null}
function db(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Xa.length;d++)if(c)c==Xa[d]&&(c=null);else if(!(a!=Xa[d].type||b&&Xa[d].id.indexOf(b)))return Xa[d]}return null}function eb(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){r(c.message+" ("+a+")")}return b}function fb(a,b,c){var d;b&&(void 0===d&&(d="Panel"),(d=db(d,a.id))&&(b=d.ia[b])&&a.wb(null,c,b))} function db(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Xa.length;d++)if(c)c==Xa[d]&&(c=null);else if(!(a!=Xa[d].type||b&&Xa[d].id.indexOf(b)))return Xa[d]}return null}function eb(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){r(c.message+" ("+a+")")}return b}function fb(a,b,c){var d;b&&(void 0===d&&(d="Panel"),(d=db(d,a.id))&&(b=d.ia[b])&&a.wb(null,c,b))}

View file

@ -624,15 +624,17 @@ class Computer8080 extends Component {
if (!data) { if (!data) {
/* /*
* This is a hack that makes it possible for a machine whose ID has been * 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 * supplemented with a hyphenated numeric suffix to find object IDs in states
* in states created from a machine without the suffix. * created from a machine without such a suffix.
* *
* For example, if a state file was created from a machine with ID "ibm5160" * 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 * "ibm5160", enabling us to find objects that match the original machine ID
* (eg, "ibm5160.romEGA"). * (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

@ -623,15 +623,17 @@ class ComputerPDP11 extends Component {
if (!data) { if (!data) {
/* /*
* This is a hack that makes it possible for a machine whose ID has been * 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 * supplemented with a hyphenated numeric suffix to find object IDs in states
* in states created from a machine without the suffix. * created from a machine without such a suffix.
* *
* For example, if a state file was created from a machine with ID "ibm5160" * 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 * "ibm5160", enabling us to find objects that match the original machine ID
* (eg, "ibm5160.romEGA"). * (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

@ -995,7 +995,7 @@ Web.onPageEvent('onpageshow', function onPageShow() {
Web.doPageEvent(Web.aPageEventHandlers['show']); Web.doPageEvent(Web.aPageEventHandlers['show']);
}); });
Web.onPageEvent(Web.isUserAgent("Opera") || Web.isUserAgent("iOS")? 'onunload' : 'onbeforeunload', function onPageUnload() { Web.onPageEvent(Web.isUserAgent("iOS")? 'onpagehide' : (Web.isUserAgent("Opera")? 'onunload' : 'onbeforeunload'), function onPageUnload() {
Web.doPageEvent(Web.aPageEventHandlers['exit']); Web.doPageEvent(Web.aPageEventHandlers['exit']);
}); });

View file

@ -3,11 +3,11 @@ layout: page
title: 'Selected Live Demos from "Graphics for the IBM PC"' title: 'Selected Live Demos from "Graphics for the IBM PC"'
permalink: /pubs/pc/programming/Graphics_for_the_IBM_PC/demos/ permalink: /pubs/pc/programming/Graphics_for_the_IBM_PC/demos/
machines: machines:
- type: pcx86 - id: xt-cga-256k-1
id: xt-cga-256k-1 type: pcx86
state: 02-03.json state: 02-03.json
- type: pcx86 - id: xt-cga-256k-2
id: xt-cga-256k-2 type: pcx86
state: 04-01.json state: 04-01.json
--- ---

View file

@ -3,8 +3,8 @@ layout: page
title: VGA "Black Book" Tests title: VGA "Black Book" Tests
permalink: /tests/pcx86/vga/ permalink: /tests/pcx86/vga/
machines: machines:
- type: pcx86 - id: deskpro386
id: deskpro386 type: pcx86
debugger: true debugger: true
config: /devices/pcx86/machine/compaq/deskpro386/vga/2048kb/debugger/machine.xml config: /devices/pcx86/machine/compaq/deskpro386/vga/2048kb/debugger/machine.xml
autoMount: autoMount:
@ -15,7 +15,7 @@ machines:
--- ---
VGA "Black Book" Tests VGA "Black Book" Tests
--- ----------------------
To aid in the development of PCjs VGA support, I've added some VGA tests to the project. To aid in the development of PCjs VGA support, I've added some VGA tests to the project.
For now, the only "tests" are samples taken directly from For now, the only "tests" are samples taken directly from