mirror of
https://github.com/holub/mame
synced 2025-04-09 18:17:44 +03:00
sega/sega_beena.cpp: Hooked up barcode cards.
Systems promoted to working --------------------------- Sega TV Ocha-Ken [QUFB] Software list items promoted to working (tvochken.xml) ------------------------------------------------------ TV to Ocha-Card: Ocha-Ken 'Ho' to Seikatsu [Vas Crabb]
This commit is contained in:
parent
0a9779a433
commit
59cbd883f8
@ -480,6 +480,10 @@ providing what’s needed:
|
||||
<luascript-ref-renderlayview>` (indexed by name).
|
||||
* ``machine`` giving MAME’s current :ref:`running machine
|
||||
<luascript-ref-machine>`.
|
||||
* ``emu.device_enumerator``, ``emu.palette_enumerator``,
|
||||
``emu.screen_enumerator``, ``emu.cassette_enumerator``,
|
||||
``emu.image_enumerator`` and ``emu.slot_enumerator`` functions for obtaining
|
||||
specific device interfaces.
|
||||
* ``emu.attotime``, ``emu.render_bounds`` and ``emu.render_color`` functions for
|
||||
creating :ref:`attotime <luascript-ref-attotime>`, :ref:`bounds
|
||||
<luascript-ref-renderbounds>` and :ref:`colour <luascript-ref-rendercolor>`
|
||||
|
@ -5,358 +5,358 @@ license:CC0-1.0
|
||||
-->
|
||||
<softwarelist name="tvochken" description="TV Ocha-Ken barcode cards">
|
||||
|
||||
<software name="tvochken" supported="no">
|
||||
<software name="tvochken" supported="yes">
|
||||
<description>TV to Ocha-Card: Ocha-Ken 'Ho' to Seikatsu</description>
|
||||
<year>2005</year>
|
||||
<publisher>Sega Toys</publisher>
|
||||
<info name="alt_title" value="テレビとお茶札 お茶犬『ほっ』と生活"/>
|
||||
<part name="card1" interface="sega_beena_cart">
|
||||
<part name="card1" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 1"/>
|
||||
<feature name="barcode" value="0x900a"/>
|
||||
<dataarea name="card1" size="0x4f1749">
|
||||
<dataarea name="card" size="0x4f1749">
|
||||
<rom name="0 - 0001.png" size="0x4f1749" crc="c5432bb7" sha1="375fb553245e88d37977f6a831ede72cf7c94eb8"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card2" interface="sega_beena_cart">
|
||||
<part name="card2" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 2"/>
|
||||
<feature name="barcode" value="0xa05a"/>
|
||||
<dataarea name="card2" size="0x4df6f0">
|
||||
<dataarea name="card" size="0x4df6f0">
|
||||
<rom name="0 - 0002.png" size="0x4df6f0" crc="6c83c38a" sha1="616a796615423e1eaa05a2637cd606d5816c7f01"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card3" interface="sega_beena_cart">
|
||||
<part name="card3" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 3"/>
|
||||
<feature name="barcode" value="0xb0aa"/>
|
||||
<dataarea name="card3" size="0x4f220b">
|
||||
<dataarea name="card" size="0x4f220b">
|
||||
<rom name="0 - 0003.png" size="0x4f220b" crc="a14f9d50" sha1="a3bce401fe3c70bef046addb4cbc31c5e0f04f0f"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card4" interface="sega_beena_cart">
|
||||
<part name="card4" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 4"/>
|
||||
<feature name="barcode" value="0x90ca"/>
|
||||
<dataarea name="card4" size="0x4f1602">
|
||||
<dataarea name="card" size="0x4f1602">
|
||||
<rom name="0 - 0004.png" size="0x4f1602" crc="1c124ccf" sha1="840a3ee78ae0995b9b9fa9428da18d0ecd293f88"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card5" interface="sega_beena_cart">
|
||||
<part name="card5" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 5"/>
|
||||
<feature name="barcode" value="0x910a"/>
|
||||
<dataarea name="card5" size="0x505a3a">
|
||||
<dataarea name="card" size="0x505a3a">
|
||||
<rom name="0 - 0005.png" size="0x505a3a" crc="c7190bb3" sha1="e4d1307971c053fc7ad98b6b8bea19a639c88084"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card6" interface="sega_beena_cart">
|
||||
<part name="card6" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 6"/>
|
||||
<feature name="barcode" value="0x914a"/>
|
||||
<dataarea name="card6" size="0x50cbd4">
|
||||
<dataarea name="card" size="0x50cbd4">
|
||||
<rom name="0 - 0006.png" size="0x50cbd4" crc="0ef3b099" sha1="b736179f3b34b8301b32f2f6ded732634c9c0f76"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card7" interface="sega_beena_cart">
|
||||
<part name="card7" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 7"/>
|
||||
<feature name="barcode" value="0x918a"/>
|
||||
<dataarea name="card7" size="0x4da934">
|
||||
<dataarea name="card" size="0x4da934">
|
||||
<rom name="0 - 0007.png" size="0x4da934" crc="66e119c6" sha1="d3ddc0bc4bea354e767ff6cc9cf152ce84bd2b24"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card8" interface="sega_beena_cart">
|
||||
<part name="card8" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 8"/>
|
||||
<feature name="barcode" value="0x91ca"/>
|
||||
<dataarea name="card8" size="0x4eff47">
|
||||
<dataarea name="card" size="0x4eff47">
|
||||
<rom name="0 - 0008.png" size="0x4eff47" crc="df475cf6" sha1="26ed60fb032b41464cc93582ab51b05ec61abf5c"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card9" interface="sega_beena_cart">
|
||||
<part name="card9" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 9"/>
|
||||
<feature name="barcode" value="0x920a"/>
|
||||
<dataarea name="card9" size="0x4f423e">
|
||||
<dataarea name="card" size="0x4f423e">
|
||||
<rom name="0 - 0009.png" size="0x4f423e" crc="d3f5b52c" sha1="157ec2a13e90381c5348352aafeffeb63f453f9c"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card10" interface="sega_beena_cart">
|
||||
<part name="card10" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 10"/>
|
||||
<feature name="barcode" value="0xa25a"/>
|
||||
<dataarea name="card10" size="0x58a781">
|
||||
<dataarea name="card" size="0x58a781">
|
||||
<rom name="0 - 0010.png" size="0x58a781" crc="dfae4f5e" sha1="515cd302381d9dcbefa69adaaa4c8bc13b661877"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card11" interface="sega_beena_cart">
|
||||
<part name="card11" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 11"/>
|
||||
<feature name="barcode" value="0x928a"/>
|
||||
<dataarea name="card11" size="0x5b058b">
|
||||
<dataarea name="card" size="0x5b058b">
|
||||
<rom name="0 - 0011.png" size="0x5b058b" crc="5bb62726" sha1="6199c01eb5fcc7de7fe90e89f3ee7140705caeba"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card12" interface="sega_beena_cart">
|
||||
<part name="card12" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 12"/>
|
||||
<feature name="barcode" value="0x92ca"/>
|
||||
<dataarea name="card12" size="0x5a279b">
|
||||
<dataarea name="card" size="0x5a279b">
|
||||
<rom name="0 - 0012.png" size="0x5a279b" crc="b5d1111e" sha1="8b05ce9c1f74563ab9735645a5eb89a3cada74a5"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card13" interface="sega_beena_cart">
|
||||
<part name="card13" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 13"/>
|
||||
<feature name="barcode" value="0xa312"/>
|
||||
<dataarea name="card13" size="0x4dc9ad">
|
||||
<dataarea name="card" size="0x4dc9ad">
|
||||
<rom name="0 - 0013.png" size="0x4dc9ad" crc="707edf49" sha1="e7deac18147217e8128b5d8c440fc605c530da81"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card14" interface="sega_beena_cart">
|
||||
<part name="card14" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 14"/>
|
||||
<feature name="barcode" value="0x934a"/>
|
||||
<dataarea name="card14" size="0x4ce76b">
|
||||
<dataarea name="card" size="0x4ce76b">
|
||||
<rom name="0 - 0014.png" size="0x4ce76b" crc="5c3ec4c2" sha1="a4954ed1710a87ee673d3a15b6dfdf5af46e80d6"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card15" interface="sega_beena_cart">
|
||||
<part name="card15" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 15"/>
|
||||
<feature name="barcode" value="0x938a"/>
|
||||
<dataarea name="card15" size="0x531c9f">
|
||||
<dataarea name="card" size="0x531c9f">
|
||||
<rom name="0 - 0015.png" size="0x531c9f" crc="3507b23e" sha1="ea12fa59718cdbbef6d7728e555176b76692c89b"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card16" interface="sega_beena_cart">
|
||||
<part name="card16" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 16"/>
|
||||
<feature name="barcode" value="0x93ca"/>
|
||||
<dataarea name="card16" size="0x5506d3">
|
||||
<dataarea name="card" size="0x5506d3">
|
||||
<rom name="0 - 0016.png" size="0x5506d3" crc="6c3b995c" sha1="9f63ffa5ffec951af65dfb5ce432f13b0e1bd92b"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card17" interface="sega_beena_cart">
|
||||
<part name="card17" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 17"/>
|
||||
<feature name="barcode" value="0xa41a"/>
|
||||
<dataarea name="card17" size="0x50cfbd">
|
||||
<dataarea name="card" size="0x50cfbd">
|
||||
<rom name="0 - 0017.png" size="0x50cfbd" crc="a3cdf730" sha1="89035eeb714f45cac2ef0c9e8ee86d5ba50d04bb"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card18" interface="sega_beena_cart">
|
||||
<part name="card18" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 18"/>
|
||||
<feature name="barcode" value="0x944a"/>
|
||||
<dataarea name="card18" size="0x4c9ed3">
|
||||
<dataarea name="card" size="0x4c9ed3">
|
||||
<rom name="0 - 0018.png" size="0x4c9ed3" crc="8a0eaeb4" sha1="27131d1a642a27cea5ae1bb0c57fcd20d7e46f28"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card19" interface="sega_beena_cart">
|
||||
<part name="card19" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 19"/>
|
||||
<feature name="barcode" value="0x948a"/>
|
||||
<dataarea name="card19" size="0x4e43a3">
|
||||
<dataarea name="card" size="0x4e43a3">
|
||||
<rom name="0 - 0019.png" size="0x4e43a3" crc="425cfb05" sha1="e62e0ae7da3aa45afc5d7744277288df32925b96"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card20" interface="sega_beena_cart">
|
||||
<part name="card20" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 20"/>
|
||||
<feature name="barcode" value="0xb4da"/>
|
||||
<dataarea name="card20" size="0x4a67a5">
|
||||
<dataarea name="card" size="0x4a67a5">
|
||||
<rom name="0 - 0020.png" size="0x4a67a5" crc="1b3ddf36" sha1="f89981193f4a0f5438a8a4d05b29bba5832712f2"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card21" interface="sega_beena_cart">
|
||||
<part name="card21" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 21"/>
|
||||
<feature name="barcode" value="0xb512"/>
|
||||
<dataarea name="card21" size="0x595884">
|
||||
<dataarea name="card" size="0x595884">
|
||||
<rom name="0 - 0021.png" size="0x595884" crc="812535ac" sha1="0e88309e4629e352542e0f77c282add67d9e0eff"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card22" interface="sega_beena_cart">
|
||||
<part name="card22" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 22"/>
|
||||
<feature name="barcode" value="0xa55a"/>
|
||||
<dataarea name="card22" size="0x59e757">
|
||||
<dataarea name="card" size="0x59e757">
|
||||
<rom name="0 - 0022.png" size="0x59e757" crc="a3af7a1e" sha1="2ce48f5948d2b4aed80cff97e4443fb377a0dc75"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card23" interface="sega_beena_cart">
|
||||
<part name="card23" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 23"/>
|
||||
<feature name="barcode" value="0x958a"/>
|
||||
<dataarea name="card23" size="0x5845cc">
|
||||
<dataarea name="card" size="0x5845cc">
|
||||
<rom name="0 - 0023.png" size="0x5845cc" crc="7962f20b" sha1="1cdb601803881b6161818902253d3e2d5c0676ca"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card24" interface="sega_beena_cart">
|
||||
<part name="card24" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 24"/>
|
||||
<feature name="barcode" value="0x95ca"/>
|
||||
<dataarea name="card24" size="0x4cbaec">
|
||||
<dataarea name="card" size="0x4cbaec">
|
||||
<rom name="0 - 0024.png" size="0x4cbaec" crc="3fb7395c" sha1="2e9631bc27edc15e5be25c22a81f6f51fc1c6f20"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card25" interface="sega_beena_cart">
|
||||
<part name="card25" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 25"/>
|
||||
<feature name="barcode" value="0x960a"/>
|
||||
<dataarea name="card25" size="0x57375d">
|
||||
<dataarea name="card" size="0x57375d">
|
||||
<rom name="0 - 0025.png" size="0x57375d" crc="b6dc9acd" sha1="fff3ebbea33f7261ae8ae4d4c7c3847b9cf3f88a"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card26" interface="sega_beena_cart">
|
||||
<part name="card26" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 26"/>
|
||||
<feature name="barcode" value="0x964a"/>
|
||||
<dataarea name="card26" size="0x583f9c">
|
||||
<dataarea name="card" size="0x583f9c">
|
||||
<rom name="0 - 0026.png" size="0x583f9c" crc="46033178" sha1="ef265ce7fafa88cebe4d8c199687e58b0a1375a3"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card27" interface="sega_beena_cart">
|
||||
<part name="card27" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 27"/>
|
||||
<feature name="barcode" value="0xb69a"/>
|
||||
<dataarea name="card27" size="0x586407">
|
||||
<dataarea name="card" size="0x586407">
|
||||
<rom name="0 - 0027.png" size="0x586407" crc="2278b79b" sha1="911200fd9b2662e60849ad8d0d818ffc77166815"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card28" interface="sega_beena_cart">
|
||||
<part name="card28" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 28"/>
|
||||
<feature name="barcode" value="0x96ca"/>
|
||||
<dataarea name="card28" size="0x4e0094">
|
||||
<dataarea name="card" size="0x4e0094">
|
||||
<rom name="0 - 0028.png" size="0x4e0094" crc="4ecefa48" sha1="8bb7c0e2a1f117e7c1c205fb6f68dd3b79d3608f"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card29" interface="sega_beena_cart">
|
||||
<part name="card29" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 29"/>
|
||||
<feature name="barcode" value="0x970a"/>
|
||||
<dataarea name="card29" size="0x58ee04">
|
||||
<dataarea name="card" size="0x58ee04">
|
||||
<rom name="0 - 0029.png" size="0x58ee04" crc="52cadc27" sha1="820a47efb41e1e52e3a0e75b8550983e2890fe23"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card30" interface="sega_beena_cart">
|
||||
<part name="card30" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 30"/>
|
||||
<feature name="barcode" value="0x974a"/>
|
||||
<dataarea name="card30" size="0x59ffec">
|
||||
<dataarea name="card" size="0x59ffec">
|
||||
<rom name="0 - 0030.png" size="0x59ffec" crc="0bedfd6a" sha1="781cd0be18c3a29015317ace95e3749182a9c5e5"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card31" interface="sega_beena_cart">
|
||||
<part name="card31" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 31"/>
|
||||
<feature name="barcode" value="0x978a"/>
|
||||
<dataarea name="card31" size="0x52a465">
|
||||
<dataarea name="card" size="0x52a465">
|
||||
<rom name="0 - 0031.png" size="0x52a465" crc="6f1fb6df" sha1="430c170759010daa72318bd6bac07637fb03ac66"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card32" interface="sega_beena_cart">
|
||||
<part name="card32" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 32"/>
|
||||
<feature name="barcode" value="0x97ca"/>
|
||||
<dataarea name="card32" size="0x5794b4">
|
||||
<dataarea name="card" size="0x5794b4">
|
||||
<rom name="0 - 0032.png" size="0x5794b4" crc="0bd168a3" sha1="63eb11961046c3c382e695f0cf8292f2dbba0861"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card33" interface="sega_beena_cart">
|
||||
<part name="card33" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 33"/>
|
||||
<feature name="barcode" value="0x980a"/>
|
||||
<dataarea name="card33" size="0x4b665e">
|
||||
<dataarea name="card" size="0x4b665e">
|
||||
<rom name="0 - 0033.png" size="0x4b665e" crc="03cf3ac0" sha1="55d58cb97d5f464982d3cba4915a78e50110dc28"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card34" interface="sega_beena_cart">
|
||||
<part name="card34" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 34"/>
|
||||
<feature name="barcode" value="0x984a"/>
|
||||
<dataarea name="card34" size="0x5992ff">
|
||||
<dataarea name="card" size="0x5992ff">
|
||||
<rom name="0 - 0034.png" size="0x5992ff" crc="4c1c285c" sha1="cde5d284ffa9a9a44c88529692e5bc9f6fffb0c7"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card35" interface="sega_beena_cart">
|
||||
<part name="card35" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 35"/>
|
||||
<feature name="barcode" value="0xa892"/>
|
||||
<dataarea name="card35" size="0x523acd">
|
||||
<dataarea name="card" size="0x523acd">
|
||||
<rom name="0 - 0035.png" size="0x523acd" crc="612aa0c0" sha1="b302fbad590fb8db3624884614c9a8bd8108acac"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card36" interface="sega_beena_cart">
|
||||
<part name="card36" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 36"/>
|
||||
<feature name="barcode" value="0xa8da"/>
|
||||
<dataarea name="card36" size="0x5213b6">
|
||||
<dataarea name="card" size="0x5213b6">
|
||||
<rom name="0 - 0036.png" size="0x5213b6" crc="befc985e" sha1="d1caa434da81b2d1e0773d5edc147800c6d48b7a"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card37" interface="sega_beena_cart">
|
||||
<part name="card37" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 37"/>
|
||||
<feature name="barcode" value="0xa91a"/>
|
||||
<dataarea name="card37" size="0x4ff7ee">
|
||||
<dataarea name="card" size="0x4ff7ee">
|
||||
<rom name="0 - 0037.png" size="0x4ff7ee" crc="eb1b4883" sha1="b5a36c627f224dd7d1d6953ac68dcd3ec055950c"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card38" interface="sega_beena_cart">
|
||||
<part name="card38" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 38"/>
|
||||
<feature name="barcode" value="0xa952"/>
|
||||
<dataarea name="card38" size="0x519ced">
|
||||
<dataarea name="card" size="0x519ced">
|
||||
<rom name="0 - 0038.png" size="0x519ced" crc="ccc3807c" sha1="1834dea6b2246452b54b0f0136539e9b87cc85d1"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card39" interface="sega_beena_cart">
|
||||
<part name="card39" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 39"/>
|
||||
<feature name="barcode" value="0x998a"/>
|
||||
<dataarea name="card39" size="0x5322d6">
|
||||
<dataarea name="card" size="0x5322d6">
|
||||
<rom name="0 - 0039.png" size="0x5322d6" crc="e38dba54" sha1="e42c4a29a384f177bbf3658a8f28306985d5cb78"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card40" interface="sega_beena_cart">
|
||||
<part name="card40" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 40"/>
|
||||
<feature name="barcode" value="0xb9da"/>
|
||||
<dataarea name="card40" size="0x4e717c">
|
||||
<dataarea name="card" size="0x4e717c">
|
||||
<rom name="0 - 0040.png" size="0x4e717c" crc="d5222fa8" sha1="32f55c769f00e44beff9539241ab974bb94ebe98"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card41" interface="sega_beena_cart">
|
||||
<part name="card41" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 41"/>
|
||||
<feature name="barcode" value="0xaa1a"/>
|
||||
<dataarea name="card41" size="0x512de5">
|
||||
<dataarea name="card" size="0x512de5">
|
||||
<rom name="0 - 0041.png" size="0x512de5" crc="5d763c3c" sha1="eb7e09b68e77bfe92fe2699c8c2010f9e7ea0dfb"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card42" interface="sega_beena_cart">
|
||||
<part name="card42" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 42"/>
|
||||
<feature name="barcode" value="0x9a4a"/>
|
||||
<dataarea name="card42" size="0x500827">
|
||||
<dataarea name="card" size="0x500827">
|
||||
<rom name="0 - 0042.png" size="0x500827" crc="b4413674" sha1="f2255d47156f7fb45043517928b1afa86cc2c8b8"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card43" interface="sega_beena_cart">
|
||||
<part name="card43" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 43"/>
|
||||
<feature name="barcode" value="0x9a8a"/>
|
||||
<dataarea name="card43" size="0x516bd5">
|
||||
<dataarea name="card" size="0x516bd5">
|
||||
<rom name="0 - 0043.png" size="0x516bd5" crc="04c35610" sha1="e7867e16ad3acdb5459059381880aceb11935475"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card44" interface="sega_beena_cart">
|
||||
<part name="card44" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 44"/>
|
||||
<feature name="barcode" value="0x9aca"/>
|
||||
<dataarea name="card44" size="0x51e8b7">
|
||||
<dataarea name="card" size="0x51e8b7">
|
||||
<rom name="0 - 0044.png" size="0x51e8b7" crc="5e5cde23" sha1="67161d59ae158286c86f0800366206daa8ff080e"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card45" interface="sega_beena_cart">
|
||||
<part name="card45" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 45"/>
|
||||
<feature name="barcode" value="0xab12"/>
|
||||
<dataarea name="card45" size="0x51a367">
|
||||
<dataarea name="card" size="0x51a367">
|
||||
<rom name="0 - 0045.png" size="0x51a367" crc="2d06e5d6" sha1="7d82cbbb0cff2ad1710dfb025ff5517dd3fb6321"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card46" interface="sega_beena_cart">
|
||||
<part name="card46" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 46"/>
|
||||
<feature name="barcode" value="0xab52"/>
|
||||
<dataarea name="card46" size="0x509b6a">
|
||||
<dataarea name="card" size="0x509b6a">
|
||||
<rom name="0 - 0046.png" size="0x509b6a" crc="91b3cf44" sha1="7be818e4dbfa9ea8bad46270edb71fa899be6aa6"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card47" interface="sega_beena_cart">
|
||||
<part name="card47" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 47"/>
|
||||
<feature name="barcode" value="0xbba2"/>
|
||||
<dataarea name="card47" size="0x50b36f">
|
||||
<dataarea name="card" size="0x50b36f">
|
||||
<rom name="0 - 0047.png" size="0x50b36f" crc="106f037e" sha1="eb2a5d056b5f19c53233765c813cdfb53746f30b"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card48" interface="sega_beena_cart">
|
||||
<part name="card48" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 48"/>
|
||||
<feature name="barcode" value="0xabd2"/>
|
||||
<dataarea name="card48" size="0x5073bd">
|
||||
<dataarea name="card" size="0x5073bd">
|
||||
<rom name="0 - 0048.png" size="0x5073bd" crc="f4f2efeb" sha1="07774d7bde672d5b40142448691689edafe63421"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card49" interface="sega_beena_cart">
|
||||
<part name="card49" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 49"/>
|
||||
<feature name="barcode" value="0x9c0a"/>
|
||||
<dataarea name="card49" size="0x521ed6">
|
||||
<dataarea name="card" size="0x521ed6">
|
||||
<rom name="0 - 0049.png" size="0x521ed6" crc="0cf9a850" sha1="b92be28de3c8284d75045b161a37e8eb52c16e83"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="card50" interface="sega_beena_cart">
|
||||
<part name="card50" interface="tvochken_card">
|
||||
<feature name="part_id" value="Card 50"/>
|
||||
<feature name="barcode" value="0x9c4a"/>
|
||||
<dataarea name="card50" size="0x4f7f34">
|
||||
<dataarea name="card" size="0x4f7f34">
|
||||
<rom name="0 - 0050.png" size="0x4f7f34" crc="a918012a" sha1="a5a96c2c0a2ec76a3ec1784faaade33e0b8743e2"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
|
@ -19,6 +19,12 @@ function layout.startplugin()
|
||||
local env = {
|
||||
machine = manager.machine,
|
||||
emu = {
|
||||
device_enumerator = emu.device_enumerator,
|
||||
palette_enumerator = emu.palette_enumerator,
|
||||
screen_enumerator = emu.screen_enumerator,
|
||||
cassette_enumerator = emu.cassette_enumerator,
|
||||
image_enumerator = emu.image_enumerator,
|
||||
slot_enumerator = emu.slot_enumerator,
|
||||
attotime = emu.attotime,
|
||||
render_bounds = emu.render_bounds,
|
||||
render_color = emu.render_color,
|
||||
|
@ -14,14 +14,16 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "machine/w83977tf.h"
|
||||
|
||||
#include "bus/isa/isa.h"
|
||||
//#include "machine/ds128x.h"
|
||||
#include "machine/pckeybrd.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#define VERBOSE (LOG_GENERAL)
|
||||
//#define LOG_OUTPUT_FUNC osd_printf_info
|
||||
#include "logmacro.h"
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(W83977TF, w83977tf_device, "w83977tf", "Winbond W83977TF Super I/O")
|
||||
|
||||
w83977tf_device::w83977tf_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
@ -43,7 +45,22 @@ w83977tf_device::w83977tf_device(const machine_config &mconfig, const char *tag,
|
||||
// , m_txd2_callback(*this)
|
||||
// , m_ndtr2_callback(*this)
|
||||
// , m_nrts2_callback(*this)
|
||||
{ }
|
||||
, m_index(0)
|
||||
, m_logical_index(0)
|
||||
, m_hefras(0)
|
||||
, m_lockreg(0)
|
||||
, m_lock_sequence(0)
|
||||
, m_keyb_irq_line(0)
|
||||
, m_mouse_irq_line(0)
|
||||
, m_rtc_irq_line(0)
|
||||
, m_keyb_address{ 0, 0 }
|
||||
{
|
||||
std::fill(std::begin(m_activate), std::end(m_activate), false);
|
||||
}
|
||||
|
||||
w83977tf_device::~w83977tf_device()
|
||||
{
|
||||
}
|
||||
|
||||
void w83977tf_device::device_start()
|
||||
{
|
||||
|
@ -1,6 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders: Angelo Salese
|
||||
|
||||
#ifndef MAME_MACHINE_W83977TF_H
|
||||
#define MAME_MACHINE_W83977TF_H
|
||||
|
||||
@ -16,7 +15,7 @@ class w83977tf_device : public device_t,
|
||||
{
|
||||
public:
|
||||
w83977tf_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
~w83977tf_device() {}
|
||||
virtual ~w83977tf_device();
|
||||
|
||||
void remap(int space_id, offs_t start, offs_t end) override;
|
||||
|
||||
@ -58,6 +57,18 @@ private:
|
||||
// devcb_write_line m_ndtr2_callback;
|
||||
// devcb_write_line m_nrts2_callback;
|
||||
|
||||
u8 m_index;
|
||||
u8 m_logical_index;
|
||||
bool m_activate[0xb];
|
||||
|
||||
u8 m_hefras;
|
||||
u8 m_lockreg;
|
||||
u8 m_lock_sequence;
|
||||
u8 m_keyb_irq_line;
|
||||
u8 m_mouse_irq_line;
|
||||
u8 m_rtc_irq_line;
|
||||
u16 m_keyb_address[2];
|
||||
|
||||
uint8_t read(offs_t offset);
|
||||
void write(offs_t offset, u8 data);
|
||||
u8 cr26_r();
|
||||
@ -65,9 +76,6 @@ private:
|
||||
|
||||
void config_map(address_map &map);
|
||||
|
||||
u8 m_index = 0;
|
||||
u8 m_logical_index = 0;
|
||||
bool m_activate[0xb]{};
|
||||
void logical_device_select_w(offs_t offset, u8 data);
|
||||
template <unsigned N> u8 activate_r(offs_t offset);
|
||||
template <unsigned N> void activate_w(offs_t offset, u8 data);
|
||||
@ -98,14 +106,6 @@ private:
|
||||
void irq_rtc_w(int state);
|
||||
|
||||
void request_irq(int irq, int state);
|
||||
|
||||
u8 m_hefras = 0;
|
||||
u8 m_lockreg = 0;
|
||||
u8 m_lock_sequence = 0;
|
||||
u8 m_keyb_irq_line = 0;
|
||||
u8 m_mouse_irq_line = 0;
|
||||
u8 m_rtc_irq_line = 0;
|
||||
u16 m_keyb_address[2]{};
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(W83977TF, w83977tf_device);
|
||||
|
@ -407,9 +407,8 @@ u8 *device_image_interface::get_software_region(std::string_view tag)
|
||||
if (!loaded_through_softlist())
|
||||
return nullptr;
|
||||
|
||||
std::string full_tag = util::string_format("%s:%s", device().tag(), tag);
|
||||
memory_region *region = device().machine().root_device().memregion(full_tag);
|
||||
return region != nullptr ? region->base() : nullptr;
|
||||
memory_region *const region = device().memregion(tag);
|
||||
return region ? region->base() : nullptr;
|
||||
}
|
||||
|
||||
|
||||
@ -419,9 +418,11 @@ u8 *device_image_interface::get_software_region(std::string_view tag)
|
||||
|
||||
u32 device_image_interface::get_software_region_length(std::string_view tag)
|
||||
{
|
||||
std::string full_tag = util::string_format("%s:%s", device().tag(), tag);
|
||||
memory_region *region = device().machine().root_device().memregion(full_tag);
|
||||
return region != nullptr ? region->bytes() : 0;
|
||||
if (!loaded_through_softlist())
|
||||
return 0;
|
||||
|
||||
memory_region *const region = device().memregion(tag);
|
||||
return region ? region->bytes() : 0;
|
||||
}
|
||||
|
||||
|
||||
|
47
src/mame/layout/tvochken.lay
Normal file
47
src/mame/layout/tvochken.lay
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
<element name="card" />
|
||||
|
||||
<view name="Default View">
|
||||
<screen index="0">
|
||||
<bounds x="0" y="0" width="12" height="9" />
|
||||
</screen>
|
||||
|
||||
<element ref="card">
|
||||
<bounds x="0" y="9.25" width="12" height="8" />
|
||||
</element>
|
||||
</view>
|
||||
|
||||
<script><![CDATA[
|
||||
local sub -- keep this here to avoid it being garbage collected prematurely
|
||||
|
||||
file:set_resolve_tags_callback(
|
||||
function ()
|
||||
-- get card slot device and card display element
|
||||
local card_device = emu.image_enumerator(file.device)['card']
|
||||
local card_element = file.elements['card']
|
||||
|
||||
-- invalidate the card display on media change
|
||||
local card_data = card_device.device:memregion('card')
|
||||
sub = card_device:add_media_change_notifier(
|
||||
function (event)
|
||||
card_data = card_device.device:memregion('card')
|
||||
card_element:invalidate()
|
||||
end)
|
||||
|
||||
-- draw the card image
|
||||
card_element:set_draw_callback(
|
||||
function (state, bitmap)
|
||||
if card_data ~= nil then
|
||||
-- TODO: reduce temporary memory usage when I/O classes are exposed to Lua
|
||||
local data = card_data:read(0, card_data.size)
|
||||
local image = emu.bitmap_argb32.load(data)
|
||||
image:resample(bitmap)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
]]></script>
|
||||
</mamelayout>
|
@ -8,7 +8,6 @@
|
||||
|
||||
TODO:
|
||||
|
||||
Storyware layout
|
||||
MIDI audio
|
||||
Peripherals (including the SD-Card adapter)
|
||||
Component list / PCB diagram
|
||||
@ -111,8 +110,7 @@
|
||||
Storyware
|
||||
---------
|
||||
|
||||
Although no booklet artwork is rendered, toggling input port 'Pen Target'
|
||||
switches between mapping pen coordinates to the tablet or the Storyware.
|
||||
Toggling 'Pen Target' input switches between mapping pen coordinates to the tablet or the book.
|
||||
|
||||
Test Mode
|
||||
---------
|
||||
@ -131,6 +129,8 @@
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "tvochken_card.h"
|
||||
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
#include "cpu/arm7/ap2010cpu.h"
|
||||
@ -147,10 +147,12 @@
|
||||
#include "screen.h"
|
||||
|
||||
#include "beena.lh"
|
||||
#include "tvochken.lh"
|
||||
|
||||
#define VERBOSE (0)
|
||||
#include "logmacro.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class sega_9h0_0008_state : public driver_device
|
||||
@ -161,8 +163,6 @@ public:
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_workram(*this, "workram")
|
||||
, m_pcm(*this, "pcm")
|
||||
, m_cart(*this, "cartslot")
|
||||
, m_cart_region(nullptr)
|
||||
, m_screen_main(*this, "screen")
|
||||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_palette(*this, "palette")
|
||||
@ -179,12 +179,12 @@ public:
|
||||
, m_io_video_config(*this, "VIDEO_CONFIG")
|
||||
{ }
|
||||
|
||||
void sega_9h0_0008(machine_config &config);
|
||||
|
||||
protected:
|
||||
static inline constexpr uint32_t ROM_MASK_BASE = 0x80000000;
|
||||
static inline constexpr uint32_t ROM_FLASH_BASE = 0xa0000000;
|
||||
|
||||
void sega_9h0_0008(machine_config &config);
|
||||
|
||||
virtual void device_post_load() override;
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -258,9 +258,6 @@ protected:
|
||||
bool m_requested_fiq;
|
||||
uint32_t m_irq_wait_start_addr;
|
||||
|
||||
optional_device<generic_slot_device> m_cart;
|
||||
memory_region *m_cart_region;
|
||||
|
||||
required_device<screen_device> m_screen_main;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
@ -1721,13 +1718,9 @@ void sega_9h0_0008_state::sega_9h0_0008(machine_config &config)
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty);
|
||||
|
||||
config.set_default_layout(layout_beena);
|
||||
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
AP2010PCM(config, m_pcm); // Unknown clock
|
||||
m_pcm->add_route(ALL_OUTPUTS, "speaker", 1.0);
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("sega_beena_cart");
|
||||
}
|
||||
|
||||
|
||||
@ -1736,6 +1729,7 @@ class sega_beena_state : public sega_9h0_0008_state
|
||||
public:
|
||||
sega_beena_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: sega_9h0_0008_state(mconfig, type, tag)
|
||||
, m_cart(*this, "cartslot")
|
||||
, m_io_page_config(*this, "PAGE_CONFIG")
|
||||
, m_io_page(*this, "PAGE")
|
||||
, m_io_pad_left(*this, "PAD_LEFT")
|
||||
@ -1756,6 +1750,8 @@ private:
|
||||
virtual void update_crosshair(screen_device &screen) override;
|
||||
virtual void update_sensors(offs_t offset) override;
|
||||
|
||||
required_device<generic_slot_device> m_cart;
|
||||
|
||||
required_ioport m_io_page_config;
|
||||
required_ioport m_io_page;
|
||||
required_ioport m_io_pad_left;
|
||||
@ -1775,6 +1771,10 @@ void sega_beena_state::sega_beena(machine_config &config)
|
||||
m_cart->set_width(GENERIC_ROM32_WIDTH);
|
||||
m_cart->set_device_load(FUNC(sega_beena_state::cart_load));
|
||||
m_cart->set_must_be_loaded(false);
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("sega_beena_cart");
|
||||
|
||||
config.set_default_layout(layout_beena);
|
||||
}
|
||||
|
||||
void sega_beena_state::install_game_rom()
|
||||
@ -1974,12 +1974,16 @@ class tvochken_state : public sega_9h0_0008_state
|
||||
public:
|
||||
tvochken_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: sega_9h0_0008_state(mconfig, type, tag)
|
||||
, m_card(*this, "card")
|
||||
, m_io_buttons(*this, "BUTTONS")
|
||||
, m_io_cards(*this, "CARDS")
|
||||
{ }
|
||||
|
||||
void tvochken(machine_config &config);
|
||||
|
||||
virtual uint32_t io_expansion_r() override;
|
||||
|
||||
void scan_card(int state);
|
||||
|
||||
private:
|
||||
enum card_state : uint8_t
|
||||
{
|
||||
@ -1993,11 +1997,11 @@ private:
|
||||
|
||||
virtual void install_game_rom() override;
|
||||
|
||||
required_device<tvochken_card_device> m_card;
|
||||
|
||||
required_ioport m_io_buttons;
|
||||
required_ioport m_io_cards;
|
||||
uint8_t m_card_previous_input;
|
||||
|
||||
uint8_t m_card_i;
|
||||
uint16_t m_card_data;
|
||||
uint8_t m_card_data_i;
|
||||
uint8_t m_card_state;
|
||||
@ -2005,11 +2009,21 @@ private:
|
||||
uint8_t m_card_status;
|
||||
};
|
||||
|
||||
void tvochken_state::tvochken(machine_config &config)
|
||||
{
|
||||
sega_9h0_0008(config);
|
||||
|
||||
TVOCHKEN_CARD(config, m_card);
|
||||
|
||||
SOFTWARE_LIST(config, "card_list").set_original("tvochken");
|
||||
|
||||
config.set_default_layout(layout_tvochken);
|
||||
}
|
||||
|
||||
void tvochken_state::machine_start()
|
||||
{
|
||||
sega_9h0_0008_state::machine_start();
|
||||
|
||||
save_item(NAME(m_card_i));
|
||||
save_item(NAME(m_card_data));
|
||||
save_item(NAME(m_card_data_i));
|
||||
save_item(NAME(m_card_hold_i));
|
||||
@ -2023,7 +2037,6 @@ void tvochken_state::machine_reset()
|
||||
|
||||
m_card_previous_input = 0;
|
||||
|
||||
m_card_i = 0;
|
||||
m_card_data = 0;
|
||||
m_card_data_i = 0;
|
||||
m_card_hold_i = 0;
|
||||
@ -2057,35 +2070,18 @@ uint32_t tvochken_state::io_expansion_r()
|
||||
* Each scanned barcode is compared against these values taken from
|
||||
* an in-memory table at 0xc00d0f9c. Valid barcodes always have the
|
||||
* last bit set.
|
||||
*/
|
||||
const uint16_t CARD_BARCODES[] = {
|
||||
0x900a, 0xa05a, 0xb0aa, 0x90ca, 0x910a,
|
||||
0x914a, 0x918a, 0x91ca, 0x920a, 0xa25a,
|
||||
0x928a, 0x92ca, 0xa312, 0x934a, 0x938a,
|
||||
0x93ca, 0xa41a, 0x944a, 0x948a, 0xb4da,
|
||||
0xb512, 0xa55a, 0x958a, 0x95ca, 0x960a,
|
||||
0x964a, 0xb69a, 0x96ca, 0x970a, 0x974a,
|
||||
0x978a, 0x97ca, 0x980a, 0x984a, 0xa892,
|
||||
0xa8da, 0xa91a, 0xa952, 0x998a, 0xb9da,
|
||||
0xaa1a, 0x9a4a, 0x9a8a, 0x9aca, 0xab12,
|
||||
0xab52, 0xbba2, 0xabd2, 0x9c0a, 0x9c4a
|
||||
};
|
||||
|
||||
const uint8_t data = m_io_cards->read();
|
||||
if (m_card_previous_input != data) {
|
||||
m_card_previous_input = data;
|
||||
if ((data & 0x80) == 0) {
|
||||
m_card_i = data;
|
||||
LOG("selected card: %d\n", m_card_i + 1);
|
||||
} else {
|
||||
if (m_card_state == IDLE) {
|
||||
m_card_data = CARD_BARCODES[m_card_i];
|
||||
m_card_hold_i = 10;
|
||||
m_card_state = START_WRITE_DATA;
|
||||
LOG("scanning card: %d -> %04x\n", m_card_i + 1, m_card_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
*
|
||||
* 0x900a, 0xa05a, 0xb0aa, 0x90ca, 0x910a,
|
||||
* 0x914a, 0x918a, 0x91ca, 0x920a, 0xa25a,
|
||||
* 0x928a, 0x92ca, 0xa312, 0x934a, 0x938a,
|
||||
* 0x93ca, 0xa41a, 0x944a, 0x948a, 0xb4da,
|
||||
* 0xb512, 0xa55a, 0x958a, 0x95ca, 0x960a,
|
||||
* 0x964a, 0xb69a, 0x96ca, 0x970a, 0x974a,
|
||||
* 0x978a, 0x97ca, 0x980a, 0x984a, 0xa892,
|
||||
* 0xa8da, 0xa91a, 0xa952, 0x998a, 0xb9da,
|
||||
* 0xaa1a, 0x9a4a, 0x9a8a, 0x9aca, 0xab12,
|
||||
* 0xab52, 0xbba2, 0xabd2, 0x9c0a, 0x9c4a
|
||||
*/
|
||||
|
||||
if (m_card_state == START_WRITE_DATA) {
|
||||
m_card_hold_i--;
|
||||
@ -2121,6 +2117,16 @@ uint32_t tvochken_state::io_expansion_r()
|
||||
return 0x98 | m_io_buttons->read();
|
||||
}
|
||||
|
||||
void tvochken_state::scan_card(int state)
|
||||
{
|
||||
if (state && (m_card_state == IDLE)) {
|
||||
m_card_data = m_card->barcode();
|
||||
m_card_hold_i = 10;
|
||||
m_card_state = START_WRITE_DATA;
|
||||
LOG("scanning card: %04x\n", m_card_data);
|
||||
}
|
||||
}
|
||||
|
||||
void tvochken_state::install_game_rom()
|
||||
{
|
||||
memory_region *rom = memregion("flash_rom");
|
||||
@ -2198,8 +2204,7 @@ static INPUT_PORTS_START( tvochken )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("C")
|
||||
|
||||
PORT_START("CARDS")
|
||||
PORT_BIT( 0x7f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(50) PORT_WRAPS PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CODE(JOYCODE_X) PORT_CODE_DEC(KEYCODE_HOME) PORT_CODE_INC(KEYCODE_END) PORT_FULL_TURN_COUNT(50) PORT_NAME("Selected Card")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Scan Card")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Scan Card") PORT_WRITE_LINE_MEMBER(tvochken_state, scan_card)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -2227,6 +2232,6 @@ ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
|
||||
CONS( 2005, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Advanced Pico BEENA", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
||||
CONS( 2005, tvochken, 0, 0, sega_9h0_0008, tvochken, tvochken_state, empty_init, "Sega", "TV Ocha-Ken", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
||||
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
|
||||
CONS( 2005, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Advanced Pico BEENA", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
||||
CONS( 2005, tvochken, 0, 0, tvochken, tvochken, tvochken_state, empty_init, "Sega", "TV Ocha-Ken", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
||||
|
158
src/mame/sega/tvochken_card.cpp
Normal file
158
src/mame/sega/tvochken_card.cpp
Normal file
@ -0,0 +1,158 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
/******************************************************************************
|
||||
|
||||
tvochken_card.cpp
|
||||
|
||||
Sega TV Ocha-ken barcode card loader
|
||||
|
||||
TODO:
|
||||
* Decode barcode from the scan so it doesn't need to be in a software
|
||||
part feature and loose files can be supported.
|
||||
* Determine correct barcode value to return when no card is inserted.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "tvochken_card.h"
|
||||
|
||||
#include "rendutil.h"
|
||||
#include "softlist_dev.h"
|
||||
|
||||
#include "ioprocs.h"
|
||||
|
||||
#include <locale>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(TVOCHKEN_CARD, tvochken_card_device, "tvochken_card", "Sega TV Ocha-Ken barcode card")
|
||||
|
||||
|
||||
tvochken_card_device::tvochken_card_device(
|
||||
machine_config const &mconfig,
|
||||
char const *tag,
|
||||
device_t *owner,
|
||||
u32 clock)
|
||||
: device_t(mconfig, TVOCHKEN_CARD, tag, owner, clock)
|
||||
, device_image_interface(mconfig, *this)
|
||||
, m_barcode(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
tvochken_card_device::~tvochken_card_device()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
std::pair<std::error_condition, std::string> tvochken_card_device::call_load()
|
||||
{
|
||||
memory_region *cardrgn;
|
||||
if (loaded_through_softlist())
|
||||
{
|
||||
// ensure card region is present
|
||||
cardrgn = memregion("card");
|
||||
if (!cardrgn)
|
||||
{
|
||||
return std::make_pair(
|
||||
image_error::BADSOFTWARE,
|
||||
"Software list item has no 'card' data area");
|
||||
}
|
||||
|
||||
// try to parse the barcode number
|
||||
char const *const barcodestr = get_feature("barcode");
|
||||
if (!barcodestr)
|
||||
{
|
||||
machine().memory().region_free(cardrgn->name());
|
||||
return std::make_pair(
|
||||
image_error::BADSOFTWARE,
|
||||
"Software list item has no 'barcode' feature");
|
||||
}
|
||||
std::istringstream stream;
|
||||
stream.imbue(std::locale::classic());
|
||||
if (('0' == barcodestr[0]) && (('x' == barcodestr[1]) || ('X' == barcodestr[1])))
|
||||
{
|
||||
stream.str(barcodestr + 2);
|
||||
stream >> std::hex;
|
||||
}
|
||||
else
|
||||
{
|
||||
stream.str(barcodestr);
|
||||
}
|
||||
stream >> m_barcode;
|
||||
if (!stream)
|
||||
{
|
||||
machine().memory().region_free(cardrgn->name());
|
||||
m_barcode = 0;
|
||||
return std::make_pair(
|
||||
image_error::BADSOFTWARE,
|
||||
util::string_format("Software list item has invalid 'barcode' feature '%s'", barcodestr));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// attempt to read the file into memory
|
||||
auto const len = length();
|
||||
cardrgn = machine().memory().region_alloc(subtag("card"), len, 1, ENDIANNESS_LITTLE);
|
||||
if (!cardrgn)
|
||||
return std::make_pair(std::errc::not_enough_memory, std::string());
|
||||
if (fread(cardrgn->base(), len) != len)
|
||||
{
|
||||
machine().memory().region_free(cardrgn->name());
|
||||
return std::make_pair(
|
||||
std::errc::io_error,
|
||||
"Error reading card scan file");
|
||||
}
|
||||
|
||||
// TODO: support reading barcode from image
|
||||
m_barcode = 0;
|
||||
osd_printf_warning(
|
||||
"%s: TV Ocha-Ken barcodes are only supported for software list items.\n",
|
||||
tag());
|
||||
}
|
||||
|
||||
// sanity check that the card scan looks like a supported bitmap
|
||||
auto io = util::ram_read(cardrgn->base(), cardrgn->bytes());
|
||||
if (!io)
|
||||
{
|
||||
machine().memory().region_free(cardrgn->name());
|
||||
m_barcode = 0;
|
||||
return std::make_pair(std::errc::not_enough_memory, std::string());
|
||||
}
|
||||
switch (render_detect_image(*io))
|
||||
{
|
||||
case RENDUTIL_IMGFORMAT_PNG:
|
||||
case RENDUTIL_IMGFORMAT_JPEG:
|
||||
case RENDUTIL_IMGFORMAT_MSDIB:
|
||||
break;
|
||||
default:
|
||||
machine().memory().region_free(cardrgn->name());
|
||||
m_barcode = 0;
|
||||
return std::make_pair(
|
||||
image_error::INVALIDIMAGE,
|
||||
"Card scan does not appear to be a PNG, JPEG or Microsoft DIB (BMP) bitmap");
|
||||
}
|
||||
io.reset();
|
||||
|
||||
return std::make_pair(std::error_condition(), std::string());
|
||||
}
|
||||
|
||||
|
||||
void tvochken_card_device::call_unload()
|
||||
{
|
||||
memory_region *const cardrgn = memregion("card");
|
||||
if (cardrgn)
|
||||
machine().memory().region_free(cardrgn->name());
|
||||
|
||||
m_barcode = 0;
|
||||
}
|
||||
|
||||
|
||||
void tvochken_card_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
software_list_loader const &tvochken_card_device::get_software_list_loader() const
|
||||
{
|
||||
return rom_software_list_loader::instance();
|
||||
}
|
54
src/mame/sega/tvochken_card.h
Normal file
54
src/mame/sega/tvochken_card.h
Normal file
@ -0,0 +1,54 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
/******************************************************************************
|
||||
|
||||
tvochken_card.h
|
||||
|
||||
Sega TV Ocha-ken barcode card loader
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef MAME_SEGA_TVOCHKEN_CARD_H
|
||||
#define MAME_SEGA_TVOCHKEN_CARD_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <system_error>
|
||||
#include <utility>
|
||||
|
||||
|
||||
class tvochken_card_device : public device_t, public device_image_interface
|
||||
{
|
||||
public:
|
||||
tvochken_card_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
|
||||
virtual ~tvochken_card_device();
|
||||
|
||||
// device_image_interface implementation
|
||||
virtual std::pair<std::error_condition, std::string> call_load() override ATTR_COLD;
|
||||
virtual void call_unload() override ATTR_COLD;
|
||||
virtual bool is_readable() const noexcept override { return true; }
|
||||
virtual bool is_writeable() const noexcept override { return false; }
|
||||
virtual bool is_creatable() const noexcept override { return false; }
|
||||
virtual bool is_reset_on_load() const noexcept override { return false; }
|
||||
virtual char const *image_interface() const noexcept override { return "tvochken_card"; }
|
||||
virtual char const *file_extensions() const noexcept override { return "png,jpg,bmp"; } // loose media not supported yet
|
||||
virtual char const *image_type_name() const noexcept override { return "card"; }
|
||||
virtual char const *image_brief_type_name() const noexcept override { return "crd"; }
|
||||
|
||||
u16 barcode() const noexcept { return m_barcode; }
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
|
||||
// device_image_interface implementation
|
||||
virtual software_list_loader const &get_software_list_loader() const override ATTR_COLD;
|
||||
|
||||
private:
|
||||
u16 m_barcode;
|
||||
};
|
||||
|
||||
|
||||
DECLARE_DEVICE_TYPE(TVOCHKEN_CARD, tvochken_card_device)
|
||||
|
||||
#endif // MAME_SEGA_TVOCHKEN_CARD_H
|
Loading…
Reference in New Issue
Block a user