Reorged interrupt info, added MS-DOS 3.21 images, and increased memory size of OS/2 1.0 machine to 2Mb

This commit is contained in:
Jeff Parsons 2015-08-26 13:25:34 -07:00
commit 95f7db7c94
11 changed files with 2100 additions and 189 deletions

View file

@ -1,10 +1,61 @@
MS-DOS 3.20
---
The MS-DOS 3.20 floppies in the PCjs collection had a printed date of `March 21, 1986` (see the photo below).
However, all the files on Disks 1 and 2 are timestamped `7-07-86 12:00p`.
Surprisingly Bad Bug in MS-DOS 3.20
---
If you attempt to boot MS-DOS 3.20 on an [IBM PC Model 5150](/devices/pc/machine/5150/cga/384kb/softkbd/) (with either
an MDA or CGA video card), the machine will appear to crash after printing the first character.
When MS-DOS 3.20 prints characters to the screen, it uses this code:
0287:1FA8 CD29 INT 29 ;history=7
0070:017A 50 PUSH AX ;history=6
0070:017B 56 PUSH SI ;history=5
0070:017C 57 PUSH DI ;history=4
0070:017D 55 PUSH BP ;history=3
0070:017E B40E MOV AH,0E ;history=2
0070:0180 B307 MOV BL,07 ;history=1
0070:0182 CD10 INT 10
AX=0E43 BX=0B07 CX=0010 DX=0000 SP=0862 BP=36FE SI=00D3 DI=000B
SS=0287 DS=0287 ES=0287 PS=F012 V0 D0 I0 T0 S0 Z0 A1 P0 C0
whereas MS-DOS 3.30 uses this code:
022F:222E CD29 INT 29 ;history=10
0070:069E 50 PUSH AX ;history=9
0070:069F 56 PUSH SI ;history=8
0070:06A0 57 PUSH DI ;history=7
0070:06A1 55 PUSH BP ;history=6
0070:06A2 53 PUSH BX ;history=5
0070:06A3 B40E MOV AH,0E ;history=4
0070:06A5 B700 MOV BH,00 ;history=3
0070:06A7 B307 MOV BL,07 ;history=2
0070:06A9 CD10 INT 10 ;history=1
MS-DOS 3.20 doesn't clear the BH register before calling INT 0x10 Video BIOS function 0x0E, and the Model 5150 Video
BIOS uses the BH register to select the video page, so when BH contains garbage (0x0B in the above example), it prints
characters off-screen, where they cant be seen.
As a result, the machine hasn't technically "crashed", but it's printing characters where they can't be seen, making
the machine more or less unusable.
Starting with the IBM PC Model 5160, Video BIOS function 0x0E ignores BH and always use the current page.
Microsoft must not have tested MS-DOS 3.20 on any 5150 machines, or if they did, those machines must have contained
upgraded video cards, such as the EGA, which provided their own Video BIOS. This bug was fixed in MS-DOS 3.21,
but that release apparently wasn't made available until almost a year later (MS-DOS 3.21 files are timestamped
`5-01-87 12:00a`).
MS-DOS 3.20 Photos
---
Here's what one of the MS-DOS 3.20 diskettes looked like.
> ![MS-DOS 3.20 Programmer's Reference](MSDOS320-DISK3-PROGREF1-thumb.jpg "link:MSDOS320-DISK3-PROGREF1.jpg:nogallery")
And the box, courtesy of [www.oldcomputermuseum.com](http://www.oldcomputermuseum.com/os/msdos_3.2.html).
> ![MS-DOS 3.20 Box](http://www.oldcomputermuseum.com/os/os_files/msdos_3.2.jpg)
> ![MS-DOS 3.20 Box](http://www.oldcomputermuseum.com/os/os_files/msdos_3.2.jpg)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.19.2/manifest.xsl"?>
<manifest type="software">
<title>MS-DOS</title>
<version>3.21</version>
<type>DOS</type>
<category>Operating System</category>
<author>Microsoft</author>
<releaseDate>May 1, 1987</releaseDate>
<disk id="disk01" size="368640" chs="40:2:9" img="static/MSDOS321-DISK1.img" href="/disks/pc/dos/microsoft/3.21/MSDOS321-DISK1.json" md5="251b00fc091a252d655a3bc447eb330b" md5json="92c4a838698bef22ab51528d69636bbd">
<name>MS-DOS 3.21 (Disk 1)</name>
</disk>
<disk id="disk02" size="368640" chs="40:2:9" img="static/MSDOS321-DISK2.img" href="/disks/pc/dos/microsoft/3.21/MSDOS321-DISK2.json" md5="c55adcc046038c7909e3f27965ff9b8f" md5json="b891c15e24538935a9aeca47f69659ca">
<name>MS-DOS 3.21 (Disk 2)</name>
</disk>
</manifest>

View file

@ -3,9 +3,10 @@ Multitasking MS-DOS 4.00
These disk images contain the first unearthed copy of Microsoft's "multitasking" version of MS-DOS.
They were were discovered by the [PCjs Project](/docs/about/) in March 2013.
This version of MS-DOS was never officially released in North America. More information is available at
[Wikipedia](http://en.wikipedia.org/wiki/Multi-tasking_MS-DOS_4.0) and
[OS/2 Museum](http://www.os2museum.com/wp/?p=1769).
More information is available at
[Wikipedia](http://en.wikipedia.org/wiki/Multi-tasking_MS-DOS_4.0),
[OS/2 Museum](http://www.os2museum.com/wp/?p=1769), and
[MSDN Blogs](http://blogs.msdn.com/b/larryosterman/archive/2004/03/22/94209.aspx).
Note: The designation "4.0M" is not an official version number; it's an internal version number used only to
differentiate these disk images from those of the official MS-DOS 4.00 release in July 1988.
@ -14,3 +15,108 @@ The [IBM Model 5160](/devices/pc/machine/) machine configuration below boots MS-
"Session Manager" after it's booted, tap the **Alt** key.
[IBM Model 5160](/devices/pc/machine/5160/cga/640kb/dos400m/ "PCjs:ibm5160:::debugger")
Additional Information From [PC DOS Retro](https://sites.google.com/site/pcdosretro/multitaskingdos4) by Vernon Brooks
---
Multitasking MS-DOS 4.0 was a little known and separate development of DOS done in parallel with the development
of DOS 3.0 and 3.1 and was released in late 1985. It should not be confused with the later retail DOS 4.0 that was
released in 1988. DOS 4.0 supported preemptive multitasking, shared memory, semaphores, advanced memory management,
a session manager, imports, exports and a new executable format. Many of the ideas and features introduced here found
their way into OS/2. Unfortunately DOS 4.0 was limited by the real-mode 8086 environment and the 640KB address space.
Also programs which were not well-behaved or relied upon undocumented DOS functions would not run properly under
DOS 4.0, particularly TSR programs. Despite these limitations Microsoft wanted to make DOS 4.0 a retail product but
IBM at the time was not interested in such a version of DOS, instead they formed a joint development agreement with
Microsoft which resulted in the development of OS/2 1.0. Microsoft licensed DOS 4.0 to several European OEMs including
Goupil but it was never shipped in North America. Microsoft released an updated version, DOS 4.1 in late 1987 for
the British company International Computers Limited (ICL). DOS 4.1 incorporated features from DOS 3.2. Like its
predecessor, DOS 4.1 was never shipped in North America.
List of features and differences between standard DOS and Multitasking MS-DOS 4.0:
* based upon DOS 3.1
* INT 21h functions 00h-62h, 83h-91h, 95h-99h
* INT 21h functions 3300h-3302h
* INT 21h functions 4400h-440Ch
* INT 21h functions 4B00h, 4B01h, 4B03h, 4B04h-4B06h, 4B08h, 4B0Ch-4B0Eh
* INT 21h functions 5D00h-5D0Ah
* INT 21h functions 58h and 5D06h not supported
* new INT 21h functions:
* 61h: unknown function
* 8301h: get/set memory partition size
* 8400h-8402h: shared memory functions
* 8500h-8504h: semaphore functions
* 86h: set handle count
* 87h: get process id
* 8801h-8802h: unknown get/set function (handle related)
* 89h: sleep
* 8Ah: child wait
* 8Bh: JOIN/SUBST
* 8Ch: set signal handler
* 8Dh: send signal
* 8Eh: get/set process priority
* 8Fh: unknown function (vector related)
* 90h: unknown function (vector related)
* 91h: unknown function
* 95h: set hard error flag
* 96h: unknown function
* 97h: unknown function
* 98h: unknown function
* 99h: unknown function
* INT 21h functions 1Fh and 32h copy the DPB to DS:BX instead of returning a pointer in DS:BX
* INT 21h function 25h does not directly set interrupt vectors
* device driver command codes 00h-10h (same as DOS 3.x) and 11h-16h (new)
* new device driver command codes:
* 11h: stop console output
* 12h: restart console output
* 13h: generic ioctl (same as DOS 3.2+)
* 14h: unknown
* 15h: unknown
* 16h: unknown
* SYSVARS table:
* 00h DPB pointer (DPB length = 18h)
* 04h SFT pointer (SFT length = 37h)
* 08h CLOCK$ device pointer
* 0Ch KEYBD$ device pointer
* 10h SCREEN$ device pointer
* 14h disk buffer size
* 16h disk buffer chain pointer
* 1Ah ? (always 0, CDS pointer should be here)
* 1Eh FCB SFT pointer
* 22h FCB keep count
* 24h drive count
* 25h switch character
* 26h ? (code pointer)
* 2Ah NUL device header
* no MCB anchor at SYSVARS-2
* MCBs have previous MCB at 06h and next MCB at 08h (same seg as MCB = start/end of chain)
* InDOS flag is always FFh and the critical error flag does not precede it
* KEYBD$ and SCREEN$ in addition to CON
* no INT 28h or INT 2Ah function 84h idle callout
* no INT 2Ah critical section support
* no INT 2Fh redirector support
* no job file table in PSP
* INT 12h (40h:13h) value is altered to limit session memory
* CONFIG.SYS commands: BREAK, BUFFERS, COUNTRY, DEVICE, FCBS, FILES, LASTDRIVE, SHELL (same as DOS 3.1)
* additional internal commands: CALL, DETACH (DET), ENDLOCAL, EXTPROC, MEMSET, SETLOCAL
* NE format executables supported
* no PSP created for NE executables
* DOSCALLS exported function names:
* 01 ALLOCSEG
* 02 REALLOCSEG
* 03 FREESEG
* 04 LOCKSEG
* 05 UNLOCKSEG
* 06 GETSEGSIZE
* 07 GETDSHANDLE
* 08 CRITENTER
* 09 CRITLEAVE
* 0A FCRITENTER
* 0B FCRITLEAVE
* 0C PBLOCK
* 0D PRUN
* 0E SUBSCREEN
* 0F GETPIDS
* 10 DOSDISCARDCODE
* 11 DOSGETHANDLE
* 12 DOSHANDLEJUMP

View file

@ -16,6 +16,7 @@
<manifest ref="/disks/pc/dos/ibm/6.10/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/ibm/7.00/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.20/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.21/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.30/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.31/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/4.0M/manifest.xml" disk="*"/>

View file

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.19.2/machine.xsl"?>
<machine id="ibm5170" class="pc" border="1" pos="center" background="#FAEBD7">
<name>IBM PC AT (8Mhz), 128Kb EGA, 1152Kb RAM, 20Mb Hard Disk</name>
<name>IBM PC AT (8Mhz), 128Kb EGA, 2Mb RAM, 20Mb Hard Disk</name>
<computer id="at-ega-1152k" name="IBM PC AT" buswidth="24"/>
<cpu id="cpu286" model="80286" cycles="8000000"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x80000" comment=""/>
<ram id="ramLow" addr="0x00000" test="true" size="0xa0000" comment="ROM BIOS memory test has NOT been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x160000" comment=""/>
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/bios/5170/1985-11-15.json"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>
<debugger id="debugger" messages="fault" commands=""/>
<panel ref="/devices/pc/panel/wide.xml"/>
<fdc ref="/disks/pc/library.xml" automount='{A:{name:"OS/2 1.0 (1.44M Install)",path:"/disks/pc/os2/ibm/1.0/OS210-INSTALL.json"}}'/>
<fdc ref="/disks/pc/library.xml" automount=''/>
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/os2/ibm/1.0/OS210-HDISK.json"}]'/>
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
<serial id="com1" adapter="1"/>

View file

@ -1067,7 +1067,7 @@ ChipSet.prototype.initBus = function(cmp, bus, cpu, dbg)
chipset.dumpCMOS();
});
}
cpu.addIntNotify(Interrupts.RTC.VECTOR, this, this.intBIOSRTC);
cpu.addIntNotify(Interrupts.RTC, this, this.intBIOSRTC);
}
};
@ -4961,7 +4961,7 @@ ChipSet.prototype.outCoprocReset = function(port, bOut, addrFrom)
ChipSet.prototype.intBIOSRTC = function(addr)
{
if (DEBUGGER) {
if (this.messageEnabled(Messages.RTC) && this.dbg.messageInt(Interrupts.RTC.VECTOR, addr)) {
if (this.messageEnabled(Messages.RTC) && this.dbg.messageInt(Interrupts.RTC, addr)) {
/*
* By computing AH now, we get the incoming AH value; if we computed it below, along with
* the rest of the register values, we'd get the outgoing AH value, which is not what we want.
@ -4980,7 +4980,7 @@ ChipSet.prototype.intBIOSRTC = function(addr)
} else if (AH == 0x04 || AH == 0x05) {
sResult = " CX(year)=" + str.toHexWord(chipset.cpu.regECX) + " DH(month)=" + str.toHexByte(DH) + " DL(day)=" + str.toHexByte(DL);
}
chipset.dbg.messageIntReturn(Interrupts.RTC.VECTOR, nLevel, nCycles, sResult);
chipset.dbg.messageIntReturn(Interrupts.RTC, nLevel, nCycles, sResult);
};
}(this, this.cpu.getCycles()));
}

View file

@ -1201,140 +1201,6 @@ if (DEBUGGER) {
]
];
/*
* See replaceRegs() for the rules governing how register contents are replaced in the strings below. Replacements
* occur in the following order:
*
* Replace every %XX (or %XXX), where XX (or XXX) is a register, with the register's value.
* Replace every #XX, where XX is a hex byte value, with the corresponding ASCII character (if printable).
* Replace every $XXXX:XXXX, where XXXX:XXXX is a segmented address, with the zero-terminated string at that address.
* Replace every ^XXXX:XXXX, where XXXX:XXXX is a segmented address, with the FCB filename stored at that address.
*/
Debugger.INT_FUNCS = {
0x13: {
0x00: "disk reset",
0x01: "get status",
0x02: "read drive %DL (%CH:%DH:%CL,%AL) into %ES:%BX",
0x03: "write drive %DL (%CH:%DH:%CL,%AL) from %ES:%BX",
0x04: "verify drive %DL (%CH:%DH:%CL,%AL)",
0x05: "format drive %DL using %ES:%BX",
0x08: "read drive %DL parameters into %ES:%DI",
0x15: "get drive %DL DASD type",
0x16: "get drive %DL change line status",
0x17: "set drive %DL DASD type",
0x18: "set drive %DL media type"
},
0x15: {
0x80: "open device",
0x81: "close device",
0x82: "program termination",
0x83: "wait %CX:%DXus for event",
0x84: "joystick support",
0x85: "SYSREQ pressed",
0x86: "wait %CX:%DXus",
0x87: "move block (%CX words)",
0x88: "get extended memory size",
0x89: "processor to virtual mode",
0x90: "device busy loop",
0x91: "interrupt complete flag set"
},
0x21: {
0x00: "terminate program",
0x01: "read character (AL) from stdin with echo",
0x02: "write character #%DL to stdout",
0x03: "read character (AL) from stdaux", // eg, COM1
0x04: "write character #%DL to stdaux", // eg, COM1
0x05: "write character #%DL to stdprn", // eg, LPT1
0x06: "direct console output (input if %DL=FF)",
0x07: "direct console input without echo",
0x08: "read character (AL) from stdin without echo",
0x09: "write string $%DS:%DX to stdout",
0x0A: "buffered input (DS:DX)", // byte 0 is maximum chars, byte 1 is number of previous characters, byte 2 is number of characters read
0x0B: "get stdin status",
0x0C: "flush buffer and read stdin", // AL is a function # (0x01, 0x06, 0x07, 0x08, or 0x0A)
0x0D: "disk reset",
0x0E: "select default drive %DL", // returns # of available drives in AL
0x0F: "open file using FCB ^%DS:%DX", // DS:DX -> unopened File Control Block
0x10: "close file using FCB ^%DS:%DX",
0x11: "find first matching file using FCB ^%DS:%DX",
0x12: "find next matching file using FCB ^%DS:%DX",
0x13: "delete file using FCB ^%DS:%DX",
0x14: "sequential read from file using FCB ^%DS:%DX",
0x15: "sequential write to file using FCB ^%DS:%DX",
0x16: "create or truncate file using FCB ^%DS:%DX",
0x17: "rename file using FCB ^%DS:%DX",
0x19: "get current default drive (AL)",
0x1A: "set disk transfer area (DTA=%DS:%DX)",
0x1B: "get allocation information for default drive",
0x1C: "get allocation information for specific drive %DL",
0x1F: "get drive parameter block for default drive",
0x21: "read random record from file using FCB ^%DS:%DX",
0x22: "write random record to file using FCB ^%DS:%DX",
0x23: "get file size using FCB ^%DS:%DX",
0x24: "set random record number for FCB ^%DS:%DX",
0x25: "set address %DS:%DX of interrupt vector %AL",
0x26: "create new PSP at segment %DX",
0x27: "random block read from file using FCB ^%DS:%DX",
0x28: "random block write to file using FCB ^%DS:%DX",
0x29: "parse filename $%DS:%SI into FCB %ES:%DI using %AL",
0x2A: "get system date (year=CX, mon=DH, day=DL)",
0x2B: "set system date (year=%CX, mon=%DH, day=%DL)",
0x2C: "get system time (hour=CH, min=CL, sec=DH, 100ths=DL)",
0x2D: "set system time (hour=%CH, min=%CL, sec=%DH, 100ths=%DL)",
0x2E: "set verify flag %AL",
0x2F: "get disk transfer area (DTA=ES:BX)", // DOS 2.00+
0x30: "get DOS version (AL=major, AH=minor)",
0x31: "terminate and stay resident",
0x32: "get drive parameter block (DPB=DS:BX) for drive %DL",
0x33: "extended break check",
0x34: "get address (ES:BX) of InDOS flag",
0x35: "get address (ES:BX) of interrupt vector %AL",
0x36: "get free disk space of drive %DL",
0x37: "get(0)/set(1) switch character %DL (%AL)",
0x38: "get country-specific information",
0x39: "create subdirectory $%DS:%DX",
0x3A: "remove subdirectory $%DS:%DX",
0x3B: "set current directory $%DS:%DX",
0x3C: "create or truncate file $%DS:%DX with attributes %CX",
0x3D: "open file $%DS:%DX with mode %AL",
0x3E: "close file %BX",
0x3F: "read %CX bytes from file %BX into buffer %DS:%DX",
0x40: "write %CX bytes to file %BX from buffer %DS:%DX",
0x41: "delete file $%DS:%DX",
0x42: "set position %CX:%DX of file %BX relative to %AL",
0x43: "get(0)/set(1) attributes %CX of file $%DS:%DX (%AL)",
0x44: "get device information (IOCTL)",
0x45: "duplicate file handle %BX",
0x46: "force file handle %CX to duplicate file handle %BX",
0x47: "get current directory (DS:SI) for drive %DL",
0x48: "allocate memory segment with %BX paragraphs",
0x49: "free memory segment %ES",
0x4A: "resize memory segment %ES to %BX paragraphs",
0x4B: "load program $%DS:%DX using parameter block %ES:%BX",
0x4C: "terminate with return code %AL",
0x4D: "get return code (AL)",
0x4E: "find first matching file $%DS:%DX with attributes %CX",
0x4F: "find next matching file",
0x50: "set current PSP %BX",
0x51: "get current PSP (bx)",
0x52: "get system variables (ES:BX)",
0x53: "translate BPB %DS:%SI to DPB (ES:BP)",
0x54: "get verify flag (AL)",
0x55: "create child PSP at segment %DX",
0x56: "rename file $%DS:%DX to $%ES:%DI",
0x57: "get(0)/set(1) file %BX date %DX and time %CX (%AL)",
0x58: "get(0)/set(1) memory allocation strategy (%AL)", // DOS 2.11+
0x59: "get extended error information", // DOS 3.00+
0x5A: "create temporary file $%DS:%DX with attributes %CX", // DOS 3.00+
0x5B: "create file $%DS:%DX with attributes %CX", // DOS 3.00+ (doesn't truncate existing files like 0x3C)
0x5C: "lock(0)/unlock(1) file %BX region %CX:%DX length %SI:%DI (%AL)", // DOS 3.00+
0x5D: "critical error information (%AL)", // DOS 3.00+ (undocumented)
0x60: "get fully-qualified filename from $%DS:%SI", // DOS 3.00+ (undocumented)
0x63: "get lead byte table (%AL)", // DOS 2.25 and 3.20+
0x6C: "extended open file $%DS:%SI" // DOS 4.00+
}
};
/**
* initBus(bus, cpu, dbg)
*
@ -2655,7 +2521,7 @@ if (DEBUGGER) {
if (fForce) {
fMessage = true;
} else {
fMessage = this.messageEnabled(Messages.CPU) && nInt != Interrupts.DOS_IDLE.VECTOR /* 0x28 */ && nInt != Interrupts.DOS_NETBIOS.VECTOR /* 0x2A */;
fMessage = this.messageEnabled(Messages.CPU) && nInt != Interrupts.DOS_IDLE /* 0x28 */ && nInt != Interrupts.DOS_NETBIOS /* 0x2A */;
var nCategory = Debugger.INT_MESSAGES[nInt];
if (nCategory) {
if (this.messageEnabled(nCategory)) {
@ -2666,15 +2532,15 @@ if (DEBUGGER) {
}
}
if (fMessage) {
AH = this.cpu.regEAX >> 8;
AH = (this.cpu.regEAX >> 8) & 0xff;
DL = this.cpu.regEDX & 0xff;
if (nInt == Interrupts.DOS.VECTOR /* 0x21 */ && AH == 0x0b ||
if (nInt == Interrupts.DOS /* 0x21 */ && AH == 0x0b ||
nCategory == Messages.FDC && DL >= 0x80 || nCategory == Messages.HDC && DL < 0x80) {
fMessage = false;
}
}
if (fMessage) {
var aFuncs = Debugger.INT_FUNCS[nInt];
var aFuncs = Interrupts.FUNCS[nInt];
var sFunc = (aFuncs && aFuncs[AH]) || "";
if (sFunc) sFunc = ' ' + this.replaceRegs(sFunc);
/*
@ -5231,7 +5097,7 @@ if (DEBUGGER) {
* NOTE: This is different from the "d dos" command, which invokes dumpDos() to dump DOS memory blocks,
* and is handled by one of the registered dumper functions below.
*/
this.messageInt(Interrupts.DOS.VECTOR, this.cpu.regLIP, true);
this.messageInt(Interrupts.DOS, this.cpu.regLIP, true);
return;
}

File diff suppressed because it is too large Load diff

View file

@ -363,8 +363,6 @@ X86.fnBTS = function BTS(dst, src)
*/
X86.fnCALLw = function CALLw(dst, src)
{
// if (DEBUG) this.printMessage("calling " + str.toHex(dst, this.dataSize << 1), this.bitsMessage, true);
this.pushWord(this.getIP());
this.setIP(dst);
this.nStepCycles -= (this.regEA === X86.ADDR_INVALID? this.cycleCounts.nOpCyclesCallWR : this.cycleCounts.nOpCyclesCallWM);
@ -384,8 +382,6 @@ X86.fnCALLw = function CALLw(dst, src)
*/
X86.fnCALLF = function CALLF(off, sel)
{
// if (DEBUG) this.printMessage("calling " + str.toHex(sel, 4) + ':' + str.toHex(off, this.dataSize << 1), this.bitsMessage, true);
var oldCS = this.getCS();
var oldIP = this.getIP();
if (this.setCSIP(off, sel, true) != null) {
@ -1327,8 +1323,6 @@ X86.fnIRET = function IRET()
}
}
// if (DEBUG) this.printMessage(" returning to " + str.toHex(newCS, 4) + ':' + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
if (this.setCSIP(newIP, newCS, false) != null) {
this.setPS(newPS, cpl);
if (MAXDEBUG && this.cIntReturn) this.checkIntReturn(this.regLIP);
@ -2259,8 +2253,6 @@ X86.fnRETF = function RETF(n)
var newIP = this.popWord();
var newCS = this.popWord();
// if (DEBUG) this.printMessage(" returning to " + str.toHex(newCS, 4) + ':' + str.toHex(newIP, this.dataSize << 1), this.bitsMessage, true);
if (n) this.setSP(this.getSP() + n); // TODO: optimize
if (this.setCSIP(newIP, newCS, false)) { // returns true if a stack switch occurred