diff --git a/devices/pc/machine/5160/mda/256kb/fake188/debugger/machine.xml b/devices/pc/machine/5160/mda/256kb/fake188/debugger/machine.xml
index 81c127f5c..19a2bd6e8 100644
--- a/devices/pc/machine/5160/mda/256kb/fake188/debugger/machine.xml
+++ b/devices/pc/machine/5160/mda/256kb/fake188/debugger/machine.xml
@@ -25,8 +25,9 @@
- Load
+ Download
+
diff --git a/devices/pc/machine/5160/mda/256kb/fake188/machine.xml b/devices/pc/machine/5160/mda/256kb/fake188/machine.xml
index 3debb20d1..a3d727ffc 100644
--- a/devices/pc/machine/5160/mda/256kb/fake188/machine.xml
+++ b/devices/pc/machine/5160/mda/256kb/fake188/machine.xml
@@ -14,7 +14,7 @@
Run
-
+
None
@@ -25,8 +25,9 @@
- Load
-
+ Download
+
+
diff --git a/disks/pc/dos/microsoft/4.0M/README.md b/disks/pc/dos/microsoft/4.0M/README.md
index 192dbcfb9..66b569871 100644
--- a/disks/pc/dos/microsoft/4.0M/README.md
+++ b/disks/pc/dos/microsoft/4.0M/README.md
@@ -13,4 +13,4 @@ differentiate these disk images from those of the official MS-DOS 4.00, released
The [IBM Model 5160](/devices/pc/machine/) machine configuration below boots MS-DOS 4.0M. To access the MS-DOS
"Session Manager" after it's booted, tap the **Alt** key.
-[IBM Model 5160](/devices/pc/machine/5160/cga/640kb/dos400m/ "PCjs:ibm5160:::debugger")
\ No newline at end of file
+[IBM Model 5160](/devices/pc/machine/5160/cga/640kb/dos400m/ "PCjs:ibm5160:::debugger")
diff --git a/disks/pc/dos/microsoft/4.0M/manifest.xml b/disks/pc/dos/microsoft/4.0M/manifest.xml
index 7a98c3977..0742414ad 100644
--- a/disks/pc/dos/microsoft/4.0M/manifest.xml
+++ b/disks/pc/dos/microsoft/4.0M/manifest.xml
@@ -7,7 +7,6 @@
Operating System
Microsoft
-
MS-DOS 4.0M (Disk 1)
@@ -18,4 +17,4 @@
Disk 2 with unpatched LINK.EXE
The designation "4.0M" is not an official version number; we use it only to differentiate this version of MS-DOS from the "non-multitasking" version.
-
\ No newline at end of file
+
diff --git a/disks/pc/library.xml b/disks/pc/library.xml
index 3dd6bdd0a..f83289da5 100644
--- a/disks/pc/library.xml
+++ b/disks/pc/library.xml
@@ -1,5 +1,5 @@
-
+
None
diff --git a/docs/pcjs/demos/pc-dbg.js b/docs/pcjs/demos/pc-dbg.js
index e42e42394..f26ea70dc 100644
--- a/docs/pcjs/demos/pc-dbg.js
+++ b/docs/pcjs/demos/pc-dbg.js
@@ -604,7 +604,7 @@ k.Yb=function(a){return a&&this.save?this.save():!0};k.reset=function(){this.Hd(
k.Hd=function(a){var b=0,c,d=!0;void 0===a&&(a=[0,0,128,Array(9),0,0,0,[]]);this.gb=a[b++];b++;this.Da=a[b++];this.cc=a[b++];this.tb=a[b++];this.eb=a[b++];this.zf=a[b++];var e=a[b++];c=a[b++];null!=c&&(this.uc=c);void 0===this.Ea&&(this.Qi=4,this.oa&&(this.Qi=Fi(this.oa)),this.Ea=Array(4));for(c=0;ca.za.restore(g)&&(e=!1);e&&a.za&&void 0!==a.ab&&(a.Sa=a.za.seek(a.mb,a.Na,a.Wa));return e};k.Pj=function(){for(var a=0,b=[],c=0;ca.za.restore(g)&&(e=!1);e&&a.za&&void 0!==a.ab&&(a.Sa=a.za.seek(a.mb,a.Na,a.Wa));return e};k.Pj=function(){for(var a=0,b=[],c=0;ca.ta.restore(h)&&(e=!1);e&&a.ta&&void 0!==a.Ya&&(a.Ka=a.ta.seek(a.ib,a.Ja,a.Va));return e};k.$i=function(){for(var a=0,b=[],c=0;ca.ta.restore(h)&&(e=!1);e&&a.ta&&void 0!==a.Ya&&(a.Ka=a.ta.seek(a.ib,a.Ja,a.Va));return e};k.$i=function(){for(var a=0,b=[],c=0;c 0? sBaseName.substr(i+1) : "");
+ var sBaseExt = ((i = sBaseName.lastIndexOf('.')) > 0? sBaseName.substr(i+1) : "").toLowerCase();
var sTrailingChar = req.path.slice(-1);
if (!fServerDebug && !net.hasParm(net.GORT_COMMAND, net.GORT_DEBUG, req)) {
@@ -531,7 +534,7 @@ HTMLOut.filter = function(req, res, next)
* folders with trailing slashes.
*/
if (asNonDirectories.indexOf(sBaseName) < 0) {
- if (sTrailingChar != '/' || sBaseName.match(/\.[^0-9]+[^Ma-z]?$/)) {
+ if (sTrailingChar != '/') {
HTMLOut.logDebug('HTMLOut.filter("' + sBaseName + '"): passing static file request to next()');
next();
return;
@@ -1052,7 +1055,7 @@ HTMLOut.prototype.getDirList = function(sToken, sIndent, aParms)
var fDir = false;
if (sURL == '/' || sBaseName == "..") {
fDir = true;
- } else if (asNonDirectories.indexOf(sBaseName) < 0 && (iExt < 0 || sBaseName.match(/\.[0-9]+[Ma-z]?$/))) {
+ } else if (asNonDirectories.indexOf(sBaseName) < 0 && (iExt < 0 || sBaseName.match(/\.[0-9]+[Ma-c]?$/))) {
fDir = true;
sURL += '/';
}
diff --git a/my_modules/pcjs-client/lib/fdc.js b/my_modules/pcjs-client/lib/fdc.js
index 6ea6ba61d..30397342b 100644
--- a/my_modules/pcjs-client/lib/fdc.js
+++ b/my_modules/pcjs-client/lib/fdc.js
@@ -931,6 +931,8 @@ FDC.prototype.initDrive = function(drive, iDrive, data)
}
var deltas = data[i++];
+ if (deltas == 102) deltas = false; // v1.02 backward-compatibility
+
if (typeof deltas == "boolean") {
var fLocal = deltas;
var sDisketteName = data[i++];
diff --git a/versions/pcjs/1.15.9/pc-dbg.js b/versions/pcjs/1.15.9/pc-dbg.js
index e42e42394..f26ea70dc 100644
--- a/versions/pcjs/1.15.9/pc-dbg.js
+++ b/versions/pcjs/1.15.9/pc-dbg.js
@@ -604,7 +604,7 @@ k.Yb=function(a){return a&&this.save?this.save():!0};k.reset=function(){this.Hd(
k.Hd=function(a){var b=0,c,d=!0;void 0===a&&(a=[0,0,128,Array(9),0,0,0,[]]);this.gb=a[b++];b++;this.Da=a[b++];this.cc=a[b++];this.tb=a[b++];this.eb=a[b++];this.zf=a[b++];var e=a[b++];c=a[b++];null!=c&&(this.uc=c);void 0===this.Ea&&(this.Qi=4,this.oa&&(this.Qi=Fi(this.oa)),this.Ea=Array(4));for(c=0;ca.za.restore(g)&&(e=!1);e&&a.za&&void 0!==a.ab&&(a.Sa=a.za.seek(a.mb,a.Na,a.Wa));return e};k.Pj=function(){for(var a=0,b=[],c=0;ca.za.restore(g)&&(e=!1);e&&a.za&&void 0!==a.ab&&(a.Sa=a.za.seek(a.mb,a.Na,a.Wa));return e};k.Pj=function(){for(var a=0,b=[],c=0;ca.ta.restore(h)&&(e=!1);e&&a.ta&&void 0!==a.Ya&&(a.Ka=a.ta.seek(a.ib,a.Ja,a.Va));return e};k.$i=function(){for(var a=0,b=[],c=0;ca.ta.restore(h)&&(e=!1);e&&a.ta&&void 0!==a.Ya&&(a.Ka=a.ta.seek(a.ib,a.Ja,a.Va));return e};k.$i=function(){for(var a=0,b=[],c=0;c