Added a temporary fix to PUSH operations to ensure that 16-bit pushes wrap around 64K boundaries (TODO: a 16-bit PUSH at offset 0x0001 or a POP at offset 0xFFFF must either wrap or fault as appropriate)

This commit is contained in:
Jeff Parsons 2017-07-19 23:24:18 -07:00 • committed by Jeff Parsons
commit 308bd75af4
10 changed files with 205 additions and 184 deletions

View file

@ -2,6 +2,19 @@
<fdc id="fdcNEC" pos="left" padLeft="8px" padBottom="8px">
<control type="list" binding="listDrives"/>
<control type="list" binding="listDisks">
<disk path="/disks/pcx86/dos/ibm/0.90/PCDOS090.json">PC-DOS 0.90</disk>
<disk path="/disks/pcx86/dos/ibm/1.00/PCDOS100.json">PC-DOS 1.00</disk>
<disk path="/disks/pcx86/dos/ibm/1.10/PCDOS110.json">PC-DOS 1.10</disk>
<disk path="/disks/pcx86/dos/ibm/2.00/PCDOS200-DISK1.json">PC-DOS 2.00 (Disk 1)</disk>
<disk path="/disks/pcx86/dos/ibm/2.00/PCDOS200-DISK2.json">PC-DOS 2.00 (Disk 2)</disk>
<disk path="/disks/pcx86/dos/ibm/2.10/PCDOS210-DISK1.json">PC-DOS 2.10 (Disk 1)</disk>
<disk path="/disks/pcx86/dos/ibm/2.10/PCDOS210-DISK2.json">PC-DOS 2.10 (Disk 2)</disk>
<disk path="/disks/pcx86/dos/ibm/3.00/PCDOS300-DISK1.json">PC-DOS 3.00 (Disk 1)</disk>
<disk path="/disks/pcx86/dos/ibm/3.00/PCDOS300-DISK2.json">PC-DOS 3.00 (Disk 2)</disk>
<disk path="/disks/pcx86/dos/ibm/3.10/PCDOS310-DISK1.json">PC-DOS 3.10 (Disk 1)</disk>
<disk path="/disks/pcx86/dos/ibm/3.10/PCDOS310-DISK2.json">PC-DOS 3.10 (Disk 2)</disk>
<disk path="/disks/pcx86/dos/ibm/3.20/PCDOS320-DISK1.json">PC-DOS 3.20 (Disk 1)</disk>
<disk path="/disks/pcx86/dos/ibm/3.20/PCDOS320-DISK2.json">PC-DOS 3.20 (Disk 2)</disk>
<disk path="/disks/pcx86/dos/microsoft/3.20/MSDOS320-DISK1.json">MS-DOS 3.20 (Disk 1)</disk>
<disk path="/disks/pcx86/dos/microsoft/3.20/MSDOS320-DISK2.json">MS-DOS 3.20 (Disk 2)</disk>
<disk path="/disks/pcx86/dos/microsoft/3.20/MSDOS320-DISK3-PROGREF1.json">MS-DOS 3.20 (ProgRef 1)</disk>

View file

@ -2,6 +2,14 @@
<fdc id="fdcNEC" pos="left" padLeft="8px" padBottom="8px">
<control type="list" binding="listDrives"/>
<control type="list" binding="listDisks">
<manifest ref="/disks/pcx86/dos/ibm/0.90/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/1.00/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/1.10/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/2.00/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/2.10/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/3.00/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/3.10/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/ibm/3.20/manifest.xml"/>
<manifest ref="/disks/pcx86/dos/microsoft/3.20/manifest.xml"/>
<manifest ref="/disks/pcx86/shareware/pcsig08/manifest.xml"/>
</control>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3836,7 +3836,7 @@ class X86CPU extends CPU {
* if the result is negative, we need only be concerned if the signs of both numbers are the same
* (ie, the sign of their XOR'ed union is positive).
*/
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ regLSP) >= 0) {
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ this.regLSP) >= 0) {
/*
* There's no such thing as an SS fault on the 8086/8088, and I'm assuming that, on newer
* processors, when the stack segment limit is set to the maximum, it's OK for the stack to wrap.
@ -3897,7 +3897,7 @@ class X86CPU extends CPU {
* if the result is negative, we need only be concerned if the signs of both numbers are the same
* (ie, the sign of their XOR'ed union is positive).
*/
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ regLSP) >= 0) {
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ this.regLSP) >= 0) {
/*
* There's no such thing as an SS fault on the 8086/8088, and I'm assuming that, on newer
* processors, when the stack segment limit is set to the maximum, it's OK for the stack to wrap.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -18305,7 +18305,7 @@ class X86CPU extends CPU {
* if the result is negative, we need only be concerned if the signs of both numbers are the same
* (ie, the sign of their XOR'ed union is positive).
*/
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ regLSP) >= 0) {
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ this.regLSP) >= 0) {
/*
* There's no such thing as an SS fault on the 8086/8088, and I'm assuming that, on newer
* processors, when the stack segment limit is set to the maximum, it's OK for the stack to wrap.
@ -18366,7 +18366,7 @@ class X86CPU extends CPU {
* if the result is negative, we need only be concerned if the signs of both numbers are the same
* (ie, the sign of their XOR'ed union is positive).
*/
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ regLSP) >= 0) {
if (((regLSP - this.regLSPLimitLow)|0) < 0 && (this.regLSPLimitLow ^ this.regLSP) >= 0) {
/*
* There's no such thing as an SS fault on the 8086/8088, and I'm assuming that, on newer
* processors, when the stack segment limit is set to the maximum, it's OK for the stack to wrap.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long