summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/fmtowns_cd.xml758
-rw-r--r--src/devices/cpu/z80/z80.cpp1
-rw-r--r--src/devices/cpu/z80/z80.h1
-rw-r--r--src/devices/cpu/z80/z80.inc3
-rw-r--r--src/devices/cpu/z80/z80.lst2109
-rw-r--r--src/emu/diexec.cpp2
-rw-r--r--src/emu/resampler.cpp142
-rw-r--r--src/emu/resampler.h41
-rw-r--r--src/emu/sound.cpp66
-rw-r--r--src/emu/sound.h26
-rw-r--r--src/frontend/mame/ui/audioeffects.cpp167
-rw-r--r--src/frontend/mame/ui/audioeffects.h13
-rw-r--r--src/mame/act/victor9k.cpp31
-rw-r--r--src/mame/bmc/koftball.cpp157
-rw-r--r--src/mame/capcom/cps2.cpp55
-rw-r--r--src/mame/casio/pickytlk.cpp10
-rw-r--r--src/mame/gaelco/gaelco2.cpp169
-rw-r--r--src/mame/igs/igs011.cpp440
-rw-r--r--src/mame/mame.lst14
-rw-r--r--src/mame/misc/acefruit.cpp154
-rw-r--r--src/mame/namco/mappy.cpp2
-rw-r--r--src/mame/sega/m50dass.cpp2
-rw-r--r--src/mame/sega/model2_v.cpp3
23 files changed, 2661 insertions, 1705 deletions
diff --git a/hash/fmtowns_cd.xml b/hash/fmtowns_cd.xml
index fef4acd66c3..8f9ff162525 100644
--- a/hash/fmtowns_cd.xml
+++ b/hash/fmtowns_cd.xml
@@ -21,14 +21,12 @@ A Night in Tunisia Raison
Ablemax Eigo Able Serve 1995/6 SET(CD+FD)
Ablemax Kokugo Able Serve 1995/6 SET(CD+FD)
Ablemax Suugaku Able Serve 1995/6 SET(CD+FD)
-AD&D Heroes of the Lance Pony Canyon 1990/6 CD
Aesop World Dai-2-shuu (Denshi Ehon) Fujitsu 1993/12 CD
Aishuu to Netsujou no Chouwa Fujitsu 1995/4 CD
Alice in Wonderland DynEd Japan 1993/3 SET(CD+FD)
Amour Ver. 1.0 Kozu System 1989/11 SET(CD+FD)
AniVox Eiken 3-4-kyuu Hatsuon-Accent Ban Unity 1992/6 SET(CD+FD)
Anne no Tea Party Dennou Shoukai 1993/6 CD
-Arquelphos D.O. 1993/7 CD
Aska Base Algo 1989/5 SET(CD+FD)
Aska Word Algo 1991/1 SET(CD+FD)
* Band-kun Koei 1991/1 SET(CD+FD)
@@ -56,10 +54,8 @@ Chikyuu no Himitsu (Kankyou Kyouiku Kyouzai) Fujitsu
Chiri Jigsaw World 2 Fujitsu Ooita Software Laboratory 1994/12 SET(CD+FD)
Chotto Shita Ohanashi Fujitsu 1995/11 CD
Chuugokugo de Ajiwau: Kanshi no Sekai CSK Research Institute (CRI) 1991/4 CD
-City Lights Raison 1992/8 CD
-ClearMind: Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu CSK Research Institute (CRI) 1989/8 CD
* Crayonnage CSK Research Institute (CRI) 1991/8 SET(CD+FD)
-CRI StacCard CSK Research Institute (CRI) 1991/5 SET(CD+FD)
+* CRI StacCard CSK Research Institute (CRI) 1991/5 SET(CD+FD)
Cutie Queen Crystal Eizou 1995/2 CD
CyberSculpt (HMC-140) Fujitsu 1991/11 CD
Cyclone Express Alpha Towns Ans 1990/5 CD
@@ -72,7 +68,7 @@ Demonstration CD-ROM '90 Natsu-gou Fujitsu
Demonstration CD-ROM '91 Fuyu-gou Fujitsu 1991/11 CD×01
Demonstration CD-ROM '91 Haru-gou Fujitsu 1991/2 SET(CD+FD)
Demonstration CD-ROM '92 Fuyu-gou Fujitsu 1992/11 SET(CD+FD)
-Demonstration CD-ROM '92 Haru-gou Fujitsu 1992/2 SET(CD+FD)
+* Demonstration CD-ROM '92 Haru-gou Fujitsu 1992/2 SET(CD+FD)
Demonstration CD-ROM '93 Natsu-gou Fujitsu 1993/2 CD
Demonstration CD-ROM '94 Fuyu-gou Fujitsu 1994/11 CD
Demonstration CD-ROM '95 Fuyu-gou Fujitsu 1995/11 CD
@@ -84,7 +80,6 @@ Den V2 Fujitsu
Den V3.0 Fujitsu 1994/8 SET(CD+FD)
* Diamond Players Wolf Team 1993/6 SET(CD+FD)
Dick Amorphous 1996/1 CD
-Digital Pinup Girls Vol. 2 Transpegasus Limited 1993/6 CD
Do-Re-Mi Canvas Tokyo Shoseki 1994/12 CD
Dragon Souseiki Basho House 1993/12 CD
Dynamic Business English 1 DynEd Japan 1994/11 SET(CD+FD)
@@ -125,13 +120,11 @@ Eigo de Eigo ni Tsuyoku Naru 8 Infortech
Eigo de Eigo ni Tsuyoku Naru 9 Infortech 1990/4 CD
Eikan wa Kimi ni 3: Koukou Yakyuu Zenkoku Taikai Artdink 1993/8 SET(CD+FD)
Ei-wa-doku-ro Denki Jutsugo Daijiten Ohmsha 1990/4 CD
-Euphony 2 / SCORE V1.1 Fujitsu 1993/4 CD
Eye of the Beholder 3 Ving 1994/11 CD
Fancy Illust: Hattori Yuki no Wakuwaku Cut-shuu CSK Research Institute (CRI) 1990/3 CD
F-BASIC Compiler V1.1 Fujitsu 1990/12 CD
FIRSTHAND ACCESS(Disc1) DynEd Japan 1994/11 SET(CD+FD)
FIRSTHAND ACCESS(Disc2) DynEd Japan 1994/11 SET(CD+FD)
-FM Towns Appli Jikkou Set Fujitsu 1993/6 CD
FM Towns de Manabu School-Ace Alpha Fujitsu 1993/4 CD
FM Towns Free Ware Collection (EYE COM-ban) Fujitsu 1989/11 CD
FM Towns Paso-Rika Ver. 3 Maris 1993/11 CD
@@ -210,7 +203,6 @@ Interactive Business English 3 DynEd Japan
Interactive Business English 4 DynEd Japan 1992/7 SET(CD+FD)
Interactive Business English 5 DynEd Japan 1992/7 SET(CD+FD)
Interactive Business English 6 DynEd Japan 1992/7 SET(CD+FD)
-Iwanami Bungakukan: Natsume Souseki Iwanami Shoten 1994/2 CD
Iwanami Denshi Nihon Sougou Nendo CD-ROM Fujitsu 1993/10 CD
JAF Drive Guide JAF Shuppansha 1990/8 SET(CD+FD)
JAF Drive Guide - Best Ski 150 (Resort-hen) JAF Shuppansha 1990/12 SET(CD+FD)
@@ -228,7 +220,6 @@ Kanji Land 6-nen Fujitsu Ooita Soft
Kanjigen CD-ROM Fujitsu 1994/1 CD
Karyuugai Raison 1991/1 CD
Katsuyaku Suru Computer (CD Town) Fujitsu Ooita Software Laboratory 1992/12 CD
-Kazadama Vol. 1: Maeda Shinzo no Sekai Ki - Japan Fujitsu 1993/9 CD
Kazu ya Kimi Tashizan / Hikizan Hen Media Art 1995/1 CD
Kenkyuusha Readers Eiwa CD-ROM Fujitsu 1993/2 CD
* Kid Pix Companion Fujitsu Parex 1995/3 CD
@@ -244,7 +235,6 @@ Let's go 2-2 DynEd Japan
Little Big Adventure Electronic Arts Victor 1995/12 CD
LiveAnimation V2.1 Fujitsu 1994/5 CD
LiveMorph V1.1 Fujitsu 1994/2 CD
-LiveMovie V1.1 Fujitsu 1992/12 CD
LiveMovie V2.1 Fujitsu 1994/3 CD
M Talk Fujitsu Office Kiki 1993/6 CD
Manami no Dokomade Iku no? Wendy Magazine 1995/5 CD
@@ -256,7 +246,6 @@ Mohan Roppou CD-ROM-ban Sanshusha
Mohan Roppou Heisei 5-nendo-ban Fujitsu 1993/8 CD
Mohan Roppou Heisei 6-nendo-ban Fujitsu 1994/9 CD
Mokkoriman RPG Illusion 1994/6 CD
-Moko Fujitsu Social Science Laboratory 1995/3 CD×03
Monoshiri Jiyuugaku Bannin Isshu-hen Shinkou Human Create 1994/10 CD
Moon Crystal Orange House 1992/6 ?
Multimedia Nihon no Rekishi Dai-1-Shou: Kariya-ryou no Kurashi Tokyo Shoseki ? CD
@@ -266,7 +255,6 @@ Museum Etude Towns Victor Entertainme
Museum of Museums Fujitsu 1994/3 CD
Mushi no Mahou Tsukai Fujitsu Social Science Laboratory 1995/11 CD
Music Drill Ongaku Q&A Kawai 1992/2 CD
-Music Pro V1.3 (MIDI) Musical Plan 1995/2 CD
Music Pro V2 (MIDI) Musical Plan 1996/3 CD
Music Pro V2 (Naizou) Musical Plan 1996/3 CD
MusicPress Vol. 1: Cinema Scene Fujitsu 1993/11 CD
@@ -286,7 +274,6 @@ Nazoraa 6-nen Infortech
New Century Eiwa Fujitsu 1990/5 CD
New Century Eiwa / Shin Crown Waei Jiten Fujitsu 1993/11 CD
New Horizon CD Learning System 2 2-nen Tokyo Shoseki 1993/5 CD
-New Horizon CD Learning System 2 3-nen Tokyo Shoseki 1993/5 CD
New Horizon CD Running System 1-nen Tokyo Shoseki 1990/7 SET(CD+FD)
New Horizon CD Running System 2-nen Tokyo Shoseki 1990/7 SET(CD+FD)
New Horizon CD Running System 2-nen Tokyo Shoseki 1991/1 SET(CD+FD)
@@ -401,7 +388,6 @@ Towns Spirit Uchida Youkou
Towns Spirit Uchida Youkou 1993/4 CD
TownsFullcolor V1.1 Fujitsu 1993/3 CD
TownsGraph V1.1 Fujitsu 1993/4 CD
-TownsGraph V2.1 Fujitsu 1994/10 CD
TownsPAINT 2 V2.1 Fujitsu 1994/11 CD
Towns-Telop 2 Type A Lambda System 1995/10 SET(CD+FD)
Towns-Telop 2 Type B Lambda System 1995/10 SET(CD+FD)
@@ -2866,6 +2852,26 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="applijs">
+ <!--
+ Origin: redump.org
+ <rom name="FM Towns Appli Jikkou Set (TownsGEAR, F-BASIC386) V2.1 L20 (Japan).bin" size="62269200" crc="8d197f34" sha1="65b3fbb01677e9dbd839cf1091818d725cdd8d58"/>
+ <rom name="FM Towns Appli Jikkou Set (TownsGEAR, F-BASIC386) V2.1 L20 (Japan).cue" size="132" crc="4a98ceed" sha1="c673681ed88559b4c3cb537b3abc2bbf8b64c16d"/>
+ -->
+ <description>FM Towns Appli Jikkou Set (TownsGEAR, F-BASIC386) V2.1 L20</description>
+ <year>1993</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="B276E020"/>
+ <info name="alt_title" value="FM TOWNS アプリ実行セット(TownsGEAR,F‐BASIC386)V2.1L20" />
+ <info name="release" value="199306xx" />
+ <info name="usage" value="This disc is mainly intended to be used with the Marty console, to run software that requires TownsGEAR or F-BASIC without a mouse or keyboard"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="fm towns appli jikkou set (townsgear, f-basic386) v2.1 l20 (japan)" sha1="e4d85937887ad605b1d4614db14308fc73deb6c3" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="genchohi">
<!--
Origin: redump.org (CD) / Neo Kobe Collection (floppy)
@@ -2939,6 +2945,35 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="arquelph">
+ <!--
+ Origin: redump.org
+ <rom name="Arquelphos (Japan) (Track 01).bin" size="12348000" crc="fe143313" sha1="0b09b5db49992c565026c0dae1cba19f5f96d150"/>
+ <rom name="Arquelphos (Japan) (Track 02).bin" size="45894576" crc="cf20a8d6" sha1="a0e17db8730b19f89cbe4f1f8860a9593af8feac"/>
+ <rom name="Arquelphos (Japan) (Track 03).bin" size="32556384" crc="266a58da" sha1="0bbe7eaff8abaac75d24b8fa6675c502dc394a04"/>
+ <rom name="Arquelphos (Japan) (Track 04).bin" size="24608976" crc="744672c4" sha1="bc2a624059a87a58d16cf436a93d597c28b6117f"/>
+ <rom name="Arquelphos (Japan) (Track 05).bin" size="26735184" crc="df6d6714" sha1="76d79cc7d5aaf7a99d200062260faf397c09bf57"/>
+ <rom name="Arquelphos (Japan) (Track 06).bin" size="21974736" crc="3886c34e" sha1="c6384f82afdce01a7bd0dcf354a0200026a208b5"/>
+ <rom name="Arquelphos (Japan) (Track 07).bin" size="21215040" crc="dc87ca7b" sha1="baf1d3d1851325c2fe8d7e8e1ae5850b52a45888"/>
+ <rom name="Arquelphos (Japan) (Track 08).bin" size="22567440" crc="6da1139c" sha1="d25c31cee364da6b000bf400b07460a24d8f8ccf"/>
+ <rom name="Arquelphos (Japan) (Track 09).bin" size="32297664" crc="1bf24c53" sha1="dfce3ef9de614e97a9c1f6bcecc3d6fc04f0e1b6"/>
+ <rom name="Arquelphos (Japan) (Track 10).bin" size="47529216" crc="18fdffbd" sha1="ccc34997e974f9feba179d921ce751f33de4f095"/>
+ <rom name="Arquelphos (Japan).cue" size="1135" crc="84eb3c33" sha1="12864c760e9661f12f2b9dc5fe456a78d5917984"/>
+ -->
+ <description>Arquelphos</description>
+ <year>1993</year>
+ <publisher>ディー・オー (D.O.)</publisher>
+ <info name="serial" value="HME-181 / MTC-1056"/>
+ <info name="alt_title" value="アルキルフォス" />
+ <info name="release" value="199307xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="arquelphos (japan)" sha1="be53947d056fadeb50c32922fb4cc45aa6a7753f" />
+ </diskarea>
+ </part>
+ </software>
+
<!--
This software was found as a loose disc included with a Marty console. It seems to be a catalog for an art rental service, but
otherwise it's a complete mystery. More information would be welcome.
@@ -4762,6 +4797,36 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <!-- Shows a FMTボードが装着されていません (FMT board is not installed) error on startup, possibly referring to a MIDI board? -->
+ <software name="citylights" supported="no">
+ <!--
+ Origin: redump.org
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 01).bin" size="10231200" crc="e5cefd64" sha1="7ae3a9f94f2e23adede0c9173fadce6a95fd9321"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 02).bin" size="50575056" crc="a1c398fa" sha1="3de64a4ded1eeca9d55a16b59706d7f72988fa0e"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 03).bin" size="29094240" crc="85c75ee4" sha1="9fde37a50da20ef1a962a24a97b7339ae1cd64ef"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 04).bin" size="33222000" crc="824a6279" sha1="0798d9996e27e3f5b25be65aa9043a4b871539a8"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 05).bin" size="37761360" crc="6d2c59fa" sha1="ec48bf15336c774d49178efd9c4823b65ba693b5"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 06).bin" size="43394400" crc="da32a788" sha1="b16f55cfffdf9321c11378a492b72caa6d5e77c3"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 07).bin" size="32046000" crc="51b2e580" sha1="a24c31f5015ebb018a24f4fb7983f69fe8c7147c"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 08).bin" size="53926656" crc="5f8461e3" sha1="3c589f5f5ac99f4f490c30dcab7cc82e7b01d20c"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 09).bin" size="21744240" crc="e946d38f" sha1="a3e8d7ba061dda067f603145f54a516ce6c80274"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 10).bin" size="35785680" crc="4aeb528e" sha1="aa2856aa8dc2aa02b1b4e8607873185b9678e287"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 11).bin" size="36296064" crc="414b8972" sha1="98764d714d551d32a23832333e7488a2f8dbd36b"/>
+ <rom name="Tele Harmonium - City Lights (Japan) (Track 12).bin" size="39254880" crc="7b32c440" sha1="30ad958e87336546289b2ca054288a383490679d"/>
+ <rom name="Tele Harmonium - City Lights (Japan).cue" size="1577" crc="45e8c018" sha1="e3e824ad6658caa25cf6ccc7027dc281324c5ea5"/>
+ -->
+ <description>Tele Harmonium - City Lights</description>
+ <year>1992</year>
+ <publisher>レイゾン (Raison)</publisher>
+ <info name="serial" value="HMD-145 / THC-FMT"/>
+ <info name="release" value="199208xx" />
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="tele harmonium - city lights (japan)" sha1="ae8b4e8679febe5a9e99de5dcf7d502900dcb346" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="classrod">
<!--
Origin: redump.org
@@ -4783,6 +4848,36 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="clearmind">
+ <!--
+ Origin: redump.org
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 01).bin" size="15530256" crc="95fc42e3" sha1="df7e4fdc8124c87b2bf3fad408e3e463829aa0a0"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 02).bin" size="63802704" crc="120ac0dc" sha1="084aab544fd11079525c9797c6ca3fefc72d4282"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 03).bin" size="124757136" crc="c526fee8" sha1="7e017d52860e105e1d3f337938963d02c43e8031"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 04).bin" size="79925664" crc="50b0becb" sha1="4a5a03714af34397aed577c40eea1f9cb349b529"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 05).bin" size="95467680" crc="106c92dc" sha1="16d95c66cd0c9b0a155b16bef881799f0d9d2e29"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 06).bin" size="84754320" crc="34919d72" sha1="77183b71c8841e0c1a17a2647322df6da48038ae"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 07).bin" size="70901040" crc="413535a2" sha1="81788d6ced7082085d685a00596323fa47dbb8d7"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 08).bin" size="15676080" crc="b2f4ac46" sha1="5c3bea1a80d9cd797496e52dca1b1c2e78234b68"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 09).bin" size="25949616" crc="07dd2ec6" sha1="fe112f38bc388af93b81f7fc0dde3abfe41029d5"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 10).bin" size="28628544" crc="a376ac12" sha1="6500d89c5234f6eb8400e3d8410218d971dfa323"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 11).bin" size="24002160" crc="f0c191c4" sha1="b9706003e41b0b4e97b2459ad2c4054bd156cb74"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan) (Track 12).bin" size="4233600" crc="4580866a" sha1="aaefaba5020efb03452df764e2897d0f278e3151"/>
+ <rom name="ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu (Japan).cue" size="1878" crc="294845e6" sha1="6b36d017096b731d49fe0f3dbb85a85ce536070f"/>
+ -->
+ <description>ClearMind - Shimoguchi Yuuzan no Shuuchuuryoku Kaihatsu</description>
+ <year>1989</year>
+ <publisher>CRI</publisher>
+ <info name="serial" value="HMA-210"/>
+ <info name="alt_title" value="ClearMind 下口雄山の集中力開発" />
+ <info name="release" value="198908xx" />
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="clearmind - shimoguchi yuuzan no shuuchuuryoku kaihatsu (japan)" sha1="15fa0b540c0b4d55375c18e27b92e638b0eafc55" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="collecd">
<!--
Origin: redump.org
@@ -5779,6 +5874,111 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <!-- Missing a floppy disk -->
+ <software name="demo92sp" supported="no">
+ <!--
+ Origin: redump.org
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 01).bin" size="147823200" crc="6d9f42dc" sha1="7fcf8479d362bbe3221d09b82d6646e6dea9492e"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 02).bin" size="1234800" crc="d42c677c" sha1="37276f79e8923d659b24ed3ab916b9191e89f5c6"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 03).bin" size="23108400" crc="234ba86f" sha1="21975a1a6f16693c88e8f7b4a41ede4fd36da10e"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 04).bin" size="13182960" crc="7fe71397" sha1="9def873aeb675c9c87b4a8ecf66834819d6feca6"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 05).bin" size="23155440" crc="68368d61" sha1="6eb00b8d6ec6dbee68404ae3bcffe5b5506d6beb"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 06).bin" size="24432576" crc="6a4208f8" sha1="2b182a0d143603b8eb6fb236ac8d2ee658f9a126"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 07).bin" size="20979840" crc="35b4cca6" sha1="3cb87e79b32bda584d08ce47d0afa5078f31a295"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 08).bin" size="23148384" crc="891f404c" sha1="29d3dd7158b26958525da4c78d9313c54816b448"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 09).bin" size="12030480" crc="ff9170de" sha1="440271d337bd9a90987c26f8580f13e670896440"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 10).bin" size="9019920" crc="ced4a6af" sha1="297048fba6708f637df08aa03d41c6572d03b93c"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 11).bin" size="3335136" crc="e0f9ff61" sha1="619d096710ba60b6b06b84486af175b9d86f3e67"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 12).bin" size="23607024" crc="33b0207d" sha1="9caac49c5450943daf360da0807f32c897ce406b"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 13).bin" size="11148480" crc="009966af" sha1="6b6f367bfa76ba3d1cfba99152e0a85b9283e57f"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 14).bin" size="10391136" crc="86bf7b9e" sha1="9d4a8d6f680e95506e3daef9a436a47a15ec6082"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 15).bin" size="8848224" crc="dbaf39ef" sha1="68dc955db5e13bea825d16c9eae0043a3878e956"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 16).bin" size="69007680" crc="38b99939" sha1="686094cea98eb9bb2804918f6935aa3b02b719ca"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 17).bin" size="23073120" crc="938d172c" sha1="7bd4f3025588ca397e37cac6bd782da9ffc7c7b2"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 18).bin" size="4664016" crc="f87f4f2b" sha1="0f463374d442e080bf6bbc49faea218ce6a593be"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 19).bin" size="5092080" crc="f4209239" sha1="0c0d6a0572e7610d5ca56fbc0e5aac34eefd6025"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 20).bin" size="6373920" crc="1772755e" sha1="399a209f425abd25c02394acfac7807a5b378eb4"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 21).bin" size="60869760" crc="a4c93e10" sha1="e1eb6e9f25e1dad5c8c1467e6cf9e18c7a70b4fc"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 22).bin" size="7773360" crc="9ba85492" sha1="ea3efc45d950e57bf630fc9bdfa3ecd2f183220c"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 23).bin" size="9161040" crc="f37a0446" sha1="a178023df85b588e06aaf1baab9599242e4876fb"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 24).bin" size="7761600" crc="93fd4295" sha1="9e424917e84723ed125cff81ffff68ea0007ee99"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 25).bin" size="9513840" crc="49a65667" sha1="ad9f061fdc80d0371b1ec17859ab39dc72d47190"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 26).bin" size="7067760" crc="3b551fef" sha1="5ba2a5f8301f3fb6a27234618960187661bbd98c"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 27).bin" size="7495824" crc="1bec69f2" sha1="37254304a2d0048f98e86268bc33a0d8d5f1b1c7"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 28).bin" size="2058000" crc="6dd055d4" sha1="0e1942d2d55979bc77d2559e9088681ec159e131"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 29).bin" size="15146880" crc="f237d516" sha1="b8f91312c6d8626466a238a33dd16496aa02cdb5"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 30).bin" size="4833360" crc="25b8725f" sha1="d213a00384e8e0d8acd21c389d6ef571606f869e"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 31).bin" size="5569536" crc="c615e1b8" sha1="e7edbfb1ba610294d7dd598cd2fbe69215ede264"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 32).bin" size="3810240" crc="1e4ebd0b" sha1="6b875d2048b6018ff8a57b7ef36598b71e29e183"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 33).bin" size="35797440" crc="9660e2e5" sha1="cd91c7b583d74f6b4ed35ccbe0902339434d53cd"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 34).bin" size="11395440" crc="f7731c65" sha1="dad1ef298e62d8481cacd0578b1e50ef9c3ef128"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 35).bin" size="5249664" crc="4a81f106" sha1="3fd546467ce763aff0ad29492c9d9002652463ca"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 36).bin" size="3582096" crc="e6c77aea" sha1="221a8b0e47179ac66ef25bb1b763ecefa56a5bcf"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 37).bin" size="6049344" crc="aaa71f3c" sha1="4be53e7a7452d8197ede94019f1c011b7d4799ea"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 38).bin" size="3535056" crc="5aca1d83" sha1="e9d80e7404eaf529fb12915044a16cd33d7e4f6f"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 39).bin" size="4344144" crc="4b652073" sha1="a88c8bd694675383917eace55af5f6f9568c17b4"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 40).bin" size="3669120" crc="044b6d29" sha1="a6cf5bb89ca725c568efa0510d88cbf011388e63"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 41).bin" size="11520096" crc="9789384d" sha1="d6707c8c86dd01b55986b1f47018505567faf7ef"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 42).bin" size="11877600" crc="5f05f036" sha1="86d4954e07d14f42ab71640b7ec55e2b378af1af"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 43).bin" size="15511440" crc="2be847e0" sha1="7538e590a3cc72117418014a80329f50a4a5ce15"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan) (Track 44).bin" size="11901120" crc="002cb91e" sha1="fcd8bffd431555c9785c94a31a9e36f77f91d200"/>
+ <rom name="FM Towns Demonstration CD-ROM 1992-nen Haru-gou (Japan).cue" size="6582" crc="05b2385a" sha1="e900857c6c10ee0cbec3ad4dc72ab649aa27859d"/>
+ -->
+ <description>FM Towns Demonstration CD-ROM 1992-nen Haru-gou</description>
+ <year>1992</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="HMC-933"/>
+ <info name="alt_title" value="FM TOWNS デモンストレーションCDーROM 1992年 春号" />
+ <info name="release" value="199202xx" />
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="fm towns demonstration cd-rom 1992-nen haru-gou (japan)" sha1="7b55eb6d851b8f57c1bef642e8d4a8ff342cbfe5" />
+ </diskarea>
+ </part>
+ </software>
+
+ <software name="demo93sp">
+ <!--
+ Origin: redump.org
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 01).bin" size="348919200" crc="d961bb3f" sha1="64c5c208605af590e814fd2d96c3dec43cedec1b"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 02).bin" size="28231056" crc="1077c717" sha1="ac33fb0411b1a5be2bcefab13b1d76acdb9c47ef"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 03).bin" size="3050544" crc="94b43946" sha1="8788e4a904a6d0bb36e5dd42f5d4ef78d10b95e2"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 04).bin" size="75588576" crc="64b58001" sha1="847378de155cf0a3b686c1b837b33ac116995242"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 05).bin" size="7566384" crc="1c39db5f" sha1="1fc30168a1b36b5ee73e54cd13d82f44283f673d"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 06).bin" size="27396096" crc="41b41a65" sha1="d686c41bb42093cc1b298430b0ad3e2173658467"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 07).bin" size="6390384" crc="c1bcec04" sha1="72f05e911a3fe29189ba3ae8d4dc2eebc77d4128"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 08).bin" size="2488416" crc="15e93c62" sha1="0f349e9eb6dedcee340873b5e147ab9cd7a0ca23"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 09).bin" size="23148384" crc="c409a561" sha1="d1afb2c2aa73d106bb785509c096cb2cd49238bd"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 10).bin" size="16440480" crc="88334550" sha1="b0eeb20af59fdb4e1a57ed0ab6b65f3dc5a35d3a"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 11).bin" size="11783520" crc="d236d0e7" sha1="4a0cdae61f53388a28820198a0f8bf383923a175"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 12).bin" size="31810800" crc="831ec9bb" sha1="d4c08b39ea06c1bb5258b52636e52b7b92de3886"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 13).bin" size="21814800" crc="d0687e9f" sha1="dc11bbcb8bbbe8725723b367876df6f965032619"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 14).bin" size="11865840" crc="c9fcde6f" sha1="79638d8e01ea012f3265c8e69eb93c73b9114123"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 15).bin" size="6503280" crc="9112a45b" sha1="97792c4fc68486bec62d00ee1b06088ae183e6f2"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 16).bin" size="6326880" crc="2bc9007a" sha1="5d560a4c9255bfe9b530c676de3c0dc97c4d5b7b"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 17).bin" size="4010160" crc="351e9932" sha1="b449dd309b6f4f04191f3d942f5e362be187f460"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 18).bin" size="8368416" crc="574ddd0c" sha1="87dfe37fca327f250665e901985539641b8d8316"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 19).bin" size="3974880" crc="f3eca615" sha1="68c7e54ed6da45e60ab52b6de22e815150ce9d07"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 20).bin" size="2744784" crc="ec0e88c1" sha1="d8cfb40946ba7a1d575cf4cb4e804a76631870cf"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 21).bin" size="1147776" crc="d07b00ea" sha1="224ca8f81c6027bc5a23fe141fe7a08e2e52db5c"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 22).bin" size="1498224" crc="5d4b7bff" sha1="88b7d8ede83fd03037993b1de382d2bd5915c869"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 23).bin" size="1147776" crc="39a5721c" sha1="e7b1dfb99b192b6442c923cd6c550b1ea4d05ec1"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan) (Track 24).bin" size="1851024" crc="81f91b85" sha1="b5ab06ae0b2c93558e6b1fb03209748ee01a7063"/>
+ <rom name="FM Towns Demonstration CD-ROM 1993-nen Haru-gou (Japan).cue" size="3582" crc="d06e0811" sha1="0adbd04a77422e2ef7df7a7ba380eff1dd7fbc14"/>
+ -->
+ <description>FM Towns Demonstration CD-ROM 1993-nen Haru-gou</description>
+ <year>1993</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="HME-902"/>
+ <info name="alt_title" value="FM TOWNS デモンストレーションCDーROM 1993年 春号" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="fm towns demonstration cd-rom 1993-nen haru-gou (japan)" sha1="4ab8fba1fc70889d976df2ea4a65621eff2250e8" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="demo93w">
<!--
Origin: redump.org
@@ -6190,6 +6390,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="digipin2">
+ <!--
+ Origin: redump.org
+ <rom name="Digital Pinup Girls Vol. 2 - Lovely Shooting (Japan).bin" size="344885520" crc="63a5c540" sha1="26c9d7fab3b1e55e0f95cedd5e0d75372fc7725c"/>
+ <rom name="Digital Pinup Girls Vol. 2 - Lovely Shooting (Japan).cue" size="118" crc="78b20729" sha1="abe717b49f669f405d16ef28f03c186bacf202aa"/>
+ -->
+ <description>Digital Pinup Girls Vol. 2 - Lovely Shooting</description>
+ <year>1993</year>
+ <publisher>トランスペガサス (Transpegasus)</publisher>
+ <info name="serial" value="HME-137"/>
+ <info name="release" value="199306xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="digital pinup girls vol. 2 - lovely shooting (japan)" sha1="b8b7fc58f7dffe8fc7fa2ccbf54929dcd47d2a30" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="dodamega">
<!--
Origin: redump.org
@@ -7971,6 +8190,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="eup2sc">
+ <!--
+ Origin: redump.org
+ <rom name="Euphony II &amp; Score V1.1 L10 (Japan).bin" size="8114400" crc="ca8c1521" sha1="1b1e116fc7d80c501cefde6d8cec5f24b3865705"/>
+ <rom name="Euphony II &amp; Score V1.1 L10 (Japan).cue" size="124" crc="14e70bd9" sha1="c488dc6a0cc18b7c9909b4793dfd8e3dc9cb366e"/>
+ -->
+ <description>Euphony II / Score V1.1 L10</description>
+ <year>1993</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="B276E030"/>
+ <info name="release" value="199304xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="euphony ii &amp; score v1.1 l10 (japan)" sha1="404c3310e6eddca03b476ca1badd8815855a473f" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="eurosens">
<!--
Origin: redump.org (CD) / wiggy2k (floppy)
@@ -8682,6 +8920,36 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="fbc2120">
+ <!--
+ Origin: redump.org
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 01).bin" size="263894400" crc="ecc88cb8" sha1="8b7bca2b4244985069c405a6322f2c72581566a4"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 02).bin" size="41729184" crc="dfdf5c43" sha1="07c632f89506d3a543ea3fcbfa22a49bd43961ee"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 03).bin" size="15059856" crc="cb66c765" sha1="628f7b773a50a0b9b9011dc8602d8e12436da3fa"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 04).bin" size="24166800" crc="bd9213bc" sha1="006c5fcd90adff06b677b98017c4a69ef464b6de"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 05).bin" size="37330944" crc="5debd853" sha1="23d9e5395780a406cfe3e20210d553d1cf0f7064"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 06).bin" size="9085776" crc="5e39e97a" sha1="72c227ba97d353aefba2431ac8a93c3b4915bebd"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 07).bin" size="5491920" crc="5500d74a" sha1="7274dbf63d2db90579f79f1fadb8a6a7977ae76d"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 08).bin" size="5120304" crc="34a73d87" sha1="2a1cc41bf6b7f528efd77e38b539ea3f5e305780"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 09).bin" size="9478560" crc="547491a0" sha1="acaa5f1933d0cd48f9270520092110d13ae3a80b"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 10).bin" size="4793376" crc="e20371ea" sha1="55af96c06a9dad5c0d77caa8eb8705d3f90cb945"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 11).bin" size="16793280" crc="173b15bf" sha1="743c367f69136fb6e84c459dbce4d66cae7ca2ea"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 12).bin" size="34720224" crc="b51a094d" sha1="bd08476b38823cefc6aa5edcaa07c42ebc889fa5"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan) (Track 13).bin" size="20963376" crc="9e09fe32" sha1="2f63b84a1728104ebe2e2dae3b101c96b05a0279"/>
+ <rom name="F-BASIC386 Compiler V2.1 L20 (Japan).cue" size="1685" crc="6227b8b7" sha1="7c10d83df5af8a82533c2b4f4bc1d02786494749"/>
+ -->
+ <description>F-BASIC386 Compiler V2.1 L20</description>
+ <year>1992</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="B276C021"/>
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="f-basic386 compiler v2.1 l20 (japan)" sha1="75fc3656b6764d49ad00dd1f6a4fc356bf880136" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="finalb">
<!--
Origin: redump.org
@@ -8706,6 +8974,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <!-- Windows / FM Towns hybrid -->
+ <software name="fjournal">
+ <!--
+ Origin: redump.org
+ <rom name="Fujitsu Journal Special Edition By CD-ROM (Japan).bin" size="232495200" crc="8e7edc8a" sha1="2fc9b16f7851220184aab0c035c3c15ed24ecdf7"/>
+ <rom name="Fujitsu Journal Special Edition By CD-ROM (Japan).cue" size="115" crc="189d47f0" sha1="a36cdc1510455650dadc20ef7932304753f9b00f"/>
+ -->
+ <description>Fujitsu Journal Special Edition by CD-ROM</description>
+ <year>1994</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="HMF-523"/>
+ <info name="usage" value="Requires 4 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="fujitsu journal special edition by cd-rom (japan)" sha1="5657ff2ef22daa497d3841a7c1fd00f6e1ff8d45" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="flashb">
<!--
Origin: redump.org
@@ -9428,11 +9715,18 @@ User/save disks that can be created from the game itself are not included.
<software name="fshark">
<!--
- Origin: Neo Kobe Collection
- <rom name="Hishouzame.ccd" size="2540" crc="d022c37d" sha1="0a685e7969c98abd27f05d6028a62ff45a5f90ce"/>
- <rom name="Hishouzame.cue" size="466" crc="2978eaa2" sha1="d2d182a4560a6372c3b4ff16d07de6fa57b4b423"/>
- <rom name="Hishouzame.img" size="315948864" crc="604f9205" sha1="b5a88d02c35cf660a2cc0d99d3ff918a1582d213"/>
- <rom name="Hishouzame.sub" size="12895872" crc="b246ed6d" sha1="7b8ef1c9515fb0ba1282da6dba17eeade2cb9b1c"/>
+ Origin: redump.org
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 01).bin" size="10231200" crc="b4815477" sha1="c439a005d9d4e97402eb063dfcd7e5a6c48ae8e6"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 02).bin" size="4885104" crc="f180754f" sha1="f871d783bfb75a5f9a98e2da9983a8e180829994"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 03).bin" size="53802000" crc="b39e8551" sha1="d1505743334744c4ae91f8a4510f07a97ac28616"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 04).bin" size="52049760" crc="1691df08" sha1="6e44e6826b365c65bbc220130ff81faa72bbddab"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 05).bin" size="52825920" crc="2d154240" sha1="9a553f00323e0666963c50795e094c5f7e178355"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 06).bin" size="56412720" crc="079283b0" sha1="e4523d5d230c3419d1e8bb6064101bf71c43dee2"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 07).bin" size="64879920" crc="9c49fd97" sha1="127736953c1751a83629fe646800e9338fb38a4b"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 08).bin" size="6844320" crc="08c2fdb8" sha1="b441224496125affca217c610d61d554b0d4e93d"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 09).bin" size="3363360" crc="df844bd8" sha1="e4f9b11ff457b55f194dfc540303607efb0a8a8c"/>
+ <rom name="Hishouzame - Flying Shark (Japan) (Track 10).bin" size="10654560" crc="64ccacb2" sha1="04cdbf1224095d32b1ffa09c9199da835fd2c51b"/>
+ <rom name="Hishouzame - Flying Shark (Japan).cue" size="1262" crc="ba89752b" sha1="12aad3947623e518090cca4fb635ed1077219552"/>
-->
<description>Hishouzame / Flying Shark</description>
<year>1993</year>
@@ -9443,7 +9737,7 @@ User/save disks that can be created from the game itself are not included.
<info name="usage" value="Requires 2 MB RAM"/>
<part name="cdrom" interface="cdrom">
<diskarea name="cdrom">
- <disk name="hishouzame" sha1="4704726801f67e1cd09ba1f7475985036edff19c" />
+ <disk name="hishouzame - flying shark (japan)" sha1="c56c61dfe9e0a3fff58b54aa2158363950235d31" />
</diskarea>
</part>
</software>
@@ -11354,6 +11648,59 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="heike1r">
+ <!--
+ Origin: redump.org
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 01).bin" size="31399200" crc="d62218aa" sha1="44bdc084f430eeb1cf741b837fe6376a2bac9d3e"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 02).bin" size="12731376" crc="fb93789e" sha1="185c47423ebc06d92d68b9fc6c40ed7bfb231406"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 03).bin" size="23261280" crc="dae50a17" sha1="307facf273b3f41143992cd57da3792721e74520"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 04).bin" size="24218544" crc="1a500ddb" sha1="f94d597934ec821a470954034f80fd83bfdc52b9"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 05).bin" size="31053456" crc="00877cef" sha1="0f12b45ca5fd8d1fdfbf0c63b5165e9cdba817c2"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 06).bin" size="15318576" crc="e4deb330" sha1="956398afeb622fb426f7c55e57eb80b4610f7b3d"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 07).bin" size="31055808" crc="774ace82" sha1="b467e6244b9156d649ce5317611238b226a06541"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 08).bin" size="15163344" crc="ab156078" sha1="a36acc0f3fad761ae72421dfe0744123dcc2066a"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 09).bin" size="32982096" crc="3bfa3913" sha1="80d84db44dd2ab400e9e646b3d1bab745fae648e"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 10).bin" size="24185616" crc="1c69d316" sha1="89c2038e2d52d51e7dcaef158c20a448906f3172"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 11).bin" size="22054704" crc="486b1040" sha1="4c8356f708ebdffa210b4cbc9234a2dc8f100717"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 12).bin" size="22021776" crc="81ac17e1" sha1="97f77001baab1b941e1462fdb31caa3e99c02423"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 13).bin" size="31062864" crc="8516386a" sha1="86a70d21ea2d35fe5b95e8db1c52c4614c5f21dc"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 14).bin" size="26285952" crc="caec09ad" sha1="27066cee699c7839cf4e095b8cfc248d69061975"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 15).bin" size="8076768" crc="94dc1eff" sha1="aa734225df1aba1656b5c0475e584422ccb7beef"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 16).bin" size="22804992" crc="313d060e" sha1="d45d89915e0d5894d0795f128d1d4817b2f2db64"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 17).bin" size="16346400" crc="6cc8b731" sha1="e5296b929ec277fd570f366daebffd0b5113efac"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 18).bin" size="14998704" crc="461bb9dc" sha1="f1d44fa995fc302d762640c8035d255036faa141"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 19).bin" size="28623840" crc="2c09d61f" sha1="dc352caafe3714191bfb752a7d4cb98addae8984"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 20).bin" size="20768160" crc="f66780d3" sha1="0980d37ecc7d9a83566d3afcd1ffe92abe5862d1"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 21).bin" size="31406256" crc="0dee5725" sha1="c822cdac3b3cb5e8cf2dc1d714645f91d17dc164"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 22).bin" size="17484768" crc="89fe8942" sha1="c265ab76897b7e5a1f8eebb25ad2849b6b14f9e0"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 23).bin" size="29461152" crc="774cd696" sha1="024b90ae2d3d7e76e75ec997f4a54db73010d4c6"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 24).bin" size="28906080" crc="e3f50c2e" sha1="151e6bea815f0c8de238f4697b9915c0bbc23b80"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 25).bin" size="25272240" crc="efa97112" sha1="f8b5081cde87b31f921bd552872ae300daa1f0e2"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 26).bin" size="16593360" crc="231f8708" sha1="175bc34f7aa9f5d3ee1febb3f34f074f4756a866"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 27).bin" size="16332288" crc="35c5e0e1" sha1="78a70b07ad5428bcbb42ae1fc1b404acbcba8bab"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 28).bin" size="30183216" crc="ced9f03b" sha1="a8cedd14532afd9891b1ea2ab156ac99fa57adf2"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 29).bin" size="9377424" crc="87bb0247" sha1="8de25d3874e73acfea4d939ef3b93975a5019288"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 30).bin" size="14770560" crc="1d33b144" sha1="3f3881d6710d87d7385212f47abf01ccefb3fa4c"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 31).bin" size="4123056" crc="12edc8b4" sha1="ace2c3eb9822ccd2752c143f4039e4c7b56c8a14"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 32).bin" size="4186560" crc="4cb36324" sha1="859373d49c4960906fdae02d6f77824993012c79"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 33).bin" size="4602864" crc="17183c7e" sha1="7f92986af50c3256e83438e1e6b62274ced786d3"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 34).bin" size="4217136" crc="6c7f299e" sha1="132111f3ab4dd30d7db9629afde2e3d94ad137f9"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease) (Track 35).bin" size="4391184" crc="5cbdd965" sha1="2fcc743d6a75a9ce9a062cdd9a86057af7f29f40"/>
+ <rom name="Heike Monogatari (Joukan) (Japan) (Rerelease).cue" size="4905" crc="daf1b18c" sha1="5bc8bcf940367767822dd956e503691cc0e10768"/>
+ -->
+ <description>Heike Monogatari (Joukan) (rerelease)</description>
+ <year>1992</year>
+ <publisher>CRI</publisher>
+ <info name="serial" value="HMC-148"/>
+ <info name="alt_title" value="平家物語(上巻)" />
+ <info name="release" value="199202xx" />
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="heike monogatari (joukan) (japan) (rerelease)" sha1="a31831bcd17f24b70fd0d2c11502c425d8b88ee0" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="heike2">
<!--
Origin: redump.org
@@ -11413,6 +11760,26 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="herolanc">
+ <!--
+ Origin: redump.org
+ <rom name="Heroes of the Lance (Japan) (En,Ja).bin" size="6698496" crc="b4fb7f62" sha1="ed9ed92f74bc78fc01aca78381027e5424f72e39"/>
+ <rom name="Heroes of the Lance (Japan) (En,Ja).cue" size="101" crc="927dee57" sha1="3f242e6c26f912029870c8e503994f41718dcff8"/>
+ -->
+ <description>Advanced Dungeons &amp; Dragons - Heroes of the Lance</description>
+ <year>1990</year>
+ <publisher>ポニーキャニオン (Pony Canyon)</publisher>
+ <info name="serial" value="HMB-158 / K98B5127"/>
+ <info name="alt_title" value="ヒーロー・オブ・ランス" />
+ <info name="release" value="199006xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="heroes of the lance (japan) (en,ja)" sha1="50bb7035f4c8e6160ba3338e1020a80ca7e2ab52" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="hfetish">
<!--
Origin: redump.org
@@ -13154,6 +13521,33 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="imgfightd">
+ <!--
+ Origin: redump.org
+ <rom name="ImageFight (Japan) (Demo) (Track 1).bin" size="10231200" crc="f53bfcef" sha1="c8c87d224a068321f3287777c4070d5a80f7fce3"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 2).bin" size="2822400" crc="85090d9a" sha1="ef4461e567432eedafab42a3532f43e3fc7d54be"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 3).bin" size="9525600" crc="3b5094a8" sha1="9a2fdeb4e46be3ee271cca7e5e8680c071541b94"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 4).bin" size="9525600" crc="390032f5" sha1="63dfd13c0e3131d9deef7c0945f9ca9b0e9a3111"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 5).bin" size="9525600" crc="1d1cc519" sha1="b92f212e73642ffb46bb48bc907d171473c63900"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 6).bin" size="9525600" crc="7ee5f374" sha1="2074eea94287040d036695370196236176cfd9ac"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 7).bin" size="9525600" crc="8465b2bf" sha1="7c7056e7bce811136d7d03313f305c04275cecab"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 8).bin" size="9525600" crc="07e9a82f" sha1="4716c13df9a2dc48a21b1ccbc193395ff046a8de"/>
+ <rom name="ImageFight (Japan) (Demo) (Track 9).bin" size="9525600" crc="b7b3f799" sha1="f24e84208fae98b3484a8ac25134461bb8b1605a"/>
+ <rom name="ImageFight (Japan) (Demo).cue" size="1053" crc="afc351aa" sha1="f77219ac71b2453e9ed9df918605d3d39afa0253"/>
+ -->
+ <description>Image Fight (demo)</description>
+ <year>1990</year>
+ <publisher>ビング (Ving)</publisher>
+ <info name="serial" value="HMB-927"/>
+ <info name="alt_title" value="イメージファイト" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="imagefight (japan) (demo)" sha1="7cfddc7f4a9da8abcaeb2b370b45373ce607030e" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="imgpower">
<!--
Origin: redump.org
@@ -14234,6 +14628,34 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="kijapan">
+ <!--
+ Origin: redump.org
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 1).bin" size="63151200" crc="84f5e823" sha1="e9a27d434de2bc9b57b8f94199c7190079954005"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 2).bin" size="32281200" crc="ff9ada44" sha1="f3b525466ebf60f79257652eefffe0444f6d1fde"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 3).bin" size="64209600" crc="edf1bb90" sha1="43579eaec5910f9aa553960f3306b0b6a72a9d08"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 4).bin" size="61387200" crc="5a9d4ff2" sha1="0bc243e64408f13e98b2368ab2f867123fe4f246"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 5).bin" size="74617200" crc="778ff50b" sha1="2be173d0091c5cfb474eca8aaf107e676d5aa3ca"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 6).bin" size="34927200" crc="5e5366dc" sha1="5f5fd9778287a89062dc51384ba090deeffb6d1c"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 7).bin" size="62092800" crc="4daf9603" sha1="852460acff582e7ad013d5baf0fdd7f1ef598bf3"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 8).bin" size="48686400" crc="5c6ec011" sha1="09f26a07777a357ca6f21cf5c338764d5aec406e"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan) (Track 9).bin" size="62092800" crc="b4f1e940" sha1="5f8579f18cfb168e8bc8528c8e13b6434da1fbf1"/>
+ <rom name="Fouge Vol. 1 - Ki - Japan - Maeda Shinzo no Sekai (Japan).cue" size="1341" crc="31e66984" sha1="50e77bfba428351dfae39c3a3060ed993468777e"/>
+ -->
+ <description>Fouge Vol. 1 - Ki - Japan - Maeda Shinzou no Sekai</description> <!-- "Fouge" is written between the kanji for 風珠 -->
+ <year>1993</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="HME-165 / A2760470 / BGV-010"/>
+ <info name="alt_title" value="風珠Vol.1 季-JAPAN 前田真三の世界" />
+ <info name="release" value="199309xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="fouge vol. 1 - ki - japan - maeda shinzo no sekai (japan)" sha1="af1d775128ca4b26e5c7a403941b5bd4045483b9" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="kindanke">
<!--
Origin: redump.org
@@ -15915,6 +16337,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="livemov11">
+ <!--
+ Origin: redump.org
+ <rom name="LiveMovie V1.1 L10 (Japan).bin" size="10231200" crc="9d14acca" sha1="95ac4f5c94988456debcc8dc32f5f8dc96887c3b"/>
+ <rom name="LiveMovie V1.1 L10 (Japan).cue" size="92" crc="eab0c0f4" sha1="869453a0a1fbe36b2a2a8547a2d07440376f4b5a"/>
+ -->
+ <description>LiveMovie V1.1 L10</description>
+ <year>1992</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="FMB-2001 / B276E170"/>
+ <info name="release" value="199212xx" />
+ <info name="usage" value="Requires 4 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="livemovie v1.1 l10 (japan)" sha1="feeab19eb349bdf7bbfc4f4c9500912d5e66ca57" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="lodoss">
<!--
Origin: redump.org (CD) / Neo Kobe Collection (floppy)
@@ -17003,7 +17444,7 @@ User/save disks that can be created from the game itself are not included.
<rom name="Many Colors (Japan) (Rev A).bin" size="20815200" crc="9d99fbf9" sha1="171037b28c4dbe5031229a56f5e22f13883b514a"/>
<rom name="Many Colors (Japan) (Rev A).cue" size="93" crc="7b8057bb" sha1="5f44524313116e07a5de07d136fd6eb018d4daa4"/>
-->
- <description>Many Colors</description>
+ <description>Many Colors (HMD-225A)</description>
<year>1993</year>
<publisher>アモルファス (Amorphous)</publisher>
<info name="serial" value="HMD-225A"/>
@@ -17016,6 +17457,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="manycolo" cloneof="manycol">
+ <!--
+ Origin: redump.org
+ <rom name="Many Colors (Japan).bin" size="20815200" crc="9abab34b" sha1="1cf5256eb2dfbde9eab858cb6548ef5172352711"/>
+ <rom name="Many Colors (Japan).cue" size="85" crc="6a2e31e3" sha1="7dc3e53b60b641d6f7cb25ec8ff9f56431fdc83e"/>
+ -->
+ <description>Many Colors (HMD-225)</description>
+ <year>1993</year>
+ <publisher>アモルファス (Amorphous)</publisher>
+ <info name="serial" value="HMD-225"/>
+ <info name="release" value="199302xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="many colors (japan)" sha1="4e0ac73bbf195dbdc99ee63682a4c5a2beb0c785" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="manycol2">
<!--
Origin: redump.org
@@ -18126,6 +18586,45 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <!-- Windows / FM Towns hybrid. The third disc is in EPWING format. -->
+ <!-- Mislabeled in the Redump database -->
+ <software name="moko">
+ <!--
+ Origin: redump.org
+ <rom name="Iwanami Bungakukan - Natsume Souseki (Japan) (Dougen Zenji no Shougai to Shisou).bin" size="338335200" crc="d567309b" sha1="8187f33c9a77eb065188b04589d7521d64a7b8c3"/>
+ <rom name="Iwanami Bungakukan - Natsume Souseki (Japan) (Dougen Zenji no Shougai to Shisou).cue" size="146" crc="8292d57a" sha1="6ca7c01c2f33ae559660a8424814f15be29caa0a"/>
+ <rom name="Iwanami Bungakukan - Natsume Souseki (Japan) (Eiheiji ni Ima mo Ikiru Dougen Zenshi).bin" size="391255200" crc="311beaf6" sha1="312b216517f890685975e319a10c7762238ef08d"/>
+ <rom name="Iwanami Bungakukan - Natsume Souseki (Japan) (Eiheiji ni Ima mo Ikiru Dougen Zenshi).cue" size="150" crc="f1b3f279" sha1="94ca3e0734fbd698924a9871a6f17aa760119c0a"/>
+ <rom name="Iwanami Bungakukan - Natsume Souseki (Japan) (Dougen Zenshi-cho - Shouhougenzou).bin" size="20815200" crc="aea1e0f2" sha1="ee86f25d3df2f1d5db7afed0d9a6fc5ecd4c3b32"/>
+ <rom name="Iwanami Bungakukan - Natsume Souseki (Japan) (Dougen Zenshi-cho - Shouhougenzou).cue" size="146" crc="9f18f2ea" sha1="7f4549f63b8a445dafd1746b3385e9e21efb7d55"/>
+ -->
+ <description>Moko - Dougen Zenji 750-kai Daionki Kinen</description>
+ <year>1995</year>
+ <publisher>富士通ソーシアルサイエンスラボラトリ (Fujitsu Social Science Laboratory)</publisher>
+ <info name="serial" value="HMG-502"/>
+ <info name="alt_title" value="慕古 道元禅師750回大遠忌記念" />
+ <info name="release" value="199503xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom1" interface="cdrom">
+ <feature name="part_id" value="道元禅師の生涯と思想 / Dougen Zenji no Shougai to Shisou"/>
+ <diskarea name="cdrom">
+ <disk name="moko - dougen zenji 750-kai daionki kinen (japan) (dougen zenji no shougai to shisou)" sha1="5c3fa3cc2a7eb147fc98ba3583bd31b87defc7dd" />
+ </diskarea>
+ </part>
+ <part name="cdrom2" interface="cdrom">
+ <feature name="part_id" value="永平寺に今も生きる 道元禅師 / Eiheiji ni Ima mo Ikiru - Dougen Zenji"/>
+ <diskarea name="cdrom">
+ <disk name="moko - dougen zenji 750-kai daionki kinen (japan) (eiheiji ni ima mo ikiru - dougen zenji)" sha1="68b18be0fd1714b74debf3602d2af0e63e5ed02f" />
+ </diskarea>
+ </part>
+ <part name="cdrom3" interface="cdrom">
+ <feature name="part_id" value="道元禅師著 正法眼蔵 / Dougen Zenji-cho - Shoubou Genzou"/>
+ <diskarea name="cdrom">
+ <disk name="moko - dougen zenji 750-kai daionki kinen (japan) (dougen zenji-cho - shoubou genzou)" sha1="26581b3bd70a996ec02b5e9b20e171b15c8be81c" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="monkey">
<!--
Origin: redump.org
@@ -18719,6 +19218,26 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="musicpro13m" supported="partial">
+ <!--
+ Origin: redump.org
+ <rom name="Music Pro-Towns v1.3 (MIDI Ongenban) (Japan).bin" size="29056608" crc="7bcb9049" sha1="9005e763b85699d3d18c47fc867251a487703b97"/>
+ <rom name="Music Pro-Towns v1.3 (MIDI Ongenban) (Japan).cue" size="110" crc="2a26e15b" sha1="9743e7fc687ddcc16b0dfa5df71cc41e7bb592f3"/>
+ -->
+ <description>Music Pro-Towns v1.3 (MIDI Ongenban)</description>
+ <year>1995</year>
+ <publisher>Musical Plan</publisher>
+ <info name="serial" value="MTC-1118"/>
+ <info name="alt_title" value="ミュージック・プロv1.3 (TOWNS/MIDI音源版)" /> <!-- Both titles are used interchangeably throughout the program and the documentation -->
+ <info name="release" value="199502xx" />
+ <info name="usage" value="Requires 2 MB RAM. The MIDI version requires a MIDI interface." />
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="music pro-towns v1.3 (midi ongenban) (japan)" sha1="6610dd1cb2c7c7d6736fd695c085c2b726eff191" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="mustowns">
<!--
Origin: redump.org
@@ -19699,6 +20218,62 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="nhorz2e3">
+ <!--
+ Origin: redump.org
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 01).bin" size="10231200" crc="9d19a14d" sha1="762eb5bb863717a8217f0c3b0207a90e0b264107"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 02).bin" size="4445280" crc="6a341557" sha1="eb1e2ab15049d7d9abf9904e5d35b41d7edd5002"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 03).bin" size="22214640" crc="e2d25de0" sha1="76f00b6a252548969a3ab3fe052ee678a7c46b9e"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 04).bin" size="22807344" crc="418612a3" sha1="2c5b576dcf52f0fe5d51e8472f7678303f4b5cbc"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 05).bin" size="22104096" crc="65789e77" sha1="857ef5abdd22c3b5ab201a8e83abf06759111315"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 06).bin" size="8431920" crc="a6156210" sha1="c52dff986e6667f32bc0e483e01b9808ab20c0f9"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 07).bin" size="25476864" crc="4f643747" sha1="a04d8af1df05703c8fed2c915737bb42ad9f61e9"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 08).bin" size="39050256" crc="598fd844" sha1="a9f5a98087bfe6678a7b0fb304c1da45c54bd30b"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 09).bin" size="5668320" crc="07616a05" sha1="fe553e1db832aabe9bdd69392b5074c42c5893f2"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 10).bin" size="20956320" crc="257be1c1" sha1="efff271b3dc7290232d3a699c86451a7318d7c50"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 11).bin" size="43417920" crc="93f287c1" sha1="44a5fdc6ebcc8e0b73aec5f63444ded26ca02ddb"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 12).bin" size="35555184" crc="b195bfd7" sha1="e7e2e51a441af86ab7c0a2c81d9abd51cd16c09b"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 13).bin" size="8408400" crc="1d1ee017" sha1="40fe7da61621942ece0044d89fba85811bbcfb45"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 14).bin" size="6839616" crc="4c1aef95" sha1="e1597824dbfcbad9bc0973bb85129bd4c422192d"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 15).bin" size="18710160" crc="3c32d153" sha1="cad2461224349392c19330cf29bd794862753b4b"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 16).bin" size="22101744" crc="13f5771c" sha1="a529ca698bfbfcd0c9cebafdd947e7ce6a3f7bf4"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 17).bin" size="60516960" crc="7a9e55b7" sha1="2babad130645972f27f5c38a62967e59564537a7"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 18).bin" size="7486416" crc="3db5bb26" sha1="4918bbdb4a6add6bf5bb65af69173e6f290b6c11"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 19).bin" size="8032080" crc="13a0822d" sha1="8b3de7beef79e0d68bb9fde1b0660274ae490679"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 20).bin" size="37072224" crc="bcf7fa59" sha1="b934f382cdfedcda5aafc4aff330a9bd46c2cec8"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 21).bin" size="6397440" crc="b5271d2b" sha1="60f802168910082118f1388401654cf1185ada73"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 22).bin" size="12947760" crc="f5c83526" sha1="30e385490131acf751345d3164226b12ed134bc2"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 23).bin" size="15636096" crc="da34ec62" sha1="fabaab77d36e6685acb7a88c212060121f26d28f"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 24).bin" size="12900720" crc="c407957d" sha1="c53a805c14fba2f1aa84a6153e0cda5a9e063bdd"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 25).bin" size="5256720" crc="59ba0858" sha1="df41f4bea9cefc0d3773e960df227ce12a741ccd"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 26).bin" size="18385584" crc="99fdcfdb" sha1="14385e2715e1f91be89e4ed15deb0f24873dbffb"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 27).bin" size="23432976" crc="632d2d1e" sha1="d3946b6c83b349cee7d9b0086d23002a859aff52"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 28).bin" size="11611824" crc="7dbb6a70" sha1="18057b3274cc8d61d96889c26d083efac0f8c48d"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 29).bin" size="17910480" crc="aee3e534" sha1="a96a5b817a20b86617dd565dd99c73bfaef0f1d5"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 30).bin" size="26420016" crc="202b5bb5" sha1="fe283d82301e8f546d8c94740dc03b87cd92dda6"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 31).bin" size="3892560" crc="f2221644" sha1="9e38248006451e649408fd90611a4a18c091993a"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 32).bin" size="12776064" crc="d3ec026e" sha1="355c769e1d27ce2c1138a4bd2895d5d38022f3fe"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 33).bin" size="11748240" crc="8204a7ce" sha1="3aaa097a33dd0361e076ce63ed448fec67084086"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 34).bin" size="31434480" crc="32d8f5b5" sha1="55c126fb202fcd26f0a12381f7e223dde8b0b7a0"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 35).bin" size="5451936" crc="9d4cc21c" sha1="a4473b9dcdebd3c231f64fdf2388162324b06237"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 36).bin" size="28840224" crc="6ae9404f" sha1="3ee171020987405c81038580c79d0e7387fca094"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (Track 37).bin" size="49352016" crc="ce8a8d4e" sha1="1d82fc8128e0f3f83cd239c60e352ab0755e0c9b"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan).cue" size="4912" crc="f746dee9" sha1="ebf291eb6b029fdbc6b70f839eae7b880014e7a2"/>
+ -->
+ <description>CD Learning System II - New Horizon English Course 3</description>
+ <year>1993</year>
+ <publisher>東京書籍 (Tokyo Shoseki)</publisher>
+ <info name="serial" value="HMD-188"/>
+ <info name="alt_title" value="CD ラーニングシステム Ⅱ NEW HORIZON 3年" />
+ <info name="release" value="199305xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="cd learning system ii - new horizon english course 3 (japan)" sha1="15c3610df64a1a6110fa96640248995d92ebc519" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="nihongo1">
<!--
Origin: redump.org
@@ -19720,6 +20295,62 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="nhorz2e3m">
+ <!--
+ Origin: redump.org
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 01).bin" size="10231200" crc="bc566918" sha1="0ed82dbb14143da7de859acb5197ba6da600f695"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 02).bin" size="4445280" crc="095327f0" sha1="a3bc91cf4bece34f750e15d5e7644cf2b0bb9217"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 03).bin" size="22214640" crc="729ccbb5" sha1="954521fba75ac7c6b8e479062f72301ec3f98e5e"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 04).bin" size="22807344" crc="454aae70" sha1="916ef7d0df2b1cd6ae4c9ed55c47bf8fa5c29c4b"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 05).bin" size="22104096" crc="ee59f14e" sha1="36afe76c86af7e0fed27dd80a10ac0b98c64977a"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 06).bin" size="8431920" crc="54be896a" sha1="4b40e7f9aa36b43b48fcfde3c9f9814b4e5d36bd"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 07).bin" size="25476864" crc="09ce2110" sha1="ce6d5bfd3ef76e2a6752d954bd7005ad6d20ab46"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 08).bin" size="39050256" crc="01148fcd" sha1="01c2de6b156bc05a1d1a6a23f38357ce2457e53e"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 09).bin" size="5668320" crc="74be4da7" sha1="763f107a1c246554c94dfd36fb60ffed90366009"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 10).bin" size="20956320" crc="b3ea3a48" sha1="65ece3cd93b66ae7c5bc06038ea05e90aa81dba2"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 11).bin" size="43417920" crc="1deb5803" sha1="cceb427a6077cf8bcfd5e145ac8a60a1b14bab23"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 12).bin" size="35555184" crc="63b34bbe" sha1="53e242e408847aa35637ca8949f1faa658e3cb74"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 13).bin" size="8408400" crc="e3180c38" sha1="fb24be17c84a4eb469480598e9a7b0b5069209c4"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 14).bin" size="6839616" crc="a4882d01" sha1="b40a710a6d596c838e4abdab22322b4363117526"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 15).bin" size="18710160" crc="71b990a8" sha1="f2ccaabb2889f22f009b339d11ebaf3ae59340ed"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 16).bin" size="22101744" crc="29ef75d9" sha1="96113e41011544498b474cc0aa0a1e48a7dfa53b"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 17).bin" size="60516960" crc="3b278e3d" sha1="0c5d7c9f92029c098a89df627b753a69eb66e563"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 18).bin" size="7486416" crc="282673a7" sha1="35860853d2597ce3092576f7a9011252fc02036e"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 19).bin" size="8032080" crc="713ecd81" sha1="fe51b8651bffc5e085e2f4ab564d811fedc90585"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 20).bin" size="37072224" crc="0f313dfc" sha1="c6b5c376f8024763e603c50604fd87a8e7265edd"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 21).bin" size="6397440" crc="ff5a8238" sha1="1014296745bc31979bb78aae2b539dc4dc564d7f"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 22).bin" size="12947760" crc="7214ad30" sha1="7245a7e8e0ae81a7f9a161a83da918449a005e09"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 23).bin" size="15636096" crc="b5820674" sha1="744a241a9cf19cd4aabbe5e6ee4258ed882376b4"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 24).bin" size="12900720" crc="9fa97360" sha1="b2bb6148dcde5c8e9dec86777862e9afcd33f14c"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 25).bin" size="5256720" crc="62aaac41" sha1="8454d2b652a884896177270f3bb6e7c72fb06307"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 26).bin" size="18385584" crc="4b93c20c" sha1="17e5aa3e80a957a4ecac5801bd4ad25c1a18c04f"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 27).bin" size="23432976" crc="a1c31759" sha1="5ec96de97c6a4db65c9094e1eef4cd37756ac9bb"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 28).bin" size="11611824" crc="ce1c9d9d" sha1="18c0ef954d9a749c038882bfb76ac1940a3e3379"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 29).bin" size="17910480" crc="5f3108d5" sha1="0b9363234359162b7f25343e041b34ad767d5d98"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 30).bin" size="26420016" crc="46004ab5" sha1="b3cba02ec816b096f2914b7901b7a3cf9b81b034"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 31).bin" size="3892560" crc="b55c1401" sha1="f6f4389e1670c756bbea511b8a2acff3452ac47f"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 32).bin" size="12776064" crc="74af7b75" sha1="475192ceb2c859ccd54b60e932e197022070bef4"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 33).bin" size="11748240" crc="c273ab77" sha1="f52283e4496f211d97c644fbc8520f9cbbbc49a5"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 34).bin" size="31434480" crc="0c1d920a" sha1="0214e0dc6274fcd01a5cc05f5e809c21112517d7"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 35).bin" size="5451936" crc="72aac0b6" sha1="4055045d01dedeb4c50e5d0fb009956db2e2ef4d"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 36).bin" size="28840224" crc="ecb2ce3f" sha1="2fb36fceda3d20b52e290f5c412e82820cb4ad4e"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty) (Track 37).bin" size="49352016" crc="fdee206e" sha1="7b625bf33e4ace3c90b74a9afedbf1fba61ce34d"/>
+ <rom name="CD Learning System II - New Horizon English Course 3 (Japan) (FM Towns Marty).cue" size="5564" crc="167cf123" sha1="1274ffcff0bf1e8dffe09766a7447b167be44cbe"/>
+ -->
+ <description>CD Learning System II - New Horizon English Course 3 (FM Towns Marty version)</description>
+ <year>1993</year>
+ <publisher>東京書籍 (Tokyo Shoseki)</publisher>
+ <info name="serial" value="HME-176"/>
+ <info name="alt_title" value="CD ラーニングシステム Ⅱ NEW HORIZON 3年" />
+ <info name="release" value="199305xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="cd learning system ii - new horizon english course 3 (japan) (fm towns marty)" sha1="e39a2eed4d34eb3f5a9b7df06891a04b9d407631" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="nihonmb1">
<!--
Origin: redump.org
@@ -21113,6 +21744,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="nsouseki">
+ <!--
+ Origin: redump.org
+ <rom name="Multimedia de Souseki no Subete o! Iwanami Bungakukan - Natsume Souseki (Japan).bin" size="292294800" crc="af007178" sha1="68d5d0c3dd0575522945b5959383d636d9a214f3"/>
+ <rom name="Multimedia de Souseki no Subete o! Iwanami Bungakukan - Natsume Souseki (Japan).cue" size="168" crc="6d547edf" sha1="b70524ceb1d725402a481aee3300cf85e5d99ef2"/>
+ -->
+ <description>Iwanami Bungakukan - Natsume Souseki</description>
+ <year>1994</year>
+ <publisher>岩波書店 (Iwanami Shoten)</publisher>
+ <info name="alt_title" value="岩波文学館 夏目漱石" />
+ <info name="release" value="199402xx" />
+ <info name="usage" value="Requires 2 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="multimedia de souseki no subete o iwanami bungakukan - natsume souseki (japan)" sha1="294e4b51082b574ef9d52a0f28f7e1e503076396" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="ntenki">
<!--
Origin: redump.org
@@ -26601,9 +27251,14 @@ User/save disks that can be created from the game itself are not included.
<software name="ssf2d" cloneof="ssf2">
<!--
- Origin: Neo Kobe Collection
- <rom name="Super Street Fighter II (Sample Disc).bin" size="33311376" crc="e51369b5" sha1="813e8435518d71468f05fe1b2977a71a304ee4a8"/>
- <rom name="Super Street Fighter II (Sample Disc).cue" size="421" crc="df35d025" sha1="a3aaa59d86716feda3b29e594d456810c2b703db"/>
+ Origin: redump.org
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo) (Track 1).bin" size="6964272" crc="5420d2c7" sha1="38bbc465f7998a7e901406e01296b96877957f42"/>
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo) (Track 2).bin" size="13582800" crc="9ef64003" sha1="3baba07695c1f703ea1282c3a11467a3a6a172b1"/>
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo) (Track 3).bin" size="4398240" crc="24e089b0" sha1="d593633ce754ae71172278370b7926de0902620a"/>
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo) (Track 4).bin" size="6526800" crc="0e21469b" sha1="c7851a56ec326d76ab193af850b6c884a1983d46"/>
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo) (Track 5).bin" size="1060752" crc="4186556d" sha1="2ce8667e28bcf0f0fa84bfecf50955098c8c18f1"/>
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo) (Track 6).bin" size="1131312" crc="505cb334" sha1="e1317aebde3e461404b0d1574ffa93ec5c4f207d"/>
+ <rom name="Super Street Fighter II - The New Challengers (Japan) (Demo).cue" size="929" crc="fef55af2" sha1="60579b7a1ca25514ed048a8701cac402034c4c4d"/>
-->
<description>Super Street Fighter II - The New Challengers (sample disc)</description>
<year>1994</year>
@@ -26611,7 +27266,7 @@ User/save disks that can be created from the game itself are not included.
<info name="usage" value="Requires 4 MB RAM"/>
<part name="cdrom" interface="cdrom">
<diskarea name="cdrom">
- <disk name="super street fighter ii (sample disc)" sha1="6eae776377e80ae43950f47c4f930df36b63c6d6" />
+ <disk name="super street fighter ii - the new challengers (japan) (demo)" sha1="dff91c19169ab010170b7c53e791f61e3660ddde" />
</diskarea>
</part>
</software>
@@ -26799,6 +27454,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <!-- Missing a floppy disk -->
+ <software name="staccard" supported="no">
+ <!--
+ Origin: redump.org
+ <rom name="CRI StacCard (Japan).bin" size="31399200" crc="7dc82293" sha1="e7e854db13c74452a8cc7424e0e966e40b532a5c"/>
+ <rom name="CRI StacCard (Japan).cue" size="86" crc="c46b1696" sha1="172c377b45cccb601ba9dacdd7e0f99f7ab7fc55"/>
+ -->
+ <description>CRI StacCard</description>
+ <year>1991</year>
+ <publisher>CRI</publisher>
+ <info name="serial" value="HMC-112 / T2047-105"/>
+ <info name="release" value="199105xx" />
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="cri staccard (japan)" sha1="155a4ac8980a459ec3a25585c52392bcfb955754" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="startword">
<!--
Origin: redump.org
@@ -26920,21 +27594,20 @@ User/save disks that can be created from the game itself are not included.
<software name="strikpls">
<!--
- Origin: Neo Kobe Collection
- <rom name="Strike Commander Plus.ccd" size="783" crc="43cb88e0" sha1="75987bb1be0b59730854bc118c18ca59f644da35"/>
- <rom name="Strike Commander Plus.cue" size="85" crc="d3f9e194" sha1="7cb8ae66d1f02abf530e949b1d73dcbb22afa6ed"/>
- <rom name="Strike Commander Plus.img" size="94218768" crc="74939c73" sha1="3a8151bbc1ff1f34e9728ddbd2cbf987d2c2158c"/>
- <rom name="Strike Commander Plus.sub" size="3845664" crc="6860d444" sha1="3a8439fcbc5c5ff809fd1305d64eb4e9f660edf9"/>
+ Origin: redump.org
+ <rom name="Strike Commander Plus (Japan).bin" size="94218768" crc="74939c73" sha1="3a8151bbc1ff1f34e9728ddbd2cbf987d2c2158c"/>
+ <rom name="Strike Commander Plus (Japan).cue" size="118" crc="bce09204" sha1="ce46d7acea8a7660558f66b9d54b2d85544b206d"/>
-->
<description>Strike Commander Plus</description>
<year>1995</year>
<publisher>エレクトロニック・アーツ・ビクター (Electronic Arts Victor)</publisher>
+ <info name="serial" value="EFT-7015"/>
<info name="alt_title" value="ストライク・コマンダーPLUS" />
<info name="release" value="199504xx" />
<info name="usage" value="Requires HDD installation and 6 MB RAM"/>
<part name="cdrom" interface="cdrom">
<diskarea name="cdrom">
- <disk name="strike commander plus" sha1="c926c123e3c0c8e439b16c27ecca3b420e1964bb" />
+ <disk name="strike commander plus (japan)" sha1="28ee28583c539a2c426844120412d23afbb501f8" />
</diskarea>
</part>
</software>
@@ -28072,6 +28745,25 @@ User/save disks that can be created from the game itself are not included.
</part>
</software>
+ <software name="tgraph">
+ <!--
+ Origin: redump.org
+ <rom name="Towns Graph V2.1 L10 (Japan).bin" size="44100000" crc="c079f186" sha1="9498bd9434f18954b1d679d2fee0d44195c1641b"/>
+ <rom name="Towns Graph V2.1 L10 (Japan).cue" size="94" crc="57cdce46" sha1="0c130e0170a1f07b9a11c3e37c9ff33c5032bff8"/>
+ -->
+ <description>TownsGraph V2.1 L10</description>
+ <year>1994</year>
+ <publisher>富士通 (Fujitsu)</publisher>
+ <info name="serial" value="B276D010"/>
+ <info name="release" value="199510xx" />
+ <info name="usage" value="Requires 4 MB RAM"/>
+ <part name="cdrom" interface="cdrom">
+ <diskarea name="cdrom">
+ <disk name="towns graph v2.1 l10 (japan)" sha1="9fba85cf25aaaa508ae1e7efb867752b991e066c" />
+ </diskarea>
+ </part>
+ </software>
+
<software name="themeprk">
<!--
Origin: redump.org
diff --git a/src/devices/cpu/z80/z80.cpp b/src/devices/cpu/z80/z80.cpp
index c95474999d5..9d2c5958dd7 100644
--- a/src/devices/cpu/z80/z80.cpp
+++ b/src/devices/cpu/z80/z80.cpp
@@ -571,7 +571,6 @@ void z80_device::device_start()
save_item(NAME(m_ea));
save_item(NAME(m_service_attention));
save_item(NAME(m_tmp_irq_vector));
- save_item(NAME(m_shared_addr.w));
save_item(NAME(m_shared_data.w));
save_item(NAME(m_shared_data2.w));
save_item(NAME(m_rtemp));
diff --git a/src/devices/cpu/z80/z80.h b/src/devices/cpu/z80/z80.h
index b40e697d81f..3498f100dcd 100644
--- a/src/devices/cpu/z80/z80.h
+++ b/src/devices/cpu/z80/z80.h
@@ -181,7 +181,6 @@ protected:
int m_icount;
int m_tmp_irq_vector;
- PAIR16 m_shared_addr;
PAIR16 m_shared_data;
PAIR16 m_shared_data2;
u8 m_rtemp;
diff --git a/src/devices/cpu/z80/z80.inc b/src/devices/cpu/z80/z80.inc
index caf7ce22c8f..1c7dd7843a0 100644
--- a/src/devices/cpu/z80/z80.inc
+++ b/src/devices/cpu/z80/z80.inc
@@ -60,9 +60,6 @@
#define WZ_L m_wz.b.l
-#define TADR m_shared_addr.w // Typically represents values from A0..15 pins. 16bit input in steps.
-#define TADR_H m_shared_addr.b.h
-#define TADR_L m_shared_addr.b.l
#define TDAT m_shared_data.w // 16bit input(if use as second parameter) or output in steps.
#define TDAT2 m_shared_data2.w
#define TDAT_H m_shared_data.b.h
diff --git a/src/devices/cpu/z80/z80.lst b/src/devices/cpu/z80/z80.lst
index a31e651748b..b1aa31aa12d 100644
--- a/src/devices/cpu/z80/z80.lst
+++ b/src/devices/cpu/z80/z80.lst
@@ -3,47 +3,46 @@
##########################################################
# macros
##########################################################
-macro nomreq_addr
+macro nomreq_addr %addr
if (nomemrq_en)
- m_nomreq_cb(TADR, 0x00, 0xff);
+ m_nomreq_cb(%addr, 0x00, 0xff);
+ 1
macro nomreq_ir %cycles
- TADR = (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f);
- %cycles * call nomreq_addr
+ %cycles * call nomreq_addr (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f)
-macro in
- m_iorq_cycles !! TDAT8 = m_io.read_interruptible(TADR);
+macro in %port
+ m_iorq_cycles !! TDAT8 = m_io.read_interruptible(%port);
-macro out
- m_iorq_cycles !! m_io.write_interruptible(TADR, TDAT8);
+macro out %port
+ m_iorq_cycles !! m_io.write_interruptible(%port, TDAT8);
-macro rm
- m_memrq_cycles !! TDAT8 = data_read(TADR);
+macro rm %addr
+ m_memrq_cycles !! TDAT8 = data_read(%addr);
-macro rm_reg
- call rm
- call nomreq_addr
+macro rm_reg %addr
+ call rm %addr
+ call nomreq_addr %addr
-macro rm16
- call rm
- TDAT_H = TDAT_L; TADR++;
- call rm
+macro rm16 %addr
+ call rm %addr
+ TDAT_H = TDAT_L;
+ call rm %addr+1
using std::swap; std::swap(TDAT_H, TDAT_L);
-macro wm
- m_memrq_cycles !! data_write(TADR, TDAT8);
+macro wm %addr
+ m_memrq_cycles !! data_write(%addr, TDAT8);
-macro wm16
- call wm
- TADR++; TDAT8 = TDAT_H;
- call wm
+macro wm16 %addr
+ call wm %addr
+ TDAT8 = TDAT_H;
+ call wm %addr+1
-macro wm16_sp
+macro wm16_sp %d16
SP--;
- m_memrq_cycles !! stack_write(SP, TDAT_H);
+ m_memrq_cycles !! stack_write(SP, (%d16) >> 8);
SP--;
- m_memrq_cycles !! stack_write(SP, TDAT_L);
+ m_memrq_cycles !! stack_write(SP, %d16);
macro rop
m_m1_cycles-2 !! TDAT8 = opcode_read();
@@ -80,9 +79,9 @@ macro pop
m_memrq_cycles !! TDAT_H = stack_read(SP);
SP++;
-macro push
+macro push %d16
call nomreq_ir 1
- call wm16_sp
+ call wm16_sp %d16
macro jp
call arg16
@@ -116,20 +115,17 @@ macro t6a84:jp_cond
macro jr
call arg
- TADR = PC-1;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr PC-1
PC += (s8)TDAT8; WZ = PC;
macro t6a84:jr
call arg
- TADR = PC-1;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr PC-1
PC += (s8)TDAT8; WZ = PC;
paged_jump();
macro r800:jr
call arg
- TADR = PC-1;
+ 1
PC += (s8)TDAT8; WZ = PC;
@@ -142,18 +138,18 @@ macro jr_cond
macro arg16_call
call arg16
- m_ea = TDAT; TADR = PC-1;
- call nomreq_addr
- WZ = m_ea; TDAT = PC;
- call wm16_sp
+ m_ea = TDAT;
+ call nomreq_addr PC-1
+ WZ = m_ea;
+ call wm16_sp PC
PC = m_ea;
macro r800:arg16_call
call arg16
- m_ea = TDAT; TADR = PC-1;
- call nomreq_addr
- WZ = m_ea; TDAT = PC;
- call wm16_sp
+ m_ea = TDAT;
+ call nomreq_addr PC-1
+ WZ = m_ea;
+ call wm16_sp PC
PC = m_ea;
macro call_cond
@@ -234,38 +230,32 @@ macro r800:ld_a_i
set_service_attention<SA_AFTER_LDAIR, 1>();
macro rst addr
- TDAT = PC;
- call push
+ call push PC
PC = addr; WZ = PC;
macro rrd
- TADR = HL;
- call rm
+ call rm HL
WZ = HL+1;
- 4 * call nomreq_addr
+ 4 * call nomreq_addr HL
TDAT_H = TDAT8; TDAT8 = (TDAT8 >> 4) | (A << 4);
- call wm
+ call wm HL
A = (A & 0xf0) | (TDAT_H & 0x0f); set_f((F & CF) | SZP[A]);
macro rld
- TADR = HL;
- call rm
+ call rm HL
WZ = HL+1;
- 4 * call nomreq_addr
+ 4 * call nomreq_addr HL
TDAT_H = TDAT8; TDAT8 = (TDAT8 << 4) | (A & 0x0f);
- call wm
+ call wm HL
A = (A & 0xf0) | (TDAT_H >> 4); set_f((F & CF) | SZP[A]);
-macro ex_sp
- TDAT2 = TDAT;
+macro ex_sp %d16
call pop
- TADR = SP-1;
- call nomreq_addr
- using std::swap; std::swap(TDAT, TDAT2);
- call wm16_sp
- TADR = SP;
- 2 * call nomreq_addr
- using std::swap; std::swap(TDAT, TDAT2); WZ = TDAT;
+ call nomreq_addr SP-1
+ call wm16_sp %d16
+ %d16 = TDAT;
+ 2 * call nomreq_addr SP
+ WZ = TDAT;
macro add16
call nomreq_ir 7
@@ -289,161 +279,135 @@ macro r800:sbc_hl
{ u32 res = HL - TDAT - (F & CF); WZ = HL + 1; set_f((((HL ^ res ^ TDAT) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL) & (HL ^ res) &0x8000) >> 13)); HL = (u16)res; }
macro ldi
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- 2 * call nomreq_addr
+ call rm HL
+ call wm DE
+ 2 * call nomreq_addr DE
set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF;
macro r800:ldi
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- call nomreq_addr
+ call rm HL
+ call wm DE
+ call nomreq_addr DE
set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF;
macro cpi
- TADR = HL;
- call rm
- 5 * call nomreq_addr
+ call rm HL
+ 5 * call nomreq_addr HL
{ u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro r800:cpi
- TADR = HL;
- call rm
- call nomreq_addr
+ call rm HL
+ call nomreq_addr HL
{ u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro ini
call nomreq_ir 1
- TADR = BC;
- call in
- WZ = BC + 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC + 1; B--;
+ call wm HL
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:ini
- TADR = BC;
- call in
- WZ = BC + 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC + 1; B--;
+ call wm HL
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro outi
call nomreq_ir 1
- TADR = HL;
- call rm
- B--; WZ = BC + 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC + 1;
+ call out BC
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:outi
- TADR = HL;
- call rm
- B--; WZ = BC + 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC + 1;
+ call out BC
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro ldd
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- 2 * call nomreq_addr
+ call rm HL
+ call wm DE
+ 2 * call nomreq_addr DE
{ set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; }
macro r800:ldd
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- call nomreq_addr
+ call rm HL
+ call wm DE
+ call nomreq_addr DE
{ set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; }
macro cpd
- TADR = HL;
- call rm
- TADR = HL;
- 5 * call nomreq_addr
+ call rm HL
+ 5 * call nomreq_addr HL
{ u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro r800:cpd
- TADR = HL;
- call rm
- TADR = HL;
- call nomreq_addr
+ call rm HL
+ call nomreq_addr HL
{ u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro ind
call nomreq_ir 1
- TADR = BC;
- call in
- WZ = BC - 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC - 1; B--;
+ call wm HL
{ HL--; set_f(SZ[B]); unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:ind
- TADR = BC;
- call in
- WZ = BC - 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC - 1; B--;
+ call wm HL
{ HL--; set_f(SZ[B]); unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro outd
call nomreq_ir 1
- TADR = HL;
- call rm
- B--; WZ = BC - 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC - 1;
+ call out BC
{ HL--; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:outd
- TADR = HL;
- call rm
- B--; WZ = BC - 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC - 1;
+ call out BC
{ HL--; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro ldir
call ldi
if (BC != 0) {
- TADR = DE;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:ldir
call ldi
if (BC != 0) {
- TADR = DE;
- call nomreq_addr
+ call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro cpir
call cpi
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr HL
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:cpir
call cpi
- call nomreq_addr
+ call nomreq_addr HL
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro inir
call ini
if (B != 0) {
- TADR = HL;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr HL
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:inir
@@ -451,16 +415,16 @@ macro r800:inir
T(1);
call ini
if (B != 0) {
- TADR = HL;
- PC -= 2; block_io_interrupted_flags();
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro otir
call outi
if (B != 0) {
- TADR = BC;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr BC
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:otir
@@ -468,49 +432,45 @@ macro r800:otir
T(1);
call outi
if (B != 0) {
- TADR = BC;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr BC
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro lddr
call ldd
if (BC != 0) {
- TADR = DE;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:lddr
call ldd
if (BC != 0) {
- TADR = DE;
- call nomreq_addr
+ call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro cpdr
call cpd
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr HL
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:cpdr
call cpd
- call nomreq_addr
+ call nomreq_addr HL /* suspected wrong. must be inside if? */
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro indr
call ind
if (B != 0) {
- TADR = HL;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr HL
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:indr
@@ -518,16 +478,16 @@ macro r800:indr
T(1);
call ind
if (B != 0) {
- TADR = HL;
- PC -= 2; block_io_interrupted_flags();
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro otdr
call outd
if (B != 0) {
- TADR = BC;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr BC
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:otdr
@@ -535,8 +495,8 @@ macro r800:otdr
T(1);
call outd
if (B != 0) {
- TADR = BC;
- PC -= 2; block_io_interrupted_flags();
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro jump %po
@@ -556,8 +516,7 @@ macro take_nmi
m_iff1 = 0;
m_r++;
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x0066;
WZ = PC;
set_service_attention<SA_NMI_PENDING, 0>();
@@ -598,11 +557,9 @@ macro take_interrupt
// even, and all 8 bits will be used; even $FF is handled normally.
// CALL opcode timing
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
m_tmp_irq_vector = (m_tmp_irq_vector & 0xff) | (m_i << 8);
- TADR = m_tmp_irq_vector;
- call rm16
+ call rm16 m_tmp_irq_vector
PC = TDAT;
LOGMASKED(LOG_INT, "IM2 [$%04x] = $%04x\n", m_tmp_irq_vector, PC);
} else if (m_im == 1) {
@@ -610,8 +567,7 @@ macro take_interrupt
LOGMASKED(LOG_INT, "'%s' IM1 $0038\n", tag());
// RST $38
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x0038;
} else {
/* Interrupt mode 0. We check for CALL and JP instructions,
@@ -624,8 +580,7 @@ macro take_interrupt
if ((m_tmp_irq_vector & 0xff0000) == 0xcd0000) {
// CALL $xxxx cycles
+ 11
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = m_tmp_irq_vector & 0xffff;
} else if ((m_tmp_irq_vector & 0xff0000) == 0xc30000) {
// JP $xxxx cycles
@@ -634,8 +589,7 @@ macro take_interrupt
} else if ((m_tmp_irq_vector & 0xc7) == 0xc7) {
// RST $xx cycles
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = m_tmp_irq_vector & 0x0038;
} else if (m_tmp_irq_vector == 0xfb) {
// EI cycles
@@ -678,16 +632,13 @@ macro nsc800_take_interrupt
// 'interrupt latency' cycles
+ 7
if (m_nsc800_irq_state[0]) {
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x003c;
} else if (m_nsc800_irq_state[1]) {
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x0034;
} else if (m_nsc800_irq_state[2]) {
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x002c;
} else {
+ 2 * m_memrq_cycles
@@ -773,10 +724,9 @@ cb05 # RLC L
L = rlc(L);
cb06 # RLC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rlc(TDAT8);
- call wm
+ call wm HL
cb07 # RLC A
A = rlc(A);
@@ -800,10 +750,9 @@ cb0d # RRC L
L = rrc(L);
cb0e # RRC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rrc(TDAT8);
- call wm
+ call wm HL
cb0f # RRC A
A = rrc(A);
@@ -827,10 +776,9 @@ cb15 # RL L
L = rl(L);
cb16 # RL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rl(TDAT8);
- call wm
+ call wm HL
cb17 # RL A
A = rl(A);
@@ -854,10 +802,9 @@ cb1d # RR L
L = rr(L);
cb1e # RR (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rr(TDAT8);
- call wm
+ call wm HL
cb1f # RR A
A = rr(A);
@@ -881,10 +828,9 @@ cb25 # SLA L
L = sla(L);
cb26 # SLA (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = sla(TDAT8);
- call wm
+ call wm HL
cb27 # SLA A
A = sla(A);
@@ -908,10 +854,9 @@ cb2d # SRA L
L = sra(L);
cb2e # SRA (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = sra(TDAT8);
- call wm
+ call wm HL
cb2f # SRA A
A = sra(A);
@@ -935,10 +880,9 @@ cb35 # SLL L
L = sll(L);
cb36 # SLL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = sll(TDAT8);
- call wm
+ call wm HL
cb37 # SLL A
A = sll(A);
@@ -962,10 +906,9 @@ cb3d # SRL L
L = srl(L);
cb3e # SRL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = srl(TDAT8);
- call wm
+ call wm HL
cb3f # SRL A
A = srl(A);
@@ -989,8 +932,7 @@ cb45 # BIT 0,L
bit(0, L);
cb46 # BIT 0,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(0, TDAT8);
cb47 # BIT 0,A
@@ -1015,8 +957,7 @@ cb4d # BIT 1,L
bit(1, L);
cb4e # BIT 1,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(1, TDAT8);
cb4f # BIT 1,A
@@ -1041,8 +982,7 @@ cb55 # BIT 2,L
bit(2, L);
cb56 # BIT 2,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(2, TDAT8);
cb57 # BIT 2,A
@@ -1067,8 +1007,7 @@ cb5d # BIT 3,L
bit(3, L);
cb5e # BIT 3,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(3, TDAT8);
cb5f # BIT 3,A
@@ -1093,8 +1032,7 @@ cb65 # BIT 4,L
bit(4, L);
cb66 # BIT 4,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(4, TDAT8);
cb67 # BIT 4,A
@@ -1119,8 +1057,7 @@ cb6d # BIT 5,L
bit(5, L);
cb6e # BIT 5,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(5, TDAT8);
cb6f # BIT 5,A
@@ -1145,8 +1082,7 @@ cb75 # BIT 6,L
bit(6, L);
cb76 # BIT 6,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(6, TDAT8);
cb77 # BIT 6,A
@@ -1171,8 +1107,7 @@ cb7d # BIT 7,L
bit(7, L);
cb7e # BIT 7,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(7, TDAT8);
cb7f # BIT 7,A
@@ -1197,10 +1132,9 @@ cb85 # RES 0,L
L = res(0, L);
cb86 # RES 0,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(0, TDAT8);
- call wm
+ call wm HL
cb87 # RES 0,A
A = res(0, A);
@@ -1224,10 +1158,9 @@ cb8d # RES 1,L
L = res(1, L);
cb8e # RES 1,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(1, TDAT8);
- call wm
+ call wm HL
cb8f # RES 1,A
A = res(1, A);
@@ -1251,10 +1184,9 @@ cb95 # RES 2,L
L = res(2, L);
cb96 # RES 2,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(2, TDAT8);
- call wm
+ call wm HL
cb97 # RES 2,A
A = res(2, A);
@@ -1278,10 +1210,9 @@ cb9d # RES 3,L
L = res(3, L);
cb9e # RES 3,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(3, TDAT8);
- call wm
+ call wm HL
cb9f # RES 3,A
A = res(3, A);
@@ -1305,10 +1236,9 @@ cba5 # RES 4,L
L = res(4, L);
cba6 # RES 4,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(4, TDAT8);
- call wm
+ call wm HL
cba7 # RES 4,A
A = res(4, A);
@@ -1332,10 +1262,9 @@ cbad # RES 5,L
L = res(5, L);
cbae # RES 5,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(5, TDAT8);
- call wm
+ call wm HL
cbaf # RES 5,A
A = res(5, A);
@@ -1359,10 +1288,9 @@ cbb5 # RES 6,L
L = res(6, L);
cbb6 # RES 6,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(6, TDAT8);
- call wm
+ call wm HL
cbb7 # RES 6,A
A = res(6, A);
@@ -1386,10 +1314,9 @@ cbbd # RES 7,L
L = res(7, L);
cbbe # RES 7,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(7, TDAT8);
- call wm
+ call wm HL
cbbf # RES 7,A
A = res(7, A);
@@ -1413,10 +1340,9 @@ cbc5 # SET 0,L
L = set(0, L);
cbc6 # SET 0,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(0, TDAT8);
- call wm
+ call wm HL
cbc7 # SET 0,A
A = set(0, A);
@@ -1440,10 +1366,9 @@ cbcd # SET 1,L
L = set(1, L);
cbce # SET 1,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(1, TDAT8);
- call wm
+ call wm HL
cbcf # SET 1,A
A = set(1, A);
@@ -1467,10 +1392,9 @@ cbd5 # SET 2,L
L = set(2, L);
cbd6 # SET 2,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(2, TDAT8);
- call wm
+ call wm HL
cbd7 # SET 2,A
A = set(2, A);
@@ -1494,10 +1418,9 @@ cbdd # SET 3,L
L = set(3, L);
cbde # SET 3,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(3, TDAT8);
- call wm
+ call wm HL
cbdf # SET 3,A
A = set(3, A);
@@ -1521,10 +1444,9 @@ cbe5 # SET 4,L
L = set(4, L);
cbe6 # SET 4,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(4, TDAT8);
- call wm
+ call wm HL
cbe7 # SET 4,A
A = set(4, A);
@@ -1548,10 +1470,9 @@ cbed # SET 5,L
L = set(5, L);
cbee # SET 5,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(5, TDAT8);
- call wm
+ call wm HL
cbef # SET 5,A
A = set(5, A);
@@ -1575,10 +1496,9 @@ cbf5 # SET 6,L
L = set(6, L);
cbf6 # SET 6,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(6, TDAT8);
- call wm
+ call wm HL
cbf7 # SET 6,A
A = set(6, A);
@@ -1602,10 +1522,9 @@ cbfd # SET 7,L
L = set(7, L);
cbfe # SET 7,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(7, TDAT8);
- call wm
+ call wm HL
cbff # SET 7,A
A = set(7, A);
@@ -1616,388 +1535,324 @@ cbff # SET 7,A
# rotate, shift and bit operations with (IX+o)
##########################################################
fe00 # RLC B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rlc(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe01 # RLC C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rlc(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe02 # RLC D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rlc(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe03 # RLC E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rlc(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe04 # RLC H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rlc(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe05 # RLC L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rlc(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe06 # RLC (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rlc(TDAT8);
- call wm
+ call wm m_ea
fe07 # RLC A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rlc(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe08 # RRC B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rrc(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe09 # RRC C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rrc(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe0a # RRC D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rrc(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe0b # RRC E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rrc(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe0c # RRC H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rrc(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe0d # RRC L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rrc(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe0e # RRC (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rrc(TDAT8);
- call wm
+ call wm m_ea
fe0f # RRC A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rrc(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe10 # RL B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rl(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe11 # RL C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rl(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe12 # RL D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rl(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe13 # RL E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rl(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe14 # RL H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rl(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe15 # RL L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rl(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe16 # RL (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rl(TDAT8);
- call wm
+ call wm m_ea
fe17 # RL A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rl(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe18 # RR B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rr(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe19 # RR C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rr(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe1a # RR D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rr(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe1b # RR E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rr(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe1c # RR H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rr(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe1d # RR L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rr(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe1e # RR (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rr(TDAT8);
- call wm
+ call wm m_ea
fe1f # RR A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rr(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe20 # SLA B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = sla(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe21 # SLA C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = sla(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe22 # SLA D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = sla(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe23 # SLA E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = sla(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe24 # SLA H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = sla(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe25 # SLA L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = sla(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe26 # SLA (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = sla(TDAT8);
- call wm
+ call wm m_ea
fe27 # SLA A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = sla(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe28 # SRA B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = sra(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe29 # SRA C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = sra(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe2a # SRA D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = sra(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe2b # SRA E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = sra(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe2c # SRA H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = sra(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe2d # SRA L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = sra(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe2e # SRA (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = sra(TDAT8);
- call wm
+ call wm m_ea
fe2f # SRA A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = sra(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe30 # SLL B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = sll(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe31 # SLL C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = sll(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe32 # SLL D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = sll(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe33 # SLL E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = sll(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe34 # SLL H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = sll(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe35 # SLL L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = sll(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe36 # SLL (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = sll(TDAT8);
- call wm
+ call wm m_ea
fe37 # SLL A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = sll(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe38 # SRL B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = srl(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe39 # SRL C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = srl(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe3a # SRL D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = srl(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe3b # SRL E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = srl(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe3c # SRL H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = srl(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe3d # SRL L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = srl(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe3e # SRL (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = srl(TDAT8);
- call wm
+ call wm m_ea
fe3f # SRL A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = srl(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe40 # BIT 0,(XY+o)
call jump fe46
@@ -2018,8 +1873,7 @@ fe45 # BIT 0,(XY+o)
call jump fe46
fe46 # BIT 0,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(0, TDAT8);
fe47 # BIT 0,(XY+o)
@@ -2044,8 +1898,7 @@ fe4d # BIT 1,(XY+o)
call jump fe4e
fe4e # BIT 1,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(1, TDAT8);
fe4f # BIT 1,(XY+o)
@@ -2070,8 +1923,7 @@ fe55 # BIT 2,(XY+o)
call jump fe56
fe56 # BIT 2,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(2, TDAT8);
fe57 # BIT 2,(XY+o)
@@ -2096,8 +1948,7 @@ fe5d # BIT 3,(XY+o)
call jump fe5e
fe5e # BIT 3,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(3, TDAT8);
fe5f # BIT 3,(XY+o)
@@ -2122,8 +1973,7 @@ fe65 # BIT 4,(XY+o)
call jump fe66
fe66 # BIT 4,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(4, TDAT8);
fe67 # BIT 4,(XY+o)
@@ -2148,8 +1998,7 @@ fe6d # BIT 5,(XY+o)
call jump fe6e
fe6e # BIT 5,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(5, TDAT8);
fe6f # BIT 5,(XY+o)
@@ -2174,8 +2023,7 @@ fe75 # BIT 6,(XY+o)
call jump fe76
fe76 # BIT 6,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(6, TDAT8);
fe77 # BIT 6,(XY+o)
@@ -2200,780 +2048,651 @@ fe7d # BIT 7,(XY+o)
call jump fe7e
fe7e # BIT 7,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(7, TDAT8);
fe7f # BIT 7,(XY+o)
call jump fe7e
fe80 # RES 0,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(0, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe81 # RES 0,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(0, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe82 # RES 0,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(0, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe83 # RES 0,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(0, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe84 # RES 0,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(0, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe85 # RES 0,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(0, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe86 # RES 0,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(0, TDAT8);
- call wm
+ call wm m_ea
fe87 # RES 0,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(0, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe88 # RES 1,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(1, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe89 # RES 1,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(1, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe8a # RES 1,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(1, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe8b # RES 1,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(1, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe8c # RES 1,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(1, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe8d # RES 1,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(1, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe8e # RES 1,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(1, TDAT8);
- call wm
+ call wm m_ea
fe8f # RES 1,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(1, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe90 # RES 2,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(2, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe91 # RES 2,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(2, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe92 # RES 2,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(2, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe93 # RES 2,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(2, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe94 # RES 2,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(2, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe95 # RES 2,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(2, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe96 # RES 2,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(2, TDAT8);
- call wm
+ call wm m_ea
fe97 # RES 2,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(2, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe98 # RES 3,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(3, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe99 # RES 3,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(3, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe9a # RES 3,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(3, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe9b # RES 3,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(3, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe9c # RES 3,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(3, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe9d # RES 3,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(3, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe9e # RES 3,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(3, TDAT8);
- call wm
+ call wm m_ea
fe9f # RES 3,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(3, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fea0 # RES 4,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(4, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fea1 # RES 4,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(4, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fea2 # RES 4,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(4, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fea3 # RES 4,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(4, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fea4 # RES 4,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(4, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fea5 # RES 4,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(4, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fea6 # RES 4,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(4, TDAT8);
- call wm
+ call wm m_ea
fea7 # RES 4,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(4, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fea8 # RES 5,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(5, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fea9 # RES 5,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(5, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feaa # RES 5,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(5, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
feab # RES 5,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(5, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
feac # RES 5,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(5, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fead # RES 5,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(5, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
feae # RES 5,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(5, TDAT8);
- call wm
+ call wm m_ea
feaf # RES 5,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(5, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
feb0 # RES 6,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(6, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
feb1 # RES 6,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(6, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feb2 # RES 6,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(6, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
feb3 # RES 6,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(6, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
feb4 # RES 6,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(6, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
feb5 # RES 6,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(6, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
feb6 # RES 6,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(6, TDAT8);
- call wm
+ call wm m_ea
feb7 # RES 6,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(6, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
feb8 # RES 7,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(7, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
feb9 # RES 7,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(7, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feba # RES 7,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(7, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
febb # RES 7,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(7, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
febc # RES 7,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(7, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
febd # RES 7,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(7, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
febe # RES 7,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(7, TDAT8);
- call wm
+ call wm m_ea
febf # RES 7,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(7, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fec0 # SET 0,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(0, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fec1 # SET 0,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(0, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fec2 # SET 0,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(0, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fec3 # SET 0,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(0, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fec4 # SET 0,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(0, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fec5 # SET 0,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(0, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fec6 # SET 0,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(0, TDAT8);
- call wm
+ call wm m_ea
fec7 # SET 0,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(0, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fec8 # SET 1,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(1, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fec9 # SET 1,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(1, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feca # SET 1,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(1, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fecb # SET 1,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(1, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fecc # SET 1,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(1, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fecd # SET 1,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(1, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fece # SET 1,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(1, TDAT8);
- call wm
+ call wm m_ea
fecf # SET 1,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(1, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fed0 # SET 2,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(2, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fed1 # SET 2,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(2, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fed2 # SET 2,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(2, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fed3 # SET 2,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(2, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fed4 # SET 2,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(2, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fed5 # SET 2,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(2, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fed6 # SET 2,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(2, TDAT8);
- call wm
+ call wm m_ea
fed7 # SET 2,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(2, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fed8 # SET 3,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(3, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fed9 # SET 3,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(3, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feda # SET 3,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(3, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fedb # SET 3,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(3, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fedc # SET 3,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(3, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fedd # SET 3,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(3, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fede # SET 3,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(3, TDAT8);
- call wm
+ call wm m_ea
fedf # SET 3,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(3, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fee0 # SET 4,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(4, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fee1 # SET 4,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(4, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fee2 # SET 4,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(4, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fee3 # SET 4,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(4, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fee4 # SET 4,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(4, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fee5 # SET 4,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(4, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fee6 # SET 4,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(4, TDAT8);
- call wm
+ call wm m_ea
fee7 # SET 4,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(4, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fee8 # SET 5,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(5, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fee9 # SET 5,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(5, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feea # SET 5,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(5, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
feeb # SET 5,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(5, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
feec # SET 5,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(5, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
feed # SET 5,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(5, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
feee # SET 5,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(5, TDAT8);
- call wm
+ call wm m_ea
feef # SET 5,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(5, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fef0 # SET 6,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(6, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fef1 # SET 6,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(6, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fef2 # SET 6,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(6, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fef3 # SET 6,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(6, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fef4 # SET 6,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(6, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fef5 # SET 6,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(6, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fef6 # SET 6,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(6, TDAT8);
- call wm
+ call wm m_ea
fef7 # SET 6,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(6, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fef8 # SET 7,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(7, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fef9 # SET 7,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(7, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fefa # SET 7,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(7, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fefb # SET 7,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(7, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fefc # SET 7,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(7, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fefd # SET 7,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(7, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fefe # SET 7,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(7, TDAT8);
- call wm
+ call wm m_ea
feff # SET 7,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(7, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
##########################################################
@@ -3119,8 +2838,8 @@ dd21 # LD IX,w
dd22 # LD (w),IX
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = IX;
- call wm16
+ m_ea = TDAT; TDAT = IX;
+ call wm16 m_ea
WZ = m_ea + 1;
dd23 # INC IX
@@ -3152,8 +2871,8 @@ dd29 # ADD IX,IX
dd2a # LD IX,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
IX = TDAT; WZ = m_ea + 1;
dd2b # DEC IX
@@ -3192,29 +2911,23 @@ dd33 # DB DD
dd34 # INC (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
inc(TDAT8);
- call wm
+ call wm m_ea
dd35 # DEC (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
dec(TDAT8);
- call wm
+ call wm m_ea
dd36 # LD (IX+o),n
call eax
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
- TADR = m_ea;
- call wm
+ 2 * call nomreq_addr PC-1
+ call wm m_ea
dd37 # DB DD
illegal_1();
@@ -3277,10 +2990,8 @@ dd45 # LD B,LX
dd46 # LD B,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
B = TDAT8;
dd47 # DB DD
@@ -3311,10 +3022,8 @@ dd4d # LD C,LX
dd4e # LD C,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
C = TDAT8;
dd4f # DB DD
@@ -3345,10 +3054,8 @@ dd55 # LD D,LX
dd56 # LD D,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
D = TDAT8;
dd57 # DB DD
@@ -3379,10 +3086,8 @@ dd5d # LD E,LX
dd5e # LD E,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
E = TDAT8;
dd5f # DB DD
@@ -3408,10 +3113,8 @@ dd65 # LD HX,LX
dd66 # LD H,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
H = TDAT8;
dd67 # LD HX,A
@@ -3436,10 +3139,8 @@ dd6d # LD LX,LX
dd6e # LD L,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
L = TDAT8;
dd6f # LD LX,A
@@ -3447,45 +3148,39 @@ dd6f # LD LX,A
dd70 # LD (IX+o),B
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = B;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = B;
+ call wm m_ea
dd71 # LD (IX+o),C
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = C;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = C;
+ call wm m_ea
dd72 # LD (IX+o),D
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = D;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = D;
+ call wm m_ea
dd73 # LD (IX+o),E
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = E;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = E;
+ call wm m_ea
dd74 # LD (IX+o),H
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = H;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = H;
+ call wm m_ea
dd75 # LD (IX+o),L
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = L;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = L;
+ call wm m_ea
dd76 # DB DD
illegal_1();
@@ -3493,10 +3188,9 @@ dd76 # DB DD
dd77 # LD (IX+o),A
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = A;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = A;
+ call wm m_ea
dd78 # DB DD
illegal_1();
@@ -3522,10 +3216,8 @@ dd7d # LD A,LX
dd7e # LD A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
A = TDAT8;
dd7f # DB DD
@@ -3556,10 +3248,8 @@ dd85 # ADD A,LX
dd86 # ADD A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
add_a(TDAT8);
dd87 # DB DD
@@ -3590,10 +3280,8 @@ dd8d # ADC A,LX
dd8e # ADC A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
adc_a(TDAT8);
dd8f # DB DD
@@ -3624,10 +3312,8 @@ dd95 # SUB LX
dd96 # SUB (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sub_a(TDAT8);
dd97 # DB DD
@@ -3658,10 +3344,8 @@ dd9d # SBC A,LX
dd9e # SBC A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sbc_a(TDAT8);
dd9f # DB DD
@@ -3692,10 +3376,8 @@ dda5 # AND LX
dda6 # AND (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
and_a(TDAT8);
dda7 # DB DD
@@ -3726,10 +3408,8 @@ ddad # XOR LX
ddae # XOR (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
xor_a(TDAT8);
ddaf # DB DD
@@ -3760,10 +3440,8 @@ ddb5 # OR LX
ddb6 # OR (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
or_a(TDAT8);
ddb7 # DB DD
@@ -3794,10 +3472,8 @@ ddbd # CP LX
ddbe # CP (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
cp(TDAT8);
ddbf # DB DD
@@ -3851,8 +3527,7 @@ ddca # DB DD
ddcb # ** DD CB xx
call eax
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
+ 2 * call nomreq_addr PC-1
call jump_prefixed 0xfe
ddcc # DB DD
@@ -3948,17 +3623,14 @@ dde2 # DB DD
call jump 00e2
dde3 # EX (SP),IX
- TDAT = IX;
- call ex_sp
- IX = TDAT;
+ call ex_sp IX
dde4 # DB DD
illegal_1();
call jump 00e4
dde5 # PUSH IX
- TDAT = IX;
- call push
+ call push IX
dde6 # DB DD
illegal_1();
@@ -4207,8 +3879,8 @@ fd21 # LD IY,w
fd22 # LD (w),IY
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = IY;
- call wm16
+ m_ea = TDAT; TDAT = IY;
+ call wm16 m_ea
WZ = m_ea + 1;
fd23 # INC IY
@@ -4240,8 +3912,8 @@ fd29 # ADD IY,IY
fd2a # LD IY,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
IY = TDAT; WZ = m_ea + 1;
fd2b # DEC IY
@@ -4280,29 +3952,23 @@ fd33 # DB FD
fd34 # INC (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
inc(TDAT8);
- call wm
+ call wm m_ea
fd35 # DEC (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
dec(TDAT8);
- call wm
+ call wm m_ea
fd36 # LD (IY+o),n
call eay
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
- TADR = m_ea;
- call wm
+ 2 * call nomreq_addr PC-1
+ call wm m_ea
fd37 # DB FD
illegal_1();
@@ -4365,10 +4031,8 @@ fd45 # LD B,LY
fd46 # LD B,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
B = TDAT8;
fd47 # DB FD
@@ -4399,10 +4063,8 @@ fd4d # LD C,LY
fd4e # LD C,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
C = TDAT8;
fd4f # DB FD
@@ -4433,10 +4095,8 @@ fd55 # LD D,LY
fd56 # LD D,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
D = TDAT8;
fd57 # DB FD
@@ -4467,10 +4127,8 @@ fd5d # LD E,LY
fd5e # LD E,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
E = TDAT8;
fd5f # DB FD
@@ -4496,10 +4154,8 @@ fd65 # LD HY,LY
fd66 # LD H,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
H = TDAT8;
fd67 # LD HY,A
@@ -4524,10 +4180,8 @@ fd6d # LD LY,LY
fd6e # LD L,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
L = TDAT8;
fd6f # LD LY,A
@@ -4535,45 +4189,39 @@ fd6f # LD LY,A
fd70 # LD (IY+o),B
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = B;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = B;
+ call wm m_ea
fd71 # LD (IY+o),C
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = C;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = C;
+ call wm m_ea
fd72 # LD (IY+o),D
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = D;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = D;
+ call wm m_ea
fd73 # LD (IY+o),E
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = E;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = E;
+ call wm m_ea
fd74 # LD (IY+o),H
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = H;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = H;
+ call wm m_ea
fd75 # LD (IY+o),L
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = L;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = L;
+ call wm m_ea
fd76 # DB FD
illegal_1();
@@ -4581,10 +4229,9 @@ fd76 # DB FD
fd77 # LD (IY+o),A
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = A;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = A;
+ call wm m_ea
fd78 # DB FD
illegal_1();
@@ -4610,10 +4257,8 @@ fd7d # LD A,LY
fd7e # LD A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
A = TDAT8;
fd7f # DB FD
@@ -4644,10 +4289,8 @@ fd85 # ADD A,LY
fd86 # ADD A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
add_a(TDAT8);
fd87 # DB FD
@@ -4678,10 +4321,8 @@ fd8d # ADC A,LY
fd8e # ADC A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
adc_a(TDAT8);
fd8f # DB FD
@@ -4712,10 +4353,8 @@ fd95 # SUB LY
fd96 # SUB (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sub_a(TDAT8);
fd97 # DB FD
@@ -4746,10 +4385,8 @@ fd9d # SBC A,LY
fd9e # SBC A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sbc_a(TDAT8);
fd9f # DB FD
@@ -4780,10 +4417,8 @@ fda5 # AND LY
fda6 # AND (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
and_a(TDAT8);
fda7 # DB FD
@@ -4814,10 +4449,8 @@ fdad # XOR LY
fdae # XOR (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
xor_a(TDAT8);
fdaf # DB FD
@@ -4848,10 +4481,8 @@ fdb5 # OR LY
fdb6 # OR (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
or_a(TDAT8);
fdb7 # DB FD
@@ -4882,10 +4513,8 @@ fdbd # CP LY
fdbe # CP (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
cp(TDAT8);
fdbf # DB FD
@@ -4939,8 +4568,7 @@ fdca # DB FD
fdcb # ** FD CB xx
call eay
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
+ 2 * call nomreq_addr PC-1
call jump_prefixed 0xfe
fdcc # DB FD
@@ -5036,17 +4664,14 @@ fde2 # DB FD
call jump 00e2
fde3 # EX (SP),IY
- TDAT = IY;
- call ex_sp
- IY = TDAT;
+ call ex_sp IY
fde4 # DB FD
illegal_1();
call jump 00e4
fde5 # PUSH IY
- TDAT = IY;
- call push
+ call push IY
fde6 # DB FD
illegal_1();
@@ -5348,14 +4973,13 @@ ed3f # DB ED
illegal_2();
ed40 # IN B,(C)
- TADR = BC;
- call in
- B = TDAT8; set_f((F & CF) | SZP[B]); WZ = TADR + 1;
+ call in BC
+ B = TDAT8; set_f((F & CF) | SZP[B]); WZ = BC + 1;
ed41 # OUT (C),B
- TADR = BC; TDAT8 = B;
- call out
- WZ = TADR + 1;
+ TDAT8 = B;
+ call out BC
+ WZ = BC + 1;
ed42 # SBC HL,BC
TDAT = BC;
@@ -5363,8 +4987,8 @@ ed42 # SBC HL,BC
ed43 # LD (w),BC
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = BC;
- call wm16
+ m_ea = TDAT; TDAT = BC;
+ call wm16 m_ea
WZ = m_ea + 1;
ed44 # NEG
@@ -5380,14 +5004,13 @@ ed47 # LD i,A
call ld_i_a
ed48 # IN C,(C)
- TADR = BC;
- call in
- C = TDAT8; set_f((F & CF) | SZP[C]); WZ = TADR + 1;
+ call in BC
+ C = TDAT8; set_f((F & CF) | SZP[C]); WZ = BC + 1;
ed49 # OUT (C),C
- TADR = BC; TDAT8 = C;
- call out
- WZ = TADR + 1;
+ TDAT8 = C;
+ call out BC
+ WZ = BC + 1;
ed4a # ADC HL,BC
TDAT = BC;
@@ -5395,8 +5018,8 @@ ed4a # ADC HL,BC
ed4b # LD BC,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
BC = TDAT; WZ = m_ea + 1;
ed4c # NEG
@@ -5412,14 +5035,13 @@ ed4f # LD r,A
call ld_r_a
ed50 # IN D,(C)
- TADR = BC;
- call in
- D = TDAT8; set_f((F & CF) | SZP[D]); WZ = TADR + 1;
+ call in BC
+ D = TDAT8; set_f((F & CF) | SZP[D]); WZ = BC + 1;
ed51 # OUT (C),D
- TADR = BC; TDAT8 = D;
- call out
- WZ = TADR + 1;
+ TDAT8 = D;
+ call out BC
+ WZ = BC + 1;
ed52 # SBC HL,DE
TDAT = DE;
@@ -5427,8 +5049,8 @@ ed52 # SBC HL,DE
ed53 # LD (w),DE
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = DE;
- call wm16
+ m_ea = TDAT; TDAT = DE;
+ call wm16 m_ea
WZ = m_ea + 1;
ed54 # NEG
@@ -5444,14 +5066,13 @@ ed57 # LD A,i
call ld_a_i
ed58 # IN E,(C)
- TADR = BC;
- call in
- E = TDAT8; set_f((F & CF) | SZP[E]); WZ = TADR + 1;
+ call in BC
+ E = TDAT8; set_f((F & CF) | SZP[E]); WZ = BC + 1;
ed59 # OUT (C),E
- TADR = BC; TDAT8 = E;
- call out
- WZ = TADR + 1;
+ TDAT8 = E;
+ call out BC
+ WZ = BC + 1;
ed5a # ADC HL,DE
TDAT = DE;
@@ -5459,8 +5080,8 @@ ed5a # ADC HL,DE
ed5b # LD DE,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
DE = TDAT; WZ = m_ea + 1;
ed5c # NEG
@@ -5476,14 +5097,13 @@ ed5f # LD A,r
call ld_a_r
ed60 # IN H,(C)
- TADR = BC;
- call in
- H = TDAT8; set_f((F & CF) | SZP[H]); WZ = TADR + 1;
+ call in BC
+ H = TDAT8; set_f((F & CF) | SZP[H]); WZ = BC + 1;
ed61 # OUT (C),H
- TADR = BC; TDAT8 = H;
- call out
- WZ = TADR + 1;
+ TDAT8 = H;
+ call out BC
+ WZ = BC + 1;
ed62 # SBC HL,HL
TDAT = HL;
@@ -5491,8 +5111,8 @@ ed62 # SBC HL,HL
ed63 # LD (w),HL
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = HL;
- call wm16
+ m_ea = TDAT; TDAT = HL;
+ call wm16 m_ea
WZ = m_ea + 1;
ed64 # NEG
@@ -5508,14 +5128,13 @@ ed67 # RRD (HL)
call rrd
ed68 # IN L,(C)
- TADR = BC;
- call in
- L = TDAT8; set_f((F & CF) | SZP[L]); WZ = TADR + 1;
+ call in BC
+ L = TDAT8; set_f((F & CF) | SZP[L]); WZ = BC + 1;
ed69 # OUT (C),L
- TADR = BC; TDAT8 = L;
- call out
- WZ = TADR + 1;
+ TDAT8 = L;
+ call out BC
+ WZ = BC + 1;
ed6a # ADC HL,HL
TDAT = HL;
@@ -5523,8 +5142,8 @@ ed6a # ADC HL,HL
ed6b # LD HL,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
HL = TDAT; WZ = m_ea + 1;
ed6c # NEG
@@ -5540,14 +5159,13 @@ ed6f # RLD (HL)
call rld
ed70 # IN 0,(C)
- TADR = BC;
- call in
- set_f((F & CF) | SZP[TDAT8]); WZ = TADR + 1;
+ call in BC
+ set_f((F & CF) | SZP[TDAT8]); WZ = BC + 1;
ed71 # OUT (C),0
- TADR = BC; TDAT8 = 0;
- call out
- WZ = TADR + 1;
+ TDAT8 = 0;
+ call out BC
+ WZ = BC + 1;
ed72 # SBC HL,SP
TDAT = SP;
@@ -5555,8 +5173,8 @@ ed72 # SBC HL,SP
ed73 # LD (w),SP
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = SP;
- call wm16
+ m_ea = TDAT; TDAT = SP;
+ call wm16 m_ea
WZ = m_ea + 1;
ed74 # NEG
@@ -5572,14 +5190,13 @@ ed77 # DB ED,77
illegal_2();
ed78 # IN A,(C)
- TADR = BC;
- call in
- A = TDAT8; set_f((F & CF) | SZP[A]); WZ = TADR + 1;
+ call in BC
+ A = TDAT8; set_f((F & CF) | SZP[A]); WZ = BC + 1;
ed79 # OUT (C),A
- TADR = BC; TDAT8 = A;
- call out
- WZ = TADR + 1;
+ TDAT8 = A;
+ call out BC
+ WZ = BC + 1;
ed7a # ADC HL,SP
TDAT = SP;
@@ -5587,8 +5204,8 @@ ed7a # ADC HL,SP
ed7b # LD SP,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
SP = TDAT; WZ = m_ea + 1;
ed7c # NEG
@@ -5998,8 +5615,8 @@ edff # DB ED
BC = TDAT;
0002 # LD (BC),A
- TADR = BC; TDAT8 = A;
- call wm
+ TDAT8 = A;
+ call wm BC
WZ_L = (BC + 1) & 0xFF; WZ_H = A;
0003 # INC BC
@@ -6028,8 +5645,7 @@ edff # DB ED
HL = TDAT;
000a # LD A,(BC)
- TADR = BC;
- call rm
+ call rm BC
A = TDAT8; WZ = BC+1;
000b # DEC BC
@@ -6059,8 +5675,8 @@ edff # DB ED
DE = TDAT;
0012 # LD (DE),A
- TADR = DE; TDAT8 = A;
- call wm
+ TDAT8 = A;
+ call wm DE
WZ_L = (DE + 1) & 0xFF; WZ_H = A;
0013 # INC DE
@@ -6089,8 +5705,7 @@ edff # DB ED
HL = TDAT;
001a # LD A,(DE)
- TADR = DE;
- call rm
+ call rm DE
A = TDAT8; WZ = DE + 1;
001b # DEC DE
@@ -6120,8 +5735,8 @@ edff # DB ED
0022 # LD (w),HL
call arg16
- m_ea = TDAT; TADR = TDAT; TDAT = HL;
- call wm16
+ m_ea = TDAT; TDAT = HL;
+ call wm16 m_ea
WZ = m_ea + 1;
0023 # INC HL
@@ -6152,8 +5767,8 @@ edff # DB ED
002a # LD HL,(w)
call arg16
- m_ea = TDAT; TADR = TDAT;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
HL = TDAT; WZ = m_ea + 1;
002b # DEC HL
@@ -6183,8 +5798,8 @@ edff # DB ED
0032 # LD (w),A
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT8 = A;
- call wm
+ m_ea = TDAT; TDAT8 = A;
+ call wm m_ea
WZ_L = (m_ea + 1) & 0xFF; WZ_H = A;
0033 # INC SP
@@ -6192,21 +5807,18 @@ edff # DB ED
SP++;
0034 # INC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
inc(TDAT8);
- call wm
+ call wm HL
0035 # DEC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
dec(TDAT8);
- call wm
+ call wm HL
0036 # LD (HL),n
call arg
- TADR = HL;
- call wm
+ call wm HL
0037 # SCF
set_f((F & (SF | ZF | PF)) | CF | (((F & Q) | A) & (YF | XF)));
@@ -6222,8 +5834,8 @@ edff # DB ED
003a # LD A,(w)
call arg16
- m_ea = TDAT; TADR = TDAT;
- call rm
+ m_ea = TDAT;
+ call rm m_ea
A = TDAT8; WZ = m_ea + 1;
003b # DEC SP
@@ -6261,8 +5873,7 @@ edff # DB ED
B = L;
0046 # LD B,(HL)
- TADR = HL;
- call rm
+ call rm HL
B = TDAT8;
0047 # LD B,A
@@ -6286,8 +5897,7 @@ edff # DB ED
C = L;
004e # LD C,(HL)
- TADR = HL;
- call rm
+ call rm HL
C = TDAT8;
004f # LD C,A
@@ -6311,8 +5921,7 @@ edff # DB ED
D = L;
0056 # LD D,(HL)
- TADR = HL;
- call rm
+ call rm HL
D = TDAT8;
0057 # LD D,A
@@ -6336,8 +5945,7 @@ edff # DB ED
E = L;
005e # LD E,(HL)
- TADR = HL;
- call rm
+ call rm HL
E = TDAT8;
005f # LD E,A
@@ -6361,8 +5969,7 @@ edff # DB ED
H = L;
0066 # LD H,(HL)
- TADR = HL;
- call rm
+ call rm HL
H = TDAT8;
0067 # LD H,A
@@ -6386,43 +5993,42 @@ edff # DB ED
006d # LD L,L
006e # LD L,(HL)
- TADR = HL;
- call rm
+ call rm HL
L = TDAT8;
006f # LD L,A
L = A;
0070 # LD (HL),B
- TADR = HL; TDAT = B;
- call wm
+ TDAT = B;
+ call wm HL
0071 # LD (HL),C
- TADR = HL; TDAT = C;
- call wm
+ TDAT = C;
+ call wm HL
0072 # LD (HL),D
- TADR = HL; TDAT = D;
- call wm
+ TDAT = D;
+ call wm HL
0073 # LD (HL),E
- TADR = HL; TDAT = E;
- call wm
+ TDAT = E;
+ call wm HL
0074 # LD (HL),H
- TADR = HL; TDAT = H;
- call wm
+ TDAT = H;
+ call wm HL
0075 # LD (HL),L
- TADR = HL; TDAT = L;
- call wm
+ TDAT = L;
+ call wm HL
0076 # HALT
halt();
0077 # LD (HL),A
- TADR = HL; TDAT = A;
- call wm
+ TDAT = A;
+ call wm HL
0078 # LD A,B
A = B;
@@ -6443,8 +6049,7 @@ edff # DB ED
A = L;
007e # LD A,(HL)
- TADR = HL;
- call rm
+ call rm HL
A = TDAT8;
007f # LD A,A
@@ -6468,8 +6073,7 @@ edff # DB ED
add_a(L);
0086 # ADD A,(HL)
- TADR = HL;
- call rm
+ call rm HL
add_a(TDAT8);
0087 # ADD A,A
@@ -6494,8 +6098,7 @@ edff # DB ED
adc_a(L);
008e # ADC A,(HL)
- TADR = HL;
- call rm
+ call rm HL
adc_a(TDAT8);
008f # ADC A,A
@@ -6520,8 +6123,7 @@ edff # DB ED
sub_a(L);
0096 # SUB (HL)
- TADR = HL;
- call rm
+ call rm HL
sub_a(TDAT8);
0097 # SUB A
@@ -6546,8 +6148,7 @@ edff # DB ED
sbc_a(L);
009e # SBC A,(HL)
- TADR = HL;
- call rm
+ call rm HL
sbc_a(TDAT8);
009f # SBC A,A
@@ -6572,8 +6173,7 @@ edff # DB ED
and_a(L);
00a6 # AND (HL)
- TADR = HL;
- call rm
+ call rm HL
and_a(TDAT8);
00a7 # AND A
@@ -6598,8 +6198,7 @@ edff # DB ED
xor_a(L);
00ae # XOR (HL)
- TADR = HL;
- call rm
+ call rm HL
xor_a(TDAT8);
00af # XOR A
@@ -6624,8 +6223,7 @@ edff # DB ED
or_a(L);
00b6 # OR (HL)
- TADR = HL;
- call rm
+ call rm HL
or_a(TDAT8);
00b7 # OR A
@@ -6650,8 +6248,7 @@ edff # DB ED
cp(L);
00be # CP (HL)
- TADR = HL;
- call rm
+ call rm HL
cp(TDAT8);
00bf # CP A
@@ -6677,8 +6274,7 @@ edff # DB ED
call call_cond
00c5 # PUSH BC
- TDAT = BC;
- call push
+ call push BC
00c6 # ADD A,n
call arg
@@ -6731,17 +6327,17 @@ edff # DB ED
00d3 # OUT (n),A
call arg
- TADR = TDAT8 | (A << 8); TDAT = A;
- call out
- WZ_L = ((TADR & 0xff) + 1) & 0xff; WZ_H = A;
+ TDAT2 = TDAT8 | (A << 8);
+ TDAT = A;
+ call out TDAT2
+ WZ_L = ((TDAT2 & 0xff) + 1) & 0xff; WZ_H = A;
00d4 # CALL NC,a
TDAT8 = !(F & CF);
call call_cond
00d5 # PUSH DE
- TDAT = DE;
- call push
+ call push DE
00d6 # SUB n
call arg
@@ -6763,9 +6359,9 @@ edff # DB ED
00db # IN A,(n)
call arg
- TADR = TDAT8 | (A << 8);
- call in
- A = TDAT8; WZ = TADR + 1;
+ TDAT2 = TDAT8 | (A << 8);
+ call in TDAT2
+ A = TDAT8; WZ = TDAT2 + 1;
00dc # CALL C,a
TDAT8 = F & CF;
@@ -6795,17 +6391,14 @@ edff # DB ED
call jp_cond
00e3 # EX HL,(SP)
- TDAT = HL;
- call ex_sp
- HL = TDAT;
+ call ex_sp HL
00e4 # CALL PO,a
TDAT8 = !(F & PF);
call call_cond
00e5 # PUSH HL
- TDAT = HL;
- call push
+ call push HL
00e6 # AND n
call arg
@@ -6863,8 +6456,7 @@ edff # DB ED
call call_cond
00f5 # PUSH AF
- TDAT = AF;
- call push
+ call push AF
00f6 # OR n
call arg
@@ -7600,10 +7192,9 @@ r800:cb35 # SLL L
L = r800_sll(L);
r800:cb36 # SLL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = r800_sll(TDAT8);
- call wm
+ call wm HL
r800:cb37 # SLL A
A = r800_sll(A);
@@ -8736,11 +8327,9 @@ r800:00f3 # DI
##########################################################
macro ldix
{
- TADR = HL;
- call rm
+ call rm HL
if (TDAT8 != A) {
- TADR = DE;
- call wm
+ call wm DE
;
}
HL++;
@@ -8750,11 +8339,9 @@ macro ldix
macro lddx
{
- TADR = HL;
- call rm
+ call rm HL
if (TDAT8 != A) {
- TADR = DE;
- call wm
+ call wm DE
;
}
DE++;
@@ -8817,15 +8404,14 @@ z80n:ed36 # add bc,**
BC += TDAT;
z80n:ed8a # push **
- call arg16
- using std::swap; swap(TDAT_H, TDAT_L);
- call push
+ call arg
+ TDAT_H = TDAT_L;
+ call arg
+ call push TDAT
z80n:ed90 # outinb
- TADR = HL;
- call rm
- TADR = BC;
- call out
+ call rm HL
+ call out BC
HL++;
z80n:ed91 # nextreg *,*
@@ -8851,18 +8437,15 @@ z80n:ed95 # setae
A = 0x80 >> (E & 7);
z80n:ed98 # jp (c)
- TADR = BC;
- call in
+ call in BC
PC = (PC & 0xc000) + (TDAT8 << 6);
z80n:eda4 # ldix
call ldix
z80n:eda5 # ldws
- TADR = HL;
- call rm
- TADR = DE;
- call wm
+ call rm HL
+ call wm DE
L++;
inc(D);
@@ -8875,11 +8458,9 @@ z80n:edb4 # ldirx
PC -= 2;
z80n:edb7 # ldpirx
- TADR = (HL & 0xfff8) + (E & 7);
- call rm
+ call rm (HL & 0xfff8) + (E & 7)
if (TDAT8 != A) {
- TADR = DE;
- call wm
+ call wm DE
;
}
DE++;
diff --git a/src/emu/diexec.cpp b/src/emu/diexec.cpp
index 1813dbff611..1cd5266c518 100644
--- a/src/emu/diexec.cpp
+++ b/src/emu/diexec.cpp
@@ -438,7 +438,7 @@ void device_execute_interface::interface_post_reset()
if (m_vblank_interrupt_screen != nullptr)
{
// get the screen that will trigger the VBLANK
- screen_device * screen = device().siblingdevice<screen_device>(m_vblank_interrupt_screen);
+ screen_device *const screen = device().siblingdevice<screen_device>(m_vblank_interrupt_screen);
assert(screen != nullptr);
screen->register_vblank_callback(vblank_state_delegate(&device_execute_interface::on_vblank, this));
diff --git a/src/emu/resampler.cpp b/src/emu/resampler.cpp
index b95fe80dfba..d319c4c0eb9 100644
--- a/src/emu/resampler.cpp
+++ b/src/emu/resampler.cpp
@@ -149,7 +149,7 @@
// Having the sum of coefficients being 1 ensures that.
-audio_resampler::audio_resampler(u32 fs, u32 ft)
+audio_resampler_hq::audio_resampler_hq(u32 fs, u32 ft, float latency, u32 max_order_per_lane, u32 max_lanes)
{
m_ft = ft;
m_fs = fs;
@@ -160,13 +160,13 @@ audio_resampler::audio_resampler(u32 fs, u32 ft)
m_fsm = ft / gcd;
// Compute the per-phase filter length to limit the latency to 5ms and capping it
- m_order_per_lane = u32(fs * 0.005 * 2);
- if(m_order_per_lane > 400)
- m_order_per_lane = 400;
+ m_order_per_lane = u32(fs * latency * 2);
+ if(m_order_per_lane > max_order_per_lane)
+ m_order_per_lane = max_order_per_lane;
- // Reduce the number of phases to be less than 200
+ // Reduce the number of phases to be less than max_lanes
m_phase_shift = 0;
- while(((m_fsm - 1) >> m_phase_shift) >= 200)
+ while(((m_fsm - 1) >> m_phase_shift) >= max_lanes)
m_phase_shift ++;
m_phases = ((m_fsm - 1) >> m_phase_shift) + 1;
@@ -217,7 +217,7 @@ audio_resampler::audio_resampler(u32 fs, u32 ft)
m_skip = m_ftm / m_fsm;
}
-u32 audio_resampler::compute_gcd(u32 fs, u32 ft)
+u32 audio_resampler_hq::compute_gcd(u32 fs, u32 ft)
{
u32 v1 = fs > ft ? fs : ft;
u32 v2 = fs > ft ? ft : fs;
@@ -229,7 +229,12 @@ u32 audio_resampler::compute_gcd(u32 fs, u32 ft)
return v1;
}
-void audio_resampler::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
+u32 audio_resampler_hq::history_size() const
+{
+ return m_order_per_lane;
+}
+
+void audio_resampler_hq::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
{
u32 seconds = dest_sample / m_ft;
u32 dsamp = dest_sample % m_ft;
@@ -255,7 +260,7 @@ void audio_resampler::apply(const emu::detail::output_buffer_flat<sample_t> &src
}
}
-void audio_resampler::apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
+void audio_resampler_hq::apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
{
u32 seconds = dest_sample / m_ft;
u32 dsamp = dest_sample % m_ft;
@@ -287,7 +292,7 @@ void audio_resampler::apply(const emu::detail::output_buffer_interleaved<s16> &s
}
-void audio_resampler::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const
+void audio_resampler_hq::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const
{
u32 seconds = dest_sample / m_ft;
u32 dsamp = dest_sample % m_ft;
@@ -315,3 +320,120 @@ void audio_resampler::apply(const emu::detail::output_buffer_flat<sample_t> &src
}
}
}
+
+
+// Now for the lo-fi version
+//
+// We mostly forget about filtering, and just try to do a decent
+// interpolation. There's a nice 4-point formula used in yamaha
+// devices from around 2000:
+// f0(t) = (t - t**3)/6
+// f1(t) = t + (t**2 - t**3)/2
+//
+// The polynoms are used with the decimal part 'p' (as in phase) of
+// the sample position. The computation from the four samples s0..s3
+// is:
+// s = - s0 * f0(1-p) + s1 * f1(1-p) + s2 * f1(p) - s3 * f0(p)
+//
+// The target sample must be between s1 and s2.
+//
+// When upsampling, that's enough. When downsampling, it feels like a
+// good idea to filter a little with a moving average, dividing the
+// source frequency by an integer just big enough to make the final
+// source frequency lower.
+
+// Sample interpolation functions f0 and f1
+
+const std::array<std::array<float, 0x1001>, 2> audio_resampler_lofi::interpolation_table = []() {
+ std::array<std::array<float, 0x1001>, 2> result;
+
+ // The exact way of doing the computations replicate the values
+ // actually used by the chip (which are very probably a rom, of
+ // course).
+
+ for(u32 i=1; i != 4096; i++) {
+ float p = i / 4096.0;
+ result[0][i] = (p - p*p*p) / 6;
+ }
+ for(u32 i=1; i != 2049; i++) {
+ float p = i / 4096.0;
+ result[1][i] = p + (p*p - p*p*p) / 2;
+ }
+ for(u32 i=2049; i != 4096; i++)
+ // When interpolating, f1 is added and f0 is subtracted, and the total must be 1
+ result[1][i] = 1.0 + result[0][i] + result[0][4096-i] - result[1][4096-i];
+
+ result[0][ 0] = 0.0;
+ result[0][0x1000] = 0.0;
+ result[1][ 0] = 0.0;
+ result[1][0x1000] = 1.0;
+ return result;
+}();
+
+audio_resampler_lofi::audio_resampler_lofi(u32 fs, u32 ft)
+{
+ m_fs = fs;
+ m_ft = ft;
+
+ m_source_divide = fs <= ft ? 1 : 1+fs/ft;
+ m_step = u64(fs) * 0x1000 / ft / m_source_divide;
+}
+
+
+u32 audio_resampler_lofi::history_size() const
+{
+ return 5 * m_source_divide;
+}
+
+void audio_resampler_lofi::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
+{
+ u32 seconds = dest_sample / m_ft;
+ u32 dsamp = dest_sample % m_ft;
+ u64 ssamp = (u64(dsamp) * m_fs * 0x1000) / m_ft;
+ u64 ssample = (ssamp >> 12) + u64(m_fs) * seconds;
+ u32 phase = ssamp & 0xfff;
+ if(m_source_divide > 1) {
+ u32 delta = ssample % m_source_divide;
+ phase = (phase | (delta << 12)) / m_source_divide;
+ ssample -= delta;
+ }
+
+ // We're getting 2 samples latency, which is small enough
+
+ ssample -= 4*m_source_divide;
+
+ const sample_t *s = src.ptrs(srcc, ssample - src.sync_sample());
+
+ std::function<sample_t()> reader;
+ if(m_source_divide == 1)
+ reader = [s]() mutable -> sample_t { return *s++; };
+ else
+ reader = [s, count = m_source_divide]() mutable -> sample_t { sample_t sm = 0; for(u32 i=0; i != count; i++) { sm += *s++; } return sm / count; };
+
+ sample_t s0 = reader();
+ sample_t s1 = reader();
+ sample_t s2 = reader();
+ sample_t s3 = reader();
+
+ sample_t *d = dest.data();
+ for(u32 sample = 0; sample != samples; sample++) {
+ *d++ = gain * (- s0 * interpolation_table[0][0x1000-phase] + s1 * interpolation_table[1][0x1000-phase] + s2 * interpolation_table[1][phase] - s3 * interpolation_table[0][phase]);
+
+ phase += m_step;
+ if(phase & 0x1000) {
+ phase &= 0xfff;
+ s0 = s1;
+ s1 = s2;
+ s2 = s3;
+ s3 = reader();
+ }
+ }
+}
+
+void audio_resampler_lofi::apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
+{
+}
+
+void audio_resampler_lofi::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const
+{
+}
diff --git a/src/emu/resampler.h b/src/emu/resampler.h
index c1b2f88f3e9..d0758b5ae7e 100644
--- a/src/emu/resampler.h
+++ b/src/emu/resampler.h
@@ -15,13 +15,26 @@ class audio_resampler
public:
using sample_t = sound_stream::sample_t;
- audio_resampler(u32 fs, u32 ft);
+ virtual ~audio_resampler() = default;
- u32 history_size() const { return m_order_per_lane; }
+ virtual u32 history_size() const = 0;
- void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const;
- void apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const;
- void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const;
+ virtual void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const = 0;
+ virtual void apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const = 0;
+ virtual void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const = 0;
+};
+
+class audio_resampler_hq : public audio_resampler
+{
+public:
+ audio_resampler_hq(u32 fs, u32 ft, float latency, u32 max_order_per_lane, u32 max_lanes);
+ virtual ~audio_resampler_hq() = default;
+
+ virtual u32 history_size() const override;
+
+ virtual void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const override;
+ virtual void apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const override;
+ virtual void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const override;
private:
u32 m_order_per_lane, m_ftm, m_fsm, m_ft, m_fs, m_delta, m_skip, m_phases, m_phase_shift;
@@ -31,5 +44,23 @@ private:
static u32 compute_gcd(u32 fs, u32 ft);
};
+class audio_resampler_lofi : public audio_resampler
+{
+public:
+ audio_resampler_lofi(u32 fs, u32 ft);
+ virtual ~audio_resampler_lofi() = default;
+
+ virtual u32 history_size() const override;
+
+ virtual void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const override;
+ virtual void apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const override;
+ virtual void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const override;
+
+private:
+ static const std::array<std::array<float, 0x1001>, 2> interpolation_table;
+ u32 m_source_divide, m_fs, m_ft;
+ u32 m_step;
+};
+
#endif
diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp
index 5ff9e86e1ed..dade6ed3479 100644
--- a/src/emu/sound.cpp
+++ b/src/emu/sound.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:O. Galibert, Aaron Giles
/***************************************************************************
sound.cpp
@@ -23,6 +23,8 @@
#include "osdepend.h"
+#include "util/language.h"
+
#include <algorithm>
//**************************************************************************
@@ -36,7 +38,7 @@
#define LOG_OSD_STREAMS (1U << 3)
#define LOG_ORDER (1U << 4)
-#define VERBOSE 0
+#define VERBOSE -1
#include "logmacro.h"
@@ -189,7 +191,7 @@ template<typename S> void emu::detail::output_buffer_flat<S>::resample(u32 previ
return;
auto si = [](attotime time, u32 rate) -> s64 {
- return time.m_seconds * rate + ((time.m_attoseconds / 100'000'000) * rate) / 10'000'000'000LL;
+ return time.m_seconds * rate + ((time.m_attoseconds / 100000000) * rate) / 10000000000LL;
};
auto cv = [](u32 source_rate, u32 dest_rate, s64 time) -> std::pair<s64, double> {
@@ -657,7 +659,11 @@ sound_manager::sound_manager(running_machine &machine) :
m_muted(0),
m_nosound_mode(machine.osd().no_sound()),
m_unique_id(0),
- m_wavfile()
+ m_wavfile(),
+ m_resampler_type(RESAMPLER_LOFI),
+ m_resampler_hq_latency(0.005),
+ m_resampler_hq_length(400),
+ m_resampler_hq_phases(200)
{
// register callbacks
machine.configuration().config_register(
@@ -2462,14 +2468,62 @@ void sound_manager::streams_update()
}
//**// Resampler management
-
const audio_resampler *sound_manager::get_resampler(u32 fs, u32 ft)
{
auto key = std::make_pair(fs, ft);
auto i = m_resamplers.find(key);
if(i != m_resamplers.end())
return i->second.get();
- auto *res = new audio_resampler(fs, ft);
+ audio_resampler *res;
+ if(m_resampler_type == RESAMPLER_HQ)
+ res = new audio_resampler_hq(fs, ft, m_resampler_hq_latency, m_resampler_hq_length, m_resampler_hq_phases);
+ else
+ res = new audio_resampler_lofi(fs, ft);
m_resamplers[key].reset(res);
return res;
}
+
+void sound_manager::rebuild_all_resamplers()
+{
+ m_resamplers.clear();
+
+ for(auto &stream : m_stream_list)
+ stream->create_resamplers();
+
+ for(auto &stream : m_stream_list)
+ stream->lookup_history_sizes();
+}
+
+void sound_manager::set_resampler_type(u32 type)
+{
+ m_resampler_type = type;
+ rebuild_all_resamplers();
+}
+
+void sound_manager::set_resampler_hq_latency(double latency)
+{
+ m_resampler_hq_latency = latency;
+ rebuild_all_resamplers();
+}
+
+void sound_manager::set_resampler_hq_length(u32 length)
+{
+ m_resampler_hq_length = length;
+ rebuild_all_resamplers();
+}
+
+void sound_manager::set_resampler_hq_phases(u32 phases)
+{
+ m_resampler_hq_phases = phases;
+ rebuild_all_resamplers();
+}
+
+const char *sound_manager::resampler_type_names(u32 type) const
+{
+ using util::lang_translate;
+
+ if(type == RESAMPLER_HQ)
+ return _("HQ");
+ else
+ return _("LoFi");
+}
diff --git a/src/emu/sound.h b/src/emu/sound.h
index 8039948362b..6d699dbb8d9 100644
--- a/src/emu/sound.h
+++ b/src/emu/sound.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:O. Galibert, Aaron Giles
/***************************************************************************
sound.h
@@ -379,6 +379,11 @@ class sound_manager
public:
using sample_t = sound_stream::sample_t;
+ enum {
+ RESAMPLER_LOFI,
+ RESAMPLER_HQ
+ };
+
struct mapping {
struct node_mapping {
u32 m_node;
@@ -465,6 +470,18 @@ public:
void mapping_update();
+ const char *resampler_type_names(u32 type) const;
+
+ u32 resampler_type() const { return m_resampler_type; }
+ double resampler_hq_latency() const { return m_resampler_hq_latency; }
+ u32 resampler_hq_length() const { return m_resampler_hq_length; }
+ u32 resampler_hq_phases() const { return m_resampler_hq_phases; }
+
+ void set_resampler_type(u32 type);
+ void set_resampler_hq_latency(double latency);
+ void set_resampler_hq_length(u32 length);
+ void set_resampler_hq_phases(u32 phases);
+
private:
struct effect_step {
std::unique_ptr<audio_effect> m_effect;
@@ -583,7 +600,7 @@ private:
void update_osd_streams();
void update_osd_input();
void speakers_update(attotime endtime);
-
+ void rebuild_all_resamplers();
void run_effects();
u64 rate_and_time_to_index(attotime time, u32 sample_rate) const;
@@ -642,6 +659,11 @@ private:
std::vector<std::unique_ptr<sound_stream>> m_stream_list; // list of streams
std::vector<sound_stream *> m_ordered_streams; // Streams in update order
u32 m_outputs_count;
+
+ // resampler data
+ u32 m_resampler_type;
+ double m_resampler_hq_latency;
+ u32 m_resampler_hq_length, m_resampler_hq_phases;
};
diff --git a/src/frontend/mame/ui/audioeffects.cpp b/src/frontend/mame/ui/audioeffects.cpp
index 6ac84e22954..750ef69815b 100644
--- a/src/frontend/mame/ui/audioeffects.cpp
+++ b/src/frontend/mame/ui/audioeffects.cpp
@@ -32,9 +32,64 @@ menu_audio_effects::~menu_audio_effects()
{
}
+double menu_audio_effects::change_f(const double *table, double value, int change)
+{
+ u32 bi = 0;
+ double dt = 1e300;
+ u32 index;
+ for(index = 0; table[index]; index++) {
+ double d1 = value - table[index];
+ if(d1 < 0)
+ d1 = -d1;
+ if(d1 < dt) {
+ dt = d1;
+ bi = index;
+ }
+ }
+ if((change != -1 || bi != 0) && (change != 1 || bi != index-1))
+ bi += change;
+ return table[bi];
+}
+
+u32 menu_audio_effects::change_u32(const u32 *table, u32 value, int change)
+{
+ u32 bi = 0;
+ s32 dt = 2e9;
+ u32 index;
+ for(index = 0; table[index]; index++) {
+ s32 d1 = value - table[index];
+ if(d1 < 0)
+ d1 = -d1;
+ if(d1 < dt) {
+ dt = d1;
+ bi = index;
+ }
+ }
+ if((change != -1 || bi != 0) && (change != 1 || bi != index-1))
+ bi += change;
+ return table[bi];
+}
+
bool menu_audio_effects::handle(event const *ev)
{
- if(ev && (ev->iptkey == IPT_UI_SELECT)) {
+ static const double latencies[] = {
+ 0.0005, 0.0010, 0.0025, 0.0050, 0.0100, 0.0250, 0.0500, 0
+ };
+
+ static const u32 lengths[] = {
+ 10, 20, 30, 40, 50, 75, 100, 200, 300, 400, 500, 0
+ };
+
+ static const u32 phases[] = {
+ 10, 20, 30, 40, 50, 75, 100, 200, 300, 400, 500, 1000, 0
+ };
+
+
+ if(!ev)
+ return false;
+
+ switch(ev->iptkey) {
+ case IPT_UI_SELECT: {
u16 chain = (uintptr_t(ev->itemref)) >> 16;
u16 entry = (uintptr_t(ev->itemref)) & 0xffff;
audio_effect *eff = chain == 0xffff ? machine().sound().default_effect_chain()[entry] : machine().sound().effect_chain(chain)[entry];
@@ -50,10 +105,115 @@ bool menu_audio_effects::handle(event const *ev)
return true;
}
+ case IPT_UI_LEFT: {
+ switch(uintptr_t(ev->itemref)) {
+ case RS_TYPE:
+ machine().sound().set_resampler_type(sound_manager::RESAMPLER_LOFI);
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+
+ case RS_LATENCY:
+ machine().sound().set_resampler_hq_latency(change_f(latencies, machine().sound().resampler_hq_latency(), -1));
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+
+ case RS_LENGTH:
+ machine().sound().set_resampler_hq_length(change_u32(lengths, machine().sound().resampler_hq_length(), -1));
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+
+ case RS_PHASES:
+ machine().sound().set_resampler_hq_phases(change_u32(phases, machine().sound().resampler_hq_phases(), -1));
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+ }
+ break;
+ }
+
+ case IPT_UI_RIGHT: {
+ switch(uintptr_t(ev->itemref)) {
+ case RS_TYPE:
+ machine().sound().set_resampler_type(sound_manager::RESAMPLER_HQ);
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+
+ case RS_LATENCY:
+ machine().sound().set_resampler_hq_latency(change_f(latencies, machine().sound().resampler_hq_latency(), 1));
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+
+ case RS_LENGTH:
+ machine().sound().set_resampler_hq_length(change_u32(lengths, machine().sound().resampler_hq_length(), 1));
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+
+ case RS_PHASES:
+ machine().sound().set_resampler_hq_phases(change_u32(phases, machine().sound().resampler_hq_phases(), 1));
+ reset(reset_options::REMEMBER_POSITION);
+ return true;
+ }
+ break;
+ }
+ }
+
return false;
}
+std::string menu_audio_effects::format_lat(double latency)
+{
+ return util::string_format("%3.1fms", 1000*latency);
+}
+
+std::string menu_audio_effects::format_u32(u32 val)
+{
+ return util::string_format("%u", val);
+}
+
+u32 menu_audio_effects::flag_type() const
+{
+ u32 flag = 0;
+ u32 type = machine().sound().resampler_type();
+ if(type != sound_manager::RESAMPLER_LOFI)
+ flag |= FLAG_LEFT_ARROW;
+ if(type != sound_manager::RESAMPLER_HQ)
+ flag |= FLAG_RIGHT_ARROW;
+ return flag;
+}
+
+u32 menu_audio_effects::flag_lat() const
+{
+ u32 flag = 0;
+ double latency = machine().sound().resampler_hq_latency();
+ if(latency > 0.0005)
+ flag |= FLAG_LEFT_ARROW;
+ if(latency < 0.0500)
+ flag |= FLAG_RIGHT_ARROW;
+ return flag;
+}
+
+u32 menu_audio_effects::flag_length() const
+{
+ u32 flag = 0;
+ double latency = machine().sound().resampler_hq_length();
+ if(latency > 10)
+ flag |= FLAG_LEFT_ARROW;
+ if(latency < 500)
+ flag |= FLAG_RIGHT_ARROW;
+ return flag;
+}
+
+u32 menu_audio_effects::flag_phases() const
+{
+ u32 flag = 0;
+ double latency = machine().sound().resampler_hq_phases();
+ if(latency > 10)
+ flag |= FLAG_LEFT_ARROW;
+ if(latency < 1000)
+ flag |= FLAG_RIGHT_ARROW;
+ return flag;
+}
+
void menu_audio_effects::populate()
{
auto &sound = machine().sound();
@@ -68,6 +228,11 @@ void menu_audio_effects::populate()
auto eff = sound.default_effect_chain();
for(u32 e = 0; e != eff.size(); e++)
item_append(_(audio_effect::effect_names[eff[e]->type()]), 0, (void *)intptr_t((0xffff << 16) | e));
+ item_append(_("Resampler"), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
+ item_append(_("Type"), sound.resampler_type_names(sound.resampler_type()), flag_type(), (void *)RS_TYPE);
+ item_append(_("HQ latency"), format_lat(sound.resampler_hq_latency()), flag_lat(), (void *)RS_LATENCY);
+ item_append(_("HQ filter max size"), format_u32(sound.resampler_hq_length()), flag_length(), (void *)RS_LENGTH);
+ item_append(_("HQ filter max phases"), format_u32(sound.resampler_hq_phases()), flag_phases(), (void *)RS_PHASES);
item_append(menu_item_type::SEPARATOR);
}
diff --git a/src/frontend/mame/ui/audioeffects.h b/src/frontend/mame/ui/audioeffects.h
index 1ee15da82f9..f61d82fe825 100644
--- a/src/frontend/mame/ui/audioeffects.h
+++ b/src/frontend/mame/ui/audioeffects.h
@@ -31,8 +31,21 @@ protected:
virtual void menu_deactivated() override;
private:
+ enum { RS_TYPE, RS_LATENCY, RS_LENGTH, RS_PHASES };
+
virtual void populate() override;
virtual bool handle(event const *ev) override;
+
+ u32 flag_type() const;
+ u32 flag_lat() const;
+ u32 flag_length() const;
+ u32 flag_phases() const;
+
+ static double change_f(const double *table, double value, int change);
+ static u32 change_u32(const u32 *table, u32 value, int change);
+
+ static std::string format_lat(double latency);
+ static std::string format_u32(u32 val);
};
} // namespace ui
diff --git a/src/mame/act/victor9k.cpp b/src/mame/act/victor9k.cpp
index 87299548c54..cfcc84f3672 100644
--- a/src/mame/act/victor9k.cpp
+++ b/src/mame/act/victor9k.cpp
@@ -102,6 +102,7 @@ public:
m_maincpu(*this, I8088_TAG),
m_ieee488(*this, IEEE488_TAG),
m_pic(*this, I8259A_TAG),
+ m_pit(*this, I8253_TAG),
m_upd7201(*this, UPD7201_TAG),
m_ssda(*this, MC6852_TAG),
m_via1(*this, M6522_1_TAG),
@@ -138,6 +139,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<ieee488_device> m_ieee488;
required_device<pic8259_device> m_pic;
+ required_device<pit8253_device> m_pit;
required_device<upd7201_device> m_upd7201;
required_device<mc6852_device> m_ssda;
required_device<via6522_device> m_via1;
@@ -188,9 +190,6 @@ private:
MC6845_UPDATE_ROW( crtc_update_row );
MC6845_BEGIN_UPDATE( crtc_begin_update );
- void mux_serial_b_w(int state);
- void mux_serial_a_w(int state);
-
void victor9k_palette(palette_device &palette) const;
// video state
@@ -228,7 +227,7 @@ void victor9k_state::victor9k_mem(address_map &map)
map(0x00000, 0x1ffff).ram();
map(0x20000, 0xdffff).noprw();
map(0xe0000, 0xe0001).mirror(0x7f00).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write));
- map(0xe0020, 0xe0023).mirror(0x7f00).rw(I8253_TAG, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
+ map(0xe0020, 0xe0023).mirror(0x7f00).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0xe0040, 0xe0043).mirror(0x7f00).rw(m_upd7201, FUNC(upd7201_device::cd_ba_r), FUNC(upd7201_device::cd_ba_w));
map(0xe8000, 0xe8000).mirror(0x7f00).rw(m_crtc, FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w));
map(0xe8001, 0xe8001).mirror(0x7f00).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
@@ -358,14 +357,6 @@ void victor9k_state::vert_w(int state)
m_pic->ir7_w(state);
}
-void victor9k_state::mux_serial_b_w(int state)
-{
-}
-
-void victor9k_state::mux_serial_a_w(int state)
-{
-}
-
//-------------------------------------------------
// PIC8259
//-------------------------------------------------
@@ -770,13 +761,15 @@ void victor9k_state::victor9k(machine_config &config)
PIC8259(config, m_pic, 0);
m_pic->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- pit8253_device &pit(PIT8253(config, I8253_TAG, 0));
- pit.set_clk<0>(2500000);
- pit.out_handler<0>().set(FUNC(victor9k_state::mux_serial_b_w));
- pit.set_clk<1>(2500000);
- pit.out_handler<1>().set(FUNC(victor9k_state::mux_serial_a_w));
- pit.set_clk<2>(100000);
- pit.out_handler<2>().set(I8259A_TAG, FUNC(pic8259_device::ir2_w));
+ PIT8253(config, m_pit, 0);
+ m_pit->set_clk<0>(15_MHz_XTAL / 12);
+ m_pit->out_handler<0>().set(m_upd7201, FUNC(upd7201_device::rxca_w));
+ m_pit->out_handler<0>().append(m_upd7201, FUNC(upd7201_device::txca_w));
+ m_pit->set_clk<1>(15_MHz_XTAL / 12);
+ m_pit->out_handler<1>().set(m_upd7201, FUNC(upd7201_device::rxcb_w));
+ m_pit->out_handler<1>().append(m_upd7201, FUNC(upd7201_device::txcb_w));
+ m_pit->set_clk<2>(125000);
+ m_pit->out_handler<2>().set(I8259A_TAG, FUNC(pic8259_device::ir2_w));
UPD7201(config, m_upd7201, 15_MHz_XTAL / 6);
m_upd7201->out_txda_callback().set(RS232_A_TAG, FUNC(rs232_port_device::write_txd));
diff --git a/src/mame/bmc/koftball.cpp b/src/mame/bmc/koftball.cpp
index a29413b5391..c986aa05b91 100644
--- a/src/mame/bmc/koftball.cpp
+++ b/src/mame/bmc/koftball.cpp
@@ -35,6 +35,30 @@ ft5_v6_c2.u60 | Graphics
ft5_v6_c3.u61 |
ft5_v6_c4.u58 /
+
+koftball has a full set of soft settings accessible from the bookeeping menu:
+
+English translation Default Chinese
+
+odds adjustment 機率調整
+five of a kind boost 0 五梅加强
+royal flush boost 0 同花大順加强
+straight flush boost 0 同花順加强
+four of a kind boost 0 四梅加强
+ 0 小牌加强
+odds 98.5 機率
+double up odds 98 比倍
+
+system settings 系統設定
+minimum bet to win jackpot 30 中彩金最小押分
+payout unit 100 退分單位
+maximum bet 100 押分上限
+bet unit 2 押分單位
+minimum bet 20 最小押分
+key-in unit 200 上分單位
+key-in limit 5000 上分上限
+credit limit 50000 得分上限
+
*/
#include "emu.h"
@@ -111,7 +135,8 @@ private:
u8 m_pixpal = 0;
void irq_ack_w(u8 data);
- void outputs_w(u8 data);
+ void koftball_outputs_w(u8 data);
+ void kaimenhu_outputs_w(u8 data);
u16 random_number_r();
u16 prot_r();
u16 kaimenhu_prot_r();
@@ -125,9 +150,10 @@ private:
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
+
+ void koftball_mem(address_map &map) ATTR_COLD;
void jxzh_mem(address_map &map) ATTR_COLD;
void kaimenhu_mem(address_map &map) ATTR_COLD;
- void koftball_mem(address_map &map) ATTR_COLD;
void ramdac_map(address_map &map) ATTR_COLD;
};
@@ -300,7 +326,15 @@ void koftball_state::irq_ack_w(u8 data)
m_maincpu->set_input_line(i, CLEAR_LINE);
}
-void koftball_state::outputs_w(u8 data)
+void koftball_state::koftball_outputs_w(u8 data)
+{
+ machine().bookkeeping().coin_counter_w(1, BIT(data, 0)); // credits paid out by key-out
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 1)); // credits in
+ // bit 3 always set?
+ // bit 7 always set?
+}
+
+void koftball_state::kaimenhu_outputs_w(u8 data)
{
m_hopper->motor_w(BIT(data, 0));
machine().bookkeeping().coin_counter_w(0, BIT(data, 1)); // credits in
@@ -339,7 +373,7 @@ void koftball_state::koftball_mem(address_map &map)
map(0x2dc000, 0x2dc000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x2f0000, 0x2f0003).portr("INPUTS");
- map(0x300000, 0x300001).nopw();
+ map(0x300001, 0x300001).w(FUNC(koftball_state::koftball_outputs_w));
map(0x320000, 0x320000).lw8(NAME([this] (u8 data) { m_gfx_ctrl = data; LOGGFX("GFX ctrl $320000 (layer enable) %02x\n", data); }));
map(0x340000, 0x340001).r(FUNC(koftball_state::prot_r));
map(0x360000, 0x360001).w(FUNC(koftball_state::prot_w));
@@ -375,7 +409,7 @@ void koftball_state::jxzh_mem(address_map &map)
map(0x2dc000, 0x2dc000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x2f0000, 0x2f0001).portr("INPUTS");
- map(0x300001, 0x300001).w(FUNC(koftball_state::outputs_w));
+ map(0x300001, 0x300001).w(FUNC(koftball_state::kaimenhu_outputs_w));
map(0x320000, 0x320000).lw8(NAME([this] (u8 data) { m_gfx_ctrl = data; LOGGFX("GFX ctrl $320000 (layer enable) %02x\n", data); }));
map(0x340000, 0x340001).r(FUNC(koftball_state::prot_r));
map(0x360000, 0x360001).w(FUNC(koftball_state::prot_w));
@@ -399,71 +433,71 @@ static INPUT_PORTS_START( koftball )
PORT_START("INPUTS")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) // also decrease in sound test
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) // also increase in sound test
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) // Decrease in settings menus
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) // Down in settings menus
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) // Up in settings menus
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) // Increase in settings menus
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // Default in settings menus
PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) // test mode enter
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_GAMBLE_LOW )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_START("DSW")
- PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!8")
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!7")
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!6")
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!5")
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!4")
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!3")
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!2")
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!1")
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!8")
- PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!7")
- PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!6")
- PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!5")
- PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!4")
- PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!3")
- PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!2")
- PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:!1")
- PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x0001, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x0002, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x0004, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x0008, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x0010, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Show Spend" ) PORT_DIPLOCATION("SW1:3") // shows the amount you've spent as well above current credits when on
+ PORT_DIPSETTING( 0x0020, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x0040, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x0080, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x0100, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x0200, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:6")
+ PORT_DIPSETTING( 0x0400, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:5")
+ PORT_DIPSETTING( 0x0800, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:4")
+ PORT_DIPSETTING( 0x1000, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING( 0x2000, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING( 0x4000, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW2:1")
+ PORT_DIPSETTING( 0x8000, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x0000, DEF_STR(On) )
INPUT_PORTS_END
static INPUT_PORTS_START( kaimenhu )
@@ -632,6 +666,7 @@ void koftball_state::kaimenhu(machine_config &config)
}
+// 足球王 (Zúqiú Wáng), BMC 1995
ROM_START( koftball )
ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "ft5_v16_c6.u15", 0x00000, 0x10000, CRC(5e1784a5) SHA1(5690d315500fb533b12b598cb0a51bd1eadd0505) )
@@ -769,6 +804,6 @@ void koftball_state::init_koftball()
} // anonymous namespace
-GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "King of Football", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1996, jxzh, 0, jxzh, jxzh, koftball_state, empty_init, ROT0, "BMC", "Jinxiu Zhonghua", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1996, kaimenhu, jxzh, kaimenhu, kaimenhu, koftball_state, empty_init, ROT0, "BMC", "Kaimen Hu", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "Zuqiu Wang - King of Football", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1996, jxzh, 0, jxzh, jxzh, koftball_state, empty_init, ROT0, "BMC", "Jinxiu Zhonghua", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1996, kaimenhu, jxzh, kaimenhu, kaimenhu, koftball_state, empty_init, ROT0, "BMC", "Kaimen Hu", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/capcom/cps2.cpp b/src/mame/capcom/cps2.cpp
index 13e356aba0e..44c61e0a4e4 100644
--- a/src/mame/capcom/cps2.cpp
+++ b/src/mame/capcom/cps2.cpp
@@ -2891,6 +2891,30 @@ ROM_START( choko )
ROM_LOAD( "choko.key", 0x000000, 0x000014, CRC(08505e8b) SHA1(5c481ffaa93faec57d0b80b678c8c0cca1a699c0) )
ROM_END
+ROM_START( chokop )
+ ROM_REGION( CODE_SIZE, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "tkojp_03.bin", 0x000000, 0x80000, CRC(4d857f39) SHA1(bc941e8333889345da58f20370e758d4a15f587f) )
+ ROM_LOAD16_WORD_SWAP( "tkojp_04.bin", 0x080000, 0x80000, CRC(137afb29) SHA1(a020b5f2d8cdcd9d6c8302f1535a3502297a55c2) )
+
+ ROM_REGION( 0x1000000, "gfx", 0 )
+ ROM_FILL( 0x000000, 0x800000, 0x00 )
+ ROM_LOAD64_WORD( "tko_14.bin", 0x800000, 0x200000, CRC(336e8aa2) SHA1(bebe4f56bcd96d573a4fa0e887b8b9aaabff58eb) )
+ ROM_LOAD64_WORD( "tko_16.bin", 0x800002, 0x200000, CRC(e8429b54) SHA1(9833db4c6378f1f04d1747a0daa268503bc7cc5e) )
+ ROM_LOAD64_WORD( "tko_18.bin", 0x800004, 0x200000, CRC(62092fbd) SHA1(293abb3ab4f43323ea4b11a1786532549bcac8e1) )
+ ROM_LOAD64_WORD( "tko_20.bin", 0x800006, 0x200000, CRC(b468a666) SHA1(86c228152ae778ab8459e813a80c67e7e1eee80e) )
+
+ ROM_REGION(QSOUND_SIZE, "audiocpu", 0 ) // 64k for the audio CPU (+banks)
+ ROM_LOAD( "tko_01.bin", 0x00000, 0x08000, CRC(6eda50c2) SHA1(7e67c104094a3ced8b3fdd81f52ee42483b30fc5) )
+ ROM_CONTINUE( 0x10000, 0x18000 )
+
+ ROM_REGION( 0x300000, "qsound", 0 ) // QSound samples
+ ROM_LOAD16_WORD_SWAP( "tko_11.bin", 0x000000, 0x200000, CRC(ca7179b1) SHA1(98d0c9d8766843b289d49ccae7083b262adfc83a) )
+ ROM_LOAD16_WORD_SWAP( "tko_12.bin", 0x200000, 0x100000, CRC(83a4e635) SHA1(933d02264ce922fb12a2c08b8c06167c75fe2241) )
+
+ ROM_REGION( 0x20, "key", 0 )
+ ROM_LOAD( "phoenix.key", 0x000000, 0x000014, CRC(2cf772b0) SHA1(eff33c65a4f3862c231f9e4d6fefa7b34398dbf2) )
+ROM_END
+
ROM_START( csclub )
ROM_REGION( CODE_SIZE, "maincpu", 0 ) // 68000 code
ROM_LOAD16_WORD_SWAP( "csce.03a", 0x000000, 0x80000, CRC(824082be) SHA1(a44e7e17d73e089b4e7784317f2387d135d01482) )
@@ -6691,6 +6715,35 @@ ROM_START( pzloop2jr1 )
ROM_LOAD( "pzloop2.key", 0x000000, 0x000014, CRC(ae13be78) SHA1(5c715f0ef1e0664027faa6c2a7f0f878462cb7ae) )
ROM_END
+ROM_START( pzloop2jp )
+ ROM_REGION( CODE_SIZE, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_WORD_SWAP( "pl2j_03.bin", 0x000000, 0x80000, CRC(e9f904c3) SHA1(544fdcf9ca121d34b20108b459ab2aba6f225210) )
+ ROM_LOAD16_WORD_SWAP( "pl2j_04.bin", 0x080000, 0x80000, CRC(61c7c18f) SHA1(45c889ca68357604cec5426bb76ca83c72c3a381) )
+ ROM_LOAD16_WORD_SWAP( "pl2j_05.bin", 0x100000, 0x80000, CRC(ee6da97c) SHA1(ac098327b58b5d84d6df61d076d1030ae4cf492d) )
+ ROM_LOAD16_WORD_SWAP( "pl2j_06.bin", 0x180000, 0x80000, CRC(97e1c3ac) SHA1(70e590e6897a6e3eabaf2190c178da5f72439b0f) )
+
+ ROM_REGION( 0x1000000, "gfx", 0 )
+ ROM_LOAD64_WORD( "pl2-13m.bin", 0x0000000, 0x200000, CRC(5f3b5f91) SHA1(ad2a27bbbf5a903df6e2e583e5b374baa19ae891) )
+ ROM_LOAD64_WORD( "pl2-15m.bin", 0x0000002, 0x200000, CRC(3702f309) SHA1(72b95a87405c04f322afbe24d1f32b5714e0c2b3) )
+ ROM_LOAD64_WORD( "pl2-17m.bin", 0x0000004, 0x200000, CRC(62d3fce9) SHA1(b80e0c4ad6c889cecdfa6166b5eb0f432614f37b) )
+ ROM_LOAD64_WORD( "pl2-19m.bin", 0x0000006, 0x200000, CRC(6dcbd8ce) SHA1(eddb5638f159d3d77262ffb1367ddbe9ee2c447b) )
+ ROM_LOAD64_WORD( "pl2-14m.bin", 0x0800000, 0x200000, CRC(2e22e71a) SHA1(6cc1b72d4323eccc8cdf2deee3668c38e1b356c4) )
+ ROM_LOAD64_WORD( "pl2-16m.bin", 0x0800002, 0x200000, CRC(38090022) SHA1(4db7ea3f75da31d32e1c94f512d89ce51c90a122) )
+ ROM_LOAD64_WORD( "pl2-18m.bin", 0x0800004, 0x200000, CRC(33afdd44) SHA1(1ea971bc2551dcdfe2849c44a373bcad6915d02d) )
+ ROM_LOAD64_WORD( "pl2-20m.bin", 0x0800006, 0x200000, CRC(d4ae0278) SHA1(f25fd5b6f079194b0bffabd3d9e63f023bca59b3) )
+
+ ROM_REGION( QSOUND_SIZE, "audiocpu", 0 ) // 64k for the audio CPU (+banks)
+ ROM_LOAD( "pl2_01.bin", 0x00000, 0x08000, CRC(35697569) SHA1(13718923cffb9ec53cef9e22d8875370b5f3dd74) )
+ ROM_CONTINUE( 0x10000, 0x18000 )
+
+ ROM_REGION( 0x400000, "qsound", 0 ) // QSound samples
+ ROM_LOAD16_WORD_SWAP( "pl2-11m.bin", 0x000000, 0x200000, CRC(85d8fbe8) SHA1(c19d5e9084d07e610379b6e1b6be7bdf0b9b7f7f) ) // ROM on a SIMM
+ ROM_LOAD16_WORD_SWAP( "pl2-12m.bin", 0x200000, 0x200000, CRC(1ed62584) SHA1(28411f610f48cca6424a2d53e2a4ac691e826317) ) // ROM on a SIMM
+
+ ROM_REGION( 0x20, "key", 0 )
+ ROM_LOAD( "phoenix.key", 0x000000, 0x000014, CRC(2cf772b0) SHA1(eff33c65a4f3862c231f9e4d6fefa7b34398dbf2) )
+ROM_END
+
ROM_START( qndream )
ROM_REGION(CODE_SIZE, "maincpu", 0 ) // 68000 code
ROM_LOAD16_WORD_SWAP( "tqzj.03a", 0x000000, 0x80000, CRC(7acf3e30) SHA1(5e2a697f98185731afc4130286a2699033dd02af) )
@@ -12848,7 +12901,9 @@ GAME( 2000, mpanga, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, RO
GAME( 2001, pzloop2, 0, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Europe 010302)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2j, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010226)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2jr1, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010205)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, pzloop2jp, pzloop2, dead_cps2, pzloop2,cps2_state, init_pzloop2,ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010201 Publicity)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, choko, 0, cps2, choko, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, chokop, 0, dead_cps2, choko,cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820 Publicity)", MACHINE_SUPPORTS_SAVE )
// Games released on CPS-2 hardware by Eighting/Raizing
diff --git a/src/mame/casio/pickytlk.cpp b/src/mame/casio/pickytlk.cpp
index 508b82cc636..9830111499c 100644
--- a/src/mame/casio/pickytlk.cpp
+++ b/src/mame/casio/pickytlk.cpp
@@ -570,6 +570,13 @@ ROM_START(jd364)
ROM_LOAD("d23c8000lwgx-c12.lsi5", 0x00000, 0x100000, CRC(c023b709) SHA1(0c081a62f00d0fbee496a5c9067fb145cb79c8cd))
ROM_END
+ROM_START(jd366)
+ CPU_ROM_MULTICOLOR
+
+ ROM_REGION(0x100000, "mask_rom", 0)
+ ROM_LOAD("d23c8000xgx-c15.lsi5", 0x00000, 0x100000, CRC(d8a84c6a) SHA1(6a64dff0070c0016457c69fc0518df57da9c1b75))
+ROM_END
+
ROM_START(jd368)
CPU_ROM_MULTICOLOR
@@ -610,6 +617,9 @@ COMP(1995?, pickydis, 0, 0, pickytlk_monocolor, pickytlk, pickytlk_monocolor_sta
// Release date 1995-10 from "Casio Game Perfect Catalogue"
COMP(1995, jd364, 0, 0, pickytlk_multicolor, pickytlk, pickytlk_multicolor_state, empty_init, "Casio", "Color Picky Talk - Super Denshi Techou", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+// ROM date 9635K7021
+COMP(1996?, jd366, 0, 0, pickytlk_multicolor, pickytlk, pickytlk_multicolor_state, empty_init, "Casio", "Super Picky Talk - My room fantasy", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+
// ROM date 9737K7041
COMP(1997?, jd368, 0, 0, pickytlk_multicolor, pickytlk, pickytlk_multicolor_state, empty_init, "Casio", "Super Picky Talk - Access Pet", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
diff --git a/src/mame/gaelco/gaelco2.cpp b/src/mame/gaelco/gaelco2.cpp
index 06fd46a43b3..9887972d73b 100644
--- a/src/mame/gaelco/gaelco2.cpp
+++ b/src/mame/gaelco/gaelco2.cpp
@@ -1903,11 +1903,37 @@ NOTE: It's unknown if Player 1 & Player 2 controls are connected through the JAM
Wires run to male JAMMA board with corresponding JP1, JP2, JP3 & JP4 connectors for cabinet 2 JAMMA harness
*/
+ROM_START( touchgo ) // REF: 950510-1
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "tg_873d_56_5-2.ic56", 0x000000, 0x080000, CRC(6d0f5c65) SHA1(00db7a7da3ec1676169aa78fe4f08a7746c3accf) ) // IC63 for REF: 950510-1, IC56 for REF: 950906
+ ROM_LOAD16_BYTE( "tg_cee8_57_5-2.ic57", 0x000001, 0x080000, CRC(845787b5) SHA1(27c9910cd9f38328326ecb5cd093dfeb6d4f6244) ) // IC64 for REF: 950510-1, IC57 for REF: 950906
+
+ ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
+ ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
-ROM_START( touchgo ) // REF: 950906
+ ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
+ // touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots
+ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) )
+ // these are the default states stored in NVRAM
+ DS5002FP_SET_MON( 0x19 )
+ DS5002FP_SET_RPCTL( 0x00 )
+ DS5002FP_SET_CRCR( 0x80 )
+
+ ROM_REGION( 0x1400000, "gfx", 0 ) // GFX + Sound
+ // 0x0000000-0x0ffffff filled in in the DRIVER_INIT
+ ROM_LOAD( "tg_ic69.ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) // GFX only
+
+ ROM_REGION( 0x0c00000, "gfx_temp", 0 ) // Temporary storage
+ ROM_LOAD( "tg_ic65.ic65", 0x0000000, 0x0400000, CRC(91b89c7c) SHA1(1c24b494b56845b0f21be40ab737f251d7683c7d) ) // GFX only
+ ROM_LOAD( "tg_ic66.ic66", 0x0400000, 0x0200000, CRC(52682953) SHA1(82cde061bdd827ed4a47a9a4256cd0e887ebc29d) ) // Sound only
+ ROM_FILL( 0x0600000, 0x0200000, 0x00 ) // Empty
+ ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
+ROM_END
+
+ROM_START( touchgoa ) // REF: 950906
ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
- ROM_LOAD16_BYTE( "tg_56.ic56", 0x000000, 0x080000, CRC(8ab065f3) SHA1(7664abd7e5f66ffca4a2865bba56ac36bd04f4e9) )
- ROM_LOAD16_BYTE( "tg_57.ic57", 0x000001, 0x080000, CRC(0dfd3f65) SHA1(afb2ce8988c84f211ac71b84928ce4c421de7fee) )
+ ROM_LOAD16_BYTE( "tg_be51_5.6_11-12.ic56", 0x000000, 0x080000, CRC(8ab065f3) SHA1(7664abd7e5f66ffca4a2865bba56ac36bd04f4e9) )
+ ROM_LOAD16_BYTE( "tg_6701_5.7_11-12.ic57", 0x000001, 0x080000, CRC(0dfd3f65) SHA1(afb2ce8988c84f211ac71b84928ce4c421de7fee) )
ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
@@ -1931,10 +1957,92 @@ ROM_START( touchgo ) // REF: 950906
ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
ROM_END
-ROM_START( touchgon ) // REF 950906, no plug-in daughterboard, Non North America Notice, also found on REF: 950510-1 with daughterboard
+ROM_START( touchgona )
ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
- ROM_LOAD16_BYTE( "1.ic63", 0x000000, 0x080000, CRC(fd3b4642) SHA1(3cab42aecad5ee641711763c6047b56784c2bcf3) ) // IC63 for REF: 950510-1, IC56 for REF: 950906
- ROM_LOAD16_BYTE( "2.ic64", 0x000001, 0x080000, CRC(ee891835) SHA1(9f8c60e5e3696b70f756c3521e10313005053cc7) ) // IC64 for REF: 950510-1, IC57 for REF: 950906
+ ROM_LOAD16_BYTE( "v_us_56_f546_14-11.ic56", 0x000000, 0x080000, CRC(3bfe2010) SHA1(bd1584e89c6201dd0e88be3f7c19e5820c43bfee) )
+ ROM_LOAD16_BYTE( "v_us_57_d888_14-11.ic57", 0x000001, 0x080000, CRC(c8a9e7bd) SHA1(4d84c34713f63789b51fdee17ca0d77c0e259740) )
+ ROM_FILL( 0x1, 1, 0xfe ) // initial stack pointer in u57 points to ROM not RAM, but checksum matched label?!
+
+ ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
+ ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
+
+ ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
+ // touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots
+ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) )
+ // these are the default states stored in NVRAM
+ DS5002FP_SET_MON( 0x19 )
+ DS5002FP_SET_RPCTL( 0x00 )
+ DS5002FP_SET_CRCR( 0x80 )
+
+ ROM_REGION( 0x1400000, "gfx", 0 ) // GFX + Sound
+ // 0x0000000-0x0ffffff filled in in the DRIVER_INIT
+ ROM_LOAD( "tg_ic69.ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) // GFX only
+
+ ROM_REGION( 0x0c00000, "gfx_temp", 0 ) // Temporary storage
+ ROM_LOAD( "tg_ic65.ic65", 0x0000000, 0x0400000, CRC(91b89c7c) SHA1(1c24b494b56845b0f21be40ab737f251d7683c7d) ) // GFX only
+ ROM_LOAD( "tg_ic66.ic66", 0x0400000, 0x0200000, CRC(52682953) SHA1(82cde061bdd827ed4a47a9a4256cd0e887ebc29d) ) // Sound only
+ ROM_FILL( 0x0600000, 0x0200000, 0x00 ) // Empty
+ ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
+ROM_END
+
+ROM_START( touchgonna )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "v_e_56_ef33_16-11.ic56", 0x000000, 0x080000, CRC(c2715874) SHA1(3df2c19a2ce74fa3c6eccea7938004a03c0381ff) )
+ ROM_LOAD16_BYTE( "v_o_57_9c10_16-11.ic57", 0x000001, 0x080000, CRC(3acefb06) SHA1(0fc67855cd7e310a9c06d11feb260b463657a6a7) )
+
+ ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
+ ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
+
+ ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
+ // touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots
+ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) )
+ // these are the default states stored in NVRAM
+ DS5002FP_SET_MON( 0x19 )
+ DS5002FP_SET_RPCTL( 0x00 )
+ DS5002FP_SET_CRCR( 0x80 )
+
+ ROM_REGION( 0x1400000, "gfx", 0 ) // GFX + Sound
+ // 0x0000000-0x0ffffff filled in in the DRIVER_INIT
+ ROM_LOAD( "tg_ic69.ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) // GFX only
+
+ ROM_REGION( 0x0c00000, "gfx_temp", 0 ) // Temporary storage
+ ROM_LOAD( "tg_ic65.ic65", 0x0000000, 0x0400000, CRC(91b89c7c) SHA1(1c24b494b56845b0f21be40ab737f251d7683c7d) ) // GFX only
+ ROM_LOAD( "tg_ic66.ic66", 0x0400000, 0x0200000, CRC(52682953) SHA1(82cde061bdd827ed4a47a9a4256cd0e887ebc29d) ) // Sound only
+ ROM_FILL( 0x0600000, 0x0200000, 0x00 ) // Empty
+ ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
+ROM_END
+
+ROM_START( touchgonnaa )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "v_e_c79b_56_15-11.ic56", 0x000000, 0x080000, CRC(d92bb02a) SHA1(06ba060b00b6dcc734eaac9771dcecf508be1aff) )
+ ROM_LOAD16_BYTE( "v_e_b34a_57_15-11.ic57", 0x000001, 0x080000, CRC(0711c8ba) SHA1(b4d2d20421ec2f6ef9ee0259cf2be85641272359) )
+
+ ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
+ ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
+
+ ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
+ // touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots
+ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) )
+ // these are the default states stored in NVRAM
+ DS5002FP_SET_MON( 0x19 )
+ DS5002FP_SET_RPCTL( 0x00 )
+ DS5002FP_SET_CRCR( 0x80 )
+
+ ROM_REGION( 0x1400000, "gfx", 0 ) // GFX + Sound
+ // 0x0000000-0x0ffffff filled in in the DRIVER_INIT
+ ROM_LOAD( "tg_ic69.ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) // GFX only
+
+ ROM_REGION( 0x0c00000, "gfx_temp", 0 ) // Temporary storage
+ ROM_LOAD( "tg_ic65.ic65", 0x0000000, 0x0400000, CRC(91b89c7c) SHA1(1c24b494b56845b0f21be40ab737f251d7683c7d) ) // GFX only
+ ROM_LOAD( "tg_ic66.ic66", 0x0400000, 0x0200000, CRC(52682953) SHA1(82cde061bdd827ed4a47a9a4256cd0e887ebc29d) ) // Sound only
+ ROM_FILL( 0x0600000, 0x0200000, 0x00 ) // Empty
+ ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
+ROM_END
+
+ROM_START( touchgonnab )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "v_alt_e_56_15-11.ic56", 0x000000, 0x080000, CRC(64b83556) SHA1(917c30f391c5bc2ce3ab3687c35ce3c429033cf1) )
+ ROM_LOAD16_BYTE( "v_alt_o_57_15-11.ic57", 0x000001, 0x080000, CRC(e9ceb77a) SHA1(aaeb5d51b6df4273a5ae2b0c160aa26d33f89c1d) )
ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
@@ -1958,10 +2066,10 @@ ROM_START( touchgon ) // REF 950906, no plug-in daughterboard, Non North America
ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
ROM_END
-ROM_START( touchgoe ) // REF: 950510-1
+ROM_START( touchgonnac ) // REF 950906, no plug-in daughterboard, non North America notice, also found on REF: 950510-1 with daughterboard
ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
- ROM_LOAD16_BYTE( "tg56.ic63", 0x000000, 0x080000, CRC(6d0f5c65) SHA1(00db7a7da3ec1676169aa78fe4f08a7746c3accf) ) // IC63 for REF: 950510-1, IC56 for REF: 950906
- ROM_LOAD16_BYTE( "tg57.ic64", 0x000001, 0x080000, CRC(845787b5) SHA1(27c9910cd9f38328326ecb5cd093dfeb6d4f6244) ) // IC64 for REF: 950510-1, IC57 for REF: 950906
+ ROM_LOAD16_BYTE( "1.ic63", 0x000000, 0x080000, CRC(fd3b4642) SHA1(3cab42aecad5ee641711763c6047b56784c2bcf3) ) // IC63 for REF: 950510-1, IC56 for REF: 950906
+ ROM_LOAD16_BYTE( "2.ic64", 0x000001, 0x080000, CRC(ee891835) SHA1(9f8c60e5e3696b70f756c3521e10313005053cc7) ) // IC64 for REF: 950510-1, IC57 for REF: 950906
ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) // DS5002FP code
ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) )
@@ -1985,10 +2093,10 @@ ROM_START( touchgoe ) // REF: 950510-1
ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
ROM_END
-ROM_START( touchgok ) // REF: 950510-1 - ds5002fp unpopulated, game is unprotected
+ROM_START( touchgoun ) // REF: 950510-1 - ds5002fp unpopulated, game is unprotected
ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
- ROM_LOAD16_BYTE( "56.ic56", 0x000000, 0x080000, CRC(cbb87505) SHA1(f19832af60fb6273c3263ebdd93bb7705ab61e20) ) // IC63 for REF: 950510-1, IC56 for REF: 950906
- ROM_LOAD16_BYTE( "57.ic57", 0x000001, 0x080000, CRC(36bcc7e7) SHA1(2fff881ba0a99ebcfe3c03fdc61f4bf40e152c7f) ) // IC64 for REF: 950510-1, IC57 for REF: 950906
+ ROM_LOAD16_BYTE( "tg_d_56_1e4b_no_dallas.ic56", 0x000000, 0x080000, CRC(cbb87505) SHA1(f19832af60fb6273c3263ebdd93bb7705ab61e20) ) // IC63 for REF: 950510-1, IC56 for REF: 950906
+ ROM_LOAD16_BYTE( "tg_d_57_060d_no_dallas.ic57", 0x000001, 0x080000, CRC(36bcc7e7) SHA1(2fff881ba0a99ebcfe3c03fdc61f4bf40e152c7f) ) // IC64 for REF: 950510-1, IC57 for REF: 950906
ROM_REGION( 0x1400000, "gfx", 0 ) // GFX + Sound
// 0x0000000-0x0ffffff filled in in the DRIVER_INIT
@@ -2001,6 +2109,7 @@ ROM_START( touchgok ) // REF: 950510-1 - ds5002fp unpopulated, game is unprotect
ROM_LOAD( "tg_ic67.ic67", 0x0800000, 0x0400000, CRC(c0a2ce5b) SHA1(94b024373c7c546c0f4fe9737639f02e9c7ebbdb) ) // GFX only
ROM_END
+
/*============================================================================
SNOW BOARD
============================================================================*/
@@ -2733,32 +2842,36 @@ GAME( 1994, aligatorun, aligator, alighunt, alighunt, gaelco2_state,
GAME( 1994, aligatoruna, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 2)", 0 ) // strange version, starts on space stages, but clearly a recompile not a trivial hack of the above, show version maybe?
GAME( 1994, aligatorp, aligator, alighunt_d5002fp, alighunt, gaelco2_state, empty_init, ROT0, "Gaelco", "Alligator Hunt (protected, prototype?)", MACHINE_NOT_WORKING ) // requires different protection program / data
-GAME( 1995, touchgo, 0, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (World)", 0 )
-GAME( 1995, touchgon, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (Non North America)", 0 )
-GAME( 1995, touchgoe, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (earlier revision)", 0 )
-GAME( 1995, touchgok, touchgo, touchgo, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (Korea, unprotected)", 0 ) // doesn't say 'Korea' but was sourced there, shows 2 copyright lines like the 'earlier revision'
+GAME( 1996, touchgo, 0, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (World, 05/Feb/1996, checksum 059D0235)", 0 )
+GAME( 1995, touchgoa, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (World, 11/Dec/1995, checksum 05A0C7FB)", 0 )
+GAME( 1995, touchgona, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (North America, 14/Nov/1995, checksum 05737572)", 0 )
+GAME( 1995, touchgonna, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (non North America, 16/Nov/1995, checksum 056533F0)", 0 )
+GAME( 1995, touchgonnaa, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (non North America, 15/Nov/1995, checksum 056C2336)", 0 )
+GAME( 1995, touchgonnab, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (non North America, 15/Nov/1995, checksum 056C138F)", 0 )
+GAME( 1995, touchgonnac, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (non North America, 11/Nov/2005, checksum 056AA304)", 0 )
+GAME( 1995, touchgoun, touchgo, touchgo, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch and Go (unprotected, checksum 059CC336)", 0 )
GAME( 1995, wrally2, 0, wrally2, wrally2, wrally2_state, init_wrally2, ROT0, "Gaelco", "World Rally 2: Twin Racing (mask ROM version)", 0 )
GAME( 1995, wrally2a, wrally2, wrally2, wrally2, wrally2_state, empty_init, ROT0, "Gaelco", "World Rally 2: Twin Racing (EPROM version)", 0 )
// All sets identify as Version 1.0, but are clearly different revisions
-GAME( 1996, maniacsq, 0, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum DEEE)", 0 )
-GAME( 1996, maniacsqa, maniacsq, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum CF2D)", 0 )
-GAME( 1996, maniacsqu, maniacsq, maniacsq, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum BB73)", 0 )
-GAME( 1996, maniacsqs, maniacsq, maniacsqs, snowboar, snowboar_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum 66B1, 960419/1 PCB)", 0 ) // Official version on Snow Board Championship PCB, doesn't use the protection
+GAME( 1996, maniacsq, 0, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, version 1.0, checksum DEEE)", 0 )
+GAME( 1996, maniacsqa, maniacsq, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, version 1.0, checksum CF2D)", 0 )
+GAME( 1996, maniacsqu, maniacsq, maniacsq, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, version 1.0, checksum BB73)", 0 )
+GAME( 1996, maniacsqs, maniacsq, maniacsqs, snowboar, snowboar_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, version 1.0, checksum 66B1, 960419/1 PCB)", 0 ) // Official version on Snow Board Championship PCB, doesn't use the protection
-GAME( 1997, snowboar, 0, snowboar, snowboar, snowboar_state, empty_init, ROT0, "Gaelco / OMK", "Snow Board Championship (Version 2.1)", 0 )
-GAME( 1996, snowboara, snowboar, snowboar, snowboar, snowboar_state, init_snowboara, ROT0, "Gaelco / OMK", "Snow Board Championship (Version 2.0)", 0 )
+GAME( 1997, snowboar, 0, snowboar, snowboar, snowboar_state, empty_init, ROT0, "Gaelco / OMK", "Snow Board Championship (version 2.1)", 0 )
+GAME( 1996, snowboara, snowboar, snowboar, snowboar, snowboar_state, init_snowboara, ROT0, "Gaelco / OMK", "Snow Board Championship (version 2.0)", 0 )
-GAME( 1998, bang, 0, bang, bang, bang_state, empty_init, ROT0, "Gaelco / Bit Managers", "Bang!", 0 )
+GAME( 1998, bang, 0, bang, bang, bang_state, empty_init, ROT0, "Gaelco / Bit Managers", "Bang!", 0 )
GAME( 1999, bangj, bang, bang, bang, bang_state, empty_init, ROT0, "Gaelco / Bit Managers (GM Shoji license)", "Gun Gabacho (Japan)", 0 )
// Hardware manufactured by Gaelco for Nova Desitec but without any Gaelco branding.
// 2-in-1 gambling game, these are Italian versions, English versions also exist
-GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy)", 0 )
-GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump
-GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 )
+GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy)", 0 )
+GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump
+GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 )
GAME( 1998, srollnd, 0, srollnd, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Super Roller (v7.0)", MACHINE_NOT_WORKING ) // missing ds5002fp dump
@@ -2767,6 +2880,6 @@ GAME( 1999, chmppool, 0, srollnd, play2000, gaelco2_state,
GAME( 1999, jungleani, 0, srollnd, play2000, gaelco2_state, init_play2000, ROT0, "New Impeuropex Corp. / New Chitarrina", "Jungle's Animals (v3.0)", MACHINE_NOT_WORKING ) // Developed by Nova Desitec, missing ds5002fp dump
// Gym equipment
-GAME( 1997, sltpcycl, 0, saltcrdi, saltcrdi, gaelco2_state, init_play2000, ROT0, "Salter Fitness / Gaelco", "Pro Cycle Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB)", 0 ) // Same board and ROM as Pro Reclimber
-GAME( 1997, sltpstep, 0, saltcrdi, saltcrdi, gaelco2_state, init_play2000, ROT0, "Salter Fitness / Gaelco", "Pro Stepper Tele Cardioline (Salter Fitness Stepper V.1.0, Checksum F208)", 0 )
+GAME( 1997, sltpcycl, 0, saltcrdi, saltcrdi, gaelco2_state, init_play2000, ROT0, "Salter Fitness / Gaelco", "Pro Cycle Tele Cardioline (Salter fitness bike, V.1.0, checksum 02AB)", 0 ) // Same board and ROM as Pro Reclimber
+GAME( 1997, sltpstep, 0, saltcrdi, saltcrdi, gaelco2_state, init_play2000, ROT0, "Salter Fitness / Gaelco", "Pro Stepper Tele Cardioline (Salter fitness stepper, V.1.0, checksum F208)", 0 )
// there are other devices in Cardioline series but they don't use displays and aren't on Gaelco hardware
diff --git a/src/mame/igs/igs011.cpp b/src/mame/igs/igs011.cpp
index ec6c08faa8a..a10619ea2b5 100644
--- a/src/mame/igs/igs011.cpp
+++ b/src/mame/igs/igs011.cpp
@@ -60,7 +60,7 @@ To do:
Also the background palette is wrong since the fade routine is called with wrong
parameters, but in this case the PCB does the same.
-- lhb3: DIP definitions
+- lhb3: emulated game crashes with an illegal instruction error on bookkeeping menu
- xymga: stop during attract mode with 'RECORD ERROR 3'
@@ -151,11 +151,11 @@ public:
protected:
struct blitter_t
{
- u16 x, y, w, h,
- gfx_lo, gfx_hi,
- depth,
- pen,
- flags;
+ u16 x = 0, y = 0, w = 0, h = 0,
+ gfx_lo = 0, gfx_hi = 0,
+ depth = 0,
+ pen = 0,
+ flags = 0;
};
/* devices */
@@ -179,29 +179,29 @@ protected:
optional_ioport m_io_coin;
std::unique_ptr<u8[]> m_layer[8];
- u16 m_priority;
- u8 m_blitter_pen_hi;
- u16 m_dips_sel;
- u16 m_input_sel;
- u16 m_hopper_bit;
- u8 m_prot1;
- u8 m_prot1_swap;
- u32 m_prot1_addr;
- u8 m_prot2;
- u8 m_igs012_prot;
- u8 m_igs012_prot_swap;
- u8 m_igs012_prot_mode;
- u16 m_igs003_reg;
- u16 m_lhb_irq_enable;
+ u16 m_priority = 0;
+ u8 m_blitter_pen_hi = 0;
+ u16 m_dips_sel = 0;
+ u16 m_input_sel = 0;
+ u16 m_hopper_bit = 0;
+ u8 m_prot1 = 0;
+ u8 m_prot1_swap = 0;
+ u32 m_prot1_addr = 0;
+ u8 m_prot2 = 0;
+ u8 m_igs012_prot = 0;
+ u8 m_igs012_prot_swap = 0;
+ u8 m_igs012_prot_mode = 0;
+ u16 m_igs003_reg = 0;
+ u16 m_lhb_irq_enable = 0;
blitter_t m_blitter;
- u16 m_igs003_prot_hold;
- u8 m_igs003_prot_x;
- u8 m_igs003_prot_y;
- u8 m_igs003_prot_z;
- u8 m_igs003_prot_h1;
- u8 m_igs003_prot_h2;
+ u16 m_igs003_prot_hold = 0;
+ u8 m_igs003_prot_x = 0;
+ u8 m_igs003_prot_y = 0;
+ u8 m_igs003_prot_z = 0;
+ u8 m_igs003_prot_h1 = 0;
+ u8 m_igs003_prot_h2 = 0;
virtual void machine_start() override ATTR_COLD;
virtual void video_start() override ATTR_COLD;
@@ -592,17 +592,14 @@ void igs011_state::igs011_blit_flags_w(offs_t offset, u16 data, u16 mem_mask)
clear_pen = m_blitter.pen;
}
- const int xstart = (m_blitter.x & 0x1ff) - (m_blitter.x & 0x200);
- const int ystart = (m_blitter.y & 0x0ff) - (m_blitter.y & 0x100);
-
- int xend, xinc;
- int yend, yinc;
-
- if (flipx) { xend = xstart - (m_blitter.w & 0x1ff) - 1; xinc = -1; }
- else { xend = xstart + (m_blitter.w & 0x1ff) + 1; xinc = 1; }
-
- if (flipy) { yend = ystart - (m_blitter.h & 0x0ff) - 1; yinc = -1; }
- else { yend = ystart + (m_blitter.h & 0x0ff) + 1; yinc = 1; }
+ const int xstart = util::sext(m_blitter.x, 10);
+ const int ystart = util::sext(m_blitter.y, 9);
+ const int xsize = (m_blitter.w & 0x1ff) + 1;
+ const int ysize = (m_blitter.h & 0x0ff) + 1;
+ const int xend = flipx ? (xstart - xsize) : (xstart + xsize);
+ const int yend = flipy ? (ystart - ysize) : (ystart + ysize);
+ const int xinc = flipx ? -1 : 1;
+ const int yinc = flipy ? -1 : 1;
for (int y = ystart; y != yend; y += yinc)
{
@@ -2910,7 +2907,7 @@ void igs011_state::lhb2_mem(address_map &map)
map(0x000000, 0x07ffff).rom();
// lhb2: IGS011 protection dynamically mapped at 1ff8x
-// map(0x01ff80, 0x01ff87).w(FUNC(igs011_state::igs011_prot1_w)).umask16(0xff00);
+// map(0x01ff80, 0x01ff87).umask16(0xff00).w(FUNC(igs011_state::igs011_prot1_w));
// map(0x01ff88, 0x01ff89).r(FUNC(igs011_state::igs011_prot1_r));
map(0x020000, 0x0201ff).w(FUNC(igs011_state::igs011_prot2_inc_w)); // inc (55)
@@ -2920,12 +2917,12 @@ void igs011_state::lhb2_mem(address_map &map)
map(0x100000, 0x103fff).ram().share("nvram");
map(0x200001, 0x200001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x204000, 0x204003).w("ymsnd", FUNC(ym2413_device::write)).umask16(0x00ff);
+ map(0x204000, 0x204003).umask16(0x00ff).w("ymsnd", FUNC(ym2413_device::write));
map(0x208000, 0x208001).nopr().w(FUNC(igs011_state::igs003_w));
map(0x208002, 0x208003).rw(FUNC(igs011_state::lhb2_igs003_r), FUNC(igs011_state::lhb2_igs003_w));
map(0x20c000, 0x20cfff).ram().share(m_priority_ram);
- map(0x210000, 0x210fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
- map(0x211000, 0x211fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
+ map(0x210000, 0x210fff).umask16(0x00ff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).share("palette");
+ map(0x211000, 0x211fff).umask16(0x00ff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).share("palette_ext");
map(0x214000, 0x214001).portr("COIN");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
map(0xa20000, 0xa20001).w(FUNC(igs011_state::igs011_priority_w));
@@ -3397,7 +3394,7 @@ static INPUT_PORTS_START( lhb2 )
PORT_DIPSETTING( 0x02, "70%" )
PORT_DIPSETTING( 0x01, "74%" )
PORT_DIPSETTING( 0x00, "78%" )
- PORT_DIPNAME( 0x08, 0x00, "Odds Rate" ) PORT_DIPLOCATION("SW1:4") // 倍數?
+ PORT_DIPNAME( 0x08, 0x00, "Odds Rate" ) PORT_DIPLOCATION("SW1:4") // 倍數表
PORT_DIPSETTING( 0x00, "1,2,3,4,5,6,7,8" )
PORT_DIPSETTING( 0x08, "1,2,3,5,8,15,30,50" )
PORT_DIPNAME( 0x10, 0x00, "Maximum Bet" ) PORT_DIPLOCATION("SW1:5") // 最大押注
@@ -3408,9 +3405,9 @@ static INPUT_PORTS_START( lhb2 )
PORT_DIPSETTING( 0x40, "2" )
PORT_DIPSETTING( 0x20, "3" )
PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPNAME( 0x80, 0x80, "Credit Timer" ) PORT_DIPLOCATION("SW1:8") // ??清除 (clears credits after timeout if you don't start a game)
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) // ?
- PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // ?
+ PORT_DIPNAME( 0x80, 0x80, "Credit Timer" ) PORT_DIPLOCATION("SW1:8") // 自動清除 (clears credits after timeout if you don't start a game)
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // ?
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2") // 投幣比率
@@ -3430,22 +3427,24 @@ static INPUT_PORTS_START( lhb2 )
PORT_DIPNAME( 0x20, 0x20, "Payout Mode" ) PORT_DIPLOCATION("SW2:6") // 退分方式
PORT_DIPSETTING( 0x20, "Key-Out" ) // 洗分
PORT_DIPSETTING( 0x00, "Return Coins" ) // 退幣 (doesn't seem to work properly)
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW2:7" ) // ????
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8") // ??音?
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // ?
- PORT_DIPSETTING( 0x80, DEF_STR( On ) ) // ?
+ PORT_DIPNAME( 0x40, 0x40, "Auto Reach" ) PORT_DIPLOCATION("SW2:7") // 自動摸打 (automatically draws and discards tiles after reach)
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ?
+ PORT_DIPSETTING( 0x40, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW2:8") // 示範音樂
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x80, DEF_STR(On) ) // 有
PORT_START("DSW3")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:1,2") // ??限?
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:1,2") // 破台限制
PORT_DIPSETTING( 0x03, "500" )
PORT_DIPSETTING( 0x02, "1000" )
PORT_DIPSETTING( 0x01, "2000" )
PORT_DIPSETTING( 0x00, "?" ) // ?限?
PORT_DIPNAME( 0x0c, 0x0c, "Gals" ) PORT_DIPLOCATION("SW3:3,4") // 美女
- PORT_DIPSETTING( 0x0c, "0?" ) // ?美女
- PORT_DIPSETTING( 0x08, "1?" ) // ?美女
- PORT_DIPSETTING( 0x04, "2?" ) // ?開女
- PORT_DIPSETTING( 0x00, "3?" ) // ?開女
+ PORT_DIPSETTING( 0x0c, DEF_STR(Off) ) // 無美女
+ PORT_DIPSETTING( 0x08, "1?" ) // ??
+ PORT_DIPSETTING( 0x04, "2?" ) // 開?
+ PORT_DIPSETTING( 0x00, "3?" ) // 開?
PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW3:5" ) // (not shown in settings display)
PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW3:6" ) // (not shown in settings display)
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW3:7" ) // (not shown in settings display)
@@ -3582,37 +3581,39 @@ INPUT_PORTS_END
// basically same game as lhb2 and nkishusp but with joystick controls
static INPUT_PORTS_START( tygn )
PORT_START("DSW1")
- PORT_DIPNAME( 0x07, 0x07, "Pay Out (%)" ) PORT_DIPLOCATION("DSW1:1,2,3")
- PORT_DIPSETTING( 0x07, "50" )
- PORT_DIPSETTING( 0x06, "54" )
- PORT_DIPSETTING( 0x05, "58" )
- PORT_DIPSETTING( 0x04, "62" )
- PORT_DIPSETTING( 0x03, "66" )
- PORT_DIPSETTING( 0x02, "70" )
- PORT_DIPSETTING( 0x01, "74" )
- PORT_DIPSETTING( 0x00, "78" )
- PORT_DIPNAME( 0x08, 0x08, "Minimum Bet" ) PORT_DIPLOCATION("DSW1:4")
+ PORT_DIPNAME( 0x07, 0x02, "Payout Rate" ) PORT_DIPLOCATION("SW1:1,2,3") // 機率調整
+ PORT_DIPSETTING( 0x07, "50%" )
+ PORT_DIPSETTING( 0x06, "54%" )
+ PORT_DIPSETTING( 0x05, "58%" )
+ PORT_DIPSETTING( 0x04, "62%" )
+ PORT_DIPSETTING( 0x03, "66%" )
+ PORT_DIPSETTING( 0x02, "70%" )
+ PORT_DIPSETTING( 0x01, "74%" )
+ PORT_DIPSETTING( 0x00, "78%" )
+ PORT_DIPNAME( 0x08, 0x08, "Minimum Bet" ) PORT_DIPLOCATION("SW1:4") // 最小押注
PORT_DIPSETTING( 0x08, "1" )
PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:5,6")
- PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:7")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_DIPLOCATION("DSW1:8")
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW1:5,6") // 投幣比率
+ PORT_DIPSETTING( 0x00, DEF_STR(2C_1C) )
+ PORT_DIPSETTING( 0x30, DEF_STR(1C_1C) )
+ PORT_DIPSETTING( 0x20, DEF_STR(1C_2C) )
+ PORT_DIPSETTING( 0x10, DEF_STR(1C_3C) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:7") // 示範音樂
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ?
+ PORT_DIPSETTING( 0x40, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x80, 0x80, "Credit Timer" ) PORT_DIPLOCATION("SW1:8") // 自動清除 (clears credits after timeout if you don't start a game)
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // ?
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // ?
PORT_START("DSW2") // not shown in test mode
- PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPLOCATION("DSW2:1")
- PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPLOCATION("DSW2:2")
- PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPLOCATION("DSW2:3")
- PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPLOCATION("DSW2:4")
- PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPLOCATION("DSW2:5")
- PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPLOCATION("DSW2:6")
- PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPLOCATION("DSW2:7")
- PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_DIPLOCATION("DSW2:8")
+ PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPLOCATION("SW2:1")
+ PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPLOCATION("SW2:2")
+ PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPLOCATION("SW2:4")
+ PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPLOCATION("SW2:5")
+ PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPLOCATION("SW2:6")
+ PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_DIPLOCATION("SW2:8")
PORT_START("DSW3") // only 2 out of 4 DIP banks phisically present
PORT_DIPNAME( 0xff, 0xff, DEF_STR( Unused ) )
@@ -3659,8 +3660,53 @@ static INPUT_PORTS_START( tygn )
INPUT_PORTS_END
-static INPUT_PORTS_START( wlcc )
+static INPUT_PORTS_START( xymg )
PORT_START("DSW1")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW1:1,2") // 投幣比率
+ PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) )
+ PORT_DIPSETTING( 0x02, DEF_STR(1C_2C) )
+ PORT_DIPSETTING( 0x01, DEF_STR(1C_3C) )
+ PORT_DIPSETTING( 0x00, DEF_STR(1C_4C) )
+ PORT_DIPNAME( 0x0c, 0x0c, "Key-in Rate" ) PORT_DIPLOCATION("SW1:3,4") // 開分比率
+ PORT_DIPSETTING( 0x0c, "10" )
+ PORT_DIPSETTING( 0x08, "20" )
+ PORT_DIPSETTING( 0x04, "50" )
+ PORT_DIPSETTING( 0x00, "100" )
+ PORT_DIPNAME( 0x10, 0x10, "Credit Limit" ) PORT_DIPLOCATION("SW1:5") // 進分上限
+ PORT_DIPSETTING( 0x10, "500" )
+ PORT_DIPSETTING( 0x00, "Unlimited" ) // 無限制 (if you have 10,000 or more credits, further credits will be rejected)
+ PORT_DIPNAME( 0x20, 0x20, "Credit Mode" ) PORT_DIPLOCATION("SW1:6") // 進分方式
+ PORT_DIPSETTING( 0x20, "Coin Acceptor" ) // 投幣
+ PORT_DIPSETTING( 0x00, "Key-In" ) // 開分
+ PORT_DIPNAME( 0x40, 0x40, "Payout Mode" ) PORT_DIPLOCATION("SW1:7") // 退分方式
+ PORT_DIPSETTING( 0x40, "Return Coins" ) // 退幣
+ PORT_DIPSETTING( 0x00, "Key-Out" ) // 洗分
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:8") // 示範音樂
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x80, DEF_STR(On) ) // 有
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x03, 0x03, "Double Up Jackpot" ) PORT_DIPLOCATION("SW2:1,2") // 比倍爆機
+ PORT_DIPSETTING( 0x03, "1000" )
+ PORT_DIPSETTING( 0x02, "1500" )
+ PORT_DIPSETTING( 0x01, "2000" )
+ PORT_DIPSETTING( 0x00, "3000" )
+ PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("SW2:3,4") // 最小押注
+ PORT_DIPSETTING( 0x0c, "1" )
+ PORT_DIPSETTING( 0x08, "2" )
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x10, 0x10, "Double Up Game" ) PORT_DIPLOCATION("SW2:5") // 比倍遊戲
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x10, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x20, 0x20, "Title Screen" ) PORT_DIPLOCATION("SW2:6" ) // (not shown in settings display)
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // (shows disclaimer and copyright message over black background)
+ PORT_DIPSETTING( 0x20, DEF_STR(On) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW2:7" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" ) // (not shown in settings display)
+
+ // FIXME: SW3 doesn't respond in input test - are these hooked up correctly?
+ PORT_START("DSW3")
PORT_DIPUNKNOWN( 0x01, 0x01 )
PORT_DIPUNKNOWN( 0x02, 0x02 )
PORT_DIPUNKNOWN( 0x04, 0x04 )
@@ -3670,77 +3716,113 @@ static INPUT_PORTS_START( wlcc )
PORT_DIPUNKNOWN( 0x40, 0x40 )
PORT_DIPUNKNOWN( 0x80, 0x80 )
+ // TODO: hook up SW4 shown in input test but not settings display
+ // TODO: hook up SW5 shown in input test but not settings display
+
+ PORT_START("COIN")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(igs011_state::igs_hopper_r)) // hopper switch
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x00)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW1", 0x40, EQUALS, 0x40)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW1", 0x40, EQUALS, 0x00)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_INCLUDE(igs_mahjong_matrix)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( wlcc )
+ PORT_START("DSW1")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW3:1" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW3:2" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW3:3" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW3:4" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW3:5" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW3:6" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW3:7" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW3:8" ) // (not shown in settings display)
+
PORT_START("DSW2")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x03, 0x03, "Double Up Jackpot" ) PORT_DIPLOCATION("SW2:1,2") // 比倍爆機
PORT_DIPSETTING( 0x03, "1000" )
PORT_DIPSETTING( 0x02, "1500" )
PORT_DIPSETTING( 0x01, "2000" )
PORT_DIPSETTING( 0x00, "3000" )
- PORT_DIPNAME( 0x0c, 0x0c, "Min Bet" )
+ PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("SW2:3,4") // 最小押注
PORT_DIPSETTING( 0x0c, "1" )
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x04, "3" )
PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPUNKNOWN( 0x10, 0x10 ) // shown in test mode
- PORT_DIPUNKNOWN( 0x20, 0x20 )
- PORT_DIPNAME( 0x40, 0x40, "Hide Title" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPUNKNOWN( 0x80, 0x80 )
+ PORT_DIPNAME( 0x10, 0x10, "Double Up Game" ) PORT_DIPLOCATION("SW2:5") // 比倍遊戲
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x10, DEF_STR(On) ) // 有
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW2:6" ) // (not shown in settings display)
+ PORT_DIPNAME( 0x40, 0x40, "Title Screen" ) PORT_DIPLOCATION("SW2:7" ) // (not shown in settings display)
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // (shows disclaimer and copyright message over black background)
+ PORT_DIPSETTING( 0x40, DEF_STR(On) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" ) // (not shown in settings display)
PORT_START("DSW3")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) )
- PORT_DIPNAME( 0x0c, 0x0c, "Credits Per Note" )
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW1:1,2") // 投幣比率
+ PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) )
+ PORT_DIPSETTING( 0x02, DEF_STR(1C_2C) )
+ PORT_DIPSETTING( 0x01, DEF_STR(1C_3C) )
+ PORT_DIPSETTING( 0x00, DEF_STR(1C_4C) )
+ PORT_DIPNAME( 0x0c, 0x0c, "Key-in Rate" ) PORT_DIPLOCATION("SW1:3,4") // 開分比率
PORT_DIPSETTING( 0x0c, "10" )
PORT_DIPSETTING( 0x08, "20" )
PORT_DIPSETTING( 0x04, "50" )
PORT_DIPSETTING( 0x00, "100" )
- PORT_DIPNAME( 0x10, 0x10, "Max Note Credits" )
+ PORT_DIPNAME( 0x10, 0x10, "Credit Limit" ) PORT_DIPLOCATION("SW1:5") // 進分上限
PORT_DIPSETTING( 0x10, "500" )
- PORT_DIPSETTING( 0x00, "9999" )
- PORT_DIPNAME( 0x20, 0x20, "Money Type" )
- PORT_DIPSETTING( 0x20, "Coins" ) // use bits 0-1
- PORT_DIPSETTING( 0x00, "Notes" ) // use bits 2-3
- PORT_DIPNAME( 0x40, 0x00, "Pay Out Type" )
- PORT_DIPSETTING( 0x00, "Coins" )
- PORT_DIPSETTING( 0x40, "Notes" )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x00, "Unlimited" ) // 無限制 (if you have 10,000 or more credits, further credits will be rejected)
+ PORT_DIPNAME( 0x20, 0x20, "Credit Mode" ) PORT_DIPLOCATION("SW1:6") // 進分方式
+ PORT_DIPSETTING( 0x20, "Coin Acceptor" ) // 投幣
+ PORT_DIPSETTING( 0x00, "Key-In" ) // 開分
+ PORT_DIPNAME( 0x40, 0x40, "Payout Mode" ) PORT_DIPLOCATION("SW1:7") // 退分方式
+ PORT_DIPSETTING( 0x40, "Return Coins" ) // 退幣
+ PORT_DIPSETTING( 0x00, "Key-Out" ) // 洗分
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:8") // 示範音樂
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x80, DEF_STR(On) ) // 有
PORT_START("DSW4")
- PORT_DIPUNKNOWN( 0x01, 0x01 )
- PORT_DIPUNKNOWN( 0x02, 0x02 )
- PORT_DIPUNKNOWN( 0x04, 0x04 )
- PORT_DIPUNKNOWN( 0x08, 0x08 )
- PORT_DIPUNKNOWN( 0x10, 0x10 )
- PORT_DIPUNKNOWN( 0x20, 0x20 )
- PORT_DIPUNKNOWN( 0x40, 0x40 )
- PORT_DIPUNKNOWN( 0x80, 0x80 )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW4:1" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW4:2" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW4:3" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW4:4" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW4:5" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW4:6" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW4:7" ) // (not shown in settings display)
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW4:8" ) // (not shown in settings display)
+
+ // TODO: hook up SW5 shown in input test but not settings display
PORT_START("COIN")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // shown in test mode
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) // clear coin
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(igs011_state::igs_hopper_r)) // hopper switch
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW3", 0x20, EQUALS, 0x20) // 投幣
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW3", 0x20, EQUALS, 0x00) // 投幣
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // 測試
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // 査帳
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // 清除
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW3", 0x40, EQUALS, 0x40) // 退幣
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW3", 0x40, EQUALS, 0x00) // 退幣
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(igs011_state::igs_hopper_r)) // hopper switch
PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // 開始/得分
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bet
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) // 摸/捨 大/雙比倍
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // 押注 全比倍
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) // 功能 小/半比倍
INPUT_PORTS_END
@@ -4018,76 +4100,6 @@ static INPUT_PORTS_START( vbowlj )
INPUT_PORTS_END
-static INPUT_PORTS_START( xymg )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2") // 投幣比率
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) )
- PORT_DIPNAME( 0x0c, 0x0c, "Key-in Rate" ) PORT_DIPLOCATION("SW1:3,4") // 開分比率
- PORT_DIPSETTING( 0x0c, "10" )
- PORT_DIPSETTING( 0x08, "20" )
- PORT_DIPSETTING( 0x04, "50" )
- PORT_DIPSETTING( 0x00, "100" )
- PORT_DIPNAME( 0x10, 0x10, "Credit Limit" ) PORT_DIPLOCATION("SW1:5") // 進分上限
- PORT_DIPSETTING( 0x10, "500" )
- PORT_DIPSETTING( 0x00, "Unlimited" ) // 無限制 (if you have 10,000 or more credits, further credits will be rejected)
- PORT_DIPNAME( 0x20, 0x20, "Credit Mode" ) PORT_DIPLOCATION("SW1:6") // 進分方式
- PORT_DIPSETTING( 0x20, "Coin Acceptor" ) // 投幣
- PORT_DIPSETTING( 0x00, "Key-In" ) // 開分
- PORT_DIPNAME( 0x40, 0x40, "Payout Mode" ) PORT_DIPLOCATION("SW1:7") // 退分方式
- PORT_DIPSETTING( 0x40, "Return Coins" ) // 退幣
- PORT_DIPSETTING( 0x00, "Key-Out" ) // 洗分
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") // 示範音樂
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // 無
- PORT_DIPSETTING( 0x80, DEF_STR( On ) ) // 有
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x03, 0x03, "Double Up Jackpot" ) PORT_DIPLOCATION("SW2:1,2") // 比倍爆機
- PORT_DIPSETTING( 0x03, "1000" )
- PORT_DIPSETTING( 0x02, "1500" )
- PORT_DIPSETTING( 0x01, "2000" )
- PORT_DIPSETTING( 0x00, "3000" )
- PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("SW2:3,4") // 最小押注
- PORT_DIPSETTING( 0x0c, "1" )
- PORT_DIPSETTING( 0x08, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPNAME( 0x10, 0x10, "Double Up Game" ) PORT_DIPLOCATION("SW2:5") // 比倍遊戲
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // 無
- PORT_DIPSETTING( 0x10, DEF_STR( On ) ) // 有
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW2:6" ) // (not shown in settings display)
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW2:7" ) // (not shown in settings display)
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" ) // (not shown in settings display)
-
- // FIXME: SW3 doesn't respond in input test - are these hooked up correctly?
- PORT_START("DSW3")
- PORT_DIPUNKNOWN( 0x01, 0x01 )
- PORT_DIPUNKNOWN( 0x02, 0x02 )
- PORT_DIPUNKNOWN( 0x04, 0x04 )
- PORT_DIPUNKNOWN( 0x08, 0x08 )
- PORT_DIPUNKNOWN( 0x10, 0x10 )
- PORT_DIPUNKNOWN( 0x20, 0x20 )
- PORT_DIPUNKNOWN( 0x40, 0x40 )
- PORT_DIPUNKNOWN( 0x80, 0x80 )
-
- PORT_START("COIN")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(igs011_state::igs_hopper_r)) // hopper switch
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x00)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW1", 0x40, EQUALS, 0x40)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW1", 0x40, EQUALS, 0x00)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_INCLUDE(igs_mahjong_matrix)
-INPUT_PORTS_END
-
-
/***************************************************************************
Machine Drivers
@@ -4141,7 +4153,8 @@ void igs011_state::igs011_base(machine_config &config)
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x2000/4);
m_palette->set_membits(8);
-// GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011);
+
+ //GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4158,8 +4171,10 @@ TIMER_DEVICE_CALLBACK_MEMBER( igs011_state::timer_irq_cb )
void igs011_state::drgnwrld(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::drgnwrld_mem);
m_maincpu->set_vblank_int("screen", FUNC(igs011_state::irq6_line_hold));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(igs011_state::timer_irq_cb<5>), attotime::from_hz(240)); // lev5 frequency drives the music tempo
YM3812(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 2.0);
@@ -4168,6 +4183,7 @@ void igs011_state::drgnwrld(machine_config &config)
void igs011_state::drgnwrld_igs012(machine_config &config)
{
drgnwrld(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::drgnwrld_igs012_mem);
}
@@ -4191,8 +4207,10 @@ TIMER_DEVICE_CALLBACK_MEMBER( igs011_state::lhb_timer_irq_cb )
void igs011_state::lhb(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::lhb_mem);
m_maincpu->set_vblank_int("screen", FUNC(igs011_state::lhb_vblank_irq));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(igs011_state::lhb_timer_irq_cb), attotime::from_hz(240)); // lev5 frequency drives the music tempo
// irq 3 points to an apparently unneeded routine
}
@@ -4200,8 +4218,10 @@ void igs011_state::lhb(machine_config &config)
void igs011_state::wlcc(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::wlcc_mem);
m_maincpu->set_vblank_int("screen", FUNC(igs011_state::irq6_line_hold));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(igs011_state::timer_irq_cb<3>), attotime::from_hz(240)); // lev3 frequency drives the music tempo
}
@@ -4209,8 +4229,10 @@ void igs011_state::wlcc(machine_config &config)
void igs011_state::xymg(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::xymg_mem);
m_maincpu->set_vblank_int("screen", FUNC(igs011_state::irq6_line_hold));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(igs011_state::timer_irq_cb<3>), attotime::from_hz(240)); // lev3 frequency drives the music tempo
}
@@ -4218,6 +4240,7 @@ void igs011_state::xymg(machine_config &config)
void igs011_state::xymga(machine_config &config)
{
xymg(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::xymga_mem);
}
@@ -4225,11 +4248,13 @@ void igs011_state::xymga(machine_config &config)
void igs011_state::lhb2(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::lhb2_mem);
m_maincpu->set_vblank_int("screen", FUNC(igs011_state::irq6_line_hold));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(igs011_state::timer_irq_cb<5>), attotime::from_hz(240)); // lev5 frequency drives the music tempo
-// GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011_hi);
+ //GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011_hi);
YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 2.0);
}
@@ -4238,13 +4263,15 @@ void igs011_state::lhb2(machine_config &config)
void igs011_state::nkishusp(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::nkishusp_mem);
m_maincpu->set_vblank_int("screen", FUNC(igs011_state::irq6_line_hold));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(igs011_state::timer_irq_cb<3>), attotime::from_hz(240)); // lev3 frequency drives the music tempo
// VSync 60.0052Hz, HSync 15.620kHz
-// GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011_hi);
+ //GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011_hi);
YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 2.0);
}
@@ -4253,28 +4280,32 @@ void igs011_state::nkishusp(machine_config &config)
void igs011_state::tygn(machine_config &config)
{
nkishusp(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::tygn_mem);
}
void vbowl_state::sound_irq(int state)
{
-// m_maincpu->set_input_line(3, state);
+ //m_maincpu->set_input_line(3, state);
}
void vbowl_state::vbowl(machine_config &config)
{
igs011_base(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &vbowl_state::vbowl_mem);
m_maincpu->set_vblank_int("screen", FUNC(vbowl_state::irq6_line_hold));
+
TIMER(config, "timer_irq").configure_periodic(FUNC(vbowl_state::timer_irq_cb<3>), attotime::from_hz(240)); // lev3 frequency drives the music tempo
// irq 5 points to a debug function (all routines are clearly patched out)
// irq 4 points to an apparently unneeded routine
m_screen->screen_vblank().set(FUNC(vbowl_state::screen_vblank));
-// GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011_hi);
+ //GFXDECODE(config, "gfxdecode", m_palette, gfx_igs011_hi);
config.device_remove("oki");
+
ICS2115(config, m_ics, 33.8688_MHz_XTAL);
m_ics->irq().set(FUNC(vbowl_state::sound_irq));
m_ics->add_route(ALL_OUTPUTS, "mono", 5.0);
@@ -4283,6 +4314,7 @@ void vbowl_state::vbowl(machine_config &config)
void vbowl_state::vbowlhk(machine_config &config)
{
vbowl(config);
+
m_maincpu->set_addrmap(AS_PROGRAM, &vbowl_state::vbowlhk_mem);
}
@@ -4592,7 +4624,7 @@ ROM_END
/***************************************************************************
- 龙虎榜/Lóng hǔ bǎng (V035C)
+ 龙虎榜/Lóng Hǔ Bǎng (V035C)
Other files in the zip:
@@ -5108,7 +5140,7 @@ GAME( 1995, dbc, lhb, lhb, lhb, igs011_state, i
GAME( 1995, ryukobou, lhb, lhb, lhb, igs011_state, init_ryukobou, ROT0, "IGS / Alta", "Mahjong Ryukobou (Japan, V030J)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, lhb2, 0, lhb2, lhb2, igs011_state, init_lhb2, ROT0, "IGS", "Lung Fu Bong II (Hong Kong, V185H)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, tygn, lhb2, tygn, tygn, igs011_state, init_tygn, ROT0, "IGS", "Te Yi Gong Neng (China, V632C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // ROM patches
-GAME( 1996, lhb3, lhb2, nkishusp, nkishusp, igs011_state, init_lhb3, ROT0, "IGS", "Long Hu Bang III: Cuo Pai Gaoshou (China, V242C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // ROM patches
+GAME( 1996, lhb3, lhb2, nkishusp, lhb2, igs011_state, init_lhb3, ROT0, "IGS", "Long Hu Bang III: Cuo Pai Gaoshou (China, V242C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // ROM patches
GAME( 1996, xymg, 0, xymg, xymg, igs011_state, init_xymg, ROT0, "IGS", "Xingyun Manguan (China, V651C, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xymga, xymg, xymga, xymg, igs011_state, init_xymga, ROT0, "IGS", "Xingyun Manguan (China, V651C, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // different encryption and without IGS003
GAME( 1996, wlcc, xymg, wlcc, wlcc, igs011_state, init_wlcc, ROT0, "IGS", "Wanli Changcheng (China, V638C)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index e0748b1b59a..50e3d6a2d8d 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -15622,6 +15622,7 @@ batcira
batcird
batcirj
choko
+chokop
csclub
csclub1
csclub1d
@@ -15759,6 +15760,7 @@ progearud
pzloop2
pzloop2j
pzloop2jd
+pzloop2jp
pzloop2jr1
qndream
ringdest
@@ -16247,6 +16249,7 @@ pb2000c
@source:casio/pickytlk.cpp
jd363
jd364
+jd366
jd368
pickydis
pickytlk
@@ -18639,9 +18642,13 @@ snowboar
snowboara
srollnd
touchgo
-touchgoe
-touchgon
-touchgok
+touchgoa
+touchgona
+touchgonna
+touchgonnaa
+touchgonnab
+touchgonnac
+touchgoun
wrally2
wrally2a
@@ -28577,6 +28584,7 @@ tvpoker
@source:misc/acefruit.cpp
acefruit
+flshback
sidewndr
spellbnd
starspnr
diff --git a/src/mame/misc/acefruit.cpp b/src/mame/misc/acefruit.cpp
index 700a493d163..2202ab7620d 100644
--- a/src/mame/misc/acefruit.cpp
+++ b/src/mame/misc/acefruit.cpp
@@ -41,9 +41,9 @@ public:
m_refresh_timer(nullptr)
{ }
- void acefruit(machine_config &config);
+ void acefruit(machine_config &config) ATTR_COLD;
- void init_sidewndr();
+ void init_sidewndr() ATTR_COLD;
template <int Mask> int sidewndr_payout_r();
template <int Mask> int starspnr_coinage_r();
@@ -88,14 +88,14 @@ private:
void acefruit_state::update_irq(int vpos)
{
- int row = vpos / 8;
+ const int row = vpos / 8;
- for( int col = 0; col < 32; col++ )
+ for (int col = 0; col < 32; col++)
{
- int tile_index = ( col * 32 ) + row;
- int color = m_colorram[ tile_index ];
+ const int tile_index = (col * 32) + row;
+ const int color = m_colorram[tile_index];
- switch( color )
+ switch (color)
{
case 0x0c:
m_maincpu->set_input_line(0, HOLD_LINE);
@@ -106,14 +106,14 @@ void acefruit_state::update_irq(int vpos)
TIMER_CALLBACK_MEMBER(acefruit_state::refresh_tick)
{
- int vpos = m_screen->vpos();
+ const int vpos = m_screen->vpos();
m_screen->update_partial(vpos);
update_irq(vpos);
- vpos = ((vpos / 8) + 1) * 8;
+ const int next_vpos = ((vpos / 8) + 1) * 8;
- m_refresh_timer->adjust(m_screen->time_until_pos(vpos));
+ m_refresh_timer->adjust(m_screen->time_until_pos(next_vpos));
}
void acefruit_state::machine_start()
@@ -129,46 +129,46 @@ void acefruit_state::video_start()
INTERRUPT_GEN_MEMBER(acefruit_state::vblank)
{
- device.execute().set_input_line(0, HOLD_LINE );
- m_refresh_timer->adjust( attotime::zero );
+ device.execute().set_input_line(0, HOLD_LINE);
+ m_refresh_timer->adjust(attotime::zero);
}
uint32_t acefruit_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int startrow = cliprect.min_y / 8;
- int endrow = cliprect.max_y / 8;
+ const int startrow = cliprect.min_y / 8;
+ const int endrow = cliprect.max_y / 8;
- for( int row = startrow; row <= endrow; row++ )
+ for (int row = startrow; row <= endrow; row++)
{
int spriterow = 0;
int spriteindex = 0;
int spriteparameter = 0;
- for( int col = 0; col < 32; col++ )
+ for (int col = 0; col < 32; col++)
{
- int tile_index = ( col * 32 ) + row;
- int code = m_videoram[ tile_index ];
- int color = m_colorram[ tile_index ];
+ const int tile_index = (col * 32) + row;
+ const int code = m_videoram[tile_index];
+ const int color = m_colorram[tile_index];
- if( color < 0x4 )
+ if (color < 0x4)
{
m_gfxdecode->gfx(1)->opaque(bitmap,cliprect, code, color, 0, 0, col * 16, row * 8 );
}
- else if( color >= 0x5 && color <= 0x7 )
+ else if (color >= 0x5 && color <= 0x7)
{
- static const int spriteskip[] = { 1, 2, 4 };
- int spritesize = spriteskip[ color - 5 ];
- gfx_element *gfx = m_gfxdecode->gfx(0);
+ constexpr int spriteskip[] = { 1, 2, 4 };
+ const int spritesize = spriteskip[color - 5];
+ gfx_element &gfx = *m_gfxdecode->gfx(0);
- for( int x = 0; x < 16; x++ )
+ for (int x = 0; x < 16; x++)
{
- int sprite = ( m_spriteram[ ( spriteindex / 64 ) % 6 ] & 0xf ) ^ 0xf;
- const uint8_t *gfxdata = gfx->get_data(sprite);
+ const int sprite = (m_spriteram[(spriteindex / 64) % 6] & 0xf) ^ 0xf;
+ uint8_t const *const gfxdata = gfx.get_data(sprite);
- for( int y = 0; y < 8; y++ )
+ for (int y = 0; y < 8; y++)
{
- uint16_t *dst = &bitmap.pix(y + ( row * 8 ), x + ( col * 16 ) );
- *( dst ) = *( gfxdata + ( ( spriterow + y ) * gfx->rowbytes() ) + ( ( spriteindex % 64 ) >> 1 ) );
+ uint16_t &dst = bitmap.pix(y + (row * 8), x + (col * 16));
+ dst = gfxdata[((spriterow + y) * gfx.rowbytes()) + ((spriteindex % 64) >> 1)];
}
spriteindex += spritesize;
@@ -176,30 +176,30 @@ uint32_t acefruit_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
}
else
{
- for( int x = 0; x < 16; x++ )
+ for (int x = 0; x < 16; x++)
{
- for( int y = 0; y < 8; y++ )
+ for (int y = 0; y < 8; y++)
{
- uint16_t *dst = &bitmap.pix(y + ( row * 8 ), x + ( col * 16 ) );
- *( dst ) = 0;
+ uint16_t &dst = bitmap.pix(y + (row * 8), x + (col * 16));
+ dst = 0;
}
}
- if( color == 0x8 )
+ if (color == 0x8)
{
- if( spriteparameter == 0 )
+ if (spriteparameter == 0)
{
spriteindex = code & 0xf;
}
else
{
- spriterow = ( ( code >> 0 ) & 0x3 ) * 8;
- spriteindex += ( ( code >> 2 ) & 0x1 ) * 16;
+ spriterow = ((code >> 0) & 0x3) * 8;
+ spriteindex += ((code >> 2) & 0x1) * 16;
}
spriteparameter = !spriteparameter;
}
- else if( color == 0xc )
+ else if (color == 0xc)
{
/* irq generated in update_irq() */
}
@@ -242,7 +242,7 @@ int acefruit_state::starspnr_payout_r()
void acefruit_state::colorram_w(offs_t offset, uint8_t data)
{
- m_colorram[ offset ] = data & 0xf;
+ m_colorram[offset] = data & 0xf;
}
void acefruit_state::coin_w(uint8_t data)
@@ -252,7 +252,22 @@ void acefruit_state::coin_w(uint8_t data)
void acefruit_state::sound_w(uint8_t data)
{
- /* TODO: ? */
+ /* TODO:
+ PCB pictures suggest that the sound hardware has the part numbers scraped
+ off. There's a 14 pin package that looks involved.
+
+ Pin 36 10V on P2 seems to go to possibly a low voltage reset circuit
+ (mentioned in the manual) at the top left of the board H 13.
+
+ Pin 35 (sound output) seems to go to the TIP120 transistor at position F2 on
+ the board. The emitter is connected to ground, and the collector goes to
+ pin 35 of P2. The base is connected to pin 8 of the 14 pin IC located at H3
+ on the board near the crystal via the 1K resistor just above the transistor.
+
+ 7048 maybe?
+
+ */
+
}
void acefruit_state::lamp_w(offs_t offset, uint8_t data)
@@ -264,30 +279,32 @@ void acefruit_state::lamp_w(offs_t offset, uint8_t data)
void acefruit_state::solenoid_w(uint8_t data)
{
for (int i = 0; i < 8; i++)
+ {
m_solenoids[i] = BIT(data, i);
+ }
}
void acefruit_state::palette_init(palette_device &palette) const
{
/* sprites */
- palette.set_pen_color( 0, rgb_t(0x00, 0x00, 0x00) );
- palette.set_pen_color( 1, rgb_t(0x00, 0x00, 0xff) );
- palette.set_pen_color( 2, rgb_t(0x00, 0xff, 0x00) );
- palette.set_pen_color( 3, rgb_t(0xff, 0x7f, 0x00) );
- palette.set_pen_color( 4, rgb_t(0xff, 0x00, 0x00) );
- palette.set_pen_color( 5, rgb_t(0xff, 0xff, 0x00) );
- palette.set_pen_color( 6, rgb_t(0xff, 0xff, 0xff) );
- palette.set_pen_color( 7, rgb_t(0x7f, 0x3f, 0x1f) );
+ palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00));
+ palette.set_pen_color(1, rgb_t(0x00, 0x00, 0xff));
+ palette.set_pen_color(2, rgb_t(0x00, 0xff, 0x00));
+ palette.set_pen_color(3, rgb_t(0xff, 0x7f, 0x00));
+ palette.set_pen_color(4, rgb_t(0xff, 0x00, 0x00));
+ palette.set_pen_color(5, rgb_t(0xff, 0xff, 0x00));
+ palette.set_pen_color(6, rgb_t(0xff, 0xff, 0xff));
+ palette.set_pen_color(7, rgb_t(0x7f, 0x3f, 0x1f));
/* tiles */
- palette.set_pen_color( 8, rgb_t(0x00, 0x00, 0x00) );
- palette.set_pen_color( 9, rgb_t(0xff, 0xff, 0xff) );
- palette.set_pen_color( 10, rgb_t(0x00, 0x00, 0x00) );
- palette.set_pen_color( 11, rgb_t(0x00, 0x00, 0xff) );
- palette.set_pen_color( 12, rgb_t(0x00, 0x00, 0x00) );
- palette.set_pen_color( 13, rgb_t(0x00, 0xff, 0x00) );
- palette.set_pen_color( 14, rgb_t(0x00, 0x00, 0x00) );
- palette.set_pen_color( 15, rgb_t(0xff, 0x00, 0x00) );
+ palette.set_pen_color(8, rgb_t(0x00, 0x00, 0x00) );
+ palette.set_pen_color(9, rgb_t(0xff, 0xff, 0xff) );
+ palette.set_pen_color(10, rgb_t(0x00, 0x00, 0x00) );
+ palette.set_pen_color(11, rgb_t(0xff, 0x00, 0x00) );
+ palette.set_pen_color(12, rgb_t(0x00, 0x00, 0x00) );
+ palette.set_pen_color(13, rgb_t(0x00, 0xff, 0x00) );
+ palette.set_pen_color(14, rgb_t(0x00, 0x00, 0x00) );
+ palette.set_pen_color(15, rgb_t(0x00, 0x00, 0xff) );
}
void acefruit_state::main_map(address_map &map)
@@ -331,7 +348,7 @@ static INPUT_PORTS_START( sidewndr )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "Sidewind" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Collect" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) /* "Cash in" */
- PORT_DIPNAME( 0x08, 0x00, "Accountacy System Texts" )
+ PORT_DIPNAME( 0x08, 0x00, "Accountancy System Texts" )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -395,6 +412,7 @@ static INPUT_PORTS_START( sidewndr )
PORT_DIPSETTING( 0x03, "86%" )
INPUT_PORTS_END
+
static INPUT_PORTS_START( spellbnd )
PORT_INCLUDE(sidewndr)
@@ -413,7 +431,7 @@ static INPUT_PORTS_START( spellbnd )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME( "Cancel" ) /* see IN4 bit 0 in "Accountancy System" mode */
PORT_MODIFY("IN4")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME( "Clear Data" ) /* in "Accountancy System" mode */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_NAME( "Clear Data" ) /* in "Accountancy System" mode */
/* Similar to 'sidewndr' but different addresses */
PORT_DIPNAME( 0x04, 0x04, "Lamp 11 always ON" ) /* code at 0x072a - write lamp status at 0x00ff */
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
@@ -609,12 +627,13 @@ void acefruit_state::acefruit(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* sound hardware */
+
}
void acefruit_state::init_sidewndr()
{
uint8_t *ROM = memregion("maincpu")->base();
- /* replace "ret nc" ( 0xd0 ) with "di" */
+ /* replace "ret nc" (0xd0) with "di" */
ROM[0] = 0xf3;
/* this is either a bad dump or the cpu core should set the carry flag on reset */
}
@@ -625,6 +644,20 @@ void acefruit_state::init_sidewndr()
***************************************************************************/
+ROM_START( flshback )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "h9.bin", 0x000000, 0x000800, CRC(158717a1) SHA1(8dd498853e5e74aafb52bb1dd3fcf07a387c3fb3) )
+ ROM_LOAD( "h10.bin", 0x000800, 0x000800, CRC(1f35df6e) SHA1(b371b6bc34d082a4740af34b2f285a2f3c6fd5e6) )
+ ROM_LOAD( "h11.bin", 0x001000, 0x000800, CRC(7db05abe) SHA1(81d01569050b4145f9f30075b0f7164873734b23) )
+ ROM_LOAD( "h12.bin", 0x001800, 0x000800, CRC(5506468a) SHA1(00c0188f227e9be109bf512295798f0059f73216) )
+
+ ROM_REGION( 0x2000, "gfx1", 0 ) /* 8k for graphics */
+ ROM_LOAD( "h5.bin", 0x000000, 0x000800, CRC(198da32c) SHA1(bf6c4ddcda0503095d310e08057dd88154952ef4) )
+ ROM_LOAD( "h6.bin", 0x000800, 0x000800, CRC(e777130f) SHA1(3421c6f399e5ec749f1908f6b4ebff7761c6c5d9) )
+ ROM_LOAD( "h7.bin", 0x001000, 0x000800, CRC(bfed5b8f) SHA1(f95074e8809297eec67da9d7e33ae1dd1c5eabc0) )
+ ROM_LOAD( "h8.bin", 0x001800, 0x000800, CRC(562079ab) SHA1(4f1ee028d43b831d2d43352e2a0f2ddc6c212f69) )
+ROM_END
+
ROM_START( sidewndr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "2_h09.bin", 0x000000, 0x000800, BAD_DUMP CRC(141f3b0c) SHA1(1704feba950fe7aa939b9ed54c37264d10527d11) )
@@ -753,6 +786,7 @@ ROM_END
GAMEL( 1981?, sidewndr, 0, acefruit, sidewndr, acefruit_state, init_sidewndr, ROT270, "ACE", "Sidewinder", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND, layout_sidewndr )
GAMEL( 1981?, spellbnd, 0, acefruit, spellbnd, acefruit_state, empty_init, ROT270, "ACE", "Spellbound", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND, layout_sidewndr )
+GAME( 1982?, flshback, 0, acefruit, spellbnd, acefruit_state, empty_init, ROT270, "ACE", "Flashback", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
GAME( 1982?, starspnr, 0, acefruit, starspnr, acefruit_state, empty_init, ROT270, "ACE", "Starspinner (Dutch/Nederlands)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
GAME( 1982?, acefruit, 0, acefruit, spellbnd, acefruit_state, empty_init, ROT270, "ACE", "Silhouette", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // inputs and video in bonus game need fixing on this one
// not dumped: Magnum?
diff --git a/src/mame/namco/mappy.cpp b/src/mame/namco/mappy.cpp
index 794a02e5816..3feb0ef2f8c 100644
--- a/src/mame/namco/mappy.cpp
+++ b/src/mame/namco/mappy.cpp
@@ -839,7 +839,7 @@ static INPUT_PORTS_START( pacnpal )
PORT_DIPSETTING( 0x00, "30k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00)
PORT_DIPSETTING( 0x18, "30k & 70k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00)
PORT_DIPSETTING( 0x10, "30k & 80k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00)
- PORT_DIPSETTING( 0x28, "30k, 100k & Every 80k" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00)
+ PORT_DIPSETTING( 0x28, "30k, 80k & Every 80k" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00)
PORT_DIPSETTING( 0x08, "30k & 100k Only" ) PORT_CONDITION("DSW1",0xc0,NOTEQUALS,0x00)
PORT_DIPSETTING( 0x08, "30k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00)
PORT_DIPSETTING( 0x00, "40k Only" ) PORT_CONDITION("DSW1",0xc0,EQUALS,0x00)
diff --git a/src/mame/sega/m50dass.cpp b/src/mame/sega/m50dass.cpp
index 5ed59972527..189f073261a 100644
--- a/src/mame/sega/m50dass.cpp
+++ b/src/mame/sega/m50dass.cpp
@@ -32,7 +32,7 @@ void m50dass_device::device_start()
void m50dass_device::device_add_mconfig(machine_config &config)
{
- Z80(config, m_maincpu, 8_MHz_XTAL / 2); // Z0840004PSC, divider not verified
+ Z80(config, m_maincpu, 8_MHz_XTAL / 2).set_disable(); // Z0840004PSC, divider not verified
SPEAKER(config, "mono").front_center();
YM2413(config, m_ym2413, 8_MHz_XTAL / 2).add_route(ALL_OUTPUTS, "mono", 0.8); // divider and configuration unknown
diff --git a/src/mame/sega/model2_v.cpp b/src/mame/sega/model2_v.cpp
index f0405ee7e2e..5706eae8dcc 100644
--- a/src/mame/sega/model2_v.cpp
+++ b/src/mame/sega/model2_v.cpp
@@ -2563,9 +2563,10 @@ void model2_state::geo_parse( void )
u32 address = (m_geo_read_start_address & 0x1ffff)/4;
u32 *input = &m_bufferram[address];
u32 opcode;
+ u32 op_count = 0;
bool end_code = false;
- while( end_code == false && (input - m_bufferram) < 0x20000/4 )
+ while( end_code == false && (input - m_bufferram) < 0x20000/4 && op_count++ < 0x8000 )
{
/* read in the opcode */
opcode = *input++;