mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
Merge remote-tracking branch 'origin/master' into netlist_dev
This commit is contained in:
commit
20be9611af
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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
11183
hash/n64.xml
File diff suppressed because it is too large
Load Diff
@ -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 "systm" 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>
|
||||
|
48
makefile
48
makefile
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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; }
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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__ */
|
||||
|
@ -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
@ -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 )
|
||||
|
@ -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) )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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) )
|
||||
|
@ -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)
|
||||
|
@ -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.);
|
||||
}
|
||||
}
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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>
|
||||
|
@ -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 "A""><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 "B""><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>
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user