80386 CPU detection fix

This commit is contained in:
Jeff Parsons 2015-07-14 16:32:41 -07:00
commit 75d8e1e193
24 changed files with 123 additions and 60 deletions

View file

@ -7,17 +7,17 @@ root = true
end_of_line = lf
insert_final_newline = true
[*.BAS,*.bas]
[*.{BAS,bas}]
indent_style = space
indent_size = 8
trim_trailing_whitespace = true
[{*.ASM,*.INC,*.asm,*.inc,*.nasm,*.lst}]
[*.{ASM,INC,asm,inc,nasm,lst}]
indent_style = tab
indent_size = 8
trim_trailing_whitespace = true
[{*.C,*.H,*.c,*.h}]
[*.{C,H,c,h,xml,xsl}]
indent_style = tab
indent_size = 4
trim_trailing_whitespace = true
@ -27,26 +27,21 @@ indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.json]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
[*.map]
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.json]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
[*.md]
indent_style = tab
indent_size = 4
trim_trailing_whitespace = false
[*.xml]
indent_style = tab
indent_size = 4
trim_trailing_whitespace = true
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

1
.gitignore vendored
View file

@ -15,6 +15,7 @@ static
tmp
/books
/notes
/src
/states
/videos
/web

View file

@ -9,10 +9,10 @@
<releaseDate/>
<machine href="/devices/pc/machine/5170/ega/1152kb/rev3/machine.xml"/>
<disk id="disk01" size="368640" chs="40:2:9" img="static/COMPAQ-DOS310-DISK1.img" href="/disks/pc/dos/compaq/3.10/COMPAQ-DOS310-DISK1.json" md5="a2a329b9d06e5bd425050a10e14e2f92" md5json="c212bb6bcd6a4c5853be2c390df66536">
<name>COMPAQ DOS 3.10 (1)</name>
<name>COMPAQ DOS 3.10 (Disk 1)</name>
</disk>
<disk id="disk02" size="368640" chs="40:2:9" img="static/COMPAQ-DOS310-DISK2.img" href="/disks/pc/dos/compaq/3.10/COMPAQ-DOS310-DISK2.json" md5="4f6e5ec142fbffc36ea600c262677580" md5json="0770c611514970520b6905223c246ee9">
<name>COMPAQ DOS 3.10 (2)</name>
<name>COMPAQ DOS 3.10 (Disk 2)</name>
</disk>
<disk id="disk03" size="1228800" chs="80:2:15" img="static/COMPAQ-DOS310-PERSONAL.img" href="/disks/pc/dos/compaq/3.10/COMPAQ-DOS310-PERSONAL.json" md5="df312165dc2303aab9417677a50df477" md5json="50ed5b7489569d11a9391287259eeda1">
<name>COMPAQ DOS 3.10 (Personal)</name>

View file

@ -9,21 +9,21 @@
<releaseDate/>
<machine href="/devices/pc/machine/5170/ega/1152kb/rev3/machine.xml"/>
<disk id="disk01" size="737280" chs="80:2:9" img="static/COMPAQ-DOS331-DISK1.img" href="/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK1.json" md5="a2e8c19e0c712b7865d71b4b85b15f7b" md5json="56928a71999a13d3bcdff895ff222ef6">
<name>COMPAQ DOS 3.31 (1)</name>
<name>COMPAQ DOS 3.31 (Disk 1)</name>
</disk>
<disk id="disk02" size="737280" chs="80:2:9" img="static/COMPAQ-DOS331-DISK2.img" href="/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK2.json" md5="e7a92e5d49cfcbce27c76a76e41cef38" md5json="2e11bbeb4b83922789c8117d2d772c05">
<name>COMPAQ DOS 3.31 (2)</name>
<name>COMPAQ DOS 3.31 (Disk 2)</name>
</disk>
<disk id="disk03" size="737280" chs="80:2:9" img="static/COMPAQ-DOS331-DISK3.img" href="/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK3.json" md5="bfa7bb36ff3b3dbd43769d0938bcd33c" md5json="63ca40a545c2ab97e5f29bb4e7f93cc7">
<name>COMPAQ DOS 3.31 (3)</name>
<name>COMPAQ DOS 3.31 (Disk 3)</name>
</disk>
<disk id="disk04" size="737280" chs="80:2:9" img="static/COMPAQ-DOS331-DISK4.img" href="/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK4.json" md5="92c26885c372db846ce990fb5e16c745" md5json="525acd75acd621e70743e5315be33dbf">
<name>COMPAQ DOS 3.31 (4)</name>
<name>COMPAQ DOS 3.31 (Disk 4)</name>
</disk>
<disk id="disk05" size="737280" chs="80:2:9" img="static/COMPAQ-DOS331-DISK5.img" href="/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DISK5.json" md5="931554c9bdec9c26ca3e7c301b7df10f" md5json="6d58d8f3a88f7621c8ca39af118cd504">
<name>COMPAQ DOS 3.31 (5)</name>
<name>COMPAQ DOS 3.31 (Disk 5)</name>
</disk>
<disk id="disk06" size="368640" chs="40:2:9" img="static/COMPAQ-DOS331-DIAG.img" href="/disks/pc/dos/compaq/3.31/COMPAQ-DOS331-DIAG.json" md5="6fc3678180e8d8c2ff5e1c3d99f14d08" md5json="a5e0a418db4fe09c13cfd86635753a05">
<name>COMPAQ DOS 3.31 (DIAG)</name>
<name>COMPAQ DOS 3.31 (Diagnostic)</name>
</disk>
</manifest>

View file

@ -22,9 +22,9 @@
<name>PC-DOS 7.00 (SETUP Disk 5)</name>
</disk>
<disk id="disk06" size="1228800" chs="80:2:15" img="static/PCDOS700-1200.img" href="/disks/pc/dos/ibm/7.00/PCDOS700-1200.json" md5="ea7df13867ae2d7838c0f620281aa295" md5json="039a2b79ad43d69bc9b82ba18ad6c10b">
<name>PC-DOS 7.00 (1.2Mb Disk)</name>
<name>PC-DOS 7.00 (1.2M Disk)</name>
</disk>
<disk id="disk07" size="1474560" chs="80:2:18" img="static/PCDOS700-1440.img" href="/disks/pc/dos/ibm/7.00/PCDOS700-1440.json" md5="72f453733c6d4a102fdad4366a7daf1f" md5json="fcbc9523367a18ee0efa0dccace722c2">
<name>PC-DOS 7.00 (1.44Mb Disk)</name>
<name>PC-DOS 7.00 (1.44M Disk)</name>
</disk>
</manifest>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.18.4/manifest.xsl"?>
<manifest type="software">
<title>MS-DOS</title>
<version>5.00</version>
<type>DOS</type>
<category>Operating System</category>
<author>Microsoft</author>
<releaseDate/>
<disk id="disk01" size="368640" chs="40:2:9" img="static/360K/MSDOS500-DISK01.img" href="/disks/pc/dos/microsoft/5.00/360K/MSDOS500-DISK01.json" md5="7e9745c5f029d3b6d212ea807af63fef" md5json="0cec25b697c02062df948eb2a54c7cd0">
<name>MS-DOS 5.00 (360K Disk 1)</name>
</disk>
<disk id="disk02" size="368640" chs="40:2:9" img="static/360K/MSDOS500-DISK02.img" href="/disks/pc/dos/microsoft/5.00/360K/MSDOS500-DISK02.json" md5="3dc6fa07e08b09b1559955cb7c91cbde" md5json="477635397d1ce6de3dcf2b6f58f032cf">
<name>MS-DOS 5.00 (360K Disk 2)</name>
</disk>
<disk id="disk03" size="368640" chs="40:2:9" img="static/360K/MSDOS500-DISK03.img" href="/disks/pc/dos/microsoft/5.00/360K/MSDOS500-DISK03.json" md5="adcfcbcf89f3f11f3b98040f702ff42b" md5json="d6c6000cc3723045a314a35aa47ff17d">
<name>MS-DOS 5.00 (360K Disk 3)</name>
</disk>
<disk id="disk04" size="368640" chs="40:2:9" img="static/360K/MSDOS500-DISK04.img" href="/disks/pc/dos/microsoft/5.00/360K/MSDOS500-DISK04.json" md5="424a3f240db1e6f5123702e2e418b4c3" md5json="2179d909243e8c102c0b6275b9d7c003">
<name>MS-DOS 5.00 (360K Disk 4)</name>
</disk>
<disk id="disk05" size="368640" chs="40:2:9" img="static/360K/MSDOS500-DISK05.img" href="/disks/pc/dos/microsoft/5.00/360K/MSDOS500-DISK05.json" md5="1cab22f71e27374c5d23cae01930a01e" md5json="9203b7234a7262fad8207e0dc4052a82">
<name>MS-DOS 5.00 (360K Disk 5)</name>
</disk>
<disk id="disk06" size="737280" chs="80:2:9" img="static/720K/MSDOS500-DISK01.img" href="/disks/pc/dos/microsoft/5.00/720K/MSDOS500-DISK01.json" md5="637b4c237b2932eb2ba5661ef6758162" md5json="a2e79fb22adc034ed5fe638301120608">
<name>MS-DOS 5.00 (720K Disk 1)</name>
</disk>
<disk id="disk07" size="737280" chs="80:2:9" img="static/720K/MSDOS500-DISK02.img" href="/disks/pc/dos/microsoft/5.00/720K/MSDOS500-DISK02.json" md5="03ee29d66e84650165dfd97c304b9f3a" md5json="f0ac77b0fce97c1635f99c9f443a6b7b">
<name>MS-DOS 5.00 (720K Disk 2)</name>
</disk>
<disk id="disk08" size="737280" chs="80:2:9" img="static/720K/MSDOS500-DISK03.img" href="/disks/pc/dos/microsoft/5.00/720K/MSDOS500-DISK03.json" md5="6864241d46bbf1f92383f0840f432f62" md5json="b0f3292650a2e82066af42583d0bb297">
<name>MS-DOS 5.00 (720K Disk 3)</name>
</disk>
</manifest>

View file

@ -12,7 +12,7 @@
<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" width="320px" automount='{A:{name:"OS/2 1.0 (1.44Mb Install)",path:"/disks/pc/os2/ibm/1.0/OS210-INSTALL.json"}}'/>
<fdc ref="/disks/pc/library.xml" width="320px" automount='{A:{name:"OS/2 1.0 (1.44M Install)",path:"/disks/pc/os2/ibm/1.0/OS210-INSTALL.json"}}'/>
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2}]'/>
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
<serial id="com1" adapter="1"/>

View file

@ -4,15 +4,15 @@
<title>IBM OS/2 1.0</title>
<machine href="/disks/pc/os2/ibm/1.0/machine.xml"/>
<disk id="disk00" size="1474560" chs="80:2:18" img="static/OS210-INSTALL.img" href="/disks/pc/os2/ibm/1.0/OS210-INSTALL.json" md5="b0410a7cd0d8bf188028729d1634bf75" md5json="4e690e5d55de300077c442762c7b7f97">
<name>OS/2 1.0 (1.44Mb Install)</name>
<name>OS/2 1.0 (1.44M Install)</name>
</disk>
<disk id="disk01" size="1474560" chs="80:2:18" img="static/OS210-DISK1.img" href="/disks/pc/os2/ibm/1.0/OS210-DISK1.json" md5="11efee476f78824cab1201a2dd3fb8f5" md5json="29fd631c5a5ca00cf6598fb8288b7c35">
<name>OS/2 1.0 (1.44Mb Disk 1)</name>
<name>OS/2 1.0 (1.44M Disk 1)</name>
</disk>
<disk id="disk02" size="1474560" chs="80:2:18" img="static/OS210-DISK2.img" href="/disks/pc/os2/ibm/1.0/OS210-DISK2.json" md5="d5c03e696497729fdd89dce0e18ad7ff" md5json="d50dfed5f7d55408d9af75b382afde89">
<name>OS/2 1.0 (1.44Mb Disk 2)</name>
<name>OS/2 1.0 (1.44M Disk 2)</name>
</disk>
<disk id="disk03" size="1474560" chs="80:2:18" img="static/OS210-DISK3.img" href="/disks/pc/os2/ibm/1.0/OS210-DISK3.json" md5="fd80ec4dc815bcdacf7879c50b7aa44a" md5json="7d10df7177f4a80da285d8b7b586740d">
<name>OS/2 1.0 (1.44Mb Disk 3)</name>
<name>OS/2 1.0 (1.44M Disk 3)</name>
</disk>
</manifest>

View file

@ -3,24 +3,24 @@
<manifest type="software">
<title>IBM OS/2 1.1</title>
<disk id="disk00" size="1474560" chs="80:2:18" img="static/OS211-INSTALLATION.img" href="/disks/pc/os2/ibm/1.1/OS211-INSTALLATION.json" md5="64b1a50f35385f326e7b59b17b417769" md5json="6510aede5a434ae794a3ee9e8d09d6c9">
<name>OS/2 1.1 (1.44Mb Install Disk)</name>
<name>OS/2 1.1 (1.44M Install Disk)</name>
</disk>
<disk id="disk01" size="1474560" chs="80:2:18" img="static/OS211-DISK01.img" href="/disks/pc/os2/ibm/1.1/OS211-DISK01.json" md5="5b0526049c097e7afa54073f13cf87d1" md5json="f74cb91702c9a502418139601269280d">
<name>OS/2 1.1 (1.44Mb Disk 1)</name>
<name>OS/2 1.1 (1.44M Disk 1)</name>
</disk>
<disk id="disk02" size="1474560" chs="80:2:18" img="static/OS211-DISK02.img" href="/disks/pc/os2/ibm/1.1/OS211-DISK02.json" md5="ebd9cc64c9c24f79b63836fcce58b0f0" md5json="63f462d7abb7367145d35789a547f913">
<name>OS/2 1.1 (1.44Mb Disk 2)</name>
<name>OS/2 1.1 (1.44M Disk 2)</name>
</disk>
<disk id="disk03" size="1474560" chs="80:2:18" img="static/OS211-DISK03.img" href="/disks/pc/os2/ibm/1.1/OS211-DISK03.json" md5="f4b85ca988d76f876c2f0a00cf4b57e8" md5json="f07266e75f25f5f5a5ce4e299d9dcff6">
<name>OS/2 1.1 (1.44Mb Disk 3)</name>
<name>OS/2 1.1 (1.44M Disk 3)</name>
</disk>
<disk id="disk04" size="1474560" chs="80:2:18" img="static/OS211-DISK04.img" href="/disks/pc/os2/ibm/1.1/OS211-DISK04.json" md5="67eb167bca6cf7b169011fdaedf4d358" md5json="e821febc52f1736ee2714bbe6aaf6c83">
<name>OS/2 1.1 (1.44Mb Disk 4)</name>
<name>OS/2 1.1 (1.44M Disk 4)</name>
</disk>
<disk id="disk05" size="1474560" chs="80:2:18" img="static/OS211-DEVICES.img" href="/disks/pc/os2/ibm/1.1/OS211-DEVICES.json" md5="9d3dfde0206b562beae90cab21f9eba5" md5json="2cb39da33b61e762b87259b59bf5ccf5">
<name>OS/2 1.1 (1.44Mb Devices Disk)</name>
<name>OS/2 1.1 (1.44M Devices Disk)</name>
</disk>
<disk id="disk06" size="1474560" chs="80:2:18" img="static/OS211-PRINTERS.img" href="/disks/pc/os2/ibm/1.1/OS211-PRINTERS.json" md5="36cd9ea1e7184872548598dae4b60cb8" md5json="3ddd4aa8468a17a42aa247cf7b447a65">
<name>OS/2 1.1 (1.44Mb Printers Disk)</name>
<name>OS/2 1.1 (1.44M Printers Disk)</name>
</disk>
</manifest>

View file

@ -3,33 +3,33 @@
<manifest type="software">
<title>IBM OS/2 1.3</title>
<disk id="disk01" size="1474560" chs="80:2:18" img="static/OS213-DISK01.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK01.json" md5="b393291dc9d96255b7ea9d9d614ecf23" md5json="a3af9c440d774c4084862a4caa5e17e2">
<name>OS/2 1.3 (1.44Mb Disk 1)</name>
<name>OS/2 1.3 (1.44M Disk 1)</name>
</disk>
<disk id="disk02" size="1474560" chs="80:2:18" img="static/OS213-DISK02.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK02.json" md5="6b3bf3f03c914c9718a9fe603a4a62b2" md5json="65322381b4ffbd62266c28c2ec0c027f">
<name>OS/2 1.3 (1.44Mb Disk 2)</name>
<name>OS/2 1.3 (1.44M Disk 2)</name>
</disk>
<disk id="disk03" size="1474560" chs="80:2:18" img="static/OS213-DISK03.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK03.json" md5="207c6196d09dc1ef11a16e34e731c7d9" md5json="dea620df5b4f6a41deec101bd6dc3ef8">
<name>OS/2 1.3 (1.44Mb Disk 3)</name>
<name>OS/2 1.3 (1.44M Disk 3)</name>
</disk>
<disk id="disk04" size="1474560" chs="80:2:18" img="static/OS213-DISK04.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK04.json" md5="8175fa3257fc60b3b281fbf25b50adcc" md5json="5d7aaf6609dd58b614554b5f26600a2b">
<name>OS/2 1.3 (1.44Mb Disk 4)</name>
<name>OS/2 1.3 (1.44M Disk 4)</name>
</disk>
<disk id="disk05" size="1474560" chs="80:2:18" img="static/OS213-DISK05.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK05.json" md5="8175fa3257fc60b3b281fbf25b50adcc" md5json="5d7aaf6609dd58b614554b5f26600a2b">
<name>OS/2 1.3 (1.44Mb Disk 5)</name>
<name>OS/2 1.3 (1.44M Disk 5)</name>
</disk>
<disk id="disk06" size="1474560" chs="80:2:18" img="static/OS213-DISK06.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK06.json" md5="3f61008d56453a40c4444a397260b39c" md5json="a25d13bd6beacb002acfd4b6cacdbea3">
<name>OS/2 1.3 (1.44Mb Disk 6)</name>
<name>OS/2 1.3 (1.44M Disk 6)</name>
</disk>
<disk id="disk07" size="1474560" chs="80:2:18" img="static/OS213-DISK07.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK07.json" md5="0de3327c227f1fe00e211b558ea2e23a" md5json="d33aaa2d626b5f3c42b354a21d4bfe67">
<name>OS/2 1.3 (1.44Mb Disk 7)</name>
<name>OS/2 1.3 (1.44M Disk 7)</name>
</disk>
<disk id="disk08" size="1474560" chs="80:2:18" img="static/OS213-DISK08.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK08.json" md5="821a6873437610f77167e8884c4bd977" md5json="93bb507a019409004716c48f5c002a5d">
<name>OS/2 1.3 (1.44Mb Disk 8)</name>
<name>OS/2 1.3 (1.44M Disk 8)</name>
</disk>
<disk id="disk09" size="1474560" chs="80:2:18" img="static/OS213-DISK09.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK09.json" md5="fce2113a6d1a286afa1653bdc77214e0" md5json="3282cd0642a19f97a1c8758f3a4debdc">
<name>OS/2 1.3 (1.44Mb Disk 9)</name>
<name>OS/2 1.3 (1.44M Disk 9)</name>
</disk>
<disk id="disk10" size="1474560" chs="80:2:18" img="static/OS213-DISK10.img" href="/disks/pc/os2/ibm/1.3/OS213-DISK10.json" md5="58e1156eba5600bc600d17be93f5e8e0" md5json="e8567c55839410508911dc96b260ee57">
<name>OS/2 1.3 (1.44Mb Disk 10)</name>
<name>OS/2 1.3 (1.44M Disk 10)</name>
</disk>
</manifest>

View file

@ -2279,7 +2279,7 @@ if (DEBUGGER) {
/*
* For purposes of display only, rewind addr to the address of the responsible "INT n" instruction; we
* know it's the two-byte "INT n" instruction because that's the only opcode handler that calls checkIntNotify()
* at the moment. If that changes, then this will have to change as well.
* at the moment.
*/
addr -= 2;
this.message("INT " + str.toHexByte(nInt) + ": AH=" + str.toHexByte(AH) + " @" + this.hexOffset(addr - this.cpu.segCS.base, this.cpu.getCS()) + sFunc);

View file

@ -400,7 +400,7 @@ CompaqController.readByte = function readCompaqControllerByte(off, addr)
b = (off & 0x1)? (this.controller.wRAMSetup >> 8) : (this.controller.wRAMSetup & 0xff);
}
if (DEBUG) {
this.controller.ram.printMessage("CompaqController.readByte(" + str.toHexWord(off) + ") returned " + str.toHexByte(b), true, true);
this.controller.ram.printMessage("CompaqController.readByte(" + str.toHexWord(off) + ") returned " + str.toHexByte(b), 0, true);
if (MAXDEBUG && DEBUGGER && off >= 0x2) this.dbg.stopCPU();
}
return b;
@ -459,7 +459,7 @@ CompaqController.writeByte = function writeCompaqControllerByte(off, b, addr)
* All bits in 0x80C00001 and 0x80C00003 are reserved, so we can simply ignore those writes.
*/
if (DEBUG) {
this.controller.ram.printMessage("CompaqController.writeByte(" + str.toHexWord(off) + "," + str.toHexByte(b) + ")", true, true);
this.controller.ram.printMessage("CompaqController.writeByte(" + str.toHexWord(off) + "," + str.toHexByte(b) + ")", 0, true);
}
};

View file

@ -1285,8 +1285,8 @@ Card.ATC = {
INDX: 0x10, // ATC Mode Control Register
GRAPHICS: 0x01, // bit 0: set for graphics mode, clear for alphanumeric mode
MONOEM: 0x02, // bit 1: set for monochrome emulation mode, clear for color emulation
TEXTGRCC: 0x04, // bit 2: set for line graphics in character codes 0xC0-0xDF, clear otherwise
TEXTBLINK: 0x08, // bit 3: set for text blink attribute, clear for background intensity attribute
TEXT_9DOT: 0x04, // bit 2: set for 9-dot replication in character codes 0xC0-0xDF
BLINK_ENABLE: 0x08, // bit 3: set for text/graphics blink, clear for background intensity
RESERVED: 0x10, // bit 4: reserved
PANCOMPAT: 0x20, // bit 5: set for pixel-panning compatibility
PELWIDTH: 0x40, // bit 6: set for 256-color modes, clear for all other modes
@ -3904,6 +3904,9 @@ Video.prototype.createFontColor = function(font, iColor, rgbColor, nDouble, offD
* This "bit" of logic takes care of those characters (0xC0-0xDF) whose 9th bit must mirror the 8th bit;
* in all other cases, any bit past the 8th bit is automatically zero. It also takes care of embedding a solid
* row of bits whenever fUnderline is true.
*
* TODO: For EGA/VGA, replication of the 9th dot needs to be based on the TEXT_9DOT bit of the ATC.MODE
* register, which is particularly important for user-defined fonts that do not want that bit replicated.
*/
var bit = (fUnderline? 1 : (b & (0x80 >> (x >= 8 && iChar >= 0xC0 && iChar <= 0xDF? 7 : x))));
var xDst = (x << nDouble);
@ -5100,7 +5103,13 @@ Video.prototype.updateScreenText = function(addrScreen, addrScreenLimit, iCell,
var dataBlink = 0;
var dataDraw = (Video.ATTRS.DRAW_FGND << 8);
var dataMask = 0xfffff;
if (this.cardActive.regMode & Card.MDA.MODE.BLINK_ENABLE) {
var fBlinkEnable = (this.cardActive.regMode & Card.MDA.MODE.BLINK_ENABLE);
if (this.nCard >= Video.CARD.EGA) {
fBlinkEnable = (this.cardActive.regATCData[Card.ATC.MODE.INDX] & Card.ATC.MODE.BLINK_ENABLE);
}
if (fBlinkEnable) {
dataBlink = (Video.ATTRS.BGND_BLINK << 8);
dataMask &= ~dataBlink;
if (!(this.cBlinks & 0x2)) dataMask &= ~dataDraw;
@ -5223,6 +5232,8 @@ Video.prototype.updateScreenGraphicsCGA = function(addrScreen, addrScreenLimit)
/**
* updateScreenGraphicsEGA(addrScreen, addrScreenLimit)
*
* TODO: Add support for blinking graphics (ATC.MODE.BLINK_ENABLE)
*
* @param addrScreen
* @param addrScreenLimit
*/
@ -5346,6 +5357,8 @@ Video.prototype.updateScreenGraphicsEGA = function(addrScreen, addrScreenLimit)
* (320x200x256), where each pixel's bits are contained within a single plane. This is essentially all 256-color
* modes (CHAIN4, "Mode X", etc), hence the hard-coded call to getCardColors(8).
*
* TODO: Add support for blinking graphics (ATC.MODE.BLINK_ENABLE)
*
* @param addrScreen
* @param addrScreenLimit
*/

View file

@ -431,7 +431,8 @@ X86.BACKTRACK = {
/*
* These PS flags are always stored directly in regPS for the 8086/8088, hence the
* "direct" designation; other processors must adjust these bits accordingly. The final
* adjusted value is stored in PS_DIRECT.
* adjusted value is stored in PS_DIRECT (ie, 80286 and up also include PS.IOPL.MASK and
* PS.NT in PS_DIRECT).
*/
X86.PS_DIRECT_8086 = (X86.PS.TF | X86.PS.IF | X86.PS.DF);

View file

@ -1014,6 +1014,7 @@ X86CPU.prototype.initProcessor = function()
{
this.PS_SET = X86.PS_SET_8086;
this.PS_DIRECT = X86.PS_DIRECT_8086;
this.PS_CLEAR_RM = X86.PS.IOPL.MASK | X86.PS.NT;
this.OPFLAG_NOINTR_8086 = X86.OPFLAG.NOINTR;
this.nShiftCountMask = 0xff; // on an 8086/8088, all shift counts are used as-is
@ -1080,6 +1081,13 @@ X86CPU.prototype.initProcessor = function()
if (I386 && this.model >= X86.MODEL_80386) {
var bOpcode;
/*
* TODO: Determine if the Nested Task (PS.NT) flag should really be cleared in real-mode on an 80386
* (we already know based on the OS/2 CPU test discussed in setPS() that it can't be set in real-mode
* on an 80286); for now, we assume that it should remain clear on all CPUs, to avoid any unexpected
* nested-task weirdness in real-mode.
*/
this.PS_CLEAR_RM = X86.PS.NT;
this.aOps[X86.OPCODE.FS] = X86.opFS; // 0x64
this.aOps[X86.OPCODE.GS] = X86.opGS; // 0x65
this.aOps[X86.OPCODE.OS] = X86.opOS; // 0x66
@ -2680,14 +2688,17 @@ X86CPU.prototype.setPS = function(regPS, cpl)
/*
* OS/2 1.0 discriminates between an 80286 and an 80386 based on whether an IRET in real-mode that
* pops 0xF000 into the flags is able to set *any* of flag bits 12-15: if it can, then OS/2 declares
* the CPU an 80386. Therefore, in real-mode, we must zero all incoming bits 12-15.
* the CPU an 80386.
*
* This has the added benefit of relieving us from zeroing the effective IOPL (this.nIOPL) whenever
* we're in real-mode, since we're zeroing the incoming IOPL bits up front now.
* So, if the CPU is an 80286, we zero incoming bits 12-14 in real-mode (bit 15 is never allowed to
* be modified, so there's no need to mask it). And if the CPU is an 80386, we zero only bit 14 (PS.NT),
* allowing the IOPL bits to change; however, that should not affect any real-mode operations, since
* segCS.cpl will always be zero, making the IOPL setting irrelevant.
*
* It's still an open question whether an 80386 should also clear the Nested Task (PS.NT) flag in
* real-mode; if not, then initProcessor() should set PS_CLEAR_RM to zero.
*/
if (!(this.regCR0 & X86.CR0.MSW.PE)) {
regPS &= ~(X86.PS.IOPL.MASK | X86.PS.NT | X86.PS.BIT15);
}
if (!(this.regCR0 & X86.CR0.MSW.PE)) regPS &= ~this.PS_CLEAR_RM;
/*
* There are some cases (eg, an IRET returning to a less privileged code segment) where the CPL

View file

@ -78,7 +78,7 @@ if (typeof module !== 'undefined') {
* @param {string} type
* @param {Object} [parms]
* @param {Object} [constructor]
* @param {number} [bitsMessage]
* @param {number} [bitsMessage] selects message(s) that the component wants to enable (default is 0)
*/
function Component(type, parms, constructor, bitsMessage)
{
@ -123,7 +123,7 @@ function Component(type, parms, constructor, bitsMessage)
this.clearError();
this.bindings = {};
this.dbg = null; // by default, no connection to a Debugger
this.bitsMessage = bitsMessage || -1;
this.bitsMessage = bitsMessage || 0;
Component.add(this);
}
@ -946,7 +946,7 @@ Component.prototype = {
bitsMessage = bitsMessage || this.bitsMessage;
}
var bitsEnabled = this.dbg.bitsMessage & bitsMessage;
return (bitsEnabled === bitsMessage || !!(bitsEnabled & this.dbg.bitsWarning));
return (!!bitsMessage && bitsEnabled === bitsMessage || !!(bitsEnabled & this.dbg.bitsWarning));
}
return false;
},