The 5170 AT hard disk controller is limping along now, so I'm getting ready for a 1.15.4 release
Some other interesting bugs were fixed along the way: the Video component incorrectly assumed that masking a negative number with 0x80000000 would yield 0x80000000 (it actually yields -0x80000000, thank you JavaScript); the ChipSet component provides a new addCMOSMemory() interface that RAM objects can use to bump the CMOS total to match the actual total; the CPU properly implements INSW and OUTSW instructions now (kind of important for the AT hard disk controller)
This commit is contained in:
parent
4ff357669d
commit
0f06c3f039
115 changed files with 2803 additions and 1902 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>VisiCalc</title>
|
<title>VisiCalc</title>
|
||||||
<!-- Since version numbers are incorporated into the disk image names, and this version number is a bit ugly, we're not exposing it with the normal "version" tag -->
|
<!-- Since version numbers are incorporated into the disk image names, and this version number is a bit ugly, we're not exposing it with the normal "version" tag -->
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Executive Suite</title>
|
<title>Executive Suite</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Rogue</title>
|
<title>Rogue</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>ThinkTank</title>
|
<title>ThinkTank</title>
|
||||||
<version>2.41NP</version>
|
<version>2.41NP</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>The Dungeons of Moria</title>
|
<title>The Dungeons of Moria</title>
|
||||||
<version>4.872</version>
|
<version>4.872</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>The Dungeons of Moria</title>
|
<title>The Dungeons of Moria</title>
|
||||||
<version>5.5</version>
|
<version>5.5</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="c1psim" class="c1p" border="1" width="100%" style="background-color:#FAEBD7">
|
<machine id="c1psim" class="c1p" border="1" width="100%" style="background-color:#FAEBD7">
|
||||||
<name>OSI Challenger 1P (32Kb) with Disk Support</name>
|
<name>OSI Challenger 1P (32Kb) with Disk Support</name>
|
||||||
<computer id="c1p" name="Challenger 1P">
|
<computer id="c1p" name="Challenger 1P">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="c1pAll" class="c1p" border="1" width="100%" style="background-color:#FAEBD7">
|
<machine id="c1pAll" class="c1p" border="1" width="100%" style="background-color:#FAEBD7">
|
||||||
<name>OSI Challenger 1P (8Kb, More Programs)</name>
|
<name>OSI Challenger 1P (8Kb, More Programs)</name>
|
||||||
<computer id="c1p" name="Challenger 1P">
|
<computer id="c1p" name="Challenger 1P">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.3/outline.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.4/outline.xsl"?>
|
||||||
<outline>
|
<outline>
|
||||||
<title>Challenger 1P (8Kb) "Server Array"</title>
|
<title>Challenger 1P (8Kb) "Server Array"</title>
|
||||||
<machine id="OSI1" ref="/configs/c1p/machines/8kb/small/machine.xml"/>
|
<machine id="OSI1" ref="/configs/c1p/machines/8kb/small/machine.xml"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="c1p8kb" class="c1p" border="1" width="100%" style="background-color:#FAEBD7">
|
<machine id="c1p8kb" class="c1p" border="1" width="100%" style="background-color:#FAEBD7">
|
||||||
<name>OSI Challenger 1P (8Kb) with Debugger</name>
|
<name>OSI Challenger 1P (8Kb) with Debugger</name>
|
||||||
<computer id="c1p" name="Challenger 1P">
|
<computer id="c1p" name="Challenger 1P">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="c1pLarge" class="c1p" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="c1pLarge" class="c1p" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">OSI Challenger 1P (circa 1978)</name>
|
<name pos="center">OSI Challenger 1P (circa 1978)</name>
|
||||||
<computer id="c1p" name="Challenger 1P">
|
<computer id="c1p" name="Challenger 1P">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/c1pjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="c1pSmall" class="c1p" border="1" width="272px" pos="left" padright="16px" padbottom="16px" style="background-color:#FAEBD7">
|
<machine id="c1pSmall" class="c1p" border="1" width="272px" pos="left" padright="16px" padbottom="16px" style="background-color:#FAEBD7">
|
||||||
<computer id="c1p" name="Challenger 1P">
|
<computer id="c1p" name="Challenger 1P">
|
||||||
<module type="cpu" refid="cpu6502" start="0x0000" end="0xffff"/>
|
<module type="cpu" refid="cpu6502" start="0x0000" end="0xffff"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5150" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC (Model 5150), CGA, 384K</name>
|
<name>IBM PC (Model 5150), CGA, 384K</name>
|
||||||
<computer id="pc-cga-384k" name="IBM PC"/>
|
<computer id="pc-cga-384k" name="IBM PC"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC (Model 5150), CGA, 64K</name>
|
<name pos="center">IBM PC (Model 5150), CGA, 64K</name>
|
||||||
<computer id="pc-cga-64k" name="IBM PC" state="/configs/pc/machines/5150/cga/64kb/donkey/state.json"/>
|
<computer id="pc-cga-64k" name="IBM PC" state="/configs/pc/machines/5150/cga/64kb/donkey/state.json"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC (Model 5150), CGA, 64K</name>
|
<name pos="center">IBM PC (Model 5150), CGA, 64K</name>
|
||||||
<computer id="pc-cga-64k" name="IBM PC" state="/configs/pc/machines/5150/cga/64kb/donkey/state.json"/>
|
<computer id="pc-cga-64k" name="IBM PC" state="/configs/pc/machines/5150/cga/64kb/donkey/state.json"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5150" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC (Model 5150), CGA, 64K</name>
|
<name>IBM PC (Model 5150), CGA, 64K</name>
|
||||||
<computer id="pc-cga-64k" name="IBM PC"/>
|
<computer id="pc-cga-64k" name="IBM PC"/>
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC Model 5150 with Monochrome Display</name>
|
<name pos="center">IBM PC Model 5150 with Monochrome Display</name>
|
||||||
<computer id="pc-mda-64k" name="IBM PC" resume="1"/>
|
<computer id="pc-mda-64k" name="IBM PC" resume="1"/>
|
||||||
<ram id="ramLow" addr="0x00000"/>
|
<ram id="ramLow" addr="0x00000"/>
|
||||||
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/basic/ibm-basic-1.00.json"/>
|
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/basic/ibm-basic-1.00.json"/>
|
||||||
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/bios/5150/1981-04-24.json"/>
|
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/bios/5150/1981-04-24.json"/>
|
||||||
<video id="videoMDA" screenwidth="720" screenheight="350" scale="true" charset="/devices/pc/video/ibm-mda-cga.json" pos="center" width="720px" padding="8px">
|
<video id="videoMDA" screenwidth="720" screenheight="350" scale="true" charset="/devices/pc/video/ibm-mda-cga.json" pos="center" padding="8px">
|
||||||
<name>Monochrome Display</name>
|
<name>Monochrome Display</name>
|
||||||
</video>
|
</video>
|
||||||
<cpu id="cpu8088" model="8088" autostart="true"/>
|
<cpu id="cpu8088" model="8088" autostart="true"/>
|
||||||
<keyboard ref="/configs/pc/keyboards/minimal-functions.xml"/>
|
<keyboard ref="/configs/pc/keyboards/minimal-functions.xml"/>
|
||||||
<debugger id="debugger"/>
|
<debugger id="debugger"/>
|
||||||
<panel ref="/configs/pc/panels/default.xml"/>
|
<panel ref="/configs/pc/panels/wide.xml"/>
|
||||||
<fdc ref="/configs/pc/disks/samples.xml" width="280px"/>
|
<fdc ref="/configs/pc/disks/samples.xml" width="280px"/>
|
||||||
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000" pos="left" padleft="8px" padbottom="8px">
|
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000" pos="left" padleft="8px" padbottom="8px">
|
||||||
<control type="switches" class="input" label="SW1" binding="sw1" left="0px"/>
|
<control type="switches" class="input" label="SW1" binding="sw1" left="0px"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC (Model 5150) with Monochrome Display</name>
|
<name pos="center">IBM PC (Model 5150) with Monochrome Display</name>
|
||||||
<computer id="pc-mda-64k" name="IBM PC" resume="1"/>
|
<computer id="pc-mda-64k" name="IBM PC" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5150" class="pc" border="1" pos="center" style="background-color:white">
|
||||||
<name>IBM PC (Model 5150), MDA, 64K</name>
|
<name>IBM PC (Model 5150), MDA, 64K</name>
|
||||||
<computer id="pc-mda-64k" name="IBM PC"/>
|
<computer id="pc-mda-64k" name="IBM PC"/>
|
||||||
<cpu id="cpu8088" model="8088"/>
|
<cpu id="cpu8088" model="8088"/>
|
||||||
<ram id="ramLow" addr="0x00000"/>
|
<ram id="ramLow" addr="0x00000"/>
|
||||||
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/basic/ibm-basic-1.00.json"/>
|
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/basic/ibm-basic-1.00.json"/>
|
||||||
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/bios/5150/1981-04-24.json"/>
|
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/bios/5150/1981-04-24.json"/>
|
||||||
<video id="videoMDA" screenwidth="720" screenheight="350" scale="true" charset="/devices/pc/video/ibm-mda-cga.json" pos="center" width="720px" padding="8px">
|
<video id="videoMDA" screenwidth="720" screenheight="350" scale="true" charset="/devices/pc/video/ibm-mda-cga.json" pos="center" padding="8px">
|
||||||
<name>Monochrome Display</name>
|
<name>Monochrome Display</name>
|
||||||
</video>
|
</video>
|
||||||
<keyboard ref="/configs/pc/keyboards/us83.xml"/>
|
<keyboard ref="/configs/pc/keyboards/us83.xml"/>
|
||||||
<debugger id="debugger"/>
|
<debugger id="debugger"/>
|
||||||
<panel ref="/configs/pc/panels/default.xml"/>
|
<panel ref="/configs/pc/panels/wide.xml"/>
|
||||||
<fdc ref="/configs/pc/disks/samples.xml" width="280px"/>
|
<fdc ref="/configs/pc/disks/samples.xml" width="280px"/>
|
||||||
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000" pos="left" padleft="8px" padbottom="8px">
|
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000" pos="left" padleft="8px" padbottom="8px">
|
||||||
<control type="switches" class="input" label="SW1" binding="sw1" left="0px"/>
|
<control type="switches" class="input" label="SW1" binding="sw1" left="0px"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name pos="center">IBM PC XT (Model 5160), CGA, 256K, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), CGA, 256K, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), CGA, 256K, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), CGA, 256K, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), CGA, 256Kb, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), CGA, 256Kb, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-256k" name="IBM PC XT" resume="1"/>
|
<computer id="xt-cga-256k" name="IBM PC XT" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC XT (Model 5160), CGA, 256K, 10Mb Drive</name>
|
<name>IBM PC XT (Model 5160), CGA, 256K, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160) running Windows v1.01</name>
|
<name pos="center">IBM PC XT (Model 5160) running Windows v1.01</name>
|
||||||
<computer id="xt-cga-win101" name="IBM PC XT" state="/configs/pc/machines/5160/cga/256kb/win101/state.json" resume="1"/>
|
<computer id="xt-cga-win101" name="IBM PC XT" state="/configs/pc/machines/5160/cga/256kb/win101/state.json" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160) running Windows v1.01</name>
|
<name pos="center">IBM PC XT (Model 5160) running Windows v1.01</name>
|
||||||
<computer id="xt-cga-win101" name="IBM PC XT" state="/configs/pc/machines/5160/cga/256kb/win101/state.json"/>
|
<computer id="xt-cga-win101" name="IBM PC XT" state="/configs/pc/machines/5160/cga/256kb/win101/state.json"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC XT (Model 5160), CGA, 256K, WIN101</name>
|
<name>IBM PC XT (Model 5160), CGA, 256K, WIN101</name>
|
||||||
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
<computer id="xt-cga-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC XT (Model 5160), CGA, 512K, WIN101</name>
|
<name>IBM PC XT (Model 5160), CGA, 512K, WIN101</name>
|
||||||
<computer id="xt-cga-512k" name="IBM PC XT"/>
|
<computer id="xt-cga-512k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), CGA, 640K, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), CGA, 640K, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-640k" name="IBM PC XT"/>
|
<computer id="xt-cga-640k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC XT (Model 5160), CGA, 640K, 10Mb Drive</name>
|
<name>IBM PC XT (Model 5160), CGA, 640K, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-640k" name="IBM PC XT"/>
|
<computer id="xt-cga-640k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), CGA, 640K, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), CGA, 640K, 10Mb Drive</name>
|
||||||
<computer id="xt-cga-640k" name="IBM PC XT"/>
|
<computer id="xt-cga-640k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name>IBM PC XT (Model 5160), 64K EGA, 256K RAM, 10Mb Hard Drive</name>
|
<name>IBM PC XT (Model 5160), 64K EGA, 256K RAM, 10Mb Hard Drive</name>
|
||||||
<computer id="xt-ega-256k" name="IBM PC XT"/>
|
<computer id="xt-ega-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="680px" float="left" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="680px" float="left" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
||||||
<computer id="xt-ega-640k" name="IBM PC XT" state="/configs/pc/machines/5160/ega/640kb/win101/state.json"/>
|
<computer id="xt-ega-640k" name="IBM PC XT" state="/configs/pc/machines/5160/ega/640kb/win101/state.json"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name>IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
<name>IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
||||||
<computer id="xt-ega-640k" name="IBM PC XT"/>
|
<computer id="xt-ega-640k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name>IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
<name>IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
||||||
<computer id="xt-ega-640k" name="IBM PC XT"/>
|
<computer id="xt-ega-640k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
<name pos="center">IBM PC XT, 128K EGA, 640K RAM, 10Mb Hard Drive</name>
|
||||||
<computer id="xt-ega-640k" name="IBM PC XT" state="/configs/pc/machines/5160/ega/640kb/win101/state.json"/>
|
<computer id="xt-ega-640k" name="IBM PC XT" state="/configs/pc/machines/5160/ega/640kb/win101/state.json"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), MDA, 256Kb, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), MDA, 256Kb, 10Mb Drive</name>
|
||||||
<computer id="xt188-mda-256k" name="IBM PC XT"/>
|
<computer id="xt188-mda-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), MDA, 256Kb, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), MDA, 256Kb, 10Mb Drive</name>
|
||||||
<computer id="xt188-mda-256k" name="IBM PC XT"/>
|
<computer id="xt188-mda-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5160" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC XT (Model 5160), MDA, 256Kb, 10Mb Drive</name>
|
<name pos="center">IBM PC XT (Model 5160), MDA, 256Kb, 10Mb Drive</name>
|
||||||
<computer id="xt-mda-256k" name="IBM PC XT"/>
|
<computer id="xt-mda-256k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
<machine id="ibm5160" class="pc" border="1" pos="center" width="1000px" style="background-color:white">
|
||||||
<name>IBM PC XT (Model 5160), MDA, 64K, 10Mb Drive</name>
|
<name>IBM PC XT (Model 5160), MDA, 64K, 10Mb Drive</name>
|
||||||
<computer id="xt-mda-64k" name="IBM PC XT"/>
|
<computer id="xt-mda-64k" name="IBM PC XT"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5170" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5170" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name>IBM PC AT, 128K EGA, 640K RAM</name>
|
<name>IBM PC AT, 128K EGA, 640K RAM</name>
|
||||||
<computer id="at-ega-640k" name="IBM PC AT" buswidth="24"/>
|
<computer id="at-ega-640k" name="IBM PC AT" buswidth="24"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="document">
|
<manifest type="document">
|
||||||
<title>IBM PC AT References</title>
|
<title>IBM PC AT References</title>
|
||||||
<document href="http://minuszerodegrees.net/manuals/IBM_5170_Technical_Reference_1502243_MAR84.pdf">
|
<document href="http://minuszerodegrees.net/manuals/IBM_5170_Technical_Reference_1502243_MAR84.pdf">
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ Model 5160 Machine Configurations include:
|
||||||
* [IBM PC XT, CGA "Server Array" Demo](/configs/pc/machines/5160/cga/256kb/array/)
|
* [IBM PC XT, CGA "Server Array" Demo](/configs/pc/machines/5160/cga/256kb/array/)
|
||||||
* [IBM PC XT, EGA, 256K, 10Mb Drive, Debugger](/configs/pc/machines/5160/ega/256kb/debugger/)
|
* [IBM PC XT, EGA, 256K, 10Mb Drive, Debugger](/configs/pc/machines/5160/ega/256kb/debugger/)
|
||||||
* [IBM PC XT, EGA, 640K, 10Mb Drive, Debugger](/configs/pc/machines/5160/ega/640kb/debugger/)
|
* [IBM PC XT, EGA, 640K, 10Mb Drive, Debugger](/configs/pc/machines/5160/ega/640kb/debugger/)
|
||||||
|
* [IBM PC XT, EGA, 640K, Windows 1.01](/configs/pc/machines/5160/ega/640kb/win101/)
|
||||||
* [IBM PC XT, EGA "Server Array" Demo](/configs/pc/machines/5160/ega/640kb/array/)
|
* [IBM PC XT, EGA "Server Array" Demo](/configs/pc/machines/5160/ega/640kb/array/)
|
||||||
|
|
||||||
Model 5170 Machine Configurations include:
|
Model 5170 Machine Configurations include:
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -98,8 +98,35 @@
|
||||||
F000:070D @ FORMAT_SET
|
F000:070D @ FORMAT_SET
|
||||||
F000:0771 @ DSKETTE_SETUP
|
F000:0771 @ DSKETTE_SETUP
|
||||||
28DA +
|
28DA +
|
||||||
F000:0000 @ DISK_SETUP
|
F000:0000 @ HDISK_SETUP
|
||||||
F000:0197 @ DISK_IO
|
F000:0197 @ HDISK_IO
|
||||||
|
F000:0212 @ HDISK_IO_CONT
|
||||||
|
F000:02B3 @ HDISK_RESET
|
||||||
|
F000:0307 @ RETURN_STATUS
|
||||||
|
F000:0310 @ HDISK_READ
|
||||||
|
F000:0318 @ HDISK_WRITE
|
||||||
|
F000:0320 @ HDISK_VERF
|
||||||
|
F000:0333 @ FMT_TRK
|
||||||
|
F000:0349 @ READ_DASD_TYPE
|
||||||
|
F000:038B @ GET_HDPARM
|
||||||
|
F000:03EA @ INIT_DRV
|
||||||
|
F000:041F @ RD_LONG
|
||||||
|
F000:0427 @ WR_LONG
|
||||||
|
F000:042F @ HDISK_SEEK
|
||||||
|
F000:044E @ TST_RDY
|
||||||
|
F000:0465 @ HDISK_RECAL
|
||||||
|
F000:0489 @ CTLR_DIAGNOSTIC
|
||||||
|
F000:04BB @ COMMANDI
|
||||||
|
F000:04FB @ COMMANDO
|
||||||
|
F000:0544 @ COMMAND
|
||||||
|
F000:05A5 @ WAIT
|
||||||
|
F000:05DF @ NOT_BUSY
|
||||||
|
F000:0608 @ WAIT_DRQ
|
||||||
|
F000:061E @ CHECK_STATUS
|
||||||
|
F000:0630 @ CHECK_ST
|
||||||
|
F000:0664 @ CHECK_ER
|
||||||
|
F000:068F @ CHECK_DMA
|
||||||
|
F000:06B4 @ GET_VEC
|
||||||
F000:06CA @ HD_INT
|
F000:06CA @ HD_INT
|
||||||
0000 +
|
0000 +
|
||||||
F000:2FC8 @ KEYBOARD_IO_1
|
F000:2FC8 @ KEYBOARD_IO_1
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>1-2-3</title>
|
<title>1-2-3</title>
|
||||||
<version>1.0a</version>
|
<version>1.0a</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS Word</title>
|
<title>MS Word</title>
|
||||||
<version>2.0c</version>
|
<version>2.0c</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS Word</title>
|
<title>MS Word</title>
|
||||||
<version>3.0</version>
|
<version>3.0</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS Word</title>
|
<title>MS Word</title>
|
||||||
<version>3.1</version>
|
<version>3.1</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS Word</title>
|
<title>MS Word</title>
|
||||||
<version>5.0</version>
|
<version>5.0</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC (Model 5150) running CP/M-86</name>
|
<name pos="center">IBM PC (Model 5150) running CP/M-86</name>
|
||||||
<computer id="cpm-mda-64k" name="IBM PC" resume="1"/>
|
<computer id="cpm-mda-64k" name="IBM PC" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>CP/M-86</title>
|
<title>CP/M-86</title>
|
||||||
<version>1.1B</version>
|
<version>1.1B</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="740px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC (Model 5150) running IBM Advanced Diagnostics 2.20</name>
|
<name pos="center">IBM PC (Model 5150) running IBM Advanced Diagnostics 2.20</name>
|
||||||
<computer id="pc-mda-64k" name="IBM PC"/>
|
<computer id="pc-mda-64k" name="IBM PC"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>IBM Advanced Diagnostics</title>
|
<title>IBM Advanced Diagnostics</title>
|
||||||
<version>2.20</version>
|
<version>2.20</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>PC-DOS</title>
|
<title>PC-DOS</title>
|
||||||
<version>1.00</version>
|
<version>1.00</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>PC-DOS</title>
|
<title>PC-DOS</title>
|
||||||
<version>1.10</version>
|
<version>1.10</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>PC-DOS</title>
|
<title>PC-DOS</title>
|
||||||
<version>2.00</version>
|
<version>2.00</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>PC-DOS</title>
|
<title>PC-DOS</title>
|
||||||
<version>2.10</version>
|
<version>2.10</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>PC-DOS</title>
|
<title>PC-DOS</title>
|
||||||
<version>3.00</version>
|
<version>3.00</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS-DOS</title>
|
<title>MS-DOS</title>
|
||||||
<version>3.20</version>
|
<version>3.20</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS-DOS</title>
|
<title>MS-DOS</title>
|
||||||
<version>3.30</version>
|
<version>3.30</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS-DOS</title>
|
<title>MS-DOS</title>
|
||||||
<version>3.30a</version>
|
<version>3.30a</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS-DOS</title>
|
<title>MS-DOS</title>
|
||||||
<version>4.01</version>
|
<version>4.01</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS-DOS</title>
|
<title>MS-DOS</title>
|
||||||
<version>4.0M</version>
|
<version>4.0M</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>The Hitchhiker's Guide to the Galaxy</title>
|
<title>The Hitchhiker's Guide to the Galaxy</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC Model 5150 (CGA, 64K)</name>
|
<name pos="center">IBM PC Model 5150 (CGA, 64K)</name>
|
||||||
<computer id="infocom-cga-64k" name="IBM PC" resume="1"/>
|
<computer id="infocom-cga-64k" name="IBM PC" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC Model 5150 (CGA, 64K)</name>
|
<name pos="center">IBM PC Model 5150 (CGA, 64K)</name>
|
||||||
<computer id="infocom-cga-64k" name="IBM PC" resume="1"/>
|
<computer id="infocom-cga-64k" name="IBM PC" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Planetfall</title>
|
<title>Planetfall</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" width="980px" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">Zork I (IBM PC Model 5150)</name>
|
<name pos="center">Zork I (IBM PC Model 5150)</name>
|
||||||
<computer id="zork-cga-64k" name="IBM PC"/>
|
<computer id="zork-cga-64k" name="IBM PC"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Zork I</title>
|
<title>Zork I</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Zork II</title>
|
<title>Zork II</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Zork III</title>
|
<title>Zork III</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/machine.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/machine.xsl"?>
|
||||||
<machine id="ibm5150" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
<machine id="ibm5150" class="pc" border="1" pos="center" style="background-color:#FAEBD7">
|
||||||
<name pos="center">IBM PC (Model 5150) running Microsoft Adventure</name>
|
<name pos="center">IBM PC (Model 5150) running Microsoft Adventure</name>
|
||||||
<computer id="msadv-mda-64k" name="IBM PC" resume="1"/>
|
<computer id="msadv-mda-64k" name="IBM PC" resume="1"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Adventure</title>
|
<title>Microsoft Adventure</title>
|
||||||
<version>1.00</version>
|
<version>1.00</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Flight Simulator</title>
|
<title>Microsoft Flight Simulator</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MINIX</title>
|
<title>MINIX</title>
|
||||||
<version>1.1</version>
|
<version>1.1</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Turbo Pascal</title>
|
<title>Turbo Pascal</title>
|
||||||
<disk id="disk01" href="/disks/pc/tools/borland/pascal/3.0/TURBO30.json" md5="b1243614e885cb2a16047cff1adcb00b" md5json="672b78ada3c22756676b71fdf83c23af">
|
<disk id="disk01" href="/disks/pc/tools/borland/pascal/3.0/TURBO30.json" md5="b1243614e885cb2a16047cff1adcb00b" md5json="672b78ada3c22756676b71fdf83c23af">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS BASIC</title>
|
<title>MS BASIC</title>
|
||||||
<version/>
|
<version/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft C Compiler</title>
|
<title>Microsoft C Compiler</title>
|
||||||
<version>4.00</version>
|
<version>4.00</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Macro Assember</title>
|
<title>Microsoft Macro Assember</title>
|
||||||
<type>Tool</type>
|
<type>Tool</type>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>MS Mouse</title>
|
<title>MS Mouse</title>
|
||||||
<version>5.00</version>
|
<version>5.00</version>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Windows 1.01 SDK</title>
|
<title>Windows 1.01 SDK</title>
|
||||||
<disk id="disk01" href="/disks/pc/tools/microsoft/winsdk/1.01/WINRUN101-DISK1-SETUP.json" md5="d690737d566f7962276edc087c1e218e" md5json="466410d8f856ce6f2ffff64d57ebf498">
|
<disk id="disk01" href="/disks/pc/tools/microsoft/winsdk/1.01/WINRUN101-DISK1-SETUP.json" md5="d690737d566f7962276edc087c1e218e" md5json="466410d8f856ce6f2ffff64d57ebf498">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Windows 1.04 SDK</title>
|
<title>Windows 1.04 SDK</title>
|
||||||
<source href="http://os2museum.com">os2museum.com</source>
|
<source href="http://os2museum.com">os2museum.com</source>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Windows 2.03 SDK</title>
|
<title>Windows 2.03 SDK</title>
|
||||||
<source href="http://os2museum.com">os2museum.com</source>
|
<source href="http://os2museum.com">os2museum.com</source>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Windows 1.01</title>
|
<title>Microsoft Windows 1.01</title>
|
||||||
<disk id="disk01" dir="private/01-SETUP/" href="/disks/pc/win/win101/WIN101-DISK1-SETUP.json" md5="f82a9804ea9baab98f0d1fe9bf639637" md5json="6fd1f1762e78830e27f44e3e9386ae55">
|
<disk id="disk01" dir="private/01-SETUP/" href="/disks/pc/win/win101/WIN101-DISK1-SETUP.json" md5="f82a9804ea9baab98f0d1fe9bf639637" md5json="6fd1f1762e78830e27f44e3e9386ae55">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Windows 1.03</title>
|
<title>Microsoft Windows 1.03</title>
|
||||||
<disk id="disk01" dir="private/01-SETUP/" href="/disks/pc/win/win103/WIN103-DISK1-SETUP.json" md5="6cdc68e0fc237c858fc5099957e5fb3d" md5json="09605e98952fbec2e0bf39524c1106f3">
|
<disk id="disk01" dir="private/01-SETUP/" href="/disks/pc/win/win103/WIN103-DISK1-SETUP.json" md5="6cdc68e0fc237c858fc5099957e5fb3d" md5json="09605e98952fbec2e0bf39524c1106f3">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Windows 1.03a</title>
|
<title>Microsoft Windows 1.03a</title>
|
||||||
<disk id="disk01" href="/disks/pc/win/win103a/WIN103A-DISK1-SETUP.json" md5="90e3c32f675bf573bba222681143e9a4" md5json="a480122e92b286eab69388f167827253">
|
<disk id="disk01" href="/disks/pc/win/win103a/WIN103A-DISK1-SETUP.json" md5="90e3c32f675bf573bba222681143e9a4" md5json="a480122e92b286eab69388f167827253">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Windows 1.04</title>
|
<title>Microsoft Windows 1.04</title>
|
||||||
<source href="http://os2museum.com">os2museum.com</source>
|
<source href="http://os2museum.com">os2museum.com</source>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Microsoft Windows 2.03</title>
|
<title>Microsoft Windows 2.03</title>
|
||||||
<source href="http://os2museum.com">os2museum.com</source>
|
<source href="http://os2museum.com">os2museum.com</source>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>Windows COMM Driver (Source)</title>
|
<title>Windows COMM Driver (Source)</title>
|
||||||
<disk id="disk01" href="/disks/pc/win/wincomm/WINCOMM.json" md5="4aa07d1ff8a88b1bac0828d0f5b74fac" md5json="fd0dc74b471044add2b2338a889bd602"/>
|
<disk id="disk01" href="/disks/pc/win/wincomm/WINCOMM.json" md5="4aa07d1ff8a88b1bac0828d0f5b74fac" md5json="fd0dc74b471044add2b2338a889bd602"/>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.3/manifest.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.15.4/manifest.xsl"?>
|
||||||
<manifest type="software">
|
<manifest type="software">
|
||||||
<title>SCO Xenix 8086 Operating System For i8086 Vers 2.1.3</title>
|
<title>SCO Xenix 8086 Operating System For i8086 Vers 2.1.3</title>
|
||||||
<disk id="disk01" href="/disks/pc/xenix/8086/2.1.3/N1.json" md5="f3abb0fbee6a60d925cbd81a31e9f2a5" md5json="d84c47d7fa2e14f00f76dabed23a3b58">
|
<disk id="disk01" href="/disks/pc/xenix/8086/2.1.3/N1.json" md5="f3abb0fbee6a60d925cbd81a31e9f2a5" md5json="d84c47d7fa2e14f00f76dabed23a3b58">
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,25 @@ Attributes
|
||||||
The 'path' property is optional; if omitted, an empty disk matching the specified drive type will be created
|
The 'path' property is optional; if omitted, an empty disk matching the specified drive type will be created
|
||||||
(10mb in the case of drive type 3).
|
(10mb in the case of drive type 3).
|
||||||
|
|
||||||
|
* *type* (optional)
|
||||||
|
|
||||||
|
Should be set to one of:
|
||||||
|
|
||||||
|
* *'xt'*: PC XT Xebec controller emulation
|
||||||
|
* *'at'*: PC AT Western Digital controller emulation
|
||||||
|
|
||||||
|
Also, make sure the appropriate ROM is installed.
|
||||||
|
|
||||||
|
For the Xebec (*'xt'*) controller, you should install the Xebec ROM; eg:
|
||||||
|
|
||||||
|
<rom id="romHDC" addr="0xc8000" size="0x2000" file="/devices/pc/hdc/ibm-xebec-1982.json"/>
|
||||||
|
|
||||||
|
For the Western Digital (*'at'*) controller, use a Model 5170 (or newer) ROM module; eg:
|
||||||
|
|
||||||
|
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/bios/5170/1984-01-10.json"/>
|
||||||
|
|
||||||
|
The default *type* setting is *'xt'*.
|
||||||
|
|
||||||
* Also supports the attributes of *[Component](/docs/pcjs/component/)*.
|
* Also supports the attributes of *[Component](/docs/pcjs/component/)*.
|
||||||
|
|
||||||
Bindings
|
Bindings
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ if (typeof module !== 'undefined') {
|
||||||
* 2F0-2F7 Reserved
|
* 2F0-2F7 Reserved
|
||||||
* 2F8-2FF Asynchronous Communications (Secondary) [see the SerialPort component]
|
* 2F8-2FF Asynchronous Communications (Secondary) [see the SerialPort component]
|
||||||
* 300-31F Prototype Card
|
* 300-31F Prototype Card
|
||||||
* 320-32F Hard Drive Controller [see the HDC component]
|
* 320-32F Hard Drive Controller (XTC) [see the HDC component]
|
||||||
* 378-37F Printer
|
* 378-37F Printer
|
||||||
* 380-38C [2] SDLC Communications
|
* 380-38C [2] SDLC Communications
|
||||||
* 380-389 [2] Binary Synchronous Communications (Secondary)
|
* 380-389 [2] Binary Synchronous Communications (Secondary)
|
||||||
|
|
@ -132,6 +132,7 @@ if (typeof module !== 'undefined') {
|
||||||
* 071 CMOS Data ChipSet.CMOS.DATA.PORT
|
* 071 CMOS Data ChipSet.CMOS.DATA.PORT
|
||||||
* 0F0 Coprocessor Clear Busy (output 0x00)
|
* 0F0 Coprocessor Clear Busy (output 0x00)
|
||||||
* 0F1 Coprocessor Reset (output 0x00)
|
* 0F1 Coprocessor Reset (output 0x00)
|
||||||
|
* 1F0-1F7 Hard Drive Controller (ATC) [see the HDC component]
|
||||||
*
|
*
|
||||||
* [3] Port 0x70 doubles as the NMI Mask Register: output a CMOS address with bit 7 clear to enable NMI
|
* [3] Port 0x70 doubles as the NMI Mask Register: output a CMOS address with bit 7 clear to enable NMI
|
||||||
* or with bit 7 set to disable NMI (apparently the inverse of the older NMI Mask Register at port 0xA0).
|
* or with bit 7 set to disable NMI (apparently the inverse of the older NMI Mask Register at port 0xA0).
|
||||||
|
|
@ -150,7 +151,7 @@ function ChipSet(parmsChipSet)
|
||||||
this.model = (this.model !== undefined? parseInt(this.model, 10) : ChipSet.MODEL_5150);
|
this.model = (this.model !== undefined? parseInt(this.model, 10) : ChipSet.MODEL_5150);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given that the ROM BIOS is hard-coded to load boot sectors @ 0000:7C00, the minimum amount of system RAM
|
* Given that the ROM BIOS is hard-coded to load boot sectors @0000:7C00, the minimum amount of system RAM
|
||||||
* required to boot is therefore 32Kb. Whether that's actually enough to run any or all versions of PC-DOS is
|
* required to boot is therefore 32Kb. Whether that's actually enough to run any or all versions of PC-DOS is
|
||||||
* a separate question. FYI, with only 16Kb, the ROM BIOS will still try to boot, and fail miserably.
|
* a separate question. FYI, with only 16Kb, the ROM BIOS will still try to boot, and fail miserably.
|
||||||
*/
|
*/
|
||||||
|
|
@ -178,13 +179,6 @@ function ChipSet(parmsChipSet)
|
||||||
this.cDMACs = this.cPICs = 1;
|
this.cDMACs = this.cPICs = 1;
|
||||||
if (this.model >= ChipSet.MODEL_5170) {
|
if (this.model >= ChipSet.MODEL_5170) {
|
||||||
this.cDMACs = this.cPICs = 2;
|
this.cDMACs = this.cPICs = 2;
|
||||||
/*
|
|
||||||
* Initialize minimal support for the MODEL_5170's HFCOMBO card (see ChipSet.HFCOMBO below for details)
|
|
||||||
*/
|
|
||||||
this.regsHFCombo = {
|
|
||||||
bCtrl: 0x00, // port 0x1F4
|
|
||||||
bStatus: 0x7F // port 0x1F7
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
this.fScaleTimers = parmsChipSet['scaleTimers'] || false;
|
this.fScaleTimers = parmsChipSet['scaleTimers'] || false;
|
||||||
this.sRTCDate = parmsChipSet['rtcDate'];
|
this.sRTCDate = parmsChipSet['rtcDate'];
|
||||||
|
|
@ -213,7 +207,14 @@ function ChipSet(parmsChipSet)
|
||||||
if (DEBUG) this.log("webkitAudioContext not available");
|
if (DEBUG) this.log("webkitAudioContext not available");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* I used to defer ChipSet's reset() to powerUp(), which then gave us the option of doing either
|
||||||
|
* reset() OR restore(), instead of both. However, on MODEL_5170 machines, the initial CMOS data
|
||||||
|
* needs to be created earlier, so that if/when the HDC calls setCMOSDriveType(), we'll be ready.
|
||||||
|
*/
|
||||||
|
this.reset();
|
||||||
|
|
||||||
this.setReady();
|
this.setReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -241,7 +242,7 @@ ChipSet.MONITOR.EGAEMULATION = 5; // Enhanced Color Display (5154) in Emul
|
||||||
* 8237A DMA Controller (DMAC) I/O ports
|
* 8237A DMA Controller (DMAC) I/O ports
|
||||||
*
|
*
|
||||||
* MODEL_5150 and up uses DMA channel 0 for memory refresh cycles and channel 2 for the FDC
|
* MODEL_5150 and up uses DMA channel 0 for memory refresh cycles and channel 2 for the FDC
|
||||||
* MODEL_5160 and up uses DMA channel 3 for HDC transfers
|
* MODEL_5160 and up uses DMA channel 3 for HDC transfers (XTC only)
|
||||||
* MODEL_5170 and up contain *two* DMA Controllers, which we refer to as DMA0 and DMA1; channel 4
|
* MODEL_5170 and up contain *two* DMA Controllers, which we refer to as DMA0 and DMA1; channel 4
|
||||||
* on DMA1 is used to "cascade" channels 0-3 from DMA0, so only channels 5-7 are available on DMA1
|
* on DMA1 is used to "cascade" channels 0-3 from DMA0, so only channels 5-7 are available on DMA1
|
||||||
*
|
*
|
||||||
|
|
@ -325,7 +326,7 @@ ChipSet.DMA_MODE.MODE_BLOCK = 0x80;
|
||||||
ChipSet.DMA_MODE.MODE_CASCADE = 0xC0;
|
ChipSet.DMA_MODE.MODE_CASCADE = 0xC0;
|
||||||
|
|
||||||
ChipSet.DMA_FDC = 0x02; // DMA channel assigned to the Floppy Drive Controller (FDC)
|
ChipSet.DMA_FDC = 0x02; // DMA channel assigned to the Floppy Drive Controller (FDC)
|
||||||
ChipSet.DMA_HDC = 0x03; // DMA channel assigned to the Hard Drive Controller (HDC)
|
ChipSet.DMA_HDC = 0x03; // DMA channel assigned to the Hard Drive Controller (HDC; XTC only)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 8259A Programmable Interrupt Controller (PIC) I/O ports
|
* 8259A Programmable Interrupt Controller (PIC) I/O ports
|
||||||
|
|
@ -416,8 +417,8 @@ ChipSet.PIC_LO.OCW3_SMM_CMD = 0x60;
|
||||||
* highest priority (IRQ9 is the highest) and IRQ3 through IRQ7 having the lowest priority (IRQ7 is
|
* highest priority (IRQ9 is the highest) and IRQ3 through IRQ7 having the lowest priority (IRQ7 is
|
||||||
* the lowest).
|
* the lowest).
|
||||||
*
|
*
|
||||||
* Interrupt 13 is used on the system board and is not available on the I/O channel. Interrupt 8 is
|
* Interrupt 13 (IRQ.COPROC) is used on the system board and is not available on the I/O channel.
|
||||||
* used for the real-time clock."
|
* Interrupt 8 (IRQ.RTC) is used for the real-time clock."
|
||||||
*
|
*
|
||||||
* This priority scheme is a byproduct of IRQ8 through IRQ15 (slave PIC interrupts) being tied to IRQ2 of
|
* This priority scheme is a byproduct of IRQ8 through IRQ15 (slave PIC interrupts) being tied to IRQ2 of
|
||||||
* the master PIC. As a result, the two other system board interrupts, IRQ0 and IRQ1, continue to have the
|
* the master PIC. As a result, the two other system board interrupts, IRQ0 and IRQ1, continue to have the
|
||||||
|
|
@ -429,13 +430,13 @@ ChipSet.IRQ.KBD = 0x01;
|
||||||
ChipSet.IRQ.SLAVE = 0x02;
|
ChipSet.IRQ.SLAVE = 0x02;
|
||||||
ChipSet.IRQ.COM2 = 0x03;
|
ChipSet.IRQ.COM2 = 0x03;
|
||||||
ChipSet.IRQ.COM1 = 0x04;
|
ChipSet.IRQ.COM1 = 0x04;
|
||||||
ChipSet.IRQ.HDC = 0x05; // MODEL_5160 uses this for the HDC; MODEL_5170 designates it for LPT2
|
ChipSet.IRQ.XTC = 0x05; // MODEL_5160 uses this for its HDC; MODEL_5170 designates it for LPT2
|
||||||
ChipSet.IRQ.FDC = 0x06;
|
ChipSet.IRQ.FDC = 0x06;
|
||||||
ChipSet.IRQ.LPT1 = 0x07;
|
ChipSet.IRQ.LPT1 = 0x07;
|
||||||
ChipSet.IRQ.RTC = 0x08;
|
ChipSet.IRQ.RTC = 0x08;
|
||||||
ChipSet.IRQ.IRQ2 = 0x09;
|
ChipSet.IRQ.IRQ2 = 0x09;
|
||||||
ChipSet.IRQ.COPROC = 0x0D;
|
ChipSet.IRQ.COPROC = 0x0D;
|
||||||
ChipSet.IRQ.ATHDC = 0x0E; // MODEL_5170 uses this for the HDC
|
ChipSet.IRQ.ATC = 0x0E; // MODEL_5170 uses this for its HDC
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 8253 Programmable Interval Timer (PIT) I/O ports
|
* 8253 Programmable Interval Timer (PIT) I/O ports
|
||||||
|
|
@ -678,7 +679,7 @@ ChipSet.CMOS.ADDR.RTC_STATUSC = 0x0C;
|
||||||
ChipSet.CMOS.ADDR.RTC_STATUSD = 0x0D;
|
ChipSet.CMOS.ADDR.RTC_STATUSD = 0x0D;
|
||||||
ChipSet.CMOS.ADDR.DIAG = 0x0E;
|
ChipSet.CMOS.ADDR.DIAG = 0x0E;
|
||||||
ChipSet.CMOS.ADDR.SHUTDOWN = 0x0F;
|
ChipSet.CMOS.ADDR.SHUTDOWN = 0x0F;
|
||||||
ChipSet.CMOS.ADDR.FDRIVE = 0x10; // drive 0 ChipSet.FDRIVE in high nibble, drive 1 ChipSet.FDRIVE value in low nibble
|
ChipSet.CMOS.ADDR.FDRIVE = 0x10;
|
||||||
ChipSet.CMOS.ADDR.HDRIVE = 0x12;
|
ChipSet.CMOS.ADDR.HDRIVE = 0x12;
|
||||||
ChipSet.CMOS.ADDR.EQUIP = 0x14;
|
ChipSet.CMOS.ADDR.EQUIP = 0x14;
|
||||||
ChipSet.CMOS.ADDR.BASEMEM_LO = 0x15;
|
ChipSet.CMOS.ADDR.BASEMEM_LO = 0x15;
|
||||||
|
|
@ -733,37 +734,21 @@ ChipSet.CMOS.DIAG.HDRIVEFAIL = 0x08; // bit 3: 1 indicates hard drive control
|
||||||
ChipSet.CMOS.DIAG.TIMEFAIL = 0x04; // bit 2: 1 indicates time failure
|
ChipSet.CMOS.DIAG.TIMEFAIL = 0x04; // bit 2: 1 indicates time failure
|
||||||
ChipSet.CMOS.DIAG.RESERVED = 0x03;
|
ChipSet.CMOS.DIAG.RESERVED = 0x03;
|
||||||
|
|
||||||
ChipSet.FDRIVE = { // abCMOSData[ChipSet.CMOS.ADDR.FDRIVE] values (drive 0 value in high nibble, drive 1 value in low nibble)
|
ChipSet.FDRIVE = { // abCMOSData[ChipSet.CMOS.ADDR.FDRIVE]
|
||||||
NONE: 0, // no drive
|
D0_MASK: 0xF0, // Drive 0 type in high nibble
|
||||||
DSDD: 1, // double-sided double-density drive (48 TPI, 40 tracks, 360Kb max)
|
D1_MASK: 0x0F, // Drive 1 type in lower nibble
|
||||||
DSHD: 2 // double-sided high-density drive (96 TPI, 80 tracks, 1.2Mb max)
|
NONE: 0, // no drive
|
||||||
|
DSDD: 1, // double-sided double-density drive (48 TPI, 40 tracks, 360Kb max)
|
||||||
|
DSHD: 2 // double-sided high-density drive (96 TPI, 80 tracks, 1.2Mb max)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
ChipSet.CMOS.HDRIVE = { // abCMOSData[ChipSet.CMOS.ADDR.HDRIVE]
|
||||||
* The following HDRIVE types are supported by the MODEL_5170, where C is Cylinders, H is Heads,
|
D0_MASK: 0xF0, // Drive 0 type in high nibble
|
||||||
* WP is Write Pre-Comp, and LZ is Landing Zone.
|
D1_MASK: 0x0F // Drive 1 type in lower nibble
|
||||||
*
|
/*
|
||||||
* Type C H WP LZ
|
* HDRIVE types are defined by table in the HDC component, which uses setCMOSDriveType() to update the CMOS
|
||||||
* ---- --- -- --- ---
|
*/
|
||||||
* 1 306 4 128 305
|
};
|
||||||
* 2 615 4 300 615
|
|
||||||
* 3 615 6 300 615
|
|
||||||
* 4 940 8 512 940
|
|
||||||
* 5 940 6 512 940
|
|
||||||
* 6 615 4 no 615
|
|
||||||
* 7 462 8 256 511
|
|
||||||
* 8 733 5 no 733
|
|
||||||
* 9 900 15 no8 901
|
|
||||||
* 10 820 3 no 820
|
|
||||||
* 11 855 5 no 855
|
|
||||||
* 12 855 7 no 855
|
|
||||||
* 13 306 8 128 319
|
|
||||||
* 14 733 7 no 733
|
|
||||||
* 15 (reserved--all zeros)
|
|
||||||
*/
|
|
||||||
ChipSet.CMOS.HDRIVE = {}; // abCMOSData[ChipSet.CMOS.ADDR.HDRIVE]
|
|
||||||
ChipSet.CMOS.HDRIVE.D0 = 0xF0;
|
|
||||||
ChipSet.CMOS.HDRIVE.D1 = 0x0F;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The CMOS equipment flags use the same format as the older PPI equipment flags
|
* The CMOS equipment flags use the same format as the older PPI equipment flags
|
||||||
|
|
@ -805,33 +790,6 @@ ChipSet.COPROC = {}; // TODO: Define a variable for this
|
||||||
ChipSet.COPROC.PORT_CLEAR = 0xF0; // clear the coprocessor's "busy" state
|
ChipSet.COPROC.PORT_CLEAR = 0xF0; // clear the coprocessor's "busy" state
|
||||||
ChipSet.COPROC.PORT_RESET = 0xF1; // reset the coprocessor
|
ChipSet.COPROC.PORT_RESET = 0xF1; // reset the coprocessor
|
||||||
|
|
||||||
/*
|
|
||||||
* Ports used by MODEL_5170 BIOS for "Combo Hard File/Diskette Card" check (@ F000:144C)
|
|
||||||
*
|
|
||||||
* The ChipSet component provides minimal boot-time support for the "IBM Personal Computer
|
|
||||||
* AT Fixed Disk and Diskette Drive Adapter", aka the HFCOMBO card, until we're able to fork
|
|
||||||
* the HDC component into a new HDCombo component to deal with the "Fixed Disk" portion
|
|
||||||
* of the HFCOMBO card. Fortunately, the "Diskette Drive Adapter" portion of the card is
|
|
||||||
* extremely compatible with the existing FDC component, so that component can be used as-is,
|
|
||||||
* with only minor tweaks.
|
|
||||||
*
|
|
||||||
* Initially, we intercepted reads for HFCOMBO's STATUS port simply to reduce boot time;
|
|
||||||
* otherwise, the default "unknown port" response of 0xFF would lengthen boot time. To solve
|
|
||||||
* that, the STATUS port simply needed to return a byte with bit 7 clear, so that the BIOS
|
|
||||||
* would then attempt to write/read the CTRL port.
|
|
||||||
*
|
|
||||||
* Next, we initially treated the HFCOMBO's CTRL port as an "unknown port", because again,
|
|
||||||
* we didn't need HDC support and it didn't seem to affect FDC support. But it turns out
|
|
||||||
* that FDC support IS affected, because if the BIOS doesn't set the "DUAL" bit (bit 0) of the
|
|
||||||
* "HFCNTRL" byte at 40:8F, then when it comes time later to report the diskette drive type,
|
|
||||||
* the "DISK_TYPE" function (@ F000:273D) will branch to one of two almost-identical blocks of
|
|
||||||
* code -- specifically, the block that disallows diskette drive types >= 2 (ChipSet.FDRIVE.DSDD)
|
|
||||||
* instead of >= 3 (ChipSet.FDRIVE.DSHD).
|
|
||||||
*/
|
|
||||||
ChipSet.HFCOMBO = {};
|
|
||||||
ChipSet.HFCOMBO.CTRL = {PORT: 0x1F4};
|
|
||||||
ChipSet.HFCOMBO.STATUS = {PORT: 0x1F7};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ChipSet-related BIOS interrupts, functions, and other parameters
|
* ChipSet-related BIOS interrupts, functions, and other parameters
|
||||||
*/
|
*/
|
||||||
|
|
@ -939,12 +897,8 @@ ChipSet.prototype.initBus = function(cmp, bus, cpu, dbg)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.powerUp = function(data, fRepower)
|
ChipSet.prototype.powerUp = function(data, fRepower)
|
||||||
{
|
{
|
||||||
if (!fRepower) {
|
if (!fRepower && data) {
|
||||||
if (!data || !this.restore) {
|
if (!this.restore(data)) return false;
|
||||||
this.reset();
|
|
||||||
} else {
|
|
||||||
if (!this.restore(data)) return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
@ -1038,6 +992,7 @@ ChipSet.prototype.reset = function()
|
||||||
this.abCMOSData = new Array(ChipSet.CMOS.ADDR.TOTAL);
|
this.abCMOSData = new Array(ChipSet.CMOS.ADDR.TOTAL);
|
||||||
this.initRTCDate(this.sRTCDate);
|
this.initRTCDate(this.sRTCDate);
|
||||||
this.initCMOSData();
|
this.initCMOSData();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO: Data below here has not yet been added to the save/restore state; when we're done adding new data,
|
* TODO: Data below here has not yet been added to the save/restore state; when we're done adding new data,
|
||||||
* make sure it all gets added.
|
* make sure it all gets added.
|
||||||
|
|
@ -1081,8 +1036,9 @@ ChipSet.prototype.initRTCDate = function(sDate)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* NOTE: I've already been burned once by a JavaScript library function that did NOT treat an undefined
|
* NOTE: I've already been burned once by a JavaScript library function that did NOT treat an undefined
|
||||||
* parameter the same as no parameter (eg, the async parameter in xmlHTTP.open() in IE), so I'm taking no
|
* parameter (ie, a parameter === undefined) the same as an omitted parameter (eg, the async parameter in
|
||||||
* chances here: if sDate is undefined, then explicitly call Date() with no parameters.
|
* xmlHTTP.open() in IE), so I'm taking no chances here: if sDate is undefined, then explicitly call Date()
|
||||||
|
* with no parameters.
|
||||||
*/
|
*/
|
||||||
var date = sDate? new Date(sDate) : new Date();
|
var date = sDate? new Date(sDate) : new Date();
|
||||||
|
|
||||||
|
|
@ -1289,21 +1245,99 @@ ChipSet.prototype.initCMOSData = function()
|
||||||
|
|
||||||
this.abCMOSData[ChipSet.CMOS.ADDR.FDRIVE] = (this.getSWFloppyDriveType(0) << 4) | this.getSWFloppyDriveType(1);
|
this.abCMOSData[ChipSet.CMOS.ADDR.FDRIVE] = (this.getSWFloppyDriveType(0) << 4) | this.getSWFloppyDriveType(1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We allow both memory totals to start at zero now, and rely on the RAM component to call addCMOSMemory()
|
||||||
|
* to update the total(s) as appropriate.
|
||||||
|
*
|
||||||
var wBaseMemKb = this.getSWMemorySize();
|
var wBaseMemKb = this.getSWMemorySize();
|
||||||
this.abCMOSData[ChipSet.CMOS.ADDR.BASEMEM_LO] = wBaseMemKb & 0xff;
|
this.abCMOSData[ChipSet.CMOS.ADDR.BASEMEM_LO] = wBaseMemKb & 0xff;
|
||||||
this.abCMOSData[ChipSet.CMOS.ADDR.BASEMEM_HI] = wBaseMemKb >> 8;
|
this.abCMOSData[ChipSet.CMOS.ADDR.BASEMEM_HI] = wBaseMemKb >> 8;
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The final step is calculating the CMOS checksum, which we then store into the CMOS as a courtesy, so that the
|
* The final step is calculating the CMOS checksum, which we then store into the CMOS as a courtesy, so that the
|
||||||
* user doesn't get unnecessary CMOS errors.
|
* user doesn't get unnecessary CMOS errors.
|
||||||
*/
|
*/
|
||||||
var wChecksum = this.getCMOSChecksum();
|
this.updateCMOSChecksum();
|
||||||
this.abCMOSData[ChipSet.CMOS.ADDR.CHKSUM_LO] = wChecksum & 0xff;
|
|
||||||
this.abCMOSData[ChipSet.CMOS.ADDR.CHKSUM_HI] = wChecksum >> 8;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getCMOSChecksum()
|
* setCMOSByte(iCMOS, b)
|
||||||
|
*
|
||||||
|
* This is ONLY for use by components that need to update CMOS configuration bytes to match their internal configuration.
|
||||||
|
*
|
||||||
|
* @this {ChipSet}
|
||||||
|
* @param {number} iCMOS
|
||||||
|
* @param {number} b
|
||||||
|
* @return {boolean} true if successful, false if not (eg, CMOS not initialized yet, or no CMOS on this machine)
|
||||||
|
*/
|
||||||
|
ChipSet.prototype.setCMOSByte = function(iCMOS, b)
|
||||||
|
{
|
||||||
|
if (this.abCMOSData) {
|
||||||
|
Component.assert(iCMOS >= ChipSet.CMOS.ADDR.FDRIVE && iCMOS < ChipSet.CMOS.ADDR.CHKSUM_HI);
|
||||||
|
this.abCMOSData[iCMOS] = b;
|
||||||
|
this.updateCMOSChecksum();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* addCMOSMemory(addr, size)
|
||||||
|
*
|
||||||
|
* This is ONLY for use by the RAM component, to dynamically update the CMOS memory configuration.
|
||||||
|
*
|
||||||
|
* @this {ChipSet}
|
||||||
|
* @param {number} addr (if 0, BASEMEM_LO/BASEMEM_HI is updated; if >= 0x100000, then EXTMEM_LO/EXTMEM_HI is updated)
|
||||||
|
* @param {number} size (in bytes; we convert to Kb)
|
||||||
|
* @return {boolean} true if successful, false if not (eg, CMOS not initialized yet, or no CMOS on this machine)
|
||||||
|
*/
|
||||||
|
ChipSet.prototype.addCMOSMemory = function(addr, size)
|
||||||
|
{
|
||||||
|
if (this.abCMOSData) {
|
||||||
|
var iCMOS = (addr < 0x100000? ChipSet.CMOS.ADDR.BASEMEM_LO : ChipSet.CMOS.ADDR.EXTMEM_LO);
|
||||||
|
var wKb = this.abCMOSData[iCMOS] | (this.abCMOSData[iCMOS+1] << 8);
|
||||||
|
wKb += (size >> 10);
|
||||||
|
this.abCMOSData[iCMOS] = wKb & 0xff;
|
||||||
|
this.abCMOSData[iCMOS+1] = wKb >> 8;
|
||||||
|
this.updateCMOSChecksum();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setCMOSDriveType(iDrive, bType)
|
||||||
|
*
|
||||||
|
* This is ONLY for use by the HDC component, to update the CMOS drive configuration to match HDC's internal configuration.
|
||||||
|
*
|
||||||
|
* TODO: Extend this to support FDC drive updates, so that FDC can eventually specify diskette drive types
|
||||||
|
* (ie, DSDD or DSHD) in the same way that HDC does; currently, MODEL_5170 diskette drives always default to DSHD
|
||||||
|
* (see getSWFloppyDriveType()).
|
||||||
|
*
|
||||||
|
* @this {ChipSet}
|
||||||
|
* @param {number} iDrive
|
||||||
|
* @param {number} bType
|
||||||
|
* @return {boolean} true if successful, false if not (eg, CMOS not initialized yet, or no CMOS on this machine)
|
||||||
|
*/
|
||||||
|
ChipSet.prototype.setCMOSDriveType = function(iDrive, bType)
|
||||||
|
{
|
||||||
|
if (this.abCMOSData) {
|
||||||
|
var b = this.abCMOSData[ChipSet.CMOS.ADDR.HDRIVE];
|
||||||
|
Component.assert(bType > 0 && bType < 0xf);
|
||||||
|
if (iDrive) {
|
||||||
|
b = (b & ChipSet.CMOS.HDRIVE.D0_MASK) | bType;
|
||||||
|
} else {
|
||||||
|
b = (b & ChipSet.CMOS.HDRIVE.D1_MASK) | (bType << 4);
|
||||||
|
}
|
||||||
|
this.setCMOSByte(ChipSet.CMOS.ADDR.HDRIVE, b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* updateCMOSChecksum()
|
||||||
*
|
*
|
||||||
* This sums all the CMOS bytes from 0x10-0x2D, creating a 16-bit checksum. That's a total of 30 (unsigned) 8-bit
|
* This sums all the CMOS bytes from 0x10-0x2D, creating a 16-bit checksum. That's a total of 30 (unsigned) 8-bit
|
||||||
* values which could sum to at most 30*255 or 7650 (0x1DE2). Since there's no way that can overflow 16 bits, we don't
|
* values which could sum to at most 30*255 or 7650 (0x1DE2). Since there's no way that can overflow 16 bits, we don't
|
||||||
|
|
@ -1312,15 +1346,15 @@ ChipSet.prototype.initCMOSData = function()
|
||||||
* WARNING: The IBM PC AT TechRef, p.1-53 (p.75) claims that the checksum is on bytes 0x10-0x20, but that's simply wrong.
|
* WARNING: The IBM PC AT TechRef, p.1-53 (p.75) claims that the checksum is on bytes 0x10-0x20, but that's simply wrong.
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @return {number} 16-bit checksum of CMOS bytes 0x10-0x2D
|
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.getCMOSChecksum = function()
|
ChipSet.prototype.updateCMOSChecksum = function()
|
||||||
{
|
{
|
||||||
var wChecksum = 0;
|
var wChecksum = 0;
|
||||||
for (var iCMOS = ChipSet.CMOS.ADDR.FDRIVE; iCMOS < ChipSet.CMOS.ADDR.CHKSUM_HI; iCMOS++) {
|
for (var iCMOS = ChipSet.CMOS.ADDR.FDRIVE; iCMOS < ChipSet.CMOS.ADDR.CHKSUM_HI; iCMOS++) {
|
||||||
wChecksum += this.abCMOSData[iCMOS];
|
wChecksum += this.abCMOSData[iCMOS];
|
||||||
}
|
}
|
||||||
return wChecksum;
|
this.abCMOSData[ChipSet.CMOS.ADDR.CHKSUM_LO] = wChecksum & 0xff;
|
||||||
|
this.abCMOSData[ChipSet.CMOS.ADDR.CHKSUM_HI] = wChecksum >> 8;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1679,7 +1713,7 @@ ChipSet.prototype.getSWFloppyDrives = function(fInit)
|
||||||
ChipSet.prototype.getSWFloppyDriveType = function(iDrive)
|
ChipSet.prototype.getSWFloppyDriveType = function(iDrive)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* TODO: For MODEL_5170, we default all floppy drive types to High Capacity, but more control would be nice.
|
* TODO: For MODEL_5170, we default all floppy drive types to DSHD, but more control would be nice.
|
||||||
*/
|
*/
|
||||||
if (iDrive < this.getSWFloppyDrives()) {
|
if (iDrive < this.getSWFloppyDrives()) {
|
||||||
return (this.model < ChipSet.MODEL_5170? ChipSet.FDRIVE.DSDD : ChipSet.FDRIVE.DSHD);
|
return (this.model < ChipSet.MODEL_5170? ChipSet.FDRIVE.DSDD : ChipSet.FDRIVE.DSHD);
|
||||||
|
|
@ -1899,7 +1933,7 @@ ChipSet.prototype.dumpCMOS = function()
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} iChannel
|
* @param {number} iChannel
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inDMAChannelAddr = function(iDMAC, iChannel, port, addrFrom)
|
ChipSet.prototype.inDMAChannelAddr = function(iDMAC, iChannel, port, addrFrom)
|
||||||
|
|
@ -1920,7 +1954,7 @@ ChipSet.prototype.inDMAChannelAddr = function(iDMAC, iChannel, port, addrFrom)
|
||||||
* @param {number} iChannel
|
* @param {number} iChannel
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAChannelAddr = function outDMAChannelAddr(iDMAC, iChannel, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAChannelAddr = function outDMAChannelAddr(iDMAC, iChannel, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -1938,7 +1972,7 @@ ChipSet.prototype.outDMAChannelAddr = function outDMAChannelAddr(iDMAC, iChannel
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} iChannel
|
* @param {number} iChannel
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inDMAChannelCount = function(iDMAC, iChannel, port, addrFrom)
|
ChipSet.prototype.inDMAChannelCount = function(iDMAC, iChannel, port, addrFrom)
|
||||||
|
|
@ -1959,7 +1993,7 @@ ChipSet.prototype.inDMAChannelCount = function(iDMAC, iChannel, port, addrFrom)
|
||||||
* @param {number} iChannel (ports 0x01, 0x03, 0x05, 0x07)
|
* @param {number} iChannel (ports 0x01, 0x03, 0x05, 0x07)
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAChannelCount = function(iDMAC, iChannel, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAChannelCount = function(iDMAC, iChannel, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -1976,7 +2010,7 @@ ChipSet.prototype.outDMAChannelCount = function(iDMAC, iChannel, port, bOut, add
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*
|
*
|
||||||
* From the 8237A spec:
|
* From the 8237A spec:
|
||||||
|
|
@ -1991,13 +2025,13 @@ ChipSet.prototype.outDMAChannelCount = function(iDMAC, iChannel, port, bOut, add
|
||||||
* Bits 4–7 are set whenever their corresponding channel is requesting service."
|
* Bits 4–7 are set whenever their corresponding channel is requesting service."
|
||||||
*
|
*
|
||||||
* TRIVIA: This hook wasn't installed when I was testing with the MODEL_5150 ROM BIOS, and it
|
* TRIVIA: This hook wasn't installed when I was testing with the MODEL_5150 ROM BIOS, and it
|
||||||
* didn't matter, but the MODEL_5160 ROM BIOS checks it several times, including @ F000:E156, where
|
* didn't matter, but the MODEL_5160 ROM BIOS checks it several times, including @F000:E156, where
|
||||||
* it verifies that TIMER1 didn't request service on channel 0.
|
* it verifies that TIMER1 didn't request service on channel 0.
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inDMAStatus = function(iDMAC, port, addrFrom)
|
ChipSet.prototype.inDMAStatus = function(iDMAC, port, addrFrom)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* HACK: Unlike the MODEL_5150, the MODEL_5160 ROM BIOS checks DMA channel 0 for TC (@ F000:E4DF)
|
* HACK: Unlike the MODEL_5150, the MODEL_5160 ROM BIOS checks DMA channel 0 for TC (@F000:E4DF)
|
||||||
* after running a number of unrelated tests, since enough time would have passed for channel 0 to
|
* after running a number of unrelated tests, since enough time would have passed for channel 0 to
|
||||||
* have reached TC at least once. So I simply OR in a hard-coded TC bit for channel 0 every time
|
* have reached TC at least once. So I simply OR in a hard-coded TC bit for channel 0 every time
|
||||||
* status is read.
|
* status is read.
|
||||||
|
|
@ -2016,7 +2050,7 @@ ChipSet.prototype.inDMAStatus = function(iDMAC, port, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMACmd = function(iDMAC, port, bOut, addrFrom)
|
ChipSet.prototype.outDMACmd = function(iDMAC, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2031,7 +2065,7 @@ ChipSet.prototype.outDMACmd = function(iDMAC, port, bOut, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*
|
*
|
||||||
* From the 8237A spec:
|
* From the 8237A spec:
|
||||||
*
|
*
|
||||||
|
|
@ -2066,7 +2100,7 @@ ChipSet.prototype.outDMAReq = function(iDMAC, port, bOut, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAMask = function(iDMAC, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAMask = function(iDMAC, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2085,7 +2119,7 @@ ChipSet.prototype.outDMAMask = function(iDMAC, port, bOut, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAMode = function(iDMAC, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAMode = function(iDMAC, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2101,7 +2135,7 @@ ChipSet.prototype.outDMAMode = function(iDMAC, port, bOut, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*
|
*
|
||||||
* Any write to this port simply resets the controller's "first/last flip-flop", which determines whether the even or odd byte
|
* Any write to this port simply resets the controller's "first/last flip-flop", which determines whether the even or odd byte
|
||||||
* of a DMA address or count register will be accessed next.
|
* of a DMA address or count register will be accessed next.
|
||||||
|
|
@ -2119,7 +2153,7 @@ ChipSet.prototype.outDMAIndex = function(iDMAC, port, bOut, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAClear = function(iDMAC, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAClear = function(iDMAC, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2140,7 +2174,7 @@ ChipSet.prototype.outDMAClear = function(iDMAC, port, bOut, addrFrom)
|
||||||
* @param {number} iDMAC
|
* @param {number} iDMAC
|
||||||
* @param {number} iChannel
|
* @param {number} iChannel
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inDMAPageReg = function(iDMAC, iChannel, port, addrFrom)
|
ChipSet.prototype.inDMAPageReg = function(iDMAC, iChannel, port, addrFrom)
|
||||||
|
|
@ -2158,7 +2192,7 @@ ChipSet.prototype.inDMAPageReg = function(iDMAC, iChannel, port, addrFrom)
|
||||||
* @param {number} iChannel
|
* @param {number} iChannel
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAPageReg = function(iDMAC, iChannel, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAPageReg = function(iDMAC, iChannel, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2172,7 +2206,7 @@ ChipSet.prototype.outDMAPageReg = function(iDMAC, iChannel, port, bOut, addrFrom
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iSpare
|
* @param {number} iSpare
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inDMAPageSpare = function(iSpare, port, addrFrom)
|
ChipSet.prototype.inDMAPageSpare = function(iSpare, port, addrFrom)
|
||||||
|
|
@ -2189,7 +2223,7 @@ ChipSet.prototype.inDMAPageSpare = function(iSpare, port, addrFrom)
|
||||||
* @param {number} iSpare
|
* @param {number} iSpare
|
||||||
* @param {number} port
|
* @param {number} port
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outDMAPageSpare = function(iSpare, port, bOut, addrFrom)
|
ChipSet.prototype.outDMAPageSpare = function(iSpare, port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2459,7 +2493,7 @@ ChipSet.prototype.updateDMA = function(channel)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iPIC
|
* @param {number} iPIC
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inPICL = function(iPIC, addrFrom)
|
ChipSet.prototype.inPICL = function(iPIC, addrFrom)
|
||||||
|
|
@ -2489,7 +2523,7 @@ ChipSet.prototype.inPICL = function(iPIC, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iPIC
|
* @param {number} iPIC
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outPICL = function(iPIC, bOut, addrFrom)
|
ChipSet.prototype.outPICL = function(iPIC, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2617,7 +2651,7 @@ ChipSet.prototype.outPICL = function(iPIC, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iPIC
|
* @param {number} iPIC
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inPICH = function(iPIC, addrFrom)
|
ChipSet.prototype.inPICH = function(iPIC, addrFrom)
|
||||||
|
|
@ -2634,7 +2668,7 @@ ChipSet.prototype.inPICH = function(iPIC, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iPIC
|
* @param {number} iPIC
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outPICH = function(iPIC, bOut, addrFrom)
|
ChipSet.prototype.outPICH = function(iPIC, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2837,7 +2871,7 @@ ChipSet.prototype.getIRRVector = function(iPIC)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iTimer (ports 0x40, 0x41, 0x42)
|
* @param {number} iTimer (ports 0x40, 0x41, 0x42)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inTimer = function(iTimer, addrFrom)
|
ChipSet.prototype.inTimer = function(iTimer, addrFrom)
|
||||||
|
|
@ -2860,7 +2894,7 @@ ChipSet.prototype.inTimer = function(iTimer, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} iTimer (ports 0x40, 0x41, 0x42)
|
* @param {number} iTimer (ports 0x40, 0x41, 0x42)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outTimer = function(iTimer, bOut, addrFrom)
|
ChipSet.prototype.outTimer = function(iTimer, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2942,7 +2976,7 @@ ChipSet.prototype.outTimer = function(iTimer, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x43)
|
* @param {number} port (0x43)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number|null} simulated port value
|
* @return {number|null} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inTimerCtrl = function(port, addrFrom)
|
ChipSet.prototype.inTimerCtrl = function(port, addrFrom)
|
||||||
|
|
@ -2958,7 +2992,7 @@ ChipSet.prototype.inTimerCtrl = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x43)
|
* @param {number} port (0x43)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outTimerCtrl = function(port, bOut, addrFrom)
|
ChipSet.prototype.outTimerCtrl = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -2984,14 +3018,14 @@ ChipSet.prototype.outTimerCtrl = function(port, bOut, addrFrom)
|
||||||
this.setTimerMode(iTimer, bcd, mode, rw);
|
this.setTimerMode(iTimer, bcd, mode, rw);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The 5150 ROM BIOS code @ F000:E285 ("TEST.7") would fail after a warm boot (eg, after a CTRL-ALT-DEL) because
|
* The 5150 ROM BIOS code @F000:E285 ("TEST.7") would fail after a warm boot (eg, after a CTRL-ALT-DEL) because
|
||||||
* it assumed that no TIMER0 interrupt would occur between the point it unmasked the TIMER0 interrupt and the
|
* it assumed that no TIMER0 interrupt would occur between the point it unmasked the TIMER0 interrupt and the
|
||||||
* point it started reprogramming TIMER0.
|
* point it started reprogramming TIMER0.
|
||||||
*
|
*
|
||||||
* Similarly, the 5160 ROM BIOS @ F000:E35D ("8253 TIMER CHECKOUT") would fail after initializing the EGA BIOS,
|
* Similarly, the 5160 ROM BIOS @F000:E35D ("8253 TIMER CHECKOUT") would fail after initializing the EGA BIOS,
|
||||||
* because the EGA BIOS uses TIMER0 during its diagnostics; as in the previous example, by the time the 8253
|
* because the EGA BIOS uses TIMER0 during its diagnostics; as in the previous example, by the time the 8253
|
||||||
* test code runs later, there's now a pending TIMER0 interrupt, which triggers an interrupt as soon as IRQ0 is
|
* test code runs later, there's now a pending TIMER0 interrupt, which triggers an interrupt as soon as IRQ0 is
|
||||||
* unmasked @ F000:E364.
|
* unmasked @F000:E364.
|
||||||
*
|
*
|
||||||
* After looking at this problem at bit more closely the second time around (while debugging the EGA BIOS),
|
* After looking at this problem at bit more closely the second time around (while debugging the EGA BIOS),
|
||||||
* it turns out I missed an important 8253 feature: whenever a new MODE0 control word OR a new MODE0 count
|
* it turns out I missed an important 8253 feature: whenever a new MODE0 control word OR a new MODE0 count
|
||||||
|
|
@ -3003,7 +3037,7 @@ ChipSet.prototype.outTimerCtrl = function(port, bOut, addrFrom)
|
||||||
if (iTimer == ChipSet.TIMER0.INDEX) this.clearIRR(ChipSet.IRQ.TIMER0);
|
if (iTimer == ChipSet.TIMER0.INDEX) this.clearIRR(ChipSet.IRQ.TIMER0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Another TIMER0 HACK: The "CASSETTE DATA WRAP TEST" @ F000:E51E occasionally reports an error when the second of
|
* Another TIMER0 HACK: The "CASSETTE DATA WRAP TEST" @F000:E51E occasionally reports an error when the second of
|
||||||
* two TIMER0 counts it latches is greater than the first. You would think the ROM BIOS would expect this, since
|
* two TIMER0 counts it latches is greater than the first. You would think the ROM BIOS would expect this, since
|
||||||
* TIMER0 can reload its count at any time. Is the ROM BIOS assuming that TIMER0 was initialized sufficiently
|
* TIMER0 can reload its count at any time. Is the ROM BIOS assuming that TIMER0 was initialized sufficiently
|
||||||
* recently that this should never happen? I'm not sure, but for now, let's try resetting TIMER0's count immediately
|
* recently that this should never happen? I'm not sure, but for now, let's try resetting TIMER0's count immediately
|
||||||
|
|
@ -3237,7 +3271,7 @@ ChipSet.prototype.updateTimer = function(iTimer, fCycleReset)
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Early implementation of this mode was minimal because when using this mode, the ROM BIOS simply wanted
|
* Early implementation of this mode was minimal because when using this mode, the ROM BIOS simply wanted
|
||||||
* to see the count changing; it wasn't looking for interrupts. See ROM BIOS "TEST.03" code @ F000:E0DE,
|
* to see the count changing; it wasn't looking for interrupts. See ROM BIOS "TEST.03" code @F000:E0DE,
|
||||||
* where TIMER1 is programmed for MODE2, LSB (the same settings, incidentally, used immediately afterward
|
* where TIMER1 is programmed for MODE2, LSB (the same settings, incidentally, used immediately afterward
|
||||||
* for TIMER1 in conjunction with DMA channel 0 memory refreshes).
|
* for TIMER1 in conjunction with DMA channel 0 memory refreshes).
|
||||||
*
|
*
|
||||||
|
|
@ -3337,7 +3371,7 @@ ChipSet.prototype.updateAllTimers = function(fCycleReset)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x60)
|
* @param {number} port (0x60)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inPPIA = function(port, addrFrom)
|
ChipSet.prototype.inPPIA = function(port, addrFrom)
|
||||||
|
|
@ -3361,7 +3395,7 @@ ChipSet.prototype.inPPIA = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x60)
|
* @param {number} port (0x60)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outPPIA = function(port, bOut, addrFrom)
|
ChipSet.prototype.outPPIA = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3374,7 +3408,7 @@ ChipSet.prototype.outPPIA = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x61)
|
* @param {number} port (0x61)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inPPIB = function(port, addrFrom)
|
ChipSet.prototype.inPPIB = function(port, addrFrom)
|
||||||
|
|
@ -3390,7 +3424,7 @@ ChipSet.prototype.inPPIB = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x61)
|
* @param {number} port (0x61)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outPPIB = function(port, bOut, addrFrom)
|
ChipSet.prototype.outPPIB = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3417,7 +3451,7 @@ ChipSet.prototype.updatePPIB = function(bOut)
|
||||||
this.bPPIB = bOut;
|
this.bPPIB = bOut;
|
||||||
if (fNewSpeaker != fOldSpeaker) {
|
if (fNewSpeaker != fOldSpeaker) {
|
||||||
/*
|
/*
|
||||||
* Originally, this code didn't catch the "ERROR_BEEP" case @ F000:EC34, which first turns both PPI_B.CLK_TIMER2 (0x01)
|
* Originally, this code didn't catch the "ERROR_BEEP" case @F000:EC34, which first turns both PPI_B.CLK_TIMER2 (0x01)
|
||||||
* and PPI_B.SPK_TIMER2 (0x02) off, then turns on only PPI_B.SPK_TIMER2 (0x02), then restores the original port value.
|
* and PPI_B.SPK_TIMER2 (0x02) off, then turns on only PPI_B.SPK_TIMER2 (0x02), then restores the original port value.
|
||||||
*
|
*
|
||||||
* So, when the ROM BIOS keyboard buffer got full, we didn't issue a BEEP alert. I've fixed that by limiting the test
|
* So, when the ROM BIOS keyboard buffer got full, we didn't issue a BEEP alert. I've fixed that by limiting the test
|
||||||
|
|
@ -3432,7 +3466,7 @@ ChipSet.prototype.updatePPIB = function(bOut)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x62)
|
* @param {number} port (0x62)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inPPIC = function(port, addrFrom)
|
ChipSet.prototype.inPPIC = function(port, addrFrom)
|
||||||
|
|
@ -3481,7 +3515,7 @@ ChipSet.prototype.inPPIC = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x62)
|
* @param {number} port (0x62)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outPPIC = function(port, bOut, addrFrom)
|
ChipSet.prototype.outPPIC = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3494,7 +3528,7 @@ ChipSet.prototype.outPPIC = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x63)
|
* @param {number} port (0x63)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inPPICtrl = function(port, addrFrom)
|
ChipSet.prototype.inPPICtrl = function(port, addrFrom)
|
||||||
|
|
@ -3510,7 +3544,7 @@ ChipSet.prototype.inPPICtrl = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x63)
|
* @param {number} port (0x63)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outPPICtrl = function(port, bOut, addrFrom)
|
ChipSet.prototype.outPPICtrl = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3523,7 +3557,7 @@ ChipSet.prototype.outPPICtrl = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x60)
|
* @param {number} port (0x60)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.in8042OutBuff = function(port, addrFrom)
|
ChipSet.prototype.in8042OutBuff = function(port, addrFrom)
|
||||||
|
|
@ -3546,7 +3580,7 @@ ChipSet.prototype.in8042OutBuff = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x60)
|
* @param {number} port (0x60)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.out8042InBuffData = function(port, bOut, addrFrom)
|
ChipSet.prototype.out8042InBuffData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3644,7 +3678,7 @@ ChipSet.prototype.out8042InBuffData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x61)
|
* @param {number} port (0x61)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.in8042RWReg = function(port, addrFrom)
|
ChipSet.prototype.in8042RWReg = function(port, addrFrom)
|
||||||
|
|
@ -3668,7 +3702,7 @@ ChipSet.prototype.in8042RWReg = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x61)
|
* @param {number} port (0x61)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.out8042RWReg = function(port, bOut, addrFrom)
|
ChipSet.prototype.out8042RWReg = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3681,7 +3715,7 @@ ChipSet.prototype.out8042RWReg = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x64)
|
* @param {number} port (0x64)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.in8042Status = function(port, addrFrom)
|
ChipSet.prototype.in8042Status = function(port, addrFrom)
|
||||||
|
|
@ -3720,7 +3754,7 @@ ChipSet.prototype.in8042Status = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x64)
|
* @param {number} port (0x64)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.out8042InBuffCmd = function(port, bOut, addrFrom)
|
ChipSet.prototype.out8042InBuffCmd = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3841,7 +3875,7 @@ ChipSet.prototype.set8042OutPort = function(b)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x70)
|
* @param {number} port (0x70)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inCMOSAddr = function(port, addrFrom)
|
ChipSet.prototype.inCMOSAddr = function(port, addrFrom)
|
||||||
|
|
@ -3856,7 +3890,7 @@ ChipSet.prototype.inCMOSAddr = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x70)
|
* @param {number} port (0x70)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outCMOSAddr = function(port, bOut, addrFrom)
|
ChipSet.prototype.outCMOSAddr = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3870,7 +3904,7 @@ ChipSet.prototype.outCMOSAddr = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x71)
|
* @param {number} port (0x71)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inCMOSData = function(port, addrFrom)
|
ChipSet.prototype.inCMOSData = function(port, addrFrom)
|
||||||
|
|
@ -3887,7 +3921,7 @@ ChipSet.prototype.inCMOSData = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x71)
|
* @param {number} port (0x71)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outCMOSData = function(port, bOut, addrFrom)
|
ChipSet.prototype.outCMOSData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3901,7 +3935,7 @@ ChipSet.prototype.outCMOSData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x80)
|
* @param {number} port (0x80)
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.inMFGData = function(port, addrFrom)
|
ChipSet.prototype.inMFGData = function(port, addrFrom)
|
||||||
|
|
@ -3916,7 +3950,7 @@ ChipSet.prototype.inMFGData = function(port, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0x80)
|
* @param {number} port (0x80)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outMFGData = function(port, bOut, addrFrom)
|
ChipSet.prototype.outMFGData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3932,7 +3966,7 @@ ChipSet.prototype.outMFGData = function(port, bOut, addrFrom)
|
||||||
* @this {ChipSet}
|
* @this {ChipSet}
|
||||||
* @param {number} port (0xA0)
|
* @param {number} port (0xA0)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
|
||||||
*/
|
*/
|
||||||
ChipSet.prototype.outNMI = function(port, bOut, addrFrom)
|
ChipSet.prototype.outNMI = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -3940,50 +3974,6 @@ ChipSet.prototype.outNMI = function(port, bOut, addrFrom)
|
||||||
this.bNMI = bOut;
|
this.bNMI = bOut;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* inHFCCtrl(port, addrFrom)
|
|
||||||
*
|
|
||||||
* @this {ChipSet}
|
|
||||||
* @param {number} port (0x1F4)
|
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
|
||||||
* @return {number} simulated port value
|
|
||||||
*/
|
|
||||||
ChipSet.prototype.inHFCCtrl = function(port, addrFrom)
|
|
||||||
{
|
|
||||||
var b = this.regsHFCombo.bCtrl;
|
|
||||||
this.messagePort(port, null, addrFrom, "HFC_CTRL", ChipSet.MESSAGE_CHIPSET, b);
|
|
||||||
return b;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* outHFCCtrl(port, bOut, addrFrom)
|
|
||||||
*
|
|
||||||
* @this {ChipSet}
|
|
||||||
* @param {number} port (0x1F4)
|
|
||||||
* @param {number} bOut
|
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to write the specified port)
|
|
||||||
*/
|
|
||||||
ChipSet.prototype.outHFCCtrl = function(port, bOut, addrFrom)
|
|
||||||
{
|
|
||||||
this.messagePort(port, bOut, addrFrom, "HFC_CTRL", ChipSet.MESSAGE_CHIPSET);
|
|
||||||
this.regsHFCombo.bCtrl = bOut;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* inHFCStatus(port, addrFrom)
|
|
||||||
*
|
|
||||||
* @this {ChipSet}
|
|
||||||
* @param {number} port (0x1F7)
|
|
||||||
* @param {number|undefined} addrFrom (not defined if the Debugger is trying to read the specified port)
|
|
||||||
* @return {number} simulated port value
|
|
||||||
*/
|
|
||||||
ChipSet.prototype.inHFCStatus = function(port, addrFrom)
|
|
||||||
{
|
|
||||||
var b = this.regsHFCombo.bStatus;
|
|
||||||
this.messagePort(port, null, addrFrom, "HFC_STATUS", ChipSet.MESSAGE_CHIPSET, b);
|
|
||||||
return b;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* intBIOSRTC(addr)
|
* intBIOSRTC(addr)
|
||||||
*
|
*
|
||||||
|
|
@ -4210,9 +4200,7 @@ ChipSet.aPortInput5170 = {
|
||||||
0xCA: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 2, port, addrFrom); },
|
0xCA: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 2, port, addrFrom); },
|
||||||
0xCC: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
|
0xCC: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelAddr(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
|
||||||
0xCE: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
|
0xCE: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAChannelCount(ChipSet.DMA1.INDEX, 3, port, addrFrom); },
|
||||||
0xD0: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAStatus(ChipSet.DMA1.INDEX, port, addrFrom); },
|
0xD0: /** @this {ChipSet} */ function(port, addrFrom) { return this.inDMAStatus(ChipSet.DMA1.INDEX, port, addrFrom); }
|
||||||
0x1F4: ChipSet.prototype.inHFCCtrl, // refer to comments regarding HFCOMBO.CTRL
|
|
||||||
0x1F7: ChipSet.prototype.inHFCStatus // refer to comments regarding HFCOMBO.STATUS
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -4286,8 +4274,7 @@ ChipSet.aPortOutput5170 = {
|
||||||
0xD4: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMask(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
0xD4: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMask(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
||||||
0xD6: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMode(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
0xD6: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAMode(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
||||||
0xD8: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAIndex(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
0xD8: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAIndex(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
||||||
0xDA: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAClear(ChipSet.DMA1.INDEX, port, bOut, addrFrom); },
|
0xDA: /** @this {ChipSet} */ function(port, bOut, addrFrom) { this.outDMAClear(ChipSet.DMA1.INDEX, port, bOut, addrFrom); }
|
||||||
0x1F4: ChipSet.prototype.outHFCCtrl // refer to comments regarding HFCOMBO.CTRL
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -262,9 +262,7 @@ CPU.prototype.powerUp = function(data, fRepower)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.fPowered = true;
|
this.fPowered = true;
|
||||||
if (!this.autoStart() && this.dbg) {
|
if (!this.autoStart() && this.dbg) this.dbg.updateStatus();
|
||||||
this.dbg.updateStatus();
|
|
||||||
}
|
|
||||||
this.updateCPU();
|
this.updateCPU();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1562,7 +1562,7 @@ if (DEBUGGER) {
|
||||||
*/
|
*/
|
||||||
if (fUpdateCPU !== false) this.cpu.updateCPU();
|
if (fUpdateCPU !== false) this.cpu.updateCPU();
|
||||||
|
|
||||||
this.updateStatus(!fRegs);
|
this.updateStatus(fRegs, false);
|
||||||
return (this.nCycles > 0);
|
return (this.nCycles > 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1580,23 +1580,27 @@ if (DEBUGGER) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updateStatus(fStep)
|
* updateStatus(fRegs, fCompact)
|
||||||
*
|
*
|
||||||
* @this {Debugger}
|
* @this {Debugger}
|
||||||
* @param {boolean|undefined} [fStep]
|
* @param {boolean} [fRegs] (default is true)
|
||||||
|
* @param {boolean} [fCompact] (default is true)
|
||||||
*/
|
*/
|
||||||
Debugger.prototype.updateStatus = function(fStep)
|
Debugger.prototype.updateStatus = function(fRegs, fCompact)
|
||||||
{
|
{
|
||||||
|
if (fRegs === undefined) fRegs = true;
|
||||||
|
if (fCompact === undefined) fCompact = true;
|
||||||
|
|
||||||
this.aAddrNextCode = this.newAddr(this.cpu.regIP, this.cpu.segCS.sel);
|
this.aAddrNextCode = this.newAddr(this.cpu.regIP, this.cpu.segCS.sel);
|
||||||
/*
|
/*
|
||||||
* this.fProcStep used to be a simple boolean, but now it's 0 (or undefined)
|
* this.fProcStep used to be a simple boolean, but now it's 0 (or undefined)
|
||||||
* if inactive, 1 if stepping over an instruction without a register dump, or 2
|
* if inactive, 1 if stepping over an instruction without a register dump, or 2
|
||||||
* if stepping over an instruction with a register dump.
|
* if stepping over an instruction with a register dump.
|
||||||
*/
|
*/
|
||||||
if (fStep || this.fProcStep == 1)
|
if (!fRegs || this.fProcStep == 1)
|
||||||
this.doUnassemble();
|
this.doUnassemble();
|
||||||
else {
|
else {
|
||||||
this.doRegisters();
|
this.doRegisters(null, fCompact);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1800,7 +1804,7 @@ if (DEBUGGER) {
|
||||||
}
|
}
|
||||||
this.println(sStopped);
|
this.println(sStopped);
|
||||||
}
|
}
|
||||||
this.updateStatus();
|
this.updateStatus(true, this.fProcStep != 2);
|
||||||
this.setFocus();
|
this.setFocus();
|
||||||
this.clearTempBreakpoint(this.cpu.regEIP);
|
this.clearTempBreakpoint(this.cpu.regEIP);
|
||||||
}
|
}
|
||||||
|
|
@ -2432,6 +2436,12 @@ if (DEBUGGER) {
|
||||||
else if (typeMode == Debugger.TYPE_IMPSEG) {
|
else if (typeMode == Debugger.TYPE_IMPSEG) {
|
||||||
sOperand = Debugger.asRegs[((type & Debugger.TYPE_IREG) >> 8) + 16];
|
sOperand = Debugger.asRegs[((type & Debugger.TYPE_IREG) >> 8) + 16];
|
||||||
}
|
}
|
||||||
|
else if (typeMode == Debugger.TYPE_DSSI) {
|
||||||
|
sOperand = "DS:[SI]";
|
||||||
|
}
|
||||||
|
else if (typeMode == Debugger.TYPE_ESDI) {
|
||||||
|
sOperand = "ES:[DI]";
|
||||||
|
}
|
||||||
if (!sOperand.length) {
|
if (!sOperand.length) {
|
||||||
sOperand = "type(" + str.toHexWord(type) + ")";
|
sOperand = "type(" + str.toHexWord(type) + ")";
|
||||||
}
|
}
|
||||||
|
|
@ -3507,7 +3517,7 @@ if (DEBUGGER) {
|
||||||
var cLines = 10;
|
var cLines = 10;
|
||||||
var iHistory = this.iOpcodeHistory;
|
var iHistory = this.iOpcodeHistory;
|
||||||
var aHistory = this.aOpcodeHistory;
|
var aHistory = this.aOpcodeHistory;
|
||||||
if (aHistory !== undefined) {
|
if (aHistory.length) {
|
||||||
var n = (sCount === undefined? this.nextHistory : parseInt(sCount, 10));
|
var n = (sCount === undefined? this.nextHistory : parseInt(sCount, 10));
|
||||||
if (isNaN(n))
|
if (isNaN(n))
|
||||||
n = cLines;
|
n = cLines;
|
||||||
|
|
@ -3630,7 +3640,7 @@ if (DEBUGGER) {
|
||||||
this.println("\ninput commands:");
|
this.println("\ninput commands:");
|
||||||
this.println("\ti [p]\tread port [p]");
|
this.println("\ti [p]\tread port [p]");
|
||||||
/*
|
/*
|
||||||
* NOTE: Regarding this warning, it might be nice if we had an "Unchecked" version of
|
* NOTE: Regarding this warning, it might be nice if we had an "unchecked" version of
|
||||||
* bus.checkPortInputNotify(), since all Debugger memory accesses are unchecked, too.
|
* bus.checkPortInputNotify(), since all Debugger memory accesses are unchecked, too.
|
||||||
*
|
*
|
||||||
* All port I/O handlers ARE aware when the Debugger is calling (addrFrom is undefined),
|
* All port I/O handlers ARE aware when the Debugger is calling (addrFrom is undefined),
|
||||||
|
|
@ -3921,12 +3931,13 @@ if (DEBUGGER) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* doRegisters(asArgs)
|
* doRegisters(asArgs, fCompact)
|
||||||
*
|
*
|
||||||
* @this {Debugger}
|
* @this {Debugger}
|
||||||
* @param {Array.<string>} [asArgs]
|
* @param {Array.<string>} [asArgs]
|
||||||
|
* @param {boolean} [fCompact]
|
||||||
*/
|
*/
|
||||||
Debugger.prototype.doRegisters = function(asArgs)
|
Debugger.prototype.doRegisters = function(asArgs, fCompact)
|
||||||
{
|
{
|
||||||
if (asArgs && asArgs[1] == "?") {
|
if (asArgs && asArgs[1] == "?") {
|
||||||
this.println("\nregister commands:");
|
this.println("\nregister commands:");
|
||||||
|
|
@ -3937,7 +3948,7 @@ if (DEBUGGER) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var fIns = true, fProt;
|
var fIns = true, fProt;
|
||||||
if (asArgs !== undefined && asArgs.length > 1) {
|
if (asArgs != null && asArgs.length > 1) {
|
||||||
var sReg = asArgs[1];
|
var sReg = asArgs[1];
|
||||||
if (sReg == 'p') {
|
if (sReg == 'p') {
|
||||||
/*
|
/*
|
||||||
|
|
@ -4074,7 +4085,7 @@ if (DEBUGGER) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.println('\n' + this.getRegStr(fProt));
|
this.println((fCompact? '' : '\n') + this.getRegStr(fProt));
|
||||||
|
|
||||||
if (fIns) {
|
if (fIns) {
|
||||||
this.aAddrNextCode = this.newAddr(this.cpu.regIP, this.cpu.segCS.sel);
|
this.aAddrNextCode = this.newAddr(this.cpu.regIP, this.cpu.segCS.sel);
|
||||||
|
|
|
||||||
|
|
@ -679,8 +679,8 @@ FDC.prototype.initController = function(data)
|
||||||
var dataDrives = data[i++];
|
var dataDrives = data[i++];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the disk history (if available) before initializing the drives,
|
* Initialize the disk history (if available) before initializing the drives, so that any disk deltas can be
|
||||||
* so that any disk deltas can be applied to disk images that are already loaded.
|
* applied to disk images that are already loaded.
|
||||||
*/
|
*/
|
||||||
var aDiskHistory = data[i++];
|
var aDiskHistory = data[i++];
|
||||||
if (aDiskHistory != null) this.aDiskHistory = aDiskHistory;
|
if (aDiskHistory != null) this.aDiskHistory = aDiskHistory;
|
||||||
|
|
@ -1334,7 +1334,7 @@ FDC.prototype.updateDiskHistory = function(sDisketteName, sDiskettePath, disk)
|
||||||
* @this {FDC}
|
* @this {FDC}
|
||||||
* @param {number} port (0x3F2, output only)
|
* @param {number} port (0x3F2, output only)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
FDC.prototype.outFDCOutput = function(port, bOut, addrFrom)
|
FDC.prototype.outFDCOutput = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -1384,7 +1384,7 @@ FDC.prototype.outFDCOutput = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {FDC}
|
* @this {FDC}
|
||||||
* @param {number} port (0x3F4, input only)
|
* @param {number} port (0x3F4, input only)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
FDC.prototype.inFDCStatus = function(port, addrFrom)
|
FDC.prototype.inFDCStatus = function(port, addrFrom)
|
||||||
|
|
@ -1398,7 +1398,7 @@ FDC.prototype.inFDCStatus = function(port, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {FDC}
|
* @this {FDC}
|
||||||
* @param {number} port (0x3F5, input/output)
|
* @param {number} port (0x3F5, input/output)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
FDC.prototype.inFDCData = function(port, addrFrom)
|
FDC.prototype.inFDCData = function(port, addrFrom)
|
||||||
|
|
@ -1427,7 +1427,7 @@ FDC.prototype.inFDCData = function(port, addrFrom)
|
||||||
* @this {FDC}
|
* @this {FDC}
|
||||||
* @param {number} port (0x3F5, input/output)
|
* @param {number} port (0x3F5, input/output)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
FDC.prototype.outFDCData = function(port, bOut, addrFrom)
|
FDC.prototype.outFDCData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -1452,7 +1452,7 @@ FDC.prototype.outFDCData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {FDC}
|
* @this {FDC}
|
||||||
* @param {number} port (0x3F7, input only, MODEL_5170 only)
|
* @param {number} port (0x3F7, input only, MODEL_5170 only)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
FDC.prototype.inFDCInput = function(port, addrFrom)
|
FDC.prototype.inFDCInput = function(port, addrFrom)
|
||||||
|
|
@ -1472,7 +1472,7 @@ FDC.prototype.inFDCInput = function(port, addrFrom)
|
||||||
* @this {FDC}
|
* @this {FDC}
|
||||||
* @param {number} port (0x3F7, output only, MODEL_5170 only)
|
* @param {number} port (0x3F7, output only, MODEL_5170 only)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
FDC.prototype.outFDCControl = function(port, bOut, addrFrom)
|
FDC.prototype.outFDCControl = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -1480,60 +1480,6 @@ FDC.prototype.outFDCControl = function(port, bOut, addrFrom)
|
||||||
this.regControl = bOut;
|
this.regControl = bOut;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* intBIOSDiskette(addr)
|
|
||||||
*
|
|
||||||
* NOTE: This function tries to differentiate FDC requests from HDC requests, by whether the INT 0x13 drive number
|
|
||||||
* in DL is < 0x80; however, not all INT 0x13 functions required a drive number in DL, and not all callers supplied one.
|
|
||||||
*
|
|
||||||
* INT 0x13 Quick Reference:
|
|
||||||
*
|
|
||||||
* AH
|
|
||||||
* ----
|
|
||||||
* 0x00 Reset
|
|
||||||
* 0x01 Get status (from last operation)
|
|
||||||
* 0x02 Read sectors
|
|
||||||
* 0x03 Write sectors
|
|
||||||
* 0x04 Verify sectors
|
|
||||||
* 0x05 Format track
|
|
||||||
*
|
|
||||||
* For Read, Write, Verify and Format commands:
|
|
||||||
*
|
|
||||||
* DL drive number (0-3 allowed, value checked)
|
|
||||||
* DH head number (0-1 allowed, not value checked)
|
|
||||||
* CH track number (0-39 allowed, not value checked [which is good, because high-density diskettes go up to 80 tracks])
|
|
||||||
* CL sector number (1-8 allowed, not value checked [which is good, because support for 9-sector tracks was later added])
|
|
||||||
* AL number of sectors (max of 8, not value checked)
|
|
||||||
* ES:BX sector buffer
|
|
||||||
*
|
|
||||||
* @this {FDC}
|
|
||||||
* @param {number} addr
|
|
||||||
* @return {boolean} true to proceed with the INT 0x13 software interrupt, false to skip
|
|
||||||
*/
|
|
||||||
FDC.prototype.intBIOSDiskette = function(addr)
|
|
||||||
{
|
|
||||||
if (DEBUGGER) {
|
|
||||||
var AL = this.cpu.regAX & 0xff;
|
|
||||||
var AH = this.cpu.regAX >> 8;
|
|
||||||
var CL = this.cpu.regCX & 0xff;
|
|
||||||
var CH = this.cpu.regCX >> 8;
|
|
||||||
var DL = this.cpu.regDX & 0xff;
|
|
||||||
var DH = this.cpu.regDX >> 8;
|
|
||||||
if (this.dbg && this.dbg.messageEnabled(this.dbg.MESSAGE_FDC) && DL < 0x80) {
|
|
||||||
this.dbg.message("FDC.intBIOS(AH=" + str.toHexByte(AH) + ",D=" + str.toHexByte(DL) + ",C=" + str.toHexByte(CH) + ",H=" + str.toHexByte(DH) + ",S=" + str.toHexByte(CL) + ",N=" + str.toHexByte(AL) + ") at " + str.toHexAddr(addr - this.cpu.segCS.base, this.cpu.segCS.sel));
|
|
||||||
// this.cpu.haltCPU();
|
|
||||||
this.cpu.addInterruptReturn(addr, function (fdc, nCycles) {
|
|
||||||
return function onBIOSDisketteReturn(nLevel) {
|
|
||||||
nCycles = fdc.cpu.getCycles() - nCycles;
|
|
||||||
fdc.messageDebugger("FDC.intBIOS(" + nLevel + "): C=" + (fdc.cpu.getCF()? 1 : 0) + " (cycles=" + nCycles + ")");
|
|
||||||
// if (DEBUG && nCycles > 10000) fdc.cpu.haltCPU();
|
|
||||||
};
|
|
||||||
}(this, this.cpu.getCycles()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* doCmd()
|
* doCmd()
|
||||||
*
|
*
|
||||||
|
|
@ -2086,6 +2032,60 @@ FDC.prototype.writeFormat = function(drive, b)
|
||||||
return b;
|
return b;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* intBIOSDiskette(addr)
|
||||||
|
*
|
||||||
|
* NOTE: This function tries to differentiate FDC requests from HDC requests, by whether the INT 0x13 drive number
|
||||||
|
* in DL is < 0x80; however, not all INT 0x13 functions required a drive number in DL, and not all callers supplied one.
|
||||||
|
*
|
||||||
|
* INT 0x13 Quick Reference:
|
||||||
|
*
|
||||||
|
* AH
|
||||||
|
* ----
|
||||||
|
* 0x00 Reset
|
||||||
|
* 0x01 Get status (from last operation)
|
||||||
|
* 0x02 Read sectors
|
||||||
|
* 0x03 Write sectors
|
||||||
|
* 0x04 Verify sectors
|
||||||
|
* 0x05 Format track
|
||||||
|
*
|
||||||
|
* For Read, Write, Verify and Format commands:
|
||||||
|
*
|
||||||
|
* DL drive number (0-3 allowed, value checked)
|
||||||
|
* DH head number (0-1 allowed, not value checked)
|
||||||
|
* CH track number (0-39 allowed, not value checked [which is good, because high-density diskettes go up to 80 tracks])
|
||||||
|
* CL sector number (1-8 allowed, not value checked [which is good, because support for 9-sector tracks was later added])
|
||||||
|
* AL number of sectors (max of 8, not value checked)
|
||||||
|
* ES:BX sector buffer
|
||||||
|
*
|
||||||
|
* @this {FDC}
|
||||||
|
* @param {number} addr
|
||||||
|
* @return {boolean} true to proceed with the INT 0x13 software interrupt, false to skip
|
||||||
|
*/
|
||||||
|
FDC.prototype.intBIOSDiskette = function(addr)
|
||||||
|
{
|
||||||
|
if (DEBUGGER) {
|
||||||
|
var AL = this.cpu.regAX & 0xff;
|
||||||
|
var AH = this.cpu.regAX >> 8;
|
||||||
|
var CL = this.cpu.regCX & 0xff;
|
||||||
|
var CH = this.cpu.regCX >> 8;
|
||||||
|
var DL = this.cpu.regDX & 0xff;
|
||||||
|
var DH = this.cpu.regDX >> 8;
|
||||||
|
if (this.dbg && this.dbg.messageEnabled(this.dbg.MESSAGE_FDC) && DL < 0x80) {
|
||||||
|
this.dbg.message("FDC.intBIOS(AH=" + str.toHexByte(AH) + ",D=" + str.toHexByte(DL) + ",C=" + str.toHexByte(CH) + ",H=" + str.toHexByte(DH) + ",S=" + str.toHexByte(CL) + ",N=" + str.toHexByte(AL) + ") at " + str.toHexAddr(addr - this.cpu.segCS.base, this.cpu.segCS.sel));
|
||||||
|
// this.cpu.haltCPU();
|
||||||
|
this.cpu.addInterruptReturn(addr, function (fdc, nCycles) {
|
||||||
|
return function onBIOSDisketteReturn(nLevel) {
|
||||||
|
nCycles = fdc.cpu.getCycles() - nCycles;
|
||||||
|
fdc.messageDebugger("FDC.intBIOS(" + nLevel + "): C=" + (fdc.cpu.getCF()? 1 : 0) + " (cycles=" + nCycles + ")");
|
||||||
|
// if (DEBUG && nCycles > 10000) fdc.cpu.haltCPU();
|
||||||
|
};
|
||||||
|
}(this, this.cpu.getCycles()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* messageDebugger(sMessage)
|
* messageDebugger(sMessage)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -180,6 +180,7 @@ RAM.prototype.reset = function() {
|
||||||
if (MAXDEBUG) this.status("ROM BIOS memory test has been disabled");
|
if (MAXDEBUG) this.status("ROM BIOS memory test has been disabled");
|
||||||
this.bus.setWordDirect(ROM.BIOS.RESET_FLAG, ROM.BIOS.RESET_FLAG_WARMBOOT);
|
this.bus.setWordDirect(ROM.BIOS.RESET_FLAG, ROM.BIOS.RESET_FLAG_WARMBOOT);
|
||||||
}
|
}
|
||||||
|
if (this.chipset) this.chipset.addCMOSMemory(this.addrRAM, this.sizeRAM);
|
||||||
} else {
|
} else {
|
||||||
this.error("No RAM allocated");
|
this.error("No RAM allocated");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -503,7 +503,7 @@ SerialPort.prototype.advanceRBR = function() {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3F8 or 0x2F8)
|
* @param {number} port (0x3F8 or 0x2F8)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inRBR = function(port, addrFrom) {
|
SerialPort.prototype.inRBR = function(port, addrFrom) {
|
||||||
|
|
@ -519,7 +519,7 @@ SerialPort.prototype.inRBR = function(port, addrFrom) {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3F9 or 0x2F9)
|
* @param {number} port (0x3F9 or 0x2F9)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inIER = function(port, addrFrom) {
|
SerialPort.prototype.inIER = function(port, addrFrom) {
|
||||||
|
|
@ -533,7 +533,7 @@ SerialPort.prototype.inIER = function(port, addrFrom) {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FA or 0x2FA)
|
* @param {number} port (0x3FA or 0x2FA)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inIIR = function(port, addrFrom) {
|
SerialPort.prototype.inIIR = function(port, addrFrom) {
|
||||||
|
|
@ -547,7 +547,7 @@ SerialPort.prototype.inIIR = function(port, addrFrom) {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FB or 0x2FB)
|
* @param {number} port (0x3FB or 0x2FB)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inLCR = function(port, addrFrom) {
|
SerialPort.prototype.inLCR = function(port, addrFrom) {
|
||||||
|
|
@ -561,7 +561,7 @@ SerialPort.prototype.inLCR = function(port, addrFrom) {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FC or 0x2FC)
|
* @param {number} port (0x3FC or 0x2FC)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inMCR = function(port, addrFrom) {
|
SerialPort.prototype.inMCR = function(port, addrFrom) {
|
||||||
|
|
@ -575,7 +575,7 @@ SerialPort.prototype.inMCR = function(port, addrFrom) {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FD or 0x2FD)
|
* @param {number} port (0x3FD or 0x2FD)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inLSR = function(port, addrFrom) {
|
SerialPort.prototype.inLSR = function(port, addrFrom) {
|
||||||
|
|
@ -589,7 +589,7 @@ SerialPort.prototype.inLSR = function(port, addrFrom) {
|
||||||
*
|
*
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FE or 0x2FE)
|
* @param {number} port (0x3FE or 0x2FE)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number} simulated port value
|
* @return {number} simulated port value
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.inMSR = function(port, addrFrom) {
|
SerialPort.prototype.inMSR = function(port, addrFrom) {
|
||||||
|
|
@ -604,7 +604,7 @@ SerialPort.prototype.inMSR = function(port, addrFrom) {
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3F8 or 0x2F8)
|
* @param {number} port (0x3F8 or 0x2F8)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to write the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.outTHR = function(port, bOut, addrFrom) {
|
SerialPort.prototype.outTHR = function(port, bOut, addrFrom) {
|
||||||
this.messagePort(port, bOut, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLL" : "THR");
|
this.messagePort(port, bOut, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLL" : "THR");
|
||||||
|
|
@ -628,7 +628,7 @@ SerialPort.prototype.outTHR = function(port, bOut, addrFrom) {
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3F9 or 0x2F9)
|
* @param {number} port (0x3F9 or 0x2F9)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to write the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.outIER = function(port, bOut, addrFrom) {
|
SerialPort.prototype.outIER = function(port, bOut, addrFrom) {
|
||||||
this.messagePort(port, bOut, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLM" : "IER");
|
this.messagePort(port, bOut, addrFrom, (this.bLCR & SerialPort.LCR.DLAB) ? "DLM" : "IER");
|
||||||
|
|
@ -645,7 +645,7 @@ SerialPort.prototype.outIER = function(port, bOut, addrFrom) {
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FB or 0x2FB)
|
* @param {number} port (0x3FB or 0x2FB)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to write the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.outLCR = function(port, bOut, addrFrom) {
|
SerialPort.prototype.outLCR = function(port, bOut, addrFrom) {
|
||||||
this.messagePort(port, bOut, addrFrom, "LCR");
|
this.messagePort(port, bOut, addrFrom, "LCR");
|
||||||
|
|
@ -658,7 +658,7 @@ SerialPort.prototype.outLCR = function(port, bOut, addrFrom) {
|
||||||
* @this {SerialPort}
|
* @this {SerialPort}
|
||||||
* @param {number} port (0x3FC or 0x2FC)
|
* @param {number} port (0x3FC or 0x2FC)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to write the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
|
||||||
*/
|
*/
|
||||||
SerialPort.prototype.outMCR = function(port, bOut, addrFrom) {
|
SerialPort.prototype.outMCR = function(port, bOut, addrFrom) {
|
||||||
var bPrev = this.bMCR;
|
var bPrev = this.bMCR;
|
||||||
|
|
|
||||||
|
|
@ -4100,8 +4100,24 @@ Video.prototype.updateScreenGraphicsEGA = function(addrScreen, addrScreenLimit)
|
||||||
if (x < xDirty) xDirty = x;
|
if (x < xDirty) xDirty = x;
|
||||||
for (var iPixel = 0; iPixel < nPixelsPerCell; iPixel++) {
|
for (var iPixel = 0; iPixel < nPixelsPerCell; iPixel++) {
|
||||||
var dwPixel = data & 0x80808080;
|
var dwPixel = data & 0x80808080;
|
||||||
|
/*
|
||||||
|
* JavaScript Alert: if adwMemory contains a 32-bit value such as -1526726656, and then we mask it
|
||||||
|
* with 0x80808080, we end up with -2147483648, which in a perfect 32-bit world, would be equivalent
|
||||||
|
* to 0x80000000, which means that when we look up "Video.aEGADWToByte[0x80000000]", we should get
|
||||||
|
* the entry containing 0x8. But no, in JavaScript, since the original value was negative, it
|
||||||
|
* still contains a sign bit above the lower 32 bits, which masking with 0x80808080 apparently doesn't
|
||||||
|
* eliminate (perhaps the mask is sign-extended as well, since there are 52 "significand" bits
|
||||||
|
* in JavaScript numbers). Anyway, this can be confirmed by looking at dwPixel.toString(16), which
|
||||||
|
* returns "-80000000". The solution is to check for a negative dwPixel and make it positive.
|
||||||
|
*/
|
||||||
|
if (dwPixel < 0) dwPixel = -dwPixel;
|
||||||
|
/*
|
||||||
|
* It's a good thing I had this assertion, which quickly caught the aforementioned problem.
|
||||||
|
* Moreover, since assertions don't fix problems (only catch them, and only in DEBUG builds), I'm
|
||||||
|
* now insuring that bPixel will always default to 0 if an undefined value ever slips through again.
|
||||||
|
*/
|
||||||
Component.assert(Video.aEGADWToByte[dwPixel] !== undefined);
|
Component.assert(Video.aEGADWToByte[dwPixel] !== undefined);
|
||||||
var bPixel = Video.aEGADWToByte[dwPixel];
|
var bPixel = Video.aEGADWToByte[dwPixel] || 0;
|
||||||
this.setPixel(this.imageScreenBuffer, x++, y, aPixelColors[bPixel]);
|
this.setPixel(this.imageScreenBuffer, x++, y, aPixelColors[bPixel]);
|
||||||
data <<= 1;
|
data <<= 1;
|
||||||
}
|
}
|
||||||
|
|
@ -4131,7 +4147,7 @@ Video.prototype.updateScreenGraphicsEGA = function(addrScreen, addrScreenLimit)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3B4)
|
* @param {number} port (0x3B4)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inMDAIndx = function(port, addrFrom)
|
Video.prototype.inMDAIndx = function(port, addrFrom)
|
||||||
|
|
@ -4145,7 +4161,7 @@ Video.prototype.inMDAIndx = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3B4)
|
* @param {number} port (0x3B4)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outMDAIndx = function(port, bOut, addrFrom)
|
Video.prototype.outMDAIndx = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4157,7 +4173,7 @@ Video.prototype.outMDAIndx = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3B5)
|
* @param {number} port (0x3B5)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number|undefined}
|
* @return {number|undefined}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inMDAData = function(port, addrFrom)
|
Video.prototype.inMDAData = function(port, addrFrom)
|
||||||
|
|
@ -4171,7 +4187,7 @@ Video.prototype.inMDAData = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3B5)
|
* @param {number} port (0x3B5)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outMDAData = function(port, bOut, addrFrom)
|
Video.prototype.outMDAData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4183,7 +4199,7 @@ Video.prototype.outMDAData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3B8)
|
* @param {number} port (0x3B8)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inMDAMode = function(port, addrFrom)
|
Video.prototype.inMDAMode = function(port, addrFrom)
|
||||||
|
|
@ -4197,7 +4213,7 @@ Video.prototype.inMDAMode = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3B8)
|
* @param {number} port (0x3B8)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outMDAMode = function(port, bOut, addrFrom)
|
Video.prototype.outMDAMode = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4209,7 +4225,7 @@ Video.prototype.outMDAMode = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3BA)
|
* @param {number} port (0x3BA)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inMDAStatus = function(port, addrFrom)
|
Video.prototype.inMDAStatus = function(port, addrFrom)
|
||||||
|
|
@ -4223,7 +4239,7 @@ Video.prototype.inMDAStatus = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3BA or 0x3DA)
|
* @param {number} port (0x3BA or 0x3DA)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*
|
*
|
||||||
* NOTE: While this port also existed on the MDA and CGA, it existed only as an INPUT port, not an OUTPUT port.
|
* NOTE: While this port also existed on the MDA and CGA, it existed only as an INPUT port, not an OUTPUT port.
|
||||||
*/
|
*/
|
||||||
|
|
@ -4238,7 +4254,7 @@ Video.prototype.outFeat = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C0)
|
* @param {number} port (0x3C0)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inATC = function(port, addrFrom)
|
Video.prototype.inATC = function(port, addrFrom)
|
||||||
|
|
@ -4255,7 +4271,7 @@ Video.prototype.inATC = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C0)
|
* @param {number} port (0x3C0)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outATC = function(port, bOut, addrFrom)
|
Video.prototype.outATC = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4289,7 +4305,7 @@ Video.prototype.outATC = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C2)
|
* @param {number} port (0x3C2)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inStatus0 = function(port, addrFrom)
|
Video.prototype.inStatus0 = function(port, addrFrom)
|
||||||
|
|
@ -4309,7 +4325,7 @@ Video.prototype.inStatus0 = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C2)
|
* @param {number} port (0x3C2)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outMisc = function(port, bOut, addrFrom)
|
Video.prototype.outMisc = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4323,7 +4339,7 @@ Video.prototype.outMisc = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C4)
|
* @param {number} port (0x3C4)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inSEQIndx = function(port, addrFrom)
|
Video.prototype.inSEQIndx = function(port, addrFrom)
|
||||||
|
|
@ -4339,7 +4355,7 @@ Video.prototype.inSEQIndx = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C4)
|
* @param {number} port (0x3C4)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outSEQIndx = function(port, bOut, addrFrom)
|
Video.prototype.outSEQIndx = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4352,7 +4368,7 @@ Video.prototype.outSEQIndx = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C5)
|
* @param {number} port (0x3C5)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inSEQData = function(port, addrFrom)
|
Video.prototype.inSEQData = function(port, addrFrom)
|
||||||
|
|
@ -4368,7 +4384,7 @@ Video.prototype.inSEQData = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3C5)
|
* @param {number} port (0x3C5)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outSEQData = function(port, bOut, addrFrom)
|
Video.prototype.outSEQData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4386,7 +4402,7 @@ Video.prototype.outSEQData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CC)
|
* @param {number} port (0x3CC)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inGRCPos1 = function(port, addrFrom)
|
Video.prototype.inGRCPos1 = function(port, addrFrom)
|
||||||
|
|
@ -4408,7 +4424,7 @@ Video.prototype.inGRCPos1 = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CC)
|
* @param {number} port (0x3CC)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outGRCPos1 = function(port, bOut, addrFrom)
|
Video.prototype.outGRCPos1 = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4421,7 +4437,7 @@ Video.prototype.outGRCPos1 = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CA)
|
* @param {number} port (0x3CA)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inGRCPos2 = function(port, addrFrom)
|
Video.prototype.inGRCPos2 = function(port, addrFrom)
|
||||||
|
|
@ -4442,7 +4458,7 @@ Video.prototype.inGRCPos2 = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CA)
|
* @param {number} port (0x3CA)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outGRCPos2 = function(port, bOut, addrFrom)
|
Video.prototype.outGRCPos2 = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4455,7 +4471,7 @@ Video.prototype.outGRCPos2 = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CE)
|
* @param {number} port (0x3CE)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inGRCIndx = function(port, addrFrom)
|
Video.prototype.inGRCIndx = function(port, addrFrom)
|
||||||
|
|
@ -4471,7 +4487,7 @@ Video.prototype.inGRCIndx = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CE)
|
* @param {number} port (0x3CE)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outGRCIndx = function(port, bOut, addrFrom)
|
Video.prototype.outGRCIndx = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4484,7 +4500,7 @@ Video.prototype.outGRCIndx = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CF)
|
* @param {number} port (0x3CF)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inGRCData = function(port, addrFrom)
|
Video.prototype.inGRCData = function(port, addrFrom)
|
||||||
|
|
@ -4500,7 +4516,7 @@ Video.prototype.inGRCData = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3CF)
|
* @param {number} port (0x3CF)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outGRCData = function(port, bOut, addrFrom)
|
Video.prototype.outGRCData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4546,7 +4562,7 @@ Video.prototype.outGRCData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D4)
|
* @param {number} port (0x3D4)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCGAIndx = function(port, addrFrom)
|
Video.prototype.inCGAIndx = function(port, addrFrom)
|
||||||
|
|
@ -4560,7 +4576,7 @@ Video.prototype.inCGAIndx = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D4)
|
* @param {number} port (0x3D4)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCGAIndx = function(port, bOut, addrFrom)
|
Video.prototype.outCGAIndx = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4572,7 +4588,7 @@ Video.prototype.outCGAIndx = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D5)
|
* @param {number} port (0x3D5)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number|undefined}
|
* @return {number|undefined}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCGAData = function(port, addrFrom)
|
Video.prototype.inCGAData = function(port, addrFrom)
|
||||||
|
|
@ -4586,7 +4602,7 @@ Video.prototype.inCGAData = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D5)
|
* @param {number} port (0x3D5)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCGAData = function(port, bOut, addrFrom)
|
Video.prototype.outCGAData = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4598,7 +4614,7 @@ Video.prototype.outCGAData = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D8)
|
* @param {number} port (0x3D8)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCGAMode = function(port, addrFrom)
|
Video.prototype.inCGAMode = function(port, addrFrom)
|
||||||
|
|
@ -4612,7 +4628,7 @@ Video.prototype.inCGAMode = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D8)
|
* @param {number} port (0x3D8)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCGAMode = function(port, bOut, addrFrom)
|
Video.prototype.outCGAMode = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4624,7 +4640,7 @@ Video.prototype.outCGAMode = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D9)
|
* @param {number} port (0x3D9)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCGAColor = function(port, addrFrom)
|
Video.prototype.inCGAColor = function(port, addrFrom)
|
||||||
|
|
@ -4640,7 +4656,7 @@ Video.prototype.inCGAColor = function(port, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3D9)
|
* @param {number} port (0x3D9)
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCGAColor = function(port, bOut, addrFrom)
|
Video.prototype.outCGAColor = function(port, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4660,7 +4676,7 @@ Video.prototype.outCGAColor = function(port, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {number} port (0x3DA)
|
* @param {number} port (0x3DA)
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCGAStatus = function(port, addrFrom)
|
Video.prototype.inCGAStatus = function(port, addrFrom)
|
||||||
|
|
@ -4673,7 +4689,7 @@ Video.prototype.inCGAStatus = function(port, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCRTCIndx = function(card, addrFrom)
|
Video.prototype.inCRTCIndx = function(card, addrFrom)
|
||||||
|
|
@ -4689,7 +4705,7 @@ Video.prototype.inCRTCIndx = function(card, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCRTCIndx = function(card, bOut, addrFrom)
|
Video.prototype.outCRTCIndx = function(card, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4703,7 +4719,7 @@ Video.prototype.outCRTCIndx = function(card, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number|undefined}
|
* @return {number|undefined}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCRTCData = function(card, addrFrom)
|
Video.prototype.inCRTCData = function(card, addrFrom)
|
||||||
|
|
@ -4720,7 +4736,7 @@ Video.prototype.inCRTCData = function(card, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCRTCData = function(card, bOut, addrFrom)
|
Video.prototype.outCRTCData = function(card, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4752,7 +4768,7 @@ Video.prototype.outCRTCData = function(card, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCardMode = function(card, addrFrom)
|
Video.prototype.inCardMode = function(card, addrFrom)
|
||||||
|
|
@ -4768,7 +4784,7 @@ Video.prototype.inCardMode = function(card, addrFrom)
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number} bOut
|
* @param {number} bOut
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
*/
|
*/
|
||||||
Video.prototype.outCardMode = function(card, bOut, addrFrom)
|
Video.prototype.outCardMode = function(card, bOut, addrFrom)
|
||||||
{
|
{
|
||||||
|
|
@ -4787,7 +4803,7 @@ Video.prototype.outCardMode = function(card, bOut, addrFrom)
|
||||||
*
|
*
|
||||||
* @this {Video}
|
* @this {Video}
|
||||||
* @param {Object} card
|
* @param {Object} card
|
||||||
* @param {number|undefined} addrFrom (not defined whenever the Debugger tries to read the specified port)
|
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
Video.prototype.inCardStatus = function(card, addrFrom)
|
Video.prototype.inCardStatus = function(card, addrFrom)
|
||||||
|
|
|
||||||
|
|
@ -1258,7 +1258,7 @@ var X86OpXX = {
|
||||||
}
|
}
|
||||||
if (nReps--) {
|
if (nReps--) {
|
||||||
var addrFrom = this.regEIP - nDelta - 1;
|
var addrFrom = this.regEIP - nDelta - 1;
|
||||||
var w = this.bus.checkPortInputNotify(this.regDX, addrFrom) | (this.bus.checkPortInputNotify((this.regDX + 1) & 0xffff, addrFrom) << 8);
|
var w = this.bus.checkPortInputNotify(this.regDX, addrFrom) | (this.bus.checkPortInputNotify(this.regDX, addrFrom) << 8);
|
||||||
this.setSOWord(this.segES, this.regDI, w);
|
this.setSOWord(this.segES, this.regDI, w);
|
||||||
this.regDI = (this.regDI + ((this.regPS & X86.PS.DF)? -2 : 2)) & 0xffff;
|
this.regDI = (this.regDI + ((this.regPS & X86.PS.DF)? -2 : 2)) & 0xffff;
|
||||||
this.nStepCycles -= nCycles;
|
this.nStepCycles -= nCycles;
|
||||||
|
|
@ -1350,7 +1350,7 @@ var X86OpXX = {
|
||||||
this.regCX -= nDelta;
|
this.regCX -= nDelta;
|
||||||
var addrFrom = this.regEIP - nDelta - 1;
|
var addrFrom = this.regEIP - nDelta - 1;
|
||||||
this.bus.checkPortOutputNotify(this.regDX, w & 0xff, addrFrom);
|
this.bus.checkPortOutputNotify(this.regDX, w & 0xff, addrFrom);
|
||||||
this.bus.checkPortOutputNotify((this.regDX + 1) & 0xffff, w >> 8, addrFrom);
|
this.bus.checkPortOutputNotify(this.regDX, w >> 8, addrFrom);
|
||||||
if (nReps) {
|
if (nReps) {
|
||||||
/*
|
/*
|
||||||
* We have to back up to the prefix byte(s), not just to the string instruction,
|
* We have to back up to the prefix byte(s), not just to the string instruction,
|
||||||
|
|
@ -2728,7 +2728,7 @@ var X86OpXX = {
|
||||||
/**
|
/**
|
||||||
* @this {X86CPU}
|
* @this {X86CPU}
|
||||||
*
|
*
|
||||||
* Here's the pseudo-code from /pubs/pc/programming/80286_and_80287_Programmers_Reference_Manual_1987.pdf, p.B-40 (p.250):
|
* Here's the pseudo-code from http://www.pcjs.org/pubs/pc/reference/intel/80286/progref, p.B-40 (p.250):
|
||||||
*
|
*
|
||||||
* LEVEL := LEVEL MOD 32
|
* LEVEL := LEVEL MOD 32
|
||||||
* Push BP
|
* Push BP
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue