diff --git a/disks/pc/README.md b/disks/pc/README.md index 66971122f..c2ca6fba2 100644 --- a/disks/pc/README.md +++ b/disks/pc/README.md @@ -32,8 +32,8 @@ that automatically run the software. ### MS-DOS (Microsoft) -* MS-DOS 1.25 -* MS-DOS 2.00 +* [MS-DOS 1.25](/disks/pc/dos/microsoft/1.25/) +* [MS-DOS 2.00](/disks/pc/dos/microsoft/2.00/) * [MS-DOS 3.20](/disks/pc/dos/microsoft/3.20/) * MS-DOS 3.21 * MS-DOS 3.30 diff --git a/disks/pc/dos/microsoft/1.25/README.md b/disks/pc/dos/microsoft/1.25/README.md new file mode 100644 index 000000000..7d62b559e --- /dev/null +++ b/disks/pc/dos/microsoft/1.25/README.md @@ -0,0 +1,109 @@ +--- +layout: page +title: MS-DOS 1.25 +permalink: /disks/pc/dos/microsoft/1.25/ +machines: + - type: pc-dbg + id: ibm5150-msdos125 + config: /devices/pc/machine/5150/mda/64kb/debugger/machine.xml + automount: + A: + path: /disks/pc/dos/microsoft/1.25/MSDOS-COMPAQ-111.json +--- + +MS-DOS 1.25 +--- + +There was no MS-DOS 1.25 *per se*. Instead, there were assorted OEM releases of MS-DOS based on version 1.25. + +Here, we have two such releases: + +* MS-DOS v1.25 (Compaq v1.11) +* MS-DOS v1.25 (Compaq v1.12) + +Directory listings of each of these 360Kb diskettes are provided [below](#directory-listings). + +{% include machine.html id="ibm5150-msdos125" %} + +Directory Listings +--- + +### Directory of MS-DOS v1.25 (Compaq v1.11) Disk + + Volume in drive A has no label + + Directory of A:\ + + IOSYS COM 1998 05-13-83 12:00p + MSDOS COM 6136 05-13-83 12:00p + COMMAND COM 4959 05-13-83 12:00p + LINK EXE 41856 05-13-83 12:00p + EDLIN COM 2432 05-13-83 12:00p + SYS COM 645 05-13-83 12:00p + DEBUG COM 6619 05-13-83 12:00p + BASIC COM 549 05-13-83 12:00p + BASICA COM 547 05-13-83 12:00p + FORMAT COM 3296 05-13-83 12:00p + EXE2BIN EXE 1280 05-13-83 12:00p + DISKCOPY COM 1812 05-13-83 12:00p + DISKCOMP COM 1291 05-13-83 12:00p + MODE COM 1800 05-13-83 12:00p + CHKDSK COM 1720 05-13-83 12:00p + COMP COM 1484 05-13-83 12:00p + WORDS 1242 05-13-83 12:00p + BASICA EXE 54272 05-13-83 12:00p + TEST EXE 18560 05-13-83 12:00p + DEMO BAT 14 05-13-83 12:00p + DEMO BAS 7808 05-13-83 12:00p + DEMO1 BAS 17920 05-13-83 12:00p + DEMO2 BAS 17792 05-13-83 12:00p + DEMO3 BAS 21120 05-13-83 12:00p + DEMO4 BAS 6528 05-13-83 12:00p + JUGGLER DAT 16128 05-13-83 12:00p + USA DAT 16128 05-13-83 12:00p + INTEREST BAS 384 05-13-83 12:00p + 28 file(s) 256320 bytes + + Total files listed: + 28 file(s) 256320 bytes + 53248 bytes free + +### Directory of MS-DOS v1.25 (Compaq v1.12) Disk + + Volume in drive A has no label + + Directory of A:\ + + IOSYS COM 1998 11-28-83 12:00p + MSDOS COM 6140 11-28-83 12:00p + COMMAND COM 4959 11-28-83 12:00p + LINK EXE 41856 11-28-83 12:00p + EDLIN COM 2432 11-28-83 12:00p + SYS COM 645 11-28-83 12:00p + DEBUG COM 6619 11-28-83 12:00p + BASIC COM 549 11-28-83 12:00p + BASICA COM 547 11-28-83 12:00p + FORMAT COM 3376 11-28-83 12:00p + EXE2BIN EXE 1280 11-28-83 12:00p + DISKCOPY COM 1946 11-28-83 12:00p + DISKCOMP COM 1433 11-28-83 12:00p + MODE COM 1800 11-28-83 12:00p + CHKDSK COM 1770 11-28-83 12:00p + COMP COM 1484 11-28-83 12:00p + WORDS 1242 11-28-83 12:00p + BASICA EXE 54304 11-28-83 12:00p + TEST EXE 18560 11-28-83 12:00p + DEMO BAT 14 11-28-83 12:00p + DEMO BAS 7936 11-28-83 12:00p + DEMO1 BAS 18048 11-28-83 12:00p + DEMO2 BAS 17920 11-28-83 12:00p + DEMO3 BAS 21248 11-28-83 12:00p + DEMO4 BAS 6656 11-28-83 12:00p + JUGGLER DAT 16128 11-28-83 12:00p + USA DAT 16128 11-28-83 12:00p + INTEREST BAS 384 11-28-83 12:00p + 28 file(s) 257402 bytes + + Total files listed: + 28 file(s) 257402 bytes + 52224 bytes free diff --git a/disks/pc/dos/microsoft/2.00/README.md b/disks/pc/dos/microsoft/2.00/README.md new file mode 100644 index 000000000..304e9db02 --- /dev/null +++ b/disks/pc/dos/microsoft/2.00/README.md @@ -0,0 +1,78 @@ +--- +layout: page +title: MS-DOS 2.00 +permalink: /disks/pc/dos/microsoft/2.00/ +machines: + - type: pc + id: ibm5160-msdos200 + config: /devices/pc/machine/5160/mda/256kb/machine.xml + automount: + A: + path: /disks/pc/dos/microsoft/2.00/MSDOS-COMPAQ-212.json +--- + +MS-DOS 2.00 +--- + +There was no MS-DOS 2.00 *per se*. Instead, there were assorted OEM releases of MS-DOS based on version 2.00. + +Here, we have one such release: + +* MS-DOS v2.00 (Compaq v2.12) + +A directory listing of this 360Kb diskette is provided below. + +{% include machine.html id="ibm5160-msdos200" %} + +### Directory of MS-DOS v2.00 (Compaq v2.12) Disk + + Volume in drive A has no label + + Directory of A:\ + + IBMBIO COM 5120 01-01-80 12:00p + IBMDOS COM 17408 01-01-80 12:00p + COMMAND COM 18272 12-04-84 12:00p + CLOCK SYS 947 12-04-84 12:00p + ENHDISK SYS 1521 12-04-84 12:00p + ANSI SYS 1593 12-04-84 12:00p + FORMAT COM 6560 12-04-84 12:00p + CHKDSK COM 6468 12-04-84 12:00p + SYS COM 1600 12-04-84 12:00p + DISKCOPY COM 2122 12-04-84 12:00p + DISKCOMP COM 1850 12-04-84 12:00p + COMP COM 2259 12-04-84 12:00p + EDLIN COM 8096 12-04-84 12:00p + MODE COM 3342 12-04-84 12:00p + FDISK COM 5968 12-04-84 12:00p + BACKUP COM 5129 12-04-84 12:00p + RESTORE COM 5308 12-04-84 12:00p + PRINT COM 4506 12-04-84 12:00p + RECOVER COM 2439 12-04-84 12:00p + ASSIGN COM 946 12-04-84 12:00p + TREE COM 2122 12-04-84 12:00p + GRAPHICS COM 702 12-04-84 12:00p + SORT EXE 1632 12-04-84 12:00p + FIND EXE 6331 12-04-84 12:00p + MORE COM 4380 12-04-84 12:00p + BASIC COM 1078 12-04-84 12:00p + BASICA COM 1076 12-04-84 12:00p + BASICA EXE 64272 12-04-84 12:00p + EXE2BIN EXE 1649 12-04-84 12:00p + LINK EXE 42368 12-04-84 12:00p + DEBUG COM 12171 12-04-84 12:00p + DEMO BAT 14 12-04-84 12:00p + DEMO BAS 5447 12-04-84 12:00p + DEMO1 BAS 15114 12-04-84 12:00p + DEMO2 BAS 15261 12-04-84 12:00p + DEMO3 BAS 20987 12-04-84 12:00p + DEMO4 BAS 4977 12-04-84 12:00p + USA DAT 16128 12-04-84 12:00p + TEST EXE 21438 12-04-84 12:00p + INTEREST BAS 384 12-04-84 12:00p + WORDS 1306 12-04-84 12:00p + 41 file(s) 340291 bytes + + Total files listed: + 41 file(s) 340291 bytes + 2048 bytes free diff --git a/modules/pcjs/lib/cpu.js b/modules/pcjs/lib/cpu.js index 2f5e4f306..1f26bd313 100644 --- a/modules/pcjs/lib/cpu.js +++ b/modules/pcjs/lib/cpu.js @@ -1025,6 +1025,14 @@ CPU.prototype.runCPU = function(fOnClick) catch(exception) { if (typeof exception != "number") throw exception; if (MAXDEBUG) this.println("CPU exception " + str.toHexByte(exception)); + /* + * TODO: If we ever get into a situation where every single instruction is generating a fault + * (eg, if an 8088 executes opcode 0xFF 0xFF, which is incorrectly routed to fnFault() instead + * of fnGRPUndefined()), the browser may hang because we're failing to yield often enough. + * This is likely because the thrown exceptions are taking MUCH longer than normal instructions, + * throwing off our burst calculations. We need to either adjust the burst or break out of the + * DO-WHILE loop on every exception. + */ } /* diff --git a/modules/pcjs/lib/x86func.js b/modules/pcjs/lib/x86func.js index 0b55e923a..99919c724 100644 --- a/modules/pcjs/lib/x86func.js +++ b/modules/pcjs/lib/x86func.js @@ -3776,6 +3776,18 @@ X86.fnXORw = function(dst, src) */ X86.fnGRPFault = function(dst, src) { + /* + * This should NEVER be called on 8086/8088 CPUs, and yet we preset some of the handlers in aOpGrpPOPw, + * aOpGrp4b, and aOpGrp4w to call it. initProcessor() DOES patch aOpGrp4b[0x07] and aOpGrp4w[0x07] to + * fnGRPInvalid, but that's it. + * + * However, given the infrequency of this call, it's simpler to continue presetting all the handlers in + * aOpGrpPOPw to their post-8086 default, and deal with the appropriate 8086 behavior here (which for now, + * is to call fnGRPUndefined instead). + */ + if (this.model < X86.MODEL_80186) { + return X86.fnGRPUndefined.call(this, dst, src); + } X86.fnFault.call(this, X86.EXCEPTION.GP_FAULT, 0); return dst; }; diff --git a/modules/pcjs/lib/x86ops.js b/modules/pcjs/lib/x86ops.js index 7a2bd57d7..fbd1bec5d 100644 --- a/modules/pcjs/lib/x86ops.js +++ b/modules/pcjs/lib/x86ops.js @@ -4342,7 +4342,7 @@ X86.opGRP3w = function() X86.opCLC = function() { this.clearCF(); - this.nStepCycles -= 2; // CLC takes 2 cycles on all CPUs + this.nStepCycles -= 2; // CLC takes 2 cycles on all CPUs }; /** @@ -4353,7 +4353,7 @@ X86.opCLC = function() X86.opSTC = function() { this.setCF(); - this.nStepCycles -= 2; // STC takes 2 cycles on all CPUs + this.nStepCycles -= 2; // STC takes 2 cycles on all CPUs }; /** @@ -4373,7 +4373,7 @@ X86.opCLI = function() return; } this.clearIF(); - this.nStepCycles -= this.cycleCounts.nOpCyclesCLI; // CLI takes LONGER on an 80286 + this.nStepCycles -= this.cycleCounts.nOpCyclesCLI; // CLI takes LONGER on an 80286 }; /** @@ -4394,7 +4394,7 @@ X86.opSTI = function() } this.setIF(); this.opFlags |= X86.OPFLAG.NOINTR; - this.nStepCycles -= 2; // STI takes 2 cycles on all CPUs + this.nStepCycles -= 2; // STI takes 2 cycles on all CPUs }; /** @@ -4405,7 +4405,7 @@ X86.opSTI = function() X86.opCLD = function() { this.clearDF(); - this.nStepCycles -= 2; // CLD takes 2 cycles on all CPUs + this.nStepCycles -= 2; // CLD takes 2 cycles on all CPUs }; /** @@ -4416,7 +4416,7 @@ X86.opCLD = function() X86.opSTD = function() { this.setDF(); - this.nStepCycles -= 2; // STD takes 2 cycles on all CPUs + this.nStepCycles -= 2; // STD takes 2 cycles on all CPUs }; /** @@ -4655,5 +4655,5 @@ X86.aOpGrp4b = [ X86.aOpGrp4w = [ X86.fnINCw, X86.fnDECw, X86.fnCALLw, X86.fnCALLFdw, // 0xFF(reg=0x0-0x3) - X86.fnJMPw, X86.fnJMPFdw, X86.fnPUSHw, X86.fnGRPFault // 0xFF(reg=0x4-0x7) + X86.fnJMPw, X86.fnJMPFdw, X86.fnPUSHw, X86.fnGRPUndefined // 0xFF(reg=0x4-0x7) ];