diff options
| author | 2014-10-27 14:19:44 -0500 | |
|---|---|---|
| committer | 2014-10-27 14:19:44 -0500 | |
| commit | 4339d70e9c3fe3ee3f4a58fdfdc69bcd1ee31cc5 (patch) | |
| tree | a4cac4269d724318a9b8d474ceafcd2bd4e2add3 | |
| parent | 10053c0b01382c84d4bdc8339362a8147ef3c1c6 (diff) | |
| parent | f13b94d7c68919c3815d9f69fa2f13fc1f34a943 (diff) | |
Merge branch 'master' of https://github.com/mamedev/mame
| -rw-r--r-- | hash/intv.xml | 357 | ||||
| -rw-r--r-- | hash/intvecs.xml | 19 | ||||
| -rw-r--r-- | hash/pet_cass.xml | 1201 | ||||
| -rw-r--r-- | src/emu/bus/isa/hdc.c | 16 | ||||
| -rw-r--r-- | src/emu/bus/isa/hdc.h | 14 | ||||
| -rw-r--r-- | src/emu/bus/isa/xsu_cards.c | 2 | ||||
| -rw-r--r-- | src/emu/cpu/i386/i386.c | 20 | ||||
| -rw-r--r-- | src/emu/cpu/i386/i386.h | 4 | ||||
| -rw-r--r-- | src/emu/cpu/i386/i386ops.h | 1008 | ||||
| -rw-r--r-- | src/emu/cpu/i386/i386ops.inc | 2 | ||||
| -rw-r--r-- | src/mame/drivers/jackie.c | 2 | ||||
| -rw-r--r-- | src/mame/drivers/konamigx.c | 215 | ||||
| -rw-r--r-- | src/mame/drivers/mystwarr.c | 2 | ||||
| -rw-r--r-- | src/mame/drivers/peplus.c | 152 | ||||
| -rw-r--r-- | src/mame/includes/konamigx.h | 118 | ||||
| -rw-r--r-- | src/mame/machine/konamigx.c | 84 | ||||
| -rw-r--r-- | src/mame/video/konamigx.c | 437 |
17 files changed, 2558 insertions, 1095 deletions
diff --git a/hash/intv.xml b/hash/intv.xml index 0fdfe80fb07..6dd05d4c996 100644 --- a/hash/intv.xml +++ b/hash/intv.xml @@ -26,8 +26,8 @@ </part> </software> - <software name="addc"> - <description>Advanced Dungeons & Dragons Cartridge</description> + <software name="add"> + <description>Advanced Dungeons & Dragons</description> <year>1982</year> <publisher>Mattel Electronics</publisher> <info name="serial" value="3410"/> @@ -40,7 +40,7 @@ </software> <software name="addtot"> - <description>Advanced Dungeons & Dragons: Treasure of Tarmin</description> + <description>Advanced Dungeons & Dragons - Treasure of Tarmin</description> <year>1982</year> <publisher>Mattel Electronics</publisher> <info name="serial" value="5300"/> @@ -65,8 +65,8 @@ </part> </software> - <software name="astrosm"> - <description>Astro Smash</description> + <software name="astrosms"> + <description>AstroSmash</description> <year>1981</year> <publisher>Mattel Electronics</publisher> <info name="serial" value="3605"/> @@ -78,6 +78,18 @@ </part> </software> + <software name="astrosmsc" cloneof="astrosms"> + <description>AstroSmash Competition</description> + <year>1981</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="8192"> + <rom name="astrosmash competition.50" size="8192" crc="d0f83698" sha1="fbb2df69cfda87976cf279be6ad028e00c47ce9d" offset="0x0000" /> + </dataarea> + </part> + </software> + <software name="atlantis"> <description>Atlantis</description> <year>1982</year> @@ -1756,7 +1768,7 @@ <software name="voice"> <description>Intellivoice</description> <year>19??</year> - <publisher>Mattel</publisher> + <publisher>Mattel Electronics</publisher> <part name="cart" interface="intv_cart"> <feature name="slot" value="intv_voice" /> <dataarea name="5000" size="0x4000"> @@ -1769,7 +1781,7 @@ <software name="ecs"> <description>Entertainment Computer System</description> <year>19??</year> - <publisher>Mattel</publisher> + <publisher>Mattel Electronics</publisher> <part name="cart" interface="intv_cart"> <feature name="slot" value="intv_ecs" /> <dataarea name="2000" size="0x2000"> @@ -1790,17 +1802,35 @@ <!-- Unreleased / Prototypes / Homebrew --> - <software name="allstar"> - <description>All Star Major League Baseball (Prototype)</description> + <software name="addtom"> + <description>Advanced Dungeons & Dragons - Tower of Mystery (Unreleased)</description> <year>1983</year> <publisher>Mattel Electronics</publisher> <part name="cart" interface="intv_cart"> <feature name="slot" value="intv_rom" /> - <dataarea name="5000" size="0x4000"> - <rom name="all star major league baseball.50" size="0x4000" crc="4a7e080a" sha1="ee2edd084c371d39dfcd725ed4aa5679e0c34a27" offset="0x0000"/> + <dataarea name="5000" size="16384"> + <rom name="ad&d tower of mystery.50" size="16384" crc="4d7022c4" sha1="968875dbb5c9af72b746cde4f9a6dc4677d8aceb" offset="0x0000" /> </dataarea> - <dataarea name="D000" size="0x2000"> - <rom name="all star major league baseball.d0" size="0x2000" crc="31325854" sha1="fe7b5f3969e214ac23d20c5c137dc23f4515108d" offset="0x0000"/> + <dataarea name="9000" size="16384"> + <rom name="ad&d tower of mystery.90" size="16384" crc="69ea443d" sha1="5348845531a326cf66991697c55efd9287b4874b" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="8192"> + <rom name="ad&d tower of mystery.d0" size="8192" crc="35f27a1e" sha1="2cfdee85347c1226c48d15cdfd6b8819136db130" offset="0x0000" /> + </dataarea> + <dataarea name="F000" size="8192"> + <rom name="ad&d tower of mystery.f0" size="8192" crc="c60bb7f6" sha1="9f53d330453807c18dcb4c0ed37ad0e77251213a" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="advtron"> + <description>Adventures of TRON (Unreleased)</description> + <year>1982</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="adventures of tron.50" size="16384" crc="5a144835" sha1="c2125776338cbce61aabce80fbdb911a9814e564" offset="0x0000" /> </dataarea> </part> </software> @@ -1817,6 +1847,21 @@ </part> </software> + <software name="allstar"> + <description>All Star Major League Baseball (Prototype)</description> + <year>1983</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="0x4000"> + <rom name="all star major league baseball.50" size="0x4000" crc="4a7e080a" sha1="ee2edd084c371d39dfcd725ed4aa5679e0c34a27" offset="0x0000"/> + </dataarea> + <dataarea name="D000" size="0x2000"> + <rom name="all star major league baseball.d0" size="0x2000" crc="31325854" sha1="fe7b5f3969e214ac23d20c5c137dc23f4515108d" offset="0x0000"/> + </dataarea> + </part> + </software> + <software name="brickout"> <description>Brickout! (Unreleased)</description> <year>1981</year> @@ -1919,6 +1964,24 @@ </part> </software> + <software name="hvrfor3d"> + <description>Hover Force 3D (Unreleased)</description> + <year>1984</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="hover force_3d.50" size="16384" crc="37772f79" sha1="fa8f02330397fc47665e727fb7f214b551130b29" offset="0x0000" /> + </dataarea> + <dataarea name="9000" size="24576"> + <rom name="hover force_3d.90" size="24576" crc="1cf011ef" sha1="5cfc7a9bb09937d499b3cdfd5e84a3e975f543a6" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="8192"> + <rom name="hover force_3d.d0" size="8192" crc="d6e96ddc" sha1="2833c891028772d2a3acf23dce67e3cd597d486f" offset="0x0000" /> + </dataarea> + </part> + </software> + <software name="hlights"> <description>Hypnotic Lights (Prototype)</description> <year>1981</year> @@ -1931,6 +1994,18 @@ </part> </software> + <software name="illusion"> + <description>Illusions (Unreleased)</description> + <year>1983</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="illusions.50" size="16384" crc="851f3ccb" sha1="fd7bb50812e207b03295ff2abf973b935a0d28de" offset="0x0000" /> + </dataarea> + </part> + </software> + <software name="kingotm"> <description>King of the Mountain (Unreleased)</description> <year>1982</year> @@ -2000,6 +2075,21 @@ </part> </software> + <software name="mycastle" cloneof="thcastle"> + <description>Mystic Castle (Prototype)</description> + <year>1982</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="mystic castle.50" size="16384" crc="7751256b" sha1="73f61c7dce233a605c8cecd49aec13b1d5985315" offset="0x0000" /> + </dataarea> + <dataarea name="9000" size="16384"> + <rom name="mystic castle.90" size="16384" crc="4acbeb19" sha1="65c2ec11e5d1a9d8d8f2e044428cbf5bf2022532" offset="0x0000" /> + </dataarea> + </part> + </software> + <software name="blowout"> <description>Party Line: Blow Out (Unreleased)</description> <year>1983</year> @@ -2015,6 +2105,21 @@ </part> </software> + <software name="blowouta" cloneof="blowout"> + <description>Party Line: Blow Out (Unreleased, Alt)</description> + <year>1983</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="0x2000"> + <rom name="blowouta.50" size="0x2000" crc="25b7aa92" sha1="a232a43407bfa5781b30c5afded8df4af75e1788" offset="0x0000"/> + </dataarea> + <dataarea name="D000" size="0x2000"> + <rom name="blowouta.d0" size="0x2000" crc="b7e29589" sha1="4e1b1c2bf93952d52827b13752e61584a66672ea" offset="0x0000"/> + </dataarea> + </part> + </software> + <software name="hardhat"> <description>Party Line: Hard Hat (Unreleased)</description> <year>1983</year> @@ -2027,6 +2132,18 @@ </part> </software> + <software name="spacecad"> + <description>Party Line: Space Cadet (Unreleased)</description> + <year>1983</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="0x4000"> + <rom name="space cadet.50" size="0x4000" crc="f8ef3e5a" sha1="f3cfbe285a12194ef2f6087fc70d0ed887c4ec91" offset="0x0000"/> + </dataarea> + </part> + </software> + <software name="rrubble"> <description>Robot Rubble (Prototype)</description> <year>1983</year> @@ -2039,14 +2156,44 @@ </part> </software> - <software name="spacecad"> - <description>Party Line: Space Cadet (Unreleased)</description> + <software name="rockybw"> + <description>Rocky & Bullwinckle (Unreleased)</description> <year>1983</year> <publisher>Mattel Electronics</publisher> <part name="cart" interface="intv_cart"> <feature name="slot" value="intv_rom" /> - <dataarea name="5000" size="0x4000"> - <rom name="space cadet.50" size="0x4000" crc="f8ef3e5a" sha1="f3cfbe285a12194ef2f6087fc70d0ed887c4ec91" offset="0x0000"/> + <dataarea name="5000" size="16384"> + <rom name="rockey & bullwinckle.50" size="16384" crc="867f1941" sha1="86053c388dbee82216159fa7f4d95756ffd9d37d" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="scarfing"> + <description>Scarfinger (Unfinished)</description> + <year>1982</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="scarfinger.50" size="16384" crc="a57862f7" sha1="a691ad56285526738760f18b8d86b07195039df0" offset="0x0000" /> + </dataarea> + <dataarea name="9000" size="16384"> + <rom name="scarfinger.90" size="16384" crc="d3d5e5af" sha1="3a4dddbcb04aeacea15a03267dc55d8a913434a6" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="soccer2" cloneof="worldcup"> + <description>Soccer 2 (Prototype)</description> + <year>198?</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="soccer_2.50" size="16384" crc="4d4af24e" sha1="dd08e16ba509cd1761e1007f616267e5f96f9127" offset="0x0000" /> + </dataarea> + <dataarea name="9000" size="16384"> + <rom name="soccer_2.90" size="16384" crc="c6889d72" sha1="4507d0159b1fc2c18d44330eaa70d677629b5d82" offset="0x0000" /> </dataarea> </part> </software> @@ -2096,6 +2243,25 @@ </part> </software> + <software name="yogi"> + <description>Yogi's Frustration (Unreleased)</description> + <year>1983</year> + <publisher>Mattel Electronics</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="yogi's frustration.50" size="16384" crc="7f4ba6ad" sha1="277a3ad0bdbad4fa8086655bb7508ff4bb0dde5c" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="8192"> + <rom name="yogi's frustration.d0" size="8192" crc="cf15e8c5" sha1="bbc103a8fc3d979a05dc42aa5b773355ab11df60" offset="0x0000" /> + </dataarea> + <dataarea name="F000" size="8192"> + <rom name="yogi's frustration.f0" size="8192" crc="2bc63759" sha1="463b7a8f2e139fcb8434c565b2b275b313a9d52e" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="imitc"> <description>IMI Test Cartridge</description> <year>1978</year> @@ -2123,6 +2289,7 @@ </part> </software> + <software name="4tris"> <description>4-Tris (Download Version)</description> <year>2000</year> @@ -2136,7 +2303,40 @@ </part> </software> - <software name="minehntr"> + <software name="dkongarc" supported="partial"> + <description>Donkey Kong Arcade</description> + <year>200?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="dkinty.50" size="16384" crc="93a9826c" sha1="477ab844aaea8fd18fc8b8c846dbfb78280b924d" offset="0x0000" /> + </dataarea> + <dataarea name="9000" size="16384"> + <rom name="dkinty.90" size="16384" crc="a927412f" sha1="acb7359db142c1b77c3a17d1547ecc8a259d3f02" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="8192"> + <rom name="dkinty.d0" size="8192" crc="642d6557" sha1="5a2fa6bd9a6c173581da5d08699a44198da0231c" offset="0x0000" /> + </dataarea> + <dataarea name="F000" size="8192"> + <rom name="dkinty.f0" size="8192" crc="3e39ee68" sha1="c266e320a9b2266c7db44bc0965e2b68ffa18e27" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="istar"> + <description>Istar</description> + <year>2010?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="12288"> + <rom name="istar.50" size="12288" crc="7899e5ba" sha1="997d1b679768296fc2db120a93cc1880318637cf" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="minehunt"> <description>Minehunter (Download Version)</description> <year>2004</year> <publisher>IntelligentVision</publisher> @@ -2144,11 +2344,24 @@ <part name="cart" interface="intv_cart"> <feature name="slot" value="intv_rom" /> <dataarea name="5000" size="0x4000"> + <!-- cutting this at 0x3e00 gives crc32 594c230e --> <rom name="minehunter.50" size="0x4000" crc="a9f1d874" sha1="4bbac2b5264f4d357e7223b2373b078c622c08a9" offset="0x0000"/> </dataarea> </part> </software> + <software name="minehunta" cloneof="minehunt"> + <description>Minehunter (Download Version, Alt?)</description> + <year>2004</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="minehunta.50" size="15872" crc="94096229" sha1="a351edd058431ed2aeccc0554041a17258c01c28" offset="0x0000" /> + </dataarea> + </part> + </software> + <software name="sgr"> <description>SameGame & Robots (Download Version)</description> <year>2005</year> @@ -2168,6 +2381,49 @@ </part> </software> + <software name="spina"> + <description>ZZZZZ! Spina the Bee</description> + <year>200?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="zzzzz! spina the bee.50" size="16384" crc="01efa214" sha1="1a70d73512da0f78957bbd74b14077303e4fb905" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="spacecnt"> + <description>Space Cunt</description> + <year>200?</year> + <publisher>IntelligentVision</publisher> + <info name="usage" value="Uses Intellivoice"/> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="space cunt.50" size="16384" crc="4542d593" sha1="c946b40ba51c48d8fedc4cdb40c27e3779e2b84b" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="spatrol"> + <description>Space Patrol Teaser Edition</description> + <year>2007?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="space patrol teaser edition.50" size="16384" crc="3c3d75bf" sha1="761e379d43ba1551198dab8199764356fc615b1b" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="8192"> + <rom name="space patrol teaser edition.d0" size="8192" crc="04101767" sha1="54f8dfe0d5413097c280f72b45f6684bc9e1a3d5" offset="0x0000" /> + </dataarea> + <dataarea name="F000" size="8192"> + <rom name="space patrol teaser edition.f0" size="8192" crc="a6950b88" sha1="27891c3026f0a1fb34a13438502960485d33b24f" offset="0x0000" /> + </dataarea> + </part> + </software> + <software name="stonix"> <description>Stonix (Download Version)</description> <year>2005</year> @@ -2186,4 +2442,69 @@ </dataarea> </part> </software> + + <software name="suprchef"> + <description>Super Chef BT</description> + <year>2013?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="burgrtm2.50" size="16384" crc="54848723" sha1="e791fe7ae0af267689fc831e60c407c02c5ee280" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="24576"> + <rom name="burgrtm2.d0" size="24576" crc="53feb216" sha1="d462c44ddbe91fdbfad8ef26658dc07cea4a6dbc" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="todd"> + <description>Tag Along Todd (Unfinished)</description> + <year>200?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="tag-along-todd.50" size="10752" crc="1ecdd51b" sha1="9e1666a68d50bb4a1f618cc2f9bcd7dfbadc8188" offset="0x0000" /> + </dataarea> + </part> + </software> + + + +<!-- TODO: Investigate these files --> + + <software name="kingotmf" cloneof="kingotm" supported="no"> + <description>King of the Mountain (Fixed?)</description> + <year>200?</year> + <publisher>IntelligentVision</publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="king of the mountain (alt).50" size="16384" crc="3634697b" sha1="c20c17bd68e92b7f81a522c4c1d0dd4ae8926bdd" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="16896"> + <rom name="king of the mountain (alt).d0" size="16896" crc="2c7f5de1" sha1="c86a04a969542a08b46ef50dd30c649ad6ef5b47" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="quest" supported="no"> + <description>Quest</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="0000" size="16384"> + <rom name="quest.00" size="16384" crc="540281d5" sha1="30a3c0d4cf1d939f8a1b4e6ff3fc18a2e13f3e7e" offset="0x0000" /> + </dataarea> + <dataarea name="5000" size="16384"> + <rom name="quest.50" size="16384" crc="6d5013df" sha1="c1535a9dd54d621ca3d44fd9ca1b5d5c745eb3ad" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="16384"> + <rom name="quest.d0" size="16384" crc="869ce44f" sha1="43196b47bde3fccf281c355f2966c71099a6a436" offset="0x0000" /> + </dataarea> + </part> + </software> + </softwarelist> diff --git a/hash/intvecs.xml b/hash/intvecs.xml index b8663df873e..ef321fcd1f3 100644 --- a/hash/intvecs.xml +++ b/hash/intvecs.xml @@ -1,7 +1,5 @@ <?xml version="1.0"?> <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> - - <softwarelist name="intvecs" description="Intellivision ECS cartridges"> <software name="jetsons"> @@ -150,4 +148,21 @@ </dataarea> </part> </software> + + + <software name="flintkf"> + <description>Flintstones Keyboard Fun (Unreleased)</description> + <year>200?</year> + <publisher>IntelligentVision</publisher> + <info name="usage" value="Requires ECS and Keyboard"/> + <part name="cart" interface="intv_cart"> + <feature name="slot" value="intv_rom" /> + <dataarea name="5000" size="16384"> + <rom name="flintstones keyboard fun.50" size="16384" crc="87996f3a" sha1="ffc8986782a461e1c99de24f92578295216e7b5f" offset="0x0000" /> + </dataarea> + <dataarea name="D000" size="8192"> + <rom name="flintstones keyboard fun.d0" size="8192" crc="e813510b" sha1="fa6203172faf46d89fd3a9276f642cbaf6b6f2ab" offset="0x0000" /> + </dataarea> + </part> + </software> </softwarelist> diff --git a/hash/pet_cass.xml b/hash/pet_cass.xml index 223307ca56d..8fce47a0149 100644 --- a/hash/pet_cass.xml +++ b/hash/pet_cass.xml @@ -1,15 +1,1204 @@ <?xml version="1.0"?> <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> + <softwarelist name="pet_cass" description="Commodore PET cassettes"> - <software name="lunarlnd"> - <description>Lunar Lander</description> - <year>197?</year> - <publisher><unknown></publisher> + <software name="acquire"> + <description>Acquire</description> + <year>1982</year> + <publisher>Microcomputer Games</publisher> + + <!-- pet2001n16 Side A: Acquire --> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="24368704"> + <rom name="acquire (1982)(avalon hill).wav" size="24368704" crc="65ceaa57" sha1="e8b1d072356526c31a509a267507e9aaa74f17fa" offset="0" /> + </dataarea> + </part> + </software> + + <software name="androm"> + <description>Andromeda Conquest</description> + <year>1982</year> + + <!-- pet2001n16 Side A: Andromeda --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="22685838"> + <rom name="andromeda conquest (1982)(avalon hill).wav" size="22685838" crc="8716b6d9" sha1="7d21e69fe5c1831b3f3244d1236b7e7ed57a2fb4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="b1bomb"> + <description>B-1 Bomber Game</description> + <year>1982</year> + + <!-- pet2001n16 Side A: B-1 Bomber --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="15154010"> + <rom name="b-1 nuclear bomber (1981)(avalon hill).wav" size="15154010" crc="69fcf587" sha1="de3cb18e63a45943e7357af16d4b3994c3dbae46" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bbstrat"> + <description>Baseball Strategy</description> + <year>1982</year> + + <!-- pet4032 Side A: Baseball Strateg --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="30735222"> + <rom name="baseball strategy (1982)(avalon hill).wav" size="30735222" crc="1d50607d" sha1="dcb6571346f8da9777d6a4654413303d6320f55e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bjack"> + <!-- 321009 --> + <description>Blackjack</description> + <year>1978</year> + + <!-- pet20018 Side A: Blackjack --> + <publisher>Commodore Business Machines, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11284678"> + <rom name="blackjack (1978)(commodore business machines).wav" size="11284678" crc="b65acc8b" sha1="a5a3261a04bde04309e539b72ddaadd462e21c70" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bomba"> + <description>Arcade Pak #3 Bomber Attack</description> + <year>1982</year> + + <!-- pet2001n Side A: Bomber Attack --> + <publisher>Avalon Hill</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10001002"> + <rom name="Bomber Attack (1982)(avalon hill).wav" size="10001002" crc="4ff57e9c" sha1="b795a4d8c2f7891088ee6cf7147d785948d7b887" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bullb"> + <description>Bulls and Bears</description> + <year>1978</year> + + <!-- pet20018 Side A: Bulls and Bears --> + <publisher>Speakeasy Software</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10926558"> + <rom name="bulls and bears (1978)(speakeasy software).wav" size="10926558" crc="8fbd037f" sha1="20527ee4b6528c0daf31994bfed028583faa049f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bjack1"> + <description>Casino Blackjack 5.7</description> + <year>1979</year> + + <!-- pet20018 Side A: Blackjack --> + <publisher>Speakeasy Software</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11929950"> + <rom name="casino blackjack 5.7 (1979)(cms software systems).wav" size="11929950" crc="de4f4383" sha1="2ac7ee53dc74a4696bf9dd72103e4ef569d94ec4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="conflict"> + <description>Conflict 2500</description> + <year>1981</year> + + <!-- pet2001n16 Side A: Conflict 2500 --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="23419766"> + <rom name="conflict 2500 (1981)(avalon hill).wav" size="23419766" crc="872b73d6" sha1="c3941f3ce51bff8d0571ce2b43b7ccdd9a212733" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur1"> + <description>Cursor 1</description> + <year>1978</year> + + <!-- pet20018 Side A: Cover, Brick, Wander, Shark, Plot, Typer --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="34540096"> + <rom name="cursor 1 (1978)(code works).wav" size="34540096" crc="c2a429f0" sha1="f732bdd48c4a7764352355098d01de3e950c2d9c" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur2"> + <description>Cursor 2</description> + <year>1978</year> + + <!-- pet20018 Side A: Cover, Race, Zap, Est, Guess, Mad --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="38802738"> + <rom name="cursor 2 (1978)(code works).wav" size="38802738" crc="9925f292" sha1="a0f553dc3e052fe3556183bfd82318b92dd72642" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur3"> + <description>Cursor 3</description> + <year>1978</year> + + <!-- pet20018 Side A: Cover, Bar, Dots, Quix!, Flash, Cards --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="47849882"> + <rom name="cursor 3 (1978)(code works).wav" size="47849882" crc="95283cb2" sha1="604f61d0f209aaef32e82bceaa67530511ef60c1" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur4"> + <description>Cursor 4</description> + <year>1978</year> + + <!-- pet20018 Side A: Cover!, Bop, Calc, Clock!, Inp, Ced --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="55455514"> + <rom name="cursor 4 (1978)(code works).wav" size="55455514" crc="df747916" sha1="16640a5223a644dca3ef713cac6e70d1348cd6ef" offset="0" /> + </dataarea> + </part> + + </software> + + <software name="cur5"> + <description>Cursor 5</description> + <year>1978</year> + + <!-- pet20018 Side A: Cover, Hanoi, Shoot, Bship, Face, Hman --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="46403528"> + <rom name="cursor 5 (1978)(code works).wav" size="46403528" crc="c0c8f3ff" sha1="3f888f080e59853e5f89b0f3d565e125d1e5e852" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur6"> + <description>Cursor 6</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover, Box, Bjack, pet20018: Pack, List, Cedpr --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="46753010"> + <rom name="cursor 6 (1979)(code works).wav" size="46753010" crc="2f6ef813" sha1="750cd291f2653c03b6e2fd707cc1ededf97d5477" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur7"> + <description>Cursor 7</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover, Pricer, Sound!, Mind, Fball, Paper --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="54620302"> + <rom name="cursor 7 (1979)(code works).wav" size="54620302" crc="6f2bf0a4" sha1="44f13108e3945abbc432ed4cce166848661adf1d" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur8"> + <description>Cursor 8</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover, Revers!, Dbook, Space!, Maze, Add, X --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="58017788"> + <rom name="cursor 8 (1979)(code works).wav" size="58017788" crc="f6118fbf" sha1="e415cb0d26702836a44a798546960c21bcd96299" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur9"> + <description>Cursor 9</description> + <year>1979</year> + + <!-- pet2001n16 Side A: pet2001n: Cover, Yahtzee, Slot!, Flip, Circle, pet2001n16: Gammon --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="69494314"> + <rom name="cursor 9 (1979)(code works).wav" size="69494314" crc="8abf8e8c" sha1="98e0b0f9d16a055cb2d11f2aff84a6c1884f7acf" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur10"> + <description>Cursor 10</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover!, pet20018: Titrate, pet2001n: Finance, Course, pet20018: Asm, Reader --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="52635502"> + <rom name="cursor 10 (1979)(code works).wav" size="52635502" crc="e64a1066" sha1="0559d40f259cf149f0bc88dfe19d64caeae7902b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur11"> + <description>Cursor 11</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover, Demon!, Hi calc, Wipeout, Peg, States --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="52073122"> + <rom name="cursor 11 (1979)(code works).wav" size="52073122" crc="b4a6843a" sha1="1ef4ff08f02e140d5c74fed7fdcce4b332f933a4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur12"> + <description>Cursor 12</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover12, Canyon!, Gauss!, Pickup, Piegram, Flight! --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="60014980"> + <rom name="cursor 12 (1979)(code works).wav" size="60014980" crc="6ceecff0" sha1="391e5c114dc60beec739908666e04b4f82000ce8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur13"> + <description>Cursor 13</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover13, Ratrun, Cars, Ferry!, Leap, Tcard --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="57500730"> + <rom name="cursor 13 (1979)(code works).wav" size="57500730" crc="fd7dd623" sha1="779a6b763de8efd69942e5a89e220c4d670d63f0" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur14"> + <description>Cursor 14</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover14, Match, Search, Bat!, Morse!, Cops, Coming --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="56915420"> + <rom name="cursor 14 (1979)(code works).wav" size="56915420" crc="43442da6" sha1="e6b31659181da8bebe2b7e2d66b982030014192e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur15"> + <description>Cursor 15</description> + <year>1979</year> + + <!-- pet2001n Side A: Cover15!, Dungeon, Fifteen, Gomoku, Everest, Hawaii! --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="54585328"> + <rom name="cursor 15 (1979)(code works).wav" size="54585328" crc="3e176c08" sha1="9b133685dac34826b9505407aefa27c1affa3427" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur16"> + <description>Cursor 16</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover16, Nab!, Fire!, Aliens!, Bonzo!, Catch! --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="45885486"> + <rom name="cursor 16 (1980)(code works).wav" size="45885486" crc="53903b5a" sha1="db92181ea1c4cf65b93bda621b2d7a7c32c3bc7e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur17"> + <description>Cursor 17</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover17, Police!, Spot, Ruler, Letter, Merge, Npack --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="54618936"> + <rom name="cursor 17 (1980)(code works).wav" size="54618936" crc="c8492708" sha1="2638641d44437b595d17fc9ca8f91a1432b78164" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur18"> + <description>Cursor 18</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover18, Dromeda!, Joust, Weather, Hi-res, Sheep --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="56023512"> + <rom name="cursor 18 (1980)(code works).wav" size="56023512" crc="399cee6b" sha1="3930f54ffc12e09dc3e651642ee8f0bac6d9dde8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur19"> + <description>Cursor 19</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover19, Frog!, Godzilla!, Miner!, Rail, Gbooka, Gbookb --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="66518600"> + <rom name="cursor 19 (1980)(code works).wav" size="66518600" crc="9a1386b2" sha1="5c98728358ac6167f7e7e3c07b2362eedc1b0161" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur20"> + <description>Cursor 20</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover20, Music!, Bets, Checkers!, Curves, Equip --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="53527416"> + <rom name="cursor 20 (1980)(code works).wav" size="53527416" crc="2401c9e9" sha1="c2be524ba8a66b4c0a7541a09f29a839acadac8f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur21"> + <description>Cursor 21</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover21, Capture!, Dance!, Boswain, Ouranos!, Drag --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="58273484"> + <rom name="cursor 21 (1980)(code works).wav" size="58273484" crc="7d2f858a" sha1="49cab5acfc20c7d86d25aaf4c8790cc2b2ffd32c" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur22"> + <description>Cursor 22</description> + <year>1980</year> + + <!-- pet2001n Side A: Cover22, Kalah, Poker, Match, Thunt!, Compare --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="53405634"> + <rom name="cursor 22 (1980)(code works).wav" size="53405634" crc="c6e434ad" sha1="dfb03ed9a3cc51a0e75b884519d26f15e4e0de4b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur23"> + <description>Cursor 23</description> + <year>1980</year> + + <!-- pet2001n16 Side A: pet2001n: Cover23, Recipe, Ambush!, pet2001n16: Orrey, pet2001n: Enigma, Mwhiz! --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="52482130"> + <rom name="cursor 23 (1980)(code works).wav" size="52482130" crc="aace87f0" sha1="e8f566cbfdb28b3fbd508f806a09b57081830a78" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur24"> + <description>Cursor 24</description> + <year>1981</year> + + <!-- pet2001n Side A: Cover24, Defend!, G-word, Racer!, Printsit, Re-num --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="45591486"> + <rom name="cursor 24 (1981)(code works).wav" size="45591486" crc="413fe583" sha1="7ac7333db71a6c6f363f26437961e50fb443dd12" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur25"> + <description>Cursor 25</description> + <year>1981</year> + + <!-- pet2001n16 Side A: pet2001n: Cover25, Maxit, pet2001n16: Mail, pet2001n: Rescue!, pet2001n16: Repair, pet2001n: Xref --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="58594030"> + <rom name="cursor 25 (1981)(code works).wav" size="58594030" crc="ff3aa594" sha1="db60a8b2c751aeeffe5fcd9c7fc2ac1965e4ccc2" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur26"> + <description>Cursor 26</description> + <year>1981</year> + + <!-- pet2001n16 Side A: pet2001n: Cover26, Lawn!, Tank!, Ram, Safe!, pet2001n16: Test --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="59355380"> + <rom name="cursor 26 (1981)(code works).wav" size="59355380" crc="5dbb9096" sha1="4ad21ed698ff0162b12615276daf2ebca14d5c97" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur27"> + <description>Cursor 27</description> + <year>1981</year> + + <!-- pet2001n Side A: Cover27!, Attack!, Emaze!, Duel!, Miser, Prochar --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="68273716"> + <rom name="cursor 27 (1981)(code works).wav" size="68273716" crc="b87e72c4" sha1="3ca92d7de8cdb085759388cb7cb4a72b1d5438a9" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur28"> + <description>Cursor 28</description> + <year>1981</year> + + <!-- pet2001n Side A: Cover28!, Skeet!, Blasto!, Stop!, Voz, Flags --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="51620292"> + <rom name="cursor 28 (1981)(code works).wav" size="51620292" crc="3cceca70" sha1="9430875aa6370e940c7b88351bccba7e27be5640" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur29"> + <description>Cursor 29</description> + <year>1982</year> + + <!-- pet2001n16 Side A: pet2001n: Cover29, Pong!, Clone!, pet2001n16: Drone!, pet2001n: Contact, Krypto --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="72864822"> + <rom name="cursor 29 (1982)(code works).wav" size="72864822" crc="16fa7e17" sha1="d1f88d1e696b7b1c6488104a70ef372969521de6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="cur30"> + <description>Cursor 30</description> + <year>1982</year> + + <!-- pet2001n Side A: Cover30, Dive, Slide, Break, Rebound, Zip --> + <publisher>The Code Works</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="44679544"> + <rom name="cursor 30 (1982)(code works).wav" size="44679544" crc="bdb20dfb" sha1="12be82c0122f53718bfb2b634c85663c47a6a7e6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="dpoker"> + <!-- 321008 --> + <description>Draw Poker</description> + <year>1978</year> + <publisher>Commodore Business Machines, Inc.</publisher> + + <!-- pet20018 --> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10220420"> + <rom name="draw poker (1978)(commodore busines machines).wav" size="10220420" crc="82f7871d" sha1="973cdc5d8ede2dffa6fb25abfadf8b5daabe6949" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadj1n"> + <description>Adjectives 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Adjectives 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11189514"> + <rom name="adjectives 1 (1980)(activity records, inc.).wav" size="11189514" crc="5cd88b03" sha1="2976ab72d36a8654a33c1f8220d9c862ae4849f7" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadj2n"> + <description>Adjectives 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Adjectives 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11398034"> + <rom name="adjectives 2 (1980)(activity records, inc.).wav" size="11398034" crc="beb939fa" sha1="3b3b7ef2118263a8bb7fa85bb0010ae2d1ed89d8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadj3n"> + <description>Adjectives 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Adjectives 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10179592"> + <rom name="adjectives 3 (1980)(activity records, inc.).wav" size="10179592" crc="7019b74f" sha1="36ed0aac8f1c8ae9de7fc01c29d73d841a398d80" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadj4n"> + <description>Adjectives 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Adjectives 4 --> + <publisher>Activity rRecords, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11520634"> + <rom name="adjectives 4 (1980)(activity records, inc.).wav" size="11520634" crc="5a564aa4" sha1="2d7dad3d450158331ecfdc7289e70b3f0cfd68a5" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadv1n"> + <description>Adverbs 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Adverbs 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11171990"> + <rom name="adverbs 1 (1980)(activity records, inc.).wav" size="11171990" crc="4a264aa0" sha1="021f1f264130a46509c46ae46cefafda819deeb7" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadv2n"> + <description>Adverbs 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Adverbs 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10775102"> + <rom name="adverbs 2 (1980)(activity records, inc.).wav" size="10775102" crc="b52be4be" sha1="806da1c924aebf856a5d6236700d91b3b29a0b6f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadv3n"> + <description>Adverbs 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Adverbs 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="7315782"> + <rom name="adverbs 3 (1980)(activity records, inc.).wav" size="7315782" crc="5e2de1e4" sha1="12608f5ead991e9eb46705ff14f6a5c974c0c504" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaadv4n"> + <description>Adverbs 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Adverbs 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="8865608"> + <rom name="adverbs 4 (1980)(activity records, inc.).wav" size="8865608" crc="ecfddb13" sha1="f79db1d8fa625252f6c7dea8ae4556e5ce722e33" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eacon1n"> + <description>Contractions 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Contractions 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="8741664"> + <rom name="contractions 1 (1980)(activity records, inc.).wav" size="8741664" crc="b05cebce" sha1="c38311bf71973d7bbc89754d46feb48e738f0cb4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eacon2n"> + <description>Contractions 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Contractions 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="7618740"> + <rom name="contractions 2 (1980)(activity records, inc.).wav" size="7618740" crc="10107694" sha1="fc27866f351a18f41e4c4528b53495a908694061" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eacon3n"> + <description>Contractions 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Contractions 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="8523464"> + <rom name="contractions 3 (1980)(activity records, inc.).wav" size="8523464" crc="ab728b0b" sha1="f4e8e1c4745e40fe133e5c20104c929b4b693b56" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eacon4n"> + <description>Contractions 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Contractions 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11211668"> + <rom name="contractions 4 (1980)(activity records, inc.).wav" size="11211668" crc="707797e8" sha1="4b70d42f40037b707f5c56956cc5e2dd01b9b663" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaflasn"> + <description>Flash Spelling</description> + <year>1980</year> + + <!-- pet2001n Side A: Flash Spelling --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10924002"> + <rom name="flash spelling (1980)(activity records, inc.).wav" size="10924002" crc="c848cf8d" sha1="274ed732a2878d61751558f601c1d47b6f62a027" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eahom1n"> + <description>Homonyms 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Homonyms 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11327432"> + <rom name="homonyms 1 (1980)(activity records, inc.).wav" size="11327432" crc="b7b4b906" sha1="b4e17fe21d43e4ad951bdfa93ea9963b714f4f40" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eahom2n"> + <description>Homonyms 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Homonyms 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11861540"> + <rom name="homonyms 2 (1980)(activity records, inc.).wav" size="11861540" crc="0975d654" sha1="eb16abd7711449966ad7517fd21afec0e629b7cd" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eahom3n"> + <description>Homonyms 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Homonyms 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11615978"> + <rom name="homonyms 3 (1980)(activity records, inc.).wav" size="11615978" crc="29ee6920" sha1="7f73f30e0403356a89a1febf8ff89deff7068fa6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eahom4n"> + <description>Homonyms 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Homonyms 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11683890"> + <rom name="homonyms 4 (1980)(activity records, inc.).wav" size="11683890" crc="37dc7bc2" sha1="4337c812232055e81488a8fc9a56db374fa12147" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eanou1n"> + <description>Nouns 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Nouns 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="9658096"> + <rom name="nouns 1 (1980)(activity records, inc.).wav" size="9658096" crc="c1f58189" sha1="0d99300bdecbc7b3e0dc88dec92e0904d3730636" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eanou2n"> + <description>Nouns 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Nouns 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="8256024"> + <rom name="nouns 2 (1980)(activity records, inc.).wav" size="8256024" crc="9fd2c09e" sha1="12dfd01ed34811d35bda22049814521b694bdd1e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eanou3n"> + <description>Nouns 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Nouns 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10382360"> + <rom name="nouns 3 (1980)(activity records, inc.).wav" size="10382360" crc="526391fd" sha1="7c9b6d8c8c07415e06d89188cf4abd06131f9c05" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eanou4n"> + <description>Nouns 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Nouns 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10670724"> + <rom name="nouns 4 (1980)(activity records, inc.).wav" size="10670724" crc="19f240f3" sha1="dfc672a27119b070440dacd9bdfe45fca36c49e6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eapro1n"> + <description>Pronouns 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Pronouns 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="8304786"> + <rom name="pronouns 1 (1980)(activity records, inc.).wav" size="8304786" crc="f19b0449" sha1="df5877f923b89a65619692e3bbda60540eac225f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eapro2n"> + <description>Pronouns 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Pronouns 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="8766592"> + <rom name="pronouns 2 (1980)(activity records, inc.).wav" size="8766592" crc="369ebd25" sha1="c21773b0807136aa48852b21f6395069a9daa38e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eapro3n"> + <description>Pronouns 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Pronouns 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11746820"> + <rom name="pronouns 3 (1980)(activity records, inc.).wav" size="11746820" crc="32331088" sha1="dd8b94cef82c34fab6802a4962c6089c13d2003f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eapro4n"> + <description>Pronouns 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Pronouns 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11164358"> + <rom name="pronouns 4 (1980)(activity records, inc.).wav" size="11164358" crc="3e59fc0a" sha1="9c7f23385261ebee93ea0cef13145683af0119eb" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eascrln"> + <description>Scrambled Letters</description> + <year>1980</year> + + <!-- pet2001n Side A: Scrambled Letter --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10495222"> + <rom name="scrambled letters (1980)(activity records, inc.).wav" size="10495222" crc="1d22b476" sha1="47b5c68929acc4542442a065a13d4de6bbfbd8dc" offset="0" /> + </dataarea> + </part> + </software> + + <software name="easyn1n"> + <description>Synonyms 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Synonyms 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10756002"> + <rom name="synonyms 1 (1980)(activity records, inc.).wav" size="10756002" crc="84775373" sha1="7056dd8f4114b6da432ba60238e1c25577e03a56" offset="0" /> + </dataarea> + </part> + </software> + + <software name="easyn2n"> + <description>Synonyms 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Synonyms 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11090060"> + <rom name="synonyms 2 (1980)(activity records, inc.).wav" size="11090060" crc="97b76ece" sha1="58b5180d0a4bc1ea7660f177b2ef474c83213f75" offset="0" /> + </dataarea> + </part> + </software> + + <software name="easyn3n"> + <description>Synonyms 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Synonyms 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11520754"> + <rom name="synonyms 3 (1980)(activity records, inc.).wav" size="11520754" crc="b03171be" sha1="39dc6de8545160656b306d4b767140b055bbc426" offset="0" /> + </dataarea> + </part> + </software> + + <software name="easyn4n"> + <description>Synonyms 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Synonyms 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11056074"> + <rom name="synonyms 4 (1980)(activity records, inc.).wav" size="11056074" crc="221953dc" sha1="0d9914a7f01ebbd5c3397f5dbc31b39daf3954c6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaver1n"> + <description>Verbs 1</description> + <year>1980</year> + + <!-- pet2001n Side A: Verbs 1 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11064470"> + <rom name="verbs 1 (1980)(activity records, inc.).wav" size="11064470" crc="e0374a46" sha1="605b1965f4e801942674ad9dc809e753157d0144" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaver2n"> + <description>Verbs 2</description> + <year>1980</year> + + <!-- pet2001n Side A: Verbs 2 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11635338"> + <rom name="verbs 2 (1980)(activity records, inc.).wav" size="11635338" crc="0935674a" sha1="ecab049a8f243d669f000e2782621fb6b98443e9" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaver3n"> + <description>Verbs 3</description> + <year>1980</year> + + <!-- pet2001n Side A: Verbs 3 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="11407390"> + <rom name="verbs 3 (1980)(activity records, inc.).wav" size="11407390" crc="0564d783" sha1="41e30fa7b480714f735fb6ad8933cd4a187d227a" offset="0" /> + </dataarea> + </part> + </software> + + <software name="eaver4n"> + <description>Verbs 4</description> + <year>1980</year> + + <!-- pet2001n Side A: Verbs 4 --> + <publisher>Activity Records, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="12043578"> + <rom name="verbs 4 (1980)(activity records, inc.).wav" size="12043578" crc="84f2e68f" sha1="ba1a92a613cbaf1db870ee864d097c90c7842fc7" offset="0" /> + </dataarea> + </part> + </software> + + <software name="galaxy"> + <description>GALAXY!</description> + <year>1982</year> + + <!-- pet2001n16 Side A: Galaxy! --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="21505180"> + <rom name="galaxy! (1982)(avalon hill).wav" size="21505180" crc="d9475975" sha1="56532c57ebf8935212c410eebc7d9192c3c6578c" offset="0" /> + </dataarea> + </part> + </software> + + + <software name="galxyg"> + <!-- 321006 --> + <description>Galaxy Games</description> + <year>1978</year> + + <!-- pet20018 Side A: Galaxy Games --> + <publisher>Commodore Business Machines, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10910060"> + <rom name="galaxy games (1978)(commodore business machines).wav" size="10910060" crc="42d61509" sha1="50111ae9ff9384c07f4abce2bb9630409673c96b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="gunsfd"> + <description>The Guns of Fort Defiance</description> + <year>1981</year> + + <!-- pet2001n16 Side A: Guns of Fort D --> + <publisher>Commodore Business Machines, Inc.</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="23077818"> + <rom name="guns of fort defiance (1981)(avalon hill).wav" size="23077818" crc="cfd4e5fc" sha1="7a63c28e46ebd6893d7ea02aef0b9665b6e9dc8f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="mchess2"> + <description>Microchess 2.0</description> + <year>1978</year> + + <!-- pet2001n Side A: Microchess 2.0 --> + <publisher>Micro-ware</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="12645082"> + <rom name="microchess 2.0 (1978)(micro-ware).wav" size="12645082" crc="8b93c40b" sha1="9863092ba8e435749d98ad69e395c577dfc3cadf" offset="0" /> + </dataarea> + </part> + </software> + + <software name="midway"> + <description>Midway Campaign</description> + <year>1980</year> + <publisher>Microcomputer Games</publisher> + + <!-- pet2001n16 Side A: Midway --> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="23443232"> + <rom name="midway campaign (1980)(avalon hill).wav" size="23443232" crc="7aa50725" sha1="420fadf2b52613860e5496284e97da229d67447e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="nacr"> + <description>North Atlantic Convoy Raider</description> + <year>1980</year> + + <!-- pet2001n16 Side A: North Atlant.c.r --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="12074650"> + <rom name="north atlantic convoy raider (1980)(avalon hill).wav" size="12074650" crc="fe5dc36a" sha1="8fb15474102d5cc3ce133f3688adb8ffa15704a7" offset="0" /> + </dataarea> + </part> + </software> + + <software name="oserev"> + <!-- 321001 --> + <description>Osero / Reverse</description> + <year>1978</year> + <publisher>Commodore Business Machines, Inc.</publisher> + <!-- pet20018 Side A: Osero --> <part name="cass1" interface="cbm_cass"> - <dataarea name="cass" size="342602"> - <rom name="lunar-lander.tap" size="342602" crc="b4a77f48" sha1="28e2d8d4adce42968173996fac92365dcfc67b07" offset="0" /> + <dataarea name="cass" size="9777552"> + <rom name="osero (1978)(commodore business machines).wav" size="9777552" crc="f52d600f" sha1="57b0e42a4eb3dd7587f5a248bb549be752109f24" offset="0" /> + </dataarea> + </part> + + <!-- pet20018 Side B: Reverse --> + <part name="cass2" interface="cbm_cass"> + <dataarea name="cass" size="5270380"> + <rom name="reverse (1978)(commodore business machines).wav" size="5270380" crc="890a53ec" sha1="a2280df2113b2aa250850eadb9247ca1a0d06079" offset="0" /> + </dataarea> + </part> + </software> + + <software name="checkers"> + <description>PET Checkers</description> + <year>1980</year> + + <!-- pet20018 Side A: Checkers --> + <publisher>CMS Software Systems</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="10467148"> + <rom name="pet checkers (1980)(cms software systems).wav" size="10467148" crc="e3529a46" sha1="3fa8de3a8374e14f0d2b3bd97ff2d8393b3797f0" offset="0" /> + </dataarea> + </part> + </software> + + <software name="planet"> + <description>The Planet Miners</description> + <year>1979</year> + + <!-- pet2001n16 Side A: Planet Miners --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="22746580"> + <rom name="planet miners (1979)(avalon hill).wav" size="22746580" crc="0f09b3ac" sha1="6914d25f928fa3f6a1f185744ada904eadea06ac" offset="0" /> + </dataarea> + </part> + </software> + + <software name="santap"> + <description>Santa Paravia and Fiumaccio</description> + <year>1978</year> + + <!-- pet2001n16 Side A: Santa Paravia --> + <publisher>Folklife Terminal Club</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="22263674"> + <rom name="santa paravia and fiumaccio (1978)(folklife terminal club).wav" size="22263674" crc="4081b629" sha1="a46eac2ef42904d2b9778c697b36e23dbdcecf31" offset="0" /> + </dataarea> + </part> + </software> + + <software name="spacef"> + <!-- 321010 --> + <description>Space Fight</description> + <year>1978</year> + <publisher>Commodore Business Machines, Inc.</publisher> + + <!-- pet20018 Side A: Space Fight --> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="6234532"> + <rom name="space fight (1978)(commodore business machines).wav" size="6234532" crc="38618c0a" sha1="f100e751f41899ed6e157ed7a0d1d7d569676c7f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="tankt"> + <description>Tanktics</description> + <year>1981</year> + + <!-- pet2001n16 Side A: Tanktics --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="22165844"> + <rom name="tanktics (1981)(avalon hill).wav" size="22165844" crc="3a332c04" sha1="95bb207109f08e2cf95e12aa50b9d5840fc54656" offset="0" /> + </dataarea> + </part> + </software> + + <software name="targoff"> + <!-- 321002 --> + <description>Target Pong/Off-The-Wall</description> + <year>1978</year> + <publisher>Commodore Business Machines, Inc.</publisher> + + <!-- pet20018 Side A: Target Pong --> + <part name="cass1" interface="cbm_cass"> + <dataarea name="cass" size="6928406"> + <rom name="target pong (1978)(commodore business machines).wav" size="6928406" crc="a9b1fc5b" sha1="449149f0e5312b66b7296535e5b4840b0fd28556" offset="0" /> + </dataarea> + </part> + + <!-- pet20018 Side B: Off-The-Wall --> + <part name="cass2" interface="cbm_cass"> + <dataarea name="cass" size="7515688"> + <rom name="off-the-wall (1978)(commodore business machines).wav" size="7515688" crc="afd30b2d" sha1="cc0c4c10fc6ad1dda4012740a20406693c1aa271" offset="0" /> + </dataarea> + </part> + </software> + + <software name="telng"> + <description>Telengard</description> + <year>1982</year> + + <!-- pet2001n32 Side A: Telengard --> + <publisher>Microcomputer Games</publisher> + <part name="cass" interface="cbm_cass"> + <dataarea name="cass" size="49824646"> + <rom name="telengard (1982)(avalon hill).wav" size="49824646" crc="b6a459cb" sha1="1db22543cab974b7efa36134ee608d31511e06a1" offset="0" /> + </dataarea> + </part> + </software> + + <software name="apshai"> + <description>Temple of Apshai</description> + <year>1979</year> + <publisher>Automated Simulations</publisher> + + <!-- pet2001n32 Side A: Apshai, level 1.seq, level 2.seq, level 3.seq, level 4.seq --> + <part name="cass1" interface="cbm_cass"> + <dataarea name="cass" size="76924190"> + <rom name="temple of apshai (1979)(automated simulations).wav" size="76924190" crc="faecb03c" sha1="be38fb082fa74c33f280bda401b215001670d54f" offset="0" /> + </dataarea> + </part> + </software> + + <software name="ttgames"> + <!-- 321004 --> + <description>A Treasure Trove of Games</description> + <year>1978</year> + <publisher>Commodore Business Machines, Inc.</publisher> + + <!-- pet20018 Side A: Lunar Lander, Rotate --> + <part name="cass1" interface="cbm_cass"> + <dataarea name="cass" size="14443032"> + <rom name="lunar lander, rotate (1978)(commodore business machines).wav" size="14443032" crc="9ec18354" sha1="5099624623d83a38bc211be86213d493e672291d" offset="0" /> + </dataarea> + </part> + + <!-- pet20018 Side B: Wumpus, Tic Tac Toe --> + <part name="cass2" interface="cbm_cass"> + <dataarea name="cass" size="16588594"> + <rom name="wumpus, tic-tac-toe (1978)(commodore business machines).wav" size="16588594" crc="5345b9be" sha1="2c9ec6f68468b608f68926285f4367b6677e76e0" offset="0" /> </dataarea> </part> </software> diff --git a/src/emu/bus/isa/hdc.c b/src/emu/bus/isa/hdc.c index 0d866e4580b..79dc7185d00 100644 --- a/src/emu/bus/isa/hdc.c +++ b/src/emu/bus/isa/hdc.c @@ -149,6 +149,7 @@ INPUT_PORTS_END //************************************************************************** const device_type ISA8_HDC = &device_creator<isa8_hdc_device>; +const device_type ISA8_HDC_EC1841 = &device_creator<isa8_hdc_ec1841_device>; //------------------------------------------------- // machine_config_additions - device-specific @@ -190,6 +191,19 @@ isa8_hdc_device::isa8_hdc_device(const machine_config &mconfig, const char *tag, device_t(mconfig, ISA8_HDC, "Fixed Disk Controller Card", tag, owner, clock, "hdc", __FILE__), device_isa8_card_interface(mconfig, *this) { + m_type = STANDARD; +} + +isa8_hdc_device::isa8_hdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : + device_t(mconfig, type, name, tag, owner, clock, shortname, source), + device_isa8_card_interface(mconfig, *this) +{ +} + +isa8_hdc_ec1841_device::isa8_hdc_ec1841_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + isa8_hdc_device( mconfig, ISA8_HDC_EC1841, "EC1841 HDC", tag, owner, clock, "hdc_ec1841", __FILE__) +{ + m_type = EC1841; } //------------------------------------------------- @@ -750,7 +764,7 @@ void isa8_hdc_device::pc_hdc_data_w(int data) *buffer_ptr++ = data; // XXX ec1841 wants this - if (buffer[0] == CMD_SETPARAM && data_cnt == 9) { + if (buffer[0] == CMD_SETPARAM && data_cnt == 9 && (m_type == EC1841)) { status &= ~STA_READY; } else { status |= STA_READY; diff --git a/src/emu/bus/isa/hdc.h b/src/emu/bus/isa/hdc.h index 7aadb51ea32..7fdf067bc96 100644 --- a/src/emu/bus/isa/hdc.h +++ b/src/emu/bus/isa/hdc.h @@ -25,6 +25,7 @@ class isa8_hdc_device : public: // construction/destruction isa8_hdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + isa8_hdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; @@ -89,6 +90,12 @@ protected: void get_drive(); void get_chsn(); int test_ready(); + + enum { + STANDARD, + EC1841 + }; + int m_type; public: void hdc_command(); void pc_hdc_data_w(int data); @@ -101,7 +108,14 @@ public: }; +class isa8_hdc_ec1841_device : public isa8_hdc_device +{ +public: + isa8_hdc_ec1841_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + // device type definition extern const device_type ISA8_HDC; +extern const device_type ISA8_HDC_EC1841; #endif /* ISA_HDC_H */ diff --git a/src/emu/bus/isa/xsu_cards.c b/src/emu/bus/isa/xsu_cards.c index f32a21ce907..992eaf222d6 100644 --- a/src/emu/bus/isa/xsu_cards.c +++ b/src/emu/bus/isa/xsu_cards.c @@ -48,7 +48,7 @@ SLOT_INTERFACE_START( ec184x_isa8_cards ) SLOT_INTERFACE("ec1841.0004", ISA8_EC1841_0004) // BSC-like serial ports + parallel port */ SLOT_INTERFACE("mda", ISA8_MDA) - SLOT_INTERFACE("hdc", ISA8_HDC) + SLOT_INTERFACE("hdc", ISA8_HDC_EC1841) SLOT_INTERFACE("pccom", ISA8_COM) SLOT_INTERFACE("pclpt", ISA8_LPT) SLOT_INTERFACE("xtide", ISA8_XTIDE) diff --git a/src/emu/cpu/i386/i386.c b/src/emu/cpu/i386/i386.c index 4f08e8eca96..bbd83a7aa93 100644 --- a/src/emu/cpu/i386/i386.c +++ b/src/emu/cpu/i386/i386.c @@ -687,6 +687,7 @@ void i386_device::i386_trap(int irq, int irq_gate, int trap_level) UINT16 segment; int entry = irq * (PROTECTED_MODE ? 8 : 4); int SetRPL = 0; + m_lock = false; if( !(PROTECTED_MODE) ) { @@ -2811,7 +2812,7 @@ void i386_device::build_cycle_table() void i386_device::report_invalid_opcode() { #ifndef DEBUG_MISSING_OPCODE - logerror("i386: Invalid opcode %02X at %08X\n", m_opcode, m_pc - 1); + logerror("i386: Invalid opcode %02X at %08X %s\n", m_opcode, m_pc - 1, m_lock ? "with lock" : ""); #else logerror("i386: Invalid opcode"); for (int a = 0; a < m_opcode_bytes_length; a++) @@ -2845,6 +2846,10 @@ void i386_device::report_invalid_modrm(const char* opcode, UINT8 modrm) void i386_device::i386_decode_opcode() { m_opcode = FETCH(); + + if(m_lock && !m_lock_table[0][m_opcode]) + return i386_invalid(); + if( m_operand_size ) (this->*m_opcode_table1_32[m_opcode])(); else @@ -2855,6 +2860,10 @@ void i386_device::i386_decode_opcode() void i386_device::i386_decode_two_byte() { m_opcode = FETCH(); + + if(m_lock && !m_lock_table[1][m_opcode]) + return i386_invalid(); + if( m_operand_size ) (this->*m_opcode_table2_32[m_opcode])(); else @@ -3178,6 +3187,7 @@ void i386_device::i386_common_init(int tlbsize) save_item(NAME(m_nmi_masked)); save_item(NAME(m_nmi_latched)); save_item(NAME(m_smbase)); + save_item(NAME(m_lock)); machine().save().register_postload(save_prepost_delegate(FUNC(i386_device::i386_postload), this)); m_smiact.resolve_safe(); @@ -3392,6 +3402,8 @@ void i386_device::build_opcode_table(UINT32 features) m_opcode_table3f2_32[i] = &i386_device::i386_invalid; m_opcode_table3f3_16[i] = &i386_device::i386_invalid; m_opcode_table3f3_32[i] = &i386_device::i386_invalid; + m_lock_table[0][i] = false; + m_lock_table[1][i] = false; } for (i=0; i < sizeof(s_x86_opcode_table)/sizeof(X86_OPCODE); i++) @@ -3406,6 +3418,7 @@ void i386_device::build_opcode_table(UINT32 features) m_opcode_table2_16[op->opcode] = op->handler16; m_opcode_table366_32[op->opcode] = op->handler32; m_opcode_table366_16[op->opcode] = op->handler16; + m_lock_table[1][op->opcode] = op->lockable; } else if (op->flags & OP_3BYTE66) { @@ -3426,6 +3439,7 @@ void i386_device::build_opcode_table(UINT32 features) { m_opcode_table1_32[op->opcode] = op->handler32; m_opcode_table1_16[op->opcode] = op->handler16; + m_lock_table[0][op->opcode] = op->lockable; } } } @@ -3531,6 +3545,7 @@ void i386_device::device_reset() m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; + m_lock = false; m_a20_mask = ~0; @@ -3754,7 +3769,8 @@ void i386_device::execute_run() m_ext = 1; i386_trap(1,0,0); } - + if(m_lock && (m_opcode != 0xf0)) + m_lock = false; } catch(UINT64 e) { diff --git a/src/emu/cpu/i386/i386.h b/src/emu/cpu/i386/i386.h index 7d6ebb07e1f..235d6e898d5 100644 --- a/src/emu/cpu/i386/i386.h +++ b/src/emu/cpu/i386/i386.h @@ -138,6 +138,7 @@ struct I386_CALL_GATE UINT32 flags; i386_op_func handler16; i386_op_func handler32; + bool lockable; }; static const X86_OPCODE s_x86_opcode_table[]; @@ -244,6 +245,8 @@ struct I386_CALL_GATE i386_op_func m_opcode_table3f3_16[256]; i386_op_func m_opcode_table3f3_32[256]; + bool m_lock_table[2][256]; + UINT8 *m_cycle_table_pm; UINT8 *m_cycle_table_rm; @@ -256,6 +259,7 @@ struct I386_CALL_GATE bool m_nmi_latched; UINT32 m_smbase; devcb_write_line m_smiact; + bool m_lock; // bytes in current opcode, debug only UINT8 m_opcode_bytes[16]; diff --git a/src/emu/cpu/i386/i386ops.h b/src/emu/cpu/i386/i386ops.h index 4928363e2d2..b84d188835f 100644 --- a/src/emu/cpu/i386/i386ops.h +++ b/src/emu/cpu/i386/i386ops.h @@ -18,510 +18,510 @@ const i386_device::X86_OPCODE i386_device::s_x86_opcode_table[] = { // Opcode Flags 16-bit handler 32-bit handler - { 0x00, OP_I386, &i386_device::i386_add_rm8_r8, &i386_device::i386_add_rm8_r8, }, - { 0x01, OP_I386, &i386_device::i386_add_rm16_r16, &i386_device::i386_add_rm32_r32, }, - { 0x02, OP_I386, &i386_device::i386_add_r8_rm8, &i386_device::i386_add_r8_rm8, }, - { 0x03, OP_I386, &i386_device::i386_add_r16_rm16, &i386_device::i386_add_r32_rm32, }, - { 0x04, OP_I386, &i386_device::i386_add_al_i8, &i386_device::i386_add_al_i8, }, - { 0x05, OP_I386, &i386_device::i386_add_ax_i16, &i386_device::i386_add_eax_i32, }, - { 0x06, OP_I386, &i386_device::i386_push_es16, &i386_device::i386_push_es32, }, - { 0x07, OP_I386, &i386_device::i386_pop_es16, &i386_device::i386_pop_es32, }, - { 0x08, OP_I386, &i386_device::i386_or_rm8_r8, &i386_device::i386_or_rm8_r8, }, - { 0x09, OP_I386, &i386_device::i386_or_rm16_r16, &i386_device::i386_or_rm32_r32, }, - { 0x0A, OP_I386, &i386_device::i386_or_r8_rm8, &i386_device::i386_or_r8_rm8, }, - { 0x0B, OP_I386, &i386_device::i386_or_r16_rm16, &i386_device::i386_or_r32_rm32, }, - { 0x0C, OP_I386, &i386_device::i386_or_al_i8, &i386_device::i386_or_al_i8, }, - { 0x0D, OP_I386, &i386_device::i386_or_ax_i16, &i386_device::i386_or_eax_i32, }, - { 0x0E, OP_I386, &i386_device::i386_push_cs16, &i386_device::i386_push_cs32, }, - { 0x0F, OP_I386, &i386_device::i386_decode_two_byte, &i386_device::i386_decode_two_byte, }, - { 0x10, OP_I386, &i386_device::i386_adc_rm8_r8, &i386_device::i386_adc_rm8_r8, }, - { 0x11, OP_I386, &i386_device::i386_adc_rm16_r16, &i386_device::i386_adc_rm32_r32, }, - { 0x12, OP_I386, &i386_device::i386_adc_r8_rm8, &i386_device::i386_adc_r8_rm8, }, - { 0x13, OP_I386, &i386_device::i386_adc_r16_rm16, &i386_device::i386_adc_r32_rm32, }, - { 0x14, OP_I386, &i386_device::i386_adc_al_i8, &i386_device::i386_adc_al_i8, }, - { 0x15, OP_I386, &i386_device::i386_adc_ax_i16, &i386_device::i386_adc_eax_i32, }, - { 0x16, OP_I386, &i386_device::i386_push_ss16, &i386_device::i386_push_ss32, }, - { 0x17, OP_I386, &i386_device::i386_pop_ss16, &i386_device::i386_pop_ss32, }, - { 0x18, OP_I386, &i386_device::i386_sbb_rm8_r8, &i386_device::i386_sbb_rm8_r8, }, - { 0x19, OP_I386, &i386_device::i386_sbb_rm16_r16, &i386_device::i386_sbb_rm32_r32, }, - { 0x1A, OP_I386, &i386_device::i386_sbb_r8_rm8, &i386_device::i386_sbb_r8_rm8, }, - { 0x1B, OP_I386, &i386_device::i386_sbb_r16_rm16, &i386_device::i386_sbb_r32_rm32, }, - { 0x1C, OP_I386, &i386_device::i386_sbb_al_i8, &i386_device::i386_sbb_al_i8, }, - { 0x1D, OP_I386, &i386_device::i386_sbb_ax_i16, &i386_device::i386_sbb_eax_i32, }, - { 0x1E, OP_I386, &i386_device::i386_push_ds16, &i386_device::i386_push_ds32, }, - { 0x1F, OP_I386, &i386_device::i386_pop_ds16, &i386_device::i386_pop_ds32, }, - { 0x20, OP_I386, &i386_device::i386_and_rm8_r8, &i386_device::i386_and_rm8_r8, }, - { 0x21, OP_I386, &i386_device::i386_and_rm16_r16, &i386_device::i386_and_rm32_r32, }, - { 0x22, OP_I386, &i386_device::i386_and_r8_rm8, &i386_device::i386_and_r8_rm8, }, - { 0x23, OP_I386, &i386_device::i386_and_r16_rm16, &i386_device::i386_and_r32_rm32, }, - { 0x24, OP_I386, &i386_device::i386_and_al_i8, &i386_device::i386_and_al_i8, }, - { 0x25, OP_I386, &i386_device::i386_and_ax_i16, &i386_device::i386_and_eax_i32, }, - { 0x26, OP_I386, &i386_device::i386_segment_ES, &i386_device::i386_segment_ES, }, - { 0x27, OP_I386, &i386_device::i386_daa, &i386_device::i386_daa, }, - { 0x28, OP_I386, &i386_device::i386_sub_rm8_r8, &i386_device::i386_sub_rm8_r8, }, - { 0x29, OP_I386, &i386_device::i386_sub_rm16_r16, &i386_device::i386_sub_rm32_r32, }, - { 0x2A, OP_I386, &i386_device::i386_sub_r8_rm8, &i386_device::i386_sub_r8_rm8, }, - { 0x2B, OP_I386, &i386_device::i386_sub_r16_rm16, &i386_device::i386_sub_r32_rm32, }, - { 0x2C, OP_I386, &i386_device::i386_sub_al_i8, &i386_device::i386_sub_al_i8, }, - { 0x2D, OP_I386, &i386_device::i386_sub_ax_i16, &i386_device::i386_sub_eax_i32, }, - { 0x2E, OP_I386, &i386_device::i386_segment_CS, &i386_device::i386_segment_CS, }, - { 0x2F, OP_I386, &i386_device::i386_das, &i386_device::i386_das, }, - { 0x30, OP_I386, &i386_device::i386_xor_rm8_r8, &i386_device::i386_xor_rm8_r8, }, - { 0x31, OP_I386, &i386_device::i386_xor_rm16_r16, &i386_device::i386_xor_rm32_r32, }, - { 0x32, OP_I386, &i386_device::i386_xor_r8_rm8, &i386_device::i386_xor_r8_rm8, }, - { 0x33, OP_I386, &i386_device::i386_xor_r16_rm16, &i386_device::i386_xor_r32_rm32, }, - { 0x34, OP_I386, &i386_device::i386_xor_al_i8, &i386_device::i386_xor_al_i8, }, - { 0x35, OP_I386, &i386_device::i386_xor_ax_i16, &i386_device::i386_xor_eax_i32, }, - { 0x36, OP_I386, &i386_device::i386_segment_SS, &i386_device::i386_segment_SS, }, - { 0x37, OP_I386, &i386_device::i386_aaa, &i386_device::i386_aaa, }, - { 0x38, OP_I386, &i386_device::i386_cmp_rm8_r8, &i386_device::i386_cmp_rm8_r8, }, - { 0x39, OP_I386, &i386_device::i386_cmp_rm16_r16, &i386_device::i386_cmp_rm32_r32, }, - { 0x3A, OP_I386, &i386_device::i386_cmp_r8_rm8, &i386_device::i386_cmp_r8_rm8, }, - { 0x3B, OP_I386, &i386_device::i386_cmp_r16_rm16, &i386_device::i386_cmp_r32_rm32, }, - { 0x3C, OP_I386, &i386_device::i386_cmp_al_i8, &i386_device::i386_cmp_al_i8, }, - { 0x3D, OP_I386, &i386_device::i386_cmp_ax_i16, &i386_device::i386_cmp_eax_i32, }, - { 0x3E, OP_I386, &i386_device::i386_segment_DS, &i386_device::i386_segment_DS, }, - { 0x3F, OP_I386, &i386_device::i386_aas, &i386_device::i386_aas, }, - { 0x40, OP_I386, &i386_device::i386_inc_ax, &i386_device::i386_inc_eax, }, - { 0x41, OP_I386, &i386_device::i386_inc_cx, &i386_device::i386_inc_ecx, }, - { 0x42, OP_I386, &i386_device::i386_inc_dx, &i386_device::i386_inc_edx, }, - { 0x43, OP_I386, &i386_device::i386_inc_bx, &i386_device::i386_inc_ebx, }, - { 0x44, OP_I386, &i386_device::i386_inc_sp, &i386_device::i386_inc_esp, }, - { 0x45, OP_I386, &i386_device::i386_inc_bp, &i386_device::i386_inc_ebp, }, - { 0x46, OP_I386, &i386_device::i386_inc_si, &i386_device::i386_inc_esi, }, - { 0x47, OP_I386, &i386_device::i386_inc_di, &i386_device::i386_inc_edi, }, - { 0x48, OP_I386, &i386_device::i386_dec_ax, &i386_device::i386_dec_eax, }, - { 0x49, OP_I386, &i386_device::i386_dec_cx, &i386_device::i386_dec_ecx, }, - { 0x4A, OP_I386, &i386_device::i386_dec_dx, &i386_device::i386_dec_edx, }, - { 0x4B, OP_I386, &i386_device::i386_dec_bx, &i386_device::i386_dec_ebx, }, - { 0x4C, OP_I386, &i386_device::i386_dec_sp, &i386_device::i386_dec_esp, }, - { 0x4D, OP_I386, &i386_device::i386_dec_bp, &i386_device::i386_dec_ebp, }, - { 0x4E, OP_I386, &i386_device::i386_dec_si, &i386_device::i386_dec_esi, }, - { 0x4F, OP_I386, &i386_device::i386_dec_di, &i386_device::i386_dec_edi, }, - { 0x50, OP_I386, &i386_device::i386_push_ax, &i386_device::i386_push_eax, }, - { 0x51, OP_I386, &i386_device::i386_push_cx, &i386_device::i386_push_ecx, }, - { 0x52, OP_I386, &i386_device::i386_push_dx, &i386_device::i386_push_edx, }, - { 0x53, OP_I386, &i386_device::i386_push_bx, &i386_device::i386_push_ebx, }, - { 0x54, OP_I386, &i386_device::i386_push_sp, &i386_device::i386_push_esp, }, - { 0x55, OP_I386, &i386_device::i386_push_bp, &i386_device::i386_push_ebp, }, - { 0x56, OP_I386, &i386_device::i386_push_si, &i386_device::i386_push_esi, }, - { 0x57, OP_I386, &i386_device::i386_push_di, &i386_device::i386_push_edi, }, - { 0x58, OP_I386, &i386_device::i386_pop_ax, &i386_device::i386_pop_eax, }, - { 0x59, OP_I386, &i386_device::i386_pop_cx, &i386_device::i386_pop_ecx, }, - { 0x5A, OP_I386, &i386_device::i386_pop_dx, &i386_device::i386_pop_edx, }, - { 0x5B, OP_I386, &i386_device::i386_pop_bx, &i386_device::i386_pop_ebx, }, - { 0x5C, OP_I386, &i386_device::i386_pop_sp, &i386_device::i386_pop_esp, }, - { 0x5D, OP_I386, &i386_device::i386_pop_bp, &i386_device::i386_pop_ebp, }, - { 0x5E, OP_I386, &i386_device::i386_pop_si, &i386_device::i386_pop_esi, }, - { 0x5F, OP_I386, &i386_device::i386_pop_di, &i386_device::i386_pop_edi, }, - { 0x60, OP_I386, &i386_device::i386_pusha, &i386_device::i386_pushad, }, - { 0x61, OP_I386, &i386_device::i386_popa, &i386_device::i386_popad, }, - { 0x62, OP_I386, &i386_device::i386_bound_r16_m16_m16, &i386_device::i386_bound_r32_m32_m32, }, - { 0x63, OP_I386, &i386_device::i386_arpl, &i386_device::i386_arpl, }, - { 0x64, OP_I386, &i386_device::i386_segment_FS, &i386_device::i386_segment_FS, }, - { 0x65, OP_I386, &i386_device::i386_segment_GS, &i386_device::i386_segment_GS, }, - { 0x66, OP_I386, &i386_device::i386_operand_size, &i386_device::i386_operand_size, }, - { 0x67, OP_I386, &i386_device::i386_address_size, &i386_device::i386_address_size, }, - { 0x68, OP_I386, &i386_device::i386_push_i16, &i386_device::i386_push_i32, }, - { 0x69, OP_I386, &i386_device::i386_imul_r16_rm16_i16, &i386_device::i386_imul_r32_rm32_i32, }, - { 0x6A, OP_I386, &i386_device::i386_push_i8, &i386_device::i386_push_i8, }, - { 0x6B, OP_I386, &i386_device::i386_imul_r16_rm16_i8, &i386_device::i386_imul_r32_rm32_i8, }, - { 0x6C, OP_I386, &i386_device::i386_insb, &i386_device::i386_insb, }, - { 0x6D, OP_I386, &i386_device::i386_insw, &i386_device::i386_insd, }, - { 0x6E, OP_I386, &i386_device::i386_outsb, &i386_device::i386_outsb, }, - { 0x6F, OP_I386, &i386_device::i386_outsw, &i386_device::i386_outsd, }, - { 0x70, OP_I386, &i386_device::i386_jo_rel8, &i386_device::i386_jo_rel8, }, - { 0x71, OP_I386, &i386_device::i386_jno_rel8, &i386_device::i386_jno_rel8, }, - { 0x72, OP_I386, &i386_device::i386_jc_rel8, &i386_device::i386_jc_rel8, }, - { 0x73, OP_I386, &i386_device::i386_jnc_rel8, &i386_device::i386_jnc_rel8, }, - { 0x74, OP_I386, &i386_device::i386_jz_rel8, &i386_device::i386_jz_rel8, }, - { 0x75, OP_I386, &i386_device::i386_jnz_rel8, &i386_device::i386_jnz_rel8, }, - { 0x76, OP_I386, &i386_device::i386_jbe_rel8, &i386_device::i386_jbe_rel8, }, - { 0x77, OP_I386, &i386_device::i386_ja_rel8, &i386_device::i386_ja_rel8, }, - { 0x78, OP_I386, &i386_device::i386_js_rel8, &i386_device::i386_js_rel8, }, - { 0x79, OP_I386, &i386_device::i386_jns_rel8, &i386_device::i386_jns_rel8, }, - { 0x7A, OP_I386, &i386_device::i386_jp_rel8, &i386_device::i386_jp_rel8, }, - { 0x7B, OP_I386, &i386_device::i386_jnp_rel8, &i386_device::i386_jnp_rel8, }, - { 0x7C, OP_I386, &i386_device::i386_jl_rel8, &i386_device::i386_jl_rel8, }, - { 0x7D, OP_I386, &i386_device::i386_jge_rel8, &i386_device::i386_jge_rel8, }, - { 0x7E, OP_I386, &i386_device::i386_jle_rel8, &i386_device::i386_jle_rel8, }, - { 0x7F, OP_I386, &i386_device::i386_jg_rel8, &i386_device::i386_jg_rel8, }, - { 0x80, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, }, - { 0x81, OP_I386, &i386_device::i386_group81_16, &i386_device::i386_group81_32, }, - { 0x82, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, }, - { 0x83, OP_I386, &i386_device::i386_group83_16, &i386_device::i386_group83_32, }, - { 0x84, OP_I386, &i386_device::i386_test_rm8_r8, &i386_device::i386_test_rm8_r8, }, - { 0x85, OP_I386, &i386_device::i386_test_rm16_r16, &i386_device::i386_test_rm32_r32, }, - { 0x86, OP_I386, &i386_device::i386_xchg_r8_rm8, &i386_device::i386_xchg_r8_rm8, }, - { 0x87, OP_I386, &i386_device::i386_xchg_r16_rm16, &i386_device::i386_xchg_r32_rm32, }, - { 0x88, OP_I386, &i386_device::i386_mov_rm8_r8, &i386_device::i386_mov_rm8_r8, }, - { 0x89, OP_I386, &i386_device::i386_mov_rm16_r16, &i386_device::i386_mov_rm32_r32, }, - { 0x8A, OP_I386, &i386_device::i386_mov_r8_rm8, &i386_device::i386_mov_r8_rm8, }, - { 0x8B, OP_I386, &i386_device::i386_mov_r16_rm16, &i386_device::i386_mov_r32_rm32, }, - { 0x8C, OP_I386, &i386_device::i386_mov_rm16_sreg, &i386_device::i386_mov_rm16_sreg, }, - { 0x8D, OP_I386, &i386_device::i386_lea16, &i386_device::i386_lea32, }, - { 0x8E, OP_I386, &i386_device::i386_mov_sreg_rm16, &i386_device::i386_mov_sreg_rm16, }, - { 0x8F, OP_I386, &i386_device::i386_pop_rm16, &i386_device::i386_pop_rm32, }, - { 0x90, OP_I386, &i386_device::i386_nop, &i386_device::i386_nop, }, - { 0x91, OP_I386, &i386_device::i386_xchg_ax_cx, &i386_device::i386_xchg_eax_ecx, }, - { 0x92, OP_I386, &i386_device::i386_xchg_ax_dx, &i386_device::i386_xchg_eax_edx, }, - { 0x93, OP_I386, &i386_device::i386_xchg_ax_bx, &i386_device::i386_xchg_eax_ebx, }, - { 0x94, OP_I386, &i386_device::i386_xchg_ax_sp, &i386_device::i386_xchg_eax_esp, }, - { 0x95, OP_I386, &i386_device::i386_xchg_ax_bp, &i386_device::i386_xchg_eax_ebp, }, - { 0x96, OP_I386, &i386_device::i386_xchg_ax_si, &i386_device::i386_xchg_eax_esi, }, - { 0x97, OP_I386, &i386_device::i386_xchg_ax_di, &i386_device::i386_xchg_eax_edi, }, - { 0x98, OP_I386, &i386_device::i386_cbw, &i386_device::i386_cwde, }, - { 0x99, OP_I386, &i386_device::i386_cwd, &i386_device::i386_cdq, }, - { 0x9A, OP_I386, &i386_device::i386_call_abs16, &i386_device::i386_call_abs32, }, - { 0x9B, OP_I386, &i386_device::i386_wait, &i386_device::i386_wait, }, - { 0x9C, OP_I386, &i386_device::i386_pushf, &i386_device::i386_pushfd, }, - { 0x9D, OP_I386, &i386_device::i386_popf, &i386_device::i386_popfd, }, - { 0x9E, OP_I386, &i386_device::i386_sahf, &i386_device::i386_sahf, }, - { 0x9F, OP_I386, &i386_device::i386_lahf, &i386_device::i386_lahf, }, - { 0xA0, OP_I386, &i386_device::i386_mov_al_m8, &i386_device::i386_mov_al_m8, }, - { 0xA1, OP_I386, &i386_device::i386_mov_ax_m16, &i386_device::i386_mov_eax_m32, }, - { 0xA2, OP_I386, &i386_device::i386_mov_m8_al, &i386_device::i386_mov_m8_al, }, - { 0xA3, OP_I386, &i386_device::i386_mov_m16_ax, &i386_device::i386_mov_m32_eax, }, - { 0xA4, OP_I386, &i386_device::i386_movsb, &i386_device::i386_movsb, }, - { 0xA5, OP_I386, &i386_device::i386_movsw, &i386_device::i386_movsd, }, - { 0xA6, OP_I386, &i386_device::i386_cmpsb, &i386_device::i386_cmpsb, }, - { 0xA7, OP_I386, &i386_device::i386_cmpsw, &i386_device::i386_cmpsd, }, - { 0xA8, OP_I386, &i386_device::i386_test_al_i8, &i386_device::i386_test_al_i8, }, - { 0xA9, OP_I386, &i386_device::i386_test_ax_i16, &i386_device::i386_test_eax_i32, }, - { 0xAA, OP_I386, &i386_device::i386_stosb, &i386_device::i386_stosb, }, - { 0xAB, OP_I386, &i386_device::i386_stosw, &i386_device::i386_stosd, }, - { 0xAC, OP_I386, &i386_device::i386_lodsb, &i386_device::i386_lodsb, }, - { 0xAD, OP_I386, &i386_device::i386_lodsw, &i386_device::i386_lodsd, }, - { 0xAE, OP_I386, &i386_device::i386_scasb, &i386_device::i386_scasb, }, - { 0xAF, OP_I386, &i386_device::i386_scasw, &i386_device::i386_scasd, }, - { 0xB0, OP_I386, &i386_device::i386_mov_al_i8, &i386_device::i386_mov_al_i8, }, - { 0xB1, OP_I386, &i386_device::i386_mov_cl_i8, &i386_device::i386_mov_cl_i8, }, - { 0xB2, OP_I386, &i386_device::i386_mov_dl_i8, &i386_device::i386_mov_dl_i8, }, - { 0xB3, OP_I386, &i386_device::i386_mov_bl_i8, &i386_device::i386_mov_bl_i8, }, - { 0xB4, OP_I386, &i386_device::i386_mov_ah_i8, &i386_device::i386_mov_ah_i8, }, - { 0xB5, OP_I386, &i386_device::i386_mov_ch_i8, &i386_device::i386_mov_ch_i8, }, - { 0xB6, OP_I386, &i386_device::i386_mov_dh_i8, &i386_device::i386_mov_dh_i8, }, - { 0xB7, OP_I386, &i386_device::i386_mov_bh_i8, &i386_device::i386_mov_bh_i8, }, - { 0xB8, OP_I386, &i386_device::i386_mov_ax_i16, &i386_device::i386_mov_eax_i32, }, - { 0xB9, OP_I386, &i386_device::i386_mov_cx_i16, &i386_device::i386_mov_ecx_i32, }, - { 0xBA, OP_I386, &i386_device::i386_mov_dx_i16, &i386_device::i386_mov_edx_i32, }, - { 0xBB, OP_I386, &i386_device::i386_mov_bx_i16, &i386_device::i386_mov_ebx_i32, }, - { 0xBC, OP_I386, &i386_device::i386_mov_sp_i16, &i386_device::i386_mov_esp_i32, }, - { 0xBD, OP_I386, &i386_device::i386_mov_bp_i16, &i386_device::i386_mov_ebp_i32, }, - { 0xBE, OP_I386, &i386_device::i386_mov_si_i16, &i386_device::i386_mov_esi_i32, }, - { 0xBF, OP_I386, &i386_device::i386_mov_di_i16, &i386_device::i386_mov_edi_i32, }, - { 0xC0, OP_I386, &i386_device::i386_groupC0_8, &i386_device::i386_groupC0_8, }, - { 0xC1, OP_I386, &i386_device::i386_groupC1_16, &i386_device::i386_groupC1_32, }, - { 0xC2, OP_I386, &i386_device::i386_ret_near16_i16, &i386_device::i386_ret_near32_i16, }, - { 0xC3, OP_I386, &i386_device::i386_ret_near16, &i386_device::i386_ret_near32, }, - { 0xC4, OP_I386, &i386_device::i386_les16, &i386_device::i386_les32, }, - { 0xC5, OP_I386, &i386_device::i386_lds16, &i386_device::i386_lds32, }, - { 0xC6, OP_I386, &i386_device::i386_mov_rm8_i8, &i386_device::i386_mov_rm8_i8, }, - { 0xC7, OP_I386, &i386_device::i386_mov_rm16_i16, &i386_device::i386_mov_rm32_i32, }, - { 0xC8, OP_I386, &i386_device::i386_enter16, &i386_device::i386_enter32, }, - { 0xC9, OP_I386, &i386_device::i386_leave16, &i386_device::i386_leave32, }, - { 0xCA, OP_I386, &i386_device::i386_retf_i16, &i386_device::i386_retf_i32, }, - { 0xCB, OP_I386, &i386_device::i386_retf16, &i386_device::i386_retf32, }, - { 0xCC, OP_I386, &i386_device::i386_int3, &i386_device::i386_int3, }, - { 0xCD, OP_I386, &i386_device::i386_int, &i386_device::i386_int, }, - { 0xCE, OP_I386, &i386_device::i386_into, &i386_device::i386_into, }, - { 0xCF, OP_I386, &i386_device::i386_iret16, &i386_device::i386_iret32, }, - { 0xD0, OP_I386, &i386_device::i386_groupD0_8, &i386_device::i386_groupD0_8, }, - { 0xD1, OP_I386, &i386_device::i386_groupD1_16, &i386_device::i386_groupD1_32, }, - { 0xD2, OP_I386, &i386_device::i386_groupD2_8, &i386_device::i386_groupD2_8, }, - { 0xD3, OP_I386, &i386_device::i386_groupD3_16, &i386_device::i386_groupD3_32, }, - { 0xD4, OP_I386, &i386_device::i386_aam, &i386_device::i386_aam, }, - { 0xD5, OP_I386, &i386_device::i386_aad, &i386_device::i386_aad, }, - { 0xD6, OP_I386, &i386_device::i386_setalc, &i386_device::i386_setalc, }, - { 0xD7, OP_I386, &i386_device::i386_xlat, &i386_device::i386_xlat, }, - { 0xD8, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xD9, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDA, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDB, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDC, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDD, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDE, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDF, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xD8, OP_FPU, &i386_device::i386_x87_group_d8, &i386_device::i386_x87_group_d8, }, - { 0xD9, OP_FPU, &i386_device::i386_x87_group_d9, &i386_device::i386_x87_group_d9, }, - { 0xDA, OP_FPU, &i386_device::i386_x87_group_da, &i386_device::i386_x87_group_da, }, - { 0xDB, OP_FPU, &i386_device::i386_x87_group_db, &i386_device::i386_x87_group_db, }, - { 0xDC, OP_FPU, &i386_device::i386_x87_group_dc, &i386_device::i386_x87_group_dc, }, - { 0xDD, OP_FPU, &i386_device::i386_x87_group_dd, &i386_device::i386_x87_group_dd, }, - { 0xDE, OP_FPU, &i386_device::i386_x87_group_de, &i386_device::i386_x87_group_de, }, - { 0xDF, OP_FPU, &i386_device::i386_x87_group_df, &i386_device::i386_x87_group_df, }, - { 0xE0, OP_I386, &i386_device::i386_loopne16, &i386_device::i386_loopne32, }, - { 0xE1, OP_I386, &i386_device::i386_loopz16, &i386_device::i386_loopz32, }, - { 0xE2, OP_I386, &i386_device::i386_loop16, &i386_device::i386_loop32, }, - { 0xE3, OP_I386, &i386_device::i386_jcxz16, &i386_device::i386_jcxz32, }, - { 0xE4, OP_I386, &i386_device::i386_in_al_i8, &i386_device::i386_in_al_i8, }, - { 0xE5, OP_I386, &i386_device::i386_in_ax_i8, &i386_device::i386_in_eax_i8, }, - { 0xE6, OP_I386, &i386_device::i386_out_al_i8, &i386_device::i386_out_al_i8, }, - { 0xE7, OP_I386, &i386_device::i386_out_ax_i8, &i386_device::i386_out_eax_i8, }, - { 0xE8, OP_I386, &i386_device::i386_call_rel16, &i386_device::i386_call_rel32, }, - { 0xE9, OP_I386, &i386_device::i386_jmp_rel16, &i386_device::i386_jmp_rel32, }, - { 0xEA, OP_I386, &i386_device::i386_jmp_abs16, &i386_device::i386_jmp_abs32, }, - { 0xEB, OP_I386, &i386_device::i386_jmp_rel8, &i386_device::i386_jmp_rel8, }, - { 0xEC, OP_I386, &i386_device::i386_in_al_dx, &i386_device::i386_in_al_dx, }, - { 0xED, OP_I386, &i386_device::i386_in_ax_dx, &i386_device::i386_in_eax_dx, }, - { 0xEE, OP_I386, &i386_device::i386_out_al_dx, &i386_device::i386_out_al_dx, }, - { 0xEF, OP_I386, &i386_device::i386_out_ax_dx, &i386_device::i386_out_eax_dx, }, - { 0xF0, OP_I386, &i386_device::i386_lock, &i386_device::i386_lock, }, - { 0xF1, OP_I386, &i386_device::i386_invalid, &i386_device::i386_invalid, }, - { 0xF2, OP_I386, &i386_device::i386_repne, &i386_device::i386_repne, }, - { 0xF3, OP_I386, &i386_device::i386_rep, &i386_device::i386_rep, }, - { 0xF4, OP_I386, &i386_device::i386_hlt, &i386_device::i386_hlt, }, - { 0xF5, OP_I386, &i386_device::i386_cmc, &i386_device::i386_cmc, }, - { 0xF6, OP_I386, &i386_device::i386_groupF6_8, &i386_device::i386_groupF6_8, }, - { 0xF7, OP_I386, &i386_device::i386_groupF7_16, &i386_device::i386_groupF7_32, }, - { 0xF8, OP_I386, &i386_device::i386_clc, &i386_device::i386_clc, }, - { 0xF9, OP_I386, &i386_device::i386_stc, &i386_device::i386_stc, }, - { 0xFA, OP_I386, &i386_device::i386_cli, &i386_device::i386_cli, }, - { 0xFB, OP_I386, &i386_device::i386_sti, &i386_device::i386_sti, }, - { 0xFC, OP_I386, &i386_device::i386_cld, &i386_device::i386_cld, }, - { 0xFD, OP_I386, &i386_device::i386_std, &i386_device::i386_std, }, - { 0xFE, OP_I386, &i386_device::i386_groupFE_8, &i386_device::i386_groupFE_8, }, - { 0xFF, OP_I386, &i386_device::i386_groupFF_16, &i386_device::i386_groupFF_32, }, + { 0x00, OP_I386, &i386_device::i386_add_rm8_r8, &i386_device::i386_add_rm8_r8, true }, + { 0x01, OP_I386, &i386_device::i386_add_rm16_r16, &i386_device::i386_add_rm32_r32, true }, + { 0x02, OP_I386, &i386_device::i386_add_r8_rm8, &i386_device::i386_add_r8_rm8, false}, + { 0x03, OP_I386, &i386_device::i386_add_r16_rm16, &i386_device::i386_add_r32_rm32, false}, + { 0x04, OP_I386, &i386_device::i386_add_al_i8, &i386_device::i386_add_al_i8, false}, + { 0x05, OP_I386, &i386_device::i386_add_ax_i16, &i386_device::i386_add_eax_i32, false}, + { 0x06, OP_I386, &i386_device::i386_push_es16, &i386_device::i386_push_es32, false}, + { 0x07, OP_I386, &i386_device::i386_pop_es16, &i386_device::i386_pop_es32, false}, + { 0x08, OP_I386, &i386_device::i386_or_rm8_r8, &i386_device::i386_or_rm8_r8, true }, + { 0x09, OP_I386, &i386_device::i386_or_rm16_r16, &i386_device::i386_or_rm32_r32, true }, + { 0x0A, OP_I386, &i386_device::i386_or_r8_rm8, &i386_device::i386_or_r8_rm8, false}, + { 0x0B, OP_I386, &i386_device::i386_or_r16_rm16, &i386_device::i386_or_r32_rm32, false}, + { 0x0C, OP_I386, &i386_device::i386_or_al_i8, &i386_device::i386_or_al_i8, false}, + { 0x0D, OP_I386, &i386_device::i386_or_ax_i16, &i386_device::i386_or_eax_i32, false}, + { 0x0E, OP_I386, &i386_device::i386_push_cs16, &i386_device::i386_push_cs32, false}, + { 0x0F, OP_I386, &i386_device::i386_decode_two_byte, &i386_device::i386_decode_two_byte, true }, + { 0x10, OP_I386, &i386_device::i386_adc_rm8_r8, &i386_device::i386_adc_rm8_r8, true }, + { 0x11, OP_I386, &i386_device::i386_adc_rm16_r16, &i386_device::i386_adc_rm32_r32, true }, + { 0x12, OP_I386, &i386_device::i386_adc_r8_rm8, &i386_device::i386_adc_r8_rm8, false}, + { 0x13, OP_I386, &i386_device::i386_adc_r16_rm16, &i386_device::i386_adc_r32_rm32, false}, + { 0x14, OP_I386, &i386_device::i386_adc_al_i8, &i386_device::i386_adc_al_i8, false}, + { 0x15, OP_I386, &i386_device::i386_adc_ax_i16, &i386_device::i386_adc_eax_i32, false}, + { 0x16, OP_I386, &i386_device::i386_push_ss16, &i386_device::i386_push_ss32, false}, + { 0x17, OP_I386, &i386_device::i386_pop_ss16, &i386_device::i386_pop_ss32, false}, + { 0x18, OP_I386, &i386_device::i386_sbb_rm8_r8, &i386_device::i386_sbb_rm8_r8, true }, + { 0x19, OP_I386, &i386_device::i386_sbb_rm16_r16, &i386_device::i386_sbb_rm32_r32, true }, + { 0x1A, OP_I386, &i386_device::i386_sbb_r8_rm8, &i386_device::i386_sbb_r8_rm8, false}, + { 0x1B, OP_I386, &i386_device::i386_sbb_r16_rm16, &i386_device::i386_sbb_r32_rm32, false}, + { 0x1C, OP_I386, &i386_device::i386_sbb_al_i8, &i386_device::i386_sbb_al_i8, false}, + { 0x1D, OP_I386, &i386_device::i386_sbb_ax_i16, &i386_device::i386_sbb_eax_i32, false}, + { 0x1E, OP_I386, &i386_device::i386_push_ds16, &i386_device::i386_push_ds32, false}, + { 0x1F, OP_I386, &i386_device::i386_pop_ds16, &i386_device::i386_pop_ds32, false}, + { 0x20, OP_I386, &i386_device::i386_and_rm8_r8, &i386_device::i386_and_rm8_r8, true }, + { 0x21, OP_I386, &i386_device::i386_and_rm16_r16, &i386_device::i386_and_rm32_r32, true }, + { 0x22, OP_I386, &i386_device::i386_and_r8_rm8, &i386_device::i386_and_r8_rm8, false}, + { 0x23, OP_I386, &i386_device::i386_and_r16_rm16, &i386_device::i386_and_r32_rm32, false}, + { 0x24, OP_I386, &i386_device::i386_and_al_i8, &i386_device::i386_and_al_i8, false}, + { 0x25, OP_I386, &i386_device::i386_and_ax_i16, &i386_device::i386_and_eax_i32, false}, + { 0x26, OP_I386, &i386_device::i386_segment_ES, &i386_device::i386_segment_ES, false}, + { 0x27, OP_I386, &i386_device::i386_daa, &i386_device::i386_daa, false}, + { 0x28, OP_I386, &i386_device::i386_sub_rm8_r8, &i386_device::i386_sub_rm8_r8, true }, + { 0x29, OP_I386, &i386_device::i386_sub_rm16_r16, &i386_device::i386_sub_rm32_r32, true }, + { 0x2A, OP_I386, &i386_device::i386_sub_r8_rm8, &i386_device::i386_sub_r8_rm8, false}, + { 0x2B, OP_I386, &i386_device::i386_sub_r16_rm16, &i386_device::i386_sub_r32_rm32, false}, + { 0x2C, OP_I386, &i386_device::i386_sub_al_i8, &i386_device::i386_sub_al_i8, false}, + { 0x2D, OP_I386, &i386_device::i386_sub_ax_i16, &i386_device::i386_sub_eax_i32, false}, + { 0x2E, OP_I386, &i386_device::i386_segment_CS, &i386_device::i386_segment_CS, false}, + { 0x2F, OP_I386, &i386_device::i386_das, &i386_device::i386_das, false}, + { 0x30, OP_I386, &i386_device::i386_xor_rm8_r8, &i386_device::i386_xor_rm8_r8, true }, + { 0x31, OP_I386, &i386_device::i386_xor_rm16_r16, &i386_device::i386_xor_rm32_r32, true }, + { 0x32, OP_I386, &i386_device::i386_xor_r8_rm8, &i386_device::i386_xor_r8_rm8, false}, + { 0x33, OP_I386, &i386_device::i386_xor_r16_rm16, &i386_device::i386_xor_r32_rm32, false}, + { 0x34, OP_I386, &i386_device::i386_xor_al_i8, &i386_device::i386_xor_al_i8, false}, + { 0x35, OP_I386, &i386_device::i386_xor_ax_i16, &i386_device::i386_xor_eax_i32, false}, + { 0x36, OP_I386, &i386_device::i386_segment_SS, &i386_device::i386_segment_SS, false}, + { 0x37, OP_I386, &i386_device::i386_aaa, &i386_device::i386_aaa, false}, + { 0x38, OP_I386, &i386_device::i386_cmp_rm8_r8, &i386_device::i386_cmp_rm8_r8, false}, + { 0x39, OP_I386, &i386_device::i386_cmp_rm16_r16, &i386_device::i386_cmp_rm32_r32, false}, + { 0x3A, OP_I386, &i386_device::i386_cmp_r8_rm8, &i386_device::i386_cmp_r8_rm8, false}, + { 0x3B, OP_I386, &i386_device::i386_cmp_r16_rm16, &i386_device::i386_cmp_r32_rm32, false}, + { 0x3C, OP_I386, &i386_device::i386_cmp_al_i8, &i386_device::i386_cmp_al_i8, false}, + { 0x3D, OP_I386, &i386_device::i386_cmp_ax_i16, &i386_device::i386_cmp_eax_i32, false}, + { 0x3E, OP_I386, &i386_device::i386_segment_DS, &i386_device::i386_segment_DS, false}, + { 0x3F, OP_I386, &i386_device::i386_aas, &i386_device::i386_aas, false}, + { 0x40, OP_I386, &i386_device::i386_inc_ax, &i386_device::i386_inc_eax, false}, + { 0x41, OP_I386, &i386_device::i386_inc_cx, &i386_device::i386_inc_ecx, false}, + { 0x42, OP_I386, &i386_device::i386_inc_dx, &i386_device::i386_inc_edx, false}, + { 0x43, OP_I386, &i386_device::i386_inc_bx, &i386_device::i386_inc_ebx, false}, + { 0x44, OP_I386, &i386_device::i386_inc_sp, &i386_device::i386_inc_esp, false}, + { 0x45, OP_I386, &i386_device::i386_inc_bp, &i386_device::i386_inc_ebp, false}, + { 0x46, OP_I386, &i386_device::i386_inc_si, &i386_device::i386_inc_esi, false}, + { 0x47, OP_I386, &i386_device::i386_inc_di, &i386_device::i386_inc_edi, false}, + { 0x48, OP_I386, &i386_device::i386_dec_ax, &i386_device::i386_dec_eax, false}, + { 0x49, OP_I386, &i386_device::i386_dec_cx, &i386_device::i386_dec_ecx, false}, + { 0x4A, OP_I386, &i386_device::i386_dec_dx, &i386_device::i386_dec_edx, false}, + { 0x4B, OP_I386, &i386_device::i386_dec_bx, &i386_device::i386_dec_ebx, false}, + { 0x4C, OP_I386, &i386_device::i386_dec_sp, &i386_device::i386_dec_esp, false}, + { 0x4D, OP_I386, &i386_device::i386_dec_bp, &i386_device::i386_dec_ebp, false}, + { 0x4E, OP_I386, &i386_device::i386_dec_si, &i386_device::i386_dec_esi, false}, + { 0x4F, OP_I386, &i386_device::i386_dec_di, &i386_device::i386_dec_edi, false}, + { 0x50, OP_I386, &i386_device::i386_push_ax, &i386_device::i386_push_eax, false}, + { 0x51, OP_I386, &i386_device::i386_push_cx, &i386_device::i386_push_ecx, false}, + { 0x52, OP_I386, &i386_device::i386_push_dx, &i386_device::i386_push_edx, false}, + { 0x53, OP_I386, &i386_device::i386_push_bx, &i386_device::i386_push_ebx, false}, + { 0x54, OP_I386, &i386_device::i386_push_sp, &i386_device::i386_push_esp, false}, + { 0x55, OP_I386, &i386_device::i386_push_bp, &i386_device::i386_push_ebp, false}, + { 0x56, OP_I386, &i386_device::i386_push_si, &i386_device::i386_push_esi, false}, + { 0x57, OP_I386, &i386_device::i386_push_di, &i386_device::i386_push_edi, false}, + { 0x58, OP_I386, &i386_device::i386_pop_ax, &i386_device::i386_pop_eax, false}, + { 0x59, OP_I386, &i386_device::i386_pop_cx, &i386_device::i386_pop_ecx, false}, + { 0x5A, OP_I386, &i386_device::i386_pop_dx, &i386_device::i386_pop_edx, false}, + { 0x5B, OP_I386, &i386_device::i386_pop_bx, &i386_device::i386_pop_ebx, false}, + { 0x5C, OP_I386, &i386_device::i386_pop_sp, &i386_device::i386_pop_esp, false}, + { 0x5D, OP_I386, &i386_device::i386_pop_bp, &i386_device::i386_pop_ebp, false}, + { 0x5E, OP_I386, &i386_device::i386_pop_si, &i386_device::i386_pop_esi, false}, + { 0x5F, OP_I386, &i386_device::i386_pop_di, &i386_device::i386_pop_edi, false}, + { 0x60, OP_I386, &i386_device::i386_pusha, &i386_device::i386_pushad, false}, + { 0x61, OP_I386, &i386_device::i386_popa, &i386_device::i386_popad, false}, + { 0x62, OP_I386, &i386_device::i386_bound_r16_m16_m16, &i386_device::i386_bound_r32_m32_m32, false}, + { 0x63, OP_I386, &i386_device::i386_arpl, &i386_device::i386_arpl, false}, + { 0x64, OP_I386, &i386_device::i386_segment_FS, &i386_device::i386_segment_FS, false}, + { 0x65, OP_I386, &i386_device::i386_segment_GS, &i386_device::i386_segment_GS, false}, + { 0x66, OP_I386, &i386_device::i386_operand_size, &i386_device::i386_operand_size, false}, + { 0x67, OP_I386, &i386_device::i386_address_size, &i386_device::i386_address_size, false}, + { 0x68, OP_I386, &i386_device::i386_push_i16, &i386_device::i386_push_i32, false}, + { 0x69, OP_I386, &i386_device::i386_imul_r16_rm16_i16, &i386_device::i386_imul_r32_rm32_i32, false}, + { 0x6A, OP_I386, &i386_device::i386_push_i8, &i386_device::i386_push_i8, false}, + { 0x6B, OP_I386, &i386_device::i386_imul_r16_rm16_i8, &i386_device::i386_imul_r32_rm32_i8, false}, + { 0x6C, OP_I386, &i386_device::i386_insb, &i386_device::i386_insb, false}, + { 0x6D, OP_I386, &i386_device::i386_insw, &i386_device::i386_insd, false}, + { 0x6E, OP_I386, &i386_device::i386_outsb, &i386_device::i386_outsb, false}, + { 0x6F, OP_I386, &i386_device::i386_outsw, &i386_device::i386_outsd, false}, + { 0x70, OP_I386, &i386_device::i386_jo_rel8, &i386_device::i386_jo_rel8, false}, + { 0x71, OP_I386, &i386_device::i386_jno_rel8, &i386_device::i386_jno_rel8, false}, + { 0x72, OP_I386, &i386_device::i386_jc_rel8, &i386_device::i386_jc_rel8, false}, + { 0x73, OP_I386, &i386_device::i386_jnc_rel8, &i386_device::i386_jnc_rel8, false}, + { 0x74, OP_I386, &i386_device::i386_jz_rel8, &i386_device::i386_jz_rel8, false}, + { 0x75, OP_I386, &i386_device::i386_jnz_rel8, &i386_device::i386_jnz_rel8, false}, + { 0x76, OP_I386, &i386_device::i386_jbe_rel8, &i386_device::i386_jbe_rel8, false}, + { 0x77, OP_I386, &i386_device::i386_ja_rel8, &i386_device::i386_ja_rel8, false}, + { 0x78, OP_I386, &i386_device::i386_js_rel8, &i386_device::i386_js_rel8, false}, + { 0x79, OP_I386, &i386_device::i386_jns_rel8, &i386_device::i386_jns_rel8, false}, + { 0x7A, OP_I386, &i386_device::i386_jp_rel8, &i386_device::i386_jp_rel8, false}, + { 0x7B, OP_I386, &i386_device::i386_jnp_rel8, &i386_device::i386_jnp_rel8, false}, + { 0x7C, OP_I386, &i386_device::i386_jl_rel8, &i386_device::i386_jl_rel8, false}, + { 0x7D, OP_I386, &i386_device::i386_jge_rel8, &i386_device::i386_jge_rel8, false}, + { 0x7E, OP_I386, &i386_device::i386_jle_rel8, &i386_device::i386_jle_rel8, false}, + { 0x7F, OP_I386, &i386_device::i386_jg_rel8, &i386_device::i386_jg_rel8, false}, + { 0x80, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, true }, + { 0x81, OP_I386, &i386_device::i386_group81_16, &i386_device::i386_group81_32, true }, + { 0x82, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, true }, + { 0x83, OP_I386, &i386_device::i386_group83_16, &i386_device::i386_group83_32, true }, + { 0x84, OP_I386, &i386_device::i386_test_rm8_r8, &i386_device::i386_test_rm8_r8, false}, + { 0x85, OP_I386, &i386_device::i386_test_rm16_r16, &i386_device::i386_test_rm32_r32, false}, + { 0x86, OP_I386, &i386_device::i386_xchg_r8_rm8, &i386_device::i386_xchg_r8_rm8, true }, + { 0x87, OP_I386, &i386_device::i386_xchg_r16_rm16, &i386_device::i386_xchg_r32_rm32, true }, + { 0x88, OP_I386, &i386_device::i386_mov_rm8_r8, &i386_device::i386_mov_rm8_r8, false}, + { 0x89, OP_I386, &i386_device::i386_mov_rm16_r16, &i386_device::i386_mov_rm32_r32, false}, + { 0x8A, OP_I386, &i386_device::i386_mov_r8_rm8, &i386_device::i386_mov_r8_rm8, false}, + { 0x8B, OP_I386, &i386_device::i386_mov_r16_rm16, &i386_device::i386_mov_r32_rm32, false}, + { 0x8C, OP_I386, &i386_device::i386_mov_rm16_sreg, &i386_device::i386_mov_rm16_sreg, false}, + { 0x8D, OP_I386, &i386_device::i386_lea16, &i386_device::i386_lea32, false}, + { 0x8E, OP_I386, &i386_device::i386_mov_sreg_rm16, &i386_device::i386_mov_sreg_rm16, false}, + { 0x8F, OP_I386, &i386_device::i386_pop_rm16, &i386_device::i386_pop_rm32, false}, + { 0x90, OP_I386, &i386_device::i386_nop, &i386_device::i386_nop, false}, + { 0x91, OP_I386, &i386_device::i386_xchg_ax_cx, &i386_device::i386_xchg_eax_ecx, false}, + { 0x92, OP_I386, &i386_device::i386_xchg_ax_dx, &i386_device::i386_xchg_eax_edx, false}, + { 0x93, OP_I386, &i386_device::i386_xchg_ax_bx, &i386_device::i386_xchg_eax_ebx, false}, + { 0x94, OP_I386, &i386_device::i386_xchg_ax_sp, &i386_device::i386_xchg_eax_esp, false}, + { 0x95, OP_I386, &i386_device::i386_xchg_ax_bp, &i386_device::i386_xchg_eax_ebp, false}, + { 0x96, OP_I386, &i386_device::i386_xchg_ax_si, &i386_device::i386_xchg_eax_esi, false}, + { 0x97, OP_I386, &i386_device::i386_xchg_ax_di, &i386_device::i386_xchg_eax_edi, false}, + { 0x98, OP_I386, &i386_device::i386_cbw, &i386_device::i386_cwde, false}, + { 0x99, OP_I386, &i386_device::i386_cwd, &i386_device::i386_cdq, false}, + { 0x9A, OP_I386, &i386_device::i386_call_abs16, &i386_device::i386_call_abs32, false}, + { 0x9B, OP_I386, &i386_device::i386_wait, &i386_device::i386_wait, false}, + { 0x9C, OP_I386, &i386_device::i386_pushf, &i386_device::i386_pushfd, false}, + { 0x9D, OP_I386, &i386_device::i386_popf, &i386_device::i386_popfd, false}, + { 0x9E, OP_I386, &i386_device::i386_sahf, &i386_device::i386_sahf, false}, + { 0x9F, OP_I386, &i386_device::i386_lahf, &i386_device::i386_lahf, false}, + { 0xA0, OP_I386, &i386_device::i386_mov_al_m8, &i386_device::i386_mov_al_m8, false}, + { 0xA1, OP_I386, &i386_device::i386_mov_ax_m16, &i386_device::i386_mov_eax_m32, false}, + { 0xA2, OP_I386, &i386_device::i386_mov_m8_al, &i386_device::i386_mov_m8_al, false}, + { 0xA3, OP_I386, &i386_device::i386_mov_m16_ax, &i386_device::i386_mov_m32_eax, false}, + { 0xA4, OP_I386, &i386_device::i386_movsb, &i386_device::i386_movsb, false}, + { 0xA5, OP_I386, &i386_device::i386_movsw, &i386_device::i386_movsd, false}, + { 0xA6, OP_I386, &i386_device::i386_cmpsb, &i386_device::i386_cmpsb, false}, + { 0xA7, OP_I386, &i386_device::i386_cmpsw, &i386_device::i386_cmpsd, false}, + { 0xA8, OP_I386, &i386_device::i386_test_al_i8, &i386_device::i386_test_al_i8, false}, + { 0xA9, OP_I386, &i386_device::i386_test_ax_i16, &i386_device::i386_test_eax_i32, false}, + { 0xAA, OP_I386, &i386_device::i386_stosb, &i386_device::i386_stosb, false}, + { 0xAB, OP_I386, &i386_device::i386_stosw, &i386_device::i386_stosd, false}, + { 0xAC, OP_I386, &i386_device::i386_lodsb, &i386_device::i386_lodsb, false}, + { 0xAD, OP_I386, &i386_device::i386_lodsw, &i386_device::i386_lodsd, false}, + { 0xAE, OP_I386, &i386_device::i386_scasb, &i386_device::i386_scasb, false}, + { 0xAF, OP_I386, &i386_device::i386_scasw, &i386_device::i386_scasd, false}, + { 0xB0, OP_I386, &i386_device::i386_mov_al_i8, &i386_device::i386_mov_al_i8, false}, + { 0xB1, OP_I386, &i386_device::i386_mov_cl_i8, &i386_device::i386_mov_cl_i8, false}, + { 0xB2, OP_I386, &i386_device::i386_mov_dl_i8, &i386_device::i386_mov_dl_i8, false}, + { 0xB3, OP_I386, &i386_device::i386_mov_bl_i8, &i386_device::i386_mov_bl_i8, false}, + { 0xB4, OP_I386, &i386_device::i386_mov_ah_i8, &i386_device::i386_mov_ah_i8, false}, + { 0xB5, OP_I386, &i386_device::i386_mov_ch_i8, &i386_device::i386_mov_ch_i8, false}, + { 0xB6, OP_I386, &i386_device::i386_mov_dh_i8, &i386_device::i386_mov_dh_i8, false}, + { 0xB7, OP_I386, &i386_device::i386_mov_bh_i8, &i386_device::i386_mov_bh_i8, false}, + { 0xB8, OP_I386, &i386_device::i386_mov_ax_i16, &i386_device::i386_mov_eax_i32, false}, + { 0xB9, OP_I386, &i386_device::i386_mov_cx_i16, &i386_device::i386_mov_ecx_i32, false}, + { 0xBA, OP_I386, &i386_device::i386_mov_dx_i16, &i386_device::i386_mov_edx_i32, false}, + { 0xBB, OP_I386, &i386_device::i386_mov_bx_i16, &i386_device::i386_mov_ebx_i32, false}, + { 0xBC, OP_I386, &i386_device::i386_mov_sp_i16, &i386_device::i386_mov_esp_i32, false}, + { 0xBD, OP_I386, &i386_device::i386_mov_bp_i16, &i386_device::i386_mov_ebp_i32, false}, + { 0xBE, OP_I386, &i386_device::i386_mov_si_i16, &i386_device::i386_mov_esi_i32, false}, + { 0xBF, OP_I386, &i386_device::i386_mov_di_i16, &i386_device::i386_mov_edi_i32, false}, + { 0xC0, OP_I386, &i386_device::i386_groupC0_8, &i386_device::i386_groupC0_8, false}, + { 0xC1, OP_I386, &i386_device::i386_groupC1_16, &i386_device::i386_groupC1_32, false}, + { 0xC2, OP_I386, &i386_device::i386_ret_near16_i16, &i386_device::i386_ret_near32_i16, false}, + { 0xC3, OP_I386, &i386_device::i386_ret_near16, &i386_device::i386_ret_near32, false}, + { 0xC4, OP_I386, &i386_device::i386_les16, &i386_device::i386_les32, false}, + { 0xC5, OP_I386, &i386_device::i386_lds16, &i386_device::i386_lds32, false}, + { 0xC6, OP_I386, &i386_device::i386_mov_rm8_i8, &i386_device::i386_mov_rm8_i8, false}, + { 0xC7, OP_I386, &i386_device::i386_mov_rm16_i16, &i386_device::i386_mov_rm32_i32, false}, + { 0xC8, OP_I386, &i386_device::i386_enter16, &i386_device::i386_enter32, false}, + { 0xC9, OP_I386, &i386_device::i386_leave16, &i386_device::i386_leave32, false}, + { 0xCA, OP_I386, &i386_device::i386_retf_i16, &i386_device::i386_retf_i32, false}, + { 0xCB, OP_I386, &i386_device::i386_retf16, &i386_device::i386_retf32, false}, + { 0xCC, OP_I386, &i386_device::i386_int3, &i386_device::i386_int3, false}, + { 0xCD, OP_I386, &i386_device::i386_int, &i386_device::i386_int, false}, + { 0xCE, OP_I386, &i386_device::i386_into, &i386_device::i386_into, false}, + { 0xCF, OP_I386, &i386_device::i386_iret16, &i386_device::i386_iret32, false}, + { 0xD0, OP_I386, &i386_device::i386_groupD0_8, &i386_device::i386_groupD0_8, false}, + { 0xD1, OP_I386, &i386_device::i386_groupD1_16, &i386_device::i386_groupD1_32, false}, + { 0xD2, OP_I386, &i386_device::i386_groupD2_8, &i386_device::i386_groupD2_8, false}, + { 0xD3, OP_I386, &i386_device::i386_groupD3_16, &i386_device::i386_groupD3_32, false}, + { 0xD4, OP_I386, &i386_device::i386_aam, &i386_device::i386_aam, false}, + { 0xD5, OP_I386, &i386_device::i386_aad, &i386_device::i386_aad, false}, + { 0xD6, OP_I386, &i386_device::i386_setalc, &i386_device::i386_setalc, false}, + { 0xD7, OP_I386, &i386_device::i386_xlat, &i386_device::i386_xlat, false}, + { 0xD8, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xD9, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDA, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDB, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDC, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDD, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDE, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDF, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xD8, OP_FPU, &i386_device::i386_x87_group_d8, &i386_device::i386_x87_group_d8, false}, + { 0xD9, OP_FPU, &i386_device::i386_x87_group_d9, &i386_device::i386_x87_group_d9, false}, + { 0xDA, OP_FPU, &i386_device::i386_x87_group_da, &i386_device::i386_x87_group_da, false}, + { 0xDB, OP_FPU, &i386_device::i386_x87_group_db, &i386_device::i386_x87_group_db, false}, + { 0xDC, OP_FPU, &i386_device::i386_x87_group_dc, &i386_device::i386_x87_group_dc, false}, + { 0xDD, OP_FPU, &i386_device::i386_x87_group_dd, &i386_device::i386_x87_group_dd, false}, + { 0xDE, OP_FPU, &i386_device::i386_x87_group_de, &i386_device::i386_x87_group_de, false}, + { 0xDF, OP_FPU, &i386_device::i386_x87_group_df, &i386_device::i386_x87_group_df, false}, + { 0xE0, OP_I386, &i386_device::i386_loopne16, &i386_device::i386_loopne32, false}, + { 0xE1, OP_I386, &i386_device::i386_loopz16, &i386_device::i386_loopz32, false}, + { 0xE2, OP_I386, &i386_device::i386_loop16, &i386_device::i386_loop32, false}, + { 0xE3, OP_I386, &i386_device::i386_jcxz16, &i386_device::i386_jcxz32, false}, + { 0xE4, OP_I386, &i386_device::i386_in_al_i8, &i386_device::i386_in_al_i8, false}, + { 0xE5, OP_I386, &i386_device::i386_in_ax_i8, &i386_device::i386_in_eax_i8, false}, + { 0xE6, OP_I386, &i386_device::i386_out_al_i8, &i386_device::i386_out_al_i8, false}, + { 0xE7, OP_I386, &i386_device::i386_out_ax_i8, &i386_device::i386_out_eax_i8, false}, + { 0xE8, OP_I386, &i386_device::i386_call_rel16, &i386_device::i386_call_rel32, false}, + { 0xE9, OP_I386, &i386_device::i386_jmp_rel16, &i386_device::i386_jmp_rel32, false}, + { 0xEA, OP_I386, &i386_device::i386_jmp_abs16, &i386_device::i386_jmp_abs32, false}, + { 0xEB, OP_I386, &i386_device::i386_jmp_rel8, &i386_device::i386_jmp_rel8, false}, + { 0xEC, OP_I386, &i386_device::i386_in_al_dx, &i386_device::i386_in_al_dx, false}, + { 0xED, OP_I386, &i386_device::i386_in_ax_dx, &i386_device::i386_in_eax_dx, false}, + { 0xEE, OP_I386, &i386_device::i386_out_al_dx, &i386_device::i386_out_al_dx, false}, + { 0xEF, OP_I386, &i386_device::i386_out_ax_dx, &i386_device::i386_out_eax_dx, false}, + { 0xF0, OP_I386, &i386_device::i386_lock, &i386_device::i386_lock, false}, + { 0xF1, OP_I386, &i386_device::i386_invalid, &i386_device::i386_invalid, false}, + { 0xF2, OP_I386, &i386_device::i386_repne, &i386_device::i386_repne, false}, + { 0xF3, OP_I386, &i386_device::i386_rep, &i386_device::i386_rep, false}, + { 0xF4, OP_I386, &i386_device::i386_hlt, &i386_device::i386_hlt, false}, + { 0xF5, OP_I386, &i386_device::i386_cmc, &i386_device::i386_cmc, false}, + { 0xF6, OP_I386, &i386_device::i386_groupF6_8, &i386_device::i386_groupF6_8, true }, + { 0xF7, OP_I386, &i386_device::i386_groupF7_16, &i386_device::i386_groupF7_32, true }, + { 0xF8, OP_I386, &i386_device::i386_clc, &i386_device::i386_clc, false}, + { 0xF9, OP_I386, &i386_device::i386_stc, &i386_device::i386_stc, false}, + { 0xFA, OP_I386, &i386_device::i386_cli, &i386_device::i386_cli, false}, + { 0xFB, OP_I386, &i386_device::i386_sti, &i386_device::i386_sti, false}, + { 0xFC, OP_I386, &i386_device::i386_cld, &i386_device::i386_cld, false}, + { 0xFD, OP_I386, &i386_device::i386_std, &i386_device::i386_std, false}, + { 0xFE, OP_I386, &i386_device::i386_groupFE_8, &i386_device::i386_groupFE_8, true }, + { 0xFF, OP_I386, &i386_device::i386_groupFF_16, &i386_device::i386_groupFF_32, true }, /* 0F ?? */ - { 0x00, OP_2BYTE|OP_I386, &i386_device::i386_group0F00_16, &i386_device::i386_group0F00_32, }, - { 0x01, OP_2BYTE|OP_I386, &i386_device::i386_group0F01_16, &i386_device::i386_group0F01_32, }, - { 0x01, OP_2BYTE|OP_I486, &i386_device::i486_group0F01_16, &i386_device::i486_group0F01_32, }, - { 0x02, OP_2BYTE|OP_I386, &i386_device::i386_lar_r16_rm16, &i386_device::i386_lar_r32_rm32, }, - { 0x03, OP_2BYTE|OP_I386, &i386_device::i386_lsl_r16_rm16, &i386_device::i386_lsl_r32_rm32, }, - { 0x06, OP_2BYTE|OP_I386, &i386_device::i386_clts, &i386_device::i386_clts, }, - { 0x07, OP_2BYTE|OP_I386, &i386_device::i386_loadall, &i386_device::i386_loadall, }, - { 0x08, OP_2BYTE|OP_I486, &i386_device::i486_invd, &i386_device::i486_invd, }, - { 0x09, OP_2BYTE|OP_I486, &i386_device::i486_wbinvd, &i386_device::i486_wbinvd, }, - { 0x0B, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_ud2, &i386_device::pentium_ud2, }, - { 0x10, OP_2BYTE|OP_SSE, &i386_device::sse_movups_r128_rm128, &i386_device::sse_movups_r128_rm128, }, - { 0x11, OP_2BYTE|OP_SSE, &i386_device::sse_movups_rm128_r128, &i386_device::sse_movups_rm128_r128, }, - { 0x12, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_r128_m64, &i386_device::sse_movlps_r128_m64, }, - { 0x13, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_m64_r128, &i386_device::sse_movlps_m64_r128, }, - { 0x14, OP_2BYTE|OP_SSE, &i386_device::sse_unpcklps_r128_rm128, &i386_device::sse_unpcklps_r128_rm128, }, - { 0x15, OP_2BYTE|OP_SSE, &i386_device::sse_unpckhps_r128_rm128, &i386_device::sse_unpckhps_r128_rm128, }, - { 0x16, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_r128_m64, &i386_device::sse_movhps_r128_m64, }, - { 0x17, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_m64_r128, &i386_device::sse_movhps_m64_r128, }, - { 0x18, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_prefetch_m8, &i386_device::pentium_prefetch_m8, }, - { 0x20, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_cr, &i386_device::i386_mov_r32_cr, }, - { 0x21, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_dr, &i386_device::i386_mov_r32_dr, }, - { 0x22, OP_2BYTE|OP_I386, &i386_device::i386_mov_cr_r32, &i386_device::i386_mov_cr_r32, }, - { 0x22, OP_2BYTE|OP_I486, &i386_device::i486_mov_cr_r32, &i386_device::i486_mov_cr_r32, }, - { 0x23, OP_2BYTE|OP_I386, &i386_device::i386_mov_dr_r32, &i386_device::i386_mov_dr_r32, }, - { 0x24, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_tr, &i386_device::i386_mov_r32_tr, }, - { 0x26, OP_2BYTE|OP_I386, &i386_device::i386_mov_tr_r32, &i386_device::i386_mov_tr_r32, }, - { 0x28, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_r128_rm128, &i386_device::sse_movaps_r128_rm128, }, - { 0x29, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_rm128_r128, &i386_device::sse_movaps_rm128_r128, }, - { 0x2a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtpi2ps_r128_rm64, &i386_device::sse_cvtpi2ps_r128_rm64, }, - { 0x2b, OP_2BYTE|OP_SSE, &i386_device::sse_movntps_m128_r128, &i386_device::sse_movntps_m128_r128, }, - { 0x2c, OP_2BYTE|OP_SSE, &i386_device::sse_cvttps2pi_r64_r128m64, &i386_device::sse_cvttps2pi_r64_r128m64,}, - { 0x2d, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pi_r64_r128m64, &i386_device::sse_cvtps2pi_r64_r128m64,}, - { 0x2e, OP_2BYTE|OP_SSE, &i386_device::sse_ucomiss_r128_r128m32, &i386_device::sse_ucomiss_r128_r128m32,}, - { 0x2f, OP_2BYTE|OP_SSE, &i386_device::sse_comiss_r128_r128m32, &i386_device::sse_comiss_r128_r128m32, }, - { 0x30, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_wrmsr, &i386_device::pentium_wrmsr, }, - { 0x31, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdtsc, &i386_device::pentium_rdtsc, }, - { 0x32, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdmsr, &i386_device::pentium_rdmsr, }, - { 0x40, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovo_r16_rm16, &i386_device::pentium_cmovo_r32_rm32, }, - { 0x41, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovno_r16_rm16, &i386_device::pentium_cmovno_r32_rm32, }, - { 0x42, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovb_r16_rm16, &i386_device::pentium_cmovb_r32_rm32, }, - { 0x43, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovae_r16_rm16, &i386_device::pentium_cmovae_r32_rm32, }, - { 0x44, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmove_r16_rm16, &i386_device::pentium_cmove_r32_rm32, }, - { 0x45, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovne_r16_rm16, &i386_device::pentium_cmovne_r32_rm32, }, - { 0x46, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovbe_r16_rm16, &i386_device::pentium_cmovbe_r32_rm32, }, - { 0x47, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmova_r16_rm16, &i386_device::pentium_cmova_r32_rm32, }, - { 0x48, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovs_r16_rm16, &i386_device::pentium_cmovs_r32_rm32, }, - { 0x49, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovns_r16_rm16, &i386_device::pentium_cmovns_r32_rm32, }, - { 0x4a, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovp_r16_rm16, &i386_device::pentium_cmovp_r32_rm32, }, - { 0x4b, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovnp_r16_rm16, &i386_device::pentium_cmovnp_r32_rm32, }, - { 0x4c, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovl_r16_rm16, &i386_device::pentium_cmovl_r32_rm32, }, - { 0x4d, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovge_r16_rm16, &i386_device::pentium_cmovge_r32_rm32, }, - { 0x4e, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovle_r16_rm16, &i386_device::pentium_cmovle_r32_rm32, }, - { 0x4f, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovg_r16_rm16, &i386_device::pentium_cmovg_r32_rm32, }, - { 0x50, OP_2BYTE|OP_SSE, &i386_device::sse_movmskps_r16_r128, &i386_device::sse_movmskps_r32_r128, }, - { 0x51, OP_2BYTE|OP_SSE, &i386_device::sse_sqrtps_r128_rm128, &i386_device::sse_sqrtps_r128_rm128, }, - { 0x52, OP_2BYTE|OP_SSE, &i386_device::sse_rsqrtps_r128_rm128, &i386_device::sse_rsqrtps_r128_rm128, }, - { 0x53, OP_2BYTE|OP_SSE, &i386_device::sse_rcpps_r128_rm128, &i386_device::sse_rcpps_r128_rm128, }, - { 0x54, OP_2BYTE|OP_SSE, &i386_device::sse_andps_r128_rm128, &i386_device::sse_andps_r128_rm128, }, - { 0x55, OP_2BYTE|OP_SSE, &i386_device::sse_andnps_r128_rm128, &i386_device::sse_andnps_r128_rm128, }, - { 0x56, OP_2BYTE|OP_SSE, &i386_device::sse_orps_r128_rm128, &i386_device::sse_orps_r128_rm128, }, - { 0x57, OP_2BYTE|OP_SSE, &i386_device::sse_xorps, &i386_device::sse_xorps, }, - { 0x58, OP_2BYTE|OP_SSE, &i386_device::sse_addps, &i386_device::sse_addps, }, - { 0x59, OP_2BYTE|OP_SSE, &i386_device::sse_mulps, &i386_device::sse_mulps, }, - { 0x5a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pd_r128_r128m64, &i386_device::sse_cvtps2pd_r128_r128m64,}, - { 0x5b, OP_2BYTE|OP_SSE, &i386_device::sse_cvtdq2ps_r128_rm128, &i386_device::sse_cvtdq2ps_r128_rm128, }, - { 0x5c, OP_2BYTE|OP_SSE, &i386_device::sse_subps, &i386_device::sse_subps, }, - { 0x5d, OP_2BYTE|OP_SSE, &i386_device::sse_minps, &i386_device::sse_minps, }, - { 0x5e, OP_2BYTE|OP_SSE, &i386_device::sse_divps, &i386_device::sse_divps, }, - { 0x5f, OP_2BYTE|OP_SSE, &i386_device::sse_maxps, &i386_device::sse_maxps, }, - { 0x60, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklbw_r64_r64m32, &i386_device::mmx_punpcklbw_r64_r64m32,}, - { 0x61, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklwd_r64_r64m32, &i386_device::mmx_punpcklwd_r64_r64m32,}, - { 0x62, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckldq_r64_r64m32, &i386_device::mmx_punpckldq_r64_r64m32,}, - { 0x63, OP_2BYTE|OP_MMX, &i386_device::mmx_packsswb_r64_rm64, &i386_device::mmx_packsswb_r64_rm64, }, - { 0x64, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtb_r64_rm64, &i386_device::mmx_pcmpgtb_r64_rm64, }, - { 0x65, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtw_r64_rm64, &i386_device::mmx_pcmpgtw_r64_rm64, }, - { 0x66, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtd_r64_rm64, &i386_device::mmx_pcmpgtd_r64_rm64, }, - { 0x67, OP_2BYTE|OP_MMX, &i386_device::mmx_packuswb_r64_rm64, &i386_device::mmx_packuswb_r64_rm64, }, - { 0x68, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhbw_r64_rm64, &i386_device::mmx_punpckhbw_r64_rm64, }, - { 0x69, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhwd_r64_rm64, &i386_device::mmx_punpckhwd_r64_rm64, }, - { 0x6a, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhdq_r64_rm64, &i386_device::mmx_punpckhdq_r64_rm64, }, - { 0x6b, OP_2BYTE|OP_MMX, &i386_device::mmx_packssdw_r64_rm64, &i386_device::mmx_packssdw_r64_rm64, }, - { 0x6e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_r64_rm32, &i386_device::mmx_movd_r64_rm32, }, - { 0x6f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_r64_rm64, &i386_device::mmx_movq_r64_rm64, }, - { 0x70, OP_2BYTE|OP_MMX, &i386_device::mmx_pshufw_r64_rm64_i8, &i386_device::mmx_pshufw_r64_rm64_i8, }, - { 0x71, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f71, &i386_device::mmx_group_0f71, }, - { 0x72, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f72, &i386_device::mmx_group_0f72, }, - { 0x73, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f73, &i386_device::mmx_group_0f73, }, - { 0x74, OP_2BYTE|OP_CYRIX, &i386_device::i386_cyrix_unknown, &i386_device::i386_cyrix_unknown, }, - { 0x74, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqb_r64_rm64, &i386_device::mmx_pcmpeqb_r64_rm64, }, - { 0x75, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqw_r64_rm64, &i386_device::mmx_pcmpeqw_r64_rm64, }, - { 0x76, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqd_r64_rm64, &i386_device::mmx_pcmpeqd_r64_rm64, }, - { 0x77, OP_2BYTE|OP_MMX, &i386_device::mmx_emms, &i386_device::mmx_emms, }, - { 0x7e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_rm32_r64, &i386_device::mmx_movd_rm32_r64, }, - { 0x7f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_rm64_r64, &i386_device::mmx_movq_rm64_r64, }, - { 0x80, OP_2BYTE|OP_I386, &i386_device::i386_jo_rel16, &i386_device::i386_jo_rel32, }, - { 0x81, OP_2BYTE|OP_I386, &i386_device::i386_jno_rel16, &i386_device::i386_jno_rel32, }, - { 0x82, OP_2BYTE|OP_I386, &i386_device::i386_jc_rel16, &i386_device::i386_jc_rel32, }, - { 0x83, OP_2BYTE|OP_I386, &i386_device::i386_jnc_rel16, &i386_device::i386_jnc_rel32, }, - { 0x84, OP_2BYTE|OP_I386, &i386_device::i386_jz_rel16, &i386_device::i386_jz_rel32, }, - { 0x85, OP_2BYTE|OP_I386, &i386_device::i386_jnz_rel16, &i386_device::i386_jnz_rel32, }, - { 0x86, OP_2BYTE|OP_I386, &i386_device::i386_jbe_rel16, &i386_device::i386_jbe_rel32, }, - { 0x87, OP_2BYTE|OP_I386, &i386_device::i386_ja_rel16, &i386_device::i386_ja_rel32, }, - { 0x88, OP_2BYTE|OP_I386, &i386_device::i386_js_rel16, &i386_device::i386_js_rel32, }, - { 0x89, OP_2BYTE|OP_I386, &i386_device::i386_jns_rel16, &i386_device::i386_jns_rel32, }, - { 0x8A, OP_2BYTE|OP_I386, &i386_device::i386_jp_rel16, &i386_device::i386_jp_rel32, }, - { 0x8B, OP_2BYTE|OP_I386, &i386_device::i386_jnp_rel16, &i386_device::i386_jnp_rel32, }, - { 0x8C, OP_2BYTE|OP_I386, &i386_device::i386_jl_rel16, &i386_device::i386_jl_rel32, }, - { 0x8D, OP_2BYTE|OP_I386, &i386_device::i386_jge_rel16, &i386_device::i386_jge_rel32, }, - { 0x8E, OP_2BYTE|OP_I386, &i386_device::i386_jle_rel16, &i386_device::i386_jle_rel32, }, - { 0x8F, OP_2BYTE|OP_I386, &i386_device::i386_jg_rel16, &i386_device::i386_jg_rel32, }, - { 0x90, OP_2BYTE|OP_I386, &i386_device::i386_seto_rm8, &i386_device::i386_seto_rm8, }, - { 0x91, OP_2BYTE|OP_I386, &i386_device::i386_setno_rm8, &i386_device::i386_setno_rm8, }, - { 0x92, OP_2BYTE|OP_I386, &i386_device::i386_setc_rm8, &i386_device::i386_setc_rm8, }, - { 0x93, OP_2BYTE|OP_I386, &i386_device::i386_setnc_rm8, &i386_device::i386_setnc_rm8, }, - { 0x94, OP_2BYTE|OP_I386, &i386_device::i386_setz_rm8, &i386_device::i386_setz_rm8, }, - { 0x95, OP_2BYTE|OP_I386, &i386_device::i386_setnz_rm8, &i386_device::i386_setnz_rm8, }, - { 0x96, OP_2BYTE|OP_I386, &i386_device::i386_setbe_rm8, &i386_device::i386_setbe_rm8, }, - { 0x97, OP_2BYTE|OP_I386, &i386_device::i386_seta_rm8, &i386_device::i386_seta_rm8, }, - { 0x98, OP_2BYTE|OP_I386, &i386_device::i386_sets_rm8, &i386_device::i386_sets_rm8, }, - { 0x99, OP_2BYTE|OP_I386, &i386_device::i386_setns_rm8, &i386_device::i386_setns_rm8, }, - { 0x9A, OP_2BYTE|OP_I386, &i386_device::i386_setp_rm8, &i386_device::i386_setp_rm8, }, - { 0x9B, OP_2BYTE|OP_I386, &i386_device::i386_setnp_rm8, &i386_device::i386_setnp_rm8, }, - { 0x9C, OP_2BYTE|OP_I386, &i386_device::i386_setl_rm8, &i386_device::i386_setl_rm8, }, - { 0x9D, OP_2BYTE|OP_I386, &i386_device::i386_setge_rm8, &i386_device::i386_setge_rm8, }, - { 0x9E, OP_2BYTE|OP_I386, &i386_device::i386_setle_rm8, &i386_device::i386_setle_rm8, }, - { 0x9F, OP_2BYTE|OP_I386, &i386_device::i386_setg_rm8, &i386_device::i386_setg_rm8, }, - { 0xA0, OP_2BYTE|OP_I386, &i386_device::i386_push_fs16, &i386_device::i386_push_fs32, }, - { 0xA1, OP_2BYTE|OP_I386, &i386_device::i386_pop_fs16, &i386_device::i386_pop_fs32, }, - { 0xA2, OP_2BYTE|OP_I486, &i386_device::i486_cpuid, &i386_device::i486_cpuid, }, - { 0xA3, OP_2BYTE|OP_I386, &i386_device::i386_bt_rm16_r16, &i386_device::i386_bt_rm32_r32, }, - { 0xA4, OP_2BYTE|OP_I386, &i386_device::i386_shld16_i8, &i386_device::i386_shld32_i8, }, - { 0xA5, OP_2BYTE|OP_I386, &i386_device::i386_shld16_cl, &i386_device::i386_shld32_cl, }, - { 0xA8, OP_2BYTE|OP_I386, &i386_device::i386_push_gs16, &i386_device::i386_push_gs32, }, - { 0xA9, OP_2BYTE|OP_I386, &i386_device::i386_pop_gs16, &i386_device::i386_pop_gs32, }, - { 0xAA, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rsm, &i386_device::pentium_rsm, }, - { 0xAB, OP_2BYTE|OP_I386, &i386_device::i386_bts_rm16_r16, &i386_device::i386_bts_rm32_r32, }, - { 0xAC, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_i8, &i386_device::i386_shrd32_i8, }, - { 0xAD, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_cl, &i386_device::i386_shrd32_cl, }, - { 0xAE, OP_2BYTE|OP_SSE, &i386_device::sse_sse_group0fae, &i386_device::sse_sse_group0fae, }, - { 0xAF, OP_2BYTE|OP_I386, &i386_device::i386_imul_r16_rm16, &i386_device::i386_imul_r32_rm32, }, - { 0xB0, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm8_r8, &i386_device::i486_cmpxchg_rm8_r8, }, - { 0xB1, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm16_r16, &i386_device::i486_cmpxchg_rm32_r32, }, - { 0xB2, OP_2BYTE|OP_I386, &i386_device::i386_lss16, &i386_device::i386_lss32, }, - { 0xB3, OP_2BYTE|OP_I386, &i386_device::i386_btr_rm16_r16, &i386_device::i386_btr_rm32_r32, }, - { 0xB4, OP_2BYTE|OP_I386, &i386_device::i386_lfs16, &i386_device::i386_lfs32, }, - { 0xB5, OP_2BYTE|OP_I386, &i386_device::i386_lgs16, &i386_device::i386_lgs32, }, - { 0xB6, OP_2BYTE|OP_I386, &i386_device::i386_movzx_r16_rm8, &i386_device::i386_movzx_r32_rm8, }, - { 0xB7, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movzx_r32_rm16, }, - { 0xBA, OP_2BYTE|OP_I386, &i386_device::i386_group0FBA_16, &i386_device::i386_group0FBA_32, }, - { 0xBB, OP_2BYTE|OP_I386, &i386_device::i386_btc_rm16_r16, &i386_device::i386_btc_rm32_r32, }, - { 0xBC, OP_2BYTE|OP_I386, &i386_device::i386_bsf_r16_rm16, &i386_device::i386_bsf_r32_rm32, }, - { 0xBD, OP_2BYTE|OP_I386, &i386_device::i386_bsr_r16_rm16, &i386_device::i386_bsr_r32_rm32, }, - { 0xBE, OP_2BYTE|OP_I386, &i386_device::i386_movsx_r16_rm8, &i386_device::i386_movsx_r32_rm8, }, - { 0xBF, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movsx_r32_rm16, }, - { 0xC0, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm8_r8, &i386_device::i486_xadd_rm8_r8, }, - { 0xC1, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm16_r16, &i386_device::i486_xadd_rm32_r32, }, - { 0xC2, OP_2BYTE|OP_SSE, &i386_device::sse_cmpps_r128_rm128_i8, &i386_device::sse_cmpps_r128_rm128_i8, }, - { 0xC3, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movnti_m16_r16, &i386_device::pentium_movnti_m32_r32, }, - { 0xC4, OP_2BYTE|OP_SSE, &i386_device::sse_pinsrw_r64_r16m16_i8, &i386_device::sse_pinsrw_r64_r32m16_i8,}, - { 0xC5, OP_2BYTE|OP_SSE, &i386_device::sse_pextrw_r16_r64_i8, &i386_device::sse_pextrw_r32_r64_i8, }, - { 0xC6, OP_2BYTE|OP_SSE, &i386_device::sse_shufps, &i386_device::sse_shufps, }, - { 0xC7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmpxchg8b_m64, &i386_device::pentium_cmpxchg8b_m64, }, - { 0xC8, OP_2BYTE|OP_I486, &i386_device::i486_bswap_eax, &i386_device::i486_bswap_eax, }, - { 0xC9, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ecx, &i386_device::i486_bswap_ecx, }, - { 0xCA, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edx, &i386_device::i486_bswap_edx, }, - { 0xCB, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebx, &i386_device::i486_bswap_ebx, }, - { 0xCC, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esp, &i386_device::i486_bswap_esp, }, - { 0xCD, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebp, &i386_device::i486_bswap_ebp, }, - { 0xCE, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esi, &i386_device::i486_bswap_esi, }, - { 0xCF, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edi, &i386_device::i486_bswap_edi, }, - { 0xD1, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlw_r64_rm64, &i386_device::mmx_psrlw_r64_rm64, }, - { 0xD2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrld_r64_rm64, &i386_device::mmx_psrld_r64_rm64, }, - { 0xD3, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlq_r64_rm64, &i386_device::mmx_psrlq_r64_rm64, }, - { 0xD4, OP_2BYTE|OP_MMX, &i386_device::mmx_paddq_r64_rm64, &i386_device::mmx_paddq_r64_rm64, }, - { 0xD5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmullw_r64_rm64, &i386_device::mmx_pmullw_r64_rm64, }, - { 0xD7, OP_2BYTE|OP_SSE, &i386_device::sse_pmovmskb_r16_r64, &i386_device::sse_pmovmskb_r32_r64, }, - { 0xD8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusb_r64_rm64, &i386_device::mmx_psubusb_r64_rm64, }, - { 0xD9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusw_r64_rm64, &i386_device::mmx_psubusw_r64_rm64, }, - { 0xDA, OP_2BYTE|OP_SSE, &i386_device::sse_pminub_r64_rm64, &i386_device::sse_pminub_r64_rm64, }, - { 0xDB, OP_2BYTE|OP_MMX, &i386_device::mmx_pand_r64_rm64, &i386_device::mmx_pand_r64_rm64, }, - { 0xDC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusb_r64_rm64, &i386_device::mmx_paddusb_r64_rm64, }, - { 0xDD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusw_r64_rm64, &i386_device::mmx_paddusw_r64_rm64, }, - { 0xDE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxub_r64_rm64, &i386_device::sse_pmaxub_r64_rm64, }, - { 0xDF, OP_2BYTE|OP_MMX, &i386_device::mmx_pandn_r64_rm64, &i386_device::mmx_pandn_r64_rm64, }, - { 0xE0, OP_2BYTE|OP_SSE, &i386_device::sse_pavgb_r64_rm64, &i386_device::sse_pavgb_r64_rm64, }, - { 0xE1, OP_2BYTE|OP_MMX, &i386_device::mmx_psraw_r64_rm64, &i386_device::mmx_psraw_r64_rm64, }, - { 0xE2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrad_r64_rm64, &i386_device::mmx_psrad_r64_rm64, }, - { 0xE3, OP_2BYTE|OP_SSE, &i386_device::sse_pavgw_r64_rm64, &i386_device::sse_pavgw_r64_rm64, }, - { 0xE4, OP_2BYTE|OP_SSE, &i386_device::sse_pmulhuw_r64_rm64, &i386_device::sse_pmulhuw_r64_rm64, }, - { 0xE5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmulhw_r64_rm64, &i386_device::mmx_pmulhw_r64_rm64, }, - { 0xE7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movntq_m64_r64, &i386_device::pentium_movntq_m64_r64, }, - { 0xE8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsb_r64_rm64, &i386_device::mmx_psubsb_r64_rm64, }, - { 0xE9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsw_r64_rm64, &i386_device::mmx_psubsw_r64_rm64, }, - { 0xEA, OP_2BYTE|OP_SSE, &i386_device::sse_pminsw_r64_rm64, &i386_device::sse_pminsw_r64_rm64, }, - { 0xEB, OP_2BYTE|OP_MMX, &i386_device::mmx_por_r64_rm64, &i386_device::mmx_por_r64_rm64, }, - { 0xEC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsb_r64_rm64, &i386_device::mmx_paddsb_r64_rm64, }, - { 0xED, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsw_r64_rm64, &i386_device::mmx_paddsw_r64_rm64, }, - { 0xEE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxsw_r64_rm64, &i386_device::sse_pmaxsw_r64_rm64, }, - { 0xEF, OP_2BYTE|OP_MMX, &i386_device::mmx_pxor_r64_rm64, &i386_device::mmx_pxor_r64_rm64, }, - { 0xF1, OP_2BYTE|OP_MMX, &i386_device::mmx_psllw_r64_rm64, &i386_device::mmx_psllw_r64_rm64, }, - { 0xF2, OP_2BYTE|OP_MMX, &i386_device::mmx_pslld_r64_rm64, &i386_device::mmx_pslld_r64_rm64, }, - { 0xF3, OP_2BYTE|OP_MMX, &i386_device::mmx_psllq_r64_rm64, &i386_device::mmx_psllq_r64_rm64, }, - { 0xF4, OP_2BYTE|OP_SSE, &i386_device::sse_pmuludq_r64_rm64, &i386_device::sse_pmuludq_r64_rm64, }, - { 0xF5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmaddwd_r64_rm64, &i386_device::mmx_pmaddwd_r64_rm64, }, - { 0xF6, OP_2BYTE|OP_SSE, &i386_device::sse_psadbw_r64_rm64, &i386_device::sse_psadbw_r64_rm64, }, - { 0xf7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_maskmovq_r64_r64, &i386_device::pentium_maskmovq_r64_r64,}, - { 0xF8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubb_r64_rm64, &i386_device::mmx_psubb_r64_rm64, }, - { 0xF9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubw_r64_rm64, &i386_device::mmx_psubw_r64_rm64, }, - { 0xFA, OP_2BYTE|OP_MMX, &i386_device::mmx_psubd_r64_rm64, &i386_device::mmx_psubd_r64_rm64, }, - { 0xFB, OP_2BYTE|OP_SSE, &i386_device::sse_psubq_r64_rm64, &i386_device::sse_psubq_r64_rm64, }, - { 0xFC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddb_r64_rm64, &i386_device::mmx_paddb_r64_rm64, }, - { 0xFD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddw_r64_rm64, &i386_device::mmx_paddw_r64_rm64, }, - { 0xFE, OP_2BYTE|OP_MMX, &i386_device::mmx_paddd_r64_rm64, &i386_device::mmx_paddd_r64_rm64, }, + { 0x00, OP_2BYTE|OP_I386, &i386_device::i386_group0F00_16, &i386_device::i386_group0F00_32, false}, + { 0x01, OP_2BYTE|OP_I386, &i386_device::i386_group0F01_16, &i386_device::i386_group0F01_32, false}, + { 0x01, OP_2BYTE|OP_I486, &i386_device::i486_group0F01_16, &i386_device::i486_group0F01_32, false}, + { 0x02, OP_2BYTE|OP_I386, &i386_device::i386_lar_r16_rm16, &i386_device::i386_lar_r32_rm32, false}, + { 0x03, OP_2BYTE|OP_I386, &i386_device::i386_lsl_r16_rm16, &i386_device::i386_lsl_r32_rm32, false}, + { 0x06, OP_2BYTE|OP_I386, &i386_device::i386_clts, &i386_device::i386_clts, false}, + { 0x07, OP_2BYTE|OP_I386, &i386_device::i386_loadall, &i386_device::i386_loadall, false}, + { 0x08, OP_2BYTE|OP_I486, &i386_device::i486_invd, &i386_device::i486_invd, false}, + { 0x09, OP_2BYTE|OP_I486, &i386_device::i486_wbinvd, &i386_device::i486_wbinvd, false}, + { 0x0B, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_ud2, &i386_device::pentium_ud2, false}, + { 0x10, OP_2BYTE|OP_SSE, &i386_device::sse_movups_r128_rm128, &i386_device::sse_movups_r128_rm128, false}, + { 0x11, OP_2BYTE|OP_SSE, &i386_device::sse_movups_rm128_r128, &i386_device::sse_movups_rm128_r128, false}, + { 0x12, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_r128_m64, &i386_device::sse_movlps_r128_m64, false}, + { 0x13, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_m64_r128, &i386_device::sse_movlps_m64_r128, false}, + { 0x14, OP_2BYTE|OP_SSE, &i386_device::sse_unpcklps_r128_rm128, &i386_device::sse_unpcklps_r128_rm128, false}, + { 0x15, OP_2BYTE|OP_SSE, &i386_device::sse_unpckhps_r128_rm128, &i386_device::sse_unpckhps_r128_rm128, false}, + { 0x16, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_r128_m64, &i386_device::sse_movhps_r128_m64, false}, + { 0x17, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_m64_r128, &i386_device::sse_movhps_m64_r128, false}, + { 0x18, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_prefetch_m8, &i386_device::pentium_prefetch_m8, false}, + { 0x20, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_cr, &i386_device::i386_mov_r32_cr, false}, + { 0x21, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_dr, &i386_device::i386_mov_r32_dr, false}, + { 0x22, OP_2BYTE|OP_I386, &i386_device::i386_mov_cr_r32, &i386_device::i386_mov_cr_r32, false}, + { 0x22, OP_2BYTE|OP_I486, &i386_device::i486_mov_cr_r32, &i386_device::i486_mov_cr_r32, false}, + { 0x23, OP_2BYTE|OP_I386, &i386_device::i386_mov_dr_r32, &i386_device::i386_mov_dr_r32, false}, + { 0x24, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_tr, &i386_device::i386_mov_r32_tr, false}, + { 0x26, OP_2BYTE|OP_I386, &i386_device::i386_mov_tr_r32, &i386_device::i386_mov_tr_r32, false}, + { 0x28, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_r128_rm128, &i386_device::sse_movaps_r128_rm128, false}, + { 0x29, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_rm128_r128, &i386_device::sse_movaps_rm128_r128, false}, + { 0x2a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtpi2ps_r128_rm64, &i386_device::sse_cvtpi2ps_r128_rm64, false}, + { 0x2b, OP_2BYTE|OP_SSE, &i386_device::sse_movntps_m128_r128, &i386_device::sse_movntps_m128_r128, false}, + { 0x2c, OP_2BYTE|OP_SSE, &i386_device::sse_cvttps2pi_r64_r128m64, &i386_device::sse_cvttps2pi_r64_r128m64,false}, + { 0x2d, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pi_r64_r128m64, &i386_device::sse_cvtps2pi_r64_r128m64,false}, + { 0x2e, OP_2BYTE|OP_SSE, &i386_device::sse_ucomiss_r128_r128m32, &i386_device::sse_ucomiss_r128_r128m32,false}, + { 0x2f, OP_2BYTE|OP_SSE, &i386_device::sse_comiss_r128_r128m32, &i386_device::sse_comiss_r128_r128m32, false}, + { 0x30, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_wrmsr, &i386_device::pentium_wrmsr, false}, + { 0x31, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdtsc, &i386_device::pentium_rdtsc, false}, + { 0x32, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdmsr, &i386_device::pentium_rdmsr, false}, + { 0x40, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovo_r16_rm16, &i386_device::pentium_cmovo_r32_rm32, false}, + { 0x41, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovno_r16_rm16, &i386_device::pentium_cmovno_r32_rm32, false}, + { 0x42, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovb_r16_rm16, &i386_device::pentium_cmovb_r32_rm32, false}, + { 0x43, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovae_r16_rm16, &i386_device::pentium_cmovae_r32_rm32, false}, + { 0x44, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmove_r16_rm16, &i386_device::pentium_cmove_r32_rm32, false}, + { 0x45, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovne_r16_rm16, &i386_device::pentium_cmovne_r32_rm32, false}, + { 0x46, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovbe_r16_rm16, &i386_device::pentium_cmovbe_r32_rm32, false}, + { 0x47, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmova_r16_rm16, &i386_device::pentium_cmova_r32_rm32, false}, + { 0x48, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovs_r16_rm16, &i386_device::pentium_cmovs_r32_rm32, false}, + { 0x49, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovns_r16_rm16, &i386_device::pentium_cmovns_r32_rm32, false}, + { 0x4a, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovp_r16_rm16, &i386_device::pentium_cmovp_r32_rm32, false}, + { 0x4b, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovnp_r16_rm16, &i386_device::pentium_cmovnp_r32_rm32, false}, + { 0x4c, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovl_r16_rm16, &i386_device::pentium_cmovl_r32_rm32, false}, + { 0x4d, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovge_r16_rm16, &i386_device::pentium_cmovge_r32_rm32, false}, + { 0x4e, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovle_r16_rm16, &i386_device::pentium_cmovle_r32_rm32, false}, + { 0x4f, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovg_r16_rm16, &i386_device::pentium_cmovg_r32_rm32, false}, + { 0x50, OP_2BYTE|OP_SSE, &i386_device::sse_movmskps_r16_r128, &i386_device::sse_movmskps_r32_r128, false}, + { 0x51, OP_2BYTE|OP_SSE, &i386_device::sse_sqrtps_r128_rm128, &i386_device::sse_sqrtps_r128_rm128, false}, + { 0x52, OP_2BYTE|OP_SSE, &i386_device::sse_rsqrtps_r128_rm128, &i386_device::sse_rsqrtps_r128_rm128, false}, + { 0x53, OP_2BYTE|OP_SSE, &i386_device::sse_rcpps_r128_rm128, &i386_device::sse_rcpps_r128_rm128, false}, + { 0x54, OP_2BYTE|OP_SSE, &i386_device::sse_andps_r128_rm128, &i386_device::sse_andps_r128_rm128, false}, + { 0x55, OP_2BYTE|OP_SSE, &i386_device::sse_andnps_r128_rm128, &i386_device::sse_andnps_r128_rm128, false}, + { 0x56, OP_2BYTE|OP_SSE, &i386_device::sse_orps_r128_rm128, &i386_device::sse_orps_r128_rm128, false}, + { 0x57, OP_2BYTE|OP_SSE, &i386_device::sse_xorps, &i386_device::sse_xorps, false}, + { 0x58, OP_2BYTE|OP_SSE, &i386_device::sse_addps, &i386_device::sse_addps, false}, + { 0x59, OP_2BYTE|OP_SSE, &i386_device::sse_mulps, &i386_device::sse_mulps, false}, + { 0x5a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pd_r128_r128m64, &i386_device::sse_cvtps2pd_r128_r128m64,false}, + { 0x5b, OP_2BYTE|OP_SSE, &i386_device::sse_cvtdq2ps_r128_rm128, &i386_device::sse_cvtdq2ps_r128_rm128, false}, + { 0x5c, OP_2BYTE|OP_SSE, &i386_device::sse_subps, &i386_device::sse_subps, false}, + { 0x5d, OP_2BYTE|OP_SSE, &i386_device::sse_minps, &i386_device::sse_minps, false}, + { 0x5e, OP_2BYTE|OP_SSE, &i386_device::sse_divps, &i386_device::sse_divps, false}, + { 0x5f, OP_2BYTE|OP_SSE, &i386_device::sse_maxps, &i386_device::sse_maxps, false}, + { 0x60, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklbw_r64_r64m32, &i386_device::mmx_punpcklbw_r64_r64m32,false}, + { 0x61, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklwd_r64_r64m32, &i386_device::mmx_punpcklwd_r64_r64m32,false}, + { 0x62, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckldq_r64_r64m32, &i386_device::mmx_punpckldq_r64_r64m32,false}, + { 0x63, OP_2BYTE|OP_MMX, &i386_device::mmx_packsswb_r64_rm64, &i386_device::mmx_packsswb_r64_rm64, false}, + { 0x64, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtb_r64_rm64, &i386_device::mmx_pcmpgtb_r64_rm64, false}, + { 0x65, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtw_r64_rm64, &i386_device::mmx_pcmpgtw_r64_rm64, false}, + { 0x66, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtd_r64_rm64, &i386_device::mmx_pcmpgtd_r64_rm64, false}, + { 0x67, OP_2BYTE|OP_MMX, &i386_device::mmx_packuswb_r64_rm64, &i386_device::mmx_packuswb_r64_rm64, false}, + { 0x68, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhbw_r64_rm64, &i386_device::mmx_punpckhbw_r64_rm64, false}, + { 0x69, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhwd_r64_rm64, &i386_device::mmx_punpckhwd_r64_rm64, false}, + { 0x6a, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhdq_r64_rm64, &i386_device::mmx_punpckhdq_r64_rm64, false}, + { 0x6b, OP_2BYTE|OP_MMX, &i386_device::mmx_packssdw_r64_rm64, &i386_device::mmx_packssdw_r64_rm64, false}, + { 0x6e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_r64_rm32, &i386_device::mmx_movd_r64_rm32, false}, + { 0x6f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_r64_rm64, &i386_device::mmx_movq_r64_rm64, false}, + { 0x70, OP_2BYTE|OP_MMX, &i386_device::mmx_pshufw_r64_rm64_i8, &i386_device::mmx_pshufw_r64_rm64_i8, false}, + { 0x71, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f71, &i386_device::mmx_group_0f71, false}, + { 0x72, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f72, &i386_device::mmx_group_0f72, false}, + { 0x73, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f73, &i386_device::mmx_group_0f73, false}, + { 0x74, OP_2BYTE|OP_CYRIX, &i386_device::i386_cyrix_unknown, &i386_device::i386_cyrix_unknown, false}, + { 0x74, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqb_r64_rm64, &i386_device::mmx_pcmpeqb_r64_rm64, false}, + { 0x75, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqw_r64_rm64, &i386_device::mmx_pcmpeqw_r64_rm64, false}, + { 0x76, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqd_r64_rm64, &i386_device::mmx_pcmpeqd_r64_rm64, false}, + { 0x77, OP_2BYTE|OP_MMX, &i386_device::mmx_emms, &i386_device::mmx_emms, false}, + { 0x7e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_rm32_r64, &i386_device::mmx_movd_rm32_r64, false}, + { 0x7f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_rm64_r64, &i386_device::mmx_movq_rm64_r64, false}, + { 0x80, OP_2BYTE|OP_I386, &i386_device::i386_jo_rel16, &i386_device::i386_jo_rel32, false}, + { 0x81, OP_2BYTE|OP_I386, &i386_device::i386_jno_rel16, &i386_device::i386_jno_rel32, false}, + { 0x82, OP_2BYTE|OP_I386, &i386_device::i386_jc_rel16, &i386_device::i386_jc_rel32, false}, + { 0x83, OP_2BYTE|OP_I386, &i386_device::i386_jnc_rel16, &i386_device::i386_jnc_rel32, false}, + { 0x84, OP_2BYTE|OP_I386, &i386_device::i386_jz_rel16, &i386_device::i386_jz_rel32, false}, + { 0x85, OP_2BYTE|OP_I386, &i386_device::i386_jnz_rel16, &i386_device::i386_jnz_rel32, false}, + { 0x86, OP_2BYTE|OP_I386, &i386_device::i386_jbe_rel16, &i386_device::i386_jbe_rel32, false}, + { 0x87, OP_2BYTE|OP_I386, &i386_device::i386_ja_rel16, &i386_device::i386_ja_rel32, false}, + { 0x88, OP_2BYTE|OP_I386, &i386_device::i386_js_rel16, &i386_device::i386_js_rel32, false}, + { 0x89, OP_2BYTE|OP_I386, &i386_device::i386_jns_rel16, &i386_device::i386_jns_rel32, false}, + { 0x8A, OP_2BYTE|OP_I386, &i386_device::i386_jp_rel16, &i386_device::i386_jp_rel32, false}, + { 0x8B, OP_2BYTE|OP_I386, &i386_device::i386_jnp_rel16, &i386_device::i386_jnp_rel32, false}, + { 0x8C, OP_2BYTE|OP_I386, &i386_device::i386_jl_rel16, &i386_device::i386_jl_rel32, false}, + { 0x8D, OP_2BYTE|OP_I386, &i386_device::i386_jge_rel16, &i386_device::i386_jge_rel32, false}, + { 0x8E, OP_2BYTE|OP_I386, &i386_device::i386_jle_rel16, &i386_device::i386_jle_rel32, false}, + { 0x8F, OP_2BYTE|OP_I386, &i386_device::i386_jg_rel16, &i386_device::i386_jg_rel32, false}, + { 0x90, OP_2BYTE|OP_I386, &i386_device::i386_seto_rm8, &i386_device::i386_seto_rm8, false}, + { 0x91, OP_2BYTE|OP_I386, &i386_device::i386_setno_rm8, &i386_device::i386_setno_rm8, false}, + { 0x92, OP_2BYTE|OP_I386, &i386_device::i386_setc_rm8, &i386_device::i386_setc_rm8, false}, + { 0x93, OP_2BYTE|OP_I386, &i386_device::i386_setnc_rm8, &i386_device::i386_setnc_rm8, false}, + { 0x94, OP_2BYTE|OP_I386, &i386_device::i386_setz_rm8, &i386_device::i386_setz_rm8, false}, + { 0x95, OP_2BYTE|OP_I386, &i386_device::i386_setnz_rm8, &i386_device::i386_setnz_rm8, false}, + { 0x96, OP_2BYTE|OP_I386, &i386_device::i386_setbe_rm8, &i386_device::i386_setbe_rm8, false}, + { 0x97, OP_2BYTE|OP_I386, &i386_device::i386_seta_rm8, &i386_device::i386_seta_rm8, false}, + { 0x98, OP_2BYTE|OP_I386, &i386_device::i386_sets_rm8, &i386_device::i386_sets_rm8, false}, + { 0x99, OP_2BYTE|OP_I386, &i386_device::i386_setns_rm8, &i386_device::i386_setns_rm8, false}, + { 0x9A, OP_2BYTE|OP_I386, &i386_device::i386_setp_rm8, &i386_device::i386_setp_rm8, false}, + { 0x9B, OP_2BYTE|OP_I386, &i386_device::i386_setnp_rm8, &i386_device::i386_setnp_rm8, false}, + { 0x9C, OP_2BYTE|OP_I386, &i386_device::i386_setl_rm8, &i386_device::i386_setl_rm8, false}, + { 0x9D, OP_2BYTE|OP_I386, &i386_device::i386_setge_rm8, &i386_device::i386_setge_rm8, false}, + { 0x9E, OP_2BYTE|OP_I386, &i386_device::i386_setle_rm8, &i386_device::i386_setle_rm8, false}, + { 0x9F, OP_2BYTE|OP_I386, &i386_device::i386_setg_rm8, &i386_device::i386_setg_rm8, false}, + { 0xA0, OP_2BYTE|OP_I386, &i386_device::i386_push_fs16, &i386_device::i386_push_fs32, false}, + { 0xA1, OP_2BYTE|OP_I386, &i386_device::i386_pop_fs16, &i386_device::i386_pop_fs32, false}, + { 0xA2, OP_2BYTE|OP_I486, &i386_device::i486_cpuid, &i386_device::i486_cpuid, false}, + { 0xA3, OP_2BYTE|OP_I386, &i386_device::i386_bt_rm16_r16, &i386_device::i386_bt_rm32_r32, false}, + { 0xA4, OP_2BYTE|OP_I386, &i386_device::i386_shld16_i8, &i386_device::i386_shld32_i8, false}, + { 0xA5, OP_2BYTE|OP_I386, &i386_device::i386_shld16_cl, &i386_device::i386_shld32_cl, false}, + { 0xA8, OP_2BYTE|OP_I386, &i386_device::i386_push_gs16, &i386_device::i386_push_gs32, false}, + { 0xA9, OP_2BYTE|OP_I386, &i386_device::i386_pop_gs16, &i386_device::i386_pop_gs32, false}, + { 0xAA, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rsm, &i386_device::pentium_rsm, false}, + { 0xAB, OP_2BYTE|OP_I386, &i386_device::i386_bts_rm16_r16, &i386_device::i386_bts_rm32_r32, true }, + { 0xAC, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_i8, &i386_device::i386_shrd32_i8, false}, + { 0xAD, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_cl, &i386_device::i386_shrd32_cl, false}, + { 0xAE, OP_2BYTE|OP_SSE, &i386_device::sse_sse_group0fae, &i386_device::sse_sse_group0fae, false}, + { 0xAF, OP_2BYTE|OP_I386, &i386_device::i386_imul_r16_rm16, &i386_device::i386_imul_r32_rm32, false}, + { 0xB0, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm8_r8, &i386_device::i486_cmpxchg_rm8_r8, true }, + { 0xB1, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm16_r16, &i386_device::i486_cmpxchg_rm32_r32, true }, + { 0xB2, OP_2BYTE|OP_I386, &i386_device::i386_lss16, &i386_device::i386_lss32, false}, + { 0xB3, OP_2BYTE|OP_I386, &i386_device::i386_btr_rm16_r16, &i386_device::i386_btr_rm32_r32, true }, + { 0xB4, OP_2BYTE|OP_I386, &i386_device::i386_lfs16, &i386_device::i386_lfs32, false}, + { 0xB5, OP_2BYTE|OP_I386, &i386_device::i386_lgs16, &i386_device::i386_lgs32, false}, + { 0xB6, OP_2BYTE|OP_I386, &i386_device::i386_movzx_r16_rm8, &i386_device::i386_movzx_r32_rm8, false}, + { 0xB7, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movzx_r32_rm16, false}, + { 0xBA, OP_2BYTE|OP_I386, &i386_device::i386_group0FBA_16, &i386_device::i386_group0FBA_32, true }, + { 0xBB, OP_2BYTE|OP_I386, &i386_device::i386_btc_rm16_r16, &i386_device::i386_btc_rm32_r32, true }, + { 0xBC, OP_2BYTE|OP_I386, &i386_device::i386_bsf_r16_rm16, &i386_device::i386_bsf_r32_rm32, false}, + { 0xBD, OP_2BYTE|OP_I386, &i386_device::i386_bsr_r16_rm16, &i386_device::i386_bsr_r32_rm32, false}, + { 0xBE, OP_2BYTE|OP_I386, &i386_device::i386_movsx_r16_rm8, &i386_device::i386_movsx_r32_rm8, false}, + { 0xBF, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movsx_r32_rm16, false}, + { 0xC0, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm8_r8, &i386_device::i486_xadd_rm8_r8, true }, + { 0xC1, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm16_r16, &i386_device::i486_xadd_rm32_r32, true }, + { 0xC2, OP_2BYTE|OP_SSE, &i386_device::sse_cmpps_r128_rm128_i8, &i386_device::sse_cmpps_r128_rm128_i8, false}, + { 0xC3, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movnti_m16_r16, &i386_device::pentium_movnti_m32_r32, false}, + { 0xC4, OP_2BYTE|OP_SSE, &i386_device::sse_pinsrw_r64_r16m16_i8, &i386_device::sse_pinsrw_r64_r32m16_i8,false}, + { 0xC5, OP_2BYTE|OP_SSE, &i386_device::sse_pextrw_r16_r64_i8, &i386_device::sse_pextrw_r32_r64_i8, false}, + { 0xC6, OP_2BYTE|OP_SSE, &i386_device::sse_shufps, &i386_device::sse_shufps, false}, + { 0xC7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmpxchg8b_m64, &i386_device::pentium_cmpxchg8b_m64, true }, + { 0xC8, OP_2BYTE|OP_I486, &i386_device::i486_bswap_eax, &i386_device::i486_bswap_eax, false}, + { 0xC9, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ecx, &i386_device::i486_bswap_ecx, false}, + { 0xCA, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edx, &i386_device::i486_bswap_edx, false}, + { 0xCB, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebx, &i386_device::i486_bswap_ebx, false}, + { 0xCC, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esp, &i386_device::i486_bswap_esp, false}, + { 0xCD, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebp, &i386_device::i486_bswap_ebp, false}, + { 0xCE, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esi, &i386_device::i486_bswap_esi, false}, + { 0xCF, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edi, &i386_device::i486_bswap_edi, false}, + { 0xD1, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlw_r64_rm64, &i386_device::mmx_psrlw_r64_rm64, false}, + { 0xD2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrld_r64_rm64, &i386_device::mmx_psrld_r64_rm64, false}, + { 0xD3, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlq_r64_rm64, &i386_device::mmx_psrlq_r64_rm64, false}, + { 0xD4, OP_2BYTE|OP_MMX, &i386_device::mmx_paddq_r64_rm64, &i386_device::mmx_paddq_r64_rm64, false}, + { 0xD5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmullw_r64_rm64, &i386_device::mmx_pmullw_r64_rm64, false}, + { 0xD7, OP_2BYTE|OP_SSE, &i386_device::sse_pmovmskb_r16_r64, &i386_device::sse_pmovmskb_r32_r64, false}, + { 0xD8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusb_r64_rm64, &i386_device::mmx_psubusb_r64_rm64, false}, + { 0xD9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusw_r64_rm64, &i386_device::mmx_psubusw_r64_rm64, false}, + { 0xDA, OP_2BYTE|OP_SSE, &i386_device::sse_pminub_r64_rm64, &i386_device::sse_pminub_r64_rm64, false}, + { 0xDB, OP_2BYTE|OP_MMX, &i386_device::mmx_pand_r64_rm64, &i386_device::mmx_pand_r64_rm64, false}, + { 0xDC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusb_r64_rm64, &i386_device::mmx_paddusb_r64_rm64, false}, + { 0xDD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusw_r64_rm64, &i386_device::mmx_paddusw_r64_rm64, false}, + { 0xDE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxub_r64_rm64, &i386_device::sse_pmaxub_r64_rm64, false}, + { 0xDF, OP_2BYTE|OP_MMX, &i386_device::mmx_pandn_r64_rm64, &i386_device::mmx_pandn_r64_rm64, false}, + { 0xE0, OP_2BYTE|OP_SSE, &i386_device::sse_pavgb_r64_rm64, &i386_device::sse_pavgb_r64_rm64, false}, + { 0xE1, OP_2BYTE|OP_MMX, &i386_device::mmx_psraw_r64_rm64, &i386_device::mmx_psraw_r64_rm64, false}, + { 0xE2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrad_r64_rm64, &i386_device::mmx_psrad_r64_rm64, false}, + { 0xE3, OP_2BYTE|OP_SSE, &i386_device::sse_pavgw_r64_rm64, &i386_device::sse_pavgw_r64_rm64, false}, + { 0xE4, OP_2BYTE|OP_SSE, &i386_device::sse_pmulhuw_r64_rm64, &i386_device::sse_pmulhuw_r64_rm64, false}, + { 0xE5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmulhw_r64_rm64, &i386_device::mmx_pmulhw_r64_rm64, false}, + { 0xE7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movntq_m64_r64, &i386_device::pentium_movntq_m64_r64, false}, + { 0xE8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsb_r64_rm64, &i386_device::mmx_psubsb_r64_rm64, false}, + { 0xE9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsw_r64_rm64, &i386_device::mmx_psubsw_r64_rm64, false}, + { 0xEA, OP_2BYTE|OP_SSE, &i386_device::sse_pminsw_r64_rm64, &i386_device::sse_pminsw_r64_rm64, false}, + { 0xEB, OP_2BYTE|OP_MMX, &i386_device::mmx_por_r64_rm64, &i386_device::mmx_por_r64_rm64, false}, + { 0xEC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsb_r64_rm64, &i386_device::mmx_paddsb_r64_rm64, false}, + { 0xED, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsw_r64_rm64, &i386_device::mmx_paddsw_r64_rm64, false}, + { 0xEE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxsw_r64_rm64, &i386_device::sse_pmaxsw_r64_rm64, false}, + { 0xEF, OP_2BYTE|OP_MMX, &i386_device::mmx_pxor_r64_rm64, &i386_device::mmx_pxor_r64_rm64, false}, + { 0xF1, OP_2BYTE|OP_MMX, &i386_device::mmx_psllw_r64_rm64, &i386_device::mmx_psllw_r64_rm64, false}, + { 0xF2, OP_2BYTE|OP_MMX, &i386_device::mmx_pslld_r64_rm64, &i386_device::mmx_pslld_r64_rm64, false}, + { 0xF3, OP_2BYTE|OP_MMX, &i386_device::mmx_psllq_r64_rm64, &i386_device::mmx_psllq_r64_rm64, false}, + { 0xF4, OP_2BYTE|OP_SSE, &i386_device::sse_pmuludq_r64_rm64, &i386_device::sse_pmuludq_r64_rm64, false}, + { 0xF5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmaddwd_r64_rm64, &i386_device::mmx_pmaddwd_r64_rm64, false}, + { 0xF6, OP_2BYTE|OP_SSE, &i386_device::sse_psadbw_r64_rm64, &i386_device::sse_psadbw_r64_rm64, false}, + { 0xf7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_maskmovq_r64_r64, &i386_device::pentium_maskmovq_r64_r64,false}, + { 0xF8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubb_r64_rm64, &i386_device::mmx_psubb_r64_rm64, false}, + { 0xF9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubw_r64_rm64, &i386_device::mmx_psubw_r64_rm64, false}, + { 0xFA, OP_2BYTE|OP_MMX, &i386_device::mmx_psubd_r64_rm64, &i386_device::mmx_psubd_r64_rm64, false}, + { 0xFB, OP_2BYTE|OP_SSE, &i386_device::sse_psubq_r64_rm64, &i386_device::sse_psubq_r64_rm64, false}, + { 0xFC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddb_r64_rm64, &i386_device::mmx_paddb_r64_rm64, false}, + { 0xFD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddw_r64_rm64, &i386_device::mmx_paddw_r64_rm64, false}, + { 0xFE, OP_2BYTE|OP_MMX, &i386_device::mmx_paddd_r64_rm64, &i386_device::mmx_paddd_r64_rm64, false}, /* F3 0F ?? */ - { 0x10, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_r128_rm128, &i386_device::sse_movss_r128_rm128, }, - { 0x11, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_rm128_r128, &i386_device::sse_movss_rm128_r128, }, - { 0x12, OP_3BYTEF3|OP_SSE, &i386_device::sse_movsldup_r128_rm128, &i386_device::sse_movsldup_r128_rm128, }, - { 0x16, OP_3BYTEF3|OP_SSE, &i386_device::sse_movshdup_r128_rm128, &i386_device::sse_movshdup_r128_rm128, }, - { 0x2A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtsi2ss_r128_rm32, &i386_device::sse_cvtsi2ss_r128_rm32, }, - { 0x2C, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttss2si_r32_r128m32, &i386_device::sse_cvttss2si_r32_r128m32,}, - { 0x2D, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2si_r32_r128m32, &i386_device::sse_cvtss2si_r32_r128m32,}, - { 0x51, OP_3BYTEF3|OP_SSE, &i386_device::sse_sqrtss_r128_r128m32, &i386_device::sse_sqrtss_r128_r128m32, }, - { 0x52, OP_3BYTEF3|OP_SSE, &i386_device::sse_rsqrtss_r128_r128m32, &i386_device::sse_rsqrtss_r128_r128m32,}, - { 0x53, OP_3BYTEF3|OP_SSE, &i386_device::sse_rcpss_r128_r128m32, &i386_device::sse_rcpss_r128_r128m32, }, - { 0x58, OP_3BYTEF3|OP_SSE, &i386_device::sse_addss, &i386_device::sse_addss, }, - { 0x59, OP_3BYTEF3|OP_SSE, &i386_device::sse_mulss, &i386_device::sse_mulss, }, - { 0x5A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2sd_r128_r128m32, &i386_device::sse_cvtss2sd_r128_r128m32,}, - { 0x5B, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttps2dq_r128_rm128, &i386_device::sse_cvttps2dq_r128_rm128,}, - { 0x5C, OP_3BYTEF3|OP_SSE, &i386_device::sse_subss, &i386_device::sse_subss, }, - { 0x5D, OP_3BYTEF3|OP_SSE, &i386_device::sse_minss_r128_r128m32, &i386_device::sse_minss_r128_r128m32, }, - { 0x5E, OP_3BYTEF3|OP_SSE, &i386_device::sse_divss, &i386_device::sse_divss, }, - { 0x5F, OP_3BYTEF3|OP_SSE, &i386_device::sse_maxss_r128_r128m32, &i386_device::sse_maxss_r128_r128m32, }, - { 0x6F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_r128_rm128, &i386_device::sse_movdqu_r128_rm128, }, - { 0x70, OP_3BYTEF3|OP_SSE, &i386_device::sse_pshufhw_r128_rm128_i8, &i386_device::sse_pshufhw_r128_rm128_i8,}, - { 0x7E, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq_r128_r128m64, &i386_device::sse_movq_r128_r128m64, }, - { 0x7F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_rm128_r128, &i386_device::sse_movdqu_rm128_r128, }, - { 0xB8, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_popcnt_r16_rm16, &i386_device::pentium_popcnt_r32_rm32, }, - { 0xBC, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_tzcnt_r16_rm16, &i386_device::pentium_tzcnt_r32_rm32, }, - { 0xC2, OP_3BYTEF3|OP_SSE, &i386_device::sse_cmpss_r128_r128m32_i8, &i386_device::sse_cmpss_r128_r128m32_i8,}, - { 0xD6, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq2dq_r128_r64, &i386_device::sse_movq2dq_r128_r64, }, - { 0xE6, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtdq2pd_r128_r128m64, &i386_device::sse_cvtdq2pd_r128_r128m64} + { 0x10, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_r128_rm128, &i386_device::sse_movss_r128_rm128, false}, + { 0x11, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_rm128_r128, &i386_device::sse_movss_rm128_r128, false}, + { 0x12, OP_3BYTEF3|OP_SSE, &i386_device::sse_movsldup_r128_rm128, &i386_device::sse_movsldup_r128_rm128, false}, + { 0x16, OP_3BYTEF3|OP_SSE, &i386_device::sse_movshdup_r128_rm128, &i386_device::sse_movshdup_r128_rm128, false}, + { 0x2A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtsi2ss_r128_rm32, &i386_device::sse_cvtsi2ss_r128_rm32, false}, + { 0x2C, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttss2si_r32_r128m32, &i386_device::sse_cvttss2si_r32_r128m32,false}, + { 0x2D, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2si_r32_r128m32, &i386_device::sse_cvtss2si_r32_r128m32,false}, + { 0x51, OP_3BYTEF3|OP_SSE, &i386_device::sse_sqrtss_r128_r128m32, &i386_device::sse_sqrtss_r128_r128m32, false}, + { 0x52, OP_3BYTEF3|OP_SSE, &i386_device::sse_rsqrtss_r128_r128m32, &i386_device::sse_rsqrtss_r128_r128m32,false}, + { 0x53, OP_3BYTEF3|OP_SSE, &i386_device::sse_rcpss_r128_r128m32, &i386_device::sse_rcpss_r128_r128m32, false}, + { 0x58, OP_3BYTEF3|OP_SSE, &i386_device::sse_addss, &i386_device::sse_addss, false}, + { 0x59, OP_3BYTEF3|OP_SSE, &i386_device::sse_mulss, &i386_device::sse_mulss, false}, + { 0x5A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2sd_r128_r128m32, &i386_device::sse_cvtss2sd_r128_r128m32,false}, + { 0x5B, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttps2dq_r128_rm128, &i386_device::sse_cvttps2dq_r128_rm128,false}, + { 0x5C, OP_3BYTEF3|OP_SSE, &i386_device::sse_subss, &i386_device::sse_subss, false}, + { 0x5D, OP_3BYTEF3|OP_SSE, &i386_device::sse_minss_r128_r128m32, &i386_device::sse_minss_r128_r128m32, false}, + { 0x5E, OP_3BYTEF3|OP_SSE, &i386_device::sse_divss, &i386_device::sse_divss, false}, + { 0x5F, OP_3BYTEF3|OP_SSE, &i386_device::sse_maxss_r128_r128m32, &i386_device::sse_maxss_r128_r128m32, false}, + { 0x6F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_r128_rm128, &i386_device::sse_movdqu_r128_rm128, false}, + { 0x70, OP_3BYTEF3|OP_SSE, &i386_device::sse_pshufhw_r128_rm128_i8, &i386_device::sse_pshufhw_r128_rm128_i8,false}, + { 0x7E, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq_r128_r128m64, &i386_device::sse_movq_r128_r128m64, false}, + { 0x7F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_rm128_r128, &i386_device::sse_movdqu_rm128_r128, false}, + { 0xB8, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_popcnt_r16_rm16, &i386_device::pentium_popcnt_r32_rm32, false}, + { 0xBC, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_tzcnt_r16_rm16, &i386_device::pentium_tzcnt_r32_rm32, false}, + { 0xC2, OP_3BYTEF3|OP_SSE, &i386_device::sse_cmpss_r128_r128m32_i8, &i386_device::sse_cmpss_r128_r128m32_i8,false}, + { 0xD6, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq2dq_r128_r64, &i386_device::sse_movq2dq_r128_r64, false}, + { 0xE6, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtdq2pd_r128_r128m64, &i386_device::sse_cvtdq2pd_r128_r128m64,false} }; diff --git a/src/emu/cpu/i386/i386ops.inc b/src/emu/cpu/i386/i386ops.inc index fa267b0c80a..8d4cc59b5b5 100644 --- a/src/emu/cpu/i386/i386ops.inc +++ b/src/emu/cpu/i386/i386ops.inc @@ -2483,7 +2483,7 @@ void i386_device::i386_wait() // Opcode 0x9B void i386_device::i386_lock() // Opcode 0xf0 { // lock doesn't depend on iopl on 386 - // TODO: lock causes UD on unlockable opcodes + m_lock = true; CYCLES(CYCLES_LOCK); // TODO: Determine correct cycle count i386_decode_opcode(); } diff --git a/src/mame/drivers/jackie.c b/src/mame/drivers/jackie.c index 6707dc4e02a..5f21d38be05 100644 --- a/src/mame/drivers/jackie.c +++ b/src/mame/drivers/jackie.c @@ -267,7 +267,7 @@ void jackie_state::machine_reset() void jackie_state::show_out() { #ifdef MAME_DEBUG -// popmessage("%02x %02x %02x", state->m_out[0], state->m_out[1], state->m_out[2]); +// popmessage("%02x %02x %02x", m_out[0], m_out[1], m_out[2]); popmessage("520: %04x %04x %04x %04x %04x\n560: %04x %04x %04x %04x %04x\n5A0: %04x %04x %04x %04x %04x", m_unk_reg[0][0],m_unk_reg[0][1],m_unk_reg[0][2],m_unk_reg[0][3],m_unk_reg[0][4], m_unk_reg[1][0],m_unk_reg[1][1],m_unk_reg[1][2],m_unk_reg[1][3],m_unk_reg[1][4], diff --git a/src/mame/drivers/konamigx.c b/src/mame/drivers/konamigx.c index 3d443af61d5..01903dae7eb 100644 --- a/src/mame/drivers/konamigx.c +++ b/src/mame/drivers/konamigx.c @@ -106,14 +106,6 @@ - -static int konamigx_cfgport; - -static int gx_rdport1_3, gx_syncen; - -static emu_timer *dmadelay_timer; -static emu_timer *boothack_timer; - /**********************************************************************************/ /* Konami ESC (E Security Chip) protection chip found on: @@ -179,13 +171,10 @@ static struct sprite_entry { static void generate_sprites(address_space &space, UINT32 src, UINT32 spr, int count) { - int i; - int scount; - int ecount; - scount = 0; - ecount = 0; + int scount = 0; + int ecount = 0; - for(i=0; i<count; i++) { + for(int i=0; i<count; i++) { UINT32 adr = src + 0x100*i; int pri; if(!space.read_word(adr+2)) @@ -200,7 +189,7 @@ static void generate_sprites(address_space &space, UINT32 src, UINT32 spr, int c } //qsort(sprites, ecount, sizeof(struct sprite_entry), pri_comp); - for(i=0; i<ecount; i++) { + for(int i=0; i<ecount; i++) { UINT32 adr = sprites[i].adr; if(adr) { UINT32 set =(space.read_word(adr) << 16)|space.read_word(adr+2); @@ -315,43 +304,37 @@ static void generate_sprites(address_space &space, UINT32 src, UINT32 spr, int c } } -static void tkmmpzdm_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::tkmmpzdm_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_state* state = space.machine().driver_data<konamigx_state>(); - state->konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x0142, 0x100, 0); + konamigx_esc_alert(m_workram, 0x0142, 0x100, 0); } -static void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_state* state = space.machine().driver_data<konamigx_state>(); - state->konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x5c00, 0x100, 0); + konamigx_esc_alert(m_workram, 0x5c00, 0x100, 0); } -static void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_state* state = space.machine().driver_data<konamigx_state>(); - state->konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x1c8c, 0x172, 1); + konamigx_esc_alert(m_workram, 0x1c8c, 0x172, 1); } -static void sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { // The d20000 should probably be p3 generate_sprites(space, 0xc00604, 0xd20000, 0xfc); } -static void tbyahhoo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::tbyahhoo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { generate_sprites(space, 0xc00000, 0xd20000, 0x100); } -static void daiskiss_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::daiskiss_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { generate_sprites(space, 0xc00000, 0xd20000, 0x100); } -static UINT8 esc_program[4096]; -static void (*esc_cb)(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); - WRITE32_MEMBER(konamigx_state::esc_w) { UINT32 opcode; @@ -386,7 +369,7 @@ WRITE32_MEMBER(konamigx_state::esc_w) break; case 2: // Load program for(i=0; i<4096; i++) - esc_program[i] = space.read_byte(params+i); + m_esc_program[i] = space.read_byte(params+i); /* { FILE *f; @@ -400,12 +383,12 @@ WRITE32_MEMBER(konamigx_state::esc_w) */ break; case 1: // Run program - if(esc_cb) { + if(m_esc_cb) { UINT32 p1 = (space.read_word(params+0)<<16) | space.read_word(params+2); UINT32 p2 = (space.read_word(params+4)<<16) | space.read_word(params+6); UINT32 p3 = (space.read_word(params+8)<<16) | space.read_word(params+10); UINT32 p4 = (space.read_word(params+12)<<16) | space.read_word(params+14); - esc_cb(space, p1, p2, p3, p4); + (this->*m_esc_cb)(space, p1, p2, p3, p4); } break; default: @@ -414,9 +397,9 @@ WRITE32_MEMBER(konamigx_state::esc_w) } space.write_byte(data+9, ESTATE_END); - if (konamigx_wrport1_1 & 0x10) + if (m_gx_wrport1_1 & 0x10) { - gx_rdport1_3 &= ~8; + m_gx_rdport1_3 &= ~8; m_maincpu->set_input_line(4, HOLD_LINE); } } @@ -439,7 +422,7 @@ WRITE32_MEMBER(konamigx_state::esc_w) CUSTOM_INPUT_MEMBER(konamigx_state::gx_rdport1_3_r) { - return (gx_rdport1_3 >> 1); + return (m_gx_rdport1_3 >> 1); } WRITE32_MEMBER(konamigx_state::eeprom_w) @@ -462,7 +445,7 @@ WRITE32_MEMBER(konamigx_state::eeprom_w) m_eepromout->write(odata, 0xff); - konamigx_wrport1_0 = odata; + m_gx_wrport1_0 = odata; } if (ACCESSING_BITS_16_23) @@ -478,12 +461,12 @@ WRITE32_MEMBER(konamigx_state::eeprom_w) bit 0 = CCU1-INT1 enable */ - konamigx_wrport1_1 = (data>>16)&0xff; -// logerror("write %x to IRQ register (PC=%x)\n", konamigx_wrport1_1, space.device().safe_pc()); + m_gx_wrport1_1 = (data>>16)&0xff; +// logerror("write %x to IRQ register (PC=%x)\n", m_gx_wrport1_1, space.device().safe_pc()); - // gx_syncen is to ensure each IRQ is trigger at least once after being enabled - if (konamigx_wrport1_1 & 0x80) - gx_syncen |= konamigx_wrport1_1 & 0x1f; + // m_gx_syncen is to ensure each IRQ is triggered at least once after being enabled + if (m_gx_wrport1_1 & 0x80) + m_gx_syncen |= m_gx_wrport1_1 & 0x1f; } } @@ -526,7 +509,7 @@ WRITE32_MEMBER(konamigx_state::control_w) m_k055673->k053246_set_objcha_line((data&0x100000) ? ASSERT_LINE : CLEAR_LINE); - konamigx_wrport2 = (data>>16)&0xff; + m_gx_wrport2 = (data>>16)&0xff; } } @@ -534,8 +517,6 @@ WRITE32_MEMBER(konamigx_state::control_w) /**********************************************************************************/ /* IRQ controllers */ -static int suspension_active, resume_trigger; - READ32_MEMBER(konamigx_state::ccu_r) { // the routine at 204abe in opengolf polls to see if we're in vblank (it wants values between 0x111 and 0x1df) @@ -559,14 +540,14 @@ WRITE32_MEMBER(konamigx_state::ccu_w) if (ACCESSING_BITS_24_31) { m_maincpu->set_input_line(1, CLEAR_LINE); - gx_syncen |= 0x20; + m_gx_syncen |= 0x20; } // hblank interrupt ACK if (ACCESSING_BITS_8_15) { m_maincpu->set_input_line(2, CLEAR_LINE); - gx_syncen |= 0x40; + m_gx_syncen |= 0x40; } } } @@ -588,22 +569,22 @@ TIMER_CALLBACK_MEMBER(konamigx_state::boothack_callback) TIMER_CALLBACK_MEMBER(konamigx_state::dmaend_callback) { // foul-proof (CPU0 could be deactivated while we wait) - if (resume_trigger && suspension_active) + if (m_resume_trigger && m_suspension_active) { - suspension_active = 0; - machine().scheduler().trigger(resume_trigger); + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); } // DMA busy flag must be cleared before triggering IRQ 3 - gx_rdport1_3 &= ~2; + m_gx_rdport1_3 &= ~2; // IRQ 3 is the "object DMA end" IRQ also happens during vblank - if ((konamigx_wrport1_1 & 0x84) == 0x84 || (gx_syncen & 4)) + if ((m_gx_wrport1_1 & 0x84) == 0x84 || (m_gx_syncen & 4)) { - gx_syncen &= ~4; + m_gx_syncen &= ~4; // lower OBJINT-REQ flag and trigger interrupt - gx_rdport1_3 &= ~0x80; + m_gx_rdport1_3 &= ~0x80; m_maincpu->set_input_line(3, HOLD_LINE); } } @@ -611,7 +592,7 @@ TIMER_CALLBACK_MEMBER(konamigx_state::dmaend_callback) void konamigx_state::dmastart_callback(int data) { // raise the DMA busy flag - gx_rdport1_3 |= 2; + m_gx_rdport1_3 |= 2; // begin transfer if DMAEN(bit4 of OBJSET1) is set (see p.48) if (m_k055673->k053246_read_register(5) & 0x10) @@ -621,27 +602,27 @@ void konamigx_state::dmastart_callback(int data) } // simulate DMA delay - dmadelay_timer->adjust(attotime::from_usec(120)); + m_dmadelay_timer->adjust(attotime::from_usec(120)); } INTERRUPT_GEN_MEMBER(konamigx_state::konamigx_vbinterrupt) { // lift idle suspension - if (resume_trigger && suspension_active) + if (m_resume_trigger && m_suspension_active) { - suspension_active = 0; - machine().scheduler().trigger(resume_trigger); + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); } // IRQ 1 is the main 60hz vblank interrupt - if (gx_syncen & 0x20) + if (m_gx_syncen & 0x20) { - gx_syncen &= ~0x20; + m_gx_syncen &= ~0x20; - if ((konamigx_wrport1_1 & 0x81) == 0x81 || (gx_syncen & 1)) + if ((m_gx_wrport1_1 & 0x81) == 0x81 || (m_gx_syncen & 1)) { - gx_syncen &= ~1; + m_gx_syncen &= ~1; device.execute().set_input_line(1, HOLD_LINE); } } @@ -656,26 +637,26 @@ TIMER_DEVICE_CALLBACK_MEMBER(konamigx_state::konamigx_hbinterrupt) if (scanline == 240) { // lift idle suspension - if (resume_trigger && suspension_active) + if (m_resume_trigger && m_suspension_active) { - suspension_active = 0; - machine().scheduler().trigger(resume_trigger); + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); } // IRQ 1 is the main 60hz vblank interrupt - // the gx_syncen & 0x20 test doesn't work on type 3 or 4 ROM boards, likely because the ROM board + // the m_gx_syncen & 0x20 test doesn't work on type 3 or 4 ROM boards, likely because the ROM board // generates the timing in those cases. With this change, rushing heroes and rng2 boot :) // maybe this interrupt should only be every 30fps, or maybe there are flags to prevent the game running too fast // the real hardware should output the display for each screen on alternate frames // if(device->m_screen->frame_number() & 1) - if (1) // gx_syncen & 0x20) + if (1) // m_gx_syncen & 0x20) { - gx_syncen &= ~0x20; + m_gx_syncen &= ~0x20; - if ((konamigx_wrport1_1 & 0x81) == 0x81 || (gx_syncen & 1)) + if ((m_gx_wrport1_1 & 0x81) == 0x81 || (m_gx_syncen & 1)) { - gx_syncen &= ~1; + m_gx_syncen &= ~1; m_maincpu->set_input_line(1, HOLD_LINE); } @@ -686,13 +667,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(konamigx_state::konamigx_hbinterrupt) else if(scanline < 240) // hblank { // IRQ 2 is a programmable interrupt with scanline resolution - if (gx_syncen & 0x40) + if (m_gx_syncen & 0x40) { - gx_syncen &= ~0x40; + m_gx_syncen &= ~0x40; - if ((konamigx_wrport1_1 & 0x82) == 0x82 || (gx_syncen & 2)) + if ((m_gx_wrport1_1 & 0x82) == 0x82 || (m_gx_syncen & 2)) { - gx_syncen &= ~2; + m_gx_syncen &= ~2; m_maincpu->set_input_line(2, HOLD_LINE); } } @@ -759,8 +740,6 @@ READ32_MEMBER(konamigx_state::type1_roz_r2) return ROM[offset]; } -//static int sync_frame = 0; - READ32_MEMBER(konamigx_state::type3_sync_r) { if(m_konamigx_current_frame==0) @@ -768,7 +747,7 @@ READ32_MEMBER(konamigx_state::type3_sync_r) else return 0;// return 0xfffffffe | 0; } -static int last_prot_op, last_prot_clk; + /* Run and Gun 2, Rushing Heroes, Winning Spike, and Vs. Net Soccer contain a XILINX FPGA that serves as security. @@ -844,8 +823,6 @@ static int last_prot_op, last_prot_clk; move.l #$C10400,($C102EC).l move.l #$C10400,($C102EC).l */ -//static int cc=0; - WRITE32_MEMBER(konamigx_state::type4_prot_w) { int clk; @@ -853,18 +830,18 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) if (offset == 1) { - last_prot_op = data>>16; + m_last_prot_op = data>>16; } else { data >>= 16; clk = data & 0x200; - if ((clk == 0) && (last_prot_clk != 0)) + if ((clk == 0) && (m_last_prot_clk != 0)) { - if (last_prot_op != -1) + if (m_last_prot_op != -1) { -// osd_printf_debug("type 4 prot command: %x\n", last_prot_op); +// osd_printf_debug("type 4 prot command: %x\n", m_last_prot_op); /* known commands: rng2 rushhero vsnet winspike what @@ -874,7 +851,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) 0d97 0515 parse big DMA list at c10200 57a copy 4 bytes from c00f10 to c10f00 and 4 bytes from c00f30 to c0fe00 */ - if ((last_prot_op == 0xa56) || (last_prot_op == 0xd96) || (last_prot_op == 0xd14) || (last_prot_op == 0xd1c)) + if ((m_last_prot_op == 0xa56) || (m_last_prot_op == 0xd96) || (m_last_prot_op == 0xd14) || (m_last_prot_op == 0xd1c)) { // memcpy from c01000 to c01400 for 0x400 bytes (startup check for type 4 games) for (i = 0; i < 0x400; i += 2) @@ -882,7 +859,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) space.write_word(0xc01400+i, space.read_word(0xc01000+i)); } } - else if(last_prot_op == 0x57a) // winspike + else if(m_last_prot_op == 0x57a) // winspike { /* player 1 input buffer protection */ space.write_dword(0xc10f00, space.read_dword(0xc00f10)); @@ -894,7 +871,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) space.write_dword(0xc0fe00, space.read_dword(0xc00f30)); space.write_dword(0xc0fe04, space.read_dword(0xc00f34)); } - else if(last_prot_op == 0xd97) // rushhero + else if(m_last_prot_op == 0xd97) // rushhero { int src = 0xc09ff0; int dst = 0xd20000; @@ -917,7 +894,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) space.write_byte(0xc01cc4, ~space.read_byte(0xc00547)); space.write_byte(0xc01cc5, ~space.read_byte(0xc00567)); } - else if(last_prot_op == 0xb16) // slamdnk2 + else if(m_last_prot_op == 0xb16) // slamdnk2 { int src = 0xc01000; int dst = 0xd20000; @@ -932,36 +909,36 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) //maybe here there's a [$d8001f] <- 0x31 write too? } - else if(last_prot_op == 0x515) // vsnetscr screen 1 + else if(m_last_prot_op == 0x515) // vsnetscr screen 1 { int adr; - //printf("GXT4: command %x %d (PC=%x)\n", last_prot_op, cc++, space.device().safe_pc()); + //printf("GXT4: command %x %d (PC=%x)\n", m_last_prot_op, cc++, space.device().safe_pc()); for (adr = 0; adr < 0x400; adr += 2) space.write_word(0xc01c00+adr, space.read_word(0xc01800+adr)); } - else if(last_prot_op == 0x115d) // vsnetscr screen 2 + else if(m_last_prot_op == 0x115d) // vsnetscr screen 2 { int adr; - //printf("GXT4: command %x %d (PC=%x)\n", last_prot_op, cc++, space.device().safe_pc()); + //printf("GXT4: command %x %d (PC=%x)\n", m_last_prot_op, cc++, space.device().safe_pc()); for (adr = 0; adr < 0x400; adr += 2) space.write_word(0xc18c00+adr, space.read_word(0xc18800+adr)); } else { - printf("GXT4: unknown protection command %x (PC=%x)\n", last_prot_op, space.device().safe_pc()); + printf("GXT4: unknown protection command %x (PC=%x)\n", m_last_prot_op, space.device().safe_pc()); } - if (konamigx_wrport1_1 & 0x10) + if (m_gx_wrport1_1 & 0x10) { - gx_rdport1_3 &= ~8; + m_gx_rdport1_3 &= ~8; m_maincpu->set_input_line(4, HOLD_LINE); } // don't accidentally do a phony command - last_prot_op = -1; + m_last_prot_op = -1; } } - last_prot_clk = clk; + m_last_prot_clk = clk; } } @@ -1180,7 +1157,7 @@ static INPUT_PORTS_START( common ) // note: racin' force expects bit 1 of the eeprom port to toggle PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - PORT_BIT( 0x000000fe, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, konamigx_state,gx_rdport1_3_r, NULL) + PORT_BIT( 0x000000fe, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, konamigx_state, gx_rdport1_3_r, NULL) PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -3578,22 +3555,22 @@ ROM_END MACHINE_START_MEMBER(konamigx_state,konamigx) { - save_item(NAME(konamigx_wrport1_1)); + save_item(NAME(m_gx_wrport1_1)); } MACHINE_RESET_MEMBER(konamigx_state,konamigx) { - konamigx_wrport1_0 = konamigx_wrport1_1 = 0; - konamigx_wrport2 = 0; + m_gx_wrport1_0 = m_gx_wrport1_1 = 0; + m_gx_wrport2 = 0; /* bit0 : EEPROM data(don't care) bit1 : DMA busy (cleared) bit2-7: IRQ ready (all set) */ - gx_rdport1_3 = 0xfc; - gx_syncen = 0; - suspension_active = 0; + m_gx_rdport1_3 = 0xfc; + m_gx_syncen = 0; + m_suspension_active = 0; // Hold sound CPUs in reset m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); @@ -3633,7 +3610,7 @@ MACHINE_RESET_MEMBER(konamigx_state,konamigx) // To hack around this, we underclock the 68020 for 10 seconds during POST m_maincpu->set_clock_scale(0.66f); - boothack_timer->adjust(attotime::from_seconds(10)); + m_boothack_timer->adjust(attotime::from_seconds(10)); } if (!strcmp(setname, "le2") || @@ -3708,15 +3685,15 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) int i, match; int readback = 0; - konamigx_cfgport = -1; - last_prot_op = -1; - last_prot_clk = 0; + m_gx_cfgport = -1; + m_last_prot_op = -1; + m_last_prot_clk = 0; - esc_cb = 0; - resume_trigger = 0; + m_esc_cb = NULL; + m_resume_trigger = 0; - dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::dmaend_callback),this)); - boothack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::boothack_callback),this)); + m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::dmaend_callback),this)); + m_boothack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::boothack_callback),this)); i = match = 0; while ((gameDefs[i].cfgport != -1) && (!match)) @@ -3724,7 +3701,7 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) if (!strcmp(machine().system().name, gameDefs[i].romname)) { match = 1; - konamigx_cfgport = gameDefs[i].cfgport; + m_gx_cfgport = gameDefs[i].cfgport; readback = gameDefs[i].readback; switch (gameDefs[i].special) @@ -3745,24 +3722,24 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) rom[0x810f1] &= ~1; // fix checksum rom[0x872ea] |= 0xe0000; // enable plane B,C,D - esc_cb = tkmmpzdm_esc; + m_esc_cb = &konamigx_state::tkmmpzdm_esc; break; } case 3: // dragoon might - esc_cb = dragoonj_esc; + m_esc_cb = &konamigx_state::dragoonj_esc; break; case 4: // sexyparo - esc_cb = sexyparo_esc; + m_esc_cb = &konamigx_state::sexyparo_esc; break; case 5: // daiskiss - esc_cb = daiskiss_esc; + m_esc_cb = &konamigx_state::daiskiss_esc; break; case 6: // salamander 2 - esc_cb = sal2_esc; + m_esc_cb = &konamigx_state::sal2_esc; break; case 7: // install type 4 Xilinx protection for non-type 3/4 games @@ -3770,7 +3747,7 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) break; case 8: // tbyahhoo - esc_cb = tbyahhoo_esc; + m_esc_cb = &konamigx_state::tbyahhoo_esc; break; case 9: // fantjour diff --git a/src/mame/drivers/mystwarr.c b/src/mame/drivers/mystwarr.c index 76502908844..a33298acf88 100644 --- a/src/mame/drivers/mystwarr.c +++ b/src/mame/drivers/mystwarr.c @@ -850,7 +850,7 @@ MACHINE_START_MEMBER(mystwarr_state,mystwarr) m_mw_irq_control = 0; /* konamigx_mixer uses this, so better initialize it */ - konamigx_wrport1_0 = 0; + m_gx_wrport1_0 = 0; save_item(NAME(m_mw_irq_control)); save_item(NAME(m_sound_ctrl)); diff --git a/src/mame/drivers/peplus.c b/src/mame/drivers/peplus.c index e82ffbb7c1c..f85142c8335 100644 --- a/src/mame/drivers/peplus.c +++ b/src/mame/drivers/peplus.c @@ -206,7 +206,13 @@ public: peplus_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_cmos_ram(*this, "cmos") , + m_maincpu(*this, "maincpu"), + m_crtc(*this, "crtc"), + m_i2cmem(*this, "i2cmem"), + m_screen(*this, "screen"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_cmos_ram(*this, "cmos"), m_program_ram(*this, "prograram"), m_s3000_ram(*this, "s3000_ram"), m_s5000_ram(*this, "s5000_ram"), @@ -215,14 +221,17 @@ public: m_sb000_ram(*this, "sb000_ram"), m_sd000_ram(*this, "sd000_ram"), m_sf000_ram(*this, "sf000_ram"), - m_io_port(*this, "io_port"), - m_maincpu(*this, "maincpu"), - m_i2cmem(*this, "i2cmem"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_io_port(*this, "io_port") { } + required_device<cpu_device> m_maincpu; + required_device<r6545_1_device> m_crtc; + required_device<i2cmem_device> m_i2cmem; + required_device<screen_device> m_screen; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_shared_ptr<UINT8> m_cmos_ram; required_shared_ptr<UINT8> m_program_ram; required_shared_ptr<UINT8> m_s3000_ram; @@ -233,6 +242,7 @@ public: required_shared_ptr<UINT8> m_sd000_ram; required_shared_ptr<UINT8> m_sf000_ram; required_shared_ptr<UINT8> m_io_port; + tilemap_t *m_bg_tilemap; UINT8 m_wingboard; UINT8 m_doorcycle; @@ -260,29 +270,15 @@ public: UINT8 m_bv_data_bit; UINT8 m_bv_loop_count; UINT16 id023_data; + DECLARE_WRITE8_MEMBER(peplus_bgcolor_w); DECLARE_WRITE8_MEMBER(peplus_crtc_display_w); - DECLARE_WRITE8_MEMBER(peplus_io_w); DECLARE_WRITE8_MEMBER(peplus_duart_w); DECLARE_WRITE8_MEMBER(peplus_cmos_w); - DECLARE_WRITE8_MEMBER(peplus_s3000_w); - DECLARE_WRITE8_MEMBER(peplus_s5000_w); - DECLARE_WRITE8_MEMBER(peplus_s7000_w); - DECLARE_WRITE8_MEMBER(peplus_sb000_w); - DECLARE_WRITE8_MEMBER(peplus_sd000_w); - DECLARE_WRITE8_MEMBER(peplus_sf000_w); DECLARE_WRITE8_MEMBER(peplus_output_bank_a_w); DECLARE_WRITE8_MEMBER(peplus_output_bank_b_w); DECLARE_WRITE8_MEMBER(peplus_output_bank_c_w); - DECLARE_READ8_MEMBER(peplus_io_r); DECLARE_READ8_MEMBER(peplus_duart_r); - DECLARE_READ8_MEMBER(peplus_cmos_r); - DECLARE_READ8_MEMBER(peplus_s3000_r); - DECLARE_READ8_MEMBER(peplus_s5000_r); - DECLARE_READ8_MEMBER(peplus_s7000_r); - DECLARE_READ8_MEMBER(peplus_sb000_r); - DECLARE_READ8_MEMBER(peplus_sd000_r); - DECLARE_READ8_MEMBER(peplus_sf000_r); DECLARE_READ8_MEMBER(peplus_bgcolor_r); DECLARE_READ8_MEMBER(peplus_dropdoor_r); DECLARE_READ8_MEMBER(peplus_watchdog_r); @@ -303,10 +299,7 @@ public: UINT32 screen_update_peplus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void peplus_load_superdata(const char *bank_name); DECLARE_PALETTE_INIT(peplus); - required_device<cpu_device> m_maincpu; - required_device<i2cmem_device> m_i2cmem; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; + void handle_lightpen(); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); @@ -392,7 +385,7 @@ void peplus_state::device_timer(emu_timer &timer, device_timer_id id, int param, switch (id) { case TIMER_ASSERT_LP: - downcast<mc6845_device *>((device_t*)ptr)->assert_light_pen_input(); + m_crtc->assert_light_pen_input(); break; default: assert_always(FALSE, "Unknown id in peplus_state::device_timer"); @@ -400,25 +393,23 @@ void peplus_state::device_timer(emu_timer &timer, device_timer_id id, int param, } -static void handle_lightpen( mc6845_device *device ) +void peplus_state::handle_lightpen() { - peplus_state *state = device->machine().driver_data<peplus_state>(); - int x_val = device->machine().root_device().ioport("TOUCH_X")->read_safe(0x00); - int y_val = device->machine().root_device().ioport("TOUCH_Y")->read_safe(0x00); - const rectangle &vis_area = device->screen().visible_area(); + int x_val = ioport("TOUCH_X")->read_safe(0x00); + int y_val = ioport("TOUCH_Y")->read_safe(0x00); + const rectangle &vis_area = m_screen->visible_area(); int xt, yt; xt = x_val * vis_area.width() / 1024 + vis_area.min_x; yt = y_val * vis_area.height() / 1024 + vis_area.min_y; - state->timer_set(device->screen().time_until_pos(yt, xt), peplus_state::TIMER_ASSERT_LP, 0, device); + timer_set(m_screen->time_until_pos(yt, xt), TIMER_ASSERT_LP, 0); } WRITE_LINE_MEMBER(peplus_state::crtc_vsync) { - mc6845_device *device = machine().device<mc6845_device>("crtc"); m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); - handle_lightpen(device); + handle_lightpen(); } WRITE8_MEMBER(peplus_state::peplus_crtc_display_w) @@ -431,12 +422,7 @@ WRITE8_MEMBER(peplus_state::peplus_crtc_display_w) m_bg_tilemap->mark_tile_dirty(m_vid_address); /* An access here triggers a device read !*/ - machine().device<mc6845_device>("crtc")->register_r(space, 0); -} - -WRITE8_MEMBER(peplus_state::peplus_io_w) -{ - m_io_port[offset] = data; + m_crtc->register_r(space, 0); } WRITE8_MEMBER(peplus_state::peplus_duart_w) @@ -458,36 +444,6 @@ WRITE8_MEMBER(peplus_state::peplus_cmos_w) m_cmos_ram[offset] = data; } -WRITE8_MEMBER(peplus_state::peplus_s3000_w) -{ - m_s3000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_s5000_w) -{ - m_s5000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_s7000_w) -{ - m_s7000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_sb000_w) -{ - m_sb000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_sd000_w) -{ - m_sd000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_sf000_w) -{ - m_sf000_ram[offset] = data; -} - WRITE8_MEMBER(peplus_state::peplus_output_bank_a_w) { output_set_value("pe_bnka0",(data >> 0) & 1); /* Coin Lockout */ @@ -542,52 +498,12 @@ WRITE8_MEMBER(peplus_state::i2c_nvram_w) * Read Handlers * ****************/ -READ8_MEMBER(peplus_state::peplus_io_r) -{ - return m_io_port[offset]; -} - READ8_MEMBER(peplus_state::peplus_duart_r) { // Used for Slot Accounting System Communication return 0x00; } -READ8_MEMBER(peplus_state::peplus_cmos_r) -{ - return m_cmos_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_s3000_r) -{ - return m_s3000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_s5000_r) -{ - return m_s5000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_s7000_r) -{ - return m_s7000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_sb000_r) -{ - return m_sb000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_sd000_r) -{ - return m_sd000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_sf000_r) -{ - return m_sf000_ram[offset]; -} - /* Last Color in Every Palette is bgcolor */ READ8_MEMBER(peplus_state::peplus_bgcolor_r) { @@ -1056,7 +972,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) // Battery-backed RAM (0x1000-0x01fff Extended RAM for Superboards Only) - AM_RANGE(0x0000, 0x1fff) AM_READWRITE(peplus_cmos_r, peplus_cmos_w) AM_SHARE("cmos") + AM_RANGE(0x0000, 0x1fff) AM_RAM_WRITE(peplus_cmos_w) AM_SHARE("cmos") // CRT Controller AM_RANGE(0x2008, 0x2008) AM_WRITE(peplus_crtc_mode_w) @@ -1065,14 +981,14 @@ static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(peplus_crtc_display_w) // Superboard Data - AM_RANGE(0x3000, 0x3fff) AM_READWRITE(peplus_s3000_r, peplus_s3000_w) AM_SHARE("s3000_ram") + AM_RANGE(0x3000, 0x3fff) AM_RAM AM_SHARE("s3000_ram") // Sound and Dipswitches AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("aysnd", ay8910_device, address_w) AM_RANGE(0x4004, 0x4004) AM_READ_PORT("SW1")/* likely ay8910 input port, not direct */ AM_DEVWRITE("aysnd", ay8910_device, data_w) // Superboard Data - AM_RANGE(0x5000, 0x5fff) AM_READWRITE(peplus_s5000_r, peplus_s5000_w) AM_SHARE("s5000_ram") + AM_RANGE(0x5000, 0x5fff) AM_RAM AM_SHARE("s5000_ram") // Background Color Latch AM_RANGE(0x6000, 0x6000) AM_READ(peplus_bgcolor_r) AM_WRITE(peplus_bgcolor_w) @@ -1081,7 +997,7 @@ static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) AM_RANGE(0x06001, 0x06400) AM_RAM AM_SHARE("videoram") // Superboard Data - AM_RANGE(0x7000, 0x7fff) AM_READWRITE(peplus_s7000_r, peplus_s7000_w) AM_SHARE("s7000_ram") + AM_RANGE(0x7000, 0x7fff) AM_RAM AM_SHARE("s7000_ram") // Input Bank A, Output Bank C AM_RANGE(0x8000, 0x8000) AM_READ(peplus_input_bank_a_r) AM_WRITE(peplus_output_bank_c_w) @@ -1093,22 +1009,22 @@ static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) AM_RANGE(0xa000, 0xa000) AM_READ(peplus_input0_r) AM_WRITE(peplus_output_bank_b_w) // Superboard Data - AM_RANGE(0xb000, 0xbfff) AM_READWRITE(peplus_sb000_r, peplus_sb000_w) AM_SHARE("sb000_ram") + AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("sb000_ram") // Output Bank A AM_RANGE(0xc000, 0xc000) AM_READ(peplus_watchdog_r) AM_WRITE(peplus_output_bank_a_w) // Superboard Data - AM_RANGE(0xd000, 0xdfff) AM_READWRITE(peplus_sd000_r, peplus_sd000_w) AM_SHARE("sd000_ram") + AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("sd000_ram") // DUART AM_RANGE(0xe000, 0xe00f) AM_READWRITE(peplus_duart_r, peplus_duart_w) // Superboard Data - AM_RANGE(0xf000, 0xffff) AM_READWRITE(peplus_sf000_r, peplus_sf000_w) AM_SHARE("sf000_ram") + AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sf000_ram") /* Ports start here */ - AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(peplus_io_r) AM_WRITE(peplus_io_w) AM_SHARE("io_port") + AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_RAM AM_SHARE("io_port") ADDRESS_MAP_END diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h index 5921cabbb1f..0a4f1a497cd 100644 --- a/src/mame/includes/konamigx.h +++ b/src/mame/includes/konamigx.h @@ -16,58 +16,59 @@ public: m_maincpu(*this,"maincpu"), m_soundcpu(*this, "soundcpu"), m_dasp(*this, "dasp"), - m_workram(*this,"workram"), - m_psacram(*this,"psacram"), - m_subpaletteram32(*this,"subpaletteram"), m_k055673(*this, "k055673"), m_k055555(*this, "k055555"), m_k056832(*this, "k056832"), m_k054338(*this, "k054338"), + m_k056800(*this, "k056800"), + m_k054539_1(*this,"k054539_1"), + m_k054539_2(*this,"k054539_2"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_palette(*this, "palette"), + m_workram(*this,"workram"), + m_psacram(*this,"psacram"), + m_subpaletteram32(*this,"subpaletteram"), m_k053936_0_ctrl(*this,"k053936_0_ctrl",32), m_k053936_0_linectrl(*this,"k053936_0_line",32), m_k053936_0_ctrl_16(*this,"k053936_0_ct16",16), m_k053936_0_linectrl_16(*this,"k053936_0_li16",16), m_konamigx_type3_psac2_bank(*this,"psac2_bank"), - m_k056800(*this, "k056800"), - m_k054539_1(*this,"k054539_1"), - m_k054539_2(*this,"k054539_2"), + m_generic_paletteram_32(*this, "paletteram"), m_an0(*this, "AN0"), m_an1(*this, "AN1"), m_light0_x(*this, "LIGHT0_X"), m_light0_y(*this, "LIGHT0_Y"), m_light1_x(*this, "LIGHT1_X"), m_light1_y(*this, "LIGHT1_Y"), - m_eepromout(*this, "EEPROMOUT"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_generic_paletteram_32(*this, "paletteram") + m_eepromout(*this, "EEPROMOUT") { } required_device<cpu_device> m_maincpu; optional_device<cpu_device> m_soundcpu; optional_device<tms57002_device> m_dasp; - - optional_shared_ptr<UINT32> m_workram; - optional_shared_ptr<UINT32> m_psacram; - optional_shared_ptr<UINT32> m_subpaletteram32; required_device<k055673_device> m_k055673; required_device<k055555_device> m_k055555; required_device<k056832_device> m_k056832; optional_device<k054338_device> m_k054338; - optional_shared_ptr<UINT16> m_k053936_0_ctrl; - optional_shared_ptr<UINT16> m_k053936_0_linectrl; - optional_shared_ptr<UINT16> m_k053936_0_ctrl_16; - optional_shared_ptr<UINT16> m_k053936_0_linectrl_16; - optional_shared_ptr<UINT32> m_konamigx_type3_psac2_bank; optional_device<k056800_device> m_k056800; optional_device<k054539_device> m_k054539_1; optional_device<k054539_device> m_k054539_2; - optional_ioport m_an0, m_an1, m_light0_x, m_light0_y, m_light1_x, m_light1_y, m_eepromout; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + + optional_shared_ptr<UINT32> m_workram; + optional_shared_ptr<UINT32> m_psacram; + optional_shared_ptr<UINT32> m_subpaletteram32; + optional_shared_ptr<UINT16> m_k053936_0_ctrl; + optional_shared_ptr<UINT16> m_k053936_0_linectrl; + optional_shared_ptr<UINT16> m_k053936_0_ctrl_16; + optional_shared_ptr<UINT16> m_k053936_0_linectrl_16; + optional_shared_ptr<UINT32> m_konamigx_type3_psac2_bank; optional_shared_ptr<UINT32> m_generic_paletteram_32; + + optional_ioport m_an0, m_an1, m_light0_x, m_light0_y, m_light1_x, m_light1_y, m_eepromout; DECLARE_WRITE32_MEMBER(esc_w); DECLARE_WRITE32_MEMBER(eeprom_w); @@ -166,23 +167,84 @@ public: void fantjour_dma_install(); void konamigx_mixer_primode(int mode); + + typedef void (konamigx_state::*esc_cb)(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + + void tkmmpzdm_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void tbyahhoo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void daiskiss_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + + inline int K053247GX_combine_c18(int attrib); + inline int K055555GX_decode_objcolor(int c18); + inline int K055555GX_decode_inpri(int c18); + int K055555GX_decode_vmixcolor(int layer, int *color); UINT8 m_sound_ctrl; UINT8 m_sound_intck; UINT32 m_fantjour_dma[8]; int m_konamigx_current_frame; int m_gx_objdma, m_gx_primode; -}; - + emu_timer *m_dmadelay_timer; + emu_timer *m_boothack_timer; + int m_gx_rdport1_3, m_gx_syncen; + int m_gx_cfgport; + int m_suspension_active, m_resume_trigger; + int m_last_prot_op, m_last_prot_clk; + + UINT8 m_esc_program[4096]; + esc_cb m_esc_cb; + + UINT16 m_prot_data[0x20]; + + // 1st-Tier GX/MW Variables + // frequently used registers + int m_k053247_vrcbk[4]; + int m_k053247_coreg, m_k053247_coregshift, m_k053247_opset; + int m_opri, m_oinprion; + int m_vcblk[6], m_ocblk; + int m_vinmix, m_vmixon, m_osinmix, m_osmixon; + UINT8 m_gx_wrport1_0, m_gx_wrport1_1; + UINT16 m_gx_wrport2; + + // 2nd-Tier GX/MW Graphics Variables + UINT8 *m_gx_objzbuf, *m_gx_shdzbuf; + int m_layer_colorbase[4]; + INT32 m_gx_tilebanks[8], m_gx_oldbanks[8]; + int m_gx_tilemode, m_gx_rozenable, m_psac_colorbase, m_last_psac_colorbase; + int m_gx_specialrozenable; // type 1 roz, with voxel height-map, rendered from 2 source tilemaps (which include height data) to temp bitmap for further processing + int m_gx_rushingheroes_hack; + int m_gx_le2_textcolour_hack; + tilemap_t *m_gx_psac_tilemap, *m_gx_psac_tilemap2; + bitmap_ind16 *m_type3_roz_temp_bitmap; + tilemap_t *m_gx_psac_tilemap_alt; + int m_konamigx_has_dual_screen; + int m_konamigx_palformat; + bitmap_rgb32 *m_dualscreen_left_tempbitmap; + bitmap_rgb32 *m_dualscreen_right_tempbitmap; + + /* On Type-1 the K053936 output is rendered to these temporary bitmaps as raw data + the 'voxel' effect to give the pixels height is a post-process operation on the + output of the K053936 (this can clearly be seen in videos as large chunks of + scenary flicker when in the distance due to single pixels in the K053936 output + becoming visible / invisible due to drawing precision. -/*----------- defined in video/konamigx.c -----------*/ + -- however, progress on this has stalled as our K053936 doesn't seem to give + the right output for post processing, I suspect the game is using some + unsupported flipping modes (probably due to the way it's hooked up to the + rest of the chips) which is causing entirely the wrong output. - -// 1st-Tier GX/MW Variables and Functions -extern UINT8 konamigx_wrport1_0, konamigx_wrport1_1; -extern UINT16 konamigx_wrport2; + -- furthermore video/konamigx.c contains it's own implementation of + the K053936_zoom_draw named K053936GP_zoom_draw ... + */ + bitmap_ind16 *m_gxtype1_roz_dstbitmap; + bitmap_ind16 *m_gxtype1_roz_dstbitmap2; + rectangle m_gxtype1_roz_dstbitmapclip; +}; // Sprite Callbacks diff --git a/src/mame/machine/konamigx.c b/src/mame/machine/konamigx.c index f871c31257a..c88d08e90f3 100644 --- a/src/mame/machine/konamigx.c +++ b/src/mame/machine/konamigx.c @@ -41,13 +41,11 @@ Has word-wide registers as follows: */ // K055550/K053990 protection chips, perform simple memset() and other game logic operations -static UINT16 prot_data[0x20]; - READ16_MEMBER(konamigx_state::K055550_word_r) { - return(prot_data[offset]); + return(m_prot_data[offset]); } WRITE16_MEMBER(konamigx_state::K055550_word_w) @@ -56,7 +54,7 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) int src, tgt, srcend, tgtend, skip, cx1, sx1, wx1, cy1, sy1, wy1, cz1, sz1, wz1, c2, s2, w2; int dx, dy, angle; - COMBINE_DATA(prot_data+offset); + COMBINE_DATA(m_prot_data+offset); if (offset == 0 && ACCESSING_BITS_8_15) { @@ -65,13 +63,13 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) { case 0x97: // memset() (Dadandarn at 0x639dc) case 0x9f: // memset() (Violent Storm at 0x989c) - adr = (prot_data[7] << 16) | prot_data[8]; - bsize = (prot_data[10] << 16) | prot_data[11]; - count = (prot_data[0] & 0xff) + 1; + adr = (m_prot_data[7] << 16) | m_prot_data[8]; + bsize = (m_prot_data[10] << 16) | m_prot_data[11]; + count = (m_prot_data[0] & 0xff) + 1; lim = adr+bsize*count; for(i=adr; i<lim; i+=2) - space.write_word(i, prot_data[0x1a/2]); + space.write_word(i, m_prot_data[0x1a/2]); break; // WARNING: The following cases are speculation based with questionable accuracy!(AAT) @@ -82,19 +80,19 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) // gameplay. It refers to a 32x8-word list at 0x210e00 and seems to // be tied with another 13x128-byte table at 0x205080. // Both tables appear "check-only" and have little effect on gameplay. - count =(prot_data[0] & 0xff) + 1; // unknown ( byte 0x00) - i = prot_data[1]; // unknown ( byte 0x1f) - adr = prot_data[7]<<16 | prot_data[8]; // address (dword 0x210e00) - lim = prot_data[9]; // unknown ( word 0x0010) - src = prot_data[10]<<16 | prot_data[11]; // unknown (dword zero) - tgt = prot_data[12]<<16 | prot_data[13]; // unknown (dword zero) + count =(m_prot_data[0] & 0xff) + 1; // unknown ( byte 0x00) + i = m_prot_data[1]; // unknown ( byte 0x1f) + adr = m_prot_data[7]<<16 | m_prot_data[8]; // address (dword 0x210e00) + lim = m_prot_data[9]; // unknown ( word 0x0010) + src = m_prot_data[10]<<16 | m_prot_data[11]; // unknown (dword zero) + tgt = m_prot_data[12]<<16 | m_prot_data[13]; // unknown (dword zero) break; case 0xa0: // update collision detection table (Violent Storm at 0x018b42) - count = prot_data[0] & 0xff; // number of objects - 1 - skip = prot_data[1]>>(8-1); // words to skip in each entry to reach the "hit list" - adr = prot_data[2]<<16 | prot_data[3]; // where the table is located - bsize = prot_data[5]<<16 | prot_data[6]; // object entry size in bytes + count = m_prot_data[0] & 0xff; // number of objects - 1 + skip = m_prot_data[1]>>(8-1); // words to skip in each entry to reach the "hit list" + adr = m_prot_data[2]<<16 | m_prot_data[3]; // where the table is located + bsize = m_prot_data[5]<<16 | m_prot_data[6]; // object entry size in bytes srcend = adr + bsize * count; tgtend = srcend + bsize; @@ -142,8 +140,8 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) break; case 0xc0: // calculate object "homes-in" vector (Violent Storm at 0x03da9e) - dx = (short)prot_data[0xc]; - dy = (short)prot_data[0xd]; + dx = (short)m_prot_data[0xc]; + dy = (short)m_prot_data[0xd]; // it's not necessary to use lookup tables because Violent Storm // only calls the service once per enemy per frame. @@ -165,7 +163,7 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) else i = machine().rand() & 0xff; // vector direction indeterminate - prot_data[0x10] = i; + m_prot_data[0x10] = i; break; default: @@ -183,27 +181,27 @@ WRITE16_MEMBER(konamigx_state::K053990_martchmp_word_w) int mode, i, element_size = 1; UINT16 mod_val, mod_data; - COMBINE_DATA(prot_data+offset); + COMBINE_DATA(m_prot_data+offset); if (offset == 0x0c && ACCESSING_BITS_8_15) { - mode = (prot_data[0x0d]<<8 & 0xff00) | (prot_data[0x0f] & 0xff); + mode = (m_prot_data[0x0d]<<8 & 0xff00) | (m_prot_data[0x0f] & 0xff); switch (mode) { case 0xffff: // word copy element_size = 2; case 0xff00: // byte copy - src_addr = prot_data[0x0]; - src_addr |= prot_data[0x1]<<16 & 0xff0000; - dst_addr = prot_data[0x2]; - dst_addr |= prot_data[0x3]<<16 & 0xff0000; - src_count = prot_data[0x8]>>8; - //dst_count = prot_data[0x9]>>8; - src_skip = prot_data[0xa] & 0xff; - dst_skip = prot_data[0xb] & 0xff; - - if ((prot_data[0x8] & 0xff) == 2) src_count <<= 1; + src_addr = m_prot_data[0x0]; + src_addr |= m_prot_data[0x1]<<16 & 0xff0000; + dst_addr = m_prot_data[0x2]; + dst_addr |= m_prot_data[0x3]<<16 & 0xff0000; + src_count = m_prot_data[0x8]>>8; + //dst_count = m_prot_data[0x9]>>8; + src_skip = m_prot_data[0xa] & 0xff; + dst_skip = m_prot_data[0xb] & 0xff; + + if ((m_prot_data[0x8] & 0xff) == 2) src_count <<= 1; src_skip += element_size; dst_skip += element_size; @@ -223,16 +221,16 @@ WRITE16_MEMBER(konamigx_state::K053990_martchmp_word_w) break; case 0x00ff: // sprite list modifier - src_addr = prot_data[0x0]; - src_addr |= prot_data[0x1]<<16 & 0xff0000; - src_skip = prot_data[0x1]>>8; - dst_addr = prot_data[0x2]; - dst_addr |= prot_data[0x3]<<16 & 0xff0000; - dst_skip = prot_data[0x3]>>8; - mod_addr = prot_data[0x4]; - mod_addr |= prot_data[0x5]<<16 & 0xff0000; - mod_skip = prot_data[0x5]>>8; - mod_offs = prot_data[0x8] & 0xff; + src_addr = m_prot_data[0x0]; + src_addr |= m_prot_data[0x1]<<16 & 0xff0000; + src_skip = m_prot_data[0x1]>>8; + dst_addr = m_prot_data[0x2]; + dst_addr |= m_prot_data[0x3]<<16 & 0xff0000; + dst_skip = m_prot_data[0x3]>>8; + mod_addr = m_prot_data[0x4]; + mod_addr |= m_prot_data[0x5]<<16 & 0xff0000; + mod_skip = m_prot_data[0x5]>>8; + mod_offs = m_prot_data[0x8] & 0xff; mod_offs<<= 1; mod_count = 0x100; diff --git a/src/mame/video/konamigx.c b/src/mame/video/konamigx.c index 1128d55655b..6886673f1d8 100644 --- a/src/mame/video/konamigx.c +++ b/src/mame/video/konamigx.c @@ -11,71 +11,8 @@ //#define GX_DEBUG #define VERBOSE 0 -/***************************************************************************/ -/* */ -/* 2nd-Tier GX/MW Graphics Functions */ -/* */ -/***************************************************************************/ - - -static UINT8 *gx_objzbuf, *gx_shdzbuf; - - - -static int layer_colorbase[4]; -static INT32 gx_tilebanks[8], gx_oldbanks[8]; -static int gx_tilemode, gx_rozenable, psac_colorbase, last_psac_colorbase; -static int gx_specialrozenable; // type 1 roz, with voxel height-map, rendered from 2 source tilemaps (which include height data) to temp bitmap for further processing -static int gx_rushingheroes_hack; -static int gx_le2_textcolour_hack; -static tilemap_t *gx_psac_tilemap, *gx_psac_tilemap2; -static bitmap_ind16* type3_roz_temp_bitmap; -static tilemap_t* gx_psac_tilemap_alt; - -static int konamigx_has_dual_screen; INLINE void set_color_555(palette_device &palette, pen_t color, int rshift, int gshift, int bshift, UINT16 data); -static int konamigx_palformat; -static bitmap_rgb32* dualscreen_left_tempbitmap; -static bitmap_rgb32* dualscreen_right_tempbitmap; - -/* On Type-1 the K053936 output is rendered to these temporary bitmaps as raw data - the 'voxel' effect to give the pixels height is a post-process operation on the - output of the K053936 (this can clearly be seen in videos as large chunks of - scenary flicker when in the distance due to single pixels in the K053936 output - becoming visible / invisible due to drawing precision. - - -- however, progress on this has stalled as our K053936 doesn't seem to give - the right output for post processing, I suspect the game is using some - unsupported flipping modes (probably due to the way it's hooked up to the - rest of the chips) which is causing entirely the wrong output. - - -- furthermore machine/konamigx.c (!) contains it's own implementation of - the K053936_zoom_draw named K053936GP_zoom_draw ... It really shouldn't do, - epsecially not in 'machine', which isn't meant to be video related. - - - */ -static bitmap_ind16 *gxtype1_roz_dstbitmap; -static bitmap_ind16 *gxtype1_roz_dstbitmap2; -static rectangle gxtype1_roz_dstbitmapclip; - -/***************************************************************************/ -/* */ -/* 1st-Tier GX/MW Variables and Functions */ -/* */ -/***************************************************************************/ - -// global system ports access -UINT8 konamigx_wrport1_0, konamigx_wrport1_1; -UINT16 konamigx_wrport2; - -// frequently used registers -static int k053247_vrcbk[4]; -static int k053247_coreg, k053247_coregshift, k053247_opset; -static int opri, oinprion; -static int vcblk[6], ocblk; -static int vinmix, vmixon, osinmix, osmixon; void konamigx_state::konamigx_precache_registers(void) @@ -86,68 +23,68 @@ void konamigx_state::konamigx_precache_registers(void) int i; i = m_k055673->k053247_read_register(0x8/2); - k053247_vrcbk[0] = (i & 0x000f) << 14; - k053247_vrcbk[1] = (i & 0x0f00) << 6; + m_k053247_vrcbk[0] = (i & 0x000f) << 14; + m_k053247_vrcbk[1] = (i & 0x0f00) << 6; i = m_k055673->k053247_read_register(0xa/2); - k053247_vrcbk[2] = (i & 0x000f) << 14; - k053247_vrcbk[3] = (i & 0x0f00) << 6; + m_k053247_vrcbk[2] = (i & 0x000f) << 14; + m_k053247_vrcbk[3] = (i & 0x0f00) << 6; // COREG == OBJSET2+1C == bit8-11 of OPSET ??? (see p.50 last table, needs p.49 to confirm) - k053247_opset = m_k055673->k053247_read_register(0xc/2); - - i = k053247_opset & 7; if (i > 4) i = 4; - - k053247_coreg = m_k055673->k053247_read_register(0xc/2)>>8 & 0xf; - k053247_coreg =(k053247_coreg & coregmasks[i]) << 12; - - k053247_coregshift = coregshifts[i]; - - opri = m_k055555->K055555_read_register(K55_PRIINP_8); - oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON); - vcblk[0] = m_k055555->K055555_read_register(K55_PALBASE_A); - vcblk[1] = m_k055555->K055555_read_register(K55_PALBASE_B); - vcblk[2] = m_k055555->K055555_read_register(K55_PALBASE_C); - vcblk[3] = m_k055555->K055555_read_register(K55_PALBASE_D); - vcblk[4] = m_k055555->K055555_read_register(K55_PALBASE_SUB1); - vcblk[5] = m_k055555->K055555_read_register(K55_PALBASE_SUB2); - ocblk = m_k055555->K055555_read_register(K55_PALBASE_OBJ); - vinmix = m_k055555->K055555_read_register(K55_BLEND_ENABLES); - vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON); - osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES); - osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON); + m_k053247_opset = m_k055673->k053247_read_register(0xc/2); + + i = m_k053247_opset & 7; if (i > 4) i = 4; + + m_k053247_coreg = m_k055673->k053247_read_register(0xc/2)>>8 & 0xf; + m_k053247_coreg =(m_k053247_coreg & coregmasks[i]) << 12; + + m_k053247_coregshift = coregshifts[i]; + + m_opri = m_k055555->K055555_read_register(K55_PRIINP_8); + m_oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON); + m_vcblk[0] = m_k055555->K055555_read_register(K55_PALBASE_A); + m_vcblk[1] = m_k055555->K055555_read_register(K55_PALBASE_B); + m_vcblk[2] = m_k055555->K055555_read_register(K55_PALBASE_C); + m_vcblk[3] = m_k055555->K055555_read_register(K55_PALBASE_D); + m_vcblk[4] = m_k055555->K055555_read_register(K55_PALBASE_SUB1); + m_vcblk[5] = m_k055555->K055555_read_register(K55_PALBASE_SUB2); + m_ocblk = m_k055555->K055555_read_register(K55_PALBASE_OBJ); + m_vinmix = m_k055555->K055555_read_register(K55_BLEND_ENABLES); + m_vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON); + m_osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES); + m_osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON); } -INLINE int K053247GX_combine_c18(int attrib) // (see p.46) +inline int konamigx_state::K053247GX_combine_c18(int attrib) // (see p.46) { int c18; - c18 = (attrib & 0xff)<<k053247_coregshift | k053247_coreg; + c18 = (attrib & 0xff)<<m_k053247_coregshift | m_k053247_coreg; - if (konamigx_wrport2 & 4) c18 &= 0x3fff; else - if (!(konamigx_wrport2 & 8)) c18 = (c18 & 0x3fff) | (attrib<<6 & 0xc000); + if (m_gx_wrport2 & 4) c18 &= 0x3fff; else + if (!(m_gx_wrport2 & 8)) c18 = (c18 & 0x3fff) | (attrib<<6 & 0xc000); return(c18); } -INLINE int K055555GX_decode_objcolor(int c18) // (see p.59 7.2.2) +inline int konamigx_state::K055555GX_decode_objcolor(int c18) // (see p.59 7.2.2) { int ocb, opon; - opon = oinprion<<8 | 0xff; - ocb = (ocblk & 7) << 10; + opon = m_oinprion<<8 | 0xff; + ocb = (m_ocblk & 7) << 10; c18 &= opon; ocb &=~opon; - return((ocb | c18) >> k053247_coregshift); + return((ocb | c18) >> m_k053247_coregshift); } -INLINE int K055555GX_decode_inpri(int c18) // (see p.59 7.2.2) +inline int konamigx_state::K055555GX_decode_inpri(int c18) // (see p.59 7.2.2) { - int op = opri; + int op = m_opri; c18 >>= 8; - op &= oinprion; - c18 &=~oinprion; + op &= m_oinprion; + c18 &=~m_oinprion; return(c18 | op); } @@ -157,7 +94,7 @@ K055673_CB_MEMBER(konamigx_state::type2_sprite_callback) int num = *code; int c18 = *color; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); c18 = K053247GX_combine_c18(c18); *color = K055555GX_decode_objcolor(c18); *priority_mask = K055555GX_decode_inpri(c18); @@ -168,13 +105,13 @@ K055673_CB_MEMBER(konamigx_state::dragoonj_sprite_callback) int num, op, pri, c18; num = *code; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); c18 = pri = *color; - op = opri; + op = m_opri; pri = (pri & 0x200) ? 4 : pri>>4 & 0xf; - op &= oinprion; - pri &=~oinprion; + op &= m_oinprion; + pri &=~m_oinprion; *priority_mask = pri | op; c18 = K053247GX_combine_c18(c18); @@ -186,13 +123,13 @@ K055673_CB_MEMBER(konamigx_state::salmndr2_sprite_callback) int num, op, pri, c18; num = *code; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); c18 = pri = *color; - op = opri; + op = m_opri; pri = pri>>4 & 0x3f; - op &= oinprion; - pri &=~oinprion; + op &= m_oinprion; + pri &=~m_oinprion; *priority_mask = pri | op; c18 = K053247GX_combine_c18(c18); @@ -204,27 +141,27 @@ K055673_CB_MEMBER(konamigx_state::le2_sprite_callback) int num, op, pri; num = *code; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); pri = *color; *color &= 0x1f; - op = opri; + op = m_opri; pri &= 0xf0; - op &= oinprion; - pri &=~oinprion; + op &= m_oinprion; + pri &=~m_oinprion; *priority_mask = pri | op; } -static int K055555GX_decode_vmixcolor(int layer, int *color) // (see p.62 7.2.6 and p.27 3.3) +int konamigx_state::K055555GX_decode_vmixcolor(int layer, int *color) // (see p.62 7.2.6 and p.27 3.3) { int vcb, shift, pal, vmx, von, pl45, emx; - vcb = vcblk[layer]<<6; + vcb = m_vcblk[layer]<<6; shift = layer<<1; pal = *color; - vmx = vinmix>>shift & 3; - von = vmixon>>shift & 3; + vmx = m_vinmix>>shift & 3; + von = m_vmixon>>shift & 3; emx = pl45 = pal>>4 & 3; pal &= 0xf; pl45 &= von; @@ -235,7 +172,7 @@ static int K055555GX_decode_vmixcolor(int layer, int *color) // (see p.62 7.2.6 emx |= vmx; pal |= vcb; - if (gx_le2_textcolour_hack) + if (m_gx_le2_textcolour_hack) if (layer==0) pal |= 0x1c0; @@ -252,13 +189,13 @@ int K055555GX_decode_osmixcolor(int layer, int *color) // (see p.63, p.49-50 and shift = layer<<1; pal = *color; - osmx = osinmix>>shift & 3; - oson = osmixon>>shift & 3; + osmx = m_osinmix>>shift & 3; + oson = m_osmixon>>shift & 3; if (layer) { // layer 1-3 are external tile layers - scb = vcblk[layer+3]<<6; + scb = m_vcblk[layer+3]<<6; emx = pl45 = pal>>4 & 3; pal &= 0xf; pl45 &= oson; @@ -292,14 +229,14 @@ void konamigx_state::wipezbuf(int noshadow) int w = visarea.width(); int h = visarea.height(); - UINT8 *zptr = gx_objzbuf; + UINT8 *zptr = m_gx_objzbuf; int ecx = h; do { memset(zptr, -1, w); zptr += GX_ZBUFW; } while (--ecx); if (!noshadow) { - zptr = gx_shdzbuf; + zptr = m_gx_shdzbuf; w <<= 1; ecx = h; do { memset(zptr, -1, w); zptr += (GX_ZBUFW<<1); } while (--ecx); @@ -350,8 +287,8 @@ void konamigx_state::konamigx_mixer_init(screen_device &screen, int objdma) m_gx_objdma = 0; m_gx_primode = 0; - gx_objzbuf = &screen.priority().pix8(0); - gx_shdzbuf = auto_alloc_array(machine(), UINT8, GX_ZBUFSIZE); + m_gx_objzbuf = &screen.priority().pix8(0); + m_gx_shdzbuf = auto_alloc_array(machine(), UINT8, GX_ZBUFSIZE); gx_objpool = auto_alloc_array(machine(), struct GX_OBJ, GX_MAX_OBJECTS); m_k054338->export_config(&K054338_shdRGB); @@ -393,14 +330,14 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, int cltc_shdpri, /*prflp,*/ disp; // buffer can move when it's resized, so refresh the pointer - gx_objzbuf = &screen.priority().pix8(0); + m_gx_objzbuf = &screen.priority().pix8(0); // abort if object database failed to initialize objpool = gx_objpool; if (!objpool) return; // clear screen with backcolor and update flicker pulse - if (konamigx_wrport1_0 & 0x20) + if (m_gx_wrport1_0 & 0x20) m_k054338->fill_backcolor(bitmap, cliprect, m_palette->pens() + (m_k055555->K055555_read_register(0) << 9), @@ -564,7 +501,7 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, int zcode = gx_spriteram[offs] & 0xff; // invert z-order when opset_pri is set (see p.51 OPSET PRI) - if (k053247_opset & 0x10) zcode = 0xff - zcode; + if (m_k053247_opset & 0x10) zcode = 0xff - zcode; int code = gx_spriteram[offs+1]; int color = k = gx_spriteram[offs+6]; @@ -635,7 +572,7 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, if (temp3) { // determine shadow priority - spri = (k053247_opset & 0x20) ? pri : shdpri[shadow]; // (see p.51 OPSET SDSEL) + spri = (m_k053247_opset & 0x20) ? pri : shdpri[shadow]; // (see p.51 OPSET SDSEL) } } @@ -732,13 +669,13 @@ void konamigx_state::gx_draw_basic_tilemaps(screen_device &screen, bitmap_rgb32 if (j == GXMIX_BLEND_FORCE) { temp1 = 0x00; temp2 = mixerflags>>(i+16); temp3 = 3; } else { - temp1 = vinmix; - temp2 = vinmix>>i & 3; - temp3 = vmixon>>i & 3; + temp1 = m_vinmix; + temp2 = m_vinmix>>i & 3; + temp3 = m_vmixon>>i & 3; } /* blend layer only when: - 1) vinmix != 0xff + 1) m_vinmix != 0xff 2) its internal mix code is set 3) all mix code bits are internal(overriden until tile blending has been implemented) 4) 0 > alpha < 255; @@ -775,9 +712,9 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_1(screen_device &screen, bi if (j == GXMIX_BLEND_FORCE) { temp1 = 0x00; temp2 = mixerflags>>24; temp3 = 3; } else { - temp1 = osinmix; - temp2 = osinmix>>2 & 3; - temp3 = osmixon>>2 & 3; + temp1 = m_osinmix; + temp2 = m_osinmix>>2 & 3; + temp3 = m_osmixon>>2 & 3; } if (temp1!=0xff && temp2 /*&& temp3==3*/) @@ -803,7 +740,7 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_1(screen_device &screen, bi } else { - machine().device<k053250_device>("k053250_1")->draw(bitmap, cliprect, vcblk[4]<<l, 0, screen.priority(), 0); + machine().device<k053250_device>("k053250_1")->draw(bitmap, cliprect, m_vcblk[4]<<l, 0, screen.priority(), 0); } } } @@ -825,9 +762,9 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_2(screen_device &screen, bi if (j == GXMIX_BLEND_FORCE) { temp1 = 0x00; temp2 = mixerflags>>26; temp3 = 3; } else { - temp1 = osinmix; - temp2 = osinmix>>4 & 3; - temp3 = osmixon>>4 & 3; + temp1 = m_osinmix; + temp2 = m_osinmix>>4 & 3; + temp3 = m_osmixon>>4 & 3; } if (temp1!=0xff && temp2 /*&& temp3==3*/) @@ -875,7 +812,7 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_2(screen_device &screen, bi } } else - machine().device<k053250_device>("k053250_2")->draw(bitmap, cliprect, vcblk[5]<<l, 0, screen.priority(), 0); + machine().device<k053250_device>("k053250_2")->draw(bitmap, cliprect, m_vcblk[5]<<l, 0, screen.priority(), 0); } } @@ -932,7 +869,7 @@ void konamigx_state::konamigx_mixer_draw(screen_device &screen, bitmap_rgb32 &bi m_k055673->k053247_draw_single_sprite_gxcore(bitmap, cliprect, - gx_objzbuf, gx_shdzbuf, code, gx_spriteram, offs, + m_gx_objzbuf, m_gx_shdzbuf, code, gx_spriteram, offs, color, alpha, drawmode, zcode, pri, /* non-gx only */ 0,0,NULL,NULL,0 @@ -985,7 +922,7 @@ TILE_GET_INFO_MEMBER(konamigx_state::get_gx_psac_tile_info) } - colour = (psac_colorbase << 4) + col; + colour = (m_psac_colorbase << 4) + col; SET_TILE_INFO_MEMBER(0, tileno, colour, TILE_FLIPYX(flip)); } @@ -1003,7 +940,7 @@ WRITE32_MEMBER(konamigx_state::konamigx_type3_psac2_bank_w) /* handle this by creating 2 roz tilemaps instead, otherwise performance dies completely on dual screen mode if (konamigx_type3_psac2_actual_bank!=konamigx_type3_psac2_actual_last_bank) { - gx_psac_tilemap->mark_all_dirty(); + m_gx_psac_tilemap->mark_all_dirty(); konamigx_type3_psac2_actual_last_bank = konamigx_type3_psac2_actual_bank; } */ @@ -1106,7 +1043,7 @@ K056832_CB_MEMBER(konamigx_state::type2_tile_callback) { int d = *code; - *code = (gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); + *code = (m_gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); K055555GX_decode_vmixcolor(layer, color); } @@ -1118,7 +1055,7 @@ K056832_CB_MEMBER(konamigx_state::alpha_tile_callback) mixcode = K055555GX_decode_vmixcolor(layer, color); if (mixcode < 0) - *code = (gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); + *code = (m_gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); else { /* save mixcode and mark tile alpha (unimplemented) */ @@ -1165,17 +1102,17 @@ void konamigx_state::common_init() for (int i = 0; i < 8; i++) { - gx_tilebanks[i] = gx_oldbanks[i] = 0; + m_gx_tilebanks[i] = m_gx_oldbanks[i] = 0; } - machine().save().save_item(NAME(gx_tilebanks)); + machine().save().save_item(NAME(m_gx_tilebanks)); - gx_tilemode = 0; + m_gx_tilemode = 0; - gx_rozenable = 0; - gx_specialrozenable = 0; - gx_rushingheroes_hack = 0; - gx_le2_textcolour_hack = 0; + m_gx_rozenable = 0; + m_gx_specialrozenable = 0; + m_gx_rushingheroes_hack = 0; + m_gx_le2_textcolour_hack = 0; // Documented relative offsets of non-flipped games are (-2, 0, 2, 3),(0, 0, 0, 0). // (+ve values move layers to the right and -ve values move layers to the left) @@ -1187,7 +1124,7 @@ void konamigx_state::common_init() m_k056832->set_layer_offs(2, 2, 0); m_k056832->set_layer_offs(3, 3, 0); - konamigx_has_dual_screen = 0; + m_konamigx_has_dual_screen = 0; m_konamigx_current_frame = 0; } @@ -1197,7 +1134,7 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_5bpp) common_init(); if (!strcmp(machine().system().name,"tbyahhoo")) - gx_tilemode = 1; + m_gx_tilemode = 1; else if (!strcmp(machine().system().name,"crzcross") || !strcmp(machine().system().name,"puzldama")) konamigx_mixer_primode(5); else if (!strcmp(machine().system().name,"daiskiss")) @@ -1220,7 +1157,7 @@ VIDEO_START_MEMBER(konamigx_state, le2) konamigx_mixer_primode(-1); // swapped layer B and C priorities? - gx_le2_textcolour_hack = 1; // force text layer to use the right palette + m_gx_le2_textcolour_hack = 1; // force text layer to use the right palette } VIDEO_START_MEMBER(konamigx_state, konamigx_6bpp) @@ -1234,23 +1171,23 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type3) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); - gx_psac_tilemap_alt = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_alt_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); + m_gx_psac_tilemap_alt = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_alt_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); - gx_rozenable = 0; - gx_specialrozenable = 2; + m_gx_rozenable = 0; + m_gx_specialrozenable = 2; /* set up tile layers */ - type3_roz_temp_bitmap = auto_bitmap_ind16_alloc(machine(), width, height); + m_type3_roz_temp_bitmap = auto_bitmap_ind16_alloc(machine(), width, height); - //gx_psac_tilemap->set_flip(TILEMAP_FLIPX| TILEMAP_FLIPY); + //m_gx_psac_tilemap->set_flip(TILEMAP_FLIPX| TILEMAP_FLIPY); K053936_wraparound_enable(0, 1); // K053936GP_set_offset(0, -30, -1); @@ -1261,8 +1198,8 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type3) m_k056832->set_layer_offs(2, -48, 0); m_k056832->set_layer_offs(3, -48, 0); - konamigx_has_dual_screen = 1; - konamigx_palformat = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 1; } VIDEO_START_MEMBER(konamigx_state, konamigx_type4) @@ -1270,14 +1207,14 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_rozenable = 0; - gx_specialrozenable = 3; + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_rozenable = 0; + m_gx_specialrozenable = 3; m_k056832->set_layer_offs(0, -27, 0); m_k056832->set_layer_offs(1, -25, 0); @@ -1287,9 +1224,9 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4) K053936_wraparound_enable(0, 0); K053936GP_set_offset(0, -36, 1); - gx_rushingheroes_hack = 1; - konamigx_has_dual_screen = 1; - konamigx_palformat = 0; + m_gx_rushingheroes_hack = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 0; } @@ -1298,14 +1235,14 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_vsn) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_rozenable = 0; - gx_specialrozenable = 3; + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_rozenable = 0; + m_gx_specialrozenable = 3; m_k056832->set_layer_offs(0, -52, 0); m_k056832->set_layer_offs(1, -48, 0); @@ -1315,9 +1252,9 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_vsn) K053936_wraparound_enable(0, 1); // wraparound doesn't work properly with the custom drawing function anyway, see the crowd in vsnet and rushhero K053936GP_set_offset(0, -30, 0); - gx_rushingheroes_hack = 1; - konamigx_has_dual_screen = 1; - konamigx_palformat = 0; + m_gx_rushingheroes_hack = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 0; } VIDEO_START_MEMBER(konamigx_state, konamigx_type4_sd2) @@ -1325,14 +1262,14 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_sd2) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_rozenable = 0; - gx_specialrozenable = 3; + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_rozenable = 0; + m_gx_specialrozenable = 3; m_k056832->set_layer_offs(0, -29, -1); @@ -1344,9 +1281,9 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_sd2) K053936_wraparound_enable(0, 0); K053936GP_set_offset(0, -36, -1); - gx_rushingheroes_hack = 1; - konamigx_has_dual_screen = 1; - konamigx_palformat = 0; + m_gx_rushingheroes_hack = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 0; } @@ -1359,21 +1296,21 @@ VIDEO_START_MEMBER(konamigx_state, opengolf) m_k056832->set_layer_offs(2, 2+1, 0); m_k056832->set_layer_offs(3, 3+1, 0); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); // transparency will be handled manually in post-processing - //gx_psac_tilemap->set_transparent_pen(0); - //gx_psac_tilemap2->set_transparent_pen(0); + //m_gx_psac_tilemap->set_transparent_pen(0); + //m_gx_psac_tilemap2->set_transparent_pen(0); - gx_rozenable = 0; - gx_specialrozenable = 1; + m_gx_rozenable = 0; + m_gx_specialrozenable = 1; - gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); + m_gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); K053936_wraparound_enable(0, 1); @@ -1394,21 +1331,21 @@ VIDEO_START_MEMBER(konamigx_state, racinfrc) m_k056832->set_layer_offs(2, 2+1, 0); m_k056832->set_layer_offs(3, 3+1, 0); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); // transparency will be handled manually in post-processing - //gx_psac_tilemap->set_transparent_pen(0); - //gx_psac_tilemap2->set_transparent_pen(0); + //m_gx_psac_tilemap->set_transparent_pen(0); + //m_gx_psac_tilemap2->set_transparent_pen(0); - gx_rozenable = 0; - gx_specialrozenable = 1; + m_gx_rozenable = 0; + m_gx_specialrozenable = 1; - gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); + m_gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); K053936_wraparound_enable(0, 1); @@ -1428,20 +1365,20 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 /* if any banks are different from last render, we need to flush the planes */ for (dirty = 0, i = 0; i < 8; i++) { - newbank = gx_tilebanks[i]; - if (gx_oldbanks[i] != newbank) { gx_oldbanks[i] = newbank; dirty = 1; } + newbank = m_gx_tilebanks[i]; + if (m_gx_oldbanks[i] != newbank) { m_gx_oldbanks[i] = newbank; dirty = 1; } } - if (gx_tilemode == 0) + if (m_gx_tilemode == 0) { // driver approximates tile update in mode 0 for speed unchained = m_k056832->get_layer_association(); for (i=0; i<4; i++) { newbase = m_k055555->K055555_get_palette_index(i)<<6; - if (layer_colorbase[i] != newbase) + if (m_layer_colorbase[i] != newbase) { - layer_colorbase[i] = newbase; + m_layer_colorbase[i] = newbase; if (unchained) m_k056832->mark_plane_dirty(i); @@ -1456,17 +1393,17 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 } // sub2 is PSAC colorbase on GX - if (gx_rozenable) + if (m_gx_rozenable) { - last_psac_colorbase = psac_colorbase; - psac_colorbase = m_k055555->K055555_get_palette_index(6); + m_last_psac_colorbase = m_psac_colorbase; + m_psac_colorbase = m_k055555->K055555_get_palette_index(6); - if (psac_colorbase != last_psac_colorbase) + if (m_psac_colorbase != m_last_psac_colorbase) { - gx_psac_tilemap->mark_all_dirty(); - if (gx_rozenable == 3) + m_gx_psac_tilemap->mark_all_dirty(); + if (m_gx_rozenable == 3) { - gx_psac_tilemap2->mark_all_dirty(); + m_gx_psac_tilemap2->mark_all_dirty(); } } } @@ -1474,42 +1411,42 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 if (dirty) m_k056832->mark_all_tilemaps_dirty(); // Type-1 - if (gx_specialrozenable == 1) + if (m_gx_specialrozenable == 1) { - K053936_0_zoom_draw(screen, *gxtype1_roz_dstbitmap, gxtype1_roz_dstbitmapclip,gx_psac_tilemap, 0,0,0); // height data - K053936_0_zoom_draw(screen, *gxtype1_roz_dstbitmap2,gxtype1_roz_dstbitmapclip,gx_psac_tilemap2,0,0,0); // colour data (+ some voxel height data?) + K053936_0_zoom_draw(screen, *m_gxtype1_roz_dstbitmap, m_gxtype1_roz_dstbitmapclip,m_gx_psac_tilemap, 0,0,0); // height data + K053936_0_zoom_draw(screen, *m_gxtype1_roz_dstbitmap2,m_gxtype1_roz_dstbitmapclip,m_gx_psac_tilemap2,0,0,0); // colour data (+ some voxel height data?) } - if (gx_specialrozenable==3) + if (m_gx_specialrozenable==3) { - konamigx_mixer(screen, bitmap, cliprect, gx_psac_tilemap, GXSUB_8BPP,0,0, 0, 0, gx_rushingheroes_hack); + konamigx_mixer(screen, bitmap, cliprect, m_gx_psac_tilemap, GXSUB_8BPP,0,0, 0, 0, m_gx_rushingheroes_hack); } // hack, draw the roz tilemap if W is held // todo: fix so that it works with the mixer without crashing(!) - else if (gx_specialrozenable == 2) + else if (m_gx_specialrozenable == 2) { // we're going to throw half of this away anyway in post-process, so only render what's needed rectangle temprect; temprect = cliprect; temprect.max_x = cliprect.min_x+320; - if (konamigx_type3_psac2_actual_bank == 1) K053936_0_zoom_draw(screen, *type3_roz_temp_bitmap, temprect,gx_psac_tilemap_alt, 0,0,0); // soccerss playfield - else K053936_0_zoom_draw(screen, *type3_roz_temp_bitmap, temprect,gx_psac_tilemap, 0,0,0); // soccerss playfield + if (konamigx_type3_psac2_actual_bank == 1) K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap_alt, 0,0,0); // soccerss playfield + else K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap, 0,0,0); // soccerss playfield - konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, type3_roz_temp_bitmap, gx_rushingheroes_hack); + konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, m_type3_roz_temp_bitmap, m_gx_rushingheroes_hack); } else { - konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, 0, gx_rushingheroes_hack); + konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, 0, m_gx_rushingheroes_hack); } /* Hack! draw type-1 roz layer here for testing purposes only */ - if (gx_specialrozenable == 1) + if (m_gx_specialrozenable == 1) { const pen_t *paldata = m_palette->pens(); @@ -1522,12 +1459,12 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 { for (y=0;y<256;y++) { - //UINT16* src = &gxtype1_roz_dstbitmap->pix16(y); + //UINT16* src = &m_gxtype1_roz_dstbitmap->pix16(y); //UINT32* dst = &bitmap.pix32(y); // ths K053936 rendering should probably just be flipped // this is just kludged to align the racing force 2d logo - UINT16* src = &gxtype1_roz_dstbitmap2->pix16(y+30); + UINT16* src = &m_gxtype1_roz_dstbitmap2->pix16(y+30); UINT32* dst = &bitmap.pix32(256-y); for (x=0;x<512;x++) @@ -1554,7 +1491,7 @@ UINT32 konamigx_state::screen_update_konamigx_left(screen_device &screen, bitmap { int offset=0; - if (konamigx_palformat==1) + if (m_konamigx_palformat==1) { for (offset=0;offset<0x4000/4;offset++) { @@ -1578,12 +1515,12 @@ UINT32 konamigx_state::screen_update_konamigx_left(screen_device &screen, bitmap } } - screen_update_konamigx( screen, downcast<bitmap_rgb32 &>(*dualscreen_left_tempbitmap), cliprect); - copybitmap(bitmap, *dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); + screen_update_konamigx( screen, downcast<bitmap_rgb32 &>(*m_dualscreen_left_tempbitmap), cliprect); + copybitmap(bitmap, *m_dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); } else { - copybitmap(bitmap, *dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); + copybitmap(bitmap, *m_dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); } return 0; @@ -1593,13 +1530,13 @@ UINT32 konamigx_state::screen_update_konamigx_right(screen_device &screen, bitma { if (m_konamigx_current_frame==1) { - copybitmap(bitmap, *dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); + copybitmap(bitmap, *m_dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); } else { int offset=0; - if (konamigx_palformat==1) + if (m_konamigx_palformat==1) { for (offset=0;offset<0x4000/4;offset++) { @@ -1623,8 +1560,8 @@ UINT32 konamigx_state::screen_update_konamigx_right(screen_device &screen, bitma } } - screen_update_konamigx(screen, downcast<bitmap_rgb32 &>(*dualscreen_right_tempbitmap), cliprect); - copybitmap(bitmap, *dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); + screen_update_konamigx(screen, downcast<bitmap_rgb32 &>(*m_dualscreen_right_tempbitmap), cliprect); + copybitmap(bitmap, *m_dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); } return 0; @@ -1697,21 +1634,21 @@ WRITE32_MEMBER(konamigx_state::konamigx_555_palette2_w) WRITE32_MEMBER(konamigx_state::konamigx_tilebank_w) { if (ACCESSING_BITS_24_31) - gx_tilebanks[offset*4] = (data>>24)&0xff; + m_gx_tilebanks[offset*4] = (data>>24)&0xff; if (ACCESSING_BITS_16_23) - gx_tilebanks[offset*4+1] = (data>>16)&0xff; + m_gx_tilebanks[offset*4+1] = (data>>16)&0xff; if (ACCESSING_BITS_8_15) - gx_tilebanks[offset*4+2] = (data>>8)&0xff; + m_gx_tilebanks[offset*4+2] = (data>>8)&0xff; if (ACCESSING_BITS_0_7) - gx_tilebanks[offset*4+3] = data&0xff; + m_gx_tilebanks[offset*4+3] = data&0xff; } // type 1 RAM-based PSAC tilemap WRITE32_MEMBER(konamigx_state::konamigx_t1_psacmap_w) { COMBINE_DATA(&m_psacram[offset]); - gx_psac_tilemap->mark_tile_dirty(offset/2); - gx_psac_tilemap2->mark_tile_dirty(offset/2); + m_gx_psac_tilemap->mark_tile_dirty(offset/2); + m_gx_psac_tilemap2->mark_tile_dirty(offset/2); } // type 4 RAM-based PSAC tilemap @@ -1719,6 +1656,6 @@ WRITE32_MEMBER(konamigx_state::konamigx_t4_psacmap_w) { COMBINE_DATA(&m_psacram[offset]); - gx_psac_tilemap->mark_tile_dirty(offset*2); - gx_psac_tilemap->mark_tile_dirty((offset*2)+1); + m_gx_psac_tilemap->mark_tile_dirty(offset*2); + m_gx_psac_tilemap->mark_tile_dirty((offset*2)+1); } |
