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.
-->
<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">
<description>3x3 Eyes: Sanjiyan Henjou</description>
<year>1993</year>
@ -59,6 +71,77 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>38-man Kilo no Kokuu</description>
<year>1989</year>
@ -357,6 +440,33 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Awesome</description>
<year>1992</year>
@ -504,6 +614,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Branmarker</description>
<year>1991</year>
@ -570,6 +691,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Can Can Bunny Extra</description>
<year>1993</year>
@ -603,6 +735,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Classic Road</description>
<year>1994</year>
@ -614,6 +757,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Crystal Rinal</description>
<year>1994</year>
@ -1775,6 +1929,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Indiana Jones and the Last Crusade</description>
<year>1990</year>
@ -2006,6 +2171,33 @@ User/save disks that can be created from the game itself are not included.
</part>
</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. -->
<software name="ktiger">
<description>Kyuukyoku Tiger</description>
@ -2405,6 +2597,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Muscle Bomber: The Body Explosion</description>
<year>1993</year>
@ -2561,6 +2764,17 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Monkey Island 2: LeChuck's Revenge</description>
<year>1994</year>
@ -3799,6 +4013,297 @@ User/save disks that can be created from the game itself are not included.
</part>
</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">
<description>Ultima IV: Quest of the Avatar</description>
<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">
<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">
<software name="007twine">
@ -3981,7 +4010,8 @@ Unreleased (music source code exists, possibly no prototypes exist)
<feature name="battery" value="Batt CR1616" />
<feature name="slot" value="rom_mbc5" />
<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 name="nvram" size="32768">
</dataarea>

11183
hash/n64.xml

File diff suppressed because it is too large Load Diff

View File

@ -164,6 +164,279 @@
</dataarea>
</part>
</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>

View File

@ -1051,8 +1051,8 @@ $(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile $(SCRIPTS) $(GENIE)
ifndef ANDROID_NDK_ARM
$(error ANDROID_NDK_ARM is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
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
@ -1061,8 +1061,8 @@ android-arm: generate $(PROJECTDIR_SDL)/gmake-android-arm/Makefile
ifndef ANDROID_NDK_ARM
$(error ANDROID_NDK_ARM is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile
$(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
$(error ANDROID_NDK_ARM64 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
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
@ -1085,8 +1085,8 @@ android-arm64: generate $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile
ifndef ANDROID_NDK_ARM64
$(error ANDROID_NDK_ARM64 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile
$(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
$(error ANDROID_NDK_MIPS is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
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
@ -1109,8 +1109,8 @@ android-mips: generate $(PROJECTDIR_SDL)/gmake-android-mips/Makefile
ifndef ANDROID_NDK_MIPS
$(error ANDROID_NDK_MIPS is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile
$(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
$(error ANDROID_NDK_MIPS64 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
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
@ -1133,8 +1133,8 @@ android-mips64: generate $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile
ifndef ANDROID_NDK_MIPS64
$(error ANDROID_NDK_MIPS64 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile
$(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
$(error ANDROID_NDK_X86 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
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
@ -1157,8 +1157,8 @@ android-x86: generate $(PROJECTDIR_SDL)/gmake-android-x86/Makefile
ifndef ANDROID_NDK_X86
$(error ANDROID_NDK_X86 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile
$(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
$(error ANDROID_NDK_X64 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
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
@ -1181,8 +1181,8 @@ android-x64: generate $(PROJECTDIR_SDL)/gmake-android-x64/Makefile
ifndef ANDROID_NDK_X64
$(error ANDROID_NDK_X64 is not set)
endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
ifndef ANDROID_NDK_LLVM
$(error ANDROID_NDK_LLVM is not set)
endif
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile
$(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"
end
if _OPTIONS["with-bundled-sdl2"]~=nil or _OPTIONS["targetos"]=="android" then
if _OPTIONS["with-bundled-sdl2"]~=nil then
includedirs {
GEN_DIR .. "includes",
}
@ -295,10 +295,12 @@ if BASE_TARGETOS=="unix" then
"/usr/openwin/lib",
}
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 {
"SDL2",
}
end
else
local str = backtick(sdlconfigcmd() .. " --libs")
addlibfromstring(str)

View File

@ -114,80 +114,71 @@ function toolchain(_buildDir, _subDir)
os.exit(1)
end
if "android-arm" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_ARM") or not os.getenv("ANDROID_NDK_ROOT") then
print("Set ANDROID_NDK_ARM and ANDROID_NDK_ROOT envrionment variables.")
if string.find(_OPTIONS["gcc"], "android") then
if not os.getenv("ANDROID_NDK_LLVM") then
print("Set ANDROID_NDK_LLVM envrionment variables.")
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_ARM)/bin/arm-linux-androideabi-ar"
premake.gcc.cc = "$(ANDROID_NDK_LLVM)/bin/clang"
premake.gcc.cxx = "$(ANDROID_NDK_LLVM)/bin/clang++"
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")
end
if "android-arm64" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_ARM64") or not os.getenv("ANDROID_NDK_ROOT") then
print("Set ANDROID_NDK_ARM64 and ANDROID_NDK_ROOT envrionment variables.")
if not os.getenv("ANDROID_NDK_ARM64") then
print("Set ANDROID_NDK_ARM64 envrionment variables.")
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_ARM64)/bin/aarch64-linux-android-ar.exe"
premake.gcc.ar = "$(ANDROID_NDK_ARM64)/bin/aarch64-linux-android-ar"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm64")
end
if "android-mips" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_MIPS") or not os.getenv("ANDROID_NDK_ROOT") then
print("Set ANDROID_NDK_MIPS and ANDROID_NDK_ROOT envrionment variables.")
if not os.getenv("ANDROID_NDK_MIPS") then
print("Set ANDROID_NDK_MIPS envrionment variables.")
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.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips")
end
if "android-mips64" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_MIPS64") or not os.getenv("ANDROID_NDK_ROOT") then
print("Set ANDROID_NDK_MIPS64 and ANDROID_NDK_ROOT envrionment variables.")
if not os.getenv("ANDROID_NDK_MIPS64") then
print("Set ANDROID_NDK_MIPS64 envrionment variables.")
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_MIPS64)/bin/mips64el-linux-android-ar.exe"
premake.gcc.ar = "$(ANDROID_NDK_MIPS64)/bin/mips64el-linux-android-ar"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips64")
end
if "android-x86" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_X86") or not os.getenv("ANDROID_NDK_ROOT") then
print("Set ANDROID_NDK_X86 and ANDROID_NDK_ROOT envrionment variables.")
if not os.getenv("ANDROID_NDK_X86") then
print("Set ANDROID_NDK_X86 envrionment variables.")
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.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x86")
end
if "android-x64" == _OPTIONS["gcc"] then
if not os.getenv("ANDROID_NDK_X64") or not os.getenv("ANDROID_NDK_ROOT") then
print("Set ANDROID_NDK_X64 and ANDROID_NDK_ROOT envrionment variables.")
if not os.getenv("ANDROID_NDK_X64") then
print("Set ANDROID_NDK_X64 envrionment variables.")
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_X64)/bin/x86_64-linux-android-ar.exe"
premake.gcc.ar = "$(ANDROID_NDK_X64)/bin/x86_64-linux-android-ar"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x64")
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_program(m_cpudevice.space(AS_PROGRAM)),
m_pageshift(m_cpudevice.space_config(AS_PROGRAM)->m_page_shift),
m_desc_array(window_end + window_start + 2, nullptr),
m_allow_branch_in_delay(false)
m_desc_array(window_end + window_start + 2, nullptr)
{
}
@ -157,7 +156,7 @@ const opcode_desc *drc_frontend::describe_code(offs_t startpc)
// 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
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->delayslots = 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->cycles = 0;
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
offs_t delaypc = curpc + desc->length;
// If previous instruction is a branch use the target pc. Currently MIP3s only.
if (m_allow_branch_in_delay && prevdesc && (prevdesc->flags & OPFLAG_IS_BRANCH) && 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.
// If this is a delay slot it is the true branch fork and the pc should be the previous branch target
if (desc->flags & OPFLAG_IN_DELAY_SLOT) {
if (prevdesc->targetpc != BRANCH_TARGET_DYNAMIC) {
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;
for (UINT8 slotnum = 0; slotnum < desc->delayslots; slotnum++)
{
// recursively describe the next instruction
opcode_desc *delaydesc = describe_one(delaypc, prev);
opcode_desc *delaydesc = describe_one(delaypc, prev, true);
if (delaydesc == nullptr)
break;
desc->delay.append(*delaydesc);
prev = desc;
// set the delay slot flag and a pointer back to the original branch
delaydesc->flags |= OPFLAG_IN_DELAY_SLOT;
// set a pointer back to the original branch
delaydesc->branch = desc;
// stop if we hit a page fault

View File

@ -134,16 +134,13 @@ public:
// describe a block
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:
// required overrides
virtual bool describe(opcode_desc &desc, const opcode_desc *prev) = 0;
private:
// 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 accumulate_required_backwards(opcode_desc &desc, UINT32 *reqmask);
void release_descriptions();
@ -162,8 +159,6 @@ private:
simple_list<opcode_desc> m_desc_live_list; // list of live 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
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 */
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 */
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->pcstkp = 0;
m_core->interrupt_active = 0;
m_drcfe->flush();
}

View File

@ -616,7 +616,7 @@ private:
void static_generate_mode1_ops();
void load_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);
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);

View File

@ -1183,7 +1183,7 @@ void adsp21062_device::compile_block(offs_t pc)
/* iterate over instructions in the sequence and compile them */
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 (seqlast->flags & OPFLAG_RETURN_TO_START)
@ -1224,8 +1224,6 @@ void adsp21062_device::flush_cache()
/* empty the transient cache contents */
m_drcuml->reset();
m_drcfe->flush();
try
{
// 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 */
// 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)
{
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)
{
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
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++;
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
@ -1429,9 +1437,16 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil
UML_LABEL(block, label_expire); // label_expire:
UML_CALLH(block, *m_pop_pc); // callh m_pop_pc
UML_CALLH(block, *m_pop_loop); // callh m_pop_loop
UML_LABEL(block, label_skip_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++;
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_CALLH(block, *m_pop_pc);
UML_CALLH(block, *m_pop_loop);
UML_LABEL(block, label_skip_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)
{
// 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)
@ -1724,8 +1782,8 @@ void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compil
// compile delay slots if needed
if (delayslot)
{
generate_sequence_instruction(block, &compiler_temp, desc->delay.first());
generate_sequence_instruction(block, &compiler_temp, desc->delay.last());
generate_sequence_instruction(block, &compiler_temp, desc->delay.first(), false);
generate_sequence_instruction(block, &compiler_temp, desc->delay.last(), true);
}
if (delayslot)
@ -1772,8 +1830,29 @@ void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compil
// compile delay slots if needed
if (delayslot)
{
generate_sequence_instruction(block, &compiler_temp, desc->delay.first());
generate_sequence_instruction(block, &compiler_temp, desc->delay.last());
generate_sequence_instruction(block, &compiler_temp, desc->delay.first(), false);
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
@ -1848,7 +1927,7 @@ void adsp21062_device::generate_read_ureg(drcuml_block *block, compiler_state *c
break;
case 0x64: // PCSTK
fatalerror("generate_read_ureg: PCSTK");
UML_LOAD(block, I0, &m_core->pcstack, PCSTKP, SIZE_DWORD, SCALE_x4);
break;
case 0x70: // 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
fatalerror("generate_write_ureg: PCSTK");
break;
case 0x65: // PCSTKP
UML_MOV(block, PCSTKP, imm ? data : I0);
break;
case 0x70: // USTAT1
UML_MOV(block, mem(&m_core->ustat1), imm ? data : I0);
break;
@ -2532,7 +2614,7 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi
generate_read_ureg(block, compiler, desc, ureg, false);
UML_AND(block, I3, I0, 0xffff);
UML_MOV(block, I3, I0);
UML_MOV(block, LCNTR, I3);
// 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|
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|
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|
{
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|
{
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 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 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
@ -3294,10 +3510,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
generate_unimplemented_compute(block, compiler, desc);
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 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
@ -3343,6 +3555,46 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
UML_ICOPYFS(block, REG(ps), F5);
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
// TODO: denormals
UML_FSCOPYI(block, F0, REG(fxm));
@ -3511,6 +3763,28 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
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)
// TODO: denormals
UML_FSCOPYI(block, F0, REG(fxm));
@ -3587,7 +3861,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
switch (operation)
{
case 0x09: // Rn = (Rx + Ry) / 2
case 0x61: // Rn = MIN(Rx, Ry)
case 0x63: // Rn = CLIP Rx BY Ry
case 0x92: // Fn = ABS(Fx - Fy)
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 0xa5: // Fn = RND Fx
case 0xad: // Rn = MANT Fx
case 0xc9: // Rn = FIX Fx
case 0xcd: // Rn = TRUNC Fx
generate_unimplemented_compute(block, compiler, desc);
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);
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)
UML_MOV(block, REG(rn), REG(rx));
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);
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
{
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 0x68: // Rn = Rx * Ry (USF)
case 0x69: // Rn = Rx * Ry (USFR)
case 0x70: // Rn = Rx * Ry (SSI)
case 0x78: // Rn = Rx * Ry (SSF)
case 0x79: // Rn = Rx * Ry (SSFR)
case 0x44: // MRF = Rx * Ry (UUI)
@ -4297,6 +4603,12 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
// TODO: flags
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)
UML_DSEXT(block, I0, REG(rx), 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)
{
case 0x00: // Rn = LSHIFT 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 0x4c: // Rn = FDEP Rx BY Ry | <bit6>:<len6> (SE)
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 0x80: // Rn = EXP Rx
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);
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>
{
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);
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>
{
UML_MOV(block, I0, REG(ry));
UML_MOV(block, I1, 1);
UML_SHL(block, I1, I1, I0);
UML_SHL(block, I1, 1, I0);
UML_OR(block, REG(rn), REG(rn), I1);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED)
@ -4458,11 +4814,26 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com
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>
{
UML_MOV(block, I0, REG(ry));
UML_MOV(block, I1, 1);
UML_SHL(block, I1, I1, I0);
UML_SHL(block, I1, 1, I0);
UML_TEST(block, REG(rx), I1);
if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ);
if (SV_CALC_REQUIRED)
@ -4555,8 +4926,10 @@ void adsp21062_device::generate_if_condition(drcuml_block *block, compiler_state
case 0x0d: /* TF */
UML_TEST(block, ASTAT_BTF, 1);
UML_JMPc(block, COND_E, skip_label);
break;
case 0x0e: /* BM */
UML_JMP(block, skip_label);
break;
case 0x0f: /* NOT LCE */
UML_CMP(block, CURLCNTR, 1);
UML_JMPc(block, COND_E, skip_label);
@ -4821,7 +5194,10 @@ void adsp21062_device::generate_shift_imm(drcuml_block *block, compiler_state *c
return;
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 (SV_CALC_REQUIRED) UML_MOV(block, ASTAT_SV, 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_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_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_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);
@ -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, "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, "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, "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);
}
/**
* @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
-------------------------------------------------*/
// 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[])
{
if (debug_comment_save(machine))

View File

@ -348,13 +348,12 @@ bool debug_comment_save(running_machine &machine)
return comments_saved;
}
//-------------------------------------------------
// debug_comment_load - load all comments for
// the given machine
//-------------------------------------------------
bool debug_comment_load(running_machine &machine)
bool debug_comment_load(running_machine &machine,bool is_inline)
{
// open the file
emu_file file(machine.options().comment_directory(), OPEN_FLAG_READ);
@ -391,12 +390,18 @@ bool debug_comment_load(running_machine &machine)
// iterate over devices
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->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();
}
}
}
catch (emu_exception &)
{
// 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
if (!global->comments_loaded)
{
debug_comment_load(m_device.machine());
debug_comment_load(m_device.machine(),true);
global->comments_loaded = true;
}
@ -2692,7 +2697,7 @@ bool device_debug::comment_export(xml_data_node &curnode)
// 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
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);
// add the new comment
if(is_inline == true)
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;
}

View File

@ -250,7 +250,7 @@ public:
UINT32 comment_count() const { return m_comment_set.size(); }
UINT32 comment_change_count() const { return m_comment_change; }
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;
// history
@ -515,7 +515,7 @@ void debug_cpu_source_script(running_machine &machine, const char *file);
bool debug_comment_save(running_machine &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"
" comdelete <address> -- removes a comment from the given address\n"
" comsave -- save the current comments to a file\n"
" comlist -- print currently avaliable comments from file\n"
"\n"
},
{
@ -1222,6 +1223,18 @@ static const help_item static_help_list[] =
"memdump\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",
"\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
//-------------------------------------------------
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",
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());
}
}
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_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 *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, memory_bank *rbank, memory_bank *wbank);
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) { }
// is a menuing system active? we want to disable certain keyboard/mouse inputs under such context
virtual bool is_menu_active() { return false; }
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
//-------------------------------------------------
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 (!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);
// 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
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
-------------------------------------------------*/
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;
@ -273,7 +273,7 @@ UINT32 menu_sliders::ui_handler(mame_ui_manager &mui, render_container *containe
menu::stack_push<menu_sliders>(mui, container, true);
/* 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 (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;
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:
enum {

View File

@ -242,7 +242,7 @@ void mame_ui_manager::init()
decode_ui_color(0, &machine());
// 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_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
//-------------------------------------------------
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_param = param;
return param;
m_handler_callback_type = callback_type;
}
@ -334,7 +333,7 @@ void mame_ui_manager::display_startup_screens(bool first_time)
#endif
// 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++)
{
// default to standard colors
@ -346,7 +345,7 @@ void mame_ui_manager::display_startup_screens(bool first_time)
case 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))
messagebox_backcolor = UI_YELLOW_COLOR;
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:
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;
case 2:
@ -374,19 +373,19 @@ void mame_ui_manager::display_startup_screens(bool first_time)
while (machine().input().poll_switches() != INPUT_CODE_INVALID) { }
// 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();
}
// 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();
}
// if we're the empty driver, force the menus on
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
assert(m_handler_callback != nullptr);
m_handler_param = (*m_handler_callback)(*this, container, m_handler_param);
m_handler_param = m_handler_callback(container);
// display any popup messages
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
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()
{
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)
{
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
//-------------------------------------------------
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;
}
@ -1247,20 +1245,22 @@ UINT32 mame_ui_manager::handler_messagebox(mame_ui_manager &mui, render_containe
// 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
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 (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;
}
// 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;
return state;
@ -1461,62 +1461,62 @@ void mame_ui_manager::image_display(const device_type &type, device_image_interf
// 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
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);
}
// Show the duration of current part (intro or gameplay or extra)
if (mui.show_timecode_counter()) {
if (show_timecode_counter()) {
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);
}
// 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;
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);
}
// draw the profiler if visible
if (mui.show_profiler())
if (show_profiler())
{
const char *text = g_profiler.text(mui.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);
const char *text = g_profiler.text(machine());
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 (mui.single_step())
if (single_step())
{
mui.machine().pause();
mui.set_single_step(false);
machine().pause();
set_single_step(false);
}
// determine if we should disable the rest of the UI
bool has_keyboard = mui.machine().ioport().has_keyboard();
bool ui_disabled = (has_keyboard && !mui.machine().ui_active());
bool has_keyboard = machine().ioport().has_keyboard();
bool ui_disabled = (has_keyboard && !machine().ui_active());
// is ScrLk UI toggling applicable here?
if (has_keyboard)
{
// 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
mui.machine().set_ui_active(!mui.machine().ui_active());
machine().set_ui_active(!machine().ui_active());
// 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"),
"-------------------------",
_("Mode: PARTIAL Emulation"),
@ -1526,7 +1526,7 @@ UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *c
}
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"),
"-------------------------",
_("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?
if (mui.use_natural_keyboard() && (mui.machine().phase() == MACHINE_PHASE_RUNNING))
mui.process_natural_keyboard();
if (use_natural_keyboard() && (machine().phase() == MACHINE_PHASE_RUNNING))
process_natural_keyboard();
if (!ui_disabled)
{
// paste command
if (mui.machine().ui_input().pressed(IPT_UI_PASTE))
mui.paste();
if (machine().ui_input().pressed(IPT_UI_PASTE))
paste();
}
mui.image_handler_ingame();
image_handler_ingame();
// handle a save input timecode request
if (mui.machine().ui_input().pressed(IPT_UI_TIMECODE))
mui.machine().video().save_input_timecode();
if (machine().ui_input().pressed(IPT_UI_TIMECODE))
machine().video().save_input_timecode();
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;
}
// turn on menus if requested
if (mui.machine().ui_input().pressed(IPT_UI_CONFIGURE))
return mui.set_handler(ui::menu::ui_handler, 0);
if (machine().ui_input().pressed(IPT_UI_CONFIGURE))
{
show_menu();
return 0;
}
// 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))
return mui.set_handler(ui::menu_sliders::ui_handler, 1);
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) == 0 && machine().ui_input().pressed(IPT_UI_ON_SCREEN_DISPLAY))
{
set_handler<mame_ui_manager&, bool>(UI_CALLBACK_TYPE_GENERAL, ui::menu_sliders::ui_handler, *this, true);
return 1;
}
// handle a reset request
if (mui.machine().ui_input().pressed(IPT_UI_RESET_MACHINE))
mui.machine().schedule_hard_reset();
if (mui.machine().ui_input().pressed(IPT_UI_SOFT_RESET))
mui.machine().schedule_soft_reset();
if (machine().ui_input().pressed(IPT_UI_RESET_MACHINE))
machine().schedule_hard_reset();
if (machine().ui_input().pressed(IPT_UI_SOFT_RESET))
machine().schedule_soft_reset();
// 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)
mui.machine().pause();
return mui.set_handler(ui_gfx_ui_handler, is_paused);
machine().pause();
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
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);
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);
return 0;
@ -1603,87 +1610,89 @@ UINT32 mame_ui_manager::handler_ingame(mame_ui_manager &mui, render_container *c
}
// 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();
mui.m_load_save_hold = true;
return mui.set_handler(handler_load_save, LOADSAVE_SAVE);
machine().pause();
m_load_save_hold = true;
set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_load_save, (UINT32)LOADSAVE_SAVE);
return LOADSAVE_SAVE;
}
// 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();
mui.m_load_save_hold = true;
return mui.set_handler(handler_load_save, LOADSAVE_LOAD);
machine().pause();
m_load_save_hold = true;
set_handler(UI_CALLBACK_TYPE_GENERAL, &mame_ui_manager::handler_load_save, (UINT32)LOADSAVE_LOAD);
return LOADSAVE_LOAD;
}
// handle a save snapshot request
if (mui.machine().ui_input().pressed(IPT_UI_SNAPSHOT))
mui.machine().video().save_active_screen_snapshots();
if (machine().ui_input().pressed(IPT_UI_SNAPSHOT))
machine().video().save_active_screen_snapshots();
// toggle pause
if (mui.machine().ui_input().pressed(IPT_UI_PAUSE))
mui.machine().toggle_pause();
if (machine().ui_input().pressed(IPT_UI_PAUSE))
machine().toggle_pause();
// 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);
mui.machine().resume();
set_single_step(true);
machine().resume();
}
// 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());
// toggle movie recording
if (mui.machine().ui_input().pressed(IPT_UI_RECORD_MOVIE))
mui.machine().video().toggle_record_movie();
if (machine().ui_input().pressed(IPT_UI_RECORD_MOVIE))
machine().video().toggle_record_movie();
// toggle profiler display
if (mui.machine().ui_input().pressed(IPT_UI_SHOW_PROFILER))
mui.set_show_profiler(!mui.show_profiler());
if (machine().ui_input().pressed(IPT_UI_SHOW_PROFILER))
set_show_profiler(!show_profiler());
// toggle FPS display
if (mui.machine().ui_input().pressed(IPT_UI_SHOW_FPS))
mui.set_show_fps(!mui.show_fps());
if (machine().ui_input().pressed(IPT_UI_SHOW_FPS))
set_show_fps(!show_fps());
// increment frameskip?
if (mui.machine().ui_input().pressed(IPT_UI_FRAMESKIP_INC))
mui.increase_frameskip();
if (machine().ui_input().pressed(IPT_UI_FRAMESKIP_INC))
increase_frameskip();
// decrement frameskip?
if (mui.machine().ui_input().pressed(IPT_UI_FRAMESKIP_DEC))
mui.decrease_frameskip();
if (machine().ui_input().pressed(IPT_UI_FRAMESKIP_DEC))
decrease_frameskip();
// toggle throttle?
if (mui.machine().ui_input().pressed(IPT_UI_THROTTLE))
mui.machine().video().toggle_throttle();
if (machine().ui_input().pressed(IPT_UI_THROTTLE))
machine().video().toggle_throttle();
// 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
{
bool autofire_toggle = mui.machine().ioport().get_autofire_toggle();
mui.machine().ioport().set_autofire_toggle(!autofire_toggle);
mui.machine().popmessage("Autofire %s", autofire_toggle ? _("Enabled") : _("Disabled"));
bool autofire_toggle = machine().ioport().get_autofire_toggle();
machine().ioport().set_autofire_toggle(!autofire_toggle);
machine().popmessage("Autofire %s", autofire_toggle ? _("Enabled") : _("Disabled"));
}
}
// 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);
mui.show_fps_temp(0.5);
machine().video().set_fastforward(true);
show_fps_temp(0.5);
}
else
mui.machine().video().set_fastforward(false);
machine().video().set_fastforward(false);
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
//-------------------------------------------------
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 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
if (state == LOADSAVE_SAVE)
mui.draw_message_window(container, _("Select position to save to"));
draw_message_window(container, _("Select position to save to"));
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 (mui.m_load_save_hold) {
if (m_load_save_hold) {
bool seq_in_progress = false;
const input_seq &load_save_seq = state == LOADSAVE_SAVE ?
mui.machine().ioport().type_seq(IPT_UI_SAVE_STATE) :
mui.machine().ioport().type_seq(IPT_UI_LOAD_STATE);
machine().ioport().type_seq(IPT_UI_SAVE_STATE) :
machine().ioport().type_seq(IPT_UI_LOAD_STATE);
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;
if (seq_in_progress)
return state;
else
mui.m_load_save_hold = false;
m_load_save_hold = false;
}
// 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
if (state == LOADSAVE_SAVE)
mui.machine().popmessage(_("Save cancelled"));
machine().popmessage(_("Save cancelled"));
else
mui.machine().popmessage(_("Load cancelled"));
machine().popmessage(_("Load cancelled"));
// reset the state
mui.machine().resume();
machine().resume();
return UI_HANDLER_CANCEL;
}
// check for A-Z or 0-9
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';
if (file == 0)
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';
if (file == 0)
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';
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 (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);
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
if (state == LOADSAVE_SAVE)
{
mui.machine().popmessage(_("Save to position %s"), filename);
mui.machine().schedule_save(filename);
machine().popmessage(_("Save to position %s"), filename);
machine().schedule_save(filename);
}
else
{
mui.machine().popmessage(_("Load from position %s"), filename);
mui.machine().schedule_load(filename);
machine().popmessage(_("Load from position %s"), filename);
machine().schedule_load(filename);
}
// 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
mui.machine().resume();
machine().resume();
return UI_HANDLER_CANCEL;
}
@ -1803,7 +1812,7 @@ void mame_ui_manager::request_quit()
if (!machine().options().confirm_quit())
machine().schedule_exit();
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
//-------------------------------------------------
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'
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'
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
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_cancel_text);
mui.draw_text_box(container, quit_message.c_str(), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
mui.machine().pause();
draw_text_box(container, quit_message.c_str(), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
machine().pause();
// if the user press ENTER, quit the game
if (mui.machine().ui_input().pressed(IPT_UI_SELECT))
mui.machine().schedule_exit();
if (machine().ui_input().pressed(IPT_UI_SELECT))
machine().schedule_exit();
// 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;
}

View File

@ -154,6 +154,13 @@ enum
class mame_ui_manager;
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
class mame_ui_manager : public ui_manager, public slider_changed_notifier
@ -175,7 +182,35 @@ public:
// methods
void initialize(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);
virtual void set_startup_text(const char *text, bool force) override;
void update_and_render(render_container *container);
@ -236,7 +271,8 @@ public:
private:
// instance variables
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;
bool m_single_step;
bool m_showfps;
@ -261,11 +297,11 @@ private:
std::string &warnings_string(std::string &buffer);
// UI handlers
static UINT32 handler_messagebox(mame_ui_manager &mui, render_container *container, UINT32 state);
static UINT32 handler_messagebox_anykey(mame_ui_manager &mui, render_container *container, UINT32 state);
static UINT32 handler_ingame(mame_ui_manager &mui, render_container *container, UINT32 state);
static UINT32 handler_load_save(mame_ui_manager &mui, render_container *container, UINT32 state);
static UINT32 handler_confirm_quit(mame_ui_manager &mui, render_container *container, UINT32 state);
UINT32 handler_messagebox(render_container *container);
UINT32 handler_messagebox_anykey(render_container *container);
UINT32 handler_ingame(render_container *container);
UINT32 handler_load_save(render_container *container, UINT32 state);
UINT32 handler_confirm_quit(render_container *container);
// private methods
void exit();

View File

@ -240,7 +240,7 @@ bool ui_gfx_is_relevant(running_machine &machine)
// 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;

View File

@ -26,7 +26,7 @@ void ui_gfx_init(running_machine &machine);
bool ui_gfx_is_relevant(running_machine &machine);
// 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__ */

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);
// 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());
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
/***************************************************************************
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
(C) 1985 Nihon Bussan
driver by
@ -27,6 +16,17 @@ Youma Ninpou Chou (Japan)
Driver by
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"
@ -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(0x43, 0x44) AM_WRITE(galivan_scrolly_w)
AM_RANGE(0x45, 0x45) AM_WRITE(galivan_sound_command_w)
/* AM_RANGE(0x46, 0x46) AM_WRITENOP */
/* AM_RANGE(0x47, 0x47) AM_WRITENOP */
// AM_RANGE(0x46, 0x46) AM_WRITENOP
// AM_RANGE(0x47, 0x47) AM_WRITENOP
AM_RANGE(0xc0, 0xc0) AM_READ(IO_port_c0_r) /* dangar needs to return 0x58 */
ADDRESS_MAP_END
@ -629,32 +629,32 @@ ROM_START( galivan3 )
ROM_LOAD( "mb7114e.7f", 0x0000, 0x0100, CRC(06538736) SHA1(a2fb2ecb768686839f3087e691102e2dc2eb65b5) ) /* sprite palette bank */
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_LOAD( "dangar08.1b", 0x00000, 0x8000, CRC(e52638f2) SHA1(6dd3ccb4574a410abf1ac35b4f9518ee21ecac91) )
ROM_LOAD( "dangar09.3b", 0x08000, 0x4000, CRC(809d280f) SHA1(931f811f1fe3c71ba82fc44f69ef461bdd9cd2d8) )
ROM_LOAD( "dangar10.5b", 0x10000, 0x4000, CRC(99a3591b) SHA1(45011043ff5620524d79076542bd8c602fe90cf4) )
ROM_LOAD( "8.1b", 0x00000, 0x8000, CRC(fe4a3fd6) SHA1(b471b2b1dea23bd1444880ceb8112d7998950dd4) ) /* APRIL 09 1987 - Same rom label, different data */
ROM_LOAD( "9.3b", 0x08000, 0x4000, CRC(809d280f) SHA1(931f811f1fe3c71ba82fc44f69ef461bdd9cd2d8) )
ROM_LOAD( "10.4b", 0x10000, 0x4000, CRC(99a3591b) SHA1(45011043ff5620524d79076542bd8c602fe90cf4) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */
ROM_LOAD( "dangar13.b14", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "dangar14.b15", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) )
ROM_LOAD( "13.b14", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "14.b15", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) )
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_LOAD( "dangar01.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */
ROM_LOAD( "dangar02.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) )
ROM_LOAD( "dangar03.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) )
ROM_LOAD( "dangar04.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) )
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( "dangarxx.f4", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "dangarxx.f1", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
ROM_LOAD( "12.f4", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "11.f1", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
ROM_LOAD( "dangar07.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) )
ROM_LOAD( "dangar06.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) )
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 */
@ -666,32 +666,32 @@ ROM_START( dangar )
ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */
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_LOAD( "dangar2.016", 0x00000, 0x8000, CRC(743fa2d4) SHA1(55539796967532b57279801374b2f0cf82cfe1ae) )
ROM_LOAD( "dangar2.017", 0x08000, 0x4000, CRC(1cdc60a5) SHA1(65f776d14c9461f1a6939ad512eacf6a1a9da2c6) )
ROM_LOAD( "dangar2.018", 0x10000, 0x4000, CRC(db7f6613) SHA1(c55d1f2fdb86e2b9fbdfad0b156d4d084677b750) )
ROM_LOAD( "8.1b", 0x00000, 0x8000, CRC(e52638f2) SHA1(6dd3ccb4574a410abf1ac35b4f9518ee21ecac91) ) /* DEC. 1 1986 - Same rom label, different data */
ROM_LOAD( "9.3b", 0x08000, 0x4000, CRC(809d280f) SHA1(931f811f1fe3c71ba82fc44f69ef461bdd9cd2d8) )
ROM_LOAD( "10.4b", 0x10000, 0x4000, CRC(99a3591b) SHA1(45011043ff5620524d79076542bd8c602fe90cf4) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu code */
ROM_LOAD( "dangar13.b14", 0x0000, 0x4000, CRC(3e041873) SHA1(8f9e1ec64509c8a7e9e45add9efc95f98f35fcfc) )
ROM_LOAD( "dangar14.b15", 0x4000, 0x8000, CRC(488e3463) SHA1(73ff7ab061be54162f3a548f6bd9ef55b9dec5d9) )
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( "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_LOAD( "dangar01.14f", 0x00000, 0x8000, CRC(d59ed1f1) SHA1(e55314b5a078145ad7a5e95cb792b4fd32cfb05d) ) /* tiles */
ROM_LOAD( "dangar02.15f", 0x08000, 0x8000, CRC(dfdb931c) SHA1(33563160239f221f24ca0cb652d14550e9941afe) )
ROM_LOAD( "dangar03.17f", 0x10000, 0x8000, CRC(6954e8c3) SHA1(077bcbe9f80df011c9110d8cf6e08b53d035d1c8) )
ROM_LOAD( "dangar04.19f", 0x18000, 0x8000, CRC(4af6a8bf) SHA1(d004b10b9b8559d1d6d26af35999df2857d87c53) )
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( "dangarxx.f4", 0x00000, 0x8000, CRC(55711884) SHA1(2682ebc8d88d0d6c430b7df34ed362bc81047072) ) /* sprites */
ROM_LOAD( "dangarxx.f1", 0x08000, 0x8000, CRC(8cf11419) SHA1(79e7a3046878724fde248100ad55a305a427cd46) )
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( "dangar07.19d", 0x0000, 0x4000, CRC(6dba32cf) SHA1(e6433f291364202c1291b137d6ee1840ecf7d72d) )
ROM_LOAD( "dangar06.17d", 0x4000, 0x4000, CRC(6c899071) SHA1(9a776aae897d57e66ebdbcf79f3c673da8b78b05) )
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 */
@ -703,7 +703,84 @@ ROM_START( dangar2 )
ROM_LOAD( "82s129.7f", 0x0000, 0x0100, CRC(29bc6216) SHA1(1d7864ad06ad0cd5e3d1905fc6066bee1cd90995) ) /* sprite palette bank */
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_LOAD( "8", 0x00000, 0x8000, CRC(8136fd10) SHA1(5f2ca08fab0d9431af38ef66922fdb6bd9a132e2) )
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, 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( 1986, dangar, 0, galivan, dangar, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (12/1/1986)", 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, dangarb, dangar, galivan, dangarb, driver_device, 0, ROT270, "bootleg", "Ufo Robo Dangar (bootleg)", 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, dangara, dangar, galivan, dangar2, driver_device, 0, ROT270, "Nichibutsu", "Ufo Robo Dangar (12/1/1986)", 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, 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 )

View File

@ -5998,7 +5998,7 @@ ROM_END
ROM_START( esoccer )
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_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_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.
@ -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, 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?, 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?, 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 )

View File

@ -4456,6 +4456,30 @@ ROM_START( hyperbbca )
ROM_LOAD( "876aa.22h", 0x000000, 0x002000, CRC(3c17f026) SHA1(8ed33aca99f5d09d5792e136e700e3ac628018e8) )
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 )
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, 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, 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, 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 )

View File

@ -812,9 +812,10 @@ ROM_START( mk3p40 )
ROM_LOAD32_BYTE( "mk3-u114.bin", 0x1000003, 0x080000, CRC(a8d99922) SHA1(04ff8d85448701070672f44dbf5bcfd744f1bc8a) )
ROM_END
// TODO: we're currently using version 1.0 roms for sound for all sets, see MT #00751
ROM_START( umk3 )
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-u4.bin", 0x400000, 0x100000, CRC(428a406f) SHA1(e70ec83cd054de0da1e178720ed0035b8887f797) )
ROM_LOAD16_BYTE( "mk3-u5.bin", 0x600000, 0x100000, CRC(3b98a09f) SHA1(edf1d02a56dcf3349e6b4bb4097acfe7592305f4) )
@ -853,7 +854,7 @@ ROM_END
ROM_START( umk3r11 )
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-u4.bin", 0x400000, 0x100000, CRC(428a406f) SHA1(e70ec83cd054de0da1e178720ed0035b8887f797) )
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(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(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ(aes_in2_r)
AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE8(io_control_w, 0x00ff)

View File

@ -25,8 +25,8 @@ 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
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
and see what happens (system interaction, Z80, about any test except the video / CRT tests).
(3) heavy system interaction stalls the driver. Start the RX50 diag.disk and
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.
It is a 6308 OTP ROM (2048 bit, 256 x 8) used as a lookup table (LUT) with the address pins (A)
@ -387,10 +387,10 @@ private:
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_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_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_BDL_INTR_1L, // 21/A1 84/284 - [ext. COMM.BOARD only]
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_GRF_INTR_L, // 22/A2 88/288 - [ext. COLOR GRAPHICS]
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_NMI // 02/02 08/08 - [external MEMORY EXTENSION] - PARITY ERROR L
}; // HIGHEST PRIORITY
@ -492,7 +492,6 @@ FLOPPY_IMD_FORMAT,
FLOPPY_PC_FORMAT
FLOPPY_FORMATS_END
// initially only : SLOT_INTERFACE("525qd", FLOPPY_525_SSQD)
static SLOT_INTERFACE_START(rainbow_floppies)
SLOT_INTERFACE("525qd0", FLOPPY_525_SSQD)
SLOT_INTERFACE("525qd1", FLOPPY_525_SSQD)
@ -904,7 +903,7 @@ void rainbow_state::machine_reset()
INT88 = false;
m_kbd_tx_ready = m_kbd_rx_ready = false;
m_kbd8251->write_cts(1);
m_kbd8251->write_cts(0);
m_KBD = 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.
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)
{
@ -961,6 +960,9 @@ void rainbow_state::update_8088_irqs()
{
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);
break;
}
@ -1986,7 +1988,7 @@ WRITE8_MEMBER(rainbow_state::z80_diskcontrol_w)
}
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.);
}
}

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(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(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
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)
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 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x080003) AM_WRITE(toaplan1_tile_offsets_w)
@ -2058,6 +2081,44 @@ static MACHINE_CONFIG_START( outzone, toaplan1_state )
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 )
/* 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_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_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
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, 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, 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, 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 )

View File

@ -191,6 +191,7 @@
MACHINE_RESET_MEMBER(turbo_state,buckrog)
{
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));
}
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 )
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(0xb000, 0xb3ff) AM_MIRROR(0x0400) AM_RAM AM_SHARE("spritepos")
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)
{
save_item(NAME(m_alt_spriteram));
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, 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, 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 )

View File

@ -54,7 +54,7 @@ public:
optional_region_ptr<UINT8> m_bgcolorrom;
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;
optional_shared_ptr<UINT8> m_decrypted_opcodes;
@ -67,6 +67,7 @@ public:
/* machine states */
UINT8 m_i8279_scanlines;
UINT8 m_alt_spriteram[0x80];
/* sound state */
UINT8 m_turbo_osel;
@ -149,7 +150,10 @@ public:
DECLARE_WRITE8_MEMBER(buckrog_ppi1c_w);
DECLARE_READ8_MEMBER(turbo_analog_r);
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_noenc);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
DECLARE_VIDEO_START(turbo);
DECLARE_PALETTE_INIT(turbo);

View File

@ -3,6 +3,15 @@
<!-- 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">
<led7seg><color red="1.0" green="0.2" blue="0.23" /></led7seg>
</element>
@ -16,48 +25,111 @@
<!-- build screen -->
<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 name="digit9" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
<!-- bezel -->
<bezel name="0.0" element="led"><bounds x="0" y="20" width="1" height="1" /></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 element="static_green"><bounds x="5" y="5" width="25" height="35" /></bezel>
<bezel name="1.0" element="led"><bounds x="0" y="21" width="1" height="1" /></bezel>
<bezel name="1.1" element="led"><bounds x="1" y="21" width="1" height="1" /></bezel>
<bezel name="1.2" element="led"><bounds x="2" y="21" width="1" height="1" /></bezel>
<bezel name="1.3" element="led"><bounds x="3" y="21" width="1" height="1" /></bezel>
<!-- middle -->
<bezel element="static_white"><bounds x="5" y="22.85" width="25" height="0.3" /></bezel>
<bezel element="disk_white"><bounds x="15.5" y="20.5" width="5" height="5" /></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>
<bezel name="2.1" element="led"><bounds x="1" y="22" width="1" height="1" /></bezel>
<bezel name="2.2" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel>
<bezel name="2.3" element="led"><bounds x="3" y="22" width="1" height="1" /></bezel>
<!-- penalty area -->
<bezel element="disk_white"><bounds x="15.5" y="10.3" width="5" height="5" /></bezel>
<bezel element="disk_green"><bounds x="15.8" y="10.6" width="4.4" height="4.4" /></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 name="3.1" element="led"><bounds x="1" y="23" width="1" height="1" /></bezel>
<bezel name="3.2" element="led"><bounds x="2" y="23" width="1" height="1" /></bezel>
<bezel name="3.3" element="led"><bounds x="3" y="23" width="1" height="1" /></bezel>
<bezel element="static_white"><bounds x="12" y="7.5" width="12" height="6.8" /></bezel>
<bezel element="static_green"><bounds x="12.3" y="7.8" width="11.4" height="6.2" /></bezel>
<bezel element="static_white"><bounds x="12" y="31.7" width="12" height="6.8" /></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 name="4.1" element="led"><bounds x="1" y="24" width="1" height="1" /></bezel>
<bezel name="4.2" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel>
<bezel name="4.3" element="led"><bounds x="3" 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 element="static_green"><bounds x="14.5" y="8.3" width="7" height="3.2" /></bezel>
<bezel element="static_white"><bounds x="14.2" y="34.2" width="7.6" height="3.8" /></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>
<bezel name="5.1" element="led"><bounds x="1" y="25" width="1" height="1" /></bezel>
<bezel name="5.2" element="led"><bounds x="2" y="25" width="1" height="1" /></bezel>
<bezel name="5.3" element="led"><bounds x="3" y="25" width="1" height="1" /></bezel>
<!-- corners -->
<bezel element="disk_white"><bounds x="6.7" y="6.7" width="4" height="4" /></bezel>
<bezel element="disk_white"><bounds x="25.3" y="6.7" width="4" height="4" /></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>
<bezel name="6.1" element="led"><bounds x="1" y="26" width="1" height="1" /></bezel>
<bezel name="6.2" element="led"><bounds x="2" y="26" width="1" height="1" /></bezel>
<bezel name="6.3" element="led"><bounds x="3" y="26" width="1" height="1" /></bezel>
<!-- outer border -->
<bezel element="static_white"><bounds x="7.5" y="5" width="1.3" height="35" /></bezel>
<bezel element="static_white"><bounds x="27.2" y="5" width="1.3" height="35" /></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 name="7.1" element="led"><bounds x="1" y="27" width="1" height="1" /></bezel>
<bezel name="7.2" element="led"><bounds x="2" y="27" width="1" height="1" /></bezel>
<bezel element="static_green2"><bounds x="3.5" y="5" width="5" height="35" /></bezel>
<bezel element="static_green2"><bounds x="27.5" y="5" width="5" height="35" /></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>
</mamelayout>

View File

@ -3,18 +3,458 @@
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<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.2" blue="0.23" /></disk>
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</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 -->
<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>
</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(0x000a, 0x000c) AM_READWRITE(spi_r, spi_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(0x0100, 0x1fff) AM_ROM AM_REGION(LK201_CPU_TAG, 0x100)
ADDRESS_MAP_END
@ -495,6 +496,7 @@ lk201_device::lk201_device(const machine_config &mconfig, const char *tag, devic
void lk201_device::device_start()
{
m_count = timer_alloc(1);
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_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);
@ -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)
{
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);
}
@ -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 )
{
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());
send_port(space, offset, ports[offset] & data);
UINT8 olddata = ddrs[offset];
ddrs[offset] = data;
send_port(space, offset, ports[offset] & olddata);
}
READ8_MEMBER( lk201_device::ports_r )
@ -586,14 +613,17 @@ READ8_MEMBER( lk201_device::ports_r )
WRITE8_MEMBER( lk201_device::ports_w )
{
send_port(space, offset, data);
UINT8 olddata = ports[offset];
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());
UINT8 porta = ports[0] & ddrs[0];
UINT8 portb = ports[1] & ddrs[1];
UINT8 portc = ports[2] & ddrs[2];
switch (offset)
{
@ -605,36 +635,36 @@ void lk201_device::send_port(address_space &space, UINT8 offset, UINT8 data)
case 2: // port C
// Check for keyboard read strobe
if (((data & 0x40) == 0) && (ports[offset] & 0x40))
if (((portc & 0x40) == 0) && (olddata & 0x40))
{
#ifndef KEYBOARD_WORKAROUND
if (ports[0] & 0x1) kbd_data = m_kbd0->read();
if (ports[0] & 0x2) kbd_data = m_kbd1->read();
if (ports[0] & 0x4) kbd_data = m_kbd2->read();
if (ports[0] & 0x8) kbd_data = m_kbd3->read();
if (ports[0] & 0x10) kbd_data = m_kbd4->read();
if (ports[0] & 0x20) kbd_data = m_kbd5->read();
if (ports[0] & 0x40) kbd_data = m_kbd6->read();
if (ports[0] & 0x80) kbd_data = m_kbd7->read();
if (ports[1] & 0x1) kbd_data = m_kbd8->read();
if (ports[1] & 0x2) kbd_data = m_kbd9->read();
if (ports[1] & 0x4) kbd_data = m_kbd10->read();
if (ports[1] & 0x8) kbd_data = m_kbd11->read();
if (ports[1] & 0x10) kbd_data = m_kbd12->read();
if (ports[1] & 0x20) kbd_data = m_kbd13->read();
if (ports[1] & 0x40) kbd_data = m_kbd14->read();
if (ports[1] & 0x80) kbd_data = m_kbd15->read();
if (ports[2] & 0x1) kbd_data = m_kbd16->read();
if (ports[2] & 0x2) kbd_data = m_kbd17->read();
if (porta & 0x1) kbd_data = m_kbd0->read();
if (porta & 0x2) kbd_data = m_kbd1->read();
if (porta & 0x4) kbd_data = m_kbd2->read();
if (porta & 0x8) kbd_data = m_kbd3->read();
if (porta & 0x10) kbd_data = m_kbd4->read();
if (porta & 0x20) kbd_data = m_kbd5->read();
if (porta & 0x40) kbd_data = m_kbd6->read();
if (porta & 0x80) kbd_data = m_kbd7->read();
if (portb & 0x1) kbd_data = m_kbd8->read();
if (portb & 0x2) kbd_data = m_kbd9->read();
if (portb & 0x4) kbd_data = m_kbd10->read();
if (portb & 0x8) kbd_data = m_kbd11->read();
if (portb & 0x10) kbd_data = m_kbd12->read();
if (portb & 0x20) kbd_data = m_kbd13->read();
if (portb & 0x40) kbd_data = m_kbd14->read();
if (portb & 0x80) kbd_data = m_kbd15->read();
if (portc & 0x1) kbd_data = m_kbd16->read();
if (portc & 0x2) kbd_data = m_kbd17->read();
}
// 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)
machine().output().set_value("led_wait" , (led_data & 0x1) == 0);
machine().output().set_value("led_compose", (led_data & 0x2) == 0);
machine().output().set_value("led_hold" , (led_data & 0x4) == 0);
machine().output().set_value("led_lock" , (led_data & 0x8) == 0);
machine().output().set_value("led_wait" , (led_data & 0x1) == 1);
machine().output().set_value("led_compose", (led_data & 0x2) == 2);
machine().output().set_value("led_lock" , (led_data & 0x4) == 4);
machine().output().set_value("led_hold" , (led_data & 0x8) == 8);
}
#endif

View File

@ -53,6 +53,8 @@ public:
DECLARE_WRITE8_MEMBER( sci_w );
DECLARE_READ8_MEMBER( spi_r );
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); }
@ -76,6 +78,24 @@ private:
UINT8 led_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_status;
//UINT8 sci_data;

View File

@ -1467,7 +1467,8 @@ alchemy
atkgld
amzqueen
amztempl
antcleo // (c) 2004
antcleo
antcleom // (c) 2004
apocof
arabnga6
arabnga6u
@ -1497,6 +1498,7 @@ canaryrc
cmtonig
cinhell
csd
csdsp
csdm // (c) 2003
csdce
csret
@ -1558,7 +1560,7 @@ indremce
indremll
indrem2c
indremmm // (c) 2003
indremcm
indgldcm
indprncs
jailbrk
jefffox
@ -1566,6 +1568,7 @@ jewelcm
kingnep
kingnile
kingnilea
kingpeng
koalama6
kohinoor
lgfish
@ -1609,6 +1612,7 @@ pcfavor
pcbydem
pcmostw
pcgold
pcplat
pwsuper
pompeia6
pompeia6u
@ -1617,6 +1621,7 @@ prophecy
qnile
qnilese
qnilejc
qnilejcsp
qsheeba
raprichs
redbara6
@ -1625,6 +1630,7 @@ ruprup
rubymag
rumbreel
scatmag2
scatmag2sa
sealdeal
shorthng
shamnmg
@ -1677,6 +1683,7 @@ wldpanth
wldstall
wtepee
wwaratah
wwaratahsp
wways
wwaysm // (c) 2003
wzwaysll
@ -12739,8 +12746,10 @@ galgame // (c) 1971 Computer Recreations, Inc
@source:galivan.cpp
dangar // (c) 1986
dangar2 // (c) 1986
dangarb // bootleg
dangara // (c) 1986
dangarb // (c) 1986
dangarj // (c) 1986
dangarbt // bootleg
galivan // (c) 1985
galivan2 // (c) 1985
galivan3 // (c) 1985
@ -14666,6 +14675,7 @@ wfortunea // (c) 1989 GameTek
@source:itgambl2.cpp
cmagica // (c) 200? unknown
mcard_h8 // (c) 200? unknown
elvis // (c) 200? unknown
europass // (c) 200? 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)
hyperbbc // 1998 - Hyper Bishi Bashi (GQ876 VER. EAA)
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)
konam80j // 1998 - Konami 80's Gallery (GC826 VER. JAA)
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
outzonec // 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
samesame // 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 */
for (sprnum = 0; sprnum < 16; sprnum++)
{
UINT8 *rambase = &m_spriteram[sprnum * 0x10];
UINT8 *rambase = &m_alt_spriteram[sprnum * 8];
int level = sprnum & 7;
UINT8 clo, chi;
UINT32 sum;

View File

@ -301,35 +301,6 @@ void debug_imgui::handle_keys()
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))
io.KeyCtrl = true;
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(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);
// check for commands that start execution (so that input fields can be disabled)
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();
}
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll;
if(m_running)
flags |= ImGuiInputTextFlags_ReadOnly;
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();
}
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll;
ImGui::PushItemWidth(100.0f);
if(m_running)
flags |= ImGuiInputTextFlags_ReadOnly;
@ -944,8 +921,6 @@ void debug_imgui::draw_console()
draw_view(view_main_console,false);
ImGui::EndChild();
ImGui::Separator();
//if(ImGui::IsWindowFocused())
// ImGui::SetKeyboardFocusHere();
ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue;
if(m_running)
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_Escape] = ITEM_ID_ESC;
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_size = (downcast<osd_options &>(m_machine->options()).debugger_font_size());

View File

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