Merge remote-tracking branch 'origin/master' into netlist_dev

This commit is contained in:
couriersud 2016-06-05 02:20:58 +02:00
commit 20be9611af
50 changed files with 10889 additions and 8178 deletions

View File

@ -14,6 +14,18 @@ Floppy disks are included for software that actually requires them to boot.
User/save disks that can be created from the game itself are not included. User/save disks that can be created from the game itself are not included.
--> -->
<software name="100isshu">
<description>Towns Hyakunin Isshu</description>
<year>1989</year>
<publisher>Fujitsu</publisher>
<info name="usage" value="Requires HDD installation"/>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="towns hyakunin isshu" sha1="ef05fdcfbcdd8e4777638eaa3b8e7bf1d3e13ba8" />
</diskarea>
</part>
</software>
<software name="3x3eyes"> <software name="3x3eyes">
<description>3x3 Eyes: Sanjiyan Henjou</description> <description>3x3 Eyes: Sanjiyan Henjou</description>
<year>1993</year> <year>1993</year>
@ -59,6 +71,77 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="4thuni12">
<description>The 4th Unit 1-2 Towns: Linkage</description>
<year>1989</year>
<publisher>Data West</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the 4th unit 1-2 - linkage" sha1="66ad07db8959efe50d240471f1c24869dfae1e51" />
</diskarea>
</part>
</software>
<software name="4thunit3">
<description>The 4th Unit 3: Dual Targets</description>
<year>1989</year>
<publisher>Data West</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the 4th unit 3 - dual targets" sha1="1cca0e9b4d6932e1412f50fd3caa96d32c397773" />
</diskarea>
</part>
</software>
<software name="4thunit4">
<description>The 4th Unit 4: Zero</description>
<year>1989</year>
<publisher>Data West</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the 4th unit 4 - zero" sha1="7b41956851d62962e24329380441a0d7b5778983" />
</diskarea>
</part>
</software>
<software name="4thunit5">
<description>The 4th Unit 5: D-Again</description>
<year>1990</year>
<publisher>Data West</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the 4th unit 5 - d-again" sha1="35ee819833c34bb963c4c167839be947f6433fb4" />
</diskarea>
</part>
</software>
<software name="4thunit6">
<description>The 4th Unit 6: Merry-Go-Round</description>
<year>1990</year>
<publisher>Data West</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the 4th unit 6 - merry-go-round" sha1="d254d7670bc2bdd396320aac687dba12906d49e2" />
</diskarea>
</part>
</software>
<software name="4thunit7">
<description>The 4th Unit 7: Wyatt</description>
<year>1992</year>
<publisher>Data West</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="the 4th unit 7 - wyatt (boot disk).hdm" size="1261568" crc="a516f2c4" sha1="f5ae3995c8a8358b88bb716bb9c88ee8d4083d1d" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the 4th unit 7 - wyatt" sha1="e99d2537e5dc4fb2d890a16b67b115f19ff5391c" />
</diskarea>
</part>
</software>
<software name="38mank"> <software name="38mank">
<description>38-man Kilo no Kokuu</description> <description>38-man Kilo no Kokuu</description>
<year>1989</year> <year>1989</year>
@ -357,6 +440,33 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="atlas">
<description>The Atlas</description>
<year>1991</year>
<publisher>Artdink</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the atlas" sha1="31378695a7eb7fe953e51463829468f214f2a2f4" />
</diskarea>
</part>
</software>
<software name="atlas2">
<description>The Atlas 2</description>
<year>1993</year>
<publisher>Artdink</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="the atlas 2 (system disk).hdm" size="1261568" crc="e28a55a2" sha1="7c0826908907f6e271048d479df37056c3b55a06" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the atlas 2" sha1="70f26116a3870c788fc77fafa45981f81b27ec9f" />
</diskarea>
</part>
</software>
<software name="awesome"> <software name="awesome">
<description>Awesome</description> <description>Awesome</description>
<year>1992</year> <year>1992</year>
@ -504,6 +614,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="bpbase">
<description>The Best Play Baseball</description>
<year>1992</year>
<publisher>ASCII</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the best play baseball" sha1="11bdce513c48010b272988525ae458ec60c743f6" />
</diskarea>
</part>
</software>
<software name="branmark"> <software name="branmark">
<description>Branmarker</description> <description>Branmarker</description>
<year>1991</year> <year>1991</year>
@ -570,6 +691,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="caltiny">
<description>Cal Gaiden: Tiny Steps Behind the Cal</description>
<year>1993</year>
<publisher>Birdy Soft</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tiny steps - cal gaiden" sha1="d4e6dfbb519a2890187b89a685fcc5abbd05e709" />
</diskarea>
</part>
</software>
<software name="cancanb"> <software name="cancanb">
<description>Can Can Bunny Extra</description> <description>Can Can Bunny Extra</description>
<year>1993</year> <year>1993</year>
@ -603,6 +735,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="chasehq">
<description>Taito Chase H. Q.</description>
<year>1991</year>
<publisher>Ving</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="taito chase hq" sha1="688a4eb1780d0c4e246d4934784ada9cba3c9aea" />
</diskarea>
</part>
</software>
<software name="classcrd"> <software name="classcrd">
<description>Classic Road</description> <description>Classic Road</description>
<year>1994</year> <year>1994</year>
@ -614,6 +757,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="condor">
<description>The Case of the Cautious Condor</description>
<year>1989</year>
<publisher>Toshiba EMI</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the case of the cautious condor" sha1="b922563e2617dc46b3aac534c3ee81039a3953c7" />
</diskarea>
</part>
</software>
<software name="crystrnl"> <software name="crystrnl">
<description>Crystal Rinal</description> <description>Crystal Rinal</description>
<year>1994</year> <year>1994</year>
@ -1775,6 +1929,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="incrmach">
<description>The Incredible Machine</description>
<year>1994</year>
<publisher>Cybelle</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the incredible machine" sha1="928b094e39e2fbbae68220c4bdfb51a38dbad317" />
</diskarea>
</part>
</software>
<software name="indy3"> <software name="indy3">
<description>Indiana Jones and the Last Crusade</description> <description>Indiana Jones and the Last Crusade</description>
<year>1990</year> <year>1990</year>
@ -2006,6 +2171,33 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="kyrand1">
<description>The Legend of Kyrandia</description>
<year>1993</year>
<publisher>Starcraft</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="the legend of kyrandia (user disk).hdm" size="1261568" crc="da0241b6" sha1="12e125595d6a87496cf891bba1f67034d110b9e8" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the legend of kyrandia" sha1="0598efd2a0144568bce75c5a9462b6ae76c5c89b" />
</diskarea>
</part>
</software>
<software name="kyrand2">
<description>Kyrandia II: The Hand of Fate</description>
<year>1995</year>
<publisher>Starcraft</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the legend of kyrandia 2" sha1="245b1de4313891f5a6bd68104b03b24a3c7200e2" />
</diskarea>
</part>
</software>
<!-- Originally labeled as "mp3 source". It probably needs a redump. --> <!-- Originally labeled as "mp3 source". It probably needs a redump. -->
<software name="ktiger"> <software name="ktiger">
<description>Kyuukyoku Tiger</description> <description>Kyuukyoku Tiger</description>
@ -2405,6 +2597,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="manhole">
<description>The Manhole</description>
<year>1990</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the manhole" sha1="b469808157cd2aeff35c8c538c0a56c9dd41d064" />
</diskarea>
</part>
</software>
<software name="mbomber"> <software name="mbomber">
<description>Muscle Bomber: The Body Explosion</description> <description>Muscle Bomber: The Body Explosion</description>
<year>1993</year> <year>1993</year>
@ -2561,6 +2764,17 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="monkey">
<description>The Secret of Monkey Island</description>
<year>1992</year>
<publisher>Victor</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the secret of monkey island" sha1="06ed4efdb149fbee70474bc9a4fd0002b9a6a31e" />
</diskarea>
</part>
</software>
<software name="monkey2"> <software name="monkey2">
<description>Monkey Island 2: LeChuck's Revenge</description> <description>Monkey Island 2: LeChuck's Revenge</description>
<year>1994</year> <year>1994</year>
@ -3799,6 +4013,297 @@ User/save disks that can be created from the game itself are not included.
</part> </part>
</software> </software>
<software name="taiken93">
<description>Towns Taikenban CD '93</description>
<year>1993</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="taikenban cd" sha1="4bfe5252ef91a95b06a2ece9b60f110cf913d980" />
</diskarea>
</part>
</software>
<software name="taikou">
<description>Taikou Risshinden</description>
<year>1992</year>
<publisher>Koei</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="taikou risshinden" sha1="b66a2e514c893103f7fdc8b0c5850529d96f51ea" />
</diskarea>
</part>
</software>
<software name="takamiza">
<description>Takamizawa Kyosuke: Nekketsu!! Kyouiku Kenshuu</description>
<year>1995</year>
<publisher>ZyX</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="takamizawa kyosuke - nekketsu!! kyouiku kenshuu" sha1="ce13831f3094f9ab53c392480ece497c9b3c7997" />
</diskarea>
</part>
</software>
<software name="tanjou">
<description>Tanjou: Debut</description>
<year>1994</year>
<publisher>Data West</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="tanjou - debut (key disk).hdm" size="1261568" crc="d731671d" sha1="7da7523a000aee0e4a3ee7cd73ee78109f54ea85" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tanjou - debut" sha1="cb4d6a5ee1ad68584088a7d38a9e0bcefdd47abf" />
</diskarea>
</part>
</software>
<software name="tatsuou">
<description>Tatsujin Ou</description>
<year>1993</year>
<publisher>Ving</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tatsujin oh" sha1="ee1b312958a139fc3a5329f4a9dae662286d3705" />
</diskarea>
</part>
</software>
<software name="tdf">
<description>TDF: Terrestrial Defense Force</description>
<year>1990</year>
<publisher>Data West</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tdf - terrestrial defense force" sha1="584ac4f25e5cc1f38857d26b5dc988219ae5646b" />
</diskarea>
</part>
</software>
<software name="tenkagom">
<description>Tenka Gomen</description>
<year>1994</year>
<publisher>Artdink</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="tenka gomen (system disk).hdm" size="1261568" crc="ed6a772a" sha1="b67203849d45824fcb6afac6610621ca95b23966" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tenka gomen" sha1="6a25956177b71d6e77115e46b2dcc9533e63fa6a" />
</diskarea>
</part>
</software>
<software name="thedate">
<description>The Date</description>
<year>1990</year>
<publisher>JAMP</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the date" sha1="da0894abef4eb1a88c0aff9731f1121464014741" />
</diskarea>
</part>
</software>
<software name="thehorde">
<description>The Horde</description>
<year>1995</year>
<publisher>Arrow Micro-Techs</publisher>
<info name="usage" value="Requires HDD installation"/>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the horde" sha1="53b6f886fafc5e532583c7ccd85774d73608c4ca" />
</diskarea>
</part>
</software>
<software name="titan">
<description>Titan</description>
<year>1989</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="titan" sha1="bb35134376680af0908f7a85501fbd9e50e81168" />
</diskarea>
</part>
</software>
<software name="tnzs">
<description>The NewZealand Story</description>
<year>1989</year>
<publisher>Ving</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the new zealand story" sha1="d523a6bc0fbee6aa874de47de192c639ae97a3cf" />
</diskarea>
</part>
</software>
<software name="tokio">
<description>Tokio</description>
<year>1992</year>
<publisher>Artdink</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="tokio (system disk).hdm" size="1261568" crc="664f6038" sha1="d2ceb4c0488cf252edf8eb912d707270c886747e" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tokio" sha1="173fae976acb957fc5c52a0746025d5cc7f0cfb0" />
</diskarea>
</part>
</software>
<software name="toushin2">
<description>Toushin Toshi II: Soshite, Sorekara...</description>
<year>1995</year>
<publisher>Alice Soft</publisher>
<info name="usage" value="Requires HDD installation"/>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="toushin toshi ii - soshite sorekara..." sha1="e3361f4395e93e9fe10edba31a77240e9f49b43d" />
</diskarea>
</part>
</software>
<software name="tqod">
<description>The Queen of Duellist</description>
<year>1993</year>
<publisher>Agumix</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1261568">
<rom name="the queen of duellist (user disk).hdm" size="1261568" crc="4be69833" sha1="b41753c9994b71a4c6634807fe437b465defde5a" offset="000000" />
</dataarea>
</part>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="the queen of duellist" sha1="311993a47783fdad8e1fdc4ed65d388dbf7f7d2d" />
</diskarea>
</part>
</software>
<software name="toutrun">
<description>Turbo Out Run</description>
<year>1989</year>
<publisher>CRI</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="turbo outrun" sha1="35a8ec4cf334ee803abfdadd798e1fccee644776" />
</diskarea>
</part>
</software>
<software name="townsmg1">
<description>Towns Magazine Vol. 1</description>
<year>1994</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="towns magazine vol. 1" sha1="eab53db6a65d7d7030da1b9e7c5a93a19bd2f279" />
</diskarea>
</part>
</software>
<software name="townsmg2">
<description>Towns Magazine Vol. 2</description>
<year>1994</year>
<publisher>Fujitsu</publisher>
<part name="cdrom1" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="towns magazine vol. 2 (disc 1)" sha1="65d208a41d0089eb11f7607e0a78fba60fbdbaa4" />
</diskarea>
</part>
<part name="cdrom2" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="towns magazine vol. 2 (disc 2)" sha1="241a9f4717ed95fa5c6689665c3330f796a28561" />
</diskarea>
</part>
</software>
<software name="trigger">
<description>Trigger</description>
<year>1994</year>
<publisher>ZyX</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="trigger" sha1="4e6040576d084861e6fd478a8fbfb6b6723c7596" />
</diskarea>
</part>
</software>
<software name="tss1110">
<description>Towns System Software v1.1 L10</description>
<year>1989</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="[os] towns system software v1.1 l10" sha1="4cc560ebcf22337d4b6ae7143dafc2410c07907a" />
</diskarea>
</part>
</software>
<software name="tss1120">
<description>Towns System Software v1.1 L20</description>
<year>1989</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="[os] towns system software v1.1 l20" sha1="d866918df900ff885e50da7ab96354cf4b9aae24" />
</diskarea>
</part>
</software>
<software name="tss1130">
<description>Towns System Software v1.1 L30</description>
<year>1990</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="[os] towns system software v1.1 l20" sha1="b67bc80774182e641f713920712410be4e715171" />
</diskarea>
</part>
</software>
<software name="tss2110a">
<description>Towns System Software v2.1 L10A</description>
<year>1991</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="[os] towns system software v2.1 l10a" sha1="17c7e8ab678ac7ff258242c1aad75673848e66d6" />
</diskarea>
</part>
</software>
<software name="tss2151">
<description>Towns System Software v2.1 L51</description>
<year>1995</year>
<publisher>Fujitsu</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="[os] towns system software v2.1 l51" sha1="58f008662746287e4ce4b2c02f77605fc1ebd440" />
</diskarea>
</part>
</software>
<software name="tuntroll">
<description>Tunnels and Trolls</description>
<year>1990</year>
<publisher>Starcraft</publisher>
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="tunnels and trolls" sha1="098e7889db2229e69fe4ebbb9af0728154c94658" />
</diskarea>
</part>
</software>
<software name="ultima4"> <software name="ultima4">
<description>Ultima IV: Quest of the Avatar</description> <description>Ultima IV: Quest of the Avatar</description>
<year>1992</year> <year>1992</year>

View File

@ -12,6 +12,45 @@
--> -->
<!--
Info on the PCB codes, based on Tauwasser's notes and research
DMG-****-NN
where
NN = PCB revision
**** = 3 or 4 letter descriptor (+ possibly an optional letter code in parenthesis)
Letters have the following meaning
Code MBC / Battery ROM size RAM size
- - - - QFP
A none 256kbit none -
B MBC1A/MBC1B/MBC1B1 512kbit -? -
C - 1Mbit 64kbit COB
D MBC1A/MBC1B/MBC1B1 + CR1616 2Mbit 256kbit -
E - 4Mbit 512kbit -
F - 8Mbit - -
G MBC2A + CR1616 16Mbit - -
H - 32Mbit - -
K MBC3/MBC3A/MBC3B w/X + CR2025 - - -
L MBC3/MBC3A/MBC3B w/oX + CR2025 - - -
M MBC30 w/ X + CR2025 - - -
N - - - SOP
P MMM01 - - -
S MMM01 + CR1616 - - -
T HuC1/HuC1A + CR1616 - - TSOP I
U HuC3A + CR2025 - - TSOP II
So that, for instance, DMG-BEAN-02 stands for a PCB with MBC1A/MBC1B/MBC1B1 and no battery,
up to 256kbit ROM, no SRAM and roms in SOP
-->
<softwarelist name="gameboy" description="Nintendo Game Boy cartridges"> <softwarelist name="gameboy" description="Nintendo Game Boy cartridges">
<software name="tamafrnd"> <software name="tamafrnd">

View File

@ -20,6 +20,35 @@ Unreleased (music source code exists, possibly no prototypes exist)
--> -->
<!--
Info on the PCB codes, based on Tauwasser's notes and research
DMG-*AA-NN
where
NN = PCB revision
AA = 2 number descriptor specifying MBC and ROM/RAM combination
* = PCB code (A = production cart, Z = revision of some A PCB, B = test cart)
Number descriptors correspond to the following
Code MBC ROM size RAM size
0 MBC5 (w/ or w/o rumble) 4/8M 2/4k EEPROM or 1M SRAM
1 MBC5 (w/ rumble) 16/32/64M 64k
2 G-MMC1 (+ 8M FLASH) 2/4/8M 256k
3 MBC6 (+ 8M FLASH) 16/32/64M 256k
4 MBC7 4/8M -?
6 - 2/4/8M 64k
7 - 16/32M 2/4k EEPROM
Descriptors 5, 8 and 9 have not been found yet
-->
<softwarelist name="gbcolor" description="Nintendo Game Boy Color cartridges"> <softwarelist name="gbcolor" description="Nintendo Game Boy Color cartridges">
<software name="007twine"> <software name="007twine">
@ -3981,7 +4010,8 @@ Unreleased (music source code exists, possibly no prototypes exist)
<feature name="battery" value="Batt CR1616" /> <feature name="battery" value="Batt CR1616" />
<feature name="slot" value="rom_mbc5" /> <feature name="slot" value="rom_mbc5" />
<dataarea name="rom" size="8388608"> <dataarea name="rom" size="8388608">
<rom name="densha de go! 2 (japan).bin" size="8388608" crc="b72603fc" sha1="63bcca7177712a9bc6f032c83c2e129d9b9af0fa" offset="000000" /> <rom name="cgb-b82j-0 02.u1" size="4194304" crc="07f226df" sha1="6eff94940f67a4408e1a0d3c1cc544fddb20d9c0" offset="0x0000000" />
<rom name="cgb-b82j-0 12.u5" size="4194304" crc="b6caeb75" sha1="efb3a8229e7cd6a28fc9766a6de17e8b59483652" offset="0x400000" />
</dataarea> </dataarea>
<dataarea name="nvram" size="32768"> <dataarea name="nvram" size="32768">
</dataarea> </dataarea>

11183
hash/n64.xml

File diff suppressed because it is too large Load Diff

View File

@ -164,6 +164,279 @@
</dataarea> </dataarea>
</part> </part>
</software> </software>
<!--
The original tapes have died long ago, so these were loaded from the
archived quickloads into MAME, then saved to wav files at 1200 baud.
Load the Basic ROM PAC, then from within it type CLOAD. When it has finished loading, type RUN.
-->
<software name="labyr">
<description>Labyrinth</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="300ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5042678">
<rom name="labyr.wav" size="5042678" crc="a0c6f843" sha1="d68fd0ebdd45bb68f9d5c515930d87b9a103eeae" offset="0" />
</dataarea>
</part>
</software>
<software name="qubic">
<description>Qubic</description>
<year>1985</year>
<publisher>unknown</publisher>
<info name="serial" value="301ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="8594334">
<rom name="qubic.wav" size="8594334" crc="dc6eb1e9" sha1="5fc46bbbe5633193c367aa3fe9ab9ed31844a377" offset="0" />
</dataarea>
</part>
</software>
<software name="lem">
<description>Lunar Entry Module</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="302ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5067808">
<rom name="lem.wav" size="5067808" crc="c91bd5b4" sha1="b7d639dc6a8560887cd7474e37622cc128fe4392" offset="0" />
</dataarea>
</part>
</software>
<software name="tank">
<description>Tank Trap IV</description>
<year>1979</year>
<publisher>Quality Software</publisher>
<info name="serial" value="303ES" />
<info name="developer" value="Don Ursem"/>
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5985516">
<rom name="tank.wav" size="5985516" crc="b4968bfb" sha1="c5de5aeb8e2afbbdb4058ad61f3bb2d66c59ff18" offset="0" />
</dataarea>
</part>
</software>
<software name="snake">
<description>Snake</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="304ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="4167126">
<rom name="snake.wav" size="4167126" crc="796a1ccc" sha1="d81b1cd60d1b3ff8723f331ef4255d6ca06915b1" offset="0" />
</dataarea>
</part>
</software>
<software name="snake1" cloneof="snake">
<description>Snake (alt)</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="3966884">
<rom name="snake1.wav" size="3966884" crc="b964a4aa" sha1="d39a449b2417a75d98936ca1eded76c98feb39fd" offset="0" />
</dataarea>
</part>
</software>
<software name="horse">
<description>Horse Race</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="305ES" />
<info name="developer" value="Gerard Neil"/>
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="6484904">
<rom name="horse.wav" size="6484904" crc="bb9f1e71" sha1="1aa97ff8562478d14349e7a694a872a32a4c8742" offset="0" />
</dataarea>
</part>
</software>
<software name="black">
<description>Blackjack</description>
<year>198?</year>
<publisher>Dick Smith</publisher>
<info name="serial" value="306ES" /><!-- Dick Smith X-3600 -->
<info name="developer" value="Ian Gilles"/>
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="12293538">
<rom name="black.wav" size="12293538" crc="a7f64fe5" sha1="c5ba7c95a4b9067ff3c4c8b06bcc46f114e6f23d" offset="0" />
</dataarea>
</part>
</software>
<software name="disas">
<description>Z-80 Disassembler</description>
<year>1979</year>
<publisher>unknown</publisher>
<info name="serial" value="307ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5107532">
<rom name="disas.wav" size="5107532" crc="072439e7" sha1="d7e42e7faa334d22cce9b1cacb42e0a5ab94c0a5" offset="0" />
</dataarea>
</part>
</software>
<software name="revsi">
<description>Reversi</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="308ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="10478390">
<rom name="revsi.wav" size="10478390" crc="7de5d76e" sha1="cbacb0b03d8d46bcb41f74ff6f2b88b6802261f4" offset="0" />
</dataarea>
</part>
</software>
<software name="eatd">
<description>Eastern Australian Truck Driving</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="309ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="6497876">
<rom name="eatd.wav" size="6497876" crc="20c96fb7" sha1="2c0295711ef37f19731680dfae7ac0a5baf63dc3" offset="0" />
</dataarea>
</part>
</software>
<software name="plane">
<description>Airmail Pilot</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="310ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5434242">
<rom name="plane.wav" size="5434242" crc="0f6b499d" sha1="486845a62ce62b447c661661b1018fa47ef09b74" offset="0" />
</dataarea>
</part>
</software>
<software name="dodge">
<description>Dodgem</description>
<year>198?</year>
<publisher>Creative Computing</publisher>
<info name="serial" value="311ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="4274948">
<rom name="dodge.wav" size="4274948" crc="13ee1415" sha1="8309c655a6d2a2f263fab822398bf1d7c8caee1e" offset="0" />
</dataarea>
</part>
</software>
<software name="break">
<description>Breakout</description>
<year>1980</year>
<publisher>unknown</publisher>
<info name="serial" value="312ES" />
<info name="developer" value="Ray Bannon"/>
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5734200">
<rom name="break.wav" size="5734200" crc="7fe5a2fa" sha1="1aed0d32c4b66daa3b0ecd37ee0fbab5dead59aa" offset="0" />
</dataarea>
</part>
</software>
<software name="kadat">
<description>Kadath</description>
<year>1985</year>
<publisher>unknown</publisher>
<info name="serial" value="313ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="37498066">
<rom name="kadat.wav" size="37498066" crc="ded19749" sha1="08792d01479e08953a2365b558f41d62467879ee" offset="0" />
</dataarea>
</part>
</software>
<software name="pool">
<description>Cybernetic Pool</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="314ES" />
<info name="developer" value="PJB Systems"/>
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5631242">
<rom name="pool.wav" size="5631242" crc="a3acd1e4" sha1="74df48583e5288883f4535c0e02c29a7e3c19e9a" offset="0" />
</dataarea>
</part>
</software>
<software name="trekc">
<description>Super Star Trek V2.0</description>
<year>1979</year>
<publisher>unknown</publisher>
<info name="serial" value="315ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="20009740">
<rom name="trekc.wav" size="20009740" crc="bc0c00a2" sha1="a53e332578fad009372eeb6e82083fbadd07768b" offset="0" />
</dataarea>
</part>
</software>
<software name="systm">
<description>Graphic Animation System</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="316ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="3417232">
<rom name="systm.wav" size="3417232" crc="4a75a4fc" sha1="43d0335fbfa8301a2e8e7095beb26f20f25402b4" offset="0" />
</dataarea>
</part>
</software>
<software name="demo">
<description>Character Animation Demo</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="318ES" />
<info name="usage" value="In Basic, CLOAD then RUN. You must CLOAD and RUN &quot;systm&quot; first." />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="5092940">
<rom name="demo.wav" size="5092940" crc="0f39db7c" sha1="e7d4a3011b2df4f7c4e80f1f581d70f45a249702" offset="0" />
</dataarea>
</part>
</software>
<software name="instr">
<description>Instructions for Chess</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="319ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="11414744">
<rom name="instr.wav" size="11414744" crc="5865b653" sha1="952c1dd97f5f4fc499b6ce3ce534e8418482ae8e" offset="0" />
</dataarea>
</part>
</software>
<software name="music">
<description>Music Editor</description>
<year>1980</year>
<publisher>Arrington Software</publisher>
<info name="serial" value="320ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="10176812">
<rom name="music.wav" size="10176812" crc="82058eb3" sha1="acfde2ba8b2405af1db2dadb8405ca2a2e7c301d" offset="0" />
</dataarea>
</part>
</software>
<software name="orb">
<description>Orb of Halucidon</description>
<year>198?</year>
<publisher>unknown</publisher>
<info name="serial" value="321ES" />
<info name="usage" value="In Basic, CLOAD then RUN" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="16098944">
<rom name="orb.wav" size="16098944" crc="c01809aa" sha1="b02b5378ac2f7f8cab5bbaa028844ee057980f6b" offset="0" />
</dataarea>
</part>
</software>
</softwarelist> </softwarelist>

View File

@ -1051,8 +1051,8 @@ $(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_ARM ifndef ANDROID_NDK_ARM
$(error ANDROID_NDK_ARM is not set) $(error ANDROID_NDK_ARM is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
@ -1061,8 +1061,8 @@ android-arm: generate $(PROJECTDIR_SDL)/gmake-android-arm/Makefile
ifndef ANDROID_NDK_ARM ifndef ANDROID_NDK_ARM
$(error ANDROID_NDK_ARM is not set) $(error ANDROID_NDK_ARM is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG)
@ -1075,8 +1075,8 @@ $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_ARM64 ifndef ANDROID_NDK_ARM64
$(error ANDROID_NDK_ARM64 is not set) $(error ANDROID_NDK_ARM64 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
@ -1085,8 +1085,8 @@ android-arm64: generate $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile
ifndef ANDROID_NDK_ARM64 ifndef ANDROID_NDK_ARM64
$(error ANDROID_NDK_ARM64 is not set) $(error ANDROID_NDK_ARM64 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG)
@ -1099,8 +1099,8 @@ $(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_MIPS ifndef ANDROID_NDK_MIPS
$(error ANDROID_NDK_MIPS is not set) $(error ANDROID_NDK_MIPS is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
@ -1109,8 +1109,8 @@ android-mips: generate $(PROJECTDIR_SDL)/gmake-android-mips/Makefile
ifndef ANDROID_NDK_MIPS ifndef ANDROID_NDK_MIPS
$(error ANDROID_NDK_MIPS is not set) $(error ANDROID_NDK_MIPS is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG)
@ -1123,8 +1123,8 @@ $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_MIPS64 ifndef ANDROID_NDK_MIPS64
$(error ANDROID_NDK_MIPS64 is not set) $(error ANDROID_NDK_MIPS64 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
@ -1133,8 +1133,8 @@ android-mips64: generate $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile
ifndef ANDROID_NDK_MIPS64 ifndef ANDROID_NDK_MIPS64
$(error ANDROID_NDK_MIPS64 is not set) $(error ANDROID_NDK_MIPS64 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG)
@ -1147,8 +1147,8 @@ $(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_X86 ifndef ANDROID_NDK_X86
$(error ANDROID_NDK_X86 is not set) $(error ANDROID_NDK_X86 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake
@ -1157,8 +1157,8 @@ android-x86: generate $(PROJECTDIR_SDL)/gmake-android-x86/Makefile
ifndef ANDROID_NDK_X86 ifndef ANDROID_NDK_X86
$(error ANDROID_NDK_X86 is not set) $(error ANDROID_NDK_X86 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG)
@ -1171,8 +1171,8 @@ $(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_X64 ifndef ANDROID_NDK_X64
$(error ANDROID_NDK_X64 is not set) $(error ANDROID_NDK_X64 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake
@ -1181,8 +1181,8 @@ android-x64: generate $(PROJECTDIR_SDL)/gmake-android-x64/Makefile
ifndef ANDROID_NDK_X64 ifndef ANDROID_NDK_X64
$(error ANDROID_NDK_X64 is not set) $(error ANDROID_NDK_X64 is not set)
endif endif
ifndef ANDROID_NDK_ROOT ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_ROOT is not set) $(error ANDROID_NDK_LLVM is not set)
endif endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG)

View File

@ -239,7 +239,7 @@ elseif _OPTIONS["targetos"]=="macosx" then
SDL_NETWORK = "pcap" SDL_NETWORK = "pcap"
end end
if _OPTIONS["with-bundled-sdl2"]~=nil or _OPTIONS["targetos"]=="android" then if _OPTIONS["with-bundled-sdl2"]~=nil then
includedirs { includedirs {
GEN_DIR .. "includes", GEN_DIR .. "includes",
} }
@ -295,10 +295,12 @@ if BASE_TARGETOS=="unix" then
"/usr/openwin/lib", "/usr/openwin/lib",
} }
end end
if _OPTIONS["with-bundled-sdl2"]~=nil and _OPTIONS["targetos"]~="android" then if _OPTIONS["with-bundled-sdl2"]~=nil then
if _OPTIONS["targetos"]~="android" then
links { links {
"SDL2", "SDL2",
} }
end
else else
local str = backtick(sdlconfigcmd() .. " --libs") local str = backtick(sdlconfigcmd() .. " --libs")
addlibfromstring(str) addlibfromstring(str)

View File

@ -114,80 +114,71 @@ function toolchain(_buildDir, _subDir)
os.exit(1) os.exit(1)
end end
if "android-arm" == _OPTIONS["gcc"] then if string.find(_OPTIONS["gcc"], "android") then
if not os.getenv("ANDROID_NDK_LLVM") then
if not os.getenv("ANDROID_NDK_ARM") or not os.getenv("ANDROID_NDK_ROOT") then print("Set ANDROID_NDK_LLVM envrionment variables.")
print("Set ANDROID_NDK_ARM and ANDROID_NDK_ROOT envrionment variables.")
end end
premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe" premake.gcc.cc = "$(ANDROID_NDK_LLVM)/bin/clang"
premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe" premake.gcc.cxx = "$(ANDROID_NDK_LLVM)/bin/clang++"
premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar"
premake.gcc.llvm = true premake.gcc.llvm = true
end
if "android-arm" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_ARM") then
print("Set ANDROID_NDK_ARM envrionment variables.")
end
premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar"
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm") location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm")
end end
if "android-arm64" == _OPTIONS["gcc"] then if "android-arm64" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_ARM64") then
if not os.getenv("ANDROID_NDK_ARM64") or not os.getenv("ANDROID_NDK_ROOT") then print("Set ANDROID_NDK_ARM64 envrionment variables.")
print("Set ANDROID_NDK_ARM64 and ANDROID_NDK_ROOT envrionment variables.")
end end
premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe" premake.gcc.ar = "$(ANDROID_NDK_ARM64)/bin/aarch64-linux-android-ar"
premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_ARM64)/bin/aarch64-linux-android-ar.exe"
premake.gcc.llvm = true premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm64") location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm64")
end end
if "android-mips" == _OPTIONS["gcc"] then if "android-mips" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_MIPS") then
if not os.getenv("ANDROID_NDK_MIPS") or not os.getenv("ANDROID_NDK_ROOT") then print("Set ANDROID_NDK_MIPS envrionment variables.")
print("Set ANDROID_NDK_MIPS and ANDROID_NDK_ROOT envrionment variables.")
end end
premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar" premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar"
premake.gcc.llvm = true premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips") location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips")
end end
if "android-mips64" == _OPTIONS["gcc"] then if "android-mips64" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_MIPS64") then
if not os.getenv("ANDROID_NDK_MIPS64") or not os.getenv("ANDROID_NDK_ROOT") then print("Set ANDROID_NDK_MIPS64 envrionment variables.")
print("Set ANDROID_NDK_MIPS64 and ANDROID_NDK_ROOT envrionment variables.")
end end
premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe" premake.gcc.ar = "$(ANDROID_NDK_MIPS64)/bin/mips64el-linux-android-ar"
premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_MIPS64)/bin/mips64el-linux-android-ar.exe"
premake.gcc.llvm = true premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips64") location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips64")
end end
if "android-x86" == _OPTIONS["gcc"] then if "android-x86" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_X86") then
if not os.getenv("ANDROID_NDK_X86") or not os.getenv("ANDROID_NDK_ROOT") then print("Set ANDROID_NDK_X86 envrionment variables.")
print("Set ANDROID_NDK_X86 and ANDROID_NDK_ROOT envrionment variables.")
end end
premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar" premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar"
premake.gcc.llvm = true premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x86") location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x86")
end end
if "android-x64" == _OPTIONS["gcc"] then if "android-x64" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_X64") then
if not os.getenv("ANDROID_NDK_X64") or not os.getenv("ANDROID_NDK_ROOT") then print("Set ANDROID_NDK_X64 envrionment variables.")
print("Set ANDROID_NDK_X64 and ANDROID_NDK_ROOT envrionment variables.")
end end
premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe" premake.gcc.ar = "$(ANDROID_NDK_X64)/bin/x86_64-linux-android-ar"
premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_X64)/bin/x86_64-linux-android-ar.exe"
premake.gcc.llvm = true premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x64") location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x64")
end end

View File

@ -55,8 +55,7 @@ drc_frontend::drc_frontend(device_t &cpu, UINT32 window_start, UINT32 window_end
m_cpudevice(downcast<cpu_device &>(cpu)), m_cpudevice(downcast<cpu_device &>(cpu)),
m_program(m_cpudevice.space(AS_PROGRAM)), m_program(m_cpudevice.space(AS_PROGRAM)),
m_pageshift(m_cpudevice.space_config(AS_PROGRAM)->m_page_shift), m_pageshift(m_cpudevice.space_config(AS_PROGRAM)->m_page_shift),
m_desc_array(window_end + window_start + 2, nullptr), m_desc_array(window_end + window_start + 2, nullptr)
m_allow_branch_in_delay(false)
{ {
} }
@ -157,7 +156,7 @@ const opcode_desc *drc_frontend::describe_code(offs_t startpc)
// slots of branches as well // slots of branches as well
//------------------------------------------------- //-------------------------------------------------
opcode_desc *drc_frontend::describe_one(offs_t curpc, const opcode_desc *prevdesc) opcode_desc *drc_frontend::describe_one(offs_t curpc, const opcode_desc *prevdesc, bool in_delay_slot)
{ {
// initialize the description // initialize the description
opcode_desc *desc = m_desc_allocator.alloc(); opcode_desc *desc = m_desc_allocator.alloc();
@ -171,7 +170,8 @@ opcode_desc *drc_frontend::describe_one(offs_t curpc, const opcode_desc *prevdes
desc->length = 0; desc->length = 0;
desc->delayslots = 0; desc->delayslots = 0;
desc->skipslots = 0; desc->skipslots = 0;
desc->flags = 0; // set the delay slot flag
desc->flags = in_delay_slot ? OPFLAG_IN_DELAY_SLOT : 0;
desc->userflags = 0; desc->userflags = 0;
desc->cycles = 0; desc->cycles = 0;
memset(desc->regin, 0x00, sizeof(desc->regin)); memset(desc->regin, 0x00, sizeof(desc->regin));
@ -197,26 +197,26 @@ opcode_desc *drc_frontend::describe_one(offs_t curpc, const opcode_desc *prevdes
{ {
// iterate over slots and describe them // iterate over slots and describe them
offs_t delaypc = curpc + desc->length; offs_t delaypc = curpc + desc->length;
// If this is a delay slot it is the true branch fork and the pc should be the previous branch target
// If previous instruction is a branch use the target pc. Currently MIP3s only. if (desc->flags & OPFLAG_IN_DELAY_SLOT) {
if (m_allow_branch_in_delay && prevdesc && (prevdesc->flags & OPFLAG_IS_BRANCH) && prevdesc->targetpc != BRANCH_TARGET_DYNAMIC) { if (prevdesc->targetpc != BRANCH_TARGET_DYNAMIC) {
// We got here because the previous instruction is a branch and this instruction is a branch.
// So the PC of the delay slot for the this branch will be the target address of the previous branch.
delaypc = prevdesc->targetpc; delaypc = prevdesc->targetpc;
//printf("drc_frontend::describe_one: branch in delay slot. curpc=0x%08X, delaypc=0x%08X\n", curpc, delaypc); //printf("drc_frontend::describe_one Branch in delay slot. curpc=%08X delaypc=%08X\n", curpc, delaypc);
} else {
//printf("drc_frontend::describe_one Warning! Branch in delay slot of dynamic target. curpc=%08X\n", curpc);
}
} }
opcode_desc *prev = desc; opcode_desc *prev = desc;
for (UINT8 slotnum = 0; slotnum < desc->delayslots; slotnum++) for (UINT8 slotnum = 0; slotnum < desc->delayslots; slotnum++)
{ {
// recursively describe the next instruction // recursively describe the next instruction
opcode_desc *delaydesc = describe_one(delaypc, prev); opcode_desc *delaydesc = describe_one(delaypc, prev, true);
if (delaydesc == nullptr) if (delaydesc == nullptr)
break; break;
desc->delay.append(*delaydesc); desc->delay.append(*delaydesc);
prev = desc; prev = desc;
// set the delay slot flag and a pointer back to the original branch // set a pointer back to the original branch
delaydesc->flags |= OPFLAG_IN_DELAY_SLOT;
delaydesc->branch = desc; delaydesc->branch = desc;
// stop if we hit a page fault // stop if we hit a page fault

View File

@ -134,16 +134,13 @@ public:
// describe a block // describe a block
const opcode_desc *describe_code(offs_t startpc); const opcode_desc *describe_code(offs_t startpc);
// Set the allow branches in delay slot flag
void set_allow_branch_in_delay(bool flag) { m_allow_branch_in_delay = flag; }
protected: protected:
// required overrides // required overrides
virtual bool describe(opcode_desc &desc, const opcode_desc *prev) = 0; virtual bool describe(opcode_desc &desc, const opcode_desc *prev) = 0;
private: private:
// internal helpers // internal helpers
opcode_desc *describe_one(offs_t curpc, const opcode_desc *prevdesc); opcode_desc *describe_one(offs_t curpc, const opcode_desc *prevdesc, bool in_delay_slot = false);
void build_sequence(int start, int end, UINT32 endflag); void build_sequence(int start, int end, UINT32 endflag);
void accumulate_required_backwards(opcode_desc &desc, UINT32 *reqmask); void accumulate_required_backwards(opcode_desc &desc, UINT32 *reqmask);
void release_descriptions(); void release_descriptions();
@ -162,8 +159,6 @@ private:
simple_list<opcode_desc> m_desc_live_list; // list of live descriptions simple_list<opcode_desc> m_desc_live_list; // list of live descriptions
fixed_allocator<opcode_desc> m_desc_allocator; // fixed allocator for descriptions fixed_allocator<opcode_desc> m_desc_allocator; // fixed allocator for descriptions
std::vector<opcode_desc *> m_desc_array; // array of descriptions in PC order std::vector<opcode_desc *> m_desc_array; // array of descriptions in PC order
bool m_allow_branch_in_delay; // Allow branches in delay slots
}; };

View File

@ -386,9 +386,6 @@ void mips3_device::device_start()
/* initialize the front-end helper */ /* initialize the front-end helper */
m_drcfe = std::make_unique<mips3_frontend>(this, COMPILE_BACKWARDS_BYTES, COMPILE_FORWARDS_BYTES, SINGLE_INSTRUCTION_MODE ? 1 : COMPILE_MAX_SEQUENCE); m_drcfe = std::make_unique<mips3_frontend>(this, COMPILE_BACKWARDS_BYTES, COMPILE_FORWARDS_BYTES, SINGLE_INSTRUCTION_MODE ? 1 : COMPILE_MAX_SEQUENCE);
// Allow branches in delay slots (need to investigate which flavors require this)
if (m_flavor== MIPS3_TYPE_VR4300)
m_drcfe->set_allow_branch_in_delay(true);
/* allocate memory for cache-local state and initialize it */ /* allocate memory for cache-local state and initialize it */
memcpy(m_fpmode, fpmode_source, sizeof(fpmode_source)); memcpy(m_fpmode, fpmode_source, sizeof(fpmode_source));

View File

@ -807,6 +807,8 @@ void adsp21062_device::device_reset()
m_core->lstkp = 0; m_core->lstkp = 0;
m_core->pcstkp = 0; m_core->pcstkp = 0;
m_core->interrupt_active = 0; m_core->interrupt_active = 0;
m_drcfe->flush();
} }

View File

@ -616,7 +616,7 @@ private:
void static_generate_mode1_ops(); void static_generate_mode1_ops();
void load_fast_iregs(drcuml_block *block); void load_fast_iregs(drcuml_block *block);
void save_fast_iregs(drcuml_block *block); void save_fast_iregs(drcuml_block *block);
void generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool last_delayslot);
void generate_update_cycles(drcuml_block *block, compiler_state *compiler, uml::parameter param, int allow_exception); void generate_update_cycles(drcuml_block *block, compiler_state *compiler, uml::parameter param, int allow_exception);
int generate_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); int generate_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);
void generate_unimplemented_compute(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_unimplemented_compute(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);

View File

@ -1183,7 +1183,7 @@ void adsp21062_device::compile_block(offs_t pc)
/* iterate over instructions in the sequence and compile them */ /* iterate over instructions in the sequence and compile them */
for (curdesc = seqhead; curdesc != seqlast->next(); curdesc = curdesc->next()) for (curdesc = seqhead; curdesc != seqlast->next(); curdesc = curdesc->next())
generate_sequence_instruction(block, &compiler, curdesc); generate_sequence_instruction(block, &compiler, curdesc, false);
/* if we need to return to the start, do it */ /* if we need to return to the start, do it */
if (seqlast->flags & OPFLAG_RETURN_TO_START) if (seqlast->flags & OPFLAG_RETURN_TO_START)
@ -1224,8 +1224,6 @@ void adsp21062_device::flush_cache()
/* empty the transient cache contents */ /* empty the transient cache contents */
m_drcuml->reset(); m_drcuml->reset();
m_drcfe->flush();
try try
{ {
// generate the entry point and out-of-cycles handlers // generate the entry point and out-of-cycles handlers
@ -1337,7 +1335,7 @@ void adsp21062_device::static_generate_out_of_cycles()
} }
void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool last_delayslot)
{ {
/* add an entry for the log */ /* add an entry for the log */
// if (m_drcuml->logging() && !(desc->flags & OPFLAG_VIRTUAL_NOOP)) // if (m_drcuml->logging() && !(desc->flags & OPFLAG_VIRTUAL_NOOP))
@ -1389,6 +1387,11 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil
if (compiler->mode1_delay.counter > 0) if (compiler->mode1_delay.counter > 0)
{ {
compiler->mode1_delay.counter--; compiler->mode1_delay.counter--;
// delayed operation in the last delay slot needs to be done before the branch is taken
if (last_delayslot)
compiler->mode1_delay.counter = 0;
if (compiler->mode1_delay.counter <= 0) if (compiler->mode1_delay.counter <= 0)
{ {
switch (compiler->mode1_delay.mode) switch (compiler->mode1_delay.mode)
@ -1416,6 +1419,11 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil
// insert loop check at this instruction if needed // insert loop check at this instruction if needed
if (desc->userflags & OP_USERFLAG_COUNTER_LOOP) if (desc->userflags & OP_USERFLAG_COUNTER_LOOP)
{ {
code_label label_skip_loop = compiler->labelnum++;
UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4);
UML_CMP(block, I0, desc->pc);
UML_JMPc(block, COND_NE, label_skip_loop);
code_label label_expire = compiler->labelnum++; code_label label_expire = compiler->labelnum++;
UML_MOV(block, I1, mem(&m_core->lstkp)); // mov i1,[m_core->lstkp] UML_MOV(block, I1, mem(&m_core->lstkp)); // mov i1,[m_core->lstkp]
UML_LOAD(block, I0, m_core->lcstack, I1, SIZE_DWORD, SCALE_x4); // load i0,m_core->lcstack,i1,dword,scale_x4 UML_LOAD(block, I0, m_core->lcstack, I1, SIZE_DWORD, SCALE_x4); // load i0,m_core->lcstack,i1,dword,scale_x4
@ -1429,9 +1437,16 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil
UML_LABEL(block, label_expire); // label_expire: UML_LABEL(block, label_expire); // label_expire:
UML_CALLH(block, *m_pop_pc); // callh m_pop_pc UML_CALLH(block, *m_pop_pc); // callh m_pop_pc
UML_CALLH(block, *m_pop_loop); // callh m_pop_loop UML_CALLH(block, *m_pop_loop); // callh m_pop_loop
UML_LABEL(block, label_skip_loop);
} }
if (desc->userflags & OP_USERFLAG_COND_LOOP) if (desc->userflags & OP_USERFLAG_COND_LOOP)
{ {
code_label label_skip_loop = compiler->labelnum++;
UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4);
UML_CMP(block, I0, desc->pc);
UML_JMPc(block, COND_NE, label_skip_loop);
code_label label_expire = compiler->labelnum++; code_label label_expire = compiler->labelnum++;
int condition = (desc->userflags & OP_USERFLAG_COND_FIELD) >> OP_USERFLAG_COND_FIELD_SHIFT; int condition = (desc->userflags & OP_USERFLAG_COND_FIELD) >> OP_USERFLAG_COND_FIELD_SHIFT;
@ -1442,6 +1457,8 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil
UML_LABEL(block, label_expire); UML_LABEL(block, label_expire);
UML_CALLH(block, *m_pop_pc); UML_CALLH(block, *m_pop_pc);
UML_CALLH(block, *m_pop_loop); UML_CALLH(block, *m_pop_loop);
UML_LABEL(block, label_skip_loop);
} }
// copy ASTAT bits over for conditional loop // copy ASTAT bits over for conditional loop
@ -1684,7 +1701,48 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st
void adsp21062_device::generate_update_circular_buffer(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int g, int i) void adsp21062_device::generate_update_circular_buffer(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int g, int i)
{ {
// TODO if (g)
{
// PM
code_label end = compiler->labelnum++;
code_label label2 = compiler->labelnum++;
UML_CMP(block, PM_L(i), 0);
UML_JMPc(block, COND_E, end);
UML_ADD(block, I0, PM_B(i), PM_L(i));
UML_CMP(block, PM_I(i), I0);
UML_JMPc(block, COND_LE, label2);
UML_SUB(block, PM_I(i), PM_I(i), PM_L(i));
UML_JMP(block, end);
UML_LABEL(block, label2);
UML_CMP(block, PM_I(i), PM_B(i));
UML_JMPc(block, COND_G, end);
UML_ADD(block, PM_I(i), PM_I(i), PM_L(i));
UML_LABEL(block, end);
}
else
{
// DM
code_label end = compiler->labelnum++;
code_label label2 = compiler->labelnum++;
UML_CMP(block, DM_L(i), 0);
UML_JMPc(block, COND_E, end);
UML_ADD(block, I0, DM_B(i), DM_L(i));
UML_CMP(block, DM_I(i), I0);
UML_JMPc(block, COND_LE, label2);
UML_SUB(block, DM_I(i), DM_I(i), DM_L(i));
UML_JMP(block, end);
UML_LABEL(block, label2);
UML_CMP(block, DM_I(i), DM_B(i));
UML_JMPc(block, COND_G, end);
UML_ADD(block, DM_I(i), DM_I(i), DM_L(i));
UML_LABEL(block, end);
}
} }
void adsp21062_device::generate_astat_copy(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) void adsp21062_device::generate_astat_copy(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc)
@ -1724,8 +1782,8 @@ void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compil
// compile delay slots if needed // compile delay slots if needed
if (delayslot) if (delayslot)
{ {
generate_sequence_instruction(block, &compiler_temp, desc->delay.first()); generate_sequence_instruction(block, &compiler_temp, desc->delay.first(), false);
generate_sequence_instruction(block, &compiler_temp, desc->delay.last()); generate_sequence_instruction(block, &compiler_temp, desc->delay.last(), true);
} }
if (delayslot) if (delayslot)
@ -1772,8 +1830,29 @@ void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compil
// compile delay slots if needed // compile delay slots if needed
if (delayslot) if (delayslot)
{ {
generate_sequence_instruction(block, &compiler_temp, desc->delay.first()); generate_sequence_instruction(block, &compiler_temp, desc->delay.first(), false);
generate_sequence_instruction(block, &compiler_temp, desc->delay.last()); generate_sequence_instruction(block, &compiler_temp, desc->delay.last(), true);
}
// clear interrupt
if (clearint)
{
code_label skip_pop = compiler_temp.labelnum++;
UML_MOV(block, mem(&m_core->interrupt_active), 0); // mov [interrupt_active],0
UML_SHL(block, I1, 1, mem(&m_core->active_irq_num)); // shl i1,1,[active_irq_num]
UML_XOR(block, IRPTL, IRPTL, I1); // xor IRPTL,i1
UML_CMP(block, mem(&m_core->status_stkp), 0); // cmp [status_stkp],0
UML_JMPc(block, COND_Z, skip_pop); // jz skip_pop
UML_CALLH(block, *m_pop_status); // callh m_pop_status
UML_LABEL(block, skip_pop); // skip_pop:
}
// loop abort
if (loopabort)
{
UML_CALLH(block, *m_pop_pc);
UML_CALLH(block, *m_pop_loop);
} }
// update cycles and hash jump // update cycles and hash jump
@ -1848,7 +1927,7 @@ void adsp21062_device::generate_read_ureg(drcuml_block *block, compiler_state *c
break; break;
case 0x64: // PCSTK case 0x64: // PCSTK
fatalerror("generate_read_ureg: PCSTK"); UML_LOAD(block, I0, &m_core->pcstack, PCSTKP, SIZE_DWORD, SCALE_x4);
break; break;
case 0x70: // USTAT1 case 0x70: // USTAT1
UML_MOV(block, I0, mem(&m_core->ustat1)); UML_MOV(block, I0, mem(&m_core->ustat1));
@ -2035,6 +2114,9 @@ void adsp21062_device::generate_write_ureg(drcuml_block *block, compiler_state *
case 0x64: // PCSTK case 0x64: // PCSTK
fatalerror("generate_write_ureg: PCSTK"); fatalerror("generate_write_ureg: PCSTK");
break; break;
case 0x65: // PCSTKP
UML_MOV(block, PCSTKP, imm ? data : I0);
break;
case 0x70: // USTAT1 case 0x70: // USTAT1
UML_MOV(block, mem(&m_core->ustat1), imm ? data : I0); UML_MOV(block, mem(&m_core->ustat1), imm ? data : I0);
break; break;
@ -2532,7 +2614,7 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi
generate_read_ureg(block, compiler, desc, ureg, false); generate_read_ureg(block, compiler, desc, ureg, false);
UML_AND(block, I3, I0, 0xffff); UML_MOV(block, I3, I0);
UML_MOV(block, LCNTR, I3); UML_MOV(block, LCNTR, I3);
// push pc // push pc
@ -2836,7 +2918,34 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi
} }
case 0x17: // push|pop stacks / flush cache |000|10111| case 0x17: // push|pop stacks / flush cache |000|10111|
return FALSE; {
if (opcode & U64(0x008000000000))
{
fatalerror("sharcdrc: push/pop stacks: push loop not implemented\n");
}
if (opcode & U64(0x004000000000))
{
fatalerror("sharcdrc: push/pop stacks: pop loop not implemented\n");
}
if (opcode & U64(0x002000000000))
{
UML_CALLH(block, *m_push_status);
}
if (opcode & U64(0x001000000000))
{
UML_CALLH(block, *m_pop_status);
}
if (opcode & U64(0x000800000000))
{
UML_MOV(block, I0, PCSTK);
UML_CALLH(block, *m_push_pc);
}
if (opcode & U64(0x000400000000))
{
UML_CALLH(block, *m_pop_pc);
}
return TRUE;
}
case 0x18: // cjump |000|11000| case 0x18: // cjump |000|11000|
return FALSE; return FALSE;
@ -3186,12 +3295,121 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi
case 6: // indirect jump / compute / dreg <-> DM |110| case 6: // indirect jump / compute / dreg <-> DM |110|
{ {
return FALSE; int d = (opcode >> 44) & 0x1;
int dmi = (opcode >> 41) & 0x7;
int dmm = (opcode >> 38) & 0x7;
int pmi = (opcode >> 30) & 0x7;
int pmm = (opcode >> 27) & 0x7;
int cond = (opcode >> 33) & 0x1f;
int dreg = (opcode >> 23) & 0xf;
code_label label_else = compiler->labelnum++;
generate_if_condition(block, compiler, desc, cond, label_else);
UML_ADD(block, I0, PM_I(pmi), PM_M(pmm));
generate_jump(block, compiler, desc, false, false, false);
UML_LABEL(block, label_else);
if (d)
{
// DREG -> DM
bool temp_dreg = false;
// save dreg if compute writes to it
if (desc->regout[0] & (1 << dreg))
{
UML_MOV(block, mem(&m_core->dreg_temp), REG(dreg));
temp_dreg = true;
}
// compute
generate_compute(block, compiler, desc);
// transfer
UML_MOV(block, I1, DM_I(dmi));
if (temp_dreg)
UML_MOV(block, I0, mem(&m_core->dreg_temp));
else
UML_MOV(block, I0, REG(dreg));
UML_CALLH(block, *m_dm_write32);
}
else
{
// DM -> DREG
// compute
generate_compute(block, compiler, desc);
// transfer
UML_MOV(block, I1, DM_I(dmi));
UML_CALLH(block, *m_dm_read32);
UML_MOV(block, REG(dreg), I0);
}
// update I
UML_ADD(block, DM_I(dmi), DM_I(dmi), DM_M(dmm));
generate_update_circular_buffer(block, compiler, desc, 0, dmi);
return TRUE;
} }
case 7: // indirect jump / compute / dreg <-> DM |111| case 7: // indirect jump / compute / dreg <-> DM |111|
{ {
return FALSE; int d = (opcode >> 44) & 0x1;
int dmi = (opcode >> 41) & 0x7;
int dmm = (opcode >> 38) & 0x7;
int cond = (opcode >> 33) & 0x1f;
int dreg = (opcode >> 23) & 0xf;
code_label label_else = compiler->labelnum++;
generate_if_condition(block, compiler, desc, cond, label_else);
generate_jump(block, compiler, desc, false, false, false);
UML_LABEL(block, label_else);
if (d)
{
// DREG -> DM
bool temp_dreg = false;
// save dreg if compute writes to it
if (desc->regout[0] & (1 << dreg))
{
UML_MOV(block, mem(&m_core->dreg_temp), REG(dreg));
temp_dreg = true;
}
// compute
generate_compute(block, compiler, desc);
// transfer
UML_MOV(block, I1, DM_I(dmi));
if (temp_dreg)
UML_MOV(block, I0, mem(&m_core->dreg_temp));
else
UML_MOV(block, I0, REG(dreg));
UML_CALLH(block, *m_dm_write32);
}
else
{
// DM -> DREG
// compute
generate_compute(block, compiler, desc);
// transfer
UML_MOV(block, I1, DM_I(dmi));
UML_CALLH(block, *m_dm_read32);
UML_MOV(block, REG(dreg), I0);
}
// update I
UML_ADD(block, DM_I(dmi), DM_I(dmi), DM_M(dmm));
generate_update_circular_buffer(block, compiler, desc, 0, dmi);
return TRUE;
} }
} }
@ -3272,8 +3490,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
case 0x07: // Ra = Rx + Ry, Rs = Rx - Ry case 0x07: // Ra = Rx + Ry, Rs = Rx - Ry
case 0x0f: // Fa = Fx + Fy, Fs = Fx - Fy case 0x0f: // Fa = Fx + Fy, Fs = Fx - Fy
case 0x04: // Rm = R3-0 * R7-4 (SSFR), Ra = R11-8 + R15-12
case 0x05: // Rm = R3-0 * R7-4 (SSFR), Ra = R11-8 - R15-12
case 0x06: // Rm = R3-0 * R7-4 (SSFR), Ra = (R11-8 + R15-12) / 2 case 0x06: // Rm = R3-0 * R7-4 (SSFR), Ra = (R11-8 + R15-12) / 2
case 0x08: // MRF = MRF + R3-0 * R7-4 (SSF), Ra = R11-8 + R15-12 case 0x08: // MRF = MRF + R3-0 * R7-4 (SSF), Ra = R11-8 + R15-12
case 0x09: // MRF = MRF + R3-0 * R7-4 (SSF), Ra = R11-8 - R15-12 case 0x09: // MRF = MRF + R3-0 * R7-4 (SSF), Ra = R11-8 - R15-12
@ -3294,10 +3510,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
generate_unimplemented_compute(block, compiler, desc); generate_unimplemented_compute(block, compiler, desc);
return; return;
case 0x1d: // Fm = F3-0 * F7-4, Fa = ABS F11-8
generate_unimplemented_compute(block, compiler, desc);
return;
case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:
case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:
// Rm = R3-0 * R7-4 (SSFR), Ra = R11-8 + R15-12, Rs = R11-8 - R15-12 // Rm = R3-0 * R7-4 (SSFR), Ra = R11-8 + R15-12, Rs = R11-8 - R15-12
@ -3343,6 +3555,46 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
UML_ICOPYFS(block, REG(ps), F5); UML_ICOPYFS(block, REG(ps), F5);
return; return;
case 0x04: // Rm = R3-0 * R7-4 (SSFR), Ra = R11-8 + R15-12
UML_DSEXT(block, I0, REG(fxm), SIZE_DWORD);
UML_DSEXT(block, I1, REG(fym), SIZE_DWORD);
UML_DMULS(block, I0, I0, I0, I1);
UML_DSHR(block, I0, I0, 31);
UML_ADD(block, I2, REG(fxa), REG(fya));
if (AZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AZ);
if (AN_CALC_REQUIRED) UML_SETc(block, COND_S, ASTAT_AN);
if (AV_CALC_REQUIRED) UML_SETc(block, COND_V, ASTAT_AV);
if (AC_CALC_REQUIRED) UML_SETc(block, COND_C, ASTAT_AC);
if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0);
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0);
// TODO: multiplier flags
UML_MOV(block, REG(fm), I0);
UML_MOV(block, REG(fa), I2);
return;
case 0x05: // Rm = R3-0 * R7-4 (SSFR), Ra = R11-8 - R15-12
UML_DSEXT(block, I0, REG(fxm), SIZE_DWORD);
UML_DSEXT(block, I1, REG(fym), SIZE_DWORD);
UML_DMULS(block, I0, I0, I0, I1);
UML_DSHR(block, I0, I0, 31);
UML_SUB(block, I2, REG(fxa), REG(fya));
if (AZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AZ);
if (AN_CALC_REQUIRED) UML_SETc(block, COND_S, ASTAT_AN);
if (AV_CALC_REQUIRED) UML_SETc(block, COND_V, ASTAT_AV);
if (AC_CALC_REQUIRED) UML_SETc(block, COND_C, ASTAT_AC);
if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0);
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0);
// TODO: multiplier flags
UML_MOV(block, REG(fm), I0);
UML_MOV(block, REG(fa), I2);
return;
case 0x18: // Fm = F3-0 * F7-4, Fa = F11-8 + F15-12 case 0x18: // Fm = F3-0 * F7-4, Fa = F11-8 + F15-12
// TODO: denormals // TODO: denormals
UML_FSCOPYI(block, F0, REG(fxm)); UML_FSCOPYI(block, F0, REG(fxm));
@ -3511,6 +3763,28 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
return; return;
} }
case 0x1d: // Fm = F3-0 * F7-4, Fa = ABS F11-8
UML_FSCOPYI(block, F0, REG(fxm));
UML_FSCOPYI(block, F1, REG(fym));
UML_AND(block, I0, REG(fxa), 0x7fffffff);
UML_FSMUL(block, F0, F0, F1);
if (AZ_CALC_REQUIRED) UML_MOV(block, ASTAT_AZ, 0); // TODO
if (AN_CALC_REQUIRED) UML_MOV(block, ASTAT_AN, 0);
if (AV_CALC_REQUIRED) UML_MOV(block, ASTAT_AV, 0);
if (AC_CALC_REQUIRED) UML_MOV(block, ASTAT_AC, 0);
if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0); // TODO
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); // TODO
if (MN_CALC_REQUIRED)
UML_FSCMP(block, F0, mem(&m_core->fp0));
if (MN_CALC_REQUIRED) UML_SETc(block, COND_C, ASTAT_MN);
// TODO: MV, MU, MI flags
UML_ICOPYFS(block, REG(fm), F0);
UML_MOV(block, REG(fa), I0);
return;
case 0x1e: // Fm = F3-0 * F7-4, Fa = MAX(F11-8, F15-12) case 0x1e: // Fm = F3-0 * F7-4, Fa = MAX(F11-8, F15-12)
// TODO: denormals // TODO: denormals
UML_FSCOPYI(block, F0, REG(fxm)); UML_FSCOPYI(block, F0, REG(fxm));
@ -3587,7 +3861,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
switch (operation) switch (operation)
{ {
case 0x09: // Rn = (Rx + Ry) / 2 case 0x09: // Rn = (Rx + Ry) / 2
case 0x61: // Rn = MIN(Rx, Ry)
case 0x63: // Rn = CLIP Rx BY Ry case 0x63: // Rn = CLIP Rx BY Ry
case 0x92: // Fn = ABS(Fx - Fy) case 0x92: // Fn = ABS(Fx - Fy)
case 0x89: // Fn = (Fx + Fy) / 2 case 0x89: // Fn = (Fx + Fy) / 2
@ -3603,7 +3876,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
case 0xb0: // Fn = ABS(Fx) case 0xb0: // Fn = ABS(Fx)
case 0xa5: // Fn = RND Fx case 0xa5: // Fn = RND Fx
case 0xad: // Rn = MANT Fx case 0xad: // Rn = MANT Fx
case 0xc9: // Rn = FIX Fx
case 0xcd: // Rn = TRUNC Fx case 0xcd: // Rn = TRUNC Fx
generate_unimplemented_compute(block, compiler, desc); generate_unimplemented_compute(block, compiler, desc);
return; return;
@ -3722,6 +3994,20 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0);
return; return;
case 0x61: // Rn = MIN(Rx, Ry)
UML_MOV(block, REG(rn), REG(rx));
UML_CMP(block, REG(rx), REG(ry));
UML_MOVc(block, COND_G, REG(rn), REG(ry));
if (AZ_CALC_REQUIRED || AN_CALC_REQUIRED)
UML_CMP(block, REG(rn), 0);
if (AZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AZ);
if (AN_CALC_REQUIRED) UML_SETc(block, COND_S, ASTAT_AN);
if (AV_CALC_REQUIRED) UML_MOV(block, ASTAT_AV, 0);
if (AC_CALC_REQUIRED) UML_MOV(block, ASTAT_AC, 0);
if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0);
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0);
return;
case 0x62: // Rn = MAX(Rx, Ry) case 0x62: // Rn = MAX(Rx, Ry)
UML_MOV(block, REG(rn), REG(rx)); UML_MOV(block, REG(rn), REG(rx));
UML_CMP(block, REG(rx), REG(ry)); UML_CMP(block, REG(rx), REG(ry));
@ -3941,6 +4227,27 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0);
return; return;
case 0xc9: // Rn = FIX Fx
UML_FSCOPYI(block, F0, REG(rx));
UML_TEST(block, MODE1, MODE1_TRUNCATE);
UML_JMPc(block, COND_Z, compiler->labelnum);
UML_FSTOINT(block, I0, F0, SIZE_DWORD, ROUND_TRUNC);
UML_JMP(block, compiler->labelnum + 1);
UML_LABEL(block, compiler->labelnum++);
UML_FSTOINT(block, I0, F0, SIZE_DWORD, ROUND_ROUND);
UML_LABEL(block, compiler->labelnum++);
if (AZ_CALC_REQUIRED || AN_CALC_REQUIRED)
UML_CMP(block, I0, 0);
if (AZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AZ);
if (AN_CALC_REQUIRED) UML_SETc(block, COND_S, ASTAT_AN);
if (AV_CALC_REQUIRED) UML_MOV(block, ASTAT_AV, 0); // TODO
if (AC_CALC_REQUIRED) UML_MOV(block, ASTAT_AC, 0);
if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0);
if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); // TODO
UML_MOV(block, REG(rn), I0);
return;
case 0xd9: // Rn = FIX Fx BY Ry case 0xd9: // Rn = FIX Fx BY Ry
{ {
code_label denormal = compiler->labelnum++; code_label denormal = compiler->labelnum++;
@ -4116,7 +4423,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
case 0x60: // Rn = Rx * Ry (USI) case 0x60: // Rn = Rx * Ry (USI)
case 0x68: // Rn = Rx * Ry (USF) case 0x68: // Rn = Rx * Ry (USF)
case 0x69: // Rn = Rx * Ry (USFR) case 0x69: // Rn = Rx * Ry (USFR)
case 0x70: // Rn = Rx * Ry (SSI)
case 0x78: // Rn = Rx * Ry (SSF) case 0x78: // Rn = Rx * Ry (SSF)
case 0x79: // Rn = Rx * Ry (SSFR) case 0x79: // Rn = Rx * Ry (SSFR)
case 0x44: // MRF = Rx * Ry (UUI) case 0x44: // MRF = Rx * Ry (UUI)
@ -4297,6 +4603,12 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
// TODO: flags // TODO: flags
return; return;
case 0x70: // Rn = Rx * Ry (SSI)
UML_MULS(block, I0, I0, REG(rx), REG(ry));
UML_MOV(block, REG(rn), I0);
// TODO: flags
return;
case 0xb0: // Rn = MRF + Rx * Ry (SSI) case 0xb0: // Rn = MRF + Rx * Ry (SSI)
UML_DSEXT(block, I0, REG(rx), SIZE_DWORD); UML_DSEXT(block, I0, REG(rx), SIZE_DWORD);
UML_DSEXT(block, I1, REG(ry), SIZE_DWORD); UML_DSEXT(block, I1, REG(ry), SIZE_DWORD);
@ -4326,13 +4638,10 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
{ {
switch (operation) switch (operation)
{ {
case 0x00: // Rn = LSHIFT Rx BY Ry | <data8>
case 0x04: // Rn = ASHIFT Rx BY Ry | <data8> case 0x04: // Rn = ASHIFT Rx BY Ry | <data8>
case 0xc4: // Rn = BCLR Rx BY Ry | <data8>
case 0x44: // Rn = FDEP Rx BY Ry | <bit6>:<len6> case 0x44: // Rn = FDEP Rx BY Ry | <bit6>:<len6>
case 0x4c: // Rn = FDEP Rx BY Ry | <bit6>:<len6> (SE) case 0x4c: // Rn = FDEP Rx BY Ry | <bit6>:<len6> (SE)
case 0x24: // Rn = Rn OR ASHIFT Rx BY Ry | <data8> case 0x24: // Rn = Rn OR ASHIFT Rx BY Ry | <data8>
case 0x64: // Rn = Rn OR FDEP Rx BY Ry | <bit6>:<len6>
case 0x6c: // Rn = Rn OR FDEP Rx BY Ry | <bit6>:<len6> (SE) case 0x6c: // Rn = Rn OR FDEP Rx BY Ry | <bit6>:<len6> (SE)
case 0x80: // Rn = EXP Rx case 0x80: // Rn = EXP Rx
case 0x84: // Rn = EXP Rx (EX) case 0x84: // Rn = EXP Rx (EX)
@ -4343,6 +4652,31 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
generate_unimplemented_compute(block, compiler, desc); generate_unimplemented_compute(block, compiler, desc);
return; return;
case 0x00: // Rn = LSHIFT Rx BY Ry | <data8>
{
code_label shift_neg = compiler->labelnum++;
code_label shift_end = compiler->labelnum++;
UML_MOV(block, I0, REG(ry));
UML_CMP(block, I0, 0);
UML_JMPc(block, COND_L, shift_neg);
UML_SHR(block, I1, REG(rx), I0);
UML_JMP(block, shift_end);
UML_LABEL(block, shift_neg);
UML_SUB(block, I2, 0, I0);
UML_SHR(block, I1, REG(rx), I2);
UML_LABEL(block, shift_end);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED)
{
UML_CMP(block, I0, 0);
UML_SETc(block, COND_NE, ASTAT_AV);
}
if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0);
UML_MOV(block, REG(rn), I1);
return;
}
case 0x08: // Rn = ROT Rx BY Ry | <data8> case 0x08: // Rn = ROT Rx BY Ry | <data8>
{ {
code_label shift_neg = compiler->labelnum++; code_label shift_neg = compiler->labelnum++;
@ -4442,11 +4776,33 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0); if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0);
return; return;
case 0x64: // Rn = Rn OR FDEP Rx BY Ry | <bit6>:<len6>
// extraction mask
UML_MOV(block, I0, REG(ry));
UML_SHR(block, I1, I0, 6);
UML_AND(block, I1, I1, 0x3f); // i1 = len6
UML_AND(block, I0, I0, 0x3f); // i0 = bit6
UML_MOV(block, I3, 0xffffffff);
UML_SUB(block, I2, 32, I1);
UML_SHR(block, I3, I3, I2);
UML_AND(block, I3, REG(rx), I3);
UML_SHL(block, I3, I3, I0);
UML_OR(block, REG(rn), REG(rn), I3);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED)
{
UML_ADD(block, I0, I0, I1);
UML_CMP(block, I0, 32);
UML_SETc(block, COND_G, ASTAT_SV);
}
if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0);
return;
case 0xc0: // Rn = BSET Rx BY Ry | <data8> case 0xc0: // Rn = BSET Rx BY Ry | <data8>
{ {
UML_MOV(block, I0, REG(ry)); UML_MOV(block, I0, REG(ry));
UML_MOV(block, I1, 1); UML_SHL(block, I1, 1, I0);
UML_SHL(block, I1, I1, I0);
UML_OR(block, REG(rn), REG(rn), I1); UML_OR(block, REG(rn), REG(rn), I1);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ); if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED) if (SV_CALC_REQUIRED)
@ -4458,11 +4814,26 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
return; return;
} }
case 0xc4: // Rn = BCLR Rx BY Ry | <data8>
{
UML_MOV(block, I0, REG(ry));
UML_SHL(block, I1, 1, I0);
UML_XOR(block, I1, I1, 0xffffffff);
UML_AND(block, REG(rn), REG(rn), I1);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED)
{
UML_CMP(block, I0, 31);
UML_SETc(block, COND_G, ASTAT_SV);
}
if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0);
return;
}
case 0xcc: // BTST Rx BY Ry | <data8> case 0xcc: // BTST Rx BY Ry | <data8>
{ {
UML_MOV(block, I0, REG(ry)); UML_MOV(block, I0, REG(ry));
UML_MOV(block, I1, 1); UML_SHL(block, I1, 1, I0);
UML_SHL(block, I1, I1, I0);
UML_TEST(block, REG(rx), I1); UML_TEST(block, REG(rx), I1);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ); if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED) if (SV_CALC_REQUIRED)
@ -4555,8 +4926,10 @@ void adsp21062_device::generate_if_condition(drcuml_block *block, compiler_state
case 0x0d: /* TF */ case 0x0d: /* TF */
UML_TEST(block, ASTAT_BTF, 1); UML_TEST(block, ASTAT_BTF, 1);
UML_JMPc(block, COND_E, skip_label); UML_JMPc(block, COND_E, skip_label);
break;
case 0x0e: /* BM */ case 0x0e: /* BM */
UML_JMP(block, skip_label); UML_JMP(block, skip_label);
break;
case 0x0f: /* NOT LCE */ case 0x0f: /* NOT LCE */
UML_CMP(block, CURLCNTR, 1); UML_CMP(block, CURLCNTR, 1);
UML_JMPc(block, COND_E, skip_label); UML_JMPc(block, COND_E, skip_label);
@ -4821,7 +5194,10 @@ void adsp21062_device::generate_shift_imm(drcuml_block *block, compiler_state *c
return; return;
case 0x02: // ROT Rx BY <data8> case 0x02: // ROT Rx BY <data8>
UML_ROL(block, REG(rn), REG(rx), (shift < 0) ? 31 - ((-shift) & 0x1f) : shift & 0x1f); if (shift < 0)
UML_ROR(block, REG(rn), REG(rx), (-shift) & 0x1f);
else
UML_ROL(block, REG(rn), REG(rx), shift & 0x1f);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ); if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED) UML_MOV(block, ASTAT_SV, 0); if (SV_CALC_REQUIRED) UML_MOV(block, ASTAT_SV, 0);
if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0); if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0);

View File

@ -115,6 +115,7 @@ static void execute_next(running_machine &machine, int ref, int params, const ch
static void execute_comment(running_machine &machine, int ref, int params, const char **param); static void execute_comment(running_machine &machine, int ref, int params, const char **param);
static void execute_comment_del(running_machine &machine, int ref, int params, const char **param); static void execute_comment_del(running_machine &machine, int ref, int params, const char **param);
static void execute_comment_save(running_machine &machine, int ref, int params, const char **param); static void execute_comment_save(running_machine &machine, int ref, int params, const char **param);
static void execute_comment_list(running_machine &machine, int ref, int params, const char **param);
static void execute_bpset(running_machine &machine, int ref, int params, const char **param); static void execute_bpset(running_machine &machine, int ref, int params, const char **param);
static void execute_bpclear(running_machine &machine, int ref, int params, const char **param); static void execute_bpclear(running_machine &machine, int ref, int params, const char **param);
static void execute_bpdisenable(running_machine &machine, int ref, int params, const char **param); static void execute_bpdisenable(running_machine &machine, int ref, int params, const char **param);
@ -299,6 +300,7 @@ void debug_command_init(running_machine &machine)
debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment); debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment);
debug_console_register_command(machine, "comdelete", CMDFLAG_NONE, 0, 1, 1, execute_comment_del); debug_console_register_command(machine, "comdelete", CMDFLAG_NONE, 0, 1, 1, execute_comment_del);
debug_console_register_command(machine, "comsave", CMDFLAG_NONE, 0, 0, 0, execute_comment_save); debug_console_register_command(machine, "comsave", CMDFLAG_NONE, 0, 0, 0, execute_comment_save);
debug_console_register_command(machine, "comlist", CMDFLAG_NONE, 0, 0, 0, execute_comment_list);
debug_console_register_command(machine, "bpset", CMDFLAG_NONE, 0, 1, 3, execute_bpset); debug_console_register_command(machine, "bpset", CMDFLAG_NONE, 0, 1, 3, execute_bpset);
debug_console_register_command(machine, "bp", CMDFLAG_NONE, 0, 1, 3, execute_bpset); debug_console_register_command(machine, "bp", CMDFLAG_NONE, 0, 1, 3, execute_bpset);
@ -1177,11 +1179,25 @@ static void execute_comment_del(running_machine &machine, int ref, int params, c
cpu->machine().debug_view().update_all(DVT_DISASSEMBLY); cpu->machine().debug_view().update_all(DVT_DISASSEMBLY);
} }
/**
* @fn void execute_comment_list(running_machine &machine, int ref, int params, const char *param[])
* @brief Print current list of comments in debugger
*
*
*/
static void execute_comment_list(running_machine &machine, int ref, int params, const char *param[])
{
if (debug_comment_load(machine,false) == false)
debug_console_printf(machine, "Error while parsing XML file\n");
}
/*------------------------------------------------- /*-------------------------------------------------
execute_comment - add a comment to a line execute_comment - add a comment to a line
-------------------------------------------------*/ -------------------------------------------------*/
// TODO: needs an autosave option in debugger for this, or a direct comment add and save.
static void execute_comment_save(running_machine &machine, int ref, int params, const char *param[]) static void execute_comment_save(running_machine &machine, int ref, int params, const char *param[])
{ {
if (debug_comment_save(machine)) if (debug_comment_save(machine))

View File

@ -348,13 +348,12 @@ bool debug_comment_save(running_machine &machine)
return comments_saved; return comments_saved;
} }
//------------------------------------------------- //-------------------------------------------------
// debug_comment_load - load all comments for // debug_comment_load - load all comments for
// the given machine // the given machine
//------------------------------------------------- //-------------------------------------------------
bool debug_comment_load(running_machine &machine) bool debug_comment_load(running_machine &machine,bool is_inline)
{ {
// open the file // open the file
emu_file file(machine.options().comment_directory(), OPEN_FLAG_READ); emu_file file(machine.options().comment_directory(), OPEN_FLAG_READ);
@ -391,12 +390,18 @@ bool debug_comment_load(running_machine &machine)
// iterate over devices // iterate over devices
for (xml_data_node *cpunode = xml_get_sibling(systemnode->child, "cpu"); cpunode; cpunode = xml_get_sibling(cpunode->next, "cpu")) for (xml_data_node *cpunode = xml_get_sibling(systemnode->child, "cpu"); cpunode; cpunode = xml_get_sibling(cpunode->next, "cpu"))
{ {
device_t *device = machine.device(xml_get_attribute_string(cpunode, "tag", "")); const char *cputag_name = xml_get_attribute_string(cpunode, "tag", "");
device_t *device = machine.device(cputag_name);
if (device != nullptr) if (device != nullptr)
if (!device->debug()->comment_import(*cpunode)) {
if(is_inline == false)
debug_console_printf(machine,"@%s\n",cputag_name);
if (!device->debug()->comment_import(*cpunode,is_inline))
throw emu_exception(); throw emu_exception();
} }
} }
}
catch (emu_exception &) catch (emu_exception &)
{ {
// clean up in case of error // clean up in case of error
@ -1904,7 +1909,7 @@ void device_debug::instruction_hook(offs_t curpc)
// load comments if we haven't yet // load comments if we haven't yet
if (!global->comments_loaded) if (!global->comments_loaded)
{ {
debug_comment_load(m_device.machine()); debug_comment_load(m_device.machine(),true);
global->comments_loaded = true; global->comments_loaded = true;
} }
@ -2692,7 +2697,7 @@ bool device_debug::comment_export(xml_data_node &curnode)
// given XML data node // given XML data node
//------------------------------------------------- //-------------------------------------------------
bool device_debug::comment_import(xml_data_node &cpunode) bool device_debug::comment_import(xml_data_node &cpunode,bool is_inline)
{ {
// iterate through nodes // iterate through nodes
for (xml_data_node *datanode = xml_get_sibling(cpunode.child, "comment"); datanode; datanode = xml_get_sibling(datanode->next, "comment")) for (xml_data_node *datanode = xml_get_sibling(cpunode.child, "comment"); datanode; datanode = xml_get_sibling(datanode->next, "comment"))
@ -2705,7 +2710,10 @@ bool device_debug::comment_import(xml_data_node &cpunode)
sscanf(xml_get_attribute_string(datanode, "crc", nullptr), "%08X", &crc); sscanf(xml_get_attribute_string(datanode, "crc", nullptr), "%08X", &crc);
// add the new comment // add the new comment
if(is_inline == true)
m_comment_set.insert(dasm_comment(address, crc, datanode->value, color)); m_comment_set.insert(dasm_comment(address, crc, datanode->value, color));
else
debug_console_printf(m_device.machine()," %08X - %s\n",address,datanode->value);
} }
return true; return true;
} }

View File

@ -250,7 +250,7 @@ public:
UINT32 comment_count() const { return m_comment_set.size(); } UINT32 comment_count() const { return m_comment_set.size(); }
UINT32 comment_change_count() const { return m_comment_change; } UINT32 comment_change_count() const { return m_comment_change; }
bool comment_export(xml_data_node &node); bool comment_export(xml_data_node &node);
bool comment_import(xml_data_node &node); bool comment_import(xml_data_node &node,bool is_inline);
UINT32 compute_opcode_crc32(offs_t pc) const; UINT32 compute_opcode_crc32(offs_t pc) const;
// history // history
@ -515,7 +515,7 @@ void debug_cpu_source_script(running_machine &machine, const char *file);
bool debug_comment_save(running_machine &machine); bool debug_comment_save(running_machine &machine);
// load all comments for a given machine // load all comments for a given machine
bool debug_comment_load(running_machine &machine); bool debug_comment_load(running_machine &machine,bool is_inline);

View File

@ -226,6 +226,7 @@ static const help_item static_help_list[] =
" comadd[//] <address>,<comment> -- adds a comment to the disassembled code at given address\n" " comadd[//] <address>,<comment> -- adds a comment to the disassembled code at given address\n"
" comdelete <address> -- removes a comment from the given address\n" " comdelete <address> -- removes a comment from the given address\n"
" comsave -- save the current comments to a file\n" " comsave -- save the current comments to a file\n"
" comlist -- print currently avaliable comments from file\n"
"\n" "\n"
}, },
{ {
@ -1222,6 +1223,18 @@ static const help_item static_help_list[] =
"memdump\n" "memdump\n"
" Dumps memory to memdump.log.\n" " Dumps memory to memdump.log.\n"
}, },
{
"comlist",
"\n"
" comlist\n"
"\n"
"Prints the currently available comment file in human readable form in debugger output window."
"\n"
"Examples:\n"
"\n"
"comlist\n"
" Shows currently available comments.\n"
},
{ {
"comadd", "comadd",
"\n" "\n"

View File

@ -2385,7 +2385,7 @@ void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_
// RAM region into the given address space // RAM region into the given address space
//------------------------------------------------- //-------------------------------------------------
void *address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr) void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr)
{ {
VPRINTF(("address_space::install_ram_generic(%s-%s mask=%s mirror=%s, %s, %p)\n", VPRINTF(("address_space::install_ram_generic(%s-%s mask=%s mirror=%s, %s, %p)\n",
core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
@ -2450,8 +2450,6 @@ void *address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_
bank.set_base(block.data()); bank.set_base(block.data());
} }
} }
return (void *)find_backing_memory(addrstart, addrend);
} }

View File

@ -452,7 +452,7 @@ private:
void populate_map_entry(const address_map_entry &entry, read_or_write readorwrite); void populate_map_entry(const address_map_entry &entry, read_or_write readorwrite);
void populate_map_entry_setoffset(const address_map_entry &entry); void populate_map_entry_setoffset(const address_map_entry &entry);
void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, bool quiet); void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, bool quiet);
void *install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr); void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr);
void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag); void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag);
void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank); void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank);
void adjust_addresses(offs_t &start, offs_t &end, offs_t &mask, offs_t &mirror); void adjust_addresses(offs_t &start, offs_t &end, offs_t &mask, offs_t &mirror);

View File

@ -29,6 +29,7 @@ public:
virtual void set_startup_text(const char *text, bool force) { } virtual void set_startup_text(const char *text, bool force) { }
// is a menuing system active? we want to disable certain keyboard/mouse inputs under such context
virtual bool is_menu_active() { return false; } virtual bool is_menu_active() { return false; }
bool use_natural_keyboard() const { return m_use_natural_keyboard; } bool use_natural_keyboard() const { return m_use_natural_keyboard; }

View File

@ -1270,7 +1270,7 @@ void menu::do_handle()
// and calls the menu handler // and calls the menu handler
//------------------------------------------------- //-------------------------------------------------
UINT32 menu::ui_handler(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 menu::ui_handler(render_container *container, mame_ui_manager &mui)
{ {
// if we have no menus stacked up, start with the main menu // if we have no menus stacked up, start with the main menu
if (!menu_stack) if (!menu_stack)

View File

@ -120,7 +120,7 @@ public:
static void draw_arrow(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation); static void draw_arrow(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation);
// master handler // master handler
static UINT32 ui_handler(mame_ui_manager &mui, render_container *container, UINT32 state); static UINT32 ui_handler(render_container *container, mame_ui_manager &mui);
// Used by sliders // Used by sliders
void validate_selection(int scandir); void validate_selection(int scandir);

View File

@ -264,7 +264,7 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo
standard menu handler standard menu handler
-------------------------------------------------*/ -------------------------------------------------*/
UINT32 menu_sliders::ui_handler(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui, bool state)
{ {
UINT32 result; UINT32 result;
@ -273,7 +273,7 @@ UINT32 menu_sliders::ui_handler(mame_ui_manager &mui, render_container *containe
menu::stack_push<menu_sliders>(mui, container, true); menu::stack_push<menu_sliders>(mui, container, true);
/* handle standard menus */ /* handle standard menus */
result = menu::ui_handler(mui, container, state); result = menu::ui_handler(container, mui);
/* if we are cancelled, pop the sliders menu */ /* if we are cancelled, pop the sliders menu */
if (result == UI_HANDLER_CANCEL) if (result == UI_HANDLER_CANCEL)

View File

@ -27,7 +27,7 @@ public:
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
static UINT32 ui_handler(mame_ui_manager &mui, render_container *container, UINT32 state); static UINT32 ui_handler(render_container *container, mame_ui_manager &mui, bool state);
private: private:
enum { enum {

View File

@ -242,7 +242,7 @@ void mame_ui_manager::init()
decode_ui_color(0, &machine()); decode_ui_color(0, &machine());
// more initialization // more initialization
set_handler(handler_messagebox, 0); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_messagebox);
m_non_char_keys_down = std::make_unique<UINT8[]>((ARRAY_LENGTH(non_char_keys) + 7) / 8); m_non_char_keys_down = std::make_unique<UINT8[]>((ARRAY_LENGTH(non_char_keys) + 7) / 8);
m_mouse_show = machine().system().flags & MACHINE_CLICKABLE_ARTWORK ? true : false; m_mouse_show = machine().system().flags & MACHINE_CLICKABLE_ARTWORK ? true : false;
@ -302,11 +302,10 @@ void mame_ui_manager::initialize(running_machine &machine)
// pair for the current UI handler // pair for the current UI handler
//------------------------------------------------- //-------------------------------------------------
UINT32 mame_ui_manager::set_handler(ui_callback callback, UINT32 param) void mame_ui_manager::set_handler(ui_callback_type callback_type, const std::function<UINT32 (render_container *)> callback)
{ {
m_handler_callback = callback; m_handler_callback = callback;
m_handler_param = param; m_handler_callback_type = callback_type;
return param;
} }
@ -334,7 +333,7 @@ void mame_ui_manager::display_startup_screens(bool first_time)
#endif #endif
// loop over states // loop over states
set_handler(handler_ingame, 0); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_ingame);
for (state = 0; state < maxstate && !machine().scheduled_event_pending() && !ui::menu::stack_has_special_main_menu(); state++) for (state = 0; state < maxstate && !machine().scheduled_event_pending() && !ui::menu::stack_has_special_main_menu(); state++)
{ {
// default to standard colors // default to standard colors
@ -346,7 +345,7 @@ void mame_ui_manager::display_startup_screens(bool first_time)
case 0: case 0:
if (show_warnings && warnings_string(messagebox_text).length() > 0) if (show_warnings && warnings_string(messagebox_text).length() > 0)
{ {
set_handler(handler_messagebox_anykey, 0); set_handler(UI_CALLBACK_TYPE_MODAL, &mame_ui_manager::handler_messagebox_anykey);
if (machine().system().flags & (MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_KEYBOARD | MACHINE_NO_SOUND)) if (machine().system().flags & (MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_KEYBOARD | MACHINE_NO_SOUND))
messagebox_backcolor = UI_YELLOW_COLOR; messagebox_backcolor = UI_YELLOW_COLOR;
if (machine().system().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL)) if (machine().system().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL))
@ -356,7 +355,7 @@ void mame_ui_manager::display_startup_screens(bool first_time)
case 1: case 1:
if (show_gameinfo && game_info_astring(messagebox_text).length() > 0) if (show_gameinfo && game_info_astring(messagebox_text).length() > 0)
set_handler(handler_messagebox_anykey, 0); set_handler(UI_CALLBACK_TYPE_MODAL, &mame_ui_manager::handler_messagebox_anykey);
break; break;
case 2: case 2:
@ -374,19 +373,19 @@ void mame_ui_manager::display_startup_screens(bool first_time)
while (machine().input().poll_switches() != INPUT_CODE_INVALID) { } while (machine().input().poll_switches() != INPUT_CODE_INVALID) { }
// loop while we have a handler // loop while we have a handler
while (m_handler_callback != handler_ingame && !machine().scheduled_event_pending() && !ui::menu::stack_has_special_main_menu()) while (m_handler_callback_type == UI_CALLBACK_TYPE_MODAL && !machine().scheduled_event_pending() && !ui::menu::stack_has_special_main_menu())
{ {
machine().video().frame_update(); machine().video().frame_update();
} }
// clear the handler and force an update // clear the handler and force an update
set_handler(handler_ingame, 0); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_ingame);
machine().video().frame_update(); machine().video().frame_update();
} }
// if we're the empty driver, force the menus on // if we're the empty driver, force the menus on
if (ui::menu::stack_has_special_main_menu()) if (ui::menu::stack_has_special_main_menu())
set_handler(ui::menu::ui_handler, 0); show_menu();
} }
@ -443,8 +442,7 @@ void mame_ui_manager::update_and_render(render_container *container)
} }
// call the current UI handler // call the current UI handler
assert(m_handler_callback != nullptr); m_handler_param = m_handler_callback(container);
m_handler_param = (*m_handler_callback)(*this, container, m_handler_param);
// display any popup messages // display any popup messages
if (osd_ticks() < m_popup_text_end) if (osd_ticks() < m_popup_text_end)
@ -472,7 +470,7 @@ void mame_ui_manager::update_and_render(render_container *container)
// cancel takes us back to the ingame handler // cancel takes us back to the ingame handler
if (m_handler_param == UI_HANDLER_CANCEL) if (m_handler_param == UI_HANDLER_CANCEL)
set_handler(handler_ingame, 0); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_ingame);
} }
@ -946,7 +944,7 @@ bool mame_ui_manager::show_profiler() const
void mame_ui_manager::show_menu() void mame_ui_manager::show_menu()
{ {
set_handler(ui::menu::ui_handler, 0); set_handler<mame_ui_manager&>(UI_CALLBACK_TYPE_MENU, ui::menu::ui_handler, *this);
} }
@ -967,7 +965,7 @@ void mame_ui_manager::show_mouse(bool status)
bool mame_ui_manager::is_menu_active(void) bool mame_ui_manager::is_menu_active(void)
{ {
return (m_handler_callback == ui::menu::ui_handler); return m_handler_callback_type == UI_CALLBACK_TYPE_MENU;
} }
@ -1234,9 +1232,9 @@ std::string &mame_ui_manager::game_info_astring(std::string &str)
// messagebox_text string but handles no input // messagebox_text string but handles no input
//------------------------------------------------- //-------------------------------------------------
UINT32 mame_ui_manager::handler_messagebox(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 mame_ui_manager::handler_messagebox(render_container *container)
{ {
mui.draw_text_box(container, messagebox_text.c_str(), JUSTIFY_LEFT, 0.5f, 0.5f, messagebox_backcolor); draw_text_box(container, messagebox_text.c_str(), JUSTIFY_LEFT, 0.5f, 0.5f, messagebox_backcolor);
return 0; return 0;
} }
@ -1247,20 +1245,22 @@ UINT32 mame_ui_manager::handler_messagebox(mame_ui_manager &mui, render_containe
// any keypress // any keypress
//------------------------------------------------- //-------------------------------------------------
UINT32 mame_ui_manager::handler_messagebox_anykey(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 mame_ui_manager::handler_messagebox_anykey(render_container *container)
{ {
UINT32 state = 0;
// draw a standard message window // draw a standard message window
mui.draw_text_box(container, messagebox_text.c_str(), JUSTIFY_LEFT, 0.5f, 0.5f, messagebox_backcolor); draw_text_box(container, messagebox_text.c_str(), JUSTIFY_LEFT, 0.5f, 0.5f, messagebox_backcolor);
// if the user cancels, exit out completely // if the user cancels, exit out completely
if (mui.machine().ui_input().pressed(IPT_UI_CANCEL)) if (machine().ui_input().pressed(IPT_UI_CANCEL))
{ {
mui.machine().schedule_exit(); machine().schedule_exit();
state = UI_HANDLER_CANCEL; state = UI_HANDLER_CANCEL;
} }
// if any key is pressed, just exit // if any key is pressed, just exit
else if (mui.machine().input().poll_switches() != INPUT_CODE_INVALID) else if (machine().input().poll_switches() != INPUT_CODE_INVALID)
state = UI_HANDLER_CANCEL; state = UI_HANDLER_CANCEL;
return state; return state;
@ -1461,62 +1461,62 @@ void mame_ui_manager::image_display(const device_type &type, device_image_interf
// of the standard keypresses // of the standard keypresses
//------------------------------------------------- //-------------------------------------------------
UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 mame_ui_manager::handler_ingame(render_container *container)
{ {
bool is_paused = mui.machine().paused(); bool is_paused = machine().paused();
// first draw the FPS counter // first draw the FPS counter
if (mui.show_fps_counter()) if (show_fps_counter())
{ {
mui.draw_text_full(container, mui.machine().video().speed_text().c_str(), 0.0f, 0.0f, 1.0f, draw_text_full(container, machine().video().speed_text().c_str(), 0.0f, 0.0f, 1.0f,
JUSTIFY_RIGHT, WRAP_WORD, DRAW_OPAQUE, rgb_t::white, rgb_t::black, nullptr, nullptr); JUSTIFY_RIGHT, WRAP_WORD, DRAW_OPAQUE, rgb_t::white, rgb_t::black, nullptr, nullptr);
} }
// Show the duration of current part (intro or gameplay or extra) // Show the duration of current part (intro or gameplay or extra)
if (mui.show_timecode_counter()) { if (show_timecode_counter()) {
std::string tempstring; std::string tempstring;
mui.draw_text_full(container, mui.machine().video().timecode_text(tempstring).c_str(), 0.0f, 0.0f, 1.0f, draw_text_full(container, machine().video().timecode_text(tempstring).c_str(), 0.0f, 0.0f, 1.0f,
JUSTIFY_RIGHT, WRAP_WORD, DRAW_OPAQUE, rgb_t(0xf0,0xf0,0x10,0x10), rgb_t::black, nullptr, nullptr); JUSTIFY_RIGHT, WRAP_WORD, DRAW_OPAQUE, rgb_t(0xf0,0xf0,0x10,0x10), rgb_t::black, nullptr, nullptr);
} }
// Show the total time elapsed for the video preview (all parts intro, gameplay, extras) // Show the total time elapsed for the video preview (all parts intro, gameplay, extras)
if (mui.show_timecode_total()) { if (show_timecode_total()) {
std::string tempstring; std::string tempstring;
mui.draw_text_full(container, mui.machine().video().timecode_total_text(tempstring).c_str(), 0.0f, 0.0f, 1.0f, draw_text_full(container, machine().video().timecode_total_text(tempstring).c_str(), 0.0f, 0.0f, 1.0f,
JUSTIFY_LEFT, WRAP_WORD, DRAW_OPAQUE, rgb_t(0xf0,0x10,0xf0,0x10), rgb_t::black, nullptr, nullptr); JUSTIFY_LEFT, WRAP_WORD, DRAW_OPAQUE, rgb_t(0xf0,0x10,0xf0,0x10), rgb_t::black, nullptr, nullptr);
} }
// draw the profiler if visible // draw the profiler if visible
if (mui.show_profiler()) if (show_profiler())
{ {
const char *text = g_profiler.text(mui.machine()); const char *text = g_profiler.text(machine());
mui.draw_text_full(container, text, 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_WORD, DRAW_OPAQUE, rgb_t::white, rgb_t::black, nullptr, nullptr); draw_text_full(container, text, 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_WORD, DRAW_OPAQUE, rgb_t::white, rgb_t::black, nullptr, nullptr);
} }
// if we're single-stepping, pause now // if we're single-stepping, pause now
if (mui.single_step()) if (single_step())
{ {
mui.machine().pause(); machine().pause();
mui.set_single_step(false); set_single_step(false);
} }
// determine if we should disable the rest of the UI // determine if we should disable the rest of the UI
bool has_keyboard = mui.machine().ioport().has_keyboard(); bool has_keyboard = machine().ioport().has_keyboard();
bool ui_disabled = (has_keyboard && !mui.machine().ui_active()); bool ui_disabled = (has_keyboard && !machine().ui_active());
// is ScrLk UI toggling applicable here? // is ScrLk UI toggling applicable here?
if (has_keyboard) if (has_keyboard)
{ {
// are we toggling the UI with ScrLk? // are we toggling the UI with ScrLk?
if (mui.machine().ui_input().pressed(IPT_UI_TOGGLE_UI)) if (machine().ui_input().pressed(IPT_UI_TOGGLE_UI))
{ {
// toggle the UI // toggle the UI
mui.machine().set_ui_active(!mui.machine().ui_active()); machine().set_ui_active(!machine().ui_active());
// display a popup indicating the new status // display a popup indicating the new status
if (mui.machine().ui_active()) if (machine().ui_active())
{ {
mui.popup_time(2, "%s\n%s\n%s\n%s\n%s\n%s\n", popup_time(2, "%s\n%s\n%s\n%s\n%s\n%s\n",
_("Keyboard Emulation Status"), _("Keyboard Emulation Status"),
"-------------------------", "-------------------------",
_("Mode: PARTIAL Emulation"), _("Mode: PARTIAL Emulation"),
@ -1526,7 +1526,7 @@ UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *c
} }
else else
{ {
mui.popup_time(2, "%s\n%s\n%s\n%s\n%s\n%s\n", popup_time(2, "%s\n%s\n%s\n%s\n%s\n%s\n",
_("Keyboard Emulation Status"), _("Keyboard Emulation Status"),
"-------------------------", "-------------------------",
_("Mode: FULL Emulation"), _("Mode: FULL Emulation"),
@ -1538,64 +1538,71 @@ UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *c
} }
// is the natural keyboard enabled? // is the natural keyboard enabled?
if (mui.use_natural_keyboard() && (mui.machine().phase() == MACHINE_PHASE_RUNNING)) if (use_natural_keyboard() && (machine().phase() == MACHINE_PHASE_RUNNING))
mui.process_natural_keyboard(); process_natural_keyboard();
if (!ui_disabled) if (!ui_disabled)
{ {
// paste command // paste command
if (mui.machine().ui_input().pressed(IPT_UI_PASTE)) if (machine().ui_input().pressed(IPT_UI_PASTE))
mui.paste(); paste();
} }
mui.image_handler_ingame(); image_handler_ingame();
// handle a save input timecode request // handle a save input timecode request
if (mui.machine().ui_input().pressed(IPT_UI_TIMECODE)) if (machine().ui_input().pressed(IPT_UI_TIMECODE))
mui.machine().video().save_input_timecode(); machine().video().save_input_timecode();
if (ui_disabled) return ui_disabled; if (ui_disabled) return ui_disabled;
if (mui.machine().ui_input().pressed(IPT_UI_CANCEL)) if (machine().ui_input().pressed(IPT_UI_CANCEL))
{ {
mui.request_quit(); request_quit();
return 0; return 0;
} }
// turn on menus if requested // turn on menus if requested
if (mui.machine().ui_input().pressed(IPT_UI_CONFIGURE)) if (machine().ui_input().pressed(IPT_UI_CONFIGURE))
return mui.set_handler(ui::menu::ui_handler, 0); {
show_menu();
return 0;
}
// if the on-screen display isn't up and the user has toggled it, turn it on // if the on-screen display isn't up and the user has toggled it, turn it on
if ((mui.machine().debug_flags & DEBUG_FLAG_ENABLED) == 0 && mui.machine().ui_input().pressed(IPT_UI_ON_SCREEN_DISPLAY)) if ((machine().debug_flags & DEBUG_FLAG_ENABLED) == 0 && machine().ui_input().pressed(IPT_UI_ON_SCREEN_DISPLAY))
return mui.set_handler(ui::menu_sliders::ui_handler, 1); {
set_handler<mame_ui_manager&, bool>(UI_CALLBACK_TYPE_GENERAL, ui::menu_sliders::ui_handler, *this, true);
return 1;
}
// handle a reset request // handle a reset request
if (mui.machine().ui_input().pressed(IPT_UI_RESET_MACHINE)) if (machine().ui_input().pressed(IPT_UI_RESET_MACHINE))
mui.machine().schedule_hard_reset(); machine().schedule_hard_reset();
if (mui.machine().ui_input().pressed(IPT_UI_SOFT_RESET)) if (machine().ui_input().pressed(IPT_UI_SOFT_RESET))
mui.machine().schedule_soft_reset(); machine().schedule_soft_reset();
// handle a request to display graphics/palette // handle a request to display graphics/palette
if (mui.machine().ui_input().pressed(IPT_UI_SHOW_GFX)) if (machine().ui_input().pressed(IPT_UI_SHOW_GFX))
{ {
if (!is_paused) if (!is_paused)
mui.machine().pause(); machine().pause();
return mui.set_handler(ui_gfx_ui_handler, is_paused); set_handler<mame_ui_manager&, bool>(UI_CALLBACK_TYPE_GENERAL, ui_gfx_ui_handler, *this, is_paused);
return is_paused ? 1 : 0;
} }
// handle a tape control key // handle a tape control key
if (mui.machine().ui_input().pressed(IPT_UI_TAPE_START)) if (machine().ui_input().pressed(IPT_UI_TAPE_START))
{ {
for (cassette_image_device &cass : cassette_device_iterator(mui.machine().root_device())) for (cassette_image_device &cass : cassette_device_iterator(machine().root_device()))
{ {
cass.change_state(CASSETTE_PLAY, CASSETTE_MASK_UISTATE); cass.change_state(CASSETTE_PLAY, CASSETTE_MASK_UISTATE);
return 0; return 0;
} }
} }
if (mui.machine().ui_input().pressed(IPT_UI_TAPE_STOP)) if (machine().ui_input().pressed(IPT_UI_TAPE_STOP))
{ {
for (cassette_image_device &cass : cassette_device_iterator(mui.machine().root_device())) for (cassette_image_device &cass : cassette_device_iterator(machine().root_device()))
{ {
cass.change_state(CASSETTE_STOPPED, CASSETTE_MASK_UISTATE); cass.change_state(CASSETTE_STOPPED, CASSETTE_MASK_UISTATE);
return 0; return 0;
@ -1603,87 +1610,89 @@ UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *c
} }
// handle a save state request // handle a save state request
if (mui.machine().ui_input().pressed(IPT_UI_SAVE_STATE)) if (machine().ui_input().pressed(IPT_UI_SAVE_STATE))
{ {
mui.machine().pause(); machine().pause();
mui.m_load_save_hold = true; m_load_save_hold = true;
return mui.set_handler(handler_load_save, LOADSAVE_SAVE); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_load_save, (UINT32)LOADSAVE_SAVE);
return LOADSAVE_SAVE;
} }
// handle a load state request // handle a load state request
if (mui.machine().ui_input().pressed(IPT_UI_LOAD_STATE)) if (machine().ui_input().pressed(IPT_UI_LOAD_STATE))
{ {
mui.machine().pause(); machine().pause();
mui.m_load_save_hold = true; m_load_save_hold = true;
return mui.set_handler(handler_load_save, LOADSAVE_LOAD); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_load_save, (UINT32)LOADSAVE_LOAD);
return LOADSAVE_LOAD;
} }
// handle a save snapshot request // handle a save snapshot request
if (mui.machine().ui_input().pressed(IPT_UI_SNAPSHOT)) if (machine().ui_input().pressed(IPT_UI_SNAPSHOT))
mui.machine().video().save_active_screen_snapshots(); machine().video().save_active_screen_snapshots();
// toggle pause // toggle pause
if (mui.machine().ui_input().pressed(IPT_UI_PAUSE)) if (machine().ui_input().pressed(IPT_UI_PAUSE))
mui.machine().toggle_pause(); machine().toggle_pause();
// pause single step // pause single step
if (mui.machine().ui_input().pressed(IPT_UI_PAUSE_SINGLE)) if (machine().ui_input().pressed(IPT_UI_PAUSE_SINGLE))
{ {
mui.set_single_step(true); set_single_step(true);
mui.machine().resume(); machine().resume();
} }
// handle a toggle cheats request // handle a toggle cheats request
if (mui.machine().ui_input().pressed(IPT_UI_TOGGLE_CHEAT)) if (machine().ui_input().pressed(IPT_UI_TOGGLE_CHEAT))
mame_machine_manager::instance()->cheat().set_enable(!mame_machine_manager::instance()->cheat().enabled()); mame_machine_manager::instance()->cheat().set_enable(!mame_machine_manager::instance()->cheat().enabled());
// toggle movie recording // toggle movie recording
if (mui.machine().ui_input().pressed(IPT_UI_RECORD_MOVIE)) if (machine().ui_input().pressed(IPT_UI_RECORD_MOVIE))
mui.machine().video().toggle_record_movie(); machine().video().toggle_record_movie();
// toggle profiler display // toggle profiler display
if (mui.machine().ui_input().pressed(IPT_UI_SHOW_PROFILER)) if (machine().ui_input().pressed(IPT_UI_SHOW_PROFILER))
mui.set_show_profiler(!mui.show_profiler()); set_show_profiler(!show_profiler());
// toggle FPS display // toggle FPS display
if (mui.machine().ui_input().pressed(IPT_UI_SHOW_FPS)) if (machine().ui_input().pressed(IPT_UI_SHOW_FPS))
mui.set_show_fps(!mui.show_fps()); set_show_fps(!show_fps());
// increment frameskip? // increment frameskip?
if (mui.machine().ui_input().pressed(IPT_UI_FRAMESKIP_INC)) if (machine().ui_input().pressed(IPT_UI_FRAMESKIP_INC))
mui.increase_frameskip(); increase_frameskip();
// decrement frameskip? // decrement frameskip?
if (mui.machine().ui_input().pressed(IPT_UI_FRAMESKIP_DEC)) if (machine().ui_input().pressed(IPT_UI_FRAMESKIP_DEC))
mui.decrease_frameskip(); decrease_frameskip();
// toggle throttle? // toggle throttle?
if (mui.machine().ui_input().pressed(IPT_UI_THROTTLE)) if (machine().ui_input().pressed(IPT_UI_THROTTLE))
mui.machine().video().toggle_throttle(); machine().video().toggle_throttle();
// toggle autofire // toggle autofire
if (mui.machine().ui_input().pressed(IPT_UI_TOGGLE_AUTOFIRE)) if (machine().ui_input().pressed(IPT_UI_TOGGLE_AUTOFIRE))
{ {
if (!mui.machine().options().cheat()) if (!machine().options().cheat())
{ {
mui.machine().popmessage(_("Autofire can't be enabled")); machine().popmessage(_("Autofire can't be enabled"));
} }
else else
{ {
bool autofire_toggle = mui.machine().ioport().get_autofire_toggle(); bool autofire_toggle = machine().ioport().get_autofire_toggle();
mui.machine().ioport().set_autofire_toggle(!autofire_toggle); machine().ioport().set_autofire_toggle(!autofire_toggle);
mui.machine().popmessage("Autofire %s", autofire_toggle ? _("Enabled") : _("Disabled")); machine().popmessage("Autofire %s", autofire_toggle ? _("Enabled") : _("Disabled"));
} }
} }
// check for fast forward // check for fast forward
if (mui.machine().ioport().type_pressed(IPT_UI_FAST_FORWARD)) if (machine().ioport().type_pressed(IPT_UI_FAST_FORWARD))
{ {
mui.machine().video().set_fastforward(true); machine().video().set_fastforward(true);
mui.show_fps_temp(0.5); show_fps_temp(0.5);
} }
else else
mui.machine().video().set_fastforward(false); machine().video().set_fastforward(false);
return 0; return 0;
} }
@ -1694,7 +1703,7 @@ UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *c
// specifying a game to save or load // specifying a game to save or load
//------------------------------------------------- //-------------------------------------------------
UINT32 mame_ui_manager::handler_load_save(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 mame_ui_manager::handler_load_save(render_container *container, UINT32 state)
{ {
char filename[20]; char filename[20];
char file = 0; char file = 0;
@ -1705,52 +1714,52 @@ UINT32 mame_ui_manager::handler_load_save(mame_ui_manager &mui, render_container
// okay, we're waiting for a key to select a slot; display a message // okay, we're waiting for a key to select a slot; display a message
if (state == LOADSAVE_SAVE) if (state == LOADSAVE_SAVE)
mui.draw_message_window(container, _("Select position to save to")); draw_message_window(container, _("Select position to save to"));
else else
mui.draw_message_window(container, _("Select position to load from")); draw_message_window(container, _("Select position to load from"));
// if load/save state sequence is still being pressed, do not read the filename yet // if load/save state sequence is still being pressed, do not read the filename yet
if (mui.m_load_save_hold) { if (m_load_save_hold) {
bool seq_in_progress = false; bool seq_in_progress = false;
const input_seq &load_save_seq = state == LOADSAVE_SAVE ? const input_seq &load_save_seq = state == LOADSAVE_SAVE ?
mui.machine().ioport().type_seq(IPT_UI_SAVE_STATE) : machine().ioport().type_seq(IPT_UI_SAVE_STATE) :
mui.machine().ioport().type_seq(IPT_UI_LOAD_STATE); machine().ioport().type_seq(IPT_UI_LOAD_STATE);
for (int i = 0; i < load_save_seq.length(); i++) for (int i = 0; i < load_save_seq.length(); i++)
if (mui.machine().input().code_pressed_once(load_save_seq[i])) if (machine().input().code_pressed_once(load_save_seq[i]))
seq_in_progress = true; seq_in_progress = true;
if (seq_in_progress) if (seq_in_progress)
return state; return state;
else else
mui.m_load_save_hold = false; m_load_save_hold = false;
} }
// check for cancel key // check for cancel key
if (mui.machine().ui_input().pressed(IPT_UI_CANCEL)) if (machine().ui_input().pressed(IPT_UI_CANCEL))
{ {
// display a popup indicating things were cancelled // display a popup indicating things were cancelled
if (state == LOADSAVE_SAVE) if (state == LOADSAVE_SAVE)
mui.machine().popmessage(_("Save cancelled")); machine().popmessage(_("Save cancelled"));
else else
mui.machine().popmessage(_("Load cancelled")); machine().popmessage(_("Load cancelled"));
// reset the state // reset the state
mui.machine().resume(); machine().resume();
return UI_HANDLER_CANCEL; return UI_HANDLER_CANCEL;
} }
// check for A-Z or 0-9 // check for A-Z or 0-9
for (input_item_id id = ITEM_ID_A; id <= ITEM_ID_Z; ++id) for (input_item_id id = ITEM_ID_A; id <= ITEM_ID_Z; ++id)
if (mui.machine().input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) if (machine().input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id)))
file = id - ITEM_ID_A + 'a'; file = id - ITEM_ID_A + 'a';
if (file == 0) if (file == 0)
for (input_item_id id = ITEM_ID_0; id <= ITEM_ID_9; ++id) for (input_item_id id = ITEM_ID_0; id <= ITEM_ID_9; ++id)
if (mui.machine().input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) if (machine().input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id)))
file = id - ITEM_ID_0 + '0'; file = id - ITEM_ID_0 + '0';
if (file == 0) if (file == 0)
for (input_item_id id = ITEM_ID_0_PAD; id <= ITEM_ID_9_PAD; ++id) for (input_item_id id = ITEM_ID_0_PAD; id <= ITEM_ID_9_PAD; ++id)
if (mui.machine().input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) if (machine().input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id)))
file = id - ITEM_ID_0_PAD + '0'; file = id - ITEM_ID_0_PAD + '0';
if (file == 0) if (file == 0)
{ {
@ -1758,7 +1767,7 @@ UINT32 mame_ui_manager::handler_load_save(mame_ui_manager &mui, render_container
for (int joy_index = 0; joy_index <= MAX_SAVED_STATE_JOYSTICK; joy_index++) for (int joy_index = 0; joy_index <= MAX_SAVED_STATE_JOYSTICK; joy_index++)
for (input_item_id id = ITEM_ID_BUTTON1; id <= ITEM_ID_BUTTON32; ++id) for (input_item_id id = ITEM_ID_BUTTON1; id <= ITEM_ID_BUTTON32; ++id)
if (mui.machine().input().code_pressed_once(input_code(DEVICE_CLASS_JOYSTICK, joy_index, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) if (machine().input().code_pressed_once(input_code(DEVICE_CLASS_JOYSTICK, joy_index, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id)))
{ {
snprintf(filename, sizeof(filename), "joy%i-%i", joy_index, id - ITEM_ID_BUTTON1 + 1); snprintf(filename, sizeof(filename), "joy%i-%i", joy_index, id - ITEM_ID_BUTTON1 + 1);
found = true; found = true;
@ -1776,20 +1785,20 @@ UINT32 mame_ui_manager::handler_load_save(mame_ui_manager &mui, render_container
// display a popup indicating that the save will proceed // display a popup indicating that the save will proceed
if (state == LOADSAVE_SAVE) if (state == LOADSAVE_SAVE)
{ {
mui.machine().popmessage(_("Save to position %s"), filename); machine().popmessage(_("Save to position %s"), filename);
mui.machine().schedule_save(filename); machine().schedule_save(filename);
} }
else else
{ {
mui.machine().popmessage(_("Load from position %s"), filename); machine().popmessage(_("Load from position %s"), filename);
mui.machine().schedule_load(filename); machine().schedule_load(filename);
} }
// avoid handling the name of the save state slot as a seperate input // avoid handling the name of the save state slot as a seperate input
mui.machine().ui_input().mark_all_as_pressed(); machine().ui_input().mark_all_as_pressed();
// remove the pause and reset the state // remove the pause and reset the state
mui.machine().resume(); machine().resume();
return UI_HANDLER_CANCEL; return UI_HANDLER_CANCEL;
} }
@ -1803,7 +1812,7 @@ void mame_ui_manager::request_quit()
if (!machine().options().confirm_quit()) if (!machine().options().confirm_quit())
machine().schedule_exit(); machine().schedule_exit();
else else
set_handler(handler_confirm_quit, 0); set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_confirm_quit);
} }
@ -1812,13 +1821,15 @@ void mame_ui_manager::request_quit()
// confirming quit emulation // confirming quit emulation
//------------------------------------------------- //-------------------------------------------------
UINT32 mame_ui_manager::handler_confirm_quit(mame_ui_manager &mui, render_container *container, UINT32 state) UINT32 mame_ui_manager::handler_confirm_quit(render_container *container)
{ {
UINT32 state = 0;
// get the text for 'UI Select' // get the text for 'UI Select'
std::string ui_select_text = mui.machine().input().seq_name(mui.machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD)); std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD));
// get the text for 'UI Cancel' // get the text for 'UI Cancel'
std::string ui_cancel_text = mui.machine().input().seq_name(mui.machine().ioport().type_seq(IPT_UI_CANCEL, 0, SEQ_TYPE_STANDARD)); std::string ui_cancel_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_CANCEL, 0, SEQ_TYPE_STANDARD));
// assemble the quit message // assemble the quit message
std::string quit_message = string_format(_("Are you sure you want to quit?\n\n" std::string quit_message = string_format(_("Are you sure you want to quit?\n\n"
@ -1827,17 +1838,17 @@ UINT32 mame_ui_manager::handler_confirm_quit(mame_ui_manager &mui, render_contai
ui_select_text, ui_select_text,
ui_cancel_text); ui_cancel_text);
mui.draw_text_box(container, quit_message.c_str(), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR); draw_text_box(container, quit_message.c_str(), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
mui.machine().pause(); machine().pause();
// if the user press ENTER, quit the game // if the user press ENTER, quit the game
if (mui.machine().ui_input().pressed(IPT_UI_SELECT)) if (machine().ui_input().pressed(IPT_UI_SELECT))
mui.machine().schedule_exit(); machine().schedule_exit();
// if the user press ESC, just continue // if the user press ESC, just continue
else if (mui.machine().ui_input().pressed(IPT_UI_CANCEL)) else if (machine().ui_input().pressed(IPT_UI_CANCEL))
{ {
mui.machine().resume(); machine().resume();
state = UI_HANDLER_CANCEL; state = UI_HANDLER_CANCEL;
} }

View File

@ -154,6 +154,13 @@ enum
class mame_ui_manager; class mame_ui_manager;
typedef UINT32 (*ui_callback)(mame_ui_manager &, render_container *, UINT32); typedef UINT32 (*ui_callback)(mame_ui_manager &, render_container *, UINT32);
enum ui_callback_type
{
UI_CALLBACK_TYPE_GENERAL,
UI_CALLBACK_TYPE_MODAL,
UI_CALLBACK_TYPE_MENU
};
// ======================> mame_ui_manager // ======================> mame_ui_manager
class mame_ui_manager : public ui_manager, public slider_changed_notifier class mame_ui_manager : public ui_manager, public slider_changed_notifier
@ -175,7 +182,35 @@ public:
// methods // methods
void initialize(running_machine &machine); void initialize(running_machine &machine);
std::vector<ui::menu_item> slider_init(running_machine &machine); std::vector<ui::menu_item> slider_init(running_machine &machine);
UINT32 set_handler(ui_callback callback, UINT32 param);
void set_handler(ui_callback_type callback_type, const std::function<UINT32 (render_container *)> callback);
template<typename T, typename... Params>
void set_handler(ui_callback_type callback_type, T &obj, UINT32(T::*callback)(render_container *, Params...), Params ...args)
{
auto lambda = [=, &obj](render_container *container)
{
return ((obj).*(callback))(container, args...);
};
set_handler(callback_type, lambda);
}
template<typename... Params>
void set_handler(ui_callback_type callback_type, UINT32(mame_ui_manager::*callback)(render_container *, Params...), Params ...args)
{
set_handler(callback_type, *this, callback, args...);
}
template<typename... Params>
void set_handler(ui_callback_type callback_type, UINT32(*callback)(render_container *, Params...), Params ...args)
{
auto lambda = [&, callback](render_container *container)
{
return callback(container, args...);
};
set_handler(callback_type, lambda);
}
void display_startup_screens(bool first_time); void display_startup_screens(bool first_time);
virtual void set_startup_text(const char *text, bool force) override; virtual void set_startup_text(const char *text, bool force) override;
void update_and_render(render_container *container); void update_and_render(render_container *container);
@ -236,7 +271,8 @@ public:
private: private:
// instance variables // instance variables
render_font * m_font; render_font * m_font;
ui_callback m_handler_callback; std::function<UINT32 (render_container *)> m_handler_callback;
ui_callback_type m_handler_callback_type;
UINT32 m_handler_param; UINT32 m_handler_param;
bool m_single_step; bool m_single_step;
bool m_showfps; bool m_showfps;
@ -261,11 +297,11 @@ private:
std::string &warnings_string(std::string &buffer); std::string &warnings_string(std::string &buffer);
// UI handlers // UI handlers
static UINT32 handler_messagebox(mame_ui_manager &mui, render_container *container, UINT32 state); UINT32 handler_messagebox(render_container *container);
static UINT32 handler_messagebox_anykey(mame_ui_manager &mui, render_container *container, UINT32 state); UINT32 handler_messagebox_anykey(render_container *container);
static UINT32 handler_ingame(mame_ui_manager &mui, render_container *container, UINT32 state); UINT32 handler_ingame(render_container *container);
static UINT32 handler_load_save(mame_ui_manager &mui, render_container *container, UINT32 state); UINT32 handler_load_save(render_container *container, UINT32 state);
static UINT32 handler_confirm_quit(mame_ui_manager &mui, render_container *container, UINT32 state); UINT32 handler_confirm_quit(render_container *container);
// private methods // private methods
void exit(); void exit();

View File

@ -240,7 +240,7 @@ bool ui_gfx_is_relevant(running_machine &machine)
// ui_gfx_ui_handler - primary UI handler // ui_gfx_ui_handler - primary UI handler
//------------------------------------------------- //-------------------------------------------------
UINT32 ui_gfx_ui_handler(mame_ui_manager &mui, render_container *container, UINT32 uistate) UINT32 ui_gfx_ui_handler(render_container *container, mame_ui_manager &mui, bool uistate)
{ {
ui_gfx_state &state = ui_gfx; ui_gfx_state &state = ui_gfx;

View File

@ -26,7 +26,7 @@ void ui_gfx_init(running_machine &machine);
bool ui_gfx_is_relevant(running_machine &machine); bool ui_gfx_is_relevant(running_machine &machine);
// master handler // master handler
UINT32 ui_gfx_ui_handler(mame_ui_manager &mui, render_container *container, UINT32 state); UINT32 ui_gfx_ui_handler(render_container *container, mame_ui_manager &mui, bool uistate);
#endif /* __UI_VIEWGFX_H__ */ #endif /* __UI_VIEWGFX_H__ */

View File

@ -2988,7 +2988,10 @@ chd_error chd_file_compressor::compress_continue(double &progress, double &ratio
ratio = (m_total_in == 0) ? 1.0 : double(m_total_out) / double(m_total_in); ratio = (m_total_in == 0) ? 1.0 : double(m_total_out) / double(m_total_in);
// if we're waiting for work, wait // if we're waiting for work, wait
while (m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_status != WS_COMPLETE && m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_osd != nullptr) // sometimes code can get here with .m_status == WS_READY and .m_osd != nullptr, TODO find out why this happens
while (m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_status != WS_READY &&
m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_status != WS_COMPLETE &&
m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_osd != nullptr)
osd_work_item_wait(m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_osd, osd_ticks_per_second()); osd_work_item_wait(m_work_item[m_write_hunk % WORK_BUFFER_HUNKS].m_osd, osd_ticks_per_second());
return m_walking_parent ? CHDERR_WALKING_PARENT : CHDERR_COMPRESSING; return m_walking_parent ? CHDERR_WALKING_PARENT : CHDERR_COMPRESSING;

File diff suppressed because it is too large Load Diff

View File

@ -2,17 +2,6 @@
// copyright-holders:Luca Elia, Olivier Galibert // copyright-holders:Luca Elia, Olivier Galibert
/*************************************************************************** /***************************************************************************
TODO:
- Find out how layers are enabled\disabled
- dangar input ports - parent set requires F2 be held for Service Mode
- wrong title screen in ninjemak
- bit 3 of ninjemak_gfxbank_w, there currently is a kludge to clear text RAM
but it should really copy stuff from the extra ROM.
- Likely missing MCU emulation/simulation for displaying text layer for Ninja Emaki.
There is no text displayed when you enter Service Mode when there should be.
Examine $3000+ in file loaded for "gfx5".
Galivan Galivan
(C) 1985 Nihon Bussan (C) 1985 Nihon Bussan
driver by driver by
@ -27,6 +16,17 @@ Youma Ninpou Chou (Japan)
Driver by Driver by
Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/17 - Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/17 -
TODO
- Find out how layers are enabled\disabled
- dangar input ports - parent set requires F2 be held for Service Mode
- wrong title screen in ninjemak
- bit 3 of ninjemak_gfxbank_w, there currently is a kludge to clear text RAM
but it should really copy stuff from the extra ROM.
- Ninja Emaki has minor protection issues, see NB1414M4 simulation for more info.
- dangarj has unemulated protection at I/Os 0x80-1 for missing sprites.
It then checks the checksum result with 0x27, jumps to unmapped ROM area
during gameplay if it's manually hampered hmm ...
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
@ -85,8 +85,8 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, galivan_state )
AM_RANGE(0x41, 0x42) AM_WRITE(galivan_scrollx_w) AM_RANGE(0x41, 0x42) AM_WRITE(galivan_scrollx_w)
AM_RANGE(0x43, 0x44) AM_WRITE(galivan_scrolly_w) AM_RANGE(0x43, 0x44) AM_WRITE(galivan_scrolly_w)
AM_RANGE(0x45, 0x45) AM_WRITE(galivan_sound_command_w) AM_RANGE(0x45, 0x45) AM_WRITE(galivan_sound_command_w)
/* AM_RANGE(0x46, 0x46) AM_WRITENOP */ // AM_RANGE(0x46, 0x46) AM_WRITENOP
/* AM_RANGE(0x47, 0x47) AM_WRITENOP */ // AM_RANGE(0x47, 0x47) AM_WRITENOP
AM_RANGE(0xc0, 0xc0) AM_READ(IO_port_c0_r) /* dangar needs to return 0x58 */ AM_RANGE(0xc0, 0xc0) AM_READ(IO_port_c0_r) /* dangar needs to return 0x58 */
ADDRESS_MAP_END ADDRESS_MAP_END
@ -629,32 +629,32 @@ ROM_START( galivan3 )
ROM_LOAD( "mb7114e.7f", 0x0000, 0x0100, CRC(06538736) SHA1(a2fb2ecb768686839f3087e691102e2dc2eb65b5) ) /* sprite palette bank */ ROM_LOAD( "mb7114e.7f", 0x0000, 0x0100, CRC(06538736) SHA1(a2fb2ecb768686839f3087e691102e2dc2eb65b5) ) /* sprite palette bank */
ROM_END ROM_END
ROM_START( dangar ) ROM_START( dangar ) /* all rom labels are simply numbers, with the owl logo and "Nichibutsu" printed at the bottom */
ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */ ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */
ROM_LOAD( "dangar08.1b", 0x00000, 0x8000, CRC(e52638f2) SHA1(6dd3ccb4574a410abf1ac35b4f9518ee21ecac91) ) ROM_LOAD( "8.1b", 0x00000, 0x8000, CRC(fe4a3fd6) SHA1(b471b2b1dea23bd1444880ceb8112d7998950dd4) ) /* APRIL 09 1987 - Same rom label, different data */
ROM_LOAD( "dangar09.3b", 0x08000, 0x4000, CRC(809d280f) SHA1(931f811f1fe3c71ba82fc44f69ef461bdd9cd2d8) ) ROM_LOAD( "9.3b", 0x08000, 0x4000, CRC(809d280f) SHA1(931f811f1fe3c71ba82fc44f69ef461bdd9cd2d8) )
ROM_LOAD( "dangar10.5b", 0x10000, 0x4000, CRC(99a3591b) SHA1(45011043ff5620524d79076542bd8c602fe90cf4) ) ROM_LOAD( "10.4b", 0x10000, 0x4000, CRC(99a3591b) SHA1(45011043ff5620524d79076542bd8c602fe90cf4) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */
ROM_LOAD( "dangar13.b14", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) ) ROM_LOAD( "13.b14", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "dangar14.b15", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) ) ROM_LOAD( "14.b15", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) )
ROM_REGION( 0x04000, "gfx1", 0 ) ROM_REGION( 0x04000, "gfx1", 0 )
ROM_LOAD( "dangar05.13d", 0x00000, 0x4000, CRC(40cb378a) SHA1(764596f6845fc0b787b653a87a1778a56ce4f3f8) ) /* chars */ ROM_LOAD( "5.13d", 0x00000, 0x4000, CRC(40cb378a) SHA1(764596f6845fc0b787b653a87a1778a56ce4f3f8) ) /* chars */
ROM_REGION( 0x20000, "gfx2", 0 ) ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "dangar01.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */ ROM_LOAD( "1.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */
ROM_LOAD( "dangar02.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) ) ROM_LOAD( "2.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) )
ROM_LOAD( "dangar03.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) ) ROM_LOAD( "3.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) )
ROM_LOAD( "dangar04.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) ) ROM_LOAD( "4.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) )
ROM_REGION( 0x10000, "gfx3", 0 ) ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "dangarxx.f4", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */ ROM_LOAD( "12.f4", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "dangarxx.f1", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) ) ROM_LOAD( "11.f1", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
ROM_LOAD( "dangar07.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) ) ROM_LOAD( "7.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) )
ROM_LOAD( "dangar06.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) ) ROM_LOAD( "6.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) )
ROM_REGION( 0x0400, "proms", 0 ) ROM_REGION( 0x0400, "proms", 0 )
ROM_LOAD( "82s129.9f", 0x0000, 0x0100, CRC(b29f6a07) SHA1(17c82f439f314c212470bafd917b3f7e12462d16) ) /* red */ ROM_LOAD( "82s129.9f", 0x0000, 0x0100, CRC(b29f6a07) SHA1(17c82f439f314c212470bafd917b3f7e12462d16) ) /* red */
@ -666,32 +666,32 @@ ROM_START( dangar )
ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */ ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */
ROM_END ROM_END
ROM_START( dangar2 ) ROM_START( dangara ) /* all rom labels are simply numbers, with the owl logo and "Nichibutsu" printed at the bottom */
ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */ ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */
ROM_LOAD( "dangar2.016", 0x00000, 0x8000, CRC(743fa2d4) SHA1(55539796967532b57279801374b2f0cf82cfe1ae) ) ROM_LOAD( "8.1b", 0x00000, 0x8000, CRC(e52638f2) SHA1(6dd3ccb4574a410abf1ac35b4f9518ee21ecac91) ) /* DEC. 1 1986 - Same rom label, different data */
ROM_LOAD( "dangar2.017", 0x08000, 0x4000, CRC(1cdc60a5) SHA1(65f776d14c9461f1a6939ad512eacf6a1a9da2c6) ) ROM_LOAD( "9.3b", 0x08000, 0x4000, CRC(809d280f) SHA1(931f811f1fe3c71ba82fc44f69ef461bdd9cd2d8) )
ROM_LOAD( "dangar2.018", 0x10000, 0x4000, CRC(db7f6613) SHA1(c55d1f2fdb86e2b9fbdfad0b156d4d084677b750) ) ROM_LOAD( "10.4b", 0x10000, 0x4000, CRC(99a3591b) SHA1(45011043ff5620524d79076542bd8c602fe90cf4) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */
ROM_LOAD( "dangar13.b14", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) ) ROM_LOAD( "13.14b", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "dangar14.b15", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) ) ROM_LOAD( "14.15b", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) )
ROM_REGION( 0x04000, "gfx1", 0 ) ROM_REGION( 0x04000, "gfx1", 0 )
ROM_LOAD( "dangar2.011", 0x00000, 0x4000, CRC(e804ffe1) SHA1(22f16c23b9a82f104dda24bc8fccc08f3f69cf97) ) /* chars */ ROM_LOAD( "5.13d", 0x00000, 0x4000, CRC(40cb378a) SHA1(764596f6845fc0b787b653a87a1778a56ce4f3f8) ) /* chars */
ROM_REGION( 0x20000, "gfx2", 0 ) ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "dangar01.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */ ROM_LOAD( "1.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */
ROM_LOAD( "dangar02.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) ) ROM_LOAD( "2.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) )
ROM_LOAD( "dangar03.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) ) ROM_LOAD( "3.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) )
ROM_LOAD( "dangar04.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) ) ROM_LOAD( "4.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) )
ROM_REGION( 0x10000, "gfx3", 0 ) ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "dangarxx.f4", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */ ROM_LOAD( "12.4f", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "dangarxx.f1", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) ) ROM_LOAD( "11.1f", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */ ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
ROM_LOAD( "dangar07.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) ) ROM_LOAD( "7.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) )
ROM_LOAD( "dangar06.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) ) ROM_LOAD( "6.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) )
ROM_REGION( 0x0400, "proms", 0 ) ROM_REGION( 0x0400, "proms", 0 )
ROM_LOAD( "82s129.9f", 0x0000, 0x0100, CRC(b29f6a07) SHA1(17c82f439f314c212470bafd917b3f7e12462d16) ) /* red */ ROM_LOAD( "82s129.9f", 0x0000, 0x0100, CRC(b29f6a07) SHA1(17c82f439f314c212470bafd917b3f7e12462d16) ) /* red */
@ -703,7 +703,84 @@ ROM_START( dangar2 )
ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */ ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */
ROM_END ROM_END
ROM_START( dangarb ) ROM_START( dangarb ) /* all rom labels are simply numbers, with the owl logo and "Nichibutsu" printed at the bottom */
ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */
ROM_LOAD( "16.1b", 0x00000, 0x8000, CRC(743fa2d4) SHA1(55539796967532b57279801374b2f0cf82cfe1ae) ) /* SEPT. 26 1986 */
ROM_LOAD( "17.3b", 0x08000, 0x4000, CRC(1cdc60a5) SHA1(65f776d14c9461f1a6939ad512eacf6a1a9da2c6) ) /* SEPT. 26 1986 */
ROM_LOAD( "18.4b", 0x10000, 0x4000, CRC(db7f6613) SHA1(c55d1f2fdb86e2b9fbdfad0b156d4d084677b750) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */
ROM_LOAD( "13.14b", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "14.15b", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) )
ROM_REGION( 0x04000, "gfx1", 0 )
ROM_LOAD( "11.13d", 0x00000, 0x4000, CRC(e804ffe1) SHA1(22f16c23b9a82f104dda24bc8fccc08f3f69cf97) ) /* chars */
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "1.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */
ROM_LOAD( "2.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) )
ROM_LOAD( "3.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) )
ROM_LOAD( "4.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) )
ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "12.4f", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "11.1f", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
ROM_LOAD( "7.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) )
ROM_LOAD( "6.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) )
ROM_REGION( 0x0400, "proms", 0 )
ROM_LOAD( "82s129.9f", 0x0000, 0x0100, CRC(b29f6a07) SHA1(17c82f439f314c212470bafd917b3f7e12462d16) ) /* red */
ROM_LOAD( "82s129.10f", 0x0100, 0x0100, CRC(c6de5ecb) SHA1(d5b6cb784b5df16332c5e2b19b763c8858a0b6a7) ) /* green */
ROM_LOAD( "82s129.11f", 0x0200, 0x0100, CRC(a5bbd6dc) SHA1(5587844900a24d833500d204f049c05493c4a25a) ) /* blue */
ROM_LOAD( "82s129.2d", 0x0300, 0x0100, CRC(a4ac95a5) SHA1(3b31cd3fd6caedd89d1bedc606a978081fc5431f) ) /* sprite lookup table */
ROM_REGION( 0x0100, "user1", 0 )
ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */
ROM_END
ROM_START( dangarj ) /* all rom labels are simply numbers, with the owl logo and "Nichibutsu" printed at the bottom */
ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */
ROM_LOAD( "16.1b", 0x00000, 0x8000, CRC(1e14b0b4) SHA1(dcb7fe79ca17afe51ba3c1554183c773af13142f) )
ROM_LOAD( "17.3b", 0x08000, 0x4000, CRC(9ba92111) SHA1(0050cd83f4e7a17601493d7d44af4501e52aad20) )
ROM_LOAD( "18.4b", 0x10000, 0x4000, CRC(db7f6613) SHA1(c55d1f2fdb86e2b9fbdfad0b156d4d084677b750) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */
ROM_LOAD( "21.14b", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "22.15b", 0x4000, 0x4000, CRC(1d484f68) SHA1(7de13d6c6850280fed011c1d1b211cdc5ea9f935) )
ROM_REGION( 0x04000, "gfx1", 0 )
ROM_LOAD( "11.13d", 0x00000, 0x4000, CRC(e804ffe1) SHA1(22f16c23b9a82f104dda24bc8fccc08f3f69cf97) ) /* chars */
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "7.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */
ROM_LOAD( "8.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) )
ROM_LOAD( "9.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) ) /* different label for these 4, same data */
ROM_LOAD( "10.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) )
ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "20.4f", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "19.1f", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
ROM_LOAD( "15.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) ) /* different label same data */
ROM_LOAD( "12.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) )
ROM_REGION( 0x0400, "proms", 0 )
ROM_LOAD( "82s129.9f", 0x0000, 0x0100, CRC(b29f6a07) SHA1(17c82f439f314c212470bafd917b3f7e12462d16) ) /* red */
ROM_LOAD( "82s129.10f", 0x0100, 0x0100, CRC(c6de5ecb) SHA1(d5b6cb784b5df16332c5e2b19b763c8858a0b6a7) ) /* green */
ROM_LOAD( "82s129.11f", 0x0200, 0x0100, CRC(a5bbd6dc) SHA1(5587844900a24d833500d204f049c05493c4a25a) ) /* blue */
ROM_LOAD( "82s129.2d", 0x0300, 0x0100, CRC(a4ac95a5) SHA1(3b31cd3fd6caedd89d1bedc606a978081fc5431f) ) /* sprite lookup table */
ROM_REGION( 0x0100, "user1", 0 )
ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */
ROM_REGION( 0x2000, "user2", 0 ) /* located on a daughter card DG-3 with an additional 8.00MHz OSC & Nichibutsu 1412M2 XBA (unknown MCU?) */
ROM_LOAD( "dg-3.ic7.2764", 0x0000, 0x2000, CRC(84a56d26) SHA1(6a1cdac7b9e04ccbcc29491f37f7554d09ea6d34) )
ROM_END
ROM_START( dangarbt )
ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */ ROM_REGION( 0x14000, "maincpu", 0 ) /* main cpu code */
ROM_LOAD( "8", 0x00000, 0x8000, CRC(8136fd10) SHA1(5f2ca08fab0d9431af38ef66922fdb6bd9a132e2) ) ROM_LOAD( "8", 0x00000, 0x8000, CRC(8136fd10) SHA1(5f2ca08fab0d9431af38ef66922fdb6bd9a132e2) )
ROM_LOAD( "9", 0x08000, 0x4000, CRC(3ce5ec11) SHA1(bcc0df6167d0b84b9f260435c1999b9d3605fcd4) ) ROM_LOAD( "9", 0x08000, 0x4000, CRC(3ce5ec11) SHA1(bcc0df6167d0b84b9f260435c1999b9d3605fcd4) )
@ -1093,9 +1170,11 @@ DRIVER_INIT_MEMBER(galivan_state,youmab)
GAME( 1985, galivan, 0, galivan, galivan, driver_device, 0, ROT270, "Nichibutsu", "Cosmo Police Galivan (12/26/1985)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, galivan, 0, galivan, galivan, driver_device, 0, ROT270, "Nichibutsu", "Cosmo Police Galivan (12/26/1985)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, galivan2, galivan, galivan, galivan, driver_device, 0, ROT270, "Nichibutsu", "Cosmo Police Galivan (12/16/1985)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, galivan2, galivan, galivan, galivan, driver_device, 0, ROT270, "Nichibutsu", "Cosmo Police Galivan (12/16/1985)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, galivan3, galivan, galivan, galivan, driver_device, 0, ROT270, "Nichibutsu", "Cosmo Police Galivan (12/11/1985)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, galivan3, galivan, galivan, galivan, driver_device, 0, ROT270, "Nichibutsu", "Cosmo Police Galivan (12/11/1985)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, dangar, 0, galivan, dangar, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (12/1/1986)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, dangar, 0, galivan, dangar, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (4/07/1987)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, dangar2, dangar, galivan, dangar2, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (9/26/1986)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, dangara, dangar, galivan, dangar2, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (12/1/1986)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, dangarb, dangar, galivan, dangarb, driver_device, 0, ROT270, "bootleg", "Ufo Robo Dangar (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, dangarb, dangar, galivan, dangar2, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (9/26/1986)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, dangarj, dangar, galivan, dangar2, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (9/26/1986, Japan)", MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING ) // no sprites visable
GAME( 1986, dangarbt, dangar, galivan, dangarb, driver_device, 0, ROT270, "bootleg", "Ufo Robo Dangar (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, ninjemak, 0, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Ninja Emaki (US)", MACHINE_SUPPORTS_SAVE|MACHINE_UNEMULATED_PROTECTION ) GAME( 1986, ninjemak, 0, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Ninja Emaki (US)", MACHINE_SUPPORTS_SAVE|MACHINE_UNEMULATED_PROTECTION )
GAME( 1986, youma, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan)", MACHINE_SUPPORTS_SAVE|MACHINE_UNEMULATED_PROTECTION ) GAME( 1986, youma, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan)", MACHINE_SUPPORTS_SAVE|MACHINE_UNEMULATED_PROTECTION )
GAME( 1986, youma2, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan, alt)", MACHINE_SUPPORTS_SAVE|MACHINE_UNEMULATED_PROTECTION ) GAME( 1986, youma2, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan, alt)", MACHINE_SUPPORTS_SAVE|MACHINE_UNEMULATED_PROTECTION )

View File

@ -5998,7 +5998,7 @@ ROM_END
ROM_START( esoccer ) ROM_START( esoccer )
ROM_REGION( 0x0400, "maincpu", 0 ) ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "mp0158", 0x0000, 0x0400, CRC(ae4581ea) SHA1(5f6881f8247094abf8cffb17f6e6586e94cff38c) ) ROM_LOAD( "mp0158.ic1", 0x0000, 0x0400, CRC(ae4581ea) SHA1(5f6881f8247094abf8cffb17f6e6586e94cff38c) )
ROM_REGION( 867, "maincpu:mpla", 0 ) ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) ) ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) )

View File

@ -554,6 +554,40 @@ ROM_START( cmagica )
ROM_LOAD( "sound.bin", 0x00000, 0x20000, CRC(9dab99a6) SHA1(ce34056dd964be32359acd2e53a6101cb4d9ddff) ) ROM_LOAD( "sound.bin", 0x00000, 0x20000, CRC(9dab99a6) SHA1(ce34056dd964be32359acd2e53a6101cb4d9ddff) )
ROM_END ROM_END
/*
Magic Card (H8 hardware)
English version of Carta Magica. Same title picture.
However, all the service/bookkeeping modes are in Italian.
This set have 4 different graphics:
1) Normal Cards.
2) Naked Girls.
3) Chips.
4) Numbers.
Hardware is similar to Carta Magica, but with different connectors:
1x 28x2 edge connector (not JAMMA).
1x RS232 connector.
1x 10 legs male connector.
1x 4 legs male connector.
*/
ROM_START( mcard_h8 )
ROM_REGION( 0x1000000, "maincpu", 0 ) /* all the program code is in here */
ROM_LOAD( "cmcard_h8_hd64f3337cp16.mcu", 0x00000, 0x4000, NO_DUMP )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "m_card_ep_1.bin", 0x000000, 0x80000, CRC(f887f740) SHA1(d9a59ed753f3f61705658af1cac673c523ad2237) )
ROM_LOAD( "m_card_ep_2.bin", 0x080000, 0x80000, CRC(e5fa014c) SHA1(96fcdf6a15617dbf928f465e21df3638cbae26aa) )
ROM_LOAD( "m_card_ep_3.bin", 0x100000, 0x80000, CRC(cd6f22cf) SHA1(0b8f5d9ce4f9bb5b776beec38087494d1e4bae7e) )
ROM_REGION( 0x20000, "upd", 0 ) /* NEC D7759GC samples */
ROM_LOAD( "m_card_msg_0.bin", 0x00000, 0x20000, CRC(9dab99a6) SHA1(ce34056dd964be32359acd2e53a6101cb4d9ddff) )
ROM_END
/* /*
Millennium Sun. Millennium Sun.
@ -1026,6 +1060,7 @@ GAME( 2001, laser2k1, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<un
GAME( 2001, mdrink, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Magic Drink (Ver 1.2)", MACHINE_IS_SKELETON ) GAME( 2001, mdrink, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Magic Drink (Ver 1.2)", MACHINE_IS_SKELETON )
GAME( 2001, te0144, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Puzzle Bobble (Italian Gambling Game)", MACHINE_IS_SKELETON ) GAME( 2001, te0144, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Puzzle Bobble (Italian Gambling Game)", MACHINE_IS_SKELETON )
GAME( 200?, cmagica, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Carta Magica (Ver 1.8)", MACHINE_IS_SKELETON ) GAME( 200?, cmagica, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Carta Magica (Ver 1.8)", MACHINE_IS_SKELETON )
GAME( 200?, mcard_h8, cmagica, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Magic Card (H8, English)", MACHINE_IS_SKELETON )
GAME( 200?, millsun, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Millennium Sun", MACHINE_IS_SKELETON ) GAME( 200?, millsun, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Millennium Sun", MACHINE_IS_SKELETON )
GAME( 200?, sspac2k1, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Super Space 2001", MACHINE_IS_SKELETON ) GAME( 200?, sspac2k1, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Super Space 2001", MACHINE_IS_SKELETON )
GAME( 200?, elvis, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Elvis?", MACHINE_IS_SKELETON ) GAME( 200?, elvis, 0, itgambl2, itgambl2, driver_device, 0, ROT0, "<unknown>", "Elvis?", MACHINE_IS_SKELETON )

View File

@ -4456,6 +4456,30 @@ ROM_START( hyperbbca )
ROM_LOAD( "876aa.22h", 0x000000, 0x002000, CRC(3c17f026) SHA1(8ed33aca99f5d09d5792e136e700e3ac628018e8) ) ROM_LOAD( "876aa.22h", 0x000000, 0x002000, CRC(3c17f026) SHA1(8ed33aca99f5d09d5792e136e700e3ac628018e8) )
ROM_END ROM_END
ROM_START( hyperbbck )
SYS573_BIOS_A
ROM_REGION( 0x200000, "29f016a.31m", 0 ) /* onboard flash */
ROM_LOAD( "876ka.31m", 0x000000, 0x200000, CRC(b2f5ea67) SHA1(205416c2954cfc303f164bb74f66356c393db294) )
ROM_REGION( 0x200000, "29f016a.27m", 0 ) /* onboard flash */
ROM_LOAD( "876ka.27m", 0x000000, 0x200000, CRC(d5f32438) SHA1(3bc8598af2e8817bbcb381f90a9b12d5736abed7) )
ROM_REGION( 0x200000, "29f016a.31l", 0 ) /* onboard flash */
ROM_LOAD( "876ka.31l", 0x000000, 0x200000, CRC(628cd211) SHA1(5c2d5f95bf3e7995ad32dc432c81e69e42ba9b88) )
ROM_REGION( 0x200000, "29f016a.27l", 0 ) /* onboard flash */
ROM_LOAD( "876ka.27l", 0x000000, 0x200000, CRC(4a860adf) SHA1(02aea8c205ea5b094d1a52dadc751c11d6b8aab7) )
ROM_REGION( 0x200000, "29f016a.31j", 0 ) /* onboard flash */
ROM_LOAD( "876ka.31j", 0x000000, 0x200000, CRC(4d572e90) SHA1(ac06a4f4efcee2729b131da8634eced85338196a) )
ROM_REGION( 0x200000, "29f016a.27j", 0 ) /* onboard flash */
ROM_LOAD( "876ka.27j", 0x000000, 0x200000, CRC(f80953f7) SHA1(c82bea38a8dc19ed99e5fd5c97cbffd7669581a7) )
ROM_REGION( 0x200000, "29f016a.31h", 0 ) /* onboard flash */
ROM_LOAD( "876ka.31h", 0x000000, 0x200000, CRC(4f99ef5b) SHA1(df02cdc61455a470cadada16c43e7f153d9d48c7) )
ROM_REGION( 0x200000, "29f016a.27h", 0 ) /* onboard flash */
ROM_LOAD( "876ka.27h", 0x000000, 0x200000, CRC(21586113) SHA1(a563e383961b8e2421869070fe384ed910ed2fe4) )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "876ka.22h", 0x000000, 0x002000, CRC(b4705bde) SHA1(3005982b3c237181c6a03b42bf37ffe79f68dc79) )
ROM_END
ROM_START( hypbbc2p ) ROM_START( hypbbc2p )
SYS573_BIOS_A SYS573_BIOS_A
@ -4711,6 +4735,7 @@ GAME( 1998, fbait2bc, sys573, fbaitbc, fbaitbc, driver_device, 0,
GAME( 1998, bassang2, fbait2bc, fbaitbc, fbaitbc, driver_device, 0, ROT0, "Konami", "Bass Angler 2 (GE865 VER. JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1998, bassang2, fbait2bc, fbaitbc, fbaitbc, driver_device, 0, ROT0, "Konami", "Bass Angler 2 (GE865 VER. JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1998, hyperbbc, sys573, hyperbbc, hyperbbc, ksys573_state, hyperbbc, ROT0, "Konami", "Hyper Bishi Bashi Champ (GQ876 VER. EAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1998, hyperbbc, sys573, hyperbbc, hyperbbc, ksys573_state, hyperbbc, ROT0, "Konami", "Hyper Bishi Bashi Champ (GQ876 VER. EAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1998, hyperbbca, hyperbbc, hyperbbc, hyperbbc, ksys573_state, hyperbbc, ROT0, "Konami", "Hyper Bishi Bashi Champ (GQ876 VER. AAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1998, hyperbbca, hyperbbc, hyperbbc, hyperbbc, ksys573_state, hyperbbc, ROT0, "Konami", "Hyper Bishi Bashi Champ (GQ876 VER. AAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1998, hyperbbck, hyperbbc, hyperbbc, hyperbbc, ksys573_state, hyperbbc, ROT0, "Konami", "Hyper Bishi Bashi Champ (GE876 VER. KAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1999, gchgchmp, sys573, gchgchmp, gchgchmp, driver_device, 0, ROT0, "Konami", "Gachaga Champ (GE877 VER. JAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1999, gchgchmp, sys573, gchgchmp, gchgchmp, driver_device, 0, ROT0, "Konami", "Gachaga Champ (GE877 VER. JAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1999, drmn, sys573, drmn, drmn, ksys573_state, drmn, ROT0, "Konami", "DrumMania (GQ881 VER. JAD)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) GAME( 1999, drmn, sys573, drmn, drmn, ksys573_state, drmn, ROT0, "Konami", "DrumMania (GQ881 VER. JAD)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
GAME( 1999, gtrfrks, sys573, gtrfrks, gtrfrks, driver_device, 0, ROT0, "Konami", "Guitar Freaks (GQ886 VER. EAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1999, gtrfrks, sys573, gtrfrks, gtrfrks, driver_device, 0, ROT0, "Konami", "Guitar Freaks (GQ886 VER. EAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )

View File

@ -812,9 +812,10 @@ ROM_START( mk3p40 )
ROM_LOAD32_BYTE( "mk3-u114.bin", 0x1000003, 0x080000, CRC(a8d99922) SHA1(04ff8d85448701070672f44dbf5bcfd744f1bc8a) ) ROM_LOAD32_BYTE( "mk3-u114.bin", 0x1000003, 0x080000, CRC(a8d99922) SHA1(04ff8d85448701070672f44dbf5bcfd744f1bc8a) )
ROM_END ROM_END
// TODO: we're currently using version 1.0 roms for sound for all sets, see MT #00751
ROM_START( umk3 ) ROM_START( umk3 )
ROM_REGION16_LE( 0x800000, "dcs", ROMREGION_ERASEFF ) /* sound data */ ROM_REGION16_LE( 0x800000, "dcs", ROMREGION_ERASEFF ) /* sound data */
ROM_LOAD16_BYTE( "umk3-u2.bin", 0x000000, 0x100000, CRC(3838cfe5) SHA1(e3d2901f3bae1362742fc6ee0aa31c9f63b4dfa3) ) ROM_LOAD16_BYTE( "umk3-u2.bin", 0x000000, 0x100000, BAD_DUMP CRC(3838cfe5) SHA1(e3d2901f3bae1362742fc6ee0aa31c9f63b4dfa3) )
ROM_LOAD16_BYTE( "mk3-u3.bin", 0x200000, 0x100000, CRC(856fe411) SHA1(6165ebecfce7500e948d84492ffa19eed7f47091) ) ROM_LOAD16_BYTE( "mk3-u3.bin", 0x200000, 0x100000, CRC(856fe411) SHA1(6165ebecfce7500e948d84492ffa19eed7f47091) )
ROM_LOAD16_BYTE( "mk3-u4.bin", 0x400000, 0x100000, CRC(428a406f) SHA1(e70ec83cd054de0da1e178720ed0035b8887f797) ) ROM_LOAD16_BYTE( "mk3-u4.bin", 0x400000, 0x100000, CRC(428a406f) SHA1(e70ec83cd054de0da1e178720ed0035b8887f797) )
ROM_LOAD16_BYTE( "mk3-u5.bin", 0x600000, 0x100000, CRC(3b98a09f) SHA1(edf1d02a56dcf3349e6b4bb4097acfe7592305f4) ) ROM_LOAD16_BYTE( "mk3-u5.bin", 0x600000, 0x100000, CRC(3b98a09f) SHA1(edf1d02a56dcf3349e6b4bb4097acfe7592305f4) )
@ -853,7 +854,7 @@ ROM_END
ROM_START( umk3r11 ) ROM_START( umk3r11 )
ROM_REGION16_LE( 0x800000, "dcs", ROMREGION_ERASEFF ) /* sound data */ ROM_REGION16_LE( 0x800000, "dcs", ROMREGION_ERASEFF ) /* sound data */
ROM_LOAD16_BYTE( "umk3-u2.bin", 0x000000, 0x100000, CRC(3838cfe5) SHA1(e3d2901f3bae1362742fc6ee0aa31c9f63b4dfa3) ) ROM_LOAD16_BYTE( "umk3-u2.bin", 0x000000, 0x100000, BAD_DUMP CRC(3838cfe5) SHA1(e3d2901f3bae1362742fc6ee0aa31c9f63b4dfa3) )
ROM_LOAD16_BYTE( "mk3-u3.bin", 0x200000, 0x100000, CRC(856fe411) SHA1(6165ebecfce7500e948d84492ffa19eed7f47091) ) ROM_LOAD16_BYTE( "mk3-u3.bin", 0x200000, 0x100000, CRC(856fe411) SHA1(6165ebecfce7500e948d84492ffa19eed7f47091) )
ROM_LOAD16_BYTE( "mk3-u4.bin", 0x400000, 0x100000, CRC(428a406f) SHA1(e70ec83cd054de0da1e178720ed0035b8887f797) ) ROM_LOAD16_BYTE( "mk3-u4.bin", 0x400000, 0x100000, CRC(428a406f) SHA1(e70ec83cd054de0da1e178720ed0035b8887f797) )
ROM_LOAD16_BYTE( "mk3-u5.bin", 0x600000, 0x100000, CRC(3b98a09f) SHA1(edf1d02a56dcf3349e6b4bb4097acfe7592305f4) ) ROM_LOAD16_BYTE( "mk3-u5.bin", 0x600000, 0x100000, CRC(3b98a09f) SHA1(edf1d02a56dcf3349e6b4bb4097acfe7592305f4) )

View File

@ -892,7 +892,7 @@ static ADDRESS_MAP_START( neocd_main_map, AS_PROGRAM, 16, ngcd_state )
AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01fffe) AM_DEVREAD8("ctrl1", neogeo_control_port_device, ctrl_r, 0xff00) AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01fffe) AM_DEVREAD8("ctrl1", neogeo_control_port_device, ctrl_r, 0xff00)
AM_RANGE(0x320000, 0x320001) AM_MIRROR(0x01fffe) AM_READ_PORT("AUDIO") AM_WRITE8(audio_command_w, 0xff00) AM_RANGE(0x320000, 0x320001) AM_MIRROR(0x01fffe) AM_READ_PORT("AUDIO") AM_WRITE8(audio_command_w, 0xff00)
AM_RANGE(0x340000, 0x340001) AM_MIRROR(0x01fffe) AM_DEVREAD8("ctrl1", neogeo_control_port_device, ctrl_r, 0xff00) AM_RANGE(0x340000, 0x340001) AM_MIRROR(0x01fffe) AM_DEVREAD8("ctrl2", neogeo_control_port_device, ctrl_r, 0xff00)
AM_RANGE(0x360000, 0x37ffff) AM_READ(unmapped_r) AM_RANGE(0x360000, 0x37ffff) AM_READ(unmapped_r)
AM_RANGE(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ(aes_in2_r) AM_RANGE(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ(aes_in2_r)
AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE8(io_control_w, 0x00ff) AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE8(io_control_w, 0x00ff)

View File

@ -25,12 +25,12 @@ in secondary boot loader with a RESTORE (seek track 0) when track 2 sector 1 sho
Writing files to floppy is next to impossible on both CPM 1.x and DOS 3 (these two OS boot Writing files to floppy is next to impossible on both CPM 1.x and DOS 3 (these two OS boot
with keyboard workarounds enabled). File deletion works, so few bytes pass. with keyboard workarounds enabled). File deletion works, so few bytes pass.
(3) heavy system interaction stalls the driver. Start one of the torture tests on the diag.disk (3) heavy system interaction stalls the driver. Start the RX50 diag.disk and
and see what happens (system interaction, Z80, about any test except the video / CRT tests). see what happens (key 3 for individual tests, then select system interaction).
(4) arbitration chip (E11; in 100-A schematics or E13 in -B) should be dumped. (4) arbitration chip (E11; in 100-A schematics or E13 in -B) should be dumped.
It is a 6308 OTP ROM (2048 bit, 256 x 8) used as a lookup table (LUT) with the address pins (A) It is a 6308 OTP ROM (2048 bit, 256 x 8) used as a lookup table (LUT) with the address pins (A)
used as inputs and the data pins (D) as output. used as inputs and the data pins (D) as output.
Plays a role in DMA access to lower memory (limited to 64 K; Extended communication option only). Plays a role in DMA access to lower memory (limited to 64 K; Extended communication option only).
Arbiter is also involved in refresh and shared memory contention (affects Z80/8088 CPU cycles). Arbiter is also involved in refresh and shared memory contention (affects Z80/8088 CPU cycles).
@ -387,10 +387,10 @@ private:
IRQ_8088_MAILBOX = 0, // 27/A7 9C/29C - [built-in] Interrupt from Z80A IRQ_8088_MAILBOX = 0, // 27/A7 9C/29C - [built-in] Interrupt from Z80A
IRQ_8088_KBD, // 26/A6 98/298 - [built-in] KEYBOARD Interrupt - 8251A IRQ_8088_KBD, // 26/A6 98/298 - [built-in] KEYBOARD Interrupt - 8251A
IRQ_BDL_INTR_L, // 25/A5 94/294 - [ext. BUNDLE OPTION] Hard disk or Extended communication IRQ (no DMA) IRQ_BDL_INTR_L, // 25/A5 94/294 - [ext. BUNDLE OPTION] Hard disk or Extended communication IRQ (no DMA)
// IRQ_COMM_PTR_INTR_L, // 24/A4 90/290 - [built-in 7201] Communication/Printer interrupt IRQ_COMM_PTR_INTR_L, // 24/A4 90/290 - [built-in 7201] Communication/Printer interrupt
// IRQ_DMAC_INTR_L, // 23/A3 8C/28C - [ext. COMM.BOARD only] - external DMA Controller (8237) interrupt IRQ_DMAC_INTR_L, // 23/A3 8C/28C - [ext. COMM.BOARD only] - external DMA Controller (8237) interrupt
// IRQ_GRF_INTR_L, // 22/A2 88/288 - [ext. COLOR GRAPHICS] IRQ_GRF_INTR_L, // 22/A2 88/288 - [ext. COLOR GRAPHICS]
// IRQ_BDL_INTR_1L, // 21/A1 84/284 - [ext. COMM.BOARD only] IRQ_BDL_INTR_1L, // 21/A1 84/284 - [ext. COMM.BOARD only]
IRQ_8088_VBL, // 20/A0 80/280 - [built-in DC012] - VERT INTR L (= schematics) IRQ_8088_VBL, // 20/A0 80/280 - [built-in DC012] - VERT INTR L (= schematics)
IRQ_8088_NMI // 02/02 08/08 - [external MEMORY EXTENSION] - PARITY ERROR L IRQ_8088_NMI // 02/02 08/08 - [external MEMORY EXTENSION] - PARITY ERROR L
}; // HIGHEST PRIORITY }; // HIGHEST PRIORITY
@ -492,7 +492,6 @@ FLOPPY_IMD_FORMAT,
FLOPPY_PC_FORMAT FLOPPY_PC_FORMAT
FLOPPY_FORMATS_END FLOPPY_FORMATS_END
// initially only : SLOT_INTERFACE("525qd", FLOPPY_525_SSQD)
static SLOT_INTERFACE_START(rainbow_floppies) static SLOT_INTERFACE_START(rainbow_floppies)
SLOT_INTERFACE("525qd0", FLOPPY_525_SSQD) SLOT_INTERFACE("525qd0", FLOPPY_525_SSQD)
SLOT_INTERFACE("525qd1", FLOPPY_525_SSQD) SLOT_INTERFACE("525qd1", FLOPPY_525_SSQD)
@ -904,7 +903,7 @@ void rainbow_state::machine_reset()
INT88 = false; INT88 = false;
m_kbd_tx_ready = m_kbd_rx_ready = false; m_kbd_tx_ready = m_kbd_rx_ready = false;
m_kbd8251->write_cts(1); m_kbd8251->write_cts(0);
m_KBD = 0; m_KBD = 0;
m_irq_high = 0; m_irq_high = 0;
@ -953,7 +952,7 @@ UINT32 rainbow_state::screen_update_rainbow(screen_device &screen, bitmap_ind16
// Interrupt handling and arbitration. See 3.1.3.8 OF PC-100 spec. // Interrupt handling and arbitration. See 3.1.3.8 OF PC-100 spec.
void rainbow_state::update_8088_irqs() void rainbow_state::update_8088_irqs()
{ {
static const int vectors[] = { 0x27, 0x26, 0x25, 0x20 }; static const int vectors[] = { 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x02 };
if (m_irq_mask != 0) if (m_irq_mask != 0)
{ {
@ -961,6 +960,9 @@ void rainbow_state::update_8088_irqs()
{ {
if (m_irq_mask & (1 << i)) if (m_irq_mask & (1 << i))
{ {
if (vectors[i] == 0x02) // NMI
m_i8088->set_input_line_and_vector(INPUT_LINE_INT0, ASSERT_LINE, 0x02);
else
m_i8088->set_input_line_and_vector(INPUT_LINE_INT0, ASSERT_LINE, vectors[i] | m_irq_high); m_i8088->set_input_line_and_vector(INPUT_LINE_INT0, ASSERT_LINE, vectors[i] | m_irq_high);
break; break;
} }
@ -1986,7 +1988,7 @@ WRITE8_MEMBER(rainbow_state::z80_diskcontrol_w)
} }
else else
{ {
m_floppy->ss_w((data & 20) ? 1 : 0); // RX50 board in Rainbow has 'side select' m_floppy->ss_w((data & 0x20) ? 1 : 0); // RX50 board in Rainbow has 'side select'
m_floppy->set_rpm(300.); m_floppy->set_rpm(300.);
} }
} }

View File

@ -237,7 +237,7 @@ static ADDRESS_MAP_START( funystrp_map, AS_PROGRAM, 16, splash_state )
AM_RANGE(0x881804, 0x881fff) AM_WRITENOP AM_RANGE(0x881804, 0x881fff) AM_WRITENOP
AM_RANGE(0x8c0000, 0x8c0fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")/* Palette is xRRRRxGGGGxBBBBx */ AM_RANGE(0x8c0000, 0x8c0fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")/* Palette is xRRRRxGGGGxBBBBx */
AM_RANGE(0xd00000, 0xd01fff) AM_READWRITE(spr_read, spr_write) AM_SHARE("spriteram") /* Sprite RAM */ AM_RANGE(0xd00000, 0xd01fff) AM_READWRITE(spr_read, spr_write) AM_SHARE("spriteram") /* Sprite RAM */
AM_RANGE(0xfe0000, 0xffffff) AM_RAM AM_MASK(0xffff) /* there's fe0000 <-> ff0000 compare */ /* Work RAM */ AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_MIRROR(0x10000) /* there's fe0000 <-> ff0000 compare */ /* Work RAM */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( funystrp_sound_map, AS_PROGRAM, 8, splash_state ) static ADDRESS_MAP_START( funystrp_sound_map, AS_PROGRAM, 8, splash_state )

View File

@ -790,6 +790,29 @@ static ADDRESS_MAP_START( outzone_main_map, AS_PROGRAM, 16, toaplan1_state )
AM_RANGE(0x340006, 0x340007) AM_WRITE(toaplan1_fcu_flipscreen_w) AM_RANGE(0x340006, 0x340007) AM_WRITE(toaplan1_fcu_flipscreen_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( outzonecv_main_map, AS_PROGRAM, 16, toaplan1_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
// AM_RANGE(0x040000, 0x07ffff) AM_ROM
AM_RANGE(0x080000, 0x087fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0003) AM_WRITE(toaplan1_tile_offsets_w)
AM_RANGE(0x0c0006, 0x0c0007) AM_WRITE(toaplan1_fcu_flipscreen_w)
AM_RANGE(0x400000, 0x400001) AM_READ_PORT("VBLANK")
// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
AM_RANGE(0x400002, 0x400003) AM_WRITE(toaplan1_intenable_w)
AM_RANGE(0x400008, 0x40000f) AM_WRITE(toaplan1_bcu_control_w)
AM_RANGE(0x404000, 0x4047ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
AM_RANGE(0x406000, 0x4067ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
AM_RANGE(0x440000, 0x440fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
AM_RANGE(0x480000, 0x480001) AM_WRITE(toaplan1_bcu_flipscreen_w)
AM_RANGE(0x480002, 0x480003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
AM_RANGE(0x480004, 0x480007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
AM_RANGE(0x480010, 0x48001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
AM_RANGE(0x4c0000, 0x4c0001) AM_READ(toaplan1_frame_done_r)
AM_RANGE(0x4c0002, 0x4c0003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
AM_RANGE(0x4c0004, 0x4c0005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
AM_RANGE(0x4c0006, 0x4c0007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( vimana_main_map, AS_PROGRAM, 16, toaplan1_state ) static ADDRESS_MAP_START( vimana_main_map, AS_PROGRAM, 16, toaplan1_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x080003) AM_WRITE(toaplan1_tile_offsets_w) AM_RANGE(0x080000, 0x080003) AM_WRITE(toaplan1_tile_offsets_w)
@ -2058,6 +2081,44 @@ static MACHINE_CONFIG_START( outzone, toaplan1_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( outzonecv, toaplan1_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
MCFG_CPU_PROGRAM_MAP(outzonecv_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
MCFG_CPU_IO_MAP(zerowing_sound_io_map)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16)
MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( vimana, toaplan1_state ) static MACHINE_CONFIG_START( vimana, toaplan1_state )
/* basic machine hardware */ /* basic machine hardware */
@ -2808,6 +2869,29 @@ ROM_START( outzonec ) /* From board serial number 2122 */
ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */ ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END ROM_END
ROM_START( outzonecv ) /* This is a factory conversion of a Zero Wing (TP-015 hardware) PCB */
ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_BYTE( "tp_018_07+.bin", 0x000000, 0x20000, CRC(8768d843) SHA1(17421d390e490191aa419bc541d78456a1675bc4) ) /* The actual label has a black dot instead of the "+" */
ROM_LOAD16_BYTE( "tp_018_08+.bin", 0x000001, 0x20000, CRC(af238f71) SHA1(2643f8d9e78ddd04ceb40d8f8c6412129c678baf) ) /* The actual label has a black dot instead of the "+" */
ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
ROM_LOAD( "tp_018_09+.bin", 0x0000, 0x8000, CRC(b7201606) SHA1(d413074b59f25eb2136c1bc98189550410658493) ) /* The actual label has a black dot instead of the "+" */
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_LOAD16_WORD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) ) /* Located on a SUB 015 daughter card */
ROM_LOAD16_WORD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) ) /* Located on a SUB 015 daughter card */
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
ROM_LOAD16_BYTE( "rom1.bin", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
ROM_LOAD16_BYTE( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
ROM_LOAD16_BYTE( "rom4.bin", 0x40001, 0x20000, CRC(50cbf1a8) SHA1(cfab1504746654b4a61912155e9aeca746c65321) )
ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
ROM_LOAD( "tp018_10.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END
ROM_START( vimana ) /* From board serial number 1547.04 (July '94) */ ROM_START( vimana ) /* From board serial number 1547.04 (July '94) */
ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_BYTE( "tp019-7a.bin", 0x000000, 0x20000, CRC(5a4bf73e) SHA1(9a43d822bc24b59278f294d0b3275595de997d16) ) ROM_LOAD16_BYTE( "tp019-7a.bin", 0x000000, 0x20000, CRC(5a4bf73e) SHA1(9a43d822bc24b59278f294d0b3275595de997d16) )
@ -2924,6 +3008,7 @@ GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, toaplan1,
GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (old set)", 0 ) GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (old set)", 0 )
GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (older set)", 0 ) GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (older set)", 0 )
GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype? GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype?
GAME( 1990, outzonecv, outzone, outzonecv,outzone, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (Zero Wing TP-015 PCB conversion)", 0 )
GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 1)", MACHINE_NO_SOUND ) GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 1)", MACHINE_NO_SOUND )
GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 2)", MACHINE_NO_SOUND ) GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 2)", MACHINE_NO_SOUND )
GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (Japan)", MACHINE_NO_SOUND ) GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (Japan)", MACHINE_NO_SOUND )

View File

@ -191,6 +191,7 @@
MACHINE_RESET_MEMBER(turbo_state,buckrog) MACHINE_RESET_MEMBER(turbo_state,buckrog)
{ {
m_buckrog_command = 0x00; m_buckrog_command = 0x00;
memset(m_alt_spriteram, 0x00, sizeof(m_alt_spriteram));
} }
@ -477,6 +478,17 @@ WRITE8_MEMBER(turbo_state::buckrog_i8255_0_w)
machine().scheduler().synchronize(timer_expired_delegate(FUNC(turbo_state::delayed_i8255_w),this), ((offset & 3) << 8) | (data & 0xff)); machine().scheduler().synchronize(timer_expired_delegate(FUNC(turbo_state::delayed_i8255_w),this), ((offset & 3) << 8) | (data & 0xff));
} }
READ8_MEMBER(turbo_state::spriteram_r)
{
offset = (offset & 0x07) | ((offset & 0xf0) >> 1);
return m_alt_spriteram[offset];
}
WRITE8_MEMBER(turbo_state::spriteram_w)
{
offset = (offset & 0x07) | ((offset & 0xf0) >> 1);
m_alt_spriteram[offset] = data;
}
/************************************* /*************************************
@ -487,7 +499,7 @@ WRITE8_MEMBER(turbo_state::buckrog_i8255_0_w)
static ADDRESS_MAP_START( turbo_map, AS_PROGRAM, 8, turbo_state ) static ADDRESS_MAP_START( turbo_map, AS_PROGRAM, 8, turbo_state )
AM_RANGE(0x0000, 0x5fff) AM_ROM AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0xa000, 0xa0ff) AM_MIRROR(0x0700) AM_MASK(0x0f7) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xa000, 0xa0ff) AM_MIRROR(0x0700) AM_READWRITE(spriteram_r, spriteram_w)
AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_WRITE(turbo_coin_and_lamp_w) AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_WRITE(turbo_coin_and_lamp_w)
AM_RANGE(0xb000, 0xb3ff) AM_MIRROR(0x0400) AM_RAM AM_SHARE("spritepos") AM_RANGE(0xb000, 0xb3ff) AM_MIRROR(0x0400) AM_RAM AM_SHARE("spritepos")
AM_RANGE(0xb800, 0xbfff) AM_WRITE(turbo_analog_reset_w) AM_RANGE(0xb800, 0xbfff) AM_WRITE(turbo_analog_reset_w)
@ -1758,9 +1770,15 @@ void turbo_state::turbo_rom_decode()
DRIVER_INIT_MEMBER(turbo_state,turbo_enc) DRIVER_INIT_MEMBER(turbo_state,turbo_enc)
{ {
save_item(NAME(m_alt_spriteram));
turbo_rom_decode(); turbo_rom_decode();
} }
DRIVER_INIT_MEMBER(turbo_state,turbo_noenc)
{
save_item(NAME(m_alt_spriteram));
}
@ -1770,12 +1788,12 @@ DRIVER_INIT_MEMBER(turbo_state,turbo_enc)
* *
*************************************/ *************************************/
GAMEL( 1981, turbo, 0, turbo, turbo, driver_device, 0, ROT270, "Sega", "Turbo (program 1513-1515)", MACHINE_IMPERFECT_SOUND , layout_turbo ) GAMEL( 1981, turbo, 0, turbo, turbo, turbo_state, turbo_noenc, ROT270, "Sega", "Turbo (program 1513-1515)", MACHINE_IMPERFECT_SOUND , layout_turbo )
GAMEL( 1981, turboa, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1262-1264)", MACHINE_IMPERFECT_SOUND , layout_turbo ) GAMEL( 1981, turboa, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1262-1264)", MACHINE_IMPERFECT_SOUND , layout_turbo )
GAMEL( 1981, turbob, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev B)", MACHINE_IMPERFECT_SOUND , layout_turbo ) GAMEL( 1981, turbob, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev B)", MACHINE_IMPERFECT_SOUND , layout_turbo )
GAMEL( 1981, turboc, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev A)", MACHINE_IMPERFECT_SOUND , layout_turbo ) GAMEL( 1981, turboc, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365 rev A)", MACHINE_IMPERFECT_SOUND , layout_turbo )
GAMEL( 1981, turbod, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365)", MACHINE_IMPERFECT_SOUND , layout_turbo ) // but still reports 1262-1264 in the test mode? GAMEL( 1981, turbod, turbo, turbo, turbo, turbo_state, turbo_enc, ROT270, "Sega", "Turbo (encrypted, program 1363-1365)", MACHINE_IMPERFECT_SOUND , layout_turbo ) // but still reports 1262-1264 in the test mode?
GAMEL( 1981, turbobl, turbo, turbo, turbo, driver_device, 0, ROT270, "bootleg", "Indianapolis (bootleg of Turbo)", MACHINE_IMPERFECT_SOUND , layout_turbo ) // decrypted bootleg of a 1262-1264 set GAMEL( 1981, turbobl, turbo, turbo, turbo, turbo_state, turbo_noenc, ROT270, "bootleg", "Indianapolis (bootleg of Turbo)", MACHINE_IMPERFECT_SOUND , layout_turbo ) // decrypted bootleg of a 1262-1264 set
GAMEL( 1982, subroc3d, 0, subroc3d, subroc3d, driver_device, 0, ORIENTATION_FLIP_X, "Sega", "Subroc-3D", MACHINE_IMPERFECT_SOUND , layout_subroc3d ) GAMEL( 1982, subroc3d, 0, subroc3d, subroc3d, driver_device, 0, ORIENTATION_FLIP_X, "Sega", "Subroc-3D", MACHINE_IMPERFECT_SOUND , layout_subroc3d )

View File

@ -54,7 +54,7 @@ public:
optional_region_ptr<UINT8> m_bgcolorrom; optional_region_ptr<UINT8> m_bgcolorrom;
required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_spriteram; optional_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_sprite_position; required_shared_ptr<UINT8> m_sprite_position;
optional_shared_ptr<UINT8> m_decrypted_opcodes; optional_shared_ptr<UINT8> m_decrypted_opcodes;
@ -67,6 +67,7 @@ public:
/* machine states */ /* machine states */
UINT8 m_i8279_scanlines; UINT8 m_i8279_scanlines;
UINT8 m_alt_spriteram[0x80];
/* sound state */ /* sound state */
UINT8 m_turbo_osel; UINT8 m_turbo_osel;
@ -149,7 +150,10 @@ public:
DECLARE_WRITE8_MEMBER(buckrog_ppi1c_w); DECLARE_WRITE8_MEMBER(buckrog_ppi1c_w);
DECLARE_READ8_MEMBER(turbo_analog_r); DECLARE_READ8_MEMBER(turbo_analog_r);
DECLARE_WRITE8_MEMBER(buckrog_i8255_0_w); DECLARE_WRITE8_MEMBER(buckrog_i8255_0_w);
DECLARE_READ8_MEMBER(spriteram_r);
DECLARE_WRITE8_MEMBER(spriteram_w);
DECLARE_DRIVER_INIT(turbo_enc); DECLARE_DRIVER_INIT(turbo_enc);
DECLARE_DRIVER_INIT(turbo_noenc);
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
DECLARE_VIDEO_START(turbo); DECLARE_VIDEO_START(turbo);
DECLARE_PALETTE_INIT(turbo); DECLARE_PALETTE_INIT(turbo);

View File

@ -3,6 +3,15 @@
<!-- define elements --> <!-- define elements -->
<element name="static_black"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="static_white"><rect><color red="0.75" green="0.76" blue="0.75" /></rect></element>
<element name="disk_white"><disk><color red="0.75" green="0.76" blue="0.75" /></disk></element>
<element name="static_green"><rect><color red="0.35" green="0.59" blue="0.32" /></rect></element>
<element name="disk_green"><disk><color red="0.35" green="0.59" blue="0.32" /></disk></element>
<element name="static_green2"><rect><color red="0.18" green="0.46" blue="0.37" /></rect></element>
<element name="text_score"><text string="SCORE"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="digit" defstate="0"> <element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.2" blue="0.23" /></led7seg> <led7seg><color red="1.0" green="0.2" blue="0.23" /></led7seg>
</element> </element>
@ -16,48 +25,111 @@
<!-- build screen --> <!-- build screen -->
<view name="Internal Layout"> <view name="Internal Layout">
<bounds left="0" right="100" top="0" bottom="100" /> <bounds left="2.5" right="33.5" top="5.7" bottom="40.3" />
<bezel name="digit8" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel> <!-- bezel -->
<bezel name="digit9" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
<bezel name="0.0" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel> <bezel element="static_green"><bounds x="5" y="5" width="25" height="35" /></bezel>
<bezel name="0.1" element="led"><bounds x="1" y="20" width="1" height="1" /></bezel>
<bezel name="0.2" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
<bezel name="1.0" element="led"><bounds x="0" y="21" width="1" height="1" /></bezel> <!-- middle -->
<bezel name="1.1" element="led"><bounds x="1" y="21" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="5" y="22.85" width="25" height="0.3" /></bezel>
<bezel name="1.2" element="led"><bounds x="2" y="21" width="1" height="1" /></bezel> <bezel element="disk_white"><bounds x="15.5" y="20.5" width="5" height="5" /></bezel>
<bezel name="1.3" element="led"><bounds x="3" y="21" width="1" height="1" /></bezel> <bezel element="disk_green"><bounds x="15.8" y="20.8" width="4.4" height="4.4" /></bezel>
<bezel name="2.0" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel> <!-- penalty area -->
<bezel name="2.1" element="led"><bounds x="1" y="22" width="1" height="1" /></bezel> <bezel element="disk_white"><bounds x="15.5" y="10.3" width="5" height="5" /></bezel>
<bezel name="2.2" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel> <bezel element="disk_green"><bounds x="15.8" y="10.6" width="4.4" height="4.4" /></bezel>
<bezel name="2.3" element="led"><bounds x="3" y="22" width="1" height="1" /></bezel> <bezel element="disk_white"><bounds x="15.5" y="30.7" width="5" height="5" /></bezel>
<bezel element="disk_green"><bounds x="15.8" y="31.0" width="4.4" height="4.4" /></bezel>
<bezel name="3.0" element="led"><bounds x="0" y="23" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="12" y="7.5" width="12" height="6.8" /></bezel>
<bezel name="3.1" element="led"><bounds x="1" y="23" width="1" height="1" /></bezel> <bezel element="static_green"><bounds x="12.3" y="7.8" width="11.4" height="6.2" /></bezel>
<bezel name="3.2" element="led"><bounds x="2" y="23" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="12" y="31.7" width="12" height="6.8" /></bezel>
<bezel name="3.3" element="led"><bounds x="3" y="23" width="1" height="1" /></bezel> <bezel element="static_green"><bounds x="12.3" y="32.0" width="11.4" height="6.2" /></bezel>
<bezel name="4.0" element="led"><bounds x="0" y="24" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="14.2" y="8" width="7.6" height="3.8" /></bezel>
<bezel name="4.1" element="led"><bounds x="1" y="24" width="1" height="1" /></bezel> <bezel element="static_green"><bounds x="14.5" y="8.3" width="7" height="3.2" /></bezel>
<bezel name="4.2" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="14.2" y="34.2" width="7.6" height="3.8" /></bezel>
<bezel name="4.3" element="led"><bounds x="3" y="24" width="1" height="1" /></bezel> <bezel element="static_green"><bounds x="14.5" y="34.5" width="7" height="3.2" /></bezel>
<bezel name="5.0" element="led"><bounds x="0" y="25" width="1" height="1" /></bezel> <!-- corners -->
<bezel name="5.1" element="led"><bounds x="1" y="25" width="1" height="1" /></bezel> <bezel element="disk_white"><bounds x="6.7" y="6.7" width="4" height="4" /></bezel>
<bezel name="5.2" element="led"><bounds x="2" y="25" width="1" height="1" /></bezel> <bezel element="disk_white"><bounds x="25.3" y="6.7" width="4" height="4" /></bezel>
<bezel name="5.3" element="led"><bounds x="3" y="25" width="1" height="1" /></bezel> <bezel element="disk_white"><bounds x="6.7" y="35.3" width="4" height="4" /></bezel>
<bezel element="disk_white"><bounds x="25.3" y="35.3" width="4" height="4" /></bezel>
<bezel element="disk_green"><bounds x="7.0" y="7.0" width="3.4" height="3.4" /></bezel>
<bezel element="disk_green"><bounds x="25.6" y="7.0" width="3.4" height="3.4" /></bezel>
<bezel element="disk_green"><bounds x="7.0" y="35.6" width="3.4" height="3.4" /></bezel>
<bezel element="disk_green"><bounds x="25.6" y="35.6" width="3.4" height="3.4" /></bezel>
<bezel name="6.0" element="led"><bounds x="0" y="26" width="1" height="1" /></bezel> <!-- outer border -->
<bezel name="6.1" element="led"><bounds x="1" y="26" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="7.5" y="5" width="1.3" height="35" /></bezel>
<bezel name="6.2" element="led"><bounds x="2" y="26" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="27.2" y="5" width="1.3" height="35" /></bezel>
<bezel name="6.3" element="led"><bounds x="3" y="26" width="1" height="1" /></bezel> <bezel element="static_white"><bounds x="5" y="7.5" width="25" height="1.3" /></bezel>
<bezel element="static_white"><bounds x="5" y="37.2" width="25" height="1.3" /></bezel>
<bezel name="7.0" element="led"><bounds x="0" y="27" width="1" height="1" /></bezel> <bezel element="static_green2"><bounds x="3.5" y="5" width="5" height="35" /></bezel>
<bezel name="7.1" element="led"><bounds x="1" y="27" width="1" height="1" /></bezel> <bezel element="static_green2"><bounds x="27.5" y="5" width="5" height="35" /></bezel>
<bezel name="7.2" element="led"><bounds x="2" y="27" width="1" height="1" /></bezel> <bezel element="static_green2"><bounds x="5" y="3.5" width="25" height="5" /></bezel>
<bezel element="static_green2"><bounds x="5" y="37.5" width="25" height="5" /></bezel>
<!-- goals -->
<bezel element="static_white"><bounds x="14.7" y="6.7" width="6.6" height="2" /></bezel>
<bezel element="static_green"><bounds x="15" y="7" width="6" height="1.5" /></bezel>
<bezel element="static_white"><bounds x="14.7" y="37.3" width="6.6" height="2" /></bezel>
<bezel element="static_green"><bounds x="15" y="37.5" width="6" height="1.5" /></bezel>
<!-- clean edges -->
<bezel element="static_black"><bounds x="29.5" y="3" width="5" height="40" /></bezel>
<bezel element="static_black"><bounds x="1.5" y="3" width="5" height="40" /></bezel>
<bezel element="static_black"><bounds x="3" y="1.6" width="30" height="4" /></bezel>
<bezel element="static_black"><bounds x="3" y="40.4" width="30" height="4" /></bezel>
<!-- leds -->
<bezel name="0.0" element="led"><bounds x="15" y="7.5" width="1" height="1" /></bezel>
<bezel name="0.1" element="led"><bounds x="17.5" y="7.5" width="1" height="1" /></bezel>
<bezel name="0.2" element="led"><bounds x="20" y="7.5" width="1" height="1" /></bezel>
<bezel name="1.0" element="led"><bounds x="10" y="10" width="1" height="1" /></bezel>
<bezel name="1.1" element="led"><bounds x="15" y="10" width="1" height="1" /></bezel>
<bezel name="1.2" element="led"><bounds x="20" y="10" width="1" height="1" /></bezel>
<bezel name="1.3" element="led"><bounds x="25" y="10" width="1" height="1" /></bezel>
<bezel name="2.0" element="led"><bounds x="10" y="15" width="1" height="1" /></bezel>
<bezel name="2.1" element="led"><bounds x="15" y="15" width="1" height="1" /></bezel>
<bezel name="2.2" element="led"><bounds x="20" y="15" width="1" height="1" /></bezel>
<bezel name="2.3" element="led"><bounds x="25" y="15" width="1" height="1" /></bezel>
<bezel name="3.0" element="led"><bounds x="10" y="20" width="1" height="1" /></bezel>
<bezel name="3.1" element="led"><bounds x="15" y="20" width="1" height="1" /></bezel>
<bezel name="3.2" element="led"><bounds x="20" y="20" width="1" height="1" /></bezel>
<bezel name="3.3" element="led"><bounds x="25" y="20" width="1" height="1" /></bezel>
<bezel name="4.0" element="led"><bounds x="10" y="25" width="1" height="1" /></bezel>
<bezel name="4.1" element="led"><bounds x="15" y="25" width="1" height="1" /></bezel>
<bezel name="4.2" element="led"><bounds x="20" y="25" width="1" height="1" /></bezel>
<bezel name="4.3" element="led"><bounds x="25" y="25" width="1" height="1" /></bezel>
<bezel name="5.0" element="led"><bounds x="10" y="30" width="1" height="1" /></bezel>
<bezel name="5.1" element="led"><bounds x="15" y="30" width="1" height="1" /></bezel>
<bezel name="5.2" element="led"><bounds x="20" y="30" width="1" height="1" /></bezel>
<bezel name="5.3" element="led"><bounds x="25" y="30" width="1" height="1" /></bezel>
<bezel name="6.0" element="led"><bounds x="10" y="35" width="1" height="1" /></bezel>
<bezel name="6.1" element="led"><bounds x="15" y="35" width="1" height="1" /></bezel>
<bezel name="6.2" element="led"><bounds x="20" y="35" width="1" height="1" /></bezel>
<bezel name="6.3" element="led"><bounds x="25" y="35" width="1" height="1" /></bezel>
<bezel name="7.0" element="led"><bounds x="15" y="37.5" width="1" height="1" /></bezel>
<bezel name="7.1" element="led"><bounds x="17.5" y="37.5" width="1" height="1" /></bezel>
<bezel name="7.2" element="led"><bounds x="20" y="37.5" width="1" height="1" /></bezel>
<bezel name="digit8" element="digit"><bounds x="30.5" y="20" width="2" height="3" /></bezel>
<bezel element="text_score"><bounds x="30" y="23.2" width="3" height="0.8" /></bezel>
<bezel name="digit9" element="digit"><bounds x="3.5" y="23" width="2" height="3" /><orientation rotate="180" /></bezel>
<bezel element="text_score"><bounds x="3" y="22" width="3" height="0.8" /><orientation rotate="180" /></bezel>
</view> </view>
</mamelayout> </mamelayout>

View File

@ -3,18 +3,458 @@
<!-- define elements --> <!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="led" defstate="0"> <element name="led" defstate="0">
<disk state="0"><color red="0.2" green="0.04" blue="0.046" /></disk> <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk> <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</element> </element>
<element name="hl" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="hlb" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
<element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
<element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element>
<element name="disk_white"><disk><color red="0.81" green="0.8" blue="0.79" /></disk></element>
<element name="text_1">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="1"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="2"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="3"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_4">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="4"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_5">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="5"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_6">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="6"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_7">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="7"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_8">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="8"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_a">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="A"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_b">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="B"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_c">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="C"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_d">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="D"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_e">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="E"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_f">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="F"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_g">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="G"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_h">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_re">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="RE"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_spk">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="spk"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pv">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="PV"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_lv">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="LV"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_cl">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="CL"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_dm">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="DM"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rv">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="RV"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_st">
<disk><color red="0.81" green="0.8" blue="0.79" /></disk>
<text string="ST"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_exp">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="EXPERT"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_mon">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="MONITOR"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_sa">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Set-up &quot;A&quot;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_sb">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="Set-up &quot;B&quot;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<!-- build screen --> <!-- build screen -->
<view name="Internal Layout"> <view name="Internal Layout">
<bounds left="0" right="100" top="0" bottom="100" /> <bounds left="-2" right="97" top="-2" bottom="87" />
<bezel element="static_black">
<bounds left="-2" right="97" top="-2" bottom="87" />
</bezel>
<bezel name="0.0" element="led"><bounds x="1" y="1" width="1" height="1" /></bezel> <bezel element="white"><bounds x="-2.5" y="-2.5" width="100" height="89.5" /></bezel>
<!-- board coords -->
<bezel element="text_1"><bounds x="-0.8" y="6.5" width="2" height="2" /></bezel>
<bezel element="text_2"><bounds x="-0.8" y="16.5" width="2" height="2" /></bezel>
<bezel element="text_3"><bounds x="-0.8" y="26.5" width="2" height="2" /></bezel>
<bezel element="text_4"><bounds x="-0.8" y="36.5" width="2" height="2" /></bezel>
<bezel element="text_5"><bounds x="-0.8" y="46.5" width="2" height="2" /></bezel>
<bezel element="text_6"><bounds x="-0.8" y="56.5" width="2" height="2" /></bezel>
<bezel element="text_7"><bounds x="-0.8" y="66.5" width="2" height="2" /></bezel>
<bezel element="text_8"><bounds x="-0.8" y="76.5" width="2" height="2" /></bezel>
<bezel element="text_a"><bounds x="6.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_b"><bounds x="16.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_c"><bounds x="26.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_d"><bounds x="36.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_e"><bounds x="46.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_f"><bounds x="56.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_g"><bounds x="66.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_h"><bounds x="76.5" y="84" width="2" height="2" /></bezel>
<!-- board bezel -->
<bezel element="black"><bounds x="2" y="2" width="81" height="81" /></bezel>
<bezel element="white"><bounds x="3" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="3" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="13" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="23" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="33" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="43" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="53" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="63" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="3" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="13" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="23" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="33" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="43" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="53" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="63" y="73" width="9" height="9" /></bezel>
<bezel element="white"><bounds x="73" y="73" width="9" height="9" /></bezel>
<bezel element="disk_black"><bounds x="21.25" y="21.25" width="2.5" height="2.5" /></bezel>
<bezel element="disk_black"><bounds x="21.25" y="61.25" width="2.5" height="2.5" /></bezel>
<bezel element="disk_black"><bounds x="61.25" y="21.25" width="2.5" height="2.5" /></bezel>
<bezel element="disk_black"><bounds x="61.25" y="61.25" width="2.5" height="2.5" /></bezel>
<bezel element="text_sb"><bounds x="33.1" y="36.5" width="8.8" height="2" /></bezel>
<bezel element="text_sa"><bounds x="43.1" y="36.5" width="8.8" height="2" /></bezel>
<bezel element="text_mon"><bounds x="33.1" y="46.5" width="8.8" height="2" /></bezel>
<bezel element="text_exp"><bounds x="43.1" y="46.5" width="8.8" height="2" /></bezel>
<!-- board leds -->
<bezel name="4.7" element="led"><bounds x="2.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="5.7" element="led"><bounds x="12.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="6.7" element="led"><bounds x="22.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="7.7" element="led"><bounds x="32.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="8.7" element="led"><bounds x="42.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="9.7" element="led"><bounds x="52.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="10.7" element="led"><bounds x="62.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="11.7" element="led"><bounds x="72.5" y="11" width="1.5" height="1.5" /></bezel>
<bezel name="4.6" element="led"><bounds x="2.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="5.6" element="led"><bounds x="12.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="6.6" element="led"><bounds x="22.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="7.6" element="led"><bounds x="32.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="8.6" element="led"><bounds x="42.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="9.6" element="led"><bounds x="52.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="10.6" element="led"><bounds x="62.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="11.6" element="led"><bounds x="72.5" y="21" width="1.5" height="1.5" /></bezel>
<bezel name="4.5" element="led"><bounds x="2.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="5.5" element="led"><bounds x="12.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="6.5" element="led"><bounds x="22.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="7.5" element="led"><bounds x="32.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="8.5" element="led"><bounds x="42.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="9.5" element="led"><bounds x="52.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="10.5" element="led"><bounds x="62.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="11.5" element="led"><bounds x="72.5" y="31" width="1.5" height="1.5" /></bezel>
<bezel name="4.4" element="led"><bounds x="2.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="5.4" element="led"><bounds x="12.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="6.4" element="led"><bounds x="22.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="7.4" element="led"><bounds x="32.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="8.4" element="led"><bounds x="42.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="9.4" element="led"><bounds x="52.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="10.4" element="led"><bounds x="62.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="11.4" element="led"><bounds x="72.5" y="41" width="1.5" height="1.5" /></bezel>
<bezel name="4.3" element="led"><bounds x="2.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="5.3" element="led"><bounds x="12.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="6.3" element="led"><bounds x="22.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="7.3" element="led"><bounds x="32.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="8.3" element="led"><bounds x="42.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="9.3" element="led"><bounds x="52.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="10.3" element="led"><bounds x="62.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="11.3" element="led"><bounds x="72.5" y="51" width="1.5" height="1.5" /></bezel>
<bezel name="4.2" element="led"><bounds x="2.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="5.2" element="led"><bounds x="12.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="6.2" element="led"><bounds x="22.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="7.2" element="led"><bounds x="32.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="8.2" element="led"><bounds x="42.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="9.2" element="led"><bounds x="52.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="10.2" element="led"><bounds x="62.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="11.2" element="led"><bounds x="72.5" y="61" width="1.5" height="1.5" /></bezel>
<bezel name="4.1" element="led"><bounds x="2.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="5.1" element="led"><bounds x="12.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="6.1" element="led"><bounds x="22.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="7.1" element="led"><bounds x="32.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="8.1" element="led"><bounds x="42.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="9.1" element="led"><bounds x="52.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="10.1" element="led"><bounds x="62.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="11.1" element="led"><bounds x="72.5" y="71" width="1.5" height="1.5" /></bezel>
<bezel name="4.0" element="led"><bounds x="2.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="5.0" element="led"><bounds x="12.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="6.0" element="led"><bounds x="22.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="7.0" element="led"><bounds x="32.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="8.0" element="led"><bounds x="42.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="9.0" element="led"><bounds x="52.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="10.0" element="led"><bounds x="62.5" y="81" width="1.5" height="1.5" /></bezel>
<bezel name="11.0" element="led"><bounds x="72.5" y="81" width="1.5" height="1.5" /></bezel>
<!-- board sensors -->
<bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="13" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="23" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="33" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="43" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="53" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="63" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="73" y="3" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="3" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="23" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="33" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="43" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="53" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="63" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="73" y="13" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="3" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="13" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="33" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="43" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="53" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="63" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="73" y="23" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="3" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="13" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="23" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="43" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="53" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="63" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="73" y="33" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="13" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="23" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="33" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="53" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="63" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="73" y="43" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="23" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="33" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="43" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="63" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="73" y="53" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="3" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="13" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="23" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="33" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="43" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="53" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="73" y="63" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="13" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="23" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="33" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="43" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="53" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="63" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="73" width="9" height="9" /><color alpha="0.4" /></bezel>
<!-- right side -->
<bezel name="12.0" element="led"><bounds x="88.95" y="6.75" width="1.5" height="1.5" /></bezel>
<bezel element="disk_black"><bounds x="86" y="13" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="21.8" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="30.6" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="39.4" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="48.2" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="57" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="65.8" width="7.4" height="7.4" /></bezel>
<bezel element="disk_black"><bounds x="86" y="74.6" width="7.4" height="7.4" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="14.2" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="23" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="31.8" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="40.6" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="49.4" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="58.2" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="67" width="5" height="5" /></bezel>
<bezel element="disk_white"><bounds x="87.2" y="75.8" width="5" height="5" /></bezel>
<bezel element="text_re"><bounds x="87.2" y="15.2" width="5" height="3" /></bezel>
<bezel element="text_spk"><bounds x="87.2" y="24" width="5" height="3" /></bezel>
<bezel element="text_pv"><bounds x="87.2" y="32.8" width="5" height="3" /></bezel>
<bezel element="text_lv"><bounds x="87.2" y="41.6" width="5" height="3" /></bezel>
<bezel element="text_cl"><bounds x="87.2" y="50.4" width="5" height="3" /></bezel>
<bezel element="text_dm"><bounds x="87.2" y="59.2" width="5" height="3" /></bezel>
<bezel element="text_rv"><bounds x="87.2" y="68" width="5" height="3" /></bezel>
<bezel element="text_st"><bounds x="87.2" y="76.8" width="5" height="3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="86" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="86" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x20"><bounds x="86" y="30.6" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x10"><bounds x="86" y="39.4" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x08"><bounds x="86" y="48.2" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x04"><bounds x="86" y="57" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x02"><bounds x="86" y="65.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x01"><bounds x="86" y="74.6" width="7.4" height="7.4" /><color alpha="0.3" /></bezel>
</view> </view>
</mamelayout> </mamelayout>

View File

@ -192,6 +192,7 @@ static ADDRESS_MAP_START( lk201_map, AS_PROGRAM, 8, lk201_device )
AM_RANGE(0x0004, 0x0006) AM_READWRITE(ddr_r, ddr_w) AM_RANGE(0x0004, 0x0006) AM_READWRITE(ddr_r, ddr_w)
AM_RANGE(0x000a, 0x000c) AM_READWRITE(spi_r, spi_w) AM_RANGE(0x000a, 0x000c) AM_READWRITE(spi_r, spi_w)
AM_RANGE(0x000d, 0x0011) AM_READWRITE(sci_r, sci_w) AM_RANGE(0x000d, 0x0011) AM_READWRITE(sci_r, sci_w)
AM_RANGE(0x0012, 0x001b) AM_READWRITE(timer_r, timer_w)
AM_RANGE(0x0050, 0x00ff) AM_RAM AM_RANGE(0x0050, 0x00ff) AM_RAM
AM_RANGE(0x0100, 0x1fff) AM_ROM AM_REGION(LK201_CPU_TAG, 0x100) AM_RANGE(0x0100, 0x1fff) AM_ROM AM_REGION(LK201_CPU_TAG, 0x100)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -495,6 +496,7 @@ lk201_device::lk201_device(const machine_config &mconfig, const char *tag, devic
void lk201_device::device_start() void lk201_device::device_start()
{ {
m_count = timer_alloc(1);
m_tx_handler.resolve_safe(); m_tx_handler.resolve_safe();
} }
@ -507,6 +509,8 @@ void lk201_device::device_reset()
{ {
set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1);
set_rate(4800); set_rate(4800);
m_count->adjust(attotime::from_hz(1200), 0, attotime::from_hz(1200));
memset(m_timer.regs, 0, sizeof(m_timer.regs));
sci_status = (SCSR_TC | SCSR_TDRE); sci_status = (SCSR_TC | SCSR_TDRE);
@ -522,6 +526,13 @@ void lk201_device::device_reset()
void lk201_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) void lk201_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{ {
if(id == 1)
{
if(m_timer.tcr & 0x40)
m_maincpu->set_input_line(M68HC05EG_INT_TIMER, ASSERT_LINE);
m_timer.tsr |= 0x40;
}
else
device_serial_interface::device_timer(timer, id, param, ptr); device_serial_interface::device_timer(timer, id, param, ptr);
} }
@ -556,6 +567,22 @@ void lk201_device::update_interrupts()
} }
} }
READ8_MEMBER( lk201_device::timer_r )
{
UINT8 ret = m_timer.regs[offset];
if(m_timer.tsr)
{
m_timer.tsr = 0;
m_maincpu->set_input_line(M68HC05EG_INT_TIMER, CLEAR_LINE);
}
return ret;
}
WRITE8_MEMBER( lk201_device::timer_w )
{
m_timer.regs[offset] = data;
}
READ8_MEMBER( lk201_device::ddr_r ) READ8_MEMBER( lk201_device::ddr_r )
{ {
return ddrs[offset]; return ddrs[offset];
@ -565,9 +592,9 @@ WRITE8_MEMBER( lk201_device::ddr_w )
{ {
// printf("%02x to PORT %c DDR (PC=%x)\n", data, 'A' + offset, m_maincpu->pc()); // printf("%02x to PORT %c DDR (PC=%x)\n", data, 'A' + offset, m_maincpu->pc());
send_port(space, offset, ports[offset] & data); UINT8 olddata = ddrs[offset];
ddrs[offset] = data; ddrs[offset] = data;
send_port(space, offset, ports[offset] & olddata);
} }
READ8_MEMBER( lk201_device::ports_r ) READ8_MEMBER( lk201_device::ports_r )
@ -586,14 +613,17 @@ READ8_MEMBER( lk201_device::ports_r )
WRITE8_MEMBER( lk201_device::ports_w ) WRITE8_MEMBER( lk201_device::ports_w )
{ {
send_port(space, offset, data); UINT8 olddata = ports[offset];
ports[offset] = data; ports[offset] = data;
send_port(space, offset, olddata & ddrs[offset]);
} }
void lk201_device::send_port(address_space &space, UINT8 offset, UINT8 data) void lk201_device::send_port(address_space &space, UINT8 offset, UINT8 olddata)
{ {
// printf("PORT %c write %02x (DDR = %02x) (PC=%x)\n", 'A' + offset, data, ddrs[offset], m_maincpu->pc()); // printf("PORT %c write %02x (DDR = %02x) (PC=%x)\n", 'A' + offset, data, ddrs[offset], m_maincpu->pc());
UINT8 porta = ports[0] & ddrs[0];
UINT8 portb = ports[1] & ddrs[1];
UINT8 portc = ports[2] & ddrs[2];
switch (offset) switch (offset)
{ {
@ -605,36 +635,36 @@ void lk201_device::send_port(address_space &space, UINT8 offset, UINT8 data)
case 2: // port C case 2: // port C
// Check for keyboard read strobe // Check for keyboard read strobe
if (((data & 0x40) == 0) && (ports[offset] & 0x40)) if (((portc & 0x40) == 0) && (olddata & 0x40))
{ {
#ifndef KEYBOARD_WORKAROUND #ifndef KEYBOARD_WORKAROUND
if (ports[0] & 0x1) kbd_data = m_kbd0->read(); if (porta & 0x1) kbd_data = m_kbd0->read();
if (ports[0] & 0x2) kbd_data = m_kbd1->read(); if (porta & 0x2) kbd_data = m_kbd1->read();
if (ports[0] & 0x4) kbd_data = m_kbd2->read(); if (porta & 0x4) kbd_data = m_kbd2->read();
if (ports[0] & 0x8) kbd_data = m_kbd3->read(); if (porta & 0x8) kbd_data = m_kbd3->read();
if (ports[0] & 0x10) kbd_data = m_kbd4->read(); if (porta & 0x10) kbd_data = m_kbd4->read();
if (ports[0] & 0x20) kbd_data = m_kbd5->read(); if (porta & 0x20) kbd_data = m_kbd5->read();
if (ports[0] & 0x40) kbd_data = m_kbd6->read(); if (porta & 0x40) kbd_data = m_kbd6->read();
if (ports[0] & 0x80) kbd_data = m_kbd7->read(); if (porta & 0x80) kbd_data = m_kbd7->read();
if (ports[1] & 0x1) kbd_data = m_kbd8->read(); if (portb & 0x1) kbd_data = m_kbd8->read();
if (ports[1] & 0x2) kbd_data = m_kbd9->read(); if (portb & 0x2) kbd_data = m_kbd9->read();
if (ports[1] & 0x4) kbd_data = m_kbd10->read(); if (portb & 0x4) kbd_data = m_kbd10->read();
if (ports[1] & 0x8) kbd_data = m_kbd11->read(); if (portb & 0x8) kbd_data = m_kbd11->read();
if (ports[1] & 0x10) kbd_data = m_kbd12->read(); if (portb & 0x10) kbd_data = m_kbd12->read();
if (ports[1] & 0x20) kbd_data = m_kbd13->read(); if (portb & 0x20) kbd_data = m_kbd13->read();
if (ports[1] & 0x40) kbd_data = m_kbd14->read(); if (portb & 0x40) kbd_data = m_kbd14->read();
if (ports[1] & 0x80) kbd_data = m_kbd15->read(); if (portb & 0x80) kbd_data = m_kbd15->read();
if (ports[2] & 0x1) kbd_data = m_kbd16->read(); if (portc & 0x1) kbd_data = m_kbd16->read();
if (ports[2] & 0x2) kbd_data = m_kbd17->read(); if (portc & 0x2) kbd_data = m_kbd17->read();
} }
// Check for LED update strobe // Check for LED update strobe
if (((data & 0x80) == 0) && (ports[offset] & 0x80)) if (((portc & 0x80) == 0) && (olddata & 0x80))
{ {
// Lower nibble contains the LED values (1 = on, 0 = off) // Lower nibble contains the LED values (1 = on, 0 = off)
machine().output().set_value("led_wait" , (led_data & 0x1) == 0); machine().output().set_value("led_wait" , (led_data & 0x1) == 1);
machine().output().set_value("led_compose", (led_data & 0x2) == 0); machine().output().set_value("led_compose", (led_data & 0x2) == 2);
machine().output().set_value("led_hold" , (led_data & 0x4) == 0); machine().output().set_value("led_lock" , (led_data & 0x4) == 4);
machine().output().set_value("led_lock" , (led_data & 0x8) == 0); machine().output().set_value("led_hold" , (led_data & 0x8) == 8);
} }
#endif #endif

View File

@ -53,6 +53,8 @@ public:
DECLARE_WRITE8_MEMBER( sci_w ); DECLARE_WRITE8_MEMBER( sci_w );
DECLARE_READ8_MEMBER( spi_r ); DECLARE_READ8_MEMBER( spi_r );
DECLARE_WRITE8_MEMBER( spi_w ); DECLARE_WRITE8_MEMBER( spi_w );
DECLARE_READ8_MEMBER( timer_r );
DECLARE_WRITE8_MEMBER( timer_w );
template<class _Object> static devcb_base &set_tx_handler(device_t &device, _Object wr) { return downcast<lk201_device &>(device).m_tx_handler.set_callback(wr); } template<class _Object> static devcb_base &set_tx_handler(device_t &device, _Object wr) { return downcast<lk201_device &>(device).m_tx_handler.set_callback(wr); }
@ -76,6 +78,24 @@ private:
UINT8 led_data; UINT8 led_data;
UINT8 kbd_data; UINT8 kbd_data;
union {
struct {
UINT8 tcr;
UINT8 tsr;
UINT8 icrh;
UINT8 icrl;
UINT8 ocrh;
UINT8 ocrl;
UINT8 crh;
UINT8 crl;
UINT8 acrh;
UINT8 acrl;
};
UINT8 regs[10];
} m_timer;
emu_timer *m_count;
UINT8 sci_ctl2; UINT8 sci_ctl2;
UINT8 sci_status; UINT8 sci_status;
//UINT8 sci_data; //UINT8 sci_data;

View File

@ -1467,7 +1467,8 @@ alchemy
atkgld atkgld
amzqueen amzqueen
amztempl amztempl
antcleo // (c) 2004 antcleo
antcleom // (c) 2004
apocof apocof
arabnga6 arabnga6
arabnga6u arabnga6u
@ -1497,6 +1498,7 @@ canaryrc
cmtonig cmtonig
cinhell cinhell
csd csd
csdsp
csdm // (c) 2003 csdm // (c) 2003
csdce csdce
csret csret
@ -1558,7 +1560,7 @@ indremce
indremll indremll
indrem2c indrem2c
indremmm // (c) 2003 indremmm // (c) 2003
indremcm indgldcm
indprncs indprncs
jailbrk jailbrk
jefffox jefffox
@ -1566,6 +1568,7 @@ jewelcm
kingnep kingnep
kingnile kingnile
kingnilea kingnilea
kingpeng
koalama6 koalama6
kohinoor kohinoor
lgfish lgfish
@ -1609,6 +1612,7 @@ pcfavor
pcbydem pcbydem
pcmostw pcmostw
pcgold pcgold
pcplat
pwsuper pwsuper
pompeia6 pompeia6
pompeia6u pompeia6u
@ -1617,6 +1621,7 @@ prophecy
qnile qnile
qnilese qnilese
qnilejc qnilejc
qnilejcsp
qsheeba qsheeba
raprichs raprichs
redbara6 redbara6
@ -1625,6 +1630,7 @@ ruprup
rubymag rubymag
rumbreel rumbreel
scatmag2 scatmag2
scatmag2sa
sealdeal sealdeal
shorthng shorthng
shamnmg shamnmg
@ -1677,6 +1683,7 @@ wldpanth
wldstall wldstall
wtepee wtepee
wwaratah wwaratah
wwaratahsp
wways wways
wwaysm // (c) 2003 wwaysm // (c) 2003
wzwaysll wzwaysll
@ -12739,8 +12746,10 @@ galgame // (c) 1971 Computer Recreations, Inc
@source:galivan.cpp @source:galivan.cpp
dangar // (c) 1986 dangar // (c) 1986
dangar2 // (c) 1986 dangara // (c) 1986
dangarb // bootleg dangarb // (c) 1986
dangarj // (c) 1986
dangarbt // bootleg
galivan // (c) 1985 galivan // (c) 1985
galivan2 // (c) 1985 galivan2 // (c) 1985
galivan3 // (c) 1985 galivan3 // (c) 1985
@ -14666,6 +14675,7 @@ wfortunea // (c) 1989 GameTek
@source:itgambl2.cpp @source:itgambl2.cpp
cmagica // (c) 200? unknown cmagica // (c) 200? unknown
mcard_h8 // (c) 200? unknown
elvis // (c) 200? unknown elvis // (c) 200? unknown
europass // (c) 200? unknown europass // (c) 200? unknown
laser2k1 // (c) 2001 unknown laser2k1 // (c) 2001 unknown
@ -16641,6 +16651,7 @@ hypbbc2p // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX
hypbbc2pk // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA) hypbbc2pk // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA)
hyperbbc // 1998 - Hyper Bishi Bashi (GQ876 VER. EAA) hyperbbc // 1998 - Hyper Bishi Bashi (GQ876 VER. EAA)
hyperbbca // 1998 - Hyper Bishi Bashi (GQ876 VER. AAA) hyperbbca // 1998 - Hyper Bishi Bashi (GQ876 VER. AAA)
hyperbbck // 1998 - Hyper Bishi Bashi (GE876 VER. KAA)
konam80a // 1998 - Konami 80's AC Special (GC826 VER. AAA) konam80a // 1998 - Konami 80's AC Special (GC826 VER. AAA)
konam80j // 1998 - Konami 80's Gallery (GC826 VER. JAA) konam80j // 1998 - Konami 80's Gallery (GC826 VER. JAA)
konam80k // 1998 - Konami 80's AC Special (GC826 VER. KAA) konam80k // 1998 - Konami 80's AC Special (GC826 VER. KAA)
@ -35305,6 +35316,7 @@ outzonea // TP-O18 (c) 1990 Toaplan
outzoneb // TP-O18 (c) 1990 Toaplan outzoneb // TP-O18 (c) 1990 Toaplan
outzonec // TP-O18 (c) 1990 Toaplan outzonec // TP-O18 (c) 1990 Toaplan
outzoneh // TP-O18 (c) 1990 Toaplan outzoneh // TP-O18 (c) 1990 Toaplan
outzonecv // TP-O18 (c) 1990 Toaplan (TP-015 conversion)
rallybik // B45 / TP-O12 (c) 1988 Taito rallybik // B45 / TP-O12 (c) 1988 Taito
samesame // TP-O17 (c) 1989 Toaplan samesame // TP-O17 (c) 1989 Toaplan
samesame2 // TP-O17 (c) 1989 Toaplan samesame2 // TP-O17 (c) 1989 Toaplan

View File

@ -276,7 +276,7 @@ void turbo_state::turbo_prepare_sprites(UINT8 y, sprite_info *info)
/* compute the sprite information, which was done on the previous scanline during HBLANK */ /* compute the sprite information, which was done on the previous scanline during HBLANK */
for (sprnum = 0; sprnum < 16; sprnum++) for (sprnum = 0; sprnum < 16; sprnum++)
{ {
UINT8 *rambase = &m_spriteram[sprnum * 0x10]; UINT8 *rambase = &m_alt_spriteram[sprnum * 8];
int level = sprnum & 7; int level = sprnum & 7;
UINT8 clo, chi; UINT8 clo, chi;
UINT32 sum; UINT32 sum;

View File

@ -301,35 +301,6 @@ void debug_imgui::handle_keys()
m_hide = true; m_hide = true;
} }
/* if(m_machine->input().code_pressed_once(KEYCODE_UP))
io.KeysDown[ImGuiKey_UpArrow] = true;
if(m_machine->input().code_pressed_once(KEYCODE_DOWN))
io.KeysDown[ImGuiKey_DownArrow] = true;
if(m_machine->input().code_pressed_once(KEYCODE_LEFT))
io.KeysDown[ImGuiKey_LeftArrow] = true;
if(m_machine->input().code_pressed_once(KEYCODE_RIGHT))
io.KeysDown[ImGuiKey_RightArrow] = true;
if(m_machine->input().code_pressed(KEYCODE_TAB))
io.KeysDown[ImGuiKey_Tab] = true;
if(m_machine->input().code_pressed_once(KEYCODE_PGUP))
{
io.KeysDown[ImGuiKey_PageUp] = true;
}
if(m_machine->input().code_pressed_once(KEYCODE_PGDN))
{
io.KeysDown[ImGuiKey_PageDown] = true;
}
if(m_machine->input().code_pressed_once(KEYCODE_HOME))
{
io.KeysDown[ImGuiKey_Home] = true;
}
if(m_machine->input().code_pressed_once(KEYCODE_END))
{
io.KeysDown[ImGuiKey_End] = true;
}*/
if(m_machine->input().code_pressed(KEYCODE_LCONTROL)) if(m_machine->input().code_pressed(KEYCODE_LCONTROL))
io.KeyCtrl = true; io.KeyCtrl = true;
else else
@ -437,7 +408,13 @@ void debug_imgui::handle_console(running_machine* machine)
{ {
if(view_main_console->exec_cmd && view_main_console->type == DVT_CONSOLE) if(view_main_console->exec_cmd && view_main_console->type == DVT_CONSOLE)
{ {
if(strlen(view_main_console->console_input) > 0) // if console input is empty, then do a single step
if(strlen(view_main_console->console_input) == 0)
{
debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step();
view_main_console->exec_cmd = false;
return;
}
debug_console_execute_command(*m_machine, view_main_console->console_input, 1); debug_console_execute_command(*m_machine, view_main_console->console_input, 1);
// check for commands that start execution (so that input fields can be disabled) // check for commands that start execution (so that input fields can be disabled)
if(strcmp(view_main_console->console_input,"g") == 0) if(strcmp(view_main_console->console_input,"g") == 0)
@ -675,7 +652,7 @@ void debug_imgui::draw_disasm(debug_area* view_ptr, bool* opened)
ImGui::EndMenuBar(); ImGui::EndMenuBar();
} }
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue; ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll;
if(m_running) if(m_running)
flags |= ImGuiInputTextFlags_ReadOnly; flags |= ImGuiInputTextFlags_ReadOnly;
ImGui::Combo("##cpu",&view_ptr->src_sel,get_view_source,view_ptr->view,view_ptr->view->source_list().count()); ImGui::Combo("##cpu",&view_ptr->src_sel,get_view_source,view_ptr->view,view_ptr->view->source_list().count());
@ -781,7 +758,7 @@ void debug_imgui::draw_memory(debug_area* view_ptr, bool* opened)
ImGui::EndMenuBar(); ImGui::EndMenuBar();
} }
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue; ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll;
ImGui::PushItemWidth(100.0f); ImGui::PushItemWidth(100.0f);
if(m_running) if(m_running)
flags |= ImGuiInputTextFlags_ReadOnly; flags |= ImGuiInputTextFlags_ReadOnly;
@ -944,8 +921,6 @@ void debug_imgui::draw_console()
draw_view(view_main_console,false); draw_view(view_main_console,false);
ImGui::EndChild(); ImGui::EndChild();
ImGui::Separator(); ImGui::Separator();
//if(ImGui::IsWindowFocused())
// ImGui::SetKeyboardFocusHere();
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue; ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
if(m_running) if(m_running)
flags |= ImGuiInputTextFlags_ReadOnly; flags |= ImGuiInputTextFlags_ReadOnly;
@ -1045,6 +1020,10 @@ void debug_imgui::init_debugger(running_machine &machine)
io.KeyMap[ImGuiKey_End] = ITEM_ID_END; io.KeyMap[ImGuiKey_End] = ITEM_ID_END;
io.KeyMap[ImGuiKey_Escape] = ITEM_ID_ESC; io.KeyMap[ImGuiKey_Escape] = ITEM_ID_ESC;
io.KeyMap[ImGuiKey_Enter] = ITEM_ID_ENTER; io.KeyMap[ImGuiKey_Enter] = ITEM_ID_ENTER;
io.KeyMap[ImGuiKey_LeftArrow] = ITEM_ID_LEFT;
io.KeyMap[ImGuiKey_RightArrow] = ITEM_ID_RIGHT;
io.KeyMap[ImGuiKey_UpArrow] = ITEM_ID_UP;
io.KeyMap[ImGuiKey_DownArrow] = ITEM_ID_DOWN;
font_name = (downcast<osd_options &>(m_machine->options()).debugger_font()); font_name = (downcast<osd_options &>(m_machine->options()).debugger_font());
font_size = (downcast<osd_options &>(m_machine->options()).debugger_font_size()); font_size = (downcast<osd_options &>(m_machine->options()).debugger_font_size());

View File

@ -15,6 +15,8 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <wrl/client.h>
// XAudio2 include // XAudio2 include
#include <xaudio2.h> #include <xaudio2.h>
@ -92,14 +94,6 @@ struct xaudio2_buffer
struct xaudio2_custom_deleter struct xaudio2_custom_deleter
{ {
public: public:
void operator()(IXAudio2* obj) const
{
if (obj != nullptr)
{
obj->Release();
}
}
void operator()(IXAudio2MasteringVoice* obj) const void operator()(IXAudio2MasteringVoice* obj) const
{ {
if (obj != nullptr) if (obj != nullptr)
@ -120,7 +114,6 @@ public:
}; };
// Typedefs for smart pointers used with customer deleters // Typedefs for smart pointers used with customer deleters
typedef std::unique_ptr<IXAudio2, xaudio2_custom_deleter> xaudio2_ptr;
typedef std::unique_ptr<IXAudio2MasteringVoice, xaudio2_custom_deleter> mastering_voice_ptr; typedef std::unique_ptr<IXAudio2MasteringVoice, xaudio2_custom_deleter> mastering_voice_ptr;
typedef std::unique_ptr<IXAudio2SourceVoice, xaudio2_custom_deleter> src_voice_ptr; typedef std::unique_ptr<IXAudio2SourceVoice, xaudio2_custom_deleter> src_voice_ptr;
@ -190,7 +183,7 @@ class sound_xaudio2 : public osd_module, public sound_module, public IXAudio2Voi
private: private:
const wchar_t* XAUDIO_DLLS[2] = { L"XAudio2_9.dll", L"XAudio2_8.dll" }; const wchar_t* XAUDIO_DLLS[2] = { L"XAudio2_9.dll", L"XAudio2_8.dll" };
xaudio2_ptr m_xAudio2; Microsoft::WRL::ComPtr<IXAudio2> m_xAudio2;
mastering_voice_ptr m_masterVoice; mastering_voice_ptr m_masterVoice;
src_voice_ptr m_sourceVoice; src_voice_ptr m_sourceVoice;
DWORD m_sample_bytes; DWORD m_sample_bytes;
@ -209,6 +202,7 @@ private:
UINT32 m_underflows; UINT32 m_underflows;
BOOL m_in_underflow; BOOL m_in_underflow;
xaudio2_create_ptr XAudio2Create; xaudio2_create_ptr XAudio2Create;
BOOL m_initialized;
public: public:
sound_xaudio2() : sound_xaudio2() :
@ -229,7 +223,8 @@ public:
m_overflows(0), m_overflows(0),
m_underflows(0), m_underflows(0),
m_in_underflow(FALSE), m_in_underflow(FALSE),
XAudio2Create("XAudio2Create", XAUDIO_DLLS, ARRAY_LENGTH(XAUDIO_DLLS)) XAudio2Create("XAudio2Create", XAUDIO_DLLS, ARRAY_LENGTH(XAUDIO_DLLS)),
m_initialized(FALSE)
{ {
} }
@ -277,6 +272,7 @@ bool sound_xaudio2::probe()
int sound_xaudio2::init(osd_options const &options) int sound_xaudio2::init(osd_options const &options)
{ {
HRESULT result; HRESULT result;
WAVEFORMATEX format = {0};
CoInitializeEx(nullptr, COINIT_MULTITHREADED); CoInitializeEx(nullptr, COINIT_MULTITHREADED);
// Make sure our XAudio2Create entrypoint is bound // Make sure our XAudio2Create entrypoint is bound
@ -288,12 +284,9 @@ int sound_xaudio2::init(osd_options const &options)
} }
// Create the IXAudio2 object // Create the IXAudio2 object
IXAudio2 *temp_xaudio2 = nullptr; HR_GOERR(this->XAudio2Create(m_xAudio2.GetAddressOf(), 0, XAUDIO2_DEFAULT_PROCESSOR));
HR_RET1(this->XAudio2Create(&temp_xaudio2, 0, XAUDIO2_DEFAULT_PROCESSOR));
m_xAudio2 = xaudio2_ptr(temp_xaudio2);
// make a format description for what we want // make a format description for what we want
WAVEFORMATEX format = { 0 };
format.wBitsPerSample = 16; format.wBitsPerSample = 16;
format.wFormatTag = WAVE_FORMAT_PCM; format.wFormatTag = WAVE_FORMAT_PCM;
format.nChannels = 2; format.nChannels = 2;
@ -312,15 +305,20 @@ int sound_xaudio2::init(osd_options const &options)
m_hEventExiting = CreateEvent(nullptr, FALSE, FALSE, nullptr); m_hEventExiting = CreateEvent(nullptr, FALSE, FALSE, nullptr);
// create the voices and start them // create the voices and start them
HR_RET1(create_voices(format)); HR_GOERR(create_voices(format));
HR_RET1(m_sourceVoice->Start()); HR_GOERR(m_sourceVoice->Start());
// Start the thread listening // Start the thread listening
m_audioThread = std::thread([](sound_xaudio2* self) { self->process_audio(); }, this); m_audioThread = std::thread([](sound_xaudio2* self) { self->process_audio(); }, this);
osd_printf_verbose("Sound: XAudio2 initialized\n"); osd_printf_verbose("Sound: XAudio2 initialized\n");
m_initialized = TRUE;
return 0; return 0;
Error:
this->exit();
return 1;
} }
//============================================================ //============================================================
@ -330,25 +328,44 @@ int sound_xaudio2::init(osd_options const &options)
void sound_xaudio2::exit() void sound_xaudio2::exit()
{ {
// Wait on processing thread to end // Wait on processing thread to end
if (m_hEventExiting)
{
SetEvent(m_hEventExiting); SetEvent(m_hEventExiting);
m_hEventExiting = nullptr;
}
if (m_audioThread.joinable())
m_audioThread.join(); m_audioThread.join();
if (m_hEventBufferCompleted)
{
CloseHandle(m_hEventBufferCompleted); CloseHandle(m_hEventBufferCompleted);
m_hEventBufferCompleted = nullptr;
}
if (m_hEventDataAvailable)
{
CloseHandle(m_hEventDataAvailable); CloseHandle(m_hEventDataAvailable);
m_hEventDataAvailable = nullptr;
}
if (m_hEventExiting)
{
CloseHandle(m_hEventExiting); CloseHandle(m_hEventExiting);
m_hEventExiting = nullptr;
}
m_sourceVoice.reset(); m_sourceVoice.reset();
m_masterVoice.reset(); m_masterVoice.reset();
m_xAudio2.reset(); m_xAudio2 = nullptr;
m_buffer.reset(); m_buffer.reset();
m_buffer_pool.reset(); m_buffer_pool.reset();
CoUninitialize();
if (m_overflows != 0 || m_underflows != 0) if (m_overflows != 0 || m_underflows != 0)
osd_printf_verbose("Sound: overflows=%u, underflows=%u\n", m_overflows, m_underflows); osd_printf_verbose("Sound: overflows=%u, underflows=%u\n", m_overflows, m_underflows);
osd_printf_verbose("Sound: XAudio2 deinitialized\n"); osd_printf_verbose("Sound: XAudio2 deinitialized\n");
m_initialized = FALSE;
} }
//============================================================ //============================================================
@ -360,7 +377,7 @@ void sound_xaudio2::update_audio_stream(
INT16 const *buffer, INT16 const *buffer,
int samples_this_frame) int samples_this_frame)
{ {
if ((sample_rate() == 0) || !m_buffer) if (!m_initialized || sample_rate() == 0 || !m_buffer)
return; return;
UINT32 const bytes_this_frame = samples_this_frame * m_sample_bytes; UINT32 const bytes_this_frame = samples_this_frame * m_sample_bytes;
@ -395,6 +412,9 @@ void sound_xaudio2::update_audio_stream(
void sound_xaudio2::set_mastervolume(int attenuation) void sound_xaudio2::set_mastervolume(int attenuation)
{ {
if (!m_initialized)
return;
assert(m_sourceVoice); assert(m_sourceVoice);
HRESULT result; HRESULT result;
@ -503,7 +523,7 @@ HRESULT sound_xaudio2::create_voices(const WAVEFORMATEX &format)
HRESULT result; HRESULT result;
IXAudio2MasteringVoice *temp_master_voice = nullptr; IXAudio2MasteringVoice *temp_master_voice = nullptr;
HR_RET1( HR_RETHR(
m_xAudio2->CreateMasteringVoice( m_xAudio2->CreateMasteringVoice(
&temp_master_voice, &temp_master_voice,
format.nChannels, format.nChannels,
@ -513,7 +533,7 @@ HRESULT sound_xaudio2::create_voices(const WAVEFORMATEX &format)
// create the source voice // create the source voice
IXAudio2SourceVoice *temp_source_voice = nullptr; IXAudio2SourceVoice *temp_source_voice = nullptr;
HR_RET1(m_xAudio2->CreateSourceVoice( HR_RETHR(m_xAudio2->CreateSourceVoice(
&temp_source_voice, &temp_source_voice,
&format, &format,
XAUDIO2_VOICE_NOSRC | XAUDIO2_VOICE_NOPITCH, XAUDIO2_VOICE_NOSRC | XAUDIO2_VOICE_NOPITCH,