diff options
946 files changed, 47772 insertions, 16508 deletions
diff --git a/3rdparty/asio/include/asio/detail/config.hpp b/3rdparty/asio/include/asio/detail/config.hpp index 017e6545f28..64a80abdb3a 100644 --- a/3rdparty/asio/include/asio/detail/config.hpp +++ b/3rdparty/asio/include/asio/detail/config.hpp @@ -715,7 +715,13 @@ # endif # if !defined(ASIO_HAS_STD_STRING_VIEW) && __has_include(<experimental/string_view>) # define ASIO_HAS_STD_STRING_VIEW 1 -# define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1 +# if defined(__APPLE__) +# if ((__clang_major__ < 10) || ((__clang_major__ == 10) && (__clang_minor__ == 0) && (__clang_patchlevel__ < 1))) +# define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1 +# endif // clang < 10.0.1 +# else // for non-Xcode Clang +# define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1 +# endif # endif // __has_include(<experimental/string_view>) # endif // (__cplusplus >= 201103) # endif // defined(__clang__) diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index f450c57b31a..5744d1b72aa 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -4,8 +4,8 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.mamedev.mame" - android:versionCode="207" - android:versionName="0.207" + android:versionCode="208" + android:versionName="0.208" android:installLocation="auto"> <!-- OpenGL ES 2.0 --> diff --git a/docs/source/techspecs/layout_files.rst b/docs/source/techspecs/layout_files.rst index b12ad931df4..10467a8d0e9 100644 --- a/docs/source/techspecs/layout_files.rst +++ b/docs/source/techspecs/layout_files.rst @@ -32,7 +32,7 @@ There are two kinds of numbers in MAME layouts: integers and floating-point numbers. Integers may be supplied in decimal or hexadecimal notation. A decimal integer -consists of and optional # (hash) prefix, an optional +/- (plus or minus) sign +consists of an optional # (hash) prefix, an optional +/- (plus or minus) sign character, and a sequence of digits 0-9. A hexadecimal number consists of one of the prefixes $ (dollar sign) or 0x (zero ex) followed by a sequence of hexadecimal digits 0-9 and A-F. Hexadecimal numbers are case-insensitive for @@ -768,12 +768,14 @@ how digital displays may be connected to emulated outputs:: If an element instantiating a layout element has ``inputtag`` and ``inputmask`` attributes but lacks a ``name`` attribute, it will take its state from the value -of the corresponding I/O port, masked with the ``inputmask`` value, and shifted -to the right so that the least significant one bit of the mask aligns with the -least significant bit of the value (for example a mask of 0x05 will result in no -shift, while a mask of 0xb0 will result in the value being shifted four bits to -the right). This is often used to allow clickable buttons and toggle switches -to provide visible feedback. +of the corresponding I/O port, masked with the ``inputmask`` value and XORed +with the I/O port default field value. The latter is useful for inputs that are +active-low. If the result is non-zero, the state is 1, otherwise it's 0. This +is often used to allow clickable buttons and toggle switches to provide visible +feedback. By using ``inputraw="1"``, it's possible to obtain the raw data from +the I/O port, masked with the ``inputmask`` value and shifted to the right to +remove trailing zeroes (for example a mask of 0x05 will result in no shift, while +a mask of 0xb0 will result in the value being shifted four bits to the right). When handling mouse input, MAME treats all layout elements as being rectangular, and only activates the frontmost element whose area includes the location of the diff --git a/hash/32x.xml b/hash/32x.xml index e9821cfc763..c08cf37e0de 100644 --- a/hash/32x.xml +++ b/hash/32x.xml @@ -112,8 +112,63 @@ </part> </software> + <!-- Dump by Radar --> + <software name="pinochio"> + <description>Pinocchio (Euro, Prototype 19951206)</description> + <year>1995</year> + <publisher>Virgin</publisher> + <sharedfeat name="compatibility" value="PAL"/> + <part name="cart" interface="_32x_cart"> + <feature name="pcb" value="837-11069" /> + <feature name="ic1" value="EPROM [M27C4001]" /> + <feature name="ic2" value="EPROM [M27C4001]" /> + <feature name="ic3" value="EPROM [M27C4001]" /> + <feature name="ic4" value="EPROM [M27C4001]" /> + <feature name="ic5" value="EPROM [M27C4001]" /> + <feature name="ic6" value="EPROM [M27C4001]" /> + <feature name="ic7" value="EPROM [M27C4001]" /> + <feature name="ic8" value="EPROM [M27C4001]" /> + <feature name="u015" value="SRAM [HM62256ALFP-10T]" /> + <feature name="u016" value="315-5709" /> + <feature name="u0114" value="26B" /> + <feature name="u0116" value="HC32" /> + <feature name="u0125" value="ALS245A" /> + <feature name="u0126" value="ALS245A" /> + <feature name="u0127" value="ALS245A" /> + <feature name="u0129" value="ALS245A" /> + <feature name="u0130" value="ALS245A" /> + <feature name="u0131" value="HC139" /> + <feature name="dipswitch" value="SW0135" /> <!-- ('.'.'') --> + <feature name="battery" value="[empty]" /> + <dataarea name="rom" size="4194304"> + <rom name="u1.ic1" size="524288" crc="1553d1c6" sha1="18f00cbf8278ed709ec02cc2e5808ef4d0c479c1" offset="000000" /> + <rom name="u2.ic2" size="524288" crc="eff61056" sha1="e4693a6ea0b4498a13a1bf00e8064139f02e03ad" offset="0x80000" /> + <rom name="u3.ic2" size="524288" crc="218a0656" sha1="6a0cd97ab525a9d1dd10263bdd022427eddfeefe" offset="0x100000" /> + <rom name="u4.ic2" size="524288" crc="1c39dbd1" sha1="57331a3a680852251a0780559238c2cc3c1d1ad0" offset="0x180000" /> + <rom name="u5.ic2" size="524288" crc="6cbe0e12" sha1="830b81eb6db6487612f13999a671e98b9f782236" offset="0x200000" /> + <rom name="u6.ic2" size="524288" crc="70ee204d" sha1="4b476e494faf041439b4cb1916654eb231f6f49e" offset="0x280000" /> + <rom name="u7.ic2" size="524288" crc="63e613df" sha1="b40b7a72ece079452a1417f526a00473da7d3b7f" offset="0x300000" /> + <rom name="u8.ic2" size="524288" crc="7ecb16f0" sha1="9668cb5addd612fd34f3740155adfe3b64e4fec1" offset="0x380000" /> + </dataarea> + </part> + </software> + + <!-- Dump by Porchy --> + <software name="cf2"> + <description>Clay Fighter 2 (Euro, USA, Jpn, Prototype 19950429)</description> + <year>1995</year> + <publisher>Sega</publisher> + <sharedfeat name="compatibility" value="NTSC-J,NTSC-U,PAL"/> + <part name="cart" interface="_32x_cart"> + <dataarea name="rom" size="1048576"> + <rom name="clayfighter 2 32x odd 4-28-95.u1" size="524288" crc="55cd507f" sha1="82a620ad9d8de5cdda5504401625dc44011c4444" offset="0x000001" loadflag="load16_byte"/> + <rom name="clayfighter 2 32x even 4-29-95.u2" size="524288" crc="5cc3c228" sha1="7ebad951b63619c65b848018a774082364d57964" offset="0x000000" loadflag="load16_byte"/> + </dataarea> + </part> + </software> + <!-- Old interleaved/unconfirmed dump --> -<!-- PCB info and part numbers are taken from SMS Power and from nepereny's PCB pictures ando other sources --> +<!-- PCB info and part numbers are taken from SMS Power and from nepereny's PCB pictures and other sources --> <software name="aburner"> <description>After Burner Complete (Euro)</description> @@ -1127,19 +1182,6 @@ </part> </software> - <software name="cf2"> - <description>Clay Fighter 2 (Jpn, USA, Euro Prototype)</description> - <year>1995</year> - <publisher>Sega</publisher> - <sharedfeat name="compatibility" value="NTSC-J,NTSC-U,PAL"/> - <part name="cart" interface="_32x_cart"> - <dataarea name="rom" size="1048576"> - <rom name="clay_fighter_2_32x_odd_4_28_95.u1" size="524288" crc="55cd507f" sha1="82a620ad9d8de5cdda5504401625dc44011c4444" offset="0x000001" loadflag="load16_byte"/> - <rom name="clay_fighter_2_32x_even_4_29_95.u2" size="524288" crc="5cc3c228" sha1="7ebad951b63619c65b848018a774082364d57964" offset="0x000000" loadflag="load16_byte"/> - </dataarea> - </part> - </software> - <software name="kolibri"> <description>Kolibri (Euro, USA)</description> <year>1995</year> diff --git a/hash/apple2_flop_orig.xml b/hash/apple2_flop_orig.xml index 9d01a93c009..05e441a6d72 100644 --- a/hash/apple2_flop_orig.xml +++ b/hash/apple2_flop_orig.xml @@ -3544,4 +3544,504 @@ </part> </software> + <software name="suprfact"> + <description>The Super Factory</description> + <year>1986</year> + <publisher>Sunburst Communications</publisher> + <info name="release" value="2019-02-18"/> + <sharedfeat name="compatibility" value="A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 64K Apple ][+, //e, //c, or IIgs. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234807"> + <rom name="the super factory.woz" size="234807" crc="4a48c3b1" sha1="8c8cc653cbc6c3f98b074dfc989b18c8cba9dd20" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="lancastr"> + <description>Lancaster</description> + <year>1983</year> + <publisher>Silicon Valley Systems</publisher> + <info name="release" value="2019-02-19"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234768"> + <rom name="lancaster.woz" size="234768" crc="f5245b69" sha1="660d9aff97a01563d5180c72d71a383454bb0e39" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="captgngt"> + <description>Captain Goodnight and the Islands of Fear</description> + <year>1985</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-02-20"/> + <sharedfeat name="compatibility" value="A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 64K Apple ][+, //e, //c, or IIgs. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="323917"> + <rom name="captain goodnight and the islands of fear side a.woz" size="323917" crc="470a2811" sha1="3642d9d5340fdea6542f4d09a7c926d2016373f5" offset="0x0000" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="234794"> + <rom name="captain goodnight and the islands of fear side b.woz" size="234794" crc="f59c6dc2" sha1="e3c1a9d134eb1b0c8997f6a17a8c42941929749f" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="eggsit"> + <description>Eggs-It</description> + <year>1982</year> + <publisher>Gebelli Software</publisher> + <info name="release" value="2019-02-21"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues caused by the copy protection, + it will not run on any later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="354552"> + <rom name="eggs-it.woz" size="354552" crc="2fbad741" sha1="ef30b55234b59dd46f2f29c265b6eaef843e0795" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="choplftr"> + <description>Choplifter</description> + <year>1982</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-02-22"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="345853"> + <rom name="choplifter.woz" size="345853" crc="00e91e75" sha1="7aa350181b6ebc2040b85fceebf767ad604eca51" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="leepers"> + <description>Lunar Leepers</description> + <year>1982</year> + <publisher>Sierra On-Line</publisher> + <info name="release" value="2019-02-23"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 48K Apple II or ][+. + Due to conflicts created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="507649"> + <rom name="lunar leepers.woz" size="507649" crc="3cd5d255" sha1="0607fb62340c48abc0624fe369dace2e9d5fedfd" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="goldmntn"> + <description>Golden Mountain</description> + <year>1980</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-02-24"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="75006"> + <rom name="golden mountain.woz" size="75006" crc="235d837b" sha1="123830597000b8895d480b872e0fae4fbbd008f0" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="aklabeth"> + <description>Akalabeth</description> + <year>1980</year> + <publisher>California Pacific Computer</publisher> + <info name="release" value="2019-02-25"/> + <sharedfeat name="compatibility" value="A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 48K Apple ][+ or later. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="173336"> + <rom name="akalabeth.woz" size="173336" crc="8386fbed" sha1="e28722b00c96aba9fe2c2a9888a9810e6e850fda" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="chldrnr"> + <description>Championship Lode Runner</description> + <year>1984</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-02-26"/> + <sharedfeat name="compatibility" value="A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 48K Apple ][+ or later. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="288009"> + <rom name="championship lode runner.woz" size="288009" crc="c6a1f9ce" sha1="082862613ccad1efe8af0d9330a47d907eaf29bd" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="gamgblin"> + <description>Gamma Goblins</description> + <year>1981</year> + <publisher>Sirius Software</publisher> + <info name="release" value="2019-02-27"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="160525"> + <rom name="gamma goblins.woz" size="160525" crc="448bd345" sha1="f87ab44522163318dd8297190ca541651ecaf504" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="srpntine"> + <description>Serpentine</description> + <year>1982</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-02-28"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="354587"> + <rom name="serpentine.woz" size="354587" crc="f3bec3d9" sha1="593b149b7ad986e34b10b15e3e876c87377e245d" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="grdsspac"> + <description>Gruds in Space</description> + <year>1983</year> + <publisher>Sirius Software</publisher> + <info name="release" value="2019-03-01"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="114987"> + <rom name="gruds in space side a.woz" size="114987" crc="b39ee54d" sha1="e2a43cafe8272ae631b6d57593f2b4729e47fb45" offset="0x0000" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="234795"> + <rom name="gruds in space side b.woz" size="234795" crc="134854d5" sha1="99bd681c77200724ba03cc16b8e499dae90bfadd" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="muppetvl"> + <description>Muppetville</description> + <year>1986</year> + <publisher>Sunburst Communications</publisher> + <info name="release" value="2019-03-02"/> + <sharedfeat name="compatibility" value="A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 64K Apple ][+, //e, //c, or IIgs. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234769"> + <rom name="muppetville.woz" size="234769" crc="d30623fb" sha1="ae45a94b06339df594d68ac5c571e9d0babed035" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="dazldraw"> + <description>Dazzle Draw (version 1.1)</description> + <year>1984</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-03-03"/> + <sharedfeat name="compatibility" value="A2E,A2EE,A2C,A2GS" /> + <!-- It requires a 128K Apple //e, //c, or IIgs. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="248075"> + <rom name="dazzle draw side a.woz" size="248075" crc="8e93587b" sha1="486e44c49d9b4ac6d4ba1fa6aa9824934fb14cce" offset="0x0000" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="234766"> + <rom name="dazzle draw side b.woz" size="234766" crc="6648df34" sha1="d693245765c0440807fab4e3a4df6bc676146f9f" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="ultima3"> + <description>Ultima III: Exodus</description> + <year>1983</year> + <publisher>Origin Systems</publisher> + <info name="release" value="2019-03-04"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + <!-- As with the original, the scenario disk (side B) is write protected. + You will need to make a copy of the disk before you can create characters. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A - Program"/> + <dataarea name="flop" size="121621"> + <rom name="ultima iii side a.woz" size="121621" crc="1bba6693" sha1="2ce436033547c06f42032a5e09a0831559244542" offset="0x0000" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Side B - Scenario"/> + <dataarea name="flop" size="234779"> + <rom name="ultima iii side b.woz" size="234779" crc="b02c959f" sha1="dee83d101d7da833d862f55e3ffb642e2e9b4b7e" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="ae"> + <description>A.E.</description> + <year>1982</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-03-05"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="168206"> + <rom name="a.e. side a.woz" size="168206" crc="06E2E82A" sha1="DBD31E80D1077788BE5EEBC016C3201DDCB7C026" offset="0x0000" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="234766"> + <rom name="a.e. side b.woz" size="234766" crc="D0A7DADF" sha1="5A0700AFE19E7C2163BC41E1CF59F81330CE632C" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="ernieqz"> + <description>Ernie's Quiz</description> + <year>1981</year> + <publisher>Apple Computer</publisher> + <info name="release" value="2019-03-06"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234766"> + <rom name="ernie's quiz.woz" size="234766" crc="2dba30d3" sha1="c73bdb4122dec2712c996277bff359687a733393" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="mixnmtch"> + <description>Mix and Match</description> + <year>1981</year> + <publisher>Apple Computer</publisher> + <info name="release" value="2019-03-07"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234767"> + <rom name="mix and match.woz" size="234767" crc="4f2ec047" sha1="ea860d5eed4d708992226241124e107917a4c5c3" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="instzoo"> + <description>Instant Zoo</description> + <year>1981</year> + <publisher>Apple Computer</publisher> + <info name="release" value="2019-03-08"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="241421"> + <rom name="instant zoo.woz" size="241421" crc="501ee2a8" sha1="9fde2664e61b7643c437a3e7dde72c163c800efd" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="spotlght"> + <description>Spotlight</description> + <year>1981</year> + <publisher>Apple Computers</publisher> + <info name="release" value="2019-03-09"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234763"> + <rom name="spotlight.woz" size="234763" crc="7393336f" sha1="0ecb58aec4b2fc000d6eb8a6a6677b4c4ae56e79" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="beerrun"> + <description>Beer Run</description> + <year>1981</year> + <publisher>Sirius Software</publisher> + <info name="release" value="2019-03-10"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="94978"> + <rom name="beer run.woz" size="94978" crc="05c8f406" sha1="7f4cd7d6ab95ee1c38f46097101deb77c3a7edb0" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="phaserfr"> + <description>Phaser Fire</description> + <year>1982</year> + <publisher>Gebelli Software</publisher> + <info name="release" value="2019-03-11"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="354044"> + <rom name="phaser fire.woz" size="354044" crc="7917bb70" sha1="f0d2c0425e6e6f08d7980b582983e94f5141d8b4" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="bugatk"> + <description>Bug Attack</description> + <year>1981</year> + <publisher>Cavalier Computer</publisher> + <info name="release" value="2019-03-12"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="180998"> + <rom name="bug attack.woz" size="180998" crc="7eafabdd" sha1="b7cebfa1479569ee2f8883d1ab43bde23704ef19" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="alnlandr"> + <description>Alien Lander</description> + <year>1980</year> + <publisher>Sierra Software</publisher> + <info name="release" value="2019-03-13"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="234777"> + <rom name="alien lander.woz" size="234777" crc="5553290e" sha1="535cf50b61187cb06c7e09c4d226581179b6a033" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="highorbt"> + <description>High Orbit</description> + <year>1982</year> + <publisher>Gebelli Software</publisher> + <info name="release" value="2019-03-14"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="354542"> + <rom name="high orbit.woz" size="354542" crc="deeedb21" sha1="0cb3c8248c82f38624b1fad72a11554c14249785" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="astfield"> + <description>The Asteroid Field</description> + <year>1980</year> + <publisher>Cavalier Computer</publisher> + <info name="release" value="2019-03-15"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="128284"> + <rom name="the asteroid field.woz" size="128284" crc="827e5ad2" sha1="ff8471b80327d3b0d1694ff80d3e1c1e5e6222e6" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="carmnwld"> + <description>Where in the World is Carmen Sandiego</description> + <year>1985</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-03-16"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 64K. --> + + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="332120"> + <rom name="where in the world is carmen sandiego side a.woz" size="332120" crc="9e9bc183" sha1="bfcf9c5156a3bd57384f14656d7da9adfe546d2e" offset="0x0000" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="234840"> + <rom name="where in the world is carmen sandiego side b.woz" size="234840" crc="771e61bd" sha1="672a843e9d7b927b8f2d14d0ea3679913add4175" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="labyrnth"> + <description>Labyrinth</description> + <year>1982</year> + <publisher>Broderbund Software</publisher> + <info name="release" value="2019-03-17"/> + <sharedfeat name="compatibility" value="A2,A2P" /> + <!-- It requires a 48K Apple II or ][+. + Due to compatibility issues created by the copy protection, + it will not run on later models. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="349959"> + <rom name="labyrinth.woz" size="349959" crc="c2a2ba88" sha1="8604f70d0a7f039a729a3d81957e8b1860bacbaa" offset="0x0000" /> + </dataarea> + </part> + </software> + + <software name="ribbit"> + <description>Ribbit</description> + <year>1982</year> + <publisher>Piccadilly Software</publisher> + <info name="release" value="2019-03-18"/> + <sharedfeat name="compatibility" value="A2,A2P,A2E,A2EE,A2C,A2GS" /> + <!-- It runs on any Apple II with 48K. --> + + <part name="flop1" interface="floppy_5_25"> + <dataarea name="flop" size="128291"> + <rom name="ribbit.woz" size="128291" crc="f75dc4c3" sha1="965ee4b1e3af6ef435900309bc797d19b9ea02fd" offset="0x0000" /> + </dataarea> + </part> + </software> + </softwarelist> diff --git a/hash/arb.xml b/hash/arb.xml index 89111cb26df..591e97ad15a 100644 --- a/hash/arb.xml +++ b/hash/arb.xml @@ -19,4 +19,19 @@ </part> </software> + <software name="gms40"> + <description>Grand Master Series 4.0</description> + <year>1984</year> + <publisher>AVE Micro Systems</publisher> + <part name="cart" interface="arb"> + <feature name="ram" value="1" /> + <dataarea name="rom" size="0x8000"> + <rom name="1.bin" size="0x1000" crc="26e57f38" sha1="b37364dd567018e5aebaecbcc47af3bd43e36032" offset="0x2000" /> + <rom size="0x1000" offset="0x3000" loadflag="reload" /> + <rom name="2.bin" size="0x2000" crc="3b1b26a2" sha1="0b59f6c344c9996a06e63e61e91a195b0eb1dd32" offset="0x4000" /> + <rom name="3.bin" size="0x2000" crc="b90f7f80" sha1="71ffd2d56e1f44e7c4e1d13364e43fc6ac1a4f99" offset="0x6000" /> + </dataarea> + </part> + </software> + </softwarelist> diff --git a/hash/coco_cart.xml b/hash/coco_cart.xml index dca0227e128..b0aa2927bac 100644 --- a/hash/coco_cart.xml +++ b/hash/coco_cart.xml @@ -475,6 +475,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo) <publisher>Tandy</publisher> <info name="serial" value="26-2226" /> <part name="cart" interface="coco_cart"> + <feature name="slot" value="rs232" /> <dataarea name="rom" size="4096"> <rom name="deluxe rs-232 program pak (1983)(26-2226)(tandy).rom" size="4096" crc="d990e1f9" sha1="3fad25f3462a0b581b9c182ac11ad90c8fa08cb6" offset="0" /> </dataarea> @@ -552,6 +553,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo) <publisher>Tandy</publisher> <info name="serial" value="26-2228" /> <part name="cart" interface="coco_cart"> + <feature name="slot" value="dcmodem" /> <dataarea name="rom" size="8192"> <rom name="color computer modem pak (1985)(26-2228)(tandy).rom" size="8192" crc="667bc55d" sha1="703fe0aba4a603591078cb675ffd26a67c02df88" offset="0" /> </dataarea> @@ -976,6 +978,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo) <info name="author" value="Jon Bokelman" /> <info name="serial" value="26-3143" /> <part name="cart" interface="coco_cart"> + <feature name="slot" value="orch90" /> <dataarea name="rom" size="8192"> <rom name="orchestra 90 (1984)(26-3143)(tandy).rom" size="8192" crc="15fb39af" sha1="6a20fee9c70b36a6435ac8378f31d5b626017df0" offset="0" /> </dataarea> diff --git a/hash/ekara_japan.xml b/hash/ekara_japan.xml index f36fb674d1a..c904e1795ed 100644 --- a/hash/ekara_japan.xml +++ b/hash/ekara_japan.xml @@ -31,21 +31,21 @@ Some Japanese carts have a number starting with S (S-x on case, SCxxxx-xxx part numbers) (see ekara_japan_s.xml) (for e-kara - custom presentation) M (M-x on case, MCxxxx-xxx part numbers) (see ekara_japan_m.xml) (for e-kara - custom presentation) EN (EN-X on case, no part numbers) (see ekara_japan_en.xml) (for e-kara - custom presentation) - BH (BG-XX on case, BH-xxxx on PCB) (see ekara_japan_bh.xml) (for e-kara - custom presentation) - GK (GK-X on case) (see ekara_japan_gk.xml) (for e-kara / e-pitch - custom presentation) + BH (BG-XX on case, BH-xxxx on PCB) (see ekara_japan_bh.xml) (for e-kara - custom presentation) + GK (GK-X on case) (see ekara_japan_gk.xml) (for e-kara / e-pitch - custom presentation) G (G-x on case, GCxxxx-xxx part numbers) (see ekara_japan_g.xml) (for e-kara, Popira / 2) P (P-x on case, PCxxxx-xxx part numbers) (see ekara_japan_p.xml) (for e-kara, Popira / 2, DDR Family Mat) D (D-x on case, DCxxxx-xxx part numbers) (see ekara_japan_d.xml) (for e-kara, Popira / 2, Taiko De Popira) SP (SP-x on case, no part numbers) (see ekara_japan_sp.xml) (for e-kara, Popira / 2, Taiko de Popira, Jumping Popira) - A (A-x on case, Pichi Pichi Pitch series)(see ekara_japan_a.xml) (for e-kara / e-pitch) - JP (JP-x on case) (see ekara_japan_jp.xml) (for Jumping Popira Only) - + A (A-x on case, Pichi Pichi Pitch series)(see ekara_japan_a.xml) (for e-kara / e-pitch) + JP (JP-x on case) (see ekara_japan_jp.xml) (for Jumping Popira Only) + these exist but haven't got any - Some Japanese carts have a number starting with + Some Japanese carts have a number starting with KE (for Kids Lyric book device Only?) KD (for e-kara?) - PR (seen a PR-02 AYY) (what is it?) - KR (seen a KR-1) (bundled with later units?) + PR (seen a PR-02 AYY) (what is it?) + KR (seen a KR-1) (bundled with later units?) (there are others, need to document them) @@ -64,7 +64,7 @@ The EC number is printed on the left side of the cart label, as well as in the serial code early carts don't have a number printed on the box, only the title, after a certain point a number was added (when?) - Only known undumped carts in main series are 58, 64, 81, 83, 84, 85 (assuming highest number is 85) + Only known undumped carts in main series are 58, 64, 81, 83, 84, 85 (assuming highest number is 85) .. *EC0001-JPM J-Pop Mix Volume 1 .. *EC0002-JPM J-Pop Mix Volume 2 @@ -366,7 +366,7 @@ </dataarea> </part> </software> - + <software name="ec0017"> <description>1973-75 Volume 1 (Japan) (EC0017-G73)</description> <year>2000</year> @@ -377,7 +377,7 @@ </dataarea> </part> </software> - + <software name="ec0018"> <description>1982-84 Volume 1 (Japan) (EC0018-G82)</description> <year>2000</year> @@ -399,7 +399,7 @@ </dataarea> </part> </software> - + <software name="ec0020"> <description>Kid's Mix Volume 2 (Japan) (EC0020-KID)</description> <year>2000</year> @@ -410,7 +410,7 @@ </dataarea> </part> </software> - + <software name="ec0021"> <description>J-Pop Mix Volume 9 (Japan) (EC0021-JPM)</description> <year>2000</year> @@ -608,7 +608,7 @@ </dataarea> </part> </software> - + <software name="ec0039"> <description>Artist Selection Volume 7 (B'z) (Japan) (EC0039-ATS)</description> <year>2000</year> @@ -619,7 +619,7 @@ </dataarea> </part> </software> - + <software name="ec0040"> <description>J-Pop Mix Volume 18 (Japan) (EC0040-JPM)</description> <year>2000</year> @@ -743,8 +743,8 @@ </dataarea> </part> </software> - - + + <software name="ec0051"> <description>J-Pop Mix Volume 21 (Japan) (EC0051-JPM)</description> <year>2001</year> @@ -799,7 +799,7 @@ </dataarea> </part> </software> - + <software name="ec0056"> <description>J-Pop Mix Volume 24 (Japan) (EC0056-JPM)</description> <year>2001</year> @@ -809,8 +809,8 @@ <rom name="ec0056-jpm.u1" size="0x100000" crc="8c0b175b" sha1="697d7eb50a84001ddb66f50a50c682c63c21ed60" offset="0" /> </dataarea> </part> - </software> - + </software> + <software name="ec0057"> <description>Artist Selection Volume 14 (SMAP) (Japan) (EC0057-ATS)</description> <year>2001</year> @@ -821,7 +821,7 @@ </dataarea> </part> </software> - + <!-- EC0058-ENK ENK Volume 8 --> <software name="ec0059"> @@ -834,7 +834,7 @@ </dataarea> </part> </software> - + <software name="ec0060"> <description>J-Pop Mix Volume 26 (Japan) (EC0060-JPM)</description> <year>2001</year> diff --git a/hash/fmtowns_cd.xml b/hash/fmtowns_cd.xml index 4170891145e..dc826840619 100644 --- a/hash/fmtowns_cd.xml +++ b/hash/fmtowns_cd.xml @@ -184,7 +184,6 @@ Emit Vol. 3: Watashi ni Sayonara wo Koei Engage Errands 2: Kouki wo Niau Mono Ponytail Soft 1995/5 CD Engage Errands: Miwaku no Shito-tachi Ponytail Soft 1995/4 CD English in Dream SofMedia 1990/6 CD -Enkaiou Dennou Shoukai 1989/10 CD Enkaiou Ver. 3: Chikyuu Saidai no Kessen Dennou Shoukai 1993/12 CD Euphony 2 / MTR V1.1 Fujitsu 1992/11 CD Euphony 2 / SCORE V1.1 Fujitsu 1993/4 CD @@ -341,8 +340,6 @@ JAF Drive Guide - Best Ski 150 (Resort-hen) JAF Shuppansha JAF Drive Guide (Ver. 2) JAF Shuppansha 1992/2 SET(CD+FD) Jinmon Yuugi Fairytale (Red Zone) 1995/8 SET(CD+FD) Jintaizu System Skeleton Medical System 1995/8 CD -Joker Towns Birdy Soft 1992/7 CD -Joshikou Seifuku Monogatari Nihon Soft System 1995/4 SET(CD+FD) Joshikousei Shoujo Densetsu Byakuya Shobou 1994/4 CD Jouhou Club Fujitsu Social Science Laboratory 1989/11 CD Jouhou Gijutsu Yougo Shuu CD-ROM Fujitsu 1991/12 CD @@ -533,7 +530,6 @@ Planet Harmony Datt Japan Pocky 1-2 & Ponyon Ponytail Soft 1994/6 CD Populous 2 Expert Imagineer 1993/2 CD Powers of Ten Datt Japan 1995/10 CD -Preasure Janis 1994/2 CD Presence Orange House 1992/12 ? Presence Sur de Wave 1992/12 CD Present Orange House 1991/6 ? @@ -762,7 +758,6 @@ Yes! HG Himeya Soft Yoshioka Mayumi: Last Nude Janis 1993/12 CD Youki de Cool na LA Towns Media Art 1990/12 CD Yubiwa Monogatari Daiikkan: Tabi no Nakama Starcraft 1992/3 CD -Yubiwa Monogatari Dainikan: Futatsu no Tou Starcraft 1993/4 SET(CD+FD) Yumeutsutsu Megami 1992/5 CD Z's Staff Pro Towns Zeit 1991/7 CD Z's Triphony DigitalCraft Towns Zeit 1990/12 CD @@ -3641,6 +3636,113 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="enkaio"> + <!-- + Origin: redump.org / r09 + <rom name="Enkaiou (Japan) (Track 01).bin" size="105134400" crc="304cbfed" sha1="8c310e390bd0c4fd2ecc2c3eb842381fff549c1b"/> + <rom name="Enkaiou (Japan) (Track 02).bin" size="8079120" crc="2eeba401" sha1="6df382c1e3ae30af7e9f409660fe593ea2a84d64"/> + <rom name="Enkaiou (Japan) (Track 03).bin" size="7879200" crc="913a540c" sha1="0a5f3f815b1abc0b09044186ed1029634bda52e2"/> + <rom name="Enkaiou (Japan) (Track 04).bin" size="3386880" crc="cb72d1f5" sha1="2f057fd7aad55e972d065febe2aab08961730c4f"/> + <rom name="Enkaiou (Japan) (Track 05).bin" size="17228400" crc="8efa3549" sha1="7bd00457807138543c08a98c56382a9a8989a389"/> + <rom name="Enkaiou (Japan) (Track 06).bin" size="7166544" crc="563d4129" sha1="91598ee02fb330fa23e7a0cdef4347a80d4d11f9"/> + <rom name="Enkaiou (Japan) (Track 07).bin" size="10085376" crc="32158c68" sha1="af1d84c509ec1bf09a439131947ca5538f4f2aa0"/> + <rom name="Enkaiou (Japan) (Track 08).bin" size="9372720" crc="c5182e50" sha1="4f73ea47c732cef65eea08c266de48f4875bab39"/> + <rom name="Enkaiou (Japan) (Track 09).bin" size="8342544" crc="b53e3b34" sha1="dde37b48ad38b6b1434fcf5f0183693f4ab2e3ca"/> + <rom name="Enkaiou (Japan) (Track 10).bin" size="8027376" crc="cb120500" sha1="6aa1128b5b8c11502ed462617d83130ed5f8c85f"/> + <rom name="Enkaiou (Japan) (Track 11).bin" size="8067360" crc="3c0787ba" sha1="68118f371eba0a9bc8c5e1739dc66e8824001643"/> + <rom name="Enkaiou (Japan) (Track 12).bin" size="7707504" crc="6ee181ae" sha1="3754f4563fa14dd40a5712d48bb9736397d0f7d8"/> + <rom name="Enkaiou (Japan) (Track 13).bin" size="7408800" crc="0bd85c6d" sha1="78d8f836ae11076f37b23a6f7b08565382089be2"/> + <rom name="Enkaiou (Japan) (Track 14).bin" size="7815696" crc="60cd53ea" sha1="0971be6a6334f2e86a488264efe65614d8acc669"/> + <rom name="Enkaiou (Japan) (Track 15).bin" size="4544064" crc="d1710f30" sha1="4a4a3f717fd5b068981e70c57c3fc33becd59d0d"/> + <rom name="Enkaiou (Japan) (Track 16).bin" size="7298256" crc="806e4b1d" sha1="30396fe7b209b82e932a37ec789daedb606cdd33"/> + <rom name="Enkaiou (Japan) (Track 17).bin" size="10184160" crc="c39bd330" sha1="687f55887f7357c6d54b690d0e339a671ad75740"/> + <rom name="Enkaiou (Japan) (Track 18).bin" size="6825504" crc="8d98bbbf" sha1="203dd5bd7a1a203d344d291b41e90696465faedb"/> + <rom name="Enkaiou (Japan) (Track 19).bin" size="14664720" crc="e3d90dca" sha1="b56ba9b6d15764812f7f8f9cf1387e3ebbdff551"/> + <rom name="Enkaiou (Japan) (Track 20).bin" size="2187360" crc="218c5b70" sha1="f399f2704ecca15289ce03139ebfc222712f21e7"/> + <rom name="Enkaiou (Japan) (Track 21).bin" size="2175600" crc="3f63f478" sha1="abea4a76614a88240e5ada8eb5b0e0167854dfca"/> + <rom name="Enkaiou (Japan) (Track 22).bin" size="1959216" crc="5f098f2c" sha1="b252688fe8cef86006a20b5659c1ad9d32c8b6c5"/> + <rom name="Enkaiou (Japan) (Track 23).bin" size="2504880" crc="4f5c8545" sha1="9c90fecf3ccdd80b45fcd0f79a9929240a8f6da1"/> + <rom name="Enkaiou (Japan) (Track 24).bin" size="2074464" crc="ca462243" sha1="25d5b804def1c2ef2f9f1fee71ec7ca60d9dbee4"/> + <rom name="Enkaiou (Japan) (Track 25).bin" size="2488416" crc="9c877445" sha1="b46eff619bba918d2e2560998b6a295fcb595854"/> + <rom name="Enkaiou (Japan) (Track 26).bin" size="3104640" crc="b80021f0" sha1="3bce1e7b020aad555f6bd3ea573c36acbdd22a2b"/> + <rom name="Enkaiou (Japan) (Track 27).bin" size="2003904" crc="fe64d4e4" sha1="5732bde171d594aa0f64287472dbcd36ab837491"/> + <rom name="Enkaiou (Japan) (Track 28).bin" size="2504880" crc="df359f88" sha1="63b85b9ab63e3a4357867ebbd6a4c2d9c0bae933"/> + <rom name="Enkaiou (Japan) (Track 29).bin" size="1853376" crc="883c948a" sha1="134d54f9bf459ddc8427f87cdc7a1c12801397e7"/> + <rom name="Enkaiou (Japan) (Track 30).bin" size="1780464" crc="4c605035" sha1="23cc1c80d416fffb14ec9cbac8fa57d8d39e5322"/> + <rom name="Enkaiou (Japan) (Track 31).bin" size="2187360" crc="e428f58d" sha1="33386ed15262b3363d391ca573737b6125a39e30"/> + <rom name="Enkaiou (Japan) (Track 32).bin" size="2210880" crc="c6360e4d" sha1="46768c88a6050b5464826d625dea4c906a236240"/> + <rom name="Enkaiou (Japan) (Track 33).bin" size="1811040" crc="68c3894e" sha1="8148e3300a99f271e336c57d08b09194c7929b33"/> + <rom name="Enkaiou (Japan) (Track 34).bin" size="1735776" crc="5cb9f5ed" sha1="2fd0069ef1848e8a935592eac206edcfa074ee01"/> + <rom name="Enkaiou (Japan) (Track 35).bin" size="1975680" crc="90406b61" sha1="8e65cdafae27ac09710ea8b7c16808201062a28d"/> + <rom name="Enkaiou (Japan) (Track 36).bin" size="1815744" crc="d77ad108" sha1="76e51b802aeacf180f4a0620367fdd8d88bbfe4b"/> + <rom name="Enkaiou (Japan) (Track 37).bin" size="1611120" crc="6d0a1a19" sha1="92eae84a00e65076875174f644f4e4b50125f9d7"/> + <rom name="Enkaiou (Japan) (Track 38).bin" size="1658160" crc="714f23f8" sha1="d6f179db043c0a15338985a94e06b4b0f3272109"/> + <rom name="Enkaiou (Japan) (Track 39).bin" size="3386880" crc="327d6325" sha1="ec4e1da99e11b8b9492e4f1d41d21c6c37796ec5"/> + <rom name="Enkaiou (Japan) (Track 40).bin" size="2947056" crc="0961f05c" sha1="437e751ec0003730ea91f5bb11b2b218a84ee9cb"/> + <rom name="Enkaiou (Japan) (Track 41).bin" size="1886304" crc="8c226e2f" sha1="c21cc31eb8e596f448d95b48aee0c2fb0fabe1da"/> + <rom name="Enkaiou (Japan) (Track 42).bin" size="2034480" crc="7d16b544" sha1="69ff22ce51e3ecaf689d0dff0eb39fb23e71d194"/> + <rom name="Enkaiou (Japan) (Track 43).bin" size="1876896" crc="50633686" sha1="d3aab3d2e5b7e3768b5262ab820ab752fb80c6f9"/> + <rom name="Enkaiou (Japan) (Track 44).bin" size="2344944" crc="9084ef6d" sha1="17d16f51d229a802537b777b75bd24dfb3099866"/> + <rom name="Enkaiou (Japan) (Track 45).bin" size="2653056" crc="2c42196a" sha1="262d82bc4af379e966ace92b0a2b134b969467e9"/> + <rom name="Enkaiou (Japan) (Track 46).bin" size="1709904" crc="5d6a0701" sha1="b18dd11d14ef94846d0891211f9f1de101291f00"/> + <rom name="Enkaiou (Japan) (Track 47).bin" size="2551920" crc="a4598d64" sha1="f019377d3d9de9965fc399c4ddb7fdf11ea1d857"/> + <rom name="Enkaiou (Japan) (Track 48).bin" size="2958816" crc="d47a9aed" sha1="e866f8f5d45b93c4e2477514b3fe156dd5434bcd"/> + <rom name="Enkaiou (Japan) (Track 49).bin" size="2650704" crc="afdc3d25" sha1="0a6b8721ccc3dff92d70d561105bb5f257c82655"/> + <rom name="Enkaiou (Japan) (Track 50).bin" size="5287296" crc="61509964" sha1="d955e341b2b2c5a650fa0ab74c8e75fd12f1011c"/> + <rom name="Enkaiou (Japan) (Track 51).bin" size="1775760" crc="fa0429db" sha1="4e1d3d2e300f4a34ac8ccefda99d8522ac9d1ce7"/> + <rom name="Enkaiou (Japan) (Track 52).bin" size="1528800" crc="0e9198e5" sha1="070c33bf7e2b748196ec7d10787ca35c260af24f"/> + <rom name="Enkaiou (Japan) (Track 53).bin" size="1709904" crc="bee21452" sha1="60d4fd857f65919c6d27c215181f1d73a1607ea9"/> + <rom name="Enkaiou (Japan) (Track 54).bin" size="1465296" crc="42813624" sha1="b8470b1ac6e7e7d651868094813641c3ed54f5a3"/> + <rom name="Enkaiou (Japan) (Track 55).bin" size="1411200" crc="d72c767c" sha1="7f4cf94638ff86674a56a02c69c5fae92eb7fd86"/> + <rom name="Enkaiou (Japan) (Track 56).bin" size="1411200" crc="f73dc58c" sha1="c75476610a0dfcf74af22fb83954de1fcc02bac4"/> + <rom name="Enkaiou (Japan) (Track 57).bin" size="1411200" crc="9b2e4e63" sha1="2455e0c642d67d97b79ea1beeba401bdb6c978ed"/> + <rom name="Enkaiou (Japan) (Track 58).bin" size="10588704" crc="cdc66c89" sha1="a42c2e4818a97264e08f50f10e06ff413f220f40"/> + <rom name="Enkaiou (Japan) (Track 59).bin" size="11249616" crc="c82e5305" sha1="5c96c3d377efeda034611fd05b82ff397ea96d0e"/> + <rom name="Enkaiou (Japan) (Track 60).bin" size="11211984" crc="bcbba5db" sha1="1f92b1505a2cf1565693848c4e33bcfd67bc24da"/> + <rom name="Enkaiou (Japan) (Track 61).bin" size="11672976" crc="46a967c6" sha1="c60f53d061f376d78387ca08e444912f6543fc3e"/> + <rom name="Enkaiou (Japan) (Track 62).bin" size="10513440" crc="50452319" sha1="aef91feed7c18225578a946671346ec704f94398"/> + <rom name="Enkaiou (Japan) (Track 63).bin" size="10071264" crc="8fe9b9fb" sha1="974fbc26b1a7c0572caf8886845eae8ce024422f"/> + <rom name="Enkaiou (Japan) (Track 64).bin" size="7173600" crc="06a12659" sha1="dd4a81a484e39e8cbecfbe996819ea69596901dc"/> + <rom name="Enkaiou (Japan) (Track 65).bin" size="1430016" crc="3cbe31c8" sha1="e2386c4908eaed7d753c003de1b51f3be9a4b014"/> + <rom name="Enkaiou (Japan) (Track 66).bin" size="1545264" crc="e019d226" sha1="66c4f7bf603caf6717bc532e80f44da7523b90a1"/> + <rom name="Enkaiou (Japan) (Track 67).bin" size="1453536" crc="d799ca09" sha1="c2a2ab382c541c1bd33dc4fb792640d86d50bbde"/> + <rom name="Enkaiou (Japan) (Track 68).bin" size="1411200" crc="68588892" sha1="43d1fc2bc3a261aee7e843d912979876810112c6"/> + <rom name="Enkaiou (Japan) (Track 69).bin" size="3022320" crc="6dd6ce3a" sha1="00b2115d65092c1662505b6165414bb8d43023d2"/> + <rom name="Enkaiou (Japan) (Track 70).bin" size="1564080" crc="73c3ac34" sha1="bccae2c3ed1117155c13b7d27715e2a400badebc"/> + <rom name="Enkaiou (Japan) (Track 71).bin" size="7161840" crc="580cd158" sha1="6d873ec71c060686a8d797407ebd8bb6f2d13654"/> + <rom name="Enkaiou (Japan) (Track 72).bin" size="12418560" crc="bfb703c4" sha1="5a7342635e17976ada1095e41a2272650f393159"/> + <rom name="Enkaiou (Japan) (Track 73).bin" size="17722320" crc="5ae78b40" sha1="bc9c91f2f2a881a11fd0deb7dd0efea8bdf339a6"/> + <rom name="Enkaiou (Japan) (Track 74).bin" size="1505280" crc="9bdd4b39" sha1="4803811573aab67759cd4e845a043372c8a5b2bb"/> + <rom name="Enkaiou (Japan) (Track 75).bin" size="1411200" crc="12cdb7a9" sha1="9ce765a5a1745a2f5a5e83862657a98a5dbb3fc0"/> + <rom name="Enkaiou (Japan) (Track 76).bin" size="1446480" crc="e163b1e8" sha1="d9369e7aa4dd7b96959279835ead7a7516ac2ecf"/> + <rom name="Enkaiou (Japan) (Track 77).bin" size="2210880" crc="da675082" sha1="13f904610ce78e881e4ec9c4f055fcf0c444d817"/> + <rom name="Enkaiou (Japan) (Track 78).bin" size="9102240" crc="6d794ea4" sha1="96a51b7db77c143d2d4edf613149784aa6f2f773"/> + <rom name="Enkaiou (Japan) (Track 79).bin" size="2756544" crc="f843aee1" sha1="3c1a9e3b8c66158402338e439af43b7bb3d944d0"/> + <rom name="Enkaiou (Japan) (Track 80).bin" size="3151680" crc="dee01e61" sha1="e2d6294ce86df6bbd8d5ffd4ce703ec64e861424"/> + <rom name="Enkaiou (Japan) (Track 81).bin" size="2947056" crc="3d3bb2b5" sha1="d1f6cbc527887e1197d63b21ca2a14516bb66962"/> + <rom name="Enkaiou (Japan) (Track 82).bin" size="8142624" crc="a784c338" sha1="753403f9ec3b296334f8568f826543cfd8e4ec4a"/> + <rom name="Enkaiou (Japan) (Track 83).bin" size="10038336" crc="5a3e1747" sha1="12f1a42fe96e61e5b44359e5909c90590d2ade28"/> + <rom name="Enkaiou (Japan) (Track 84).bin" size="9996000" crc="2ef34f75" sha1="93867564178fb4fba3140a2de0893f8735593f29"/> + <rom name="Enkaiou (Japan) (Track 85).bin" size="6985440" crc="2ea8424b" sha1="936eeb40f5fb35c85514e9d82995619afef92f42"/> + <rom name="Enkaiou (Japan) (Track 86).bin" size="4426464" crc="8fb5f7e3" sha1="31d91faebfd8019ac6bd086a9d380463ef1c62d0"/> + <rom name="Enkaiou (Japan) (Track 87).bin" size="17164896" crc="2837ca5c" sha1="91136b8a7514d42179798db646f1d9e1c14be974"/> + <rom name="Enkaiou (Japan) (Track 88).bin" size="16962624" crc="4619679e" sha1="5d8df42de9c302abc34c6df219b1723d1750dd38"/> + <rom name="Enkaiou (Japan) (Track 89).bin" size="11371920" crc="e79c0eb0" sha1="ba23ac2c1871446a7d9cf7ba0063b7f33a54a8ea"/> + <rom name="Enkaiou (Japan) (Track 90).bin" size="2923536" crc="80d21630" sha1="4a4461335f0edd2b536806c0842c0973734cf254"/> + <rom name="Enkaiou (Japan).cue" size="9905" crc="134b2982" sha1="d9f8aa27bcaa2c793619c2951dff8c8751aedecb"/> + --> + <description>Enkaiou</description> + <year>1989</year> + <publisher>電脳商会 (Dennou Shoukai)</publisher> + <info name="alt_title" value="宴会王" /> + <info name="release" value="198910xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="enkaiou (japan)" sha1="ffc1f51758abeffed4c5639002115fc3c6356ff8" /> + </diskarea> + </part> + </software> + <software name="enkaio2"> <!-- Origin: P2P @@ -5217,6 +5319,23 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="joker"> + <!-- + Origin: redump.org / r09 + <rom name="Joker Towns (Japan).bin" size="20815200" crc="2b3c7c6d" sha1="d9c07fdb96b0110020e3544d1fa1d14c22acd0fb"/> + <rom name="Joker Towns (Japan).cue" size="85" crc="df7897a1" sha1="2e27bb3a4d74326880501d3d7bb621694db9d229"/> + --> + <description>Joker Towns</description> + <year>1992</year> + <publisher>ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft)</publisher> + <info name="release" value="199207xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="joker towns (Japan)" sha1="bc09ad20f315dcd4804452b5885c06eca281b48d" /> + </diskarea> + </part> + </software> + <software name="joshikou"> <!-- Origin: Neo Kobe Collection @@ -5236,6 +5355,28 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="joshisei"> + <!-- + Origin: redump.org / r09 + <rom name="Joshikou Seifuku Monogatari (Japan).bin" size="13778016" crc="afd0bf24" sha1="b37360c8b030467c5b5ef13e67a38d9d00bcfe19"/> + <rom name="Joshikou Seifuku Monogatari (Japan).cue" size="101" crc="767b1881" sha1="36ebfe1adadce7e5c7ec3f856d601e889382d559"/> + --> + <description>Joshikou Seifuku Monogatari</description> + <year>1995</year> + <publisher>ケイエスエス (KSS)</publisher> + <info name="release" value="199504xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="joshikou_seifuku_monogatari.hdm" size="1261568" crc="3fdba734" sha1="8e8aed41e329bd02479e6b55675110ddc29b33f2" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="joshikou seifuku monogatari (japan)" sha1="02c2c164c2554ac90faf6db3ee856357bd668110" /> + </diskarea> + </part> + </software> + <software name="joshua"> <!-- Origin: Neo Kobe Collection @@ -5905,6 +6046,32 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="lotr2"> + <!-- + Origin: Tokugawa Corporate Forums (DamienD) + <rom name="The Lord of the Rings - The Two Towers.ccd" size="4543" crc="5ab9a7bb" sha1="36ccfad3da04b328225096502101c352829e60ab"/> + <rom name="The Lord of the Rings - The Two Towers.cue" size="894" crc="f75eccf5" sha1="a716c2f8cfd6ae9d75848c9c401f79f54dcbe088"/> + <rom name="The Lord of the Rings - The Two Towers.img" size="172695600" crc="a50adf2d" sha1="78a4470a4534bb2f31a8c441ca9f0c0d1462a01e"/> + <rom name="The Lord of the Rings - The Two Towers.sub" size="7048800" crc="7d00f289" sha1="23767eab20a0b431d6f2abc0e41330450253910a"/> + --> + <description>J. R. R. Tolkien's The Lord of the Rings, Vol. II - The Two Towers</description> + <year>1993</year> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="alt_title" value="指輪物語 第二巻 二ã¤ã®å¡”" /> + <info name="release" value="199304xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="the lord of the rings - the two towers user disk.bin" size="1261568" crc="51c5461f" sha1="31548881ebfd4eb50281b3086709e5ff02a72ddd" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="the lord of the rings - the two towers" sha1="a4115a04803cd309628e23a6ec40351612f06a44" /> + </diskarea> + </part> + </software> + <software name="lupin3"> <!-- Origin: Neo Kobe Collection @@ -7210,6 +7377,25 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="pleasure"> + <!-- + Origin: redump.org / r09 + <rom name="Yuka Watanabe & Tomo Kawai - Pleasure (Japan) (Track 1).bin" size="105487200" crc="3ac09566" sha1="fbab998bbfe2adc0dbcd607501b7cbd9c2865b04"/> + <rom name="Yuka Watanabe & Tomo Kawai - Pleasure (Japan) (Track 2).bin" size="39690000" crc="9d6157d5" sha1="88140367f5b917f21a46d1ec5eb6ee24f07ce76c"/> + <rom name="Yuka Watanabe & Tomo Kawai - Pleasure (Japan) (Track 3).bin" size="37396800" crc="6e2e590f" sha1="20e0a580b02344f91ec9748f6f3a2f3905dc9f22"/> + <rom name="Yuka Watanabe & Tomo Kawai - Pleasure (Japan).cue" size="422" crc="deb51835" sha1="cabb91b0450e7e329ffd49834e7017ad78245926"/> + --> + <description>Yuka Watanabe & Tomo Kawai - Pleasure</description> + <year>1994</year> + <publisher>ジャニス (Janis)</publisher> + <info name="release" value="199402xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="yuka watanabe & tomo kawai - pleasure (japan)" sha1="8e0bc95a85c2189698b2a1bcc181f9fe8a80431c" /> + </diskarea> + </part> + </software> + <software name="planedge"> <!-- Origin: Neo Kobe Collection diff --git a/hash/fmtowns_flop.xml b/hash/fmtowns_flop.xml index e101b1e9bc0..693a6e31426 100644 --- a/hash/fmtowns_flop.xml +++ b/hash/fmtowns_flop.xml @@ -53,7 +53,6 @@ Dennou Sakka DX (Cyber Writer Deluxe) Nikkonren Kikaku Dennou Seito (Cyber Pupil) Nikkonren Kikaku 1993/? FD Dor D.O. 1992/5 FD×04 Dor Part 3 D.O. 1992/11 FD×04 -Dragon Slayer: Eiyuu Densetsu 2 Brother Kougyou (Takeru) 1993/2 FD×05 D-Return Nikkonren Kikaku 1990/11 FD×02 Elle Elf 1991/11 FD×05 Euphony V1.1 Fujitsu 1989/7 FD @@ -244,7 +243,7 @@ Towns Drill Shougaku Sansuu 6-nen Gear V1.1L20 Kyouiku Soft Kenky Towns Drill Shougaku Sansuu 6-nen Gear V2.1 Kyouiku Soft Kenkyuusho 1990/2 FD Towns Hair Simulator: Hair Maker Towns Computer System 1991/12 FD×10 Towns Jouhou Kiso Select-F Tokyo Shoseki 1993/3 FD×03 -Towns Karaoke V1.1 Fujitsu 1989/7 FD +*Towns Karaoke V1.1 Fujitsu 1989/7 FD TownsGEAR de Obenkyou Dai-1-kan: Seigo Mondai Kyouiku Soft Kenkyuusho 1992/3 FD×02 TownsGEAR de Obenkyou Dai-2-kan: Sentaku Mondai Kyouiku Soft Kenkyuusho 1992/3 FD×02 TownsGEAR de Obenkyou Dai-3-kan: Suuchi Mondai Kyouiku Soft Kenkyuusho 1992/3 FD×02 @@ -741,6 +740,48 @@ Zurukamashi Ver 2.0 Nikkonren Kikaku </part> </software> + <!-- + The Program Disk is modified, as it was intended to be used to save the game, but it's possible to create a new fresh copy with the + プãƒã‚°ãƒ©ãƒ ディスクã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— (Program Disk backup) option. This requires the Master Program Disk, which is not bootable by itself. + --> + <software name="dsloh2"> + <description>Dragon Slayer - The Legend of Heroes II</description> + <year>1993</year> + <publisher>タケル (Takeru) / 日本ファルコム(Nihon Falcom)</publisher> + <info name="release" value="199302xx" /> + <info name="alt_title" value="ドラゴンスレイヤー 英雄ä¼èª¬II" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Program Disk" /> + <dataarea name="flop" size="3590084"> + <rom name="loh2_programdisk.mfm" size="3590084" crc="bf015288" sha1="5dc1bf9bfc99c71996c38dd7b150132eb701d8e3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Scenario Disk 1" /> + <dataarea name="flop" size="3583888"> + <rom name="loh2_scenariodisk1.mfm" size="3583888" crc="47520a2f" sha1="416b671ba5423329620a5c993548888ca7c84f0b" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Scenario Disk 2" /> + <dataarea name="flop" size="3583160"> + <rom name="loh2_scenariodisk2.mfm" size="3583160" crc="aa325e10" sha1="21e99860e3ad8473f8af707e08d5a8aa34e31492" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Scenario Disk 3" /> + <dataarea name="flop" size="3582193"> + <rom name="loh2_scenariodisk3.mfm" size="3582193" crc="588d3a38" sha1="59acc89c9cc4c862637be3bffb16434af101517a" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Master Program Disk" /> + <dataarea name="flop" size="3582174"> + <rom name="loh2_masterprogramdisk.mfm" size="3582174" crc="e7a1fd4d" sha1="9a12b8f49322f8617753efbf5118a51e95590daf" offset="0" /> + </dataarea> + </part> + </software> + <software name="drstop"> <description>Dr. Stop!</description> <year>1990</year> @@ -1566,6 +1607,20 @@ Zurukamashi Ver 2.0 Nikkonren Kikaku </part> </software> + <!-- The disk this image comes from had 5 bad sectors. The software seems to work correctly, but it should be redumped from a better source --> + <software name="tkaraoke"> + <description>Towns Karaoke V1.1L10</description> + <year>1989</year> + <publisher>富士通 (Fujitsu)</publisher> + <info name="alt_title" value="Townsカラオケ V1.1L10" /> + <info name="release" value="198907xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="townskaraoke.hdm" size="1261568" crc="ebf71c2f" sha1="523b8f365ba056c1e38574fbc86551b60da8d1c9" offset="0" status="baddump" /> + </dataarea> + </part> + </software> + <!-- Runs too fast --> <software name="toshinto" supported="partial"> <description>Toushin Toshi</description> @@ -1687,6 +1742,20 @@ Zurukamashi Ver 2.0 Nikkonren Kikaku </part> </software> + <software name="viewpoid"> + <!-- + Origin: David Swanson + --> + <description>Viewpoint Demonstration No. 1</description> + <year>1994</year> + <publisher>ビング (Ving)</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="vp_demo.bin" size="1261568" crc="dba229be" sha1="f4c5fe2cad77183e91b676609050dfe9d324dc8a" offset="0" /> + </dataarea> + </part> + </software> + <software name="vingsoft"> <!-- Origin: Tokugawa Corporate Forums (yukin) diff --git a/hash/gameboy.xml b/hash/gameboy.xml index 619cfcae245..423fe06f249 100644 --- a/hash/gameboy.xml +++ b/hash/gameboy.xml @@ -25793,7 +25793,7 @@ patch the rom to 0x00 and 0x00....and at 0x0B3D also patch it to </part> </software> - <!-- There is official Game Foy flash cart where players could load official games on stores. + <!-- There is official Game Boy flash cart where players could load official games on stores. pcb="DMG-A20-01" u1="G-MMC1 (MX15002) [MX15002UCA]" u2="8M-FLASH [29F008ATC-14]" diff --git a/hash/gba.xml b/hash/gba.xml index 45bdce9f961..ce2e79dc650 100644 --- a/hash/gba.xml +++ b/hash/gba.xml @@ -17,11 +17,14 @@ <description>007 - Everything or Nothing (Euro, USA)</description> <year>2003</year> <publisher>Electronic Arts</publisher> - <info name="serial" value="AGB-BJBE-USA, AGB-BJBP-EUR"/> + <info name="serial" value="AGB-BJBE-USA, AGB-BJBP-EUR, AGB-BJBP-EUR-1"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-20" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="8388608"> - <rom name="007 - everything or nothing (usa, europe) (en,fr,de).bin" size="8388608" crc="9d4f1e18" sha1="fc6163f99b71b05c10686a0d29010b31274e1dc4" offset="000000" /> + <rom name="agb-bjbp-0.u1" size="8388608" crc="9d4f1e18" sha1="fc6163f99b71b05c10686a0d29010b31274e1dc4" offset="000000" /> </dataarea> </part> </software> @@ -61,11 +64,14 @@ <description>2006 FIFA World Cup - Germany 2006 (Euro, USA)</description> <year>2006</year> <publisher>Electronic Arts</publisher> - <info name="serial" value="AGB-B6WE-USA, AGB-B6WP"/> + <info name="serial" value="AGB-B6WE-USA, AGB-B6WP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="8388608"> - <rom name="2006 fifa world cup - germany 2006 (usa, europe) (en,fr,de,es,it).bin" size="8388608" crc="50ab4544" sha1="295580745787ba9593799213564484aaaa7fd463" offset="000000" /> + <rom name="agb-b6wp-0.u1" size="8388608" crc="50ab4544" sha1="295580745787ba9593799213564484aaaa7fd463" offset="000000" /> </dataarea> </part> </software> @@ -804,7 +810,7 @@ </part> </software> - <software name="akachan"> + <software name="akachan1" cloneof="akachan"> <description>Aka-chan Doubutsuen (Jpn)</description> <year>2004</year> <publisher>TDK Core</publisher> @@ -819,6 +825,24 @@ </part> </software> + <software name="akachan"> + <description>Aka-chan Doubutsuen (Jpn, Rev. 1)</description> + <year>2004</year> + <publisher>TDK Core</publisher> + <info name="serial" value="AGB-BAZJ-JPN"/> + <info name="release" value="20040326"/> + <info name="alt_title" value="ã‚ã‹ã¡ã‚ƒã‚“ã©ã†ã¶ã¤åœ’ 動物ã®ã‚ã‹ã¡ã‚ƒã‚“飼育係育æˆã‚²ãƒ¼ãƒ "/> + <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-20" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9854]" /> + <feature name="slot" value="gba_eeprom_64k" /> + <dataarea name="rom" size="4194304"> + <rom name="agb-bazj-1.u1" size="4194304" crc="c1072e26" sha1="634624c77c90a8ff40bec9046133c50041efc49b" offset="000000" /> + </dataarea> + </part> + </software> + <software name="circlmonj" cloneof="circlmon"> <description>Akumajou Dracula - Circle of the Moon (Jpn)</description> <year>2001</year> @@ -897,11 +921,14 @@ <description>Alex Rider - Stormbreaker (Euro)</description> <year>2006</year> <publisher>THQ</publisher> - <info name="serial" value="AGB-BAWP"/> + <info name="serial" value="AGB-BAWX-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="4194304"> - <rom name="alex rider - stormbreaker (europe) (en,fr,de,es).bin" size="4194304" crc="25e8e2cd" sha1="659dbde917fc74d1cec3e41d1fb4cdd249ae04a0" offset="000000" /> + <rom name="agb-bawx-0.u1" size="4194304" crc="25e8e2cd" sha1="659dbde917fc74d1cec3e41d1fb4cdd249ae04a0" offset="000000" /> </dataarea> </part> </software> @@ -4283,11 +4310,14 @@ <description>Cabela's Big Game Hunter - 2005 Adventures (Euro, USA)</description> <year>2004</year> <publisher>Activision</publisher> - <info name="serial" value="AGB-BG5E-USA, AGB-BG5P"/> + <info name="serial" value="AGB-BG5E-USA, AGB-BG5P-UKV, AGB-BG5P-UKV-1"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="4194304"> - <rom name="cabela's big game hunter - 2005 adventures (usa, europe).bin" size="4194304" crc="bd054567" sha1="aff3c5bc948c2c868be7da8a327aee25beaa027c" offset="000000" /> + <rom name="agb-bg5p-0.u1" size="4194304" crc="bd054567" sha1="aff3c5bc948c2c868be7da8a327aee25beaa027c" offset="000000" /> </dataarea> </part> </software> @@ -4457,11 +4487,14 @@ <description>Care Bears - The Care Quests (Euro)</description> <year>2005</year> <publisher>The Game Factory</publisher> - <info name="serial" value="AGB-BEAP"/> + <info name="serial" value="AGB-BEAP-EUU"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="4194304"> - <rom name="care bears - the care quests (europe) (en,fr,de,es,it,nl,pt,da).bin" size="4194304" crc="6111ed1e" sha1="606ad547286fdf14cc0fe60e5c34f9db83a059dc" offset="000000" /> + <rom name="agb-beap-0.u1" size="4194304" crc="6111ed1e" sha1="606ad547286fdf14cc0fe60e5c34f9db83a059dc" offset="000000" /> </dataarea> </part> </software> @@ -4496,13 +4529,17 @@ </software> <software name="carsb" cloneof="cars"> - <description>Cars (Euro, Spanish / Portuguese)</description> + <description>Disney/Pixar Cars (Euro, Spanish / Portuguese)</description> <year>2006</year> <publisher>THQ</publisher> + <info name="serial" value="AGB-BCAY-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="8388608"> - <rom name="cars (europe) (es,pt).bin" size="8388608" crc="0b058db2" sha1="b7dbdf12678e0f36973ca660178f8978450f4a3e" offset="000000" /> + <rom name="agb-bcay-0.u1" size="8388608" crc="0b058db2" sha1="b7dbdf12678e0f36973ca660178f8978450f4a3e" offset="000000" /> </dataarea> </part> </software> @@ -4572,12 +4609,15 @@ </software> <software name="carschmp"> - <description>Disney Pixar Cars - Mater-National Championship (Euro)</description> + <description>Disney/Pixar Cars - Mater-National Championship (Euro)</description> <year>2007</year> <publisher>THQ</publisher> + <info name="serial" value="AGB-BCPP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E01-41" /> + <feature name="u1" value="U1 GPIO MASKROM" /> <dataarea name="rom" size="4194304"> - <rom name="cars - mater-national championship (europe) (en,fr,de,es,it,nl).bin" size="4194304" crc="d3db9787" sha1="16c666082db0e12384d342e5db4336ac66869d28" offset="000000" /> + <rom name="agb-bcpp-0.u1" size="4194304" crc="d3db9787" sha1="16c666082db0e12384d342e5db4336ac66869d28" offset="000000" /> </dataarea> </part> </software> @@ -6555,11 +6595,14 @@ <description>Dave Mirra Freestyle BMX 2 (Euro)</description> <year>2001</year> <publisher>Acclaim</publisher> - <info name="serial" value="AGB-AX2P"/> + <info name="serial" value="AGB-AX2P-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-10" /> + <feature name="u1" value="U1 MASK ROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9854]" /> <feature name="slot" value="gba_eeprom_64k" /> <dataarea name="rom" size="8388608"> - <rom name="dave mirra freestyle bmx 2 (europe) (en,fr,de,es,it).bin" size="8388608" crc="69e89581" sha1="5d98b5179f4e9ae7ae72d6a43bed5f046f881a7b" offset="000000" /> + <rom name="agb-ax2p-0.u1" size="8388608" crc="69e89581" sha1="5d98b5179f4e9ae7ae72d6a43bed5f046f881a7b" offset="000000" /> </dataarea> </part> </software> @@ -6797,11 +6840,14 @@ <description>Denki Blocks! (Euro)</description> <year>2001</year> <publisher>Rage Software</publisher> - <info name="serial" value="AGB-ADBP"/> + <info name="serial" value="AGB-ADBP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-10" /> + <feature name="u1" value="U1 MASK ROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="4194304"> - <rom name="denki blocks! (europe) (en,fr,de,es,it).bin" size="4194304" crc="6144ec15" sha1="fe9047dd7940e55a9d667824aeeeb7abbd025e59" offset="000000" /> + <rom name="agb-adbp-0.u1" size="4194304" crc="6144ec15" sha1="fe9047dd7940e55a9d667824aeeeb7abbd025e59" offset="000000" /> </dataarea> </part> </software> @@ -16365,10 +16411,12 @@ <description>Kao the Kangaroo (Euro)</description> <year>2001</year> <publisher>Titus</publisher> - <info name="serial" value="AGB-AKKP"/> + <info name="serial" value="AGB-AKKP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E01-10" /> + <feature name="u1" value="U1 32M MROM" /> <dataarea name="rom" size="4194304"> - <rom name="kao the kangaroo (europe) (en,fr,de,es,it,nl).bin" size="4194304" crc="51e7522c" sha1="5a337fcc321eaa0c350644c026767824add338f3" offset="000000" /> + <rom name="agb-akkp-0.u1" size="4194304" crc="51e7522c" sha1="5a337fcc321eaa0c350644c026767824add338f3" offset="000000" /> </dataarea> </part> </software> @@ -16615,11 +16663,14 @@ <description>Kid Paddle (Euro)</description> <year>2005</year> <publisher>Atari</publisher> - <info name="serial" value="AGB-BYLP-EUR"/> + <info name="serial" value="AGB-BYLP-FRA"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="8388608"> - <rom name="kid paddle (europe) (fr,nl).bin" size="8388608" crc="69951aa9" sha1="4ce6021d930fe946c512b2e5584f31d0b6435256" offset="000000" /> + <rom name="agb-bylp-0.u1" size="8388608" crc="69951aa9" sha1="4ce6021d930fe946c512b2e5584f31d0b6435256" offset="000000" /> </dataarea> </part> </software> @@ -16769,10 +16820,12 @@ <description>Killer 3D Pool (Euro)</description> <year>2005</year> <publisher>Zoo Digital Publishing</publisher> - <info name="serial" value="AGB-B3LP"/> + <info name="serial" value="AGB-B3LP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E01-40" /> + <feature name="u1" value="U1 GPIO MASKROM" /> <dataarea name="rom" size="4194304"> - <rom name="killer 3d pool (europe) (en,fr,de,es,it).bin" size="4194304" crc="e6fda065" sha1="a4e3107f0797d42ee8888488cf0f87af140b8652" offset="000000" /> + <rom name="agb-b3lp-0.u1" size="4194304" crc="e6fda065" sha1="a4e3107f0797d42ee8888488cf0f87af140b8652" offset="000000" /> </dataarea> </part> </software> @@ -37243,11 +37296,14 @@ <description>Yu Yu Hakusho - Ghostfiles - Spirit Detective (Euro)</description> <year>2005</year> <publisher>Atari</publisher> - <info name="serial" value="AGB-BYYP"/> + <info name="serial" value="AGB-BYYP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-20" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="8388608"> - <rom name="yu yu hakusho - ghostfiles - spirit detective (europe) (en,fr,de,es,it).bin" size="8388608" crc="208d77ec" sha1="66dc426b71195c11761f7ce58ffef231e8e227b1" offset="000000" /> + <rom name="agb-byyp-0.u1" size="8388608" crc="208d77ec" sha1="66dc426b71195c11761f7ce58ffef231e8e227b1" offset="000000" /> </dataarea> </part> </software> @@ -37327,7 +37383,7 @@ <part name="cart" interface="gba_cart"> <feature name="pcb" value="AGB-E02-20" /> <feature name="u1" value="U1 GPIO MASKROM" /> - <feature name="u2" value="U2 512K/1M FLASH" /> + <feature name="u2" value="U2 512K/1M FLASH [39VF512]" /> <feature name="slot" value="gba_flash" /> <dataarea name="rom" size="8388608"> <rom name="agb-aydp-0.u1" size="8388608" crc="ee317f69" sha1="3ded1227698fbdb2ba47f03025cd1934fc184b99" offset="000000" /> @@ -37397,11 +37453,12 @@ <description>Yu-Gi-Oh! - The Sacred Cards (Euro)</description> <year>2004</year> <publisher>Konami</publisher> - <info name="serial" value="AGB-AY7P-FRA"/> + <info name="serial" value="AGB-AY7P-FRA, AGB-AY7P-UKV"/> + <info name="alt_title" value="Yu-Gi-Oh! - Les Cartes Sacrées (Box)"/> <part name="cart" interface="gba_cart"> <feature name="pcb" value="AGB-E11-10" /> <feature name="u1" value="U1 MASK ROM AGB" /> - <feature name="u2" value="U2 256K FRAM" /> + <feature name="u2" value="U2 256K FRAM [MB85R256A]" /> <feature name="slot" value="gba_sram" /> <dataarea name="rom" size="16777216"> <rom name="agb-ay7p-0.u1" size="16777216" crc="d19db37c" sha1="9a23ad34f67ac1f1343b7009f11ac95c77b782ef" offset="000000" /> @@ -37415,9 +37472,12 @@ <publisher>Konami</publisher> <info name="serial" value="AGB-AY7E-USA"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E11-01" /> + <feature name="u1" value="U1 MASK ROM AGB" /> + <feature name="u2" value="U2 256K FRAM [MB85R256A]" /> <feature name="slot" value="gba_sram" /> <dataarea name="rom" size="16777216"> - <rom name="yu-gi-oh! - the sacred cards (usa).bin" size="16777216" crc="141fb1cc" sha1="a06735f9c3d10be9339657026981aef77af34b27" offset="000000" /> + <rom name="agb-ay7e-0.u1" size="16777216" crc="141fb1cc" sha1="a06735f9c3d10be9339657026981aef77af34b27" offset="000000" /> </dataarea> </part> </software> @@ -37428,9 +37488,12 @@ <publisher>Konami</publisher> <info name="serial" value="AGB-BYWP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E11-10" /> + <feature name="u1" value="U1 MASK ROM AGB" /> + <feature name="u2" value="U2 256K FRAM [MB85R256A]" /> <feature name="slot" value="gba_sram" /> <dataarea name="rom" size="16777216"> - <rom name="yu-gi-oh! - world championship tournament 2004 (europe) (en,ja,fr,de,es,it).bin" size="16777216" crc="31edef1b" sha1="97a2e7cf6613538216dc807ae5ed92eaa4b9d7a8" offset="000000" /> + <rom name="agb-bywp-0.u1" size="16777216" crc="3c42e84c" sha1="b791ee3241caef0566bca56bb70c6d37ad3b8621" offset="000000" /> </dataarea> </part> </software> @@ -37516,7 +37579,7 @@ <publisher>Konami</publisher> <info name="serial" value="AGB-AY5E-USA"/> <part name="cart" interface="gba_cart"> - <feature name="pcb" value="AGB-E06-10" /> + <feature name="pcb" value="AGB-E06-10" /> <!-- Also found with AGB-E06-20 --> <feature name="u1" value="U1 MASK ROM" /> <feature name="u2" value="U2 256K SRAM [B62LV256C-70]" /> <feature name="u3" value="U3 9803F [LV2416]" /> @@ -37533,11 +37596,15 @@ <description>Shonen Jump's Yu-Gi-Oh! - Ultimate Masters Edition - World Championship Tournament 2006 (Euro)</description> <year>2006</year> <publisher>Konami</publisher> - <info name="serial" value="AGB-BY6P"/> + <info name="serial" value="AGB-BY6P-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-Y11-02" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 256K SRAM [MB85R256S]" /> + <feature name="u3" value="U3 [empty]" /> <feature name="slot" value="gba_sram" /> <dataarea name="rom" size="33554432"> - <rom name="yu-gi-oh! - ultimate masters edition - world championship tournament 2006 (europe) (en,ja,fr,de,es,it).bin" size="33554432" crc="cede4060" sha1="0734be2fe17d9ef5ede88e0a14cd194656aa23d8" offset="000000" /> + <rom name="agb-by6p-0.u1" size="33554432" crc="cede4060" sha1="0734be2fe17d9ef5ede88e0a14cd194656aa23d8" offset="000000" /> </dataarea> </part> </software> @@ -37715,6 +37782,7 @@ <publisher>Konami</publisher> <info name="serial" value="AGB-BYGE-USA"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-Y11-02" /> <feature name="slot" value="gba_sram" /> <dataarea name="rom" size="33554432"> <rom name="yu-gi-oh! gx - duel academy (usa).bin" size="33554432" crc="3b8a00fe" sha1="57d6bb789833b62b360072902982d5f1011b3640" offset="000000" /> @@ -38050,9 +38118,15 @@ <info name="release" value="20011130"/> <info name="alt_title" value="ゾイドサーガ"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E06-10" /> + <feature name="u1" value="U1 MASK ROM" /> + <feature name="u2" value="U2 256K SRAM [HY62WT081ED70C]" /> + <feature name="u3" value="U3 9803F [LV2416]" /> + <feature name="u4" value="U4 PST3425" /> + <feature name="bt1" value="CR1616" /> <feature name="slot" value="gba_sram" /> <dataarea name="rom" size="8388608"> - <rom name="zoids saga (japan).bin" size="8388608" crc="5975dda8" sha1="75d8c15ac281ea93c8ac7cc7641c490799557081" offset="000000" /> + <rom name="agb-atzj-0.u1" size="8388608" crc="5975dda8" sha1="75d8c15ac281ea93c8ac7cc7641c490799557081" offset="000000" /> </dataarea> </part> </software> @@ -38120,7 +38194,7 @@ <description>Zone of the Enders - The Fist of Mars (Euro)</description> <year>2002</year> <publisher>Konami</publisher> - <info name="serial" value="AGB-AZEP"/> + <info name="serial" value="AGB-AZEP-EUR"/> <part name="cart" interface="gba_cart"> <feature name="pcb" value="AGB-E02-10" /> <feature name="u1" value="U1 MASKROM AGB" /> @@ -38262,10 +38336,11 @@ </part> </software> + <!-- Tech demo compiled from source code. This is a later build from code marked "Copyright (C) 1999-2001 NINTENDO Co.,Ltd." --> <software name="yoshi"> - <description>Yoshi Demo</description> - <year>2001?</year> - <publisher><unknown></publisher> + <description>Sample Yoshi Game (Prototype, 20010214)</description> + <year>2001</year> + <publisher>Nintendo</publisher> <part name="cart" interface="gba_cart"> <dataarea name="rom" size="2273956"> <rom name="yoshi.bin" size="2273956" crc="954d2619" sha1="89fe5c0b5489a14f5f9bb1d4ebde998f07c4f939" offset="000000" /> @@ -38273,10 +38348,11 @@ </part> </software> + <!-- Tech demo compiled from source code. This is an earlier build from code marked "Copyright (C) 1999-2000 NINTENDO Co.,Ltd." --> <software name="yoshia" cloneof="yoshi"> - <description>Yoshi Demo (Alt?)</description> - <year>2001?</year> - <publisher><unknown></publisher> + <description>Sample Yoshi Game (Prototype, 20000601)</description> + <year>2000</year> + <publisher>Nintendo</publisher> <part name="cart" interface="gba_cart"> <dataarea name="rom" size="1717944"> <rom name="yoshi sample (japan) (en).bin" size="1717944" crc="34f2ef47" sha1="71b87b9684babfe5751a9fb6642ace5a927f21e0" offset="000000" /> @@ -38590,13 +38666,17 @@ </software> <software name="2disney"> - <description>2 Disney Games: Disney's Peter Pan - Return to Neverland + Disney's Lilo & Stitch 2 (Euro)</description> - <year>200?</year> + <description>2 Disney Games: Disney's Lilo & Stitch 2 + Disney's Peter Pan - Return to Neverland (Euro)</description> + <year>2004</year> <publisher>Disney Interactive</publisher> + <info name="serial" value="AGB-BLQP-EUR"/> <part name="cart" interface="gba_cart"> + <feature name="pcb" value="AGB-E03-21" /> + <feature name="u1" value="U1 GPIO MASKROM" /> + <feature name="u2" value="U2 4K/64K EEPROM [9853]" /> <feature name="slot" value="gba_eeprom_4k" /> <dataarea name="rom" size="16777216"> - <rom name="2 disney games - lilo & stitch 2 + peter pan - return to neverland (europe) (en,fr,de,es+en,fr,de,es,it,nl).bin" size="16777216" crc="75703943" sha1="4b0455173b592407db9460b7e38fb209fd549772" offset="000000" /> + <rom name="agb-blqp-0.u1" size="16777216" crc="75703943" sha1="4b0455173b592407db9460b7e38fb209fd549772" offset="000000" /> </dataarea> </part> </software> @@ -38780,7 +38860,7 @@ <description>2 Game Pack!: Hot Wheels - Stunt Track Challenge + Hot Wheels - World Race (Euro, USA)</description> <year>200?</year> <publisher>DSI Games</publisher> - <info name="serial" value="AGB-BQJE-USA, AGB-BQJP"/> + <info name="serial" value="AGB-BQJE-USA, AGB-BQJP-UKV"/> <part name="cart" interface="gba_cart"> <feature name="pcb" value="AGB-E01-41" /> <feature name="u1" value="U1 GPIO MASKROM" /> diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml index a6dd68aebf6..f1b4d78114f 100644 --- a/hash/ibm5150.xml +++ b/hash/ibm5150.xml @@ -719,7 +719,7 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went </dataarea> </part> </software> - + <software name="donald"> <description>Donald Duck's Playground</description> <year>1986</year> @@ -8199,7 +8199,7 @@ has been replaced with an all-zero block. --> </dataarea> </part> </software> - + <software name="gryzor"> <!-- Dumped from a copied disk --> <description>Gryzor</description> @@ -8340,7 +8340,7 @@ has been replaced with an all-zero block. --> </dataarea> </part> </software> - + <software name="indytod"> <description>Indiana Jones and the Temple of Doom</description> <year>1989</year> @@ -9642,7 +9642,7 @@ has been replaced with an all-zero block. --> </dataarea> </part> </software> - + <software name="pcgames3"> <description>PC Games #3</description> <year>1988</year> diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml index 61b2026e474..bd302853dde 100644 --- a/hash/ibm5170.xml +++ b/hash/ibm5170.xml @@ -9248,7 +9248,7 @@ </dataarea> </part> </software> - + <software name="duke"> <!-- Dumped via Kryoflux from an original disk, all tracks show as modified - most likely not professionally duplicated --> <!-- from a registered version ordered circa 2004 --> @@ -10518,7 +10518,7 @@ </dataarea> </part> </software> - + <software name="lightspd"> <description>Lightspeed</description> <year>1990</year> @@ -11927,7 +11927,7 @@ </dataarea> </part> </software> - + <software name="vanslug"> <!-- Marked as bad, could do with another dump to make sure it's correct--> <description>Vanslug: X Mission - The Way of Super Warrior</description> diff --git a/hash/icanguit.xml b/hash/icanguit.xml index 35ca82efb05..fef0e969bf3 100644 --- a/hash/icanguit.xml +++ b/hash/icanguit.xml @@ -4,43 +4,43 @@ <!-- Known cartridges (*=dumped) (#=sourced) - *Guitar Favorites (K7357) - #Barbie Guitar Party - #Rock 101 - *Hot Wheels Road Tunes (K9902) - *Spongebob Squarepants Surf's Up (K9903) - *Nashville Hits (K9905) - *American Idol Guitar Greats (K9907) - - (were there any more?) - - cartridge pinout (not identical to I Can Play Piano) - - 1 ground 2 ground - 3 A0 4 A1 - 5 A2 6 A3 - 7 A4 8 A5 - 9 A6 10 A7 - 11 A17 12 A18 - 13 A21 14 A20 - 15 A19 16 A8 - 17 A9 18 A10 - 19 A11 20 A12 - 21 A13 22 A14 - 23 A15 24 A16 - 25 /CE 26 ground - 27 ground 28 /OE - 29 D15 30 D7 - 31 D14 32 D6 - 33 D13 34 D5 - 35 D12 36 D4 - 37 Vcc 38 Vcc - 39 D11 40 D3 - 41 D10 42 D2 - 43 D9 44 D1 - 45 D8 46 D0 - 47 ground 48 Gnd - + *Guitar Favorites (K7357) + #Barbie Guitar Party + #Rock 101 + *Hot Wheels Road Tunes (K9902) + *Spongebob Squarepants Surf's Up (K9903) + *Nashville Hits (K9905) + *American Idol Guitar Greats (K9907) + + (were there any more?) + + cartridge pinout (not identical to I Can Play Piano) + + 1 ground 2 ground + 3 A0 4 A1 + 5 A2 6 A3 + 7 A4 8 A5 + 9 A6 10 A7 + 11 A17 12 A18 + 13 A21 14 A20 + 15 A19 16 A8 + 17 A9 18 A10 + 19 A11 20 A12 + 21 A13 22 A14 + 23 A15 24 A16 + 25 /CE 26 ground + 27 ground 28 /OE + 29 D15 30 D7 + 31 D14 32 D6 + 33 D13 34 D5 + 35 D12 36 D4 + 37 Vcc 38 Vcc + 39 D11 40 D3 + 41 D10 42 D2 + 43 D9 44 D1 + 45 D8 46 D0 + 47 ground 48 Gnd + --> <softwarelist name="icanguit" description="Fisher-Price / Mattel I Can Play Guitar cartridges"> @@ -54,7 +54,7 @@ </dataarea> </part> </software> - + <software name="ggreats" supported="no"> <description>American Idol - Guitar Greats (K9907)</description> <year>2007</year> @@ -64,8 +64,8 @@ <rom name="icpgguitargreats.bin" size="0x800000" crc="5a4daf19" sha1="4f673c39fe95399ebfd02257c7b6b80ec44ed14f" offset="0" /> </dataarea> </part> - </software> - + </software> + <software name="surfsup" supported="no"> <description>SpongeBob SquarePants - Surf's Up (K9903)</description> <year>2007</year> @@ -75,8 +75,8 @@ <rom name="icpgsurfsup.bin" size="0x800000" crc="c6ead0fd" sha1="f49ec1cf28e960dd5a253482e74978b67d92f652" offset="0" /> </dataarea> </part> - </software> - + </software> + <software name="roadtune" supported="no"> <description>Hot Wheels - Road Tunes (K9902)</description> <year>2007</year> @@ -87,7 +87,7 @@ </dataarea> </part> </software> - + <software name="nashhits" supported="no"> <description>Nashville Hits (K9905)</description> <year>2007</year> @@ -97,5 +97,5 @@ <rom name="icpgnashvillehits.bin" size="0x800000" crc="b3615978" sha1="9c8d5c085feb55ed18d118d4dd7b9ff72872f3bc" offset="0" /> </dataarea> </part> - </software> + </software> </softwarelist> diff --git a/hash/icanpian.xml b/hash/icanpian.xml index c14b881bcf5..ff143a83a55 100644 --- a/hash/icanpian.xml +++ b/hash/icanpian.xml @@ -5,47 +5,47 @@ Known cartridges (*=dumped) (#=sourced) *Piano Favourites (J7522) - *Jammin Jungle Safari (Disney The Lion King, Disney The Jungle Book, Disney Tarzan) (K4653) - *Jungle Boogie (J7524) - *Scooby-Doo! Monster Mayhem (J7525) - *Rockin' Dance Party (J8715) - *Nicktoons Show Tunes (J7527) - *Disney Princess Magical Melodies (K4656) - #Barbie Princess Enchanted Sounds - #Pop Hits - #Dora the Explorer Musical Adventure - #American Idol - Take The Stage - #Holiday Wonderland - #The Wizard of Oz - We're Off to Play the Piano - - (were there any more?) - - cartridge pinout (not identical to I Can Play Guitar) - - 1 ground 2 ground - 3 A1 4 A0 - 5 A3 6 A2 - 7 A5 8 A4 - 9 A7 10 A6 - 11 A18 12 A17 - 13 A20 14 A21 - 15 A8 16 A19 - 17 A10 18 A9 - 19 A12 20 A11 - 21 A14 22 A13 - 23 A16 24 A15 - 25 /OE 26 Vcc - 27 /CS 28 RW - 29 Res 30 R7 - 31 D7 32 D15 - 33 D6 34 D14 - 35 D5 36 D13 - 37 D4 38 D12 - 39 D3 40 D11 - 41 D2 42 D10 - 43 D1 44 D9 - 45 D0 46 D8 - 47 ground 48 Gnd + *Jammin Jungle Safari (Disney The Lion King, Disney The Jungle Book, Disney Tarzan) (K4653) + *Jungle Boogie (J7524) + *Scooby-Doo! Monster Mayhem (J7525) + *Rockin' Dance Party (J8715) + *Nicktoons Show Tunes (J7527) + *Disney Princess Magical Melodies (K4656) + #Barbie Princess Enchanted Sounds + #Pop Hits + #Dora the Explorer Musical Adventure + #American Idol - Take The Stage + #Holiday Wonderland + #The Wizard of Oz - We're Off to Play the Piano + + (were there any more?) + + cartridge pinout (not identical to I Can Play Guitar) + + 1 ground 2 ground + 3 A1 4 A0 + 5 A3 6 A2 + 7 A5 8 A4 + 9 A7 10 A6 + 11 A18 12 A17 + 13 A20 14 A21 + 15 A8 16 A19 + 17 A10 18 A9 + 19 A12 20 A11 + 21 A14 22 A13 + 23 A16 24 A15 + 25 /OE 26 Vcc + 27 /CS 28 RW + 29 Res 30 R7 + 31 D7 32 D15 + 33 D6 34 D14 + 35 D5 36 D13 + 37 D4 38 D12 + 39 D3 40 D11 + 41 D2 42 D10 + 43 D1 44 D9 + 45 D0 46 D8 + 47 ground 48 Gnd --> <softwarelist name="icanpian" description="Fisher-Price / Mattel I Can Play Piano cartridges"> @@ -59,7 +59,7 @@ </dataarea> </part> </software> - + <software name="dpmagic"> <description>Disney Princess Magical Melodies (K4656)</description> <year>2005</year> @@ -70,7 +70,7 @@ </dataarea> </part> </software> - + <software name="jungboog"> <description>Jungle Boogie (J7524)</description> <year>2005</year> @@ -81,7 +81,7 @@ </dataarea> </part> </software> - + <software name="scoobymm"> <description>Scooby-Doo! Monster Mayhem (J7525)</description> <year>2005</year> @@ -92,7 +92,7 @@ </dataarea> </part> </software> - + <software name="jjs"> <description>Jammin' Jungle Safari (Disney's The Lion King, Jungle Book, Tarzan) (K4653)</description> <!-- Tarzan is shown on the cart, but none of the songs are from it? --> <year>2005</year> @@ -103,7 +103,7 @@ </dataarea> </part> </software> - + <software name="showtune"> <description>Nicktoons Show Tunes (J7527)</description> <year>2005</year> @@ -114,7 +114,7 @@ </dataarea> </part> </software> - + <software name="rdp"> <description>Rockin' Dance Party (J8715)</description> <year>2005</year> @@ -124,6 +124,6 @@ <rom name="icpprockindanceparty.bin" size="0x800000" crc="00d597d3" sha1="603c8d9d11f5e1d075a1b524e99b581d859b43ba" offset="0" /> </dataarea> </part> - </software> - + </software> + </softwarelist> diff --git a/hash/leapfrog_leappad_cart.xml b/hash/leapfrog_leappad_cart.xml index 0483cf0d342..762856be5f5 100644 --- a/hash/leapfrog_leappad_cart.xml +++ b/hash/leapfrog_leappad_cart.xml @@ -587,4 +587,88 @@ </part> </software> + <software name="sedsaber1" supported="no"> + <description>Sed de Saber - English as a Second Language Edition - Book 1 - Getting Started (Spain)</description> + <year>2007</year> + <publisher>LeapFrog</publisher> + <info name="serial" value="500-13034 UBL"/> + <part name="cart" interface="leapfrog_leappad_cart"> + <feature name="pcb" value="57000-003-2111"/> + <feature name="u1" value="JS28F320"/> + <dataarea name="rom" size="0x400000"> + <rom name="500-13034 UBL - Sed de Saber - English as a Second Language Edition - Book 1 - Getting Started.bin" size="0x400000" crc="6b9a4399" sha1="8559facabf94c6ffaf8a6e1868f0ab00fb28ce09" offset="0" /> + </dataarea> + </part> + </software> + + <software name="sedsaber2" supported="no"> + <description>Sed de Saber - English as a Second Language Edition - Book 2 - A New Job (Spain)</description> + <year>2007</year> + <publisher>LeapFrog</publisher> + <info name="serial" value="500-13035 UBL"/> + <part name="cart" interface="leapfrog_leappad_cart"> + <feature name="pcb" value="57000-003-2111"/> + <feature name="u1" value="JS28F320"/> + <dataarea name="rom" size="0x400000"> + <rom name="500-13035 UBL - Sed de Saber - English as a Second Language Edition - Book 2 - A New Job.bin" size="0x400000" crc="95b1520c" sha1="25701bd15371cd463a801bd6ede7a9591c352680" offset="0" /> + </dataarea> + </part> + </software> + + <software name="sedsaber3" supported="no"> + <description>Sed de Saber - English as a Second Language Edition - Book 3 - Daily Activities (Spain)</description> + <year>2007</year> + <publisher>LeapFrog</publisher> + <info name="serial" value="500-13038 UBL"/> + <part name="cart" interface="leapfrog_leappad_cart"> + <feature name="pcb" value="57000-003-2111"/> + <feature name="u1" value="JS28F320"/> + <dataarea name="rom" size="0x400000"> + <rom name="500-13038 UBL - Sed de Saber - English as a Second Language Edition - Book 3 - Daily Activities.bin" size="0x400000" crc="39f5b54b" sha1="eeb8849733bf856fe4f28503153d989a6a00cb11" offset="0" /> + </dataarea> + </part> + </software> + + <software name="sedsaber4" supported="no"> + <description>Sed de Saber - English as a Second Language Edition - Book 4 - Health and Safety (Spain)</description> + <year>2007</year> + <publisher>LeapFrog</publisher> + <info name="serial" value="500-13040 UBL"/> + <part name="cart" interface="leapfrog_leappad_cart"> + <feature name="pcb" value="57000-003-2111"/> + <feature name="u1" value="JS28F320"/> + <dataarea name="rom" size="0x400000"> + <rom name="500-13040 UBL - Sed de Saber - English as a Second Language Edition - Book 4 - Health and Safety.bin" size="0x400000" crc="efd55310" sha1="bbde3bc75337f8cfac60dd5dfaab2de756cfd6de" offset="0" /> + </dataarea> + </part> + </software> + + <software name="sedsaber5" supported="no"> + <description>Sed de Saber - English as a Second Language Edition - Book 5 - Community Interactions (Spain)</description> + <year>2007</year> + <publisher>LeapFrog</publisher> + <info name="serial" value="500-13041 UBL"/> + <part name="cart" interface="leapfrog_leappad_cart"> + <feature name="pcb" value="57000-003-2111"/> + <feature name="u1" value="JS28F320"/> + <dataarea name="rom" size="0x400000"> + <rom name="500-13041 UBL - Sed de Saber - English as a Second Language Edition - Book 5 - Community Interactions.bin" size="0x400000" crc="a3bb676b" sha1="ddab54976fd54b9ef140ee6b67414597a3a21ec9" offset="0" /> + </dataarea> + </part> + </software> + + <software name="sedsaber6" supported="no"> + <description>Sed de Saber - English as a Second Language Edition - Book 6 - How do you say... (Spain)</description> + <year>2007</year> + <publisher>LeapFrog</publisher> + <info name="serial" value="500-13044 UBL"/> + <part name="cart" interface="leapfrog_leappad_cart"> + <feature name="pcb" value="57000-003-2111"/> + <feature name="u1" value="JS28F320"/> + <dataarea name="rom" size="0x400000"> + <rom name="500-13044 UBL - Sed de Saber - English as a Second Language Edition - Book 6 - How do you say... .bin" size="0x400000" crc="5ed699f6" sha1="902c70e0437525de94a8febab794e46b8a55f5c1" offset="0" /> + </dataarea> + </part> + </software> + </softwarelist> diff --git a/hash/pc98.xml b/hash/pc98.xml index 91643dfd13e..3927bb8fb3d 100644 --- a/hash/pc98.xml +++ b/hash/pc98.xml @@ -9321,7 +9321,7 @@ only have some part of Windows file and a Video driver(CLGD?). </dataarea> </part> </software> - + <!-- Crashes MAME on PC-9801UX, "Packed file is corrupt" on anything else --> <software name="centurioa" cloneof="centurio" supported="no"> <!-- Origin: Neo Kobe Collection --> @@ -10032,10 +10032,10 @@ only have some part of Windows file and a Video driver(CLGD?). </part> </software> - <!-- - The Cherry Jam sets are completely different. The parent set is self-booting (MEGDOS-based), while the alternate set runs from standard DOS and requires HDD installation. - The alternate set has files dated in the year 2000, so it's either a late reprint or an unofficial repack. - --> + <!-- + The Cherry Jam sets are completely different. The parent set is self-booting (MEGDOS-based), while the alternate set runs from standard DOS and requires HDD installation. + The alternate set has files dated in the year 2000, so it's either a late reprint or an unofficial repack. + --> <software name="chrryjam"> <!-- Origin: Neo Kobe Collection --> <description>Cherry Jam - Kanojo ga Hadaka ni Kigaetara</description> @@ -47620,7 +47620,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) <year>19??</year> <publisher><unknown></publisher> <info name="alt_title" value="コンピュータエコノミクス" /> - <info name="usage" value="Run CAE.EXE from DOS" /> + <info name="usage" value="Run CAE.EXE from DOS" /> <part name="flop1" interface="floppy_5_25"> <dataarea name="flop" size="1261568"> <rom name="computer_aided_economics.hdm" size="1261568" crc="4d5c369c" sha1="7d9dc63be2eb97fc5107aeab5cd68466a014963e" offset="0" /> diff --git a/hash/pcx_flop.xml b/hash/pcx_flop.xml index 9dee2534f8f..f0019e4165a 100644 --- a/hash/pcx_flop.xml +++ b/hash/pcx_flop.xml @@ -195,4 +195,4 @@ </part> </software> - </softwarelist> +</softwarelist> diff --git a/hash/psx.xml b/hash/psx.xml index 1281f3ef052..88bc9174fc6 100644 --- a/hash/psx.xml +++ b/hash/psx.xml @@ -2,7 +2,7 @@ <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> <softwarelist name="psx" description="Sony Playstation CD-ROMs"> -<!-- TODO: +<!-- TODO: - Unknown source should be tested and marked as status=baddump instead of pre-emptive supported=no. --> <!-- redump.org US PS1 discs (1795 of 1799), based on 'Sony - PlayStation - Datfile (8777) (2017-10-10 01-37-51)' @@ -37317,7 +37317,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="1903ueno" supported="yes"> - <!-- + <!-- Unknown source <rom name="19 ji 03 pun Ueno Hatsu Yakou Ressha (Japan) [SLPS-01865].bin" size="482529264" crc="866a1b3a" sha1="29969bb1f841b0a9183699f586924374962cc709"/> <rom name="19 ji 03 pun Ueno Hatsu Yakou Ressha (Japan) [SLPS-01865].cue" size="121" crc="1693f9fd" sha1="91dcac56152bbc60ae39f54b5d0653ede6bd5d05"/> @@ -37338,8 +37338,8 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="1on1" supported="yes"> - <!-- - Unknown source + <!-- + Unknown source <rom name="1-on-1 - Single Basketball (Japan) [SLPS-01706].bin" size="362012784" crc="dfb6de76" sha1="94f6b76c481536f72923e0f47875d17ac8798302"/> <rom name="1-on-1 - Single Basketball (Japan) [SLPS-01706].cue" size="113" crc="a6de0065" sha1="5c700e9957a2da7f69659215b5a0d7e584c23626"/> --> @@ -37359,7 +37359,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="1stkiss" supported="yes"> - <!-- + <!-- Unknown source <rom name="First Kiss Monogatari (Japan) (Disc 1) [SLPS-01708].bin" size="743549520" crc="d62f4805" sha1="1bf2d5d5d78a81cd78f17a0ddea8845add722633"/> <rom name="First Kiss Monogatari (Japan) (Disc 1) [SLPS-01708].cue" size="115" crc="9e4d4124" sha1="1e9dbc957e5f4eb5dfc47b9c367fb39378f2f009"/> @@ -37388,7 +37388,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK, has sound hiccups with menus etc. --> <software name="20sretsu" cloneof="vivasocr" supported="no"> - <!-- + <!-- Unknown source <rom name="20 Seiki Striker Retsuden - The 20th Century's Strikers (Japan) [SLPS-02348].bin" size="567690480" crc="eaf04647" sha1="4e2da1c5c25e66d847ffa987206c1880ee3d0fa6"/> <rom name="20 Seiki Striker Retsuden - The 20th Century's Strikers (Japan) [SLPS-02348].cue" size="140" crc="c4b33269" sha1="c0959c020f02586ccc7fd0d3d4c7330bf29f14eb"/> @@ -37494,7 +37494,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK, loading screens blacks out for a split second --> <software name="advanrac" supported="yes"> - <!-- + <!-- Unknown source <rom name="Advan Racing (Japan) (Track 1) [SLPS-01689].bin" size="565898256" crc="2663d852" sha1="651124fa56238f2f9504ccb9924e2ccb3d7c4646"/> <rom name="Advan Racing (Japan) (Track 2) [SLPS-01689].bin" size="33657120" crc="ba904e85" sha1="11ab3b1eed7f08622bbf0dc33bb676f12da9fbfd"/> @@ -39970,7 +39970,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK, first boss GFXs are glitchy (may be the dump) --> <software name="captcomm" supported="partial"> - <!-- + <!-- Unknown source <rom name="Captain Commando (Japan) [SLPS-01567].bin" size="658153104" crc="fd296689" sha1="0a593c99a124cfa8ccf01310db0e967bd2aee7ae"/> <rom name="Captain Commando (Japan) [SLPS-01567].cue" size="101" crc="65eba342" sha1="69390e7822f1ae6c30d57b3b0e00fd8e8ff32fe2"/> @@ -46269,7 +46269,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- hangs at PS logo --> <software name="kisyadeg" supported="no"> - <!-- + <!-- Unknown source <rom name="Kisya de Go! (Japan) [SLPM-86449].bin" size="104106576" crc="6e58310a" sha1="c3b2d8e8bb79ca37791ea76dc901b65c5dcc6bb5"/> <rom name="Kisya de Go! (Japan) [SLPM-86449].cue" size="97" crc="9f2f7e77" sha1="60fb83bb15f63a65a38e9ea06838c66176196a36"/> @@ -47926,7 +47926,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="meiretsu" supported="yes"> - <!-- + <!-- Unknown source <rom name="Meisha Retsuden - Greatest 70's (Japan) [SLPS-01153].bin" size="628106304" crc="bc432823" sha1="8540affeb65af0b81c80a90b3c0cf05d0fbb64ba"/> <rom name="Meisha Retsuden - Greatest 70's (Japan) [SLPS-01153].cue" size="116" crc="28addf0a" sha1="07df4b2d72f7c111266301ed98726580fd757294"/> @@ -51515,7 +51515,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="runhigh" supported="yes"> - <!-- + <!-- Unknown source <rom name="Running High (Japan) [SLPS-00751].bin" size="627598272" crc="989748aa" sha1="40d1ccc44ee2e2f2d6d3506f2ff378911a699354"/> <rom name="Running High (Japan) [SLPS-00751].cue" size="801" crc="f772cd72" sha1="f3f3c6542a8d991b131494290e63c887f67e39cd"/> @@ -53376,7 +53376,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="slivstad" supported="yes"> - <!-- + <!-- Unknown source <rom name="Super Live Stadium (Japan) (Track 1) [SLPM-86019].bin" size="250360992" crc="64f045e6" sha1="3bd20f5194ebb9a5d5641b65a173200ec7712167"/> <rom name="Super Live Stadium (Japan) (Track 2) [SLPM-86019].bin" size="44128224" crc="ceda8e60" sha1="305946339a3d1dd7f6e84cf00feec7097443ab50"/> @@ -53436,7 +53436,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="sndqube" supported="yes"> - <!-- + <!-- Unknown source <rom name="Sound Qube (Japan) [SLPS-01309].bin" size="35390544" crc="2592cf3d" sha1="d763b661a0ebc5fe7d28959cb75df7fa28fc1cbf"/> <rom name="Sound Qube (Japan) [SLPS-01309].cue" size="95" crc="826e21ee" sha1="c486b9d32452d7bc0eab4bd09ea72a4cb597995e"/> @@ -53591,7 +53591,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="spaceinvj" cloneof="spaceinv" supported="yes"> - <!-- + <!-- Unknown source <rom name="Space Invaders X (Japan) [SLPM-86419].bin" size="203400960" crc="898b2e6d" sha1="3ffeb95a80dbf0f3b62fc4c46521883432dbb64d"/> <rom name="Space Invaders X (Japan) [SLPM-86419].cue" size="101" crc="5b52cdc4" sha1="8dace214eb0faa651a86b5ca23961bce6645eae9"/> @@ -53979,7 +53979,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="ss088gmj" supported="yes"> - <!-- + <!-- Unknown source <rom name="Simple 1500 Series Vol.088 - The Gal Mahjong (Japan) [SLPM-87023].bin" size="285187056" crc="49f38cf1" sha1="a387e2524a02e914f6f2078edf457693ffc0785c"/> <rom name="Simple 1500 Series Vol.088 - The Gal Mahjong (Japan) [SLPM-87023].cue" size="193" crc="9ab18af7" sha1="1a5d6197dc43d6973265ff04d0347b8e37b07646"/> @@ -54019,7 +54019,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="ss090sen" supported="yes"> - <!-- + <!-- Unknown source <rom name="Simple 1500 Series Vol.090 - The Sensha (Japan) [SLPM-87044].bin" size="542733408" crc="44fb999b" sha1="bf17f4ee3e915166b81a40f2ecec24fb80d7727c"/> <rom name="Simple 1500 Series Vol.090 - The Sensha (Japan) [SLPM-87044].cue" size="828" crc="d73d623e" sha1="4f6b5511c6ec59a51e0fec0a326f98e8407c2e02"/> @@ -54059,7 +54059,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK, input lag needs to be counterchecked --> <software name="ss097sqh" supported="partial"> - <!-- + <!-- Unknown source <rom name="Simple 1500 Series Vol.097 - The Squash (Japan) [SLPM-87088].bin" size="404271168" crc="20a4668f" sha1="0608c5e1356ef81f371bea940929c2707bf8b1a7"/> <rom name="Simple 1500 Series Vol.097 - The Squash (Japan) [SLPM-87088].cue" size="557" crc="50770bde" sha1="82f1509beff5c440560869a1a249841c4984936f"/> @@ -54156,7 +54156,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="ss104pnk" supported="yes"> - <!-- + <!-- Unknown source <rom name="Simple 1500 Series Vol.104 - The Pink Panther (Japan) (Track 01) [SLPM-87215].bin" size="127076208" crc="3f42f527" sha1="5a8979934b286ca05d41221902a79ba7814b1006"/> <rom name="Simple 1500 Series Vol.104 - The Pink Panther (Japan) (Track 02) [SLPM-87215].bin" size="16583952" crc="9055e137" sha1="9befde07d4a797ee2d3d7f836efe414425cc6fc8"/> @@ -54751,7 +54751,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="tfx" supported="yes"> - <!-- + <!-- Unknown source <rom name="TFX (Japan) [SLPS-00511].bin" size="603476160" crc="75b87d33" sha1="d218103639d0f23c77551b5f3c83fcfcaed9ebd1"/> <rom name="TFX (Japan) [SLPS-00511].cue" size="984" crc="5877fd51" sha1="bc7d46f45b5d8e6391c5f67cb1e2914df699e589"/> @@ -55961,7 +55961,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="ungrawlk" supported="yes"> - <!-- + <!-- Unknown source <rom name="Ungra Walker (Japan) [SLPM-87055].bin" size="346256736" crc="7eb8e45f" sha1="4c1c90c346d8cf8ce2faacd00dadc2975f434cad"/> <rom name="Ungra Walker (Japan) [SLPM-87055].cue" size="97" crc="66cb4152" sha1="9d52bd38134973bf825adfa1bfee08a42aee67a9"/> @@ -55982,7 +55982,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK, hangs at memory card screen after a game --> <software name="urawazmj" supported="no"> - <!-- + <!-- Unknown source <rom name="Urawaza Mahjong - Korette Tenhoutte Yatsukai (Japan) [SLPS-02807].bin" size="412641936" crc="b742804b" sha1="9d2d255846abf4e48aecc3dfbead649b7c50271e"/> <rom name="Urawaza Mahjong - Korette Tenhoutte Yatsukai (Japan) [SLPS-02807].cue" size="129" crc="2edf0717" sha1="dc563e7248000896bd0946238c20a98d13bd4d79"/> @@ -56241,7 +56241,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="vspike" supported="yes"> - <!-- + <!-- Unknown source <rom name="Victory Spike (Japan) [SLPS-00372].bin" size="210003024" crc="5a07e472" sha1="563b30d5933e4778b97664c1319bb148da094ad4"/> <rom name="Victory Spike (Japan) [SLPS-00372].cue" size="613" crc="4b007487" sha1="1258b2a0389b936630c2fb4a6839a4ff442d7337"/> @@ -57111,7 +57111,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="zigzagba" supported="yes"> - <!-- + <!-- Unknown source <rom name="Zig Zag Ball (Japan) [SLPS-01483].bin" size="254766288" crc="970d1d20" sha1="55d8170cbe4d805159a5b260419c1d3540af8f8e"/> <rom name="Zig Zag Ball (Japan) [SLPS-01483].cue" size="99" crc="b6a14b1a" sha1="4b88de8f69852b5e60c8f620e94e9b34970ab744"/> @@ -57132,7 +57132,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK --> <software name="zipanguj" supported="yes"> - <!-- + <!-- Unknown source <rom name="Zipangutou - Unmei wa Saikoro ga Kimeru! (Japan) [SLPS-02260].bin" size="94922016" crc="7fd31d42" sha1="ef45ae118c21536d2985f364890297b57349051f"/> <rom name="Zipangutou - Unmei wa Saikoro ga Kimeru! (Japan) [SLPS-02260].cue" size="125" crc="881ae390" sha1="c3c1b084e486800e513b08ddd77a92edfd0aeebc"/> @@ -57340,7 +57340,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- boot OK, but it needs extra controller emulated for the RL 3d models cfr. https://youtu.be/IOT2MwtLWD0 --> <software name="zxed" supported="no"> - <!-- + <!-- Unknown source <rom name="Zxe-D - Legend of Plasmalite (Japan) [SLPS-00424].bin" size="503168064" crc="003652c9" sha1="a0045a44784204b4cd55196598c2d94ac5e76d65"/> <rom name="Zxe-D - Legend of Plasmalite (Japan) [SLPS-00424].cue" size="1891" crc="41ddb394" sha1="ba9507c97340a26f9a7971be9116924e0b24292f"/> @@ -57383,7 +57383,7 @@ The entries in this section are intended to replace the existing "low-grade" Jap <!-- Tested Tobal 2 saves, unknown about the others --> <software name="squaremc" supported="yes"> - <!-- + <!-- Unknown source <rom name="Squaresoft Memory Card Data CD (Japan) [SLPM-80556].bin" size="56706720" crc="206e6880" sha1="1f00d03675f7f6d1504f0eb72947727c32383c18"/> <rom name="Squaresoft Memory Card Data CD (Japan) [SLPM-80556].cue" size="117" crc="b951f2d7" sha1="008372b38dcd870012f90e2c603fcc0f15d1e641"/> diff --git a/hash/saturn.xml b/hash/saturn.xml index 302b923fd53..b7a15a8ed51 100644 --- a/hash/saturn.xml +++ b/hash/saturn.xml @@ -26,9 +26,9 @@ Euro / PAL collection, although it's from 2009, so some images may exist in better forms. These can be replaced over time. - 15 Mar 19 - Started testing stuff inline to the actual XML parsing, + 15 Mar 19 - Started testing stuff inline to the actual XML parsing, marking stuff as supported where possible via exploiting "Identifying" dummy comments. - Eventually this list below will be cut off since is worthless and outdated. + Eventually this list below will be cut off since is worthless and outdated. ********************************************************************************************************* ********************************************************************************************************* diff --git a/hash/sega_beena_cart.xml b/hash/sega_beena_cart.xml index 95d46c8abbe..5eef1227bf7 100644 --- a/hash/sega_beena_cart.xml +++ b/hash/sega_beena_cart.xml @@ -1,18 +1,29 @@ <?xml version="1.0"?> <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> <softwarelist name="sega_beena_cart" description="Sega Beena Cartridges"> - - <!-- you must byteswap ROMs to see text, due to endian? --> - - <software name="fpc" supported="no"> - <description>Fresh Pretty Cure</description> <!-- is this the correct title? --> + <!-- you must byteswap ROMs to see text, due to endian? --> + <software name="frpc" supported="no"> + <description>Issho ni Henshin Fresh Pretty Cure</description> <year>2009</year> <publisher>Sega</publisher> <part name="cart" interface="sega_beena_cart"> - <dataarea name="rom" size="0x800000"> - <rom name="beena.bin" size="0x800000" crc="afa3466c" sha1="b49914f97db95f611489487f558d13d7cceb3299" offset="0" /> + <dataarea name="rom" size="0x800000" width="32" endianness="big"> + <rom loadflag="load16_word_swap" name="beena.bin" size="0x800000" crc="afa3466c" sha1="b49914f97db95f611489487f558d13d7cceb3299" offset="0" /> + </dataarea> + <dataarea name="pages" size="0x2000000"> <!-- book pages --> + <rom name="0 - 0001.png" size="0x1ca26ec" crc="d8e18a54" sha1="887a96931bf622cb673f2550323ad3923eff337e" offset="0" /> + <rom name="0 - 0002.png" size="0x1e37a3d" crc="62ae3535" sha1="d8f6c19c466715df5a568ac7cac8dacb53f2e04a" offset="0" /> + <rom name="0 - 0003.png" size="0x1ce4f16" crc="fe6c72d9" sha1="2c4412eb518fbac2e8519c87e53270d960ecab53" offset="0" /> + <rom name="0 - 0004.png" size="0x19a864d" crc="edede3ea" sha1="81914894358c74064aa5f9e980ac37f7140f80c3" offset="0" /> + <rom name="0 - 0005.png" size="0x18998f4" crc="16837cc0" sha1="eb86b2943cf603a63cd5b94faa0d06ee8a3139d6" offset="0" /> + <rom name="0 - 0006.png" size="0x195b7e5" crc="3e307e6d" sha1="23ed9ab2a4122d7cb33d8d6174ca901b88647b4d" offset="0" /> + <rom name="0 - 0007.png" size="0x195df07" crc="efccbb5b" sha1="83de26d52cb6578d8323551a289223c8a305e37d" offset="0" /> + <rom name="0 - 0008.png" size="0x18a9dd8" crc="7455ebb2" sha1="34576eee067534535cda838a9e94794e2cfee585" offset="0" /> + <rom name="0 - 0009.png" size="0x17a5c57" crc="59ead843" sha1="29c4cd7929cfd68f41d65024ee5ca3cc62fa4a8b" offset="0" /> + <rom name="0 - 0010.png" size="0x186546b" crc="6d3d8c91" sha1="9909322c09277ddd306f10f9a04a897b0fe74961" offset="0" /> + <rom name="0 - 0011.png" size="0x179d3a8" crc="c3911254" sha1="2d2932e97a0b20a9b5e5fd78a3bbad0f1e146813" offset="0" /> + <rom name="0 - 0012.png" size="0x187a9df" crc="f1cdc95d" sha1="aa926c9360edcecdaa3a9ce1b5e17ee61048cee4" offset="0" /> </dataarea> </part> </software> - </softwarelist> diff --git a/hash/sms.xml b/hash/sms.xml index 43ceaed62c9..246c8fd3c40 100644 --- a/hash/sms.xml +++ b/hash/sms.xml @@ -7798,25 +7798,25 @@ <!-- Notes: optional SK-1100 keyboard support --> <!-- - The mode for 2 players requires 2 Mark III consoles, both with - the SK-1100 keyboard, plus a cable to link the keyboards through - their printer port. To emulate this setup, it is necessary to run - two instances of MAME and make a point-to-point connection between - them using the bitbanger (bitb) stream that is provided by the - kblink device, that simulates the function of the cable link. - Example for a localhost (127.0.0.1) connection: - - mame64 -window sg1000m3 -card f16falcjc -sgexp sk1100 -sgexp:sk1100:printer kblink -bitb socket.127.0.0.1:2345 - mame64 -window sg1000m3 -card f16falcjc -sgexp sk1100 -sgexp:sk1100:printer kblink -bitb socket.127.0.0.1:2345 - - After run both instances, press the CR key on the keyboard when - the title screen is displayed. Next, when asked which player - (1 or 2), the user needs to press 1 on the keyboard of one - instance, switch to the other instance and press 2 on the keyboard - (due to key 1 is mapped by default to the PAUSE function of the - console, it is recommended first remap PAUSE to avoid conflict). - Next, when LEVEL 1 appears on the screen, press the SPACE key on - each instance to start playing the game. + The mode for 2 players requires 2 Mark III consoles, both with + the SK-1100 keyboard, plus a cable to link the keyboards through + their printer port. To emulate this setup, it is necessary to run + two instances of MAME and make a point-to-point connection between + them using the bitbanger (bitb) stream that is provided by the + kblink device, that simulates the function of the cable link. + Example for a localhost (127.0.0.1) connection: + + mame64 -window sg1000m3 -card f16falcjc -sgexp sk1100 -sgexp:sk1100:printer kblink -bitb socket.127.0.0.1:2345 + mame64 -window sg1000m3 -card f16falcjc -sgexp sk1100 -sgexp:sk1100:printer kblink -bitb socket.127.0.0.1:2345 + + After run both instances, press the CR key on the keyboard when + the title screen is displayed. Next, when asked which player + (1 or 2), the user needs to press 1 on the keyboard of one + instance, switch to the other instance and press 2 on the keyboard + (due to key 1 is mapped by default to the PAUSE function of the + console, it is recommended first remap PAUSE to avoid conflict). + Next, when LEVEL 1 appears on the screen, press the SPACE key on + each instance to start playing the game. --> <software name="f16falcjc" cloneof="f16fight"> <description>F-16 Fighting Falcon (Jpn, MyCard)</description> diff --git a/hash/snes.xml b/hash/snes.xml index 0cc8e6778ff..0fecdc760f8 100644 --- a/hash/snes.xml +++ b/hash/snes.xml @@ -2371,7 +2371,7 @@ Beyond that last category are the roms waiting to be classified. </part> </software> - <software name="strikerp1" cloneof="striker"> + <software name="strikerp1" cloneof="striker"> <!-- Niiue --> <description>Striker (Euro, NTSC Prototype)</description> <year>1993</year> diff --git a/hash/specpls3_flop.xml b/hash/specpls3_flop.xml index 4023afb5b6e..329aa767788 100644 --- a/hash/specpls3_flop.xml +++ b/hash/specpls3_flop.xml @@ -430,7 +430,7 @@ <!-- SPS (CAPS) release 3510 --> <description>Four Smash Hits From Hewson</description> <year>198?</year> - <publisher>Hewson</publisher> + <publisher>Hewson Consultants</publisher> <part name="flop1" interface="floppy_3"> <dataarea name="flop" size="238800"> @@ -1667,16 +1667,18412 @@ </part> </software> +<!-- + Below is a selection of (most of) the DSK files featured in the TOSEC DAT files which, according to Lady Eklipse, include all files that were in TOSEC and all files from www.worldofspectrum.org which were never in TOSEC before. Which file and update they come from is commented for each entry, so that they can be consulted. + + Files removed: + - Files marked as "bad dumps" which already have a good parent set. + - Trained games, except for a "cheat version" of Neighbours which may have come from the original developers. + - 80-track (3.5'') disk images. + - Files generated with the ZXZVM interpreter. + - Games from the Crap Games Competition. + + All the DSK files which have a corresponding IPF have been labeled as "alt" clones until they're confirmed to come from the exact same release and can be safely removed (there's an added disclaimer about it in each of these entries, to make them easy to locate). + Other alt versions not in World of Spectrum have been kept for the same reason, since the exact source of each file doesn't seem to be properly documented anywhere, which means they'd need some research before a safe removal. + + Notes about the known DSK dumps: + Some dumps may come with an empty Side B, which is technically correct for games which were released with an empty side on purpose. These were usually labeled as "Sin grabar para tu uso" ("Unrecorded for your use") in many Spanish releases. + Some of the "master disks" from Zeppelin Games share the same file (same SHA-1) for their Side B. This has been verified against the downloads available in World of Spectrum. + A few releases had a version for a different system on the other side. These haven't been removed, as it was possible for the user to insert those sides and do anything they wanted with them. + +--> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3uti"> + <description>+3 Utilities</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="+3 utilities (19xx)(-)(side a).dsk" size="226048" crc="cb9b1cf8" sha1="3f6887c23f6096e15c04c8705a9dc7e0a011136f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="+3 utilities (19xx)(-)(side b).dsk" size="226048" crc="dac28f08" sha1="bcf0365cc1a094e70bc8c4cfecdef66f64299ff6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="007trans"> + <description>007 Trans-Master</description> + <year>1988</year> + <publisher>ZX-Guaranteed</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="251711"> + <rom name="007 trans-master (1988)(zx-guaranteed)(side a)[samdisk].dsk" size="251711" crc="4e2d8460" sha1="408eb22ee2f973920d2265f1adabf9342203a923" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195635"> + <rom name="007 trans-master (1988)(zx-guaranteed)(side b)[samdisk].dsk" size="195635" crc="1a105700" sha1="1d8242ba18cd0c2596d4172d073aeb8984efb807" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dconkit"> + <description>3D Construction Kit</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="3d construction kit (1991)(domark)(side a).dsk" size="194816" crc="3487ed0f" sha1="f690e55eb863eda62e66f3d4e1bc2486d08b3db7" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="3d construction kit (1991)(domark)(side b).dsk" size="194816" crc="76ace043" sha1="b5aecf13e6cdbf9b3b75ae75427f3d6baa56b9ef" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dgamemk"> + <description>3D Game Maker</description> + <year>1987</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="3d game maker (1987)(crl group).dsk" size="194816" crc="d398b5bd" sha1="2896af452d00e389315407ca66c628fcb8b15307" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dgamemksp" cloneof="3dgamemk"> + <description>3D Game Maker (Spa)</description> + <year>1987</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="3d game maker (1987)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="1b06a5bc" sha1="6324e5c0e5f41f37d076d631a3be43e1a70ba472" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dgamemkspa" cloneof="3dgamemk"> + <description>3D Game Maker (Spa) (alt)</description> + <year>1987</year> + <publisher>Zafiro Software Division</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="3d game maker (1987)(zafiro software division)(es)(en)[re-release].dsk" size="194816" crc="df6b4a8e" sha1="a87af7093fe5a43c63e4af2e4486bfdae47fc4c2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dgamemka" cloneof="3dgamemk"> + <description>3D Game Maker (alt)</description> + <year>1987</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="3d game maker (1987)(crl group)[a].dsk" size="194816" crc="f61327af" sha1="2e220165c97eb8b3511d9103b051dd2e5eba7792" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dgamemkb" cloneof="3dgamemk"> + <description>3D Game Maker (alt 2)</description> + <year>1987</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="3d game maker (1987)(crl group)[a2].dsk" size="194816" crc="0c34a517" sha1="268bdbf5004cd2d475147a3c4523cc264c8da844" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevbe"> + <description>Alkatraz Development Disks - Bedturn Project Backup</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - bedturn project backup (19xx)(-)(side a).dsk" size="194816" crc="20c60438" sha1="d3c5a0b7245a76c59813cc60bc1fa418a722fbfc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - bedturn project backup (19xx)(-)(side b).dsk" size="194816" crc="ea9f0113" sha1="7642f9f5418515358821a1d3da74713a475d449c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevde"> + <description>Alkatraz Development Disks - Designer + Assembler Backup</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - designer + assembler backup (19xx)(-)(side a).dsk" size="194816" crc="7ea28851" sha1="f28aeab46476c78a323b821a125a00988826eaf1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - designer + assembler backup (19xx)(-)(side b).dsk" size="194816" crc="af054290" sha1="0fc31beb8073b3b3a2f51a8e4591024d736bf011" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevdi"> + <description>Alkatraz Development Disks - Disk Protection Source Code</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - disk protection source code (19xx)(-)(side a).dsk" size="194816" crc="ed298d37" sha1="f3a0de55390b92101af0696c3aae318d6c169e3b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - disk protection source code (19xx)(-)(side b).dsk" size="194816" crc="7b999303" sha1="3c682b6b0e3093c8e52142a53620f6ebd126144c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevlo"> + <description>Alkatraz Development Disks - Locoscript Start of Day 25-10-88</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="195328"> + <rom name="alkatraz development disks - locoscript start of day 25-10-88 (19xx)(-)(side a).dsk" size="195328" crc="8467b466" sha1="28de851c4321d8bcfcd933681da80464c91495da" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="256"> + <rom name="alkatraz development disks - locoscript start of day 25-10-88 (19xx)(-)(side b).dsk" size="256" crc="3241c590" sha1="e1c83cdc6ace15ad9986ed23118b4de3152edd48" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevma"> + <description>Alkatraz Development Disks - Main Enc + BASIC Run Sample Backup</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - main enc + basic run sample backup (19xx)(-)(side a).dsk" size="194816" crc="d799893c" sha1="41a073df4816cf8136800b800df7fdda798d063a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - main enc + basic run sample backup (19xx)(-)(side b).dsk" size="194816" crc="a957d8af" sha1="fa30634dc41c54bfa38cc79ccefd1f78dc7307ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevme"> + <description>Alkatraz Development Disks - Main Encryptor + Screen Load Designer</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - main encryptor + screen load designer (19xx)(-)(side a).dsk" size="194816" crc="85b9c090" sha1="a06ce891b7ffde8d5aed9305efcbe78c6d830077" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - main encryptor + screen load designer (19xx)(-)(side b).dsk" size="194816" crc="f0942b49" sha1="aced8a4ee1bcb14af0ea2d00627c992c0aed8051" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevmp"> + <description>Alkatraz Development Disks - Mastering Program</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - mastering program (19xx)(-)(side a).dsk" size="194816" crc="2c4b33ac" sha1="669e43e1f108e3a5bb0765fd8c26317334b7a6c8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195328"> + <rom name="alkatraz development disks - mastering program (19xx)(-)(side b).dsk" size="195328" crc="8267f81d" sha1="ba6c302eb793a0b606b573a8f9ea687050acacb5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevnw"> + <description>Alkatraz Development Disks - New Word</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - new word (19xx)(-)(side a).dsk" size="194816" crc="4bfc1cc7" sha1="0f60502c5ac790a54f8fe7bc0a25f0d18359f44c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - new word (19xx)(-)(side b).dsk" size="194816" crc="fb3a3bb3" sha1="f24a1d06c7ec8608edfe4b38b7b5e3529220c1fe" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevrp"> + <description>Alkatraz Development Disks - Run Program + BASIC Constructor</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - run program + basic constructor (19xx)(-)(side a).dsk" size="194816" crc="bfaad1c4" sha1="b9c1c83044708178ec27a31045bc1ad4498862d9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - run program + basic constructor (19xx)(-)(side b).dsk" size="194816" crc="50bd1755" sha1="976406e782419329e7fe4165494a387022f12077" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevsl"> + <description>Alkatraz Development Disks - Sample Loader + Master Installer Backup</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - sample loader + master installer backup (19xx)(-)(side a).dsk" size="194816" crc="dde17998" sha1="d902feaf17b492f1d8078895989e46cb7db271f1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - sample loader + master installer backup (19xx)(-)(side b).dsk" size="194816" crc="6d6226d1" sha1="b0dc9c87a3268f75fcc787348b158060720ecd70" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevsi"> + <description>Alkatraz Development Disks - Simple Loader + Encryptor Constructor</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - simple loader + encryptor constructor (19xx)(-)(side a).dsk" size="194816" crc="ea7c4658" sha1="c7a595b2b4f41242974af5e04dbebe6cf8101408" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - simple loader + encryptor constructor (19xx)(-)(side b).dsk" size="194816" crc="1c8977a5" sha1="11cdce40bd608ef138e68ebb0f3c0b3e04b82b67" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alkdevta"> + <description>Alkatraz Development Disks - Tape System Text Backup</description> + <year>19??</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="alkatraz development disks - tape system text backup (19xx)(-)(side a).dsk" size="194816" crc="0bab95ac" sha1="a74dba9e624394543585d115622bdb878a9882b8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195840"> + <rom name="alkatraz development disks - tape system text backup (19xx)(-)(side b).dsk" size="195840" crc="bd77584a" sha1="8e50a3c6187b84a1c96b8009e7e14eac821ac613" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="artist2"> + <description>The Artist II</description> + <year>1986</year> + <publisher>Softechnics</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="artist ii, the (1986)(softechnics).dsk" size="194816" crc="a752bb2a" sha1="e8ffd0e4e8ae696065bf5c3db2a9337cf2c387ea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="artist2a" cloneof="artist2"> + <description>The Artist II (alt)</description> + <year>1986</year> + <publisher>Softechnics</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="artist ii, the (1986)(softechnics)[a].dsk" size="194816" crc="82e620b7" sha1="bf9adceb3fd8e524edca6ca24c6b87bf39574c54" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cadmaste"> + <description>CAD-Master - Light Pen & Graphics Software</description> + <year>1985</year> + <publisher>Trojan Products</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cad-master - light pen & graphics software (1985)(trojan products).dsk" size="194816" crc="69b132c2" sha1="d0d336a4e1371ec08847e136874b48c49a8fe4a2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cpmplus1"> + <description>CP-M Plus v1.0</description> + <year>1988</year> + <publisher>Locomotive</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="cp-m plus v1.0 (1988)(locomotive)(side a).dsk" size="194816" crc="c10ae485" sha1="48cf8d80d5a56786175e18acf2cca819ffb43cde" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="cp-m plus v1.0 (1988)(locomotive)(side b).dsk" size="194816" crc="ddd0943f" sha1="9e34e27167d8f9544d73104390de59bc91cf029d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="complmcp"> + <description>Complete Machine Code Package</description> + <year>1987</year> + <publisher>Roybot</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="complete machine code package (1987)(roybot).dsk" size="194816" crc="07ebb241" sha1="bce17b0972ea3196028f10820cfb7b224fb4ae16" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="coursem3"> + <description>Coursemaster v3.88</description> + <year>1988</year> + <publisher>Intraset</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="coursemaster v3.88 (1988)(intraset)(side a).dsk" size="194816" crc="9be595c6" sha1="d60b4f383514939ec24746de639250d3147ceffb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="coursemaster v3.88 (1988)(intraset)(side b).dsk" size="194816" crc="2a3229bb" sha1="31929b0b6c138da716918c0dc93849e855164101" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="coursem3a" cloneof="coursem3"> + <description>Coursemaster v3.88 (alt)</description> + <year>1988</year> + <publisher>Intraset</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="coursemaster v3.88 (1988)(intraset)(side a)[a].dsk" size="194816" crc="a57c526a" sha1="e53c4981d82add2be2c9516e05e7177904747484" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <!-- Side missing from dump, using same as parent set --> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="coursemaster v3.88 (1988)(intraset)(side b).dsk" size="194816" crc="2a3229bb" sha1="31929b0b6c138da716918c0dc93849e855164101" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="db1plus3"> + <description>DB1 Plus 3 Disc Backup Utility</description> + <year>1988</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194048"> + <rom name="db1 plus 3 disc backup utility (1988)(kobrahsoft).dsk" size="194048" crc="b5034824" sha1="31330c2433400360cba392657a53ac109f5e1ae3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dicev21"> + <description>DICE v2.1</description> + <year>1988</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="19712"> + <rom name="dice v2.1 (1988)(kobrahsoft)[aka disc information copier editor].dsk" size="19712" crc="4904a08a" sha1="4060b24dd339c92f0ee71fc33c6b0b0ccee7846c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="du54v504"> + <description>DU54 v5.04</description> + <year>1998</year> + <publisher>John Elliott</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="du54 v5.04 (1998)(elliott, john)[aka disc util].dsk" size="194816" crc="c9148461" sha1="f12f007a80984a56d1e5704c21a443dd98c4d2f1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="du54v504a" cloneof="du54v504"> + <description>DU54 v5.04 (alt)</description> + <year>1998</year> + <publisher>John Elliott</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="du54 v5.04 (1998)(elliott, john)[a][aka disc util].dsk" size="194816" crc="f54c98c5" sha1="92c704ccb2dd34f19910c174534860dd283e9d21" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="discolog"> + <description>Discology +3</description> + <year>1988</year> + <publisher>New Frontier</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="183296"> + <rom name="discology +3 (1988)(new frontier)(es).dsk" size="183296" crc="ff15f5b0" sha1="cd33b3b6c9495d3c01f837c58b41d707c3ff9337" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="discopac"> + <description>Discopack +3</description> + <year>1989</year> + <publisher>New Frontier</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204288"> + <rom name="discopack +3 (1989)(new frontier)(es).dsk" size="204288" crc="f3b87c1a" sha1="6dfb92f4e5b45c5e33d0c7f64fa6814f121fc8f7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="diskdoct"> + <description>Disk Doctor</description> + <year>1990</year> + <publisher>Supersoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="disk doctor (1990)(supersoft).dsk" size="194816" crc="b773bcbd" sha1="8eb18a2bc5a94632bea142a9fe42941e3605c976" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eddduced"> + <description>Edd the Duck Editor (master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="edd the duck editor (1990)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="80f3d962" sha1="f411b24c9798678eeff7adb99e8f1f23700dd34b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="edd the duck editor (1990)(zeppelin games)(side b)[master disk].dsk" size="194816" crc="d589b8cd" sha1="8fa913c63e1a4e94e92a00c4e86398258acbbedb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="flexipag"> + <description>Flexipage Viewdata Author</description> + <year>1986</year> + <publisher>Flexibase</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="flexipage viewdata author (1986)(flexibase)(side a)[aka flexibase 8][aka flexipage 200][aka flexipage author].dsk" size="194816" crc="e89dc560" sha1="748d0dece2f53f00bd96423138e727b8124b8334" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="flexipage viewdata author (1986)(flexibase)(side b)[aka flexibase 8][aka flexipage 200][aka flexipage author].dsk" size="194816" crc="6b6f2e9a" sha1="7f18802231a7f00dca38f12b6a9715ccb5186a7a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="footboxf"> + <description>Football Boxform</description> + <year>1988</year> + <publisher>Boxoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="football boxform (1988)(boxoft).dsk" size="194816" crc="72d70f4d" sha1="1fd4833e1e779f43b722ee1bd82102f782a7e036" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="g3ptog80"> + <description>GENS3P to GENS80 Source Files Converter</description> + <year>1995</year> + <publisher>Useless Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gens3p to gens80 source files converter (1995)(useless soft).dsk" size="194816" crc="80291a4a" sha1="0803019d8631552f11f11b5819460eeb2ec28743" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hisobc12"> + <description>HiSoft BASIC Compiler v1.2 +3</description> + <year>1986</year> + <publisher>HiSoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hisoft basic compiler v1.2 +3 (1986)(hisoft).dsk" size="194816" crc="1043af7f" sha1="54c2de392c5a21e2a8f9e93e658c8d9ae0491f56" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hisoc13"> + <description>HiSoft C v1.3 +3</description> + <year>1984</year> + <publisher>HiSoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hisoft c v1.3 +3 (1984)(hisoft).dsk" size="194816" crc="a9809dc7" sha1="497986e05feebcfa73082d74f48b8c8fde4efac1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hisoftdp"> + <description>HiSoft Devpac</description> + <year>1983</year> + <publisher>HiSoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hisoft devpac (1983)(hisoft).dsk" size="194816" crc="fa4173ea" sha1="f5e05ef551888e21de3de4c6d2de4538d05bfdd9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hisoftdpa"> + <description>HiSoft Devpac (alt)</description> + <year>1983</year> + <publisher>HiSoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hisoft devpac (1983)(hisoft)[a].dsk" size="194816" crc="5a9afe8c" sha1="a00ad4d624bcfcd8b1dc35ff64413c6b52abf34c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hispasc4"> + <description>HiSoft Pascal 4</description> + <year>1983</year> + <publisher>HiSoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hisoft pascal 4 (1983)(hisoft).dsk" size="194816" crc="77fb585e" sha1="5830aee8baff81c2744616a6ff3820ea3f515968" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="instreca"> + <description>Instant Recall</description> + <year>1988</year> + <publisher>Supersoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="instant recall (1988)(supersoft).dsk" size="194816" crc="32094d6a" sha1="a5d7e6bd6810dc2a6e2fd6c4eea0afab0989b62c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lastword"> + <description>The Last Word</description> + <year>1985</year> + <publisher>Myrmidon</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="last word, the (1985)(myrmidon).dsk" size="194816" crc="c4283b67" sha1="0a709233bde2f19790a4c7b9540714941df0b2b9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lifeguar"> + <description>Lifeguard</description> + <year>1987</year> + <publisher>Romantic Robot UK</publisher> + <info name="usage" value="Requires Multiface" /> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="193792"> + <rom name="lifeguard (1987)(romantic robot uk)[aka unlimited lives finder][needs multiface].dsk" size="193792" crc="b749526e" sha1="2eeff796a6b545366daf3226325404ec0d2d3b7d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="masterfi"> + <description>Masterfile +3</description> + <year>1987</year> + <publisher>Campbell Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="masterfile +3 (1987)(campbell systems)[aka masterfile plus 3][aka masterfile plus three].dsk" size="194816" crc="0c19b526" sha1="012ffcaa92fb8edb2b7a6df816d6317dfa041165" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="musicmae"> + <description>Music Maestro</description> + <year>1989</year> + <publisher>Torchraven</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="music maestro (1989)(torchraven)(side a).dsk" size="194816" crc="d01bdbbc" sha1="b0bbddc2d83890cde7ce63b507e46b3465e52574" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="music maestro (1989)(torchraven)(side b).dsk" size="194816" crc="f7dd2726" sha1="55ab5a3c12e6fd5afed49fb5365af3a8ec494b76" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ocpartst"> + <description>The OCP Art Studio</description> + <year>1985</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ocp art studio, the (1985)(rainbird)[m useless soft].dsk" size="194816" crc="696c593c" sha1="1b1a0307bd265a55d7f4a701acedbbc4cb34a724" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ocpartsta" cloneof="ocpartst"> + <description>The OCP Art Studio (alt)</description> + <year>1985</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ocp art studio, the (1985)(rainbird)[m useless soft][a].dsk" size="194816" crc="fcc3298f" sha1="1eed3410b0810b3854a07acd1eb0c371571c501d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ocpartstb" cloneof="ocpartst"> + <description>The OCP Art Studio (alt 2)</description> + <year>1985</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ocp art studio, the (1985)(rainbird)[m useless soft][a2].dsk" size="194816" crc="a9652e70" sha1="4f329c43beaae11bca917fb6928916f4f805baa0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3dia"> + <description>Plus 3 Diary & Filing System</description> + <year>1989</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="plus 3 diary & filing system (1989)(kobrahsoft)[aka plus 3 diary & database].dsk" size="194816" crc="4ee5ffec" sha1="d8d687a5e7ededbda35804509373282de9e44f48" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pawsp" cloneof="paw"> + <description>Professional Adventure Writer (Spa)</description> + <year>1986</year> + <publisher>Aventuras AD</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="professional adventure writer (1986)(aventuras ad)(es)[re-release].dsk" size="194816" crc="9faccc2f" sha1="30452eb8b15082f9eb3c37538276d2238dfdc8fd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="paw"> + <description>Professional Adventure Writer</description> + <year>1986</year> + <publisher>Gilsoft International</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="professional adventure writer (1986)(gilsoft international)(side a)[aka paw][aka professional adventure writing system, the].dsk" size="194816" crc="fcf1e861" sha1="017a2ac8487ac8999141f6008b9e31b12c9c5197" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="professional adventure writer (1986)(gilsoft international)(side b)[aka paw][aka professional adventure writing system, the].dsk" size="194816" crc="41b52f47" sha1="1502b0027a4a3937744af410d6d773ac7c826c36" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="revelado"> + <description>Revelados</description> + <year>2006</year> + <publisher>Compiler</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="revelados (2006)(compiler)(es).dsk" size="194816" crc="94e98ecc" sha1="b9d28a05266642e83470d257b36853a29588b44b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="seba080a"> + <description>SE Basic v0.80a</description> + <year>2002</year> + <publisher>Amstrad</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="se basic v0.80a (2002)(amstrad).dsk" size="194816" crc="44ef415d" sha1="a3539d713e07126c01c68ea983493a13fd137beb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sp4ttop3"> + <description>SP4 Tape to +3 Disc Utility</description> + <year>1988</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194048"> + <rom name="sp4 tape to +3 disc utility (1988)(kobrahsoft).dsk" size="194048" crc="6fd72ba4" sha1="8ca4224826f019c2685472e84995b085e6d2f9f2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sp5ttop3"> + <description>SP5 Tape to +3 Disc Utility</description> + <year>1989</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194048"> + <rom name="sp5 tape to +3 disc utility (1989)(kobrahsoft).dsk" size="194048" crc="095c8d89" sha1="44af233b40abd8f6dfcddb92c3c9c8bf714ad2a5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sp6ttop3"> + <description>SP6 Tape to +3 Disc Utility</description> + <year>1990</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194048"> + <rom name="sp6 tape to +3 disc utility (1990)(kobrahsoft).dsk" size="194048" crc="48897832" sha1="dd4dda5bd1cbef8f84d7bc89b233aa1f798d41de" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sp7ttop3"> + <description>SP7 Tape to +3 Disc Utility</description> + <year>1991</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194048"> + <rom name="sp7 tape to +3 disc utility (1991)(kobrahsoft).dsk" size="194048" crc="de79afe4" sha1="d84d10e9449944416c5f3ffdee72c47935a53fad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sqtracke"> + <description>SQ-Tracker +3</description> + <year>1998</year> + <publisher>T.D.M.</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sq-tracker +3 (1998)(t.d.m.).dsk" size="194816" crc="2f06ec84" sha1="00ad89d4ad50119e3aa685579fbe12fe8d7d7191" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tapedisc"> + <description>Tapedisc</description> + <year>1988</year> + <publisher>MicroHobby</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tapedisc (1988)(microhobby)(es).dsk" size="194816" crc="01d1a285" sha1="084c862aa10ac956c52b1b5bd63f19cc85f285cd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tarotmas"> + <description>Tarot Master</description> + <year>1991</year> + <publisher>Lawrence O'Shaughnessy</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="226048"> + <rom name="tarot master (1991)(o'shaughnessy, lawrence).dsk" size="226048" crc="d3633ac6" sha1="aecacbb1acf01f296950559db90784e3fb20d2d3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tassign"> + <description>Tas-Sign</description> + <year>1988</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tas-sign (1988)(tasman).dsk" size="194816" crc="999b7f6f" sha1="75ab549b6de054a2819621551790d0e094f71445" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tasspell"> + <description>Tas-Spell Plus Three</description> + <year>1988</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="tas-spell plus three (1988)(tasman)(side a)[aka tas-spell +3].dsk" size="194816" crc="aa03a493" sha1="0baf43422e6571a2a77de4e18fec4db0dbeb418d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="tas-spell plus three (1988)(tasman)(side b)[aka tas-spell +3].dsk" size="194816" crc="497f22c7" sha1="1b0ba5ad7b6b55a5b7b6524b8758bf256feb2f3b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tascalc"> + <description>Tascalc</description> + <year>1988</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tascalc (1988)(tasman).dsk" size="194816" crc="537f5ef7" sha1="43d2c47e6ff706e5f5ea6f687913c98bc35622f4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tasprip3"> + <description>Tasprint Plus Three</description> + <year>1987</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tasprint plus three (1987)(tasman)[aka tasprint +3].dsk" size="194816" crc="26d05a14" sha1="d3ca6acc08e211d6b951b7f9fae487754e7771cd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tasprip3a" cloneof="tasprip3"> + <description>Tasprint Plus Three (alt)</description> + <year>1987</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tasprint plus three (1987)(tasman)[a][aka tasprint +3].dsk" size="194816" crc="eba33d38" sha1="ea9a8615f0ae5a9f33b3df6b1f32d4912fb42cb7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="taswide"> + <description>Taswide</description> + <year>1984</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="taswide (1984)(tasman).dsk" size="194816" crc="e020669f" sha1="2b69019b159972e5ca363899b2dfc66be769fd1f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tw2totwp3"> + <description>Tasword 2 to Tasword +3 Text File Converter</description> + <year>2000</year> + <publisher>Useless Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tasword 2 to tasword +3 text file converter (2000)(useless soft).dsk" size="194816" crc="94019809" sha1="ab9af0c49d8df6b592b6de4d36f8dc72e5ad2056" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tasworp3"> + <description>Tasword Plus Three</description> + <year>1987</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="tasword plus three (1987)(tasman)(side a)[aka tasword +3].dsk" size="194816" crc="b3a93e81" sha1="e4279f748ec1d23006bd3f8576a6e64972199e64" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="tasword plus three (1987)(tasman)(side b)[aka tasword +3].dsk" size="194816" crc="3891b8ef" sha1="853be0255357a5f114cafb019bb783eabb310d2a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tasworp3sp" cloneof="tasworp3"> + <description>Tasword Plus Three (Spa)</description> + <year>1987</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="tasword plus three (1987)(tasman)(es)(side a)[re-release].dsk" size="194816" crc="cf015fc8" sha1="7996be09b72d6c1098674af6b5a13e77c4af0b1d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="tasword plus three (1987)(tasman)(es)(side b)[re-release].dsk" size="194816" crc="c1ba089e" sha1="319d61fef7b7450c5f5e5cc2410ddc1b5bedbf5f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tasword2"> + <description>Tasword Two - The Word Processor</description> + <year>1983</year> + <publisher>Tasman</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tasword two - the word processor (1983)(tasman)[aka tasword 3].dsk" size="194816" crc="0ce8a996" sha1="af4443b2d95eed8d46a75a0822cd9e5affbe6cb7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="transfp3"> + <description>Transfer +3</description> + <year>1988</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="180224"> + <rom name="transfer +3 (1988)(topo soft)(es)(side a).dsk" size="180224" crc="ce9356db" sha1="3c20847d71a2ff8227ba0205b5fecad8bb3597d0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="transfer +3 (1988)(topo soft)(es)(side b).dsk" size="194816" crc="175013d2" sha1="0b2bb936b33d568d37c2881f6a18d48f03529c06" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="transfp3ba" cloneof="transfp3"> + <description>Transfer +3 (alt)</description> + <year>1988</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <!-- Side missing from dump, using same as parent set --> + <dataarea name="flop" size="180224"> + <rom name="transfer +3 (1988)(topo soft)(es)(side a).dsk" size="180224" crc="ce9356db" sha1="3c20847d71a2ff8227ba0205b5fecad8bb3597d0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="180224"> + <rom name="transfer +3 (1988)(topo soft)(es)(side b)[a].dsk" size="180224" crc="475be7a1" sha1="f4f38459f6154d2cad84264409a6a353a0393882" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="udggener"> + <description>UDG Generator</description> + <year>1985</year> + <publisher>Tom Collier</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="udg generator (1985)(collier, tom).dsk" size="194816" crc="8798715f" sha1="67b2fd4259be79b327ac65d5040976e165550290" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ukmlotto"> + <description>UK Main Lotto Random Number Generator</description> + <year>2012</year> + <publisher><homebrew></publisher> + <info name="author" value="Tom Collier"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="uk main lotto random number generator (2012)(collier, tom).dsk" size="194816" crc="9a26bb13" sha1="7b28f6a06f564956aeb1ce99296b82035c0ec0c7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="videomas"> + <description>Videomaster</description> + <year>1991</year> + <publisher>Chris Brown</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="90279"> + <rom name="videomaster (1991)(brown, chris)(side a).dsk" size="90279" crc="98b32241" sha1="0199c4f2ac1664c7fa284ee44bf44dbdac41d285" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195635"> + <rom name="videomaster (1991)(brown, chris)(side b).dsk" size="195635" crc="6027c9cd" sha1="0d8e456fe26fc9d30b3305504492539c425d7725" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="videomasa" cloneof="videomas"> + <description>Videomaster (alt)</description> + <year>1991</year> + <publisher>Chris Brown</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="195635"> + <rom name="videomaster (1991)(brown, chris)(side a)[a].dsk" size="195635" crc="f5307a26" sha1="a77be31228bc017f47cb1985a1f881b47d33fcf6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195635"> + <rom name="videomaster (1991)(brown, chris)(side b)[a].dsk" size="195635" crc="7ad77abd" sha1="947dbed2e857c3d81bbac0c49199391575c59102" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="videomasb" cloneof="videomas"> + <description>Videomaster (alt 2)</description> + <year>1991</year> + <publisher>Chris Brown</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="195635"> + <rom name="videomaster (1991)(brown, chris)(side a)[a2].dsk" size="195635" crc="9be26c4c" sha1="4eacf40b1b349d3032f496b79f77fec61f2f01c1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195635"> + <rom name="videomaster (1991)(brown, chris)(side b)[a2].dsk" size="195635" crc="d8108013" sha1="3895fae3c0674f9e25635d2d5a1ef6992116c621" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wordmast"> + <description>Word-Master</description> + <year>1987</year> + <publisher>Cardex</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="195635"> + <rom name="word-master (1987)(cardex)(side a).dsk" size="195635" crc="70e1c500" sha1="31ff03dbd9716dfd887272ce351d63c24a630515" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195635"> + <rom name="word-master (1987)(cardex)(side b).dsk" size="195635" crc="388ca5a7" sha1="0ce7c6c799f74c43d4f206610e71d3ab8151ae3c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="zxcpm22"> + <description>ZX CP-M 2.2</description> + <year>2009</year> + <publisher>M. Williams</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="zx cp-m 2.2 (2009)(williams, m.).dsk" size="194816" crc="26fc1fc5" sha1="ea79fec488af3a0189af0f724d27f1ec0afc010b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="glatools"> + <description>Gary Lancaster Tools Collection</description> + <year>19??</year> + <publisher>Gary Lancaster</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gary lancaster tools collection (19xx)(lancaster, gary).dsk" size="194816" crc="be29a003" sha1="5b58aa747dccb2c9b5e0bcdb5d93aca895b77dad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jtetool1"> + <description>Jesus Tejero Tools Collection 01</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero tools collection 01 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="22714808" sha1="7ba4cf9653d771a5b3b8a0134e0a838bd3797b12" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero tools collection 01 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="071a42f1" sha1="89fb642e4b84f5bfc2f10d1d19453810d5d71edf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jtetool2"> + <description>Jesus Tejero Tools Collection 02</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero tools collection 02 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="cfc5778a" sha1="e83b1a3e44f20a6be456ba0ef37853d0f29bad87" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero tools collection 02 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="48a98df6" sha1="9dbf4ad35f9ed5f948f6b9962498a29e6a1b9ba9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Applications - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spcpmpma"> + <description>Spectrum CP-M Plus + Mallard BASIC</description> + <year>1988</year> + <publisher>Locomotive</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="spectrum cp-m plus + mallard basic (1988)(locomotive)(side a).dsk" size="194816" crc="46020cc4" sha1="4e29c17caf0118e73d028d03cdf689a26ddcf91b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="spectrum cp-m plus + mallard basic (1988)(locomotive)(side b).dsk" size="194816" crc="5fc4ea79" sha1="642084c6d930bd1eb4ae1906f4ee107c2b3ca6b6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1chqin"> + <description>2 Por 1: Chase H.Q. + Indiana Jones y la Ultima Cruzada</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Chase H.Q."/> + <dataarea name="flop" size="185088"> + <rom name="2 por 1 - chase h.q. + indiana jones y la ultima cruzada (1989)(erbe)(es)(en)(side a).dsk" size="185088" crc="d77030f1" sha1="69277d56c97f34405328b7bd253e414fdf3b06a6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Indiana Jones y la Ultima Cruzada"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - chase h.q. + indiana jones y la ultima cruzada - indiana jones and the last crusade (1989)(erbe)(es)(en)(side b).dsk" size="194816" crc="6cef7d55" sha1="105f953307459319b3c09365815046ba00706803" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1motfa"> + <description>2 Por 1: Motor Massacre + Final Assault</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Motor Massacre"/> + <dataarea name="flop" size="108032"> + <rom name="2 por 1 - motor massacre + final assault (1989)(erbe)(es)(en-es)(side a).dsk" size="108032" crc="dbbf98de" sha1="872d73f66c8d4ebea239d94bd82263726cfc8a2b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Final Assault"/> + <dataarea name="flop" size="105216"> + <rom name="2 por 1 - motor massacre + final assault (1989)(erbe)(es)(en)(side b).dsk" size="105216" crc="2378daa5" sha1="e4dc4d597a494d8fa6d2ac8db7a145c0552799da" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1plar2"> + <description>2 por 1: Platoon + Arkanoid II: Revenge of Doh</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Platoon"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - platoon + arkanoid - revenge of doh (19xx)(erbe)(es)(en)(side a).dsk" size="194816" crc="f17652cb" sha1="5143e9a248d2a2b906b94b3ec6cd5b7e0443a3d4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Arkanoid II: Revenge of Doh"/> + <dataarea name="flop" size="58624"> + <rom name="2 por 1 - platoon + arkanoid - revenge of doh (19xx)(erbe)(es)(en)(side b).dsk" size="58624" crc="dd6d244f" sha1="e714cb3e224264c86ef27d46f78897f5c147f8ee" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1plar2a" cloneof="2x1plar2"> + <description>2 por 1: Platoon + Arkanoid II: Revenge of Doh (alt)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Platoon"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - platoon (1989)(erbe).dsk" size="194816" crc="0341da38" sha1="ced84b0c722d3b7ca87727003c1d825f0bb723e9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Arkanoid II: Revenge of Doh"/> + <dataarea name="flop" size="58624"> + <rom name="2 por 1 - arkanoid ii - revenge of doh (1989)(erbe).dsk" size="58624" crc="671b73b3" sha1="56d72c852be3ab2547d348b92fe96dc6cfa4c095" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1rentr"> + <description>2 Por 1: Renegade + Target Renegade</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Renegade"/> + <dataarea name="flop" size="73472"> + <rom name="2 por 1 - renegade + target renegade (1988)(erbe)(es)(en)(side a).dsk" size="73472" crc="e911ad63" sha1="9d161f6ca0ade6533de21cc276fc0937d826adde" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Target Renegade"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - renegade + target renegade (1988)(erbe)(es)(en)(side b).dsk" size="194816" crc="f27b2afa" sha1="4735a96bb82d57dbcb9a9b82cda7e6c3bcc9f624" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1silmm"> + <description>2 Por 1: Silent Shadow + Mad Mix Game</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Silent Shadow"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - silent shadow + mad mix game (1988)(erbe)(es)(side a).dsk" size="194816" crc="2defa16f" sha1="3a47e75174489d3d2214dddf04276bb2afbc62f4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Mad Mix Game"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - silent shadow + mad mix game (1988)(erbe)(es)(side b).dsk" size="194816" crc="e0d5655d" sha1="528446ad75a650b1971508a7d1b34195379c1f38" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1silmma" cloneof="2x1silmm"> + <description>2 Por 1: Silent Shadow + Mad Mix Game (alt)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Silent Shadow"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - silent shadow (1988)(erbe)(es).dsk" size="194816" crc="e308222a" sha1="3512aba07e8087b3b3b22952f30133c057f92897" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Mad Mix Game"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - mad mix game (1988)(erbe)(es).dsk" size="194816" crc="c530fc92" sha1="3ba4cae93aded2a468e8b424dd46f1b05f7b18bd" offset="0" /> + </dataarea> + </part> + </software> + + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1tecmm"> + <description>2 Por 1: Techno Cop + Mickey Mouse</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Techno Cop"/> + <dataarea name="flop" size="224512"> + <rom name="2 por 1 - techno cop + mickey mouse (1988)(erbe)(es)(en)(side a).dsk" size="224512" crc="1e2df00d" sha1="db16b55ef02dafa3c518a168dff46fb6a18ffaff" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Mickey Mouse"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - techno cop + mickey mouse (1988)(erbe)(es)(en)(side b).dsk" size="194816" crc="b12215a5" sha1="2c26d0d99fbf6232fd58c8815357238d39ffd06a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1tdmun"> + <description>2 Por 1: The Deep + The Muncher</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Deep"/> + <dataarea name="flop" size="213760"> + <rom name="2 por 1 - the deep + the muncher (1989)(erbe)(es)(en)(side a).dsk" size="213760" crc="7c1129d8" sha1="b60f3ede48e54cb09249513ef172b7da6fd30c72" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Muncher"/> + <dataarea name="flop" size="135680"> + <rom name="2 por 1 - the deep + the muncher (1989)(erbe)(es)(en)(side b).dsk" size="135680" crc="e92043cd" sha1="26e26db4f65ac3cd98e832da4e5074e49bdaba35" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1tblc2"> + <description>2 Por 1: Thunder Blade + Cybernoid II</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Thunder Blade"/> + <dataarea name="flop" size="194816"> + <rom name="2 por 1 - thunder blade + cybernoid ii (1988)(erbe)(es)(en)(side a).dsk" size="194816" crc="a21e7aea" sha1="5315b49c3224fbc1125b05167aa8ebae11be1bba" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Cybernoid II"/> + <dataarea name="flop" size="82944"> + <rom name="2 por 1 - thunder blade + cybernoid ii - cybernoid ii - the revenge (1988)(erbe)(es)(en)(side b).dsk" size="82944" crc="aeab4d68" sha1="eddf11183b011353570d5b76a4c6d0330dee32ea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1vsbns"> + <description>2 Por 1: MASK III: VENOM Strikes Back + North Star</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: MASK III: VENOM Strikes Back"/> + <dataarea name="flop" size="173824"> + <rom name="2 por 1 - venom strikes back + north star - mask iii - venom strikes back (1989)(erbe)(es)(en)(side a).dsk" size="173824" crc="b98b5c24" sha1="3c467d6f40d8106169ff3e7ec6b43f41b729d8be" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: North Star"/> + <dataarea name="flop" size="170752"> + <rom name="2 por 1 - venom strikes back + north star (1989)(erbe)(es)(en)(side b).dsk" size="170752" crc="79bfe6c7" sha1="fe39524ea205bd302fbdbd36ba6305171ea16da2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1csmnv"> + <description>2 X 1: Capitan Sevilla + Meganova</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Capitan Sevilla"/> + <dataarea name="flop" size="112640"> + <rom name="2 x 1 - capitan sevilla + meganova (1988)(dinamic)(es)(side a).dsk" size="112640" crc="bcdb0833" sha1="0c5d19c9df94c5d8409223945092f2f7ee708906" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Meganova"/> + <dataarea name="flop" size="91136"> + <rom name="2 x 1 - capitan sevilla + meganova (1988)(dinamic)(es)(en)(side b).dsk" size="91136" crc="1d467a85" sha1="45abfbb911589dc1241fbd04d501e876448dba69" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1cormz"> + <description>2 X 1: Corsarios + Mutan Zone</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Corsarios"/> + <dataarea name="flop" size="218880"> + <rom name="2 x 1 - corsarios + mutan zone (1989)(opera soft)(es)(side a).dsk" size="218880" crc="1273e70c" sha1="7a8ac3eff6df1ca72f111004cb029ecd9da8205a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Mutan Zone"/> + <dataarea name="flop" size="218880"> + <rom name="2 x 1 - corsarios + mutan zone (1989)(opera soft)(es)(side b).dsk" size="218880" crc="0ff83d7a" sha1="e87198b2707d9e21cc181022f3bc459ae92efa03" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="2x1quimc"> + <description>2 X 1: Don Quijote + Mega-Corp</description> + <year>1987</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Don Quijote"/> + <dataarea name="flop" size="109568"> + <rom name="2 x 1 - don quijote + mega-corp (1987)(dinamic)(es)(en)(side a).dsk" size="109568" crc="b9094639" sha1="31f64289041a660952ad51707c81871c10ed7ad3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Mega-Corp"/> + <dataarea name="flop" size="109568"> + <rom name="2 x 1 - don quijote + mega-corp (1987)(dinamic)(es)(side b).dsk" size="109568" crc="8a73c4fa" sha1="942f9f802bac53ed0c25c4bfc41c08513de60762" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="20gamepa"> + <description>20 Game Pack</description> + <year>19??</year> + <publisher>Comet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A"/> + <dataarea name="flop" size="194816"> + <rom name="20 game pack (19xx)(comet)(disk 1 of 2 side a).dsk" size="194816" crc="17f824d4" sha1="eeafae9cbc821251c079ebeab05a7698e13a563b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B"/> + <dataarea name="flop" size="194816"> + <rom name="20 game pack (19xx)(comet)(disk 1 of 2 side b).dsk" size="194816" crc="0c4f057a" sha1="ab36f880f872d18a4315f5bad78bd5961f7787b2" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A"/> + <dataarea name="flop" size="194816"> + <rom name="20 game pack (19xx)(comet)(disk 2 of 2 side a).dsk" size="194816" crc="f374a90f" sha1="c053291bea9fd33ea463e9aa5e5530056cf4a615" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B"/> + <dataarea name="flop" size="194816"> + <rom name="20 game pack (19xx)(comet)(disk 2 of 2 side b).dsk" size="194816" crc="e794781e" sha1="6a6c9e4a8083bef5e405db20ed4897668965296a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="4soccers"> + <description>4 Soccer Simulators</description> + <year>1988</year> + <publisher>Code Masters Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: 11-a-Side Soccer + Indoor Soccer"/> + <dataarea name="flop" size="213760"> + <rom name="4 soccer simulators (1988)(code masters gold)(side a)[aka four soccer simulators][aka pro soccer simulator].dsk" size="213760" crc="db963a7f" sha1="fc3875238c36e5adb7072ae3775a396f282b942e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Street Soccer + Soccer Skills"/> + <dataarea name="flop" size="213760"> + <rom name="4 soccer simulators (1988)(code masters gold)(side b)[aka four soccer simulators][aka pro soccer simulator].dsk" size="213760" crc="6591918b" sha1="fc8ac07175243156415f49b22c5e3a7c5fc127c4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="4topgame"> + <description>4 Top Games - Pulsator + Slaine - The Celtic Barbarian</description> + <year>1987</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Pulsator"/> + <dataarea name="flop" size="194560"> + <rom name="4 top games - pulsator + slaine - the celtic barbarian (1987)(martech games)(side a).dsk" size="194560" crc="e0429b01" sha1="a6d7bbef5246cd2911f2fe78fccee6fa98972c61" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Slaine - The Celtic Barbarian"/> + <dataarea name="flop" size="194560"> + <rom name="4 top games - catch 23 + nemesis the warlock (1987)(martech games)(side b).dsk" size="194560" crc="214d2d60" sha1="31301ca3a0b939d780af5cddaf35b6f69182edc1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v1"> + <description>Los 40 Principales Vol. 1</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Batman + Thanatos"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 1, los - batman + thanatos (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="d40e42cf" sha1="793164dada3c40ffbaced6cebc00ccfbf69a0d8b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Spirits + Asterix and the Magic Cauldron"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 1, los - spirits + asterix and the magic cauldron (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="2f948ee8" sha1="7b10ed4d87627f0b2407a3e048ee2ac64c101367" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v1a" cloneof="los40v1"> + <description>Los 40 Principales Vol. 1 (alt)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Batman + Thanatos"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 1, los - batman + thanatos (1987)(erbe)(es)(en).dsk" size="194816" crc="cc1065eb" sha1="241933d1e5754176fb6f7764ef4fed618a9be77e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Spirits + Asterix and the Magic Cauldron"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 1, los - spirits + asterix and the magic cauldron (1987)(erbe)(es)(en).dsk" size="194816" crc="43fd2cac" sha1="a24ea3e43bf1c14c5d0e67577ee36f8c8a5ae0be" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v10"> + <description>Los 40 Principales Vol. 10</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Super Soccer + Ramon Rodriguez"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 10, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="79c0ae58" sha1="ee481fbfa0856a3017ca3b50dd9602f0f8469307" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Pole Position + Abu Simbel Profanation"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 10, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="4ef2a38d" sha1="6b1a1c3960b76b0008c271cda3bf9302dfebad77" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v10a" cloneof="los40v10"> + <description>Los 40 Principales Vol. 10 (alt)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Super Soccer + Ramon Rodriguez"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 10, los - super soccer + ramon rodriguez (1987)(erbe)(es)(en).dsk" size="194816" crc="e3cfb4fd" sha1="d91dffe5f813aa2bb55883568487c6073f158911" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Pole Position + Abu Simbel Profanation"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 10, los - pole position + abu simbel profanation (1987)(erbe)(es)(en).dsk" size="194816" crc="624a60d6" sha1="5a669643703075479ab57123bb82aa46d755272a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v2"> + <description>Los 40 Principales Vol. 2</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Great Escape + Zorro"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 2, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="c2cf1d53" sha1="c8836f903da024338abe8ef8b33d7fdfd542e6ff" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Inspector Gadget + Antiriad"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 2, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="3461ebaa" sha1="9e70d1306add385e524659e6231f302e2d68b568" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v3"> + <description>Los 40 Principales Vol. 3</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Arkanoid + Nightmare Rally"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 3, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="74131d2a" sha1="54035f94d4b8cd70e9c1fc9d76f1e3eeb45ef739" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Movie + Phantomas"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 3, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="5dda7a2b" sha1="04d3c2c148d70f202c3782ecb163b9a2d35cfee9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v3a" cloneof="los40v3"> + <description>Los 40 Principales Vol. 3 (alt)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Arkanoid + Nightmare Rally"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 3, los - arkanoid + nightmare rally (1987)(erbe)(es)(en)[aka 40 principales, los - vol. 03 - arkanoid + nightmare rally].dsk" size="194816" crc="bf661330" sha1="e209b965d3779f63185e45944b065064da40a36c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Movie + Phantomas"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 3, los - movie + phantomas (1987)(erbe)(es)(en).dsk" size="194816" crc="31a090a1" sha1="c218b9248af6a04c81c14979ed2c2b9f7da96cfd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v5"> + <description>Los 40 Principales Vol. 5</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Kung-Fu Master + Three Weeks in Paradise"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 5, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="dced94ad" sha1="9f3837ee55ad3f7cc3e27ef11998a821dc93bdda" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Breakthru + Phantomas II"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 5, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="e058bb55" sha1="f283715635bf83f399d6e3ce737d9cbb128f6360" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v6"> + <description>Los 40 Principales Vol. 6</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Rocky + Survivor"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 6, los - rocky + survivor (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="826eb3ee" sha1="9e62f609db8d84c9f8db9b253c6a7c7867f28a64" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Way of the Exploding Fist + Nemesis the Warlock"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 6, los - the way of the exploding fist + nemesis the warlock (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="366acc72" sha1="3116c8a66c6be6d185ed1b211d7ce7d3ade3a0e8" offset="0" /> + </dataarea> + </part> + </software> + + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v6a" cloneof="los40v6"> + <description>Los 40 Principales Vol. 6 (alt)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Rocky + Survivor"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 6, los - rocky + survivor (1987)(erbe)(es).dsk" size="194816" crc="fe1eae07" sha1="705fa61c03a27194cf031f0542d375eacb5d41f0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Way of the Exploding Fist + Nemesis the Warlock"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 6, los - the way of the exploding fist + nemesis the warlock (1987)(erbe)(es)(en).dsk" size="194816" crc="1861a94b" sha1="f2bd0cb1ed02e1cba60435c19bd58e0acaf6bf16" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v7"> + <description>Los 40 Principales Vol. 7</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Saboteur 2 + Las Tres Luces de Glaurung"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 7, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="4b8b5d59" sha1="6bd353df0e3eb5424e6aea89bcd27ba3349118db" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Camelot Warriors + Dustin"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 7, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="d3564e75" sha1="016d5f3a9545320f3f9a6ad265a3f7df0278de7d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v8"> + <description>Los 40 Principales Vol. 8</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Barbarian + Cauldron II"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 8, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="1077758c" sha1="bf24432fd0248340b314ddbcc04b3eb2c9350195" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Saboteur + West Bank"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 8, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="8ef48835" sha1="5f9c57c795ca5f9a9a1cae5cd5e7078be0a0b705" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v8a" cloneof="los40v8"> + <description>Los 40 Principales Vol. 8 (alt)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Barbarian + Cauldron II"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 8, los - barbarian + cauldron ii - the pumpkin strikes back (1987)(erbe)(es)(en).dsk" size="194816" crc="8a786f29" sha1="5fe9b2c722ba835a95ba9690b14497c8d3fca6ec" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Saboteur + West Bank"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 8, los - saboteur + west bank (1987)(erbe)(es)(en).dsk" size="194816" crc="19eb9f73" sha1="0616802b7251b5dc3a0766bdefe84e2d52a9ad1a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v8b" cloneof="los40v8"> + <description>Los 40 Principales Vol. 8 (alt 2)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Barbarian + Cauldron II"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 8, los - barbarian + cauldron ii - the pumpkin strikes back (1987)(erbe)(es)(en)[a].dsk" size="194816" crc="54acc38e" sha1="eafadcf282e0d922be5b28caed86f2ad65f12a3a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Saboteur + West Bank"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 8, los - saboteur + west bank (1987)(erbe)(es)(en)[a].dsk" size="194816" crc="4ee1ea8a" sha1="c7fe4aff2c7e522304057d454849b350d5d929c7" offset="0" /> + </dataarea> + </part> + </software> - <!-- Other images --> +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="los40v9"> + <description>Los 40 Principales Vol. 9</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Uridium + Uchi Mata"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 9, los (1987)(erbe)(es)(en-es)(side a).dsk" size="194816" crc="fad70a24" sha1="05b136fbcbc2ff78ee1b9df8a8c8eee84b5b27cd" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: World Series Basketball + Nonamed"/> + <dataarea name="flop" size="194816"> + <rom name="40 principales vol. 9, los (1987)(erbe)(es)(en)(side b).dsk" size="194816" crc="8c5e18a1" sha1="ede67667b46bb8d785398c58d22263158ed744af" offset="0" /> + </dataarea> + </part> + </software> - <software name="pacmania" > - <description>Pac-Mania (Euro, Aus)</description> +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amscompd"> + <description>Amstrad Compilation Disk Spectrum Plus 3</description> + <year>1987</year> + <publisher>Amstrad</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Gift from the Gods + Mailstrom + N.O.M.A.D."/> + <dataarea name="flop" size="194816"> + <rom name="amstrad compilation disk spectrum plus 3 - gift from the gods + mailstrom + n.o.m.a.d. (1987)(amstrad)(side a).dsk" size="194816" crc="a05a58f8" sha1="148e437f0d035f3460733205c546eb9d2022c909" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Daley Thompson's Supertest + Cosmic Wartoad"/> + <dataarea name="flop" size="194816"> + <rom name="amstrad compilation disk spectrum plus 3 - daley thompson's supertest + cosmic wartoad (1987)(amstrad)(side b).dsk" size="194816" crc="c84b1e03" sha1="4242cda1493d0ded1766ad9de14727a7ec2b53eb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amscompda" cloneof="amscompd"> + <description>Amstrad Compilation Disk Spectrum Plus 3 (alt)</description> + <year>1987</year> + <publisher>Amstrad</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Gift from the Gods + Mailstrom + N.O.M.A.D."/> + <dataarea name="flop" size="194816"> + <rom name="amstrad compilation disk spectrum plus 3 - gift from the gods + mailstrom + n.o.m.a.d. (1987)(amstrad).dsk" size="194816" crc="8fc5a575" sha1="37474b491853775d7b0f9983f50a655106bc7800" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Daley Thompson's Supertest + Cosmic Wartoad"/> + <dataarea name="flop" size="194816"> + <rom name="amstrad compilation disk spectrum plus 3 - daley thompson's supertest + cosmic wartoad (1987)(amstrad).dsk" size="194816" crc="e7f1d954" sha1="9299a87cb3dd915660f16d5cc8b0082db84a2711" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amscompdb" cloneof="amscompd"> + <description>Amstrad Compilation Disk Spectrum Plus 3 (alt 2)</description> + <year>1987</year> + <publisher>Amstrad</publisher> + <part name="flop1" interface="floppy_3"> + <!-- Side missing from dump, using same as parent set --> + <feature name="part_id" value="Side A: Gift from the Gods + Mailstrom + N.O.M.A.D."/> + <dataarea name="flop" size="194816"> + <rom name="amstrad compilation disk spectrum plus 3 - gift from the gods + mailstrom + n.o.m.a.d. (1987)(amstrad)(side a).dsk" size="194816" crc="a05a58f8" sha1="148e437f0d035f3460733205c546eb9d2022c909" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Daley Thompson's Supertest + Cosmic Wartoad"/> + <dataarea name="flop" size="194816"> + <rom name="amstrad compilation disk spectrum plus 3 - daley thompson's supertest + cosmic wartoad (1987)(amstrad)[a].dsk" size="194816" crc="f273df89" sha1="b19047727440ade850268f129ba2e4ceadb9163f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="anbigdsk"> + <description>Another Big Disk</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Menagerie + The Miser + Bog of Brit"/> + <dataarea name="flop" size="194816"> + <rom name="another big disk - the menagerie + the miser + bog of brit (1991)(zenobi)(side a).dsk" size="194816" crc="7a22c6b0" sha1="91279fbb792a02efa15e710b3f2783cb0d8d74bb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Pendant of Logryn"/> + <dataarea name="flop" size="194816"> + <rom name="another big disk - the pendant of logryn (1991)(zenobi)(side b).dsk" size="194816" crc="9a1aadd3" sha1="4e442d0d7b1607351027d8e8a01622829de7c57f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arccolv1"> + <description>Arcade Collection Volume 1</description> + <year>1990</year> + <publisher>Players</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="195635"> + <rom name="arcade collection volume 1 (1990)(players)(side a).dsk" size="195635" crc="a49ab925" sha1="2ec5adfd4a91f00e91888856b8dac19629f16408" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="195635"> + <rom name="arcade collection volume 1 (1990)(players)(side b).dsk" size="195635" crc="7dbbfe6e" sha1="7b001d134285c7f370b8ec692d93b909319f8219" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arccolv2"> + <description>Arcade Collection Volume 2</description> + <year>1990</year> + <publisher>Players</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="arcade collection volume 2 (1990)(players)[aka hotshots arcade 2].dsk" size="194816" crc="6329fc50" sha1="009ef6c638821269f2d101500323117ce1839215" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arccolv2a" cloneof="arccolv2"> + <description>Arcade Collection Volume 2 (alt)</description> + <year>1990</year> + <publisher>Players</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="arcade collection volume 2 - moving target + cobra force + task force (1990)(players)[aka hotshots arcade 2].dsk" size="194816" crc="990e7ee8" sha1="925127f9ad26e4ba7946e62c332f5db75abf300c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="acextra3"> + <description>Arcade Extravaganza Disk 3</description> + <year>1988</year> + <publisher>Alternative Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="arcade extravaganza disk 3 (1988)(alternative).dsk" size="194816" crc="e421ac09" sha1="5d8fce028a7793d3ecf84086244a9fb77104cc94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arnadv12"> + <description>Arnold the Adventurer 1 + 2</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="arnold the adventurer 1 + 2 (19xx)(zenobi).dsk" size="194816" crc="2de22fac" sha1="b721610fbf50a964560810e678c55fae31d2a0d4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="balrogbd"> + <description>Balrog's Big Disk</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Pawns of War + Crack City + Stalker"/> + <dataarea name="flop" size="194816"> + <rom name="balrog's big disk - pawns of war + crack city + stalker (1991)(zenobi)(side a).dsk" size="194816" crc="2420fde6" sha1="0ae1560b42f3751e53b949384a903b54b720ad5d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Pawns of War II - The Infiltrator + Sherlock Holmes - The Case of the Beheaded"/> + <dataarea name="flop" size="194816"> + <rom name="balrog's big disk - pawns of war ii - the infiltrator + sherlock holmes - the case of the beheaded (1991)(zenobi)(side b).dsk" size="194816" crc="4cd5597d" sha1="e95d285c863ef75a3215b778be879210af03eca5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="balrtril"> + <description>The Balrogian Trilogy</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Fuddo & Slam + An Everyday Tale of a Seeker of Gold"/> + <dataarea name="flop" size="194816"> + <rom name="balrogian trilogy, the - fuddo & slam + an everyday tale of a seeker of gold (1990)(zenobi)(side a).dsk" size="194816" crc="b24c8eb3" sha1="d95392ef03df89350cf3a88198f3272322f942a4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Bulbo and the Lizard-King + Heroes and Villiains, The Illustrated Guide"/> + <dataarea name="flop" size="194816"> + <rom name="balrogian trilogy, the (1990)(zenobi)(side b).dsk" size="194816" crc="ca9781f5" sha1="9509fafb718bff4a79d4263fafd32bd652280a60" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="barddraq"> + <description>The Bardic Rites + Dragon-Quest</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Bardic Rites"/> + <dataarea name="flop" size="194816"> + <rom name="bardic rite, the + dragon-quest (1994)(zenobi)(side a).dsk" size="194816" crc="e9f37369" sha1="762066e0834221fba3f750d4fb6903104da9e749" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Dragon-Quest"/> + <dataarea name="flop" size="194816"> + <rom name="bardic rite, the + dragon-quest (1994)(zenobi)(side b).dsk" size="194816" crc="a6ba75ed" sha1="be15f27cce94d496664120282610f6e222864105" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bartbret"> + <description>Bart Bear + The Return of Bart Bear</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bart bear - the return of bart bear (19xx)(zenobi).dsk" size="194816" crc="0396887f" sha1="c2f8db9fea7b7fc90fd043d7e509691a32856b2b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bstclles"> + <description>The Best of Clive and Les</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="best of clive and les, the - the little wandering guru + nightwing + demi-god (1991)(zenobi).dsk" size="194816" crc="f577d853" sha1="4fd34aecf2a22be831ebfb498724c1b52b593e92" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="belitev1"> + <description>Best of Elite Vol. 1</description> + <year>1987</year> + <publisher>Hit-Pak</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Frank Bruno's Boxing + Bomb Jack"/> + <dataarea name="flop" size="214784"> + <rom name="best of elite vol 1 - frank bruno's boxing + bomb jack (1987)(hit-pak).dsk" size="214784" crc="d7dcaba9" sha1="4390a79bea5a12930b52d12e8bc3a0eb4bafb5eb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Airwolf + Commando"/> + <dataarea name="flop" size="214784"> + <rom name="best of elite vol 1 - airwolf + commando (1987)(hit-pak).dsk" size="214784" crc="36042980" sha1="41b40047372fac5c7001031de46ff4db79b27561" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bogbmena"> + <description>Bog of Brit + The Menagerie</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bog of brit + menagerie, the (1990)(zenobi)[re-release].dsk" size="194816" crc="dc47c945" sha1="1d999f7809037b4207bb5feeba9f52172edb1cc3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bootsact"> + <description>Boots Action Pack</description> + <year>1987</year> + <publisher>Boots</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194560"> + <rom name="boots action pack (1987)(boots)(side a).dsk" size="194560" crc="64e69648" sha1="1ef510c5de07b93e3703f820ce170a831cead5f8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="boots action pack (1987)(boots)(side b).dsk" size="194816" crc="199e7278" sha1="146f78330dfddb38f24411abb49eefb7aba83783" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cezcoll1"> + <description>CEZ Collection Vol.1</description> + <year>2008</year> + <publisher>Computer Emuzone</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Cannon Bubble + BeTiled! + Moggy"/> + <dataarea name="flop" size="194816"> + <rom name="cez collection vol.1 (2008)(computer emuzone)(es)(side a).dsk" size="194816" crc="9a228323" sha1="ed7241701293769e29caa3b931578bd17ed3a3e8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Phantomasa 2 + Columns + Phantomas Saga: Infinity"/> + <dataarea name="flop" size="194816"> + <rom name="cez collection vol.1 (2008)(computer emuzone)(es)(side b).dsk" size="194816" crc="5a0ab5e1" sha1="d7cb0ec40d9f05f5531d7f3b687ea46ecd43aa7c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cartcap3"> + <description>Cartoon Capers Disk 3</description> + <year>1988</year> + <publisher>Alternative Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cartoon capers disk 3 (1988)(alternative).dsk" size="194816" crc="bd43f24b" sha1="a5a5f52b283f84d7dfa2d904712a1d25ba75dcb8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chartbus"> + <description>Chartbusters</description> + <year>19??</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Cobra + Mutants + Green Beret"/> + <dataarea name="flop" size="194560"> + <rom name="chartbusters - cobra + mutants + green beret (19xx)(ocean)(side a).dsk" size="194560" crc="43019e2e" sha1="82ba8864be71bb8d17c714b7fd0713ad147d79e3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Short Circuit + The Great Escape + Yie Ar Kung-Fu"/> + <dataarea name="flop" size="194560"> + <rom name="chartbusters - short circuit + the great escape + yie ar kung-fu (19xx)(ocean)(side b).dsk" size="194560" crc="2c6606cf" sha1="e2224ab3990f61d451fa6741419b6a2653314658" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="clasgam4"> + <description>Classic Games 4</description> + <year>1989</year> + <publisher>CP Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="classic games 4 (1989)(cp).dsk" size="194816" crc="c2c629e1" sha1="20a45c48006b88ca85800a1f8a6d8c38381e35d7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="colexdin"> + <description>Coleccion de Exitos Dinamic</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Army Moves + Game Over + Camelot Warriors + Nonamed"/> + <dataarea name="flop" size="214784"> + <rom name="coleccion de exitos dinamic (1988)(dinamic)(es)(side a).dsk" size="214784" crc="ca9527ca" sha1="71d635ed97ba4483d00c7aed0fbe6bd813268629" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Abu Simbel + Dustin + Phantomas 2 + Don Quijote"/> + <dataarea name="flop" size="214784"> + <rom name="coleccion de exitos dinamic (1988)(dinamic)(es)(side b).dsk" size="214784" crc="4293fe06" sha1="a72a1bfd8a70206d6000a3883c54ee9417f19425" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="commperf"> + <description>Command Performance</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="219648"> + <rom name="command performance (1989)(u.s. gold)(side a).dsk" size="219648" crc="d9efa2c8" sha1="011bb04acbdf1d94b575472be757f2fd67457e1f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="219648"> + <rom name="command performance (1989)(u.s. gold)(side b).dsk" size="219648" crc="89841c5e" sha1="e4aaac3e4291239b5d2debc89b939b3ff09e4c66" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="compclas"> + <description>Computer Classics</description> + <year>1987</year> + <publisher>Beau-Jolly</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Aliens + Cauldron II - The Pumpkin Strikes Back + Dynamite Dan"/> + <dataarea name="flop" size="204544"> + <rom name="computer classics - aliens + cauldron ii - the pumpkin strikes back + dynamite dan (1987)(beau-jolly).dsk" size="204544" crc="f34e00f7" sha1="293aa4a82b1163cff606a9c8a8ff1e9c4a4d9364" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Into the Eagle's Nest + Exolon"/> + <dataarea name="flop" size="204544"> + <rom name="computer classics - into the eagle's nest + exolon (1987)(beau-jolly).dsk" size="204544" crc="a1d84366" sha1="c8e1f9ae43d3e44614eb0bf6b51807e1c6ee79df" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dtppack"> + <description>DTP Pack</description> + <year>1988</year> + <publisher>P.C.G. Computer</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Word-Master"/> + <dataarea name="flop" size="194816"> + <rom name="dtp pack (1988)(p.c.g. computer)(side a).dsk" size="194816" crc="5c1e0941" sha1="ce781bbfa6fa3f68f5705331887fb5adf3a3271b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Headliner + Typeliner & Font Editor"/> + <dataarea name="flop" size="194816"> + <rom name="dtp pack (1988)(p.c.g. computer)(side b).dsk" size="194816" crc="b3f9e13d" sha1="af4ebdf3ebcf3c7143fac4740bf4f9b90894e440" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dearcgal"> + <description>Data East's Arcade Alley</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Express Raider + Last Mission"/> + <dataarea name="flop" size="194816"> + <rom name="data east's arcade alley - express raider + last mission (1988)(u.s. gold)(side a).dsk" size="194816" crc="4621ccee" sha1="6357e892ac1e242d93f145bd1fc3a925133db1a4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Kung-Fu Master + Breakthru"/> + <dataarea name="flop" size="194816"> + <rom name="data east's arcade alley - kung-fu master + breakthru (1988)(u.s. gold)(side b).dsk" size="194816" crc="117f5368" sha1="24c459c63cd1829131c6fc6dd730ffc9f192cf45" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dearcgala" cloneof="dearcgal"> + <description>Data East's Arcade Alley (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Express Raider + Last Mission"/> + <dataarea name="flop" size="194816"> + <rom name="data east's arcade alley - express raider + last mission (1988)(u.s. gold)(side a).dsk" size="194816" crc="4621ccee" sha1="6357e892ac1e242d93f145bd1fc3a925133db1a4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Kung-Fu Master + Breakthru"/> + <dataarea name="flop" size="194816"> + <rom name="data east's arcade alley - kung-fu master + breakthru (1988)(u.s. gold).dsk" size="194816" crc="3ec5943f" sha1="1a653fa41d7fcd7aaffe928d2c0185301dd764d7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="delberts"> + <description>Delbert's Hamster-Wheel of Fortune</description> + <year>1992</year> + <publisher>Delbert the Hamster</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="delbert's hamster-wheel of fortune (1992)(delbert the hamster).dsk" size="194816" crc="4926b045" sha1="a1b2b39d92ea14d1daa207624b70c2fadae6ee7c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dicksgal"> + <description>Dicks Galore</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Robin of Sherlock"/> + <dataarea name="flop" size="197376"> + <rom name="dicks galore (1992)(zenobi)(side a).dsk" size="197376" crc="cf38d6de" sha1="7499d53d6419f645e2acf969d0aa1db883bdbe61" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Big Sleaze"/> + <dataarea name="flop" size="194816"> + <rom name="dicks galore (1992)(zenobi)(side b).dsk" size="194816" crc="621a14ab" sha1="f08c273685367a590261b850f5ec8ec716bd3aaf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dinamic5"> + <description>Dinamic 5 Aniversario</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Los Pajaros de Bangkok + Mega-Corp"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - los pajaros de bangkok + mega-corp (1989)(dinamic)(es)(disk 1 of 4 side a)[aka pack 5 aniversario].dsk" size="214784" crc="8b6a817e" sha1="2afb682db6296cc2e469155424d82dd6e145ed58" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Freddy Hardest + Meganova"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - freddy hardest + meganova (1989)(dinamic)(es)(disk 1 of 4 side b)[aka pack 5 aniversario].dsk" size="214784" crc="c1f9665e" sha1="0567c26069742768753c927b0a6a1963211fa441" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Phantis + Abu Simbel Profanation + Dustin + West Bank"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - phantis + abu simbel profanation + dustin + west bank (1989)(dinamic)(es)(disk 2 of 4 side b)[aka pack 5 aniversario].dsk" size="214784" crc="862604dd" sha1="acfca1a0b55c23581d17cb9aafaa2064634c4715" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Capitan Sevilla + Rocky + Fernando Martin Basket Master + Hundra"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - capitan sevilla + rocky + fernando martin basket master + hundra (1989)(dinamic)(es)(disk 2 of 4 side a)[aka pack 5 aniversario].dsk" size="214784" crc="bd5513f3" sha1="179f00b1381108ec88fcdacb5119de4b9c7041ff" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dinamic5a" cloneof="dinamic5"> + <description>Dinamic 5 Aniversario (alt)</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Los Pajaros de Bangkok + Mega-Corp"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - los pajaros de bangkok + mega-corp (1989)(dinamic)(es)(disk 1 of 4 side a)[aka pack 5 aniversario].dsk" size="214784" crc="8b6a817e" sha1="2afb682db6296cc2e469155424d82dd6e145ed58" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Freddy Hardest + Meganova"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - freddy hardest + meganova (1989)(dinamic)(es)(disk 1 of 4 side b)[aka pack 5 aniversario].dsk" size="214784" crc="c1f9665e" sha1="0567c26069742768753c927b0a6a1963211fa441" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Phantis + Abu Simbel Profanation + Dustin + West Bank"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - phantis + abu simbel profanation + dustin + west bank (1989)(dinamic)(es)(disk 2 of 4 side b)[aka pack 5 aniversario].dsk" size="214784" crc="862604dd" sha1="acfca1a0b55c23581d17cb9aafaa2064634c4715" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Capitan Sevilla + Rocky + Fernando Martin Basket Master + Hundra"/> + <dataarea name="flop" size="214784"> + <rom name="dinamic 5 aniversario - capitan sevilla + rocky + fernando martin basket master + hundra (1989)(dinamic)(es)(disk 2 of 4 side a)[aka pack 5 aniversario].dsk" size="214784" crc="bd5513f3" sha1="179f00b1381108ec88fcdacb5119de4b9c7041ff" offset="0" /> + </dataarea> + </part> + </software> + + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dixonspr"> + <description>Dixons Premier Collection for Your +3</description> + <year>1988</year> + <publisher>Dixons</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Athena + Slap Fight + Wizball"/> + <dataarea name="flop" size="214784"> + <rom name="dixons premier collection for your +3 - athena + slap fight + wizball (1988)(dixons)(side a).dsk" size="214784" crc="e92b802c" sha1="b72177d547b749b52e46b3f443d85ededfa3a75f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Game Over + Arkanoid + Tank"/> + <dataarea name="flop" size="214784"> + <rom name="dixons premier collection for your +3 - game over + arkanoid + tank (1988)(dixons)(side b).dsk" size="214784" crc="a21496c5" sha1="b29de08493f37ad01bfb88e7a06762c5d5f1f906" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="doublecl"> + <description>Double Classic</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Diablo!"/> + <dataarea name="flop" size="194816"> + <rom name="double classic (1988)(zenobi)(side a).dsk" size="194816" crc="80ea8e9d" sha1="2bd5961f2b50479d9600cf9545c94237d70f5342" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Dr. Jekyll and Mr. Hyde "/> + <dataarea name="flop" size="194816"> + <rom name="double classic (1988)(zenobi)(side b).dsk" size="194816" crc="a92e7e19" sha1="4e7aeebbe48f81534ac6e8e6d3d64b8e08500c7a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="epyx21"> + <description>Epyx 21</description> + <year>1990</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A"/> + <dataarea name="flop" size="254208"> + <rom name="epyx 21 (1990)(u.s. gold)(disk 1 of 2 side a).dsk" size="254208" crc="31775c37" sha1="3e07255bf51a9d44d5adebc7b12b09d2a37735b2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B"/> + <dataarea name="flop" size="255232"> + <rom name="epyx 21 (1990)(u.s. gold)(disk 1 of 2 side b).dsk" size="255232" crc="84dc286e" sha1="4983fcc6eb2168ee94205bb19032bd68fa5913a3" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2"/> + <dataarea name="flop" size="256256"> + <rom name="epyx 21 (1990)(u.s. gold)(disk 2 of 2).dsk" size="256256" crc="251117ed" sha1="89cd3b465cdc35df7399996a4a0ca33a70bbdb46" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="erbe88"> + <description>Erbe 88</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Chicago 30's + Coliseum"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 - chicago 30's + coliseum (1988)(erbe)(es).dsk" size="194816" crc="00933d7d" sha1="19d5fcbe03c3148ea7079be5d39b88de3ee9579d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Titanic"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 - titanic (1988)(erbe)(es).dsk" size="194816" crc="a4545d81" sha1="c8d824b8af1a93971ea9297f5feef04cd902460d" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Operation Wolf"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 - operation wolf (1988)(erbe)(es).dsk" size="194816" crc="8684cb85" sha1="17ef91450cc7e81a02846ac92aa2e37c35cbd7c7" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Psycho Pig U.X.B."/> + <dataarea name="flop" size="63488"> + <rom name="erbe 88 - psycho pig u.x.b. (1988)(erbe)(es).dsk" size="63488" crc="6494096f" sha1="9202225cadeea646288cddb514a098d6333c262d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="erbe88a" cloneof="erbe88"> + <description>Erbe 88 (alt)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Chicago 30's + Coliseum"/> + <dataarea name="flop" size="116992"> + <rom name="erbe 88 - chicago 30's + coliseum (1988)(erbe)(es)(disk 1 of 3 side a).dsk" size="116992" crc="68c614a5" sha1="7aacdd3676b6d45023105c64eab30006cc893eac" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Titanic"/> + <dataarea name="flop" size="116992"> + <rom name="erbe 88 - titanic (1988)(erbe)(es)(disk 1 of 3 side b).dsk" size="116992" crc="601a2bbc" sha1="2b102f7e62a13821e079797aefd6fc72106ecf9e" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Operation Wolf"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 (1988)(erbe)(es)(disk 2 of 3 side a).dsk" size="194816" crc="e60e1d0c" sha1="c8243daf73b2936d1142e362f77a5f874acccba4" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Psycho Pig U.X.B."/> + <dataarea name="flop" size="68352"> + <rom name="erbe 88 (1988)(erbe)(es)(disk 2 of 3 side b).dsk" size="68352" crc="3d8e6ea8" sha1="e3b07c3193ae36005073da72702e0134310d18e2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="erbe88b" cloneof="erbe88"> + <description>Erbe 88 (alt 2)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <!-- Side missing from dump, using same as parent set --> + <feature name="part_id" value="Disk 1, Side A: Chicago 30's + Coliseum"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 - chicago 30's + coliseum (1988)(erbe)(es).dsk" size="194816" crc="00933d7d" sha1="19d5fcbe03c3148ea7079be5d39b88de3ee9579d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <!-- Side missing from dump, using same as parent set --> + <feature name="part_id" value="Disk 1, Side B: Titanic"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 - titanic (1988)(erbe)(es).dsk" size="194816" crc="a4545d81" sha1="c8d824b8af1a93971ea9297f5feef04cd902460d" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Operation Wolf"/> + <dataarea name="flop" size="194816"> + <rom name="erbe 88 - operation wolf (1988)(erbe)(es)[a].dsk" size="194816" crc="0975a93a" sha1="010edc4e3470e29eeaccf1fea8ff53910c8ee1dc" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Psycho Pig U.X.B."/> + <dataarea name="flop" size="68352"> + <rom name="erbe 88 - psycho pig u.x.b. (1988)(erbe)(es)[a].dsk" size="68352" crc="103dba81" sha1="debe0011ae1c8a63fc3858d66ca778c8aaf38c3c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="escapefr"> + <description>Escape from Prison Planet + Hounds of Hell</description> + <year>19??</year> + <publisher>The Adventure Workshop</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Escape from Prison Planet"/> + <dataarea name="flop" size="194816"> + <rom name="escape from prison planet + hounds of hell (19xx)(adventure workshop, the)(side a).dsk" size="194816" crc="4295ad13" sha1="785bbe2d378fc71c07cb5fdfd74c704a7d693132" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Hounds of Hell"/> + <dataarea name="flop" size="194816"> + <rom name="escape from prison planet + hounds of hell (19xx)(adventure workshop, the)(side b).dsk" size="194816" crc="fc35c9d4" sha1="7aa8693ebbe0acc1cc866c1b1064e914913094b7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="evenyeta"> + <description>Even Yet Another Big Disk</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Dogboy + Kobyashi Ag'Kwo - A Return to Naru"/> + <dataarea name="flop" size="194816"> + <rom name="even yet another big disk - the dogboy + kobyashi ag'kwo - a return to naru (1991)(zenobi)(side a).dsk" size="194816" crc="0e5c3a13" sha1="0f507f72b0b096f37ef307443bb50e7fa88edaae" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Silverwolf + Darkest Road"/> + <dataarea name="flop" size="194816"> + <rom name="even yet another big disk - silverwolf + darkest road (1991)(zenobi)(side b).dsk" size="194816" crc="d4481c89" sha1="df54fd6d863731938d2067e94fb7ff9bf68cbc67" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fivestg3"> + <description>Five Star Games 3</description> + <year>1987</year> + <publisher>Beau-Jolly</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Aliens + The Sacred Armour of Antiriad + The Way of the Exploding Fist"/> + <dataarea name="flop" size="194816"> + <rom name="five star games 3 - aliens + the sacred armour of antiriad + the way of the exploding fist (1987)(beau-jolly).dsk" size="194816" crc="a4183f58" sha1="bda5e566d528700d8dc829636a59a55a8755f055" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Spindizzy + Starquake + Tau Ceti + Uridium+"/> + <dataarea name="flop" size="194816"> + <rom name="five star games 3 - spindizzy + starquake + tau ceti + uridium+ (1987)(beau-jolly).dsk" size="194816" crc="52571952" sha1="23a2ce48d8ea3116578084c398702be0c3adb8d4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fyabdisk"> + <description>Found Yet Another Big Disk</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The End is Nigh"/> + <dataarea name="flop" size="194816"> + <rom name="found yet another big disk - the end is nigh (1991)(zenobi)(side a).dsk" size="194816" crc="0fd39d7a" sha1="2291ace6106dc57389039e58c82887f1807eac9d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Brian - The Novice Barbarian + Civil Service + Man About the House"/> + <dataarea name="flop" size="194816"> + <rom name="found yet another big disk - brian - the novice barbarian + civil service + man about the house (1991)(zenobi)(side b).dsk" size="194816" crc="f6a2ac35" sha1="71eb7edc2621a1973aa0e5e1b46075cfc0911695" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fourggv3"> + <description>Four Great Games Volume 3</description> + <year>1988</year> + <publisher>Micro Value</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="four great games volume 3 (1988)(micro value)[aka microvalue vol. 3].dsk" size="194816" crc="b439e35b" sha1="aafee1249e8ac3f6ec55631b5c59328b55515b36" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="frankbbb"> + <description>Frank Bruno's Big Box</description> + <year>1989</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Frank Bruno's Boxing + Bomb Jack"/> + <dataarea name="flop" size="194816"> + <rom name="frank bruno's big box (1989)(elite systems)(disk 1 of 4 side a).dsk" size="194816" crc="2c8a15df" sha1="0ba9000def471f11594b303304844f038c12e5a5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Airwolf + Commando + Scooby Doo"/> + <dataarea name="flop" size="194816"> + <rom name="frank bruno's big box (1989)(elite systems)(disk 1 of 4 side b).dsk" size="194816" crc="33f3b9f4" sha1="9a774e45a3c3b5f736c159345a0c8a2ef728dd86" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: 1942 + Batty + Ghost 'n Goblins"/> + <dataarea name="flop" size="194816"> + <rom name="frank bruno's big box (1989)(elite systems)(disk 2 of 4 side a).dsk" size="194816" crc="f93cef0c" sha1="3f371f869842621c1445519fdd7e537c3abe9c93" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Battle Ships + Saboteur"/> + <dataarea name="flop" size="194816"> + <rom name="frank bruno's big box (1989)(elite systems)(disk 2 of 4 side b).dsk" size="194816" crc="1492c7ad" sha1="c5a5de4cfc383533d02bad47567e21a7a08815db" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gaggeorg"> + <description>Gaggles of George</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Brian - The Novice Barbarian + A Fistful of Necronomicons"/> + <dataarea name="flop" size="194816"> + <rom name="gaggles of george - brian - the novice barbarian + a fistful of necronomicons (1996)(zenobi)(side a).dsk" size="194816" crc="1ee71ba8" sha1="c6e692b8a11fac0e125362888d1b49cac8ea4d2e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Trouble with Trolls + The Emerald Elf"/> + <dataarea name="flop" size="194816"> + <rom name="gaggles of george - trouble with trolls + the emerald elf (1996)(zenobi)(side b).dsk" size="194816" crc="7f144a30" sha1="4bd81a0bf2f22ca42d901377e8112ffddabcbf98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gameover"> + <description>Game Over + Game Over 2</description> + <year>19??</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Game Over"/> + <dataarea name="flop" size="101888"> + <rom name="game over + game over 2 (19xx)(imagine)(side a).dsk" size="101888" crc="6d00c99e" sha1="c4f455027c568c1d2b2538455d48cc74326e88f4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Game Over II"/> + <dataarea name="flop" size="107264"> + <rom name="game over + game over 2 (19xx)(imagine)(side b).dsk" size="107264" crc="26859d00" sha1="b806d734fdc966ad6ab0ce0a522fcfdf731efd5f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gsandmat"> + <description>Game, Set and Match</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: GBA Championship Basketball + Super Soccer + World Series Baseball"/> + <dataarea name="flop" size="194560"> + <rom name="game, set and match - gba championship basketball + super soccer + world series baseball (1987)(ocean).dsk" size="194560" crc="6f8325fc" sha1="0cbe9b1ad58ac17b1e0cdd59e390ed2095f68c43" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side A: Hyper Sports + Konami's Tennis"/> + <dataarea name="flop" size="194560"> + <rom name="game, set and match - hyper sports + konami's tennis (1987)(ocean).dsk" size="194560" crc="5873c4f6" sha1="4b1031a0ffcb952862aa500b3428fc8b5a7d9a08" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Side A: Konami's Ping Pong + Daley Thompson's Supertest"/> + <dataarea name="flop" size="194560"> + <rom name="game, set and match - konami's ping pong + daley thompson's supertest (1987)(ocean).dsk" size="194560" crc="51ce1b94" sha1="7022c2172a46d6c705da4343eaa9d1b47547a09e" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Side A: Barry McGuigan World Championship Boxing + Jonah Barrington's Squash + Pool"/> + <dataarea name="flop" size="194560"> + <rom name="game, set and match - barry mcguigan world championship boxing + jonah barrington's squash + pool (1987)(ocean).dsk" size="194560" crc="e2b334e1" sha1="d514e073868c131af165d89920aff1f4c849a36f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="germmstr"> + <description>The German Master</description> + <year>1993</year> + <publisher>Kosmos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="german master, the (1993)(kosmos).dsk" size="194816" crc="f8eaac2a" sha1="6fe7928e0a35a1aec442eda354853d4b9ff1d593" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="giantsug"> + <description>Giants (U.S. Gold)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Out Run"/> + <dataarea name="flop" size="134144"> + <rom name="giants - out run (1988)(u.s. gold)(disk 1 of 3 side a).dsk" size="134144" crc="2ebaa196" sha1="7a27e07d14b6d095e90a4e5fb1550c72651dad27" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Out Run"/> + <dataarea name="flop" size="154624"> + <rom name="giants - out run (1988)(u.s. gold)(disk 1 of 3 side b).dsk" size="154624" crc="e55f2a26" sha1="296cc4091571beb20dbea551adaf7a53e13214a2" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Side A: 720 Degrees + Rolling Thunder"/> + <dataarea name="flop" size="194816"> + <rom name="giants - 720 degrees + rolling thunder (1988)(u.s. gold)(disk 2 of 3 side a).dsk" size="194816" crc="f2ded21e" sha1="055f552e55fc5d2d698f9a17c6524cf8a21d2614" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Side B: Gauntlet II"/> + <dataarea name="flop" size="174336"> + <rom name="giants - gauntlet ii (1988)(u.s. gold)(disk 2 of 3 side b).dsk" size="174336" crc="34f085e5" sha1="f15d5d0f21192a7d3e8881b20fcf26b63a93173e" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3"> + <feature name="part_id" value="Side A: California Games"/> + <dataarea name="flop" size="182016"> + <rom name="giants - california games (1988)(u.s. gold)(disk 3 of 3 side a).dsk" size="182016" crc="345824a9" sha1="d071db70eca434477322f6b105cc7830f2892f73" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3"> + <feature name="part_id" value="Side B: California Games"/> + <dataarea name="flop" size="182528"> + <rom name="giants - california games (1988)(u.s. gold)(disk 3 of 3 side b).dsk" size="182528" crc="3b596738" sha1="2333a2612b1dbd633dadaba41c5c058bcf52e8ba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="goldsibr"> + <description>Gold, Silver, Bronze</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Summer Games"/> + <dataarea name="flop" size="184576"> + <rom name="gold, silver, bronze (1988)(u.s. gold)(side a).dsk" size="184576" crc="3034504a" sha1="f20baaf234c68f322d527d076aa837075127a935" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Summer Games"/> + <dataarea name="flop" size="180480"> + <rom name="gold, silver, bronze (1988)(u.s. gold)(side b).dsk" size="180480" crc="cd24812e" sha1="97dc0397ac86f4b46906c8191ef58e14502c442d" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Summer Games II"/> + <dataarea name="flop" size="194816"> + <rom name="gold, silver, bronze (1988)(u.s. gold)(side a)[a].dsk" size="194816" crc="0422099d" sha1="94fe94accdd84bb642a1563b3cac8226c7db39b9" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Summer Games II"/> + <dataarea name="flop" size="194816"> + <rom name="gold, silver, bronze (1988)(u.s. gold)(side b)[a].dsk" size="194816" crc="f69fca95" sha1="635179013ca325526e23a32623487342ae950fbb" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3"> + <feature name="part_id" value="Disk 3: Winter Games"/> + <dataarea name="flop" size="194816"> + <rom name="gold, silver, bronze (1988)(u.s. gold).dsk" size="194816" crc="046fe4f5" sha1="c19641545d22432e01c29c31c52770cad2d30566" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="grabbedb"> + <description>Grabbed by the Ghoulies + Helvera - Mistress of the Park</description> + <year>1993</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Grabbed by the Ghoulies"/> + <dataarea name="flop" size="195635"> + <rom name="grabbed by the ghoulies + helvera - mistress of the park (1993)(fsf adventures)(side a).dsk" size="195635" crc="e5e82113" sha1="5f5de7204497820d9bcd9c73b2f1deede108a884" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Helvera - Mistress of the Park"/> + <dataarea name="flop" size="195121"> + <rom name="grabbed by the ghoulies + helvera - mistress of the park (1993)(fsf adventures)(side b).dsk" size="195121" crc="c90726df" sha1="c08fd3e559823420f2dcc5d3b66f9671e0059da6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="granypeq"> + <description>Grandes y Pequenos</description> + <year>19??</year> + <publisher>DIMensionNEW</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="grandes y pequenos (19xx)(dimensionnew)(es)(side a).dsk" size="194816" crc="8abe3df8" sha1="ed8b86e3d88b262f6aa31164479455322929fe65" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="grandes y pequenos (19xx)(dimensionnew)(es)(side b).dsk" size="194816" crc="5a5169e4" sha1="43cfafaaef72f6a61b1478e1b01ee5994d824290" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hairytoe"> + <description>Hairy Toes</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Bored of the Rings"/> + <dataarea name="flop" size="194816"> + <rom name="hairy toes (1992)(zenobi)(side a).dsk" size="194816" crc="6a0bacb5" sha1="c0321b609e53b5ef1f66fa20e66b2f7d345d09c8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Boggit"/> + <dataarea name="flop" size="194816"> + <rom name="hairy toes (1992)(zenobi)(side b).dsk" size="194816" crc="c811fad1" sha1="35106e77a739ba31f8010e9184548f43949f24b0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="handfham"> + <description>A Handful of Hamsters</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Brian + Aunt Velma + Desmond and Gertrude"/> + <dataarea name="flop" size="194816"> + <rom name="handful of hamsters, a (1993)(zenobi)(side a).dsk" size="194816" crc="62b16c8a" sha1="5e3c6f208d65a2e444cee8f06f08d58e7ba9168a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Raymond Pringle + Larry the Lemming + Snow Joke + Star Flaws"/> + <dataarea name="flop" size="194816"> + <rom name="handful of hamsters, a (1993)(zenobi)(side b).dsk" size="194816" crc="4aa88009" sha1="45261509ddcc4eb4e3ce362f5ef55fa3182fded4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="heroes00"> + <description>Heroes - </description> + <year>1990</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: 007 - Licence to Kill"/> + <dataarea name="flop" size="194816"> + <rom name="heroes - 007 - licence to kill (1990)(domark)(disk 2 of 2 side a).dsk" size="194816" crc="bbed625c" sha1="dda1f24159aad33de62620f60ef38f818fa0ce2f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Star Wars"/> + <dataarea name="flop" size="194816"> + <rom name="heroes - star wars (1990)(domark)(disk 2 of 2 side b).dsk" size="194816" crc="1da0fe94" sha1="f8ae04e3682c642f49f77325441e33d22bb92e13" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Barbarian II - The Dungeon of Drax"/> + <dataarea name="flop" size="254720"> + <rom name="heroes - barbarian ii - the dungeon of drax (1990)(domark)(disk 1 of 2 side a).dsk" size="254720" crc="c5f59915" sha1="be8bb66b0865d1c3933a7bc5286a47e762a06014" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: The Running Man"/> + <dataarea name="flop" size="194816"> + <rom name="heroes - the running man (1990)(domark)(disk 1 of 2 side b).dsk" size="194816" crc="10b9030f" sha1="7fa7a664ef93308584e421fc8604491a06b05a2e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher1"> + <description>Javier Herrera Games Collection 01</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 01 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="8e88719c" sha1="c381aa7d50e6514908443e41a05bc3aa5f26c00b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 01 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="1b13630c" sha1="82b45efa805d60e83d20bbee193817e2163a6121" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher2"> + <description>Javier Herrera Games Collection 02</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 02 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="585d1e40" sha1="350a69050ffff673a2a3630c0cba133ac9407104" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 02 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="d6618660" sha1="112e207edb35fbe8ed8b2bd5cefdddcd320c1265" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher3"> + <description>Javier Herrera Games Collection 03</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 03 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="aee0e8fb" sha1="461a59555e7a356bb0f259ea581db875ed8c9b4e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 03 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="860f1ad5" sha1="41ee5ce0d8fc524a0fefc170787a3cc2c23ebfa6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher4"> + <description>Javier Herrera Games Collection 04</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 04 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="945a50e7" sha1="4f4d6a6b79b0663db941fcd00dc4b610227965f9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 04 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="f144360d" sha1="880e66995adaa86bf7af0e080813adf07dcc54dc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher5"> + <description>Javier Herrera Games Collection 05</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 05 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="fd15463f" sha1="8751b52e632326bf6a7d85a6452e1bc2015105b4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 05 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="9ea0fb52" sha1="dee8356f68826b6ced8a22a6d840b815422071c3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher6"> + <description>Javier Herrera Games Collection 06</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 06 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="ff05a19e" sha1="85e7e6c2f39dac4342565649cc1948a697188828" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="193792"> + <rom name="javier herrera games collection 06 (19xx)(herrera, javier)(side b).dsk" size="193792" crc="d129c849" sha1="6485512d6e32cc83e6db22050df1e231dfbbb3af" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher9"> + <description>Javier Herrera Games Collection 09</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 09 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="ad137e62" sha1="0f375a8287bd2f05efc5825549df01bfbc2024f7" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 09 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="b3fc35d5" sha1="8e24264fe8b7a5a53806798cde7e0d56dd232318" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="javher10"> + <description>Javier Herrera Games Collection 10</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Javier Herrera"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 10 (19xx)(herrera, javier)(side a).dsk" size="194816" crc="4a4d462b" sha1="d90d9c48e773e2b71dcc42a3755733e8ee00b876" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="javier herrera games collection 10 (19xx)(herrera, javier)(side b).dsk" size="194816" crc="639ba3f6" sha1="f342fa23801f4fc5c888f02d36eed9cb167a8871" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jennybd1"> + <description>Jenny's Big Disk Vol 1</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Behold Atlantis"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's big disk vol 1 (1991)(zenobi)(side a).dsk" size="194816" crc="04408dce" sha1="83e0bc202f3beaf6361c03cf8f8757f721e8b7d6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Eclipse"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's big disk vol 1 (1991)(zenobi)(side b).dsk" size="194816" crc="8aac5b2f" sha1="37e2f6f17b84bfeff83c8345918acec4a8a9e8cb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jennybd2"> + <description>Jenny's Big Disk Vol 2</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Lost Temple"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's big disk vol 2 (1990)(zenobi)(side a).dsk" size="194816" crc="0a4cb350" sha1="4a13aa3b24c9e385f95847f17d5d3321605d025a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Treasure of Santa Maria"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's big disk vol 2 (1990)(zenobi)(side b).dsk" size="194816" crc="4f3ae846" sha1="860b39e96eeae42c162a22f944466c0d9142ca0f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jenynbd1"> + <description>Jenny's Next Big Disk Vol 1</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Curse of Calutha"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's next big disk vol 1 (1991)(zenobi)(side a).dsk" size="194816" crc="79c7a85c" sha1="3978615fe5311f291d4c32ac43e45ff29fb7b615" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Legacy"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's next big disk vol 1 (1991)(zenobi)(side b).dsk" size="194816" crc="7989e4ce" sha1="2367c4d459fa34a35bb5022c15ce434a95f03baa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jenynbd2"> + <description>Jenny's Next Big Disk Vol 2</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Laskar's Crystals"/> + <dataarea name="flop" size="209408"> + <rom name="jenny's next big disk vol 2 (1992)(zenobi)(side a).dsk" size="209408" crc="6b291a87" sha1="b9737c023e7e9075d8b1941c893ea2c72b39516b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Marooned"/> + <dataarea name="flop" size="194816"> + <rom name="jenny's next big disk vol 2 (1992)(zenobi)(side b).dsk" size="194816" crc="93d0566d" sha1="b9a62b6ab72bb7e82aab610d34eff98f0ab54447" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jestej1"> + <description>Jesus Tejero Software Collection 01</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 01 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="6f866526" sha1="6f7ebd43e7fe846a327a52890ed109c758178f51" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 01 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="4a997a96" sha1="31e9604ba90626568bb2dd6f98ce65421adef904" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jestej2"> + <description>Jesus Tejero Software Collection 02</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 02 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="1c6b3879" sha1="d91a08044ac652626916fb8168747353fb872727" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 02 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="29908ccc" sha1="6261f8744f9588149043dfa1f163198a8d0a592f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jestej3"> + <description>Jesus Tejero Software Collection 03</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 03 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="3cd316b8" sha1="312e2cbe04be6d255ffa835ab8aee31281cc3169" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 03 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="f4bfd57c" sha1="3ecf16672b0d0232f390263fbb669212c4d1896d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jestej4"> + <description>Jesus Tejero Software Collection 04</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 04 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="9969a712" sha1="db44821a2215befb5829710822f7fbb8f6bba94d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 04 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="c67c7d7e" sha1="d6cdc08a7a3178c75d63ba9cbbae641189cf7d58" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jestej5"> + <description>Jesus Tejero Software Collection 05</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Jesus Tejero"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 05 (19xx)(tejero, jesus)(es)(side a).dsk" size="194816" crc="e0df9b47" sha1="1692adc48cc61d3d20c5c31fd5e428da18f36082" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jesus tejero software collection 05 (19xx)(tejero, jesus)(es)(side b).dsk" size="194816" crc="2f1b581b" sha1="dcee200454cd16508490922d7721bcb65040d6d4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jeweldar"> + <description>Jewels of Darkness</description> + <year>1986</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jewels of darkness (1986)(rainbird).dsk" size="194816" crc="1b1a7650" sha1="da619ff04356ce9ae0f22cf0eeabe2dc39aa918e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kidnafps"> + <description>Kidnapped + For Pete's Sake</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Kidnapped"/> + <dataarea name="flop" size="195121"> + <rom name="kidnapped + for pete's sake (1993)(zenobi)(side a).dsk" size="195121" crc="c88fcc08" sha1="5f9505b5ef2380314161b384e11eae243760b02f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: For Pete's Sake"/> + <dataarea name="flop" size="195635"> + <rom name="kidnapped + for pete's sake (1993)(zenobi)(side b).dsk" size="195635" crc="9c1af001" sha1="8a587d3745699a2547e6ccdf6007a344b03d21f5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="konaccol"> + <description>Konami's Arcade Collection</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Shao-Lin's Road + Jail Break + Nemesis"/> + <dataarea name="flop" size="214784"> + <rom name="konami's arcade collection - shao-lin's road + jail break + nemesis (1988)(imagine)(disk 1 of 2 side a).dsk" size="214784" crc="e7c46afe" sha1="385c2bf89c20de4180ff3a6f8043838c13f7eebe" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Hyper Sports + Mikie + Green Beret"/> + <dataarea name="flop" size="214784"> + <rom name="konami's arcade collection - hyper sports + mikie + green beret (1988)(imagine)(disk 1 of 2 side b).dsk" size="214784" crc="52ffd779" sha1="5d20442ae382b97f186c4c512e29104eb46b7a71" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Jackal + Yie Ar Kung-Fu"/> + <dataarea name="flop" size="214784"> + <rom name="konami's arcade collection - jackal + yie ar kung-fu (1988)(imagine)(disk 2 of 2 side a).dsk" size="214784" crc="8a0d2595" sha1="ce4b6b67d4256e66acbdcf2f1a0209d04d8fa239" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Konami's Ping Pong + Yie Ar Kung-Fu II"/> + <dataarea name="flop" size="214784"> + <rom name="konami's arcade collection - konami's ping pong + yie ar kung-fu ii (1988)(imagine)(disk 2 of 2 side b).dsk" size="214784" crc="e39e4c8c" sha1="2727cc2395a75f8b4c69a31e3dee44950a7d960a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="krazktgk"> + <description>Krazy Kartoonist Kaper + The Grue-Knapped</description> + <year>1991</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Krazy Kartoonist Kaper"/> + <dataarea name="flop" size="194816"> + <rom name="krazy kartoonist kaper + grue-knapped, the (1991)(fsf adventures)(side a).dsk" size="194816" crc="1712580c" sha1="7b563696bd077c2a1c8865c91a20d4f243fa5fb7" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Grue-Knapped"/> + <dataarea name="flop" size="194816"> + <rom name="krazy kartoonist kaper + grue-knapped, the (1991)(fsf adventures)(side b).dsk" size="194816" crc="7599ce82" sha1="6eb40c49ce89f42bf7aeb00328cdbacfe7b9ce75" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lotbdsks"> + <description>Last of the Big Disks</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Kidnapped + Celtic Carnage + Personal Computer Whirled"/> + <dataarea name="flop" size="194816"> + <rom name="last of the big disks - kidnapped + celtic carnage + personal computer whirled (1993)(zenobi)(side a).dsk" size="194816" crc="9054eae2" sha1="a40ff8b4710c7d9854183a7bce222138336bcf72" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Microfair Madness + The Search for Smok"/> + <dataarea name="flop" size="194816"> + <rom name="last of the big disks - microfair madness + the search for smok (1993)(zenobi)(side b).dsk" size="194816" crc="e1f5c23f" sha1="8d9ce5f5105e868a5615d8621f865a4433a2798a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="leadboa3"> + <description>Leader Board Par 3</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Leaderboard + Leaderboard Tournament"/> + <dataarea name="flop" size="194816"> + <rom name="leader board par 3 - leaderboard + leaderboard tournament (1988)(u.s. gold)(disk 1 of 2).dsk" size="194816" crc="ce7bb0b9" sha1="146ad94cd850568ce94303f602b3cbb6ccbf16e6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: World Class Leaderboard"/> + <dataarea name="flop" size="194816"> + <rom name="leader board par 3 - world class leaderboard (1988)(u.s. gold)(disk 2 of 2 side a).dsk" size="194816" crc="7796b0f6" sha1="428894e7cb23fb9702c0a3db0c7692ce3e7079e0" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: World Class Leaderboard"/> + <dataarea name="flop" size="194816"> + <rom name="leader board par 3 - world class leaderboard (1988)(u.s. gold)(disk 2 of 2 side b).dsk" size="194816" crc="b9ef96d2" sha1="903b9a18cecfdfe20413ee6c11edc18e14e920fa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="liveammo"> + <description>Live Ammo</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Green Beret + Top Gun + Rambo"/> + <dataarea name="flop" size="194560"> + <rom name="live ammo - green beret + top gun + rambo (1987)(ocean)(side a)[aka live action].dsk" size="194560" crc="f20462e2" sha1="246756c5264e80b907edb78333ecde2c3f2b0aca" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Great Escape + Army Moves"/> + <dataarea name="flop" size="194560"> + <rom name="live ammo - the great escape + army moves (1987)(ocean)(side b)[aka live action].dsk" size="194560" crc="09dac59c" sha1="aa79dd1cf0b013806403bd4be1e4879653a77d9f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="liveammoa" cloneof="liveammo"> + <description>Live Ammo - Green Beret + Top Gun + Rambo (alt)</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Green Beret + Top Gun + Rambo"/> + <dataarea name="flop" size="194560"> + <rom name="live ammo - green beret + top gun + rambo (1987)(ocean)(side a)[a][aka live action].dsk" size="194560" crc="3d3499d5" sha1="83fd130baf796cfdd318d46dfdf2f80c007166b8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Great Escape + Army Moves"/> + <dataarea name="flop" size="194560"> + <rom name="live ammo - the great escape + army moves (1987)(ocean)(side b)[a][aka live action].dsk" size="194560" crc="438bc244" sha1="7b42af186c1a92af69d9622bfc136f9bf97ac09e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lomejdin"> + <description>Lo Mejor de Dinamic</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Game Over + Freddy Hardest + Fernando Martin Basket Master"/> + <dataarea name="flop" size="209408"> + <rom name="lo mejor de dinamic - game over + freddy hardest + fernando martin basket master (1988)(dinamic)(es)(side a).dsk" size="209408" crc="e09dc659" sha1="50a6deae79be0b167f631b3292cdccf335d9a60c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Army Moves + Phantis + Turbo Girl"/> + <dataarea name="flop" size="204032"> + <rom name="lo mejor de dinamic - army moves + phantis + turbo girl (1988)(dinamic)(es)(side b).dsk" size="204032" crc="0c247f68" sha1="7ba19c5aae87c90b5f256ac7b43d8bc30bbd19e6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="loflaur1"> + <description>Loads of Laurence Vol. 1</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: There's a Bomb Under Parliament + The Mummy's Crypt"/> + <dataarea name="flop" size="194816"> + <rom name="loads of laurence vol. 1 - there's a bomb under parliament + the mummy's crypt (1996)(zenobi)(side a).dsk" size="194816" crc="7c9ca040" sha1="9d95b6480e0f94519fff6f2d30a5a6ae6eaa7a7a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Beyond El Dorado + The Bermuda Triangle + Impact"/> + <dataarea name="flop" size="194816"> + <rom name="loads of laurence vol. 1 - beyond el dorado + the bermuda triangle + impact (1996)(zenobi)(side b).dsk" size="194816" crc="5c8c90d5" sha1="0ad23b937ec441268818f9b5529d1105de599a2d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="loflaur2"> + <description>Loads of Laurence Vol. 2</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Golden Pyramid + Lost in Time + Meltdown"/> + <dataarea name="flop" size="194816"> + <rom name="loads of laurence vol. 2 - the golden pyramid + lost in time + meltdown (1996)(zenobi)(side a).dsk" size="194816" crc="95bd5549" sha1="45849d538278b00c634b71c317fb54d6ce6496aa" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Flameout + The Well of Zol"/> + <dataarea name="flop" size="194816"> + <rom name="loads of laurence vol. 2 - flameout + the well of zol (1996)(zenobi)(side b).dsk" size="194816" crc="5e88127c" sha1="56da25c5b55a4039c3cf48aceea2704cff76b7e7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="mknitrila" cloneof="mknitril"> + <description>Magic Knight Trilogy (alt)</description> + <year>1988</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Finders Keepers + Spellbound"/> + <dataarea name="flop" size="194816"> + <rom name="magic knight trilogy - finders keepers + spellbound (1988)(mastertronic)(side a).dsk" size="194816" crc="f1964316" sha1="b080d54460e7ca6c9fa7b9445245c3df95fd83cf" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Knight Tyme"/> + <dataarea name="flop" size="194816"> + <rom name="magic knight trilogy - knight tyme (1988)(mastertronic)(side b).dsk" size="194816" crc="53b5b3ac" sha1="9c639201488a6736ad4c2a1b862acfab67ca0cd9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="magnsevn"> + <description>The Magnificent Seven</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Wizball + Arkanoid + Yie Ar Kung-Fu + Short Circuit"/> + <dataarea name="flop" size="215291"> + <rom name="magnificent seven, the (1987)(ocean)(side a)[aka magnificent 7, the].dsk" size="215291" crc="f5ca67aa" sha1="327cc32f56285c0ae863178af05637c081c782b3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Frankie Goes to Hollywood + Head over Heels + The Great Escape + Cobra"/> + <dataarea name="flop" size="215291"> + <rom name="magnificent seven, the (1987)(ocean)(side b)[aka magnificent 7, the].dsk" size="215291" crc="db67ff77" sha1="3d2a91462691614a02e09695ab0c4f283cbb31ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mastrcd4"> + <description>Mastertronic +3 Compilation Disk 4</description> + <year>19??</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Angleball + Kikstart 2 + Knight Tyme + Stormbringer"/> + <dataarea name="flop" size="194816"> + <rom name="mastertronic +3 compilation disk 4 - angleball + kikstart 2 + knight tyme + stormbringer (19xx)(mastertronic)(side a).dsk" size="194816" crc="ded9efb7" sha1="7ee82cbfc69d7f86561eba6cc1c0d705340995eb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Amaurote + The Curse of Sherwood + Milk Race + Speed King 2"/> + <dataarea name="flop" size="194816"> + <rom name="mastertronic +3 compilation disk 4 - amaurote + the curse of sherwood + milk race + speed king 2 (19xx)(mastertronic)(side b).dsk" size="194816" crc="d5f7d3fb" sha1="862e454932feb9072a8f6dbb1f13761d3135b4d1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mega4"> + <description>Mega 4</description> + <year>1991</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Gremlins 2"/> + <dataarea name="flop" size="194816"> + <rom name="mega 4 (1991)(topo soft)(es)(disk 1 of 2 side a).dsk" size="194816" crc="13c2370e" sha1="8188fee3a09fba1cf6323dc8868990a71679b19a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Lorna"/> + <dataarea name="flop" size="194816"> + <rom name="mega 4 (1991)(topo soft)(es)(disk 1 of 2 side b).dsk" size="194816" crc="621f53be" sha1="857d0f6d468b5a719379d737899e061c4a9773bc" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Zona 0"/> + <dataarea name="flop" size="97536"> + <rom name="mega 4 (1991)(topo soft)(es)(disk 2 of 2 side a).dsk" size="97536" crc="3e04c21b" sha1="9b6fab5fbc5c92ecd615061fbde7d29122a98d85" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: La Espada Sagrada"/> + <dataarea name="flop" size="121856"> + <rom name="mega 4 (1991)(topo soft)(es)(disk 2 of 2 side b).dsk" size="121856" crc="586fb225" sha1="063b2857c8330c0fb959871cc6452aaf7c9d13b4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="megabox"> + <description>Mega Box</description> + <year>1991</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Narco Police"/> + <dataarea name="flop" size="131584"> + <rom name="mega box - narco police (1991)(dinamic)(es)(en)(side a).dsk" size="131584" crc="4fc97365" sha1="cdb281bcfb2e7889bbf618c3c62c87eb297a034c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: After the War + Navy Moves"/> + <dataarea name="flop" size="214784"> + <rom name="mega box - after the war + navy moves (1991)(dinamic)(es)(en)(side b).dsk" size="214784" crc="07764790" sha1="1bcb904cb152cb1d20f0aed7e5b7a231d2ba8f56" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Satan + Astro Marine Corps"/> + <dataarea name="flop" size="214784"> + <rom name="mega box - satan + astro marine corps (1991)(dinamic)(es)(side a).dsk" size="214784" crc="ee89887d" sha1="6f496382613dbebfd3f039cbe065ce90a806d4ac" offset="0" /> + </dataarea> + </part> +<!-- Disk 2 Side B seems to contain an unreadable copy of Disk 2 Side A. Needs investigation. --> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Satan + Astro Marine Corps"/> + <dataarea name="flop" size="212736"> + <rom name="mega box - satan + astro marine corps (1991)(dinamic)(es)(en)(side b).dsk" size="212736" crc="28a2d57c" sha1="96585c649730dc6434bd3c766b9e68212da0c3c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="metalact"> + <description>Metal Action</description> + <year>1990</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: After the War + La Aventura Original + Satan I"/> + <dataarea name="flop" size="214784"> + <rom name="metal action - after the war + la aventura original + satan i (1990)(dinamic)(es)(side a).dsk" size="214784" crc="a4816646" sha1="0ba180abcc0f621fa68a722d0d188b7419ed8a9f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Astro Marine Corps + Freddy Hardest in South Manhattan + Satan II"/> + <dataarea name="flop" size="198656"> + <rom name="metal action - astro marine corps + freddy hardest in south manhattan + satan ii (1990)(dinamic)(es)(side b).dsk" size="198656" crc="746623a9" sha1="6ed5887945c1a642f0aef96d3902210026a8104e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="micbyte1"> + <description>MicroByte - Serie Clasicos Spectrum 01</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Miguel"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="microbyte - serie clasicos spectrum 01 (19xx)(miguel)(es).dsk" size="194816" crc="4ab75f4d" sha1="953eed11249c00d7696e2db3b180096b735dceb1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="micbyte2"> + <description>MicroByte - Serie Clasicos Spectrum 02</description> + <year>19??</year> + <publisher><homebrew></publisher> + <info name="author" value="Miguel"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="microbyte - serie clasicos spectrum 02 (19xx)(miguel)(es).dsk" size="194816" crc="c1553807" sha1="8843a77e66ff399ff5900f5bc64dd597af3dab72" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="micfmadp"> + <description>Microfair Madness Plus</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="microfair madness plus - desmond and gertrude + microfair madness + the search for smok (1991)(zenobi).dsk" size="194816" crc="4b9fd5ad" sha1="dd0ec9b23350e5b32f50d074f0e386bd68b5e765" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mvalue6p"> + <description>Microvalue 6 Pack</description> + <year>1987</year> + <publisher>Tynesoft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Colin the Cleaner + Mutations + Ian Botham's Test Match"/> + <dataarea name="flop" size="194816"> + <rom name="microvalue 6 pack - colin the cleaner + mutations + ian botham's test match (1987)(tynesoft)(side a).dsk" size="194816" crc="1273d5d2" sha1="ad7fc5d1ea26131b5cb209b256c53ae9036fbdfb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Pyjamarama + Big Bad John + Automania"/> + <dataarea name="flop" size="194816"> + <rom name="microvalue 6 pack - pyjamarama + big bad john + automania (1987)(tynesoft)(side b).dsk" size="194816" crc="4e478bb2" sha1="55b49d95a739889bb20e7fd0f0733a5a0283e559" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mindstre"> + <description>Mind-Stretchers</description> + <year>1990</year> + <publisher>Virgin Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="165376"> + <rom name="mind-stretchers (1990)(virgin mastertronic).dsk" size="165376" crc="9d54d0a4" sha1="45d1239a649777556ca4833cb2c195a5104d4a6a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mond2014"> + <description>Monty Designs 2014</description> + <year>2014</year> + <publisher>PixelSoftware</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="monty designs 2014 - androide + genehtik + bluber (2014)(pixelsoftware).dsk" size="194816" crc="0f487f70" sha1="ec84a660b9535a91ae5201e11c638c24ad31a53b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="multispo"> + <description>Multi Sports</description> + <year>1991</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Basket Master + Aspar GP Master + Simulador Profesional de Tenis"/> + <dataarea name="flop" size="144896"> + <rom name="multi sports (1991)(dinamic)(es)(en)(side a).dsk" size="144896" crc="882d9c98" sha1="91c6c6976cf7e583b9fb13207cd334bbd383fea5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Michel Futbol Master + Michel Super Skills + Choy-Lee-Fut Kung-Fu Warrior"/> + <dataarea name="flop" size="144896"> + <rom name="multi sports (1991)(dinamic)(es)(en)(side b).dsk" size="144896" crc="916b49ac" sha1="d6e71b8e68931c72d85568f36bc64200524996c0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="nopehiao"> + <description>Nope Here's Another One</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Diarmid I + For Pete's Sake"/> + <dataarea name="flop" size="194816"> + <rom name="nope here's another one - diarmid i + for pete's sake (1993)(zenobi)(side a).dsk" size="194816" crc="342d58d2" sha1="b7c2a37498809be13e0d58a9463080d2436ade3b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Diarmid II + The Krazy Kartoonist Kaper"/> + <dataarea name="flop" size="194816"> + <rom name="nope here's another one - diarmid ii + the krazy kartoonist kaper (1993)(zenobi)(side b).dsk" size="194816" crc="5804ef65" sha1="b8be1f38c41493df3622d1ef5627f4c9fe7e0cb9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="notanobd"> + <description>Not Another Big Disk</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Fisher King + Darkest Road II - 'Twas a Time of Dread"/> + <dataarea name="flop" size="194816"> + <rom name="not another big disk - the fisher king + darkest road ii - 'twas a time of dread (1992)(zenobi)(side a).dsk" size="194816" crc="d51a0966" sha1="06480040fb39f7f48f58ade714017f63d458057a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Treasure Island + Arnold the Adventurer II"/> + <dataarea name="flop" size="194816"> + <rom name="not another big disk - treasure island + arnold the adventurer ii (1992)(zenobi)(side b).dsk" size="194816" crc="deb41208" sha1="9a4a2e6e977961bf9514616bf3005d177c8c893d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ohshiabd"> + <description>Oh Sh1t Another Big Disk</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Project Nova + Arnold the Adventurer III"/> + <dataarea name="flop" size="194816"> + <rom name="oh sh1t another big disk - project nova + arnold the adventurer iii (1993)(zenobi)(side a).dsk" size="194816" crc="5ec6066b" sha1="56f1bceab442a54b1e06dea2830f057de66c0e6e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Beginning of the End + The Escaping Habit"/> + <dataarea name="flop" size="194816"> + <rom name="oh sh1t another big disk - the beginning of the end + the escaping habit (1993)(zenobi)(side b).dsk" size="194816" crc="df3103e8" sha1="a57f6399d1c0b1b5addf2f701f08158ad1c4679a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="onemorbd"> + <description>One More Big Disk</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Violator of Voodoo + The Amulet of Darath + The Taxman Cometh"/> + <dataarea name="flop" size="194816"> + <rom name="one more big disk - the violator of voodoo + the amulet of darath + the taxman cometh (1992)(zenobi)(side a).dsk" size="194816" crc="996dd6e0" sha1="e2e4fd9e90538c44471c96c1ca583d6b7af1333a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Jester's Jaunt"/> + <dataarea name="flop" size="194816"> + <rom name="one more big disk - jester's jaunt (1992)(zenobi)(side b).dsk" size="194816" crc="a496001a" sha1="15faf116f3ca52dc97b9328edd6009e7af479d9e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Both sides contain the same games, dumps are only slightly different by the end --> + <software name="operast1"> + <description>Opera Storys 1</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="216064"> + <rom name="opera storys 1 (1989)(opera soft)(es)(side a).dsk" size="216064" crc="7a89187f" sha1="9e017d666630e69509aa7ab03815eab2e1502d32" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="216064"> + <rom name="opera storys 1 (1989)(opera soft)(es)(side b).dsk" size="216064" crc="b11259cc" sha1="7281fa2272fc5700b895ee29686fd7149e1aba6f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="operassp"> + <description>Opera Super Sports</description> + <year>19??</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Mundial de Futbol + Golden Basket (loader) + Poli Diaz + Jai Alai"/> + <dataarea name="flop" size="214784"> + <rom name="opera super sports (19xx)(opera soft)(es)(side a).dsk" size="214784" crc="eb287d3f" sha1="aebe8ec2ee88e4aa664d63284e5fa98a66e9d177" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Angel Nieto Pole 5002 + Golden Basket (data)"/> + <dataarea name="flop" size="214784"> + <rom name="opera super sports (19xx)(opera soft)(es)(side b).dsk" size="214784" crc="eacde44f" sha1="c2e9d1799a793f2de39228175f14aa55fb3f61ac" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pawsft1"> + <description>PAWS for Thought Vol 1</description> + <year>1992</year> + <publisher>The Guild</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Corya + Alstrad"/> + <dataarea name="flop" size="195635"> + <rom name="paws for thought vol 1 (1992)(guild, the)(side a).dsk" size="195635" crc="361231f8" sha1="d3d61af659680843920ad342288c0408549a19b4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Last Believer + Dungeon of Torgar"/> + <dataarea name="flop" size="195635"> + <rom name="paws for thought vol 1 (1992)(guild, the)(side b).dsk" size="195635" crc="6c2c4196" sha1="a8efbc00354b08fe8f1ebe44b1ba972f1ea6983d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pawsft2"> + <description>PAWS for Thought Vol 2</description> + <year>1992</year> + <publisher>The Guild</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Deathbringer + Arlene"/> + <dataarea name="flop" size="195635"> + <rom name="paws for thought vol 2 (1992)(guild, the)(side a).dsk" size="195635" crc="9d90f497" sha1="16b1425b020746176ef6e08d8e40c60984bc36f2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Teacher Trouble + The Calling"/> + <dataarea name="flop" size="195635"> + <rom name="paws for thought vol 2 (1992)(guild, the)(side b).dsk" size="195635" crc="f90a2db5" sha1="fd2dcfc0ab5562f44de5c7345691f5c295760aa9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pawsft3"> + <description>PAWS for Thought Vol 3</description> + <year>1992</year> + <publisher>The Guild</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Homicide Hotel + Theseus"/> + <dataarea name="flop" size="195635"> + <rom name="paws for thought vol 3 (1992)(guild, the)(side a).dsk" size="195635" crc="c7dfcdcc" sha1="a433d4e42cc6909e15ac5547e4cdbbae1458d934" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Island + Holiday"/> + <dataarea name="flop" size="195635"> + <rom name="paws for thought vol 3 (1992)(guild, the)(side b).dsk" size="195635" crc="71642671" sha1="43289904235edca1c2684a09a5bebe5ff5d86c39" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pdtape02"> + <description>PD Tape 02 - +3 Utilities</description> + <year>1990</year> + <publisher>B.G. Services</publisher> + <info name="usage" value="Side B requires Locomotive CP/M+" /> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: PLUS 3 DOS files"/> + <dataarea name="flop" size="194816"> + <rom name="pd tape 02 - +3 utilities (1990)(b.g. services)(disk 2 of 2 side a).dsk" size="194816" crc="86251c16" sha1="a0b48e8d1928fb1d0899324bf47f9be72fb7bf63" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: CP/M+ Files"/> + <dataarea name="flop" size="194816"> + <rom name="pd tape 02 - +3 utilities (1990)(b.g. services)(disk 2 of 2 side b).dsk" size="194816" crc="867839c6" sha1="3f037b776102b492bf9c265381c75bbfc70aca35" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="packferp"> + <description>Pack Ferpecto</description> + <year>2005</year> + <publisher>Compiler</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pack ferpecto (2005)(compiler)(es).dsk" size="194816" crc="749e3227" sha1="d884a32faa1d1675add8a130137a51fe34a81705" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="packrsp3"> + <description>Pack Regalo Sinclair +3</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Game Over + Phantomas 1 + Phantomas 2"/> + <dataarea name="flop" size="187904"> + <rom name="pack regalo sinclair +3 - game over + phantomas 1 + phantomas 2 (1988)(dinamic)(es)(side a).dsk" size="187904" crc="9c6d116f" sha1="a3d239bbfbb69c8dceb4e243a8a460e726337efc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Army Moves + Camelot Warriors + Nonamed"/> + <dataarea name="flop" size="171776"> + <rom name="pack regalo sinclair +3 - army moves + camelot warriors + nonamed (1988)(dinamic)(es)(side b).dsk" size="171776" crc="a675fb82" sha1="a5c2bf0df0f4148e53c134c0a2c85f60fb715f3f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="packrsp3a" cloneof="packrsp3"> + <description>Pack Regalo Sinclair +3 (alt)</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Game Over + Phantomas 1 + Phantomas 2"/> + <dataarea name="flop" size="187904"> + <rom name="pack regalo sinclair +3 - game over + phantomas 1 + phantomas 2 (1988)(dinamic)(es).dsk" size="187904" crc="81631cfc" sha1="f92ba195c4a203d72238345f4e65af0b413a9415" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Army Moves + Camelot Warriors + Nonamed"/> + <dataarea name="flop" size="171776"> + <rom name="pack regalo sinclair +3 - army moves + camelot warriors + nonamed (1988)(dinamic)(es).dsk" size="171776" crc="ae1ed918" sha1="88f81d0239badb23d3cd4349e7696cbae6005cea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pwmer1com"> + <description>Paul Woakes' Mercenary 1 Compendium</description> + <year>1988</year> + <publisher>Novagen</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="216315"> + <rom name="paul woakes' mercenary 1 compendium (1988)(novagen).dsk" size="216315" crc="2daacafe" sha1="064076b6a8675b75104c7510f98601f49633feec" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="picknmix"> + <description>Pick'n'Mix</description> + <year>1991</year> + <publisher>The Adventure Workshop</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Base + Dungeon of Torgar"/> + <dataarea name="flop" size="195635"> + <rom name="pick'n'mix (1991)(adventure workshop, the)(side a).dsk" size="195635" crc="79b92a8d" sha1="7ac9fe89f40750d7709c474b42daeb5a923b4ca8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Calling + Holiday to Remember"/> + <dataarea name="flop" size="195635"> + <rom name="pick'n'mix (1991)(adventure workshop, the)(side b).dsk" size="195635" crc="ba2e4d61" sha1="5ee01291528bdcc2e26a1c8defc96a3234533bba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="pirate33a" cloneof="pirate33"> + <description>Pirate 3 +3 (alt)</description> + <year>1987</year> + <publisher>Pirate Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pirate 3 +3 - smash out + call me psycho + holiday in sumaria (1987)(pirate).dsk" size="194816" crc="c9c2142f" sha1="9ae3faaa820eceb282dde70c7a22117747a1c36b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3adv"> + <description>Plus 3 Adventures</description> + <year>1988</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Kobyashi Naru + Shard of Inovar"/> + <dataarea name="flop" size="199936"> + <rom name="plus 3 adventures - kobyashi naru + shard of inovar (1988)(mastertronic)(side a).dsk" size="199936" crc="6612191f" sha1="f56779d29f6fbb238f1bd69b685c8ea13a5730e8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Venom"/> + <dataarea name="flop" size="199936"> + <rom name="plus 3 adventures - venom (1988)(mastertronic)(side b).dsk" size="199936" crc="49f53b53" sha1="ea5bebbebaf165c58f0d378907a54526d3b6bf39" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3arc"> + <description>Plus 3 Arcade</description> + <year>1987</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Motos + Angleball"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 arcade - motos + angleball (1987)(mastertronic)(side a).dsk" size="194816" crc="50f0bfdc" sha1="2be49f0b518cd990a13131d17700a875597b01ea" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Bosconian '87"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 arcade - bosconian '87 (1987)(mastertronic)(side b).dsk" size="194816" crc="d1152f1f" sha1="9cb5b8dde020cf2a105be79ed24c4c50f143d9f1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3bik"> + <description>Plus 3 Biker</description> + <year>1987</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Action Biker + Milk Race"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 biker - action biker + milk race (1987)(mastertronic)(side a).dsk" size="194816" crc="d0a57894" sha1="38ca1b5653aa42dbb31cd38ae8a333fabb35b34f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Kikstart 2"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 biker - kikstart 2 (1987)(mastertronic)(side b).dsk" size="194816" crc="020d9c6a" sha1="6c9ed10a84c94bafc2cf543045deb0d9bba66d6d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3hit"> + <description>Plus 3 Hits</description> + <year>1987</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Amaurote + Hyperbowl"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 hits - amaurote + hyperbowl (1987)(mastertronic)(side a).dsk" size="194816" crc="3167db93" sha1="88c9e14e4e25530eae7072fbaa0bcfc550e4ab8d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Feud"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 hits - feud (1987)(mastertronic)(side b).dsk" size="194816" crc="985ff5d6" sha1="d19770ab6ce95e66cb81fcd6010ab009dd61cf69" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3pac"> + <description>Plus 3 Pack</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Krakout + Future Knight"/> + <dataarea name="flop" size="174848"> + <rom name="plus 3 pack - krakout + future knight (1987)(gremlin graphics)(side a).dsk" size="174848" crc="7ef38f33" sha1="cf62819033a9950c6b6a11c3e8c912de09e8045f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Bounder + Thing Bounces Back"/> + <dataarea name="flop" size="174848"> + <rom name="plus 3 pack - bounder + thing bounces back (1987)(gremlin graphics)(side b).dsk" size="174848" crc="e94a2db9" sha1="3deeae0c924d2c39ce4b91a9b6d2ab0a85903fad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3pad"> + <description>Plus 3 Pack (Dinamic)</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Game Over + Fernando Martin Basket Master"/> + <dataarea name="flop" size="144384"> + <rom name="plus 3 pack (1988)(dinamic)(es)(side a).dsk" size="144384" crc="895d2e1c" sha1="ce2fcfe0f9cc72a22025fb7a979fec5695fea506" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Army Moves + Don Quijote"/> + <dataarea name="flop" size="174848"> + <rom name="plus 3 pack (1988)(dinamic)(es)(en)(side b).dsk" size="174848" crc="827bed18" sha1="679fe04d41185da84b586f9a3b9a1a2526b84827" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3spo"> + <description>Plus 3 Sports</description> + <year>1987</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Strike + Bump, Set, Spike!"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 sports - strike (1987)(mastertronic)(side a).dsk" size="194816" crc="3ca3f142" sha1="dfaf7bb837087a04b993fa83a45471177e91be4f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Speed King 2"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 sports - speed king 2 (1987)(mastertronic)(side b).dsk" size="194816" crc="2519315e" sha1="ae1f1e21969fec88305fc9200eae5b288d711739" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="plus3spoa" cloneof="plus3spo"> + <description>Plus 3 Sports (alt)</description> + <year>1987</year> + <publisher>Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Strike + Bump, Set, Spike!"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 sports - strike (1987)(mastertronic).dsk" size="194816" crc="00518e1e" sha1="0e4e653ac7408039aeb711ecb08518504c9d6bb9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Speed King 2"/> + <dataarea name="flop" size="194816"> + <rom name="plus 3 sports - speed king 2 (1987)(mastertronic).dsk" size="194816" crc="19eb4e02" sha1="8c9b17e2456f262e3b1e8a4a8ac26aaca5d5a6eb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="powerspo"> + <description>Powersports</description> + <year>1991</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Carlos Sainz + Paris-Dakar"/> + <dataarea name="flop" size="194816"> + <rom name="powersports - carlos sainz + paris-dakar (1991)(zigurat)(es)(side a).dsk" size="194816" crc="b8fb3307" sha1="1ac6ff52fdd5d0901d0a7ec191e2c60f82a91bea" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Sito Pons 500cc Grand Prix + Emilio Sanchez Vicario Grand Slam"/> + <dataarea name="flop" size="121856"> + <rom name="powersports - sito pons 500cc grand prix + emilio sanchez vicario grand slam (1991)(zigurat)(es)(side b).dsk" size="121856" crc="e0771590" sha1="27f0a8abab611c6878487c426a4368ae9afdf9ca" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="probtlbd"> + <description>Probably the Last Big Disk</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Perseus + The Final Demand"/> + <dataarea name="flop" size="194816"> + <rom name="probably the last big disk - perseus + the final demand (1995)(zenobi)(side b).dsk" size="194816" crc="262d29dc" sha1="e50a166d1e20c6467043617d04f5dfd02619b11d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Apprentice + Theme Park U.S.A."/> + <dataarea name="flop" size="194816"> + <rom name="probably the last big disk - the apprentice + theme park u.s.a. (1995)(zenobi)(side a).dsk" size="194816" crc="e680e164" sha1="cd569d82b45a39aaabf19fe23334240f103d4005" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="prjnbote"> + <description>Project Nova + Beginning of the End</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Project Nova"/> + <dataarea name="flop" size="194816"> + <rom name="project nova + beginning of the end (19xx)(zenobi)(side a).dsk" size="194816" crc="e0c08b0c" sha1="97a6120b38d307cd7eb36ff1dbb117654aef300e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Beginning of the End"/> + <dataarea name="flop" size="194816"> + <rom name="project nova + beginning of the end (19xx)(zenobi)(side b).dsk" size="194816" crc="2b0923c7" sha1="e23ff51da1ad4901af6dcaa5050910dd0d56c4d5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="readrap2"> + <description>Read-Right-Away: Reading Pack 2</description> + <year>1987</year> + <publisher>H.S.</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="read-right-away - reading pack 2 (1987)(h.s.).dsk" size="194816" crc="94d5b7f0" sha1="238845d4cf14b7ffea27831993f05daf6842b42b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="reptonmn"> + <description>Repton Mania</description> + <year>1989</year> + <publisher>Superior Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="254720"> + <rom name="repton mania - repton 1 + 2 (1989)(superior).dsk" size="254720" crc="2ed24adb" sha1="c452b252272ba4ebb7c509c6a7358b867df94c64" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="runbrspc"> + <description>Run, Bronwynn, Run + The Spectre of Castle Coris</description> + <year>1992</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Run, Bronwynn, Run"/> + <dataarea name="flop" size="195635"> + <rom name="run, bronwynn, run + spectre of castle coris, the (1992)(fsf adventures)(side a).dsk" size="195635" crc="690f1e91" sha1="c7a2ae6d0926f1ccc540ad44f765f7dddee8a62b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Spectre of Castle Coris"/> + <dataarea name="flop" size="195635"> + <rom name="run, bronwynn, run + spectre of castle coris, the (1992)(fsf adventures)(side b).dsk" size="195635" crc="833809c9" sha1="cf69a93b96cea22bd13076e087a1e92702b2dc8f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sp5"> + <description>SP5</description> + <year>1992</year> + <publisher>Kobrahsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194048"> + <rom name="sp5 (1992)(kobrahsoft).dsk" size="194048" crc="41dad7b5" sha1="04cedbe1d9b8fb966e20db0da87c478d6649f07e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="srsgames"> + <description>SRS Games Disc</description> + <year>1988</year> + <publisher>Steam Railway Simulations</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="srs games disc (1988)(steam railway simulations).dsk" size="194816" crc="0d6897ae" sha1="ed569e9a9685116e057533192b78b457dad8ece5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="samuahos"> + <description>Sam's Un-Excellent Adventure + The Hospital</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sam's un-excellent adventure + the hospital - sam's un-excellent adventure (1994)(zenobi).dsk" size="194816" crc="c4293106" sha1="de58f5aaa5be5a3af953068b179e9b8fb72377bd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="shootdska" cloneof="shootdsk"> + <description>Shootacular Disk 2 (alt)</description> + <year>1988</year> + <publisher>Alternative Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195328"> + <rom name="shootacular disk 2 (1988)(alternative).dsk" size="195328" crc="ce79b362" sha1="2eef6ecdc55ebb3fb5bd2550470b8435cdab4c07" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="silicond"> + <description>Silicon Dreams</description> + <year>1986</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="silicon dreams - snowball + return to eden + the worm in paradise (1986)(rainbird).dsk" size="194816" crc="eae38e7d" sha1="f2ffd2fd60696a38c2a2f9fbd4638cf154de8db9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sincactp"> + <description>Sinclair Action Pack - Lightgun Games</description> + <year>1989</year> + <publisher>Sinclair Research</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Missile Ground Zero + Solar Invasion"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair action pack - lightgun games - lightgun games - missile ground zero + solar invasion (1989)(virgin mastertronic)(side a)[lightgun].dsk" size="194816" crc="8c3be2fa" sha1="1580bfde74955b629b2c4e3cbe4ccc524fec9f80" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Rookie + Robot Attack + Bullseye"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair action pack - lightgun games - lightgun games - rookie + robot attack + bullseye (1989)(virgin mastertronic)(side b)[lightgun].dsk" size="194816" crc="e706c6db" sha1="366a7b2b04a44007a3254fc0618ceb0d9df70e72" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sincactpa" cloneof="sincactp"> + <description>Sinclair Action Pack - Lightgun Games (re-release)</description> + <year>1989</year> + <publisher>Virgin Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Missile Ground Zero + Solar Invasion"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair action pack - lightgun games - lightgun games - missile ground zero + solar invasion (1989)(sinclair research)[lightgun][re-release].dsk" size="194816" crc="5af8ba21" sha1="f5d45c97f2cda96fe8ed5be37d81fbd916e38e17" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Rookie + Robot Attack + Bullseye"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair action pack - lightgun games - lightgun games - rookie + robot attack + bullseye (1989)(sinclair research)[lightgun][re-release].dsk" size="194816" crc="f050f2ff" sha1="e68a94ee005f2ac47238ab43a1653ab641b25c0f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sincgcom"> + <description>Sinclair Game Compilation</description> + <year>1988</year> + <publisher>Sinclair Research</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Finders Keepers + S.O.S. + Type-Rope + Ultimate Combat Mission"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 1 of 7 side a).dsk" size="194816" crc="27523b36" sha1="abfb2f751169bbd0ab00092b167bfcfac47067e9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Jackle & Wide + Rasterscan + spore + Sport of Kings"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 1 of 7 side b).dsk" size="194816" crc="b963f51d" sha1="a0510fe07cd3011d5e5614a2b82b23683539a59c" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Agent X + Con-Quest + Strike"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 2 of 7 side a).dsk" size="194816" crc="34f11c94" sha1="f207b9dc8a52e6f4353e7a4f1117e122e5e99ae7" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Colony + One Man and His Droid + Plexar + Wulfan the Barbarian"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 2 of 7 side b).dsk" size="194816" crc="61d265c5" sha1="38272bc5eb6080a538d39ca3c0c4364d7ce58a63" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3"> + <feature name="part_id" value="Disk 3, Side A: Molecule Man + Molecule Man Maze Designer + Universal Hero + Xcel"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 3 of 7 side a).dsk" size="194816" crc="b2b665ca" sha1="8f699fc81027396ae4ec9fb8c1566fa8ec418775" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3"> + <feature name="part_id" value="Disk 3, Side B: Brian Jacks Superstar Challenge + Eddie Kidd Jump Challenge + Level 5"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 3 of 7 side b).dsk" size="194816" crc="32dc231f" sha1="b77d9a76668c8e2b1d35e5f4872c76e2ec482dc4" offset="0" /> + </dataarea> + </part> + <part name="flop7" interface="floppy_3"> + <feature name="part_id" value="Disk 4, Side A: Angle Ball + Kikstart 2 + Knight Tyme + Stormbringer"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 4 of 7 side a).dsk" size="194816" crc="3463efac" sha1="1ec505f714b41df061700520a749652abe76e43a" offset="0" /> + </dataarea> + </part> + <part name="flop8" interface="floppy_3"> + <feature name="part_id" value="Disk 4, Side B: Amaurote + Curse of Sherwood + Milk Race + Speed King 2"/> + <dataarea name="flop" size="194816"> + <rom name="sinclair game compilation (1988)(sinclair research)(disk 4 of 7 side b).dsk" size="194816" crc="82d7bd38" sha1="9739c2e529386ea8a6f9f01605754e0b41db5583" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="smallcol"> + <description>A Small Collection of Hamster Droppings</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Life of a Lone Electron + The Quest for the Holy"/> + <dataarea name="flop" size="194816"> + <rom name="small collection of hamster droppings, a - the life of a lone electron + the quest for the holy (1993)(zenobi)(side a).dsk" size="194816" crc="a05d75de" sha1="48da53854c071a63579cc9bb4070545bea23708a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: First Past the Post + Get Me to the Church on Ti"/> + <dataarea name="flop" size="194816"> + <rom name="small collection of hamster droppings, a - first past the post + get me to the church on time (1993)(zenobi)(side b).dsk" size="194816" crc="8de6f9c6" sha1="e45b8df3e8f009bcfb055db9e392c7cefc050708" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="soccerma"> + <description>Soccer Mania</description> + <year>1990</year> + <publisher>Addictive Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Football Manager 2"/> + <dataarea name="flop" size="194816"> + <rom name="soccer mania (1990)(addictive games)(disk 1 of 2 side a).dsk" size="194816" crc="bfcc36bb" sha1="6d6a74fe478bdfc039f3dc67e851a6951413dbf8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Football Manager: World Cup Edition"/> + <dataarea name="flop" size="194816"> + <rom name="soccer mania - world cup edition (1990)(addictive games)(disk 1 of 2 side b).dsk" size="194816" crc="7f49f5cd" sha1="6d6a3ea81aeffbc9a300ae6252c81183a3df5aa4" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Gazza's Super Soccer"/> + <dataarea name="flop" size="194816"> + <rom name="soccer mania (1990)(addictive games)(disk 2 of 2 side a).dsk" size="194816" crc="347bc85e" sha1="f89876979105843a68d1e06aa8dab94dc599597e" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: MicroProse Soccer"/> + <dataarea name="flop" size="194816"> + <rom name="soccer mania (1990)(addictive games)(disk 2 of 2 side b).dsk" size="194816" crc="53a7650a" sha1="5c44e0b45cbb2dccbd2725fa96be07caf9563cc3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="solidgol"> + <description>Solid Gold</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Gauntlet"/> + <dataarea name="flop" size="194816"> + <rom name="solid gold - gauntlet (1988)(u.s. gold)(disk 1 of 2 side a).dsk" size="194816" crc="c484db81" sha1="36d053aa0ca9ee259f71ce173d58dae0f8a26d5f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Ace of Aces"/> + <dataarea name="flop" size="214784"> + <rom name="solid gold - ace of aces (1988)(u.s. gold)(disk 1 of 2 side b).dsk" size="214784" crc="02bd6078" sha1="e0e9a50a28f2260b3b80fe6e987cd75dca815af1" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Winter Games + Leaderboard"/> + <dataarea name="flop" size="214784"> + <rom name="solid gold - winter games + leaderboard (1988)(u.s. gold)(disk 2 of 2 side a).dsk" size="214784" crc="28c69d3e" sha1="4ca67601511c3b4a539403e921609dcced093858" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Infiltrator"/> + <dataarea name="flop" size="214784"> + <rom name="solid gold - infiltrator (1988)(u.s. gold)(disk 2 of 2 side b).dsk" size="214784" crc="42a5d06c" sha1="1abf1fd0473b280b0eb2965e03d49bbfe96b7174" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="sportdska" cloneof="sportdsk"> + <description>Sportacular Disk 1 (alt)</description> + <year>1988</year> + <publisher>Alternative Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sportacular disk 1 - soccer boss + olympic spectacular + indoor soccer (1988)(alternative).dsk" size="194816" crc="d42b8502" sha1="7299f66abbe1f01b02b43274a8ca9e3dabe56a7f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stillabd"> + <description>Still Another Big Disk</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Darkest Road III - The Unborn One + Phoenix"/> + <dataarea name="flop" size="194816"> + <rom name="still another big disk - darkest road iii - the unborn one + phoenix (1992)(zenobi)(side a).dsk" size="194816" crc="ce9ef1af" sha1="60a6457305484d1915b1bb2c4336319e333782e8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: A Legacy for Alaric + A Legacy for Alaric II - The Magic Isle"/> + <dataarea name="flop" size="194816"> + <rom name="still another big disk - a legacy for alaric + a legacy for alaric ii - the magic isle (1992)(zenobi)(side b).dsk" size="194816" crc="f197bb87" sha1="c93391dc04b69a54c3ae393cf954a0cd210741f0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stilombd"> + <description>Still One More Big Disk</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: The Tears of the Moon + The Mines of Lithiad"/> + <dataarea name="flop" size="194816"> + <rom name="still one more big disk - the tears of the moon + the mines of lithiad (19xx)(zenobi)(side a).dsk" size="194816" crc="3b2b5a44" sha1="6c8b9c7fa1317aa733c926cdab60b1f0b5dc0d03" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Jack the Ripper"/> + <dataarea name="flop" size="194816"> + <rom name="still one more big disk - jack the ripper (19xx)(zenobi)(side b).dsk" size="194816" crc="ddd95fb1" sha1="262d7ee2a21f7e768e0e8a91b14d673c5e790cfb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stufmabd"> + <description>Stuff Me Another Big Disk</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Aztec Assault + The Lost Twilight"/> + <dataarea name="flop" size="194816"> + <rom name="stuff me another big disk - aztec assault + the lost twilight (19xx)(zenobi)(side a).dsk" size="194816" crc="08be0ed3" sha1="9caa7f44a42cce7af12c22b296305baa9e82f0db" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Dark Tower + The Khangrin Plans"/> + <dataarea name="flop" size="194816"> + <rom name="stuff me another big disk - the dark tower + the khangrin plans (19xx)(zenobi)(side b).dsk" size="194816" crc="06df0298" sha1="177aaf98eef31956181e308c8325017d9d5fec00" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="sunxworda" cloneof="sunxword"> + <description>The Sun Computer Crosswords Volume 1 (alt)</description> + <year>1988</year> + <publisher>Akom</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sun computer crosswords volume 1, the (1988)(akom).dsk" size="194816" crc="99a83f33" sha1="c701b7e4c5760a16669ca140cc45615a24af7889" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="supremec"> + <description>Supreme Challenge</description> + <year>1988</year> + <publisher>Beau-Jolly</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: ACE 2 + The Sentinel + Tetris"/> + <dataarea name="flop" size="194816"> + <rom name="supreme challenge - ace 2 - the ultimate head to head conflict + the sentinel + tetris (1988)(beau-jolly)(side a).dsk" size="194816" crc="bed32d10" sha1="038b63e4822822f46eb29149237554dc6676cac6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Elite + Starglider"/> + <dataarea name="flop" size="194816"> + <rom name="supreme challenge - elite + starglider (1988)(beau-jolly)(side b).dsk" size="194816" crc="7999f89e" sha1="6bd19bd6ddcb7d20b2aa5134f931db56566acbd8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="suprecss"> + <description>Supreme Challenge: Soccer Spectacular</description> + <year>1989</year> + <publisher>Beau-Jolly</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Peter Shilton's Handball Maradona + Soccer Supremo + World Champions"/> + <dataarea name="flop" size="194816"> + <rom name="supreme challenge - soccer spectacular (1989)(beau-jolly)(side a).dsk" size="194816" crc="156ebf8a" sha1="58076376d1762b166194b29aa3d9a80c2d3706d2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Football Manager + Peter Beardsley's International Football"/> + <dataarea name="flop" size="194816"> + <rom name="supreme challenge - soccer spectacular (1989)(beau-jolly)(side b).dsk" size="194816" crc="38f1cff2" sha1="eb577147cefd532c19f6acf20e1b30c8f131bd50" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tntdomrk"> + <description>TNT</description> + <year>1990</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Hard Drivin'"/> + <dataarea name="flop" size="194816"> + <rom name="tnt - hard drivin' (1990)(domark)(disk 1 of 3 side a).dsk" size="194816" crc="32a8c50c" sha1="94bfd5b159e23684e4f9ed708e4ccdee113db140" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Toobin' + Xybots + APB"/> + <dataarea name="flop" size="344832"> + <rom name="tnt - toobin' + xybots + apb - all points bulletin (1990)(domark)(disk 1 of 3 side b).dsk" size="344832" crc="8a8ea8ab" sha1="627542f6422dea4022cbd86c3fc6a3c73d8d905e" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2: Dragon Spirit"/> + <dataarea name="flop" size="194816"> + <rom name="tnt - dragon spirit (1990)(domark)(disk 2 of 3).dsk" size="194816" crc="7286ca1d" sha1="c0d8267bb534a60cd82ab61d8e154502dd284ef3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tntdomrksp" cloneof="tntdomrk"> + <description>TNT (Spa)</description> + <year>1991</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Xybots + Toobin'"/> + <dataarea name="flop" size="182016"> + <rom name="tnt (1991)(dro soft)(es)(en)(disk 1 of 3 side a).dsk" size="182016" crc="856e202a" sha1="9a426e12690b9b6bc92528ed76d3a90d14d68881" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: APB"/> + <dataarea name="flop" size="131584"> + <rom name="tnt (1991)(dro soft)(es)(en)(disk 1 of 3 side b).dsk" size="131584" crc="00e4a5f2" sha1="077c97ebb631b25679de74e8e693bb34b17b700c" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Hard Drivin'"/> + <dataarea name="flop" size="58624"> + <rom name="tnt (1991)(dro soft)(es)(en)(disk 2 of 3 side a).dsk" size="58624" crc="17c26e04" sha1="25c2588c93ccfb585c598448ccc71c60982b072b" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Dragon Spirit"/> + <dataarea name="flop" size="194816"> + <rom name="tnt (1991)(dro soft)(es)(en)(disk 2 of 3 side b).dsk" size="194816" crc="edde7dc8" sha1="b09e36bfdbae3d430554d9fe4e27956251b31641" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="take3spo"> + <description>Take 3 Sports</description> + <year>1988</year> + <publisher>Blue Ribbon</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="take 3 sports (1988)(blue ribbon).dsk" size="194816" crc="ad087045" sha1="e29d7ace547d11d06d7e43674bd19426c929502b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="takefive"> + <description>Take Five</description> + <year>1988</year> + <publisher>Pirate Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Gangplank + Just Imagine"/> + <dataarea name="flop" size="194816"> + <rom name="take five - gangplank + just imagine (1988)(pirate)(side a).dsk" size="194816" crc="60ef133d" sha1="c1c85b3014eccf68baead4015688528c2eb325dd" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Dusty Droid and the Garbage Gobblers + O.K. Yah + Don't Say It, Spray It"/> + <dataarea name="flop" size="194816"> + <rom name="take five - dusty droid and the garbage gobblers + o.k. yah + don't say it, spray it (1988)(pirate)(side b).dsk" size="194816" crc="c02bad77" sha1="a28709dbc02fd94161e51516aae7a6dd4f62df20" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="taxbills"> + <description>Tax Bills</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tax bills - the taxman cometh + tax returns + the final demand (19xx)(zenobi).dsk" size="194816" crc="cc30a3da" sha1="fa056d97fdf52341229aab72d09d9396fc286a17" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="timenmgk"> + <description>Time and Magik</description> + <year>1988</year> + <publisher>Mandarin</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="time and magik (1988)(mandarin)(side a).dsk" size="194816" crc="91a6e149" sha1="8c4a9a528ec1da23544f11e9147488271024c0a7" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="time and magik (1988)(mandarin)(side b).dsk" size="194816" crc="81f95393" sha1="20b81b8fe1ecd332efbf0e4852b87f1f306e211d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="timenmgka" cloneof="timenmgk"> + <description>Time and Magik (alt)</description> + <year>1988</year> + <publisher>Mandarin</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="time and magik (1988)(mandarin)(side a)[a].dsk" size="194816" crc="8ba9c810" sha1="2298a68bdd7cb7b39d239519d463f8242bd611e1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="time and magik (1988)(mandarin)(side b)[a].dsk" size="194816" crc="52ffb435" sha1="afad039ffd0e8c6f36d1686dc1ad6912c73ebdac" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="atodamaq"> + <description>A Toda Maquina</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Dragon Ninja + Afterburner"/> + <dataarea name="flop" size="261120"> + <rom name="toda maquina, a - dragon ninja + afterburner (1989)(erbe)(es)(en).dsk" size="261120" crc="ff7f0d26" sha1="c3a7d5b914105224d707e36a88b73ea74506c215" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Rambo III + Robocop + Batman"/> + <dataarea name="flop" size="261120"> + <rom name="toda maquina, a - rambo iii + robocop + batman (1989)(erbe)(es)(en).dsk" size="261120" crc="9b5ce0b6" sha1="b229d4a53451ea0138e394334fae50d2d189e79c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="top10col"> + <description>Top 10 Collection</description> + <year>1988</year> + <publisher>Hit-Pak</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Airwolf + Combat Lynx + Critical Mass + Deep Strike + Saboteur"/> + <dataarea name="flop" size="214784"> + <rom name="top 10 collection (1988)(hit-pak)(side a)[aka top ten collection].dsk" size="214784" crc="ef1edec3" sha1="1dc75bb4a6bc2bf92d85cda33f84dd816cfa4f81" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Bomb Jack II + Saboteur 2 + Sigma 7 + Thanatos + Turbo Esprit"/> + <dataarea name="flop" size="214784"> + <rom name="top 10 collection (1988)(hit-pak)(side b)[aka top ten collection].dsk" size="214784" crc="46a55552" sha1="3d343ccc80eda55a2824713ac7f88f713cef086d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="topbytop"> + <description>Top By Topo</description> + <year>1989</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Mad Mix Game + Score 3020 + Tuareg + Wells & Fargo"/> + <dataarea name="flop" size="189952"> + <rom name="top by topo - mad mix game + score 3020 + tuareg + wells & fargo (1989)(topo soft)(es)(side a).dsk" size="189952" crc="37289d2e" sha1="0c2658923b025c77b31de622a2e37f47c9a1467c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Metropolis + Rock 'n Roller + Blackbeard + Emilio Butragueno Futbol"/> + <dataarea name="flop" size="185088"> + <rom name="top by topo - metropolis + rock 'n roller + blackbeard + emilio butragueno futbol (1989)(topo soft)(es)(side b).dsk" size="185088" crc="0f2e4848" sha1="3424c891f86e5ed35fc4bfd6c29f8bbdbd96108c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Labeled as "bad dump" in TOSEC for some reason, but it's the same dump at World of Spectrum. --> + <software name="totalerb"> + <description>Total</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Platoon + Arkanoid II: Revenge of Doh + Combat School"/> + <dataarea name="flop" size="215296"> + <rom name="total - platoon + arkanoid ii - revenge of doh + combat school (1989)(erbe)(es)(en)(side a)[b].dsk" size="215296" crc="90fe6396" sha1="d721e1aac28c159b7463acc0e165316a19091699" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Target Renegade"/> + <dataarea name="flop" size="204544"> + <rom name="total - renegade ii - target renegade (1989)(erbe)(es)(en)(side b).dsk" size="204544" crc="8ee50a77" sha1="6794e5e61a5a08a69141001e60b6ed5ec5e95a85" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="travtals"> + <description>Traveller's Tales</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Phoenix + The Violator of Voodoo"/> + <dataarea name="flop" size="194816"> + <rom name="traveller's tales - phoenix + the violator of voodoo (1993)(zenobi)(side a).dsk" size="194816" crc="30e96557" sha1="72179269718719ea83e2c1994f938c99b015145d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Aztec Assault + Celtic Carnage"/> + <dataarea name="flop" size="194816"> + <rom name="traveller's tales - aztec assault + celtic carnage (1993)(zenobi)(side b).dsk" size="194816" crc="6af8f2c7" sha1="636611c8143f00b4b47ba2ac593481d07ae83642" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="vitamina"> + <description>Vitaminas</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Street Fighter + Bionic Commando (loader) + Road Blasters + 1943"/> + <dataarea name="flop" size="198656"> + <rom name="vitaminas (1989)(erbe)(es)(en)(side a).dsk" size="198656" crc="00bc7d39" sha1="263f4d343f08a90f813b528e7c575e239d3a9053" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Road Blasters + Bionic Commando (data)"/> + <dataarea name="flop" size="214784"> + <rom name="vitaminas (1989)(erbe)(es)(en)(side b).dsk" size="214784" crc="aa430b4f" sha1="5f27e3e31eaaf36f4cdf8da175c3d6cabb994368" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="watchamp"> + <description>We Are the Champions</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: International Karate+ + Renegade"/> + <dataarea name="flop" size="214784"> + <rom name="we are the champions - international karate+ + renegade (1988)(ocean).dsk" size="214784" crc="e94b8d59" sha1="51291b522ca939b17ef22771880fbbe23696a23b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Barbarian + Super Sprint + Rampage"/> + <dataarea name="flop" size="214784"> + <rom name="we are the champions - barbarian + super sprint + rampage (1988)(ocean).dsk" size="214784" crc="b25e4d6a" sha1="aa549353dd8a793fb7e56e0873717d6ac85b86fa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="whlsfire"> + <description>Wheels of Fire</description> + <year>1990</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Chase H.Q. + Power Drift"/> + <dataarea name="flop" size="229632"> + <rom name="wheels of fire (1990)(domark)(disk 1 of 4 side a).dsk" size="229632" crc="36fca6e2" sha1="2085a0bfd58e75bdfebc82cd99baff8f2a2c09f0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Hard Drivin'"/> + <dataarea name="flop" size="194816"> + <rom name="wheels of fire (1990)(domark)(disk 1 of 4 side b).dsk" size="194816" crc="37233886" sha1="23c12b78303fd8f713ca174745c9df569c645450" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Turbo Out Run (loader)"/> + <dataarea name="flop" size="255232"> + <rom name="wheels of fire (1990)(domark)(disk 2 of 4 side a).dsk" size="255232" crc="7d64968f" sha1="d2d1a5777a3baf84d4bdf829e79985cd6a7e9272" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Turbo Out Run (data)"/> + <dataarea name="flop" size="256256"> + <rom name="wheels of fire (1990)(domark)(disk 2 of 4 side b).dsk" size="256256" crc="01a5deba" sha1="961f1fb2c23b701298d65432e3e44591312be7fa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="whoopabd"> + <description>Whoops Another Big Disk</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Leopold the Minstrel"/> + <dataarea name="flop" size="194816"> + <rom name="whoops another big disk (1994)(zenobi)(side a).dsk" size="194816" crc="10657ec8" sha1="17ef9c2634677e22d4d78d703f64854642a92e3c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Lycanthropy"/> + <dataarea name="flop" size="194816"> + <rom name="whoops another big disk (1994)(zenobi)(side b).dsk" size="194816" crc="f1967db9" sha1="b3c0b4d2f88be6d3bac70e76821d5751d6189ee7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="winnteam"> + <description>The Winning Team</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: APB"/> + <dataarea name="flop" size="204544"> + <rom name="winning team, the - apb - all points bulletin (1991)(domark)(disk 1 of 3 side a).dsk" size="204544" crc="d904319c" sha1="79886092a741edd86bc7baabb5bb03d4bae06fdf" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Escape from the Planet of the Robot Monsters"/> + <dataarea name="flop" size="194816"> + <rom name="winning team, the - escape from the planet of the robot monsters (1991)(domark)(disk 1 of 3 side b).dsk" size="194816" crc="0f4962ac" sha1="f378a46c7feef8549bcf79f4546b52985bc20dfe" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A: Cyberball"/> + <dataarea name="flop" size="194816"> + <rom name="winning team, the - cyberball (1991)(domark)(disk 2 of 3 side a).dsk" size="194816" crc="767aa935" sha1="bbd0c198890c8ccfafe9dab988651d46e2ddc0cf" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B: Klax"/> + <dataarea name="flop" size="194816"> + <rom name="winning team, the - klax (1991)(domark)(disk 2 of 3 side b).dsk" size="194816" crc="6e64d9a3" sha1="959baad53b114a5b93a5d778fd1e8c00916a2081" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3"> + <feature name="part_id" value="Disk 3: Vindicators"/> + <dataarea name="flop" size="175872"> + <rom name="winning team, the - vindicators (1991)(domark)(disk 3 of 3).dsk" size="175872" crc="287191e2" sha1="a3bea18ac143348a8dea03f86fd142d9576a4e1d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="worldcup"> + <description>World Cup Year 90 Compilation</description> + <year>1990</year> + <publisher>Empire</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Gary Lineker's Hot-Shot"/> + <dataarea name="flop" size="219136"> + <rom name="world cup year 90 compilation - gary lineker's hot-shot (1990)(empire)(side a).dsk" size="219136" crc="9e086fde" sha1="72a23897af495c77849ac733fac94de62cae90fb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Track Suit Manager + Kick Off"/> + <dataarea name="flop" size="267520"> + <rom name="world cup year 90 compilation - track suit manager + kick off (1990)(empire)(side b).dsk" size="267520" crc="fafc45f7" sha1="d94cfdc743895f3f89a60e9e007f3cae60219cf8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="yetanobd"> + <description>Yet Another Big Disk</description> + <year>19??</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Agatha's Folly + Arnold the Adventurer"/> + <dataarea name="flop" size="194816"> + <rom name="yet another big disk - agatha's folly + arnold the adventurer (19xx)(zenobi)(side a).dsk" size="194816" crc="c7b47449" sha1="80c18ca2f29cc3750d292fa7dd5e42eda861cf1b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: The Jade Stone + The Ellisnore Diamond"/> + <dataarea name="flop" size="194816"> + <rom name="yet another big disk - the jade stone + the ellisnore diamond (19xx)(zenobi)(side b).dsk" size="194816" crc="3103713f" sha1="96c58c2887113bcf01738779651e9c7463a980ec" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="yippombd"> + <description>Yippee One More Big Disk</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Stranded + Out of the Limelight"/> + <dataarea name="flop" size="194816"> + <rom name="yippee one more big disk - stranded + out of the limelight (1993)(zenobi)(side a).dsk" size="194816" crc="40019a81" sha1="f6a85c2a79e9476e38ec5bec08d29d6862a670bb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Tax Returns + Murder - He Said"/> + <dataarea name="flop" size="194816"> + <rom name="yippee one more big disk - tax returns + murder - he said (1993)(zenobi)(side b).dsk" size="194816" crc="719624bf" sha1="29eba5c055f09ae49118735139dbbfa66185b92a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="zappak"> + <description>Zap-Pak</description> + <year>1988</year> + <publisher>Players Premier</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Cybernation + Riding the Rapids"/> + <dataarea name="flop" size="160768"> + <rom name="zap-pak - cybernation + riding the rapids (1988)(players premier).dsk" size="160768" crc="1d6888cb" sha1="69ff8f18e52b3c54e62c72bfcf92267f4360aacc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Joe Blade + Xanthius"/> + <dataarea name="flop" size="165632"> + <rom name="zap-pak - joe blade + xanthius (1988)(players premier).dsk" size="165632" crc="27730ac1" sha1="27b06711206766e209e59bee3a7bec2e9f05dc9e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Demos - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chipnsfx"> + <description>CHIPNSFX Tracker+player</description> + <year>2017</year> + <publisher><unknown></publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="9984"> + <rom name="chipnsfx tracker+player (2017-05)(-).dsk" size="9984" crc="8ecbecd5" sha1="0c3bf106f0d42ca13ded461c1b06449351e5ec43" offset="0" /> + </dataarea> + </part> + </software> + + <software name="ansbacfa"> + <description>Answer Back Factfile 500 - Arithmetic - Ages 6-11</description> + <year>1985</year> + <publisher>Kosmos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="answer back factfile 500 - arithmetic - ages 6-11 (1985)(kosmos).dsk" size="194816" crc="02a79ba0" sha1="22a6681d3b1579da9795b39aad01bd396ab4a170" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ansbacjq"> + <description>Answer Back Junior Quiz</description> + <year>1985</year> + <publisher>Kosmos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="answer back junior quiz (1985)(kosmos).dsk" size="194816" crc="a00f2d25" sha1="a5ee4b4f142b0f0e46c6f71368dad1224a8db4c3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="castclow"> + <description>Castles and Clowns</description> + <year>1985</year> + <publisher>Macmillan</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castles and clowns (1985)(macmillan).dsk" size="194816" crc="b79676fd" sha1="8561af217f3b00ef56bfa452bca3b67e2dbe2c04" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="castclowa" cloneof="castclow"> + <description>Castles and Clowns (alt)</description> + <year>1985</year> + <publisher>Macmillan</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castles and clowns (1985)(macmillan)[a].dsk" size="194816" crc="0764b8fa" sha1="37a2931cdfd5813ec859126c5e0f445a389660d2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="countadd"> + <description>Count and Add</description> + <year>1992</year> + <publisher>Lander</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="count and add (1992)(lander).dsk" size="194816" crc="3aef3126" sha1="45444aba9099091eda6e10d582e797fb9f539038" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc268"> + <description>Fun School 2 for 6-8 Year Olds</description> + <year>1989</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fun school 2 for 6-8 year olds (1989)(database educational)[aka fun school 2 for 6 to 8 years].dsk" size="194816" crc="54456709" sha1="8ceeb4b62ed72e7f0efabf7f3c10b5347395ffbd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc268a" cloneof="funsc268"> + <description>Fun School 2 for 6-8 Year Olds (alt)</description> + <year>1989</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fun school 2 for 6-8 year olds (1989)(database educational)[a][aka fun school 2 for 6 to 8 years].dsk" size="194816" crc="91e7199e" sha1="29531481a5c28030b56669cd21e8a78d7196cb82" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc268b" cloneof="funsc268"> + <description>Fun School 2 for 6-8 Year Olds (alt 2)</description> + <year>1989</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fun school 2 for 6-8 year olds (1989)(database educational)[a2][aka fun school 2 for 6 to 8 years].dsk" size="194816" crc="857a1482" sha1="85db0fc04d6a8da7e060262da05dd554930d0cba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc268c" cloneof="funsc268"> + <description>Fun School 2 for 6-8 Year Olds (alt 3)</description> + <year>1989</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fun school 2 for 6-8 year olds (1989)(database educational)[a3][aka fun school 2 for 6 to 8 years].dsk" size="194816" crc="7bffa05e" sha1="5d844874bc517fe8f05823452c5ceda9125ef661" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc28"> + <description>Fun School 2 for the Over-8s</description> + <year>1989</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195328"> + <rom name="fun school 2 for the over-8s (1989)(database educational)[aka fun school 2 for ages 8 to 12].dsk" size="195328" crc="f724e19d" sha1="493e38ce4f4f83c2cfda6bc5dbc589167ce3e64f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc357"> + <description>Fun School 3 for 5-7 Year Olds</description> + <year>1991</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 3 for 5-7 year olds (1991)(database educational)(side a).dsk" size="194816" crc="e7665457" sha1="3129d1d29d5d9226bb8aa25d79b52a429811a219" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 3 for 5-7 year olds (1991)(database educational)(side b).dsk" size="194816" crc="326672b9" sha1="0b97a077ced3b478d1a4d98454e14eaa2fc12b01" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc37"> + <description>Fun School 3 for the Over-7s</description> + <year>1991</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 3 for the over-7s (1991)(database educational)(side a).dsk" size="194816" crc="f0d9aa91" sha1="57b9a9a23b097477de7b7a7254ca134b216cd754" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 3 for the over-7s (1991)(database educational)(side b).dsk" size="194816" crc="b70a7e32" sha1="c83a137e588bb4710b137a8aa965626353b69e0c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc35"> + <description>Fun School 3 for the Under-5s</description> + <year>1991</year> + <publisher>Database Educational</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 3 for the under-5s (1991)(database educational)(side a).dsk" size="194816" crc="54b0410d" sha1="f4dd65ec44b7ce2059e807f15bfce8caefdca097" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 3 for the under-5s (1991)(database educational)(side b).dsk" size="194816" crc="1fdaad89" sha1="04eb15bbf5f70e14722cb0e77cf58be30ed1e81b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc457"> + <description>Fun School 4 for 5-7 Year Olds</description> + <year>1992</year> + <publisher>Europress</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 4 for 5-7 year olds (1992)(europress)(side a).dsk" size="194816" crc="4decf77a" sha1="a5cd9e81812918104de18a6b70b48aa539d7efd9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="fun school 4 for 5-7 year olds (1992)(europress)(side b).dsk" size="194816" crc="76b510f1" sha1="0bb4de05d19bccc41486dd0c80468bd1989f9431" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funsc4711"> + <description>Fun School 4 for 7-11 Year Olds</description> + <year>1992</year> + <publisher>Europress</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="141312"> + <rom name="fun school 4 for 7-11 year olds (1992)(europress)(side a).dsk" size="141312" crc="8abd62ed" sha1="447b61201ef1f7753a375ed1377f1ab6222a6fd5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="116992"> + <rom name="fun school 4 for 7-11 year olds (1992)(europress)(side b).dsk" size="116992" crc="9e3ba186" sha1="65245e006c650fa4a43dba7a9b51221fc6b31775" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="henrbook"> + <description>Henrietta's Book of Spells</description> + <year>1990</year> + <publisher>Scetlander</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="henrietta's book of spells (1990)(scetlander).dsk" size="194816" crc="201aecb4" sha1="d125585c16c09ea6b84fa687d16d4bda00689d16" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="identeur"> + <description>Identify Europe</description> + <year>1987</year> + <publisher>Kosmos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="identify europe (1987)(kosmos).dsk" size="194816" crc="4f9dfb6f" sha1="bc632b6df0104e74af93bb2a2fd4ba338bf9d86a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="junglmth"> + <description>Jungle Maths</description> + <year>1983</year> + <publisher>Scisoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jungle maths (1983)(scisoft).dsk" size="194816" crc="2cf83377" sha1="50dfd0ac361229be0e96fd65d2a70796f421e289" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spangold"> + <description>Spanish Gold</description> + <year>1983</year> + <publisher>Chalksoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="spanish gold (1983)(chalksoft).dsk" size="194816" crc="b1bcc0ef" sha1="c5436ac0a5d97e64e87361329217a07e55afe14c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ttefunwo"> + <description>Thomas the Tank Engine's Fun With Words</description> + <year>1990</year> + <publisher>Friendly Learning</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="thomas the tank engine's fun with words (1990)(friendly learning)(side a).dsk" size="194816" crc="683a32a9" sha1="76f98308babf1addc111db18a85b3c99dded8f53" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="thomas the tank engine's fun with words (1990)(friendly learning)(side b).dsk" size="194816" crc="e7eec040" sha1="bb86b1107ebfdf69d0938a70547c05f31f57bf91" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wordpowe"> + <description>Word Power</description> + <year>1983</year> + <publisher>Sulis</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="word power (1983)(sulis).dsk" size="194816" crc="29f22d7d" sha1="858527f3df5c6bfd3841b1c47f2cf1edfef90280" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Educational - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wordspic"> + <description>Words and Pictures</description> + <year>1984</year> + <publisher>Chalksoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="words and pictures (1984)(chalksoft).dsk" size="194816" crc="055d76fa" sha1="1f07c6324f8593a2fb22090c3d93def221331cea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="3dgrandpmd"> + <description>3D Grand Prix (master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="3d grand prix (1991)(zeppelin games)(side a)[aka grand prix championship][master disk].dsk" size="194816" crc="54a0ded1" sha1="10a2e3500752544bacbf654cf3744af5d2cbf6b2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ace2"> + <description>ACE 2 - The Ultimate Head to Head Conflict</description> + <year>1987</year> + <publisher>Cascade Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ace 2 - the ultimate head to head conflict (1987)(cascade games).dsk" size="194816" crc="40b617e6" sha1="e32a487c7367913fdd7ab89da08ce742a830e960" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="apb"> + <description>APB - All Points Bulletin</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="190208"> + <rom name="apb (1989)(domark)[aka all points bulletin].dsk" size="190208" crc="595363f9" sha1="58df342adf1e4a67304cfc5c0194b194c17dad5f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="atf"> + <description>ATF - Advanced Tactical Fighter</description> + <year>1988</year> + <publisher>Digital Integration</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="atf (1988)(digital integration)[aka advanced tactical fighter].dsk" size="102400" crc="ee8aad31" sha1="05f77ee7281f667ec1f92ecb7a1af6552c9431ae" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="atfsp" cloneof="atf"> + <description>ATF - Advanced Tactical Fighter (Spa)</description> + <year>1988</year> + <publisher>Zafiro Software Division</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="atf (1988)(zafiro software division)(es)(en)[re-release].dsk" size="102400" crc="59320d5c" sha1="d6d94e6e54c28bf1393eba6e1a5ac4cd1d173fe9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="abadcrima" cloneof="abadcrim"> + <description>La Abadia del Crimen (alt)</description> + <year>1988</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="191744"> + <rom name="abadia del crimen, la (1988)(mcm)(es)[re-release].dsk" size="191744" crc="1052ece9" sha1="d94b16011f80428d49edb0af7dec4d73e13021f2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="afighter"> + <description>Action Fighter</description> + <year>1989</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="action fighter (1989)(firebird).dsk" size="194816" crc="2db88300" sha1="f8511df3b99924755ca52ec3f1b0ec175e18b7c4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="aforcea" cloneof="aforce"> + <description>Action Force - International Heroes (alt)</description> + <year>1987</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="action force - international heroes (1987)(virgin games).dsk" size="194560" crc="2c5f41d4" sha1="edb1ae391d64f330cabe4e50b0066c801bc54cc1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="aforce2a" cloneof="aforce2"> + <description>Action Force II - International Heroes (alt)</description> + <year>1988</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214272"> + <rom name="action force ii - international heroes (1988)(virgin games).dsk" size="214272" crc="ea3f2c0d" sha1="63eb5e445a2029e238b08a63ba17b476a27d4d23" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tiebreaksp" cloneof="tiebreak"> + <description>Adidas Championship Tie-Break (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="adidas championship tie-break (1990)(erbe)(es)(en)[re-release].dsk" size="73216" crc="dd6cd54d" sha1="bd915b96fe9fa36c17c3f92f2bbc954720567867" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="tiebreaka" cloneof="tiebreak"> + <description>Adidas Championship Tie-Break (alt)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="196352"> + <rom name="adidas championship tie-break (1990)(ocean).dsk" size="196352" crc="c5a7238c" sha1="815ca74726a688d0878303bfd7558b5f82c17388" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="afterwar"> + <description>After the War</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="118016"> + <rom name="after the war (1989)(dinamic)(es)(en).dsk" size="118016" crc="cb90314d" sha1="970d0ef6ec0223be59b46298e91be212bdeceda1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="afterwarsp" cloneof="afterwar"> + <description>After the War (Spa)</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="166400"> + <rom name="after the war (1989)(dinamic)(es).dsk" size="166400" crc="3dabca4d" sha1="202216a662531fa8c5fba654aac78d91c6db0f4c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aburner"> + <description>Afterburner</description> + <year>1988</year> + <publisher>Activision</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="214784"> + <rom name="afterburner (1988)(activision)(side a).dsk" size="214784" crc="ceaebfa1" sha1="fc65a2a8a7c7e77ddcf28554e8f8ae08057bd1e5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="214784"> + <rom name="afterburner (1988)(activision)(side b).dsk" size="214784" crc="d3330013" sha1="8348adc6e09bc227ab85ae032d6f9d8f968e1310" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aburnera" cloneof="aburner"> + <description>Afterburner (alt)</description> + <year>1988</year> + <publisher>Activision</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="214784"> + <rom name="afterburner (1988)(activision)(side a)[a].dsk" size="214784" crc="e3388dc3" sha1="6a96ed52748275d3b8c8a6ec105b7f97733228a9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side missing from dump, using same as parent set --> + <dataarea name="flop" size="214784"> + <rom name="afterburner (1988)(activision)(side b).dsk" size="214784" crc="d3330013" sha1="8348adc6e09bc227ab85ae032d6f9d8f968e1310" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="agathafo"> + <description>Agatha's Folly</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="agatha's folly (1989)(zenobi)(side a).dsk" size="194816" crc="d569dc69" sha1="93518c5dc62b9e60d39c39b55c0d935c03eedb34" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="agatha's folly (1989)(zenobi)(side b).dsk" size="194816" crc="513d78d3" sha1="0c7a88208c15ceb6b33abc8a2e8b193e593a1fb5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="agathafoa" cloneof="agathafo"> + <description>Agatha's Folly (alt)</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="agatha's folly (1989)(zenobi).dsk" size="194816" crc="6ac0d7e5" sha1="d8e2f4cc3c49087c14dd9b73996d17a2186f45fd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="airbrang"> + <description>Airborne Ranger</description> + <year>1988</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="209152"> + <rom name="airborne ranger (1988)(microprose)(side a).dsk" size="209152" crc="caee7972" sha1="6cc64601dadb692b6c7ee1ae115345f1bca748a9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="airborne ranger (1988)(microprose)(side b).dsk" size="194816" crc="17331dce" sha1="ece46c1567a8e37bc46bd61f8c772effa00243bb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="alienres"> + <description>Alien Research Centre</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="alien research centre (1990)(zenobi).dsk" size="194816" crc="db2bc7a4" sha1="4c9aade94605af27eb7d50a82a00bc1053ce87b8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="astormsp" cloneof="astorm"> + <description>Alien Storm (Spa)</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="255232"> + <rom name="alien storm (1991)(erbe)(es)(en)[re-release].dsk" size="255232" crc="deea5c29" sha1="fce55879436faff99fb58de3bdc3b52ee7e15e17" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="astorm"> + <description>Alien Storm</description> + <year>1991</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="389376"> + <rom name="alien storm (1991)(u.s. gold).dsk" size="389376" crc="7bbc42ae" sha1="13c74820255ea1e7797d90208d1e4db8e610c303" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aliensyn"> + <description>Alien Syndrome</description> + <year>1988</year> + <publisher>ACE</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="alien syndrome (1988)(ace).dsk" size="194816" crc="f7cb4c52" sha1="6aa692ebce02b84c803debeb610f4eb0d313707d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aliensynsp" cloneof="aliensyn"> + <description>Alien Syndrome (Spa)</description> + <year>1988</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="alien syndrome (1988)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="e2c722af" sha1="c76e486de716cabe52a968df6913001df479511a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="allinada"> + <description>All in a Day's Work</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="all in a day's work (1996)(zenobi)(side a).dsk" size="194816" crc="fc9fdcc7" sha1="9b616bb325491c4466125b85c328bba856c30481" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="all in a day's work (1996)(zenobi)(side b).dsk" size="194816" crc="de25e5f7" sha1="fd993d7f673d797b0a6fe1b7d0d08f18dc29f6c4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amerbsktmd"> + <description>All-American Basketball (master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="all-american basketball (1992)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="1b9bd910" sha1="7502f8042d64ca8a045c2bdbb7ddbed976839b9e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="all-american basketball (1992)(zeppelin games)(side b)[master disk].dsk" size="194816" crc="a5c993ed" sha1="5b2d23073972b992cecd65b0044d954b6e905426" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spmandoom"> + <description>The Amazing Spider-Man and Captain America in Dr. Doom's Revenge</description> + <year>1989</year> + <publisher>Empire</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="amazing spider-man and captain america in dr. doom's revenge, the (1989)(empire).dsk" size="194816" crc="ad142fd9" sha1="a7fa82a92bf1db333065c0a74115c5990033e6d8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="am3dpoolmd"> + <description>American 3D Pool (master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="american 3d pool (1992)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="3133c3a7" sha1="88d7dc1629b19213ad5013cece5d7914da260399" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="american 3d pool (1992)(zeppelin games)(side b)[master disk].dsk" size="194816" crc="9e62a21c" sha1="2d6d741dfcf6c914fa153f49a0febf824d7cabd0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amnes102sp" cloneof="amnes102"> + <description>Amnesia v1.02 (Spa)</description> + <year>2015</year> + <publisher>Huelvy</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="amnesia v1.02 (2015-12-05)(huelvy)(es).dsk" size="194816" crc="6c797654" sha1="77462f3706073c6a46db1d09c8bbb299e0cda3d8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amnes102"> + <description>Amnesia v1.02</description> + <year>2015</year> + <publisher>Huelvy</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="amnesia v1.02 (2015-12-05)(huelvy).dsk" size="194816" crc="3207f613" sha1="ca4465100649b6210566ec07dbccc6d5bd45be90" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amotospu"> + <description>Amoto's Puf</description> + <year>1988</year> + <publisher>SPE</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="amoto's puf (1988)(spe)(es).dsk" size="194816" crc="ea11bf11" sha1="3399583f7a9bd712e9aa1a7c6ac83e79112289d4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amuldara"> + <description>The Amulet of Darath</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="amulet of darath, the (1992)(zenobi).dsk" size="194816" crc="6c2d3b50" sha1="6fe5169df72e34a41e0ea557ae1c85540a4b8600" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="apprenti"> + <description>The Apprentice</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="apprentice, the (1993)(zenobi).dsk" size="194816" crc="86e40adc" sha1="f8b6f9a8fb83c9e004aeb9e84dd7989323adb2cb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="april7th"> + <description>April 7th</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="april 7th (1992)(zenobi).dsk" size="194816" crc="f2ee2bd1" sha1="501de56a06afc02e13623eab143664754acd9248" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aplj1311" cloneof="aplj1312"> + <description>Apulija 13 V1.1</description> + <year>2013</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="apulija 13 v1.1 (2013)(grussu, alessandro)(it)(m4).dsk" size="194816" crc="5db02461" sha1="1a7474e0bab3c271318edd6b8e4d0544a3962b35" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aplj1312"> + <description>Apulija 13 v1.2</description> + <year>2013</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="apulija 13 v1.2 (2013-09-24)(grussu, alessandro)(it)(m4).dsk" size="194816" crc="c0eee6bf" sha1="d12e8fe086625a3aab7757fc35ea21b8768c92c6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arctcfox"> + <description>Arctic Fox</description> + <year>1988</year> + <publisher>Electronic Arts</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195840"> + <rom name="arctic fox (1988)(electronic arts).dsk" size="195840" crc="b1d9a818" sha1="cdcdacb38e26b94782cba0efb5371062ee5b08d3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arkanoi2"> + <description>Arkanoid - Revenge of Doh</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="arkanoid - revenge of doh (1988)(imagine)[aka arkanoid 2].dsk" size="214784" crc="e5dafb18" sha1="9e3d9552dd438d3a224ea19fc5e19730e1738bef" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="arntadv3"> + <description>Arnold the Adventurer III - This Time It's Personal</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="arnold the adventurer iii - this time it's personal (1992)(zenobi).dsk" size="194816" crc="c5159e2b" sha1="f1916459527b2f153849d05624cad97c3dd650f4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="arturaa" cloneof="artura"> + <description>Artura (alt)</description> + <year>1989</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="artura (1989)(gremlin graphics)(side a).dsk" size="194816" crc="a60019cb" sha1="3303b24cc705b4b6051223d653288ef115d90b2d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="artura (1989)(gremlin graphics)(side b).dsk" size="194816" crc="9e8f9c27" sha1="4e2b395bbaf8e08341f515cdfc5744931d72872b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="asalycas"> + <description>Asalto y Castigo</description> + <year>2009</year> + <publisher><homebrew></publisher> + <info name="author" value="Jose Baltasar Garcia Perez-Schofield"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="asalto y castigo (2009)(perez-schofield, jose baltasar garcia)(es).dsk" size="194816" crc="2942f741" sha1="09332e67e9d646e39409985443055dd56aa42acc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aspargpm"> + <description>Aspar GP Master</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="58880"> + <rom name="aspar gp master (1988)(dinamic)(es)(side a).dsk" size="58880" crc="c583f871" sha1="1b94e7d003a6b243eaf0ddaa05fb7189025ddce3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="80384"> + <rom name="aspar gp master (1988)(dinamic)(es)(en)(side b).dsk" size="80384" crc="300e8562" sha1="3db8311950a6db82494c7ccfbc3605d5dc4c92a0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aspargpmsp" cloneof="aspargpm"> + <description>Aspar GP Master (alt)</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58880"> + <rom name="aspar gp master (1988)(dinamic)(es).dsk" size="58880" crc="8c452eea" sha1="1618afa3986147ee842af394198ea662de76f6a9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="amc"> + <description>Astro Marine Corps</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="128768"> + <rom name="astro marine corps (1989)(dinamic)(es)[aka amc].dsk" size="128768" crc="49da31a0" sha1="045a8026457cebe101fa76c856654812e4830c3f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aurascop"> + <description>Aura-Scope</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="aura-scope (1991)(zenobi)[aka horrorscope][re-release].dsk" size="194816" crc="06e2ce3b" sha1="4da4ad217593a8e6301bc2800a2a836bd7417ea1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="autocras"> + <description>Autocrash</description> + <year>1991</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63488"> + <rom name="autocrash (1991)(zigurat)(es).dsk" size="63488" crc="9d26fed0" sha1="1aea386a6243646e3dfce6bce6d013e6e86a6ca3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aventesp"> + <description>La Aventura Espacial</description> + <year>1990</year> + <publisher>Aventuras AD</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="aventura espacial, la (1990)(aventuras ad)(es).dsk" size="102400" crc="a0609dc1" sha1="e8f20ca45e3393233578cfd8abc2a038aab608cd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aventori"> + <description>La Aventura Original</description> + <year>1989</year> + <publisher>Aventuras AD</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="206080"> + <rom name="aventura original, la (1989)(aventuras ad)(es).dsk" size="206080" crc="4c67d329" sha1="b76701e9a6d99195e866e3dd902be37f0aca45b0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pepetrue"> + <description>Las Aventuras de Pepe Trueno</description> + <year>2003</year> + <publisher><homebrew></publisher> + <info name="author" value="Rockersuke Moroboshi"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="aventuras de pepe trueno, las (2003)(rockersuke moroboshi)(es).dsk" size="194816" crc="4d7ef85e" sha1="cd00274300da42b59e076edda185ad15f4cd1725" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="axeofkol"> + <description>The Axe of Kolt</description> + <year>1990</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="axe of kolt, the (1990)(fsf adventures)(side a).dsk" size="194816" crc="cb7846ad" sha1="df43b9c0d8461f3e44c04a716b222e72db2a6d35" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="axe of kolt, the (1990)(fsf adventures)(side b).dsk" size="194816" crc="52a2a8e1" sha1="72ee7458dd51806f3f8737f28f75c1163c6d8963" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="aztcaslt"> + <description>Aztec Assault</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="aztec assault (1992)(zenobi).dsk" size="194816" crc="9c23191d" sha1="d6ae6a418a37a5467e2c3ff969f5e1aeeb2e6a61" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bttf2"> + <description>Back to the Future Part II</description> + <year>1990</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="216320"> + <rom name="back to the future part ii (1990)(image works)(side a).dsk" size="216320" crc="30c20cf0" sha1="ae22c8cd1fc94577bd45cf3a5d6075dce517ab03" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="back to the future part ii (1990)(image works)(side b).dsk" size="194816" crc="ae0bffe4" sha1="05b70832fc272183a6ffac24a3bb9307b85a2b5d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bttf3"> + <description>Back to the Future Part III</description> + <year>1991</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="196352"> + <rom name="back to the future part iii (1991)(image works)(side a).dsk" size="196352" crc="3913c988" sha1="919d098cf7be3d0513baf53231b39b9d4867eaa2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="back to the future part iii (1991)(image works)(side b).dsk" size="194816" crc="1dd2ad6a" sha1="8e707432b2a6e7d0b10a7ef73f5bc5fd9da62857" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bttf3a" cloneof="bttf3"> + <description>Back to the Future Part III (alt)</description> + <year>1991</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="389376"> + <rom name="back to the future part iii (1991)(image works)[aka back to the future iii].dsk" size="389376" crc="9fe3c153" sha1="fed66130a1b7d6a9abf808e2d50610f2006de42d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="baddudes"> + <description>Bad Dudes vs. Dragon Ninja</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="144896"> + <rom name="bad dudes vs. dragon ninja (1988)(imagine).dsk" size="144896" crc="62c50d95" sha1="bc00cd74d7ef98d43ca9bfafe4edbea825d30c0c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="badlandsa" cloneof="badlands"> + <description>Badlands (alt)</description> + <year>1990</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="badlands (1990)(domark).dsk" size="194816" crc="51be78e0" sha1="64dcfb8260630b878ae0778a29d4008d107e806d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="balrgcat"> + <description>The Balrog and the Cat</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="balrog and the cat, the (1988)(zenobi).dsk" size="194816" crc="646814a2" sha1="3548ee10ccc4a77ebc96b5b79c037aac85d475ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="barbaria"> + <description>Barbarian</description> + <year>1988</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63488"> + <rom name="barbarian (1988)(dro soft)(es)(en)[re-release].dsk" size="63488" crc="d72642e4" sha1="56f2bc58e03a34b0d3098c06c7e52be64342e3c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="barbari2sp" cloneof="barbari2"> + <description>Barbarian II - The Dungeon of Drax (Spa)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="144384"> + <rom name="barbarian ii - the dungeon of drax (1988)(erbe)(es)(en)[re-release].dsk" size="144384" crc="8ba96bd6" sha1="aed9c7159d67af12e649f6a4b7f69c767ed38f94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="barbari2"> + <description>Barbarian II - The Dungeon of Drax</description> + <year>1988</year> + <publisher>Palace</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="254720"> + <rom name="barbarian ii - the dungeon of drax (1988)(palace).dsk" size="254720" crc="c34122e2" sha1="85aaa95586f4c72940dcbb4c172344a5cf65347c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="barbari2a" cloneof="barbari2"> + <description>Barbarian II - The Dungeon of Drax (alt)</description> + <year>1988</year> + <publisher>Palace</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="144384"> + <rom name="barbarian ii - the dungeon of drax (1988)(palace)[a].dsk" size="144384" crc="7f0aecdc" sha1="960844cba76d42f6ff1a37ecbb1a2cce8568368f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bardsta1"> + <description>The Bard's Tale Vol 1 - Tales of the Unknown</description> + <year>1988</year> + <publisher>Electronic Arts</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="bard's tale vol 1, the - tales of the unknown (1988)(electronic arts)(side a).dsk" size="194816" crc="378a5215" sha1="8e3bd21491ca201fdcb71fcadd561ce3aa529a53" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="bard's tale vol 1, the - tales of the unknown (1988)(electronic arts)(side b).dsk" size="194816" crc="c2ae64e9" sha1="b031822fd972de13a72cdea0fe77a327d388ed44" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bardrite"> + <description>The Bardic Rites</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bardic rites, the (1994)(zenobi).dsk" size="194816" crc="99c8df43" sha1="627fd79979146655854164c8b20165ef9f2045aa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="batmancc"> + <description>Batman - The Caped Crusader</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="123392"> + <rom name="batman - the caped crusader (1988)(ocean).dsk" size="123392" crc="91bfb255" sha1="004538f2c6b9258c301a5c232075d7d762f444a9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="batmantm"> + <description>Batman - The Movie</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="batman - the movie (1989)(ocean).dsk" size="194816" crc="31da53d6" sha1="50a94f8a0261fc4661af6fc791f684ed1737c9ba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="batmantma" cloneof="batmantm"> + <description>Batman - The Movie (alt)</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="152576"> + <rom name="batman - the movie (1989)(ocean)[a].dsk" size="152576" crc="a4db4011" sha1="e56a88a1837d8ad02c64ddd786ff8ece1d064087" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="batmantmb" cloneof="batmantm"> + <description>Batman - The Movie (alt 2)</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="batman - the movie (1989)(ocean)[a2].dsk" size="194816" crc="111bd6db" sha1="2920d5ea39b487bd1c8713cf8117752ecc7a12a3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="batmantmspa" cloneof="batmantm"> + <description>Batman - The Movie (Spa) (alt)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="185088"> + <rom name="batman - the movie (1989)(erbe)(es)(en)[a][re-release].dsk" size="185088" crc="d07587bc" sha1="94918c10f53710577cc86c3e3b89b37fec6577f9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="batmantmsp" cloneof="batmantm"> + <description>Batman - The Movie (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="185088"> + <rom name="batman - the movie (1989)(erbe)(es)(en)[re-release].dsk" size="185088" crc="42936386" sha1="75b4ea3e5659f5d39b115abf795ff8175dc0ae06" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="beachvol"> + <description>Beach Volley</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="97536"> + <rom name="beach volley (1989)(erbe)(es)(en)[re-release].dsk" size="97536" crc="f8c13542" sha1="93673eaec3f66e8e14461e94d55cbb69b944f171" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thebeast"> + <description>The Beast</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="beast, the (1988)(zenobi)[re-release].dsk" size="194816" crc="33cc73f0" sha1="747f285b901f388aed5dd547cf5cc2740833d50b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bedlamsp" cloneof="bedlam"> + <description>Bedlam (Spa)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bedlam (1988)(erbe)(es)(en)[re-release].dsk" size="194816" crc="4f8f724b" sha1="c93e9de8363fbd4b48c9aa23095af34b4e42a940" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bedlam"> + <description>Bedlam</description> + <year>1988</year> + <publisher>Go</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bedlam (1988)(go).dsk" size="194816" crc="a69e1974" sha1="be74fdc1b70756e405bfc53cf54ee7c790e96e36" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="begotend"> + <description>The Beginning of the End</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="beginning of the end, the (1992)(zenobi).dsk" size="194816" crc="d7513346" sha1="61c9b420a52fa920374b9f2ac7b326ed6bc1c8ed" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="behclod4"> + <description>Behind Closed Doors 4 - Balrog's Day Out</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="behind closed doors 4 - balrog's day out (1989)(zenobi).dsk" size="194816" crc="dc5066f6" sha1="500d838a4327e72ef829c31b31fedb755cba4a5c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bermtria"> + <description>The Bermuda Triangle</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bermuda triangle, the (1991)(zenobi).dsk" size="194816" crc="1f56095c" sha1="8515f73018bccab506daaae8274ca394eda9c8b5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bestialwgs" cloneof="bestialw"> + <description>Bestial Warrior (Gun Stick)</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <info name="usage" value="Requires Gun Stick light gun"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="75008"> + <rom name="bestial warrior (1989)(dinamic)(es).dsk" size="75008" crc="64a24dbd" sha1="10eada64f580e6c3e08971bd6cc0bd90aaf54ebe" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This image came from a dual-system Spectrum/Amstrad release (Side A: Spectrum, Side B: Amstrad) --> + <software name="bestialw"> + <description>Bestial Warrior</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Spectrum"/> + <dataarea name="flop" size="80384"> + <rom name="bestial warrior (1989)(dinamic)(es)[a].dsk" size="80384" crc="208235f6" sha1="50d9a3bb79b82deb6c08253cfbffa460bb8abaa2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Amstrad"/> + <dataarea name="flop" size="91136"> + <rom name="bestial warrior (1989)(dinamic)(es)(side b).dsk" size="91136" crc="3fd882c2" sha1="977204c72ef1b1643e33516ffe904b35ad87c826" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="bhcopa" cloneof="bhcop"> + <description>Beverly Hills Cop (alt)</description> + <year>1990</year> + <publisher>Tynesoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="beverly hills cop (1990)(tynesoft).dsk" size="194816" crc="ad7c72d1" sha1="186496c66a7a9e9cabdf7e5bc76b3183d4a06941" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bticepal"> + <description>Beyond the Ice Palace</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="beyond the ice palace (1988)(elite systems).dsk" size="214784" crc="364b9753" sha1="e8aff84d40510100028fb15de89ab3071036c6f2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bticepalsp" cloneof="bticepal"> + <description>Beyond the Ice Palace (Spa)</description> + <year>1988</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="beyond the ice palace (1988)(mcm)(es)(en)[re-release].dsk" size="194816" crc="a547670b" sha1="cde06121712e3beeeb1faca842a1731f2dab850b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bioninjamd"> + <description>Bionic Ninja (master disk)</description> + <year>1989</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bionic ninja (1989)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="99c63497" sha1="b4517e6a2124eb1fc6e5f658c9591ef0b867840f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="blacklam"> + <description>Black Lamp</description> + <year>1988</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="black lamp (1988)(firebird).dsk" size="78080" crc="e90869b8" sha1="c98bc347c956d2b0ee2542fc07b171237a324ad5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="blacktwr"> + <description>The Black Tower</description> + <year>1984</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="black tower, the (1984)(zenobi).dsk" size="194816" crc="d3b64e66" sha1="80f9a5b6eeafcc185019b818ac40e6786f57bef5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="blstroid"> + <description>Blasteroids</description> + <year>1989</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="blasteroids (1989)(image works).dsk" size="174848" crc="47c49e33" sha1="71ed33708c9bd8481da358e5ee5c62d9f4e901d2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="blinscarmd"> + <description>Blinky's Scary School (master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="blinky's scary school (1990)(zeppelin games)(side a)[master disk].dsk" size="199680" crc="6c13f156" sha1="b58ea972c196119403801ea66b50da8fe2e9be3e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="bloodwyca" cloneof="bloodwyc"> + <description>Bloodwych (alt)</description> + <year>1990</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bloodwych (1990)(image works).dsk" size="194816" crc="d650514e" sha1="0132b678fd1a1003b90aa613a1d70ac9f87134ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="boggita" cloneof="boggit"> + <description>The Boggit - Bored Too (alt)</description> + <year>1986</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="boggit, the - bored too (1986)(crl group).dsk" size="194816" crc="0ada70d5" sha1="fb558e0b129a091fbebf0ee76c96ed37eb061ca6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bnzabros"> + <description>Bonanza Bros.</description> + <year>1992</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="255232"> + <rom name="bonanza bros. (1992)(u.s. gold)(side a).dsk" size="255232" crc="79c23b90" sha1="b3fc3de4e20bcfea9d341896624d2710da06cea5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="255232"> + <rom name="bonanza bros. (1992)(u.s. gold)(side b).dsk" size="255232" crc="bc619eef" sha1="8596ee563127f2ef5dd047feb482e5b1a5834e97" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="bookdeada" cloneof="bookdead"> + <description>Book of the Dead (alt)</description> + <year>1987</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="book of the dead (1987)(crl group)[re-release].dsk" size="194816" crc="bc6b999a" sha1="3a1b2cc0692a7767c0db3d4affaa29025e723898" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="boydfile"> + <description>The Boyd File</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="boyd file, the (1990)(zenobi).dsk" size="194816" crc="a10f7dcb" sha1="338836359459d8adfb54bd2c9e99bc683dad71db" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bravesta"> + <description>BraveStarr</description> + <year>1987</year> + <publisher>Go</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bravestarr (1987)(go).dsk" size="194816" crc="ebd6d548" sha1="585a027a2029675df07ea0e7786e9fdfbda60c9b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="btnovbar"> + <description>Brian - The Novice Barbarian</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="brian - the novice barbarian (1994)(zenobi).dsk" size="194816" crc="5118b277" sha1="71138e6dd21e30728c1a388b1eaa25efbd93f8ff" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bcfofort"> + <description>Brian Clough's Football Fortunes</description> + <year>1987</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="brian clough's football fortunes (1987)(cds microsystems).dsk" size="194816" crc="6cbefb15" sha1="4ea4df092ad0059a9e7e5a0e0e136d675a12ad3e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="brdgpgal"> + <description>Bridge Player Galactica</description> + <year>1989</year> + <publisher>CP Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bridge player galactica (1989)(cp).dsk" size="194816" crc="be950646" sha1="b921a28c699b1e785b613ac8a7e5fb2ee0fcf6ba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bublbobl"> + <description>Bubble Bobble</description> + <year>1987</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="bubble bobble (1987)(firebird).dsk" size="78080" crc="ad820cf2" sha1="dc43630be33bdf4279d6cf51d2539b8a3e4ac768" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bublbust"> + <description>Bubble Buster</description> + <year>1984</year> + <publisher>Sinclair Research</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bubble buster (1984)(sinclair research).dsk" size="194816" crc="bd8be2d5" sha1="e0acc64b08cdca0fb17fb1567aee8328f039423a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bbrgsp" cloneof="bbrg"> + <description>Buffalo Bill's Wild West Show (Spa)</description> + <year>1989</year> + <publisher>System 4</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="buffalo bill's wild west show (1989)(system 4)(es)(en)[re-release].dsk" size="194816" crc="98087bfb" sha1="6bb33ab8dfdc7b7c0081e6eb49abd68df760358a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="bbrga" cloneof="bbrg"> + <description>Buffalo Bill's Wild West Show (alt)</description> + <year>1989</year> + <publisher>Tynesoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="buffalo bill's wild west show (1989)(tynesoft)[aka buffalo bill's rodeo games].dsk" size="194816" crc="35a8bbb9" sha1="d0c7112c0cb98ce3476383cf46fa9d3b1ef7d4c2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="buggyboy"> + <description>Buggy Boy</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="buggy boy (1988)(elite systems).dsk" size="214784" crc="c567c3ab" sha1="752f46a60fe96049315e2a9afd3cf0103e254cf1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="buggyboya" cloneof="buggyboy"> + <description>Buggy Boy (alt)</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="buggy boy (1988)(elite systems)[a].dsk" size="214784" crc="57649b27" sha1="d546ec0b36a4d469f0b1663f39105b088653a272" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="buggyran"> + <description>Buggy Ranger</description> + <year>1990</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="64256"> + <rom name="buggy ranger (1990)(dinamic)(es).dsk" size="64256" crc="8b7ece82" sha1="fba219989f6d81a249a92deee818762d017c9b37" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bugsy"> + <description>Bugsy</description> + <year>1986</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bugsy (1986)(zenobi)[re-release].dsk" size="194816" crc="60b11040" sha1="6d3744cec7aa20dda6d7edf7ad4420fed318b66e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bumpy"> + <description>Bumpy</description> + <year>1989</year> + <publisher>Proein Soft Line</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="bumpy (1989)(proein soft line)(es)(en)[re-release].dsk" size="194816" crc="c31c1761" sha1="535ef007a517e9c64f8327e5f402c396d768f178" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="butchilla" cloneof="butchill"> + <description>Butcher Hill (alt)</description> + <year>1989</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="butcher hill (1989)(gremlin graphics).dsk" size="194816" crc="43d9764d" sha1="cdc2d744c058bb8f788ecf7c46a127db486dc915" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="byfairme"> + <description>By Fair Means...or Foul</description> + <year>1989</year> + <publisher>Superior Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="by fair means...or foul (1989)(superior).dsk" size="214784" crc="6d191978" sha1="9bc03db30b5825be2b65c8e3b2be112f6b5c5ffb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cabalsp" cloneof="cabal"> + <description>Cabal (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="185088"> + <rom name="cabal (1989)(erbe)(es)(en)[re-release].dsk" size="185088" crc="64cd1c52" sha1="eaff4e540200b432387ad8159b9ebfd2fda37deb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cabal"> + <description>Cabal</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="164352"> + <rom name="cabal (1989)(ocean).dsk" size="164352" crc="12a62acc" sha1="e021057ade1a87dc0f429f505af97f587295478a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="caligams"> + <description>California Games</description> + <year>1987</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="182016"> + <rom name="california games (1987)(u.s. gold)(side a).dsk" size="182016" crc="68089b7a" sha1="31f8220eef17c214c050a62370b95246023f0cb6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="canbubbl"> + <description>Cannon Bubble</description> + <year>2007</year> + <publisher>Computer Emuzone</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cannon bubble (2007)(computer emuzone)(es)(en).dsk" size="194816" crc="79a65c7e" sha1="916aee8d92c4d2657873adf2a5df2d10bc3157ee" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cpsevill"> + <description>Capitan Sevilla</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="175360"> + <rom name="capitan sevilla (1988)(dinamic)(es).dsk" size="175360" crc="e7a740da" sha1="5b00d1bea69edd2b9ea7069aae5bd6467528be0d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cptrueno"> + <description>El Capitan Trueno</description> + <year>1990</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="107264"> + <rom name="capitan trueno, el (1990)(dinamic)(es).dsk" size="107264" crc="ae4033aa" sha1="ebfba4e9b058aec5d123d5c5d00d8ed6e325ce72" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cptblood"> + <description>Captain Blood</description> + <year>1988</year> + <publisher>Exxos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="captain blood (1988)(exxos)(fr)(en).dsk" size="194816" crc="e17df717" sha1="1041bb79b8db774876d2b459e6c425ce1d22f3f8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cptblooda" cloneof="cptblood"> + <description>Captain Blood (alt)</description> + <year>1988</year> + <publisher>Exxos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="209408"> + <rom name="captain blood (1988)(exxos)(fr)(en)[a].dsk" size="209408" crc="5b95e764" sha1="542f17338147ec719df11d3e60c2c71588dfbb51" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is the dump at World of Spectrum --> + <software name="cptplnet"> + <description>Captain Planet and the Planeteers</description> + <year>1991</year> + <publisher>Mindscape International</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="255232"> + <rom name="captain planet and the planeteers (1991)(mindscape international)(side a).dsk" size="255232" crc="de0baf9a" sha1="0d171f094ef1c197728fb094738a9e3192e1cb47" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cptplneta" cloneof="cptplnet"> + <description>Captain Planet and the Planeteers (alt)</description> + <year>1991</year> + <publisher>Mindscape International</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="255232"> + <rom name="captain planet and the planeteers (1991)(mindscape international).dsk" size="255232" crc="cc688e2f" sha1="9647cad3b005bcb1326e964a44f0bdce15b6e4de" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="csainz"> + <description>Carlos Sainz - Campeonato del Mundo de Rallies</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="carlos sainz - campeonato del mundo de rallies (1990)(zigurat)(es).dsk" size="58624" crc="69b938d9" sha1="8c78ff2f741668a9d583598bd0d71ae3c94ec054" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="carrierca" cloneof="carrierc"> + <description>Carrier Command (alt)</description> + <year>1989</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="carrier command (1989)(rainbird)[passworded].dsk" size="194816" crc="dc5836b6" sha1="834acdb689df5ce1fae378830fd40706176a1759" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cotbehsm"> + <description>The Case of the Beheaded Smuggler</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="case of the beheaded smuggler, the (1988)(zenobi)[re-release].dsk" size="194816" crc="b6283daf" sha1="ae1fdb8f733286d58242c872fa43a48d6dd2c2e3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="castlmassp" cloneof="castlmas"> + <description>Castle Master (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68352"> + <rom name="castle master (1990)(erbe)(es)[re-release].dsk" size="68352" crc="a6e15f9f" sha1="adb6fa50b973e23868e2ecdbada09894e39835a2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="castlmas"> + <description>Castle Master</description> + <year>1990</year> + <publisher>Incentive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castle master (1990)(incentive).dsk" size="194816" crc="4a793e62" sha1="ac429bc3b62f539053e045d025f1332fff32e099" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="castlmasa" cloneof="castlmas"> + <description>Castle Master (alt)</description> + <year>1990</year> + <publisher>Incentive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="98304"> + <rom name="castle master (1990)(incentive)[a].dsk" size="98304" crc="b8ded2a7" sha1="402bf37121588be8ed99008deefad85df191ae42" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is an old version, dated 20171114 --> + <software name="cvaniasia" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (alt)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlevania - spectral interlude (2015)(rewind team)(pl)(en).dsk" size="194816" crc="adb5b561" sha1="8514973da6717ffb50a80c674cf11f1fa18317c3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is an old version, dated 20171114 --> + <software name="cvaniasispa" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Spa) (alt)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlevania - spectral interlude (2015)(rewind team)(pl)(es).dsk" size="194816" crc="76c0c512" sha1="8f7176b315f48fe02bd7a3e041b3029f66ab1b57" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is an old version, dated 20171117 --> + <software name="cvaniasiita" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Ita) (alt)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlevania - spectral interlude (2015)(rewind team)(pl)(it).dsk" size="194816" crc="c199872f" sha1="cfc1e9ea70770d8e7f74736e0cdffc9e6a22fbdd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is an old version, dated 20171114 --> + <software name="cvaniasirua" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Rus) (alt)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlevania - spectral interlude (2015)(rewind team)(pl)(ru).dsk" size="194816" crc="65e836f5" sha1="5efc5518be07f11402f79a0c3c4e56b4385712d8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is an old version, dated 20171116 --> + <software name="cvaniasipoa" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Pol) (alt)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlevania - spectral interlude (2015)(rewind team)(pl).dsk" size="194816" crc="fab90486" sha1="f9910c639e7b70d4297cfd4d6c31153fc7460648" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="celtcarn"> + <description>Celtic Carnage</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="celtic carnage (1993)(zenobi).dsk" size="194816" crc="505f7fca" sha1="f902367330bcfe90564404a3ec640a79aaf1dda3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chainrea"> + <description>Chain Reaction</description> + <year>1987</year> + <publisher>Durell Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="chain reaction (1987)(durell).dsk" size="194816" crc="37f5a6d9" sha1="237922f83435be87ec93ca2eedcd1ae10c7304a5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="champrun"> + <description>Championship Run</description> + <year>1991</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="championship run (1991)(impulze).dsk" size="78080" crc="62dc5d14" sha1="dc80cf88bf6b805b9b98523aaeaf9d84edf4d601" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="champrunamd" cloneof="champrun"> + <description>Championship Run (rerelease) (master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="championship run (1991)(zeppelin games)(side a)[master disk][re-release].dsk" size="194816" crc="b19b4051" sha1="923342c2035eb88b111b1b6d4cccf473eca89c1c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="championship run (1991)(zeppelin games)(side b)[master disk][re-release].dsk" size="194816" crc="e397f7e8" sha1="ebfcfc1073a8cea96f27c791c42e39450c81930c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="champrunamdb" cloneof="champrun"> + <description>Championship Run (rerelease) (master disk backup)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="78080"> + <rom name="championship run (1991)(zeppelin games)(side a)[master disk backup][re-release].dsk" size="78080" crc="ba87b776" sha1="1bb234a9b2bf7305be38ea914db8614b27d3c7cb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="champrunatmd" cloneof="champrun"> + <description>Championship Run (rerelease) (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="championship run (1991)(zeppelin games)(side a)[re-release][tape master disk].dsk" size="194816" crc="92d61b0f" sha1="634f4caa0b6fcf8d13d1ebf8ac199b2d3efc1225" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="achaninha" cloneof="achaninh"> + <description>A Chance in Hell (Extreme)</description> + <year>2011</year> + <publisher><homebrew></publisher> + <info name="author" value="Steven Flanagan"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="chance in hell, a (2011)(flanagan, steven).dsk" size="194816" crc="a6eb4266" sha1="7dd15b428e8e8140c328c91d271d0e88a750a003" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="achaninh"> + <description>A Chance in Hell</description> + <year>2011</year> + <publisher><homebrew></publisher> + <info name="author" value="Steven Flanagan"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="chance in hell, a (2011)(flanagan, steven)[a].dsk" size="194816" crc="b64196d4" sha1="8821c909c89db9e8d71b4b67e138838e94d11337" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chasehqsp" cloneof="chasehq"> + <description>Chase H.Q. (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="185088"> + <rom name="chase h.q. (1989)(erbe)(es)(en)[re-release].dsk" size="185088" crc="317e46d5" sha1="66de397575284efb76a08ef63dbe5db41be03249" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chasehq"> + <description>Chase H.Q.</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="168192"> + <rom name="chase h.q. (1989)(ocean).dsk" size="168192" crc="9c56fc47" sha1="1347cb84b7b232da4a587c573ba893cf171c6df3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chasehq2sp" cloneof="chasehq2"> + <description>Chase H.Q. II - Special Criminal Investigation (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="146176"> + <rom name="chase h.q. ii - special criminal investigation (1990)(erbe)(es)(en)[re-release].dsk" size="146176" crc="5b451c6e" sha1="58101ac75972e690b13eb7665d0ae245c47cefab" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chasehq2"> + <description>Chase H.Q. II - Special Criminal Investigations</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="127232"> + <rom name="chase h.q. ii - special criminal investigations (1990)(ocean).dsk" size="127232" crc="3b77b2ad" sha1="82ca5734e13e42347f3c6ca182049d45d5cc6bad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chessm2k"> + <description>The Chessmaster 2000</description> + <year>1990</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58880"> + <rom name="chessmaster 2000, the (1990)(dro soft)(es).dsk" size="58880" crc="7a4053fb" sha1="b7520505f5988297c46a05ae1abf27f186873dbd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="chicag30a" cloneof="chicag30"> + <description>Chicago 30's (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="chicago 30's (1988)(u.s. gold)[aka chicago's 30][re-release].dsk" size="219136" crc="1030eeba" sha1="dc5a492d935f464de7b0eef800cfcf87786bd0d8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="chicag30b" cloneof="chicag30"> + <description>Chicago 30's (alt 2)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="chicago 30's (1988)(u.s. gold)[a][aka chicago's 30][re-release].dsk" size="219136" crc="aaaee4bf" sha1="bd36eecd8dcb771329553eb76dbbb769a016d61d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="choyleef"> + <description>Choy-Lee-Fut Kung-Fu Warrior</description> + <year>1990</year> + <publisher>Positive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="choy-lee-fut kung-fu warrior (1990)(positive)(es).dsk" size="194816" crc="b30c89c7" sha1="7cf7a24137ace679ad7896a6af4f5c88af9c6f85" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chuckyea"> + <description>Chuck Yeager's Advanced Flight Trainer</description> + <year>1989</year> + <publisher>Electronic Arts</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="254720"> + <rom name="chuck yeager's advanced flight trainer (1989)(electronic arts).dsk" size="254720" crc="467cfc4c" sha1="856851011941721a3f3a2fc3bbcd4e5994cdd42d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="chuckyeaa" cloneof="chuckyea"> + <description>Chuck Yeager's Advanced Flight Trainer (alt)</description> + <year>1989</year> + <publisher>Electronic Arts</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="254720"> + <rom name="chuck yeager's advanced flight trainer (1989)(electronic arts)[a].dsk" size="254720" crc="9feb1e56" sha1="6f4215091e7625739a6274c11e6e6cdd89949750" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="circgams"> + <description>Circus Games</description> + <year>1988</year> + <publisher>Tynesoft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="151040"> + <rom name="circus games (1988)(tynesoft)(side a).dsk" size="151040" crc="fd8bf77b" sha1="50528b58dd252d2ad5b6fdd7dc468eda0f815b20" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="92672"> + <rom name="circus games (1988)(tynesoft)(side b).dsk" size="92672" crc="3951ee76" sha1="aaeb8723a415252a8a59a99251094dcc867b8185" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tcitadel"> + <description>The Citadel</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="citadel, the (1995)(zenobi).dsk" size="194816" crc="274ae290" sha1="8aed7e6ae7cb69e11e6cd2f44bc1c6bc6d02c5f7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="civlsrv2"> + <description>Civil Service II</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="civil service ii (1994)(zenobi).dsk" size="194816" crc="88ecdb07" sha1="0a9aa0bbd6122edde9c9bce9303583b6a98be283" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="clckch89"> + <description>Clock Chess '89</description> + <year>1989</year> + <publisher>CP Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="clock chess '89 (1989)(cp).dsk" size="194816" crc="32467893" sha1="a6b698715f6c413dd3f1910d6dff8720e3643aa8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="clckch89sp" cloneof="clckch89"> + <description>Clock Chess '89 (Spa)</description> + <year>1989</year> + <publisher>System 4</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="clock chess '89 (1989)(system 4)(es)(en)[re-release].dsk" size="194816" crc="0ab6eb85" sha1="7776e4c21215798a8c1a264029b5adc14882d6f7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cloud99"> + <description>Cloud 99</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cloud 99 (1988)(zenobi)[re-release].dsk" size="194816" crc="5842de80" sha1="b454e12a32543825a6c593dc68dd9a2b8654d567" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="clsbrid4"> + <description>Colossus Bridge 4</description> + <year>1986</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="colossus bridge 4 (1986)(cds microsystems)[aka colossus 4 bridge].dsk" size="194816" crc="73271bc3" sha1="aa725cfffb117d42c81fd059404d5c3f0b14d56f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="clschss4"> + <description>Colossus Chess 4</description> + <year>1986</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="colossus chess 4 (1986)(cds microsystems)(side a)[aka colossus 4 chess].dsk" size="194816" crc="75eabff4" sha1="b0c7e68c086c252e30dc98b53d0949f4323a1edc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="colossus chess 4 (1986)(cds microsystems)(side b)[aka colossus 4 chess].dsk" size="194816" crc="54843a73" sha1="a5de3c29a447dc6837e2da39085dc1c2eaedb237" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- This is the dump from World of Spectrum --> + <software name="clschss4a" cloneof="clschss4"> + <description>Colossus Chess 4 (alt)</description> + <year>1986</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="colossus chess 4 (1986)(cds microsystems)[aka colossus 4 chess].dsk" size="194816" crc="5a5078a3" sha1="0bab187cce31ef3948e91fa9d4f94b0804571a98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- TOSEC specifies that it's "Side A", may require a Side B at some point? --> + <software name="clschss4b" cloneof="clschss4"> + <description>Colossus Chess 4 (alt 2)</description> + <year>1986</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="colossus chess 4 (1986)(cds microsystems)(side a)[a][aka colossus 4 chess].dsk" size="194816" crc="7665818f" sha1="7e8d5ce4cdc15837bd8d36720d07a17d46545873" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cmquatro"> + <description>Comando Quatro</description> + <year>1989</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68352"> + <rom name="comando quatro (1989)(zigurat)(es).dsk" size="68352" crc="1f253875" sha1="ba4c1ba3e604bb35bb1ef91a855b993833f090e7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="comtracr"> + <description>Comando Tracer</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="75008"> + <rom name="comando tracer (1989)(dinamic)(es).dsk" size="75008" crc="985c2136" sha1="be76783bd8429b9f3ec2cd8702e7419b1c632ee6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- May be a clone of combatsc --> + <software name="combatsg"> + <description>Combat School + Gryzor Preview</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="combat school + gryzor preview (1987)(ocean).dsk" size="214784" crc="2996f5e8" sha1="0dc0e1340835d35071a5a2873346462faa07233d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="contcircsp" cloneof="contcirc"> + <description>Continental Circus (Spa)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="continental circus (1989)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="424df271" sha1="36a5c13f30b4b97d6e8944f4767dd9c1eab41c13" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="contcirc"> + <description>Continental Circus</description> + <year>1989</year> + <publisher>Virgin Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="224256"> + <rom name="continental circus (1989)(virgin mastertronic).dsk" size="224256" crc="a9d27a04" sha1="ba5e1a91ea1ada4debbe41ae923fd9ab89c1c2e6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="corpston"> + <description>Corporal Stone</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="corporal stone (1992)(zenobi).dsk" size="194816" crc="8b578a60" sha1="ef6d6a69d6d953b73ca780e370aec12cd99373f8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="corruptna" cloneof="corruptn"> + <description>Corruption (alt)</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="corruption (1988)(rainbird).dsk" size="194816" crc="1dc27c17" sha1="3fd52b22960c0285472a7e87ea6a9fdb5684ee82" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="corruptnb" cloneof="corruptn"> + <description>Corruption (alt 2)</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="corruption (1988)(rainbird)[a].dsk" size="194816" crc="4e60b833" sha1="cdf95bb26eb4d5e0baec7838cfca832936cc7540" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="corruptnc" cloneof="corruptn"> + <description>Corruption (alt 3)</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="corruption (1988)(rainbird)[a2].dsk" size="194816" crc="e7e5feaf" sha1="94b0b7203a9478ec7e232677a902cb90ec4abbdd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cosmicsh"> + <description>Cosmic Sheriff</description> + <year>1990</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="101888"> + <rom name="cosmic sheriff (1990)(dinamic)(es).dsk" size="101888" crc="98a9e2ff" sha1="93de281cb9c787633c86448d1e0a0ba0cd3001c8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="crackcty"> + <description>Crack City</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="crack city (1989)(zenobi).dsk" size="194816" crc="e4ef29e9" sha1="1b8d94c8adb69ec1f963d6fddd49f43947a46afb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cray5"> + <description>Cray-5</description> + <year>2011</year> + <publisher>RetroWorks</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cray-5 (2011)(retroworks)(es)(en).dsk" size="194816" crc="79e634e5" sha1="a65086e80b5d478d703269558f4c853ff53d5fc8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="crzycars"> + <description>Crazy Cars</description> + <year>1988</year> + <publisher>Titus</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="crazy cars (1988)(titus)(fr)(en).dsk" size="194816" crc="27c1e745" sha1="d7d3d2a19b9e0c6a0d1fad3dfc126380bd147f94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="crzycarsa" cloneof="crzycars"> + <description>Crazy Cars (alt)</description> + <year>1988</year> + <publisher>Titus</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="crazy cars (1988)(titus)(fr)(en)[a].dsk" size="194816" crc="4d694436" sha1="23d0afc62538d4a1784c5f938f74cc7e6a881b6b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="crzcars2"> + <description>Crazy Cars II</description> + <year>1988</year> + <publisher>Titus</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="crazy cars ii (1988)(titus)(fr)(en).dsk" size="199680" crc="0024faa8" sha1="cd6a4b7efa1a3dabc55baa844d2f0c3b98f93878" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cricketm"> + <description>Cricket Master</description> + <year>1989</year> + <publisher>Challenge</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cricket master (1989)(challenge).dsk" size="194816" crc="636dadcc" sha1="e5a4685b8308834e06be0e329637567b8cf84154" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="crystkin"> + <description>Crystals of Kings</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="crystals of kings (1993)(zenobi).dsk" size="194816" crc="6fa4745e" sha1="4e0ce417dee743183886bce9ccc4f3c2d3fe72f9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="currojim"> + <description>Curro Jimenez</description> + <year>1989</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="curro jimenez (1989)(zigurat)(es).dsk" size="73216" crc="0e92a03c" sha1="c5de62cfdd369a8a13c685aa54595087c61f9a74" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cursnimu"> + <description>The Curse of Nimue</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="curse of nimue, the (1995)(zenobi).dsk" size="194816" crc="77db9af2" sha1="ffc3cc67bf86dc4091bd600443e615dbeaee3aea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="cybernoda" cloneof="cybernod"> + <description>Cybernoid - The Fighting Machine (alt)</description> + <year>1988</year> + <publisher>Hewson Consultants</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="cybernoid - the fighting machine (1988)(hewson consultants).dsk" size="174848" crc="c6dbf46f" sha1="347e6911d7a410ad89c16033b323d366d12c256b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="cyberno2a" cloneof="cyberno2"> + <description>Cybernoid II - The Revenge (alt)</description> + <year>1988</year> + <publisher>Hewson Consultants</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cybernoid ii - the revenge (1988)(hewson consultants).dsk" size="194816" crc="0e7d5f2f" sha1="6c960f9d8e26136443985192909717f1fa81211d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="cybo2900"> + <description>Cyborg 2900</description> + <year>2011</year> + <publisher><homebrew></publisher> + <info name="author" value="Steven Flanagan"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cyborg 2900 (2011)(flanagan, steven)(gb)(de).dsk" size="194816" crc="e14dbf81" sha1="85f71b1c71e113b6991477cf771a5b125c4cafb2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thecycle"> + <description>The Cycles</description> + <year>1989</year> + <publisher>Accolade</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="86784"> + <rom name="cycles, the (1989)(accolade).dsk" size="86784" crc="ab7498ff" sha1="1ff1b55fbfc376b86fac0401d04b31294bef3fe2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thecyclesp" cloneof="thecycle"> + <description>The Cycles (Spa)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="cycles, the (1989)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="93969d71" sha1="6466f9cc120ed536ac85f01cc619f7b2d7f40336" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="daleytoc"> + <description>Daley Thompson's Olympic Challenge</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="220160"> + <rom name="daley thompson's olympic challenge (1988)(ocean)[aka daley thompson '88].dsk" size="220160" crc="5d0ed5ac" sha1="ff4726f3e2b4281fb251526f876c74a7a0ac132c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dandare2"> + <description>Dan Dare II - Mekon's Revenge</description> + <year>1988</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="dan dare ii - mekon's revenge (1988)(virgin games).dsk" size="214784" crc="ad23d8bd" sha1="f05d36abc09a04831c1fbfea9e512159101ee297" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="dandare3a" cloneof="dandare3"> + <description>Dan Dare III - The Escape (alt)</description> + <year>1990</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="62720"> + <rom name="dan dare iii - the escape (1990)(virgin games)[aka crazy jet racer][aka dan dare 3 - la escapada].dsk" size="62720" crc="e0b5ca78" sha1="961945064f12a3cb6ba57be3be82f7be36918443" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dariuspl"> + <description>Darius+</description> + <year>1990</year> + <publisher>The Edge</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="darius+ (1990)(edge, the)(side a).dsk" size="194816" crc="01d1ceed" sha1="5314521cc4d414ae8cbed0e3de39f7b82d8aa306" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="darius+ (1990)(edge, the)(side b).dsk" size="194816" crc="1d258f68" sha1="05e228e532e3ab14e5f4afd4e98a841b8d886251" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="darkfusna" cloneof="darkfusn"> + <description>Dark Fusion (alt)</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="dark fusion (1988)(gremlin graphics).dsk" size="219136" crc="bcc16b2e" sha1="e4802f43c53db059cce6a398056fb0823c8c2a52" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="darkglad"> + <description>The Dark Gladiator</description> + <year>1993</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dark gladiator, the (1993)(fsf adventures).dsk" size="194816" crc="4d77a737" sha1="9d18b6ec0e2304165f7df34812c4b1a8a54479bc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="darkside"> + <description>Dark Side</description> + <year>1988</year> + <publisher>Incentive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dark side (1988)(incentive).dsk" size="194816" crc="0f4880e0" sha1="876868ce588801c8c0272a660d6420ce4bcde0d6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="darksidesp" cloneof="darkside"> + <description>Dark Side (Spa)</description> + <year>1988</year> + <publisher>System 4</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dark side (1988)(system 4)(es)(en)[re-release].dsk" size="194816" crc="ad260ab9" sha1="8a19363f5f76cf096d630d300ae3183b3c8103ca" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="darktowr"> + <description>The Dark Tower</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="dark tower, the (1992)(zenobi)[re-release].dsk" size="204544" crc="57131a03" sha1="58f8bd782f144bd7f15e07b6f9240f3c06a936c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="darkstro"> + <description>The Darkest Road</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="darkest road, the (1991)(zenobi).dsk" size="194816" crc="9226b17e" sha1="dd2517993b61100372798225c63869462dfcb99c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="deawish3"> + <description>Death Wish 3</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="death wish 3 (1987)(gremlin graphics).dsk" size="194816" crc="43f7fd6d" sha1="07fc65dd723143b183280074cdb2f786427b0f5e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="deawish3a" cloneof="deawish3"> + <description>Death Wish 3 (alt)</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="death wish 3 (1987)(gremlin graphics)[a].dsk" size="194816" crc="668d8e22" sha1="500e9e2746f1e914052465b56597b2a77a1389d5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="deawish3b" cloneof="deawish3"> + <description>Death Wish 3 (alt 2)</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="death wish 3 (1987)(gremlin graphics)[a2].dsk" size="194816" crc="c0b36014" sha1="cf4cdcd8cc6bcd090e639679818a66fa73944550" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="decmieye"> + <description>Deception of the Mind's Eye</description> + <year>1993</year> + <publisher>Electric Storm Productions</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="deception of the mind's eye (1993)(electric storm productions).dsk" size="194816" crc="6d7b98ff" sha1="c769e5326b96c37a815d2a25ebfea02f9fc2a40e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="deeksdee"> + <description>Deek's Deeds</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="deek's deeds (1990)(zenobi)[re-release].dsk" size="194816" crc="b5ba9c79" sha1="c8bc7bcf561c44daab22a75662ddc69e25b08e80" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="deepa" cloneof="deep"> + <description>The Deep (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="213760"> + <rom name="deep, the (1988)(u.s. gold).dsk" size="213760" crc="642620c1" sha1="003fb8ce69ef6d29dcddcf369edf8a0b088e6769" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dotearth"> + <description>Defenders of the Earth</description> + <year>1990</year> + <publisher>Enigma Variations</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195840"> + <rom name="defenders of the earth (1990)(enigma variations).dsk" size="195840" crc="ca58887c" sha1="bb58eeaa31252fd85bc985dc0f249aa42544a6c7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="deflektra" cloneof="deflektr"> + <description>Deflektor (alt)</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="deflektor (1987)(gremlin graphics).dsk" size="174848" crc="63929c07" sha1="adc7f9ba5f9bbded9a60f104b51973ff1808a94f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="totrecalsp" cloneof="totrecal"> + <description>Desafio Total</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="151040"> + <rom name="desafio total (1991)(erbe)(es)(en)[aka total recall][re-release].dsk" size="151040" crc="341d1500" sha1="793d902be2b432531b8e901750ca301a16e0675d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="diarmid"> + <description>Diarmid</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="diarmid (1993)(zenobi).dsk" size="194816" crc="4b08234a" sha1="173e145e0bbe47764618022be5edcb632dc6cefe" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="diosacoz"> + <description>La Diosa de Cozumel</description> + <year>1990</year> + <publisher>Aventuras AD</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="126720"> + <rom name="diosa de cozumel, la (1990)(aventuras ad)(es).dsk" size="126720" crc="47b10a66" sha1="be799ad89d4ad9047158e9e25ecd74e6e65ae3ab" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dogboy"> + <description>The Dogboy</description> + <year>1985</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dogboy, the (1985)(zenobi)[re-release].dsk" size="194816" crc="b7f4582c" sha1="40828308aa82e7208c4d154ace4b79a861c3a0c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dominatrsp" cloneof="dominatr"> + <description>Dominator (Spa)</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="121856"> + <rom name="dominator (1989)(mcm)(es)(en)[re-release].dsk" size="121856" crc="0ca1868a" sha1="dc6d54da26a5271340910aa52a76d49dc67216bd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="dominatra" cloneof="dominatr"> + <description>Dominator (alt)</description> + <year>1989</year> + <publisher>System 3 Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="234752"> + <rom name="dominator (1989)(system 3).dsk" size="234752" crc="a8475699" sha1="fc39aa181b7db27aa0a92a0458f54e75fe610ede" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ddragonsp" cloneof="ddragon"> + <description>Double Dragon (Spa)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="170496"> + <rom name="double dragon (1989)(dro soft)(es)(en)(side a)[re-release].dsk" size="170496" crc="a9a2d5c4" sha1="cf88aaec4f3fef0537638bc225ee92894c2e8d05" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="63488"> + <rom name="double dragon (1989)(dro soft)(es)(en)(side b)[re-release].dsk" size="63488" crc="016a0453" sha1="d5faeb6ce277eb30c394e6438775a01ebb7378d8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ddragon"> + <description>Double Dragon</description> + <year>1989</year> + <publisher>Melbourne House</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="170496"> + <rom name="double dragon (1989)(melbourne house)(side a).dsk" size="170496" crc="5c97aaf4" sha1="c906ed3124fd6b7c2e247e2a2863755ab10eae00" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="63488"> + <rom name="double dragon (1989)(melbourne house)(side b).dsk" size="63488" crc="1c50d9dd" sha1="ea88d3e0e16f4534862ae8476fdcbe965916bfa1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ddragon2"> + <description>Double Dragon II - The Revenge</description> + <year>1989</year> + <publisher>Virgin Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="197888"> + <rom name="double dragon ii - the revenge (1989)(virgin mastertronic)(side a).dsk" size="197888" crc="8170bb9b" sha1="5480069cc2719e4a7d604d26efeef08390b5235a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="double dragon ii - the revenge (1989)(virgin mastertronic)(side b).dsk" size="194816" crc="0625d7e9" sha1="c9b8823d3564d0d2cd853f9586a36c6b49346735" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="drjekyll"> + <description>Dr. Jekyll and Mr. Hyde (master disk)</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="dr. jekyll and mr. hyde (1988)(zenobi)(side a)[master disk][re-release].dsk" size="194816" crc="3429d25d" sha1="b9725f433771122798ba28ed40441204b14fe95c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="dr. jekyll and mr. hyde (1988)(zenobi)(side b)[master disk][re-release].dsk" size="194816" crc="d3cbb30d" sha1="e49eca6a9332a89ebeb747df5997a1ab7716ee81" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="baddudessp" cloneof="baddudes"> + <description>Dragon Ninja (Spa)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="135680"> + <rom name="dragon ninja (1988)(erbe)(es)(en)[re-release].dsk" size="135680" crc="13338cd1" sha1="8b6703803bf4afe5fd7de30fdabab4ffcccbb0ac" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dragnque"> + <description>Dragon-Quest</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dragon-quest (1994)(zenobi).dsk" size="194816" crc="74097eb9" sha1="7cb723772404ec52399aab549ca2324877a75cad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="drakkar"> + <description>Drakkar</description> + <year>1989</year> + <publisher>Delta Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="drakkar (1989)(delta software s.l.)(es)[aka drakar].dsk" size="102400" crc="816c2a6d" sha1="4d7eaf60c528cfae76a79de655da4732f151f8b2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="drazenpb"> + <description>Drazen Petrovic Basket</description> + <year>1989</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="drazen petrovic basket (1989)(topo soft)(es).dsk" size="73216" crc="0ef58280" sha1="744f2e6de5131cdfc6e151bd3701b95da57a2100" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="driller"> + <description>Driller</description> + <year>1987</year> + <publisher>Incentive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="driller (1987)(incentive)[passworded].dsk" size="204544" crc="e4c9034f" sha1="3bd8abab0fa649862218b6f4a42387c68733402a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="duckout"> + <description>Duck Out</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="duck out (1989)(dro soft)(es)(en).dsk" size="194816" crc="ca48cc1d" sha1="64ec19958898c2d97a79e42f126adbef055d3e94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="td2tduel"> + <description>The Duel - Test Drive II</description> + <year>1989</year> + <publisher>Accolade</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="66048"> + <rom name="duel, the - test drive ii (1989)(accolade).dsk" size="66048" crc="693d20c7" sha1="9b816281dbe1c98d652727078d60b1528def9b55" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dungromp"> + <description>A Dungeon Romp</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dungeon romp, a (1995)(zenobi).dsk" size="194816" crc="3e99350f" sha1="4db3b696c9659c060ed51eb658e97b06a79f92ba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dungmald"> + <description>The Dungeons of Maldread</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="dungeons of maldread, the (1995)(zenobi).dsk" size="194816" crc="f83f9881" sha1="50d3747b5e45bba24e92054525efc41a855f4b6d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ddux"> + <description>Dynamite Dux</description> + <year>1989</year> + <publisher>Activision</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="153088"> + <rom name="dynamite dux (1989)(activision).dsk" size="153088" crc="6f8c2d14" sha1="f6878b252d887cd6dc24bf934c4a7f35936be50e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="dynwar"> + <description>Dynasty Wars</description> + <year>1990</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="133632"> + <rom name="dynasty wars (1990)(u.s. gold).dsk" size="133632" crc="efd8e230" sha1="2e834f96544eeb6fd39dad939c3685bc3d932b26" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="emotion"> + <description>E-motion</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="e-motion (1990)(erbe)(es)(en)[re-release].dsk" size="78080" crc="216e6ce4" sha1="96f573de05900cd43a3351c031cf8eeb3b16f1f8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="echelona" cloneof="echelon"> + <description>Echelon (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="echelon (1988)(u.s. gold).dsk" size="194816" crc="7bce0509" sha1="37a23c2ae41a81645dd719b509333801d58643a6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eddthedumd" cloneof="eddthedu"> + <description>Edd the Duck (master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="64768"> + <rom name="edd the duck (1990)(zeppelin games)(side a)[master disk][re-release].dsk" size="64768" crc="ef813afc" sha1="31462f540c2b1a8cc75aee1d542bd53f4891a3e9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eddthedutmd" cloneof="eddthedu"> + <description>Edd the Duck (tape master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="256000"> + <rom name="edd the duck (1990)(zeppelin games)(side a)[re-release][tape master disk].dsk" size="256000" crc="1be41a6d" sha1="b208c586b5428fd31a043a2fc4380c89be4f74cc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eddthedu"> + <description>Edd the Duck</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="64768"> + <rom name="edd the duck (1990)(zeppelin games)[re-release].dsk" size="64768" crc="b023516f" sha1="ba6fe9a835f9ac2c0c35c30d6eedff2b53069068" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="elfinwar"> + <description>The Elfin Wars</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="elfin wars, the (1994)(zenobi).dsk" size="194816" crc="026b892b" sha1="49b9412ac4e400ae53a1dbcef4f7c6c977880f6b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="elfindor"> + <description>Elfindor</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="elfindor (1989)(zenobi)[re-release].dsk" size="194816" crc="3d6b222f" sha1="75a57b2af4042253332808a1298f5e8174e95227" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eliminat"> + <description>Eliminator</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="52992"> + <rom name="eliminator (1988)(erbe)(es)(en)[re-release].dsk" size="52992" crc="d14edabd" sha1="d375b03df6b0fcf137a57580f572c6fc2c56cb22" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ellisndi"> + <description>The Ellisnore Diamond</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ellisnore diamond, the (1992)(zenobi)[re-release].dsk" size="194816" crc="ee8934c6" sha1="3947b2c10415643d432e905ffca736aaf1142511" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="emeraelf"> + <description>The Emerald Elf</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="emerald elf, the (1995)(zenobi).dsk" size="194816" crc="95eaa5a9" sha1="38c565f37d17a6235f3db1d0e1bfcd06377baaca" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="emilbutr"> + <description>Emilio Butragueno Futbol</description> + <year>1988</year> + <publisher>Ocean Software - Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="emilio butragueno futbol (1988)(ocean software - topo soft)(gb)(es).dsk" size="58624" crc="94d830d3" sha1="e1778ad33325399f2c9c3f9a5d788f374ac1098f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="emilbutra" cloneof="emilbutr"> + <description>Emilio Butragueno Futbol (alt)</description> + <year>1988</year> + <publisher>Ocean Software - Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="116992"> + <rom name="emilio butragueno futbol (1988)(ocean software - topo soft)(gb)(es)[a].dsk" size="116992" crc="a6184800" sha1="6bbfc0bc81082d1719b932b96128d362b3c7730f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="esanchvi"> + <description>Emilio Sanchez Vicario Grand Slam</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="emilio sanchez vicario grand slam (1990)(zigurat)(es).dsk" size="58624" crc="c048d1f6" sha1="2bee364efe14224fba67057635970d7ebbf24a94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="esanchvia" cloneof="esanchvi"> + <description>Emilio Sanchez Vicario Grand Slam (alt)</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="emilio sanchez vicario grand slam (1990)(zigurat)(es)[a].dsk" size="58624" crc="09b82d36" sha1="78c5f01c0d0af55813a4eb69495f430a338d39e9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="emlynhug"> + <description>Emlyn Hughes International Soccer</description> + <year>1989</year> + <publisher>Audiogenic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="emlyn hughes international soccer (1989)(audiogenic).dsk" size="194816" crc="ebc0e76c" sha1="594526e9c2f40bdddd11c7f8a0d9ed4455d66377" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="esb"> + <description>Star Wars - The Empire Strikes Back</description> + <year>1988</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195328"> + <rom name="empire strikes back, the (1988)(domark).dsk" size="195328" crc="d95b5247" sha1="7c78b580409018da83683fe6e4e5ab687f9f6100" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="endisnig"> + <description>The End Is Nigh</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="196096"> + <rom name="end is nigh, the (1994)(zenobi).dsk" size="196096" crc="48e73904" sha1="23e85f5830bcc3cdfbfd385a80e2f4d7351c50fd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="erika" cloneof="erik"> + <description>Erik - the Phantom of the Opera (alt)</description> + <year>1987</year> + <publisher>Crysys</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="erik - the phantom of the opera (1987)(crysys).dsk" size="194816" crc="08b83623" sha1="53834f2930e893f8961949b3d3a6fcf6d61513fc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="efhodkma"> + <description>The Escape from Hodgkins' Manor</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="escape from hodgkins' manor, the (1990)(zenobi).dsk" size="194816" crc="4943ed9f" sha1="d2fa28b6de2422860bba3c76ec24119b2ab791fa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eschabit"> + <description>The Escaping Habit</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="escaping habit, the (1992)(zenobi).dsk" size="194816" crc="8083eba9" sha1="9e74c50b00acc63c9a93a68f275924b21e9fbd50" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="espionaga" cloneof="espionag"> + <description>Espionage (alt)</description> + <year>1988</year> + <publisher>Grandslam Entertainments</publisher> + <info name="usage" value="Requires manual for password protection"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="espionage (1988)(grandslam)[passworded].dsk" size="78080" crc="69318518" sha1="36c295268a4c9ffb1311ed74bcea286a2e0be716" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="euspleag"> + <description>European Superleague</description> + <year>1991</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="european superleague (1991)(cds microsystems).dsk" size="194816" crc="78795ffd" sha1="03dc2bf5e3973765ae4b86352db8b22c6d8f83bf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="extreme"> + <description>Extreme</description> + <year>1991</year> + <publisher>Digital Integration</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63232"> + <rom name="extreme (1991)(digital integration).dsk" size="63232" crc="67f4f1ba" sha1="ced54f8de664326392b48ed29072a4d5d5bea3eb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eye"> + <description>Eye</description> + <year>1987</year> + <publisher>Endurance Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="eye (1987)(endurance games).dsk" size="194816" crc="a3f4c053" sha1="f4e24bf0714a533db047243aa2259efd849d874c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="f1"> + <description>F-1</description> + <year>1991</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="f-1 (1991)(zigurat)(es)[aka formula 1 g.p. simulator].dsk" size="58624" crc="0aa6b65d" sha1="671fd441c1efeae1e78f7ecbe78990d590e45179" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="f15strik"> + <description>F-15 Strike Eagle</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="48896"> + <rom name="f-15 strike eagle (1990)(erbe)(es)(en).dsk" size="48896" crc="23150627" sha1="2f9f70218a77982f01a4dc12436a1cf90cc6da4c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="f16comba" cloneof="f16comb"> + <description>F-16 Combat Pilot (alt)</description> + <year>1991</year> + <publisher>Digital Integration</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="253952"> + <rom name="f-16 combat pilot (1991)(digital integration).dsk" size="253952" crc="01b3104a" sha1="c3ebb2c4643f22e3b2526828d80b6927399f2f7c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="f1tornadtmd"> + <description>F1 Tornado Simulator (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="f1 tornado simulator (1991)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="e47114da" sha1="b1bf502cda2506caca76b29ec022acc9d9f28334" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="federatna" cloneof="federatn"> + <description>Federation (alt)</description> + <year>1988</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="federation (1988)(crl group)[aka quann tulla].dsk" size="194816" crc="0d18bc80" sha1="870ff7bd8239a44491a09d35d00adc60e2be0f4e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fernmdie"> + <description>Fernandez Must Die</description> + <year>1988</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="fernandez must die (1988)(image works).dsk" size="204544" crc="c3e2704a" sha1="8aecdf2e969486e5e5705c508c64a606196285c8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fmbasket"> + <description>Fernando Martin Basket Master</description> + <year>1987</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="61696"> + <rom name="fernando martin basket master (1987)(dinamic)(es).dsk" size="61696" crc="72b4c4a7" sha1="d051b2fa332e4a043be9db87a5fabf865a7280fb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fiendish"> + <description>Fiendish Freddy's Big Top o'Fun</description> + <year>1990</year> + <publisher>Mindscape International</publisher> + <info name="usage" value="Requires manual for password protection"/> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A"/> + <dataarea name="flop" size="210688"> + <rom name="fiendish freddy's big top o'fun (1990)(mindscape international)(disk 1 of 2 side a)[aka fiendish freddy's big top of fun].dsk" size="210688" crc="cb007678" sha1="c4fb51a1847efb8d2525280c8897e02d1c0246b1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B"/> + <dataarea name="flop" size="210688"> + <rom name="fiendish freddy's big top o'fun (1990)(mindscape international)(disk 1 of 2 side b)[aka fiendish freddy's big top of fun].dsk" size="210688" crc="7cc2258e" sha1="2de100a539a094138a275ac640be547205449315" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side A"/> + <dataarea name="flop" size="210688"> + <rom name="fiendish freddy's big top o'fun (1990)(mindscape international)(disk 2 of 2 side a)[aka fiendish freddy's big top of fun].dsk" size="210688" crc="b67fa7d0" sha1="097e034ac017abf99e95c57ac246fe41c525ce88" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3"> + <feature name="part_id" value="Disk 2, Side B"/> + <dataarea name="flop" size="210688"> + <rom name="fiendish freddy's big top o'fun (1990)(mindscape international)(disk 2 of 2 side b)[aka fiendish freddy's big top of fun].dsk" size="210688" crc="66b997c1" sha1="4c69f04de665f9ce180045955c79d1b52519df5d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="finalch4"> + <description>The Final Chorus v4</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="final chorus, the v4 (1995)(zenobi).dsk" size="194816" crc="d08b9197" sha1="1e468dc36387e0bd1e0dd940f1a789a92176fd30" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="findeman"> + <description>The Final Demand</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="final demand, the (1993)(zenobi).dsk" size="194816" crc="a40709ef" sha1="4c5f3188c56403299a939e0f2f2d851ab45fb0e3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ffight"> + <description>Final Fight</description> + <year>1991</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="255232"> + <rom name="final fight (1991)(u.s. gold)(side a).dsk" size="255232" crc="3dfc49e0" sha1="49bb04a9285a332f46370260d8883263f65f7c46" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="255232"> + <rom name="final fight (1991)(u.s. gold)(side b).dsk" size="255232" crc="47ba3e39" sha1="dfc152177861daf9c6b2d8fb1a9b04cac78697ee" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="fireflya" cloneof="firefly"> + <description>Firefly (alt)</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="firefly (1988)(ocean).dsk" size="214784" crc="ea47b03f" sha1="e0f89ccf21303bee7fa8121b82e92b5827d288c6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fwproble"> + <description>First World Problems</description> + <year>2014</year> + <publisher><homebrew></publisher> + <info name="author" value="ZX-Studio"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="first world problems (2014-09)(zx-studio).dsk" size="194816" crc="0e7c38d5" sha1="dc279a65d532ad052b47a1e197f494b017dc7e93" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="fisha" cloneof="fish"> + <description>Fish! (alt)</description> + <year>1989</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195072"> + <rom name="fish (1989)(rainbird).dsk" size="195072" crc="9b110b8c" sha1="fb2313141dda5289a12b40cd91a12ac271f763bc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fishv103"> + <description>Fish v1.03</description> + <year>1989</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fish v1.03 (1989)(rainbird).dsk" size="194816" crc="367d44c8" sha1="a51b0cdefaffeae1d905be7f43af9a9bd3f60db7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fishrkin"> + <description>The Fisher King</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fisher king, the (1991)(zenobi).dsk" size="194816" crc="59f46ec1" sha1="e845c6a90def997cf23b21ad2f8778d017a699f2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ffonecro"> + <description>A Fistful of Necronomicons</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="fistful of necronomicons, a (1995)(zenobi).dsk" size="194816" crc="9708f9dc" sha1="017585b35183a3b34251598ba3bd487fa79209ee" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="flameout"> + <description>Flameout</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="flameout (1994)(zenobi).dsk" size="194816" crc="7fe10b1b" sha1="7b9682942393ab38974f9fa92580685c639f34af" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="footdir2a" cloneof="footdir2"> + <description>Football Director II (alt)</description> + <year>1987</year> + <publisher>D&H Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="football director ii (1987)(d&h games).dsk" size="194816" crc="72886e79" sha1="7dfb23c32594aaa76891c502bfd27de6031aeaa0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fbmanagr"> + <description>Football Manager</description> + <year>1982</year> + <publisher>Addictive Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="football manager (1982)(addictive games).dsk" size="194816" crc="b705269b" sha1="8b587fccf87e90f402262f1314996d1fca9fe37a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fbmanag3"> + <description>Football Manager 3</description> + <year>1991</year> + <publisher>Addictive Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="football manager 3 (1991)(addictive games)(side a).dsk" size="194816" crc="a1514dc0" sha1="8cbf454e00edc0c92b333554566d9b305c5db587" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="football manager 3 (1991)(addictive games)(side b).dsk" size="194816" crc="960d092a" sha1="5b2f005d623c1eb5406133d92a51d142ef5384aa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="foty2a" cloneof="foty2"> + <description>Footballer of the Year 2 (alt)</description> + <year>1989</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="255232"> + <rom name="footballer of the year 2 (1989)(gremlin graphics).dsk" size="255232" crc="ed6b20ca" sha1="e9e349e01090b6323036cbe476e2197d3999e598" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="forpetes"> + <description>For Pete's Sake</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="for pete's sake (1993)(zenobi).dsk" size="194816" crc="2013dbe6" sha1="d2cd15437ebda07e9e40708c4847b9e61636583a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="forgottn"> + <description>Forgotten Worlds</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="213760"> + <rom name="forgotten worlds (1989)(u.s. gold).dsk" size="213760" crc="2e8774e0" sha1="ac689946f98ace1e72edbfa4101f239b39a8d132" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="forgottna" cloneof="forgottn"> + <description>Forgotten Worlds (alt)</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="133120"> + <rom name="forgotten worlds (1989)(u.s. gold)[a].dsk" size="133120" crc="01bd6ff9" sha1="df381f59162d6c5979e598c75e2dec2a0d27494d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="foursymb"> + <description>The Four Symbols</description> + <year>1992</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="four symbols, the (1992)(fsf adventures).dsk" size="194816" crc="ba5f9395" sha1="c364ab3404004ae9caaeb3cde00a4ad0765345f9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="foxxfigb"> + <description>Foxx Fights Back</description> + <year>1988</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="foxx fights back (1988)(image works)[f][aka fox fights back].dsk" size="73216" crc="c8362449" sha1="74abfc7c6f649b2724ca9efc1639ab586c8d5f09" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fredhams"> + <description>Freddy Hardest en Manhattan Sur</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="69632"> + <rom name="freddy hardest en manhattan sur (1989)(dinamic)(es)[aka freddy hardest in south manhattan].dsk" size="69632" crc="421fbbe2" sha1="fd35f4b9f7c2525eed5dff0958d74732a1a46a1b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="frightma"> + <description>Frightmare</description> + <year>1988</year> + <publisher>Cascade Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="frightmare (1988)(cascade games).dsk" size="194816" crc="8b1fc84a" sha1="f9c574d1e34d937c688524ecea115775b8192759" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="fullthr2tmd"> + <description>Full Throttle 2 (tape master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="full throttle 2 (1990)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="8cd531b9" sha1="12b96391beb7b97a99eab2191b010b7900a82b17" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="funkyfuna" cloneof="funkyfun"> + <description>Funky Fungus (alt)</description> + <year>2013</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="funky fungus (2013-09)(grussu, alessandro)(it)(m5).dsk" size="194816" crc="3300d623" sha1="94b79a2cb8744aa14bc6ebe0ca3d3d238b1751f4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This version adds Italian to the language selection screen --> + <software name="funkyfun"> + <description>Funky Fungus</description> + <year>2013</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="funky fungus (2013-09)(grussu, alessandro)(it)(m6).dsk" size="194816" crc="2438e3be" sha1="c8b718e2391504bdd116c7ea61bcd5de311d7f68" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thefury"> + <description>The Fury</description> + <year>1988</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="fury, the (1988)(martech games).dsk" size="214784" crc="63e21004" sha1="9591fe65eb2a0489b68aa623cb4e4711ba61422a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="glocr360sp" cloneof="glocr360"> + <description>G-LOC (Spa)</description> + <year>1992</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="127232"> + <rom name="g-loc (1992)(erbe)(es)(en)[re-release].dsk" size="127232" crc="49e92c72" sha1="2b72df02d48e33984ed7e07ea064d6cf76cedbfe" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="glocr360"> + <description>G-LOC - R360</description> + <year>1992</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="255232"> + <rom name="g-loc - r360 (1992)(u.s. gold)(side a).dsk" size="255232" crc="80751c5f" sha1="7fa45f3f94598f53398f8c32f6b5e89fbeb2605a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="255232"> + <rom name="g-loc - r360 (1992)(u.s. gold)(side b).dsk" size="255232" crc="af608104" sha1="a490a0e6121b1d16039ba5ef542c903b80faddcc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gwoaname"> + <description>Game Without a Name</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="game without a name (1987)(zenobi)[re-release].dsk" size="194816" crc="def2f93d" sha1="5638e013a70b850ba3d99cb96149f40b9db49b7d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gamessum"> + <description>The Games - Summer Edition</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="games - summer edition, the (1989)(u.s. gold)(side a).dsk" size="194816" crc="8d1100e4" sha1="eb8cc85279dbd1075dd783ba2807df92345021e5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="games - summer edition, the (1989)(u.s. gold)(side b).dsk" size="194816" crc="2f767573" sha1="dc8979f7558a486611f420f2cab285d82f00c7d8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="garfielda" cloneof="garfield"> + <description>Garfield - Big, Fat, Hairy Deal (alt)</description> + <year>1988</year> + <publisher>The Edge</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="garfield - big, fat, hairy deal (1988)(edge, the).dsk" size="194816" crc="f49a2bfb" sha1="5b93c42be8793cee1e8a73d4ce4ad5308f829346" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="linekskla" cloneof="linekskl"> + <description>Gary Lineker's Super Skills (alt)</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gary lineker's super skills (1988)(gremlin graphics).dsk" size="194816" crc="0383082c" sha1="3d62fbab0784ee24e2d624d84f4607ba39556879" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lineksssa" cloneof="lineksss"> + <description>Gary Lineker's Super Star Soccer (alt)</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="gary lineker's super star soccer (1987)(gremlin graphics).dsk" size="174848" crc="5ad471d4" sha1="9dfb8be61451f07184a1570dc0c42a290f884e75" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lineksssb" cloneof="lineksss"> + <description>Gary Lineker's Super Star Soccer (alt 2)</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="gary lineker's super star soccer (1987)(gremlin graphics)[a].dsk" size="174848" crc="33b7cea7" sha1="5147ecbc3eddb6bcada1f4516ca0139087b96851" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="gauntletb" cloneof="gauntlet"> + <description>Gauntlet (alt 2)</description> + <year>1987</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="gauntlet (1987)(u.s. gold).dsk" size="174848" crc="30f6477a" sha1="cace3b49f91e1e4b7c87c924e5df05294ab6a635" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="gauntleta" cloneof="gauntlet"> + <description>Gauntlet (alt)</description> + <year>1987</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gauntlet (1987)(u.s. gold)[a].dsk" size="194816" crc="9073be5a" sha1="e360dab9875526fb0e3a94459d966dc0005efdcc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="gauntlt2a" cloneof="gauntlt2"> + <description>Gauntlet II (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="gauntlet ii (1988)(u.s. gold).dsk" size="174848" crc="9684ed6f" sha1="80a82fd9179e0cb5afd6eb3d0613508ef696da3e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gaunt3"> + <description>Gauntlet III - The Final Quest</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="255232"> + <rom name="gauntlet iii - the final quest (1991)(erbe)(es)(en)(side a)[re-release].dsk" size="255232" crc="4fef2283" sha1="5b3f7b84d489900d62c594ee6430bfc40826ff69" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="256256"> + <rom name="gauntlet iii - the final quest (1991)(erbe)(es)(en)(side b)[re-release].dsk" size="256256" crc="0c9043a0" sha1="7b923998a993f8d2bc48a54d67ce5deb693d14f5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="gazza2a" cloneof="gazza2"> + <description>Gazza II (alt)</description> + <year>1990</year> + <publisher>Empire</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="185088"> + <rom name="gazza ii (1990)(empire).dsk" size="185088" crc="21159d93" sha1="5854e7aff0623135f9347a9a52512dd5e3c6c2c2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gazzasp" cloneof="gazza"> + <description>Gazza's Super Soccer (Spa)</description> + <year>1990</year> + <publisher>Proein Soft Line</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gazza's super soccer (1990)(proein soft line)(es)[re-release].dsk" size="194816" crc="d22b0f96" sha1="f25374b0533edda86d5fa9239e475f650df573c0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gemiwing"> + <description>Gemini Wing</description> + <year>1989</year> + <publisher>Virgin Mastertronic</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="49920"> + <rom name="gemini wing (1989)(virgin mastertronic)(side a).dsk" size="49920" crc="ac37933e" sha1="e45156913ef978f1343313675ec9707506a1db83" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="189952"> + <rom name="gemini wing (1989)(virgin mastertronic)(side b).dsk" size="189952" crc="b6fa2da2" sha1="5250b1bb4bb427f1caa40c95c85892299c86e200" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="genedown"> + <description>Genesis - Dawn of a New Day</description> + <year>2010</year> + <publisher>RetroWorks</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="genesis - dawn of a new day (2010)(retroworks)(es)(en).dsk" size="194816" crc="b66be9f1" sha1="3cfbba9fe3fecd88970179782f44e4a8696492a1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ghoulssp" cloneof="ghouls"> + <description>Ghouls 'n' Ghosts (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="255232"> + <rom name="ghouls 'n' ghosts (1989)(erbe)(es)(en)[re-release].dsk" size="255232" crc="0e2116f3" sha1="7872f08c3ed59f1a0fe25c47483588ddaacff99e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="ghoulsa" cloneof="ghouls"> + <description>Ghouls 'n' Ghosts (alt)</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="236032"> + <rom name="ghouls 'n' ghosts (1989)(u.s. gold).dsk" size="236032" crc="684b0a6e" sha1="b222ee7bc8da5ef2ff368393b5b322ca7cceab65" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="giantkil"> + <description>Giant Killer</description> + <year>1988</year> + <publisher>Topologika</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="giant killer (1988)(topologika).dsk" size="194816" crc="a14f9071" sha1="2b2817a0335d68b737198f6a63abefcd200eefd9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gnomeran"> + <description>Gnome Ranger</description> + <year>1987</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="gnome ranger (1987)(level 9 computing)(side a).dsk" size="194816" crc="c0a2c1d9" sha1="72dd23ade8f456d89227c117fc2a8deaa9cfed6a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="gnome ranger (1987)(level 9 computing)(side b).dsk" size="194816" crc="5cf4fde5" sha1="196e6eeba57acf9d3144c57786416510fd25735f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gnomerana" cloneof="gnomeran"> + <description>Gnome Ranger (alt)</description> + <year>1987</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="gnome ranger (1987)(level 9 computing)(side a)[a].dsk" size="194816" crc="ab6f9fc4" sha1="dee58071ffdcad55e876989ae3c6044c7b113c05" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="gnome ranger (1987)(level 9 computing)(side b)[a].dsk" size="194816" crc="78d2948c" sha1="cb60320983e5293c988ad59ff8d855e947662345" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="godsowar"> + <description>The Gods of War</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gods of war, the (1987)(zenobi)[re-release].dsk" size="194816" crc="5f17551f" sha1="323f1944464f40f6f3d3c71f3325720f976cee81" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="goldnaxesp" cloneof="goldnaxe"> + <description>Golden Axe (Spa)</description> + <year>1990</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="165888"> + <rom name="golden axe (1990)(mcm)(es)(en)(side a)[re-release].dsk" size="165888" crc="6d1f7b39" sha1="ac6adace846dfb0317b10fe0b1c0563e024e2cc5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="golden axe (1990)(mcm)(es)(en)(side b)[re-release].dsk" size="194816" crc="66d2022a" sha1="ceb5c62acb2a9f9282aeee1f696dd336b9d853a7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="goldnaxe"> + <description>Golden Axe</description> + <year>1990</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="212736"> + <rom name="golden axe (1990)(virgin games)(side a).dsk" size="212736" crc="2a528ede" sha1="091755e551ee628919411c50a0b0eeb387488658" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="golden axe (1990)(virgin games)(side b).dsk" size="194816" crc="fcdd188f" sha1="bc390526d92c77193626f0419f89febd24ba3af9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gobasket"> + <description>Golden Basket</description> + <year>1990</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="211968"> + <rom name="golden basket (1990)(opera soft)(es).dsk" size="211968" crc="59dee941" sha1="4018f2064473474ff5e8b25f8f4323c0f7611b99" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="goldlock"> + <description>The Golden Locket</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="golden locket, the (1993)(zenobi)[re-release].dsk" size="194816" crc="53843bdd" sha1="607631dea927f5e00fba2818e0f5b795e954fe9e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="goldpyra"> + <description>The Golden Pyramid</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="golden pyramid, the (1991)(zenobi).dsk" size="194816" crc="bedb25dc" sha1="706f7604eac2baeb15ebdfef25c631c1dd82ecdd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gswobhak"> + <description>The Golden Sword of Bhakhor</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="golden sword of bhakhor, the (1991)(zenobi).dsk" size="194816" crc="d02d944a" sha1="6b4eb8e54dcd781f04d7c37e6198bb60fb75ed79" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="grabghou"> + <description>Grabbed by the Ghoulies</description> + <year>1992</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="grabbed by the ghoulies (1992)(fsf adventures)[re-release].dsk" size="194816" crc="dace798a" sha1="d449a4229125d4e858e7da44176d358be22b17cb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="graesocctmd"> + <description>Graeme Souness Soccer Manager (tape master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="graeme souness soccer manager (1992)(zeppelin games)[tape master disk].dsk" size="194816" crc="a28d55c1" sha1="3ea9842497c958a7c4f1c7ce3da5e3c4c24460b1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- would be clone of "Hudson Hawk" if a dump existed --> + <software name="hudsonhasp"> + <description>El Gran Halcon</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="146176"> + <rom name="gran halcon, el (1991)(erbe)(es)(en)[aka hudson hawk][re-release].dsk" size="146176" crc="9bcc8c2b" sha1="df35fafcb381b0d02eb04baf6926b61ac83f0581" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gryzor"> + <description>Gryzor</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="gryzor (1987)(ocean).dsk" size="194816" crc="c237d67d" sha1="1ffb3dac932ab7b84cd9d06ed4a88312680026e9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gwar"> + <description>Guerrilla War - Hail the Heroes</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="134144"> + <rom name="guerrilla war - hail the heroes (1988)(imagine).dsk" size="134144" crc="58d62d43" sha1="e17740a5fe4fd6468f9d107229bf252d94f3ef45" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="guilthie"> + <description>The Guild of Thieves</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="guild of thieves, the (1988)(rainbird)(side a).dsk" size="194816" crc="3048e6d4" sha1="56143b609159649b8ab836553cdaf84f7d2188e8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="guild of thieves, the (1988)(rainbird)(side b).dsk" size="194816" crc="869107d0" sha1="555451be82b911d0612445f4560a48303f195916" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="guilthiea" cloneof="guilthie"> + <description>The Guild of Thieves (alt)</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="guild of thieves, the (1988)(rainbird)(side a)[a].dsk" size="194816" crc="7832e385" sha1="a4c37a58156b5b957be5aefb9aaf0878c39f1123" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side missing from dump, using same as parent set --> + <dataarea name="flop" size="194816"> + <rom name="guild of thieves, the (1988)(rainbird)(side b).dsk" size="194816" crc="869107d0" sha1="555451be82b911d0612445f4560a48303f195916" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="guiltell"> + <description>Guillermo Tell</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <info name="usage" value="Requires Gun Stick lightgun"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="216064"> + <rom name="guillermo tell (1989)(opera soft)(es).dsk" size="216064" crc="6c1dae08" sha1="e4c18ad9bb2f04c1466c4cfd30362d57531ef9e5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gunship"> + <description>Gunship</description> + <year>1987</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="gunship (1987)(microprose)(side a).dsk" size="194816" crc="b8c9e143" sha1="81e9922afff03d074d995c00614b490baaa1a10f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="gunship (1987)(microprose)(side b).dsk" size="194816" crc="abc054f8" sha1="60dfff8cbe8deb3cbadc770d1a320d3c4d5c247c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="gunshipa" cloneof="gunship"> + <description>Gunship (alt)</description> + <year>1987</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="gunship (1987)(microprose)(side a)[a].dsk" size="194816" crc="cb851c5f" sha1="c87ef92255d3b4739f13005995913a1b1ccd61ed" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="gunship (1987)(microprose)(side b)[a].dsk" size="194816" crc="35775533" sha1="641ffdeb1d785040b2fab099d6442f617f2e11ca" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="hatea" cloneof="hate"> + <description>H.A.T.E. - Hostile All Terrain Encounter (alt)</description> + <year>1989</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="h.a.t.e. (1989)(gremlin graphics)[aka hostile all terrain encounter].dsk" size="219136" crc="c77d0383" sha1="60c22e50e0827fa2d8ee63fe496cd2e47046ba5a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="harddriv"> + <description>Hard Drivin'</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hard drivin' (1989)(domark).dsk" size="194816" crc="c26cc54a" sha1="77b919946cc3bc66a6a62c9a788351fd369fa75f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="harddrivsp" cloneof="harddriv"> + <description>Hard Drivin' (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63488"> + <rom name="hard drivin' (1989)(erbe)(es)(en)[re-release].dsk" size="63488" crc="e6f85a75" sha1="4e9a802f657b7fc04a02b0e0877830c582105ccf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="harddriva" cloneof="harddriv"> + <description>Hard Drivin' (alt)</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hard drivin' (1989)(domark)[a].dsk" size="194816" crc="384b47f2" sha1="08a23a450b6fbb383444b94e29bba02e871fb174" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hellfiat"> + <description>Hellfire Attack</description> + <year>1989</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="214784"> + <rom name="hellfire attack (1989)(martech games)(side a).dsk" size="214784" crc="793a0cac" sha1="5fe57928392926af38b69983d5f29dfd7f7632e9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="hellfire attack (1989)(martech games)(side b).dsk" size="194816" crc="12a71f04" sha1="c47c87075ec8cfe4ed9d4040e0accf1989079d86" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="helvera"> + <description>Helvera - Mistress of the Park</description> + <year>1993</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="helvera - mistress of the park (1993)(fsf adventures).dsk" size="194816" crc="4da1fe77" sha1="069936422b4ff7ba66321efb70edb7eeba64c72a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hermitag"> + <description>The Hermitage</description> + <year>1989</year> + <publisher>Pegasus</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="hermitage, the (1989)(pegasus)(side a).dsk" size="194816" crc="324ca25e" sha1="c8dfe93e92cd64160890698fac76329e140c6ebb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="hermitage, the (1989)(pegasus)(side b).dsk" size="194816" crc="c66477bb" sha1="0e1a7102c315843b58e057f45201a7803c356979" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="heroqsta" cloneof="heroqst"> + <description>Hero Quest (alt)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hero quest (1991)(gremlin graphics).dsk" size="194816" crc="ab30a1d0" sha1="915dde45e84df561fea89b8b4c3cea6892ca85c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="heroqstb" cloneof="heroqst"> + <description>Hero Quest (alt 2)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hero quest (1991)(gremlin graphics)[a].dsk" size="194816" crc="758aca42" sha1="1646d3fc7ad3719351cc9be38f3a7e714d9d866f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="heroqstc" cloneof="heroqst"> + <description>Hero Quest (alt 3)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hero quest (1991)(gremlin graphics)[a2].dsk" size="194816" crc="dec047e7" sha1="94dae34b89d72eed5e05f64a85f86aeac4ae8827" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="heroqstd" cloneof="heroqst"> + <description>Hero Quest (alt 4)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="hero quest (1991)(gremlin graphics)[a3].dsk" size="199680" crc="ceb5f071" sha1="1033f9307c145f34d8bc6d0fb8f8c7e581165588" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="heroque2"> + <description>Hero Quest - Return of the Witch Lord</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hero quest - return of the witch lord (1991)(gremlin graphics).dsk" size="194816" crc="e11de839" sha1="6e72c9ffdfcefc98f26be651d6af9897f42c1826" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="heroque2a" cloneof="heroque2"> + <description>Hero Quest - Return of the Witch Lord (alt)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hero quest - return of the witch lord (1991)(gremlin graphics)[a].dsk" size="194816" crc="4ed5a340" sha1="71954827b51a39b4a682f94198026adf9f6f9205" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="heroque2b" cloneof="heroque2"> + <description>Hero Quest - Return of the Witch Lord (alt 2)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hero quest - return of the witch lord (1991)(gremlin graphics)[a2].dsk" size="194816" crc="86da0a2e" sha1="003e63884fb0a6dffcab7de701fad9df3206b4b5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="heroque2c" cloneof="heroque2"> + <description>Hero Quest - Return of the Witch Lord (alt 3)</description> + <year>1991</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="hero quest - return of the witch lord (1991)(gremlin graphics)[a3].dsk" size="199680" crc="cdac513e" sha1="c20215ef636d6c2f92a5af5a87a8c2e8ce8be774" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="heroesre"> + <description>Heroes Rescue</description> + <year>2016</year> + <publisher>Defecto Digital Studios</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="heroes rescue (2016-12-23)(defecto digital studios).dsk" size="204544" crc="1802d377" sha1="909d426b26179f2521f43ab8074246a504007319" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="herolancsp" cloneof="herolanc"> + <description>Heroes of the Lance (Spa)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="heroes of the lance (1988)(erbe)(es)(en)[re-release].dsk" size="194816" crc="99cc6af8" sha1="afd6e3b1ae18888ed999d690a9373a0f7778c7a5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="herolanca" cloneof="herolanc"> + <description>Heroes of the Lance (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="heroes of the lance (1988)(u.s. gold).dsk" size="194816" crc="48f81876" sha1="d801954e2eca715f3b0b0057ebccd7021c7cae9a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hidnseek"> + <description>Hide and Seek</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hide and seek (1995)(zenobi)[re-release].dsk" size="194816" crc="a7b8a803" sha1="ee73f444d4637195c7272ea392dd174e534e0413" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hobshoar"> + <description>Hob's Hoard</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="hob's hoard (1991)(zenobi).dsk" size="194816" crc="beca6e53" sha1="9b7f1c131bbab3b588a79667f06930535d0e47e8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hoppingm"> + <description>Hopping Mad</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="161024"> + <rom name="hopping mad (1988)(elite systems)[aka hoppin' mad].dsk" size="161024" crc="a9a4d047" sha1="7e3fac325b154027565744795e70c2f387668a44" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hostagessp" cloneof="hostages"> + <description>Hostages (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="hostages (1990)(erbe)(es)(en)(side a)[re-release].dsk" size="174848" crc="2d074804" sha1="0d75703c852d2941794701ccf668dc8edc68ad56" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="174848"> + <rom name="hostages (1990)(erbe)(es)(en)(side b)[re-release].dsk" size="174848" crc="55da5edb" sha1="77a872dfe8a5b37880e27c101660e62fcb9102bb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hostages"> + <description>Hostages</description> + <year>1990</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="148736"> + <rom name="hostages (1990)(infogrames)(fr)(en)(side a).dsk" size="148736" crc="181e0d1e" sha1="4db8c8ea16e12caa75cf6a5ebe046fe15f901726" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="135680"> + <rom name="hostages (1990)(infogrames)(fr)(en)(side b).dsk" size="135680" crc="c5d910c7" sha1="0ad584237568a82c5c20a0e9b565303b8ac229d0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hotshot"> + <description>Hotshot</description> + <year>1988</year> + <publisher>Prism Leisure Corporation</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="hotshot (1988)(prism leisure corporation)[re-release].dsk" size="204544" crc="c0382c46" sha1="34aa79e19795da44846fd0362cfbbf2318a1ea8a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="houseott"> + <description>The House on the Tor</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="house on the tor, the (1990)(zenobi).dsk" size="194816" crc="a29246d9" sha1="49b35455d6747345933cefac220fe46fdd6cb76e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thehouse"> + <description>The House</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="house, the (1994)(zenobi).dsk" size="194816" crc="ce8ac110" sha1="56edf0e0151b87a7bf0e559638373a92a9c99496" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="hkma" cloneof="hkm"> + <description>H.K.M. - Human Killing Machine (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="human killing machine (1988)(u.s. gold)[aka hkm].dsk" size="219136" crc="6070005d" sha1="aa6993a2e75dee924a8a673358c507922dbe939f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="hkmb" cloneof="hkm"> + <description>Human Killing Machine (alt 2)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="213760"> + <rom name="human killing machine (1988)(u.s. gold)[a][aka hkm].dsk" size="213760" crc="23f6daf4" sha1="8a3d32f5da2c9087c1b50d4a205ad6086cd13862" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ineedspe"> + <description>I Need Speed</description> + <year>2009</year> + <publisher>Computer Emuzone</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="i need speed (2009)(computer emuzone)(es)(en).dsk" size="194816" crc="f1f45a4a" sha1="f63895b1d4353454c4ba29fce31bf9d2d4fa126a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="icebreak"> + <description>Ice-Breaker</description> + <year>1990</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="116992"> + <rom name="ice-breaker (1990)(topo soft)(es).dsk" size="116992" crc="b92855fa" sha1="9bb3c9a9465251794cb4f52dba61b41fc31d6d0d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ikariwar"> + <description>Ikari Warriors</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="ikari warriors (1988)(elite systems).dsk" size="214784" crc="6a5e6217" sha1="92702073e396e40ef274ed8bb90b0e2562ef6d64" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ikariwara" cloneof="ikariwar"> + <description>Ikari Warriors (alt)</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204032"> + <rom name="ikari warriors (1988)(elite systems)[a].dsk" size="204032" crc="aa6e26a1" sha1="879c95e0827b5baace546ddf94a5f49a4555ab0c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="impact"> + <description>Impact</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="impact (1992)(zenobi).dsk" size="194816" crc="596680d7" sha1="8b834a5283f06b3d14bd70e3ba7d5aa82b5378db" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="impossamsp" cloneof="impossam"> + <description>Impossamole (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="impossamole (1990)(erbe)(es)(en)[re-release].dsk" size="214784" crc="4e9a963d" sha1="1f0723d701dbaad0c57a47e0bde0ff79d5a58dd1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="impossam"> + <description>Impossamole</description> + <year>1990</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="impossamole (1990)(gremlin graphics).dsk" size="214784" crc="04ece926" sha1="dd49acee739bf6629420813275271305f8b48db2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="indy3sp"> + <description>Indiana Jones y la Ultima Cruzada</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="indiana jones y la ultima cruzada (1989)(erbe)(es)(en)[aka indiana jones and the last crusade][re-release].dsk" size="194816" crc="e2de5128" sha1="e0c5862105818b5d88fe5543f04ddc67f45be587" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="inf2rtre"> + <description>Infiltrado 2 - Return To Reactor</description> + <year>2004</year> + <publisher>OCTOCOM</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="infiltrado 2 - return to reactor (2004)(octocom)(es).dsk" size="194816" crc="9196fcf8" sha1="392d82daf3c96bd84918935c9d3835a2127f1109" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ingrback"> + <description>Ingrid's Back</description> + <year>1988</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="ingrid's back (1988)(level 9 computing)(side a).dsk" size="194816" crc="7b9efce5" sha1="c15eb32cc8c21ab3dc5919d3699ffbf707a52d6f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="ingrid's back (1988)(level 9 computing)(side b).dsk" size="194816" crc="02a85f6a" sha1="d401c963d2fd9a7cd80641e5c5ea34ffe54ae8a7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ingrbacka" cloneof="ingrback"> + <description>Ingrid's Back (alt)</description> + <year>1988</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="ingrid's back (1988)(level 9 computing)(side a)[a].dsk" size="194816" crc="7d33b69a" sha1="49230a2de96ad140c97c60cc31a03c6db1a77a06" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="ingrid's back (1988)(level 9 computing)(side b)[a].dsk" size="194816" crc="a8c6adff" sha1="2e5f36a31a6eff7ff68d0105c28a03d7ba08133d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ingrbackb" cloneof="ingrback"> + <description>Ingrid's Back (alt 2)</description> + <year>1988</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="389376"> + <rom name="ingrid's back (1988)(level 9 computing)(side a)[a2].dsk" size="389376" crc="9f4244cf" sha1="67367fd3815e826f95b96a2cd56011cf7857e328" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side missing from dump, using same as parent set --> + <dataarea name="flop" size="194816"> + <rom name="ingrid's back (1988)(level 9 computing)(side b).dsk" size="194816" crc="02a85f6a" sha1="d401c963d2fd9a7cd80641e5c5ea34ffe54ae8a7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="intercit"> + <description>The Inter City</description> + <year>1988</year> + <publisher>Steam Railway Simulations</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="inter city, the (1988)(steam railway simulations).dsk" size="194816" crc="63c6f473" sha1="d76be72e72634a97dc5ebd98fae82b7c4a0c2b8c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="i5asfoottmd"> + <description>International 5 A Side Football (tape master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="international 5 a side football (1992)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="9e5b009d" sha1="cc2563d1268d9053070d0d6ffeb0d96170e7756c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="international 5 a side football (1992)(zeppelin games)(side b)[master disk].dsk" size="194816" crc="77a9b7e9" sha1="1b1ef57247eea772d00bb0bb9c9e264b443b8b93" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="inkarate"> + <description>International Karate</description> + <year>1985</year> + <publisher>System 3 Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="international karate (1985)(system 3).dsk" size="194816" crc="7321dcb7" sha1="85b8c729932f58e096a6d7dcbcb0441ea1162c6e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="inttenn"> + <description>International Tennis (master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="international tennis (1992)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="a7fdd3c9" sha1="f696e4e7647a71bf8699fef24b5993ab09f2d398" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="international tennis (1992)(zeppelin games)(side b).dsk" size="194816" crc="99808d9b" sha1="fe9e1a0ad26eedeca49fb5f33855e686b9cf1412" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="eaglnest"> + <description>Into the Eagle's Nest</description> + <year>1987</year> + <publisher>Pandora</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="into the eagle's nest (1987)(pandora).dsk" size="73216" crc="32543165" sha1="6a3712a1938fef366d1ca4e5202f3b3a42711c57" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="untouchasp" cloneof="untoucha"> + <description>Los Intocables</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="39168"> + <rom name="intocables, los (1989)(erbe)(es)(en)(side a)[aka untouchables, the][re-release].dsk" size="39168" crc="25d0a261" sha1="2fce2e88ee1f03affec4086011966ee90098ca7e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="intocables, los (1989)(erbe)(es)(en)(side b)[aka untouchables, the][re-release].dsk" size="194816" crc="cf0ff520" sha1="49a6c3aa3c0a45bf7cbb6633a1fe6738430b0a26" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="ironlorda" cloneof="ironlord"> + <description>Iron Lord (alt)</description> + <year>1989</year> + <publisher>Ubi Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="215296"> + <rom name="iron lord (1989)(ubi soft)(fr)(en).dsk" size="215296" crc="6b0e52b2" sha1="8965b9086d66cbab42bc69f8a3abef2cbc9d23dd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="isotcons"> + <description>Isotopia Construction Set</description> + <year>2007</year> + <publisher>OCTOCOM</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="isotopia construction set (2007)(octocom)(es)(side a).dsk" size="194816" crc="14cb6ba0" sha1="d9f2a0783fda351a1a8b48551fbc7bb28e4e7c1e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="isotopia construction set (2007)(octocom)(es)(side b).dsk" size="194816" crc="405e6921" sha1="d6b8908dbc2810b1f55ae2e3aa5cafc68d541ea3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="italia90a" cloneof="italia90"> + <description>Italia '90 - World Cup Soccer (alt)</description> + <year>1989</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="62720"> + <rom name="italia '90 - world cup soccer (1989)(virgin games)[aka world cup soccer '90].dsk" size="62720" crc="f163182d" sha1="ed9cb8943e7275fe04b88174d8b9b5b7373ca9f1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This would be a clone of "Italy 1990" if a dump existed. Not to confuse with "Italia '90 - World Cup Soccer" --> + <software name="italy90sp"> + <description>Italia 1990</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="80896"> + <rom name="italia 1990 (1990)(erbe)(es)(en)[aka italy 1990][re-release].dsk" size="80896" crc="c682f692" sha1="682b9a4e2c93700635507aaeeaac92ce4a0bfb2f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="offroada" cloneof="offroad"> + <description>Ivan 'Ironman' Stewart's Super Off Road (alt)</description> + <year>1990</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="56320"> + <rom name="ivan 'ironman' stewart's super off road racer (1990)(virgin games).dsk" size="56320" crc="79166768" sha1="e35c4bff06d9ffaba8f84782cc5430d3e9107b48" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jabato"> + <description>Jabato</description> + <year>1989</year> + <publisher>Aventuras AD</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="107264"> + <rom name="jabato vs imperio - libertad (1989)(aventuras ad)(es).dsk" size="107264" crc="56519b9f" sha1="56ae5c77ff9e90aab9332af90cb126befb1585a8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jadeston"> + <description>The Jade Stone</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jade stone, the (1987)(zenobi)(side a)[re-release].dsk" size="194816" crc="a62c7ffc" sha1="2a8d8b151521de78e8e746991215327ef408be10" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jade stone, the (1987)(zenobi)(side b)[re-release].dsk" size="194816" crc="b9dac541" sha1="392622dd2211fa9d8cd9502accd2169d276e613a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jadestona" cloneof="jadeston"> + <description>The Jade Stone (alt)</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jade stone, the (1987)(zenobi)[re-release].dsk" size="194816" crc="49966c26" sha1="9b58a66a9733afc97b9313279e90084436b9ef1d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jkhansqu"> + <description>Jahangir Khan's World Championship Squash</description> + <year>1991</year> + <publisher>Krisalis</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jahangir khan's world championship squash (1991)(krisalis)(side a).dsk" size="194816" crc="6cf8742c" sha1="7072549688ce96f3867bbbb647032803d5b72093" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jahangir khan's world championship squash (1991)(krisalis)(side b).dsk" size="194816" crc="654bbd30" sha1="78494f135b0182d9c1c3028c12dc4f79e5e95b02" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="janosik"> + <description>Janosik</description> + <year>2013</year> + <publisher><homebrew></publisher> + <info name="author" value="Alex Heather, Rafal Miazga"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="janosik (2013)(heather, alex - miazga, rafal)(en-pl).dsk" size="194816" crc="27f80962" sha1="fafa9dd2ba30d6302b1ffe5ba32d0eac2a1e9832" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jesterqu"> + <description>Jester Quest</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jester quest (1988)(zenobi)[re-release].dsk" size="194816" crc="3503d839" sha1="c01d6ed8687c2ef51470e8ac0993f18be847bd4f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jbikesim"> + <description>Jet Bike Simulator</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="208384"> + <rom name="jet bike simulator (1989)(mcm)(es)(en)(side a).dsk" size="208384" crc="30433f34" sha1="48a9225faaf25e6b731df976d402a817d8ad8800" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jet bike simulator (1989)(mcm)(es)(en)(side b).dsk" size="194816" crc="79e4c0cb" sha1="d7b5cfbab542e5e77447d02d42568c7a27bd7a85" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jsw128k"> + <description>Jet Set Willy 128K</description> + <year>1996</year> + <publisher>John Elliott</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jet set willy 128k (1996)(elliott, john).dsk" size="194816" crc="13ec1459" sha1="3e294edc5a2756230b0ea6f9d44b2b2034d67504" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jinxter"> + <description>Jinxter</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jinxter (1988)(rainbird).dsk" size="194816" crc="845679ed" sha1="81abfa5dc7aaba651416e4cd3e608a35efcb6003" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jinxtera" cloneof="jinxter"> + <description>Jinxter (alt)</description> + <year>1988</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="jinxter (1988)(rainbird)[a].dsk" size="194816" crc="7e71fb55" sha1="46d026205cec35b7852096ae05a7b7921d14f947" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jockywil"> + <description>Jocky Wilson's Compendium of Darts (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="jocky wilson's compendium of darts (1991)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="68116070" sha1="684f2f5521860e779c2d94d00108417286164671" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="jocky wilson's compendium of darts (1991)(zeppelin games)(side b)[tape master disk].dsk" size="194816" crc="d56ab3bb" sha1="141a6d47460a5f5db1cc3eef7926ce80f6feaca4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="junglewa"> + <description>Jungle Warrior</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63488"> + <rom name="jungle warrior (1990)(zigurat)(es).dsk" size="63488" crc="3ca364a1" sha1="5cbaa05e1994dab8b18a9d9a126296d00a9bda66" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="dalglisha" cloneof="dalglish"> + <description>Kenny Dalglish Soccer Match (alt)</description> + <year>1990</year> + <publisher>Impressions</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="kenny dalglish soccer match (1990)(impressions).dsk" size="194816" crc="931767d6" sha1="17f63db7606e3b3b6dfe0803151b7c2cd3a475b8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="khangpla"> + <description>The Khangrin Plans</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="khangrin plans, the (1992)(zenobi).dsk" size="194816" crc="775b884f" sha1="669b305e0c2dfde4b27b5141c620dbc7dd3b9a67" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="kickoffa" cloneof="kickoff"> + <description>Kick Off (alt)</description> + <year>1989</year> + <publisher>Anco</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="kick off (1989)(anco).dsk" size="194816" crc="6e2d2e18" sha1="d54e7dbc333ed5b99be8507169bffd6c0c2505da" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kickoff2"> + <description>Kick Off 2</description> + <year>1990</year> + <publisher>Anco</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="160256"> + <rom name="kick off 2 (1990)(anco).dsk" size="160256" crc="36135461" sha1="9f6ff7abb598322a77708e335d2bb4d981011d44" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kickboxv"> + <description>Kick-Box Vigilante (master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="kick-box vigilante (1991)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="f2100695" sha1="0962c96fc583b64e18755157a392caf376237441" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="kick-box vigilante (1991)(zeppelin games)(side b)[master disk].dsk" size="194816" crc="b03443f7" sha1="f76e6e9613bf1e13aad1ef07cb535d08fd9e4d14" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kidnappe"> + <description>Kidnapped</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="kidnapped (1993)(zenobi).dsk" size="194816" crc="81158672" sha1="cde1ce0687c59de52c7e7ea040d948f8e9fd5ebd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="klax"> + <description>Klax</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="146176"> + <rom name="klax (1990)(erbe)(es)(en)[re-release].dsk" size="146176" crc="125e3c32" sha1="5148844e91af58b41f1b0867584d16dc4c52203c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kniglife"> + <description>Knight Life</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="knight life (1995)(zenobi)[re-release].dsk" size="194816" crc="475d8674" sha1="d70a7c9754461ed5f00c53d64c77aea49e8a26dd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="knigorc2"> + <description>Knight Orc v2</description> + <year>1987</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="knight orc v2 (1987)(rainbird)(side a).dsk" size="194816" crc="9a647bf9" sha1="7fa2d01743805510ef3f5f9ea0b580c944afe681" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="knight orc v2 (1987)(rainbird)(side b).dsk" size="194816" crc="9f5f16b4" sha1="607aae53b43fa25b7a71622fc9be875b2f92eb2e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kobyaak"> + <description>Kobyashi Ag'Kwo - A Return to Naru</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="kobyashi ag'kwo - a return to naru (1991)(zenobi).dsk" size="194816" crc="c2fe764f" sha1="b7bb825691f738fc86ec3c7fb5439135abb699f0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="kobyanar"> + <description>Kobyashi Naru</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="kobyashi naru (1992)(zenobi).dsk" size="194816" crc="36838f89" sha1="f565893ae4bf1f6624ab01684a662cd9e6561d43" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="krazykar"> + <description>The Krazy Kartoonist Kaper</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="krazy kartoonist kaper, the (1991)(zenobi)[re-release].dsk" size="194816" crc="2b788d74" sha1="09959def47b5983c292933bf5c5cf3cb7e0ffc1a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="krunel"> + <description>Krunel</description> + <year>2013</year> + <publisher>speccy.pl</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174336"> + <rom name="krunel (2013-10)(speccy.pl)(pl)(en-pl)[retrokomp - load error].dsk" size="174336" crc="7bb2e53b" sha1="456a002a3ceee37a0383a6059c5ea63b629f9918" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="krunela" cloneof="krunel"> + <description>Krunel (alt)</description> + <year>2013</year> + <publisher>speccy.pl</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="krunel (2013-10)(speccy.pl)(pl)(en-pl)[a][retrokomp - load error].dsk" size="194816" crc="146999a7" sha1="f5ee214443a1147539158512f5aca939c6ea0f5c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ledstorm"> + <description>LED Storm Rally 2011</description> + <year>1988</year> + <publisher>Go</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="led storm rally 2011 (1988)(go).dsk" size="194816" crc="1a675e8d" sha1="295acfddcdff4a98ea290d9a9b2cf2da1b97de94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="labopain"> + <description>Labour Pains</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="labour pains (1995)(zenobi).dsk" size="194816" crc="738366d9" sha1="898a86b4d51470078c0ef6972da6b4b8c6df1aff" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="laboherc"> + <description>The Labours of Hercules</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="labours of hercules, the (1987)(zenobi)[re-release].dsk" size="194816" crc="227a46ce" sha1="6df89841500cb7804beb566fd8cd77f0c6370cb4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lancelot"> + <description>Lancelot</description> + <year>1988</year> + <publisher>Mandarin</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="lancelot (1988)(mandarin)(side a).dsk" size="194816" crc="9f77d0c7" sha1="00fcd843694d17a24b87746de910b7455c59795c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="lancelot (1988)(mandarin)(side b).dsk" size="194816" crc="73998eb5" sha1="a294d19bba726790c8b13b3f6ded3d5481cfc024" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="laskretu"> + <description>Laskar's Return</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="laskar's return (1996)(zenobi).dsk" size="194816" crc="fcd56503" sha1="da7c6830dd2e0b8868eab0c6f48b8b70eccec6be" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lastduel"> + <description>Last Duel</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="last duel (1989)(u.s. gold).dsk" size="194816" crc="937a1143" sha1="92cc8ff23398d0fcd653375789d4772bff06d6e5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lmohicana" cloneof="lmohican"> + <description>The Last Mohican (alt)</description> + <year>1987</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="last mohican, the (1987)(crl group).dsk" size="194816" crc="40884d58" sha1="9e634b17b883ea6a3c4bd170a9290b472518643f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lazertag"> + <description>Lazer Tag</description> + <year>1987</year> + <publisher>Go</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lazer tag (1987)(go).dsk" size="194816" crc="a9fbd8fa" sha1="6e58f24e163b1ca99c0d11992bf7c1fdf743a3d2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="legalami"> + <description>A Legacy for Alaric - The Magic Isle</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="legacy for alaric, a - the magic isle (1989)(zenobi).dsk" size="194816" crc="eee4511d" sha1="2c9509a694c1522b7654b7666ee340053d5ce275" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lictokil"> + <description>Licence to Kill</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="licence to kill (1989)(domark).dsk" size="204544" crc="a7c8a74a" sha1="ad18bc2d679b787d22b9f606a0064afb2fdd5fdb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lictokila" cloneof="lictokil"> + <description>Licence to Kill (alt)</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="62976"> + <rom name="licence to kill (1989)(domark)[a].dsk" size="62976" crc="bffb147d" sha1="ac598ec517cdb0a87c0bffd9573b9bca794a6c24" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lightcorsp" cloneof="lightcor"> + <description>The Light Corridor (Spa)</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="light corridor, the (1991)(erbe)(es)(en)[re-release].dsk" size="194816" crc="9b575adf" sha1="5022b6e27edcc1072fda6bc516652b09e11c9277" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lightcorspa" cloneof="lightcor"> + <description>The Light Corridor (Spa) (alt)</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="light corridor, the (1991)(erbe)(es)(en)[a][re-release].dsk" size="194816" crc="fb7dbaf8" sha1="681888333e367e1673b6d1afad9d65880bb2125d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lightcora" cloneof="lightcor"> + <description>The Light Corridor (alt)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="125696"> + <rom name="light corridor, the (1991)(infogrames)(fr)(en)[aka light tunnel, the].dsk" size="125696" crc="92a595c8" sha1="e1b98eda358556ca198122da93588cfcf2529be0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lightcorb" cloneof="lightcor"> + <description>The Light Corridor (alt 2)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="light corridor, the (1991)(infogrames)(fr)(en)[a][aka light tunnel, the].dsk" size="194816" crc="34e92790" sha1="700e723d46527bf2b2e9ef777424bde9c61f8836" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lightcorc" cloneof="lightcor"> + <description>The Light Corridor (alt 3)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="light corridor, the (1991)(infogrames)(fr)(en)[a2][aka light tunnel, the].dsk" size="194816" crc="68c833eb" sha1="4a44c1a6711a6312132aaab4653326bd3de4ee5c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lightmar"> + <description>Lightmare</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lightmare (1989)(zenobi)[re-release].dsk" size="194816" crc="7fab0f98" sha1="6f75150a0a570d0b9f3685682f141068837507b0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="litwangu"> + <description>Little Wandering Guru</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="little wandering guru (1990)(zenobi).dsk" size="194816" crc="d67fd30b" sha1="be5524083666238d46f6cfc63676e6257c0d3b38" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="liveandl"> + <description>Live and Let Die - The Computer Game</description> + <year>1988</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="live and let die - the computer game (1988)(domark)[aka aquablast].dsk" size="194816" crc="9f28c23c" sha1="ca5037c6e004907de9e20e9fee9f6fe1adba8539" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lmidnghta" cloneof="lmidnght"> + <description>Loads of Midnight (alt)</description> + <year>1987</year> + <publisher>CRL Group</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="loads of midnight (1987)(crl group).dsk" size="194816" crc="6c184eee" sha1="16fc80fb50a860331e7688510a18859668d4e9e5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lonewolfa" cloneof="lonewolf"> + <description>Lone Wolf - The Mirror of Death (alt)</description> + <year>1991</year> + <publisher>Audiogenic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lone wolf - the mirror of death (1991)(audiogenic)[aka lone wolf 3].dsk" size="194816" crc="f3f5dfe2" sha1="6545eabf78d4dfda9381864c30680cd49d06fce0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="looseend"> + <description>Loose Ends</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="loose ends (1995)(zenobi).dsk" size="194816" crc="ff20dd56" sha1="e700e95fd910e4d3879cad07d85785433da7fe78" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lordsoch"> + <description>Lords of Chaos</description> + <year>1990</year> + <publisher>Blade</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lords of chaos (1990)(blade).dsk" size="194816" crc="a53890ef" sha1="f62c1ea98f84544533ad9d9e7a887f1b7e1f2f41" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lordsocha" cloneof="lordsoch"> + <description>Lords of Chaos (alt)</description> + <year>1990</year> + <publisher>Blade</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lords of chaos (1990)(blade)[a].dsk" size="194816" crc="ffe27e16" sha1="522cb63098aad24516dd0e1d0acf8849f2db0a3c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="losttwil"> + <description>The Lost Twilight</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lost twilight, the (1992)(zenobi).dsk" size="194816" crc="30650533" sha1="8027860047eb4930e2fdf038d9afc0e292ab9f6b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lostinti"> + <description>Lost in Time</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="lost in time (1993)(zenobi).dsk" size="194816" crc="880e6526" sha1="024adaa12a5ec729a38a889369115c00197257f4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lotussp" cloneof="lotus"> + <description>Lotus Esprit Turbo Challenge (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="lotus esprit turbo challenge (1990)(erbe)(es)(en)[re-release].dsk" size="199680" crc="f187be6b" sha1="da097b93b3f0b1e86b7842272a45afea4899e878" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="lotusa" cloneof="lotus"> + <description>Lotus Esprit Turbo Challenge (alt)</description> + <year>1990</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="lotus esprit turbo challenge (1990)(gremlin graphics).dsk" size="199680" crc="e923e142" sha1="ee13b432dfc4ed546e18404f6a87390904b05de9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="mask3a" cloneof="mask3"> + <description>Mask III - Venom Strikes Back (alt)</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="mask iii - venom strikes back (1988)(gremlin graphics).dsk" size="174848" crc="8b33e09b" sha1="91884a8317c4a1db2d06e7683f6e5d7ee93e68c2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="madmix2"> + <description>Mad Mix 2 - en el Castillo de los Fantasmas</description> + <year>1990</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="121856"> + <rom name="mad mix 2 - en el castillo de los fantasmas (1990)(topo soft)(es).dsk" size="121856" crc="034ba62a" sha1="a1ddd069ab31d173f981617e86dfcddcc28d3ae5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="madmix"> + <description>Mad Mix Game</description> + <year>1988</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mad mix game (1988)(topo soft)(es).dsk" size="194816" crc="b358a0a4" sha1="438a6951c8ab4c02616541d0c977639b96d91fbd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="magicfie"> + <description>Magic Fields</description> + <year>1996</year> + <publisher>Zack</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="magic fields (1996)(zack).dsk" size="194816" crc="d6bc3077" sha1="2446d53a8c23d50e9d904c4d990ec52cde33d805" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="magicjoh"> + <description>Magic Johnson's Basketball</description> + <year>1990</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="179968"> + <rom name="magic johnson's basketball (1990)(dro soft)(es).dsk" size="179968" crc="a2141eff" sha1="33acdfe75a0148d8fcc9322f1a922328b6851e7e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="magnmoon"> + <description>Magnetic Moon</description> + <year>1989</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="magnetic moon (1989)(fsf adventures)(side a).dsk" size="194816" crc="e5549cb9" sha1="97f2db8c8f20e2b55fd6fa23d9ec3e14f3fa5bae" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="magnetic moon (1989)(fsf adventures)(side b).dsk" size="194816" crc="fcf49c0c" sha1="667d915e4bebb36a675b7ace30830d1d374c0c6a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="manabtho"> + <description>Man About the House</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195584"> + <rom name="man about the house (1994)(zenobi).dsk" size="195584" crc="228ce391" sha1="13c4903dcb060c867f5ecf4e47148e100e361891" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="manchunisp" cloneof="manchuni"> + <description>Manchester United (Spa)</description> + <year>1990</year> + <publisher>System 4</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="manchester united (1990)(system 4)(es)[re-release].dsk" size="194816" crc="820d22dd" sha1="8d0a38f4faf8367674eeb75fb1067220478877ae" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="manchuni"> + <description>Manchester United - The Official Computer Game</description> + <year>1990</year> + <publisher>Krisalis</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="manchester united - the official computer game (1990)(krisalis)(side a).dsk" size="194816" crc="136dfa7f" sha1="62dc94c188a7ffd69b8164eaacf341272c602dde" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="manchester united - the official computer game (1990)(krisalis)(side b).dsk" size="194816" crc="90f83d48" sha1="d61bbbdca571666fe87b70380791e6fba181b1e9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="themappe"> + <description>The Mapper</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mapper, the (1992)(zenobi).dsk" size="194816" crc="5a054203" sha1="1242f4424b6dafa9818a7a95260600a349525161" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="mastersa" cloneof="masters"> + <description>Masters of the Universe - The Movie (alt)</description> + <year>1987</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="masters of the universe - the movie (1987)(gremlin graphics).dsk" size="174848" crc="2f9a0bdb" sha1="e7c580e989076026cded8688e70e264ab36ece19" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="matchda2a" cloneof="matchda2"> + <description>Match Day II (alt)</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="match day ii (1987)(ocean).dsk" size="214784" crc="bf33c550" sha1="a07e166575814e59f3b4a95ea9617de6bec7525a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="matchda2"> + <description>Match Day II</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="208384"> + <rom name="match day ii (1987)(ocean)[a].dsk" size="208384" crc="584f511d" sha1="50bf8521cc8b86af9d2307f0af6d2441707cf82e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="matchotdtmd"> + <description>Match of the Day (tape master disk)</description> + <year>1992</year> + <publisher>Zeppelin Premier</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="match of the day (1992)(zeppelin premier)(side a)[tape master disk].dsk" size="194816" crc="3ae454c0" sha1="d760c1b13bcd87158243f24cdbccd323e8f541c5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="match of the day (1992)(zeppelin premier)(side b)[tape master disk].dsk" size="194816" crc="974d8a03" sha1="a937cdf001322220fd906503fe8a686665a432a7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="megaphx"> + <description>Mega Phoenix</description> + <year>1991</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="61952"> + <rom name="mega phoenix (1991)(dinamic)(es)(en).dsk" size="61952" crc="c0b40920" sha1="794b2904af91cb3cc9ab90b755d0585a5575db96" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="megatwin"> + <description>Mega Twins</description> + <year>19??</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mega twins (19xx)(u.s. gold).dsk" size="194816" crc="bb36aa81" sha1="36dac0d2d5ad150374a2b96da4a1f919014842fe" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="megapocla" cloneof="megapocl"> + <description>MegaApocalypse (alt)</description> + <year>1988</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="mega-apocalypse (1988)(martech games).dsk" size="194560" crc="09ab5dfb" sha1="55c1d99704a52620b8d3eef3dbb4fc6b64078b32" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="meltdown"> + <description>Meltdown</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="meltdown (1993)(zenobi).dsk" size="194816" crc="79e96439" sha1="67bfe6fe8124d9ab64c2c2eec27c663b1ba1a0fb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="merctarg"> + <description>Mercenary - Escape from Targ</description> + <year>1987</year> + <publisher>Novagen</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="mercenary - escape from targ (1987)(novagen)[aka mercenary i].dsk" size="214784" crc="0cb15868" sha1="f26f5c17f52814380093ce9ebc04ebba57c12118" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="metropol"> + <description>Metropolis</description> + <year>1989</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="metropolis (1989)(topo soft)(es).dsk" size="102400" crc="313c2f98" sha1="b181ea90b8721341ff3bf1a02087ba15e5fc5cc3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="mickeya" cloneof="mickey"> + <description>Mickey Mouse - The Computer Game (alt)</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="mickey mouse - the computer game (1988)(gremlin graphics).dsk" size="174848" crc="7ffc722d" sha1="29a312a7d1c5a9bc90c6e747c05d6a28947a0b11" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Unknown if it comes from the "large case" or "small case" releases, or a different one --> + <software name="micpsocc"> + <description>MicroProse Soccer</description> + <year>1989</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="204288"> + <rom name="microprose soccer (1989)(microprose)(side a).dsk" size="204288" crc="b680f0db" sha1="0fb565f33db3414c2ea6ac54465f32d65a445b3e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="198400"> + <rom name="microprose soccer (1989)(microprose)(side b).dsk" size="198400" crc="282461f8" sha1="74c714f3959583861e54f0d4d173d3189d7b1f23" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="micpsoccl" cloneof="micpsocc"> + <description>MicroProse Soccer (large case release)</description> + <year>1989</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="198400"> + <rom name="microprose soccer (1989)(microprose)(side a)[large case].dsk" size="198400" crc="cc39b989" sha1="4331bf5eb6f92c7f3df08d90f035397f4cf9f4e5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="198400"> + <rom name="microprose soccer (1989)(microprose)(side b)[large case].dsk" size="198400" crc="def0ef4c" sha1="8a20e82c15a92b2d4a961039473e750ec183565d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="micpsoccs" cloneof="micpsocc"> + <description>MicroProse Soccer (small case release)</description> + <year>1989</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="199680"> + <rom name="microprose soccer (1989)(microprose)(side a)[small case].dsk" size="199680" crc="e8863f3d" sha1="c389a8c63fa1a5dd4fd7eea514b1c4462361b79f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="microprose soccer (1989)(microprose)(side b)[small case].dsk" size="194816" crc="4270be41" sha1="98a2e1005deb05398fbd51697cf23ef568e3daa9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="micpsoccsp" cloneof="micpsocc"> + <description>MicroProse Soccer (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="126720"> + <rom name="microprose soccer (1990)(erbe)(es)(en)(side a).dsk" size="126720" crc="1a3db2c7" sha1="ad2406b5a85e4a3486ee349c81bc008a5a5cd880" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="126720"> + <rom name="microprose soccer (1990)(erbe)(es)(en)(side b).dsk" size="126720" crc="010d5914" sha1="52e77e6b35392cb055ba70513f335adaee061724" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="midressp" cloneof="midres"> + <description>Midnight Resistance (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="155904"> + <rom name="midnight resistance (1990)(erbe)(es)(en)[re-release].dsk" size="155904" crc="f76b30d2" sha1="55c8124f6fc372eaae8c83d42a0dbfec8331aa23" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="midresa" cloneof="midres"> + <description>Midnight Resistance (alt)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="midnight resistance (1990)(ocean).dsk" size="194816" crc="bebed342" sha1="ed5067b98d17085961e4079630f78a8cae1c2e6b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="midresb" cloneof="midres"> + <description>Midnight Resistance (alt 2)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="133120"> + <rom name="midnight resistance (1990)(ocean)[a].dsk" size="133120" crc="cd5e36f6" sha1="4264fe3752d41250bb506a4e55d05ee609fbe89b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="midsumdd"> + <description>A Midsummer Days Dream</description> + <year>1994</year> + <publisher>The Adventure Workshop</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="midsummer days dream, a (1994)(adventure workshop, the)(side a).dsk" size="194816" crc="0186997c" sha1="cf81c30648dc1a4dfd9354543f4b4200d7655103" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="midsummer days dream, a (1994)(adventure workshop, the)(side b).dsk" size="194816" crc="258653a4" sha1="14f76b880678600ab0640320637f435c65687be3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mikegunn"> + <description>Mike Gunner</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <info name="usage" value="Requires Gun Stick lightgun"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="48128"> + <rom name="mike gunner (1988)(dinamic)(es).dsk" size="48128" crc="cd42d72c" sha1="1c3deadb5b1c773eb672785a4a3a9ddf0628a3fc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mineslit"> + <description>The Mines of Lithiad</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mines of lithiad, the (1992)(zenobi).dsk" size="194816" crc="ef26827d" sha1="1d8816a4efb4110804144d6bc8c01e30f40e4a6d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="themiser"> + <description>The Miser</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="miser, the (1990)(zenobi)[re-release].dsk" size="194816" crc="e6047e88" sha1="8a0ffb19d6d945069f1c81e2bed5d542d9f3242f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="montypyta" cloneof="montypyt"> + <description>Monty Python's Flying Circus (alt)</description> + <year>1990</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="444160"> + <rom name="monty python's flying circus (1990)(virgin games).dsk" size="444160" crc="65ef4491" sha1="8ca022b6217973f74088ce73e342d985170526f5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="moonwalk"> + <description>Moonwalker</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="175360"> + <rom name="moonwalker (1989)(erbe)(es)(en)[re-release].dsk" size="175360" crc="39947fe4" sha1="101558c1c2d1eaa6cceb0e577ea5e592a9b5d77f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="morta2sc"> + <description>Mortadelo y Filemon II - Safari Callejero</description> + <year>1990</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="136448"> + <rom name="mortadelo y filemon ii - safari callejero (1990)(dro soft)(es).dsk" size="136448" crc="d1ce653f" sha1="145f9f353caceb4b9d120825df518aad989c5358" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mot"> + <description>Mot</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="216064"> + <rom name="mot (1989)(opera soft)(es)(side a).dsk" size="216064" crc="38cb620e" sha1="ac1720562402058bec93bb1874f2ffb6a254a31d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="216064"> + <rom name="mot (1989)(opera soft)(es)(en)(side b).dsk" size="216064" crc="1ce38009" sha1="6be5093a31679a9c9015f85a9e63dd677d78f6a5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="motorbik"> + <description>Motorbike Madness</description> + <year>1988</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="87808"> + <rom name="motorbike madness (1988)(dro soft)(es)(en)[re-release].dsk" size="87808" crc="4046284a" sha1="20f002bcb06f6512bad05e21a968c46a512bfe17" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mbikeractmdb" cloneof="mbikeractmd"> + <description>Mountain Bike Racer (tape master disk backup)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="221696"> + <rom name="mountain bike racer (1990)(zeppelin games)(side a)[tape master disk backup].dsk" size="221696" crc="227c9919" sha1="5d1fcf6073631ccca5c56e971e419bd2d1a8fcd2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mbikeractmd"> + <description>Mountain Bike Racer (tape master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="221184"> + <rom name="mountain bike racer (1990)(zeppelin games)(side a)[tape master disk].dsk" size="221184" crc="f7d64c70" sha1="0c039a8292e5ce3c60c7f83b15e252ffe6e719aa" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="221184"> + <rom name="mountain bike racer (1990)(zeppelin games)(side b)[tape master disk].dsk" size="221184" crc="1617646c" sha1="d09be5ebcaa4f43650cf251a55ec334a1e319001" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mrheli"> + <description>Mr. Heli</description> + <year>1989</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mr. heli (1989)(firebird).dsk" size="194816" crc="90d80eb1" sha1="b8564ca8d32e8148b8383c2d2438d82557f67d2b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mumcry21"> + <description>The Mummy's Crypt v2.1</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mummy's crypt, the v2.1 (1992)(zenobi)[re-release].dsk" size="194816" crc="608ab573" sha1="9548ee0a3a2d4fb3f838bb8578fa817f1069da2b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="themunch"> + <description>The Muncher Eats Chewits</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="muncher eats chewits, the (1988)(gremlin graphics)[aka t-wrecks].dsk" size="219136" crc="270a56fa" sha1="783a340ffcc78cee07e51953272467302277e459" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mufutbol"> + <description>Mundial de Futbol</description> + <year>1990</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="213760"> + <rom name="mundial de futbol (1990)(opera soft)(es).dsk" size="213760" crc="8e6822c8" sha1="5aad4dde6097f92818d54ff100a65032cbdba519" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="italia90sp" cloneof="italia90"> + <description>Mundial de Futbol Italia '90</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="53760"> + <rom name="mundial de futbol italia '90 (1989)(dro soft)(es)(en)[aka italia '90 - world cup soccer][re-release].dsk" size="53760" crc="2f2383c2" sha1="ba167694d1a341e339d3943b477f5a48bca37a2c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="italia90spa" cloneof="italia90"> + <description>Mundial de Futbol Italia '90 (alt)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="mundial de futbol italia '90 (1989)(dro soft)(es)(en)[a][aka italia '90 - world cup soccer][re-release].dsk" size="194816" crc="f1195dff" sha1="d5102712dede9536d154996e095d83afa0545c42" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="murdhesa"> + <description>Murder - He Said</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="murder - he said (1993)(zenobi).dsk" size="194816" crc="80b24b05" sha1="221d3290ca81d52fae54f265f33ba8d346265166" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="murdhunt"> + <description>Murder Hunt</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="murder hunt (1989)(zenobi)[re-release].dsk" size="194816" crc="ac1eb412" sha1="9ee6625ae921fab337c1b6ab840791ba9be75a66" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="murdhun2"> + <description>Murder Hunt II</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="murder hunt ii (1992)(zenobi).dsk" size="194816" crc="4e8c8f76" sha1="71d1d2a16d069072589ac7dc2017972495f0c4ff" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mutiny"> + <description>Mutiny</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="mutiny (1995)(zenobi)(side a).dsk" size="194816" crc="c32b1aff" sha1="12c7d93106b97fbc49d36cc1bc2ef3b90dbe444f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="mutiny (1995)(zenobi)(side b).dsk" size="194816" crc="84e125d1" sha1="84d95956eeadd16b9159082e32a611436a0f8ca4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="mystical"> + <description>Mystical</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="mystical (1991)(infogrames)(fr)(en).dsk" size="199680" crc="8484c2f3" sha1="52549d1ede9927f975725cdad0eba5a68585df19" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="narc"> + <description>NARC</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="472832"> + <rom name="narc (1990)(ocean)(side a).dsk" size="472832" crc="ab564c53" sha1="d6246df64708b1a16ce54f8705ae32ea5a1bb4ad" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="472832"> + <rom name="narc (1990)(ocean)(side b).dsk" size="472832" crc="407be166" sha1="7cb436ca6a45201b71a440316a6178589d910e64" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="narcopol"> + <description>Narco Police</description> + <year>1990</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="131584"> + <rom name="narco police (1990)(dinamic)(es)(en).dsk" size="131584" crc="732da12d" sha1="856417a7c4902b5a88398dadf8528aab4527880d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Spanish version includes Army Moves as a bonus. --> + <software name="navymovesp" cloneof="navymove"> + <description>Navy Moves (Spa)</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="166400"> + <rom name="navy moves + army moves (1988)(dinamic)(es).dsk" size="166400" crc="ac230638" sha1="6eb9dd96efe181d0d9f09698501f5fb3f4d77a10" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="navymove"> + <description>Navy Moves</description> + <year>1988</year> + <publisher>The Hit Squad</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="112640"> + <rom name="navy moves (1988)(hit squad, the)[re-release].dsk" size="112640" crc="b7747a37" sha1="54d7af7ed62d747e3231325348d09a37b107806c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="navyseal"> + <description>Navy SEALs</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="155904"> + <rom name="navy seals (1991)(erbe)(es)(en)(side a)[re-release].dsk" size="155904" crc="af3ffaf7" sha1="dbfdadcaecddfff4f33e2cc6edda386dc6e8a2d9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="155904"> + <rom name="navy seals (1991)(erbe)(es)(en)(side b)[re-release].dsk" size="155904" crc="66e8d525" sha1="bb0330e4dddb1904623c6c38ad92f938167fad95" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="neighboumd" cloneof="neighbou"> + <description>Neighbours (master disk)</description> + <year>1992</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="73216"> + <rom name="neighbours (1992)(impulze)(side a)[master disk].dsk" size="73216" crc="136cc7ba" sha1="8282e676c2241cfa273ae660e68b4fabb4b887e6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="neighboutmd" cloneof="neighbou"> + <description>Neighbours (tape master disk)</description> + <year>1992</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="neighbours (1992)(impulze)(side a)[tape master disk].dsk" size="194816" crc="df4c42dc" sha1="d776a6ff0f573df2495bf9c2d1d6f75a46265f96" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="neighbours (1992)(impulze)(side b)[tape master disk].dsk" size="194816" crc="8eeb6d63" sha1="2750a6253294cdfae673c9ca985d7f0afc7631be" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="neighbou"> + <description>Neighbours</description> + <year>1992</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="neighbours (1992)(impulze).dsk" size="73216" crc="9f7cb361" sha1="e45a12a6c0a2f743cc972a4960cf049bc2ce6372" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Labeled in World of Spectrum as "(CheatVersion)(MasterDisk)", might come from the developers? --> + <software name="neighbouch" cloneof="neighbou"> + <description>Neighbours (cheat version) (master disk)</description> + <year>1992</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="neighbours (1992)(impulze)[t][master disk].dsk" size="194816" crc="02088631" sha1="8b786d01e28e05a2ce5650bcf66eca9c22c28f32" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tnzssp" cloneof="tnzs"> + <description>The New Zealand Story (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="68352"> + <rom name="new zealand story, the (1989)(erbe)(es)(en)(side a)[re-release].dsk" size="68352" crc="13a78210" sha1="902bd77d3f62893e625a50161a451a5c912c0d74" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="new zealand story, the (1989)(erbe)(es)(en)(side b)[re-release].dsk" size="194816" crc="979cf378" sha1="7b9930423248682b7153ccaa1d70112c6e0246bc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tnzs"> + <description>The New Zealand Story</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="62720"> + <rom name="new zealand story, the (1989)(ocean)(side a).dsk" size="62720" crc="3548a836" sha1="b854381b0fcbd37fa195e0bd9380ffd75465290e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="new zealand story, the (1989)(ocean)(side b).dsk" size="194816" crc="a3fe1ef8" sha1="b75d300142fb523324ae3d2596ead775c715a52d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="nigelman"> + <description>Nigel Mansell's Grand Prix</description> + <year>1988</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="nigel mansell's grand prix (1988)(martech games).dsk" size="194560" crc="fb7f4a21" sha1="0100151048ec2379fbc108dec6cd43babeb3f659" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="nightbre"> + <description>Night Breed - The Action Game</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="389376"> + <rom name="night breed - the action game (1990)(ocean).dsk" size="389376" crc="8e6cd752" sha1="c4a2ff13a02ae7b6bbf3b2ff6a79b391c0198853" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="nighthun"> + <description>Night Hunter</description> + <year>1990</year> + <publisher>Ubi Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="night hunter (1990)(ubi soft)(fr)(en)(side a).dsk" size="194816" crc="b90f206d" sha1="36ce59aee1dc31968603e6a5303be13a711130d7" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="night hunter (1990)(ubi soft)(fr)(en)(side b).dsk" size="194816" crc="85b80971" sha1="84ef0e18d3ae67bf44a6886f5651f2ced0788b6d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="nighraid"> + <description>Night Raider</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="night raider (1988)(gremlin graphics).dsk" size="174848" crc="0d889fc6" sha1="bb06295dae9be9ebf460e170d3672351aaa83438" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ninjawarsp" cloneof="ninjawar"> + <description>The Ninja Warriors (Spa)</description> + <year>1990</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ninja warriors, the (1989)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="55b8fd20" sha1="3379b6da9807c8077273f332318a41680818ceb9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="normlame"> + <description>Norman's Lament</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="norman's lament (1990)(zenobi).dsk" size="194816" crc="5320aa7a" sha1="dd3a9d5b8fe0191ecc0374fc52dbec2cc1ee992a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="northsou"> + <description>North & South</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side a)[aka norte y sur].dsk" size="174848" crc="a26c2515" sha1="3a5b97612eff5e949f274911e4a313221fe532f6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="174336"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side b)[aka norte y sur].dsk" size="174336" crc="55745fc0" sha1="c21b0d87bdb7214cf4627f75ef717018d35cd5a8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="northsoua" cloneof="northsou"> + <description>North & South (alt)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side a)[a][aka norte y sur].dsk" size="174848" crc="2fa550b1" sha1="bb6302a481d61b938041b2f3823f456ef51991d4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="165632"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side b)[a][aka norte y sur].dsk" size="165632" crc="69845996" sha1="2f6cacd8b595b415ceeb4fd928bb50e3d1dc76ec" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="northsoub" cloneof="northsou"> + <description>North & South (alt 2)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side a)[a2][aka norte y sur].dsk" size="174848" crc="bdb9cfcd" sha1="04938fd4a3512a05ad7614c6da363ac6d7a8320a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="174336"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side b)[a2][aka norte y sur].dsk" size="174336" crc="7c18181c" sha1="ae0acb4abea3fb1bbe64473f72c00ad8bd31755e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="northsouc" cloneof="northsou"> + <description>North & South (alt 3)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side a)[a3][aka norte y sur].dsk" size="174848" crc="46c6efc2" sha1="aae910c6ae93cb000941b7906475a18507be7de4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="165632"> + <rom name="north & south (1991)(infogrames)(fr)(m3)(side b)[a3][aka norte y sur].dsk" size="165632" crc="7797a1bc" sha1="5637f4eb48731894d33c61f5d8cf79e7eae1ddf3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="northstra" cloneof="northstr"> + <description>North Star (alt)</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="north star (1988)(gremlin graphics).dsk" size="174848" crc="2472f3ba" sha1="0704862da03f1e09f822412f18fea05e74112239" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="northstrb" cloneof="northstr"> + <description>North Star (alt 2)</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="162048"> + <rom name="north star (1988)(gremlin graphics)[a].dsk" size="162048" crc="17fe7830" sha1="0af689b80ddbc79a4c62c97b1dc7ee4918b54172" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="oblitersp" cloneof="obliter"> + <description>Obliterator (Spa)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="obliterator (1989)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="4a40e00b" sha1="e4d2de260f26676a1cea16e1b4ac087b76966431" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ooowomim"> + <description>One of our Wombats is Missing</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="one of our wombats is missing (1990)(zenobi)(side a).dsk" size="194816" crc="a8f1eef9" sha1="83aa1f75c73da8a95979d9fd06550e27fdccaff9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="one of our wombats is missing (1990)(zenobi)(side b).dsk" size="194816" crc="36f2fe65" sha1="2e198f54d3a5cdbfe7cc3b49c727e5c572d14e8b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="othundersp" cloneof="othunder"> + <description>Operation Thunderbolt (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="48896"> + <rom name="operation thunderbolt (1989)(erbe)(es)(en)(side a)[re-release].dsk" size="48896" crc="92ab8927" sha1="f9761cb713bc47d226c2cfc138fea5e04eb49f19" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="operation thunderbolt (1989)(erbe)(es)(en)(side b)[re-release].dsk" size="194816" crc="e2b3b82c" sha1="d724ed13afcca95f92ca879225262743dd713cd4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="othunder"> + <description>Operation Thunderbolt</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="128256"> + <rom name="operation thunderbolt (1989)(ocean)(side a).dsk" size="128256" crc="f2690887" sha1="e3773ce1320b978c7f643f2559257b09c44aa25a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="operation thunderbolt (1989)(ocean)(side b).dsk" size="194816" crc="78bca289" sha1="858b349c190d975bc881116cbefaa11ac7214521" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="opwolfsp" cloneof="opwolf"> + <description>Operation Wolf (Spa)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="operation wolf (1988)(erbe)(es)(en)[re-release].dsk" size="194816" crc="937ab39f" sha1="6d9bfdd66290b424300bdf57266a24d5e2b85750" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="opwolf"> + <description>Operation Wolf</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="operation wolf (1988)(ocean).dsk" size="194816" crc="8fb0ea8d" sha1="3fb8835bba7eeb68ff5ce3ab3dd950f7a33f71a6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="opwolfa" cloneof="opwolf"> + <description>Operation Wolf (alt)</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="150272"> + <rom name="operation wolf (1988)(ocean)[a].dsk" size="150272" crc="79031b22" sha1="6c0cf20992922bf114f7a1a59c967a32c670fea1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="opwolfb" cloneof="opwolf"> + <description>Operation Wolf (alt 2)</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="operation wolf (1988)(ocean)[a2].dsk" size="194816" crc="7c713a26" sha1="b971311ee8938b3c5bf2937fc4cac8a6dbfd0572" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="opprland"> + <description>The Oppressed Land</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="oppressed land, the (1990)(zenobi).dsk" size="194816" crc="784f03dc" sha1="fbbdf6f40860d13f6dbb0f3f88d1d04fda9c85dd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="origamessp" cloneof="origames"> + <description>Oriental Games (Spa)</description> + <year>1990</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="73216"> + <rom name="oriental games (1990)(mcm)(es)(en)(side a)[re-release].dsk" size="73216" crc="34a1c47d" sha1="8f18f7df100b47cc238f9669cb841d2acbf8827b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="121856"> + <rom name="oriental games (1990)(mcm)(es)(en)(side b)[re-release].dsk" size="121856" crc="7d9ae3f4" sha1="4418bcf7959d7c18a6f579c709c9f2f0150bfbc0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="origames"> + <description>Oriental Games</description> + <year>1990</year> + <publisher>Micro Style</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="oriental games (1990)(micro style)(side a).dsk" size="194816" crc="5e5a0a57" sha1="2e138f9bb657ddf57db856502e495eb9ebe31f5e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="oriental games (1990)(micro style)(side b).dsk" size="194816" crc="b128d8ca" sha1="a5e0d5fec27a6bedf237c94107f1dae4df026fa4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outrun"> + <description>Out Run</description> + <year>1987</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="134144"> + <rom name="out run (1987)(u.s. gold)(side a).dsk" size="134144" crc="62666641" sha1="1dcfebd59440d4af1c1033d1cc5c7581f23c7239" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="155648"> + <rom name="out run (1987)(u.s. gold)(side b).dsk" size="155648" crc="28055b6c" sha1="68ec47293426f6f7afbc99c5eeddfe97e8870f82" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ootlimel"> + <description>Out of the Limelight</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="out of the limelight (1992)(zenobi).dsk" size="194816" crc="af5dd72d" sha1="665105700b8b92575304ac6a0a7affeee3bbe072" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="overland"> + <description>Overlander</description> + <year>1988</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="91136"> + <rom name="overlander (1988)(elite systems).dsk" size="91136" crc="d5d287ee" sha1="4839bd9d81f5c269cebd56c54ef7b012f8956591" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="overlandsp" cloneof="overland"> + <description>Overlander (Spa)</description> + <year>1988</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="overlander (1988)(mcm)(es)(en)[re-release].dsk" size="194816" crc="fd817c95" sha1="8fe3b288a4451eeea76aa0ec95200e9478e49a4c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="p47thuna" cloneof="p47thun"> + <description>P-47 Thunderbolt (alt)</description> + <year>1990</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="p-47 thunderbolt (1990)(firebird)[aka p-47 - the freedom fighter].dsk" size="194816" crc="ff20e266" sha1="85b1597808079780bca508d5ecb4cc950c168fe3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="phmpegasa" cloneof="phmpegas"> + <description>P.H.M. Pegasus (alt)</description> + <year>1988</year> + <publisher>Electronic Arts</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="p.h.m. pegasus (1988)(electronic arts).dsk" size="214784" crc="9d937816" sha1="f800efee965cd349879697d5c2f7fc2980ce25b6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="paclanda" cloneof="pacland"> + <description>Pac-Land (alt)</description> + <year>1989</year> + <publisher>Grandslam Entertainments - Quicksilva</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="92160"> + <rom name="pac-land (1989)(grandslam entertainments - quicksilva).dsk" size="92160" crc="c81f942c" sha1="7a10093852e05f8d34b6e312132efaadb56aab25" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pacmania"> + <description>Pac-Mania</description> <year>1988</year> <publisher>Grandslam Entertainments</publisher> <part name="flop1" interface="floppy_3"> <dataarea name="flop" size="195328"> - <rom name="pac-mania.dsk" size="195328" crc="88f5506b" sha1="827c95935dd3a1dd919989fc6d7a0efa4e5aebc1" offset="0" /> + <rom name="pac-mania (1988)(grandslam).dsk" size="195328" crc="88f5506b" sha1="827c95935dd3a1dd919989fc6d7a0efa4e5aebc1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pangsp" cloneof="pang"> + <description>Pang (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pang (1990)(erbe)(es)(en)[re-release].dsk" size="194816" crc="8407042b" sha1="8cf020876ba5d66995fa5752dd6c036913135f23" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="panga" cloneof="pang"> + <description>Pang (alt)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="173312"> + <rom name="pang (1990)(ocean).dsk" size="173312" crc="28b7f247" sha1="3ba6421683859545be99d43c06a1fb887a60f80f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="paperbo2"> + <description>Paperboy 2</description> + <year>1992</year> + <publisher>Mindscape International</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="335301"> + <rom name="paperboy 2 (1992)(mindscape international)(side a).dsk" size="335301" crc="20db73bf" sha1="a37839752b9d449557a0227b4b246461dcb326ae" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="335301"> + <rom name="paperboy 2 (1992)(mindscape international)(side b).dsk" size="335301" crc="d66c3272" sha1="6ba906f203a7be38b9505a1fc45719e4a9124952" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="parisdak"> + <description>Paris-Dakar</description> + <year>1988</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="87808"> + <rom name="paris-dakar (1988)(zigurat)(es).dsk" size="87808" crc="2a06e40a" sha1="8d210174ddd8f21404943b7509f101edaa37b90b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="passshta" cloneof="passsht"> + <description>Passing Shot (alt)</description> + <year>1989</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="passing shot (1989)(image works).dsk" size="58624" crc="576d7ee4" sha1="73361708502067fc803afbfae66138bfbccd2f6c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="passshtsp" cloneof="passsht"> + <description>Passing Shot (Spa)</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="passing shot (1989)(mcm)(es)(en)[re-release].dsk" size="194816" crc="41e3ce91" sha1="ddcbdf011275f3d1dcb456f6208f7aec4a75e2b0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="pawna" cloneof="pawn"> + <description>The Pawn v2.4 (alt)</description> + <year>1987</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pawn, the v2.4 (1987)(rainbird).dsk" size="194816" crc="fdb74ece" sha1="3f96becbf552b207213bdabd950e6ea752b7d8ca" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="pawnb" cloneof="pawn"> + <description>The Pawn v2.4 (alt 2)</description> + <year>1987</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pawn, the v2.4 (1987)(rainbird)[a].dsk" size="194816" crc="0790cc76" sha1="17cecc0a0c3c0fa4f081267b45db375e4fb3a3d5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="powthein"> + <description>Pawns of War - The Infiltrator</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pawns of war - the infiltrator (1989)(zenobi)[re-release].dsk" size="194816" crc="71814e63" sha1="7db46cb122021913544d9c483c2d78e3ba309298" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pendlogr"> + <description>The Pendant of Logryn</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pendant of logryn, the (1989)(zenobi)[re-release].dsk" size="194816" crc="1ac9391d" sha1="3b4a421e912e37b3c8f3d8f225e29ea339434c4f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="lospajbk"> + <description>Pepe Carvalho en los Pajaros de Bangkok</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="112640"> + <rom name="pepe carvalho en los pajaros de bangkok (1988)(dinamic)(es).dsk" size="112640" crc="eaf66708" sha1="5723b9cca75f13917254ba2efb720be6dc3843ad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pericode"> + <description>Perico Delgado Maillot Amarillo</description> + <year>1989</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="180224"> + <rom name="perico delgado maillot amarillo (1989)(topo soft)(es).dsk" size="180224" crc="5d389bba" sha1="0417ff3e50a06dbd6aae44067e5794ac96ad6908" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="perseus"> + <description>Perseus</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="perseus (1993)(zenobi).dsk" size="194816" crc="5f5a500c" sha1="1f58f7f143ff2cf659ed3a2921e153a2c7d8ee0a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pecompwi"> + <description>Personal Computer Whirled</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="personal computer whirled (1992)(zenobi)[re-release].dsk" size="194816" crc="4b45d4c9" sha1="496c79dee580d91b07edf3f5bb5dee5f3735e57a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="phsagain"> + <description>Phantomas Saga - Infinity</description> + <year>2006</year> + <publisher>Computer Emuzone</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="phantomas saga - infinity (2006)(computer emuzone)(es)(en).dsk" size="194816" crc="624fd560" sha1="86258b926dd667690c1874a6b981374507195f03" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="phoenix"> + <description>Phoenix</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="phoenix (1991)(zenobi).dsk" size="194816" crc="3b1dcbab" sha1="262d3728db62851bbf7a95fc33f0f9993d1567f1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="picknpil"> + <description>Pick 'n' Pile</description> + <year>1991</year> + <publisher>Ubi Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pick 'n' pile (1991)(ubi soft)(fr)(en).dsk" size="194816" crc="0cec1fb9" sha1="e2e358a3fe590305db1e0a56da8faf92bb2f433e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pictionasp" cloneof="pictiona"> + <description>Pictionary - El juego en el que todos pintan</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="180224"> + <rom name="pictionary (1989)(erbe)(es)[re-release].dsk" size="180224" crc="6ad3cefb" sha1="299e4e31ae07102b2d84e1858d9346b1b38d2099" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pictiona"> + <description>Pictionary - The Game of Quick Draw</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pictionary - the game of quick draw (1989)(domark).dsk" size="194816" crc="b1361a19" sha1="3c7ee3be8c1a5fab578c45b843c7d2777fd07606" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="pipmaniaa" cloneof="pipmania"> + <description>Pipe Mania (alt)</description> + <year>1990</year> + <publisher>Empire</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pipe mania (1990)(empire).dsk" size="194816" crc="456edf8c" sha1="1b93a1c85477b9e482832d0230743ac23dfe90ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pitfight"> + <description>Pit-Fighter</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="pit-fighter (1991)(domark)(side a).dsk" size="194816" crc="0b27c5a6" sha1="41a26bff3de33bc4f8eb0b43d7d4bd831e02132f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="pit-fighter (1991)(domark)(side b).dsk" size="194816" crc="52116688" sha1="e8846ae680bf112f0f38f4e54f9a984a0f666686" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="platoona" cloneof="platoon"> + <description>Platoon (alt)</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="131072"> + <rom name="platoon (1988)(ocean).dsk" size="131072" crc="45dc4898" sha1="a19824ab2b59ab29d31d6cb56851e0bcc3c4138b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="predatr2a" cloneof="predatr2"> + <description>Predator 2 (alt)</description> + <year>1991</year> + <publisher>Image Works</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="predator 2 (1991)(image works).dsk" size="194816" crc="19a74e60" sha1="94759fbcba4baf9004ebf5ca72d2781437fb68a0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="prelmont"> + <description>Preliminary Monty</description> + <year>2009</year> + <publisher><homebrew></publisher> + <info name="author" value="Andrew Zhiglov"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="preliminary monty (2009)(zhiglov, andrew)(ru)(en).dsk" size="194816" crc="faa053d9" sha1="33877c4547f4d661e3facd5c055af1a909374978" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="prisoner"> + <description>The Prisoner</description> + <year>2014</year> + <publisher>Commodore Plus</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="prisoner, the (2014)(commodore plus)(es)(en)[aka prisionero, el].dsk" size="194816" crc="7aa50408" sha1="1c8fe7bd7f4baf63db2e68818460979b55602a30" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="protenntsp" cloneof="protennt"> + <description>Pro Tennis Tour (Spa)</description> + <year>1990</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63488"> + <rom name="pro tennis tour (1990)(mcm)(es)(en)[re-release].dsk" size="63488" crc="3cc76873" sha1="ac0fd453b2f00ef63477a25a43bd482a65b8cb84" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="protennta" cloneof="protennt"> + <description>Pro Tennis Tour (alt)</description> + <year>1990</year> + <publisher>Ubi Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="pro tennis tour (1990)(ubi soft)(fr)(en).dsk" size="194816" crc="2f11c3bd" sha1="631823abc8cfaa684f855d697998b06c46f1893a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="prohibit"> + <description>Prohibition</description> + <year>1987</year> + <publisher>Zafi Chip</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="prohibition (1987)(zafi chip)(es)(en)[re-release].dsk" size="194816" crc="53a85112" sha1="bb2ed61464d1ccf7eb239988cbe7992b3387e37f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="projnova"> + <description>Project Nova</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="project nova (1987)(zenobi)[re-release].dsk" size="194816" crc="430d1985" sha1="c065c33b861fd4882569407ae27b50c22784ab0e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="pstfight"> + <description>Project Stealth Fighter</description> + <year>1990</year> + <publisher>MicroProse</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="project stealth fighter (1990)(microprose)(side a)[aka f-19 stealth fighter].dsk" size="194816" crc="48cda235" sha1="a5b23c6d9654dbf9f090b388788306d3e50b63df" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="project stealth fighter (1990)(microprose)(side b)[aka f-19 stealth fighter].dsk" size="194816" crc="766d3231" sha1="2e98cc257873737dbd0d43d885bd5118725646b0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="purpsatd"> + <description>Purple Saturn Day</description> + <year>1989</year> + <publisher>Exxos</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="purple saturn day (1989)(exxos)(fr)(en).dsk" size="194816" crc="5f9d4dc6" sha1="063c53a541630bf27ab6c9a06bed7c6741490c18" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="q10tankb"> + <description>Q10 Tank Buster (master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="q10 tank buster (1992)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="5c99ad82" sha1="9c68045ea57f4576e1676b39db2d3a8e6ff7f841" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="q10 tank buster (1992)(zeppelin games)(side b).dsk" size="194816" crc="0986135e" sha1="4f773cf7d97657c88535c5a445872064752c3bb3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="qholysmt"> + <description>Quest for the Holy Something</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="quest for the holy something (1992)(zenobi).dsk" size="194816" crc="966cab79" sha1="c9d0e3a2c98c89251ad0bde5a6a1a60d5401bbf0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="qoscrupa" cloneof="qoscrup"> + <description>A Question of Scruples - The Computer Edition (alt)</description> + <year>1987</year> + <publisher>Leisure Genius</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="question of scruples - the computer edition, a (1987)(leisure genius).dsk" size="194560" crc="32d4e533" sha1="8b36ccbf3a87bca7aee778d4e17a32e519888cea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="qosa" cloneof="qos"> + <description>A Question of Sport (alt)</description> + <year>1989</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="question of sport, a (1989)(elite systems).dsk" size="194816" crc="87726a94" sha1="d9998e11c5a578d9994447ca3251731e69b88966" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="ram"> + <description>R.A.M.</description> + <year>1990</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="92672"> + <rom name="r.a.m. (1990)(topo soft)(es).dsk" size="92672" crc="7f9d37fa" sha1="5a14290edb30eb365a3e500926a186cd948755c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="rbibb2a" cloneof="rbibb2"> + <description>R.B.I. 2 Baseball (alt)</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="r.b.i. 2 baseball (1991)(domark).dsk" size="194816" crc="5c77dc45" sha1="088df7f83b465e851b5cf18fc6deaefaeebc1a14" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="radioman"> + <description>Radiomania</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="radiomania (1991)(zenobi).dsk" size="194816" crc="74edb005" sha1="7226284e7a66c8ed8290046b0e44a0f3ffb89281" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="railstom"> + <description>Raiders of the Lost Tomb</description> + <year>1995</year> + <publisher>The Adventure Workshop</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="raiders of the lost tomb (1995)(adventure workshop, the)(side a).dsk" size="194816" crc="13a48640" sha1="32590e55e3f99add1edb23a4fc24880093ee529e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="raiders of the lost tomb (1995)(adventure workshop, the)(side b).dsk" size="194816" crc="7718f843" sha1="a89c1aebde5631e933982967d194cd1b08af30df" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="rbislanda" cloneof="rbisland"> + <description>Rainbow Islands (alt)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="175360"> + <rom name="rainbow islands - the story of bubble bobble 2 (1990)(ocean).dsk" size="175360" crc="8409c9ed" sha1="db9bf5bd455ac679142d5727226e9685aeebb1f5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="redheatsp" cloneof="redheat"> + <description>Red Heat (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="175360"> + <rom name="red heat (1989)(erbe)(es)(en)[re-release].dsk" size="175360" crc="59b14ef2" sha1="19fccf544fb00c9767c8472684d936effa76fca6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="redheat"> + <description>Red Heat</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="157184"> + <rom name="red heat (1989)(ocean).dsk" size="157184" crc="2be37cbe" sha1="75c53860247c0af7c81337519f25f84ed8700dd2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bttf3sp" cloneof="bttf3"> + <description>Regreso al Futuro - Parte III</description> + <year>1991</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="regreso al futuro - parte iii (1991)(mcm)(es)(en)(side a)[aka back to the future part 3][re-release].dsk" size="194816" crc="bc1c6dc0" sha1="d34c63ea589953cb689c5ca47b0433e91e68ec0a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="regreso al futuro - parte iii (1991)(mcm)(es)(en)(side b)[aka back to the future part 3][re-release].dsk" size="194816" crc="87ddb7cf" sha1="3c6e9e3524baacb4c34666ae89dd9124b0ee055a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="renegadea" cloneof="renegade"> + <description>Renegade (alt)</description> + <year>1987</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="renegade (1987)(imagine).dsk" size="194816" crc="9414eedd" sha1="ea6ba8c9f8db52cd827cfbe7cb576cf746865de9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="renegadeb" cloneof="renegade"> + <description>Renegade (alt 2)</description> + <year>1987</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="renegade (1987)(imagine)[a].dsk" size="194816" crc="bddac6b2" sha1="c4311ea7f5ee36a6b112299aaae107e4855adad9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- This is the dump from World of Spectrum --> + <software name="rescatla"> + <description>Rescate Atlantida</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="150272"> + <rom name="rescate atlantida (1989)(dinamic)(es)(en)(side a).dsk" size="150272" crc="2bbc9650" sha1="9b7d423d415a9535958da60ec26624f89bc3563c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="166400"> + <rom name="rescate atlantida (1989)(dinamic)(es)(en)(side b).dsk" size="166400" crc="a7d4f505" sha1="9d2ede9cb0ba5c96e6967a9df42425e55099fc06" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="rescatlaa" cloneof="rescatla"> + <description>Rescate Atlantida (alt)</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="rescate atlantida (1989)(dinamic)(es).dsk" size="214784" crc="176a12e4" sha1="4c71b572b282007732fb6a4ff617369c68f8c1ab" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="rescatlab" cloneof="rescatla"> + <description>Rescate Atlantida (alt 2)</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="rescate atlantida (1989)(dinamic)(es)[a].dsk" size="214784" crc="b259c19e" sha1="1dda1d59b8fafa91ca3fe15df6f5aada24d85cd5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jedia" cloneof="jedi"> + <description>Star Wars - Return of the Jedi (alt)</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="return of the jedi (1989)(domark).dsk" size="194816" crc="93e39844" sha1="95118a8cdc853521c39085950838aceaf48d35f2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jedisp" cloneof="jedi"> + <description>Star Wars - Return of the Jedi (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68352"> + <rom name="return of the jedi (1989)(erbe)(es)(en)[re-release].dsk" size="68352" crc="c0f1f626" sha1="f4cb6a5bd15f7e6c3b35678f2da31b9a332d11b1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jedispa" cloneof="jedi"> + <description>Star Wars - Return of the Jedi (Spa) (alt)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="136448"> + <rom name="return of the jedi (1989)(erbe)(es)(en)[a][re-release].dsk" size="136448" crc="c5cdb566" sha1="6befbc050becec8e084b1dec01d1c59487192cd0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="rexa" cloneof="rex"> + <description>Rex (alt)</description> + <year>1988</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="rex (1988)(martech games)[aka zenith].dsk" size="194816" crc="fada783b" sha1="75a4ec59bfe5ea598267d8f6ac38453129169f3b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="rhymecry"> + <description>Rhyme Cryme</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="rhyme cryme (1995)(zenobi)(side a).dsk" size="194816" crc="fcf41521" sha1="b5ff68d6bf063514903af931027a783b762ed56e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="rhyme cryme (1995)(zenobi)(side b).dsk" size="194816" crc="b14e9e7b" sha1="418f1bb000e950bc6c265dbd7133a8f88af27e8d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="rickdang"> + <description>Rick Dangerous</description> + <year>1989</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="rick dangerous (1989)(firebird).dsk" size="194816" crc="23a903d9" sha1="4d216ea0e695d7cc931dd4cd6f5cc64350d20450" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="rickdan2"> + <description>Rick Dangerous 2</description> + <year>1990</year> + <publisher>Micro Style</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="220160"> + <rom name="rick dangerous 2 (1990)(micro style).dsk" size="220160" crc="2d5aa66b" sha1="25a971a7363961787a8a4d1611142fac5a0c1e3e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="riptoff"> + <description>Riptoff</description> + <year>1991</year> + <publisher>Your Sinclair</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="riptoff (1991)(your sinclair).dsk" size="194816" crc="7578aac8" sha1="40c401f368c9cce742139e40d33dfaf45bc50a94" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="roadblstsp" cloneof="roadblst"> + <description>Road Blasters (Spa)</description> + <year>1988</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="road blasters (1988)(erbe)(es)(en)[re-release].dsk" size="214784" crc="5966a1bc" sha1="59df737d0dd64fe5c8a6973b1c88efca1892f80a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="roadblsta" cloneof="roadblst"> + <description>Road Blasters (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="road blasters (1988)(u.s. gold).dsk" size="214784" crc="012de59c" sha1="5fe7f856e85b63f4628f741b92f85ac81541ea82" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="robocop"> + <description>Robocop</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="134144"> + <rom name="robocop (1988)(ocean).dsk" size="134144" crc="545558f7" sha1="ad1e7ed55d62d8eec7bae80904f73be7f5ffd59e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="robocopa" cloneof="robocop"> + <description>Robocop (alt)</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="128768"> + <rom name="robocop (1988)(ocean)[a].dsk" size="128768" crc="c3218b5c" sha1="f56181f60553f4ac00631f8720b713bd42490a85" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="robocop2sp" cloneof="robocop2"> + <description>Robocop 2 (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="160768"> + <rom name="robocop 2 (1990)(erbe)(es)(en)[re-release].dsk" size="160768" crc="93b27353" sha1="78047deee2d869dbe4554617e385aa2c0998ac48" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="robocop2a" cloneof="robocop2"> + <description>Robocop 2 (alt)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="225536"> + <rom name="robocop 2 (1990)(ocean).dsk" size="225536" crc="afa8626e" sha1="eaf866424fa3d2b0ea006a970d3fd475147040ac" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="robocop2b" cloneof="robocop2"> + <description>Robocop 2 (alt 2)</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="225536"> + <rom name="robocop 2 (1990)(ocean)[a].dsk" size="225536" crc="d3298f36" sha1="e7815e2062f98883759629dd4a0cda36862f1961" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="rocknrol"> + <description>Rock 'n Roll</description> + <year>1989</year> + <publisher>Rainbow Arts</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="rock 'n roll (1989)(rainbow arts)(side a).dsk" size="194816" crc="8e00a1a0" sha1="378a77e1e653679e97a16245342c6a0cfd76560e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="rock 'n roll (1989)(rainbow arts)(side b).dsk" size="194816" crc="9c629673" sha1="d6135a003ada344ad6572f4b4a2f3b7fa6c0fc3f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="rthundera" cloneof="rthunder"> + <description>Rolling Thunder (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="rolling thunder (1988)(u.s. gold).dsk" size="194816" crc="075e555b" sha1="712dc41dbcaa62314e8fdbd2718569f1fa96e379" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="roundbnd"> + <description>Round the Bend</description> + <year>1991</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68352"> + <rom name="round the bend (1991)(impulze)[aka doc croc's outrageous adventures].dsk" size="68352" crc="f5494d4b" sha1="c670a0b723682b6de7ca7f89edcb85680ad5f2a4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="roundbndmdb" cloneof="roundbnd"> + <description>Round the Bend (master disk backup)</description> + <year>1991</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="round the bend (1991)(impulze)(side a)[aka doc croc's outrageous adventures][master disk backup].dsk" size="194816" crc="d6abbdf3" sha1="f6197df7e325b3390be71980939715d04dbd056f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B file shared with master disk. Verified at World of Spectrum. --> + <dataarea name="flop" size="194816"> + <rom name="round the bend (1991)(impulze)(side b)[aka doc croc's outrageous adventures][master disk backup].dsk" size="194816" crc="3f369cfe" sha1="3f2948425c21742c2d88ca658490488f642bad5e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="roundbndmd" cloneof="roundbnd"> + <description>Round the Bend (master disk)</description> + <year>1991</year> + <publisher>Impulze</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="68352"> + <rom name="round the bend (1991)(impulze)(side a)[aka doc croc's outrageous adventures][master disk].dsk" size="68352" crc="ed9c3df8" sha1="f02ea8a83b173233071d7401fab9b44a272cfd8c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="round the bend (1991)(impulze)(side b)[aka doc croc's outrageous adventures][master disk backup].dsk" size="194816" crc="3f369cfe" sha1="3f2948425c21742c2d88ca658490488f642bad5e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="rungaunta" cloneof="rungaunt"> + <description>Run the Gauntlet (alt)</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="run the gauntlet (1989)(ocean).dsk" size="174848" crc="908cd12d" sha1="bc74b1f45b05e3e5a0f93e186aeb9e938d469d0f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="runbronw"> + <description>Run, Bronwynn, Run</description> + <year>1992</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="run, bronwynn, run (1992)(fsf adventures).dsk" size="194816" crc="d1315cea" sha1="22ad24cd7199bfcde0ec5ba7984c6fa2650b94c8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="runngman"> + <description>The Running Man</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="160768"> + <rom name="running man, the (1989)(mcm)(es)(en)[re-release].dsk" size="160768" crc="502e531a" sha1="ca50672595b1f8da4ba1b614d761039b42b90f3a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stunrunn"> + <description>S.T.U.N. Runner</description> + <year>1990</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="215296"> + <rom name="s.t.u.n. runner (1990)(domark).dsk" size="215296" crc="0feddfe9" sha1="8d3289f150cecc9d7c4e5c02c1e94be3c11376c6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="saboteu2"> + <description>Saboteur II - Avenging Angel</description> + <year>1987</year> + <publisher>Durell Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="saboteur ii - avenging angel (1987)(durell)[h alex rider, 2015][tr pl][speed-up version].dsk" size="194816" crc="4c9b8d3d" sha1="7ed014dadff63cedd9ea6744793b76af8782611b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="saintgrva" cloneof="saintgrv"> + <description>Saint & Greavsie (alt)</description> + <year>1989</year> + <publisher>Grandslam Entertainments</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="220160"> + <rom name="saint and greavsie (1989)(grandslam).dsk" size="220160" crc="5152c80b" sha1="5175ce4e09020f840dddd7da345b9c0b4eb30af6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="salamand"> + <description>Salamander</description> + <year>1987</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="70656"> + <rom name="salamander (1987)(imagine)[re-release].dsk" size="70656" crc="62bfd974" sha1="fc4bc578c463f58a023c716f7df679afb8cb253e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="usagiyoj"> + <description>Samurai Warrior - The Battles of... Usagi Yojimbo</description> + <year>1988</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="samurai warrior - the battles of... usagi yojimbo (1988)(firebird)[aka battle of... usagi yojimbo, the].dsk" size="73216" crc="fa8df0ac" sha1="ef854f176c30934d1309982322f983194ae60153" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="santxmca"> + <description>Santa's Xmas Caper (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="santa's xmas caper (1991)(zeppelin games)(side a)[aka santa's christmas capers][aka you are santa claus][tape master disk].dsk" size="194816" crc="ac72f16b" sha1="1ee2388ecb420b4900006eb0583f9fb3805e5bf1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="satan"> + <description>Satan</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="107264"> + <rom name="satan (1989)(dinamic)(es).dsk" size="107264" crc="82642bef" sha1="344dd36d44076d079d8a62b678a8f4139a274526" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="scapegho"> + <description>Scapeghost</description> + <year>1989</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="scapeghost (1989)(level 9 computing)(side a)[aka spook].dsk" size="194816" crc="49303a17" sha1="9d8c1d37dee5df439a8945dc087fbc9082a4269c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="scapeghost (1989)(level 9 computing)(side b)[aka spook].dsk" size="194816" crc="497b537b" sha1="f75eb772cc5d27177ab4e8a50b0c66a71c8da497" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="scapeghoa" cloneof="scapegho"> + <description>Scapeghost (alt)</description> + <year>1989</year> + <publisher>Level 9 Computing</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="scapeghost (1989)(level 9 computing)(side a)[a][aka spook].dsk" size="194816" crc="1d10fcd4" sha1="221bf55fe048ef70dfb6b0a9e3c9bda2b04ab078" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="scapeghost (1989)(level 9 computing)(side b)[a][aka spook].dsk" size="194816" crc="c464a1e9" sha1="baf17b2ebba89cbb29af430be2399c05f03d4ad3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="scrabdxa" cloneof="scrabdx"> + <description>Scrabble Deluxe (alt)</description> + <year>1987</year> + <publisher>Leisure Genius</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="scrabble deluxe (1987)(leisure genius)[aka deluxe computer scrabble].dsk" size="194560" crc="3033f933" sha1="8ec1cf29e28980f7943feee4f64e3a0635d56eb4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sspirits"> + <description>Scramble Spirits</description> + <year>1990</year> + <publisher>Grandslam Entertainments</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="scramble spirits (1990)(grandslam).dsk" size="194816" crc="28617137" sha1="b1898340c7eadb2bf29417aaf8006792277c09f8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="seasorce"> + <description>Seaside Sorcery</description> + <year>1997</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="seaside sorcery (1997)(zenobi).dsk" size="194816" crc="f58ff9dc" sha1="5ad5d43bfb5c7ec4e763a03317c85698e889b905" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sendasal"> + <description>Senda Salvaje</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="senda salvaje (1990)(zigurat)(es).dsk" size="102400" crc="54f0d03f" sha1="a334fc0d768554e29e678017d90cff53adba1ab6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sentinel"> + <description>The Sentinel</description> + <year>1987</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="sentinel, the (1987)(firebird).dsk" size="78080" crc="5665c629" sha1="d03ca9d8dd2fca34aa174edccf17eda12d202409" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="serptale"> + <description>A Serpentine Tale</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="serpentine tale, a (1993)(zenobi)[re-release].dsk" size="194816" crc="bd0e89f2" sha1="7af072b5755b119ec22141ed4ab10ac0c54cc52e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="setotaisde" cloneof="setotais"> + <description>Seto Taisho vs Yokai (German, Spanish)</description> + <year>2016</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="seto taisho vs yokai (2016-02-29)(grussu, alessandro)(de-es).dsk" size="194816" crc="c1ebd473" sha1="4c32c7b87911b5ba209cc4c48083d2e157a582be" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="setotais"> + <description>Seto Taisho vs Yokai (English, Italian)</description> + <year>2016</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="seto taisho vs yokai (2016-02-29)(grussu, alessandro)(en-it).dsk" size="194816" crc="12d6499a" sha1="1ed7e33084dfcdde9870c623de2f30795cedc5f7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="setotaisfr" cloneof="setotais"> + <description>Seto Taisho vs Yokai (French, Portuguese)</description> + <year>2016</year> + <publisher>Alessandro Grussu</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="seto taisho vs yokai (2016-02-29)(grussu, alessandro)(fr-pt).dsk" size="194816" crc="6d28e331" sha1="d5650a8fdd2fee7e54cfce32ad8301561aebdf57" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="shackled"> + <description>Shackled</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="shackled (1988)(u.s. gold).dsk" size="194816" crc="27f51075" sha1="e14b0956f3d4f5981295266b0ed80a8d3fa739f4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="shdancer"> + <description>Shadow Dancer</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="165632"> + <rom name="shadow dancer (1991)(erbe)(es)(en)(side a)[re-release].dsk" size="165632" crc="39313626" sha1="3ae6a7e3f074a7d582cdc7df93268b7065fcaa1e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="shadow dancer (1991)(erbe)(es)(en)(side b)[re-release].dsk" size="194816" crc="ead87fd5" sha1="13c74b2352c19f646b64445b347cfc0b6e88805d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="shadoww"> + <description>Shadow Warriors</description> + <year>1990</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="208640"> + <rom name="shadow warriors (1990)(ocean).dsk" size="208640" crc="4d0a3727" sha1="ae8c3160465f6b021355fa83997ae2a90c0ef649" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sotbeastsp" cloneof="sotbeast"> + <description>Shadow of the Beast (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="44288"> + <rom name="shadow of the beast (1990)(erbe)(es)(en)(side a)[re-release].dsk" size="44288" crc="d6617fdb" sha1="fcfc943a3dabcc00e235ab34ca44a688940ddb43" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="153088"> + <rom name="shadow of the beast (1990)(erbe)(es)(en)(side b)[re-release].dsk" size="153088" crc="80f74e58" sha1="96ebf96237d41f8d2efa3c06e4dc26d62281416f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sotbeast"> + <description>Shadow of the Beast</description> + <year>1990</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="shadow of the beast (1990)(gremlin graphics)(side a).dsk" size="174848" crc="5078cdbf" sha1="0a9685669cab7d1d41646e945c8db250d5933b4b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="174848"> + <rom name="shadow of the beast (1990)(gremlin graphics)(side b).dsk" size="174848" crc="c36997da" sha1="a215b923a0150d21a889105a820f20ff356bbab3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="shardino"> + <description>Shard of Inovar</description> + <year>1987</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="shard of inovar (1987)(zenobi)[re-release].dsk" size="194816" crc="517d327c" sha1="284702077cee0618f6eae705557a290717b9bd5e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sharkmol"> + <description>Sharkey's Moll (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="sharkey's moll (1991)(zeppelin games)(side a)[aka operation shark][tape master disk].dsk" size="194816" crc="3d17527f" sha1="dc6973e0318a484b75c424c6221e34504f885cd8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sherlami"> + <description>Sherlock Holmes - The Lamberley Mystery</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sherlock holmes - the lamberley mystery (1990)(zenobi).dsk" size="194816" crc="2a9c732a" sha1="36fae868e3a83cd4f553b070384048cf5959170a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="shinobisp" cloneof="shinobi"> + <description>Shinobi (Spa)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="shinobi (1989)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="4663ae78" sha1="0ad60c222997942884c7c34e41840ee198722980" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="shinobi"> + <description>Shinobi</description> + <year>1989</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="201216"> + <rom name="shinobi (1989)(virgin games).dsk" size="201216" crc="64bbd9df" sha1="5300fe9292a3bc914dfeef10e3ad4d2cbd2a5d02" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sidearms"> + <description>Side Arms</description> + <year>1988</year> + <publisher>Go</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="side arms (1988)(go).dsk" size="194816" crc="9199aa09" sha1="e23fdec7d476cfcef5754262541580ff40e76318" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="silkworm"> + <description>Silkworm</description> + <year>1989</year> + <publisher>Virgin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="81408"> + <rom name="silkworm (1989)(virgin games).dsk" size="81408" crc="399e0d4e" sha1="209150254f605ce39c9f51e1aaeb9cb4571f0ace" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="silkwormsp" cloneof="silkworm"> + <description>Silkworm (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68352"> + <rom name="silkworm (1989)(erbe)(es)(en)[re-release].dsk" size="68352" crc="1f3bb8ca" sha1="aeb2576b0f616e920145f3e4575e188d84f578db" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="silkwormspa" cloneof="silkworm"> + <description>Silkworm (Spa) (alt)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68352"> + <rom name="silkworm (1989)(erbe)(es)(en)[a][re-release].dsk" size="68352" crc="1a5a1dac" sha1="cbe96a6d5448f6d0681599abfd48aaed372917ee" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="silkwormspb" cloneof="silkworm"> + <description>Silkworm (Spa) (alt 2)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="67328"> + <rom name="silkworm (1989)(erbe)(es)(en)[a2][re-release].dsk" size="67328" crc="e3321b40" sha1="f54c7d1851a1acaf867e747f801a595934eeb0af" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="silvwolf"> + <description>Silverwolf</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="silverwolf (1992)(zenobi)[re-release].dsk" size="194816" crc="a1ced916" sha1="f99b5f686b4d2cafe58ee284562d009087319e87" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="simcitya" cloneof="simcity"> + <description>Sim City (alt)</description> + <year>1990</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sim city (1990)(infogrames)(fr)(en).dsk" size="194816" crc="472c0a72" sha1="3abc13d4fe3c42cf8245840890f8f8e1b7c4d598" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="bartvssm"> + <description>The Simpsons - Bart vs. the Space Mutants</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="216320"> + <rom name="simpsons - bart vs. the space mutants, the (1991)(erbe)(es)(en)(side a)[re-release].dsk" size="216320" crc="a00c2816" sha1="f5b1e86051810971d073e015d8b444ef96466bbe" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="216320"> + <rom name="simpsons - bart vs. the space mutants, the (1991)(erbe)(es)(en)(side b)[re-release].dsk" size="216320" crc="f1cdff77" sha1="ef71e50c841a00e6ecdfde047e2c3fcc2b889a78" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sirfred"> + <description>Sir Fred</description> + <year>1986</year> + <publisher>Made in Spain</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sir fred (1986)(made in spain)(es).dsk" size="194816" crc="adf9a9f0" sha1="c16ccb453b56b3991f6e4a1a603ee74aae66077e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sitopons"> + <description>Sito Pons 500cc Grand Prix</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="sito pons 500cc grand prix (1990)(zigurat)(es).dsk" size="58624" crc="a4d2515f" sha1="f9cd0be687108f3a7ef68aae4fbafa306722d41d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="skatballa" cloneof="skatball"> + <description>Skateball (alt)</description> + <year>1988</year> + <publisher>Ubi Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="skateball (1988)(ubi soft)(fr)(en).dsk" size="194816" crc="07f0ab2b" sha1="2503637efd9b6d57f1c4c8d1b40dde6462d595ed" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="skullxboa" cloneof="skullxbo"> + <description>Skull & Crossbones (alt)</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="227072"> + <rom name="skull & crossbones (1991)(domark).dsk" size="227072" crc="a8327f25" sha1="4373fadbb69cc3d0940ca7ce91f3f6e5672dac05" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="slaugcav"> + <description>The Slaughter Caves</description> + <year>1989</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="slaughter caves, the (1989)(zenobi).dsk" size="194816" crc="4ec7b7e1" sha1="05cb1351e4226244ba3ac0756419b4ac2a0b2f7d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sleepwal"> + <description>Sleepwalker (tape master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="204544"> + <rom name="sleepwalker (1992)(zeppelin games)(side a)[tape master disk].dsk" size="204544" crc="b2388672" sha1="52af33ca5ece70fe921871b8dedd158e7a0df7a0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="204032"> + <rom name="sleepwalker (1992)(zeppelin games)(side b)[tape master disk].dsk" size="204032" crc="841eccbd" sha1="d0ba5a8dc801bd03fd644f5ff6774f4ed5889e91" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="slowglas"> + <description>Slowglass</description> + <year>1990</year> + <publisher>Slowglass</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="slowglass (1990)(slowglass)(es).dsk" size="194816" crc="9871570f" sha1="8368e425ce77d0cde6a13b9498b89423365bddb4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="smashtv"> + <description>Smash TV</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63232"> + <rom name="smash tv (1991)(erbe)(es)(en)[re-release].dsk" size="63232" crc="537c4c8b" sha1="7b196f932ee796e8a1b2726dff93ccc99fe39f67" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="snoopya" cloneof="snoopy"> + <description>Snoopy (alt)</description> + <year>1990</year> + <publisher>The Edge</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="195072"> + <rom name="snoopy (1990)(edge, the).dsk" size="195072" crc="f0773376" sha1="75ffe0c2f2c3fd99c446bdf1f97a34b1b54e3f47" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sokoban"> + <description>Sokoban</description> + <year>2006</year> + <publisher>Compiler</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sokoban (2006)(compiler)(es)(en).dsk" size="194816" crc="7c9661ad" sha1="2e76b26808d115e750c7aedd700eac1284f58b48" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sokobansp" cloneof="sokoban"> + <description>Sokoban (Spa)</description> + <year>2006</year> + <publisher>Compiler</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="sokoban (2006)(compiler)(es).dsk" size="194816" crc="2fe0a1d0" sha1="8f53882a9481ab44dd484ae7c17cf448b1c18a85" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="solnegro"> + <description>Sol Negro</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="230400"> + <rom name="sol negro (1989)(opera soft)(es).dsk" size="230400" crc="3e1dc4fd" sha1="d76f73af3f00fdec6e38fcc428efc8fda86fdf32" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="soldoffo"> + <description>Soldier of Fortune</description> + <year>1988</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="soldier of fortune (1988)(firebird).dsk" size="73216" crc="a88165f9" sha1="720363a3afad04d495279db7fd8f43902d67b1f3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="soldlghta" cloneof="soldlght"> + <description>Soldier of Light (alt)</description> + <year>1988</year> + <publisher>ACE</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="soldier of light (1988)(ace).dsk" size="194816" crc="8de198b1" sha1="dde86e28951db167097e08ee6989f17380d3f62a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="soldlghtsp" cloneof="soldlght"> + <description>Soldier of Light (Spa)</description> + <year>1988</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="soldier of light (1988)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="fce2bb56" sha1="ed21b6fffdafa96800976f276c542837f60ac830" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="songofta"> + <description>The Song of Taliesin</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="song of taliesin, the (1994)(zenobi).dsk" size="194816" crc="b7e4fb2d" sha1="071eaa34379e895102c3007e2eca28f89c0eab93" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="soviet"> + <description>Soviet</description> + <year>1990</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="soviet (1990)(opera soft)(es)(en).dsk" size="214784" crc="416c7bb9" sha1="4a9e5f3e59b00296aeb465bf85dd55345d8fb925" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="spacecrsa" cloneof="spacecrs"> + <description>Space Crusade (alt)</description> + <year>1992</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="199680"> + <rom name="space crusade (1992)(gremlin graphics).dsk" size="199680" crc="ac78c209" sha1="8a2ea68d31c5ee026ca0a9b44c0a0c7657e7ed06" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sharrie2"> + <description>Space Harrier II</description> + <year>1990</year> + <publisher>Grandslam Entertainments</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="space harrier ii (1990)(grandslam)(side a).dsk" size="194816" crc="965723a5" sha1="c2af9c86652996c2d573f7cc8e131ffd30bd8bb2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="space harrier ii (1990)(grandslam)(side b).dsk" size="194816" crc="025d0275" sha1="46100285448c978d8a79d2caa56ed402d5156278" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spccasc2"> + <description>The Spectre of Castle Coris v2</description> + <year>1990</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="spectre of castle coris, the v2 (1990)(fsf adventures).dsk" size="194816" crc="7c6025ef" sha1="933b3bc8096cd232de18db585dc6e13b3e3d4826" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spherica"> + <description>Spherical</description> + <year>1989</year> + <publisher>Rainbow Arts</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="spherical (1989)(rainbow arts)(side a).dsk" size="194816" crc="36fb8105" sha1="145dcb29fca1f4f3a19c3b2bb15538bd9ce44e9d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="spherical (1989)(rainbow arts)(side b).dsk" size="194816" crc="8c290b43" sha1="376f94df266481930a93b840aaabffce7ce8da6b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spittimasp" cloneof="spittima"> + <description>Spitting Image (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="116992"> + <rom name="spitting image (1989)(erbe)(es)(en).dsk" size="116992" crc="2592e3a9" sha1="9452d23da666547fa05ae4f5e1adc05a46da0999" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spittima"> + <description>Spitting Image - The Computer Game</description> + <year>1988</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="spitting image - the computer game (1988)(domark).dsk" size="194816" crc="4116a854" sha1="6df79a1d0deff4c3b177d1dc6a48d20c50196fcb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sportria"> + <description>Sporting Triangles</description> + <year>1989</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="sporting triangles (1989)(cds microsystems)(side a).dsk" size="194816" crc="8ef1179f" sha1="115533a2c46af100e10b0f2142c2deb3d66c8e9f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="217600"> + <rom name="sporting triangles (1989)(cds microsystems)(side b).dsk" size="217600" crc="871434ab" sha1="87c1c0d4a3f9b9858177449f08a8dcd6fb3d9144" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="sportriaa" cloneof="sportria"> + <description>Sporting Triangles (alt)</description> + <year>1989</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="sporting triangles (1989)(cds microsystems)(side a)[a].dsk" size="194816" crc="c8e03477" sha1="8f8d4b1e7d97b65c5f0f71697c2e5c44c11e5cec" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="219136"> + <rom name="sporting triangles (1989)(cds microsystems)(side b)[a].dsk" size="219136" crc="75602549" sha1="405badca4b71dd1844caaa39a8bec7e1ecc3bf60" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="spywholma" cloneof="spywholm"> + <description>The Spy Who Loved Me (alt)</description> + <year>1990</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="spy who loved me, the (1990)(domark).dsk" size="194816" crc="2899eeb8" sha1="608d32c04d8a279e8f1fc8a4e6265a1aedfdf596" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Only the Spanish version has been dumped, unknown if it had any other releases. --> + <software name="stdragon"> + <description>St. Dragon</description> + <year>1990</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="st. dragon (1990)(dro soft)(es)(en)(side a)[re-release].dsk" size="194816" crc="73cb914d" sha1="2e425aefc2a342b204b77fcf37fa038a78a8eb9b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="st. dragon (1990)(dro soft)(es)(en)(side b)[re-release].dsk" size="194816" crc="b0fc6e49" sha1="0b9130bf2c9e81d36d9517ecddb5dd36194c651a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stackup"> + <description>Stack Up (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stack up (1991)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="6fb5d8b1" sha1="4e7442d6fb9b3335ca37ae48abade64e1558e7a3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="staffofp"> + <description>The Staff of Power</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="staff of power, the (1991)(zenobi).dsk" size="194816" crc="58cf287b" sha1="4d6ab194e4ce1b42992a64784dd7f676c6ffdb06" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="stalingra" cloneof="stalingr"> + <description>Stalingrad (alt)</description> + <year>1988</year> + <publisher>CCS</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stalingrad (1988)(ccs).dsk" size="194816" crc="b8e30ec1" sha1="3e59fe248f3bbad97fd4b7b34fe528ade488e8f6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stalker"> + <description>Stalker</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stalker (1990)(zenobi).dsk" size="194816" crc="b0390b04" sha1="c34fcf6cc5d09d2a3a15632152bfb07ec8c428f2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="starcont"> + <description>Star Control</description> + <year>1991</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="star control (1991)(dro soft)(es)(en)[re-release].dsk" size="194816" crc="6ae46465" sha1="2a497f52a687388e63ffc8500ac3ec88d66d4f20" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="starrai2"> + <description>Star Raiders II</description> + <year>1987</year> + <publisher>Electric Dreams</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="star raiders ii (1987)(electric dreams).dsk" size="204544" crc="83b53901" sha1="6bab4a36af709dab36a9587cdb36a9397e73f253" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="starwarsa" cloneof="starwars"> + <description>Star Wars (alt)</description> + <year>1987</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="star wars (1987)(domark).dsk" size="194816" crc="c830d827" sha1="8578572586f25c927bf50463718ce75188bd6f57" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="starbyte"> + <description>Starbyte</description> + <year>1987</year> + <publisher>Mister Chip</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="starbyte (1987)(mister chip)(es).dsk" size="102400" crc="c3f2930d" sha1="645bd0c0caa36d6ccd00335b445da45fc5dd3dce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="starglida" cloneof="starglid"> + <description>Starglider (alt)</description> + <year>1986</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="starglider (1986)(rainbird).dsk" size="194816" crc="2a296abd" sha1="36420eae3caf6ae04c3b03d1ade59a13dad29ee9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stargli2"> + <description>Starglider 2 - The Egrons Strike Back</description> + <year>1989</year> + <publisher>Rainbird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="starglider 2 - the egrons strike back (1989)(rainbird).dsk" size="194816" crc="f6bdeb90" sha1="69f0b5f5b1ebdf67dad43eb7852b95b33db3d5d3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="cchaplina" cloneof="cchaplin"> + <description>Starring Charlie Chaplin (alt)</description> + <year>1987</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="starring charlie chaplin (1987)(u.s. gold).dsk" size="194816" crc="1df5d541" sha1="3a39892b5f1a310ec7530b687fab434f9aae5e8c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="starship"> + <description>Starship Quest</description> + <year>1989</year> + <publisher>FSF Adventures</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="starship quest (1989)(fsf adventures)(side a).dsk" size="194816" crc="92ebcedb" sha1="30a1f975780ea809fecf0415af6c18f64e21372c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="starship quest (1989)(fsf adventures)(side b).dsk" size="194816" crc="41b39b65" sha1="6ddf86a5598841f9a19bfa5ad778b2fccc011edd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stircrazsp" cloneof="stircraz"> + <description>Stir Crazy Featuring Bobo (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stir crazy featuring bobo (1990)(erbe)(es)(en)[re-release].dsk" size="194816" crc="e8fb3ec4" sha1="50c5bda1b9d57e23eff42da53fb8cbe2523ac85e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stircraz"> + <description>Stir Crazy Featuring Bobo</description> + <year>1990</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stir crazy featuring bobo (1990)(infogrames)(fr)(en).dsk" size="194816" crc="98dbef8b" sha1="717259d1fa05209a899f1ddfef20c9c72efacfb1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stormlor"> + <description>Stormlord</description> + <year>1989</year> + <publisher>Hewson Consultants</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stormlord (1989)(hewson consultants).dsk" size="194816" crc="0979a296" sha1="0924f2b950c99dc9040d7a7eb64bd46a53227e46" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="stranded"> + <description>Stranded</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="stranded (1992)(zenobi).dsk" size="194816" crc="9483615b" sha1="dfbe0660b1725999f76af69770491b71f7fb437f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="strfight"> + <description>Street Fighter</description> + <year>1988</year> + <publisher>Go</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="street fighter (1988)(go).dsk" size="194816" crc="867ed9cc" sha1="2aa9fc365e4434db2e9e54074b491fb730431862" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="subbuteoa" cloneof="subbuteo"> + <description>Subbuteo - The Computer Game (alt)</description> + <year>1990</year> + <publisher>Electronic Zoo</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="subbuteo - the computer game (1990)(electronic zoo).dsk" size="194816" crc="2bdbb1d3" sha1="e85338f53b360019702b91ef969c06a5d7dae406" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="summgam2"> + <description>Summer Games II</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="summer games ii (1988)(u.s. gold)(side a).dsk" size="194816" crc="e9a395be" sha1="495f06647275a71c2da1f0c03878f1586bbf7ed9" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="summer games ii (1988)(u.s. gold)(side b).dsk" size="194816" crc="98858aef" sha1="965171b35927ca86a3edc24ebfac6abd10792bfd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="supercara" cloneof="supercar"> + <!-- May be the same edition as the IPF --> + <description>Super Cars (alt)</description> + <year>1990</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="super cars (1990)(gremlin graphics).dsk" size="174848" crc="0ca22a11" sha1="10d892855a61470343d3e9fe68411e9d2f6b3f83" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="suprcycla" cloneof="suprcycl"> + <description>Super Cycle (alt)</description> + <year>1987</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="super cycle (1987)(u.s. gold).dsk" size="194816" crc="bd0f4919" sha1="f5dcb5c3dd83dc5bfa7e13dca2fc7060a8899a61" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spscsimusp" cloneof="spscsimu"> + <description>Super Scramble Simulator (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="68608"> + <rom name="super scramble simulator (1989)(erbe)(es)(en)[re-release].dsk" size="68608" crc="7e7e0a71" sha1="6fcb326fed039e3cf5dd2aa35bcd1a76b88e3f52" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spscsimu"> + <description>Super Scramble Simulator</description> + <year>1989</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="super scramble simulator (1989)(gremlin graphics).dsk" size="219136" crc="28831769" sha1="efc4c460794941aad2c6acbc5aa48e98f1b3e949" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="ssinva" cloneof="ssinv"> + <description>Super Space Invaders (alt)</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="super space invaders (1991)(domark)[aka space invaders '91].dsk" size="194816" crc="49e654a3" sha1="4d17e0192046883b15f928b93df13d1638395713" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="ssinvb" cloneof="ssinv"> + <description>Super Space Invaders (alt 2)</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="super space invaders (1991)(domark)[a][aka space invaders '91].dsk" size="194816" crc="8f014e05" sha1="5c9c70e29d788b03151d992b9e119ee49a63a01e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="ssinvc" cloneof="ssinv"> + <description>Super Space Invaders (alt 3)</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="super space invaders (1991)(domark)[a2][aka space invaders '91].dsk" size="194816" crc="17742dec" sha1="4ae71d91affa353353f125137d04f69b94dcf88e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="ssinvd" cloneof="ssinv"> + <description>Super Space Invaders (alt 4)</description> + <year>1991</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="super space invaders (1991)(domark)[a3][aka space invaders '91].dsk" size="194816" crc="568d63df" sha1="e9e3ebd679de2a559611452cc4fc5ea6d50db53d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="spchs335"> + <description>Superchess 3 v3.5</description> + <year>1984</year> + <publisher>CP Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="superchess 3 v3.5 (1984)(cp).dsk" size="194816" crc="a3329d71" sha1="181ff40d2f69b2409909ef8941dffc10c70d4cc6" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="superman"> + <description>Superman - The Man of Steel</description> + <year>1989</year> + <publisher>Tynesoft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="superman - the man of steel (1989)(tynesoft)(side a).dsk" size="194816" crc="08d9cc71" sha1="b3828014329ad06e16ade91324f517e22849a3bc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="superman - the man of steel (1989)(tynesoft)(side b).dsk" size="194816" crc="b3c0c0f3" sha1="7c343d678eb85659967cb06aa6350096159f397e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="supsport"> + <description>Supersports - The Alternative Olympics</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="176103"> + <rom name="supersports - the alternative olympics (1988)(gremlin graphics)(side a)[aka super sports - the olympic challenge].dsk" size="176103" crc="21b31fff" sha1="f5685271d3dc1d49aa593d48299b9c3da98603a2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="176103"> + <rom name="supersports - the alternative olympics (1988)(gremlin graphics)(side b)[aka super sports - the olympic challenge].dsk" size="176103" crc="73da3eac" sha1="f03b0a34ad6d67576e62b51f0a75abf88a7aef86" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is an older version of the game, dated 20170922 --> + <software name="swoiannaa" cloneof="swoianna"> + <description>The Sword of IANNA (alt)</description> + <year>2017</year> + <publisher>RetroWorks</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="sword of ianna, the (2017-09-30)(retroworks)(es)(side a).dsk" size="194816" crc="fcddb65d" sha1="eed1758d470b08aa9ab14dffee3f8d665639f931" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="sword of ianna, the (2017-09-30)(retroworks)(es)(side b).dsk" size="194816" crc="eede4f21" sha1="2d26ea4273848fa36ffb1eb45f418ce0f5169c64" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This version is dated 20171126 --> + <software name="swoianna"> + <description>The Sword of IANNA</description> + <year>2017</year> + <publisher>RetroWorks</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="sword of ianna, the (2017-09-30)(retroworks)(es)(en-es)(side a).dsk" size="194816" crc="b6acb571" sha1="2c91875620ad05fd9a1347e7454907b30fac91be" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="sword of ianna, the (2017-09-30)(retroworks)(es)(en-es)(side b).dsk" size="194816" crc="a007c1b5" sha1="57bde6daf306674a7f8cab9d6784f2175cc9dc25" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="swotsamu"> + <description>Sword of the Samurai (master disk)</description> + <year>1992</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="sword of the samurai (1992)(zeppelin games)(side a)[master disk].dsk" size="194816" crc="69842c84" sha1="7e39573278bb0c3c35ec3b7a18bcbce76cb17572" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="sword of the samurai (1992)(zeppelin games)(side b).dsk" size="194816" crc="b2523378" sha1="3553502492ad245ba8156228c323b6cc10d99698" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="twasatim"> + <description>T'Was a Time of Dread</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="t'was a time of dread (1992)(zenobi).dsk" size="194816" crc="a6d11b34" sha1="b59d8b92bd71bdbe2bf383ab8c0468e54981018c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tchitort"> + <description>Tai Chi Tortoise (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="tai chi tortoise (1991)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="6412ea4f" sha1="5ebc7ac6ae06ae2eb4b6224d5b1fa28fc5b4014c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="taipana" cloneof="taipan"> + <description>Tai-Pan (alt)</description> + <year>1987</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="tai-pan (1987)(ocean).dsk" size="194560" crc="458c4b7c" sha1="6fe0e05aa78573fda4b5c563cba5e5d287c25864" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tlsmathe"> + <description>The Tales of Mathematica</description> + <year>1990</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tales of mathematica, the (1990)(zenobi).dsk" size="194816" crc="254feaae" sha1="fe4e845b1e380bcbf9a1c352429476d21c9432a9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tankatta"> + <description>Tank Attack</description> + <year>1988</year> + <publisher>CDS Microsystems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tank attack (1988)(cds microsystems).dsk" size="194816" crc="215fa4e2" sha1="9429a58f1d122ee7feec9db25d6c50f25b58871d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="targrene"> + <description>Target: Renegade</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="134144"> + <rom name="target - renegade (1988)(imagine).dsk" size="134144" crc="c93b5664" sha1="61f5623c5a614558b8431c4cddbc5ae11313c897" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="targetpl"> + <description>Target Plus</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <info name="usage" value="Requires Gun Stick lightgun"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="53504"> + <rom name="target plus (1988)(dinamic)(es)[gunstick].dsk" size="53504" crc="7de2c214" sha1="ff7ea991a28a559ad2df6f0ffbaf67dba5137996" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="taxretur"> + <description>Tax Returns</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tax returns (1992)(zenobi).dsk" size="194816" crc="03d83545" sha1="3dce8cdb905a5ef79ff5af534af19a202433ecf4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="taxmanco"> + <description>The Taxman Cometh</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="taxman cometh, the (1991)(zenobi).dsk" size="194816" crc="05399461" sha1="e626dcb4c47a4bf4f5c4a7564d36672f85edeef8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tearmoon"> + <description>The Tears of the Moon</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="tears of the moon, the (1992)(zenobi).dsk" size="204544" crc="e21084cf" sha1="bf084143f9b7f5825742f7259804e3babcef0bb8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="technoco"> + <description>Techno-Cop</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="techno-cop (1988)(gremlin graphics).dsk" size="219136" crc="d3de6ce2" sha1="ad966892ac92495095e565706ed4f672b39a7021" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="teenagee"> + <description>Teenage Emergency</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="teenage emergency (1995)(zenobi).dsk" size="194816" crc="a945f2f5" sha1="7e5cba7d570959609896663a6a0d6d735cc5d1a3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="tmhta" cloneof="tmht"> + <description>Teenage Mutant Hero Turtles (alt)</description> + <year>1990</year> + <publisher>Image Works</publisher> + <info name="usage" value="Requires manual for password protection"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="teenage mutant hero turtles (1990)(image works)[passworded].dsk" size="194816" crc="ffb00416" sha1="680ae4dccfe54c1117df40edff50b1fa51b7c00b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="tmhtb" cloneof="tmht"> + <description>Teenage Mutant Hero Turtles (alt 2)</description> + <year>1990</year> + <publisher>Image Works</publisher> + <info name="usage" value="Requires manual for password protection"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="teenage mutant hero turtles (1990)(image works)[a][passworded].dsk" size="194816" crc="059786ae" sha1="2ca0e8a8c0a24a11fe2904cf586cdd32fa1bc6bb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tengrebt"> + <description>Ten Green Bottles</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="ten green bottles (1995)(zenobi).dsk" size="194816" crc="667dfed2" sha1="da5f6806ebc46dec7ae7c63d9f11e650f39ab845" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="term2a" cloneof="term2"> + <description>Terminator 2 - Judgment Day (alt)</description> + <year>1991</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="216320"> + <rom name="terminator 2 - judgment day (1991)(ocean).dsk" size="216320" crc="d97a5f2a" sha1="512127b1523d9ba51889b3891592007dcbb89ed0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="terrorpo"> + <description>Terrorpods</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58624"> + <rom name="terrorpods (1989)(dro soft)(es)(en)[re-release].dsk" size="58624" crc="4e335ea4" sha1="4fc4e61c48103a6b1bd3af4662ee1926338cffca" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tetris"> + <description>Tetris</description> + <year>1988</year> + <publisher>Mirrorsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="tetris (1988)(mirrorsoft).dsk" size="194816" crc="6c230d3f" sha1="04119edaf20c012d953426be34c0d52990d88687" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tetrisa" cloneof="tetris"> + <description>Tetris (alt)</description> + <year>1988</year> + <publisher>Mirrorsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="tetris (1988)(mirrorsoft)[a].dsk" size="204544" crc="e7febbfc" sha1="8d2652072d6334c1011e9539136b9558eeb61d76" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tetrisb" cloneof="tetris"> + <description>Tetris (alt 2)</description> + <year>1988</year> + <publisher>Mirrorsoft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="tetris (1988)(mirrorsoft)[a2].dsk" size="204544" crc="a1cd0a44" sha1="6a10201bd233d96c7b47bf252df1f0462b7de3e7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tparkuk"> + <description>Theme Park U.K.</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="theme park u.k. (1993)(zenobi)[re-release].dsk" size="194816" crc="82d68d37" sha1="b43330b5962f776ae595d88bd3711378c7d80a17" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tparkusa"> + <description>Theme Park U.S.A.</description> + <year>1993</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="theme park u.s.a. (1993)(zenobi).dsk" size="194816" crc="fa6b510f" sha1="4141a805840d7c990ec5b9b671ca2ddde5853807" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tabombup"> + <description>There's a Bomb Under Parliament</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="there's a bomb under parliament (1991)(zenobi).dsk" size="194816" crc="61cfed6b" sha1="67b4598e5b2e961cbe4215f364bb5b71c37e5e5c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thirnins"> + <description>The Thirty-Nine Steps</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="thirty-nine steps, the (1995)(zenobi)[aka 39 steps, the].dsk" size="194816" crc="97ce88e7" sha1="bbeb7c4764736f822e31a0518026f890ca0b81e4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="tbladea" cloneof="tblade"> + <description>Thunder Blade (alt)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="thunder blade (1988)(u.s. gold).dsk" size="194816" crc="13a82ea8" sha1="395cabc0eb12af6856ca9c685bbde042bf54300e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="tbladeb" cloneof="tblade"> + <description>Thunder Blade (alt 2)</description> + <year>1988</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="thunder blade (1988)(u.s. gold)[a].dsk" size="194816" crc="c6ff5741" sha1="c2a090224dc93f68f97b51fbbfe3555d0e6a7a07" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thunderb"> + <description>Thunderbirds</description> + <year>1989</year> + <publisher>Grandslam Entertainments</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="thunderbirds (1989)(grandslam)(side a).dsk" size="194816" crc="66fd1e53" sha1="410e2afaa9c5273b048c1830838835dd37d217ed" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="thunderbirds (1989)(grandslam)(side b).dsk" size="194816" crc="60f605fa" sha1="aa856c625ed23dc634ff9f9dc73dcb84f13123e0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thunderbsp" cloneof="thunderb"> + <description>Thunderbirds (Spa)</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="174848"> + <rom name="thunderbirds (1989)(mcm)(es)(en)(side a)[re-release].dsk" size="174848" crc="ce593266" sha1="2d68121c14b7a2b959eb949f6bccf85ffaa55ca5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="174848"> + <rom name="thunderbirds (1989)(mcm)(es)(en)(side b)[re-release].dsk" size="174848" crc="0e8dc579" sha1="7614e72ff525cc87867eef68cb885e746caff727" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="thunderba" cloneof="thunderb"> + <description>Thunderbirds (alt)</description> + <year>1989</year> + <publisher>Grandslam Entertainments</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="thunderbirds (1989)(grandslam)(side a)[a].dsk" size="194816" crc="cb8427bb" sha1="7eba9267736f5ca2b4e245ebe6e7e2f031a08f79" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="thunderbirds (1989)(grandslam)(side b)[a].dsk" size="194816" crc="61099896" sha1="c20b818cf298e15765adfb1385f3c5c604873864" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="thdrcatsa" cloneof="thdrcats"> + <description>Thundercats (alt)</description> + <year>1987</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="thundercats (1987)(elite systems).dsk" size="194816" crc="89029622" sha1="c4aa09753aa87f8e7193bff875f3531886cc1ce3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="jawssp"> + <description>Tiburon</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="tiburon (1989)(erbe)(es)(en)[aka jaws][re-release].dsk" size="78080" crc="aaa7b9fe" sha1="f028fc6cc04d585c570193560849896925c3472f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="timecrys"> + <description>The Time Crystal</description> + <year>2011</year> + <publisher><homebrew></publisher> + <info name="author" value="Steven Flanagan"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="time crystal, the (2011)(flanagan, steven).dsk" size="194816" crc="777f0094" sha1="a7a16b0f6bfa89879d9672ec17df0df0bbb07cfb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="timescan"> + <description>Time Scanner</description> + <year>1989</year> + <publisher>Activision</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="time scanner (1989)(activision).dsk" size="194816" crc="941f35d2" sha1="bd23dd1b8911e2d3c125d983502c9ecf6fb0a965" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="timescansp" cloneof="timescan"> + <description>Time Scanner (Spa)</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="144384"> + <rom name="time scanner (1989)(mcm)(es)(en)[re-release].dsk" size="144384" crc="f6be60cc" sha1="980ff8cbcf5727eca1cbe3d5158d2514d66f1504" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tintmoonsp" cloneof="tintmoon"> + <description>Tintin en la Luna</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="63488"> + <rom name="tintin en la luna (1989)(erbe)(es)(en)[aka tintin on the moon][re-release].dsk" size="63488" crc="e4e8df96" sha1="e60fda54d391d7e1b073529f12e7aa74d6e5b7d2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tintmoon"> + <description>Tintin on the Moon</description> + <year>1989</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204544"> + <rom name="tintin on the moon (1989)(infogrames)(fr)(en).dsk" size="204544" crc="18094850" sha1="44c2069bb173bfb5ea070f4eaea9b7a9bae09c88" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="titanicb"> + <description>Titanic Blinky (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="titanic blinky (1991)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="b472ed9c" sha1="8a0107792cd59d729f3c39dc7d1c7fcd943dd62c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="titanic blinky (1991)(zeppelin games)(side b)[tape master disk].dsk" size="194816" crc="84304cc7" sha1="9194585c484c1ace0fecb779af0f4fdd0a5ce4ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="toddlert"> + <description>Toddler Trouble</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="toddler trouble (1996)(zenobi).dsk" size="194816" crc="bad46cb8" sha1="1393e49ebea152d62a47b43ac4d28b9e3e86932b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tomahawk"> + <description>Tomahawk</description> + <year>1985</year> + <publisher>Digital Integration</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="102400"> + <rom name="tomahawk (1985)(digital integration)[aka thunderbird].dsk" size="102400" crc="706d95cd" sha1="afb87bc59e3ce983f829fe6c63a29cbd38d5d202" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="toobin"> + <description>Toobin'</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="204288"> + <rom name="toobin' (1989)(domark).dsk" size="204288" crc="89cd9303" sha1="a3a38047aee158f77ab5f772561c70d05a222d8d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="toobina" cloneof="toobin"> + <description>Toobin' (alt)</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="190208"> + <rom name="toobin' (1989)(domark)[a].dsk" size="190208" crc="7ec3488c" sha1="693cf9676485a0578db838963da90b5a895c26cc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="toobinsp" cloneof="toobin"> + <description>Toobin' (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="121856"> + <rom name="toobin' (1989)(erbe)(es)(en)[re-release].dsk" size="121856" crc="0aa86bcb" sha1="6e22f2395bc263e0d2c33d058770f8a5e84d7369" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tmhtsp" cloneof="tmht"> + <description>Tortugas Ninja</description> + <year>1990</year> + <publisher>MCM Software</publisher> + <info name="usage" value="Requires manual for password protection"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="tortugas ninja (1990)(mcm)(es)(en)[aka teenage mutant hero turtles][passworded][re-release].dsk" size="73216" crc="37875ffb" sha1="9af1d34f7861c163407256fb49fa569aeece4e54" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- This is the dump in World of Spectrum, but original version was password protected (rerelease or hack?) --> + <software name="tmhtsp2" cloneof="tmht"> + <description>Tortugas Ninja (unprotected)</description> + <year>1990</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="tortugas ninja (1990)(mcm)(es)(en)[aka teenage mutant hero turtles][re-release].dsk" size="73216" crc="6766d492" sha1="7ae9c02004b4f67c7c70d0cc1e3e1157538d3418" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="totalecl"> + <description>Total Eclipse</description> + <year>1988</year> + <publisher>Incentive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="total eclipse (1988)(incentive).dsk" size="194816" crc="37ca3e96" sha1="89c3cdcdeb53daa4f684a606ec79ba16c6362c9f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="totrecala" cloneof="totrecal"> + <description>Total Recall (alt)</description> + <year>1991</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="178432"> + <rom name="total recall (1991)(ocean).dsk" size="178432" crc="d58b27ec" sha1="618542c813bec4f3f55196af9033e51a37776965" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tourdefo"> + <description>Tour de Force</description> + <year>1988</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="tour de force (1988)(gremlin graphics).dsk" size="174848" crc="c8999948" sha1="3ccb02f23add396d4e45eedf8a7511e7be206b77" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="treasisl"> + <description>Treasure Island</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="treasure island (1991)(zenobi)[re-release].dsk" size="194816" crc="a9627167" sha1="2b72da4fa8c55c883b33bbfd7288b83e9acdb526" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="brookinga" cloneof="brooking"> + <description>Trevor Brooking's World Cup Glory (alt)</description> + <year>1990</year> + <publisher>Challenge</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="trevor brooking's world cup glory (1990)(challenge).dsk" size="194816" crc="d0aefb7f" sha1="c73e42dd17e06b581711b1b870a6e953e2c05ce2" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="trigger"> + <description>Trigger</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="217344"> + <rom name="trigger (1989)(opera soft)(es).dsk" size="217344" crc="8940aa50" sha1="77ee6b6045a32e8ca0b42561e30c40fa9607318b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="triggergs" cloneof="trigger"> + <description>Trigger (Gun Stick)</description> + <year>1989</year> + <publisher>Opera Soft</publisher> + <info name="usage" value="Requires Gun Stick lightgun"/> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="trigger (1989)(opera soft)(es)[gunstick].dsk" size="214784" crc="f628b19b" sha1="fa93a4b8b4e92063165e4f4823272898d4225836" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="trivialp"> + <description>Trivial Pursuit - A New Beginning</description> + <year>1988</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="trivial pursuit - a new beginning (1988)(domark)(side a).dsk" size="194816" crc="60b7be4a" sha1="097c69e7f820508770ab5a85ae3d270ee478a51e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="trivial pursuit - a new beginning (1988)(domark)(side b).dsk" size="194816" crc="3d052505" sha1="b4edfe5dde39a4d759f2961d26a208f443c69e43" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="troublew"> + <description>Trouble with Trolls</description> + <year>1996</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="trouble with trolls (1996)(zenobi).dsk" size="194816" crc="b4b266d8" sha1="457b199bd8d62a11813e985caad268a4adbcf259" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="tuareg"> + <description>Tuareg</description> + <year>1988</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="112128"> + <rom name="tuareg (1988)(topo soft)(es).dsk" size="112128" crc="cd014088" sha1="297497602a178235fd89240dfaaab433b3de0fde" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turbogir"> + <description>Turbo Girl</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="58880"> + <rom name="turbo girl (1988)(dinamic)(es).dsk" size="58880" crc="4fc6bb30" sha1="b98e25c0a5a75828bf930324dbe008a73a9e0ac9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turboout"> + <description>Turbo Out Run</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="255232"> + <rom name="turbo out run (1989)(u.s. gold)(side a).dsk" size="255232" crc="2d08c5e8" sha1="b0e41605685c2369b4928ad110e3d7901dcc694c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="256256"> + <rom name="turbo out run (1989)(u.s. gold)(side b).dsk" size="256256" crc="6cf33b9f" sha1="46ef8778a9902349e51b6b154166164598663c63" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turbooutsp" cloneof="turboout"> + <description>Turbo Out Run (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="255232"> + <rom name="turbo out run (1990)(erbe)(es)(en)(side a).dsk" size="255232" crc="47a254d0" sha1="4444838b316d90cb3710a5700767f8865346ebf8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="256256"> + <rom name="turbo out run (1990)(erbe)(es)(en)(side b).dsk" size="256256" crc="da1780bf" sha1="de01ad584cf0ac548dd95a52d7f494be35c08594" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turboska"> + <description>Turbo Skate Fighter (tape master disk)</description> + <year>1989</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="turbo skate fighter (1989)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="8eb4cbbd" sha1="b9916d55091d468765fdc7afebf6928d64ee651d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="turbo skate fighter (1989)(zeppelin games)(side b)[tape master disk].dsk" size="194816" crc="5307f975" sha1="c49886b9808292c6ad6aff9cfba7f68d85542444" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turrican"> + <description>Turrican</description> + <year>1990</year> + <publisher>Rainbow Arts</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="224512"> + <rom name="turrican (1990)(rainbow arts)(side a).dsk" size="224512" crc="e3445b47" sha1="624fa5b7e7e9f3c8af65fbcc20883ef2de69f822" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="215296"> + <rom name="turrican (1990)(rainbow arts)(side b).dsk" size="215296" crc="847ee5ee" sha1="cc8ebfc85c287cdeae6aca540dc44c434aa47add" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turricansp" cloneof="turrican"> + <description>Turrican (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="turrican (1990)(erbe)(es)(en)(side a)[re-release].dsk" size="194816" crc="3b661054" sha1="3e5db821ce825bec75c53394e29d4aaceb300a40" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="turrican (1990)(erbe)(es)(en)(side b)[re-release].dsk" size="194816" crc="602069ea" sha1="ef791c7497f9622942913a8526b6db18acfa83b1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turrica2"> + <description>Turrican II - The Final Fight</description> + <year>1991</year> + <publisher>Rainbow Arts</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="227072"> + <rom name="turrican ii - the final fight (1991)(rainbow arts)(side a).dsk" size="227072" crc="117fbcc7" sha1="bd1c00a297f6594e950db359a823bdf60b662f5a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="231424"> + <rom name="turrican ii - the final fight (1991)(rainbow arts)(side b).dsk" size="231424" crc="3731bfbc" sha1="c274000b93dd8d6620b2d4e85ab542b1fd0061ba" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="turrica2a" cloneof="turrica2"> + <description>Turrican II - The Final Fight (alt)</description> + <year>1991</year> + <publisher>Rainbow Arts</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="227072"> + <rom name="turrican ii - the final fight (1991)(rainbow arts)(side a)[a].dsk" size="227072" crc="e733816f" sha1="e95ec76f20b21cba90978296c2dfdc7f2b550a8d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="227072"> + <rom name="turrican ii - the final fight (1991)(rainbow arts)(side b)[a].dsk" size="227072" crc="554124c8" sha1="64d396bbcc59a2fd9efdf066725e37f4548d9358" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="twdaysch"> + <description>The Twelve Days of Christmas</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="twelve days of christmas, the (1994)(zenobi).dsk" size="194816" crc="954564f0" sha1="f24abcc5bda989a189f6d817332db7becb865e01" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="twiligkr"> + <description>Twilight: Krajina Tienov</description> + <year>1996</year> + <publisher>Dmytro Gryshcenko</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="389376"> + <rom name="twilight - krajina tienov (1996)(gryshcenko, dmytro)(ua)(en)[re-release].dsk" size="389376" crc="95c3c411" sha1="92318c23b9442754c6948c52af5dfde3529e511e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="twinworl"> + <description>Twin World</description> + <year>1990</year> + <publisher>Ubi Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="215296"> + <rom name="twin world (1990)(ubi soft)(fr)(en)(side a).dsk" size="215296" crc="2f5ae73e" sha1="ab4c3231626550ef3dca2500169bb8029af1fe76" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="215296"> + <rom name="twin world (1990)(ubi soft)(fr)(en)(side b).dsk" size="215296" crc="afc6c6dc" sha1="182da821939b391f6b6b7da1cbb6ebc72332cc35" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="typhoon"> + <description>Typhoon</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="156672"> + <rom name="typhoon (1988)(imagine).dsk" size="156672" crc="71be4480" sha1="8475b7e1957fccad01db0ad92f2a741be11f62c8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="typhoonb" cloneof="typhoon"> + <description>Typhoon (alt)</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="typhoon (1988)(imagine)[a].dsk" size="194816" crc="a3d5abe7" sha1="8e106d7fc0f2048712f5179e9b57f8d5ad93eb41" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="typhoonc" cloneof="typhoon"> + <description>Typhoon (alt 2)</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="155648"> + <rom name="typhoon (1988)(imagine)[a2].dsk" size="155648" crc="192f7e58" sha1="f9285638c65e08bed3a11e0ae44293743b4fb917" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="unbornon"> + <description>The Unborn One</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="unborn one, the (1991)(zenobi).dsk" size="194816" crc="70778ba8" sha1="05a8f137a7fba635a1a57226e6873ca081644b12" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- This is the dump in World of Spectrum --> + <software name="untoucha"> + <description>The Untouchables</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="128256"> + <rom name="untouchables, the (1989)(ocean)(side a)[a].dsk" size="128256" crc="a87d3156" sha1="beab754fb66cee2ff5a398bbb601c9b745cd15ca" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="untouchables, the (1989)(ocean)(side b)[a].dsk" size="194816" crc="ecdea7cd" sha1="13ae5b6aa2ac616ee1d678875d4190dbc10e4f46" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="untouchaa" cloneof="untoucha"> + <description>The Untouchables (alt)</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="128256"> + <rom name="untouchables, the (1989)(ocean)(side a).dsk" size="128256" crc="6cbd1492" sha1="7ca0908dc9ae4102a020f2cadc589efe19ac56b5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194304"> + <rom name="untouchables, the (1989)(ocean)(side b).dsk" size="194304" crc="58c33b4d" sha1="5a911a5743d39b1baba94838dc40510be67326c4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="untouchab" cloneof="untoucha"> + <description>The Untouchables (alt 2)</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="untouchables, the (1989)(ocean).dsk" size="194816" crc="bcafafe3" sha1="f219d9eac35b054f49f2be5dbfc7c4940bb66415" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="untouchac" cloneof="untoucha"> + <description>The Untouchables (alt 3)</description> + <year>1989</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="389376"> + <rom name="untouchables, the (1989)(ocean)[a].dsk" size="389376" crc="6d4df741" sha1="a1f9b963c7181d062a45434f88a977a7314c5580" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="urban"> + <description>Urban</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="urban (1991)(zenobi).dsk" size="194816" crc="d2c13bb6" sha1="961b3b7c51943998326074b9db3c9a12899d92ae" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="venom"> + <description>Venom</description> + <year>1988</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="venom (1988)(zenobi)[re-release].dsk" size="194816" crc="4ef0d1ee" sha1="6623a8b2d8934afc6a1197594a97ae8330164ced" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="verybigc"> + <description>The Very Big Cave Adventure</description> + <year>1986</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="very big cave adventure, the (1986)(zenobi)[re-release].dsk" size="194816" crc="57d0ccbb" sha1="5d35574bc5d8ccf621aa3b24691e739615840c6a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="viajealc"> + <description>Viaje al Centro de la Tierra</description> + <year>1989</year> + <publisher>Topo Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="136448"> + <rom name="viaje al centro de la tierra (1989)(topo soft)(es).dsk" size="136448" crc="1654175f" sha1="a341c6182ac225fb471cfcec62f1a67e04ae7211" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="vigilantsp" cloneof="vigilant"> + <description>Vigilante (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="127744"> + <rom name="vigilante (1989)(erbe)(es)(en)[re-release].dsk" size="127744" crc="688b068b" sha1="e29674d3d8b797022334543bb9e48ce687a2738b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="vigilanta" cloneof="vigilant"> + <description>Vigilante (alt)</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="39411"> + <rom name="vigilante (1989)(u.s. gold).dsk" size="39411" crc="b7e1877a" sha1="6bc3c346155c7a26da005f71d04e0ac0c4c38688" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="vigilantb" cloneof="vigilant"> + <description>Vigilante (alt 2)</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="203520"> + <rom name="vigilante (1989)(u.s. gold)[a].dsk" size="203520" crc="bf35d60a" sha1="dcd5b864eb359cd702fc30ee6f4c11aa4f401be0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="vigilantc" cloneof="vigilant"> + <description>Vigilante (alt 3)</description> + <year>1989</year> + <publisher>U.S. Gold</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="219136"> + <rom name="vigilante (1989)(u.s. gold)[a2].dsk" size="219136" crc="90710ee7" sha1="ada31397d1f6dfb807857cf867fb44c19cec8c28" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="vindicat"> + <description>The Vindicator</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="221184"> + <rom name="vindicator, the (1988)(imagine).dsk" size="221184" crc="c63202dc" sha1="b0bcc18baf2134ebbde4b1ac1c231ebaf8d5084b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="vindicata" cloneof="vindicat"> + <description>The Vindicator (alt)</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="vindicator, the (1988)(imagine)[a].dsk" size="194816" crc="7cddd8a0" sha1="194b8cf0dcca32553e3a880e20fea4d37454ef2e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="vindicatb" cloneof="vindicat"> + <description>The Vindicator (alt 2)</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="vindicator, the (1988)(imagine)[a2].dsk" size="194816" crc="f7318fed" sha1="b287dfd9651095aa4d7e93ce03061ea0fae80499" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="violvood"> + <description>The Violator of Voodoo</description> + <year>1991</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="violator of voodoo, the (1991)(zenobi).dsk" size="194816" crc="1360096e" sha1="7d3d1d1b7e79a9b4f3fd3f8ec418303828283295" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="virus"> + <description>Virus</description> + <year>1988</year> + <publisher>Firebird Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="73216"> + <rom name="virus (1988)(firebird).dsk" size="73216" crc="7fb23c60" sha1="5b8ffbd10aab44a224064f794432c229846ab627" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="vixena" cloneof="vixen"> + <!-- May be the same edition as the IPF --> + <description>Vixen (alt)</description> + <year>1988</year> + <publisher>Martech Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194560"> + <rom name="vixen (1988)(martech games).dsk" size="194560" crc="6f95265a" sha1="977c0e438119eb0bac2c23b78296ad21c1344e52" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wecleman"> + <description>WEC Le Mans</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="wec le mans (1988)(imagine).dsk" size="194816" crc="7e865452" sha1="d6e41f7a5c257858922b8b9d26131be93abb344d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="weclemana" cloneof="wecleman"> + <description>WEC Le Mans (alt)</description> + <year>1988</year> + <publisher>Imagine Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="112640"> + <rom name="wec le mans (1988)(imagine)[a].dsk" size="112640" crc="ee4cc288" sha1="2aaf533389d90dc4377396386c4abb6e07d4c7aa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="weclemansp" cloneof="wecleman"> + <description>WEC Le Mans (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="70400"> + <rom name="wec le mans (1989)(erbe)(es)(en).dsk" size="70400" crc="51cff9a9" sha1="6c83a3f0d1865094925d932f907001f96cca6002" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wwfwrest"> + <description>WWF WrestleMania</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="187904"> + <rom name="wwf wrestlemania (1991)(erbe)(es)(en)(side a)[re-release].dsk" size="187904" crc="f36dd6e4" sha1="a18d7e2ca11bd9d1e7347097fd48fec3d0cf192e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="217088"> + <rom name="wwf wrestlemania (1991)(erbe)(es)(en)(side b)[re-release].dsk" size="217088" crc="c114cf9c" sha1="bac503cbf750029b14de04aff5af8699367b596b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wanderer"> + <description>Wanderer</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="85760"> + <rom name="wanderer (1989)(mcm)(es)(en)[re-release].dsk" size="85760" crc="79b50978" sha1="3d3101f5d9ea075b837fe68caff99eb0947c811a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wander3d"> + <description>Wanderer 3D</description> + <year>1989</year> + <publisher>Elite Systems</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="214784"> + <rom name="wanderer 3d (1989)(elite systems).dsk" size="214784" crc="4c413eed" sha1="0b9044bc343f198521e09ec8b09c95799d4f9209" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="warmidlesp" cloneof="warmidle"> + <description>War in Middle Earth (Spa)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="war in middle earth (1989)(dro soft)(es)[re-release].dsk" size="194816" crc="c79caf16" sha1="11fd036f842417aeb5f4c90fd335f46151a9bee4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="warmidlea" cloneof="warmidle"> + <description>War in Middle Earth (alt)</description> + <year>1989</year> + <publisher>Melbourne House</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="175872"> + <rom name="war in middle earth (1989)(melbourne house)(side a).dsk" size="175872" crc="68822747" sha1="1e9af74431f6237596738f9a3bc52e58db122984" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="war in middle earth (1989)(melbourne house)(side b).dsk" size="194816" crc="c369b306" sha1="f4b3d2238729333dde5e0e0c903e7cb4d2c3d351" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wellofzo"> + <description>The Well of Zol</description> + <year>1994</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="well of zol, the (1994)(zenobi).dsk" size="194816" crc="53239936" sha1="a7dd128057ee8dfba7718e7c691413dcc0f7fb3d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="welltrissp"> + <description>Welltris (Spa)</description> + <year>1991</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="78080"> + <rom name="welltris (1991)(erbe)(es)(en)[re-release].dsk" size="78080" crc="e2c07cf0" sha1="fb270ca2c53498bd04d5e4ddc8a806c51f887318" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="welltrisa" cloneof="welltris"> + <description>Welltris (alt)</description> + <year>1991</year> + <publisher>Infogrames</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="welltris (1991)(infogrames)(fr)(en).dsk" size="194816" crc="88c856c0" sha1="5d721ce272977bfe713b6f046f3bab49dd24e9a9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wtss"> + <description>Where Time Stood Still</description> + <year>1988</year> + <publisher>Ocean Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="155648"> + <rom name="where time stood still (1988)(ocean)[aka land that time forgot, the][aka tibet].dsk" size="155648" crc="b14f1c51" sha1="6bd26b6364493679e8c956cef34ebcdc6db13894" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="whitefea"> + <description>The White Feather Cloak</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="white feather cloak, the (1992)(zenobi)[re-release].dsk" size="194816" crc="b9cba097" sha1="24a74a05414d5565d3ecdae3badb8d31fd980696" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wintol88"> + <description>Winter Olympiad '88</description> + <year>1988</year> + <publisher>Tynesoft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="winter olympiad '88 (1988)(tynesoft)(side a).dsk" size="194816" crc="502652dc" sha1="8afe3a599d1b877cd2a6bfed1adfc7aaa3c69a76" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="winter olympiad '88 (1988)(tynesoft)(side b).dsk" size="194816" crc="0b1cff37" sha1="a33690ad993c8fad983c49d866b2b3529f85582b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wizardqu"> + <description>Wizard Quest</description> + <year>1992</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="wizard quest (1992)(zenobi).dsk" size="194816" crc="68a39e6b" sha1="dfbd2ff0cad92e093535cb2bf7698e14fbc46803" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wizardoz"> + <description>The Wizard of Oz</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="wizard of oz, the (1995)(zenobi).dsk" size="194816" crc="49211c28" sha1="5e910a68ca1f4e36e75a2cb598f1ff37037a01e3" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="wcboxmana" cloneof="wcboxman"> + <description>World Championship Boxing Manager (alt)</description> + <year>1990</year> + <publisher>Goliath Games</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="world championship boxing manager (1990)(goliath games).dsk" size="194816" crc="d2a8e969" sha1="5f7446c07e17c9110a59ab65a45f3723311b3fb7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wrldclru"> + <description>World Class Rugby</description> + <year>1991</year> + <publisher>Audiogenic Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="world class rugby (1991)(audiogenic)[aka sports action rugby].dsk" size="194816" crc="b872dd44" sha1="2955b8cc19dc423caa56c52f1d87201379bff23e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="worldcri"> + <description>World Cricket (tape master disk)</description> + <year>1991</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="world cricket (1991)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="9eeb2c31" sha1="7ab98010ac3374019abfd67ab6e21f46045e25e1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side B image shared with other master disks from Zeppelin Games. Verified at World of Spectrum. --> + <dataarea name="flop" size="256"> + <rom name="zeppelin games master disk side b.dsk" size="256" crc="56947af2" sha1="40428c770d847a0fd1fd005b6cf1d03a34672d98" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="worldrug"> + <description>World Rugby (tape master disk)</description> + <year>1993</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="world rugby (1993)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="02431985" sha1="c8dc139cf45decf7a562a4ded04e50c32601c3ec" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="world rugby (1993)(zeppelin games)(side b)[tape master disk].dsk" size="194816" crc="700985aa" sha1="05a3d5d98a06eb0c5f7f7b7208c6ac0a670f777f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="worldsoc"> + <description>World Soccer (tape master disk)</description> + <year>1990</year> + <publisher>Zeppelin Games</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="world soccer (1990)(zeppelin games)(side a)[tape master disk].dsk" size="194816" crc="acf9aa7e" sha1="2efff08d88d301db7b0b531124a7ce50095f3773" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="world soccer (1990)(zeppelin games)(side b)[tape master disk].dsk" size="194816" crc="aea985b6" sha1="3a91c13b3b7885be96413dc42821eab8044bff8d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wresupst"> + <description>Wrestling Superstars</description> + <year>1993</year> + <publisher>Code Masters</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="wrestling superstars (1993)(code masters).dsk" size="194816" crc="208f3bae" sha1="ebc7184c17bb78ec56f9abc0103e88cd83c4a536" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wresupsta" cloneof="wresupst"> + <description>Wrestling Superstars (alt)</description> + <year>1993</year> + <publisher>Code Masters</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="wrestling superstars (1993)(code masters)[a].dsk" size="194816" crc="2905ac90" sha1="1e52b85bff098c25284e1c4ea5c78ed3f8118c46" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="wresupstb" cloneof="wresupst"> + <description>Wrestling Superstars (alt 2)</description> + <year>1993</year> + <publisher>Code Masters</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="wrestling superstars (1993)(code masters)[a2].dsk" size="194816" crc="a1a893b7" sha1="b804d2542edf2b10792fb7f4d42c69f02291a442" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="xouta" cloneof="xout"> + <description>X-Out (alt)</description> + <year>1990</year> + <publisher>Rainbow Arts</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="255232"> + <rom name="x-out (1990)(rainbow arts).dsk" size="255232" crc="41e419a2" sha1="61d73d0116e33fcad00fe44548a3af79892602ad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="xoutsp" cloneof="xout"> + <description>X-Out (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="53760"> + <rom name="x-out (1990)(erbe)(es)(en)(side a)[re-release].dsk" size="53760" crc="0c5f3eb3" sha1="de382a5a0d2615e01d2736bddaa7c162fed1d6fb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Game data --> + <dataarea name="flop" size="194816"> + <rom name="x-out (1990)(erbe)(es)(en)(side b)[re-release].dsk" size="194816" crc="37450ff0" sha1="1fe41fc4ce85f112c7820e2aa8ae19ea14af2f87" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="xenona" cloneof="xenon"> + <description>Xenon (alt)</description> + <year>1988</year> + <publisher>Melbourne House</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="xenon (1988)(melbourne house).dsk" size="194816" crc="3c91a046" sha1="d01bd31987d66a6886163a7e9caa4f2c9fd2e083" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="xenophob"> + <description>Xenophobe</description> + <year>1989</year> + <publisher>Micro Style</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="181248"> + <rom name="xenophobe (1989)(micro style)(side a).dsk" size="181248" crc="cab64cfd" sha1="2a7c42e5f7d57eb98fc8a2c988a43637dc3f9c30" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <!-- Side seems to be empty but it's a good dump of it. --> + <dataarea name="flop" size="194816"> + <rom name="xenophobe (1989)(micro style)(side b).dsk" size="194816" crc="15368607" sha1="6c61f0dbab63b59f5328a010f10681a081fe660d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- This is the dump at World of Spectrum --> + <software name="xenophoba" cloneof="xenophob"> + <description>Xenophobe (alt)</description> + <year>1989</year> + <publisher>Micro Style</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="181248"> + <rom name="xenophobe (1989)(micro style).dsk" size="181248" crc="4f34e9f2" sha1="4fb73fb61a62b8a82c32c6807ef716c6c6ae1f54" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <!-- May be the same edition as the IPF --> + <software name="xybotsa" cloneof="xybots"> + <description>Xybots (alt)</description> + <year>1989</year> + <publisher>Domark</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="174848"> + <rom name="xybots (1989)(domark).dsk" size="174848" crc="a1f722cc" sha1="8ecd129b8ef8cc53f3ee20753f6471c6a29a19d9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="xybotssp" cloneof="xybots"> + <description>Xybots (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="131328"> + <rom name="xybots (1989)(erbe)(es)(en)[re-release].dsk" size="131328" crc="f06c87e4" sha1="7ee414b540d5cce2e13f90e1d5aa4c860ff5162e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="zenquest"> + <description>Zen Quest</description> + <year>1995</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="zen quest (1995)(zenobi).dsk" size="194816" crc="eafce910" sha1="cc5adca5233706f5480fe1bfc10f12cacd910a10" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Unclear why TOSEC labels Side B as "(master disk)", it's the regular dump available at World of Spectrum. --> + <software name="zipizape"> + <description>Zipi y Zape</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="194816"> + <rom name="zipi y zape (1989)(dro soft)(es)(side a).dsk" size="194816" crc="c5de7d52" sha1="462c9dc62a14882c8d1e43c49c09d6aff55eaa25" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="194816"> + <rom name="zipi y zape (1989)(dro soft)(es)(side b)[master disk].dsk" size="194816" crc="6a86c00e" sha1="0e19d7c080c4579b387eae7e279f1a82bd286bb8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="zipizapea" cloneof="zipizape"> + <description>Zipi y Zape (alt)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="zipi y zape (1989)(dro soft)(es).dsk" size="194816" crc="b962d47d" sha1="1bf0c1c4a705be0c7fbd4027718eca7e11d1a3ff" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="zzzz"> + <description>Zzzz</description> + <year>1986</year> + <publisher>Zenobi Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="zzzz (1986)(zenobi)[re-release].dsk" size="194816" crc="87122e5a" sha1="455c344a7b0ffce91dbf18c33d0e696fd569c7c1" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Compilations - Games - [DSK] (TOSEC-v2018-03-24_CM).dat" --> +<!-- Erroneously identified as a compilation in TOSEC --> + <software name="emilbut2"> + <description>Emilio Butragueno 2</description> + <year>1989</year> + <publisher>Erbe Software - Ocean</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="emilio butragueno 2 (1989)(erbe software - ocean)(es)[aka emilio butragueno futbol 2].dsk" size="194816" crc="0ac224b8" sha1="7d3df2ca6721a3d5bd225ae64c66faf6da709bb0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle023"> + <description>Outlet issue 023</description> + <year>1989</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="216195"> + <rom name="outlet issue 023 (1989)(outlet).dsk" size="216195" crc="8f4208a4" sha1="f54637374a61ff327f3d2b4df0c5f45da125081b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle024"> + <description>Outlet issue 024</description> + <year>1989</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 024 (1989)(outlet).dsk" size="215296" crc="ac70f43f" sha1="b0a57deb37ae0d38c49da016d47380e0df2d93c9" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle025"> + <description>Outlet issue 025</description> + <year>1989</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 025 (1989)(outlet).dsk" size="215296" crc="759d28cd" sha1="9b3490cab42971ec88e4cbcea5a79806c830f998" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle026"> + <description>Outlet issue 026</description> + <year>1989</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 026 (1989)(outlet).dsk" size="215296" crc="4ea1efac" sha1="53d7402fa8c6fc52a5d615aa438658f6cf5d4826" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle027"> + <description>Outlet issue 027</description> + <year>1989</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 027 (1989)(outlet).dsk" size="215296" crc="1a59232f" sha1="565f0bc985f3c2fda6f05a5b3011e1925b2f11df" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle028"> + <description>Outlet issue 028</description> + <year>1989</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 028 (1989)(outlet).dsk" size="215296" crc="2be73d7b" sha1="499cc8bef5494ebf7afac9d1dfde37e49209bd84" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle029"> + <description>Outlet issue 029</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 029 (1990)(outlet).dsk" size="226048" crc="96509834" sha1="53e5aaebd4299f1b54290f6c1367a8105a6db85e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle030"> + <description>Outlet issue 030</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226987"> + <rom name="outlet issue 030 (1990)(outlet).dsk" size="226987" crc="78ac2b53" sha1="65b1e939f71af926528483ce1e961aa7e4a312cf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle031"> + <description>Outlet issue 031</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 031 (1990)(outlet).dsk" size="215296" crc="c8617655" sha1="9b33fa287b0ef19c0b93e34c89eaa46757a79510" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle032"> + <description>Outlet issue 032</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 032 (1990)(outlet).dsk" size="215296" crc="73d6b349" sha1="a968e70e0f01f91293f28bfa5153c48b1f807ba8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle033"> + <description>Outlet issue 033</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 033 (1990)(outlet).dsk" size="226048" crc="d581a48c" sha1="146f34bb6ef486ef78fe0fa3d45fdba12b77b2de" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle034"> + <description>Outlet issue 034</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 034 (1990)(outlet)(side a).dsk" size="215296" crc="7478a2ec" sha1="936bf5ffa16d6a5f1e725e84e7befe43c04bdc44" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="215296"> + <rom name="outlet issue 034 (1990)(outlet)(side b).dsk" size="215296" crc="23b2d907" sha1="91113badec95b211eabd5373ae8480e6bb679875" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle035"> + <description>Outlet issue 035</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 035 (1990)(outlet)(side a).dsk" size="226048" crc="d2773333" sha1="2c4afe1b5ca2b8a447ef6a36852766abe37fa9b8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 035 (1990)(outlet)(side b).dsk" size="226048" crc="cca00458" sha1="64274c235096f06f7892c5e00d92dd9a77f17298" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle036"> + <description>Outlet issue 036</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 036 (1990)(outlet)(side a).dsk" size="226048" crc="2beb6f89" sha1="5ef8acdf3f5a1c7d407ec4e1786eef3b611586be" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 036 (1990)(outlet)(side b).dsk" size="226048" crc="8d09857b" sha1="5b938838fc37ac6e9f39906f240d990795613b3b" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle037"> + <description>Outlet issue 037</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 037 (1990)(outlet)(side a).dsk" size="226048" crc="a611d7f0" sha1="13c5f63ff5cd2aff096b8544668a2139b3cb9db3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 037 (1990)(outlet)(side b).dsk" size="226048" crc="b689fdd9" sha1="b0d60d4045e7ec950453d588b3098e843588721e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle038"> + <description>Outlet issue 038</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 038 (1990)(outlet)(side a).dsk" size="226048" crc="33ac27ee" sha1="ca4817821c0e988aefb347f559d0c15a55bbeecc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 038 (1990)(outlet)(side b).dsk" size="226048" crc="86ab9fa0" sha1="466228c2c0558b5c730bc2f1256344c92c486064" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle039"> + <description>Outlet issue 039</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 039 (1990)(outlet)(side a).dsk" size="226048" crc="b33cfc27" sha1="3f70b89c4eeff58d020bc1543545d491d03f2faf" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 039 (1990)(outlet)(side b).dsk" size="226048" crc="ac4a55bf" sha1="de66fdf471bf6b7a6db9ac5a45034bd609e5d4b4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle040"> + <description>Outlet issue 040</description> + <year>1990</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 040 (1990)(outlet)(side a).dsk" size="226048" crc="064caff0" sha1="5e5a91ec40b62a1efdb09ea5b13a9eedea3c0e3a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 040 (1990)(outlet)(side b).dsk" size="226048" crc="70ad9d52" sha1="55ebd26a35257456ab2bc1060085219f19f3cd24" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle041"> + <description>Outlet issue 041</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 041 (1991)(outlet)(side a).dsk" size="226048" crc="2f29d082" sha1="7af01f71d39be3d5d5d4218f341f45fffb8785b0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 041 (1991)(outlet)(side b).dsk" size="226048" crc="557aa714" sha1="130b1e56ab6514f2510438409589452789d1a388" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle042"> + <description>Outlet issue 042</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 042 (1991)(outlet)(side a).dsk" size="226048" crc="9960321e" sha1="c7762c92f3e42e610184eddbbb38f0546dc14a79" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 042 (1991)(outlet)(side b).dsk" size="226048" crc="348484ba" sha1="2fec990437274d452926b8a8f1225beccd572f9c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle043"> + <description>Outlet issue 043</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 043 (1991)(outlet)(side a).dsk" size="226048" crc="39a79367" sha1="41fa0297c379f4dd33fcfab5418dcd1aab995058" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 043 (1991)(outlet)(side b).dsk" size="226048" crc="ad442f10" sha1="9cd6fd6ae5b2c490b3a7801ec2a889397f896ccc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle044"> + <description>Outlet issue 044</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 044 (1991)(outlet)(side a).dsk" size="226048" crc="47eb9929" sha1="fcd9f604ec274905a81a1258e58c32bb088566f3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 044 (1991)(outlet)(side b).dsk" size="226048" crc="bbedeac6" sha1="0b6c76ad7d5c833c9c9b7a769d55978111bf1063" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle045"> + <description>Outlet issue 045</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 045 (1991)(outlet)(side a).dsk" size="226048" crc="389979ae" sha1="aacbff56da6ea5e9d85e453e03d43ac469eec03a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 045 (1991)(outlet)(side b).dsk" size="226048" crc="ef99b650" sha1="4ef0ee1d56d48ec72e8f2d8075a452aabb689cf5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle046"> + <description>Outlet issue 046</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 046 (1991)(outlet)(side a).dsk" size="226048" crc="2afb91ef" sha1="39b029151e7dbef71413c9fe058fb133f4ac90a1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 046 (1991)(outlet)(side b).dsk" size="226048" crc="f6eec609" sha1="2d7f2a7cd6ae374bfaf31ffa28b87220e607d07e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle047"> + <description>Outlet issue 047</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 047 (1991)(outlet)(side a).dsk" size="226048" crc="63efa2fc" sha1="3c506a9713e3e631e3fc823e02552e2bf53254bb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 047 (1991)(outlet)(side b).dsk" size="226048" crc="bd48c4f2" sha1="3f67f96f92d69c10ac360c45dcfbeb512e578cfb" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle048"> + <description>Outlet issue 048</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 048 (1991)(outlet)(side a).dsk" size="226048" crc="8f316696" sha1="fd1342dc497c2c7ae23b59ad92cbdc21150d1721" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 048 (1991)(outlet)(side b).dsk" size="226048" crc="cda45114" sha1="79e7e3aa3dfecfd1e37332d492257c185a50c36a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle049"> + <description>Outlet issue 049</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 049 (1991)(outlet)(side a).dsk" size="226048" crc="8114e28f" sha1="12ce75a67ee9ff9e1ef26a31456c09a6467ec527" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 049 (1991)(outlet)(side b).dsk" size="226048" crc="da2e4308" sha1="32c1e1cf048d24ad0ce22a598f93a9031fd221fd" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle050"> + <description>Outlet issue 050</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 050 (1991)(outlet)(side a).dsk" size="226048" crc="7e587a46" sha1="8baab165d2044d301a7d0a1336ff2e32e6d6b940" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 050 (1991)(outlet)(side b).dsk" size="226048" crc="05f01d3f" sha1="27b6f933a723e41d785dc08c92d7152c2e70cb5e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle051"> + <description>Outlet issue 051</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 051 (1991)(outlet)(side a).dsk" size="226048" crc="8b60a5cb" sha1="4b0199da41b79c5829800a4a0cd66f3cdd898bec" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 051 (1991)(outlet)(side b).dsk" size="226048" crc="2a06937e" sha1="7ef139e94b9d1bf5ada3f7ee87ca9950423bb947" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle052"> + <description>Outlet issue 052</description> + <year>1991</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 052 (1991)(outlet)(side a).dsk" size="226048" crc="3267f917" sha1="1773e81bec3178ceb9e22eb4894c5787d170fae2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 052 (1991)(outlet)(side b).dsk" size="226048" crc="e21c8753" sha1="e29a9c4616da0e1f857143ba16c587eaa6cc6565" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle053"> + <description>Outlet issue 053</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 053 (1992)(outlet)(side a).dsk" size="226048" crc="c7764a94" sha1="5c60ff9b0dbf060b2ab2fa663783760d46ddaf50" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 053 (1992)(outlet)(side b).dsk" size="226048" crc="ef4fb121" sha1="bf668422a05c255ae5ebb56f59f85907c9de3639" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle054"> + <description>Outlet issue 054</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 054 (1992)(outlet)(side a).dsk" size="226048" crc="0c090ec6" sha1="77fb3ef8b6659c98484a83d62020c1557087f697" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 054 (1992)(outlet)(side b).dsk" size="226048" crc="eb1f1a71" sha1="ab65f251a750ed3fc434b758025c06eba22c5573" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle055"> + <description>Outlet issue 055</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 055 (1992)(outlet)(side a).dsk" size="226048" crc="2475c9f3" sha1="021adc780ec1a211f01b234fac82febf54ac9075" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 055 (1992)(outlet)(side b).dsk" size="226048" crc="d1f64117" sha1="1e7265765d6ae4c237d05fc08aff7f96a8da4990" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle056"> + <description>Outlet issue 056</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 056 (1992)(outlet)(side a).dsk" size="226048" crc="9ca279e4" sha1="0d981a2cc0a6232c89c7817928c02a7b8bbde2ed" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 056 (1992)(outlet)(side b).dsk" size="226048" crc="f84a4413" sha1="da3823af23c7defb8267dc655c55ca80061fbe6d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle057"> + <description>Outlet issue 057</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 057 (1992)(outlet)(side a).dsk" size="226048" crc="59380255" sha1="5d75e99f253b768a08d6dcc637e372158fceacc4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 057 (1992)(outlet)(side b).dsk" size="226048" crc="d5774496" sha1="42da487dbeeffd8ac86dd037f34014c11cc316ce" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle059"> + <description>Outlet issue 059</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 059 (1992)(outlet)(side a).dsk" size="226048" crc="b82451b3" sha1="1169d5a1d594725bc90fe0a95757306087150704" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 059 (1992)(outlet)(side b).dsk" size="226048" crc="16547a16" sha1="1a37cca8cafc48e4d9e056b322ae005c61a926e7" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle060"> + <description>Outlet issue 060</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 060 (1992)(outlet)(side a).dsk" size="226048" crc="cfdfd178" sha1="37f7dd1b98d3f3d0c6d594437237069d09564776" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 060 (1992)(outlet)(side b).dsk" size="226048" crc="e6c80363" sha1="450ab2039a50bbd47df39e4ee3511b46a6e321b4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle061"> + <description>Outlet issue 061</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 061 (1992)(outlet)(side a).dsk" size="226048" crc="e3c0a52a" sha1="7d70167e02deb869a44b83865465748e590edf84" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 061 (1992)(outlet)(side b).dsk" size="226048" crc="361490c4" sha1="6291164a6caaf75f2454b56a1fe507ed9613ba70" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle062"> + <description>Outlet issue 062</description> + <year>1992</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 062 (1992)(outlet)(side a).dsk" size="226048" crc="d0a860b6" sha1="3b900961607e58a02eebb229ace45b033893a422" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 062 (1992)(outlet)(side b).dsk" size="226048" crc="092808e0" sha1="8c2e71eb7dc70959b5ca391885de29041ba6d32f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle066"> + <description>Outlet issue 066</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 066 (1993)(outlet)(side a).dsk" size="226048" crc="16701775" sha1="ea7c02c3e56ac2cac3773314e827deae017fb019" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 066 (1993)(outlet)(side b).dsk" size="226048" crc="08bd360b" sha1="390f6326c9be0df92c1aeacd8dadcf7687e05d9e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle067"> + <description>Outlet issue 067</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 067 (1993)(outlet)(side a).dsk" size="226048" crc="58bd8c25" sha1="254ed6879714188c642d6c7707a45335eb375dcd" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 067 (1993)(outlet)(side b).dsk" size="226048" crc="8421d669" sha1="a188c64412e91c9a06a865a1924f543edfc2fa47" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle068"> + <description>Outlet issue 068</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 068 (1993)(outlet)(side a).dsk" size="226048" crc="99450290" sha1="541e7f2b4e646461e0ebbe76253a39e43a2eaef2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 068 (1993)(outlet)(side b).dsk" size="226048" crc="41f50495" sha1="32ab73779d2d0895c44234108dd7e73fcae34808" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle069"> + <description>Outlet issue 069</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 069 (1993)(outlet)(side a).dsk" size="226048" crc="9300d94c" sha1="0b4a2a95d513fd238b7e72519682ff4a29757cc7" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 069 (1993)(outlet)(side b).dsk" size="226048" crc="08cecce5" sha1="a3bd59f0dcd919a826b7a1e8c0e16d7ec2aa29fc" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle070"> + <description>Outlet issue 070</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 070 (1993)(outlet)(side a).dsk" size="226048" crc="43c63528" sha1="807ddeeb9cd17fb849b59d489e17c770e70576c0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 070 (1993)(outlet)(side b).dsk" size="226048" crc="758a3b19" sha1="0c6d6069518d261310e3b23771542b783f26acad" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle071"> + <description>Outlet issue 071</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 071 (1993)(outlet)(side a).dsk" size="226048" crc="71e04e05" sha1="5c2a526b9144eaaab87bc0b091b9259bbfe4b254" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 071 (1993)(outlet)(side b).dsk" size="226048" crc="5739563e" sha1="e469c9767f1fdaf7389559abee648befa87bd780" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle072"> + <description>Outlet issue 072</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 072 (1993)(outlet)(side a).dsk" size="226048" crc="96537901" sha1="306f8ef4849ad23e49676def5599351647cdd1fa" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 072 (1993)(outlet)(side b).dsk" size="226048" crc="bf1e0618" sha1="c5fa329076a41dab631d2e2f6af8abe1f321ef45" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle074"> + <description>Outlet issue 074</description> + <year>1993</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 074 (1993)(outlet)(side a).dsk" size="226048" crc="1c8b63e1" sha1="cadfb5b6d0b2297bbb7ef8c8d87b921cb478e591" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 074 (1993)(outlet)(side b).dsk" size="226048" crc="2cc94dd8" sha1="ec2fcc8ab7958f9bf0b4e877a45f610bc2796aaa" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle077"> + <description>Outlet issue 077</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 077 (1994)(outlet)(side a).dsk" size="226048" crc="70b9b111" sha1="35c3fdaa8181811673adce188e2e87a5933558f4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 077 (1994)(outlet)(side b).dsk" size="226048" crc="ad5ca0a1" sha1="1d2e8b134d993fe1f822c822c689647430670c19" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle080"> + <description>Outlet issue 080</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 080 (1994)(outlet)(side a).dsk" size="226048" crc="0ee19ca2" sha1="bf1347141360b01e1ed93c8003611323cda75503" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 080 (1994)(outlet)(side b).dsk" size="226048" crc="9af5a81a" sha1="3a66c12239a42dfed940108d4449aad6c6ef074d" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle081"> + <description>Outlet issue 081</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 081 (1994)(outlet)(side a).dsk" size="226048" crc="08360731" sha1="37c64c4a4baeb020d44ea8f54e9846107f106540" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 081 (1994)(outlet)(side b).dsk" size="226048" crc="9f92e4e2" sha1="6cfe9c6564b29d23417cb56e1b3d4d05491de4e8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle082"> + <description>Outlet issue 082</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 082 (1994)(outlet)(side a).dsk" size="226048" crc="51be8024" sha1="6cde8546beb0883c741b9190062b29e32738f690" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 082 (1994)(outlet)(side b).dsk" size="226048" crc="39786d03" sha1="a4ba3002e8c920f6f12e333cca675104ae131c06" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle083"> + <description>Outlet issue 083</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 083 (1994)(outlet)(side a).dsk" size="226048" crc="83416c11" sha1="ba6890d829e0f7b4aebefe717a1b59218ac58831" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 083 (1994)(outlet)(side b).dsk" size="226048" crc="979e150c" sha1="a82963d60e3b40b3c3270cd646772963d9a62285" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle084"> + <description>Outlet issue 084</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 084 (1994)(outlet)(side a).dsk" size="226048" crc="b0370b7a" sha1="a7652daafc722169d7c1d54ed752a229245c19fe" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 084 (1994)(outlet)(side b).dsk" size="226048" crc="4800f224" sha1="2996d027138252d5efa97e9732488bcce97e5a5c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle086"> + <description>Outlet issue 086</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 086 (1994)(outlet)(side a).dsk" size="226048" crc="9b79992e" sha1="6f7774063179b0a14f4e4e32f4d1339149f6c158" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 086 (1994)(outlet)(side b).dsk" size="226048" crc="a6771318" sha1="b05a3182dabc83914eb0eee20eca438d73ce5977" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle087"> + <description>Outlet issue 087</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 087 (1994)(outlet)(side a).dsk" size="226048" crc="735bb8ec" sha1="dace26efb5d40ceeb6208fb3cd9faedf34db8b3b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 087 (1994)(outlet)(side b).dsk" size="226048" crc="2edd1b09" sha1="534e7bca4fc6b7794f272277d6d535769437c471" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle088"> + <description>Outlet issue 088</description> + <year>1994</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 088 (1994)(outlet)(side a).dsk" size="226048" crc="411a360e" sha1="a7452f031a873dd40348af24b2cfd8d04a6c2cb5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 088 (1994)(outlet)(side b).dsk" size="226048" crc="fb4a75ca" sha1="c2179916c377384d3e6deed5ef486c1343ad4473" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle089"> + <description>Outlet issue 089</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 089 (1995)(outlet)(side a).dsk" size="226048" crc="78ee8697" sha1="b3724ad26e580450ecb549e01232b0a0607ef24a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 089 (1995)(outlet)(side b).dsk" size="226048" crc="351d0b7f" sha1="3eaf9aac6939f6ae05a1799418d2341b98ec1d0a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle090"> + <description>Outlet issue 090</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 090 (1995)(outlet)(side a).dsk" size="226048" crc="a20d3d17" sha1="e4c63aee85e411354ed6842cf29d7ef2a746eeeb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 090 (1995)(outlet)(side b).dsk" size="226048" crc="99295cd8" sha1="ae1d6e49ddf68ce27b460c5d866e43596e9db9b4" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle091"> + <description>Outlet issue 091</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 091 (1995)(outlet)(side a).dsk" size="226048" crc="641e4365" sha1="bb7e5064d02180096c0eb6615dd4ae2b370bede5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 091 (1995)(outlet)(side b).dsk" size="226048" crc="fe3b1dd5" sha1="a46f2cadb5e6627a359c9476d797be57c8e1757a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle092"> + <description>Outlet issue 092</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 092 (1995)(outlet)(side a).dsk" size="226048" crc="c8f1aa35" sha1="f3e62de14ac4039eb60d1e02b36a52e66f3e8249" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 092 (1995)(outlet)(side b).dsk" size="226048" crc="76b5a3ce" sha1="8aebe0ad435314f7c8e2bbaa76cf78cfc85bcbef" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle093"> + <description>Outlet issue 093</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 093 (1995)(outlet)(side a).dsk" size="226048" crc="6a37384a" sha1="7b82874ac10771804f2d9f8752ffbad868237c9f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 093 (1995)(outlet)(side b).dsk" size="226048" crc="b8b57c3e" sha1="d70cfae2627615f401691a8b08913e59b79a2ccf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle094"> + <description>Outlet issue 094</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 094 (1995)(outlet)(side a).dsk" size="226048" crc="0300670d" sha1="1531002883ae0709d2d9b92a045f3a0c4650d528" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 094 (1995)(outlet)(side b).dsk" size="226048" crc="21a271d0" sha1="64a1084bd7fed43d19b909186c85e84cabefc721" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle095"> + <description>Outlet issue 095</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 095 (1995)(outlet)(side a).dsk" size="226048" crc="0b94a0d9" sha1="f67d967f18608e905ec2df9b1291e9ede3b42ca6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 095 (1995)(outlet)(side b).dsk" size="226048" crc="091552d9" sha1="f6cfa8ae37ea8a1c3c7963a75cf5fa15c4d7c07e" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle096"> + <description>Outlet issue 096</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 096 (1995)(outlet)(side a).dsk" size="226048" crc="1efd43eb" sha1="49459ee92d9d69e61c1ac8cfb62b41d2989131c5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 096 (1995)(outlet)(side b).dsk" size="226048" crc="fe1953c5" sha1="2daf42b85f768cd9642672e898b6bdaaf7fd42e0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle097"> + <description>Outlet issue 097</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 097 (1995)(outlet)(side a).dsk" size="226048" crc="e2e1c840" sha1="7bdbf5ee01ab10223bc4c4f8f8b5204f0367fde3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 097 (1995)(outlet)(side b).dsk" size="226048" crc="a0633e44" sha1="57a81ac480bf1a35f14f64bd4f9111ded543d506" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle098"> + <description>Outlet issue 098</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 098 (1995)(outlet)(side a).dsk" size="226048" crc="2d36c7d1" sha1="b0f8df560f325fb3e6c8f2d3bc00f7dbd040d564" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 098 (1995)(outlet)(side b).dsk" size="226048" crc="da72da56" sha1="880ba726c46e4c4b4cfd9757b1c4fc0cd4e24727" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle099"> + <description>Outlet issue 099</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 099 (1995)(outlet)(side a).dsk" size="226048" crc="2486cb95" sha1="6a5faba62a342f7b5ab3ddf39e146fcb2b6daf8f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 099 (1995)(outlet)(side b).dsk" size="226048" crc="0571efe9" sha1="f1214c79248c9c999da9c5d5a4ebdd43e29a8ef5" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle100"> + <description>Outlet issue 100</description> + <year>1995</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 100 (1995)(outlet)(side a).dsk" size="226048" crc="92c2f2d1" sha1="a575a84d95f7db280dc9fd998c91a23db0f27267" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 100 (1995)(outlet)(side b).dsk" size="226048" crc="a8127cff" sha1="e487759b43e1b2d82a67cc0d7ccfc8ff3ea7812c" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle102"> + <description>Outlet issue 102</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 102 (1996)(outlet)(side a).dsk" size="226048" crc="1cfa72cc" sha1="085e184d9d79752bdd2298e21b6347c67fd64efa" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 102 (1996)(outlet)(side b).dsk" size="226048" crc="5fb0e6a1" sha1="2b6f82877b371c7cbcb984f411e45ca7118affe0" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle104"> + <description>Outlet issue 104</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 104 (1996)(outlet)(side a).dsk" size="226048" crc="3638c100" sha1="14e82b8fdbf15ebf6220b50ff09f7925c8000c21" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 104 (1996)(outlet)(side b).dsk" size="226048" crc="0492eeae" sha1="27271fabb5a9d299d15088680d19d48914c460fe" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle106"> + <description>Outlet issue 106</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 106 (1996)(outlet)(side a).dsk" size="226048" crc="73b6080a" sha1="d93c13cd0cda70e1b8df9b06e094e9801b1af56c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 106 (1996)(outlet)(side b).dsk" size="226048" crc="7d840a8c" sha1="757bd288deb55fc5bba8711d883c6d12fdeb8b44" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle107"> + <description>Outlet issue 107</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 107 (1996)(outlet)(side a).dsk" size="226048" crc="04e6e5bc" sha1="01ed80e78299493b3f0d3d7db3db1144fa74322b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 107 (1996)(outlet)(side b).dsk" size="226048" crc="274f7a00" sha1="352181d82bc4980c40f57661928dc849782c69bf" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle108"> + <description>Outlet issue 108</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 108 (1996)(outlet)(side a).dsk" size="226048" crc="45ff3b5a" sha1="3167e7af4738b045d7bdf508c23efda94e877ac2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 108 (1996)(outlet)(side b).dsk" size="226048" crc="cf70a1f1" sha1="618e5f1fcc3579cdaffc4dc5f916d2062f68c697" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle109"> + <description>Outlet issue 109</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 109 (1996)(outlet)(side a).dsk" size="226048" crc="aff33564" sha1="88efe6492245ecaaa490d6c1d9c474502ce8d86b" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 109 (1996)(outlet)(side b).dsk" size="226048" crc="120381b0" sha1="088f1dbefde9b01002ba09944fe10a7c6f3ebd99" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle110"> + <description>Outlet issue 110</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 110 (1996)(outlet)(side a).dsk" size="226048" crc="ecf0bf64" sha1="ee4ba7bed464dd309e94b242b76084e0c6b49929" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 110 (1996)(outlet)(side b).dsk" size="226048" crc="ad4dc57f" sha1="6b66f7126636f99a274e2ecb8e7a89261dad5200" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle111"> + <description>Outlet issue 111</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 111 (1996)(outlet)(side a).dsk" size="226048" crc="068a68ae" sha1="0419e102cc9cee67651d607a86fe36460f1183a3" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 111 (1996)(outlet)(side b).dsk" size="226048" crc="28988916" sha1="b256c843e19511122a33a160af5df559d21ae55f" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle112"> + <description>Outlet issue 112</description> + <year>1996</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 112 (1996)(outlet)(side a).dsk" size="226048" crc="b0669b73" sha1="aff6cc065f8b45fd11308c22ddcec41b359d4458" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 112 (1996)(outlet)(side b).dsk" size="226048" crc="d91a283b" sha1="e3b7314e3369fe47fbfa55c0bd7169b564882203" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle113"> + <description>Outlet issue 113</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 113 (1997)(outlet)(side a).dsk" size="226048" crc="a68f6362" sha1="b5ff3286c88224adf20dba3c191720ba172f1958" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 113 (1997)(outlet)(side b).dsk" size="226048" crc="89e5e066" sha1="a7dad0d07a29819b8a80f60e47ae6de34a71e321" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle114"> + <description>Outlet issue 114</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 114 (1997)(outlet)(side a).dsk" size="226048" crc="74345db7" sha1="c9fb8e62d585f3cb9edfa27442c9f417d80db186" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 114 (1997)(outlet)(side b).dsk" size="226048" crc="fb9f0437" sha1="c2d4e1e7a5aac196e2d9279416293c10df2aeec8" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle115"> + <description>Outlet issue 115</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 115 (1997)(outlet)(side a).dsk" size="226048" crc="9aee9e0f" sha1="be84db2b91f19229079a1560f54d92672f2b281d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 115 (1997)(outlet)(side b).dsk" size="226048" crc="726b1600" sha1="dcbc19c1867edf358d5e6608fb1e435c712c5eec" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle116"> + <description>Outlet issue 116</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 116 (1997)(outlet)(side a).dsk" size="226048" crc="614ee69d" sha1="f849eeeff8f4c18c34b2525f5d13f0f832fd8794" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 116 (1997)(outlet)(side b).dsk" size="226048" crc="ef33c336" sha1="79912ef40f92993e956064ec97f3e127008cd707" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle118"> + <description>Outlet issue 118</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 118 (1997)(outlet)(side a).dsk" size="226048" crc="4c89511a" sha1="25d1f269327ed78d3b8be0ee0190f44d796c3c36" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 118 (1997)(outlet)(side b).dsk" size="226048" crc="7fc890cf" sha1="91fa641b09e05292ea103dc00fb5883fb87cc994" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle119"> + <description>Outlet issue 119</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 119 (1997)(outlet)(side a).dsk" size="226048" crc="87767ef5" sha1="2107cc5870278efe23b602dc39e069cd138f0a8d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 119 (1997)(outlet)(side b).dsk" size="226048" crc="7587f1d3" sha1="ebad6d34c48363045858de977bd96b3536fce8ea" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle120"> + <description>Outlet issue 120</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 120 (1997)(outlet)(side a).dsk" size="226048" crc="3ff428b5" sha1="5bc0b755ccbdc8d841c4a1fa9d65aa127495153f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 120 (1997)(outlet)(side b).dsk" size="226048" crc="b8ff2c62" sha1="0a32a349648f2a47c6b8edfc70efe6892931d79a" offset="0" /> + </dataarea> + </part> + </software> + +<!-- From "Sinclair ZX Spectrum - Magazines - [DSK] (TOSEC-v2018-03-24_CM).dat" --> + <software name="outle121"> + <description>Outlet issue 121</description> + <year>1997</year> + <publisher>Outlet</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 121 (1997)(outlet)(side a).dsk" size="226048" crc="e6e29d03" sha1="b37a5e7e41fa88cfbe5fed141259dad54b821c06" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size="226048"> + <rom name="outlet issue 121 (1997)(outlet)(side b).dsk" size="226048" crc="fd653c43" sha1="f25d4b2d07339a54bd43954a0c68c2bfdc8232bd" offset="0" /> + </dataarea> + </part> + </software> + + +<!-- Below is a selection of disk images from the backlog of SPA2. --> + + <software name="2x1fhpha"> + <description>2 X 1: Phantis + Freddy Hardest</description> + <year>1987</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Freddy Hardest"/> + <dataarea name="flop" size = "109568"> + <rom name="2x1 - Freddy Hardest + Phantis - Side 1.dsk" size="109568" crc="407577a2" sha1="69a82cd67d523a5f8d970cfaa73d09c2d509c6b0" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Phantis"/> + <dataarea name="flop" size = "109568"> + <rom name="2x1 - Freddy Hardest + Phantis - Side 2.dsk" size="109568" crc="b46d7b33" sha1="7043d384ec2cef8ffca6d2af4f81cfe563d328b9" offset="0"/> + </dataarea> + </part> + </software> + + <software name="2x1huntg"> + <description>2 X 1: Hundra + Turbo Girl</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Hundra"/> + <dataarea name="flop" size = "59097"> + <rom name="2x1 - Hundra + Turbo Girl - Side 1.dsk" size="59097" crc="87cb996f" sha1="2bfd84fc1d7ffe3453f7fe7b1338567ecc653ecf" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Turbo Girl"/> + <dataarea name="flop" size = "59097"> + <rom name="2x1 - Hundra + Turbo Girl - Side 2.dsk" size="59097" crc="8a8892e4" sha1="b81a1ddaf5f47cbb0c091aac8dd69a9e651c2788" offset="0"/> + </dataarea> + </part> + </software> + + <software name="abadcrim"> + <description>La Abadia del Crimen</description> + <year>1988</year> + <publisher>Opera Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "191744"> + <rom name="Abadia del Crimen, La - Side A (Opera Soft).dsk" size="191744" crc="b39e6efb" sha1="7d84706254c7b472e9b778bf55e1894e19bbd161" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "102400"> + <rom name="Abadia del Crimen, La - Side B (Opera Soft).dsk" size="102400" crc="a73c0154" sha1="637f791ac9f1ef61d3c7afa4b4ee6ff5cfad22b7" offset="0"/> + </dataarea> + </part> + </software> + + <software name="ausgamessp"> + <description>Australian Games (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "194816"> + <rom name="Australian Games - Side A [recovered].dsk" size="194816" crc="a3d813cc" sha1="70edcad46b89d7f96710bc0dcda86f6fc1ee1c7d" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "195635"> + <rom name="Australian Games - Side B.dsk" size="195635" crc="6ace009c" sha1="3208ed5cb7e2a7d865f57b43efc80110144714fd" offset="0"/> + </dataarea> + </part> + </software> + + <software name="badlandssp" cloneof="badlands"> + <description>Badlands (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "97995"> + <rom name="Badlands.dsk" size="97995" crc="44ae6f1e" sha1="683489b807cced8c290f8274e428df56d3535cd1" offset="0"/> + </dataarea> + </part> + </software> + + <software name="buggyboysp" cloneof="buggyboy"> + <description>Buggy Boy (Spa)</description> + <year>1988</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "195635"> + <rom name="Buggy Boy.dsk" size="195635" crc="c37afecb" sha1="19550826617711dd2d8c0d17421b6f5266a44cd1" offset="0"/> + </dataarea> + </part> + </software> + + <software name="clschss4sp" cloneof="clschss4"> + <description>Colossus Chess 4 (Spa)</description> + <year>1986</year> + <publisher>Proein</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="Colossus 4 Chess (Proein).dsk" size="194816" crc="6fc03840" sha1="462dbf4f71e984448de7638ade421eb9355a4bc7" offset="0"/> + </dataarea> + </part> + </software> + + <software name="comarcav"> + <!-- No good dump exists of Disk 2. --> + <description>Comic, Arcade & Aventura</description> + <year>1991</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side A: Capitan Trueno, Freddy Hardest"/> + <dataarea name="flop" size = "166817"> + <rom name="Comic, Arcade & Aventura - Disk 1 Side 1.dsk" size="166817" crc="926eafa7" sha1="73401bac1b1c0b2c5e7b1f164378bf1bd83de99a" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Disk 1, Side B: Cozumel, Cosmic Sheriff"/> + <dataarea name="flop" size = "146815"> + <rom name="Comic, Arcade & Aventura - Disk 1 Side 2.dsk" size="146815" crc="f3aa29d1" sha1="e64bd9a87a81dd273751d6dca1a1e413d9018fa1" offset="0"/> + </dataarea> + </part> + </software> + + <software name="ddarecol"> + <description>Dan Dare Collection</description> + <year>1988</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="Dan Dare Collection (DroSoft).dsk" size="194816" crc="8692a7cc" sha1="e4154ad57856025ccadbacc512b15280f8032fc2" offset="0"/> + </dataarea> + </part> + </software> + + <software name="drazenpba" cloneof="drazenpb"> + <description>Drazen Petrovic Basket (alt)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "73216"> + <rom name="Drazen Petrovic Basket (Erbe).DSK" size="73216" crc="17eeb154" sha1="4e0b0edd771ad5dc622c449a73bae1b0a11e4789" offset="0"/> + </dataarea> + </part> + </software> + + <software name="equipoags"> + <description>El Equipo A (Gunstick)</description> + <year>1988</year> + <publisher>Zafiro Software Division</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "88231"> + <rom name="El Equipo A (Gunstick) (+3 disk) - Side A.dsk" size="88231" crc="f3cde48e" sha1="b08d6940bbf5138332c60a7e469e08f5942ac21a" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "88231"> + <rom name="El Equipo A (Gunstick) (+3 disk) - Side B.dsk" size="88231" crc="b2724fe4" sha1="b7fa9ed67106a2cbc3c6d6bbd3f407181df57ee6" offset="0"/> + </dataarea> + </part> + </software> + + <software name="esanchvib" cloneof="esanchvi"> + <description>Emilio Sanchez Vicario Grand Slam (alt 2)</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "58939"> + <rom name="Emilio Sanchez Vicario Grand Slam.dsk" size="58939" crc="5640d214" sha1="6c033e39e84822a6fbf9c6ee61125693c8f86d3b" offset="0"/> + </dataarea> + </part> + </software> + + <software name="epromsp" cloneof="eprom"> + <description>Escape from the Planet of the Robot Monsters (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="Escape from the planet of the robot monsters (Erbe).dsk" size="194816" crc="0bb41cee" sha1="689e11d47ba487499ba952f0ef401deed4a1be13" offset="0"/> + </dataarea> + </part> + </software> + + <software name="frntiers"> + <description>Frontiers</description> + <year>1988</year> + <publisher>Zafiro Software Division</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "68352"> + <rom name="Frontiers.dsk" size="68352" crc="c30725b1" sha1="7b934e7009aa8b0f98dbe2e2402490a8ad092a36" offset="0"/> + </dataarea> + </part> + </software> + + <software name="genghisk"> + <description>Genghis Khan</description> + <year>1991</year> + <publisher>Positive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "195631"> + <rom name="Genghis Khan.dsk" size="195631" crc="5a4d422d" sha1="2f281f133682ead554bb0d5970f450d37222c6dd" offset="0"/> + </dataarea> + </part> + </software> + + <software name="goldnaxespa" cloneof="goldnaxe"> + <description>Golden Axe (Spa) (alt)</description> + <year>1990</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "166599"> + <rom name="Golden Axe (MCM) - Side A.dsk" size="166599" crc="dd172644" sha1="80c46698ac2362ab22236c874b53d09ca8734e8e" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "195635"> + <rom name="Golden Axe (MCM) - Side B.dsk" size="195635" crc="11794666" sha1="aa8c971971305ba1d4795deae7f586f474618927" offset="0"/> + </dataarea> + </part> + </software> + + <software name="gunshipsp" cloneof="gunship"> + <description>Gunship (Spa)</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "151040"> + <rom name="Gun Ship - Side A (Erbe Software).dsk" size="151040" crc="c67f9066" sha1="bd04390e5a92ed8b629bdcd18fe143ea64641f07" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "151040"> + <rom name="Gun Ship - Side B (Erbe Software).dsk" size="151040" crc="f58a0381" sha1="d6c8d7f3a81a7182f925c978b67128b759114b31" offset="0"/> + </dataarea> + </part> + </software> + + <software name="highstelsp"> + <description>High Steel (Spa)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "58624"> + <rom name="High Steel (Erbe Software).dsk" size="58624" crc="39f355cc" sha1="79cc8da772100bf639af90efbd85d10735cbd7e0" offset="0"/> + </dataarea> + </part> + </software> + + <software name="italia90spb" cloneof="italia90"> + <description>Mundial de Futbol Italia '90 (alt 2)</description> + <year>1989</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "54057"> + <rom name="Italia 90 World Cup (Dro Soft).dsk" size="54057" crc="77966d03" sha1="cffb4a625bf3ad849c2fecaa0bcad2e4a6e97908" offset="0"/> + </dataarea> + </part> + </software> + + <software name="kromguer"> + <description>Krom El Guerrero</description> + <year>1989</year> + <publisher>OMK Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "195635"> + <rom name="Krom El Guerrero.dsk" size="195635" crc="c6704f88" sha1="fd07e61a903a5611d222d9a5637a26be03dadb98" offset="0"/> + </dataarea> + </part> + </software> + + <software name="los40v4"> + <description>Los 40 Principales Vol. 4</description> + <year>1987</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Rambo + Krakout"/> + <dataarea name="flop" size="194816"> + <rom name="Los 40 Principales Vol. 04 - Side 1.dsk" size="194816" crc="2026cb1d" sha1="842f580040b5e2bbb86bcc64a8a4b6e0f24a53ee" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Firelord + Turbo Esprit"/> + <dataarea name="flop" size="194816"> + <rom name="Los 40 Principales Vol. 04 - Side 2.dsk" size="194816" crc="d8f8e041" sha1="1c0cac61dbd90758fad83e6153304e0c79fc0b6b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="inhumano"> + <description>Los Inhumanos</description> + <year>1990</year> + <publisher>Delta Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="Los inhumanos.dsk" size="194816" crc="7e873c78" sha1="9c2c25d561839fc0779f015b6b3088d3a32ee945" offset="0"/> + </dataarea> + </part> + </software> + + <software name="tempsagr"> + <description>Los Templos Sagrados</description> + <year>1991</year> + <publisher>Aventuras AD</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "102877"> + <rom name="Los Templos Sagrados - Side 1.dsk" size="102877" crc="33990559" sha1="fb4ab19cd49d0280c2cfff02a8325d5aa46019dd" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "256"> + <rom name="Los Templos Sagrados - Side 2.dsk" size="256" crc="b9a10e7d" sha1="e2501fcc4e35c8dc7a2d4dc6b46c1ca7da51846e" offset="0"/> + </dataarea> + </part> + </software> + + <software name="mntbkrcr"> + <!-- Unrelated to Zeppelin's game with the same title --> + <description>Mountain Bike Racer</description> + <year>1990</year> + <publisher>Positive</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="Mountain Bike Racer.dsk" size="194816" crc="5372df44" sha1="2c4fb2de3506544ecbafb8548db4f3efd8b77272" offset="0"/> + </dataarea> + </part> + </software> + + <software name="narcsp" cloneof="narc"> + <!-- This dump of Side A has been manually fixed, a new untampered one may be needed for verification. --> + <description>NARC (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "226048"> + <rom name="Narc - Side 1 (Erbe) [corregido].dsk" size="226048" crc="b2979f21" sha1="823b6e45197c40924b16cf4d61c1ace03cc035a3" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "216195"> + <rom name="Narc - Side 2 (Erbe).dsk" size="216195" crc="4306cf83" sha1="a50870504147907fb6474f3dfc5b114de76f5265" offset="0"/> + </dataarea> + </part> + </software> + + <!-- This image came from a dual-system Spectrum/Amstrad release (Side A: Spectrum, Side B: Amstrad) --> + <software name="navymovespa" cloneof="navymove"> + <description>Navy Moves (Spa) (alt)</description> + <year>1988</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A: Spectrum"/> + <dataarea name="flop" size="166817"> + <rom name="Navy Moves (Doble Edición) (side A).dsk" size="166817" crc="718149f4" sha1="5018740f71bc2ae08343f4040590cfa2550333bf" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B: Amstrad"/> + <dataarea name="flop" size="214784"> + <rom name="navy moves (1988)(dinamic)(es)(en)(side b).dsk" size="214784" crc="c32323a2" sha1="da30c11411368b22474b032f39e8f8b968f7903b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="ninjawarspa" cloneof="ninjawar"> + <description>The Ninja Warriors (Spa) (alt)</description> + <year>1990</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "195635"> + <rom name="Ninja Warriors.dsk" size="195635" crc="ee1fdc62" sha1="fa92665ce2324c00bbca1ca6ac0c0376c8de0a70" offset="0"/> + </dataarea> + </part> + </software> + + <software name="powrmagc"> + <description>Power Magic</description> + <year>1990</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "63488"> + <rom name="Power Magic.dsk" size="63488" crc="2a0017e0" sha1="1a6bdbbef1a1e22176a492b228b508a982db29ee" offset="0"/> + </dataarea> + </part> + </software> + + <software name="rbislandsp" cloneof="rbisland"> + <description>Rainbow Islands (Spa)</description> + <year>1990</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "176107"> + <rom name="Rainbow Islands (Erbe Software).dsk" size="176107" crc="8011bfaa" sha1="28356ae9a4df3144248cae45c0a1b7fd812f8fb0" offset="0"/> + </dataarea> + </part> + </software> + + <software name="bttf3spa" cloneof="bttf3"> + <description>Regreso al Futuro - Parte III (alt)</description> + <year>1991</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "195635"> + <rom name="Regreso al Futuro III (MCM Software) - Side A.dsk" size="195635" crc="a8007375" sha1="eae8467742d20fb8f8e50fc90efda0d612ab8ad6" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "195635"> + <rom name="Regreso al Futuro III (MCM Software) - Side B.dsk" size="195635" crc="b0c00514" sha1="81e48d09e18da1e4e66addd09899ba9a6b835d5d" offset="0"/> + </dataarea> + </part> + </software> + + <software name="rescatlac" cloneof="rescatla"> + <!-- This dump of Side A has been manually fixed, a new untampered one may be needed for verification. --> + <description>Rescate Atlantida (alt 3)</description> + <year>1989</year> + <publisher>Dinamic Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "150659"> + <rom name="Rescate Atlantida - Side 1 [restaurada].dsk" size="150659" crc="b4ba8c14" sha1="e10d4fc6f2fe250dfda0cbd491b136cd99c3a1c7" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "256"> + <rom name="Rescate Atlantida - Side 2.dsk" size="256" crc="b9a10e7d" sha1="e2501fcc4e35c8dc7a2d4dc6b46c1ca7da51846e" offset="0"/> + </dataarea> + </part> + </software> + + <software name="ringwarssp"> + <description>Ring Wars (Spa)</description> + <year>1989</year> + <publisher>MCM Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "189952"> + <rom name="Ring Wars.dsk" size="189952" crc="2dd821c4" sha1="e662b7d4b6915078901caadc8028b0b2acdc8a06" offset="0"/> + </dataarea> + </part> + </software> + + <software name="simuhitssp"> + <!-- No good dump known of Side B, but Side A seems to include everything. --> + <description>Simulation Hits (Spa)</description> + <year>1989</year> + <publisher>Proein</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "200517"> + <rom name="Simulation Hits - Side 1 (Proein).dsk" size="200517" crc="ddeb37da" sha1="25d6beb79a898ffa503551556cd4ccaa20f7f0a5" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sincp3mb"> + <description>Sinclair Plus 3</description> + <year>1988</year> + <publisher>Microbyte</publisher> + <info name="usage" value="Disk has no autorun menu, requires loading each game from Basic." /> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "195631"> + <rom name="Sinclair Plus3 (Microbyte) [side 1].dsk" size="195631" crc="d258b440" sha1="13aa8569e898632ea861015ae97c7029f0ee5b9f" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "195631"> + <rom name="Sinclair Plus3 (Microbyte) [side 2].dsk" size="195631" crc="b1c4812d" sha1="ad50f3ba0fb76e712452f9b2edda215b5096f487" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sootlandgs"> + <description>Sootland (Gunstick)</description> + <year>1988</year> + <publisher>Zafiro Software Division</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="Sootland (Gunstick).dsk" size="194816" crc="d5092b88" sha1="c27377c1127cbb00fded1e0144dadaf9490c9147" offset="0"/> + </dataarea> + </part> + </software> + + <software name="prayoftw"> + <!-- Game recovered from the original developer's archives --> + <description>The Prayer Of The Warrior</description> + <year>1992</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "194816"> + <rom name="The Prayer Of The Warrior (Side A).dsk" size="194816" crc="5803cde3" sha1="dd4fe59bc4f9d1a9775052701dcd1eeeb6c8df28" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "194816"> + <rom name="The Prayer Of The Warrior (Side B).dsk" size="194816" crc="3c20e2b1" sha1="465607845b537cec16d3e15b43a6db65297b04fa" offset="0"/> + </dataarea> + </part> + </software> + + <software name="prayoftwa" cloneof="prayoftw"> + <!-- Modified version of the game which includes both loads in one side of the disc. --> + <description>The Prayer of the Warrior (alt)</description> + <year>1992</year> + <publisher>Zigurat Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "194816"> + <rom name="The Prayer of the Warrior (Zup).dsk" size="194816" crc="f9b00ee9" sha1="f18303f4295f1127c8e499ce197d6a17397cd70a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="toiacidg"> + <description>Toi Acid Game</description> + <year>1989</year> + <publisher>Iber</publisher> + <part name="flop1" interface="floppy_3"> + <feature name="part_id" value="Side A"/> + <dataarea name="flop" size = "194816"> + <rom name="Toi Acid Game - Side A.dsk" size="194816" crc="ee353414" sha1="32c80288e8b69e65747bc6dbfb095e6314b192a5" offset="0"/> + </dataarea> + </part> + <part name="flop2" interface="floppy_3"> + <feature name="part_id" value="Side B"/> + <dataarea name="flop" size = "194816"> + <rom name="Toi Acid Game - Side B.dsk" size="194816" crc="a891a7d3" sha1="3b2c869c90624be050ecebb401067fdcabd48246" offset="0"/> + </dataarea> + </part> + </software> + + <software name="toobinspa" cloneof="toobin"> + <description>Toobin' (Spa) (alt)</description> + <year>1989</year> + <publisher>Erbe Software</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "122405"> + <rom name="Toobin (Erbe).dsk" size="122405" crc="19c5e569" sha1="3eb3eecaf23e4ef5bd3ca5761eccf9aad1fa60b7" offset="0"/> + </dataarea> + </part> + </software> + + <software name="trainetnsp"> + <description>The Train: Escape to Normandy (Spa)</description> + <year>1988</year> + <publisher>Dro Soft</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size = "63821"> + <rom name="Train - Escape to Normandy, The (Dro).dsk" size="63821" crc="b6cc7106" sha1="e9d88fceee7592bae3dbf255da27c66aa25279b9" offset="0"/> + </dataarea> + </part> + </software> + +<!-- Other floppy images --> + + <!-- This version is dated 20180316 --> + <software name="cvaniasi"> + <description>Castlevania - Spectral Interlude</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castleenglish.dsk" size="194816" crc="d03dce64" sha1="fa128c8f3cd307018cbe826605fa55277ca9065b" offset="0"/> + </dataarea> + </part> + </software> + + <!-- This version is dated 20180316 --> + <software name="cvaniasiit" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Ita)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castleitalian.dsk" size="194816" crc="78bada74" sha1="87915ed0de02bf7ebc69735bc700ac04c42813b0" offset="0"/> + </dataarea> + </part> + </software> + + <!-- This version is dated 20180316 --> + <software name="cvaniasipo" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Pol)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlepoland.dsk" size="194816" crc="e34eb33f" sha1="6885cac79a3061701c68cb414b8e151310735513" offset="0"/> + </dataarea> + </part> + </software> + + <!-- This version is dated 20180316 --> + <software name="cvaniasiru" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Rus)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlerussian.dsk" size="194816" crc="a90d610c" sha1="40bb9aa34d4fad35dc2574f4721d07b83863bfe9" offset="0"/> + </dataarea> + </part> + </software> + + <!-- This version is dated 20180316 --> + <software name="cvaniasisp" cloneof="cvaniasi"> + <description>Castlevania - Spectral Interlude (Spa)</description> + <year>2015</year> + <publisher>Rewind Team</publisher> + <part name="flop1" interface="floppy_3"> + <dataarea name="flop" size="194816"> + <rom name="castlespanish.dsk" size="194816" crc="0077de9c" sha1="f172cd6a5d39b1a46cfb9151851996e81f5bb4b8" offset="0"/> </dataarea> </part> </software> diff --git a/hash/spectrum_flop_opus.xml b/hash/spectrum_flop_opus.xml new file mode 100644 index 00000000000..fc7f6b9cdb3 --- /dev/null +++ b/hash/spectrum_flop_opus.xml @@ -0,0 +1,809 @@ +<?xml version="1.0"?> +<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> + +<softwarelist name="spectrum_flop_opus" description="Sinclair ZX Spectrum Opus Discovery disk images"> + + <software name="007mspy"> + <description>007 Multispy</description> + <year>1987</year> + <publisher>ZX-Guaranteed</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="007 Multispy.opd" size="184320" crc="017fa7e9" sha1="f25b77795db4204d282453184aa6c8363bd07c42" offset="0"/> + </dataarea> + </part> + </software> + + <software name="astrum10" cloneof="astrum11"> + <description>Astrum+ v1.0</description> + <year>1988</year> + <publisher>Bradway Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Astrum+ v1.0.opd" size="184320" crc="e8f930e2" sha1="f72ae475ed76ec31c8401304664f1c77d79caac9" offset="0"/> + </dataarea> + </part> + </software> + + <software name="astrum11"> + <description>Astrum+ v1.1</description> + <year>1988</year> + <publisher>Bradway Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Astrum+ v1.1.opd" size="184320" crc="b25f2e47" sha1="327279451ed247aac75d5b221780ebc6d64a8c83" offset="0"/> + </dataarea> + </part> + </software> + + <software name="blast37"> + <description>Blast v3.7</description> + <year>1985</year> + <publisher>Oxford Computer Systems</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Blast v3.7.opd" size="184320" crc="9488aaff" sha1="013b6a8afd948fed594b722c9a3aa752e905e59b" offset="0"/> + </dataarea> + </part> + </software> + + <software name="datoncard"> + <description>Daton Software Card Games</description> + <year>1990</year> + <publisher>Daton Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="368640"> + <rom name="Daton Software Card Games.opd" size="368640" crc="ab4ea8ad" sha1="403c5efd030bf4ab5793914bf3dd71eaf3f4eff1" offset="0"/> + </dataarea> + </part> + </software> + + <software name="dbrewster"> + <description>The Derek Brewster Collection</description> + <year>1985</year> + <publisher>Micromega</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Codename Mat & Jasper & Kentilla.opd" size="184320" crc="60270bc2" sha1="4b916e0ad11d55390caf20bd9146689bb8a8b022" offset="0"/> + </dataarea> + </part> + </software> + + <software name="discman"> + <description>Disc Manager</description> + <year>1987</year> + <publisher>Bradway Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Disc Manager (Bradway Software).opd" size="184320" crc="1e6e2c65" sha1="f40cdf187227f66a11ab17c54d6463ae6817c080" offset="0"/> + </dataarea> + </part> + </software> + + <software name="ggsmontr"> + <description>Grumpy Gumphrey Supersleuth/Monty On The Run</description> + <year>1985</year> + <publisher>Gremlin Graphics Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Grumpy Gumphrey Supersleuth & Monty On The Run.opd" size="184320" crc="010e4c1b" sha1="dcae37ae934e262c2e0052da07d694f7ead7b90f" offset="0"/> + </dataarea> + </part> + </software> + + <software name="mstrfl09"> + <description>Masterfile v09</description> + <year>1982</year> + <publisher>Campbell Systems</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Masterfile v0.9.opd" size="184320" crc="78c56191" sha1="564fde8c40bb7ef478b8c9b042a1f64bf53429b5" offset="0"/> + </dataarea> + </part> + </software> + + <software name="omnicalc2"> + <description>Omnicalc 2</description> + <year>1984</year> + <publisher>Microsphere</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Omnicalc 2.opd" size="184320" crc="ed80eeee" sha1="85ccdafa3cbc1b9bb76becede3e752b657d5efc5" offset="0"/> + </dataarea> + </part> + </software> + + <software name="quickdos"> + <description>QuickDOS</description> + <year>1991</year> + <publisher>Mega-Soft</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="quickdos.opd" size="184320" crc="e7a0e18d" sha1="0b44b57e59fbdf12815d2860292976f2747c525c" offset="0"/> + </dataarea> + </part> + </software> + + <software name="saleslinv"> + <description>Sales/Purchase Ledger Invoicing</description> + <year>1984</year> + <publisher>Transform Ltd</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Sales & Purchase Ledger & Invoicing.opd" size="184320" crc="2ffce081" sha1="1803bf3b9b93cb45acd89b77de4c523bc89b0f2c" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld01"> + <description>Spectrum Discovery Club Library Disc 01</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 01.opd" size="184320" crc="a3a931ff" sha1="420e7cdd0dc83484e95fe4bc50c4f3918f952556" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld02"> + <description>Spectrum Discovery Club Library Disc 02</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 02.opd" size="184320" crc="d1bdcbad" sha1="03dd0c55571caa7911d3b045451f09dc4e9730b8" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld03"> + <description>Spectrum Discovery Club Library Disc 03</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 03.opd" size="184320" crc="2f012a16" sha1="5b05c092aa795a6155f1abaa1934bd43bff733f1" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld04"> + <description>Spectrum Discovery Club Library Disc 04</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 04.opd" size="184320" crc="02eec8ac" sha1="5ab24d81c28f13183519280995e093ffb9f04340" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld05"> + <description>Spectrum Discovery Club Library Disc 05</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 05.opd" size="184320" crc="16d21812" sha1="0290747b9d7c9c19c6260f1afde25ba964a7c664" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld06"> + <description>Spectrum Discovery Club Library Disc 06</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 06.opd" size="184320" crc="b63303e5" sha1="1bcaa48a2f50ba3ca86b2d1f47ea4f099057f62a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld07"> + <description>Spectrum Discovery Club Library Disc 07</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 07.opd" size="184320" crc="5588a051" sha1="986c44e13dfbae54c0cf405b932b42237c5c8e0f" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld08"> + <description>Spectrum Discovery Club Library Disc 08</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 08.opd" size="184320" crc="2f8878aa" sha1="e60b0aaf0256e4387d43b6edbb10501564ab53e5" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld09"> + <description>Spectrum Discovery Club Library Disc 09</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 09.opd" size="184320" crc="2e4bea72" sha1="b4aa88f1ff391fbe91b80e99fb900d2e2773febc" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcld10"> + <description>Spectrum Discovery Club Library Disc 10</description> + <year>198?</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Library Disc 10.opd" size="184320" crc="0bcbd54c" sha1="b304ff212b7206f5f73c719bcebd2cb802325e1a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl0103"> + <description>Spectrum Discovery Club Newsletter 01-03</description> + <year>1987</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 01-03.opd" size="184320" crc="24ff9ef7" sha1="36e69a33c1db09b01e45ae7042cfd080f583fc7d" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl04"> + <description>Spectrum Discovery Club Newsletter 04</description> + <year>1987</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 04.opd" size="184320" crc="2508538d" sha1="faaad4e9301e60d0a69f69961f74319b192d66f4" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl05"> + <description>Spectrum Discovery Club Newsletter 05</description> + <year>1988</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 05.opd" size="184320" crc="dd7338c9" sha1="d03f61a1fe93b84f3aa74e3cc6e33666dcdd5288" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl06"> + <description>Spectrum Discovery Club Newsletter 06</description> + <year>1988</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 06.opd" size="184320" crc="6cc5bfc9" sha1="768684c0d39216a79193d04bbae8ff7d83f9fd49" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl07"> + <description>Spectrum Discovery Club Newsletter 07</description> + <year>1988</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 07.opd" size="184320" crc="a80b29a6" sha1="5daed4507700fb3f7026d8778755d86fc2df463f" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl08"> + <description>Spectrum Discovery Club Newsletter 08</description> + <year>1988</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 08.opd" size="184320" crc="606ddad2" sha1="279d9853d0b83c4145b806cbc0a297fe5ba6384d" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl09"> + <description>Spectrum Discovery Club Newsletter 09</description> + <year>1988</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 09.opd" size="184320" crc="dcafc37a" sha1="918a9047ae1d56aeb0205ada64c616e64253f810" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl10"> + <description>Spectrum Discovery Club Newsletter 10</description> + <year>1988</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 10.opd" size="184320" crc="c075e8a4" sha1="96ba0c5e54f3def3961c6baba9472951d6afeb62" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl11"> + <description>Spectrum Discovery Club Newsletter 11</description> + <year>1989</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 11.opd" size="184320" crc="ea5e34d8" sha1="4de7aa77a657e49edddede8bf39d4e08fe68c279" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl12"> + <description>Spectrum Discovery Club Newsletter 12</description> + <year>1989</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 12.opd" size="184320" crc="da60e7f6" sha1="966e64bcb12d11dab008fd306ed60de8fbd2011b" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl13"> + <description>Spectrum Discovery Club Newsletter 13</description> + <year>1989</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 13.opd" size="184320" crc="74121668" sha1="a78d7a5ae76645b00290d3bdf9abcc2d769e292a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl14"> + <description>Spectrum Discovery Club Newsletter 14</description> + <year>1989</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 14.opd" size="184320" crc="575c433c" sha1="7243c9bd6a700f7e2f6a75ebde86ac9dc83b8fb6" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl15"> + <description>Spectrum Discovery Club Newsletter 15</description> + <year>1989</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 15.opd" size="184320" crc="dba572d3" sha1="f495a621d3f345fc127915805c11714147c548f7" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl16"> + <description>Spectrum Discovery Club Newsletter 16</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 16.opd" size="184320" crc="c4b19a07" sha1="185986689767b7bc8359678382c383a143b4c675" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl17"> + <description>Spectrum Discovery Club Newsletter 17</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 17.opd" size="184320" crc="007e97b0" sha1="3cb7b1a6a17d8c22be59ca4c988441beec5bdf12" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl18"> + <description>Spectrum Discovery Club Newsletter 18</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 18.opd" size="184320" crc="bf735541" sha1="f1119e7f8e5a5dd4e3f77801430dd7e44834715a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl19"> + <description>Spectrum Discovery Club Newsletter 19</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 19.opd" size="184320" crc="65f48b91" sha1="a123641dc88e111b560a87a59c15f49874907a2b" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl20"> + <description>Spectrum Discovery Club Newsletter 20</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 20.opd" size="184320" crc="4597ed55" sha1="ae4c3b3aecba932913bc23d911f19e96f726d8e3" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl21"> + <description>Spectrum Discovery Club Newsletter 21</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 21.opd" size="184320" crc="85cae652" sha1="b062136f1bdacb17ca01ebe16c974554d3b6ccf7" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl22"> + <description>Spectrum Discovery Club Newsletter 22</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 22.opd" size="184320" crc="321e6816" sha1="6f9fe9f5bb9b7cabb4fc005bdc4d0a8329212938" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl23"> + <description>Spectrum Discovery Club Newsletter 23</description> + <year>1991</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 23.opd" size="184320" crc="fc466652" sha1="00b46efd1544b96ee71ef7b00c5732543a9f615d" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl24"> + <description>Spectrum Discovery Club Newsletter 24</description> + <year>1991</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 24.opd" size="184320" crc="06f0c50b" sha1="1e8f7f03db421624d7c6e68cc5d6d45c9e3b10f5" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl25"> + <description>Spectrum Discovery Club Newsletter 25</description> + <year>1991</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 25.opd" size="184320" crc="373b7a3f" sha1="0261f8709cf38f7aba0a9c885377ea6d888a64f9" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl26"> + <description>Spectrum Discovery Club Newsletter 26</description> + <year>1991</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 26.opd" size="184320" crc="7e9d0c63" sha1="27bbbbd9c9e5a3fd9a15473a59b2e65f9f2d5e12" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl27"> + <description>Spectrum Discovery Club Newsletter 27</description> + <year>1991</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 27.opd" size="184320" crc="233a3078" sha1="f1b3c9e6997930d4e53a9680b4dccd7868377685" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl28"> + <description>Spectrum Discovery Club Newsletter 28</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 28.opd" size="184320" crc="b7ef253a" sha1="f3c71d7c49a3cd96fcaa4101ef998c2c5b4ac5b6" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl29"> + <description>Spectrum Discovery Club Newsletter 29</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 29.opd" size="184320" crc="4bc6c85e" sha1="6146b7670956a72b65403b8387a7429acb8d6ac5" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl30"> + <description>Spectrum Discovery Club Newsletter 30</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 30.opd" size="184320" crc="83e43ef8" sha1="80d58e25b1b21a7fea15899de382b110b880a03b" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl31"> + <description>Spectrum Discovery Club Newsletter 31</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 31.opd" size="184320" crc="e4307809" sha1="de84ee339c42ef260964477ac6b9a8ef521c40d1" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl32"> + <description>Spectrum Discovery Club Newsletter 32</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 32.opd" size="184320" crc="0c7880ad" sha1="525bc47dac9881de0732f606d81b7edfd45b89a2" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl33"> + <description>Spectrum Discovery Club Newsletter 33</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 33.opd" size="184320" crc="ef534502" sha1="449235daad743cb523ba6746dfc0b0982e98d332" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl34"> + <description>Spectrum Discovery Club Newsletter 34</description> + <year>1994</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 34.opd" size="184320" crc="ff270499" sha1="a96acb236435a63066672839fab6536ca65ad15d" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl35"> + <description>Spectrum Discovery Club Newsletter 35</description> + <year>1994</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 35.opd" size="184320" crc="c8cd6cb5" sha1="526d1dc0d8cd9fde5fcc93f7716eaa0bb6a35b01" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl36"> + <description>Spectrum Discovery Club Newsletter 36</description> + <year>1994</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 36.opd" size="184320" crc="89986975" sha1="a5c4cdc5a5d998885931c712694350d251805247" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl37"> + <description>Spectrum Discovery Club Newsletter 37</description> + <year>1994</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 37.opd" size="184320" crc="30a22ca9" sha1="df6d21249f263a52cfae2cfe6a4d3a9a7e183f5d" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl38"> + <description>Spectrum Discovery Club Newsletter 38</description> + <year>1994</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 38.opd" size="184320" crc="29a467f0" sha1="2aef48529cccf1e9a7fef25c9bfcceacb47e3bf2" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl39"> + <description>Spectrum Discovery Club Newsletter 39</description> + <year>1994</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 39.opd" size="184320" crc="ab7fb2c8" sha1="54e47a979ce757bdf3ba8b1d320441a29477afca" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl40"> + <description>Spectrum Discovery Club Newsletter 40</description> + <year>1995</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 40.opd" size="184320" crc="0a6bf2f6" sha1="c7ffbdbd65e2567d5cbbcb76375c75bb035ddc2a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl41"> + <description>Spectrum Discovery Club Newsletter 41</description> + <year>1995</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 41.opd" size="184320" crc="7a7e0214" sha1="ef31293e9ce76329e26e535b247af6a9d9df7c2a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcnl42"> + <description>Spectrum Discovery Club Newsletter 42</description> + <year>1995</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter 42.opd" size="184320" crc="4cbf2e77" sha1="6f4836b31c51041dfa8758e7e02d4e6a910c05fb" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcxmas89"> + <description>Spectrum Discovery Club Newsletter Xmas Bonus December 1989</description> + <year>1989</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter Xmas Bonus December 1989.opd" size="184320" crc="9b42485f" sha1="fa53aea60153e3e0a3e3bb6fc8a1b14091385874" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcxmas90"> + <description>Spectrum Discovery Club Newsletter Xmas Bonus December 1990</description> + <year>1990</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter Xmas Bonus December 1990.opd" size="184320" crc="4cd2d987" sha1="e5fc208044fb8b0e24fea0136e89990132577afd" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcxmas91"> + <description>Spectrum Discovery Club Newsletter Xmas Bonus December 1991</description> + <year>1991</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter Xmas Bonus December 1991.opd" size="184320" crc="bced547d" sha1="eceb98a7b47cce899b5fd39487949f3815ffe2d3" offset="0"/> + </dataarea> + </part> + </software> + + <software name="sdcxmas92"> + <description>Spectrum Discovery Club Newsletter Xmas Bonus December 1992</description> + <year>1992</year> + <publisher>Spectrum Discovery Club</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Spectrum Discovery Club Newsletter Xmas Bonus December 1992.opd" size="184320" crc="5551db6d" sha1="98fe69d80e6873e0cf0317c2f06609cfbbb3d082" offset="0"/> + </dataarea> + </part> + </software> + + <software name="tascopy"> + <description>Tascopy</description> + <year>1984</year> + <publisher>Tasman Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="TasCopy.opd" size="184320" crc="b1095939" sha1="13b6a9961f53085c279b61e341cab244b39ad8aa" offset="0"/> + </dataarea> + </part> + </software> + + <software name="tasprnt"> + <description>Tasprint</description> + <year>1983</year> + <publisher>Tasman Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="TasPrint.opd" size="184320" crc="3333f7cb" sha1="294096dd0ab8daa9cf16681ac9b164cd28442782" offset="0"/> + </dataarea> + </part> + </software> + + <software name="tasword3"> + <description>Tasword Three</description> + <year>1986</year> + <publisher>Tasman Software</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="TasWord 3.opd" size="184320" crc="8fb6c3f1" sha1="4a9b52de3c4c4b3911056823389370966eeee130" offset="0"/> + </dataarea> + </part> + </software> + + <software name="texp852"> + <description>Trans-Express 85.2</description> + <year>1985</year> + <publisher>Romantic Robot</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Trans-Express 85.2.opd" size="184320" crc="21aec919" sha1="623d3b3674bbb7f2a70cf2abd9f8ec62e95844ef" offset="0"/> + </dataarea> + </part> + </software> + + <software name="trandata"> + <description>Transdata</description> + <year>1987</year> + <publisher>Transform Ltd</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="Transdata.opd" size="184320" crc="fbd63941" sha1="6a1aa3ead163e877a0aef870dcbf1ea10e93c11e" offset="0"/> + </dataarea> + </part> + </software> + + <software name="udggen"> + <description>UDG Generator</description> + <year>1985</year> + <publisher>Tom Collier</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="UDG Opus.opd" size="184320" crc="adef99c9" sha1="0180f4da6abd3769bfdef5328ad4e84dba89461f" offset="0"/> + </dataarea> + </part> + </software> + + <software name="writer"> + <description>The Writer</description> + <year>1985</year> + <publisher>Softechnics</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="184320"> + <rom name="The Writer.opd" size="184320" crc="f446c7ef" sha1="032d097db4dc74da814f1e96c0786ece5c4c9295" offset="0"/> + </dataarea> + </part> + </software> + +</softwarelist> diff --git a/hash/vsmile_cart.xml b/hash/vsmile_cart.xml index 3466f84f7fc..15b9d28c8d2 100644 --- a/hash/vsmile_cart.xml +++ b/hash/vsmile_cart.xml @@ -2828,8 +2828,8 @@ Game cartridges </part> </software> - <!-- Cart labeled as "Disney My Friends Tigger and Pooh - En Busca de la Miel", - but game on screen title is "Disney Winnie the Pooh - En Busca de la Miel". --> + <!-- Cart labeled as "Disney My Friends Tigger and Pooh - En Busca de la Miel", + but game on screen title is "Disney Winnie the Pooh - En Busca de la Miel". --> <software name="poohsr1" cloneof="pooh" supported="yes"> <description>Disney Winnie the Pooh - En Busca de la Miel (Spa, Rev. 122)</description> <year>2004?</year> diff --git a/language/Greek/strings.po b/language/Greek/strings.po index 7d981581e9b..515ddab5eb2 100644 --- a/language/Greek/strings.po +++ b/language/Greek/strings.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: MAME\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-03-17 13:37+1100\n" -"PO-Revision-Date: 2018-04-29 16:16+0300\n" +"PO-Revision-Date: 2019-03-19 23:30+0200\n" "Last-Translator: Mame.gr\n" "Language-Team: MAME Language Team\n" "Language: el\n" @@ -1597,11 +1597,11 @@ msgstr "Ήχος\tOK\n" #: src/frontend/mame/ui/selgame.cpp:1079 msgid "Capture\tUnimplemented\n" -msgstr "" +msgstr "ΚαταγÏαφή\tΜη υλοποιημÎνη\n" #: src/frontend/mame/ui/selgame.cpp:1081 msgid "Capture\tImperfect\n" -msgstr "" +msgstr "ΚαταγÏαφή\tΑτελής\n" #: src/frontend/mame/ui/selgame.cpp:1084 msgid "Camera\tUnimplemented\n" @@ -1645,11 +1645,11 @@ msgstr "Ποντίκι\tΑτελÎÏ‚\n" #: src/frontend/mame/ui/selgame.cpp:1109 msgid "Media\tUnimplemented\n" -msgstr "" +msgstr "ΜÎσα\tΜη υλοποιημÎνα\n" #: src/frontend/mame/ui/selgame.cpp:1111 msgid "Media\tImperfect\n" -msgstr "" +msgstr "ΜÎσα\tΑτελή\n" #: src/frontend/mame/ui/selgame.cpp:1114 msgid "Disk\tUnimplemented\n" @@ -1669,43 +1669,43 @@ msgstr "Εκτυπωτής\tΑτελής\n" #: src/frontend/mame/ui/selgame.cpp:1124 msgid "Mag. Tape\tUnimplemented\n" -msgstr "" +msgstr "Μαγ. Ταινία\tΜη υλοποιημÎνη\n" #: src/frontend/mame/ui/selgame.cpp:1126 msgid "Mag. Tape\tImperfect\n" -msgstr "" +msgstr "Μαγ. Ταινία\tΑτελής\n" #: src/frontend/mame/ui/selgame.cpp:1129 msgid "Punch Tape\tUnimplemented\n" -msgstr "" +msgstr "ΔιάτÏητη Ταινία\tΜη υλοποιημÎνη\n" #: src/frontend/mame/ui/selgame.cpp:1131 msgid "Punch Tape\tImperfect\n" -msgstr "" +msgstr "ΔιάτÏητη Ταινία\tΑτελής\n" #: src/frontend/mame/ui/selgame.cpp:1134 msgid "Mag. Drum\tUnimplemented\n" -msgstr "" +msgstr "Μαγ. ΤÏμπανο\tΜη υλοποιημÎνο\n" #: src/frontend/mame/ui/selgame.cpp:1136 msgid "Mag. Drum\tImperfect\n" -msgstr "" +msgstr "Μαγ. ΤÏμπανο\tΑτελÎÏ‚\n" #: src/frontend/mame/ui/selgame.cpp:1139 msgid "(EP)ROM\tUnimplemented\n" -msgstr "" +msgstr "(EP)ROM\tΜη υλοποιημÎνη\n" #: src/frontend/mame/ui/selgame.cpp:1141 msgid "(EP)ROM\tImperfect\n" -msgstr "" +msgstr "(EP)ROM\tΑτελής\n" #: src/frontend/mame/ui/selgame.cpp:1144 msgid "Communications\tUnimplemented\n" -msgstr "" +msgstr "Επικοινωνίες\tΜη υλοποιημÎνες\n" #: src/frontend/mame/ui/selgame.cpp:1146 msgid "Communications\tImperfect\n" -msgstr "" +msgstr "Επικοινωνίες\tΑτελής\n" #: src/frontend/mame/ui/selgame.cpp:1149 msgid "LAN\tUnimplemented\n" @@ -2398,7 +2398,7 @@ msgstr "ήχος" #: src/frontend/mame/ui/info.cpp:36 msgid "capture hardware" -msgstr "" +msgstr "υλικό καταγÏαφής" #: src/frontend/mame/ui/info.cpp:37 msgid "camera" @@ -2422,7 +2422,7 @@ msgstr "ποντίκι" #: src/frontend/mame/ui/info.cpp:42 msgid "media" -msgstr "" +msgstr "μÎσα" #: src/frontend/mame/ui/info.cpp:43 msgid "disk" @@ -2434,23 +2434,23 @@ msgstr "εκτυπωτής" #: src/frontend/mame/ui/info.cpp:45 msgid "magnetic tape" -msgstr "" +msgstr "μαγνητική ταινία" #: src/frontend/mame/ui/info.cpp:46 msgid "punch tape" -msgstr "" +msgstr "διάτÏητη ταινία" #: src/frontend/mame/ui/info.cpp:47 msgid "magnetic drum" -msgstr "" +msgstr "μαγνητικό Ï„Ïμπανο" #: src/frontend/mame/ui/info.cpp:48 msgid "solid state storage" -msgstr "" +msgstr "αποθήκευση στεÏεάς κατάστασης" #: src/frontend/mame/ui/info.cpp:49 msgid "communications" -msgstr "" +msgstr "επικοινωνίες" #: src/frontend/mame/ui/info.cpp:50 msgid "LAN" @@ -2925,15 +2925,18 @@ msgstr "" #: plugins/cheatfind/init.lua:504 msgid "Pause Mode" -msgstr "" +msgstr "ΛειτουÏγία ΠαÏσης" #: plugins/cheatfind/init.lua:511 msgid "Manually pause & unpause the game when needed with the pause hotkey" msgstr "" +"Μη αυτόματη παÏση & συνÎχιση του Ï€Î±Î¹Ï‡Î½Î¹Î´Î¹Î¿Ï ÏŒÏ„Î±Î½ χÏειάζεται με το πλήκτÏο " +"παÏσης" #: plugins/cheatfind/init.lua:536 msgid "All slots cleared and current state saved to Slot 1" msgstr "" +"Όλες οι θÎσεις αδειάσαν και η Ï„ÏÎχουσα κατάσταση αποθηκεÏτηκε στη θÎση 1" #: plugins/cheatfind/init.lua:551 msgid "Start new search" @@ -2942,11 +2945,11 @@ msgstr "ΈναÏξη νÎας αναζήτησης" #: plugins/cheatfind/init.lua:564 #, lua-format msgid "Memory State saved to Slot %d" -msgstr "" +msgstr "Η Κατάσταση Μνήμης αποθηκεÏτηκε στη θÎση %d" #: plugins/cheatfind/init.lua:583 msgid "Save Current Memory State to Slot " -msgstr "" +msgstr "Αποθήκευση ΤÏÎχουσας Κατάστασης Μνήμης στη ΘÎση " #: plugins/cheatfind/init.lua:614 #, lua-format @@ -2955,15 +2958,15 @@ msgstr "Î’ÏÎθηκαν συνολικά %d αντιστοιχίες" #: plugins/cheatfind/init.lua:655 msgid "Perform Compare : " -msgstr "" +msgstr "ΕκτÎλεση ΣÏγκÏισης : " #: plugins/cheatfind/init.lua:672 msgid "Left less than right" -msgstr "" +msgstr "ΑÏιστεÏά είναι λιγότεÏη από τη δεξιά" #: plugins/cheatfind/init.lua:674 msgid "Left greater than right" -msgstr "" +msgstr "ΑÏιστεÏά είναι πεÏισσότεÏη από τη δεξιά" #: plugins/cheatfind/init.lua:676 msgid "Left equal to right" @@ -2971,7 +2974,7 @@ msgstr "ΑÏιστεÏά είναι ίση με τη δεξιά" #: plugins/cheatfind/init.lua:678 msgid "Left not equal to right" -msgstr "" +msgstr "ΑÏιστεÏά όχι ίση με τη δεξιά" #: plugins/cheatfind/init.lua:680 msgid "Left equal to right with bitmask" @@ -2983,15 +2986,15 @@ msgstr "ΑÏιστεÏά δεν είναι ίση με τη δεξιά με bitm #: plugins/cheatfind/init.lua:684 msgid "Left less than value" -msgstr "ΑÏιστεÏά λιγότεÏη από την αξία" +msgstr "ΑÏιστεÏά είναι λιγότεÏη από την αξία" #: plugins/cheatfind/init.lua:686 msgid "Left greater than value" -msgstr "ΑÏιστεÏά πεÏισσότεÏη από την αξία" +msgstr "ΑÏιστεÏά είναι πεÏισσότεÏη από την αξία" #: plugins/cheatfind/init.lua:688 msgid "Left equal to value" -msgstr "ΑÏιστεÏά ίση με την αξία" +msgstr "ΑÏιστεÏά είναι ίση με την αξία" #: plugins/cheatfind/init.lua:690 msgid "Left not equal to value" @@ -3003,7 +3006,7 @@ msgstr "Αξία" #: plugins/cheatfind/init.lua:714 msgid "Difference" -msgstr "" +msgstr "ΔιαφοÏά" #: plugins/cheatfind/init.lua:719 msgid "Any" @@ -3015,91 +3018,95 @@ msgstr "ΜοÏφή ΔεδομÎνων" #: plugins/cheatfind/init.lua:731 msgid "Test/Write Poke Value" -msgstr "" +msgstr "Δοκιμή/ΕγγÏαφή Αξίας Poke" #: plugins/cheatfind/init.lua:738 msgid "" "Use this if you want to poke the Slot 1 value (eg. You started with " "something but lost it)" msgstr "" +"ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke την αξία της θÎσης 1 (πχ. Ξεκίνησες με " +"κάτι αλλά το Îχασες)" #: plugins/cheatfind/init.lua:740 msgid "" "Use this if you want to poke the Last Slot value (eg. You started without an " "item but finally got it)" msgstr "" +"ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke την αξία της τελευταίας θÎσης (πχ. " +"Ξεκίνησες χωÏίς κάποιο αντικείμενο αλλά τελικά το βÏήκες)" #: plugins/cheatfind/init.lua:742 msgid "Use this if you want to poke 0x00" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x00" #: plugins/cheatfind/init.lua:744 msgid "Use this if you want to poke 0x01" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x01" #: plugins/cheatfind/init.lua:746 msgid "Use this if you want to poke 0x02" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x02" #: plugins/cheatfind/init.lua:748 msgid "Use this if you want to poke 0x03" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x03" #: plugins/cheatfind/init.lua:750 msgid "Use this if you want to poke 0x04" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x04" #: plugins/cheatfind/init.lua:752 msgid "Use this if you want to poke 0x05" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x05" #: plugins/cheatfind/init.lua:754 msgid "Use this if you want to poke 0x06" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x06" #: plugins/cheatfind/init.lua:756 msgid "Use this if you want to poke 0x07" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x07" #: plugins/cheatfind/init.lua:758 msgid "Use this if you want to poke 0x08" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x08" #: plugins/cheatfind/init.lua:760 msgid "Use this if you want to poke 0x09" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x09" #: plugins/cheatfind/init.lua:762 msgid "Use this if you want to poke 0x63 (Decimal 99)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x63 (Δεκαδικό 99)" #: plugins/cheatfind/init.lua:764 msgid "Use this if you want to poke 0x99 (BCD 99)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x99 (BCD 99)" #: plugins/cheatfind/init.lua:766 msgid "Use this if you want to poke 0xFF (Decimal 255)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0xFF (Δεκαδικό 255)" #: plugins/cheatfind/init.lua:768 msgid "Use this if you want to poke 0x3E7 (Decimal 999)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x3E7 (Δεκαδικό 999)" #: plugins/cheatfind/init.lua:770 msgid "Use this if you want to poke 0x999 (BCD 999)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x999 (BCD 999)" #: plugins/cheatfind/init.lua:772 msgid "Use this if you want to poke 0x270F (Decimal 9999)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x270F (Δεκαδικό 9999)" #: plugins/cheatfind/init.lua:774 msgid "Use this if you want to poke 0x9999 (BCD 9999)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0x9999 (BCD 9999)" #: plugins/cheatfind/init.lua:776 msgid "Use this if you want to poke 0xFFFF (Decimal 65535)" -msgstr "" +msgstr "ΧÏησιμοποιήστε αυτό αν θÎλετε να κάνετε poke το 0xFFFF (Δεκαδικό 65535)" #: plugins/cheatfind/init.lua:816 msgid "Undo last search -- #" @@ -3116,7 +3123,7 @@ msgstr "Όλα" #: plugins/cheatfind/init.lua:934 #, lua-format msgid "Test Cheat %08X:%02X" -msgstr "" +msgstr "Δοκιμή Cheat %08X:%02X" #: plugins/cheatfind/init.lua:974 msgid "Cheat engine not available" @@ -3163,40 +3170,3 @@ msgstr "Το όνομα της θÏÏας εισόδου αποθηκεÏτηκΠ#: plugins/portname/init.lua:172 msgid "Input ports" msgstr "ΘÏÏες εισόδου" - -#~ msgid "Data cleared and current state saved" -#~ msgstr "" -#~ "Τα δεδομÎνα Îχουν διαγÏαφεί και η Ï„ÏÎχουσα κατάσταση Îχει αποθηκευτεί" - -#~ msgid "Current state saved" -#~ msgstr "Η Ï„ÏÎχουσα κατάσταση Îχει αποθηκευτεί" - -#~ msgid "Save current -- #" -#~ msgstr "Αποθήκευση Ï„ÏÎχουσας -- #" - -#~ msgid "Compare" -#~ msgstr "ΣυγκÏίση" - -#~ msgid "Left operand" -#~ msgstr "ΑÏιστεÏός ÏŒÏος" - -#~ msgid "Current" -#~ msgstr "ΤÏÎχων" - -#~ msgid "Operator" -#~ msgstr "Τελεστής" - -#~ msgid "Left less than right, value is difference" -#~ msgstr "ΑÏιστεÏά μικÏότεÏη από τη δεξιά, η τιμή είναι η διαφοÏά" - -#~ msgid "Left greater than right, value is difference" -#~ msgstr "ΑÏιστεÏά μεγαλÏτεÏη από τη δεξιά, η τιμή είναι η διαφοÏά" - -#~ msgid "Left not equal to right, value is difference" -#~ msgstr "ΑÏιστεÏά δεν είναι ίση με τη δεξιά, η τιμή είναι η διαφοÏά" - -#~ msgid "Right operand" -#~ msgstr "Δεξιός ÏŒÏος" - -#~ msgid "Test cheat at addr %08X" -#~ msgstr "Δοκιμή cheat στην addr %08X" @@ -1625,14 +1625,14 @@ endif ifeq (posix,$(SHELLTYPE)) $(GENDIR)/version.cpp: $(GENDIR)/git_desc | $(GEN_FOLDERS) - @echo '#define BARE_BUILD_VERSION "0.207"' > $@ + @echo '#define BARE_BUILD_VERSION "0.208"' > $@ @echo 'extern const char bare_build_version[];' >> $@ @echo 'extern const char build_version[];' >> $@ @echo 'const char bare_build_version[] = BARE_BUILD_VERSION;' >> $@ @echo 'const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))";' >> $@ else $(GENDIR)/version.cpp: $(GENDIR)/git_desc - @echo #define BARE_BUILD_VERSION "0.207" > $@ + @echo #define BARE_BUILD_VERSION "0.208" > $@ @echo extern const char bare_build_version[]; >> $@ @echo extern const char build_version[]; >> $@ @echo const char bare_build_version[] = BARE_BUILD_VERSION; >> $@ diff --git a/nl_examples/2N6027.cpp b/nl_examples/2N6027.cpp new file mode 100644 index 00000000000..8b414317087 --- /dev/null +++ b/nl_examples/2N6027.cpp @@ -0,0 +1,101 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud + +#include "netlist/devices/net_lib.h" + +/* + * Run with + * ./nltool -t 1 -f nl_examples/2N6027.cpp -l PUT.A -l PUT.K -l PUT.G -v + */ + +/* ---------------------------------------------------------------------------- + * Library section header START + * ---------------------------------------------------------------------------*/ + +#ifndef __PLIB_PREPROCESSOR__ + +#define PUT_2N6027(_name) \ + NET_REGISTER_DEV(G501534_DIP, _name) + +//NETLIST_EXTERNAL(ex2N6027) +NETLIST_EXTERNAL(loc_lib) + +#endif + +/* ---------------------------------------------------------------------------- + * Library section header END + * ---------------------------------------------------------------------------*/ + +NETLIST_START(ex2N6027) + + /* This is a circuit pushing the solvers to the limits + * 50,000 maximum NR loops. + */ + SOLVER(Solver, 48000) + PARAM(Solver.ACCURACY, 1e-5) + PARAM(Solver.DYNAMIC_TS, 1) + PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-9) + PARAM(Solver.NR_LOOPS, 50000) + PARAM(Solver.METHOD, "MAT_CR") + + LOCAL_SOURCE(loc_lib) + INCLUDE(loc_lib) + + ANALOG_INPUT(VB, 10) + + PUT_2N6027(PUT) + + // Figure 3 from datasheet + RES(R1, RES_K(510)) + RES(R2, RES_K(16)) + RES(R3, RES_K(27)) + RES(R4, 20) + CAP(C, CAP_U(0.1)) + + NET_C(VB, R1.1, R2.1) + NET_C(R1.2, C.1, PUT.A) + NET_C(PUT.K, R4.1) + NET_C(PUT.G, R2.2, R3.1) + + NET_C(GND, C.2, R4.2, R3.2) + +NETLIST_END() + + +NETLIST_START(PUT_2N6027) + + NET_MODEL("2N6027_NPN NPN(IS=5E-15 VAF=100 IKF=0.3 ISE=1.85E-12 NE=1.45 RE=0.15 RC=0.15 CJE=7E-10 TF=0.6E-8 CJC=2.2E-10 TR=4.76E-8 XTB=3)") + NET_MODEL("2N6027_PNP PNP(IS=2E-15 VAF=100 IKF=0.3 ISE=1.90E-12 NE=1.5 RE=0.15 RC=0.15 CJE=7E-10 TF=1.6E-8 CJC=2.2E-10 TR=5.1E-8 XTB=3)") + + QBJT_EB(Q1, "2N6027_NPN") + QBJT_EB(Q2, "2N6027_PNP") + + /* The netlist transistor model currently doesn't support + * BE and BC capacitances. + * Adding those here significantly reduces NR loops. + * FIXME: Needs to be removed when added to the + * transistor EB model. + */ +#if 0 + CAP(CJE1, CAP_N(1)) + CAP(CJE2, CAP_N(1)) + + NET_C(CJE1.1, Q1.B) + NET_C(CJE1.2, Q1.E) + NET_C(CJE2.1, Q2.B) + NET_C(CJE2.2, Q2.E) +#endif + NET_C(Q1.C, Q2.B) + NET_C(Q1.B, Q2.C) + + ALIAS(G, Q2.B) + ALIAS(A, Q2.E) + ALIAS(K, Q1.E) + +NETLIST_END() + +NETLIST_START(loc_lib) + + LOCAL_LIB_ENTRY(PUT_2N6027) + +NETLIST_END() diff --git a/nl_examples/cmos_inverter.cpp b/nl_examples/cmos_inverter.cpp new file mode 100644 index 00000000000..e0936bfd3bc --- /dev/null +++ b/nl_examples/cmos_inverter.cpp @@ -0,0 +1,42 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * bjt.c + * + */ + + +#include "netlist/devices/net_lib.h" +#include "netlist/analog/nld_twoterm.h" + +NETLIST_START(cmos_inverter) + /* Standard stuff */ + + SOLVER(Solver, 48000) + PARAM(Solver.ACCURACY, 1e-7) + PARAM(Solver.NR_LOOPS, 5000) + PARAM(Solver.METHOD, "MAT_CR") + ANALOG_INPUT(V5, 5) + + VS(IN, 5) + PARAM(IN.FUNC, "T 5 *") + + MOSFET(P, "PMOS(VTO=-1.0 KP=2e-3 LAMBDA=2E-2)") + MOSFET(M, "NMOS(VTO=1.0 KP=2e-3 LAMBDA=2E-2)") + + NET_C(P.S, V5) + NET_C(P.D, M.D) + NET_C(GND, M.S, IN.N) + + NET_C(IN.P, M.G, P.G) + + // capacitance over D - S +#if 0 + CAP(C, CAP_N(1)) + NET_C(M.D, C.1) + NET_C(M.S, C.2) +#endif + LOG(log_G, M.G) + LOG(log_D, M.D) + +NETLIST_END() diff --git a/nl_examples/cmos_inverter_clk.cpp b/nl_examples/cmos_inverter_clk.cpp new file mode 100644 index 00000000000..e869a478a6c --- /dev/null +++ b/nl_examples/cmos_inverter_clk.cpp @@ -0,0 +1,63 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * cmos_inverter_clk + * + */ + + +#include "netlist/devices/net_lib.h" +#include "netlist/analog/nld_twoterm.h" + +#define USE_CLOCK (1) + +NETLIST_START(cmos_inverter_clk) + /* Standard stuff */ + + //SOLVER(Solver, 480000) + SOLVER(Solver, 1e5) + //SOLVER(Solver, 100000000000) + PARAM(Solver.ACCURACY, 1e-7 ) + PARAM(Solver.NR_LOOPS, 500000) + PARAM(Solver.DYNAMIC_TS, 1) + PARAM(Solver.DYNAMIC_LTE, 1e-5) + PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-8) + ANALOG_INPUT(V5, 5) + +// CLOCK(clk, 0.5e6) + +#if (USE_CLOCK) + CLOCK(V, 5000) + //CLOCK(V, 500000) +#else + VS(V, 5) + PARAM(V.FUNC, "T 5e6 *") +#endif + + MOSFET(P, "PMOS(VTO=-0.5 GAMMA=0.5 TOX=20n)") + MOSFET(M, "NMOS(VTO=0.5 GAMMA=0.5 TOX=20n)") + RES(RG, 1) + + NET_C(P.S, V5) + NET_C(P.D, M.D) +#if (USE_CLOCK) + NET_C(GND, M.S) + NET_C(V.Q, RG.1) +#else + NET_C(GND, M.S, V.N) + NET_C(V.P, RG.1) +#endif + NET_C(RG.2, M.G, P.G) + + // capacitance over D - S +#if 0 + CAP(C, CAP_N(1)) + NET_C(M.D, C.1) + NET_C(M.S, C.2) +#endif +#if 0 + LOG(log_G, M.G) + LOG(log_D, M.D) + LOGD(log_X, RG.1, RG.2) +#endif +NETLIST_END() diff --git a/nl_examples/nmos_fet.cpp b/nl_examples/nmos_fet.cpp new file mode 100644 index 00000000000..8a096af59ac --- /dev/null +++ b/nl_examples/nmos_fet.cpp @@ -0,0 +1,54 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * bjt.c + * + */ + + +#include "netlist/devices/net_lib.h" +#include "netlist/analog/nld_twoterm.h" + +NETLIST_START(nmos) + /* Standard stuff */ + + CLOCK(clk, 100) // 100 Hz + SOLVER(Solver, 48000) + PARAM(Solver.ACCURACY, 1e-9) + PARAM(Solver.NR_LOOPS, 50000) + PARAM(Solver.DYNAMIC_TS, 1) + PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-9) + ANALOG_INPUT(V5, 5) + ANALOG_INPUT(V3, 3.5) + + /* NMOS - example */ + + NET_MODEL("MM NMOS(VTO=1.0 KP=2e-3 LAMBDA=2E-2)") + MOSFET(M, "MM") + + RES(RB, 1000) + RES(RC, 10000) + + NET_C(RC.1, V5) + NET_C(RC.2, M.D) + NET_C(RB.1, clk) + //NET_C(RB.1, V3) + NET_C(RB.2, M.G) + NET_C(M.S, GND) + + // put some load on M.D + + RES(RCE, 150000) + NET_C(RCE.1, M.D) + NET_C(RCE.2, GND) + + // capacitance over G - S + + CAP(C, CAP_N(1)) + NET_C(M.D, C.1) + NET_C(M.S, C.2) + + LOG(log_G, M.G) + LOG(log_D, M.D) + +NETLIST_END() diff --git a/scripts/build/complay.py b/scripts/build/complay.py index dff981e65c9..b89ca98e19a 100644 --- a/scripts/build/complay.py +++ b/scripts/build/complay.py @@ -455,10 +455,18 @@ class LayoutChecker(Minifyer): self.handleError('Element %s has inputtag attribute without inputmask attribute' % (name, )) self.checkTag(attrs['inputtag'], name, 'inputtag') elif 'inputmask' in attrs: - self.handleError('Element %s has inputmask attribute without inputtag attirbute' % (name, )) + self.handleError('Element %s has inputmask attribute without inputtag attribute' % (name, )) inputmask = self.checkIntAttribute(name, attrs, 'inputmask', None) if (inputmask is not None) and (0 == inputmask): self.handleError('Element %s has attribute inputmask "%s" is zero' % (name, attrs['inputmask'])) + inputraw = self.checkIntAttribute(name, attrs, 'inputraw', None) + if (inputraw is not None): + if 'inputmask' not in attrs: + self.handleError('Element %s has inputraw attribute without inputmask attribute' % (name, )) + if 'inputtag' not in attrs: + self.handleError('Element %s has inputraw attribute without inputtag attribute' % (name, )) + if ((0 > inputraw) or (1 < inputraw)): + self.handleError('Element %s attribute inputraw "%s" not in valid range 0-1' % (name, attrs['inputraw'])) self.handlers.append((self.objectStartHandler, self.objectEndHandler)) self.have_bounds.append(False) self.have_orientation.append(False) diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 8f292e082af..2ecf90c0ace 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -266,6 +266,10 @@ if (BUSES["ASTROCADE"]~=null) then MAME_DIR .. "src/devices/bus/astrocde/joy.h", MAME_DIR .. "src/devices/bus/astrocde/cassette.cpp", MAME_DIR .. "src/devices/bus/astrocde/cassette.h", + MAME_DIR .. "src/devices/bus/astrocde/accessory.cpp", + MAME_DIR .. "src/devices/bus/astrocde/accessory.h", + MAME_DIR .. "src/devices/bus/astrocde/lightpen.cpp", + MAME_DIR .. "src/devices/bus/astrocde/lightpen.h", } end @@ -405,6 +409,8 @@ if (BUSES["BBC_TUBE"]~=null) then files { MAME_DIR .. "src/devices/bus/bbc/tube/tube.cpp", MAME_DIR .. "src/devices/bus/bbc/tube/tube.h", + MAME_DIR .. "src/devices/bus/bbc/tube/tube_32016.cpp", + MAME_DIR .. "src/devices/bus/bbc/tube/tube_32016.h", MAME_DIR .. "src/devices/bus/bbc/tube/tube_6502.cpp", MAME_DIR .. "src/devices/bus/bbc/tube/tube_6502.h", MAME_DIR .. "src/devices/bus/bbc/tube/tube_80186.cpp", @@ -1228,8 +1234,12 @@ if (BUSES["ISA"]~=null) then MAME_DIR .. "src/devices/bus/isa/xtide.h", MAME_DIR .. "src/devices/bus/isa/side116.cpp", MAME_DIR .. "src/devices/bus/isa/side116.h", - MAME_DIR .. "src/devices/bus/isa/aha1542.cpp", - MAME_DIR .. "src/devices/bus/isa/aha1542.h", + MAME_DIR .. "src/devices/bus/isa/aha1542b.cpp", + MAME_DIR .. "src/devices/bus/isa/aha1542b.h", + MAME_DIR .. "src/devices/bus/isa/aha1542c.cpp", + MAME_DIR .. "src/devices/bus/isa/aha1542c.h", + MAME_DIR .. "src/devices/bus/isa/aha174x.cpp", + MAME_DIR .. "src/devices/bus/isa/aha174x.h", MAME_DIR .. "src/devices/bus/isa/wd1002a_wx1.cpp", MAME_DIR .. "src/devices/bus/isa/wd1002a_wx1.h", MAME_DIR .. "src/devices/bus/isa/wd1007a.cpp", @@ -1308,6 +1318,10 @@ if (BUSES["ISA"]~=null) then MAME_DIR .. "src/devices/bus/isa/np600.h", MAME_DIR .. "src/devices/bus/isa/bt54x.cpp", MAME_DIR .. "src/devices/bus/isa/bt54x.h", + MAME_DIR .. "src/devices/bus/isa/dcb.cpp", + MAME_DIR .. "src/devices/bus/isa/dcb.h", + MAME_DIR .. "src/devices/bus/isa/ultra12f.cpp", + MAME_DIR .. "src/devices/bus/isa/ultra12f.h", } end @@ -3309,6 +3323,8 @@ if (BUSES["SPECTRUM"]~=null) then MAME_DIR .. "src/devices/bus/spectrum/mface.h", MAME_DIR .. "src/devices/bus/spectrum/mikroplus.cpp", MAME_DIR .. "src/devices/bus/spectrum/mikroplus.h", + MAME_DIR .. "src/devices/bus/spectrum/opus.cpp", + MAME_DIR .. "src/devices/bus/spectrum/opus.h", MAME_DIR .. "src/devices/bus/spectrum/plus2test.cpp", MAME_DIR .. "src/devices/bus/spectrum/plus2test.h", MAME_DIR .. "src/devices/bus/spectrum/protek.cpp", diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index 090093df856..8c461e0ce16 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -2818,3 +2818,37 @@ if (CPUS["HPC"]~=null or _OPTIONS["with-tools"]) then table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/hpc/hpcdasm.cpp") table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/hpc/hpcdasm.h") end + +-------------------------------------------------- +-- Yamaha Multiple Effects Generator +--@src/devices/sound/meg.h,CPUS["MEG"] = true +-------------------------------------------------- + +if (CPUS["MEG"]~=null) then + files { + MAME_DIR .. "src/devices/sound/meg.cpp", + MAME_DIR .. "src/devices/sound/meg.h", + } +end + +if (CPUS["MEG"]~=null or _OPTIONS["with-tools"]) then + table.insert(disasm_files , MAME_DIR .. "src/devices/sound/megd.cpp") + table.insert(disasm_files , MAME_DIR .. "src/devices/sound/megd.h") +end + +-------------------------------------------------- +-- National Semiconductor NS32000 series +--@src/devices/cpu/ns32000/ns32000.h,CPUS["NS32000"] = true +-------------------------------------------------- + +if (CPUS["NS32000"]~=null) then + files { + MAME_DIR .. "src/devices/cpu/ns32000/ns32000.cpp", + MAME_DIR .. "src/devices/cpu/ns32000/ns32000.h", + } +end + +if (CPUS["NS32000"]~=null or _OPTIONS["with-tools"]) then + table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/ns32000/ns32000dasm.cpp") + table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/ns32000/ns32000dasm.h") +end diff --git a/scripts/src/formats.lua b/scripts/src/formats.lua index 071982e83fe..9e7a2a1eb5a 100644 --- a/scripts/src/formats.lua +++ b/scripts/src/formats.lua @@ -1231,6 +1231,18 @@ end -------------------------------------------------- -- +--@src/lib/formats/opd_dsk.h,FORMATS["OPD_DSK"] = true +-------------------------------------------------- + +if (FORMATS["OPD_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/opd_dsk.cpp", + MAME_DIR.. "src/lib/formats/opd_dsk.h", + } +end + +-------------------------------------------------- +-- --@src/lib/formats/orao_cas.h,FORMATS["ORAO_CAS"] = true -------------------------------------------------- diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua index 54810e56038..2ec028ceb85 100644 --- a/scripts/src/machine.lua +++ b/scripts/src/machine.lua @@ -2624,8 +2624,16 @@ if (MACHINES["SPG2XX"]~=null) then MAME_DIR .. "src/devices/machine/spg2xx.h", MAME_DIR .. "src/devices/machine/spg2xx_audio.cpp", MAME_DIR .. "src/devices/machine/spg2xx_audio.h", + MAME_DIR .. "src/devices/machine/spg2xx_io.cpp", + MAME_DIR .. "src/devices/machine/spg2xx_io.h", + MAME_DIR .. "src/devices/machine/spg2xx_sysdma.cpp", + MAME_DIR .. "src/devices/machine/spg2xx_sysdma.h", + MAME_DIR .. "src/devices/machine/spg2xx_video.cpp", + MAME_DIR .. "src/devices/machine/spg2xx_video.h", MAME_DIR .. "src/devices/machine/spg110.cpp", MAME_DIR .. "src/devices/machine/spg110.h", + MAME_DIR .. "src/devices/machine/spg110_video.cpp", + MAME_DIR .. "src/devices/machine/spg110_video.h", } end diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 09575cacffc..e24eb2d26ef 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -85,6 +85,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/tools/nl_convert.h", MAME_DIR .. "src/lib/netlist/analog/nld_bjt.cpp", MAME_DIR .. "src/lib/netlist/analog/nld_bjt.h", + MAME_DIR .. "src/lib/netlist/analog/nld_mosfet.cpp", + MAME_DIR .. "src/lib/netlist/analog/nld_mosfet.h", MAME_DIR .. "src/lib/netlist/analog/nlid_fourterm.cpp", MAME_DIR .. "src/lib/netlist/analog/nlid_fourterm.h", MAME_DIR .. "src/lib/netlist/analog/nld_fourterm.h", diff --git a/scripts/src/sound.lua b/scripts/src/sound.lua index f2d6c9b979d..73c6a852e44 100644 --- a/scripts/src/sound.lua +++ b/scripts/src/sound.lua @@ -590,6 +590,7 @@ end --------------------------------------------------- -- Namco custom sound chips --@src/devices/sound/namco.h,SOUNDS["NAMCO"] = true +--@src/devices/sound/namco_163.h,SOUNDS["NAMCO_163"] = true --@src/devices/sound/n63701x.h,SOUNDS["NAMCO_63701X"] = true --@src/devices/sound/c140.h,SOUNDS["C140"] = true --@src/devices/sound/c352.h,SOUNDS["C352"] = true @@ -602,6 +603,13 @@ if (SOUNDS["NAMCO"]~=null or SOUNDS["NAMCO_15XX"]~=null or SOUNDS["NAMCO_CUS30"] } end +if (SOUNDS["NAMCO_163"]~=null) then + files { + MAME_DIR .. "src/devices/sound/namco_163.cpp", + MAME_DIR .. "src/devices/sound/namco_163.h", + } +end + if (SOUNDS["NAMCO_63701X"]~=null) then files { MAME_DIR .. "src/devices/sound/n63701x.cpp", diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 2577c8a9713..b80506d399c 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -173,6 +173,7 @@ SOUNDS["NAMCO_15XX"] = true SOUNDS["NAMCO_CUS30"] = true SOUNDS["NAMCO_52XX"] = true SOUNDS["NAMCO_63701X"] = true +--SOUNDS["NAMCO_163"] = true SOUNDS["T6W28"] = true SOUNDS["SNKWAVE"] = true SOUNDS["C140"] = true @@ -639,6 +640,7 @@ MACHINES["GENPC"] = true MACHINES["GEN_LATCH"] = true MACHINES["WATCHDOG"] = true MACHINES["SMARTMEDIA"] = true +MACHINES["I82586"] = true MACHINES["INPUT_MERGER"] = true MACHINES["K054321"] = true MACHINES["ADC0844"] = true @@ -655,6 +657,7 @@ MACHINES["PS2INTC"] = true --MACHINES["IOPINTC"] = true --MACHINES["IOPSIO2"] = true --MACHINES["IOPTIMER"] = true +MACHINES["AIC6250"] = true -------------------------------------------------- -- specify available bus cores @@ -4871,6 +4874,7 @@ files { MAME_DIR .. "src/mame/drivers/ice_tbd.cpp", MAME_DIR .. "src/mame/drivers/umipoker.cpp", MAME_DIR .. "src/mame/drivers/unkhorse.cpp", + MAME_DIR .. "src/mame/drivers/unkpoker.cpp", MAME_DIR .. "src/mame/drivers/usbilliards.cpp", MAME_DIR .. "src/mame/drivers/usgames.cpp", MAME_DIR .. "src/mame/includes/usgames.h", diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 4a1f7b9eeb1..036b63c330b 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -137,8 +137,10 @@ CPUS["NANOPROCESSOR"] = true CPUS["CLIPPER"] = true CPUS["CAPRICORN"] = true CPUS["ALPHA"] = true +CPUS["NS32000"] = true --CPUS["DSPP"] = true ---CPUS["HPC"] = true +CPUS["HPC"] = true +CPUS["MEG"] = true -------------------------------------------------- -- specify available sound cores; some of these are @@ -179,6 +181,7 @@ SOUNDS["ASTROCADE"] = true --SOUNDS["NAMCO_CUS30"] = true --SOUNDS["NAMCO_52XX"] = true --SOUNDS["NAMCO_63701X"] = true +SOUNDS["NAMCO_163"] = true SOUNDS["T6W28"] = true --SOUNDS["SNKWAVE"] = true --SOUNDS["C140"] = true @@ -866,6 +869,7 @@ FORMATS["APPLIX_DSK"] = true FORMATS["APRIDISK"] = true FORMATS["AP_DSK35"] = true FORMATS["ASST128_DSK"] = true +FORMATS["ASTROCADE_WAV"] = true FORMATS["ATARI_DSK"] = true FORMATS["ATOM_DSK"] = true FORMATS["ATOM_TAP"] = true @@ -942,6 +946,7 @@ FORMATS["NASCOM_DSK"] = true FORMATS["NASLITE_DSK"] = true FORMATS["NES_DSK"] = true FORMATS["NFD_DSK"] = true +FORMATS["OPD_DSK"] = true FORMATS["ORAO_CAS"] = true FORMATS["ORIC_DSK"] = true FORMATS["ORIC_TAP"] = true @@ -1557,7 +1562,6 @@ files { MAME_DIR .. "src/mame/drivers/apollo.cpp", MAME_DIR .. "src/mame/includes/apollo.h", MAME_DIR .. "src/mame/machine/apollo.cpp", - MAME_DIR .. "src/mame/machine/apollo_dbg.cpp", MAME_DIR .. "src/mame/machine/apollo_kbd.cpp", MAME_DIR .. "src/mame/machine/apollo_kbd.h", MAME_DIR .. "src/mame/video/apollo.cpp", @@ -1852,6 +1856,7 @@ files { MAME_DIR .. "src/mame/includes/fidelbase.h", MAME_DIR .. "src/mame/drivers/fidel_as12.cpp", MAME_DIR .. "src/mame/drivers/fidel_card.cpp", + MAME_DIR .. "src/mame/drivers/fidel_cc1.cpp", MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp", MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp", MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp", @@ -3039,7 +3044,6 @@ files { createMESSProjects(_target, _subtarget, "segacons") files { - MAME_DIR .. "src/mame/drivers/apbeena.cpp", MAME_DIR .. "src/mame/drivers/dccons.cpp", MAME_DIR .. "src/mame/includes/dccons.h", MAME_DIR .. "src/mame/machine/dccons.cpp", @@ -3543,9 +3547,16 @@ files { MAME_DIR .. "src/mame/machine/xavix_madfb_ball.h", MAME_DIR .. "src/mame/machine/xavix_io.cpp", MAME_DIR .. "src/mame/machine/xavix_io.h", + MAME_DIR .. "src/mame/machine/xavix_adc.cpp", + MAME_DIR .. "src/mame/machine/xavix_adc.h", + MAME_DIR .. "src/mame/machine/xavix_anport.h", + MAME_DIR .. "src/mame/machine/xavix_anport.cpp", + MAME_DIR .. "src/mame/machine/xavix_math.h", + MAME_DIR .. "src/mame/machine/xavix_math.cpp", MAME_DIR .. "src/mame/machine/xavix2002_io.cpp", MAME_DIR .. "src/mame/machine/xavix2002_io.h", MAME_DIR .. "src/mame/drivers/xavix2.cpp", + MAME_DIR .. "src/mame/drivers/titan_soc.cpp", } createMESSProjects(_target, _subtarget, "ultimachine") @@ -3766,6 +3777,7 @@ files { MAME_DIR .. "src/mame/drivers/aci_borisdpl.cpp", MAME_DIR .. "src/mame/drivers/adm23.cpp", MAME_DIR .. "src/mame/drivers/adm31.cpp", + MAME_DIR .. "src/mame/drivers/adm36.cpp", MAME_DIR .. "src/mame/drivers/akaiax80.cpp", MAME_DIR .. "src/mame/drivers/alcat7100.cpp", MAME_DIR .. "src/mame/drivers/alesis_qs.cpp", diff --git a/src/devices/bus/a2bus/a2scsi.cpp b/src/devices/bus/a2bus/a2scsi.cpp index 014414e7e98..988ebfd0096 100644 --- a/src/devices/bus/a2bus/a2scsi.cpp +++ b/src/devices/bus/a2bus/a2scsi.cpp @@ -74,7 +74,7 @@ void a2bus_scsi_device::device_add_mconfig(machine_config &config) { NSCSI_BUS(config, m_scsibus); NSCSI_CONNECTOR(config, "scsibus:0", scsi_devices, nullptr, false); - NSCSI_CONNECTOR(config, "scsibus:1", scsi_devices, nullptr, false); + NSCSI_CONNECTOR(config, "scsibus:1", scsi_devices, "cdrom", false); NSCSI_CONNECTOR(config, "scsibus:2", scsi_devices, nullptr, false); NSCSI_CONNECTOR(config, "scsibus:3", scsi_devices, nullptr, false); NSCSI_CONNECTOR(config, "scsibus:4", scsi_devices, nullptr, false); diff --git a/src/devices/bus/a2bus/a2zipdrive.cpp b/src/devices/bus/a2bus/a2zipdrive.cpp index aaeb6ed6219..41034fab231 100644 --- a/src/devices/bus/a2bus/a2zipdrive.cpp +++ b/src/devices/bus/a2bus/a2zipdrive.cpp @@ -2,16 +2,19 @@ // copyright-holders:R. Belmont /********************************************************************* - a2zipdrive.c + a2zipdrive.cpp ZIP Technologies ZipDrive IDE card + Parsons Engineering Focus Drive IDE card - NOTE: No known dump exists of the formatter utility and the + These cards are very, very similar. Maybe Parsons designed both? + + NOTE: No known dump exists of the Zip formatter utility and the format of the custom partition record (block 0) that the card expects has not yet been determined, so this is largely untested and will work only with a drive dump from real h/w. - PLEASE use it only on a backup copy of said dump and contact MESSdev + PLEASE use it only on a backup copy of said dump and contact MAMEdev if you have one! Partition block format: @@ -29,6 +32,7 @@ //************************************************************************** DEFINE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device, "a2zipdrv", "Zip Technologies ZipDrive") +DEFINE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device, "a2focdrv", "Parsons Engineering Focus Drive") #define ZIPDRIVE_ROM_REGION "zipdrive_rom" #define ZIPDRIVE_ATA_TAG "zipdrive_ata" @@ -38,6 +42,11 @@ ROM_START( zipdrive ) ROM_LOAD( "zip drive - rom.bin", 0x000000, 0x002000, CRC(fd800a40) SHA1(46636bfed88c864139e3d2826661908a8c07c459) ) ROM_END +ROM_START( focusdrive ) + ROM_REGION(0x2000, ZIPDRIVE_ROM_REGION, 0) + ROM_LOAD( "focusrom.bin", 0x001000, 0x001000, CRC(0fd0ba25) SHA1(acf414aa145fcfa1c12aca0269f1f7ada82f1c04) ) +ROM_END + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -60,6 +69,11 @@ const tiny_rom_entry *a2bus_zipdrivebase_device::device_rom_region() const return ROM_NAME( zipdrive ); } +const tiny_rom_entry *a2bus_focusdrive_device::device_rom_region() const +{ + return ROM_NAME( focusdrive ); +} + //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -76,6 +90,11 @@ a2bus_zipdrive_device::a2bus_zipdrive_device(const machine_config &mconfig, cons { } +a2bus_focusdrive_device::a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + a2bus_zipdrivebase_device(mconfig, A2BUS_FOCUSDRIVE, tag, owner, clock) +{ +} + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -89,9 +108,12 @@ void a2bus_zipdrivebase_device::device_start() void a2bus_zipdrivebase_device::device_reset() { - popmessage("Zip Drive partition format unknown, contact MESSdev if you have the software or a drive dump!"); } +void a2bus_focusdrive_device::device_reset() +{ + m_rom[0x1c6c] = 0x03; // eat 3 IDE words here instead of 1, fixes a bug? in the original ROM +} /*------------------------------------------------- read_c0nx - called for reads from this card's c0nx space @@ -112,7 +134,7 @@ uint8_t a2bus_zipdrivebase_device::read_c0nx(uint8_t offset) return m_ata->read_cs0(offset, 0xff); case 8: // data port - m_lastdata = m_ata->read_cs0(offset); + m_lastdata = m_ata->read_cs0(offset, 0xffff); // printf("%04x @ IDE data\n", m_lastdata); return m_lastdata&0xff; @@ -120,13 +142,42 @@ uint8_t a2bus_zipdrivebase_device::read_c0nx(uint8_t offset) return (m_lastdata>>8) & 0xff; default: - logerror("a2zipdrive: unhandled read @ C0n%x\n", offset); + logerror("unhandled read @ C0n%x\n", offset); break; } return 0xff; } +uint8_t a2bus_focusdrive_device::read_c0nx(uint8_t offset) +{ + switch (offset) + { + case 8: + case 9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + return m_ata->read_cs0(offset&7, 0xff); + + case 0: // data port + m_lastdata = m_ata->read_cs0(offset, 0xffff); + //printf("%04x @ IDE data\n", m_lastdata); + return m_lastdata&0xff; + + case 1: + return (m_lastdata>>8) & 0xff; + + default: + logerror("unhandled read @ C0n%x\n", offset); + break; + } + + return 0xff; +} /*------------------------------------------------- write_c0nx - called for writes to this card's c0nx space @@ -157,7 +208,7 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data) // printf("%02x to IDE data hi\n", data); m_lastdata &= 0x00ff; m_lastdata |= (data << 8); - m_ata->write_cs0(0, m_lastdata); + m_ata->write_cs0(0, m_lastdata, 0xffff); break; default: @@ -166,6 +217,48 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data) } } +void a2bus_focusdrive_device::write_c0nx(uint8_t offset, uint8_t data) +{ + switch (offset) + { + case 8: + case 9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + // due to a bug in the 6502 firmware, eat data if DRQ is set + #if 0 + while (m_ata->read_cs0(7, 0xff) & 0x08) + { + m_ata->read_cs0(0, 0xffff); + printf("eating 2 bytes to clear DRQ\n"); + } + #endif +// printf("%02x to IDE controller @ %x\n", data, offset); + m_ata->write_cs0(offset & 7, data, 0xff); + break; + + case 0: +// printf("%02x to IDE data lo\n", data); + m_lastdata = data; + break; + + case 1: +// printf("%02x to IDE data hi\n", data); + m_lastdata &= 0x00ff; + m_lastdata |= (data << 8); + m_ata->write_cs0(0, m_lastdata, 0xffff); + break; + + default: + printf("focus: write %02x @ unhandled C0n%x\n", data, offset); + break; + } +} + /*------------------------------------------------- read_cnxx - called for reads from this card's cnxx space -------------------------------------------------*/ diff --git a/src/devices/bus/a2bus/a2zipdrive.h b/src/devices/bus/a2bus/a2zipdrive.h index 8187e04cdd2..9e3e68e79f2 100644 --- a/src/devices/bus/a2bus/a2zipdrive.h +++ b/src/devices/bus/a2bus/a2zipdrive.h @@ -5,8 +5,9 @@ a2zipdrive.h ZIP Technologies ZipDrive IDE card + Parsons Engineering Focus Drive IDE card - See important NOTE at the top of a2zipdrive.c! + See important NOTE at the top of a2zipdrive.cpp! *********************************************************************/ @@ -44,8 +45,6 @@ protected: required_device<ata_interface_device> m_ata; uint8_t *m_rom; - -private: uint16_t m_lastdata; }; @@ -55,7 +54,20 @@ public: a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; +class a2bus_focusdrive_device : public a2bus_zipdrivebase_device +{ +public: + a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_reset() override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; +}; + // device type definition DECLARE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device) +DECLARE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device) #endif // MAME_BUS_A2BUS_ZIPDRIVE_H diff --git a/src/devices/bus/astrocde/accessory.cpp b/src/devices/bus/astrocde/accessory.cpp new file mode 100644 index 00000000000..fe7727b855d --- /dev/null +++ b/src/devices/bus/astrocde/accessory.cpp @@ -0,0 +1,112 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz + +#include "emu.h" +#include "accessory.h" + +#include <cassert> + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(ASTROCADE_ACCESSORY_PORT, astrocade_accessory_port_device, "astrocade_accessory_port", "Bally Astrocade Accessory Port") + + +//************************************************************************** +// Bally Astrocade accessory interface +//************************************************************************** + +device_astrocade_accessory_interface::device_astrocade_accessory_interface(const machine_config &mconfig, device_t &device) + : device_slot_card_interface(mconfig, device) + , m_port(dynamic_cast<astrocade_accessory_port_device *>(device.owner())) +{ +} + +device_astrocade_accessory_interface::~device_astrocade_accessory_interface() +{ +} + +void device_astrocade_accessory_interface::interface_validity_check(validity_checker &valid) const +{ + device_slot_card_interface::interface_validity_check(valid); + + if (device().owner() && !m_port) + { + osd_printf_error("Owner device %s (%s) is not an astrocade_accessory_port_device\n", device().owner()->tag(), device().owner()->name()); + } +} + +void device_astrocade_accessory_interface::interface_pre_start() +{ + device_slot_card_interface::interface_pre_start(); + + if (m_port && !m_port->started()) + throw device_missing_dependencies(); +} + + +//************************************************************************** +// Bally Astrocade accessory port +//************************************************************************** + +astrocade_accessory_port_device::astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, ASTROCADE_ACCESSORY_PORT, tag, owner, clock) + , device_slot_interface(mconfig, *this) + , m_ltpen(0) + , m_ltpen_handler(*this) + , m_screen(*this, finder_base::DUMMY_TAG) + , m_device(nullptr) +{ +} + +astrocade_accessory_port_device::~astrocade_accessory_port_device() +{ +} + +void astrocade_accessory_port_device::device_validity_check(validity_checker &valid) const +{ + device_t *const card(get_card_device()); + if (card && !dynamic_cast<device_astrocade_accessory_interface *>(card)) + { + osd_printf_error("Card device %s (%s) does not implement device_astrocade_accessory_interface\n", card->tag(), card->name()); + } +} + +void astrocade_accessory_port_device::device_resolve_objects() +{ + device_astrocade_accessory_interface *const card(dynamic_cast<device_astrocade_accessory_interface *>(get_card_device())); + if (card) + { + m_device = card; + m_device->set_screen(m_screen); + } + + m_ltpen_handler.resolve_safe(); +} + +void astrocade_accessory_port_device::device_start() +{ + device_t *const card(get_card_device()); + if (card) + { + if (!m_device) + { + throw emu_fatalerror("astrocade_accessory_port_device: card device %s (%s) does not implement device_astrocade_accessory_interface\n", card->tag(), card->name()); + } + } + + save_item(NAME(m_ltpen)); + + m_ltpen = 0; + + m_ltpen_handler(0); +} + +#include "lightpen.h" + +void astrocade_accessories(device_slot_interface &device) +{ + device.option_add("lightpen", ASTROCADE_LIGHTPEN); +} diff --git a/src/devices/bus/astrocde/accessory.h b/src/devices/bus/astrocde/accessory.h new file mode 100644 index 00000000000..d745e464cd2 --- /dev/null +++ b/src/devices/bus/astrocde/accessory.h @@ -0,0 +1,99 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +#ifndef MAME_BUS_ASTROCDE_ACCESSORY_H +#define MAME_BUS_ASTROCDE_ACCESSORY_H + +#pragma once + +#include "screen.h" + + +/*************************************************************************** + FORWARD DECLARATIONS + ***************************************************************************/ + +class device_astrocade_accessory_interface; + + +/*************************************************************************** + TYPE DEFINITIONS + ***************************************************************************/ + +// ======================> astrocade_accessory_port_device + +class astrocade_accessory_port_device : public device_t, public device_slot_interface +{ +public: + // construction/destruction + template <typename T, typename U> + astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&screen_tag, U &&opts, char const *dflt) + : astrocade_accessory_port_device(mconfig, tag, owner, 0U) + { + m_screen.set_tag(std::forward<T>(screen_tag)); + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } + astrocade_accessory_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U); + virtual ~astrocade_accessory_port_device(); + + auto ltpen_handler() { return m_ltpen_handler.bind(); } + +protected: + // device_t implementation + virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD; + virtual void device_resolve_objects() override; + virtual void device_start() override; + + int m_ltpen; + devcb_write_line m_ltpen_handler; + required_device<screen_device> m_screen; + +private: + device_astrocade_accessory_interface *m_device; + + friend class device_astrocade_accessory_interface; +}; + + +// ======================> device_astrocade_accessory_interface + +class device_astrocade_accessory_interface : public device_slot_card_interface +{ +public: + virtual ~device_astrocade_accessory_interface(); + + DECLARE_WRITE_LINE_MEMBER( write_ltpen ) { m_port->m_ltpen = state; m_port->m_ltpen_handler(state); } + +protected: + device_astrocade_accessory_interface(machine_config const &mconfig, device_t &device); + + // device_interface implementation + virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD; + virtual void interface_pre_start() override; + + void set_screen(screen_device *screen) { m_screen = screen; } + screen_device *m_screen; + +private: + astrocade_accessory_port_device *const m_port; + + friend class astrocade_accessory_port_device; +}; + + +/*************************************************************************** + FUNCTIONS + ***************************************************************************/ + +void astrocade_accessories(device_slot_interface &device); + + +/*************************************************************************** + DEVICE TYPES + ***************************************************************************/ + +DECLARE_DEVICE_TYPE(ASTROCADE_ACCESSORY_PORT, astrocade_accessory_port_device) + +#endif // MAME_BUS_ASTROCDE_ACCESSORY_H diff --git a/src/devices/bus/astrocde/cassette.cpp b/src/devices/bus/astrocde/cassette.cpp index 789b0d7e175..3e4cc80deb8 100644 --- a/src/devices/bus/astrocde/cassette.cpp +++ b/src/devices/bus/astrocde/cassette.cpp @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Ryan Holtz +// +// Decoding is done in hardware by an external box, and decoded bits are fed to bit 0 of the controller port, +// with sync bits being fed to bit 1. The current HLE is not remotely accurate to hardware, but works. #include "emu.h" #include "cassette.h" @@ -26,22 +29,102 @@ astrocade_cassette_device::~astrocade_cassette_device() { } +void astrocade_cassette_device::device_start() +{ + save_item(NAME(m_cass_wave)); + save_item(NAME(m_cass_delta)); + save_item(NAME(m_cass_wave_ticks)); + save_item(NAME(m_cass_cycles)); + save_item(NAME(m_cass_mark)); +} + +void astrocade_cassette_device::device_reset() +{ + m_cass_wave = 0.0; + m_cass_delta = 0.0; + m_cass_wave_ticks = 0; + m_cass_cycles = 0; + m_cass_mark = false; +} + uint8_t astrocade_cassette_device::read_handle() { - uint8_t data = m_cassette->input() > 0.0 ? 0 : 1; - logerror("%s: Cassette Handle Read: %d\n", machine().describe_context(), data); - return data; + if (m_cass_data.size()) + { + const uint8_t data = m_cass_data.front(); + m_cass_data.pop(); + return data; + } + return 0; } uint8_t astrocade_cassette_device::read_knob() { - logerror("%s: Cassette Knob Read\n", machine().describe_context()); return 0; } +TIMER_DEVICE_CALLBACK_MEMBER(astrocade_cassette_device::check_cassette_wave) +{ + if (m_cassette->get_state() & CASSETTE_MOTOR_DISABLED) + return; + + double old_cass_wave = m_cass_wave; + m_cass_wave = m_cassette->input(); + + bool cycled = false; + if (old_cass_wave != m_cass_wave) + { + double old_delta = m_cass_delta; + m_cass_delta = m_cass_wave - old_cass_wave; + if (old_delta < 0.0 && m_cass_delta > 0.0) + { + cycled = true; + } + } + + if (cycled) + { + m_cass_mark = m_cass_wave_ticks <= 30; + + m_cass_wave_ticks = 0; + + m_cass_cycles++; + if (m_cass_mark) + { + if (m_cass_cycles >= 8) + { + m_cass_data.push(1); + m_cass_cycles = 0; + } + } + else + { + if (m_cass_cycles >= 4) + { + m_cass_data.push(0); + m_cass_cycles = 0; + } + } + } + + m_cass_wave_ticks++; +} + +TIMER_DEVICE_CALLBACK_MEMBER(astrocade_cassette_device::pulse_cassette_clock) +{ + if (m_cass_data.size()) + { + write_ltpen(1); + write_ltpen(0); + } +} + void astrocade_cassette_device::device_add_mconfig(machine_config &config) { CASSETTE(config, m_cassette); m_cassette->set_default_state(CASSETTE_STOPPED); m_cassette->set_interface("astrocade_cass"); + + TIMER(config, "kcs_hle").configure_periodic(FUNC(astrocade_cassette_device::check_cassette_wave), attotime::from_hz(48000)); + TIMER(config, "kcs_clk").configure_periodic(FUNC(astrocade_cassette_device::pulse_cassette_clock), attotime::from_hz(300)); } diff --git a/src/devices/bus/astrocde/cassette.h b/src/devices/bus/astrocde/cassette.h index bcbfd697a50..d36e8a1bfd7 100644 --- a/src/devices/bus/astrocde/cassette.h +++ b/src/devices/bus/astrocde/cassette.h @@ -7,6 +7,10 @@ #include "ctrl.h" #include "imagedev/cassette.h" +#include "machine/timer.h" + +#include <queue> + /*************************************************************************** TYPE DEFINITIONS @@ -15,7 +19,7 @@ // ======================> astrocade_cassette_device class astrocade_cassette_device : public device_t, - public device_astrocade_ctrl_interface + public device_astrocade_ctrl_interface { public: static constexpr feature_type imperfect_features() { return feature::TAPE; } @@ -30,11 +34,21 @@ public: protected: // device_t implementation - virtual void device_start() override { } + virtual void device_start() override; + virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; + TIMER_DEVICE_CALLBACK_MEMBER(check_cassette_wave); + TIMER_DEVICE_CALLBACK_MEMBER(pulse_cassette_clock); + private: required_device<cassette_image_device> m_cassette; + double m_cass_wave; + double m_cass_delta; + uint32_t m_cass_wave_ticks; + uint32_t m_cass_cycles; + bool m_cass_mark; + std::queue<uint8_t> m_cass_data; }; diff --git a/src/devices/bus/astrocde/ctrl.cpp b/src/devices/bus/astrocde/ctrl.cpp index 16b8537eae4..89cd60ca6a5 100644 --- a/src/devices/bus/astrocde/ctrl.cpp +++ b/src/devices/bus/astrocde/ctrl.cpp @@ -54,6 +54,9 @@ void device_astrocade_ctrl_interface::interface_pre_start() astrocade_ctrl_port_device::astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ASTROCADE_CTRL_PORT, tag, owner, clock) , device_slot_interface(mconfig, *this) + , m_ltpen(0) + , m_ltpen_handler(*this) + , m_device(nullptr) { } @@ -75,6 +78,8 @@ void astrocade_ctrl_port_device::device_resolve_objects() device_astrocade_ctrl_interface *const card(dynamic_cast<device_astrocade_ctrl_interface *>(get_card_device())); if (card) m_device = card; + + m_ltpen_handler.resolve_safe(); } void astrocade_ctrl_port_device::device_start() @@ -87,6 +92,12 @@ void astrocade_ctrl_port_device::device_start() throw emu_fatalerror("astrocade_ctrl_port_device: card device %s (%s) does not implement device_astrocade_ctrl_interface\n", card->tag(), card->name()); } } + + save_item(NAME(m_ltpen)); + + m_ltpen = 0; + + m_ltpen_handler(0); } uint8_t astrocade_ctrl_port_device::read_handle() diff --git a/src/devices/bus/astrocde/ctrl.h b/src/devices/bus/astrocde/ctrl.h index 7ff8acbde52..0cc34ea4dcc 100644 --- a/src/devices/bus/astrocde/ctrl.h +++ b/src/devices/bus/astrocde/ctrl.h @@ -10,37 +10,13 @@ FORWARD DECLARATIONS ***************************************************************************/ -class astrocade_ctrl_port_device; +class device_astrocade_ctrl_interface; /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ -// ======================> device_astrocade_ctrl_interface - -class device_astrocade_ctrl_interface : public device_slot_card_interface -{ -public: - virtual ~device_astrocade_ctrl_interface(); - - virtual uint8_t read_handle() { return 0; } - virtual uint8_t read_knob() { return 0; } - -protected: - device_astrocade_ctrl_interface(machine_config const &mconfig, device_t &device); - - // device_interface implementation - virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD; - virtual void interface_pre_start() override; - -private: - astrocade_ctrl_port_device *const m_port; - - friend class astrocade_ctrl_port_device; -}; - - // ======================> astrocade_ctrl_port_device class astrocade_ctrl_port_device : public device_t, public device_slot_interface @@ -59,6 +35,8 @@ public: astrocade_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U); virtual ~astrocade_ctrl_port_device(); + auto ltpen_handler() { return m_ltpen_handler.bind(); } + uint8_t read_handle(); uint8_t read_knob(); @@ -68,6 +46,9 @@ protected: virtual void device_resolve_objects() override; virtual void device_start() override; + int m_ltpen; + devcb_write_line m_ltpen_handler; + private: device_astrocade_ctrl_interface *m_device; @@ -75,6 +56,32 @@ private: }; +// ======================> device_astrocade_ctrl_interface + +class device_astrocade_ctrl_interface : public device_slot_card_interface +{ +public: + virtual ~device_astrocade_ctrl_interface(); + + virtual uint8_t read_handle() { return 0; } + virtual uint8_t read_knob() { return 0; } + + DECLARE_WRITE_LINE_MEMBER( write_ltpen ) { m_port->m_ltpen = state; m_port->m_ltpen_handler(state); } + +protected: + device_astrocade_ctrl_interface(machine_config const &mconfig, device_t &device); + + // device_interface implementation + virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD; + virtual void interface_pre_start() override; + +private: + astrocade_ctrl_port_device *const m_port; + + friend class astrocade_ctrl_port_device; +}; + + /*************************************************************************** FUNCTIONS ***************************************************************************/ diff --git a/src/devices/bus/astrocde/exp.cpp b/src/devices/bus/astrocde/exp.cpp index 40b6fbecbc4..9fe3c9f3fda 100644 --- a/src/devices/bus/astrocde/exp.cpp +++ b/src/devices/bus/astrocde/exp.cpp @@ -74,6 +74,14 @@ READ8_MEMBER(astrocade_exp_device::read) return 0xff; } +READ8_MEMBER(astrocade_exp_device::read_io) +{ + if (m_card) + return m_card->read_io(space, offset); + else + return 0xff; +} + /*------------------------------------------------- write -------------------------------------------------*/ @@ -83,3 +91,9 @@ WRITE8_MEMBER(astrocade_exp_device::write) if (m_card) m_card->write(space, offset, data); } + +WRITE8_MEMBER(astrocade_exp_device::write_io) +{ + if (m_card) + m_card->write_io(space, offset, data); +} diff --git a/src/devices/bus/astrocde/exp.h b/src/devices/bus/astrocde/exp.h index e6c97862224..a01db130974 100644 --- a/src/devices/bus/astrocde/exp.h +++ b/src/devices/bus/astrocde/exp.h @@ -14,6 +14,8 @@ public: // reading and writing virtual DECLARE_READ8_MEMBER(read) { return 0xff; } virtual DECLARE_WRITE8_MEMBER(write) { } + virtual DECLARE_READ8_MEMBER(read_io) { return 0xff; } + virtual DECLARE_WRITE8_MEMBER(write_io) { } protected: device_astrocade_card_interface(const machine_config &mconfig, device_t &device); @@ -46,6 +48,8 @@ public: // reading and writing virtual DECLARE_READ8_MEMBER(read); virtual DECLARE_WRITE8_MEMBER(write); + virtual DECLARE_READ8_MEMBER(read_io); + virtual DECLARE_WRITE8_MEMBER(write_io); protected: bool m_card_mounted; diff --git a/src/devices/bus/astrocde/joy.h b/src/devices/bus/astrocde/joy.h index 1db02b9d28f..bb8f755c845 100644 --- a/src/devices/bus/astrocde/joy.h +++ b/src/devices/bus/astrocde/joy.h @@ -14,7 +14,7 @@ // ======================> astrocade_joy_device class astrocade_joy_device : public device_t, - public device_astrocade_ctrl_interface + public device_astrocade_ctrl_interface { public: // construction/destruction diff --git a/src/devices/bus/astrocde/lightpen.cpp b/src/devices/bus/astrocde/lightpen.cpp new file mode 100644 index 00000000000..e31eed122be --- /dev/null +++ b/src/devices/bus/astrocde/lightpen.cpp @@ -0,0 +1,87 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz + +#include "emu.h" +#include "lightpen.h" + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(ASTROCADE_LIGHTPEN, astrocade_lightpen_device, "astrocade_lightpen", "Bally Astrocade Light Pen") + + +//************************************************************************** +// Bally Astrocade light pen input +//************************************************************************** + +astrocade_lightpen_device::astrocade_lightpen_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, ASTROCADE_LIGHTPEN, tag, owner, clock) + , device_astrocade_accessory_interface(mconfig, *this) + , m_trigger(*this, "TRIGGER") + , m_lightx(*this, "LIGHTX") + , m_lighty(*this, "LIGHTY") + , m_pen_timer(nullptr) +{ +} + +astrocade_lightpen_device::~astrocade_lightpen_device() +{ +} + +void astrocade_lightpen_device::device_start() +{ + m_pen_timer = timer_alloc(TIMER_TRIGGER); + + save_item(NAME(m_retrigger)); +} + +void astrocade_lightpen_device::device_reset() +{ + m_pen_timer->adjust(attotime::never); + m_retrigger = false; +} + +void astrocade_lightpen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + if (id == TIMER_TRIGGER) + { + write_ltpen(1); + write_ltpen(0); + if (m_retrigger) + m_pen_timer->adjust(m_screen->time_until_pos(m_lighty->read(), m_lightx->read())); + else + m_pen_timer->adjust(attotime::never); + } +} + +INPUT_CHANGED_MEMBER( astrocade_lightpen_device::trigger ) +{ + if (newval) + { + m_retrigger = true; + m_pen_timer->adjust(m_screen->time_until_pos(m_lighty->read(), m_lightx->read())); + } + else + { + m_retrigger = false; + m_pen_timer->adjust(attotime::never); + } +} + +static INPUT_PORTS_START( astrocade_lightpen ) + PORT_START("TRIGGER") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, astrocade_lightpen_device, trigger, nullptr) + PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("LIGHTX") + PORT_BIT(0x1ff, 0x000, IPT_LIGHTGUN_X) PORT_MINMAX(0x000, 0x15f) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15) + + PORT_START("LIGHTY") + PORT_BIT(0x0ff, 0x000, IPT_LIGHTGUN_Y) PORT_MINMAX(0x000, 0x0f0) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15) +INPUT_PORTS_END + +ioport_constructor astrocade_lightpen_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( astrocade_lightpen ); +} diff --git a/src/devices/bus/astrocde/lightpen.h b/src/devices/bus/astrocde/lightpen.h new file mode 100644 index 00000000000..a0863d5d3e8 --- /dev/null +++ b/src/devices/bus/astrocde/lightpen.h @@ -0,0 +1,51 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +#ifndef MAME_BUS_ASTROCDE_LIGHTPEN_H +#define MAME_BUS_ASTROCDE_LIGHTPEN_H + +#pragma once + +#include "accessory.h" + + +/*************************************************************************** + TYPE DEFINITIONS + ***************************************************************************/ + +// ======================> astrocade_lightpen_device + +class astrocade_lightpen_device : public device_t, + public device_astrocade_accessory_interface +{ +public: + // construction/destruction + astrocade_lightpen_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U); + virtual ~astrocade_lightpen_device(); + + DECLARE_INPUT_CHANGED_MEMBER( trigger ); + +protected: + // device_t implementation + virtual void device_start() override; + virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + static const device_timer_id TIMER_TRIGGER = 0; + +private: + required_ioport m_trigger; + required_ioport m_lightx; + required_ioport m_lighty; + emu_timer *m_pen_timer; + bool m_retrigger; +}; + + +/*************************************************************************** + DEVICE TYPES + ***************************************************************************/ + +DECLARE_DEVICE_TYPE(ASTROCADE_LIGHTPEN, astrocade_lightpen_device) + +#endif // MAME_BUS_ASTROCDE_LIGHTPEN_H diff --git a/src/devices/bus/astrocde/ram.cpp b/src/devices/bus/astrocde/ram.cpp index 36d1ed9ab77..8f20b0256fa 100644 --- a/src/devices/bus/astrocde/ram.cpp +++ b/src/devices/bus/astrocde/ram.cpp @@ -21,10 +21,10 @@ switch and run it as a cartridge. This is useful for cartridge development. Blue RAM -- available in 4K, 16K, and 32K. These also use an INS8154 chip, - (not yet implemented) which has an additional $80 bytes of RAM mapped - immediately after the end of the expansion address space. This memory - can't be write protected. The INS8154 has I/O features needed for loading - tape programs into Blue RAM BASIC, as well as running the Blue RAM Utility cart. + which has an additional $80 bytes of RAM mapped immediately after the end of + the expansion address space (not yet implemented). This memory can't be write + protected. The INS8154 has I/O features needed for loading tape programs into + Blue RAM BASIC, as well as running the Blue RAM Utility cart. 4K: $6000 to $6FFF (can't run VIPERSoft BASIC, because this program needs memory past this range) 16K: $6000 to $9FFF @@ -69,9 +69,11 @@ DEFINE_DEVICE_TYPE(ASTROCADE_RL64RAM, astrocade_rl64ram_device, "astroca astrocade_blueram_4k_device::astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, type, tag, owner, clock), - device_astrocade_card_interface(mconfig, *this), - m_write_prot(*this, "RAM_PROTECT") + : device_t(mconfig, type, tag, owner, clock) + , device_astrocade_card_interface(mconfig, *this) + , m_write_prot(*this, "RAM_PROTECT") + , m_ramio(*this, "ramio") + , m_cassette(*this, "cassette") { } @@ -163,7 +165,35 @@ WRITE8_MEMBER(astrocade_blueram_4k_device::write) m_ram[offset - 0x1000] = data; } +READ8_MEMBER(astrocade_blueram_4k_device::read_io) +{ + return m_ramio->read_io(offset & 0x7f); +} + +WRITE8_MEMBER(astrocade_blueram_4k_device::write_io) +{ + logerror("write_io: %04x = %02x\n", offset, data); + m_ramio->write_io(offset & 0x7f, data); +} + +uint8_t astrocade_blueram_4k_device::porta_r() +{ + return 0; +} + +uint8_t astrocade_blueram_4k_device::portb_r() +{ + return m_cassette->input() > 0.0 ? 1 : 0; +} + +void astrocade_blueram_4k_device::porta_w(uint8_t data) +{ +} +void astrocade_blueram_4k_device::portb_w(uint8_t data) +{ + m_cassette->output(BIT(data, 0) ? +1 : -1); +} // Viper System 1 expansion has RAM in 0x6000-0x9fff READ8_MEMBER(astrocade_viper_sys1_device::read) @@ -207,3 +237,20 @@ WRITE8_MEMBER(astrocade_rl64ram_device::write) if (!m_write_prot->read()) m_ram[offset] = data; } + +/*------------------------------------------------- + machine configuration + -------------------------------------------------*/ + +void astrocade_blueram_4k_device::device_add_mconfig(machine_config &config) +{ + CASSETTE(config, m_cassette); + m_cassette->set_default_state(CASSETTE_STOPPED); + m_cassette->set_interface("astrocade_cass"); + + INS8154(config, m_ramio); + m_ramio->out_a().set(FUNC(astrocade_blueram_4k_device::porta_w)); + m_ramio->out_b().set(FUNC(astrocade_blueram_4k_device::portb_w)); + m_ramio->in_a().set(FUNC(astrocade_blueram_4k_device::porta_r)); + m_ramio->in_b().set(FUNC(astrocade_blueram_4k_device::portb_r)); +} diff --git a/src/devices/bus/astrocde/ram.h b/src/devices/bus/astrocde/ram.h index 83f9483d2e8..ee5ed884ef4 100644 --- a/src/devices/bus/astrocde/ram.h +++ b/src/devices/bus/astrocde/ram.h @@ -6,6 +6,8 @@ #pragma once #include "exp.h" +#include "imagedev/cassette.h" +#include "machine/ins8154.h" // ======================> astrocade_blueram_4k_device @@ -22,15 +24,25 @@ public: // reading and writing virtual DECLARE_READ8_MEMBER(read) override; virtual DECLARE_WRITE8_MEMBER(write) override; + virtual DECLARE_READ8_MEMBER(read_io) override; + virtual DECLARE_WRITE8_MEMBER(write_io) override; + + uint8_t porta_r(); + uint8_t portb_r(); + void porta_w(uint8_t data); + void portb_w(uint8_t data); protected: astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void device_start() override { m_ram.resize(0x1000); save_item(NAME(m_ram)); } virtual void device_reset() override { } + virtual void device_add_mconfig(machine_config &config) override; std::vector<uint8_t> m_ram; required_ioport m_write_prot; + required_device<ins8154_device> m_ramio; + required_device<cassette_image_device> m_cassette; }; // ======================> astrocade_blueram_16k_device diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp index c0ff49915a6..602ea3c845a 100644 --- a/src/devices/bus/bbc/tube/tube.cpp +++ b/src/devices/bus/bbc/tube/tube.cpp @@ -112,6 +112,7 @@ void bbc_tube_slot_device::host_w(offs_t offset, uint8_t data) // slot devices +#include "tube_32016.h" #include "tube_6502.h" #include "tube_80186.h" #include "tube_80286.h" @@ -133,7 +134,7 @@ void bbc_tube_devices(device_slot_interface &device) { device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */ device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */ - //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ + device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */ device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */ //device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */ @@ -142,8 +143,8 @@ void bbc_tube_devices(device_slot_interface &device) //device.option_add("hdp68k", BBC_TUBE_HDP68K); /* Torch Unicorn (HDP68K) */ //device.option_add("x25", BBC_TUBE_X25); /* Econet X25 Gateway */ device.option_add("zep100", BBC_TUBE_ZEP100); /* Torch Z80 Communicator (ZEP100) (Torch) */ - //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Acorn 8271) */ - //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Acorn 1770) */ + //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Model B) */ + //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Model B+) */ /* Acorn ANC21 Universal 2nd Processor Unit */ device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ @@ -160,11 +161,12 @@ void bbc_extube_devices(device_slot_interface &device) { device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */ device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */ - //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ + device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */ device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */ //device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */ //device.option_add("pmsb2p", BBC_TUBE_PMSB2P); /* PMS B2P-6502 */ + //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */ /* Acorn ANC21 Universal 2nd Processor Unit */ device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ @@ -181,7 +183,6 @@ void bbc_intube_devices(device_slot_interface &device) { device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ - //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */ //device.option_add("arm7", BBC_TUBE_ARM7); /* Sprow ARM7 co-processor */ device.option_add("rc6502", BBC_TUBE_RC6502); /* ReCo6502 (6502) */ device.option_add("rc65816", BBC_TUBE_RC65816); /* ReCo6502 (65816) */ @@ -196,6 +197,7 @@ void electron_tube_devices(device_slot_interface &device) { device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */ device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */ + device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */ device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ diff --git a/src/devices/bus/bbc/tube/tube_32016.cpp b/src/devices/bus/bbc/tube/tube_32016.cpp new file mode 100644 index 00000000000..7b6ac355e42 --- /dev/null +++ b/src/devices/bus/bbc/tube/tube_32016.cpp @@ -0,0 +1,210 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Acorn ANC05 32016 2nd processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html + + Acorn ANC06 Cambridge Co-Processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html + + IC1 (ULA) TUBE + IC2 (MMU) NS32082 Not fitted + IC3 (CPU) NS32016 + IC4 (TCU) NS32201 + IC20 (FPU) NS32081 + +**********************************************************************/ + + +#include "emu.h" +#include "tube_32016.h" +#include "softlist_dev.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device, "bbc_tube_32016", "Acorn 32016 2nd processor") + + +//------------------------------------------------- +// ADDRESS_MAP( tube_32016_mem ) +//------------------------------------------------- + +void bbc_tube_32016_device::tube_32016_mem(address_map &map) +{ + map(0x000000, 0xffffff).rw(FUNC(bbc_tube_32016_device::read), FUNC(bbc_tube_32016_device::write)); + map(0xf90000, 0xf90001).portr("CONFIG"); + map(0xfffff0, 0xffffff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)).umask32(0x00ff); +} + +//------------------------------------------------- +// ROM( tube_32016 ) +//------------------------------------------------- + +ROM_START(tube_32016) + ROM_REGION(0x8000, "rom", 0) + ROM_DEFAULT_BIOS("200") + ROM_SYSTEM_BIOS(0, "200", "Pandora v2.00") + ROMX_LOAD("pan200lo.rom", 0x0000, 0x4000, CRC(b1980fd0) SHA1(8084f8896cd22953abefbd43c51e1a422b30e28d), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-764-02 Pandora Lo + ROMX_LOAD("pan200hi.rom", 0x0001, 0x4000, CRC(cab98d6b) SHA1(dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-763-02 Pandora Hi + ROM_SYSTEM_BIOS(1, "100", "Pandora v1.00") + ROMX_LOAD("pan100.rom", 0x0000, 0x8000, BAD_DUMP CRC(75333006) SHA1(996cd120103039390c9b979b16c327bb95da72e4), ROM_BIOS(1)) // 0201-763-01, 0201-764-01 Pandora + ROM_SYSTEM_BIOS(2, "061", "Pandora v0.61") + ROMX_LOAD("pan061lo.rom", 0x0000, 0x4000, CRC(6f801b35) SHA1(ce31f7c10603f3d15a06a8e32bde40df0639e446), ROM_SKIP(1) | ROM_BIOS(2)) + ROMX_LOAD("pan061hi.rom", 0x0001, 0x4000, CRC(c00b1ab0) SHA1(e6a705232278c518340ddc69ea51af91965fa332), ROM_SKIP(1) | ROM_BIOS(2)) +ROM_END + +//------------------------------------------------- +// INPUT_PORTS( tube_32016 ) +//------------------------------------------------- + +static INPUT_PORTS_START(tube_32016) + PORT_START("CONFIG") + PORT_DIPNAME(0x80, 0x80, "H") PORT_DIPLOCATION("LKS:1") + PORT_DIPSETTING(0x80, "FPU") + PORT_DIPSETTING(0x00, "No FPU") + + PORT_DIPNAME(0x40, 0x00, "G") PORT_DIPLOCATION("LKS:2") + PORT_DIPSETTING(0x40, "MMU") + PORT_DIPSETTING(0x00, "No MMU") + + PORT_DIPNAME(0x20, 0x00, "F") PORT_DIPLOCATION("LKS:3") + PORT_DIPSETTING(0x20, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x10, 0x00, "E") PORT_DIPLOCATION("LKS:4") + PORT_DIPSETTING(0x10, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x08, 0x00, "D") PORT_DIPLOCATION("LKS:5") + PORT_DIPSETTING(0x08, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x04, 0x00, "C") PORT_DIPLOCATION("LKS:6") + PORT_DIPSETTING(0x04, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x02, 0x00, "B") PORT_DIPLOCATION("LKS:7") + PORT_DIPSETTING(0x02, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x01, 0x00, "A") PORT_DIPLOCATION("LKS:8") + PORT_DIPSETTING(0x01, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") +INPUT_PORTS_END + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void bbc_tube_32016_device::device_add_mconfig(machine_config &config) +{ + NS32016(config, m_maincpu, 12_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_32016_device::tube_32016_mem); + + TUBE(config, m_ula); + m_ula->pnmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_ula->pirq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + /* internal ram */ + RAM(config, m_ram).set_default_size("1M").set_default_value(0); + + /* software lists */ + SOFTWARE_LIST(config, "flop_ls_32016").set_original("bbc_flop_32016"); +} + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +const tiny_rom_entry *bbc_tube_32016_device::device_rom_region() const +{ + return ROM_NAME( tube_32016 ); +} + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor bbc_tube_32016_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( tube_32016 ); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_tube_32016_device - constructor +//------------------------------------------------- + +bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_TUBE_32016, tag, owner, clock) + , device_bbc_tube_interface(mconfig, *this) + , m_maincpu(*this, "maincpu") + , m_ula(*this, "ula") + , m_ram(*this, "ram") + , m_rom(*this, "rom") + , m_rom_enabled(true) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_tube_32016_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void bbc_tube_32016_device::device_reset() +{ + m_rom_enabled = true; +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +uint8_t bbc_tube_32016_device::host_r(offs_t offset) +{ + return m_ula->host_r(offset); +} + +void bbc_tube_32016_device::host_w(offs_t offset, uint8_t data) +{ + m_ula->host_w(offset, data); +} + + +READ8_MEMBER(bbc_tube_32016_device::read) +{ + uint16_t data = 0xffff; + + if (m_rom_enabled) + data = m_rom->base()[offset & 0x3fff]; + else if (offset < m_ram->size()) + data = m_ram->pointer()[offset]; + + return data; +} + +WRITE8_MEMBER(bbc_tube_32016_device::write) +{ + /* clear ROM select on first write */ + if (!machine().side_effects_disabled()) m_rom_enabled = false; + + if (offset < m_ram->size()) + m_ram->pointer()[offset] = data; +} diff --git a/src/devices/bus/bbc/tube/tube_32016.h b/src/devices/bus/bbc/tube/tube_32016.h new file mode 100644 index 00000000000..864b8173703 --- /dev/null +++ b/src/devices/bus/bbc/tube/tube_32016.h @@ -0,0 +1,71 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Acorn ANC05 32016 2nd processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html + + Acorn ANC06 Cambridge Co-Processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html + +**********************************************************************/ + + +#ifndef MAME_BUS_BBC_TUBE_32016_H +#define MAME_BUS_BBC_TUBE_32016_H + +#include "tube.h" +#include "cpu/ns32000/ns32000.h" +#include "machine/ram.h" +#include "machine/tube.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_tube_32016_device + +class bbc_tube_32016_device : + public device_t, + public device_bbc_tube_interface +{ +public: + // construction/destruction + bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual ioport_constructor device_input_ports() const override; + + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; + +private: + required_device<ns32016_cpu_device> m_maincpu; + required_device<tube_device> m_ula; + required_device<ram_device> m_ram; + required_memory_region m_rom; + + DECLARE_READ8_MEMBER(read); + DECLARE_WRITE8_MEMBER(write); + + void tube_32016_mem(address_map &map); + + bool m_rom_enabled; +}; + + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device) + + +#endif /* MAME_BUS_BBC_TUBE_32016_H */ diff --git a/src/devices/bus/bml3/bml3bus.h b/src/devices/bus/bml3/bml3bus.h index ddaa1c87dce..2132d376041 100644 --- a/src/devices/bus/bml3/bml3bus.h +++ b/src/devices/bus/bml3/bml3bus.h @@ -16,15 +16,6 @@ #define BML3BUS_MAX_SLOTS 6 -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_BML3BUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, BML3BUS_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ - downcast<bml3bus_slot_device &>(*device).set_bml3bus_slot(_nbtag, _tag); - //************************************************************************** // TYPE DEFINITIONS @@ -37,7 +28,18 @@ class bml3bus_slot_device : public device_t, { public: // construction/destruction - bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <typename T> + bml3bus_slot_device(machine_config const &mconfig, const char *tag, device_t *owner, const char *nbtag, T &&opts, const char *dflt) + : bml3bus_slot_device(mconfig, tag, owner, (uint32_t)0) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + set_bml3bus_slot(nbtag, tag); + } + + bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); // device-level overrides virtual void device_start() override; diff --git a/src/devices/bus/coco/coco_dcmodem.cpp b/src/devices/bus/coco/coco_dcmodem.cpp index 693b2457e51..bebd6c275d5 100644 --- a/src/devices/bus/coco/coco_dcmodem.cpp +++ b/src/devices/bus/coco/coco_dcmodem.cpp @@ -70,6 +70,11 @@ namespace return memregion("eprom")->base(); } + virtual memory_region* get_cart_memregion() override + { + return memregion("eprom"); + } + private: // internal state required_device<mos6551_device> m_uart; diff --git a/src/devices/bus/coco/coco_orch90.cpp b/src/devices/bus/coco/coco_orch90.cpp index 4023c7f2a0b..2ad8afdaae1 100644 --- a/src/devices/bus/coco/coco_orch90.cpp +++ b/src/devices/bus/coco/coco_orch90.cpp @@ -92,6 +92,11 @@ namespace return memregion("eprom")->base(); } + virtual memory_region* get_cart_memregion() override + { + return memregion("eprom"); + } + private: WRITE8_MEMBER(write_left) { m_ldac->write(data); } WRITE8_MEMBER(write_right) { m_rdac->write(data); } diff --git a/src/devices/bus/coco/coco_rs232.cpp b/src/devices/bus/coco/coco_rs232.cpp index e058a9d3f3c..5a124986792 100644 --- a/src/devices/bus/coco/coco_rs232.cpp +++ b/src/devices/bus/coco/coco_rs232.cpp @@ -68,6 +68,11 @@ namespace return memregion("eprom")->base(); } + virtual memory_region* get_cart_memregion() override + { + return memregion("eprom"); + } + private: // internal state required_device<mos6551_device> m_uart; diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp index 93045e85230..6bf6360d24b 100644 --- a/src/devices/bus/coco/cococart.cpp +++ b/src/devices/bus/coco/cococart.cpp @@ -412,11 +412,11 @@ image_init_result cococart_slot_device::call_load() { memory_region *cart_mem = m_cart->get_cart_memregion(); uint8_t *base = cart_mem->base(); - offs_t read_length, cart_legnth = cart_mem->bytes();; + offs_t read_length, cart_length = cart_mem->bytes();; if (!loaded_through_softlist()) { - read_length = fread(base, cart_legnth); + read_length = fread(base, cart_length); } else { @@ -424,7 +424,7 @@ image_init_result cococart_slot_device::call_load() memcpy(base, get_software_region("rom"), read_length); } - while (read_length < cart_legnth) + while (read_length < cart_length) { offs_t len = std::min(read_length, m_cart->get_cart_size() - read_length); memcpy(base + read_length, base, len); diff --git a/src/devices/bus/cpc/cpc_rs232.cpp b/src/devices/bus/cpc/cpc_rs232.cpp index d4439ff1eaf..40fc0853539 100644 --- a/src/devices/bus/cpc/cpc_rs232.cpp +++ b/src/devices/bus/cpc/cpc_rs232.cpp @@ -137,12 +137,12 @@ WRITE_LINE_MEMBER(cpc_rs232_device::pit_out2_w) READ8_MEMBER(cpc_rs232_device::dart_r) { - return m_dart->ba_cd_r(space,offset); + return m_dart->ba_cd_r(offset); } WRITE8_MEMBER(cpc_rs232_device::dart_w) { - m_dart->ba_cd_w(space,offset,data); + m_dart->ba_cd_w(offset,data); } READ8_MEMBER(cpc_rs232_device::pit_r) diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp index 1e6f3b0cfa6..7d444abb03b 100644 --- a/src/devices/bus/cpc/playcity.cpp +++ b/src/devices/bus/cpc/playcity.cpp @@ -87,12 +87,12 @@ void cpc_playcity_device::device_reset() READ8_MEMBER(cpc_playcity_device::ctc_r) { - return m_ctc->read(space,offset); + return m_ctc->read(offset); } WRITE8_MEMBER(cpc_playcity_device::ctc_w) { - m_ctc->write(space,offset,data); + m_ctc->write(offset,data); if(offset == 0) update_ymz_clock(); } diff --git a/src/devices/bus/hp_dio/hp98644.cpp b/src/devices/bus/hp_dio/hp98644.cpp index 004da09b55e..d3c347b6d31 100644 --- a/src/devices/bus/hp_dio/hp98644.cpp +++ b/src/devices/bus/hp_dio/hp98644.cpp @@ -193,7 +193,7 @@ READ16_MEMBER(dio16_98644_device::io_r) case 0x0d: case 0x0e: case 0x0f: - ret = m_uart->ins8250_r(space, offset & 0x07, mem_mask); + ret = m_uart->ins8250_r(offset & 0x07); break; } @@ -230,7 +230,7 @@ WRITE16_MEMBER(dio16_98644_device::io_w) case 0x0d: case 0x0e: case 0x0f: - m_uart->ins8250_w(space, offset & 0x07, data, mem_mask); + m_uart->ins8250_w(offset & 0x07, data); break; } } diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp index 71548dcbdaa..37cd5ef346a 100644 --- a/src/devices/bus/isa/3c505.cpp +++ b/src/devices/bus/isa/3c505.cpp @@ -1644,7 +1644,9 @@ READ16_MEMBER(threecom3c505_device::read) // omit excessive logging if (data == last_data) { - uint32_t pc = space.device().state().pcbase(); + // FIXME: space.device().state().pcbase() will crash mame with SIGSEGV (since mame0197) + uint32_t pc = 0; // space.device().state().pcbase(); + if (pc == last_pc) { return data; diff --git a/src/devices/bus/isa/aha1542.cpp b/src/devices/bus/isa/aha1542.cpp deleted file mode 100644 index b044c88b171..00000000000 --- a/src/devices/bus/isa/aha1542.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Darkstar -/********************************************************************** - * - * Adaptec AHA-1542{,C,CF} SCSI Controller - * - **********************************************************************/ - -/* - PCB layout - ---------- - Floppy SCSI - +-----------+ +------------------+ +- - +-----+-----------+-+------------------+--+ - | | - | DIPSW DS1 |\ - | +-----+ | | - | | | Y1 +---+ TRM TRM | | - | | U3 | |U5 | |S| - | U8 +-----+ +---+ |C| - | +---+ +------+ +-------+ |S| - | |U13| |U15 | Y2 | | |I| - | +---+ +------+ | | | | - | |U16 | |U17 | | | - | +------+ +-------+ |/ - +-----------------------------------------+ - ||||||||| ||||||||||||||||||||||||| | - - - DIPSW sw1 - sw8 - U3 Intel chip labelled "AHA-1542CF/552800-01 D/9346", probably FDC (82077) - U5 Z84C0010VEC - U8 EEPROM(?) labelled 545120A - U13 CXK5864CM-10LL (64kbit SRAM) - U15 M27C256B labelled "ADAPTEC INC/553801-00 C/MCODE 563D/(C) 1993" - U16 M27C256B labelled "ADAPTEC INC/553601-00 C/BIOS C38D/(C) 1993" - U17 AIC-7970Q - Y1 XTAL SRX4054 93-38 - Y2 XTAL SRX4053 93-40 - TRM Dallas DS2107AS (SCSI termination) - DS1 LED - -*/ - -/* - * The PCB has a couple of DIP switches: - * - * sw1 on enable termination - * off software-controlled termination - * - * sw2 sw3 sw4 I/O Port - * off off off 0x330 - 0x333 (default) - * on off off 0x334 - 0x337 - * off on off 0x230 - 0x233 - * on on off 0x234 - 0x237 - * off off on 0x130 - 0x133 - * on off on 0x134 - 0x137 - * off on on reserved - * on on on reserved - * - * sw5 on disable floppy interface - * off enable floppy interface - * - * sw6 sw7 sw8 BIOS base address - * off off off 0xdc000 (default) - * on off off 0xd8000 - * off on off 0xd4000 - * on on off 0xd0000 - * off off on 0xcc000 - * on off on 0xc8000 - * off on on reserved - * on on on BIOS disabled - * - * source: http://download.adaptec.com/pdfs/installation_guides/1540cfig.pdf - */ - -#include "emu.h" -#include "aha1542.h" -#include "cpu/z80/z80.h" - -// I/O Port interface -// READ Port x+0: STATUS -// WRITE Port x+0: CONTROL -// -// READ Port x+1: DATA -// WRITE Port x+1: COMMAND -// -// READ Port x+2: INTERRUPT STATUS -// WRITE Port x+2: (undefined?) -// -// R/W Port x+3: (undefined) - -// READ STATUS flags -#define STAT_STST 0x80 // self-test in progress -#define STAT_DIAGF 0x40 // internal diagnostic failure -#define STAT_INIT 0x20 // mailbox initialization required -#define STAT_IDLE 0x10 // HBA is idle -#define STAT_CDFULL 0x08 // Command/Data output port is full -#define STAT_DFULL 0x04 // Data input port is full -#define STAT_INVCMD 0x01 // Invalid command - -// READ INTERRUPT STATUS flags -#define INTR_ANY 0x80 // any interrupt -#define INTR_SRCD 0x08 // SCSI reset detected -#define INTR_HACC 0x04 // HA command complete -#define INTR_MBOA 0x02 // MBO empty -#define INTR_MBIF 0x01 // MBI full - -// WRITE CONTROL commands -#define CTRL_HRST 0x80 // Hard reset -#define CTRL_SRST 0x40 // Soft reset -#define CTRL_IRST 0x20 // interrupt reset -#define CTRL_SCRST 0x10 // SCSI bus reset - -// READ/WRITE DATA commands -#define CMD_NOP 0x00 // No operation -#define CMD_MBINIT 0x01 // mailbox initialization -#define CMD_START_SCSI 0x02 // Start SCSI command -#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.) -#define CMD_INQUIRY 0x04 // Adapter inquiry -#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt -#define CMD_SELTIMEOUT 0x06 // Set SEL timeout -#define CMD_BUSON_TIME 0x07 // set bus-On time -#define CMD_BUSOFF_TIME 0x08 // set bus-off time -#define CMD_DMASPEED 0x09 // set ISA DMA speed -#define CMD_RETDEVS 0x0a // return installed devices -#define CMD_RETCONF 0x0b // return configuration data -#define CMD_TARGET 0x0c // set HBA to target mode -#define CMD_RETSETUP 0x0d // return setup data -#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e) - -// these are for 1541C only: -#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD) -#define CMD_EXTBIOS 0x28 // return extended BIOS information -#define CMD_MBENABLE 0x29 // set mailbox interface enable - -DEFINE_DEVICE_TYPE(AHA1542, aha1542_device, "aha1542", "AHA1542 SCSI Controller") - -#define Z84C0010_TAG "u5" - -READ8_MEMBER( aha1542_device::aha1542_r ) -{ - logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset); - return 0xff; -} - -WRITE8_MEMBER( aha1542_device::aha1542_w ) -{ - logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data); -} - -//------------------------------------------------- -// ROM( aha1542 ) -//------------------------------------------------- - -ROM_START( aha1542 ) - ROM_REGION( 0x8000, "aha1542", 0 ) - ROM_LOAD( "553601-00.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0) ) /* Adaptec 1540CF/1542CF BIOS v2.01 */ - - ROM_REGION( 0x8000, Z84C0010_TAG, 0 ) - ROM_LOAD( "553801-00.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04) ) /* ADAPTEC, INC MCODE */ -ROM_END - -void aha1542_device::z84c0010_mem(address_map &map) -{ - map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0); - map(0x8000, 0x800f).noprw(); // something is mapped there - map(0x9000, 0xafff).ram(); // 2kb RAM chip - map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area - map(0xb000, 0xb000).noprw(); // something? -} - -const tiny_rom_entry *aha1542_device::device_rom_region() const -{ - return ROM_NAME( aha1542 ); -} - -void aha1542_device::device_add_mconfig(machine_config &config) -{ - z80_device &cpu(Z80(config, Z84C0010_TAG, XTAL(12'000'000))); - cpu.set_addrmap(AS_PROGRAM, &aha1542_device::z84c0010_mem); -} - -aha1542_device::aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, AHA1542, tag, owner, clock), - device_isa16_card_interface(mconfig, *this) -{ -} - -void aha1542_device::device_start() -{ - set_isa_device(); - m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542"); - m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542_device::aha1542_r ), this), - write8_delegate(FUNC( aha1542_device::aha1542_w ), this) ); -} - - -void aha1542_device::device_reset() -{ -} diff --git a/src/devices/bus/isa/aha1542.h b/src/devices/bus/isa/aha1542.h deleted file mode 100644 index cc84c2ea55b..00000000000 --- a/src/devices/bus/isa/aha1542.h +++ /dev/null @@ -1,54 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Darkstar -/********************************************************************** - * - * Adaptec AHA-1542{,C,CF} SCSI Controller - * - ********************************************************************** - - - - **********************************************************************/ - -#ifndef MAME_BUS_AHA1542_H -#define MAME_BUS_AHA1542_H - -#pragma once - - -#include "isa.h" - -//********************************************************************* -// TYPE DEFINITIONS -//********************************************************************* - -// ====================> aha1542_device - -class aha1542_device : public device_t, - public device_isa16_card_interface -{ -public: - static constexpr feature_type unemulated_features() { return feature::DISK; } - // construction/destruction - aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - DECLARE_READ8_MEMBER( aha1542_r ); - DECLARE_WRITE8_MEMBER( aha1542_w ); - -protected: - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - - // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - -private: - void z84c0010_mem(address_map &map); -}; - -// device type definition -DECLARE_DEVICE_TYPE(AHA1542, aha1542_device) - -#endif // MAME_BUS_AHA1542_H diff --git a/src/devices/bus/isa/aha1542b.cpp b/src/devices/bus/isa/aha1542b.cpp new file mode 100644 index 00000000000..087f9ef9611 --- /dev/null +++ b/src/devices/bus/isa/aha1542b.cpp @@ -0,0 +1,401 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers + + The alternate BIOSes using port 334h instead of 330h are provided due + to certain MIDI cards requiring the 330h port. + +***************************************************************************/ + +#include "emu.h" +#include "aha1542b.h" + +#include "cpu/i8085/i8085.h" +#include "machine/aic6250.h" +#include "machine/nscsi_bus.h" +#include "machine/nscsi_hd.h" + + +DEFINE_DEVICE_TYPE(AHA1542A, aha1542a_device, "aha1542a", "AHA-1542A SCSI Controller") +DEFINE_DEVICE_TYPE(AHA1542B, aha1542b_device, "aha1542b", "AHA-1542B SCSI Controller") + + +aha154x_device::aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_fdc(*this, "fdc") + , m_bios(*this, "bios") +{ +} + +aha1542a_device::aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha154x_device(mconfig, AHA1542A, tag, owner, clock) +{ +} + +aha1542b_device::aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha154x_device(mconfig, AHA1542B, tag, owner, clock) +{ +} + +void aha154x_device::device_start() +{ +} + +void aha154x_device::i8085_map(address_map &map) +{ + map(0x0000, 0x3fff).rom().region("mcode", 0); + map(0x8000, 0x800f).m("scsi:7:scsic", FUNC(aic6250_device::map)); + map(0xe000, 0xe7ff).ram(); +} + +static INPUT_PORTS_START(aha1542a) + PORT_START("SETUP") + PORT_DIPNAME(0x01, 0x01, "Synchronous Negotiation") PORT_DIPLOCATION("J1:1") + PORT_DIPSETTING(0x01, "Disabled") + PORT_DIPSETTING(0x00, "Enabled") + PORT_DIPNAME(0x02, 0x02, "Diagnostic Test Loop") PORT_DIPLOCATION("J1:2") + PORT_DIPSETTING(0x02, DEF_STR(Off)) + PORT_DIPSETTING(0x00, DEF_STR(On)) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM) // Data accepted by host + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN) + PORT_DIPNAME(0x10, 0x10, "SCSI Parity Checking") PORT_DIPLOCATION("J1:3") + PORT_DIPSETTING(0x00, "Disabled") + PORT_DIPSETTING(0x10, "Enabled") + PORT_DIPNAME(0x60, 0x60, "DMA Transfer Speed") PORT_DIPLOCATION("J1:12,13") + PORT_DIPSETTING(0x60, "5.0 MB/s") + PORT_DIPSETTING(0x40, "5.7 MB/s") + PORT_DIPSETTING(0x20, "6.7 MB/s") + PORT_DIPSETTING(0x00, "8.0 MB/s") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) // SCSI reset + + PORT_START("CONFIG") + PORT_DIPNAME(0x07, 0x07, "SCSI Address ID") PORT_DIPLOCATION("J1:4,5,6") + PORT_DIPSETTING(0x00, "0") + PORT_DIPSETTING(0x01, "1") + PORT_DIPSETTING(0x02, "2") + PORT_DIPSETTING(0x03, "3") + PORT_DIPSETTING(0x04, "4") + PORT_DIPSETTING(0x05, "5") + PORT_DIPSETTING(0x06, "6") + PORT_DIPSETTING(0x07, "7") + PORT_DIPNAME(0x18, 0x08, "DMA Channel") PORT_DIPLOCATION("J1:7,8") + PORT_DIPSETTING(0x00, "0") + PORT_DIPSETTING(0x08, "5") + PORT_DIPSETTING(0x10, "6") + PORT_DIPSETTING(0x18, "7") + PORT_DIPNAME(0xe0, 0xa0, "Interrupt Channel") PORT_DIPLOCATION("J1:9,10,11") + PORT_DIPSETTING(0xe0, "9") + PORT_DIPSETTING(0xc0, "10") + PORT_DIPSETTING(0xa0, "11") + PORT_DIPSETTING(0x80, "12") + PORT_DIPSETTING(0x60, "14") + PORT_DIPSETTING(0x40, "15") + + PORT_START("DMAREQ") + PORT_DIPNAME(0xf, 0xd, "DMA Request") PORT_DIPLOCATION("J14:1,2,3,4") + PORT_DIPSETTING(0xe, "Channel 0") + PORT_DIPSETTING(0xd, "Channel 5") + PORT_DIPSETTING(0xb, "Channel 6") + PORT_DIPSETTING(0x7, "Channel 7") + + PORT_START("DMAACK") + PORT_DIPNAME(0xf, 0xd, "DMA Acknowledge") PORT_DIPLOCATION("J15:1,2,3,4") + PORT_DIPSETTING(0xe, "Channel 0") + PORT_DIPSETTING(0xd, "Channel 5") + PORT_DIPSETTING(0xb, "Channel 6") + PORT_DIPSETTING(0x7, "Channel 7") + + PORT_START("IRQ") + PORT_DIPNAME(0x3f, 0x3b, "Interrupt") PORT_DIPLOCATION("J16:1,2,3,4,5,6") + PORT_DIPSETTING(0x3e, "IRQ 9") + PORT_DIPSETTING(0x3d, "IRQ 10") + PORT_DIPSETTING(0x3b, "IRQ 11") + PORT_DIPSETTING(0x37, "IRQ 12") + PORT_DIPSETTING(0x2f, "IRQ 14") + PORT_DIPSETTING(0x1f, "IRQ 15") + + PORT_START("BIOSWAIT") + PORT_DIPNAME(0xf, 0xe, "BIOS Wait State") PORT_DIPLOCATION("J7:1,2,3,4") + PORT_DIPSETTING(0xe, "Disabled") + PORT_DIPSETTING(0xd, "100 ns") + PORT_DIPSETTING(0xb, "200 ns") + PORT_DIPSETTING(0x7, "300 ns") + + PORT_START("PORTADDR") + PORT_DIPNAME(0x7, 0x6, "I/O Port Address") PORT_DIPLOCATION("J6:1,2,3") + PORT_DIPSETTING(0x2, "130h") + PORT_DIPSETTING(0x3, "134h") + PORT_DIPSETTING(0x4, "230h") + PORT_DIPSETTING(0x5, "234h") + PORT_DIPSETTING(0x6, "330h") + PORT_DIPSETTING(0x7, "334h") + + PORT_START("BIOSADDR") + PORT_DIPNAME(0x3, 0x3, "BIOS Base Address") PORT_DIPLOCATION("J10:2,1") + PORT_DIPSETTING(0x0, "0C8000h") + PORT_DIPSETTING(0x1, "0CC000h") + PORT_DIPSETTING(0x2, "0D8000h") + PORT_DIPSETTING(0x3, "0DC000h") + PORT_DIPNAME(0x4, 0x0, "System BIOS") PORT_DIPLOCATION("J10:3") + PORT_DIPSETTING(0x4, "Disabled") + PORT_DIPSETTING(0x0, "Enabled") + + PORT_START("AUX") + PORT_DIPNAME(0x1, 0x1, DEF_STR(Unused)) PORT_DIPLOCATION("J9:1") + PORT_DIPSETTING(0x1, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x2, 0x2, DEF_STR(Unused)) PORT_DIPLOCATION("J9:2") + PORT_DIPSETTING(0x2, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x4, 0x4, DEF_STR(Unused)) PORT_DIPLOCATION("J9:3") + PORT_DIPSETTING(0x4, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x8, 0x8, "Automatic Request Sense") PORT_DIPLOCATION("J9:4") + PORT_DIPSETTING(0x0, "Disabled") + PORT_DIPSETTING(0x8, "Enabled") + + PORT_START("FDCCFG") + PORT_DIPNAME(0x1, 0x1, "FDC Secondary Address") PORT_DIPLOCATION("J12:1") + PORT_DIPSETTING(0x0, "370h-377h") + PORT_DIPSETTING(0x1, "3F0h-3F7h") + PORT_DIPNAME(0x2, 0x0, "Flexible Disk Controller") PORT_DIPLOCATION("J13:1") + PORT_DIPSETTING(0x2, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + + PORT_START("FDCIRQ") + PORT_DIPNAME(0x7, 0x4, "FDC Interrupt") PORT_DIPLOCATION("J17:1,2,3") + PORT_DIPSETTING(0x4, "Channel 6") + PORT_DIPSETTING(0x1, "Channel 10") + + PORT_START("FDCDREQ") + PORT_DIPNAME(0x7, 0x4, "FDC DMA Request") PORT_DIPLOCATION("J18:1,2,3") + PORT_DIPSETTING(0x4, "Channel 2") + PORT_DIPSETTING(0x1, "Channel 3") + + PORT_START("FDCDACK") + PORT_DIPNAME(0x7, 0x4, "FDC DMA Acknowledge") PORT_DIPLOCATION("J19:1,2,3") + PORT_DIPSETTING(0x4, "Channel 2") + PORT_DIPSETTING(0x1, "Channel 3") +INPUT_PORTS_END + +static INPUT_PORTS_START(aha1542b) + PORT_START("SETUP") + PORT_DIPNAME(0x01, 0x01, "Synchronous Negotiation") PORT_DIPLOCATION("J5:1") + PORT_DIPSETTING(0x01, "Disabled") + PORT_DIPSETTING(0x00, "Enabled") + PORT_DIPNAME(0x02, 0x02, "Diagnostic Test Loop") PORT_DIPLOCATION("J5:2") + PORT_DIPSETTING(0x02, DEF_STR(Off)) + PORT_DIPSETTING(0x00, DEF_STR(On)) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_DIPNAME(0x10, 0x10, "SCSI Parity Checking") PORT_DIPLOCATION("J5:3") + PORT_DIPSETTING(0x00, "Disabled") + PORT_DIPSETTING(0x10, "Enabled") + PORT_DIPNAME(0x60, 0x60, "DMA Transfer Speed") PORT_DIPLOCATION("J5:12,13") + PORT_DIPSETTING(0x60, "5.0 MB/s") + PORT_DIPSETTING(0x40, "5.7 MB/s") + PORT_DIPSETTING(0x20, "6.7 MB/s") + PORT_DIPSETTING(0x00, "8.0 MB/s") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("CONFIG") + PORT_DIPNAME(0x07, 0x07, "SCSI Address ID") PORT_DIPLOCATION("J5:4,5,6") + PORT_DIPSETTING(0x00, "0") + PORT_DIPSETTING(0x01, "1") + PORT_DIPSETTING(0x02, "2") + PORT_DIPSETTING(0x03, "3") + PORT_DIPSETTING(0x04, "4") + PORT_DIPSETTING(0x05, "5") + PORT_DIPSETTING(0x06, "6") + PORT_DIPSETTING(0x07, "7") + PORT_DIPNAME(0x18, 0x08, "DMA Channel") PORT_DIPLOCATION("J5:7,8") + PORT_DIPSETTING(0x00, "0") + PORT_DIPSETTING(0x08, "5") + PORT_DIPSETTING(0x10, "6") + PORT_DIPSETTING(0x18, "7") + PORT_DIPNAME(0xe0, 0xa0, "Interrupt Channel") PORT_DIPLOCATION("J5:9,10,11") + PORT_DIPSETTING(0xe0, "9") + PORT_DIPSETTING(0xc0, "10") + PORT_DIPSETTING(0xa0, "11") + PORT_DIPSETTING(0x80, "12") + PORT_DIPSETTING(0x60, "14") + PORT_DIPSETTING(0x40, "15") + + PORT_START("DMAREQ") + PORT_DIPNAME(0xf, 0xd, "DMA Request") PORT_DIPLOCATION("J9:1,2,3,4") + PORT_DIPSETTING(0xe, "Channel 0") + PORT_DIPSETTING(0xd, "Channel 5") + PORT_DIPSETTING(0xb, "Channel 6") + PORT_DIPSETTING(0x7, "Channel 7") + + PORT_START("DMAACK") + PORT_DIPNAME(0xf, 0xd, "DMA Acknowledge") PORT_DIPLOCATION("J9:5,6,7,8") + PORT_DIPSETTING(0xe, "Channel 0") + PORT_DIPSETTING(0xd, "Channel 5") + PORT_DIPSETTING(0xb, "Channel 6") + PORT_DIPSETTING(0x7, "Channel 7") + + PORT_START("IRQ") + PORT_DIPNAME(0x3f, 0x3b, "Interrupt") PORT_DIPLOCATION("J9:9,10,11,12,13,14") + PORT_DIPSETTING(0x3e, "IRQ 9") + PORT_DIPSETTING(0x3d, "IRQ 10") + PORT_DIPSETTING(0x3b, "IRQ 11") + PORT_DIPSETTING(0x37, "IRQ 12") + PORT_DIPSETTING(0x2f, "IRQ 14") + PORT_DIPSETTING(0x1f, "IRQ 15") + + PORT_START("BIOSWAIT") + PORT_DIPNAME(0x3, 0x3, "BIOS Wait State") PORT_DIPLOCATION("J7:5,6") + PORT_DIPSETTING(0x3, "Disabled") + PORT_DIPSETTING(0x2, "100 ns") + PORT_DIPSETTING(0x1, "200 ns") + PORT_DIPSETTING(0x0, "300 ns") + + PORT_START("PORTADDR") + PORT_DIPNAME(0x7, 0x6, "I/O Port Address") PORT_DIPLOCATION("J7:2,3,4") + PORT_DIPSETTING(0x2, "130h") + PORT_DIPSETTING(0x3, "134h") + PORT_DIPSETTING(0x4, "230h") + PORT_DIPSETTING(0x5, "234h") + PORT_DIPSETTING(0x6, "330h") + PORT_DIPSETTING(0x7, "334h") + + PORT_START("BIOSADDR") + PORT_DIPNAME(0x3, 0x3, "BIOS Base Address") PORT_DIPLOCATION("J7:8,7") + PORT_DIPSETTING(0x0, "0C8000h") + PORT_DIPSETTING(0x1, "0CC000h") + PORT_DIPSETTING(0x2, "0D8000h") + PORT_DIPSETTING(0x3, "0DC000h") + PORT_DIPNAME(0x4, 0x0, "System BIOS") PORT_DIPLOCATION("J6:1") + PORT_DIPSETTING(0x4, "Disabled") + PORT_DIPSETTING(0x0, "Enabled") + + PORT_START("AUX") + PORT_DIPNAME(0x1, 0x1, DEF_STR(Unused)) PORT_DIPLOCATION("J6:2") + PORT_DIPSETTING(0x1, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x2, 0x2, DEF_STR(Unused)) PORT_DIPLOCATION("J6:3") + PORT_DIPSETTING(0x2, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x4, 0x4, DEF_STR(Unused)) PORT_DIPLOCATION("J6:4") + PORT_DIPSETTING(0x4, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x8, 0x8, "Automatic Request Sense") PORT_DIPLOCATION("J6:5") + PORT_DIPSETTING(0x0, "Disabled") + PORT_DIPSETTING(0x8, "Enabled") + + PORT_START("FDCCFG") + PORT_DIPNAME(0x1, 0x1, "Floppy Secondary Address") PORT_DIPLOCATION("J7:1") + PORT_DIPSETTING(0x1, "170h-177h") + PORT_DIPSETTING(0x0, "1F0h-1F7h") + PORT_DIPNAME(0x2, 0x0, "Floppy Disk Controller") PORT_DIPLOCATION("J8:1") + PORT_DIPSETTING(0x2, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + PORT_DIPNAME(0x4, 0x4, "Floppy Dual Channel Speed") PORT_DIPLOCATION("J8:8") + PORT_DIPSETTING(0x4, DEF_STR(Off)) + PORT_DIPSETTING(0x0, DEF_STR(On)) + + PORT_START("FDCIRQ") + PORT_DIPNAME(0x3, 0x2, "FDC Interrupt") PORT_DIPLOCATION("J8:6,7") + PORT_DIPSETTING(0x2, "Channel 6") + PORT_DIPSETTING(0x1, "Channel 10") + + PORT_START("FDCDREQ") + PORT_DIPNAME(0x3, 0x2, "FDC DMA Request") PORT_DIPLOCATION("J8:2,3") + PORT_DIPSETTING(0x2, "Channel 2") + PORT_DIPSETTING(0x1, "Channel 3") + + PORT_START("FDCDACK") + PORT_DIPNAME(0x3, 0x2, "FDC DMA Acknowledge") PORT_DIPLOCATION("J8:4,5") + PORT_DIPSETTING(0x2, "Channel 2") + PORT_DIPSETTING(0x1, "Channel 3") +INPUT_PORTS_END + +ioport_constructor aha1542a_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(aha1542a); +} + +ioport_constructor aha1542b_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(aha1542b); +} + +static void aha154x_scsi_devices(device_slot_interface &device) +{ + device.option_add("harddisk", NSCSI_HARDDISK); + device.option_add_internal("scsic", AIC6250); +} + +void aha154x_device::scsic_config(device_t *device) +{ + device->set_clock(20'000'000); + downcast<aic6250_device &>(*device).int_cb().set_inputline("^^localcpu", I8085_RST65_LINE); + downcast<aic6250_device &>(*device).port_a_r_cb().set_ioport("^^SETUP"); + downcast<aic6250_device &>(*device).port_b_r_cb().set_ioport("^^CONFIG"); +} + +void aha154x_device::device_add_mconfig(machine_config &config) +{ + i8085a_cpu_device &localcpu(I8085A(config, "localcpu", 10'000'000)); + localcpu.set_addrmap(AS_PROGRAM, &aha154x_device::i8085_map); + + NSCSI_BUS(config, "scsi"); + NSCSI_CONNECTOR(config, "scsi:0", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:1", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:2", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:3", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:4", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:5", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:6", aha154x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:7", aha154x_scsi_devices, "scsic", true) + .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); }); + + DP8473(config, m_fdc, 24_MHz_XTAL); +} + + +ROM_START(aha1542a) + ROM_REGION(0x4000, "bios", 0) + ROM_LOAD("b_9700.bin", 0x0000, 0x4000, CRC(35f546e9) SHA1(f559b08f52044f53836021a83f56f628e32216bd)) + + ROM_REGION(0x4000, "mcode", 0) + ROM_LOAD("m_e7bc.bin", 0x0000, 0x4000, CRC(985b7a31) SHA1(bba0d84fa1b67ea71905953c25201fa2020cf465)) +ROM_END + +ROM_START(aha1542b) + ROM_REGION(0x4000, "bios", 0) + ROM_SYSTEM_BIOS(0, "v310", "AT/SCSI BIOS Version 3.10") + ROMX_LOAD("adaptec_inc_420412-00_b_bios_bc00_1990.bin", 0x0000, 0x4000, CRC(bd3f74e7) SHA1(c38d82fd50e5439812fa093e0d4f5fd136c63844), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "v310a", "AT/SCSI BIOS Version 3.10A (port 334h)") + ROMX_LOAD("154xp334.bin", 0x0000, 0x4000, CRC(4911f232) SHA1(2e24ce380c6f7694c45484019857cb919e2a9965), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(2, "v311", "AT/SCSI BIOS Version 3.11") + ROMX_LOAD("bios_c900.u13", 0x0000, 0x4000, CRC(4660d0c1) SHA1(a581291de96836b6f6cc0b6244b8fa1ee333346a), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(3, "v320g", "AT/SCSI BIOS Version 3.20 (> 1 GB support)") + ROMX_LOAD("b_bd00.bin", 0x0000, 0x4000, CRC(2387197b) SHA1(703e1fe1ba924c02d617ac37ec7a20e12bef1cc7), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(4, "v320gt", "AT/SCSI BIOS Version 3.20 (extended timeout)") + ROMX_LOAD("b_b300.bin", 0x0000, 0x4000, CRC(4c5b07d8) SHA1(692e824f916f55519c9905839f5f6609f5e8c0a5), ROM_BIOS(4)) + ROM_SYSTEM_BIOS(5, "v320a", "AT/SCSI BIOS Version 3.20Alt (port 334h)") + ROMX_LOAD("b_ac00.bin", 0x0000, 0x4000, CRC(becd6d08) SHA1(b5e7cbdeb241c1ff57602291e87c58ac0ee72d54), ROM_BIOS(5)) + + ROM_REGION(0x4000, "mcode", 0) + ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(0)) + ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(1)) // assumed compatible with v310a BIOS + ROMX_LOAD("firmware_62d3.u12", 0x0000, 0x4000, CRC(6056ca33) SHA1(8dd4aaffcb107dbcc85ac87d878fa6093b904a20), ROM_BIOS(2)) + ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(3)) + ROMX_LOAD("m_5d98.bin", 0x0000, 0x4000, CRC(f7d51536) SHA1(5ad1bb4bde3e8c30380b05d32ac273c781ab12a8), ROM_BIOS(4)) // also provided with v320g BIOS + ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(5)) +ROM_END + +const tiny_rom_entry *aha1542a_device::device_rom_region() const +{ + return ROM_NAME(aha1542a); +} + +const tiny_rom_entry *aha1542b_device::device_rom_region() const +{ + return ROM_NAME(aha1542b); +} diff --git a/src/devices/bus/isa/aha1542b.h b/src/devices/bus/isa/aha1542b.h new file mode 100644 index 00000000000..88f18941909 --- /dev/null +++ b/src/devices/bus/isa/aha1542b.h @@ -0,0 +1,59 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers + +***************************************************************************/ + +#ifndef MAME_BUS_ISA_AHA1542B_H +#define MAME_BUS_ISA_AHA1542B_H + +#pragma once + +#include "isa.h" +#include "machine/upd765.h" + +class aha154x_device : public device_t, public device_isa16_card_interface +{ +protected: + aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + + void i8085_map(address_map &map); + void scsic_config(device_t *device); + + required_device<upd765_family_device> m_fdc; + required_region_ptr<u8> m_bios; +}; + +class aha1542a_device : public aha154x_device +{ +public: + aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class aha1542b_device : public aha154x_device +{ +public: + aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +DECLARE_DEVICE_TYPE(AHA1542A, aha1542a_device) +DECLARE_DEVICE_TYPE(AHA1542B, aha1542b_device) + +#endif // MAME_BUS_ISA_AHA1542B_H diff --git a/src/devices/bus/isa/aha1542c.cpp b/src/devices/bus/isa/aha1542c.cpp new file mode 100644 index 00000000000..d5c35166b1f --- /dev/null +++ b/src/devices/bus/isa/aha1542c.cpp @@ -0,0 +1,387 @@ +// license:BSD-3-Clause +// copyright-holders:Darkstar +/********************************************************************** + * + * Adaptec AHA-1542{C,CF,CP} SCSI Controller + * + **********************************************************************/ + +/* +Hardware info by Guru + +Adaptec 1993 + +PCB Layout +---------- + +Adaptec AHA-1542CF/1542CF +FCC ID: FGT1542CF +FAB 545107-00 REV C +ASSY 545106-00 + +|-------|---------------|---|-------------------|--| +| J1 | FLOPPY34 | | SCSI50 | | +| |---------------| |-------------------| | +| S1 DS1 | +| | +| |------| DS2107AS DS2107AS |--| +| |PC8477| 24MHz Z84C0010 | | +| PAL |BV-1 | |S | +| | | |----------| | | +| |------| | | |C | +| 93C46.U11 20MHz | | | | +| UM6264 MCODE.U15 |ADAPTEC | |S | +| |AIC-7970Q | | | +| BIOS.U16 | | |I | +| | | | | +| |----------| |--| +| | +|-| |--| |----| + |--------------| |-------------------------| + +Notes: + J1 - 4-position header for drive activity external LED connection + S1 - 8-position DIP Switch (See Table A) + PC8477BV-1 - National Semiconductor PC8477BV-1 'SuperFDC' Advanced Floppy Disk Controller (PLCC68) + This is software compatible with NEC uPD765 and pin compatible with Intel 82077AA + Labelled "AHA-1542CF/552800-01 F/9513" + Clock input 24.000MHz + SCSI - 50-pin Centronics style external SCSI connector (DDK 57AE-40500-21D) + Z84C0010 - Zilog Z84C0010VEC Z80 CPU. Clock input 20/2 [10.000MHz] sourced from AIC-7970Q (PLCC44) + 93C46.U11 - Atmel 93C46 128b x8-bit / 64b x16-bit (1kB) EEPROM labelled '545120A' (SOIC8) + 6264 - Unicorn Microelectronics UM6264BM-10L 8k x8-bit Static RAM (SOJ28) + MCODE.U15 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553801-00 E MCODE 4B81' (DIP28) + BIOS.U16 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553601-00 E BIOS 7600' (DIP28) + BIOS 0x7600h is revision 2.10 + PAL - AMD PALCE16V8H-15JC/4 PAL (SOJ20) + AIC-7970Q - Adaptec AIC-7970Q Fast SCSI Controller IC. Clock input 20.000MHz (QFP144) + DS2107AS - Dallas DS2107AS SCSI Active Terminator (SOIC16) + DS1 - Internal Drive Activity LED + SCSI50 - 50-pin Right Angled Flat Cable Connector With Support For Up To 7 SCSI Drives + FLOPPY34 - 34-pin Right Angled Flat Cable Connector With Support For Up To 2 Floppy Drives (360kb,720kb,1.2MB,1.44MB) + + +Table A - S1 DIP Switch Description +----------------------------------- + +Default: All DIP Switches OFF (i.e. Settings changed via BIOS and saved in EEPROM) +Software Defaults = * +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ + | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | SW7 | SW8 | +----------------------|-----+-----+-----+-----+-----+-----+-----+-----+ +Termination Enabled | ON | | | | | | | | + Set In BIOS*| OFF | | | | | | | | +----------------------+-----+-----+-----+-----+ | | | | +I/O Port 330H*| | OFF | OFF | OFF | | | | | + 334H | | ON | OFF | OFF | | | | | + 230H | | OFF | ON | OFF | | | | | + 234H | | ON | ON | OFF | | | | | + 130H | | OFF | OFF | ON | | | | | + 134H | | ON | OFF | ON | | | | | + Reserved | | OFF | ON | ON | | | | | + Reserved | | ON | ON | ON | | | | | +----------------------+-----+-----+-----+-----+-----+ | | | +Enable Floppy Yes*| | OFF | | | | + No | | ON | | | | +----------------------+-----------------------+-----+-----+-----+-----+ +BIOS Address DC000H*| | OFF | OFF | OFF | + D8000H | | ON | OFF | OFF | + D4000H | | OFF | ON | OFF | + D0000H | | ON | ON | OFF | + CC000H | | OFF | OFF | ON | + C8000H | | ON | OFF | ON | + Reserved | | OFF | ON | ON | + BIOS Disabled | | ON | ON | ON | +----------------------+-----------------------------+-----+-----+-----+ + +Documentation: +Adaptec AHA-1540CF/1542CF Installation Guide +http://download.adaptec.com/pdfs/installation_guides/aha1540cf_ig.pdf + */ + +#include "emu.h" +#include "aha1542c.h" +#include "cpu/z80/z80.h" + +// I/O Port interface +// READ Port x+0: STATUS +// WRITE Port x+0: CONTROL +// +// READ Port x+1: DATA +// WRITE Port x+1: COMMAND +// +// READ Port x+2: INTERRUPT STATUS +// WRITE Port x+2: (undefined?) +// +// R/W Port x+3: (undefined) + +// READ STATUS flags +#define STAT_STST 0x80 // self-test in progress +#define STAT_DIAGF 0x40 // internal diagnostic failure +#define STAT_INIT 0x20 // mailbox initialization required +#define STAT_IDLE 0x10 // HBA is idle +#define STAT_CDFULL 0x08 // Command/Data output port is full +#define STAT_DFULL 0x04 // Data input port is full +#define STAT_INVCMD 0x01 // Invalid command + +// READ INTERRUPT STATUS flags +#define INTR_ANY 0x80 // any interrupt +#define INTR_SRCD 0x08 // SCSI reset detected +#define INTR_HACC 0x04 // HA command complete +#define INTR_MBOA 0x02 // MBO empty +#define INTR_MBIF 0x01 // MBI full + +// WRITE CONTROL commands +#define CTRL_HRST 0x80 // Hard reset +#define CTRL_SRST 0x40 // Soft reset +#define CTRL_IRST 0x20 // interrupt reset +#define CTRL_SCRST 0x10 // SCSI bus reset + +// READ/WRITE DATA commands +#define CMD_NOP 0x00 // No operation +#define CMD_MBINIT 0x01 // mailbox initialization +#define CMD_START_SCSI 0x02 // Start SCSI command +#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.) +#define CMD_INQUIRY 0x04 // Adapter inquiry +#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt +#define CMD_SELTIMEOUT 0x06 // Set SEL timeout +#define CMD_BUSON_TIME 0x07 // set bus-On time +#define CMD_BUSOFF_TIME 0x08 // set bus-off time +#define CMD_DMASPEED 0x09 // set ISA DMA speed +#define CMD_RETDEVS 0x0a // return installed devices +#define CMD_RETCONF 0x0b // return configuration data +#define CMD_TARGET 0x0c // set HBA to target mode +#define CMD_RETSETUP 0x0d // return setup data +#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e) + +// these are for 1541C only: +#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD) +#define CMD_EXTBIOS 0x28 // return extended BIOS information +#define CMD_MBENABLE 0x29 // set mailbox interface enable + +DEFINE_DEVICE_TYPE(AHA1542C, aha1542c_device, "aha1542c", "AHA-1542C SCSI Controller") +DEFINE_DEVICE_TYPE(AHA1542CF, aha1542cf_device, "aha1542cf", "AHA-1542CF SCSI Controller") +DEFINE_DEVICE_TYPE(AHA1542CP, aha1542cp_device, "aha1542cp", "AHA-1542CP SCSI Controller") + +#define Z84C0010_TAG "z84c0010" + +READ8_MEMBER( aha1542c_device::aha1542_r ) +{ + logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset); + return 0xff; +} + +WRITE8_MEMBER( aha1542c_device::aha1542_w ) +{ + logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data); +} + + +ROM_START( aha1542c ) + ROM_REGION( 0x8000, "aha1542", 0 ) + ROM_SYSTEM_BIOS( 0, "v101", "AHA-1540C/1542C BIOS v1.01" ) + ROMX_LOAD( "adaptec_inc_534201-00_d_bios_144c_1993.u15", 0x0000, 0x8000, CRC(35178004) SHA1(2b38f2e40cd02a1b32966ead7b202b0fca130cb8), ROM_BIOS(0) ) + ROM_SYSTEM_BIOS( 1, "v102", "AHA-1540C/1542C BIOS v1.02" ) + ROMX_LOAD( "b_91c5.bin", 0x0000, 0x8000, CRC(076ac252) SHA1(d640b980e85d07029d8ce11a52fa26ba0f93c5de), ROM_BIOS(1) ) + + ROM_REGION( 0x8000, Z84C0010_TAG, 0 ) + ROMX_LOAD( "adaptec_inc_534001-00_d_mcode_a3c2_1993.u5", 0x0000, 0x8000, CRC(220dd5a2) SHA1(4fc51c9dd63b45a50edcd56baa706d61decbef38), ROM_BIOS(0) ) + ROMX_LOAD( "m_866a.bin", 0x0000, 0x8000, CRC(ef09053a) SHA1(ae7900653357d5f32a2734bc13d9ec63bd805597), ROM_BIOS(1) ) +ROM_END + +ROM_START( aha1542cf ) + ROM_REGION( 0x8000, "aha1542", 0 ) + ROM_SYSTEM_BIOS( 0, "v201", "Adaptec 1540CF/1542CF BIOS v2.01" ) + ROMX_LOAD( "adaptec_inc_553601-00_c_bios_c38d_1993.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0), ROM_BIOS(0) ) + ROM_SYSTEM_BIOS( 1, "v210", "Adaptec 1540CF/1542CF BIOS v2.10" ) + ROMX_LOAD( "adaptec_inc_553601-00_e_bios_7600_1994.u16", 0x0000, 0x8000, CRC(8f3a2692) SHA1(b9dbd49baeec55098195131d0ed1a9bfe8463640), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS( 2, "v211", "Adaptec 1540CF/1542CF BIOS v2.11" ) + ROMX_LOAD( "adaptec_inc_553601-00_g_bios_b402_1995.u16", 0x0000, 0x8000, CRC(fddd0b83) SHA1(aabd227cb338d8812e0bb5c17c08ea06c5aedd36), ROM_BIOS(2) ) + + ROM_REGION( 0x8000, Z84C0010_TAG, 0 ) + ROMX_LOAD( "adaptec_inc_553801-00_c_mcode_563d_1993.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04), ROM_BIOS(0) ) + ROMX_LOAD( "adaptec_inc_553801-00_e_mcode_4b81_1994.u15", 0x0000, 0x8000, CRC(dd651476) SHA1(cda508281302be53ebdcf8daa61754c89ad12111), ROM_BIOS(1) ) + ROMX_LOAD( "adaptec_inc_553801-00_g_mcode_2cde_1995.u15", 0x0000, 0x8000, CRC(896873cd) SHA1(6edbdd9b0b15ef31ca0741cac31556d2d5266b6e), ROM_BIOS(2) ) +ROM_END + +ROM_START( aha1542cp ) + ROM_REGION( 0x8000, "aha1542", 0 ) + ROM_LOAD( "adaptec_inc_908501-00_d_bios_a91e_1995.u7", 0x0000, 0x8000, CRC(0646c35e) SHA1(3a7c2731abd8295438cfa1f2a525be53e9512b1a) ) + + ROM_REGION( 0x8000, Z84C0010_TAG, 0 ) + ROM_LOAD( "908301-00_f_mcode_17c9.u12", 0x0000, 0x8000, CRC(04494022) SHA1(431dfc26312556ddd24fccc429b2b3e93bac5c2f) ) +ROM_END + + +void aha1542c_device::local_latch_w(u8 data) +{ + m_eeprom->cs_write(BIT(data, 2)); + m_eeprom->clk_write(BIT(data, 1)); + m_eeprom->di_write(BIT(data, 0)); + // TODO: several other bits are used +} + +void aha1542c_device::z84c0010_mem(address_map &map) +{ + map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0); + map(0x8000, 0x9fff).ram(); // 2kb RAM chip + map(0xa000, 0xa000).portr("SWITCHES"); + map(0xb000, 0xb000).w(FUNC(aha1542c_device::local_latch_w)); + map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area + map(0xe003, 0xe003).lr8("e003_r", []() { return 0x20; }); +} + +u8 aha1542cp_device::eeprom_r() +{ + // TODO: bits 4 and 5 are also used + return m_eeprom->do_read(); +} + +void aha1542cp_device::eeprom_w(u8 data) +{ + m_eeprom->cs_write(BIT(data, 2)); + m_eeprom->clk_write(BIT(data, 1)); + m_eeprom->di_write(BIT(data, 0)); +} + +void aha1542cp_device::local_mem(address_map &map) +{ + map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0); + map(0x8000, 0x9fff).ram(); + map(0xc000, 0xc000).portr("SWITCHES"); + map(0xc001, 0xc001).rw(FUNC(aha1542cp_device::eeprom_r), FUNC(aha1542cp_device::eeprom_w)); + map(0xe003, 0xe003).nopr(); +} + +static INPUT_PORTS_START( aha1542c ) + PORT_START("SWITCHES") + PORT_DIPNAME(0x07, 0x07, "I/O Port Address") PORT_DIPLOCATION("S1:2,3,4") + PORT_DIPSETTING(0x07, "330-333h") + PORT_DIPSETTING(0x06, "334-337h") + PORT_DIPSETTING(0x05, "230-233h") + PORT_DIPSETTING(0x04, "234-237h") + PORT_DIPSETTING(0x03, "130-133h") + PORT_DIPSETTING(0x02, "134-137h") + PORT_DIPSETTING(0x00, "Diagnostics Only") // not documented + PORT_DIPNAME(0x08, 0x08, "SCSI Termination") PORT_DIPLOCATION("S1:1") + PORT_DIPSETTING(0x00, "Installed") + PORT_DIPSETTING(0x08, "Software Controlled") + PORT_DIPNAME(0x70, 0x70, "BIOS Address") PORT_DIPLOCATION("S1:6,7,8") + PORT_DIPSETTING(0x00, "Disabled") + PORT_DIPSETTING(0x20, "C8000h") + PORT_DIPSETTING(0x30, "CC000h") + PORT_DIPSETTING(0x40, "D0000h") + PORT_DIPSETTING(0x50, "D4000h") + PORT_DIPSETTING(0x60, "D8000h") + PORT_DIPSETTING(0x70, "DC000h") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + + PORT_START("FDC_CONFIG") + PORT_DIPNAME(0x1, 0x1, "Floppy Disk Controller") PORT_DIPLOCATION("S1:5") + PORT_DIPSETTING(0x0, "Disabled") + PORT_DIPSETTING(0x1, "Enabled") +INPUT_PORTS_END + +static INPUT_PORTS_START( aha1542cp ) + PORT_START("SWITCHES") + PORT_DIPNAME(0x0e, 0x0e, "I/O Port Address") PORT_DIPLOCATION("S1:2,3,4") + PORT_DIPSETTING(0x0e, "330-333h") + PORT_DIPSETTING(0x0c, "334-337h") + PORT_DIPSETTING(0x0a, "230-233h") + PORT_DIPSETTING(0x08, "234-237h") + PORT_DIPSETTING(0x06, "130-133h") + PORT_DIPSETTING(0x04, "134-137h") + PORT_DIPSETTING(0x00, "Diagnostics Only") // not documented + PORT_DIPNAME(0x10, 0x10, "Plug and Play") PORT_DIPLOCATION("S1:1") + PORT_DIPSETTING(0x00, "Disabled") + PORT_DIPSETTING(0x10, "Enabled") + PORT_DIPNAME(0xe0, 0xe0, "BIOS Address") PORT_DIPLOCATION("S1:6,7,8") + PORT_DIPSETTING(0x00, "Disabled") + PORT_DIPSETTING(0x40, "C8000h") + PORT_DIPSETTING(0x60, "CC000h") + PORT_DIPSETTING(0x80, "D0000h") + PORT_DIPSETTING(0xa0, "D4000h") + PORT_DIPSETTING(0xc0, "D8000h") + PORT_DIPSETTING(0xe0, "DC000h") + + PORT_START("FDC_CONFIG") + PORT_DIPNAME(0x1, 0x1, "Floppy Disk Controller") PORT_DIPLOCATION("S1:5") + PORT_DIPSETTING(0x0, "Disabled") + PORT_DIPSETTING(0x1, "Enabled") +INPUT_PORTS_END + +ioport_constructor aha1542c_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( aha1542c ); +} + +ioport_constructor aha1542cp_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( aha1542cp ); +} + +const tiny_rom_entry *aha1542c_device::device_rom_region() const +{ + return ROM_NAME( aha1542c ); +} + +const tiny_rom_entry *aha1542cf_device::device_rom_region() const +{ + return ROM_NAME( aha1542cf ); +} + +const tiny_rom_entry *aha1542cp_device::device_rom_region() const +{ + return ROM_NAME( aha1542cp ); +} + +void aha1542c_device::device_add_mconfig(machine_config &config) +{ + z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000)); + cpu.set_addrmap(AS_PROGRAM, &aha1542c_device::z84c0010_mem); + + EEPROM_93C46_16BIT(config, m_eeprom); +} + +void aha1542cp_device::device_add_mconfig(machine_config &config) +{ + z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000)); + cpu.set_addrmap(AS_PROGRAM, &aha1542cp_device::local_mem); + + EEPROM_93C46_16BIT(config, m_eeprom); +} + +aha1542c_device::aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_eeprom(*this, "eeprom") +{ +} + +aha1542c_device::aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha1542c_device(mconfig, AHA1542C, tag, owner, clock) +{ +} + +aha1542cf_device::aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha1542c_device(mconfig, AHA1542CF, tag, owner, clock) +{ +} + +aha1542cp_device::aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha1542c_device(mconfig, AHA1542CP, tag, owner, clock) +{ +} + +void aha1542c_device::device_start() +{ + set_isa_device(); + m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542"); + m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542cf_device::aha1542_r ), this), + write8_delegate(FUNC( aha1542cf_device::aha1542_w ), this) ); +} + + +void aha1542c_device::device_reset() +{ +} diff --git a/src/devices/bus/isa/aha1542c.h b/src/devices/bus/isa/aha1542c.h new file mode 100644 index 00000000000..005c688c053 --- /dev/null +++ b/src/devices/bus/isa/aha1542c.h @@ -0,0 +1,96 @@ +// license:BSD-3-Clause +// copyright-holders:Darkstar +/********************************************************************** + * + * Adaptec AHA-1542{C,CF,CP} SCSI Controller + * + ********************************************************************** + + + + **********************************************************************/ + +#ifndef MAME_BUS_AHA1542C_H +#define MAME_BUS_AHA1542C_H + +#pragma once + + +#include "isa.h" +#include "machine/eepromser.h" + +//********************************************************************* +// TYPE DEFINITIONS +//********************************************************************* + +// ====================> aha1542cf_device + +class aha1542c_device : public device_t, + public device_isa16_card_interface +{ +public: + static constexpr feature_type unemulated_features() { return feature::DISK; } + // construction/destruction + aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + DECLARE_READ8_MEMBER( aha1542_r ); + DECLARE_WRITE8_MEMBER( aha1542_w ); + +protected: + aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + void local_latch_w(u8 data); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // optional information overrides + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + + required_device<eeprom_serial_93cxx_device> m_eeprom; + +private: + void z84c0010_mem(address_map &map); +}; + +// ====================> aha1542cf_device + +class aha1542cf_device : public aha1542c_device +{ +public: + // construction/destruction + aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +// ====================> aha1542cp_device + +class aha1542cp_device : public aha1542c_device +{ +public: + // construction/destruction + aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual ioport_constructor device_input_ports() const override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + +private: + u8 eeprom_r(); + void eeprom_w(u8 data); + + void local_mem(address_map &map); +}; + +// device type definitions +DECLARE_DEVICE_TYPE(AHA1542C, aha1542c_device) +DECLARE_DEVICE_TYPE(AHA1542CF, aha1542cf_device) +DECLARE_DEVICE_TYPE(AHA1542CP, aha1542cp_device) + +#endif // MAME_BUS_AHA1542C_H diff --git a/src/devices/bus/isa/aha174x.cpp b/src/devices/bus/isa/aha174x.cpp new file mode 100644 index 00000000000..06b6ddf5f62 --- /dev/null +++ b/src/devices/bus/isa/aha174x.cpp @@ -0,0 +1,160 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Adaptec AHA-1740/44 and AHA-1740A/42A Fast SCSI host adapters + + These are actually EISA cards, though they also have a compatibility + mode that provides an interface like the older ISA AHA-154X series. + + On the AHA-1740 and AHA-1744, the HPC microcode is stored in an EEPROM + (of unknown type), allowing it to be reprogrammed by the host. This is + not possible on the AHA-1740A and AHA-1744A, which use a conventional + 27C256 EPROM for the microcode. In both cases the HPC copies the code + to and then executes it out of RAM. + + Though the AHA-1740 and AHA-1740A have different board layouts, they + share the following ICs: + + AIC-565 Bus Auxiliary Interface Chip + AIC-575 EISA Configuration Chip + AIC-4600 HPC (HPC46003V20) + AIC-6251A SCSI Interface and Protocol Chip + IDT7201 512x9 FIFO (2 on board) + Intel 82355 Bus Master Interface Controller + + AHA-1742A is the same as AHA-1740A, only with the FDC populated. + + AHA-1744 uses the same layout as AHA-1740, but populates the area + around the SCSI port with DS36F95J differential drivers. + +***************************************************************************/ + +#include "emu.h" +#include "aha174x.h" + +#include "machine/aic6250.h" +//#include "machine/i82355.h" +#include "machine/nscsi_bus.h" +#include "machine/nscsi_hd.h" + +DEFINE_DEVICE_TYPE(AHA1740, aha1740_device, "aha1740", "AHA-1740 Fast SCSI Host Adapter") +DEFINE_DEVICE_TYPE(AHA1742A, aha1742a_device, "aha1742a", "AHA-1742A Fast SCSI Host Adapter") + + +aha174x_device::aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_hpc(*this, "hpc") + , m_bios(*this, "bios") +{ +} + +aha1740_device::aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha174x_device(mconfig, AHA1740, tag, owner, clock) +{ +} + +aha1742a_device::aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : aha174x_device(mconfig, AHA1742A, tag, owner, clock) + , m_fdc(*this, "fdc") +{ +} + +void aha174x_device::device_start() +{ +} + + +void aha174x_device::hpc_map(address_map &map) +{ + map(0x5000, 0x500f).m("scsi:7:scsic", FUNC(aic6251a_device::map)); + map(0x8000, 0xffff).rom().region("mcode", 0); +} + +static void aha174x_scsi_devices(device_slot_interface &device) +{ + device.option_add("harddisk", NSCSI_HARDDISK); + device.option_add_internal("scsic", AIC6251A); +} + +void aha174x_device::scsic_config(device_t *device) +{ + device->set_clock(40_MHz_XTAL / 2); // divider not verified +} + +void aha1740_device::device_add_mconfig(machine_config &config) +{ + HPC46003(config, m_hpc, 40_MHz_XTAL / 2); + m_hpc->set_addrmap(AS_PROGRAM, &aha1740_device::hpc_map); + + NSCSI_BUS(config, "scsi"); + NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true) + .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); }); +} + +void aha1742a_device::device_add_mconfig(machine_config &config) +{ + HPC46003(config, m_hpc, 40_MHz_XTAL / 2); + m_hpc->set_addrmap(AS_PROGRAM, &aha1742a_device::hpc_map); + + NSCSI_BUS(config, "scsi"); + NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true) + .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); }); + + N82077AA(config, m_fdc, 24_MHz_XTAL); +} + + +ROM_START(aha1740) + ROM_REGION(0x4000, "bios", 0) + ROM_LOAD("b_dc00.bin", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e)) + + ROM_REGION16_LE(0x8000, "mcode", 0) + ROM_SYSTEM_BIOS(0, "v140st", "BIOS v1.40 (Standard Mode)") + ROMX_LOAD("standard.bin", 0x0000, 0x8000, CRC(8c15c6a2) SHA1(77e15b0244e3a814f53f957270e6474a8a839955), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "v140en", "BIOS v1.40 (Enhanced Mode)") + ROMX_LOAD("enhanced.bin", 0x0000, 0x8000, CRC(84b3df89) SHA1(a718c3ea5443a609b4b20bfe48be18193737ad25), ROM_BIOS(1)) + // Adaptec's help file claims that "the EEPROM on the board can hold firmware for both modes simultaneously." + // The AHA-174XA firmware images obviously have this, but the files provided here do not agree. +ROM_END + +ROM_START(aha1742a) + ROM_REGION(0x4000, "bios", 0) + ROM_DEFAULT_BIOS("v140") + ROM_SYSTEM_BIOS(0, "v134", "BIOS v1.34") + ROMX_LOAD("adaptec_inc_450214-00_a_bios_8800_1991.u47", 0x0000, 0x4000, CRC(6cf06151) SHA1(0da45634b12b33fc886920d065cc8ffb2cf376b8), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "v140", "BIOS v1.40") + ROMX_LOAD("adaptec_inc_450216-00_a_bios_dc00_1992.u47", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(2, "v140s", "BIOS v1.40 (Extended Timeout)") + ROMX_LOAD("b_f100.bin", 0x0000, 0x4000, CRC(b695acc0) SHA1(683112fafdf83d5eb89237d9215f7d6eacc6eeaf), ROM_BIOS(2)) + + ROM_REGION16_LE(0x8000, "mcode", 0) + ROMX_LOAD("adaptec_inc_450117-00_c_mcode_23a8_1991.u10", 0x0000, 0x8000, NO_DUMP, ROM_BIOS(0)) + ROMX_LOAD("adaptec_inc_450113-00_d_mcode_b7d6_1992.u10", 0x0000, 0x8000, CRC(0a55a555) SHA1(ff400f56b33f0ad94e34564d7715a0773b335844), ROM_BIOS(1)) + ROMX_LOAD("m_c7b8.bin", 0x0000, 0x8000, CRC(21282e86) SHA1(18cb3960dc47f2c14beb88f9680c1f66c4652b04), ROM_BIOS(2)) +ROM_END + +const tiny_rom_entry *aha1740_device::device_rom_region() const +{ + return ROM_NAME(aha1740); +} + +const tiny_rom_entry *aha1742a_device::device_rom_region() const +{ + return ROM_NAME(aha1742a); +} diff --git a/src/devices/bus/isa/aha174x.h b/src/devices/bus/isa/aha174x.h new file mode 100644 index 00000000000..f65ee7de93a --- /dev/null +++ b/src/devices/bus/isa/aha174x.h @@ -0,0 +1,61 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers + +***************************************************************************/ + +#ifndef MAME_BUS_ISA_AHA174X_H +#define MAME_BUS_ISA_AHA174X_H + +#pragma once + +#include "isa.h" +#include "cpu/hpc/hpc.h" +#include "machine/upd765.h" + +class aha174x_device : public device_t, public device_isa16_card_interface +{ +protected: + aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + virtual void device_start() override; + + void hpc_map(address_map &map); + void scsic_config(device_t *device); + + required_device<hpc46003_device> m_hpc; + required_region_ptr<u8> m_bios; +}; + +class aha1740_device : public aha174x_device +{ +public: + aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class aha1742a_device : public aha174x_device +{ +public: + aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + required_device<upd765_family_device> m_fdc; +}; + +DECLARE_DEVICE_TYPE(AHA1740, aha1740_device) +DECLARE_DEVICE_TYPE(AHA1742A, aha1742a_device) + +#endif // MAME_BUS_ISA_AHA174X_H diff --git a/src/devices/bus/isa/bt54x.cpp b/src/devices/bus/isa/bt54x.cpp index baab0247854..d8ef31a848f 100644 --- a/src/devices/bus/isa/bt54x.cpp +++ b/src/devices/bus/isa/bt54x.cpp @@ -9,6 +9,9 @@ believed that these chips are largely compatible with each other, as are the NCR 53CF94 and Emulex FAS216 SCSI controllers. + 2.41/2.21 is the last BIOS version compatible with revisions A-G of + the BT-542B. + ***************************************************************************/ #include "emu.h" @@ -19,10 +22,12 @@ #include "machine/nscsi_cd.h" #include "machine/nscsi_hd.h" +DEFINE_DEVICE_TYPE(BT542B, bt542b_device, "bt542b", "BusTek BT-542B SCSI Host Adapter") // Rev. G or earlier +DEFINE_DEVICE_TYPE(BT542BH, bt542bh_device, "bt542bh", "BusLogic BT-542B SCSI Host Adapter (Rev. H)") DEFINE_DEVICE_TYPE(BT545S, bt545s_device, "bt545s", "BusLogic BT-545S Fast SCSI Host Adapter") -bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : device_t(mconfig, BT545S, tag, owner, clock) +bt54x_device::bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) , device_isa16_card_interface(mconfig, *this) , m_mpu(*this, "mpu") , m_fdc(*this, "fdc") @@ -30,50 +35,78 @@ bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, dev { } -void bt545s_device::device_start() +bt542b_device::bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : bt54x_device(mconfig, BT542B, tag, owner, clock) +{ +} + +bt542bh_device::bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : bt54x_device(mconfig, BT542BH, tag, owner, clock) { } -u8 bt545s_device::local_status_r() +bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : bt54x_device(mconfig, BT545S, tag, owner, clock) +{ +} + +void bt54x_device::device_start() +{ +} + +u8 bt54x_device::local_status_r() { return 0; } -void bt545s_device::local_map(address_map &map) +void bt54x_device::local_map(address_map &map) { map(0x00000, 0x01fff).ram(); //map(0x02000, 0x0201f).rw("busintf", FUNC(ncr86c05_device::local_read), FUNC(ncr86c05_device::local_write)); - map(0x02080, 0x0208f).m("scsi:7:fsc", FUNC(ncr53cf94_device::map)); - map(0x02180, 0x02180).r(FUNC(bt545s_device::local_status_r)); + map(0x02080, 0x0208f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map)); + map(0x02180, 0x02180).r(FUNC(bt54x_device::local_status_r)); map(0xf8000, 0xfffff).rom().region("mpu", 0); } +static void scsi_devices(device_slot_interface &device) +{ + device.option_add("cdrom", NSCSI_CDROM); + device.option_add("harddisk", NSCSI_HARDDISK); + device.option_add_internal("scsic", NCR53C94); +} + static void fast_scsi_devices(device_slot_interface &device) { - // FIXME: these device options are placeholders device.option_add("cdrom", NSCSI_CDROM); device.option_add("harddisk", NSCSI_HARDDISK); - device.option_add_internal("fsc", NCR53CF94); // FAS216 + device.option_add_internal("scsic", NCR53CF94); // FAS216 +} + +void bt54x_device::asc_config(device_t *device) +{ + ncr53c94_device &asc = downcast<ncr53c94_device &>(*device); + + asc.set_clock(25_MHz_XTAL); // not verified; perhaps selectable? (40 MHz XTAL also on board) + + asc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); + //asc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w)); } -void bt545s_device::fsc_config(device_t *device) +void bt54x_device::fsc_config(device_t *device) { ncr53cf94_device &fsc = downcast<ncr53cf94_device &>(*device); fsc.set_clock(40_MHz_XTAL); - fsc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); // mostly polled + fsc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); // mostly polled on BT-545S //fsc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w)); } -void bt545s_device::device_add_mconfig(machine_config &config) +void bt54x_device::fsc_base(machine_config &config) { - I80188(config, m_mpu, 40_MHz_XTAL / 2); // SAB80188-1-N; clock guessed - m_mpu->set_addrmap(AS_PROGRAM, &bt545s_device::local_map); - //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0)); //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w)); - //busintf.dma_ack_callback().set("scsi:7:fsc", FUNC(ncr53cf94_device::dma_w)); + //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53cf94_device::dma_w)); NSCSI_BUS(config, "scsi"); NSCSI_CONNECTOR(config, "scsi:0", fast_scsi_devices, nullptr); @@ -83,11 +116,67 @@ void bt545s_device::device_add_mconfig(machine_config &config) NSCSI_CONNECTOR(config, "scsi:4", fast_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:5", fast_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:6", fast_scsi_devices, nullptr); - NSCSI_CONNECTOR(config, "scsi:7", fast_scsi_devices, "fsc", true).set_option_machine_config("fsc", [this] (device_t *device) { fsc_config(device); }); + NSCSI_CONNECTOR(config, "scsi:7", fast_scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { fsc_config(device); }); +} + +void bt542b_device::device_add_mconfig(machine_config &config) +{ + I80188(config, m_mpu, 16_MHz_XTAL); + m_mpu->set_addrmap(AS_PROGRAM, &bt542b_device::local_map); + + //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0)); + //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w)); + //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53c94_device::dma_w)); + + NSCSI_BUS(config, "scsi"); + NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:2", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:7", scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { asc_config(device); }); + + DP8473(config, m_fdc, 24_MHz_XTAL); +} + +void bt542bh_device::device_add_mconfig(machine_config &config) +{ + I80188(config, m_mpu, 40_MHz_XTAL / 2); // clock guessed + m_mpu->set_addrmap(AS_PROGRAM, &bt542bh_device::local_map); + + fsc_base(config); + + DP8473(config, m_fdc, 24_MHz_XTAL); +} + +void bt545s_device::device_add_mconfig(machine_config &config) +{ + I80188(config, m_mpu, 40_MHz_XTAL / 2); // SAB80188-1-N; clock guessed + m_mpu->set_addrmap(AS_PROGRAM, &bt545s_device::local_map); + + fsc_base(config); PC8477A(config, m_fdc, 24_MHz_XTAL); // actually PC8477BV } +ROM_START(bt542b) + ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1991 BIOS Version 2.41" + ROM_LOAD("1000006-2.41_bustek.u15", 0x0000, 0x4000, CRC(5eb00d0f) SHA1(74a8bbae1c2b42f0c605b0ac98660f1e16ac5c4e)) + + ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1991 BusTek Corporation 542B 91/12/14" + ROM_LOAD("1000005-2.21_bustek.u2", 0x0000, 0x8000, CRC(c2c66653) SHA1(054ba1ea71b2aaab31ab9dd5aca955d861f5333b)) +ROM_END + +ROM_START(bt542bh) + ROM_REGION(0x8000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.70M" + ROM_LOAD("5000006-4.70_buslogic.u15", 0x0000, 0x8000, CRC(f5a5e116) SHA1(d7b73015532838dc694edf24308ebbab6f4dd5bb)) + + ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1992 BusLogic Inc. 542BH93/05/23" + ROM_LOAD("5000005-3.35_buslogic.u2", 0x0000, 0x8000, CRC(181966c3) SHA1(b9b327d50cd13f3e5b5b53892b18f233aff065b7)) +ROM_END + ROM_START(bt545s) ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.50" ROM_LOAD("u15_27128_5002026-4.50.bin", 0x0000, 0x4000, CRC(1bd3247b) SHA1(9d46a99f4b3057e94ef422f387218de2c4553c1a)) @@ -96,6 +185,16 @@ ROM_START(bt545s) ROM_LOAD("u2_27256_5002005-3.31.bin", 0x0000, 0x8000, CRC(20473714) SHA1(797a8dba182049949f7a5c14d8bef4b4e908305b)) ROM_END +const tiny_rom_entry *bt542b_device::device_rom_region() const +{ + return ROM_NAME(bt542b); +} + +const tiny_rom_entry *bt542bh_device::device_rom_region() const +{ + return ROM_NAME(bt542bh); +} + const tiny_rom_entry *bt545s_device::device_rom_region() const { return ROM_NAME(bt545s); diff --git a/src/devices/bus/isa/bt54x.h b/src/devices/bus/isa/bt54x.h index 754d561978b..dfdd0009416 100644 --- a/src/devices/bus/isa/bt54x.h +++ b/src/devices/bus/isa/bt54x.h @@ -15,29 +15,60 @@ #include "cpu/i86/i186.h" #include "machine/upd765.h" -class bt545s_device : public device_t, public device_isa16_card_interface +class bt54x_device : public device_t, public device_isa16_card_interface { public: - bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - static constexpr feature_type unemulated_features() { return feature::DISK; } protected: - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; + bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + virtual void device_start() override; -private: u8 local_status_r(); void local_map(address_map &map); + void asc_config(device_t *device); void fsc_config(device_t *device); + void fsc_base(machine_config &config); required_device<i80188_cpu_device> m_mpu; required_device<upd765_family_device> m_fdc; required_region_ptr<u8> m_bios; }; +class bt542b_device : public bt54x_device +{ +public: + bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class bt542bh_device : public bt54x_device +{ +public: + bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class bt545s_device : public bt54x_device +{ +public: + bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +DECLARE_DEVICE_TYPE(BT542B, bt542b_device) +DECLARE_DEVICE_TYPE(BT542BH, bt542bh_device) DECLARE_DEVICE_TYPE(BT545S, bt545s_device) #endif // MAME_BUS_ISA_BT54X_H diff --git a/src/devices/bus/isa/com.cpp b/src/devices/bus/isa/com.cpp index e9ad68ebee3..6ab3c393ccd 100644 --- a/src/devices/bus/isa/com.cpp +++ b/src/devices/bus/isa/com.cpp @@ -118,10 +118,10 @@ isa8_com_device::isa8_com_device(const machine_config &mconfig, device_type type void isa8_com_device::device_start() { set_isa_device(); - m_isa->install_device(0x03f8, 0x03ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_0")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_0")) ); - m_isa->install_device(0x02f8, 0x02ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_1")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_1")) ); -// m_isa->install_device(0x03e8, 0x03ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_2")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_2")) ); -// m_isa->install_device(0x02e8, 0x02ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_3")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_3")) ); + m_isa->install_device(0x03f8, 0x03ff, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_0")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_0")) ); + m_isa->install_device(0x02f8, 0x02ff, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_1")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_1")) ); +// m_isa->install_device(0x03e8, 0x03ef, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_2")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_2")) ); +// m_isa->install_device(0x02e8, 0x02ef, read8sm_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_3")), write8sm_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_3")) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/dcb.cpp b/src/devices/bus/isa/dcb.cpp new file mode 100644 index 00000000000..db5768d6758 --- /dev/null +++ b/src/devices/bus/isa/dcb.cpp @@ -0,0 +1,70 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Novell Disk Coprocessor Board (DCB) + + This special SCSI host adapter, later acquired by ADIC, was designed + for use with Novell NetWare. + +***************************************************************************/ + +#include "emu.h" +#include "dcb.h" + +DEFINE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device, "novell_dcb", "Novell Disk Coprocessor Board (#738-133-001)") + +novell_dcb_device::novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, NOVELL_DCB, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_localcpu(*this, "localcpu") + , m_eeprom(*this, "eeprom") +{ +} + +void novell_dcb_device::device_start() +{ +} + +void novell_dcb_device::eeprom_w(u8 data) +{ + m_eeprom->cs_write(BIT(data, 5)); + m_eeprom->clk_write(BIT(data, 6)); + m_eeprom->di_write(BIT(data, 7)); +} + +u8 novell_dcb_device::misc_r() +{ + return m_eeprom->do_read() << 7; +} + +void novell_dcb_device::mem_map(address_map &map) +{ + map(0x00000, 0x03fff).ram(); + map(0xfe000, 0xfffff).rom().region("localcpu", 0); +} + +void novell_dcb_device::io_map(address_map &map) +{ + map(0x0100, 0x0100).w(FUNC(novell_dcb_device::eeprom_w)); + map(0x0180, 0x0180).r(FUNC(novell_dcb_device::misc_r)); +} + +void novell_dcb_device::device_add_mconfig(machine_config &config) +{ + I80188(config, m_localcpu, 16_MHz_XTAL); + m_localcpu->set_addrmap(AS_PROGRAM, &novell_dcb_device::mem_map); + m_localcpu->set_addrmap(AS_IO, &novell_dcb_device::io_map); + + EEPROM_93C06_16BIT(config, m_eeprom); // NMC9306 +} + +ROM_START(novell_dcb) + ROM_REGION(0x2000, "localcpu", 0) + ROM_LOAD("817-186-001_rev_e_5800_11-04-86.bin", 0x0000, 0x2000, CRC(2e2037f4) SHA1(a13c0aab46084a0805256f1d2b8b8beaccc9e253)) +ROM_END + +const tiny_rom_entry *novell_dcb_device::device_rom_region() const +{ + return ROM_NAME(novell_dcb); +} diff --git a/src/devices/bus/isa/dcb.h b/src/devices/bus/isa/dcb.h new file mode 100644 index 00000000000..fbca0303978 --- /dev/null +++ b/src/devices/bus/isa/dcb.h @@ -0,0 +1,43 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Novell Disk Coprocessor Board (DCB) + +***************************************************************************/ + +#ifndef MAME_BUS_ISA_DCB_H +#define MAME_BUS_ISA_DCB_H + +#pragma once + +#include "isa.h" +#include "cpu/i86/i186.h" +#include "machine/eepromser.h" + +class novell_dcb_device : public device_t, public device_isa16_card_interface +{ +public: + novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_start() override; + +private: + void eeprom_w(u8 data); + u8 misc_r(); + + void mem_map(address_map &map); + void io_map(address_map &map); + + required_device<i80188_cpu_device> m_localcpu; + required_device<eeprom_serial_93cxx_device> m_eeprom; +}; + +DECLARE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device) + +#endif // MAME_BUS_ISA_DCB_H diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp index 5b52dbd0546..5b0c2315f38 100644 --- a/src/devices/bus/isa/isa_cards.cpp +++ b/src/devices/bus/isa/isa_cards.cpp @@ -31,13 +31,17 @@ #include "ide.h" #include "xtide.h" #include "side116.h" -#include "aha1542.h" +#include "aha1542b.h" +#include "aha1542c.h" +#include "aha174x.h" #include "wd1002a_wx1.h" #include "wd1007a.h" #include "mcd.h" #include "lbaenhancer.h" #include "cl_sh260.h" #include "bt54x.h" +#include "dcb.h" +#include "ultra12f.h" // sound #include "adlib.h" @@ -153,7 +157,13 @@ void pc_isa16_cards(device_slot_interface &device) // 16-bit device.option_add("ide", ISA16_IDE); device.option_add("ne2000", NE2000); - device.option_add("aha1542", AHA1542); + device.option_add("aha1542a", AHA1542A); + device.option_add("aha1542b", AHA1542B); + device.option_add("aha1542c", AHA1542C); + device.option_add("aha1542cf", AHA1542CF); + device.option_add("aha1542cp", AHA1542CP); + device.option_add("aha1740", AHA1740); // actually an EISA card + device.option_add("aha1742a", AHA1742A); // actually an EISA card device.option_add("gus",ISA16_GUS); device.option_add("sblaster_16", ISA16_SOUND_BLASTER_16); device.option_add("svga_s3", ISA16_SVGA_S3); @@ -174,5 +184,9 @@ void pc_isa16_cards(device_slot_interface &device) device.option_add("wd1007a", WD1007A); device.option_add("ev346", EV346); device.option_add("jc1310", JC1310); + device.option_add("bt542b", BT542B); + device.option_add("bt542bh", BT542BH); device.option_add("bt545s", BT545S); + device.option_add("dcb", NOVELL_DCB); + device.option_add("ultra12f", ULTRA12F); } diff --git a/src/devices/bus/isa/np600.cpp b/src/devices/bus/isa/np600.cpp index 064c1d40191..b38dc008347 100644 --- a/src/devices/bus/isa/np600.cpp +++ b/src/devices/bus/isa/np600.cpp @@ -11,7 +11,6 @@ #include "cpu/i86/i186.h" #include "machine/74259.h" -//#include "machine/i82586.h" DEFINE_DEVICE_TYPE(NP600A3, np600a3_device, "np600a3", "InterLan NP600A-3 Intelligent Protocol Processor") @@ -19,6 +18,7 @@ np600a3_device::np600a3_device(const machine_config &mconfig, const char *tag, d : device_t(mconfig, NP600A3, tag, owner, clock) , device_isa16_card_interface(mconfig, *this) , m_npcpu(*this, "npcpu") + , m_lcc(*this, "lcc") { } @@ -26,6 +26,18 @@ void np600a3_device::device_start() { } +void np600a3_device::lcc_ca_w(u16 data) +{ + m_lcc->ca(0); + m_lcc->ca(1); +} + +WRITE_LINE_MEMBER(np600a3_device::lcc_reset_w) +{ + if (!state) + m_lcc->reset(); +} + u16 np600a3_device::status_r() { return 0; @@ -33,25 +45,35 @@ u16 np600a3_device::status_r() void np600a3_device::mem_map(address_map &map) { - map(0x00000, 0x7ffff).ram(); // GM71256-12 x16 + map(0x00000, 0x7ffff).ram().share("netram"); // GM71256-12 x16 map(0xfc000, 0xfffff).rom().region("npcpu", 0); } void np600a3_device::io_map(address_map &map) { - map(0x0070, 0x007f).w("latch70", FUNC(ls259_device::write_a0)); + map(0x0000, 0x0001).w(FUNC(np600a3_device::lcc_ca_w)); + map(0x0070, 0x007f).w("bitlatch", FUNC(ls259_device::write_a0)); map(0x0080, 0x0081).r(FUNC(np600a3_device::status_r)); } +void np600a3_device::lcc_map(address_map &map) +{ + map(0x000000, 0x07ffff).ram().share("netram"); + map(0xf80000, 0xffffff).ram().share("netram"); +} + void np600a3_device::device_add_mconfig(machine_config &config) { I80186(config, m_npcpu, 16_MHz_XTAL); m_npcpu->set_addrmap(AS_PROGRAM, &np600a3_device::mem_map); m_npcpu->set_addrmap(AS_IO, &np600a3_device::io_map); - LS259(config, "latch70"); // U28 + ls259_device &bitlatch(LS259(config, "bitlatch")); // U28 + bitlatch.q_out_cb<4>().set(FUNC(np600a3_device::lcc_reset_w)); - //I82586(config, "enet", 20_MHz_XTAL); + I82586(config, m_lcc, 20_MHz_XTAL); + m_lcc->set_addrmap(0, &np600a3_device::lcc_map); + m_lcc->out_irq_cb().set(m_npcpu, FUNC(i80186_cpu_device::tmrin1_w)); } ROM_START(np600a3) diff --git a/src/devices/bus/isa/np600.h b/src/devices/bus/isa/np600.h index 7831d804922..e1068b54758 100644 --- a/src/devices/bus/isa/np600.h +++ b/src/devices/bus/isa/np600.h @@ -12,6 +12,7 @@ #pragma once #include "isa.h" +#include "machine/i82586.h" class np600a3_device : public device_t, public device_isa16_card_interface { @@ -26,12 +27,16 @@ protected: virtual const tiny_rom_entry *device_rom_region() const override; private: + void lcc_ca_w(u16 data); + DECLARE_WRITE_LINE_MEMBER(lcc_reset_w); u16 status_r(); void mem_map(address_map &map); void io_map(address_map &map); + void lcc_map(address_map &map); required_device<cpu_device> m_npcpu; + required_device<i82586_device> m_lcc; }; DECLARE_DEVICE_TYPE(NP600A3, np600a3_device) diff --git a/src/devices/bus/isa/ultra12f.cpp b/src/devices/bus/isa/ultra12f.cpp new file mode 100644 index 00000000000..f2f93507548 --- /dev/null +++ b/src/devices/bus/isa/ultra12f.cpp @@ -0,0 +1,64 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + UltraStor Ultra 12F ESDI Caching Disk Controller + +***************************************************************************/ + +#include "emu.h" +#include "ultra12f.h" + +DEFINE_DEVICE_TYPE(ULTRA12F, ultra12f_device, "ultra12f", "Ultra 12F ESDI Caching Disk Controller") + +ultra12f_device::ultra12f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, ULTRA12F, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_hpc(*this, "hpc") + , m_bios(*this, "bios") +{ +} + +void ultra12f_device::device_start() +{ + // Firmware EPROM has a couple of lines scrambled + u8 *firmware = memregion("firmware")->base(); + for (offs_t b = 0; b < 0x8000; b += 0x100) + { + for (offs_t x = 0; x < 0x10; x++) + { + std::swap(firmware[b | x | 0x10], firmware[b | x | 0x80]); + std::swap(firmware[b | x | 0x30], firmware[b | x | 0xa0]); + std::swap(firmware[b | x | 0x50], firmware[b | x | 0xc0]); + std::swap(firmware[b | x | 0x70], firmware[b | x | 0xe0]); + } + } +} + +void ultra12f_device::hpc_map(address_map &map) +{ + map(0x8000, 0xffff).rom().region("firmware", 0); +} + +void ultra12f_device::device_add_mconfig(machine_config &config) +{ + HPC46003(config, m_hpc, 24_MHz_XTAL); // apparently a HPC46003V30 custom-labeled as "USC010-1-30" + m_hpc->set_addrmap(AS_PROGRAM, &ultra12f_device::hpc_map); +} + +ROM_START(ultra12f) + ROM_REGION(0x4000, "bios", 0) + ROM_SYSTEM_BIOS(0, "v202", "UBIOS 2.02") // "Date : 04/05/90 Version 2.02" + ROMX_LOAD("38001-009.bin", 0x0000, 0x4000, CRC(b96c4839) SHA1(4e601c4ff1deae959c0807479d25de6db4e6cf3e), ROM_BIOS(0)) // 27C128, 150ns EPROM + ROM_SYSTEM_BIOS(1, "v300", "UBIOS 3.00") // "Date : 06/18/91 Version 3.00" + ROMX_LOAD("38001-010.bin", 0x0000, 0x4000, CRC(aa80d74e) SHA1(b507e6ead79e836969b8b6f2fa88ca99d6b354ad), ROM_BIOS(1)) // 27C128-12 + + ROM_REGION(0x8000, "firmware", 0) + ROMX_LOAD("28001-009.bin", 0x0000, 0x8000, CRC(0b6c74a1) SHA1(1a9eb5866f2104e94295d0915fe10c4c1745665b), ROM_BIOS(0)) // 27C256, 120ns EPROM + ROMX_LOAD("28001-012.bin", 0x0000, 0x8000, CRC(62fd2f69) SHA1(48d6e65001a262b3e99d373fa59e0672c5ec4284), ROM_BIOS(1)) // 27C256-12 +ROM_END + +const tiny_rom_entry *ultra12f_device::device_rom_region() const +{ + return ROM_NAME(ultra12f); +} diff --git a/src/devices/bus/isa/ultra12f.h b/src/devices/bus/isa/ultra12f.h new file mode 100644 index 00000000000..6b259aefa6b --- /dev/null +++ b/src/devices/bus/isa/ultra12f.h @@ -0,0 +1,38 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + UltraStor Ultra 12F ESDI Caching Disk Controller + +***************************************************************************/ + +#ifndef MAME_BUS_ISA_ULTRA12F_H +#define MAME_BUS_ISA_ULTRA12F_H + +#pragma once + +#include "isa.h" +#include "cpu/hpc/hpc.h" + +class ultra12f_device : public device_t, public device_isa16_card_interface +{ +public: + ultra12f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + +private: + void hpc_map(address_map &map); + + required_device<hpc_device> m_hpc; + required_region_ptr<u8> m_bios; +}; + +DECLARE_DEVICE_TYPE(ULTRA12F, ultra12f_device) + +#endif // MAME_BUS_ISA_ULTRA12F_H diff --git a/src/devices/bus/mtx/sdx.cpp b/src/devices/bus/mtx/sdx.cpp index 27f7285d6d2..44687e09f08 100644 --- a/src/devices/bus/mtx/sdx.cpp +++ b/src/devices/bus/mtx/sdx.cpp @@ -268,15 +268,15 @@ void mtx_sdxcpm_device::device_reset() READ8_MEMBER(mtx_sdx_device::sdx_status_r) { /* - bit description - 0 Head load: 1 - head load on drive - 1 Double-sided: 1 if drive double-sided - 2 TPI: 0 - 48 TPI drive. 1 - 96 TPI drive - 3 Track stepping rate: 0 - 12ms, 1 - 6ms - 4 No. of drives: 0 - 1 drive, 1 - 2 drives - 5 Ready: 1 - drive ready - 6 Interrupt: 1 - FDC interrupt request - 7 Data request: 1 - FDC data request + bit description + 0 Head load: 1 - head load on drive + 1 Double-sided: 1 if drive double-sided + 2 TPI: 0 - 48 TPI drive. 1 - 96 TPI drive + 3 Track stepping rate: 0 - 12ms, 1 - 6ms + 4 No. of drives: 0 - 1 drive, 1 - 2 drives + 5 Ready: 1 - drive ready + 6 Interrupt: 1 - FDC interrupt request + 7 Data request: 1 - FDC data request */ uint8_t data = 0x00; @@ -297,12 +297,12 @@ READ8_MEMBER(mtx_sdx_device::sdx_status_r) WRITE8_MEMBER(mtx_sdx_device::sdx_control_w) { /* - bit description - 0 Drive select: 0 - drive A, 1 - drive B - 1 Side select: 0 - side 0, 1 - side 1 - 2 Motor on: 1 - turns drive motor on - 3 Motor ready: 1 - drive motor ready - 4 Density: 0 - FM, 1 - MFM + bit description + 0 Drive select: 0 - drive A, 1 - drive B + 1 Side select: 0 - side 0, 1 - side 1 + 2 Motor on: 1 - turns drive motor on + 3 Motor ready: 1 - drive motor ready + 4 Density: 0 - FM, 1 - MFM */ m_control = data; diff --git a/src/devices/bus/nes/konami.cpp b/src/devices/bus/nes/konami.cpp index e979132223d..b936b06b48a 100644 --- a/src/devices/bus/nes/konami.cpp +++ b/src/devices/bus/nes/konami.cpp @@ -81,7 +81,7 @@ nes_konami_vrc6_device::nes_konami_vrc6_device(const machine_config &mconfig, co } nes_konami_vrc7_device::nes_konami_vrc7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nes_konami_vrc4_device(mconfig, NES_VRC7, tag, owner, clock), m_ym2413(*this, "ym") + : nes_konami_vrc4_device(mconfig, NES_VRC7, tag, owner, clock), m_vrc7snd(*this, "vrc7snd") { } @@ -560,8 +560,6 @@ void nes_konami_vrc4_device::write_h(offs_t offset, uint8_t data) In MESS: Supported. It also uses konami_irq (there are IRQ issues though: see Akumajou Densetsu intro). - TODO: Add sound capabilities support! - -------------------------------------------------*/ void nes_konami_vrc6_device::write_h(offs_t offset, uint8_t data) @@ -644,7 +642,7 @@ void nes_konami_vrc6_device::device_add_mconfig(machine_config &config) // TODO: this is not how VRC6 clock signaling works! // The board uses the CLK pin in reality, not hardcoded NTSC values! - VRC6(config, m_vrc6snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5); + VRC6(config, m_vrc6snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 1.0); } /*------------------------------------------------- @@ -681,11 +679,11 @@ void nes_konami_vrc7_device::write_h(offs_t offset, uint8_t data) case 0x1010: case 0x1018: - m_ym2413->register_port_w(data); + m_vrc7snd->register_port_w(data); break; case 0x1030: case 0x1038: - m_ym2413->data_port_w(data); + m_vrc7snd->data_port_w(data); break; case 0x2000: @@ -758,8 +756,6 @@ void nes_konami_vrc7_device::write_h(offs_t offset, uint8_t data) // and has one output pin for audio, multiplexed for all 6 channels; OPLL has two output pins, one for // FM and one for Rhythm, and has no special status pin. -// FIXME: we currently emulate this as a base YM2413! - void nes_konami_vrc7_device::device_add_mconfig(machine_config &config) { // additional sound hardware @@ -767,5 +763,5 @@ void nes_konami_vrc7_device::device_add_mconfig(machine_config &config) // TODO: this is not how VRC7 clock signaling works! // The board uses the CLK pin in reality, not hardcoded NTSC values! - YM2413(config, m_ym2413, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5); + VRC7(config, m_vrc7snd, XTAL(21'477'272)/6).add_route(0, "addon", 1.0).add_route(1, "addon", 0.0); } diff --git a/src/devices/bus/nes/konami.h b/src/devices/bus/nes/konami.h index ed8d0caea3c..86afa1832e1 100644 --- a/src/devices/bus/nes/konami.h +++ b/src/devices/bus/nes/konami.h @@ -157,7 +157,7 @@ protected: virtual void device_add_mconfig(machine_config &config) override; private: - required_device<ym2413_device> m_ym2413; + required_device<vrc7snd_device> m_vrc7snd; }; diff --git a/src/devices/bus/nes/mmc5.cpp b/src/devices/bus/nes/mmc5.cpp index b512f914e8b..1feef95aa67 100644 --- a/src/devices/bus/nes/mmc5.cpp +++ b/src/devices/bus/nes/mmc5.cpp @@ -18,6 +18,7 @@ #include "emu.h" #include "mmc5.h" +#include "speaker.h" #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -46,7 +47,7 @@ nes_exrom_device::nes_exrom_device(const machine_config &mconfig, const char *ta , m_prg_mode(0), m_chr_mode(0), m_wram_protect_1(0), m_wram_protect_2(0), m_exram_control(0), m_wram_base(0), m_last_chr(0), m_ex1_chr(0) , m_split_chr(0), m_ex1_bank(0), m_high_chr(0), m_split_scr(0), m_split_rev(0), m_split_ctrl(0), m_split_yst(0), m_split_bank(0), m_vcount(0) , m_ppu(*this, ":ppu") // FIXME: this dependency should not exist - , m_sound(*this, ":maincpu:nesapu") // FIXME: this is a hack, it should have extra channels, not pass to the existing APU!!! + , m_sound(*this, "mmc5snd") // FIXME: this is a hack, it should be separated device, similar not same as NES APU!!! { } @@ -677,3 +678,16 @@ void nes_exrom_device::write_h(offs_t offset, uint8_t data) else if (!m_prgram.empty()) m_prgram[(((m_ram_hi_banks[bank] & 3) * 0x2000) + (offset & 0x1fff)) & (m_prgram.size() - 1)] = data; } + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void nes_exrom_device::device_add_mconfig(machine_config &config) +{ + // additional sound hardware + SPEAKER(config, "addon").front_center(); + + // TODO: temporary; will be separated device + NES_APU(config, m_sound, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.50); +} diff --git a/src/devices/bus/nes/mmc5.h b/src/devices/bus/nes/mmc5.h index 093a64471d0..86914fec177 100644 --- a/src/devices/bus/nes/mmc5.h +++ b/src/devices/bus/nes/mmc5.h @@ -36,6 +36,7 @@ public: protected: // device-level overrides + virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; void set_mirror(int page, int src); diff --git a/src/devices/bus/nes/namcot.cpp b/src/devices/bus/nes/namcot.cpp index e2898d6b9ba..256e5d65f3b 100644 --- a/src/devices/bus/nes/namcot.cpp +++ b/src/devices/bus/nes/namcot.cpp @@ -16,7 +16,6 @@ * Namcot 340 [mapper 210] TODO: - - add sound feature of Namcot-163 - Quinty is not working (same issue of Mendel Palace on TxROM boards, of course) ***********************************************************************************************************/ @@ -26,6 +25,8 @@ #include "namcot.h" #include "ui/uimain.h" +#include "speaker.h" + #ifdef NES_PCB_DEBUG #define VERBOSE 1 #else @@ -83,7 +84,7 @@ nes_namcot175_device::nes_namcot175_device(const machine_config &mconfig, const } nes_namcot163_device::nes_namcot163_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nes_namcot340_device(mconfig, NES_NAMCOT163, tag, owner, clock), m_wram_protect(0), m_latch(0), m_chr_bank(0) + : nes_namcot340_device(mconfig, NES_NAMCOT163, tag, owner, clock), m_wram_protect(0), m_latch(0), m_chr_bank(0), m_namco163snd(*this, "n163") { } @@ -550,13 +551,11 @@ void nes_namcot175_device::write_h(offs_t offset, uint8_t data) Compared to Namcot-175 here we have mapper controlled mirroring, NTRAM mapping to VRAM and additional - sound hw inside the chip (currently unemulated) and - some internal RAM. + sound hw inside the chip and some internal RAM. iNES: mapper 19 - In MESS: Supported (with no emulation of the - sound component) + In MESS: Supported -------------------------------------------------*/ @@ -614,7 +613,7 @@ void nes_namcot163_device::write_l(offs_t offset, uint8_t data) switch (offset & 0x1800) { case 0x0800: - LOG_MMC(("Namcot-163 sound reg write, data: %02x\n", data)); + m_namco163snd->data_w(data); break; default: n340_lowrite(offset, data); @@ -630,8 +629,7 @@ uint8_t nes_namcot163_device::read_l(offs_t offset) switch (offset & 0x1800) { case 0x0800: - LOG_MMC(("Namcot-163 sound reg read\n")); - return 0; + return m_namco163snd->data_r(); default: return n340_loread(offset); } @@ -667,7 +665,7 @@ void nes_namcot163_device::write_h(offs_t offset, uint8_t data) set_mirror(page, data); break; case 0x6000: - // TODO: data & 40 (or data & c0) disable sound if set + m_namco163snd->disable_w((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); prg8_89(data & 0x3f); break; case 0x6800: @@ -677,10 +675,23 @@ void nes_namcot163_device::write_h(offs_t offset, uint8_t data) case 0x7800: // the lower 4 bits work *BOTH* as WRAM write protect *AND* as sound address! m_wram_protect = data & 0x0f; - LOG_MMC(("Namcot-163 sound address write, data: %02x\n", data)); + m_namco163snd->addr_w(data); break; default: n340_hiwrite(offset, data); break; } } + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void nes_namcot163_device::device_add_mconfig(machine_config &config) +{ + // additional sound hardware + SPEAKER(config, "addon").front_center(); + + // TODO: Correct clock input / divider? + NAMCO_163(config, m_namco163snd, XTAL(21'477'272)/12).add_route(ALL_OUTPUTS, "addon", 0.5); +} diff --git a/src/devices/bus/nes/namcot.h b/src/devices/bus/nes/namcot.h index bcf72f5bad4..1dcf237fa90 100644 --- a/src/devices/bus/nes/namcot.h +++ b/src/devices/bus/nes/namcot.h @@ -6,6 +6,7 @@ #pragma once #include "nxrom.h" +#include "sound/namco_163.h" // ======================> nes_namcot3433_device @@ -157,11 +158,13 @@ protected: // device-level overrides virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + private: void set_mirror(uint8_t page, uint8_t data); uint8_t m_wram_protect, m_latch, m_chr_bank; - // TODO: add emulation of the sound part of the chip + required_device<namco_163_sound_device> m_namco163snd; }; diff --git a/src/devices/bus/nubus/bootbug.cpp b/src/devices/bus/nubus/bootbug.cpp index bebfda194fa..24763b64dc2 100644 --- a/src/devices/bus/nubus/bootbug.cpp +++ b/src/devices/bus/nubus/bootbug.cpp @@ -115,10 +115,10 @@ void nubus_bootbug_device::device_reset() WRITE32_MEMBER( nubus_bootbug_device::dev_w ) { - m_uart->ins8250_w(space, offset, data & 0xff); + m_uart->ins8250_w(offset, data & 0xff); } READ32_MEMBER( nubus_bootbug_device::dev_r ) { - return m_uart->ins8250_r(space, offset); + return m_uart->ins8250_r(offset); } diff --git a/src/devices/bus/pc_kbd/pcat101.cpp b/src/devices/bus/pc_kbd/pcat101.cpp index e36a3062492..77dfca9cbb7 100644 --- a/src/devices/bus/pc_kbd/pcat101.cpp +++ b/src/devices/bus/pc_kbd/pcat101.cpp @@ -14,7 +14,8 @@ * 1391401 US English 101-key * * TODO - * - matrix and mcu ports (skeleton only) + * - requires mask rom 6805u3 and timer + * - fix issue receiving commands */ #include "emu.h" @@ -45,173 +46,184 @@ const tiny_rom_entry *ibm_pc_at_101_keyboard_device::device_rom_region() const void ibm_pc_at_101_keyboard_device::device_add_mconfig(machine_config &config) { - M68705U3(config, m_maincpu, 0); + // FIXME: really a 6805U3 (mask ROM, not EPROM) part + M68705U3(config, m_mcu, 4_MHz_XTAL); - //m_maincpu->portb_r_cb().set(FUNC(ibm_pc_at_101_keyboard_device::portb_r)); - //m_maincpu->portb_w_cb().set(FUNC(ibm_pc_at_101_keyboard_device::portb_w)); + // ports A and C control the matrix column select + m_mcu->porta_w().set([this](u8 data) { m_porta = data; }); + m_mcu->portc_w().set([this](u8 data) { m_portc = data; }); + + // port D reads the matrix row output + m_mcu->portd_r().set(FUNC(ibm_pc_at_101_keyboard_device::portd_r)); + + // port B controls clock I/O, data output and LED output + m_mcu->portb_r().set(FUNC(ibm_pc_at_101_keyboard_device::portb_r)); + m_mcu->portb_w().set(FUNC(ibm_pc_at_101_keyboard_device::portb_w)); + + // TODO: timer is held high + //m_mcu->timer_r().set_constant(1); } -// FIXME: copied from ibm_pc_at_84_keyboard - probably completely wrong INPUT_PORTS_START(ibm_pc_at_101_keyboard) - PORT_START("column00") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL)) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column01") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB)) + PORT_START("col.1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_MAMEKEY(LSHIFT)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column02") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column03") + PORT_START("col.3") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column04") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column05") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_START("column06") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.6") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + + PORT_START("col.7") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') + + PORT_START("col.8") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column07") + PORT_START("col.9") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("column08") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + PORT_START("col.a") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_START("column09") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.b") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) - PORT_START("column10") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_START("col.c") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) - PORT_START("column11") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.d") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) - PORT_START("column12") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_START("col.e") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE) PORT_CHAR(UCHAR_MAMEKEY(PAUSE)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) - PORT_START("column13") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 1 End") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) + PORT_START("col.f") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 4 " UTF8_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 7 Home") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SCRLOCK) PORT_CHAR(UCHAR_MAMEKEY(SCRLOCK)) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("column14") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 0 Ins") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad . Del") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 2 " UTF8_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 6 " UTF8_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 8 " UTF8_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK)) - - PORT_START("column15") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 3 PgDn") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad * PrtSc") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 9 PgUp") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Scroll Lock Break") PORT_CODE(KEYCODE_SCRLOCK) PORT_CHAR(UCHAR_MAMEKEY(SCRLOCK)) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Sys Req") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT)) INPUT_PORTS_END ioport_constructor ibm_pc_at_101_keyboard_device::device_input_ports() const @@ -222,8 +234,8 @@ ioport_constructor ibm_pc_at_101_keyboard_device::device_input_ports() const ibm_pc_at_101_keyboard_device::ibm_pc_at_101_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PC_KBD_IBM_PC_AT_101, tag, owner, clock) , device_pc_kbd_interface(mconfig, *this) - , m_maincpu(*this, "mcu") - , m_column(*this, "column%02u", 0U) + , m_mcu(*this, "mcu") + , m_matrix(*this, "col.%x", 0U) , m_leds(*this, "led%u", 0U) { } @@ -237,5 +249,46 @@ void ibm_pc_at_101_keyboard_device::device_start() void ibm_pc_at_101_keyboard_device::device_reset() { - m_maincpu->reset(); + m_mcu->reset(); +} + +void ibm_pc_at_101_keyboard_device::data_write(int state) +{ + m_mcu->set_input_line(M68705_IRQ_LINE, state); +} + +u8 ibm_pc_at_101_keyboard_device::portb_r() +{ + if (clock_signal()) + return m_portb & ~0x02; + else + return m_portb | 0x02; +} + +void ibm_pc_at_101_keyboard_device::portb_w(u8 data) +{ + m_leds[LED_CAPS] = BIT(data, 7) || BIT(data, 6) || BIT(data, 5); + m_leds[LED_NUM] = BIT(data, 4); + m_leds[LED_SCROLL] = BIT(data, 3); + + m_portb = data; + + m_pc_kbdc->data_write_from_kb(!BIT(data, 2)); + m_pc_kbdc->clock_write_from_kb(!BIT(data, 0)); +} + +u8 ibm_pc_at_101_keyboard_device::portd_r() +{ + u8 data = 0xff; + + for (unsigned i = 0; i < 8; i++) + { + if (!BIT(m_portc, i)) + data &= m_matrix[i + 0]->read(); + + if (!BIT(m_porta, i)) + data &= m_matrix[i + 8]->read(); + } + + return data; } diff --git a/src/devices/bus/pc_kbd/pcat101.h b/src/devices/bus/pc_kbd/pcat101.h index e727335aa77..3fe43d5a6c8 100644 --- a/src/devices/bus/pc_kbd/pcat101.h +++ b/src/devices/bus/pc_kbd/pcat101.h @@ -33,14 +33,9 @@ protected: virtual ioport_constructor device_input_ports() const override; // device_pc_kbd_interface overrides - virtual DECLARE_WRITE_LINE_MEMBER(clock_write) override { m_maincpu->set_input_line(M68705_IRQ_LINE, state); }; - virtual DECLARE_WRITE_LINE_MEMBER(data_write) override { }; + virtual void data_write(int state) override; private: - // ports A, C: matrix column - // port D: matrix row - // port B: clock/data and leds - enum { LED_SCROLL = 0, @@ -48,9 +43,17 @@ private: LED_CAPS }; - required_device<m68705_device> m_maincpu; - required_ioport_array<16> m_column; + u8 portb_r(); + void portb_w(u8 data); + u8 portd_r(); + + required_device<m68705_device> m_mcu; + required_ioport_array<16> m_matrix; output_finder<3> m_leds; + + u8 m_porta; + u8 m_portb; + u8 m_portc; }; // device type definition diff --git a/src/devices/bus/pofo/hpc102.cpp b/src/devices/bus/pofo/hpc102.cpp index 42bc8b550fe..00838036bf0 100644 --- a/src/devices/bus/pofo/hpc102.cpp +++ b/src/devices/bus/pofo/hpc102.cpp @@ -110,7 +110,7 @@ uint8_t pofo_hpc102_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool b if (!(offset & 0x08)) { - data = m_uart->ins8250_r(machine().dummy_space(), offset & 0x07); + data = m_uart->ins8250_r(offset & 0x07); } } @@ -133,7 +133,7 @@ void pofo_hpc102_device::nwri_w(offs_t offset, uint8_t data, bool iom, bool bcom if (!(offset & 0x08)) { - m_uart->ins8250_w(machine().dummy_space(), offset & 0x07, data); + m_uart->ins8250_w(offset & 0x07, data); } } } diff --git a/src/devices/bus/s100/wunderbus.cpp b/src/devices/bus/s100/wunderbus.cpp index c7db4417dcb..64eb9638d74 100644 --- a/src/devices/bus/s100/wunderbus.cpp +++ b/src/devices/bus/s100/wunderbus.cpp @@ -388,15 +388,15 @@ uint8_t s100_wunderbus_device::s100_sinp_r(offs_t offset) break; case 1: - data = m_ace1->ins8250_r(machine().dummy_space(), offset & 0x07); + data = m_ace1->ins8250_r(offset & 0x07); break; case 2: - data = m_ace2->ins8250_r(machine().dummy_space(), offset & 0x07); + data = m_ace2->ins8250_r(offset & 0x07); break; case 3: - data = m_ace3->ins8250_r(machine().dummy_space(), offset & 0x07); + data = m_ace3->ins8250_r(offset & 0x07); break; } } @@ -511,15 +511,15 @@ void s100_wunderbus_device::s100_sout_w(offs_t offset, uint8_t data) break; case 1: - m_ace1->ins8250_w(machine().dummy_space(), offset & 0x07, data); + m_ace1->ins8250_w(offset & 0x07, data); break; case 2: - m_ace2->ins8250_w(machine().dummy_space(), offset & 0x07, data); + m_ace2->ins8250_w(offset & 0x07, data); break; case 3: - m_ace3->ins8250_w(machine().dummy_space(), offset & 0x07, data); + m_ace3->ins8250_w(offset & 0x07, data); break; } } diff --git a/src/devices/bus/spectrum/exp.cpp b/src/devices/bus/spectrum/exp.cpp index b93be6c7162..850b9f88384 100644 --- a/src/devices/bus/spectrum/exp.cpp +++ b/src/devices/bus/spectrum/exp.cpp @@ -167,7 +167,7 @@ void spectrum_expansion_slot_device::mreq_w(offs_t offset, uint8_t data) #include "melodik.h" #include "mface.h" #include "mikroplus.h" -//#include "opus.h" +#include "opus.h" #include "plus2test.h" //#include "plusd.h" #include "protek.h" @@ -190,7 +190,7 @@ void spectrum_expansion_devices(device_slot_interface &device) device.option_add("mface128", SPECTRUM_MFACE128); device.option_add("mikroplus", SPECTRUM_MIKROPLUS); device.option_add("mprint", SPECTRUM_MPRINT); - //device.option_add("opus", SPECTRUM_OPUS); + device.option_add("opus", SPECTRUM_OPUS); //device.option_add("plusd", SPECTRUM_PLUSD); device.option_add("protek", SPECTRUM_PROTEK); device.option_add("specdrum", SPECTRUM_SPECDRUM); @@ -209,6 +209,7 @@ void spec128_expansion_devices(device_slot_interface &device) device.option_add("mface128", SPECTRUM_MFACE128); device.option_add("mikroplus", SPECTRUM_MIKROPLUS); device.option_add("mprint", SPECTRUM_MPRINT); + device.option_add("opus", SPECTRUM_OPUS); device.option_add("plus2test", SPECTRUM_PLUS2TEST); device.option_add("protek", SPECTRUM_PROTEK); device.option_add("specdrum", SPECTRUM_SPECDRUM); diff --git a/src/devices/bus/spectrum/melodik.cpp b/src/devices/bus/spectrum/melodik.cpp index f6001bac35c..f6abc0f98d6 100644 --- a/src/devices/bus/spectrum/melodik.cpp +++ b/src/devices/bus/spectrum/melodik.cpp @@ -115,4 +115,4 @@ void spectrum_melodik_device::iorq_w(offs_t offset, uint8_t data) break; } m_exp->iorq_w(offset, data); -}
\ No newline at end of file +} diff --git a/src/devices/bus/spectrum/opus.cpp b/src/devices/bus/spectrum/opus.cpp new file mode 100644 index 00000000000..be73ef01e92 --- /dev/null +++ b/src/devices/bus/spectrum/opus.cpp @@ -0,0 +1,289 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Opus Discovery disc system + +**********************************************************************/ + + +#include "emu.h" +#include "opus.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(SPECTRUM_OPUS, spectrum_opus_device, "spectrum_opus", "Opus Discovery") + + +//------------------------------------------------- +// INPUT_PORTS( opus ) +//------------------------------------------------- + +static INPUT_PORTS_START( opus ) + PORT_START("JOY") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_8WAY + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_8WAY + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON1) +INPUT_PORTS_END + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor spectrum_opus_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( opus ); +} + +//------------------------------------------------- +// MACHINE_DRIVER( opus ) +//------------------------------------------------- + +FLOPPY_FORMATS_MEMBER( spectrum_opus_device::floppy_formats ) + FLOPPY_OPD_FORMAT +FLOPPY_FORMATS_END + +static void spectrum_floppies(device_slot_interface &device) +{ + device.option_add("35ssdd", FLOPPY_35_SSDD); + device.option_add("35dd", FLOPPY_35_DD); +} + +ROM_START(opus) + ROM_REGION(0x2000, "rom", 0) + ROM_DEFAULT_BIOS("opus22") + ROM_SYSTEM_BIOS(0, "opus22", "Opus v2.2") + ROMX_LOAD("opus-22.rom", 0x0000, 0x2000, CRC(50f0eae0) SHA1(0eee1c503f71709fce8b7560dadc2d07d15edb80), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "opus21", "Opus v2.1") + ROMX_LOAD("opus-21.rom", 0x0000, 0x2000, CRC(619973f9) SHA1(31999a68901392bba907cf5a15e264b6759f1a29), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(2, "opus222", "Opus v2.22") + ROMX_LOAD("opus-222.rom", 0x0000, 0x2000, CRC(08ce9949) SHA1(71f1c8a8b923f7751d1ff48d30b8e18a15b92591), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(3, "quickdos", "QuickDOS v2.31") // MegaSoft + ROMX_LOAD("quickdos-231.rom", 0x0000, 0x2000, CRC(d042b32a) SHA1(2975f7eb61d44e898cdd6e3196893e95637f17ff), ROM_BIOS(3)) + ROM_SYSTEM_BIOS(4, "excom", "EXCOM v2.28") // Paul Cheffings + ROMX_LOAD("excom-228.rom", 0x0000, 0x2000, CRC(29257418) SHA1(098a812c4707251f647553a2abc1436afa38f43c), ROM_BIOS(4)) +ROM_END + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void spectrum_opus_device::device_add_mconfig(machine_config &config) +{ + WD1770(config, m_fdc, 16_MHz_XTAL / 2); + m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w)); + + FLOPPY_CONNECTOR(config, "fdc:0", spectrum_floppies, "35dd", spectrum_opus_device::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", spectrum_floppies, "35dd", spectrum_opus_device::floppy_formats).enable_sound(true); + + /* parallel printer port */ + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->ack_handler().set(m_pia, FUNC(pia6821_device::ca2_w)); + m_centronics->busy_handler().set(FUNC(spectrum_opus_device::busy_w)); + + /* pia */ + PIA6821(config, m_pia, 0); + m_pia->writepa_handler().set(FUNC(spectrum_opus_device::pia_out_a)); + m_pia->writepb_handler().set(FUNC(spectrum_opus_device::pia_out_b)); + m_pia->cb2_handler().set("centronics", FUNC(centronics_device::write_strobe)); + + /* software list */ + SOFTWARE_LIST(config, "flop_list").set_original("spectrum_flop_opus"); + + /* passthru without NMI */ + SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr); + m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w)); +} + +const tiny_rom_entry *spectrum_opus_device::device_rom_region() const +{ + return ROM_NAME( opus ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// spectrum_opus_device - constructor +//------------------------------------------------- + +spectrum_opus_device::spectrum_opus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, SPECTRUM_OPUS, tag, owner, clock) + , device_spectrum_expansion_interface(mconfig, *this) + , m_joy(*this, "JOY") + , m_rom(*this, "rom") + , m_pia(*this, "pia") + , m_fdc(*this, "fdc") + , m_floppy0(*this, "fdc:0") + , m_floppy1(*this, "fdc:1") + , m_centronics(*this, "centronics") + , m_exp(*this, "exp") +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void spectrum_opus_device::device_start() +{ + memset(m_ram, 0, sizeof(m_ram)); + + save_item(NAME(m_romcs)); + save_item(NAME(m_ram)); + save_item(NAME(m_last_pc)); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void spectrum_opus_device::device_reset() +{ + m_romcs = 0; + m_last_pc = 0x0000; +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +READ_LINE_MEMBER(spectrum_opus_device::romcs) +{ + return m_romcs | m_exp->romcs(); +} + +void spectrum_opus_device::opcode_fetch(offs_t offset) +{ + m_exp->opcode_fetch(offset); + + if (!machine().side_effects_disabled()) + { + switch (m_last_pc) + { + case 0x0008: case 0x0048: case 0x1708: + m_romcs = 1; + break; + case 0x1748: + m_romcs = 0; + break; + } + } + m_last_pc = offset; +} + +uint8_t spectrum_opus_device::iorq_r(offs_t offset) +{ + uint8_t data = m_exp->iorq_r(offset); + + // PIA bit 7 is enable joystick and selected on A5 only + if (!BIT(m_pia->a_output(), 7) && (~offset & 0x20)) + { + data &= m_joy->read() & 0x1f; + } + return data; +} + +void spectrum_opus_device::iorq_w(offs_t offset, uint8_t data) +{ + m_exp->iorq_w(offset, data); +} + +uint8_t spectrum_opus_device::mreq_r(offs_t offset) +{ + uint8_t data = 0xff; + + if (m_romcs) + { + switch (offset & 0xf800) + { + case 0x0000: case 0x0800: case 0x1000: case 0x1800: + data = m_rom->base()[offset & 0x1fff]; + break; + case 0x2000: + data = m_ram[offset & 0x7ff]; + break; + case 0x2800: + data = m_fdc->read(offset & 0x03); + break; + case 0x3000: + data = m_pia->read(offset & 0x03); + break; + case 0x3800: // Extra 2K described in QuickDOS manual - not used + data = m_ram[offset & 0xfff]; + break; + } + } + + if (m_exp->romcs()) + data &= m_exp->mreq_r(offset); + + return data; +} + +void spectrum_opus_device::mreq_w(offs_t offset, uint8_t data) +{ + if (m_romcs) + { + switch (offset & 0xf800) + { + case 0x2000: + m_ram[offset & 0x7ff] = data; + break; + case 0x2800: + m_fdc->write(offset & 0x03, data); + break; + case 0x3000: + m_pia->write(offset & 0x03, data); + break; + case 0x3800: // Extra 2K described in QuickDOS manual - not used + m_ram[offset & 0xfff] = data; + break; + } + } + + if (m_exp->romcs()) + m_exp->mreq_w(offset, data); +} + +WRITE8_MEMBER(spectrum_opus_device::pia_out_a) +{ + floppy_image_device *floppy = nullptr; + + // bit 0, 1: drive select + if (!BIT(data, 0)) floppy = m_floppy1->get_device(); + if (!BIT(data, 1)) floppy = m_floppy0->get_device(); + m_fdc->set_floppy(floppy); + + // bit 4: side select + if (floppy) + floppy->ss_w(BIT(data, 4)); + + // bit 5: density + m_fdc->dden_w(BIT(data, 5)); +} + +WRITE8_MEMBER(spectrum_opus_device::pia_out_b) +{ + m_centronics->write_data1(BIT(data, 1)); + m_centronics->write_data2(BIT(data, 2)); + m_centronics->write_data3(BIT(data, 3)); + m_centronics->write_data4(BIT(data, 4)); + m_centronics->write_data5(BIT(data, 5)); + m_centronics->write_data6(BIT(data, 6)); + m_centronics->write_data7(BIT(data, 7)); +} + +WRITE_LINE_MEMBER(spectrum_opus_device::busy_w) +{ + m_pia->set_a_input(state << 6, 0xbf); +} diff --git a/src/devices/bus/spectrum/opus.h b/src/devices/bus/spectrum/opus.h new file mode 100644 index 00000000000..8d72d8be94b --- /dev/null +++ b/src/devices/bus/spectrum/opus.h @@ -0,0 +1,75 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Opus Discovery disc system + +**********************************************************************/ + +#ifndef MAME_BUS_SPECTRUM_OPUS_H +#define MAME_BUS_SPECTRUM_OPUS_H + +#include "exp.h" +#include "softlist.h" +#include "imagedev/floppy.h" +#include "machine/wd_fdc.h" +#include "machine/6821pia.h" +#include "bus/centronics/ctronics.h" +#include "formats/opd_dsk.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class spectrum_opus_device: + public device_t, + public device_spectrum_expansion_interface + +{ +public: + // construction/destruction + spectrum_opus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + DECLARE_FLOPPY_FORMATS(floppy_formats); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; + + virtual void opcode_fetch(offs_t offset) override; + virtual uint8_t mreq_r(offs_t offset) override; + virtual void mreq_w(offs_t offset, uint8_t data) override; + virtual uint8_t iorq_r(offs_t offset) override; + virtual void iorq_w(offs_t offset, uint8_t data) override; + virtual DECLARE_READ_LINE_MEMBER(romcs) override; + +private: + DECLARE_WRITE8_MEMBER(pia_out_a); + DECLARE_WRITE8_MEMBER(pia_out_b); + DECLARE_WRITE_LINE_MEMBER(busy_w); + + required_ioport m_joy; + required_memory_region m_rom; + required_device<pia6821_device> m_pia; + required_device<wd_fdc_device_base> m_fdc; + required_device<floppy_connector> m_floppy0; + required_device<floppy_connector> m_floppy1; + required_device<centronics_device> m_centronics; + required_device<spectrum_expansion_slot_device> m_exp; + + int m_romcs; + uint8_t m_ram[4 * 1024]; + offs_t m_last_pc; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(SPECTRUM_OPUS, spectrum_opus_device) + +#endif // MAME_BUS_SPECTRUM_OPUS_H diff --git a/src/devices/bus/svi3x8/expander/sv603.cpp b/src/devices/bus/svi3x8/expander/sv603.cpp index ce4a9f11bcf..fc8e8c86d96 100644 --- a/src/devices/bus/svi3x8/expander/sv603.cpp +++ b/src/devices/bus/svi3x8/expander/sv603.cpp @@ -36,10 +36,10 @@ const tiny_rom_entry *sv603_device::device_rom_region() const // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(sv603_device::device_add_mconfig) +void sv603_device::device_add_mconfig(machine_config &config) +{ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snd", SN76489A, XTAL(10'738'635) / 3) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + SN76489A(config, m_snd, XTAL(10'738'635) / 3).add_route(ALL_OUTPUTS, "mono", 1.00); // controller ports COLECOVISION_CONTROL_PORT(config, m_joy[0], colecovision_control_port_devices, "hand"); @@ -50,7 +50,7 @@ MACHINE_CONFIG_START(sv603_device::device_add_mconfig) // cartridge slot COLECOVISION_CARTRIDGE_SLOT(config, m_cart, colecovision_cartridges, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("coleco"); -MACHINE_CONFIG_END +} //************************************************************************** diff --git a/src/devices/bus/svi3x8/slot/sv805.cpp b/src/devices/bus/svi3x8/slot/sv805.cpp index cdcaee6f167..a5ceadf3577 100644 --- a/src/devices/bus/svi3x8/slot/sv805.cpp +++ b/src/devices/bus/svi3x8/slot/sv805.cpp @@ -77,7 +77,7 @@ uint8_t sv805_device::iorq_r(offs_t offset) case 0x2d: case 0x2e: case 0x2f: - return m_uart->ins8250_r(machine().dummy_space(), offset & 0x07); + return m_uart->ins8250_r(offset & 0x07); } return 0xff; @@ -95,7 +95,7 @@ void sv805_device::iorq_w(offs_t offset, uint8_t data) case 0x2d: case 0x2e: case 0x2f: - m_uart->ins8250_w(machine().dummy_space(), offset & 0x07, data); + m_uart->ins8250_w(offset & 0x07, data); } } diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp index 757874abae2..61ca35c2199 100644 --- a/src/devices/bus/vme/vme.cpp +++ b/src/devices/bus/vme/vme.cpp @@ -359,6 +359,36 @@ void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8 } } +void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8smo_delegate rhandler, write8smo_delegate whandler, uint32_t mask) +{ + LOG("%s %s AM%d D%02x\n", tag(), FUNCNAME, amod, m_prgwidth); + + LOG(" - width:%d\n", m_prgwidth); + + // TODO: support address modifiers and buscycles other than single access cycles + switch(amod) + { + case A16_SC: break; + case A24_SC: break; + case A32_SC: break; + default: fatalerror("VME D8: Non supported Address modifier: AM%02x\n", amod); + } + + switch(m_prgwidth) + { + case 16: + m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0x0000ffff)); + break; + case 24: + m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint32_t)(mask & 0x00ffffff)); + break; + case 32: + m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, mask); + break; + default: fatalerror("VME D8: Bus width %d not supported\n", m_prgwidth); + } +} + // D16 bit devices in A16, A24 and A32 void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask) { diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h index 755330f7689..2849b07f8b3 100644 --- a/src/devices/bus/vme/vme.h +++ b/src/devices/bus/vme/vme.h @@ -183,6 +183,7 @@ public: }; void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask); void install_device(vme_amod_t amod, offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler, uint32_t mask); + void install_device(vme_amod_t amod, offs_t start, offs_t end, read8smo_delegate rhandler, write8smo_delegate whandler, uint32_t mask); // void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); void install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask); void install_device(vme_amod_t amod, offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask); diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp index 362beef2546..133c17e9f49 100644 --- a/src/devices/bus/vme/vme_mzr8300.cpp +++ b/src/devices/bus/vme/vme_mzr8300.cpp @@ -175,17 +175,17 @@ void vme_mzr8300_card_device::device_start() // m_vme->static_set_custom_spaces(*this); m_vme->install_device(vme_device::A16_SC, base + 0, base + 1, // Channel B - Data - read8_delegate(FUNC(z80sio_device::db_r), subdevice<z80sio_device>("sio0")), - write8_delegate(FUNC(z80sio_device::db_w), subdevice<z80sio_device>("sio0")), 0x00ff); + read8smo_delegate(FUNC(z80sio_device::db_r), subdevice<z80sio_device>("sio0")), + write8smo_delegate(FUNC(z80sio_device::db_w), subdevice<z80sio_device>("sio0")), 0x00ff); m_vme->install_device(vme_device::A16_SC, base + 2, base + 3, // Channel B - Control - read8_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("sio0")), - write8_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("sio0")), 0x00ff); + read8smo_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("sio0")), + write8smo_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("sio0")), 0x00ff); m_vme->install_device(vme_device::A16_SC, base + 4, base + 5, // Channel A - Data - read8_delegate(FUNC(z80sio_device::da_r), subdevice<z80sio_device>("sio0")), - write8_delegate(FUNC(z80sio_device::da_w), subdevice<z80sio_device>("sio0")), 0x00ff); + read8smo_delegate(FUNC(z80sio_device::da_r), subdevice<z80sio_device>("sio0")), + write8smo_delegate(FUNC(z80sio_device::da_w), subdevice<z80sio_device>("sio0")), 0x00ff); m_vme->install_device(vme_device::A16_SC, base + 6, base + 7, // Channel A - Control - read8_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")), - write8_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff); + read8smo_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")), + write8smo_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff); m_vme->install_device(vme_device::A16_SC, base + 0x10, base + 0x13, // Am9513 read8sm_delegate(FUNC(am9513_device::read8), subdevice<am9513_device>("stc")), write8sm_delegate(FUNC(am9513_device::write8), subdevice<am9513_device>("stc")), 0x00ff); diff --git a/src/devices/bus/wangpc/mcc.cpp b/src/devices/bus/wangpc/mcc.cpp index 5b029ed38d2..a3419f7c373 100644 --- a/src/devices/bus/wangpc/mcc.cpp +++ b/src/devices/bus/wangpc/mcc.cpp @@ -143,7 +143,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) case 0x06/2: if (ACCESSING_BITS_0_7) { - data = 0xff00 | m_sio->cd_ba_r(machine().dummy_space(), offset >> 1); + data = 0xff00 | m_sio->cd_ba_r(offset >> 1); } break; @@ -153,7 +153,7 @@ uint16_t wangpc_mcc_device::wangpcbus_iorc_r(offs_t offset, uint16_t mem_mask) case 0x0e/2: if (ACCESSING_BITS_0_7) { - data = 0xff00 | m_dart->cd_ba_r(machine().dummy_space(), offset >> 1); + data = 0xff00 | m_dart->cd_ba_r(offset >> 1); } break; @@ -208,14 +208,14 @@ void wangpc_mcc_device::wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint case 0x02/2: case 0x04/2: case 0x06/2: - m_sio->cd_ba_w(machine().dummy_space(), offset >> 1, data & 0xff); + m_sio->cd_ba_w(offset >> 1, data & 0xff); break; case 0x08/2: case 0x0a/2: case 0x0c/2: case 0x0e/2: - m_dart->cd_ba_w(machine().dummy_space(), offset >> 1, data & 0xff); + m_dart->cd_ba_w(offset >> 1, data & 0xff); break; case 0x12/2: diff --git a/src/devices/bus/wangpc/wdc.cpp b/src/devices/bus/wangpc/wdc.cpp index 2ad74d8c8fd..8b816a50ece 100644 --- a/src/devices/bus/wangpc/wdc.cpp +++ b/src/devices/bus/wangpc/wdc.cpp @@ -325,11 +325,11 @@ WRITE8_MEMBER( wangpc_wdc_device::status_w ) } -READ8_MEMBER( wangpc_wdc_device::ctc_ch0_r ) { return m_ctc->read(machine().dummy_space(), 0); } -WRITE8_MEMBER( wangpc_wdc_device::ctc_ch0_w ) { m_ctc->write(machine().dummy_space(), 0, data); } -READ8_MEMBER( wangpc_wdc_device::ctc_ch1_r ) { return m_ctc->read(machine().dummy_space(), 1); } -WRITE8_MEMBER( wangpc_wdc_device::ctc_ch1_w ) { m_ctc->write(machine().dummy_space(), 1, data); } -READ8_MEMBER( wangpc_wdc_device::ctc_ch2_r ) { return m_ctc->read(machine().dummy_space(), 2); } -WRITE8_MEMBER( wangpc_wdc_device::ctc_ch2_w ) { m_ctc->write(machine().dummy_space(), 2, data); } -READ8_MEMBER( wangpc_wdc_device::ctc_ch3_r ) { return m_ctc->read(machine().dummy_space(), 3); } -WRITE8_MEMBER( wangpc_wdc_device::ctc_ch3_w ) { m_ctc->write(machine().dummy_space(), 3, data); } +READ8_MEMBER( wangpc_wdc_device::ctc_ch0_r ) { return m_ctc->read(0); } +WRITE8_MEMBER( wangpc_wdc_device::ctc_ch0_w ) { m_ctc->write(0, data); } +READ8_MEMBER( wangpc_wdc_device::ctc_ch1_r ) { return m_ctc->read(1); } +WRITE8_MEMBER( wangpc_wdc_device::ctc_ch1_w ) { m_ctc->write(1, data); } +READ8_MEMBER( wangpc_wdc_device::ctc_ch2_r ) { return m_ctc->read(2); } +WRITE8_MEMBER( wangpc_wdc_device::ctc_ch2_w ) { m_ctc->write(2, data); } +READ8_MEMBER( wangpc_wdc_device::ctc_ch3_r ) { return m_ctc->read(3); } +WRITE8_MEMBER( wangpc_wdc_device::ctc_ch3_w ) { m_ctc->write(3, data); } diff --git a/src/devices/cpu/h8/h83003.cpp b/src/devices/cpu/h8/h83003.cpp index 4e3e59c15cf..7b7b468d7b5 100644 --- a/src/devices/cpu/h8/h83003.cpp +++ b/src/devices/cpu/h8/h83003.cpp @@ -136,7 +136,9 @@ void h83003_device::map(address_map &map) map(0xffffd2, 0xffffd2).rw("port9", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); map(0xffffd3, 0xffffd3).rw("porta", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); map(0xffffd4, 0xffffd4).w("portb", FUNC(h8_port_device::ddr_w)); + map(0xffffd5, 0xffffd5).w("portc", FUNC(h8_port_device::ddr_w)); map(0xffffd6, 0xffffd6).rw("portb", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffffd7, 0xffffd7).rw("portc", FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); map(0xffffda, 0xffffda).rw("port4", FUNC(h8_port_device::pcr_r), FUNC(h8_port_device::pcr_w)); map(0xffffe0, 0xffffe7).r("adc", FUNC(h8_adc_device::addr8_r)); @@ -167,6 +169,7 @@ void h83003_device::device_add_mconfig(machine_config &config) H8_PORT(config, "port9", h8_device::PORT_9, 0x00, 0xc0); H8_PORT(config, "porta", h8_device::PORT_A, 0x00, 0x00); H8_PORT(config, "portb", h8_device::PORT_B, 0x00, 0x00); + H8_PORT(config, "portc", h8_device::PORT_C, 0x00, 0x00); H8_TIMER16(config, "timer16", 5, 0xe0); H8H_TIMER16_CHANNEL(config, "timer16:0", 2, 2, "intc", 24); H8H_TIMER16_CHANNEL(config, "timer16:1", 2, 2, "intc", 28); diff --git a/src/devices/cpu/i386/cache.h b/src/devices/cpu/i386/cache.h index 548a1fb9f85..a04f2cacf2e 100644 --- a/src/devices/cpu/i386/cache.h +++ b/src/devices/cpu/i386/cache.h @@ -222,37 +222,37 @@ u8 memory[memorysize]; void readline(u8 *data, u32 address) { - for (int n = 0; n < 64; n++) - data[n] = memory[address + n]; + for (int n = 0; n < 64; n++) + data[n] = memory[address + n]; } void writeline(u8 *data, u32 address) { - for (int n = 0; n < 64; n++) - memory[address + n] = data[n]; + for (int n = 0; n < 64; n++) + memory[address + n] = data[n]; } void cache_tester() { - cpucache<18, 8, 6, 2> cache; - bool r; - u8 *data; - int address; - u8 value; + cpucache<18, 8, 6, 2> cache; + bool r; + u8 *data; + int address; + u8 value; - for (int n = 0; n < memorysize; n++) - memory[n] = 0xaa ^ n; - address = std::rand() & (memorysize - 1); - r = cache.search(address, &data); - if (r == false) - { - r = cache.allocate(address, &data); - if (r == true) - writeline(data, cache.base(address)); - readline(data, cache.base(address)); - } - value = data[address & 63]; - if (value != memory[address]) - printf("Error reading address %d\n\r", address); + for (int n = 0; n < memorysize; n++) + memory[n] = 0xaa ^ n; + address = std::rand() & (memorysize - 1); + r = cache.search(address, &data); + if (r == false) + { + r = cache.allocate(address, &data); + if (r == true) + writeline(data, cache.base(address)); + readline(data, cache.base(address)); + } + value = data[address & 63]; + if (value != memory[address]) + printf("Error reading address %d\n\r", address); } */ diff --git a/src/devices/cpu/i386/i386.h b/src/devices/cpu/i386/i386.h index d8422780710..90aab9f0667 100644 --- a/src/devices/cpu/i386/i386.h +++ b/src/devices/cpu/i386/i386.h @@ -1637,7 +1637,7 @@ protected: virtual void device_start() override; virtual void device_reset() override; - virtual u8 mem_pr8(offs_t address) override { return opcode_read_cache<u8, NATIVE_ENDIAN_VALUE_LE_BE(0, 3)>(address); } + virtual u8 mem_pr8(offs_t address) override { return opcode_read_cache<u8, NATIVE_ENDIAN_VALUE_LE_BE(0, 3)>(address); } virtual u16 mem_pr16(offs_t address) override { return opcode_read_cache<u16, NATIVE_ENDIAN_VALUE_LE_BE(0, 2)>(address); } virtual u32 mem_pr32(offs_t address) override { return opcode_read_cache<u32, 0>(address); } virtual u8 mem_prd8(offs_t address) override { return program_read_cache<u8, NATIVE_ENDIAN_VALUE_LE_BE(0, 3)>(address); } diff --git a/src/devices/cpu/m68000/m68000.h b/src/devices/cpu/m68000/m68000.h index d6afd83d534..0ee41f348b5 100644 --- a/src/devices/cpu/m68000/m68000.h +++ b/src/devices/cpu/m68000/m68000.h @@ -148,6 +148,7 @@ public: void set_tas_write_callback(write8_delegate callback); uint16_t get_fc(); void set_hmmu_enable(int enable); + int get_pmmu_enable() {return m_pmmu_enabled;}; void set_fpu_enable(int enable); void set_buserror_details(uint32_t fault_addr, uint8_t rw, uint8_t fc); @@ -377,21 +378,6 @@ protected: const device_type type, uint32_t prg_data_width, uint32_t prg_address_bits, address_map_constructor internal_map); }; -class m68301_device : public m68000_base_device -{ -public: - // construction/destruction - m68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; - - virtual uint32_t execute_min_cycles() const override { return 4; }; - virtual uint32_t execute_max_cycles() const override { return 158; }; - - // device-level overrides - virtual void device_start() override; -}; - @@ -649,7 +635,6 @@ public: DECLARE_DEVICE_TYPE(M68000, m68000_device) -DECLARE_DEVICE_TYPE(M68301, m68301_device) DECLARE_DEVICE_TYPE(M68008, m68008_device) DECLARE_DEVICE_TYPE(M68008PLCC, m68008plcc_device) DECLARE_DEVICE_TYPE(M68010, m68010_device) diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp index e875b377af3..851c27163ea 100644 --- a/src/devices/cpu/m68000/m68kcpu.cpp +++ b/src/devices/cpu/m68000/m68kcpu.cpp @@ -2019,11 +2019,6 @@ std::unique_ptr<util::disasm_interface> m68000_device::create_disassembler() return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000); } -std::unique_ptr<util::disasm_interface> m68301_device::create_disassembler() -{ - return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000); -} - std::unique_ptr<util::disasm_interface> m68008_device::create_disassembler() { return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68008); @@ -2362,7 +2357,6 @@ device_memory_interface::space_config_vector m68000_base_device::memory_space_co DEFINE_DEVICE_TYPE(M68000, m68000_device, "m68000", "Motorola MC68000") -DEFINE_DEVICE_TYPE(M68301, m68301_device, "m68301", "Motorola MC68301") DEFINE_DEVICE_TYPE(M68008, m68008_device, "m68008", "Motorola MC68008") DEFINE_DEVICE_TYPE(M68008PLCC, m68008plcc_device, "m68008plcc", "Motorola MC68008PLCC") DEFINE_DEVICE_TYPE(M68010, m68010_device, "m68010", "Motorola MC68010") @@ -2405,21 +2399,6 @@ m68000_device::m68000_device(const machine_config &mconfig, const char *tag, dev -m68301_device::m68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : m68000_base_device(mconfig, tag, owner, clock, M68301, 16,24) -{ -} - - -void m68301_device::device_start() -{ - init_cpu_m68000(); -} - - - - - /* m68008_device */ diff --git a/src/devices/cpu/m68000/m68kmmu.h b/src/devices/cpu/m68000/m68kmmu.h index 114d89ff5c1..99481039b0f 100644 --- a/src/devices/cpu/m68000/m68kmmu.h +++ b/src/devices/cpu/m68000/m68kmmu.h @@ -33,7 +33,7 @@ static constexpr uint32_t M68K_MMU_DF_WP = 0x00000004; static constexpr uint32_t M68K_MMU_DF_USED = 0x00000008; static constexpr uint32_t M68K_MMU_DF_MODIFIED = 0x00000010; static constexpr uint32_t M68K_MMU_DF_CI = 0x00000040; -static constexpr uint32_t M68K_MMU_DF_SUPERVISOR = 0000000100; +static constexpr uint32_t M68K_MMU_DF_SUPERVISOR = 0x00000100; static constexpr uint32_t M68K_MMU_DF_ADDR_MASK = 0xfffffff0; static constexpr uint32_t M68K_MMU_DF_IND_ADDR_MASK = 0xfffffffc; diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp index 60d39a25139..c307c19a611 100644 --- a/src/devices/cpu/mcs51/mcs51.cpp +++ b/src/devices/cpu/mcs51/mcs51.cpp @@ -874,6 +874,8 @@ uint8_t mcs51_cpu_device::bit_address_r(uint8_t offset) int distance; /* distance between bit addressable words */ /* 1 for normal bits, 8 for sfr bit addresses */ + m_last_bit = offset; + //User defined bit addresses 0x20-0x2f (values are 0x0-0x7f) if (offset < 0x80) { distance = 1; @@ -1358,6 +1360,8 @@ void mcs51_cpu_device::execute_op(uint8_t op) m_recalc_parity = 0; } + m_last_op = op; + switch( op ) { case 0x00: nop(op); break; //NOP @@ -1777,6 +1781,10 @@ void mcs51_cpu_device::check_irqs() return; } + // Hack to work around polling latency issue with JB INT0/INT1 + if (m_last_op == 0x20 && ((int_vec == V_IE0 && m_last_bit == 0xb2) || (int_vec == V_IE1 && m_last_bit == 0xb3))) + PC = PPC + 3; + //Save current pc to stack, set pc to new interrupt vector push_pc(); PC = int_vec; @@ -2126,6 +2134,8 @@ void mcs51_cpu_device::device_start() save_item(NAME(m_ppc)); save_item(NAME(m_pc)); + save_item(NAME(m_last_op)); + save_item(NAME(m_last_bit)); save_item(NAME(m_rwm) ); save_item(NAME(m_cur_irq_prio) ); save_item(NAME(m_last_line_state) ); @@ -2213,6 +2223,8 @@ void mcs51_cpu_device::device_reset() /* Flag as NO IRQ in Progress */ m_irq_active = 0; m_cur_irq_prio = -1; + m_last_op = 0; + m_last_bit = 0; /* these are all defined reset states */ PC = 0; diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h index e0d4028f493..bd7b6d7b085 100644 --- a/src/devices/cpu/mcs51/mcs51.h +++ b/src/devices/cpu/mcs51/mcs51.h @@ -122,6 +122,10 @@ protected: uint8_t m_forced_inputs[4]; /* allow read even if configured as output */ + // JB-related hacks + uint8_t m_last_op; + uint8_t m_last_bit; + int m_icount; struct mcs51_uart diff --git a/src/devices/cpu/ns32000/ns32000.cpp b/src/devices/cpu/ns32000/ns32000.cpp new file mode 100644 index 00000000000..6bf23e28289 --- /dev/null +++ b/src/devices/cpu/ns32000/ns32000.cpp @@ -0,0 +1,160 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/***************************************************************************** +* +* ns32000.cpp +* +* NS32000 CPU family +* +*****************************************************************************/ + +#include "emu.h" +#include "ns32000.h" +#include "ns32000dasm.h" +#include "debugger.h" + +//************************************************************************** +// DEVICE INTERFACE +//************************************************************************** + +DEFINE_DEVICE_TYPE(NS32008, ns32008_cpu_device, "ns32008", "National Semiconductor NS32008") +DEFINE_DEVICE_TYPE(NS32016, ns32016_cpu_device, "ns32016", "National Semiconductor NS32016") +DEFINE_DEVICE_TYPE(NS32032, ns32032_cpu_device, "ns32032", "National Semiconductor NS32032") + + +//------------------------------------------------- +// ns32000_cpu_device - constructor +//------------------------------------------------- + +ns32000_cpu_device::ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int databits, int addrbits) + : cpu_device(mconfig, type, tag, owner, clock) + , m_program_config("program", ENDIANNESS_LITTLE, databits, addrbits, 0) + , m_icount(0) +{ +} + +ns32008_cpu_device::ns32008_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : ns32000_cpu_device(mconfig, NS32008, tag, owner, clock, 8, 24) +{ +} + +ns32016_cpu_device::ns32016_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : ns32000_cpu_device(mconfig, NS32016, tag, owner, clock, 16, 24) +{ +} + +ns32032_cpu_device::ns32032_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : ns32000_cpu_device(mconfig, NS32032, tag, owner, clock, 32, 24) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void ns32000_cpu_device::device_start() +{ + set_icountptr(m_icount); + + save_item(NAME(m_pc)); + save_item(NAME(m_r)); + save_item(NAME(m_f)); + + state_add(STATE_GENPC, "GENPC", m_pc).noshow(); + state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow(); + + // dedicated registers + state_add(NS32000_PC, "PC", m_pc); + state_add(NS32000_SB, "SB", m_sb); + state_add(NS32000_FP, "FP", m_fp); + state_add(NS32000_SP1, "SP1", m_sp1); + state_add(NS32000_SP0, "SP0", m_sp0); + state_add(NS32000_INTBASE, "INTBASE", m_intbase); + state_add(NS32000_PSR, "PSR", m_psr); + state_add(NS32000_MOD, "MOD", m_mod); + + // general registers + for (unsigned i = 0; i < 8; i++) + state_add(NS32000_R0 + i, util::string_format("R%d", i).c_str(), m_r[i]); + + // floating point registers + //for (unsigned i = 0; i < 8; i++) + // state_add(NS32000_R7 + i, util::string_format("F%d", i).c_str(), m_f[i]); + + // set our instruction counter + //set_icountptr(m_icount); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void ns32000_cpu_device::device_reset() +{ + m_nmi_line = false; + m_irq_line = false; + + m_pc = 0; +} + +//------------------------------------------------- +// execute_run - execute a timeslice's worth of +// opcodes +//------------------------------------------------- + +void ns32000_cpu_device::execute_run() +{ + while (m_icount > 0) + { + debugger_instruction_hook(m_pc); + + m_icount--; + } +} + +//------------------------------------------------- +// execute_set_input - act on a changed input/ +// interrupt line +//------------------------------------------------- + +void ns32000_cpu_device::execute_set_input(int inputnum, int state) +{ + switch (inputnum) + { + case INPUT_LINE_NMI: + // NMI is edge triggered + m_nmi_line = m_nmi_line || (state == ASSERT_LINE); + break; + + case INPUT_LINE_IRQ0: + // IRQ is line triggered + m_irq_line = state == ASSERT_LINE; + break; + } +} + +//------------------------------------------------- +// memory_space_config - return the configuration +// of the specified address space, or nullptr if +// the space doesn't exist +//------------------------------------------------- + +device_memory_interface::space_config_vector ns32000_cpu_device::memory_space_config() const +{ + return space_config_vector{ std::make_pair(AS_PROGRAM, &m_program_config) }; +} + +bool ns32000_cpu_device::memory_translate(int spacenum, int intention, offs_t &address) +{ + return true; +} + +//------------------------------------------------- +// disassemble - call the disassembly +// helper function +//------------------------------------------------- + +std::unique_ptr<util::disasm_interface> ns32000_cpu_device::create_disassembler() +{ + return std::make_unique<ns32000_disassembler>(); +} diff --git a/src/devices/cpu/ns32000/ns32000.h b/src/devices/cpu/ns32000/ns32000.h new file mode 100644 index 00000000000..7b17cafba99 --- /dev/null +++ b/src/devices/cpu/ns32000/ns32000.h @@ -0,0 +1,149 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/***************************************************************************** +* +* ns32000.h +* +* NS32000 CPU family +* +*****************************************************************************/ + +#ifndef MAME_CPU_NS32016_NS32016_H +#define MAME_CPU_NS32016_NS32016_H + +#pragma once + + +/*********************************************************************** + CONSTANTS +***********************************************************************/ + + + +/*********************************************************************** + TYPE DEFINITIONS +***********************************************************************/ + +class ns32000_cpu_device : public cpu_device +{ +public: + // construction/destruction + ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + +protected: + ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int databits, int addrbits); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // device_execute_interface overrides + virtual u32 execute_min_cycles() const override { return 1; } + virtual u32 execute_max_cycles() const override { return 6; } + virtual u32 execute_input_lines() const override { return 2; } + virtual void execute_run() override; + virtual void execute_set_input(int inputnum, int state) override; + virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; } + + + // device_memory_interface overrides + virtual space_config_vector memory_space_config() const override; + virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + + // device_disasm_interface overrides + virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; + + // addressing modes + enum + { + ADDRESSING_MODE_REGISTER_0 = 0, + ADDRESSING_MODE_REGISTER_1, + ADDRESSING_MODE_REGISTER_2, + ADDRESSING_MODE_REGISTER_3, + ADDRESSING_MODE_REGISTER_4, + ADDRESSING_MODE_REGISTER_5, + ADDRESSING_MODE_REGISTER_6, + ADDRESSING_MODE_REGISTER_7, + ADDRESSING_MODE_REGISTER_0_RELATIVE, + ADDRESSING_MODE_REGISTER_1_RELATIVE, + ADDRESSING_MODE_REGISTER_2_RELATIVE, + ADDRESSING_MODE_REGISTER_3_RELATIVE, + ADDRESSING_MODE_REGISTER_4_RELATIVE, + ADDRESSING_MODE_REGISTER_5_RELATIVE, + ADDRESSING_MODE_REGISTER_6_RELATIVE, + ADDRESSING_MODE_REGISTER_7_RELATIVE, + ADDRESSING_MODE_FRAME_MEMORY_RELATIVE, + ADDRESSING_MODE_STACK_MEMORY_RELATIVE, + ADDRESSING_MODE_STATIC_MEMORY_RELATIVE, + ADDRESSING_MODE_RESERVED, + ADDRESSING_MODE_IMMEDIATE, + ADDRESSING_MODE_ABSOLUTE, + ADDRESSING_MODE_EXTERNAL, + ADDRESSING_MODE_TOP_OF_STACK, + ADDRESSING_MODE_FRAME_MEMORY, + ADDRESSING_MODE_STACK_MEMORY, + ADDRESSING_MODE_STATIC_MEMORY, + ADDRESSING_MODE_PROGRAM_MEMORY, + ADDRESSING_MODE_INDEX_BYTES, + ADDRESSING_MODE_INDEX_WORDS, + ADDRESSING_MODE_INDEX_DOUBLE_WORDS, + ADDRESSING_MODE_INDEX_QUAD_WORDS, + }; + + // registers + enum + { + NS32000_PC = 1, + NS32000_SB, NS32000_FP, NS32000_SP1, NS32000_SP0, NS32000_INTBASE, NS32000_PSR, NS32000_MOD, + NS32000_R0, NS32000_R1, NS32000_R2, NS32000_R3, NS32000_R4, NS32000_R5, NS32000_R6, NS32000_R7, + }; + +private: + // configuration + address_space_config m_program_config; + + // emulation state + int m_icount; + + u32 m_pc; + u32 m_sb; + u32 m_fp; + u32 m_sp1; + u32 m_sp0; + u32 m_intbase; + u32 m_psr; + u32 m_mod; + u32 m_r[8]; + u32 m_f[8]; + + u8 m_irq_line; + u8 m_nmi_line; +}; + +class ns32008_cpu_device : public ns32000_cpu_device +{ +public: + ns32008_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +class ns32016_cpu_device : public ns32000_cpu_device +{ +public: + ns32016_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +class ns32032_cpu_device : public ns32000_cpu_device +{ +public: + ns32032_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +/*********************************************************************** + DEVICE TYPE DECLARATIONS +***********************************************************************/ + +DECLARE_DEVICE_TYPE(NS32008, ns32008_cpu_device) +DECLARE_DEVICE_TYPE(NS32016, ns32016_cpu_device) +DECLARE_DEVICE_TYPE(NS32032, ns32032_cpu_device) + +#endif // MAME_CPU_NS32016_NS32016_H diff --git a/src/devices/cpu/ns32000/ns32000dasm.cpp b/src/devices/cpu/ns32000/ns32000dasm.cpp new file mode 100644 index 00000000000..8bc25f48c60 --- /dev/null +++ b/src/devices/cpu/ns32000/ns32000dasm.cpp @@ -0,0 +1,835 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/***************************************************************************** +* +* ns32000dasm.cpp +* +* NS32000 CPU Disassembly +* +*****************************************************************************/ + +#include "emu.h" +#include "ns32000dasm.h" + +// instruction field extraction +#define Format0cond(x) ((x >> 4) & 0x0f) + +#define Format1op(x) ((x >> 4) & 0x0f) + +#define Format2i(x) ((x >> 0) & 0x03) +#define Format2op(x) ((x >> 4) & 0x07) +#define Format2short(x) ((x >> 7) & 0x0f) +#define Format2gen(x) ((x >> 11) & 0x1f) + +#define Format3i(x) ((x >> 0) & 0x03) +#define Format3op(x) ((x >> 7) & 0x0f) +#define Format3gen(x) ((x >> 11) & 0x1f) + +#define Format4i(x) ((x >> 0) & 0x03) +#define Format4op(x) ((x >> 2) & 0x0f) +#define Format4gen2(x) ((x >> 6) & 0x1f) +#define Format4gen1(x) ((x >> 11) & 0x1f) + +#define Format5i(x) ((x >> 8) & 0x03) +#define Format5op(x) ((x >> 10) & 0x07) +#define Format5short(x) ((x >> 15) & 0x0f) + +#define Format6i(x) ((x >> 8) & 0x03) +#define Format6op(x) ((x >> 10) & 0x0f) +#define Format6gen2(x) ((x >> 14) & 0x1f) +#define Format6gen1(x) ((x >> 19) & 0x1f) + +#define Format7i(x) ((x >> 8) & 0x03) +#define Format7op(x) ((x >> 10) & 0x0f) +#define Format7gen2(x) ((x >> 14) & 0x1f) +#define Format7gen1(x) ((x >> 19) & 0x1f) + +#define Format8i(x) ((x >> 8) & 0x03) +#define Format8op(x) (((x >> 8) & 0x04) | ((x >> 6) & 0x03)) +#define Format8reg(x) ((x >> 11) & 0x07) +#define Format8gen2(x) ((x >> 14) & 0x1f) +#define Format8gen1(x) ((x >> 19) & 0x1f) + +#define Format9i(x) ((x >> 8) & 0x03) +#define Format9f(x) ((x >> 10) & 0x01) +#define Format9op(x) ((x >> 11) & 0x07) +#define Format9gen2(x) ((x >> 14) & 0x1f) +#define Format9gen1(x) ((x >> 19) & 0x1f) + +#define Format11f(x) ((x >> 8) & 0x01) +#define Format11op(x) ((x >> 10) & 0x0f) +#define Format11gen2(x) ((x >> 14) & 0x1f) +#define Format11gen1(x) ((x >> 19) & 0x1f) + +#define Format14i(x) ((x >> 8) & 0x01) +#define Format14op(x) ((x >> 10) & 0x0f) +#define Format14short(x) ((x >> 15) & 0x1f) +#define Format14gen1(x) ((x >> 19) & 0x1f) + +// instructions +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format0_op[1] = +{ + { "Bcond", DISP, 0, 0, 0, 0 } +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format1_op[16] = +{ + { "BSR", DISP, 0, 0, 0, STEP_OVER }, + { "RET", DISP, 0, 0, 0, STEP_OUT }, + { "CXP", DISP, 0, 0, 0, STEP_OVER }, + { "RXP", DISP, 0, 0, 0, STEP_OUT }, + { "RETT", 0, 0, 0, 0, STEP_OUT }, + { "RETI", DISP, 0, 0, 0, STEP_OUT }, + { "SAVE", IMM, 0, 0, 0, 0 }, + { "RESTORE", IMM, 0, 0, 0, 0 }, + { "ENTER", IMM, DISP, 0, 0, 0 }, + { "EXIT", IMM, 0, 0, 0, 0 }, + { "NOP", 0, 0, 0, 0, 0 }, + { "WAIT", 0, 0, 0, 0, 0 }, + { "DIA", 0, 0, 0, 0, 0 }, + { "FLAG", 0, 0, 0, 0, 0 }, + { "SVC", 0, 0, 0, 0, 0 }, + { "BPT", 0, 0, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format2_op[8] = +{ + { "ADDQi", QUICK, GEN | RMW | I, 0, 0, 0 }, + { "CMPQi", QUICK, GEN | READ | I, 0, 0, 0 }, + { "SPRi", SHORT, GEN | WRITE | I, 0, 0, 0 }, + { "Scondi", GEN | WRITE | I, 0, 0, 0, 0 }, + { "ACBi", QUICK, GEN | RMW | I, DISP, 0, 0 }, + { "MOVQi", QUICK, GEN | WRITE | I, 0, 0, 0 }, + { "LPRi", SHORT, GEN | READ | I, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format3_op[16] = +{ + { "CXPD", GEN | ADDR, 0, 0, 0, STEP_OVER }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "BICPSRi", GEN | READ | I, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "JUMP", GEN | ADDR, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "BISPSRB", GEN | READ | B, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "ADJSPi", GEN | READ | I, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "JSR", GEN | ADDR, 0, 0, 0, STEP_OVER }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "CASEi", GEN | READ | I, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format4_op[16] = +{ + { "ADDi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "CMPi", GEN | READ | I, GEN | READ | I, 0, 0, 0 }, + { "BICi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "ADDCi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "MOVi", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 }, + { "ORi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "SUBi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "ADDR", GEN | ADDR, GEN | WRITE | D, 0, 0, 0 }, + { "ANDi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "SUBCi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "TBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 }, + { "XORi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format5_op[16] = +{ + { "MOVSi", OPTIONS, 0, 0, 0, 0 }, + { "CMPSi", OPTIONS, 0, 0, 0, 0 }, + { "SETCFG", SHORT, 0, 0, 0, 0 }, + { "SKPSi", OPTIONS, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format6_op[16] = +{ + { "ROTi", GEN | READ | B, GEN | RMW | I, 0, 0, 0 }, + { "ASHi", GEN | READ | B, GEN | RMW | I, 0, 0, 0 }, + { "CBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 }, + { "CBITIi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "LSHi", GEN | READ | B, GEN | RMW | I, 0, 0, 0 }, + { "SBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 }, + { "SBITIi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 }, + { "NEGi", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 }, + { "NOTi", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "SUBPi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "ABSi", GEN | READ | I, GEN | READ | I, 0, 0, 0 }, + { "COM", GEN | READ | I, GEN | WRITE | I, 0, 0, 0 }, + { "IBITi", GEN | READ | I, GEN | REGADDR, 0, 0, 0 }, + { "ADDPi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format7_op[16] = +{ + { "MOVMi", GEN | ADDR, GEN | ADDR, DISP, 0, 0 }, + { "CMPMi", GEN | ADDR, GEN | ADDR, DISP, 0, 0 }, + { "INSSi", GEN | READ | I, GEN | REGADDR, IMM, 0, 0 }, + { "EXTSi", GEN | REGADDR, GEN | WRITE | I, IMM, 0, 0 }, + { "MOVXBW", GEN | READ | B, GEN | WRITE | W, 0, 0, 0 }, + { "MOVZBW", GEN | READ | B, GEN | WRITE | W, 0, 0, 0 }, + { "MOVZiD", GEN | READ | I, GEN | WRITE | D, 0, 0, 0 }, + { "MOVXiD", GEN | READ | I, GEN | WRITE | D, 0, 0, 0 }, + { "MULi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "MEIi", GEN | READ | I, GEN | RMW | I2, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "DEIi", GEN | READ | I, GEN | RMW | I2, 0, 0, 0 }, + { "QUOi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "REMi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "MODi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, + { "DIVi", GEN | READ | I, GEN | RMW | I, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format8_op[] = +{ + { "EXTi", REG, GEN | REGADDR, GEN | WRITE | I, DISP, 0 }, + { "CVTP", REG, GEN | ADDR, GEN | WRITE | D, 0, 0 }, + { "INSi", REG, GEN | READ | I, GEN | REGADDR, DISP, 0 }, + { "CHECKi", REG, GEN | ADDR, GEN | READ | I, 0, 0 }, + { "INDEXi", REG, GEN | READ | I, GEN | READ | I, 0, 0 }, + { "FFSi", GEN | READ | I, GEN | RMW | B, 0, 0, 0 }, + { "MOVSUi", GEN | ADDR, GEN | ADDR, 0, 0, 0 }, + { "MOVUSi", GEN | ADDR, GEN | ADDR, 0, 0, 0 } +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format9_op[] = +{ + { "MOVif", GEN | READ | I, GEN | WRITE | F, 0, 0, 0 }, + { "LFSR", GEN | READ | D, 0, 0, 0, 0 }, + { "MOVLF", GEN | READ | L, GEN | WRITE | F, 0, 0, 0 }, + { "MOVFL", GEN | READ | F, GEN | WRITE | L, 0, 0, 0 }, + { "ROUNDfi", GEN | READ | F, GEN | WRITE | I, 0, 0, 0 }, + { "TRUNCfi", GEN | READ | F, GEN | WRITE | I, 0, 0, 0 }, + { "SFSR", GEN | WRITE | D, 0, 0, 0, 0 }, + { "FLOORfi", GEN | READ | F, GEN | WRITE | I, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format11_op[] = +{ + { "ADDf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 }, + { "MOVf", GEN | READ | F, GEN | WRITE | F, 0, 0, 0 }, + { "CMPf", GEN | READ | F, GEN | READ | F, 0, 0, 0 }, // POLYf + { "Trap (SLAVE)", 0, 0, 0, 0, 0 }, // DOTf + { "SUBf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 }, // SCALBf + { "NEGf", GEN | READ | F, GEN | WRITE | F, 0, 0, 0 }, // LOGBf + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "DIVf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 }, + { "Trap (SLAVE)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "MULf", GEN | READ | F, GEN | RMW | F, 0, 0, 0 }, + { "ABSf", GEN | READ | F, GEN | READ | F, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, +}; +const ns32000_disassembler::NS32000_OPCODE ns32000_disassembler::format14_op[] = +{ + { "RDVAL", GEN | ADDR, 0, 0, 0, 0 }, + { "WRVAL", GEN | ADDR, 0, 0, 0, 0 }, + { "LMR", SHORT, GEN | READ | D, 0, 0, 0 }, + { "SMR", SHORT, GEN | WRITE | D, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, // CINV + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, + { "Trap (UND)", 0, 0, 0, 0, 0 }, +}; + + +const char *const ns32000_disassembler::Format0[] = +{ + "Bcond" +}; +const char *const ns32000_disassembler::Format1[] = +{ + "BSR", "RET", "CXP", "RXP", "RETT", "RETI", "SAVE", "RESTORE", "ENTER", "EXIT", "NOP", "WAIT", "DIA", "FLAG", "SVC", "BPT" +}; +const char *const ns32000_disassembler::Format2[] = +{ + "ADDQi", "CMPQi", "SPRi", "Scondi", "ACBi", "MOVQi", "LPRi" +}; +const char *const ns32000_disassembler::Format3[] = +{ + "CXPD", "Trap (UND)", "BICPSR", "Trap (UND)", "JUMP", "Trap (UND)", "BISPSR", "Trap (UND)", "Trap (UND)", "Trap (UND)", "ADJSPi", "Trap (UND)", "JSR", "Trap (UND)", "CASEi", "Trap (UND)" +}; +const char *const ns32000_disassembler::Format4[] = +{ + "ADDi", "CMPi", "BICi", "Trap (UND)", "ADDCi", "MOVi", "ORi", "Trap (UND)", "SUBi", "ADDR", "ANDi", "Trap (UND)", "SUBCi", "TBITi", "XORi", "Trap (UND)" +}; +const char *const ns32000_disassembler::Format5[] = +{ + "MOVSi", "CMPSi", "SETCFG", "SKPSi", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)" +}; +const char *const ns32000_disassembler::Format6[] = +{ + "ROTi", "ASHi", "CBITi", "CBITIi", "Trap (UND)", "LSHi", "SBITi", "SBITIi", "NEGi", "NOTi", "Trap (UND)", "SUBPi", "ABSi", "COM", "IBITi", "ADDPi" +}; +const char *const ns32000_disassembler::Format7[] = +{ + "MOVMi", "CMPMi", "INSSi", "EXTSi", "MOVXBW", "MOVZBW", "MOVZiD", "MOVXiD", "MULi", "MEIi", "Trap (UND)", "DEIi", "QUOi", "REMi", "MODi", "DIVi" +}; +const char *const ns32000_disassembler::Format8[] = +{ + "EXTi", "CVTP", "INSi", "CHECKi", "INDEXi", "FFSi", "MOVSUi", "MOVUSi" +}; +const char *const ns32000_disassembler::Format9[] = +{ + "MOVif", "LFSR", "MOVLF", "MOVFL", "ROUNDfi", "TRUNCfi", "SFSR", "FLOORfi" +}; +const char *const ns32000_disassembler::Format11[] = +{ + "ADDf", "MOVf", "CMPf", "Trap (SLAVE)", "SUBf", "NEGf", "Trap (UND)", "Trap (UND)", "DIVf", "Trap (SLAVE)", "Trap (UND)", "Trap (UND)", "MULf", "ABSf", "Trap (UND)", "Trap (UND)" +}; +const char *const ns32000_disassembler::Format14[] = +{ + "RDVAL", "WRVAL", "LMR", "SMR", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)", "Trap (UND)" +}; + +// types +const char *const ns32000_disassembler::iType[] = +{ + "B", "W", " ", "D" +}; +const char *const ns32000_disassembler::fType[] = +{ + "L", "F" +}; +const char *const ns32000_disassembler::cType[] = +{ + "Q", "D" +}; + +// index byte sizes +const char *const ns32000_disassembler::indexSize[] = +{ + "B", "W", "D", "Q" +}; + +// short codes +const char *const ns32000_disassembler::cond[] = +{ + "EQ", "NE", "CS", "CC", "HI", "LS", "GT", "LE", "FS", "FC", "LO", "HS", "LT", "GE", "R", "N" +}; +const char *const ns32000_disassembler::areg[] = +{ + "US", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "FP", "SP", "SB", "(reserved)", "(reserved)", "PSR", "INTBASE", "MOD" +}; +const char *const ns32000_disassembler::mreg[] = +{ + "BPR0", "BPR1", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "(reserved)", "MSR", "BCNT", "PTB0", "PTB1", "(reserved)", "EIA" +}; + +// register names +const char *const ns32000_disassembler::R[] = +{ + "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7" +}; +const char *const ns32000_disassembler::M[] = +{ + "FP", "SP", "SB" +}; +const char *const ns32000_disassembler::PR[] = +{ + "UPSR", "DCR", "BPC", "DSR", "CAR", "", "", "", "FP", "SP", "SB", "USP", "CFG", "PSR", "INTBASE", "MOD" +}; + +int8_t ns32000_disassembler::short2int(uint8_t val) +{ + return (val & 0x08) ? val | 0xf0 : val; +} + +std::string ns32000_disassembler::mnemonic_index(std::string form, std::string itype, std::string ftype) +{ + if (itype.size() && form.find('i') != std::string::npos) + form.replace(form.find('i'), 1, itype); + if (ftype.size() && form.find('f') != std::string::npos) + form.replace(form.find('f'), 1, ftype); + return form; +} + +uint8_t ns32000_disassembler::opcode_format(uint8_t byte) +{ + switch (byte & 0x0f) + { + case 0x0a: return 0; + case 0x02: return 1; + case 0x0c: + case 0x0d: + case 0x0f: + if ((byte & 0x70) != 0x70) + return 2; + else + return 3; + } + + if ((byte & 0x03) != 0x02) return 4; + + switch (byte) + { + case 0x0e: return 5; + case 0x4e: return 6; + case 0xce: return 7; + case 0x2e: + case 0x6e: + case 0xae: + case 0xee: return 8; + case 0x3e: return 9; + case 0x7e: return 10; + case 0xbe: return 11; + case 0xfe: return 12; + case 0x9e: return 13; + case 0x1e: return 14; + } + + return 99; /* unknown format */ +} + +inline std::string ns32000_disassembler::get_option_list(uint8_t cfg) +{ + std::string option_list; + + option_list.append("["); + if (BIT(cfg, 0)) option_list.append("I,"); + if (BIT(cfg, 1)) option_list.append("F,"); + if (BIT(cfg, 2)) option_list.append("M,"); + if (BIT(cfg, 3)) option_list.append("C,"); + if (option_list.back() == ',') option_list.pop_back(); + option_list.append("]"); + + return option_list; +} + +inline std::string ns32000_disassembler::get_options(uint8_t opts) +{ + std::string options; + + options.append(" "); + if ((opts & 0x02) == 0x02) options.append("B,"); + if ((opts & 0x04) == 0x04) options.append("W,"); + if ((opts & 0x0c) == 0x0c) options.append("U,"); + if (options.back() == ',') options.pop_back(); + + return options; +} + +inline int32_t ns32000_disassembler::get_disp(offs_t &pc, const data_buffer &opcodes) +{ + /* displacement can be upto 3 bytes */ + uint32_t disp = bitswap<32>(opcodes.r32(pc), 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8, 23, 22, 21, 20, 19, 18, 17, 16, 31, 30, 29, 28, 27, 26, 25, 24); + + switch ((disp >> 29) & 0x07) + { + case 0: case 1: /* 7 bit positive */ + disp = (disp >> 24); + pc += 1; + break; + + case 2: case 3: /* 7 bit negative */ + disp = (disp >> 24) | 0xffffff80; + pc += 1; + break; + + case 4: /* 14 bit positive */ + disp = (disp >> 16) & 0x3fff; + pc += 2; + break; + + case 5: /* 14 bit negative */ + disp = (disp >> 16) | 0xffffc000; + pc += 2; + break; + + case 6: /* 30 bit positive */ + disp = disp & 0x3fffffff; + pc += 4; + break; + + case 7: /* 30 bit negative */ + pc += 4; + break; + } + + return disp; +} + +inline std::string ns32000_disassembler::get_reg_list(offs_t &pc, const data_buffer &opcodes, bool reverse) +{ + std::string reg_list; + + uint8_t byte = opcodes.r8(pc++); + + reg_list.append("["); + for (int i = 0; i < 8; i++) + { + if (BIT(byte, i)) reg_list.append(R[reverse ? (~i & 7) : (i & 7)]).append(","); + } + if (reg_list.back() == ',') reg_list.pop_back(); + reg_list.append("]"); + + return reg_list; +} + +void ns32000_disassembler::stream_gen(std::ostream &stream, u8 gen_addr, u8 op_len, offs_t &pc, const data_buffer &opcodes) +{ + uint8_t index_byte; + int32_t disp1, disp2; + + switch (gen_addr) + { + case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: + /* Register */ + util::stream_format(stream, "%s", R[gen_addr & 0x07]); + break; + case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: + /* Register Relative */ + disp1 = get_disp(pc, opcodes); + util::stream_format(stream, "%+d(%s)", disp1, R[gen_addr & 0x07]); + break; + case 0x10: case 0x11: case 0x12: + /* Memory Relative */ + disp1 = get_disp(pc, opcodes); + disp2 = get_disp(pc, opcodes); + util::stream_format(stream, "#X%02X(#X%02X(%s))", disp2, disp1, M[gen_addr & 0x03]); + break; + case 0x13: + /* Reserved */ + util::stream_format(stream, "(reserved)"); + break; + case 0x14: + /* Immediate */ + disp1 = bitswap<32>(opcodes.r32(pc), 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8, 23, 22, 21, 20, 19, 18, 17, 16, 31, 30, 29, 28, 27, 26, 25, 24); + util::stream_format(stream, "#X%02X", (op_len == 0 ? (disp1 >> 24) : (op_len == 1 ? (disp1 >> 16) : disp1))); + pc += op_len + 1; + break; + case 0x15: + /* Absolute */ + disp1 = get_disp(pc, opcodes); + util::stream_format(stream, "@#X%02X", disp1); + break; + case 0x16: + /* External */ + disp1 = get_disp(pc, opcodes); + disp2 = get_disp(pc, opcodes); + util::stream_format(stream, "EXT(%d)+%d", disp1, disp2); + break; + case 0x17: + /* Top Of Stack */ + util::stream_format(stream, "TOS"); + break; + case 0x18: case 0x19: case 0x1a: + /* Memory Space */ + disp1 = get_disp(pc, opcodes); + util::stream_format(stream, "#X%02X(%s)", disp1, M[gen_addr & 0x03]); + break; + case 0x1b: + /* Memory Space */ + disp1 = get_disp(pc, opcodes); + util::stream_format(stream, "#X%06X", m_base_pc + disp1); + break; + case 0x1c: + /* Scaled Index */ + index_byte = opcodes.r8(pc++); + stream_gen(stream, index_byte >> 3, op_len, pc, opcodes); + util::stream_format(stream, "[%s:%c]", R[index_byte & 0x07], indexSize[gen_addr & 0x03]); + break; + } +} + +offs_t ns32000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) +{ + uint32_t flags = SUPPORTED; + + uint32_t opcode; + std::string mnemonic; + uint8_t temp8; + + /* opcode can be upto 3 bytes */ + opcode = opcodes.r32(pc); + m_base_pc = pc; + + switch (opcode_format(opcode)) + { + case 0: /* Format 0 */ + pc += 1; + util::stream_format(stream, "%-8s #X%06X", std::string("B").append(cond[Format0cond(opcode)]), m_base_pc + get_disp(pc, opcodes)); + break; + + case 0x01: /* Format 1 */ + pc += 1; + switch (Format1op(opcode)) + { + case 0x00: + util::stream_format(stream, "%-8s #X%06X", Format1[Format1op(opcode)], m_base_pc + get_disp(pc, opcodes)); + break; + case 0x01: + util::stream_format(stream, "%-8s #X%02X", Format1[Format1op(opcode)], get_disp(pc, opcodes) & 0xffffff); + break; + case 0x02: + util::stream_format(stream, "%-8s EXT(%d)", Format1[Format1op(opcode)], get_disp(pc, opcodes)); + break; + case 0x03: case 0x04: + util::stream_format(stream, "%-8s #X%02X", Format1[Format1op(opcode)], get_disp(pc, opcodes) & 0xffffff); + break; + case 0x05: + util::stream_format(stream, "%-8s", Format1[Format1op(opcode)]); + break; + case 0x06: + util::stream_format(stream, "%-8s %s", Format1[Format1op(opcode)], get_reg_list(pc, opcodes, false)); + break; + case 0x07: case 0x09: + util::stream_format(stream, "%-8s %s", Format1[Format1op(opcode)], get_reg_list(pc, opcodes, true)); + break; + case 0x08: + util::stream_format(stream, "%-8s %s, %d", Format1[Format1op(opcode)], get_reg_list(pc, opcodes, false), get_disp(pc, opcodes)); + break; + case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: + util::stream_format(stream, "%-8s", Format1[Format1op(opcode)]); + break; + } + break; + + case 0x02: /* Format 2 */ + pc += 2; + mnemonic = mnemonic_index(Format2[Format2op(opcode)], iType[Format2i(opcode)], ""); + switch (Format2op(opcode)) + { + case 0x00: case 0x01: case 0x05: + util::stream_format(stream, "%-8s %+d, ", mnemonic, short2int(Format2short(opcode))); + stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes); + break; + case 0x02: case 0x06: + util::stream_format(stream, "%-8s %s, ", mnemonic, areg[Format2short(opcode)]); + stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes); + break; + case 0x03: + util::stream_format(stream, "%-8s ", std::string("S").append(cond[Format2short(opcode)]).append(iType[Format2i(opcode)])); + stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes); + break; + case 0x04: + util::stream_format(stream, "%-8s %+d, ", mnemonic, short2int(Format2short(opcode))); + stream_gen(stream, Format2gen(opcode), Format2i(opcode), pc, opcodes); + util::stream_format(stream, ", #X%06x", m_base_pc + get_disp(pc, opcodes)); + break; + } + break; + + case 0x03: /* Format 3 */ + pc += 2; + mnemonic = mnemonic_index(Format3[Format3op(opcode)], iType[Format3i(opcode)], ""); + switch (Format3op(opcode)) + { + case 0x00: case 0x02: case 0x04: case 0x06: case 0x0a: case 0x0c: case 0x0e: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format3gen(opcode), Format3i(opcode), pc, opcodes); + break; + default: /* Trap */ + util::stream_format(stream, "%-8s ", mnemonic); + break; + } + break; + + case 0x04: /* Format 4 */ + pc += 2; + mnemonic = mnemonic_index(Format4[Format4op(opcode)], iType[Format4i(opcode)], ""); + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format4gen1(opcode), Format4i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format4gen2(opcode), Format4i(opcode), pc, opcodes); + break; + + case 0x05: /* Format 5 */ + pc += 3; + mnemonic = mnemonic_index(Format5[Format5op(opcode)], iType[Format5i(opcode)], ""); + switch ((opcode >> 10) & 0x0f) + { + case 0x00: case 0x01: case 0x03: + if (Format5short(opcode) & 0x01) + util::stream_format(stream, "%-8s %s", std::string(Format5[Format5op(opcode)]).append("T"), get_options(Format5short(opcode))); + else + util::stream_format(stream, "%-8s %s", mnemonic, get_options(Format5short(opcode))); + break; + case 0x02: + util::stream_format(stream, "%-8s %s", Format5[Format5op(opcode)], get_option_list(Format5short(opcode))); + break; + default: /* Trap */ + util::stream_format(stream, "%-8s ", mnemonic); + break; + } + break; + + case 0x06: /* Format 6 */ + pc += 3; + mnemonic = mnemonic_index(Format6[Format6op(opcode)], iType[Format6i(opcode)], ""); + switch ((opcode >> 10) & 0x0f) + { + case 0x00: case 0x01: case 0x02: case 0x03: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format6gen1(opcode), Format6i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format6gen2(opcode), Format6i(opcode), pc, opcodes); + break; + default: /* Trap */ + util::stream_format(stream, "%-8s ", mnemonic); + break; + } + break; + + case 0x07: /* Format 7 */ + pc += 3; + mnemonic = mnemonic_index(Format7[Format7op(opcode)], iType[Format7i(opcode)], ""); + switch (Format7op(opcode)) + { + case 0x00: case 0x01: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format7gen1(opcode), Format7i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format7gen2(opcode), Format7i(opcode), pc, opcodes); + util::stream_format(stream, ", %d", get_disp(pc, opcodes)); + break; + case 0x02: case 0x03: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format7gen1(opcode), Format7i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format7gen2(opcode), Format7i(opcode), pc, opcodes); + temp8 = opcodes.r8(pc++); + util::stream_format(stream, ", %d, %d", temp8 >> 5, temp8 + 1); + break; + case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format7gen1(opcode), Format7i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format7gen2(opcode), Format7i(opcode), pc, opcodes); + break; + default: /* Trap */ + util::stream_format(stream, "%-8s ", mnemonic); + break; + } + break; + + case 0x08: /* Format 8 */ + pc += 3; + mnemonic = mnemonic_index(Format8[Format8op(opcode)], iType[Format8i(opcode)], ""); + switch (Format8op(opcode)) + { + case 0x00: case 0x02: + util::stream_format(stream, "%-8s %s, ", mnemonic, R[Format8reg(opcode)]); + stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes); + util::stream_format(stream, ", %d", get_disp(pc, opcodes)); + break; + case 0x01: case 0x03: case 0x04: + util::stream_format(stream, "%-8s %s, ", mnemonic, R[Format8reg(opcode)]); + stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes); + break; + case 0x05: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes); + break; + case 0x06: + if (Format8reg(opcode) == 0x01) + util::stream_format(stream, "%-8s ", std::string(Format8[Format8op(opcode)]).append(iType[Format8i(opcode)])); + else + util::stream_format(stream, "%-8s ", std::string(Format8[Format8op(opcode) + 1]).append(iType[Format8i(opcode)])); + stream_gen(stream, Format8gen2(opcode), Format8i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format8gen1(opcode), Format8i(opcode), pc, opcodes); + break; + } + break; + + case 0x09: /* Format 9 */ + pc += 3; + mnemonic = mnemonic_index(Format9[Format9op(opcode)], iType[Format9i(opcode)], fType[Format9f(opcode)]); + switch (Format9op(opcode)) + { + case 0x00: case 0x02: case 0x04: case 0x05: case 0x07: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format9gen1(opcode), Format9i(opcode), pc, opcodes); + util::stream_format(stream, ", "); + stream_gen(stream, Format9gen2(opcode), Format9i(opcode), pc, opcodes); + break; + case 0x01: case 0x06: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format9gen1(opcode), Format9i(opcode), pc, opcodes); + break; + } + break; + + case 0x0b: /* Format 11 */ + pc += 3; + mnemonic = mnemonic_index(Format11[Format11op(opcode)], "", fType[Format11f(opcode)]); + switch (Format11op(opcode)) + { + case 0x00: case 0x01: case 0x02: case 0x04: case 0x05 : case 0x08: case 0x0c : case 0x0d: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format11gen1(opcode), Format11f(opcode), pc, opcodes); + util::stream_format(stream, ","); + stream_gen(stream, Format11gen2(opcode), Format11f(opcode), pc, opcodes); + break; + default: /* Trap */ + util::stream_format(stream, "%-8s ", mnemonic); + break; + } + break; + + case 0x0a: /* Format 10 */ + case 0x0c: /* Format 12 */ + case 0x0d: /* Format 13 */ + pc += 3; + util::stream_format(stream, "Trap (UND)"); + break; + + case 0x0e: /* Format 14 */ + pc += 3; + mnemonic = mnemonic_index(Format14[Format14op(opcode)], iType[Format14i(opcode)], ""); + switch (Format14op(opcode)) + { + case 0x00: case 0x01: + util::stream_format(stream, "%-8s ", mnemonic); + stream_gen(stream, Format14gen1(opcode), Format14i(opcode), pc, opcodes); + break; + case 0x02: case 0x03: + util::stream_format(stream, "%-8s %s, ", mnemonic, mreg[Format14short(opcode)]); + stream_gen(stream, Format14gen1(opcode), Format14i(opcode), pc, opcodes); + break; + default: /* Trap */ + util::stream_format(stream, "%-8s ", mnemonic); + break; + } + break; + + default: + pc += 1; + util::stream_format(stream, "unknown instruction format"); + break; + } + + return (pc - m_base_pc) | flags; +} diff --git a/src/devices/cpu/ns32000/ns32000dasm.h b/src/devices/cpu/ns32000/ns32000dasm.h new file mode 100644 index 00000000000..4cbf4cf3bda --- /dev/null +++ b/src/devices/cpu/ns32000/ns32000dasm.h @@ -0,0 +1,117 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/***************************************************************************** +* +* ns32000dasm.cpp +* +* NS32000 CPU Disassembly +* +*****************************************************************************/ + +#ifndef MAME_CPU_NS32000_NS32000DASM_H +#define MAME_CPU_NS32000_NS32000DASM_H + +#pragma once + +class ns32000_disassembler : public util::disasm_interface +{ +public: + + ns32000_disassembler() = default; + virtual ~ns32000_disassembler() = default; + + virtual u32 opcode_alignment() const override { return 1; } + virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; + +private: + /* implied operand attributes */ + enum + { + REG = 16, + QUICK, + SHORT, + IMM, + DISP, + GEN, + OPTIONS, + }; + /* access classes */ + enum + { + READ = 8, + WRITE, + RMW, + ADDR, + REGADDR + }; + /* length attributes */ + enum + { + B = 0, + W = 1, + D = 3, + I, + I2, + F, + L + }; + struct NS32000_OPCODE { + const char *mnemonic; + u32 operand1; + u32 operand; + u32 operand3; + u32 operand4; + offs_t dasm_flags; + }; + + static const NS32000_OPCODE format0_op[1]; + static const NS32000_OPCODE format1_op[16]; + static const NS32000_OPCODE format2_op[8]; + static const NS32000_OPCODE format3_op[16]; + static const NS32000_OPCODE format4_op[16]; + static const NS32000_OPCODE format5_op[16]; + static const NS32000_OPCODE format6_op[16]; + static const NS32000_OPCODE format7_op[16]; + static const NS32000_OPCODE format8_op[16]; + static const NS32000_OPCODE format9_op[16]; + static const NS32000_OPCODE format11_op[16]; + static const NS32000_OPCODE format14_op[16]; + + + static char const *const Format0[]; + static char const *const Format1[]; + static char const *const Format2[]; + static char const *const Format3[]; + static char const *const Format4[]; + static char const *const Format5[]; + static char const *const Format6[]; + static char const *const Format7[]; + static char const *const Format8[]; + static char const *const Format9[]; + static char const *const Format11[]; + static char const *const Format14[]; + static char const *const iType[]; + static char const *const fType[]; + static char const *const cType[]; + static char const *const indexSize[]; + static char const *const cond[]; + static char const *const areg[]; + static char const *const mreg[]; + static char const *const R[]; + static char const *const M[]; + static char const *const PR[]; + + std::string mnemonic_index(std::string form, std::string itype, std::string ftype); + uint8_t opcode_format(uint8_t byte); + int8_t short2int(uint8_t val); + static inline int32_t get_disp(offs_t &pc, const data_buffer &opcodes); + static inline std::string get_option_list(uint8_t cfg); + static inline std::string get_options(uint8_t opts); + static inline std::string get_reg_list(offs_t &pc, const data_buffer &opcodes, bool reverse); + + void stream_gen(std::ostream &stream, u8 gen_addr, u8 op_len, offs_t &pc, const data_buffer &opcodes); + + u32 m_base_pc; +}; + +#endif diff --git a/src/devices/cpu/tms9900/tms9900.cpp b/src/devices/cpu/tms9900/tms9900.cpp index d1576197247..840fd5d631a 100644 --- a/src/devices/cpu/tms9900/tms9900.cpp +++ b/src/devices/cpu/tms9900/tms9900.cpp @@ -2167,6 +2167,7 @@ void tms99xx_device::alu_clr_swpb() bool setstatus = true; bool check_ov = true; + bool check_c = true; switch (m_command) { @@ -2184,6 +2185,7 @@ void tms99xx_device::alu_clr_swpb() // LAE dest_new = ~src_val & 0xffff; check_ov = false; + check_c = false; break; case NEG: // LAECO @@ -2226,7 +2228,7 @@ void tms99xx_device::alu_clr_swpb() if (setstatus) { if (check_ov) set_status_bit(ST_OV, ((src_val & 0x8000)==sign) && ((dest_new & 0x8000)!=sign)); - set_status_bit(ST_C, (dest_new & 0x10000) != 0); + if (check_c) set_status_bit(ST_C, (dest_new & 0x10000) != 0); m_current_value = dest_new & 0xffff; compare_and_set_lae(m_current_value, 0); } @@ -2518,6 +2520,7 @@ void tms99xx_device::alu_shift() uint16_t sign = 0; uint32_t value; int count; + bool check_ov = false; switch (m_state) { @@ -2575,6 +2578,7 @@ void tms99xx_device::alu_shift() case SLA: carry = ((value & 0x8000)!=0); value <<= 1; + check_ov = true; if (carry != ((value&0x8000)!=0)) overflow = true; break; case SRC: @@ -2587,7 +2591,7 @@ void tms99xx_device::alu_shift() m_current_value = value & 0xffff; set_status_bit(ST_C, carry); - set_status_bit(ST_OV, overflow); + if (check_ov) set_status_bit(ST_OV, overflow); // only SLA compare_and_set_lae(m_current_value, 0); m_address = m_address_saved; // Register address if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value); diff --git a/src/devices/cpu/tms9900/tms9995.cpp b/src/devices/cpu/tms9900/tms9995.cpp index c52a6c5cc39..09509f4623e 100644 --- a/src/devices/cpu/tms9900/tms9995.cpp +++ b/src/devices/cpu/tms9900/tms9995.cpp @@ -3090,6 +3090,7 @@ void tms9995_device::alu_shift() uint16_t sign = 0; uint32_t value; int count; + bool check_ov = false; switch (m_inst_state) { @@ -3138,6 +3139,7 @@ void tms9995_device::alu_shift() case SLA: carry = ((value & 0x8000)!=0); value <<= 1; + check_ov = true; if (carry != ((value&0x8000)!=0)) overflow = true; break; case SRC: @@ -3150,7 +3152,7 @@ void tms9995_device::alu_shift() m_current_value = value & 0xffff; set_status_bit(ST_C, carry); - set_status_bit(ST_OV, overflow); + if (check_ov) set_status_bit(ST_OV, overflow); // only SLA compare_and_set_lae(m_current_value, 0); m_address = m_address_saved; // Register address LOGMASKED(LOG_STATUS, "ST = %04x (val=%04x)\n", ST, m_current_value); @@ -3168,6 +3170,7 @@ void tms9995_device::alu_single_arithm() uint32_t src_val = m_current_value & 0x0000ffff; uint16_t sign = 0; bool check_ov = true; + bool check_c = true; switch (m_command) { @@ -3218,6 +3221,7 @@ void tms9995_device::alu_single_arithm() // LAE dest_new = ~src_val & 0xffff; check_ov = false; + check_c = false; break; case NEG: // LAECO @@ -3245,7 +3249,7 @@ void tms9995_device::alu_single_arithm() } if (check_ov) set_status_bit(ST_OV, ((src_val & 0x8000)==sign) && ((dest_new & 0x8000)!=sign)); - set_status_bit(ST_C, (dest_new & 0x10000) != 0); + if (check_c) set_status_bit(ST_C, (dest_new & 0x10000) != 0); m_current_value = dest_new & 0xffff; compare_and_set_lae(m_current_value, 0); diff --git a/src/devices/imagedev/flopdrv.cpp b/src/devices/imagedev/flopdrv.cpp index cc8f693ca84..bf42b1070ea 100644 --- a/src/devices/imagedev/flopdrv.cpp +++ b/src/devices/imagedev/flopdrv.cpp @@ -533,16 +533,6 @@ int floppy_get_drive_by_type(legacy_floppy_image_device *image,int ftype) return -1; } -int floppy_get_count(running_machine &machine) -{ - int cnt = 0; - if (machine.device<legacy_floppy_image_device>(FLOPPY_0)) cnt++; - if (machine.device<legacy_floppy_image_device>(FLOPPY_1)) cnt++; - if (machine.device<legacy_floppy_image_device>(FLOPPY_2)) cnt++; - if (machine.device<legacy_floppy_image_device>(FLOPPY_3)) cnt++; - return cnt; -} - /* drive select 0 */ WRITE_LINE_MEMBER( legacy_floppy_image_device::floppy_ds0_w ) diff --git a/src/devices/imagedev/flopdrv.h b/src/devices/imagedev/flopdrv.h index 5751365260d..97ae6a77859 100644 --- a/src/devices/imagedev/flopdrv.h +++ b/src/devices/imagedev/flopdrv.h @@ -1,7 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Nathan Woods, Miodrag Milanovic /* flopdrv provides simple emulation of a disc drive */ -/* the 8271, upd765 and wd179x use this */ #ifndef MAME_DEVICES_IMAGEDV_FLOPDRV_H #define MAME_DEVICES_IMAGEDV_FLOPDRV_H @@ -251,6 +250,5 @@ protected: legacy_floppy_image_device *floppy_get_device(running_machine &machine,int drive); legacy_floppy_image_device *floppy_get_device_by_type(running_machine &machine,int ftype,int drive); int floppy_get_drive_by_type(legacy_floppy_image_device *image,int ftype); -int floppy_get_count(running_machine &machine); #endif // MAME_DEVICES_IMAGEDV_FLOPDRV_H diff --git a/src/devices/machine/68307.cpp b/src/devices/machine/68307.cpp index 3d670d40e4a..ae13e090488 100644 --- a/src/devices/machine/68307.cpp +++ b/src/devices/machine/68307.cpp @@ -90,6 +90,14 @@ void m68307_cpu_device::device_reset() set_ipl(0); } +void m68307_cpu_device::m68k_reset_peripherals() +{ + m_duart->reset(); + + if (m_m68307MBUS) m_m68307MBUS->reset(); + if (m_m68307TIMER) m_m68307TIMER->reset(); +} + /* todo: is it possible to calculate the address map based on CS when they change and install handlers? Going through this logic for every memory access is diff --git a/src/devices/machine/68307.h b/src/devices/machine/68307.h index 591d0c9cced..6d5ef10b61c 100644 --- a/src/devices/machine/68307.h +++ b/src/devices/machine/68307.h @@ -44,6 +44,8 @@ protected: virtual uint32_t execute_min_cycles() const override { return 4; } virtual uint32_t execute_max_cycles() const override { return 158; } + virtual void m68k_reset_peripherals() override; + private: void set_ipl(int level); DECLARE_WRITE_LINE_MEMBER(timer0_interrupt); diff --git a/src/devices/machine/74157.cpp b/src/devices/machine/74157.cpp index f5a68cc4465..1dc7eb1289b 100644 --- a/src/devices/machine/74157.cpp +++ b/src/devices/machine/74157.cpp @@ -35,7 +35,7 @@ DEFINE_DEVICE_TYPE(LS157_X2, ls157_x2_device, "ls157_x2", "74LS157 Quad 2-to-1 M // ls157_device - constructor //------------------------------------------------- -ls157_device::ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +ls157_device::ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ls157_device(mconfig, LS157, tag, owner, clock, 0x0f) { } @@ -58,7 +58,7 @@ ls157_device::ls157_device(const machine_config &mconfig, device_type type, cons // ls157_x2_device - constructor //------------------------------------------------- -ls157_x2_device::ls157_x2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +ls157_x2_device::ls157_x2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ls157_device(mconfig, LS157_X2, tag, owner, clock, 0xff) { } @@ -92,7 +92,7 @@ void ls157_device::device_start() // a_w -- write nibble to A1-A4 //------------------------------------------------- -void ls157_device::write_a(u8 data) +void ls157_device::a_w(u8 data) { m_a = data & m_data_mask; update_output(); @@ -103,7 +103,7 @@ void ls157_device::write_a(u8 data) // b_w -- write nibble to B1-B4 //------------------------------------------------- -void ls157_device::write_b(u8 data) +void ls157_device::b_w(u8 data) { m_b = data & m_data_mask; update_output(); @@ -115,7 +115,7 @@ void ls157_device::write_b(u8 data) // low nibble to B1-B4 //------------------------------------------------- -void ls157_device::write_ab(u8 data) +void ls157_device::ab_w(u8 data) { assert(m_data_mask == 0x0f); m_a = data >> 4; @@ -129,7 +129,7 @@ void ls157_device::write_ab(u8 data) // low nibble to A1-A4 //------------------------------------------------- -void ls157_device::write_ba(u8 data) +void ls157_device::ba_w(u8 data) { assert(m_data_mask == 0x0f); m_b = data >> 4; @@ -143,7 +143,7 @@ void ls157_device::write_ba(u8 data) // A1-A4 and write odd-numbered bits to B1-B4 //------------------------------------------------- -void ls157_device::write_interleave(u8 data) +void ls157_device::interleave_w(u8 data) { assert(m_data_mask == 0x0f); m_b = bitswap<4>(data, 7, 5, 3, 1); @@ -260,7 +260,7 @@ void ls157_device::update_output() // DATA OUTPUTS //************************************************************************** -READ8_MEMBER(ls157_device::output_r) +u8 ls157_device::output_r() { if (m_strobe) return 0; @@ -277,7 +277,7 @@ READ8_MEMBER(ls157_device::output_r) DEFINE_DEVICE_TYPE(HC157, hc157_device, "hc157", "74HC157 Quad 2-to-1 Multiplexer") -hc157_device::hc157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +hc157_device::hc157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ls157_device(mconfig, HC157, tag, owner, clock, 0x0f) { } @@ -289,7 +289,7 @@ hc157_device::hc157_device(const machine_config &mconfig, const char *tag, devic DEFINE_DEVICE_TYPE(HCT157, hct157_device, "hct157", "74HCT157 Quad 2-to-1 Multiplexer") -hct157_device::hct157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +hct157_device::hct157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ls157_device(mconfig, HCT157, tag, owner, clock, 0x0f) { } diff --git a/src/devices/machine/74157.h b/src/devices/machine/74157.h index 4bd4685546c..52875cc0a76 100644 --- a/src/devices/machine/74157.h +++ b/src/devices/machine/74157.h @@ -42,16 +42,11 @@ public: auto out_callback() { return m_out_cb.bind(); } // data writes - DECLARE_WRITE8_MEMBER(a_w) { write_a(data); } - void write_a(u8 data); - DECLARE_WRITE8_MEMBER(b_w) { write_b(data); } - void write_b(u8 data); - DECLARE_WRITE8_MEMBER(ab_w) { write_ab(data); } - void write_ab(u8 data); - DECLARE_WRITE8_MEMBER(ba_w) { write_ba(data); } - void write_ba(u8 data); - DECLARE_WRITE8_MEMBER(interleave_w) { write_interleave(data); } - void write_interleave(u8 data); + void a_w(u8 data); + void b_w(u8 data); + void ab_w(u8 data); + void ba_w(u8 data); + void interleave_w(u8 data); // data line writes DECLARE_WRITE_LINE_MEMBER(a0_w); @@ -68,7 +63,7 @@ public: DECLARE_WRITE_LINE_MEMBER(strobe_w); // output read - DECLARE_READ8_MEMBER(output_r); + u8 output_r(); protected: ls157_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 mask); diff --git a/src/devices/machine/aic6250.cpp b/src/devices/machine/aic6250.cpp index 769968569c8..adf90fe99b5 100644 --- a/src/devices/machine/aic6250.cpp +++ b/src/devices/machine/aic6250.cpp @@ -41,13 +41,14 @@ #include "logmacro.h" -DEFINE_DEVICE_TYPE(AIC6250, aic6250_device, "aic6250", "Adaptec 6250 High-Performance SCSI Protocol Chip") +DEFINE_DEVICE_TYPE(AIC6250, aic6250_device, "aic6250", "Adaptec AIC-6250 High-Performance SCSI Protocol Chip") +DEFINE_DEVICE_TYPE(AIC6251A, aic6251a_device, "aic6251a", "Adaptec AIC-6251A Fast SCSI Protocol Chip") static char const *const nscsi_phase[] = { "DATA OUT", "DATA IN", "COMMAND", "STATUS", "*", "*", "MESSAGE OUT", "MESSAGE IN" }; static char const *const aic6250_phase[] = { "DATA OUT", "*", "DATA IN", "*", "COMMAND", "MESSAGE OUT", "STATUS", "MESSAGE IN" }; -aic6250_device::aic6250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : nscsi_device(mconfig, AIC6250, tag, owner, clock) +aic6250_device::aic6250_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : nscsi_device(mconfig, type, tag, owner, clock) , m_int_cb(*this) , m_breq_cb(*this) , m_port_a_r_cb(*this) @@ -57,6 +58,16 @@ aic6250_device::aic6250_device(const machine_config &mconfig, const char *tag, d { } +aic6250_device::aic6250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : aic6250_device(mconfig, AIC6250, tag, owner, clock) +{ +} + +aic6251a_device::aic6251a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : aic6250_device(mconfig, AIC6251A, tag, owner, clock) +{ +} + void aic6250_device::map(address_map &map) { map(0x0, 0x0).rw(FUNC(aic6250_device::dma_count_l_r), FUNC(aic6250_device::dma_count_l_w)); diff --git a/src/devices/machine/aic6250.h b/src/devices/machine/aic6250.h index 6dce153ca65..2a4ba02d118 100644 --- a/src/devices/machine/aic6250.h +++ b/src/devices/machine/aic6250.h @@ -34,6 +34,8 @@ public: void dma16_w(u16 data); protected: + aic6250_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // standard device_interface overrides virtual void device_start() override; virtual void device_reset() override; @@ -277,6 +279,13 @@ private: util::fifo <u8, 8> m_fifo; }; +class aic6251a_device : public aic6250_device +{ +public: + aic6251a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + DECLARE_DEVICE_TYPE(AIC6250, aic6250_device) +DECLARE_DEVICE_TYPE(AIC6251A, aic6251a_device) #endif // MAME_MACHINE_AIC6250_H diff --git a/src/devices/machine/f3853.cpp b/src/devices/machine/f3853.cpp index 45511f334ab..26b06b858db 100644 --- a/src/devices/machine/f3853.cpp +++ b/src/devices/machine/f3853.cpp @@ -106,8 +106,9 @@ void f3851_device::device_resolve_objects() void f3853_device::device_start() { // lookup table for 3851/3853 lfsr timer + m_value_to_cycle[0xff] = 0xff; uint8_t reg = 0xfe; // Known to get 0xfe after 255 cycles - for(int i = reg; i >= 0; i--) + for (int i = reg; i >= 0; i--) { m_value_to_cycle[reg] = i; reg = reg << 1 | (BIT(reg,7) ^ BIT(reg,5) ^ BIT(reg,4) ^ BIT(reg,3) ^ 1); @@ -189,25 +190,27 @@ IRQ_CALLBACK_MEMBER(f3853_device::int_acknowledge) void f3853_device::timer_start(uint8_t value) { - attotime period = (value != 0xff) ? attotime::from_hz(clock()) * (m_value_to_cycle[value] * m_prescaler) : attotime::never; + attotime period = (value != 0xff) ? attotime::from_hz(clock()) * (m_prescaler * m_value_to_cycle[value]) : attotime::never; m_timer->adjust(period); } TIMER_CALLBACK_MEMBER(f3853_device::timer_callback) { - if(m_timer_int_enable) + if (m_timer_int_enable) { m_request_flipflop = true; set_interrupt_request_line(); } - timer_start(0xfe); + + // next timeout after 255 timer counts (prescaler doesn't reset) + m_timer->adjust(attotime::from_hz(clock()) * (m_prescaler * 0xff)); } WRITE_LINE_MEMBER(f3853_device::ext_int_w) { - if(m_external_interrupt_line && !state && m_external_int_enable) + if (m_external_interrupt_line && !state && m_external_int_enable) { m_request_flipflop = true; } diff --git a/src/devices/machine/f3853.h b/src/devices/machine/f3853.h index b880f56e9bc..762f46950fb 100644 --- a/src/devices/machine/f3853.h +++ b/src/devices/machine/f3853.h @@ -59,7 +59,7 @@ _I/O B0 20 |_____________| 21 DB0 F38T56 is internal in F3870 - note: STROBE is N/C on F3851 + note: STROBE is N/C on F3851 */ diff --git a/src/devices/machine/fdc37c665gt.cpp b/src/devices/machine/fdc37c665gt.cpp index f2df880d2e8..2f2adb42976 100644 --- a/src/devices/machine/fdc37c665gt.cpp +++ b/src/devices/machine/fdc37c665gt.cpp @@ -16,11 +16,11 @@ READ8_MEMBER(fdc37c665gt_device::read) if ((offset & 0x3f8) == 0x3f8) { - data = m_uart1->ins8250_r(space, offset & 7, mem_mask); + data = m_uart1->ins8250_r(offset & 7); } else if ((offset & 0x3f8) == 0x2f8) { - data = m_uart2->ins8250_r(space, offset & 7, mem_mask); + data = m_uart2->ins8250_r(offset & 7); } else { @@ -33,11 +33,11 @@ WRITE8_MEMBER(fdc37c665gt_device::write) { if ((offset & 0x3f8) == 0x3f8) { - m_uart1->ins8250_w(space, offset & 7, data, mem_mask); + m_uart1->ins8250_w(offset & 7, data); } else if ((offset & 0x3f8) == 0x2f8) { - m_uart2->ins8250_w(space, offset & 7, data, mem_mask); + m_uart2->ins8250_w(offset & 7, data); } else { diff --git a/src/devices/machine/fdc37c93x.cpp b/src/devices/machine/fdc37c93x.cpp index 8ff5afc76d4..0d5b80f2d7d 100644 --- a/src/devices/machine/fdc37c93x.cpp +++ b/src/devices/machine/fdc37c93x.cpp @@ -581,12 +581,12 @@ void fdc37c93x_device::map_serial1(address_map &map) READ8_MEMBER(fdc37c93x_device::serial1_read) { - return pc_serial1_comdev->ins8250_r(space, offset, mem_mask); + return pc_serial1_comdev->ins8250_r(offset); } WRITE8_MEMBER(fdc37c93x_device::serial1_write) { - pc_serial1_comdev->ins8250_w(space, offset, data, mem_mask); + pc_serial1_comdev->ins8250_w(offset, data); } void fdc37c93x_device::map_serial1_addresses() @@ -610,12 +610,12 @@ void fdc37c93x_device::map_serial2(address_map &map) READ8_MEMBER(fdc37c93x_device::serial2_read) { - return pc_serial2_comdev->ins8250_r(space, offset, mem_mask); + return pc_serial2_comdev->ins8250_r(offset); } WRITE8_MEMBER(fdc37c93x_device::serial2_write) { - pc_serial2_comdev->ins8250_w(space, offset, data, mem_mask); + pc_serial2_comdev->ins8250_w(offset, data); } void fdc37c93x_device::map_serial2_addresses() diff --git a/src/devices/machine/gen_latch.cpp b/src/devices/machine/gen_latch.cpp index 7f1b382e0ab..b96d39a14be 100644 --- a/src/devices/machine/gen_latch.cpp +++ b/src/devices/machine/gen_latch.cpp @@ -2,7 +2,7 @@ // copyright-holders:Miodrag Milanovic /*************************************************************************** - Generic 8bit and 16 bit latch devices + Generic 8 bit and 16 bit latch devices ***************************************************************************/ @@ -89,14 +89,14 @@ void generic_latch_base_device::set_latch_written(bool latch_written) } } -READ8_MEMBER(generic_latch_base_device::acknowledge_r) +u8 generic_latch_base_device::acknowledge_r(address_space &space) { if (!machine().side_effects_disabled()) set_latch_written(false); return space.unmap(); } -WRITE8_MEMBER(generic_latch_base_device::acknowledge_w) +void generic_latch_base_device::acknowledge_w(u8 data) { set_latch_written(false); } @@ -111,24 +111,24 @@ generic_latch_8_device::generic_latch_8_device(const machine_config &mconfig, co { } -READ8_MEMBER( generic_latch_8_device::read ) +u8 generic_latch_8_device::read() { if (!has_separate_acknowledge() && !machine().side_effects_disabled()) set_latch_written(false); return m_latched_value; } -WRITE8_MEMBER( generic_latch_8_device::write ) +void generic_latch_8_device::write(u8 data) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_8_device::sync_callback), this), data); } -WRITE8_MEMBER( generic_latch_8_device::preset_w ) +void generic_latch_8_device::preset_w(u8 data) { - m_latched_value = 0xff; + m_latched_value = data; } -WRITE8_MEMBER( generic_latch_8_device::clear_w ) +void generic_latch_8_device::clear_w(u8 data) { m_latched_value = 0x00; } @@ -182,24 +182,24 @@ generic_latch_16_device::generic_latch_16_device(const machine_config &mconfig, { } -READ16_MEMBER( generic_latch_16_device::read ) +u16 generic_latch_16_device::read() { if (!has_separate_acknowledge() && !machine().side_effects_disabled()) set_latch_written(false); return m_latched_value; } -WRITE16_MEMBER( generic_latch_16_device::write ) +void generic_latch_16_device::write(u16 data) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_16_device::sync_callback), this), data); } -WRITE16_MEMBER( generic_latch_16_device::preset_w ) +void generic_latch_16_device::preset_w(u16 data) { - m_latched_value = 0xffff; + m_latched_value = data; } -WRITE16_MEMBER( generic_latch_16_device::clear_w ) +void generic_latch_16_device::clear_w(u16 data) { m_latched_value = 0x0000; } diff --git a/src/devices/machine/gen_latch.h b/src/devices/machine/gen_latch.h index d98bf428646..4080cbebe8d 100644 --- a/src/devices/machine/gen_latch.h +++ b/src/devices/machine/gen_latch.h @@ -2,7 +2,7 @@ // copyright-holders:Miodrag Milanovic /*************************************************************************** - Generic 8bit and 16 bit latch devices + Generic 8 bit and 16 bit latch devices ***************************************************************************/ @@ -36,8 +36,8 @@ public: DECLARE_READ_LINE_MEMBER(pending_r); - DECLARE_READ8_MEMBER( acknowledge_r ); - DECLARE_WRITE8_MEMBER( acknowledge_w ); + u8 acknowledge_r(address_space &space); + void acknowledge_w(u8 data = 0); protected: // construction/destruction @@ -67,16 +67,14 @@ public: // construction/destruction generic_latch_8_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); - DECLARE_READ8_MEMBER( read ); - DECLARE_WRITE8_MEMBER( write ); + u8 read(); + void write(u8 data); - DECLARE_WRITE8_MEMBER( preset_w ); - DECLARE_WRITE8_MEMBER( clear_w ); + void preset_w(u8 data = 0xff); + void clear_w(u8 data = 0); DECLARE_WRITE_LINE_MEMBER( preset ); DECLARE_WRITE_LINE_MEMBER( clear ); - void preset_w(u8 value) { m_latched_value = value; } - protected: virtual void device_start() override; @@ -95,16 +93,14 @@ public: // construction/destruction generic_latch_16_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); - DECLARE_READ16_MEMBER( read ); - DECLARE_WRITE16_MEMBER( write ); + u16 read(); + void write(u16 data); - DECLARE_WRITE16_MEMBER( preset_w ); - DECLARE_WRITE16_MEMBER( clear_w ); + void preset_w(u16 data = 0xffff); + void clear_w(u16 data = 0); DECLARE_WRITE_LINE_MEMBER( preset ); DECLARE_WRITE_LINE_MEMBER( clear ); - void preset_w(u16 value) { m_latched_value = value; } - protected: virtual void device_start() override; diff --git a/src/devices/machine/ins8154.cpp b/src/devices/machine/ins8154.cpp index ff1cd79906e..11943cdee2c 100644 --- a/src/devices/machine/ins8154.cpp +++ b/src/devices/machine/ins8154.cpp @@ -78,6 +78,7 @@ void ins8154_device::device_start() save_item(NAME(m_mdr)); save_item(NAME(m_odra)); save_item(NAME(m_odrb)); + save_item(NAME(m_ram)); } @@ -97,7 +98,7 @@ void ins8154_device::device_reset() } -READ8_MEMBER(ins8154_device::ins8154_r) +uint8_t ins8154_device::read_io(offs_t offset) { uint8_t val = 0xff; @@ -146,7 +147,12 @@ READ8_MEMBER(ins8154_device::ins8154_r) return val; } -WRITE8_MEMBER(ins8154_device::ins8154_porta_w) +uint8_t ins8154_device::read_ram(offs_t offset) +{ + return m_ram[offset & 0x7f]; +} + +void ins8154_device::porta_w(uint8_t data) { m_out_a = data; @@ -155,7 +161,7 @@ WRITE8_MEMBER(ins8154_device::ins8154_porta_w) m_out_a_cb(offs_t(0), (data & m_odra) | (m_odra ^ 0xff)); } -WRITE8_MEMBER(ins8154_device::ins8154_portb_w) +void ins8154_device::portb_w(uint8_t data) { LOG("%s: INS8154 Write PortB %02x with odrb: %02x\n", machine().describe_context(), data, m_odrb); m_out_b = data; @@ -165,7 +171,7 @@ WRITE8_MEMBER(ins8154_device::ins8154_portb_w) m_out_b_cb(offs_t(0), (data & m_odrb) | (m_odrb ^ 0xff)); } -WRITE8_MEMBER(ins8154_device::ins8154_w) +void ins8154_device::write_io(offs_t offset, uint8_t data) { if (offset > 0x24) { @@ -176,11 +182,11 @@ WRITE8_MEMBER(ins8154_device::ins8154_w) switch (offset) { case 0x20: - ins8154_porta_w(space, 0, data); + porta_w(data); break; case 0x21: - ins8154_portb_w(space, 0, data); + portb_w(data); break; case 0x22: @@ -205,12 +211,12 @@ WRITE8_MEMBER(ins8154_device::ins8154_w) if (offset < 0x08) { LOGBITS("%s: INS8154 Port A set bit %02x\n", machine().describe_context(), offset & 0x07); - ins8154_porta_w(space, 0, m_out_a |= (1 << (offset & 0x07))); + porta_w(m_out_a |= (1 << (offset & 0x07))); } else { LOGBITS("%s: INS8154 Port B set bit %02x\n", machine().describe_context(), offset & 0x07); - ins8154_portb_w(space, 0, m_out_b |= (1 << (offset & 0x07))); + portb_w(m_out_b |= (1 << (offset & 0x07))); } } else @@ -219,14 +225,19 @@ WRITE8_MEMBER(ins8154_device::ins8154_w) if (offset < 0x08) { LOGBITS("%s: INS8154 Port A clear bit %02x\n", machine().describe_context(), offset & 0x07); - ins8154_porta_w(space, 0, m_out_a & ~(1 << (offset & 0x07))); + porta_w(m_out_a & ~(1 << (offset & 0x07))); } else { LOGBITS("%s: INS8154 Port B clear bit %02x\n", machine().describe_context(), offset & 0x07); - ins8154_portb_w(space, 0, m_out_b & ~(1 << (offset & 0x07))); + portb_w(m_out_b & ~(1 << (offset & 0x07))); } } break; } } + +void ins8154_device::write_ram(offs_t offset, uint8_t data) +{ + m_ram[offset & 0x7f] = data; +} diff --git a/src/devices/machine/ins8154.h b/src/devices/machine/ins8154.h index 5ba94ab9cda..2ce40ec9e70 100644 --- a/src/devices/machine/ins8154.h +++ b/src/devices/machine/ins8154.h @@ -47,11 +47,13 @@ public: auto out_b() { return m_out_b_cb.bind(); } auto out_irq() { return m_out_irq_cb.bind(); } - DECLARE_READ8_MEMBER( ins8154_r ); - DECLARE_WRITE8_MEMBER( ins8154_w ); + uint8_t read_io(offs_t offset); + void write_io(offs_t offset, uint8_t data); + uint8_t read_ram(offs_t offset); + void write_ram(offs_t offset, uint8_t data); - DECLARE_WRITE8_MEMBER( ins8154_porta_w ); - DECLARE_WRITE8_MEMBER( ins8154_portb_w ); + void porta_w(uint8_t data); + void portb_w(uint8_t data); protected: // device-level overrides @@ -77,6 +79,9 @@ private: uint8_t m_mdr; /* Mode Definition Register */ uint8_t m_odra; /* Output Definition Register Port A */ uint8_t m_odrb; /* Output Definition Register Port B */ + + /* on-board RAM */ + uint8_t m_ram[0x80]; }; diff --git a/src/devices/machine/ins8250.cpp b/src/devices/machine/ins8250.cpp index d127ce0e40d..d586816c511 100644 --- a/src/devices/machine/ins8250.cpp +++ b/src/devices/machine/ins8250.cpp @@ -107,7 +107,7 @@ DEFINE_DEVICE_TYPE(NS16450, ns16450_device, "ns16450", "National Semiconductor DEFINE_DEVICE_TYPE(NS16550, ns16550_device, "ns16550", "National Semiconductor NS16550 UART") DEFINE_DEVICE_TYPE(PC16552D, pc16552_device, "pc16552d", "National Semiconductor PC16552D UART") -ins8250_uart_device::ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, dev_type device_type) +ins8250_uart_device::ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, dev_type device_type) : device_t(mconfig, type, tag, owner, clock) , device_serial_interface(mconfig, *this) , m_device_type(device_type) @@ -126,22 +126,22 @@ ins8250_uart_device::ins8250_uart_device(const machine_config &mconfig, device_t m_regs.ier = 0; } -ins8250_device::ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +ins8250_device::ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ins8250_uart_device(mconfig, INS8250, tag, owner, clock, dev_type::INS8250) { } -ns16450_device::ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +ns16450_device::ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ins8250_uart_device(mconfig, NS16450, tag, owner, clock, dev_type::NS16450) { } -ns16550_device::ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +ns16550_device::ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : ins8250_uart_device(mconfig, NS16550, tag, owner, clock, dev_type::NS16550) { } -pc16552_device::pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +pc16552_device::pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, PC16552D, tag, owner, clock) { } @@ -159,27 +159,27 @@ void pc16552_device::device_start() #define COM_INT_PENDING_MODEM_STATUS_REGISTER 0x0008 #define COM_INT_PENDING_CHAR_TIMEOUT 0x0011 -static constexpr uint8_t INS8250_LSR_TSRE = 0x40; -static constexpr uint8_t INS8250_LSR_THRE = 0x20; -static constexpr uint8_t INS8250_LSR_BI = 0x10; -static constexpr uint8_t INS8250_LSR_FE = 0x08; -static constexpr uint8_t INS8250_LSR_PE = 0x04; -static constexpr uint8_t INS8250_LSR_OE = 0x02; -static constexpr uint8_t INS8250_LSR_DR = 0x01; - -static constexpr uint8_t INS8250_MCR_DTR = 0x01; -static constexpr uint8_t INS8250_MCR_RTS = 0x02; -static constexpr uint8_t INS8250_MCR_OUT1 = 0x04; -static constexpr uint8_t INS8250_MCR_OUT2 = 0x08; -static constexpr uint8_t INS8250_MCR_LOOPBACK = 0x10; - -static constexpr uint8_t INS8250_LCR_BITCOUNT_MASK= 0x03; -static constexpr uint8_t INS8250_LCR_2STOP_BITS = 0x04; -//static constexpr uint8_t INS8250_LCR_PEN = 0x08; -//static constexpr uint8_t INS8250_LCR_EVEN_PAR = 0x10; -//static constexpr uint8_t INS8250_LCR_PARITY = 0x20; -//static constexpr uint8_t INS8250_LCR_BREAK = 0x40; -static constexpr uint8_t INS8250_LCR_DLAB = 0x80; +static constexpr u8 INS8250_LSR_TSRE = 0x40; +static constexpr u8 INS8250_LSR_THRE = 0x20; +static constexpr u8 INS8250_LSR_BI = 0x10; +static constexpr u8 INS8250_LSR_FE = 0x08; +static constexpr u8 INS8250_LSR_PE = 0x04; +static constexpr u8 INS8250_LSR_OE = 0x02; +static constexpr u8 INS8250_LSR_DR = 0x01; + +static constexpr u8 INS8250_MCR_DTR = 0x01; +static constexpr u8 INS8250_MCR_RTS = 0x02; +static constexpr u8 INS8250_MCR_OUT1 = 0x04; +static constexpr u8 INS8250_MCR_OUT2 = 0x08; +static constexpr u8 INS8250_MCR_LOOPBACK = 0x10; + +static constexpr u8 INS8250_LCR_BITCOUNT_MASK= 0x03; +static constexpr u8 INS8250_LCR_2STOP_BITS = 0x04; +//static constexpr u8 INS8250_LCR_PEN = 0x08; +//static constexpr u8 INS8250_LCR_EVEN_PAR = 0x10; +//static constexpr u8 INS8250_LCR_PARITY = 0x20; +//static constexpr u8 INS8250_LCR_BREAK = 0x40; +static constexpr u8 INS8250_LCR_DLAB = 0x80; /* ints will continue to be set for as long as there are ints pending */ void ins8250_uart_device::update_interrupt() @@ -257,7 +257,7 @@ void ins8250_uart_device::update_baud_rate() tra_complete(); } -WRITE8_MEMBER( ins8250_uart_device::ins8250_w ) +void ins8250_uart_device::ins8250_w(offs_t offset, u8 data) { int tmp; @@ -399,7 +399,7 @@ WRITE8_MEMBER( ins8250_uart_device::ins8250_w ) } } -READ8_MEMBER( ins8250_uart_device::ins8250_r ) +u8 ins8250_uart_device::ins8250_r(offs_t offset) { int data = 0x0ff; @@ -484,7 +484,7 @@ void ns16550_device::rcv_complete() return; } - uint8_t errors = 0; + u8 errors = 0; if (is_receive_framing_error()) errors |= INS8250_LSR_FE; if (is_receive_parity_error()) @@ -578,7 +578,7 @@ void ins8250_uart_device::tra_callback() void ins8250_uart_device::update_msr() { - uint8_t data; + u8 data; int change; if (m_regs.mcr & INS8250_MCR_LOOPBACK) @@ -720,15 +720,15 @@ void ns16550_device::device_timer(emu_timer &timer, device_timer_id id, int para } } -void ns16550_device::push_tx(uint8_t data) +void ns16550_device::push_tx(u8 data) { m_tfifo[m_thead] = data; ++m_thead &= 0x0f; } -uint8_t ns16550_device::pop_rx() +u8 ns16550_device::pop_rx() { - uint8_t data = m_rfifo[m_rtail]; + u8 data = m_rfifo[m_rtail]; clear_int(COM_INT_PENDING_CHAR_TIMEOUT & ~1); // don't clear bit 1 yet if(m_rnum) @@ -758,7 +758,7 @@ uint8_t ns16550_device::pop_rx() return data; } -void ns16550_device::set_fcr(uint8_t data) +void ns16550_device::set_fcr(u8 data) { const int bytes_per_int[] = {1, 4, 8, 14}; if(!(data & 1)) diff --git a/src/devices/machine/ins8250.h b/src/devices/machine/ins8250.h index 3047b8d6c05..5f9a6bd1793 100644 --- a/src/devices/machine/ins8250.h +++ b/src/devices/machine/ins8250.h @@ -27,8 +27,8 @@ public: auto out_out1_callback() { return m_out_out1_cb.bind(); } auto out_out2_callback() { return m_out_out2_cb.bind(); } - DECLARE_WRITE8_MEMBER(ins8250_w); - DECLARE_READ8_MEMBER(ins8250_r); + void ins8250_w(offs_t offset, u8 data); + u8 ins8250_r(offs_t offset); DECLARE_WRITE_LINE_MEMBER(dcd_w); DECLARE_WRITE_LINE_MEMBER(dsr_w); @@ -46,7 +46,7 @@ protected: NS16550A }; - ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, dev_type device_type); + ins8250_uart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, dev_type device_type); virtual void device_start() override; virtual void device_reset() override; @@ -54,9 +54,9 @@ protected: virtual void tra_complete() override; virtual void tra_callback() override; - virtual void set_fcr(uint8_t data) { } - virtual void push_tx(uint8_t data) { } - virtual uint8_t pop_rx() { return 0; } + virtual void set_fcr(u8 data) { } + virtual void push_tx(u8 data) { } + virtual u8 pop_rx() { return 0; } void trigger_int(int flag); void clear_int(int flag); @@ -65,20 +65,20 @@ protected: const dev_type m_device_type; struct { - uint8_t thr; /* 0 -W transmitter holding register */ - uint8_t rbr; /* 0 R- receiver buffer register */ - uint8_t ier; /* 1 RW interrupt enable register */ - uint16_t dl; /* 0/1 RW divisor latch (if DLAB = 1) */ - uint8_t iir; /* 2 R- interrupt identification register */ - uint8_t fcr; - uint8_t lcr; /* 3 RW line control register (bit 7: DLAB) */ - uint8_t mcr; /* 4 RW modem control register */ - uint8_t lsr; /* 5 R- line status register */ - uint8_t msr; /* 6 R- modem status register */ - uint8_t scr; /* 7 RW scratch register */ + u8 thr; /* 0 -W transmitter holding register */ + u8 rbr; /* 0 R- receiver buffer register */ + u8 ier; /* 1 RW interrupt enable register */ + u16 dl; /* 0/1 RW divisor latch (if DLAB = 1) */ + u8 iir; /* 2 R- interrupt identification register */ + u8 fcr; + u8 lcr; /* 3 RW line control register (bit 7: DLAB) */ + u8 mcr; /* 4 RW modem control register */ + u8 lsr; /* 5 R- line status register */ + u8 msr; /* 6 R- modem status register */ + u8 scr; /* 7 RW scratch register */ } m_regs; private: - uint8_t m_int_pending; + u8 m_int_pending; devcb_write_line m_out_tx_cb; devcb_write_line m_out_dtr_cb; @@ -101,34 +101,34 @@ private: class ins8250_device : public ins8250_uart_device { public: - ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ins8250_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; class ns16450_device : public ins8250_uart_device { public: - ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ns16450_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; class ns16550_device : public ins8250_uart_device { public: - ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ns16550_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: virtual void device_start() override; virtual void device_reset() override; virtual void rcv_complete() override; virtual void tra_complete() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - virtual void set_fcr(uint8_t data) override; - virtual void push_tx(uint8_t data) override; - virtual uint8_t pop_rx() override; + virtual void set_fcr(u8 data) override; + virtual void push_tx(u8 data) override; + virtual u8 pop_rx() override; private: void set_timer() { m_timeout->adjust(attotime::from_hz((clock()*4*8)/(m_regs.dl*16))); } int m_rintlvl; - uint8_t m_rfifo[16]; - uint8_t m_efifo[16]; - uint8_t m_tfifo[16]; + u8 m_rfifo[16]; + u8 m_efifo[16]; + u8 m_tfifo[16]; int m_rhead, m_rtail, m_rnum; int m_thead, m_ttail; emu_timer *m_timeout; @@ -137,10 +137,10 @@ private: class pc16552_device : public device_t { public: - pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + pc16552_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - DECLARE_READ8_MEMBER(read) { return ((offset & 8) ? m_chan1 : m_chan0)->ins8250_r(space, offset & 7, mem_mask); } - DECLARE_WRITE8_MEMBER(write) { ((offset & 8) ? m_chan1 : m_chan0)->ins8250_w(space, offset & 7, data, mem_mask); } + u8 read(offs_t offset) { return ((offset & 8) ? m_chan1 : m_chan0)->ins8250_r(offset & 7); } + void write(offs_t offset, u8 data) { ((offset & 8) ? m_chan1 : m_chan0)->ins8250_w(offset & 7, data); } protected: virtual void device_start() override; diff --git a/src/devices/machine/nscsi_cd.cpp b/src/devices/machine/nscsi_cd.cpp index 0446c600e9f..b58a179161a 100644 --- a/src/devices/machine/nscsi_cd.cpp +++ b/src/devices/machine/nscsi_cd.cpp @@ -378,6 +378,22 @@ void nscsi_cdrom_device::scsi_command() scsi_cmdbuf[pos++] = 0x00; // Double meh break; + case 0x01: // Read-write error recovery + scsi_cmdbuf[pos++] = 0x01; // PS, page id + scsi_cmdbuf[pos++] = 0x0a; // Page length + scsi_cmdbuf[pos++] = 0x01; + scsi_cmdbuf[pos++] = 0x01; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + scsi_cmdbuf[pos++] = 0x00; + break; + case 0x02: // Disconnect/reconnect control parameters (guessed) scsi_cmdbuf[pos++] = 0x82; // PS, page id scsi_cmdbuf[pos++] = 0x0e; // Page length diff --git a/src/devices/machine/spg110.cpp b/src/devices/machine/spg110.cpp index df614deb314..060ae511f0c 100644 --- a/src/devices/machine/spg110.cpp +++ b/src/devices/machine/spg110.cpp @@ -17,352 +17,61 @@ DEFINE_DEVICE_TYPE(SPG110, spg110_device, "spg110", "SPG110 System-on-a-Chip") spg110_device::spg110_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, type, tag, owner, clock), - device_memory_interface(mconfig, *this), - m_space_config("spg110", ENDIANNESS_BIG, 16, 32, 0, address_map_constructor(FUNC(spg110_device::map_video), this)), - m_cpu(*this, finder_base::DUMMY_TAG), - m_palette(*this, "palette"), - m_gfxdecode(*this, "gfxdecode"), - m_palram(*this, "palram") + : device_t(mconfig, type, tag, owner, clock) + , m_cpu(*this, finder_base::DUMMY_TAG) + , m_screen(*this, finder_base::DUMMY_TAG) + , m_spg_io(*this, "spg_io") + , m_spg_video(*this, "spg_video") + , m_porta_out(*this) + , m_portb_out(*this) + , m_portc_out(*this) + , m_porta_in(*this) + , m_portb_in(*this) + , m_portc_in(*this) + , m_adc_in{{*this}, {*this}} + , m_chip_sel(*this) { } -template<spg110_device::flipx_t FlipX> -void spg110_device::blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile) -{ - address_space &space = m_cpu->space(AS_PROGRAM); - - int32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); - int32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); - - uint32_t yflipmask = attr & TILE_Y_FLIP ? h - 1 : 0; - - uint32_t nc = ((attr & 0x0003) + 1) << 1; - - uint32_t palette_offset = (attr & 0x0f00) >> 4; - - palette_offset >>= nc; - palette_offset <<= nc; - - uint32_t bits_per_row = nc * w / 16; - uint32_t words_per_tile = bits_per_row * h; - uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask); - uint32_t bits = 0; - uint32_t nbits = 0; - uint32_t y = line; - - int yy = (yoff + y) & 0x1ff; - if (yy >= 0x01c0) - yy -= 0x0200; - - if (yy > 240 || yy < 0) - return; - - int y_index = yy * 320; - - for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++) - { - int xx = xoff + x; - - bits <<= nc; - - if (nbits < nc) - { - uint16_t b = space.read_word(m++ & 0x3fffff); - //b = (b << 8) | (b >> 8); - bits |= b << (nc - nbits); - nbits += 16; - } - nbits -= nc; - - uint32_t pal = palette_offset + (bits >> 16); - bits &= 0xffff; - - xx &= 0x01ff; - if (xx >= 0x01c0) - xx -= 0x0200; - - if (xx >= 0 && xx < 320) - { - // TODO, this is completely wrong for this palette system - int pix_index = xx + y_index; - uint16_t rawpal = m_palram[pal]; - const pen_t *pens = m_palette->pens(); - uint32_t paldata = pens[pal]; - - if (!(rawpal & 0x8000)) - { - m_screenbuf[pix_index] = paldata; - } - } - } -} - -void spg110_device::blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs) -{ - uint32_t xscroll = regs[0]; - uint32_t yscroll = regs[1]; - uint32_t attr = regs[2]; - uint32_t ctrl = regs[3]; - uint32_t tilemap = regs[4]; - uint32_t palette_map = regs[5]; - address_space &space2 = this->space(0); - - if (!(ctrl & PAGE_ENABLE_MASK)) - { - return; - } - - if (((attr & PAGE_DEPTH_FLAG_MASK) >> PAGE_DEPTH_FLAG_SHIFT) != depth) - { - return; - } - - uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); - uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); - - uint32_t tile_count_x = 512 / tile_w; - - uint32_t bitmap_y = (scanline + yscroll) & 0xff; - uint32_t y0 = bitmap_y / tile_h; - uint32_t tile_scanline = bitmap_y % tile_h; - uint32_t tile_address = tile_count_x * y0; - - for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++) - { - uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10; - uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff; - uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space2.read_word(tilemap*2) : space2.read_word((tilemap + tile_address)*2); - uint16_t palette = 0; - - if (!tile) - continue; - - palette = space2.read_word(palette_map + tile_address / 2); - if (x0 & 1) - palette = (palette & 0xff00) >> 8; - else - palette = (palette & 0x00ff); - - - bool flip_x = 0;//(tileattr & TILE_X_FLIP); - - if (flip_x) - blit<FlipXOn>(cliprect, tile_scanline, xx, yy, attr, ctrl, bitmap_addr, tile); - else - blit<FlipXOff>(cliprect, tile_scanline, xx, yy, attr, ctrl, bitmap_addr, tile); - - } -} - - -/* correct, 4bpp gfxs */ -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { STEP4(0,1) }, - { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4 }, - { STEP8(0,4*8) }, - 8*8*4 -}; - -static const gfx_layout charlayout6 = -{ - 8,8, - RGN_FRAC(1,1), - 6, - { 0,1,2,3,4,5 }, - { STEP8(0,6) }, - { STEP8(0,6*8) }, - 8*8*6 -}; - -static const gfx_layout char16layout = -{ - 16,16, - RGN_FRAC(1,1), - 4, - { STEP4(0,1) }, - { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4, 8*4,9*4,10*4,11*4,12*4,13*4,14*4,15*4 }, - { STEP16(0,4*16) }, - 16*16*4 -}; - -static const gfx_layout char32layout = -{ - 32,32, - RGN_FRAC(1,1), - 4, - { STEP4(0,1) }, - { STEP32(0,4) }, - { STEP32(0,4*32) }, - 32*32*4 -}; - - - -static GFXDECODE_START( gfx ) - GFXDECODE_ENTRY( ":maincpu", 0, charlayout, 0, 16 ) - GFXDECODE_ENTRY( ":maincpu", 0, char16layout, 0, 16 ) - GFXDECODE_ENTRY( ":maincpu", 0, char32layout, 0, 16 ) - GFXDECODE_ENTRY( ":maincpu", 0, charlayout6, 0, 16 ) // correct for lots of the tiles inc. startup text -GFXDECODE_END - - - -void spg110_device::device_add_mconfig(machine_config &config) -{ -// PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x100); -// PALETTE(config, m_palette).set_format(palette_device::RGB_565, 0x100); -// PALETTE(config, m_palette).set_format(palette_device::IRGB_4444, 0x100); -// PALETTE(config, m_palette).set_format(palette_device::RGBI_4444, 0x100); -// PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x100); - PALETTE(config, m_palette, palette_device::BLACK, 256); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx); -} - - -device_memory_interface::space_config_vector spg110_device::memory_space_config() const -{ - return space_config_vector { - std::make_pair(0, &m_space_config) - }; -} spg110_device::spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : spg110_device(mconfig, SPG110, tag, owner, clock) { } -// irq source or similar? -READ16_MEMBER(spg110_device::spg110_2063_r) -{ - // checks for bits 0x20 and 0x08 in the IRQ function (all IRQs point to the same place) - return 0x0008; -} - -WRITE16_MEMBER(spg110_device::spg110_2063_w) +WRITE_LINE_MEMBER(spg110_device::videoirq_w) { - // writes 0x28, probably clears the IRQ / IRQ sources? 0x63 is the same offset for this in spg2xx but bits used seem to be different - m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, CLEAR_LINE); + m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, state); } -READ16_MEMBER(spg110_device::datasegment_r) +void spg110_device::configure_spg_io(spg2xx_io_device* io) { - uint16_t val = m_cpu->get_ds(); - return val; + io->porta_in().set(FUNC(spg110_device::porta_r)); + io->portb_in().set(FUNC(spg110_device::portb_r)); + io->portc_in().set(FUNC(spg110_device::portc_r)); + io->porta_out().set(FUNC(spg110_device::porta_w)); + io->portb_out().set(FUNC(spg110_device::portb_w)); + io->portc_out().set(FUNC(spg110_device::portc_w)); + io->adc_in<0>().set(FUNC(spg110_device::adc_r<0>)); + io->adc_in<1>().set(FUNC(spg110_device::adc_r<1>)); + io->chip_select().set(FUNC(spg110_device::cs_w)); +// io->pal_read_callback().set(FUNC(spg110_device::get_pal_r)); +// io->write_timer_irq_callback().set(FUNC(spg110_device::timerirq_w)); +// io->write_uart_adc_irq_callback().set(FUNC(spg110_device::uartirq_w)); +// io->write_external_irq_callback().set(FUNC(spg110_device::extirq_w)); +// io->write_ffrq_tmr1_irq_callback().set(FUNC(spg110_device::ffreq1_w)); +// io->write_ffrq_tmr2_irq_callback().set(FUNC(spg110_device::ffreq2_w)); } -WRITE16_MEMBER(spg110_device::datasegment_w) +void spg110_device::device_add_mconfig(machine_config &config) { - m_cpu->set_ds(data & 0x3f); -} + SPG24X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), m_cpu, m_screen); + configure_spg_io(m_spg_io); -WRITE16_MEMBER(spg110_device::spg110_3221_w) -{ - /* first write on startup? */ + SPG110_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), m_cpu, m_screen); + m_spg_video->write_video_irq_callback().set(FUNC(spg110_device::videoirq_w)); } -WRITE16_MEMBER(spg110_device::spg110_3223_w) { } -WRITE16_MEMBER(spg110_device::spg110_3225_w) { } - - -WRITE16_MEMBER(spg110_device::spg110_201c_w) { } -WRITE16_MEMBER(spg110_device::spg110_2020_w) { } -WRITE16_MEMBER(spg110_device::spg110_2042_w) { } -WRITE16_MEMBER(spg110_device::spg110_2031_w) { } -WRITE16_MEMBER(spg110_device::spg110_2032_w) { } -WRITE16_MEMBER(spg110_device::spg110_2033_w) { } -WRITE16_MEMBER(spg110_device::spg110_2034_w) { } -WRITE16_MEMBER(spg110_device::spg110_2035_w) { } -WRITE16_MEMBER(spg110_device::spg110_2036_w) { COMBINE_DATA(&m_2036_scroll); } -WRITE16_MEMBER(spg110_device::spg110_2039_w) { } -WRITE16_MEMBER(spg110_device::spg110_2037_w) { } -WRITE16_MEMBER(spg110_device::spg110_203c_w) { } -WRITE16_MEMBER(spg110_device::spg110_203d_w) { } -WRITE16_MEMBER(spg110_device::spg110_2045_w) { } - - -WRITE16_MEMBER(spg110_device::spg110_2028_w) { } -WRITE16_MEMBER(spg110_device::spg110_2029_w) { } - -READ16_MEMBER(spg110_device::spg110_2028_r) { return 0x0000; } -READ16_MEMBER(spg110_device::spg110_2029_r) { return 0x0000; } - - -WRITE16_MEMBER(spg110_device::spg110_2050_w) { } -WRITE16_MEMBER(spg110_device::spg110_2051_w) { } -WRITE16_MEMBER(spg110_device::spg110_2052_w) { } -WRITE16_MEMBER(spg110_device::spg110_2053_w) { } -WRITE16_MEMBER(spg110_device::spg110_2054_w) { } -WRITE16_MEMBER(spg110_device::spg110_2055_w) { } -WRITE16_MEMBER(spg110_device::spg110_2056_w) { } -WRITE16_MEMBER(spg110_device::spg110_2057_w) { } -WRITE16_MEMBER(spg110_device::spg110_2058_w) { } -WRITE16_MEMBER(spg110_device::spg110_2059_w) { } -WRITE16_MEMBER(spg110_device::spg110_205a_w) { } -WRITE16_MEMBER(spg110_device::spg110_205b_w) { } -WRITE16_MEMBER(spg110_device::spg110_205c_w) { } -WRITE16_MEMBER(spg110_device::spg110_205d_w) { } -WRITE16_MEMBER(spg110_device::spg110_205e_w) { } -WRITE16_MEMBER(spg110_device::spg110_205f_w) { } - -WRITE16_MEMBER(spg110_device::dma_unk_2061_w) { COMBINE_DATA(&m_dma_unk_2061); } -WRITE16_MEMBER(spg110_device::dma_dst_step_w) { COMBINE_DATA(&m_dma_dst_step); } -WRITE16_MEMBER(spg110_device::dma_unk_2067_w) { COMBINE_DATA(&m_dma_unk_2067); } -WRITE16_MEMBER(spg110_device::dma_src_step_w) { COMBINE_DATA(&m_dma_src_step); } - -WRITE16_MEMBER(spg110_device::dma_dst_w) { COMBINE_DATA(&m_dma_dst); } -WRITE16_MEMBER(spg110_device::dma_src_w) { COMBINE_DATA(&m_dma_src); } - -WRITE16_MEMBER(spg110_device::dma_len_trigger_w) -{ - int length = data & 0x1fff; - - // this is presumably a counter that underflows to 0x1fff, because that's what the wait loop waits for? - logerror("%s: (trigger len) %04x with values (unk) %04x (dststep) %04x (unk) %04x (src step) %04x | (dst) %04x (src) %04x\n", machine().describe_context(), data, m_dma_unk_2061, m_dma_dst_step, m_dma_unk_2067, m_dma_src_step, m_dma_dst, m_dma_src); - - if ((m_dma_unk_2061!=0x0000) || (m_dma_unk_2067 != 0x0000)) - fatalerror("unknown DMA params are not zero!\n"); - - int source = m_dma_src; - int dest = m_dma_dst; - - for (int i = 0; i < length; i++) - { - address_space &mem = m_cpu->space(AS_PROGRAM); - uint16_t val = mem.read_word(source); - - this->space(0).write_word(dest * 2, val, 0xffff); - - source+=m_dma_src_step; - dest+=m_dma_dst_step; - } -} - -READ16_MEMBER(spg110_device::dma_len_status_r) -{ - return 0x1fff; // DMA related? -} - -READ16_MEMBER(spg110_device::spg110_2037_r) { return 0x0000; } -READ16_MEMBER(spg110_device::spg110_2042_r) { return 0x0000; } - -WRITE16_MEMBER(spg110_device::spg110_3200_w) { } -WRITE16_MEMBER(spg110_device::spg110_3201_w) { } -WRITE16_MEMBER(spg110_device::spg110_3203_w) { } -WRITE16_MEMBER(spg110_device::spg110_3204_w) { } -WRITE16_MEMBER(spg110_device::spg110_3206_w) { } -WRITE16_MEMBER(spg110_device::spg110_3208_w) { } -WRITE16_MEMBER(spg110_device::spg110_3209_w) { } - -READ16_MEMBER(spg110_device::spg110_3201_r) { return 0x0000; } -READ16_MEMBER(spg110_device::spg110_3225_r) { return 0x0000; } -READ16_MEMBER(spg110_device::spg110_322c_r) { return 0x0000; } - WRITE16_MEMBER(spg110_device::spg110_3100_w) { } WRITE16_MEMBER(spg110_device::spg110_3101_w) { } WRITE16_MEMBER(spg110_device::spg110_3102_w) { } @@ -378,128 +87,60 @@ WRITE16_MEMBER(spg110_device::spg110_310d_w) { } READ16_MEMBER(spg110_device::spg110_310f_r) { return 0x0000; } -READ16_MEMBER(spg110_device::tmap0_regs_r) { return tmap0_regs[offset]; } -READ16_MEMBER(spg110_device::tmap1_regs_r) { return tmap1_regs[offset]; } - -void spg110_device::tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data) -{ - switch (regno) - { - case 0x0: // Page X scroll - logerror("video_w: Page %d X Scroll = %04x\n", which, data & 0x01ff); - regs[regno] = data & 0x01ff; - break; - - case 0x1: // Page Y scroll - logerror("video_w: Page %d Y Scroll = %04x\n", which, data & 0x00ff); - regs[regno] = data & 0x00ff; - break; - - case 0x2: // Page Attributes - // 'depth' (aka z value) can't be depth here as it is on spg2xx, or the scores in attract will be behind the table, it really seems to be per attribute bit instead - - logerror("video_w: Page %d Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", which, data - , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1)); - regs[regno] = data; - break; - - case 0x3: // Page Control - logerror("video_w: Page %d Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", which, data - , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0)); - regs[regno] = data; - break; - - case 0x4: // Page Tile Address - logerror("video_w: Page %d Tile Address = %04x\n", which, data); - regs[regno] = data; - break; - - case 0x5: // Page Attribute Address - logerror("video_w: Page %d Attribute Address = %04x\n", which, data); - regs[regno] = data; - break; - } -} - - -WRITE16_MEMBER(spg110_device::tmap0_regs_w) -{ - tilemap_write_regs(0, tmap0_regs,offset,data); -} - - -WRITE16_MEMBER(spg110_device::tmap1_regs_w) -{ - tilemap_write_regs(1, tmap1_regs,offset,data); -} - void spg110_device::map(address_map &map) { map(0x000000, 0x000fff).ram(); - // vregs are at 2000? - map(0x002010, 0x002015).rw(FUNC(spg110_device::tmap0_regs_r), FUNC(spg110_device::tmap0_regs_w)); - map(0x002016, 0x00201b).rw(FUNC(spg110_device::tmap1_regs_r), FUNC(spg110_device::tmap1_regs_w)); - - map(0x00201c, 0x00201c).w(FUNC(spg110_device::spg110_201c_w)); + map(0x002010, 0x002015).rw(m_spg_video, FUNC(spg110_video_device::tmap0_regs_r), FUNC(spg110_video_device::tmap0_regs_w)); + map(0x002016, 0x00201b).rw(m_spg_video, FUNC(spg110_video_device::tmap1_regs_r), FUNC(spg110_video_device::tmap1_regs_w)); - map(0x002020, 0x002020).w(FUNC(spg110_device::spg110_2020_w)); +#if 1 // more vregs? + map(0x00201c, 0x00201c).w(m_spg_video, FUNC(spg110_video_device::spg110_201c_w)); - map(0x002028, 0x002028).rw(FUNC(spg110_device::spg110_2028_r), FUNC(spg110_device::spg110_2028_w)); - map(0x002029, 0x002029).rw(FUNC(spg110_device::spg110_2029_r), FUNC(spg110_device::spg110_2029_w)); + map(0x002020, 0x002020).w(m_spg_video, FUNC(spg110_video_device::spg110_2020_w)); - map(0x002031, 0x002031).w(FUNC(spg110_device::spg110_2031_w)); // sometimes 14a? - map(0x002032, 0x002032).w(FUNC(spg110_device::spg110_2032_w)); // always 14a? - map(0x002033, 0x002033).w(FUNC(spg110_device::spg110_2033_w)); - map(0x002034, 0x002034).w(FUNC(spg110_device::spg110_2034_w)); - map(0x002035, 0x002035).w(FUNC(spg110_device::spg110_2035_w)); - map(0x002036, 0x002036).w(FUNC(spg110_device::spg110_2036_w)); // possible scroll register? - map(0x002037, 0x002037).rw(FUNC(spg110_device::spg110_2037_r), FUNC(spg110_device::spg110_2037_w)); + map(0x002028, 0x002028).rw(m_spg_video, FUNC(spg110_video_device::spg110_2028_r), FUNC(spg110_video_device::spg110_2028_w)); + map(0x002029, 0x002029).rw(m_spg_video, FUNC(spg110_video_device::spg110_2029_r), FUNC(spg110_video_device::spg110_2029_w)); - map(0x002039, 0x002039).w(FUNC(spg110_device::spg110_2039_w)); + map(0x002031, 0x002031).w(m_spg_video, FUNC(spg110_video_device::spg110_2031_w)); // sometimes 14a? + map(0x002032, 0x002032).w(m_spg_video, FUNC(spg110_video_device::spg110_2032_w)); // always 14a? + map(0x002033, 0x002033).w(m_spg_video, FUNC(spg110_video_device::spg110_2033_w)); + map(0x002034, 0x002034).w(m_spg_video, FUNC(spg110_video_device::spg110_2034_w)); + map(0x002035, 0x002035).w(m_spg_video, FUNC(spg110_video_device::spg110_2035_w)); + map(0x002036, 0x002036).w(m_spg_video, FUNC(spg110_video_device::spg110_2036_w)); // possible scroll register? + map(0x002037, 0x002037).rw(m_spg_video, FUNC(spg110_video_device::spg110_2037_r), FUNC(spg110_video_device::spg110_2037_w)); - map(0x00203c, 0x00203c).w(FUNC(spg110_device::spg110_203c_w)); + map(0x002039, 0x002039).w(m_spg_video, FUNC(spg110_video_device::spg110_2039_w)); - map(0x00203d, 0x00203d).w(FUNC(spg110_device::spg110_203d_w)); // possible scroll register? + map(0x00203c, 0x00203c).w(m_spg_video, FUNC(spg110_video_device::spg110_203c_w)); - map(0x002042, 0x002042).rw(FUNC(spg110_device::spg110_2042_r),FUNC(spg110_device::spg110_2042_w)); + map(0x00203d, 0x00203d).w(m_spg_video, FUNC(spg110_video_device::spg110_203d_w)); // possible scroll register? - map(0x002045, 0x002045).w(FUNC(spg110_device::spg110_2045_w)); + map(0x002042, 0x002042).rw(m_spg_video, FUNC(spg110_video_device::spg110_2042_r),FUNC(spg110_video_device::spg110_2042_w)); - // seems to be 16 entries for.. something? - map(0x002050, 0x002050).w(FUNC(spg110_device::spg110_2050_w)); - map(0x002051, 0x002051).w(FUNC(spg110_device::spg110_2051_w)); - map(0x002052, 0x002052).w(FUNC(spg110_device::spg110_2052_w)); - map(0x002053, 0x002053).w(FUNC(spg110_device::spg110_2053_w)); - map(0x002054, 0x002054).w(FUNC(spg110_device::spg110_2054_w)); - map(0x002055, 0x002055).w(FUNC(spg110_device::spg110_2055_w)); - map(0x002056, 0x002056).w(FUNC(spg110_device::spg110_2056_w)); - map(0x002057, 0x002057).w(FUNC(spg110_device::spg110_2057_w)); - map(0x002058, 0x002058).w(FUNC(spg110_device::spg110_2058_w)); - map(0x002059, 0x002059).w(FUNC(spg110_device::spg110_2059_w)); - map(0x00205a, 0x00205a).w(FUNC(spg110_device::spg110_205a_w)); - map(0x00205b, 0x00205b).w(FUNC(spg110_device::spg110_205b_w)); - map(0x00205c, 0x00205c).w(FUNC(spg110_device::spg110_205c_w)); - map(0x00205d, 0x00205d).w(FUNC(spg110_device::spg110_205d_w)); - map(0x00205e, 0x00205e).w(FUNC(spg110_device::spg110_205e_w)); - map(0x00205f, 0x00205f).w(FUNC(spg110_device::spg110_205f_w)); + map(0x002045, 0x002045).w(m_spg_video, FUNC(spg110_video_device::spg110_2045_w)); +#endif - //map(0x002010, 0x00205f).ram(); + // seems to be 16 entries for.. something? on jak_capb these seem connected to the palette DMA operations, 0x2050 for 0x8000, 0x2051 for 0x8020, 0x2052 for 0x8040 etc. maybe 1 bit per pen? + map(0x002050, 0x00205f).ram().w(m_spg_video, FUNC(spg110_video_device::spg110_205x_w)).share("spg_video:palctrlram"); // everything (dma? and interrupt flag?!) - map(0x002060, 0x002060).w(FUNC(spg110_device::dma_dst_w)); - map(0x002061, 0x002061).w(FUNC(spg110_device::dma_unk_2061_w)); - map(0x002062, 0x002062).rw(FUNC(spg110_device::dma_len_status_r),FUNC(spg110_device::dma_len_trigger_w)); - map(0x002063, 0x002063).rw(FUNC(spg110_device::spg110_2063_r),FUNC(spg110_device::spg110_2063_w)); // this looks like interrupt stuff and is checked in the irq like an irq source, but why in the middle of what otherwise look like some kind of DMA? - map(0x002064, 0x002064).w(FUNC(spg110_device::dma_dst_step_w)); - map(0x002066, 0x002066).w(FUNC(spg110_device::dma_src_w)); - map(0x002067, 0x002067).w(FUNC(spg110_device::dma_unk_2067_w)); - map(0x002068, 0x002068).w(FUNC(spg110_device::dma_src_step_w)); - - map(0x002200, 0x0022ff).ram(); // looks like per-pen brightness or similar? strange because palette isn't memory mapped here - - map(0x003000, 0x00307f).ram(); // sound registers? seems to be 8 long entries, only uses up to 0x7f? + map(0x002060, 0x002060).w(m_spg_video, FUNC(spg110_video_device::dma_dst_w)); + map(0x002061, 0x002061).w(m_spg_video, FUNC(spg110_video_device::dma_unk_2061_w)); + map(0x002062, 0x002062).rw(m_spg_video, FUNC(spg110_video_device::dma_len_status_r),FUNC(spg110_video_device::dma_len_trigger_w)); + map(0x002063, 0x002063).rw(m_spg_video, FUNC(spg110_video_device::spg110_2063_r),FUNC(spg110_video_device::spg110_2063_w)); // Video IRQ source / ack (3 different things checked here instead of 2 on spg2xx?) + map(0x002064, 0x002064).w(m_spg_video, FUNC(spg110_video_device::dma_dst_step_w)); + map(0x002065, 0x002065).rw(m_spg_video, FUNC(spg110_video_device::dma_manual_r), FUNC(spg110_video_device::dma_manual_w)); + map(0x002066, 0x002066).w(m_spg_video, FUNC(spg110_video_device::dma_src_w)); + map(0x002067, 0x002067).w(m_spg_video, FUNC(spg110_video_device::dma_unk_2067_w)); + map(0x002068, 0x002068).w(m_spg_video, FUNC(spg110_video_device::dma_src_step_w)); + + map(0x002100, 0x0021ff).ram(); // jak_spdmo only + map(0x002200, 0x0022ff).ram(); // looks like per-pen brightness or similar? strange because palette isn't memory mapped here (maybe rowscroll?) + +#if 1 // sound registers? seems to be 8 long entries, only uses up to 0x7f? (register mapping seems similar to spg2xx, maybe with less channels?) + map(0x003000, 0x00307f).ram(); map(0x003080, 0x0030ff).ram(); map(0x003100, 0x003100).w(FUNC(spg110_device::spg110_3100_w)); @@ -518,157 +159,28 @@ void spg110_device::map(address_map &map) map(0x00310d, 0x00310d).w(FUNC(spg110_device::spg110_310d_w)); map(0x00310f, 0x00310f).r(FUNC(spg110_device::spg110_310f_r)); +#endif // 0032xx looks like it could be the same as 003d00 on spg2xx - map(0x003200, 0x003200).w(FUNC(spg110_device::spg110_3200_w)); - - map(0x003201, 0x003201).rw(FUNC(spg110_device::spg110_3201_r),FUNC(spg110_device::spg110_3201_w)); - - map(0x003203, 0x003203).w(FUNC(spg110_device::spg110_3203_w)); - map(0x003204, 0x003204).w(FUNC(spg110_device::spg110_3204_w)); - - map(0x003206, 0x003206).w(FUNC(spg110_device::spg110_3206_w)); - - map(0x003208, 0x003208).w(FUNC(spg110_device::spg110_3208_w)); - map(0x003209, 0x003209).w(FUNC(spg110_device::spg110_3209_w)); - - map(0x003221, 0x003221).w(FUNC(spg110_device::spg110_3221_w)); - map(0x003223, 0x003223).w(FUNC(spg110_device::spg110_3223_w)); - map(0x003225, 0x003225).rw(FUNC(spg110_device::spg110_3225_r),FUNC(spg110_device::spg110_3225_w)); - map(0x00322c, 0x00322c).r(FUNC(spg110_device::spg110_322c_r)); - - map(0x00322f, 0x00322f).rw(FUNC(spg110_device::datasegment_r),FUNC(spg110_device::datasegment_w)); + map(0x003200, 0x00322f).rw(m_spg_io, FUNC(spg2xx_io_device::io_r), FUNC(spg2xx_io_device::io_w)); } -// this seems to be a different, non-cpu mapped space only accessible via the DMA? -void spg110_device::map_video(address_map &map) -{ - // are these addresses hardcoded, or can they move (in which case tilemap system isn't really suitable) - map(0x00000, 0x03fff).ram(); // 2fff? - - map(0x04000, 0x04fff).ram(); // seems to be 3 blocks, almost certainly spritelist - -// map(0x08000, 0x081ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // probably? format unknown tho - map(0x08000, 0x081ff).ram().share("palram"); -} - - -/* -TIMER_CALLBACK_MEMBER(spg110_device::test_timer) -{ - // -} -*/ - - void spg110_device::device_start() { -// m_test_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spg110_device::test_timer), this)); - save_item(NAME(m_dma_src_step)); - save_item(NAME(m_dma_dst_step)); - save_item(NAME(m_dma_unk_2061)); - save_item(NAME(m_dma_unk_2067)); - save_item(NAME(m_dma_dst)); - save_item(NAME(m_dma_src)); - save_item(NAME(m_bg_scrollx)); - save_item(NAME(m_bg_scrolly)); - save_item(NAME(m_2036_scroll)); -} - -void spg110_device::device_reset() -{ - m_dma_src_step = 0; - m_dma_dst_step = 0; - m_dma_unk_2061 = 0; - m_dma_unk_2067 = 0; - m_dma_dst = 0; - m_dma_src = 0; - m_bg_scrollx = 0; - m_bg_scrolly = 0; - m_2036_scroll = 0; -} + m_porta_out.resolve_safe(); + m_portb_out.resolve_safe(); + m_portc_out.resolve_safe(); + m_porta_in.resolve_safe(0); + m_portb_in.resolve_safe(0); + m_portc_in.resolve_safe(0); + m_adc_in[0].resolve_safe(0x0fff); + m_adc_in[1].resolve_safe(0x0fff); + m_chip_sel.resolve_safe(); -double spg110_device::hue2rgb(double p, double q, double t) -{ - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6.0f) return p + (q - p) * 6 * t; - if (t < 1 / 2.0f) return q; - if (t < 2 / 3.0f) return p + (q - p) * (2 / 3.0f - t) * 6; - return p; } -uint32_t spg110_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +void spg110_device::device_reset() { - // Palette, this is still wrong! - int offs = 0; - for (int index = 0;index < 256; index++) - { - uint16_t dat = m_palram[offs++]; - - // llll lsss sshh hhhh - int l_raw = (dat & 0xf800) >> 11; - int sl_raw = (dat & 0x07c0) >> 6; - int h_raw = (dat & 0x003f) >> 0; - - double l = (double)l_raw / 31.0f; - double s = (double)sl_raw / 31.0f; - double h = (double)h_raw / 47.0f; - - double r, g, b; - - if (s == 0) { - r = g = b = l; // greyscale - } else { - double q = l < 0.5f ? l * (1 + s) : l + s - l * s; - double p = 2 * l - q; - r = hue2rgb(p, q, h + 1/3.0f); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1/3.0f); - } - - int r_real = r * 255.0f; - int g_real = g * 255.0f; - int b_real = b * 255.0f; - - m_palette->set_pen_color(index, r_real, g_real, b_real); - } - - memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1)); - - const uint32_t page1_addr = 0;//0x40 * m_video_regs[0x20]; - const uint32_t page2_addr = 0;//0x40 * m_video_regs[0x21]; - uint16_t *page1_regs = tmap0_regs; - uint16_t *page2_regs = tmap1_regs; - - for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++) - { - for (int i = 0; i < 4; i++) - { - blit_page(cliprect, scanline, i, page2_addr, page2_regs); - blit_page(cliprect, scanline, i, page1_addr, page1_regs); - //blit_sprites(cliprect, scanline, i); - } - } - - for (int y = cliprect.min_y; y <= cliprect.max_y; y++) - { - uint32_t *dest = &bitmap.pix32(y, cliprect.min_x); - uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; - memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1)); - } - - return 0; } -WRITE_LINE_MEMBER(spg110_device::vblank) -{ - if (!state) - { - m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, ASSERT_LINE); - // m_test_timer->adjust(attotime::from_usec(100), 0); - } - - return; -} diff --git a/src/devices/machine/spg110.h b/src/devices/machine/spg110.h index dd51e1883b1..91a715fc755 100644 --- a/src/devices/machine/spg110.h +++ b/src/devices/machine/spg110.h @@ -9,28 +9,39 @@ //#include "spg2xx.h" #include "cpu/unsp/unsp.h" #include "emupal.h" +#include "spg2xx_io.h" +#include "spg110_video.h" - -class spg110_device : public device_t, public device_memory_interface +class spg110_device : public device_t { public: spg110_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <typename T> - spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag) + template <typename T, typename U> + spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag) : spg110_device(mconfig, tag, owner, clock) { m_cpu.set_tag(std::forward<T>(cpu_tag)); + m_screen.set_tag(std::forward<U>(screen_tag)); } void map(address_map &map); - void map_video(address_map &map); - double hue2rgb(double p, double q, double t); - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(vblank); + auto porta_out() { return m_porta_out.bind(); } + auto portb_out() { return m_portb_out.bind(); } + auto portc_out() { return m_portc_out.bind(); } + auto porta_in() { return m_porta_in.bind(); } + auto portb_in() { return m_portb_in.bind(); } + auto portc_in() { return m_portc_in.bind(); } + + template <size_t Line> auto adc_in() { return m_adc_in[Line].bind(); } + + auto chip_select() { return m_chip_sel.bind(); } + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return m_spg_video->screen_update(screen,bitmap,cliprect); } + DECLARE_WRITE_LINE_MEMBER(vblank) { m_spg_video->vblank(state); } protected: virtual void device_start() override; @@ -38,119 +49,13 @@ protected: virtual void device_add_mconfig(machine_config &config) override; - virtual space_config_vector memory_space_config() const override; - - address_space_config m_space_config; - private: - enum - { - PAGE_ENABLE_MASK = 0x0008, - PAGE_WALLPAPER_MASK = 0x0004, - - PAGE_DEPTH_FLAG_MASK = 0x3000, - PAGE_DEPTH_FLAG_SHIFT = 12, - PAGE_TILE_HEIGHT_MASK = 0x00c0, - PAGE_TILE_HEIGHT_SHIFT = 6, - PAGE_TILE_WIDTH_MASK = 0x0030, - PAGE_TILE_WIDTH_SHIFT = 4, - - TILE_X_FLIP = 0x0004, - TILE_Y_FLIP = 0x0008 - }; - - enum flipx_t : bool - { - FlipXOff = false, - FlipXOn = true - }; required_device<unsp_device> m_cpu; - required_device<palette_device> m_palette; - required_device<gfxdecode_device> m_gfxdecode; - required_shared_ptr<uint16_t> m_palram; - - //TIMER_CALLBACK_MEMBER(test_timer); - //emu_timer *m_test_timer; - - - DECLARE_WRITE16_MEMBER(spg110_201c_w); - DECLARE_WRITE16_MEMBER(spg110_2020_w); - - DECLARE_WRITE16_MEMBER(spg110_2028_w); - DECLARE_WRITE16_MEMBER(spg110_2029_w); - - DECLARE_READ16_MEMBER(spg110_2028_r); - DECLARE_READ16_MEMBER(spg110_2029_r); - - DECLARE_WRITE16_MEMBER(spg110_2031_w); - DECLARE_WRITE16_MEMBER(spg110_2032_w); - DECLARE_WRITE16_MEMBER(spg110_2033_w); - DECLARE_WRITE16_MEMBER(spg110_2034_w); - DECLARE_WRITE16_MEMBER(spg110_2035_w); - DECLARE_WRITE16_MEMBER(spg110_2036_w); - DECLARE_WRITE16_MEMBER(spg110_2037_w); - DECLARE_WRITE16_MEMBER(spg110_2039_w); - - DECLARE_WRITE16_MEMBER(spg110_203c_w); - DECLARE_WRITE16_MEMBER(spg110_203d_w); - - DECLARE_WRITE16_MEMBER(spg110_2042_w); - - DECLARE_WRITE16_MEMBER(spg110_2045_w); - - DECLARE_WRITE16_MEMBER(spg110_2050_w); - DECLARE_WRITE16_MEMBER(spg110_2051_w); - DECLARE_WRITE16_MEMBER(spg110_2052_w); - DECLARE_WRITE16_MEMBER(spg110_2053_w); - DECLARE_WRITE16_MEMBER(spg110_2054_w); - DECLARE_WRITE16_MEMBER(spg110_2055_w); - DECLARE_WRITE16_MEMBER(spg110_2056_w); - DECLARE_WRITE16_MEMBER(spg110_2057_w); - DECLARE_WRITE16_MEMBER(spg110_2058_w); - DECLARE_WRITE16_MEMBER(spg110_2059_w); - DECLARE_WRITE16_MEMBER(spg110_205a_w); - DECLARE_WRITE16_MEMBER(spg110_205b_w); - DECLARE_WRITE16_MEMBER(spg110_205c_w); - DECLARE_WRITE16_MEMBER(spg110_205d_w); - DECLARE_WRITE16_MEMBER(spg110_205e_w); - DECLARE_WRITE16_MEMBER(spg110_205f_w); - - - DECLARE_READ16_MEMBER(spg110_2037_r); - DECLARE_READ16_MEMBER(spg110_2042_r); - - DECLARE_WRITE16_MEMBER(dma_dst_w); - DECLARE_WRITE16_MEMBER(dma_unk_2061_w); - DECLARE_WRITE16_MEMBER(dma_len_trigger_w); - DECLARE_WRITE16_MEMBER(spg110_2063_w); - DECLARE_WRITE16_MEMBER(dma_dst_step_w); - DECLARE_WRITE16_MEMBER(dma_src_w); - DECLARE_WRITE16_MEMBER(dma_unk_2067_w); - DECLARE_WRITE16_MEMBER(dma_src_step_w); - - DECLARE_READ16_MEMBER(dma_len_status_r); - DECLARE_READ16_MEMBER(spg110_2063_r); - - DECLARE_WRITE16_MEMBER(spg110_3200_w); - DECLARE_WRITE16_MEMBER(spg110_3201_w); - DECLARE_WRITE16_MEMBER(spg110_3203_w); - DECLARE_WRITE16_MEMBER(spg110_3204_w); - DECLARE_WRITE16_MEMBER(spg110_3206_w); - DECLARE_WRITE16_MEMBER(spg110_3208_w); - DECLARE_WRITE16_MEMBER(spg110_3209_w); - - DECLARE_READ16_MEMBER(spg110_3201_r); - - DECLARE_WRITE16_MEMBER(spg110_3221_w); - DECLARE_WRITE16_MEMBER(spg110_3223_w); - DECLARE_WRITE16_MEMBER(spg110_3225_w); - - DECLARE_READ16_MEMBER(spg110_3225_r); - DECLARE_READ16_MEMBER(spg110_322c_r); - - READ16_MEMBER(datasegment_r); - WRITE16_MEMBER(datasegment_w); + required_device<screen_device> m_screen; + + required_device<spg2xx_io_device> m_spg_io; + required_device<spg110_video_device> m_spg_video; DECLARE_WRITE16_MEMBER(spg110_3100_w); @@ -169,32 +74,29 @@ private: DECLARE_READ16_MEMBER(spg110_310f_r); - DECLARE_READ16_MEMBER(tmap0_regs_r); - DECLARE_READ16_MEMBER(tmap1_regs_r); - DECLARE_WRITE16_MEMBER(tmap0_regs_w); - DECLARE_WRITE16_MEMBER(tmap1_regs_w); - - uint16_t tmap0_regs[0x6]; - uint16_t tmap1_regs[0x6]; - - uint16_t m_dma_src_step; - uint16_t m_dma_dst_step; - uint16_t m_dma_unk_2061; - uint16_t m_dma_unk_2067; - - uint16_t m_dma_dst; - uint16_t m_dma_src; - - uint16_t m_bg_scrollx; - uint16_t m_bg_scrolly; - uint16_t m_2036_scroll; - - void tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data); - - template<flipx_t FlipX> - void blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile); - void blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs); - uint32_t m_screenbuf[320 * 240]; + devcb_write16 m_porta_out; + devcb_write16 m_portb_out; + devcb_write16 m_portc_out; + devcb_read16 m_porta_in; + devcb_read16 m_portb_in; + devcb_read16 m_portc_in; + + devcb_read16 m_adc_in[2]; + + devcb_write8 m_chip_sel; + + DECLARE_READ16_MEMBER(porta_r) { return m_porta_in(); } + DECLARE_READ16_MEMBER(portb_r) { return m_portb_in(); } + DECLARE_READ16_MEMBER(portc_r) { return m_portc_in(); } + DECLARE_WRITE16_MEMBER(porta_w) { m_porta_out(offset, data, mem_mask); } + DECLARE_WRITE16_MEMBER(portb_w) { m_portb_out(offset, data, mem_mask); } + DECLARE_WRITE16_MEMBER(portc_w) { m_portc_out(offset, data, mem_mask); } + template <size_t Line> DECLARE_READ16_MEMBER(adc_r) { return m_adc_in[Line](); } + DECLARE_WRITE8_MEMBER(cs_w) { m_chip_sel(offset, data, mem_mask); } + DECLARE_READ16_MEMBER(get_pal_r) { return 0; /*m_pal_flag;*/ } + void configure_spg_io(spg2xx_io_device* io); + + DECLARE_WRITE_LINE_MEMBER(videoirq_w); }; DECLARE_DEVICE_TYPE(SPG110, spg110_device) diff --git a/src/devices/machine/spg110_video.cpp b/src/devices/machine/spg110_video.cpp new file mode 100644 index 00000000000..9a9600b914d --- /dev/null +++ b/src/devices/machine/spg110_video.cpp @@ -0,0 +1,666 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#include "emu.h" +#include "spg110_video.h" + +DEFINE_DEVICE_TYPE(SPG110_VIDEO, spg110_video_device, "spg110_video", "SPG110 System-on-a-Chip (Video)") + +spg110_video_device::spg110_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , device_memory_interface(mconfig, *this) + , m_space_config("spg110_video", ENDIANNESS_BIG, 16, 32, 0, address_map_constructor(FUNC(spg110_video_device::map_video), this)) + , m_cpu(*this, finder_base::DUMMY_TAG) + , m_screen(*this, finder_base::DUMMY_TAG) + , m_palette(*this, "palette") + , m_gfxdecode(*this, "gfxdecode") + , m_palram(*this, "palram") + , m_palctrlram(*this, "palctrlram") + , m_sprtileno(*this, "sprtileno") + , m_sprattr1(*this, "sprattr1") + , m_sprattr2(*this, "sprattr2") + , m_video_irq_cb(*this) +{ +} + +spg110_video_device::spg110_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : spg110_video_device(mconfig, SPG110_VIDEO, tag, owner, clock) +{ +} + +template<spg110_video_device::flipx_t FlipX> +void spg110_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile, uint8_t yflipmask, uint8_t pal, int32_t h, int32_t w, uint8_t bpp) +{ + address_space &space = m_cpu->space(AS_PROGRAM); + + uint32_t nc = (bpp + 1) << 1; + + uint32_t palette_offset = pal; + + palette_offset <<= nc; + + uint32_t bits_per_row = nc * w / 16; + uint32_t words_per_tile = bits_per_row * h; + uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask); + uint32_t bits = 0; + uint32_t nbits = 0; + uint32_t y = line; + + int yy = (yoff + y) & 0x1ff; + if (yy >= 0x01c0) + yy -= 0x0200; + + if (yy > 240 || yy < 0) + return; + + int y_index = yy * 320; + + for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++) + { + int xx = xoff + x; + + bits <<= nc; + + if (nbits < nc) + { + uint16_t b = space.read_word(m++ & 0x3fffff); + //b = (b << 8) | (b >> 8); + bits |= b << (nc - nbits); + nbits += 16; + } + nbits -= nc; + + uint32_t pal = palette_offset + (bits >> 16); + bits &= 0xffff; + + xx &= 0x01ff; + if (xx >= 0x01c0) + xx -= 0x0200; + + if (xx >= 0 && xx < 320) + { + int pix_index = xx + y_index; + const pen_t *pens = m_palette->pens(); + uint32_t paldata = pens[pal]; + + int transmap = m_palctrlram[(pal & 0xf0)>>4]; + + bool trans = false; + + if (transmap & 0x10) // maybe values other than 0x010 have other meanings, like blending? + if ((pal & 0x0f) == (transmap & 0xf)) + trans = true; + + if (!trans) + { + m_screenbuf[pix_index] = paldata; + } + } + } +} + +void spg110_video_device::draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs) +{ + uint32_t xscroll = regs[0]; + uint32_t yscroll = regs[1]; + uint32_t attr = regs[2]; + uint32_t ctrl = regs[3]; + uint32_t tilemap = regs[4]; + uint32_t palette_map = regs[5]; + address_space &space2 = this->space(0); + + if (!(ctrl & PAGE_ENABLE_MASK)) + { + return; + } + +// if (((attr & PAGE_PRIORITY_FLAG_MASK) >> PAGE_PRIORITY_FLAG_SHIFT) != priority) +// { +// return; +// } + + uint8_t bpp = attr & 0x03; + + uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); + uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); + + uint32_t tile_count_x = 512 / tile_w; + + uint32_t bitmap_y = (scanline + yscroll) & 0xff; + uint32_t y0 = bitmap_y / tile_h; + uint32_t tile_scanline = bitmap_y % tile_h; + uint32_t tile_address = tile_count_x * y0; + + for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++) + { + uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10; + uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff; + uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space2.read_word(tilemap*2) : space2.read_word((tilemap + tile_address)*2); + uint16_t extra_attribute = 0; + + if (!tile) + continue; + + extra_attribute = space2.read_word((palette_map*2) + tile_address); + if (x0 & 1) + extra_attribute = (extra_attribute & 0x00ff); + else + extra_attribute = (extra_attribute & 0xff00) >> 8; + + uint8_t pal = extra_attribute & 0x0f; + uint8_t pri = (extra_attribute & 0x30) >> 4; + bool flip_x = extra_attribute & 0x40; + + if (pri == priority) + { + + if (flip_x) + draw<FlipXOn>(cliprect, tile_scanline, xx, yy, ctrl, bitmap_addr, tile, 0, pal, tile_h, tile_w, bpp); + else + draw<FlipXOff>(cliprect, tile_scanline, xx, yy, ctrl, bitmap_addr, tile, 0, pal, tile_h, tile_w, bpp); + } + + } +} + + +void spg110_video_device::draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr) +{ + + // m_sprtileno tttt tttt tttt tttt t = tile number (all bits?) + // m_sprattr1 xxxx xxxx yyyy yyyy x = low x bits, y = low y bits + // m_sprattr2 YXzz pppp hhww fFbb X = high x bit, z = priority, p = palette, h = height, w = width, f = flipy, F = flipx, b = bpp, Y = high y bit + + uint16_t tile = m_sprtileno[base_addr]; + + if (!tile) + { + return; + } + + uint32_t bitmap_addr = 0x40 * m_tilebase; + uint16_t attr1 = m_sprattr1[base_addr]; + uint16_t attr2 = m_sprattr2[base_addr]; + + int x = (attr1 >> 8) & 0xff; + int y = (attr1) & 0xff; + uint8_t pri = (attr2 & 0x3000)>>12; + bool flip_x = (attr2 & 0x0004)>>2; + bool flip_y = (attr2 & 0x0008)>>3; + + if (!(attr2 & 0x4000)) + x+= 0x100; + + if (!(attr2 & 0x8000)) + y+= 0x100; + + const uint32_t h = 8 << ((attr2 & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); + const uint32_t w = 8 << ((attr2 & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); + +// if (!(m_video_regs[0x42] & SPRITE_COORD_TL_MASK)) +// { +// x = (160 + x) - w / 2; +// y = (120 - y) - (h / 2) + 8; +// } + + y = 0x1ff - y - 128 + 1; + x = x - 128 + 32; + + x -= (w / 2); + y -= (h / 2); + + x &= 0x01ff; + y &= 0x01ff; + + uint32_t tile_line = ((scanline - y)) % h; + int16_t test_y = (y + tile_line) & 0x1ff; + if (test_y >= 0x01c0) + test_y -= 0x0200; + + if (test_y != scanline) + { + return; + } + + //bool blend = (attr & 0x4000); + const uint8_t bpp = attr2 & 0x0003; + const uint32_t yflipmask = flip_y ? h - 1 : 0; + const uint32_t palette_offset = (attr2 & 0x0f00) >> 8; + + if (pri == priority) + { + if (flip_x) + draw<FlipXOn>(cliprect, tile_line, x, y, 0, bitmap_addr, tile, yflipmask, palette_offset, h, w, bpp); + else + draw<FlipXOff>(cliprect, tile_line, x, y, 0, bitmap_addr, tile, yflipmask, palette_offset, h, w, bpp); + } +} + + + +void spg110_video_device::draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority) +{ + //if (!(m_video_regs[0x42] & SPRITE_ENABLE_MASK)) + //{ + // return; + //} + + for (uint32_t n = 0; n < 256; n++) + { + draw_sprite(cliprect, scanline, priority, n); + } +} + + +/* correct, 4bpp gfxs */ +static const gfx_layout charlayout = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4 }, + { STEP8(0,4*8) }, + 8*8*4 +}; + +static const gfx_layout charlayout6 = +{ + 8,8, + RGN_FRAC(1,1), + 6, + { 0,1,2,3,4,5 }, + { STEP8(0,6) }, + { STEP8(0,6*8) }, + 8*8*6 +}; + +static const gfx_layout char16layout = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4, 8*4,9*4,10*4,11*4,12*4,13*4,14*4,15*4 }, + { STEP16(0,4*16) }, + 16*16*4 +}; + +static const gfx_layout char32layout = +{ + 32,32, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP32(0,4) }, + { STEP32(0,4*32) }, + 32*32*4 +}; + + + +static GFXDECODE_START( gfx ) + GFXDECODE_ENTRY( ":maincpu", 0, charlayout, 0, 16 ) + GFXDECODE_ENTRY( ":maincpu", 0, char16layout, 0, 16 ) + GFXDECODE_ENTRY( ":maincpu", 0, char32layout, 0, 16 ) + GFXDECODE_ENTRY( ":maincpu", 0, charlayout6, 0, 16 ) // correct for lots of the tiles inc. startup text +GFXDECODE_END + + +void spg110_video_device::device_add_mconfig(machine_config &config) +{ + PALETTE(config, m_palette).set_entries(0x100); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx); +} + + +device_memory_interface::space_config_vector spg110_video_device::memory_space_config() const +{ + return space_config_vector { + std::make_pair(0, &m_space_config) + }; +} + + +// irq source or similar? +READ16_MEMBER(spg110_video_device::spg110_2063_r) +{ + // checks for bits 0x20 and 0x08 in the IRQ function (all IRQs point to the same place) + + // HACK! jak_spdo checks for 0x400 or 0x200 starting some of the games + return m_video_irq_status | 0x600; +} + +WRITE16_MEMBER(spg110_video_device::spg110_2063_w) +{ + // writes 0x28, probably clears the IRQ / IRQ sources? 0x63 is the same offset for this in spg2xx but bits used seem to be different + const uint16_t old = m_video_irq_enable & m_video_irq_status; + m_video_irq_status &= ~data; + const uint16_t changed = old ^ (m_video_irq_enable & m_video_irq_status); + if (changed) + check_video_irq(); +} + + +WRITE16_MEMBER(spg110_video_device::spg110_201c_w) { logerror("%s: 201c: %04x\n", machine().describe_context(), data); } // during startup text only +WRITE16_MEMBER(spg110_video_device::spg110_2020_w) { COMBINE_DATA(&m_tilebase); logerror("%s: 2020: %04x\n", machine().describe_context(), data); } // confirmed as tile base, seems to apply to both layers and sprites, unlike spg2xx which has separate registers + +WRITE16_MEMBER(spg110_video_device::spg110_2028_w) { logerror("%s: 2028: %04x\n", machine().describe_context(), data); } // startup +READ16_MEMBER(spg110_video_device::spg110_2028_r) { return 0x0000; } + +WRITE16_MEMBER(spg110_video_device::spg110_2029_w) { logerror("%s: 2029: %04x\n", machine().describe_context(), data); } // 0006, 0008 on startup +READ16_MEMBER(spg110_video_device::spg110_2029_r) { return 0x0000; } + +WRITE16_MEMBER(spg110_video_device::spg110_2031_w) { logerror("%s: 2031: %04x\n", machine().describe_context(), data); } // 014a or 0000 when ball is in trap +WRITE16_MEMBER(spg110_video_device::spg110_2032_w) { logerror("%s: 2032: %04x\n", machine().describe_context(), data); } // 014a most of the time, 0000 very rarely +WRITE16_MEMBER(spg110_video_device::spg110_2033_w) { logerror("%s: 2033: %04x\n", machine().describe_context(), data); } // changes, situational, eg when pausing +WRITE16_MEMBER(spg110_video_device::spg110_2034_w) { logerror("%s: 2034: %04x\n", machine().describe_context(), data); } // 0141 on every scene transition +WRITE16_MEMBER(spg110_video_device::spg110_2035_w) { logerror("%s: 2035: %04x\n", machine().describe_context(), data); } // 0141 on every scene transition +WRITE16_MEMBER(spg110_video_device::spg110_2036_w) { logerror("%s: 2036: %04x\n", machine().describe_context(), data); COMBINE_DATA(&m_2036_scroll); } // seems related to ball y position, not scrolling (possibly shadow sprite related?) + +READ16_MEMBER(spg110_video_device::spg110_2037_r) { return 0x0000; } // added to something from the PRNG +WRITE16_MEMBER(spg110_video_device::spg110_2037_w) { logerror("%s: 2037: %04x\n", machine().describe_context(), data); } // 0126 (always?) + +WRITE16_MEMBER(spg110_video_device::spg110_2039_w) { logerror("%s: 2039: %04x\n", machine().describe_context(), data); } // 0803 on every scene transition + +WRITE16_MEMBER(spg110_video_device::spg110_203c_w) { logerror("%s: 203c: %04x\n", machine().describe_context(), data); } // 0006 on startup, twice + +WRITE16_MEMBER(spg110_video_device::spg110_203d_w) { logerror("%s: 203d: %04x\n", machine().describe_context(), data); } // changes, usually between scenes + +READ16_MEMBER(spg110_video_device::spg110_2042_r) { return 0x0000; } +WRITE16_MEMBER(spg110_video_device::spg110_2042_w) { logerror("%s: 2042: %04x\n", machine().describe_context(), data); } // sets bit 0x0004, masks with 0xfffb etc. + +WRITE16_MEMBER(spg110_video_device::spg110_2045_w) { logerror("%s: 2045: %04x\n", machine().describe_context(), data); } // 0006 on startup, once + + +WRITE16_MEMBER(spg110_video_device::spg110_205x_w) +{ + COMBINE_DATA(&m_palctrlram[offset]); +} + + +WRITE16_MEMBER(spg110_video_device::dma_unk_2061_w) { COMBINE_DATA(&m_dma_unk_2061); } +WRITE16_MEMBER(spg110_video_device::dma_dst_step_w) { COMBINE_DATA(&m_dma_dst_step); } +WRITE16_MEMBER(spg110_video_device::dma_unk_2067_w) { COMBINE_DATA(&m_dma_src_high); } +WRITE16_MEMBER(spg110_video_device::dma_src_step_w) { COMBINE_DATA(&m_dma_src_step); } + +WRITE16_MEMBER(spg110_video_device::dma_dst_w) { COMBINE_DATA(&m_dma_dst); } +WRITE16_MEMBER(spg110_video_device::dma_src_w) { COMBINE_DATA(&m_dma_src); } + +WRITE16_MEMBER(spg110_video_device::dma_len_trigger_w) +{ + int length = data & 0x1fff; + + // this is presumably a counter that underflows to 0x1fff, because that's what the wait loop waits for? + logerror("%s: (trigger len) %04x with values (unk) %04x (dststep) %04x (unk) %04x (src step) %04x | (dst) %04x (src) %04x\n", machine().describe_context(), data, m_dma_unk_2061, m_dma_dst_step, m_dma_src_high, m_dma_src_step, m_dma_dst, m_dma_src); + + if (m_dma_src_high != 0x0000) + { + logerror("unknown DMA params are not zero!\n"); + } + + int source = m_dma_src | m_dma_src_high << 16; + int dest = m_dma_dst; + + for (int i = 0; i < length; i++) + { + address_space &mem = m_cpu->space(AS_PROGRAM); + uint16_t val = mem.read_word(source); + + this->space(0).write_word(dest * 2, val, 0xffff); + + source+=m_dma_src_step; + dest+=m_dma_dst_step; + } + + // not sure, spiderman would suggest that some of these need to reset (unless a missing IRQ clears them) + m_dma_unk_2061 = 0; + m_dma_dst_step = 0; + m_dma_src_high = 0; + m_dma_src_step = 0; + m_dma_dst = 0; + m_dma_src = 0; + + // HACK: it really seems this interrupt status is related to the DMA, but jak_capb doesn't ack it, so must also be a way to disable it? + if (m_is_spiderman) + { + const int i = 0x0002; + + if (m_video_irq_enable & 1) + { + m_video_irq_status |= i; + check_video_irq(); + } + } +} + +WRITE16_MEMBER(spg110_video_device::dma_manual_w) +{ + this->space(0).write_word(m_dma_dst * 2, data, 0xffff); +} + +READ16_MEMBER(spg110_video_device::dma_manual_r) +{ + uint16_t val = this->space(0).read_word(m_dma_dst * 2); + return val; +} + +READ16_MEMBER(spg110_video_device::dma_len_status_r) +{ + return 0x1fff; // DMA related? +} + + +READ16_MEMBER(spg110_video_device::tmap0_regs_r) { return tmap0_regs[offset]; } +READ16_MEMBER(spg110_video_device::tmap1_regs_r) { return tmap1_regs[offset]; } + +void spg110_video_device::tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data) +{ + switch (regno) + { + case 0x0: // Page X scroll + logerror("video_w: Page %d X Scroll = %04x\n", which, data & 0x01ff); + regs[regno] = data & 0x01ff; + break; + + case 0x1: // Page Y scroll + logerror("video_w: Page %d Y Scroll = %04x\n", which, data & 0x00ff); + regs[regno] = data & 0x00ff; + break; + + case 0x2: // Page Attributes + // 'priority' can't be priority here as it is on spg2xx, or the scores in attract will be behind the table, it really seems to be per attribute bit instead + + logerror("video_w: Page %d Attributes = %04x (Priority:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", which, data + , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1)); + regs[regno] = data; + break; + + case 0x3: // Page Control + logerror("video_w: Page %d Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", which, data + , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0)); + regs[regno] = data; + break; + + case 0x4: // Page Tile Address + logerror("video_w: Page %d Tile Address = %04x\n", which, data); + regs[regno] = data; + break; + + case 0x5: // Page Attribute Address + logerror("video_w: Page %d Attribute Address = %04x\n", which, data); + regs[regno] = data; + break; + } +} + + +WRITE16_MEMBER(spg110_video_device::tmap0_regs_w) +{ + tilemap_write_regs(0, tmap0_regs,offset,data); +} + + +WRITE16_MEMBER(spg110_video_device::tmap1_regs_w) +{ + tilemap_write_regs(1, tmap1_regs,offset,data); +} + +// this seems to be a different, non-cpu mapped space only accessible via the DMA? +void spg110_video_device::map_video(address_map &map) +{ + // are these addresses hardcoded, or can they move (in which case tilemap system isn't really suitable) + map(0x00000, 0x03fff).ram(); // 2fff? + + map(0x04000, 0x041ff).ram().share("sprtileno"); // seems to be 3 blocks, almost certainly spritelist + map(0x04200, 0x043ff).ram().share("sprattr1"); + map(0x04400, 0x045ff).ram().share("sprattr2"); + + map(0x08000, 0x081ff).ram().w(FUNC(spg110_video_device::palette_w)).share("palram"); // palette format unknown +} + +void spg110_video_device::device_start() +{ + save_item(NAME(m_dma_src_step)); + save_item(NAME(m_dma_dst_step)); + save_item(NAME(m_dma_unk_2061)); + save_item(NAME(m_dma_src_high)); + save_item(NAME(m_dma_dst)); + save_item(NAME(m_dma_src)); + save_item(NAME(m_bg_scrollx)); + save_item(NAME(m_bg_scrolly)); + save_item(NAME(m_2036_scroll)); + + m_video_irq_cb.resolve(); + + if (!strcmp(machine().system().name, "jak_spdmo")) + m_is_spiderman = true; + else + m_is_spiderman = false; +} + +void spg110_video_device::device_reset() +{ + m_dma_src_step = 0; + m_dma_dst_step = 0; + m_dma_unk_2061 = 0; + m_dma_src_high = 0; + m_dma_dst = 0; + m_dma_src = 0; + m_bg_scrollx = 0; + m_bg_scrolly = 0; + m_2036_scroll = 0; + + // is there actually an enable register here? + m_video_irq_enable = 0xffff; + m_video_irq_status = 0x0000; +} + +double spg110_video_device::hue2rgb(double p, double q, double t) +{ + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6.0f) return p + (q - p) * 6 * t; + if (t < 1 / 2.0f) return q; + if (t < 2 / 3.0f) return p + (q - p) * (2 / 3.0f - t) * 6; + return p; +} + + +// wrong format! +WRITE16_MEMBER(spg110_video_device::palette_w) +{ + // probably not + const double h_add = 0.65f; + const double h_divide = 43.2f; + + COMBINE_DATA(&m_palram[offset]); + + uint16_t dat = m_palram[offset]; + + // llll lsss sshh hhhh + int l_raw = (dat & 0xfe00) >> 10; + int sl_raw = (dat & 0x03c0) >> 6; + int h_raw = (dat & 0x003f) >> 0; + + double l = (double)l_raw / 63.0f; + double s = (double)sl_raw / 15.0f; + double h = (double)h_raw / h_divide; + + // probably not + h += h_add; + + if (h>1.0f) + h-= 1.0f; + + double r, g, b; + + if (s == 0) { + r = g = b = l; // greyscale + } else { + double q = l < 0.5f ? l * (1 + s) : l + s - l * s; + double p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3.0f); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3.0f); + } + + int r_real = r * 255.0f; + int g_real = g * 255.0f; + int b_real = b * 255.0f; + + m_palette->set_pen_color(offset, r_real, g_real, b_real); +} + +uint32_t spg110_video_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1)); + + const uint32_t page1_addr = 0x40 * m_tilebase;//0x40 * m_video_regs[0x20]; + const uint32_t page2_addr = 0x40 * m_tilebase;//0x40 * m_video_regs[0x21]; + uint16_t *page1_regs = tmap0_regs; + uint16_t *page2_regs = tmap1_regs; + + for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++) + { + for (int i = 0; i < 4; i++) + { + draw_page(cliprect, scanline, i, page2_addr, page2_regs); + draw_page(cliprect, scanline, i, page1_addr, page1_regs); + draw_sprites(cliprect, scanline, i); + } + } + + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + uint32_t *dest = &bitmap.pix32(y, cliprect.min_x); + uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; + memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1)); + } + + return 0; +} + +WRITE_LINE_MEMBER(spg110_video_device::vblank) +{ + const int i = 0x0008; + + if (!state) + { + m_video_irq_status &= ~i; + check_video_irq(); + return; + } + + if (m_video_irq_enable & 1) + { + m_video_irq_status |= i; + check_video_irq(); + } +} + +void spg110_video_device::check_video_irq() +{ + m_video_irq_cb((m_video_irq_status & m_video_irq_enable) ? ASSERT_LINE : CLEAR_LINE); +}
\ No newline at end of file diff --git a/src/devices/machine/spg110_video.h b/src/devices/machine/spg110_video.h new file mode 100644 index 00000000000..bd8a7fa8e04 --- /dev/null +++ b/src/devices/machine/spg110_video.h @@ -0,0 +1,171 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#ifndef MAME_MACHINE_SPG110_VIDEO_H +#define MAME_MACHINE_SPG110_VIDEO_H + +#pragma once + +#include "cpu/unsp/unsp.h" +#include "emupal.h" +#include "screen.h" +//#include "machine/timer.h" + + +class spg110_video_device : public device_t, public device_memory_interface + +{ +public: + spg110_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + spg110_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + template <typename T, typename U> + spg110_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag) + : spg110_video_device(mconfig, tag, owner, clock) + { + m_cpu.set_tag(std::forward<T>(cpu_tag)); + m_screen.set_tag(std::forward<U>(screen_tag)); + } + + void map_video(address_map &map); + + double hue2rgb(double p, double q, double t); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(vblank); + + DECLARE_WRITE16_MEMBER(spg110_201c_w); + DECLARE_WRITE16_MEMBER(spg110_2020_w); + + DECLARE_WRITE16_MEMBER(spg110_2028_w); + DECLARE_WRITE16_MEMBER(spg110_2029_w); + + DECLARE_READ16_MEMBER(spg110_2028_r); + DECLARE_READ16_MEMBER(spg110_2029_r); + + DECLARE_WRITE16_MEMBER(spg110_2031_w); + DECLARE_WRITE16_MEMBER(spg110_2032_w); + DECLARE_WRITE16_MEMBER(spg110_2033_w); + DECLARE_WRITE16_MEMBER(spg110_2034_w); + DECLARE_WRITE16_MEMBER(spg110_2035_w); + DECLARE_WRITE16_MEMBER(spg110_2036_w); + DECLARE_WRITE16_MEMBER(spg110_2037_w); + DECLARE_WRITE16_MEMBER(spg110_2039_w); + + DECLARE_WRITE16_MEMBER(spg110_203c_w); + DECLARE_WRITE16_MEMBER(spg110_203d_w); + + DECLARE_WRITE16_MEMBER(spg110_2042_w); + + DECLARE_WRITE16_MEMBER(spg110_2045_w); + + DECLARE_WRITE16_MEMBER(spg110_205x_w); + + + DECLARE_READ16_MEMBER(spg110_2037_r); + DECLARE_READ16_MEMBER(spg110_2042_r); + + DECLARE_WRITE16_MEMBER(dma_dst_w); + DECLARE_WRITE16_MEMBER(dma_unk_2061_w); + DECLARE_WRITE16_MEMBER(dma_len_trigger_w); + DECLARE_WRITE16_MEMBER(spg110_2063_w); + DECLARE_WRITE16_MEMBER(dma_dst_step_w); + DECLARE_WRITE16_MEMBER(dma_src_w); + DECLARE_WRITE16_MEMBER(dma_unk_2067_w); + DECLARE_WRITE16_MEMBER(dma_src_step_w); + + DECLARE_READ16_MEMBER(dma_len_status_r); + DECLARE_READ16_MEMBER(spg110_2063_r); + + DECLARE_READ16_MEMBER(dma_manual_r); + DECLARE_WRITE16_MEMBER(dma_manual_w); + + DECLARE_READ16_MEMBER(tmap0_regs_r); + DECLARE_READ16_MEMBER(tmap1_regs_r); + DECLARE_WRITE16_MEMBER(tmap0_regs_w); + DECLARE_WRITE16_MEMBER(tmap1_regs_w); + + auto write_video_irq_callback() { return m_video_irq_cb.bind(); }; + +protected: + virtual void device_start() override; + virtual void device_reset() override; + + virtual void device_add_mconfig(machine_config &config) override; + + virtual space_config_vector memory_space_config() const override; + + address_space_config m_space_config; + +private: + enum + { + PAGE_ENABLE_MASK = 0x0008, + PAGE_WALLPAPER_MASK = 0x0004, + + PAGE_PRIORITY_FLAG_MASK = 0x3000, + PAGE_PRIORITY_FLAG_SHIFT = 12, + PAGE_TILE_HEIGHT_MASK = 0x00c0, + PAGE_TILE_HEIGHT_SHIFT = 6, + PAGE_TILE_WIDTH_MASK = 0x0030, + PAGE_TILE_WIDTH_SHIFT = 4, + + TILE_X_FLIP = 0x0004, + TILE_Y_FLIP = 0x0008 + }; + + enum flipx_t : bool + { + FlipXOff = false, + FlipXOn = true + }; + + required_device<unsp_device> m_cpu; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + required_device<gfxdecode_device> m_gfxdecode; + required_shared_ptr<uint16_t> m_palram; + required_shared_ptr<uint16_t> m_palctrlram; + required_shared_ptr<uint16_t> m_sprtileno; + required_shared_ptr<uint16_t> m_sprattr1; + required_shared_ptr<uint16_t> m_sprattr2; + + DECLARE_WRITE16_MEMBER(palette_w); + + uint16_t tmap0_regs[0x6]; + uint16_t tmap1_regs[0x6]; + + uint16_t m_dma_src_step; + uint16_t m_dma_dst_step; + uint16_t m_dma_unk_2061; + uint16_t m_dma_src_high; + + uint16_t m_dma_dst; + uint16_t m_dma_src; + + uint16_t m_bg_scrollx; + uint16_t m_bg_scrolly; + uint16_t m_2036_scroll; + + uint16_t m_tilebase; + + uint16_t m_video_irq_enable; + uint16_t m_video_irq_status; + void check_video_irq(); + + void tilemap_write_regs(int which, uint16_t* regs, int regno, uint16_t data); + + template<flipx_t FlipX> + void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile, uint8_t yflipmask, uint8_t pal, int32_t h, int32_t w, uint8_t bpp); + void draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs); + void draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr); + void draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority); + + uint32_t m_screenbuf[320 * 240]; + bool m_is_spiderman; + + devcb_write_line m_video_irq_cb; +}; + +DECLARE_DEVICE_TYPE(SPG110_VIDEO, spg110_video_device) + +#endif // MAME_MACHINE_SPG110_VIDEO_H diff --git a/src/devices/machine/spg2xx.cpp b/src/devices/machine/spg2xx.cpp index 5345f12b639..6d9d18fb3a2 100644 --- a/src/devices/machine/spg2xx.cpp +++ b/src/devices/machine/spg2xx.cpp @@ -17,55 +17,14 @@ DEFINE_DEVICE_TYPE(SPG24X, spg24x_device, "spg24x", "SPG240-series System-on-a-Chip") DEFINE_DEVICE_TYPE(SPG28X, spg28x_device, "spg28x", "SPG280-series System-on-a-Chip") -#define LOG_IO_READS (1U << 1) -#define LOG_IO_WRITES (1U << 2) -#define LOG_UNKNOWN_IO (1U << 3) -#define LOG_IRQS (1U << 4) -#define LOG_VLINES (1U << 5) -#define LOG_GPIO (1U << 6) -#define LOG_UART (1U << 7) -#define LOG_I2C (1U << 8) -#define LOG_DMA (1U << 9) -#define LOG_SEGMENT (1U << 10) -#define LOG_WATCHDOG (1U << 11) -#define LOG_TIMERS (1U << 12) -#define LOG_SPU_READS (1U << 13) -#define LOG_SPU_WRITES (1U << 14) -#define LOG_UNKNOWN_SPU (1U << 15) -#define LOG_CHANNEL_READS (1U << 16) -#define LOG_CHANNEL_WRITES (1U << 17) -#define LOG_ENVELOPES (1U << 18) -#define LOG_SAMPLES (1U << 19) -#define LOG_RAMPDOWN (1U << 20) -#define LOG_BEAT (1U << 21) -#define LOG_PPU_READS (1U << 22) -#define LOG_PPU_WRITES (1U << 23) -#define LOG_UNKNOWN_PPU (1U << 24) -#define LOG_FIQ (1U << 25) -#define LOG_SIO (1U << 26) -#define LOG_EXT_MEM (1U << 27) -#define LOG_EXTINT (1U << 28) -#define LOG_IO (LOG_IO_READS | LOG_IO_WRITES | LOG_IRQS | LOG_GPIO | LOG_UART | LOG_I2C | LOG_DMA | LOG_TIMERS | LOG_EXTINT | LOG_UNKNOWN_IO) -#define LOG_CHANNELS (LOG_CHANNEL_READS | LOG_CHANNEL_WRITES) -#define LOG_SPU (LOG_SPU_READS | LOG_SPU_WRITES | LOG_UNKNOWN_SPU | LOG_CHANNEL_READS | LOG_CHANNEL_WRITES \ - | LOG_ENVELOPES | LOG_SAMPLES | LOG_RAMPDOWN | LOG_BEAT) -#define LOG_PPU (LOG_PPU_READS | LOG_PPU_WRITES | LOG_UNKNOWN_PPU) -#define LOG_ALL (LOG_IO | LOG_SPU | LOG_PPU | LOG_VLINES | LOG_SEGMENT | LOG_FIQ) - -#define VERBOSE (0) -#include "logmacro.h" - -#define SPG_DEBUG_VIDEO (0) - -#define IO_IRQ_ENABLE m_io_regs[0x21] -#define IO_IRQ_STATUS m_io_regs[0x22] -#define VIDEO_IRQ_ENABLE m_video_regs[0x62] -#define VIDEO_IRQ_STATUS m_video_regs[0x63] spg2xx_device::spg2xx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) , device_mixer_interface(mconfig, *this, 2) , m_spg_audio(*this, "spgaudio") + , m_spg_io(*this, "spgio") + , m_spg_sysdma(*this, "spgsysdma") + , m_spg_video(*this, "spgvideo") , m_rowscrolloffset(15) , m_porta_out(*this) , m_portb_out(*this) @@ -80,9 +39,6 @@ spg2xx_device::spg2xx_device(const machine_config &mconfig, device_type type, co , m_chip_sel(*this) , m_cpu(*this, finder_base::DUMMY_TAG) , m_screen(*this, finder_base::DUMMY_TAG) - , m_scrollram(*this, "scrollram") - , m_paletteram(*this, "paletteram") - , m_spriteram(*this, "spriteram") { } @@ -99,28 +55,20 @@ spg28x_device::spg28x_device(const machine_config &mconfig, const char *tag, dev void spg2xx_device::map(address_map &map) { map(0x000000, 0x0027ff).ram(); - map(0x002800, 0x0028ff).rw(FUNC(spg2xx_device::video_r), FUNC(spg2xx_device::video_w)); - map(0x002900, 0x002aff).ram().share("scrollram"); - map(0x002b00, 0x002bff).ram().share("paletteram"); - map(0x002c00, 0x002fff).ram().share("spriteram"); + map(0x002800, 0x0028ff).rw(m_spg_video, FUNC(spg2xx_video_device::video_r), FUNC(spg2xx_video_device::video_w)); + map(0x002900, 0x002aff).ram().share("spgvideo:scrollram"); + map(0x002b00, 0x002bff).ram().share("spgvideo:paletteram"); + map(0x002c00, 0x002fff).ram().share("spgvideo:spriteram"); map(0x003000, 0x0031ff).rw(m_spg_audio, FUNC(spg2xx_audio_device::audio_r), FUNC(spg2xx_audio_device::audio_w)); map(0x003200, 0x0033ff).rw(m_spg_audio, FUNC(spg2xx_audio_device::audio_phase_r), FUNC(spg2xx_audio_device::audio_phase_w)); map(0x003400, 0x0037ff).rw(m_spg_audio, FUNC(spg2xx_audio_device::audio_ctrl_r), FUNC(spg2xx_audio_device::audio_ctrl_w)); - map(0x003d00, 0x003eff).rw(FUNC(spg2xx_device::io_r), FUNC(spg2xx_device::io_w)); + map(0x003d00, 0x003d2f).rw(m_spg_io, FUNC(spg2xx_io_device::io_r), FUNC(spg2xx_io_device::io_w)); + map(0x003d30, 0x003dff).rw(m_spg_io, FUNC(spg2xx_io_device::io_extended_r), FUNC(spg2xx_io_device::io_extended_w)); + map(0x003e00, 0x003e03).rw(m_spg_sysdma, FUNC(spg2xx_sysdma_device::dma_r), FUNC(spg2xx_sysdma_device::dma_w)); } void spg2xx_device::device_start() { - for (uint8_t i = 0; i < 32; i++) - { - m_rgb5_to_rgb8[i] = (i << 3) | (i >> 2); - } - for (uint16_t i = 0; i < 0x8000; i++) - { - m_rgb555_to_rgb888[i] = (m_rgb5_to_rgb8[(i >> 10) & 0x1f] << 16) | - (m_rgb5_to_rgb8[(i >> 5) & 0x1f] << 8) | - (m_rgb5_to_rgb8[(i >> 0) & 0x1f] << 0); - } m_porta_out.resolve_safe(); m_portb_out.resolve_safe(); m_portc_out.resolve_safe(); @@ -134,2028 +82,115 @@ void spg2xx_device::device_start() m_uart_tx.resolve_safe(); m_chip_sel.resolve_safe(); - m_tmb1 = timer_alloc(TIMER_TMB1); - m_tmb2 = timer_alloc(TIMER_TMB2); - m_tmb1->adjust(attotime::never); - m_tmb2->adjust(attotime::never); - - m_screenpos_timer = timer_alloc(TIMER_SCREENPOS); - m_screenpos_timer->adjust(attotime::never); - - m_uart_tx_timer = timer_alloc(TIMER_UART_TX); - m_uart_tx_timer->adjust(attotime::never); - - m_uart_rx_timer = timer_alloc(TIMER_UART_RX); - m_uart_rx_timer->adjust(attotime::never); - - m_4khz_timer = timer_alloc(TIMER_4KHZ); - m_4khz_timer->adjust(attotime::never); - - m_timer_src_ab = timer_alloc(TIMER_SRC_AB); - m_timer_src_ab->adjust(attotime::never); - - m_timer_src_c = timer_alloc(TIMER_SRC_C); - m_timer_src_c->adjust(attotime::never); - - save_item(NAME(m_timer_a_preload)); - save_item(NAME(m_timer_b_preload)); - save_item(NAME(m_timer_b_divisor)); - save_item(NAME(m_timer_b_tick_rate)); - - save_item(NAME(m_hide_page0)); - save_item(NAME(m_hide_page1)); - save_item(NAME(m_hide_sprites)); - save_item(NAME(m_debug_sprites)); - save_item(NAME(m_debug_blit)); - save_item(NAME(m_debug_palette)); - save_item(NAME(m_sprite_index_to_debug)); - - save_item(NAME(m_io_regs)); - save_item(NAME(m_uart_rx_fifo)); - save_item(NAME(m_uart_rx_fifo_start)); - save_item(NAME(m_uart_rx_fifo_end)); - save_item(NAME(m_uart_rx_fifo_count)); - save_item(NAME(m_uart_rx_available)); - save_item(NAME(m_uart_rx_irq)); - save_item(NAME(m_uart_tx_irq)); - - save_item(NAME(m_extint)); - - save_item(NAME(m_video_regs)); save_item(NAME(m_sprite_limit)); save_item(NAME(m_pal_flag)); - - save_item(NAME(m_2khz_divider)); - save_item(NAME(m_1khz_divider)); - save_item(NAME(m_4hz_divider)); - - save_item(NAME(m_uart_baud_rate)); } void spg2xx_device::device_reset() { - memset(m_video_regs, 0, 0x100 * sizeof(uint16_t)); - memset(m_io_regs, 0, 0x200 * sizeof(uint16_t)); - - m_timer_a_preload = 0; - m_timer_b_preload = 0; - m_timer_b_divisor = 0; - m_timer_b_tick_rate = 0; - - m_io_regs[0x23] = 0x0028; - m_io_regs[0x2c] = 0x1418; - m_io_regs[0x2d] = 0x1658; - - m_uart_rx_available = false; - memset(m_uart_rx_fifo, 0, ARRAY_LENGTH(m_uart_rx_fifo)); - m_uart_rx_fifo_start = 0; - m_uart_rx_fifo_end = 0; - m_uart_rx_fifo_count = 0; - m_uart_tx_irq = false; - m_uart_rx_irq = false; - - memset(m_extint, 0, sizeof(bool) * 2); - - m_video_regs[0x36] = 0xffff; - m_video_regs[0x37] = 0xffff; - m_video_regs[0x3c] = 0x0020; - m_video_regs[0x42] = 0x0001; - - m_hide_page0 = false; - m_hide_page1 = false; - m_hide_sprites = false; - m_debug_sprites = false; - m_debug_blit = false; - m_debug_palette = false; - m_sprite_index_to_debug = 0; - - m_4khz_timer->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096)); - - m_2khz_divider = 0; - m_1khz_divider = 0; - m_4hz_divider = 0; } -WRITE_LINE_MEMBER(spg2xx_device::audioirq_w) +WRITE_LINE_MEMBER(spg2xx_device::videoirq_w) { - if (state == ASSERT_LINE) - { - m_cpu->set_state_unsynced(UNSP_IRQ4_LINE, ASSERT_LINE); - } - else - { - m_cpu->set_state_unsynced(UNSP_IRQ4_LINE, CLEAR_LINE); - } + m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, state); } -READ16_MEMBER(spg2xx_device::space_r) +WRITE_LINE_MEMBER(spg2xx_device::timerirq_w) { - address_space &cpuspace = m_cpu->space(AS_PROGRAM); - return cpuspace.read_word(offset); + m_cpu->set_state_unsynced(UNSP_IRQ2_LINE, state); } -/************************* -* Video Hardware * -*************************/ - -// Perform a lerp between a and b -inline uint8_t spg2xx_device::mix_channel(uint8_t bottom, uint8_t top) +WRITE_LINE_MEMBER(spg2xx_device::uartirq_w) { - uint8_t alpha = (m_video_regs[0x2a] & 3) << 6; - return ((256 - alpha) * bottom + alpha * top) >> 8; + m_cpu->set_state_unsynced(UNSP_IRQ3_LINE, state); } -template<spg2xx_device::blend_enable_t Blend, spg2xx_device::rowscroll_enable_t RowScroll, spg2xx_device::flipx_t FlipX> -void spg2xx_device::blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile) -{ - address_space &space = m_cpu->space(AS_PROGRAM); - - int32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); - int32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); - - uint32_t yflipmask = attr & TILE_Y_FLIP ? h - 1 : 0; - - uint32_t nc = ((attr & 0x0003) + 1) << 1; - - uint32_t palette_offset = (attr & 0x0f00) >> 4; - if (SPG_DEBUG_VIDEO && m_debug_blit) - { - printf("s:%d line:%d xy:%08x,%08x attr:%08x ctrl:%08x bitmap_addr:%08x tile:%04x\n", cliprect.min_x, line, xoff, yoff, attr, ctrl, bitmap_addr, tile); - printf("hw:%d,%d f:%d,%d yfm:%d ncols:%d pobs:%02x ", w, h, (attr & TILE_X_FLIP) ? 1 : 0, (attr & TILE_Y_FLIP) ? 1 : 0, yflipmask, nc, palette_offset); - } - palette_offset >>= nc; - palette_offset <<= nc; - if (SPG_DEBUG_VIDEO && m_debug_blit) - { - printf("poas:%02x\n", palette_offset); - } - - uint32_t bits_per_row = nc * w / 16; - uint32_t words_per_tile = bits_per_row * h; - uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask); - uint32_t bits = 0; - uint32_t nbits = 0; - uint32_t y = line; - - int yy = (yoff + y) & 0x1ff; - if (yy >= 0x01c0) - yy -= 0x0200; - - if (yy > 240 || yy < 0) - return; - - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf("%3d:\n", yy); - - int y_index = yy * 320; - - for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++) - { - int xx = xoff + x; - - bits <<= nc; - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf(" %08x:%d ", bits, nbits); - if (nbits < nc) - { - uint16_t b = space.read_word(m++ & 0x3fffff); - b = (b << 8) | (b >> 8); - bits |= b << (nc - nbits); - nbits += 16; - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf("(%04x:%08x:%d) ", b, bits, nbits); - } - nbits -= nc; - - uint32_t pal = palette_offset + (bits >> 16); - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf("%02x:%02x:%04x ", bits >> 16, pal, bits & 0xffff); - bits &= 0xffff; - - if (RowScroll) - xx -= (int16_t)m_scrollram[(yy + m_rowscrolloffset) & 0x1ff]; - - xx &= 0x01ff; - if (xx >= 0x01c0) - xx -= 0x0200; - - if (xx >= 0 && xx < 320) - { - int pix_index = xx + y_index; - - uint16_t rgb = m_paletteram[pal]; - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf("rgb:%04x ", rgb); - - if (!(rgb & 0x8000)) - { - if (Blend) - { - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf("M\n"); - m_screenbuf[pix_index] = (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 16), m_rgb5_to_rgb8[(rgb >> 10) & 0x1f]) << 16) | - (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 8), m_rgb5_to_rgb8[(rgb >> 5) & 0x1f]) << 8) | - (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 0), m_rgb5_to_rgb8[rgb & 0x1f])); - } - else - { - if (SPG_DEBUG_VIDEO && m_debug_blit) - printf("S\n"); - m_screenbuf[pix_index] = m_rgb555_to_rgb888[rgb]; - } - } - else if (SPG_DEBUG_VIDEO && m_debug_blit) - { - printf("X\n"); - } - } - } -} - -void spg2xx_device::blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs) -{ - uint32_t xscroll = regs[0]; - uint32_t yscroll = regs[1]; - uint32_t attr = regs[2]; - uint32_t ctrl = regs[3]; - uint32_t tilemap = regs[4]; - uint32_t palette_map = regs[5]; - address_space &space = m_cpu->space(AS_PROGRAM); - - if (!(ctrl & PAGE_ENABLE_MASK)) - { - return; - } - - if (((attr & PAGE_DEPTH_FLAG_MASK) >> PAGE_DEPTH_FLAG_SHIFT) != depth) - { - return; - } - - uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); - uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); - - uint32_t tile_count_x = 512 / tile_w; - - uint32_t bitmap_y = (scanline + yscroll) & 0xff; - uint32_t y0 = bitmap_y / tile_h; - uint32_t tile_scanline = bitmap_y % tile_h; - uint32_t tile_address = tile_count_x * y0; - if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_H)) - printf("s:%3d | baddr:%08x | yscr:%3d | bity:%3d | y0:%2d | ts:%2d\n", scanline, bitmap_addr, yscroll, bitmap_y, y0, tile_scanline); - - if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS)) - m_debug_blit = true; - for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++) - { - uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10; - uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff; - uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(tilemap) : space.read_word(tilemap + tile_address); - uint16_t palette = 0; - - if (!tile) - continue; - - palette = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2); - if (x0 & 1) - palette >>= 8; - - uint32_t tileattr = attr; - uint32_t tilectrl = ctrl; - if ((ctrl & 2) == 0) - { // -(1) bld(1) flip(2) pal(4) - tileattr &= ~0x000c; - tileattr |= (palette >> 2) & 0x000c; // flip - - tileattr &= ~0x0f00; - tileattr |= (palette << 8) & 0x0f00; // palette - - tilectrl &= ~0x0100; - tilectrl |= (palette << 2) & 0x0100; // blend - } - - bool blend = (tileattr & 0x4000 || tilectrl & 0x0100); - bool row_scroll = (tilectrl & 0x0010); - bool flip_x = (tileattr & TILE_X_FLIP); - - if (blend) - { - if (row_scroll) - { - if (flip_x) - blit<BlendOn, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - else - blit<BlendOn, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - } - else - { - if (flip_x) - blit<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - else - blit<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - } - } - else - { - if (row_scroll) - { - if (flip_x) - blit<BlendOff, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - else - blit<BlendOff, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - } - else - { - if (flip_x) - blit<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - else - blit<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, tileattr, tilectrl, bitmap_addr, tile); - } - } - } - if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS)) - m_debug_blit = false; -} - -void spg2xx_device::blit_sprite(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t base_addr) -{ - uint32_t bitmap_addr = 0x40 * m_video_regs[0x22]; - uint16_t tile = m_spriteram[base_addr + 0]; - int16_t x = m_spriteram[base_addr + 1]; - int16_t y = m_spriteram[base_addr + 2]; - uint16_t attr = m_spriteram[base_addr + 3]; - - if (!tile) - { - return; - } - - if (((attr & PAGE_DEPTH_FLAG_MASK) >> PAGE_DEPTH_FLAG_SHIFT) != depth) - { - return; - } - - const uint32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); - const uint32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); - - if (!(m_video_regs[0x42] & SPRITE_COORD_TL_MASK)) - { - x = (160 + x) - w / 2; - y = (120 - y) - (h / 2) + 8; - } - - x &= 0x01ff; - y &= 0x01ff; - - uint32_t tile_line = ((scanline - y) + 0x200) % h; - int16_t test_y = (y + tile_line) & 0x1ff; - if (test_y >= 0x01c0) - test_y -= 0x0200; - - if (test_y != scanline) - { - return; - } - - bool blend = (attr & 0x4000); - bool flip_x = (attr & TILE_X_FLIP); - -#if SPG_DEBUG_VIDEO - if (m_debug_sprites && machine().input().code_pressed(KEYCODE_MINUS)) - m_debug_blit = true; - if (blend) - { - if (flip_x) - blit<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - else - blit<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - } - else - { - if (flip_x) - blit<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - else - blit<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - } - m_debug_blit = false; -#else - if (blend) - { - if (flip_x) - blit<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - else - blit<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - } - else - { - if (flip_x) - blit<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - else - blit<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, attr, 0, bitmap_addr, tile); - } -#endif -} - -void spg2xx_device::blit_sprites(const rectangle &cliprect, uint32_t scanline, int depth) -{ - if (!(m_video_regs[0x42] & SPRITE_ENABLE_MASK)) - { - return; - } - -#if SPG_DEBUG_VIDEO - if (!m_debug_sprites) - { -#endif - for (uint32_t n = 0; n < m_sprite_limit; n++) - { - blit_sprite(cliprect, scanline, depth, 4 * n); - } -#if SPG_DEBUG_VIDEO - } - else - { - blit_sprite(cliprect, scanline, depth, 4 * m_sprite_index_to_debug); - } -#endif -} - -void spg2xx_device::apply_saturation(const rectangle &cliprect) -{ - static const float s_u8_to_float = 1.0f / 255.0f; - static const float s_gray_r = 0.299f; - static const float s_gray_g = 0.587f; - static const float s_gray_b = 0.114f; - const float sat_adjust = (0xff - (m_video_regs[0x3c] & 0x00ff)) / (float)(0xff - 0x20); - for (int y = cliprect.min_y; y <= cliprect.max_y; y++) - { - uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; - for (int x = cliprect.min_x; x <= cliprect.max_x; x++) - { - const uint32_t src_rgb = *src; - const float src_r = (uint8_t)(src_rgb >> 16) * s_u8_to_float; - const float src_g = (uint8_t)(src_rgb >> 8) * s_u8_to_float; - const float src_b = (uint8_t)(src_rgb >> 0) * s_u8_to_float; - const float luma = src_r * s_gray_r + src_g * s_gray_g + src_b * s_gray_b; - const float adjusted_r = luma + (src_r - luma) * sat_adjust; - const float adjusted_g = luma + (src_g - luma) * sat_adjust; - const float adjusted_b = luma + (src_b - luma) * sat_adjust; - const int integer_r = (int)floor(adjusted_r * 255.0f); - const int integer_g = (int)floor(adjusted_g * 255.0f); - const int integer_b = (int)floor(adjusted_b * 255.0f); - *src++ = (integer_r > 255 ? 0xff0000 : (integer_r < 0 ? 0 : ((uint8_t)integer_r << 16))) | - (integer_g > 255 ? 0x00ff00 : (integer_g < 0 ? 0 : ((uint8_t)integer_g << 8))) | - (integer_b > 255 ? 0x0000ff : (integer_b < 0 ? 0 : (uint8_t)integer_b)); - } - } -} - -void spg2xx_device::apply_fade(const rectangle &cliprect) -{ - const uint16_t fade_offset = m_video_regs[0x30]; - for (int y = cliprect.min_y; y <= cliprect.max_y; y++) - { - uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; - for (int x = cliprect.min_x; x <= cliprect.max_x; x++) - { - const uint32_t src_rgb = *src; - const uint8_t src_r = (src_rgb >> 16) & 0xff; - const uint8_t src_g = (src_rgb >> 8) & 0xff; - const uint8_t src_b = (src_rgb >> 0) & 0xff; - const uint8_t r = src_r - fade_offset; - const uint8_t g = src_g - fade_offset; - const uint8_t b = src_b - fade_offset; - *src++ = (r > src_r ? 0 : (r << 16)) | - (g > src_g ? 0 : (g << 8)) | - (b > src_b ? 0 : (b << 0)); - } - } -} - -uint32_t spg2xx_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1)); - - const uint32_t page1_addr = 0x40 * m_video_regs[0x20]; - const uint32_t page2_addr = 0x40 * m_video_regs[0x21]; - uint16_t *page1_regs = m_video_regs + 0x10; - uint16_t *page2_regs = m_video_regs + 0x16; - - for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++) - { - for (int i = 0; i < 4; i++) - { - if (!SPG_DEBUG_VIDEO || !m_hide_page0) - blit_page(cliprect, scanline, i, page1_addr, page1_regs); - if (!SPG_DEBUG_VIDEO || !m_hide_page1) - blit_page(cliprect, scanline, i, page2_addr, page2_regs); - if (!SPG_DEBUG_VIDEO || !m_hide_sprites) - blit_sprites(cliprect, scanline, i); - } - } - - if ((m_video_regs[0x3c] & 0x00ff) != 0x0020) - { - apply_saturation(cliprect); - } - - if (m_video_regs[0x30] != 0) - { - apply_fade(cliprect); - } - - for (int y = cliprect.min_y; y <= cliprect.max_y; y++) - { - uint32_t *dest = &bitmap.pix32(y, cliprect.min_x); - uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; - memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1)); - } - - if (SPG_DEBUG_VIDEO && m_debug_palette) - { - for (int y = cliprect.min_y; y <= cliprect.max_y && y < 128; y++) - { - const uint16_t high_nybble = (y / 8) << 4; - uint32_t *dest = &bitmap.pix32(y, cliprect.min_x); - for (int x = cliprect.min_x; x <= cliprect.max_x && x < 256; x++) - { - const uint16_t low_nybble = x / 16; - const uint16_t palette_entry = high_nybble | low_nybble; - const uint16_t color = m_paletteram[palette_entry]; - if (!(color & 0x8000)) - { - *dest = m_rgb555_to_rgb888[color & 0x7fff]; - } - dest++; - } - } - } - - return 0; -} - -void spg2xx_device::do_sprite_dma(uint32_t len) -{ - address_space &mem = m_cpu->space(AS_PROGRAM); - - uint32_t src = m_video_regs[0x70] & 0x3fff; - uint32_t dst = m_video_regs[0x71]; - - for (uint32_t j = 0; j < len; j++) - { - m_spriteram[(dst + j) & 0x3ff] = mem.read_word(src + j); - } - - m_video_regs[0x72] = 0; - if (VIDEO_IRQ_ENABLE & 4) - { - const uint16_t old = VIDEO_IRQ_STATUS; - VIDEO_IRQ_STATUS |= 4; - const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS); - if (changed) - check_video_irq(); - } -} - -READ16_MEMBER(spg2xx_device::video_r) -{ - switch (offset) - { - case 0x38: // Current Line - LOGMASKED(LOG_VLINES, "video_r: Current Line: %04x\n", m_screen->vpos()); - return m_screen->vpos(); - - case 0x62: // Video IRQ Enable - LOGMASKED(LOG_IRQS, "video_r: Video IRQ Enable: %04x\n", VIDEO_IRQ_ENABLE); - return VIDEO_IRQ_ENABLE; - - case 0x63: // Video IRQ Status - LOGMASKED(LOG_IRQS, "video_r: Video IRQ Status: %04x\n", VIDEO_IRQ_STATUS); - return VIDEO_IRQ_STATUS; - - default: - LOGMASKED(LOG_UNKNOWN_PPU, "video_r: Unknown register %04x = %04x\n", 0x2800 + offset, m_video_regs[offset]); - break; - } - return m_video_regs[offset]; -} - -WRITE16_MEMBER(spg2xx_device::video_w) -{ - switch (offset) - { - case 0x10: // Page 1 X scroll - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 X Scroll = %04x\n", data & 0x01ff); - m_video_regs[offset] = data & 0x01ff; - break; - - case 0x11: // Page 1 Y scroll - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Y Scroll = %04x\n", data & 0x00ff); - m_video_regs[offset] = data & 0x00ff; - break; - - case 0x12: // Page 1 Attributes - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data - , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1)); - m_video_regs[offset] = data; - break; - - case 0x13: // Page 1 Control - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data - , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0)); - m_video_regs[offset] = data; - break; - - case 0x14: // Page 1 Tile Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Tile Address = %04x\n", data & 0x1fff); - m_video_regs[offset] = data; - break; - - case 0x15: // Page 1 Attribute Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attribute Address = %04x\n", data & 0x1fff); - m_video_regs[offset] = data; - break; - - case 0x16: // Page 2 X scroll - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 X Scroll = %04x\n", data & 0x01ff); - m_video_regs[offset] = data & 0x01ff; - break; - - case 0x17: // Page 2 Y scroll - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Y Scroll: %04x = %04x\n", 0x2800 | offset, data & 0x00ff); - m_video_regs[offset] = data & 0x00ff; - break; - - case 0x18: // Page 2 Attributes - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data - , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1)); - m_video_regs[offset] = data; - break; - - case 0x19: // Page 2 Control - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data - , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0)); - m_video_regs[offset] = data; - break; - - case 0x1a: // Page 2 Tile Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Tile Address = %04x\n", data & 0x1fff); - m_video_regs[offset] = data; - break; - - case 0x1b: // Page 2 Attribute Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attribute Address = %04x\n", data & 0x1fff); - m_video_regs[offset] = data; - break; - - case 0x20: // Page 1 Segment Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Segment Address = %04x\n", data); - m_video_regs[offset] = data; - break; - - case 0x21: // Page 2 Segment Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Segment Address = %04x\n", data); - m_video_regs[offset] = data; - break; - - case 0x22: // Sprite Segment Address - LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Segment Address = %04x\n", data); - m_video_regs[offset] = data; - break; - - case 0x2a: // Blend Level Control - LOGMASKED(LOG_PPU_WRITES, "video_w: Blend Level Control = %04x\n", data & 0x0003); - m_video_regs[offset] = data & 0x0003; - break; - - case 0x30: // Fade Effect Control - LOGMASKED(LOG_PPU_WRITES, "video_w: Fade Effect Control = %04x\n", data & 0x00ff); - m_video_regs[offset] = data & 0x00ff; - break; - - case 0x36: // IRQ pos V - case 0x37: // IRQ pos H - m_video_regs[offset] = data & 0x01ff; - LOGMASKED(LOG_IRQS, "video_w: Video IRQ Position: %04x,%04x (%04x)\n", m_video_regs[0x37], m_video_regs[0x36], 0x2800 | offset); - if (m_video_regs[0x37] < 160 && m_video_regs[0x36] < 240) - m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1)); - else - m_screenpos_timer->adjust(attotime::never); - break; - - case 0x39: // Latch 1st Line Pen Pulse - LOGMASKED(LOG_PPU_WRITES, "video_w: Latch 1st Line Pen Pulse = %04x\n", data & 0x0001); - m_video_regs[offset] = data & 0x0001; - break; - - case 0x3c: // TV Control 1 - LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 1 = %04x (Hue:%02x, Saturation:%02x)\n", data, data >> 8, data & 0x00ff); - m_video_regs[offset] = data; - break; - - case 0x3d: // TV Control 2 - { - static const char* const s_lpf_mode[4] = { "LPF1", "LPF2", "All", "Edge" }; - LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 2 = %04x (LPFMode:%s, Enable:%d, Interlace:%d)\n", data & 0x000f - , s_lpf_mode[(data >> 2) & 3], BIT(data, 1), BIT(data, 0)); - m_video_regs[offset] = data & 0x000f; - break; - } - - case 0x3e: // Light Pen Y Position - LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen Y (read only) = %04x\n", data & 0x01ff); - break; - - case 0x3f: // Light Pen YXPosition - LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen X (read only) = %04x\n", data & 0x01ff); - break; - - case 0x42: // Sprite Control - LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Control = %04x (TopLeft:%d, Enable:%d)\n", data & 0x0003, BIT(data, 1), BIT(data, 0)); - m_video_regs[offset] = data & 0x0003; - break; - - case 0x62: // Video IRQ Enable - { - LOGMASKED(LOG_IRQS, "video_w: Video IRQ Enable = %04x (DMA:%d, Timing:%d, Blanking:%d)\n", data & 0x0007, BIT(data, 2), BIT(data, 1), BIT(data, 0)); - const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS; - VIDEO_IRQ_ENABLE = data & 0x0007; - const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS); - if (changed) - check_video_irq(); - break; - } - - case 0x63: // Video IRQ Acknowledge - { - LOGMASKED(LOG_IRQS, "video_w: Video IRQ Acknowledge = %04x\n", data); - const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS; - VIDEO_IRQ_STATUS &= ~data; - const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS); - if (changed) - check_video_irq(); - break; - } - - case 0x70: // Sprite DMA Source - LOGMASKED(LOG_DMA, "video_w: Sprite DMA Source = %04x\n", data & 0x3fff); - m_video_regs[offset] = data & 0x3fff; - break; - - case 0x71: // Sprite DMA Dest - LOGMASKED(LOG_DMA, "video_w: Sprite DMA Dest = %04x\n", data & 0x03ff); - m_video_regs[offset] = data & 0x03ff; - break; - - case 0x72: // Sprite DMA Length - { - LOGMASKED(LOG_DMA, "video_w: Sprite DMA Length = %04x\n", data & 0x03ff); - uint16_t length = data & 0x3ff; - do_sprite_dma(length ? length : 0x400); - break; - } - - default: - LOGMASKED(LOG_UNKNOWN_PPU, "video_w: Unknown register %04x = %04x\n", 0x2800 + offset, data); - m_video_regs[offset] = data; - break; - } -} - -WRITE_LINE_MEMBER(spg2xx_device::vblank) -{ - if (!state) - { - VIDEO_IRQ_STATUS &= ~1; - LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS); - check_video_irq(); - return; - } - -#if SPG_DEBUG_VIDEO - if (machine().input().code_pressed_once(KEYCODE_5)) - m_hide_page0 = !m_hide_page0; - if (machine().input().code_pressed_once(KEYCODE_6)) - m_hide_page1 = !m_hide_page1; - if (machine().input().code_pressed_once(KEYCODE_7)) - m_hide_sprites = !m_hide_sprites; - if (machine().input().code_pressed_once(KEYCODE_8)) - m_debug_sprites = !m_debug_sprites; - if (machine().input().code_pressed_once(KEYCODE_9)) - m_sprite_index_to_debug--; - if (machine().input().code_pressed_once(KEYCODE_0)) - m_sprite_index_to_debug++; - if (machine().input().code_pressed_once(KEYCODE_L)) - m_debug_palette = !m_debug_palette; -#endif - - if (VIDEO_IRQ_ENABLE & 1) - { - VIDEO_IRQ_STATUS |= 1; - LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS); - check_video_irq(); - } -} - -void spg2xx_device::check_video_irq() -{ - LOGMASKED(LOG_IRQS, "%ssserting IRQ0 (%04x, %04x)\n", (VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? "A" : "Dea", VIDEO_IRQ_STATUS, VIDEO_IRQ_ENABLE); - m_cpu->set_state_unsynced(UNSP_IRQ0_LINE, (VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? ASSERT_LINE : CLEAR_LINE); -} - - -/************************* -* Machine Hardware * -*************************/ - -void spg2xx_device::uart_rx(uint8_t data) -{ - LOGMASKED(LOG_UART, "uart_rx: Pulling %02x into receive FIFO\n", data); - if (BIT(m_io_regs[0x30], 6)) - { - m_uart_rx_fifo[m_uart_rx_fifo_end] = data; - m_uart_rx_fifo_end = (m_uart_rx_fifo_end + 1) % ARRAY_LENGTH(m_uart_rx_fifo); - m_uart_rx_fifo_count++; - if (m_uart_rx_timer->remaining() == attotime::never) - m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate)); - } -} - -READ16_MEMBER(spg2xx_device::io_r) -{ - static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" }; - static const char gpioports[] = { 'A', 'B', 'C' }; - - uint16_t val = m_io_regs[offset]; - - switch (offset) - { - case 0x01: case 0x06: case 0x0b: // GPIO Data Port A/B/C - do_gpio(offset, false); - LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]); - val = m_io_regs[offset]; - break; - - case 0x02: case 0x03: case 0x04: case 0x05: - case 0x07: case 0x08: case 0x09: case 0x0a: - case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Other GPIO regs - LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]); - break; - - case 0x10: // Timebase Control - LOGMASKED(LOG_IO_READS, "io_r: Timebase Control = %04x\n", val); - break; - - case 0x12: // Timer A Data - LOGMASKED(LOG_IO_WRITES, "io_r: Timer A Data = %04x\n", val); - break; - - case 0x1c: // Video line counter - val = m_screen->vpos(); - LOGMASKED(LOG_VLINES, "io_r: Video Line = %04x\n", val); - break; - - case 0x20: // System Control - LOGMASKED(LOG_IO_READS, "io_r: System Control = %04x\n", val); - break; - - case 0x21: // IRQ Control - LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Control = %04x\n", machine().describe_context(), val); - break; - - case 0x22: // IRQ Status - LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Status = %04x\n", machine().describe_context(), val); - break; - - case 0x23: // External Memory Control - LOGMASKED(LOG_IO_READS, "%s: io_r: Ext. Memory Control = %04x\n", machine().describe_context(), val); - break; - - case 0x25: // ADC Control - LOGMASKED(LOG_IO_READS, "io_r: ADC Control = %04x\n", val); - break; - - case 0x27: // ADC Data - { - m_io_regs[0x27] = 0; - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS &= ~0x2000; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(changed); - LOGMASKED(LOG_IO_READS, "%s: io_r: ADC Data = %04x\n", machine().describe_context(), val); - break; - } - - case 0x29: // Wakeup Source - LOGMASKED(LOG_IO_READS, "io_r: Wakeup Source = %04x\n", val); - break; - - case 0x2b: - LOGMASKED(LOG_IO_READS, "io_r: NTSC/PAL = %04x\n", m_pal_flag); - return m_pal_flag; - - case 0x2c: // PRNG 0 - { - const uint16_t value = m_io_regs[0x2c]; - m_io_regs[0x2c] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff; - return value; - } - - case 0x2d: // PRNG 1 - { - const uint16_t value = m_io_regs[0x2d]; - m_io_regs[0x2d] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff; - return value; - } - - case 0x2e: // FIQ Source Select - LOGMASKED(LOG_FIQ, "io_r: FIQ Source Select = %04x\n", val); - break; - - case 0x2f: // Data Segment - val = m_cpu->get_ds(); - LOGMASKED(LOG_SEGMENT, "io_r: Data Segment = %04x\n", val); - break; - - case 0x30: // UART Control - LOGMASKED(LOG_UART, "%s: io_r: UART Control = %04x\n", machine().describe_context(), val); - break; - - case 0x31: // UART Status - //LOGMASKED(LOG_UART, "%s: io_r: UART Status = %04x\n", machine().describe_context(), val); - break; - - case 0x36: // UART RX Data - if (m_uart_rx_available) - { - m_io_regs[0x31] &= ~0x0081; - LOGMASKED(LOG_UART, "UART Rx data is available, clearing bits\n"); - if (m_uart_rx_fifo_count) - { - LOGMASKED(LOG_UART, "Remaining count %d, value %02x\n", m_uart_rx_fifo_count, m_uart_rx_fifo[m_uart_rx_fifo_start]); - m_io_regs[0x36] = m_uart_rx_fifo[m_uart_rx_fifo_start]; - val = m_io_regs[0x36]; - m_uart_rx_fifo_start = (m_uart_rx_fifo_start + 1) % ARRAY_LENGTH(m_uart_rx_fifo); - m_uart_rx_fifo_count--; - - if (m_uart_rx_fifo_count == 0) - { - m_uart_rx_available = false; - } - else - { - LOGMASKED(LOG_UART, "Remaining count %d, setting up timer\n", m_uart_rx_fifo_count); - //uart_receive_tick(); - if (m_uart_rx_timer->remaining() == attotime::never) - m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate)); - } - } - else - { - m_uart_rx_available = false; - } - } - else - { - m_io_regs[0x37] |= 0x2000; - } - LOGMASKED(LOG_UART, "%s: io_r: UART Rx Data = %04x\n", machine().describe_context(), val); - break; - - case 0x37: // UART Rx FIFO Control - val &= ~0x0070; - val |= (m_uart_rx_available ? 7 : 0) << 4; - LOGMASKED(LOG_UART, "io_r: UART Rx FIFO Control = %04x\n", machine().describe_context(), val); - break; - - case 0x51: // unknown, polled by ClickStart cartridges ( clikstrt ) - return 0x8000; - - case 0x59: // I2C Status - LOGMASKED(LOG_I2C, "io_r: I2C Status = %04x\n", val); - break; - - case 0x5e: // I2C Data In - LOGMASKED(LOG_I2C, "io_r: I2C Data In = %04x\n", val); - break; - - case 0x100: // DMA Source (L) - LOGMASKED(LOG_DMA, "io_r: DMA Source (lo) = %04x\n", val); - break; - - case 0x101: // DMA Source (H) - LOGMASKED(LOG_DMA, "io_r: DMA Source (hi) = %04x\n", val); - break; - - case 0x102: // DMA Length - LOGMASKED(LOG_DMA, "io_r: DMA Length = %04x\n", 0); - val = 0; - break; - - case 0x103: // DMA Destination - LOGMASKED(LOG_DMA, "io_r: DMA Dest = %04x\n", val); - break; - - default: - LOGMASKED(LOG_UNKNOWN_IO, "io_r: Unknown register %04x\n", 0x3d00 + offset); - break; - } - - return val; -} - -void spg2xx_device::update_porta_special_modes() -{ - static const char* const s_pa_special[4][16] = - { - // Input, Special 0 - // Input, Special 1 - // Output, Special 0 - // Output, Special 1 - - { "LP", "ExtClk2", "ExtClk1", "-", "SDA", "SlvRDY", "-", "-", "SPICLK", "-", "RxD", "SPISSB", "-", "-", "-", "-" }, - { "-", "-", "-", "SCK", "-", "SWS", "-", "-", "-", "-", "-", "-", "IRQ2B", "-", "-", "IRQ1B" }, - { "-", "-", "-", "SCK", "SDA", "SWS", "-", "-", "SPICLK", "TxD", "-", "SPISSB", "TAPWM", "TM1", "TBPWM", "TM2" }, - { "CSB3", "CSB2", "CSB1", "SCK", "SDA", "VSYNC", "HSYNC", "SYSCLK3", "SPICLK", "TxD", "SWS", "SPISSB", "-", "VSYNC", "HSYNC", "CSYNC" }, - }; - for (int bit = 15; bit >= 0; bit--) - { - if (!BIT(m_io_regs[0x05], bit)) - continue; - uint8_t type = (BIT(m_io_regs[0x03], bit) << 1) | BIT(m_io_regs[0x00], 0); - LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pa_special[type][bit]); - } -} - -void spg2xx_device::update_portb_special_modes() -{ - static const char* const s_pb_special[4][8] = - { - // Input, Special 0 - // Input, Special 1 - // Output, Special 0 - // Output, Special 1 - - { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" }, - { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" }, - { "VSYNC", "HSYNC", "CSYNC", "-", "-", "SCK", "SDA", "SWS" }, - { "CSB3", "CSB2", "CSB1", "TBPWM", "TM2", "-", "-", "SYSCLK2" }, - }; - for (int bit = 7; bit >= 0; bit--) - { - if (!BIT(m_io_regs[0x0a], bit)) - continue; - uint8_t type = (BIT(m_io_regs[0x08], bit) << 1) | BIT(m_io_regs[0x00], 1); - LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pb_special[type][bit]); - } -} - -void spg2xx_device::update_timer_b_rate() -{ - switch (m_io_regs[0x17] & 7) - { - case 0: - case 1: - case 5: - case 6: - case 7: - m_timer_src_c->adjust(attotime::never); - break; - case 2: - m_timer_src_c->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768)); - break; - case 3: - m_timer_src_c->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192)); - break; - case 4: - m_timer_src_c->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096)); - break; - } -} - -void spg2xx_device::update_timer_ab_src() -{ - if (m_timer_b_tick_rate == 0) - return; - - m_timer_b_divisor++; - if (m_timer_b_divisor >= m_timer_b_tick_rate) - { - m_timer_b_divisor = 0; - increment_timer_a(); - } -} - -void spg2xx_device::increment_timer_a() -{ - m_io_regs[0x12]++; - if (m_io_regs[0x12] == 0) - { - m_io_regs[0x12] = m_timer_a_preload; - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS |= 0x0800; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - { - //printf("Timer A overflow\n"); - check_irqs(0x0800); - } - } -} - -void spg2xx_device::update_timer_c_src() -{ - m_io_regs[0x16]++; - if (m_io_regs[0x16] == 0) - { - m_io_regs[0x16] = m_timer_b_preload; - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS |= 0x0400; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - { - printf("Timer B overflow\n"); - check_irqs(0x0400); - } - } -} - - -WRITE16_MEMBER(spg28x_device::io_w) -{ - if (offset == 0x33) - { - m_io_regs[offset] = data; - m_uart_baud_rate = 27000000 / (0x10000 - m_io_regs[0x33]); - LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate scaler = %04x (%d baud)\n", machine().describe_context(), data, m_uart_baud_rate); - } - else - { - spg2xx_device::io_w(space, offset, data, mem_mask); - } -} - -WRITE16_MEMBER(spg2xx_device::io_w) -{ - static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" }; - static const char gpioports[3] = { 'A', 'B', 'C' }; - - switch (offset) - { - case 0x00: // GPIO special function select - { - LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Configuration = %04x (IOBWake:%d, IOAWake:%d, IOBSpecSel:%d, IOASpecSel:%d)\n", machine().describe_context(), data - , BIT(data, 4), BIT(data, 3), BIT(data, 1), BIT(data, 0)); - const uint16_t old = m_io_regs[offset]; - m_io_regs[offset] = data; - const uint16_t changed = old ^ data; - if (BIT(changed, 0)) - update_porta_special_modes(); - if (BIT(changed, 1)) - update_portb_special_modes(); - break; - } - - case 0x01: case 0x06: case 0x0b: // GPIO data, port A/B/C - offset++; - // Intentional fallthrough - we redirect data register writes to the buffer register. - - case 0x02: case 0x04: // Port A - case 0x07: case 0x09: // Port B - case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Port C - LOGMASKED(LOG_GPIO, "%s: io_w: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], data); - m_io_regs[offset] = data; - do_gpio(offset, true); - break; - - case 0x03: // Port A Direction - LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port A = %04x\n", machine().describe_context(), data); - m_io_regs[offset] = data; - update_porta_special_modes(); - do_gpio(offset, true); - break; - - case 0x08: // Port B Direction - LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port B = %04x\n", machine().describe_context(), data); - m_io_regs[offset] = data; - update_portb_special_modes(); - do_gpio(offset, true); - break; - - case 0x05: // Port A Special - LOGMASKED(LOG_GPIO, "%s: io_w: Port A Special Function Select: %04x\n", machine().describe_context(), data); - m_io_regs[offset] = data; - update_porta_special_modes(); - break; - - case 0x0a: // Port B Special - LOGMASKED(LOG_GPIO, "%s: io_w: Port B Special Function Select: %04x\n", machine().describe_context(), data); - m_io_regs[offset] = data; - update_portb_special_modes(); - break; - - case 0x10: // Timebase Control - { - static const char* const s_tmb1_sel[2][4] = - { - { "8Hz", "16Hz", "32Hz", "64Hz" }, - { "12kHz", "24kHz", "40kHz", "40kHz" } - }; - static const char* const s_tmb2_sel[2][4] = - { - { "128Hz", "256Hz", "512Hz", "1024Hz" }, - { "105kHz", "210kHz", "420kHz", "840kHz" } - }; - static const uint32_t s_tmb1_freq[2][4] = - { - { 8, 16, 32, 64 }, - { 12000, 24000, 40000, 40000 } - }; - static const uint32_t s_tmb2_freq[2][4] = - { - { 128, 256, 512, 1024 }, - { 105000, 210000, 420000, 840000 } - }; - LOGMASKED(LOG_TIMERS, "io_w: Timebase Control = %04x (Source:%s, TMB2:%s, TMB1:%s)\n", data, - BIT(data, 4) ? "27MHz" : "32768Hz", s_tmb2_sel[BIT(data, 4)][(data >> 2) & 3], s_tmb1_sel[BIT(data, 4)][data & 3]); - m_io_regs[offset] = data; - const uint8_t hifreq = BIT(data, 4); - const uint32_t tmb1freq = s_tmb1_freq[hifreq][data & 3]; - m_tmb1->adjust(attotime::from_hz(tmb1freq), 0, attotime::from_hz(tmb1freq)); - const uint32_t tmb2freq = s_tmb2_freq[hifreq][(data >> 2) & 3]; - m_tmb2->adjust(attotime::from_hz(tmb2freq), 0, attotime::from_hz(tmb2freq)); - break; - } - - case 0x11: // Timebase Clear - LOGMASKED(LOG_TIMERS, "io_w: Timebase Clear = %04x\n", data); - break; - - case 0x12: // Timer A Data - LOGMASKED(LOG_TIMERS, "io_w: Timer A Data = %04x\n", data); - m_io_regs[offset] = data; - m_timer_a_preload = data; - break; - - case 0x13: // Timer A Control - { - static const char* const s_source_a[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" }; - static const char* const s_source_b[8] = { "2048Hz", "1024Hz", "256Hz", "TMB1", "4Hz", "2Hz", "1", "ExtClk2" }; - LOGMASKED(LOG_TIMERS, "io_w: Timer A Control = %04x (Source A:%s, Source B:%s)\n", data, - s_source_a[data & 7], s_source_b[(data >> 3) & 7]); - m_io_regs[offset] = data; - int timer_a_rate = 0; - switch (data & 7) - { - case 0: - case 1: - case 5: - case 6: - case 7: - m_timer_src_ab->adjust(attotime::never); - break; - case 2: - m_timer_src_ab->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768)); - timer_a_rate = 32768; - break; - case 3: - m_timer_src_ab->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192)); - timer_a_rate = 8192; - break; - case 4: - m_timer_src_ab->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096)); - timer_a_rate = 4096; - break; - } - switch ((data >> 3) & 7) - { - case 0: - m_timer_b_tick_rate = timer_a_rate / 2048; - break; - case 1: - m_timer_b_tick_rate = timer_a_rate / 1024; - break; - case 2: - m_timer_b_tick_rate = timer_a_rate / 256; - break; - case 3: - m_timer_b_tick_rate = 0; - break; - case 4: - m_timer_b_tick_rate = timer_a_rate / 4; - break; - case 5: - m_timer_b_tick_rate = timer_a_rate / 2; - break; - case 6: - m_timer_b_tick_rate = 1; - break; - case 7: - m_timer_b_tick_rate = 0; - break; - } - break; - } - - case 0x15: // Timer A IRQ Clear - { - LOGMASKED(LOG_TIMERS, "io_w: Timer A IRQ Clear\n"); - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS &= ~0x0800; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(0x0800); - break; - } - - case 0x16: // Timer B Data - LOGMASKED(LOG_TIMERS, "io_w: Timer B Data = %04x\n", data); - m_io_regs[offset] = data; - m_timer_b_preload = data; - break; - - case 0x17: // Timer B Control - { - static const char* const s_source_c[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" }; - LOGMASKED(LOG_TIMERS, "io_w: Timer B Control = %04x (Source C:%s)\n", data, s_source_c[data & 7]); - m_io_regs[offset] = data; - if (m_io_regs[0x18] == 1) - { - update_timer_b_rate(); - } - break; - } - - case 0x18: // Timer B Enable - { - LOGMASKED(LOG_TIMERS, "io_w: Timer B Enable = %04x\n", data); - m_io_regs[offset] = data & 1; - if (data & 1) - { - update_timer_b_rate(); - } - else - { - m_timer_src_c->adjust(attotime::never); - } - break; - } - - case 0x19: // Timer B IRQ Clear - { - LOGMASKED(LOG_TIMERS, "io_w: Timer B IRQ Clear\n"); - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS &= ~0x0400; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(0x0400); - break; - } - - case 0x20: // System Control - { - static const char* const s_sysclk[4] = { "13.5MHz", "27MHz", "27MHz NoICE", "54MHz" }; - static const char* const s_lvd_voltage[4] = { "2.7V", "2.9V", "3.1V", "3.3V" }; - static const char* const s_weak_strong[2] = { "Weak", "Strong" }; - LOGMASKED(LOG_IO_WRITES, "io_w: System Control = %04x (Watchdog:%d, Sleep:%d, SysClk:%s, SysClkInv:%d, LVROutEn:%d, LVREn:%d\n" - , data, BIT(data, 15), BIT(data, 14), s_sysclk[(data >> 12) & 3], BIT(data, 11), BIT(data, 9), BIT(data, 8)); - LOGMASKED(LOG_IO_WRITES, " LVDEn:%d, LVDVoltSel:%s, 32kHzDisable:%d, StrWkMode:%s, VDACDisable:%d, ADACDisable:%d, ADACOutDisable:%d)\n" - , BIT(data, 7), s_lvd_voltage[(data >> 5) & 3], BIT(data, 4), s_weak_strong[BIT(data, 3)], BIT(data, 2), BIT(data, 1), BIT(data, 0)); - m_io_regs[offset] = data; - break; - } - - case 0x21: // IRQ Enable - { - LOGMASKED(LOG_IRQS, "io_w: IRQ Enable = %04x\n", data); - const uint16_t old = IO_IRQ_ENABLE; - m_io_regs[offset] = data; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(changed); - break; - } - - case 0x22: // IRQ Acknowledge - { - LOGMASKED(LOG_IRQS, "io_w: IRQ Acknowledge = %04x\n", data); - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS &= ~data; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (m_uart_rx_irq || m_uart_tx_irq) - { - LOGMASKED(LOG_IRQS | LOG_UART, "Re-setting UART IRQ due to still-unacknowledged Rx or Tx.\n"); - IO_IRQ_STATUS |= 0x0100; - } - if (changed) - check_irqs(changed); - break; - } - - case 0x23: // External Memory Control - { - static const char* const s_bus_arb[8] = - { - "Forbidden", "Forbidden", "Forbidden", "Forbidden", "Forbidden", "1:SPU/2:PPU/3:CPU", "Forbidden", "1:PPU/2:SPU/3:CPU" - }; - static const char* const s_addr_decode[4] = - { - "ROMCSB: 4000-3fffff, CSB1: ---, CSB2: ---, CSB3: ---", - "ROMCSB: 4000-1fffff, CSB1: 200000-3fffff, CSB2: ---, CSB3: ---", - "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff", - "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff" - }; - static const char* const s_ram_decode[16] = - { - "None", "None", "None", "None", "None", "None", "None", "None", - "4KW, 3ff000-3fffff\n", - "8KW, 3fe000-3fffff\n", - "16KW, 3fc000-3fffff\n", - "32KW, 3f8000-3fffff\n", - "64KW, 3f0000-3fffff\n", - "128KW, 3e0000-3fffff\n", - "256KW, 3c0000-3fffff\n", - "512KW, 380000-3fffff\n" - }; - LOGMASKED(LOG_EXT_MEM, "io_w: Ext. Memory Control (not yet implemented) = %04x:\n", data); - LOGMASKED(LOG_EXT_MEM, " WaitStates:%d, BusArbPrio:%s\n", (data >> 1) & 3, s_bus_arb[(data >> 3) & 7]); - LOGMASKED(LOG_EXT_MEM, " ROMAddrDecode:%s\n", s_addr_decode[(data >> 6) & 3]); - LOGMASKED(LOG_EXT_MEM, " RAMAddrDecode:%s\n", s_ram_decode[(data >> 8) & 15]); - m_chip_sel((data >> 6) & 3); - m_io_regs[offset] = data; - break; - } - - case 0x24: // Watchdog - LOGMASKED(LOG_WATCHDOG, "io_w: Watchdog Pet = %04x\n", data); - break; - - case 0x25: // ADC Control - { - LOGMASKED(LOG_IO_WRITES, "%s: io_w: ADC Control = %04x\n", machine().describe_context(), data); - m_io_regs[offset] = data & ~0x1000; - if (BIT(data, 0)) - { - m_io_regs[0x27] = 0x8000 | (m_adc_in[BIT(data, 5)]() & 0x7fff); - m_io_regs[0x25] |= 0x2000; - } - if (BIT(data, 12) && !BIT(m_io_regs[offset], 1)) - { - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS |= 0x2000; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - { - check_irqs(changed); - } - } - break; - } - - case 0x28: // Sleep Mode - LOGMASKED(LOG_IO_WRITES, "io_w: Sleep Mode (%s enter value) = %04x\n", data == 0xaa55 ? "valid" : "invalid", data); - m_io_regs[offset] = data; - break; - - case 0x29: // Wakeup Source - { - m_io_regs[offset] = data; - static const char* const s_sources[8] = - { - "TMB1", "TMB2", "2Hz", "4Hz", "1024Hz", "2048Hz", "4096Hz", "Key" - }; - - LOGMASKED(LOG_IO_WRITES, "io_w: Wakeup Source = %04x:\n", data); - bool comma = false; - char buf[1024]; - int char_idx = 0; - for (int i = 7; i >= 0; i--) - { - if (BIT(data, i)) - { - char_idx += sprintf(&buf[char_idx], "%s%s", comma ? ", " : "", s_sources[i]); - comma = true; - } - } - buf[char_idx] = 0; - LOGMASKED(LOG_IO_WRITES, " %s\n", buf); - break; - } - - case 0x2c: // PRNG 0 seed - LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 0 seed = %04x\n", data & 0x7fff); - m_io_regs[offset] = data & 0x7fff; - break; - - case 0x2d: // PRNG 1 seed - LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 1 seed = %04x\n", data & 0x7fff); - m_io_regs[offset] = data & 0x7fff; - break; - - case 0x2e: // FIQ Source Select - { - static const char* const s_fiq_select[8] = - { - "PPU", "SPU Channel", "Timer A", "Timer B", "UART/SPI", "External", "Reserved", "None" - }; - LOGMASKED(LOG_FIQ, "io_w: FIQ Source Select (not yet implemented) = %04x, %s\n", data, s_fiq_select[data & 7]); - m_io_regs[offset] = data; - break; - } - - case 0x2f: // Data Segment - m_cpu->set_ds(data & 0x3f); - LOGMASKED(LOG_SEGMENT, "io_w: Data Segment = %04x\n", data); - break; - - case 0x30: // UART Control - { - static const char* const s_9th_bit[4] = { "0", "1", "Odd", "Even" }; - LOGMASKED(LOG_UART, "%s: io_w: UART Control = %04x (TxEn:%d, RxEn:%d, Bits:%d, MultiProc:%d, 9thBit:%s, TxIntEn:%d, RxIntEn:%d\n", - machine().describe_context(), data, BIT(data, 7), BIT(data, 6), BIT(data, 5) ? 9 : 8, BIT(data, 4), s_9th_bit[(data >> 2) & 3], - BIT(data, 1), BIT(data, 0)); - const uint16_t changed = m_io_regs[offset] ^ data; - m_io_regs[offset] = data; - if (!BIT(data, 6)) - { - m_uart_rx_available = false; - m_io_regs[0x36] = 0; - } - if (BIT(changed, 7)) - { - if (BIT(data, 7)) - { - m_io_regs[0x31] |= 0x0002; - } - else - { - m_io_regs[0x31] &= ~0x0042; - m_uart_tx_timer->adjust(attotime::never); - } - } - break; - } - - case 0x31: // UART Status - LOGMASKED(LOG_UART, "%s: io_w: UART Status = %04x\n", machine().describe_context(), data); - if (BIT(data, 0)) - { - m_io_regs[0x31] &= ~1; - m_uart_rx_irq = false; - } - if (BIT(data, 1)) - { - m_io_regs[0x31] &= ~2; - m_uart_tx_irq = false; - } - if (!m_uart_rx_irq && !m_uart_tx_irq) - { - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS &= ~0x0100; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(0x0100); - } - break; - - case 0x33: // UART Baud Rate (low byte) - case 0x34: // UART Baud Rate (high byte) - { - m_io_regs[offset] = data; - const uint32_t divisor = 16 * (0x10000 - ((m_io_regs[0x34] << 8) | m_io_regs[0x33])); - LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate (%s byte): Baud rate = %d\n", offset == 0x33 ? "low" : "high", machine().describe_context(), 27000000 / divisor); - m_uart_baud_rate = 27000000 / divisor; - break; - } - - case 0x35: // UART TX Data - LOGMASKED(LOG_UART, "%s: io_w: UART Tx Data = %02x\n", machine().describe_context(), data & 0x00ff); - m_io_regs[offset] = data; - if (BIT(m_io_regs[0x30], 7)) - { - LOGMASKED(LOG_UART, "io_w: UART Tx: Clearing ready bit, setting busy bit, setting up timer\n"); - m_uart_tx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate)); - m_io_regs[0x31] &= ~0x0002; - m_io_regs[0x31] |= 0x0040; - } - break; - - case 0x36: // UART RX Data - LOGMASKED(LOG_UART, "%s: io_w: UART Rx Data (read-only) = %04x\n", machine().describe_context(), data); - break; - - case 0x37: // UART Rx FIFO Control - LOGMASKED(LOG_UART, "%s: io_w: UART Rx FIFO Control = %04x (Reset:%d, Overrun:%d, Underrun:%d, Count:%d, Threshold:%d)\n", - machine().describe_context(), data, BIT(data, 15), BIT(data, 14), BIT(data, 13), (data >> 4) & 7, data & 7); - if (data & 0x8000) - { - m_uart_rx_available = false; - m_io_regs[0x36] = 0; - } - m_io_regs[offset] &= ~data & 0x6000; - m_io_regs[offset] &= ~0x0007; - m_io_regs[offset] |= data & 0x0007; - break; - - case 0x50: // SIO Setup - { - static const char* const s_addr_mode[4] = { "16-bit", "None", "8-bit", "24-bit" }; - static const char* const s_baud_rate[4] = { "/16", "/4", "/8", "/32" }; - LOGMASKED(LOG_SIO, "io_w: SIO Setup (not implemented) = %04x (DS301Ready:%d, Start:%d, Auto:%d, IRQEn:%d, Width:%d, Related:%d\n", data - , BIT(data, 11), BIT(data, 10), BIT(data, 9), BIT(data, 8), BIT(data, 7) ? 16 : 8, BIT(data, 6)); - LOGMASKED(LOG_SIO, " (Mode:%s, RWProtocol:%d, Rate:sysclk%s, AddrMode:%s)\n" - , BIT(data, 5), BIT(data, 4), s_baud_rate[(data >> 2) & 3], s_addr_mode[data & 3]); - break; - } - - case 0x52: // SIO Start Address (low) - LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (low) (not implemented) = %04x\n", data); - break; - - case 0x53: // SIO Start Address (hi) - LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (hi) (not implemented) = %04x\n", data); - break; - - case 0x54: // SIO Data - LOGMASKED(LOG_SIO, "io_w: SIO Data (not implemented) = %04x\n", data); - break; - - case 0x55: // SIO Automatic Transmit Count - LOGMASKED(LOG_SIO, "io_w: SIO Auto Transmit Count (not implemented) = %04x\n", data); - break; - - case 0x58: // I2C Command - LOGMASKED(LOG_I2C, "io_w: I2C Command = %04x\n", data); - m_io_regs[offset] = data; - do_i2c(); - break; - - case 0x59: // I2C Status / Acknowledge - LOGMASKED(LOG_I2C, "io_w: I2C Acknowledge = %04x\n", data); - m_io_regs[offset] &= ~data; - break; - - case 0x5a: // I2C Access Mode - LOGMASKED(LOG_I2C, "io_w: I2C Access Mode = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x5b: // I2C Device Address - LOGMASKED(LOG_I2C, "io_w: I2C Device Address = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x5c: // I2C Sub-Address - LOGMASKED(LOG_I2C, "io_w: I2C Sub-Address = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x5d: // I2C Data Out - LOGMASKED(LOG_I2C, "io_w: I2C Data Out = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x5e: // I2C Data In - LOGMASKED(LOG_I2C, "io_w: I2C Data In = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x5f: // I2C Controller Mode - LOGMASKED(LOG_I2C, "io_w: I2C Controller Mode = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x100: // DMA Source (lo) - LOGMASKED(LOG_DMA, "io_w: DMA Source (lo) = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x101: // DMA Source (hi) - LOGMASKED(LOG_DMA, "io_w: DMA Source (hi) = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x103: // DMA Destination - LOGMASKED(LOG_DMA, "io_w: DMA Dest = %04x\n", data); - m_io_regs[offset] = data; - break; - - case 0x102: // DMA Length - LOGMASKED(LOG_DMA, "io_w: DMA Length = %04x\n", data); - if (!(data & 0xc000)) // jak_dora writes 0xffff here which ends up trashing registers etc. why? such writes can't be valid - do_cpu_dma(data); - - break; - - default: - LOGMASKED(LOG_UNKNOWN_IO, "io_w: Unknown register %04x = %04x\n", 0x3d00 + offset, data); - m_io_regs[offset] = data; - break; - } -} - -void spg2xx_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_TMB1: - { - LOGMASKED(LOG_TIMERS, "TMB1 elapsed, setting IRQ Status bit 0 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 1, IO_IRQ_ENABLE); - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS |= 1; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(0x0001); - break; - } - - case TIMER_TMB2: - { - LOGMASKED(LOG_TIMERS, "TMB2 elapsed, setting IRQ Status bit 1 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 2, IO_IRQ_ENABLE); - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS |= 2; - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(0x0002); - break; - } - - case TIMER_SCREENPOS: - { - if (VIDEO_IRQ_ENABLE & 2) - { - VIDEO_IRQ_STATUS |= 2; - check_video_irq(); - } - m_screen->update_partial(m_screen->vpos()); - - // fire again, jak_dbz pinball needs this - m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1)); - break; - } - - case TIMER_UART_TX: - uart_transmit_tick(); - break; - - case TIMER_UART_RX: - uart_receive_tick(); - break; - - case TIMER_4KHZ: - system_timer_tick(); - break; - - case TIMER_SRC_AB: - update_timer_ab_src(); - break; - - case TIMER_SRC_C: - update_timer_c_src(); - break; - } -} - -void spg2xx_device::system_timer_tick() -{ - const uint16_t old = IO_IRQ_STATUS; - uint16_t check_mask = 0x0040; - IO_IRQ_STATUS |= 0x0040; - - m_2khz_divider++; - if (m_2khz_divider == 2) - { - m_2khz_divider = 0; - IO_IRQ_STATUS |= 0x0020; - check_mask |= 0x0020; - - m_1khz_divider++; - if (m_1khz_divider == 2) - { - m_1khz_divider = 0; - IO_IRQ_STATUS |= 0x0010; - check_mask |= 0x0010; - - m_4hz_divider++; - if (m_4hz_divider == 256) - { - m_4hz_divider = 0; - IO_IRQ_STATUS |= 0x0008; - check_mask |= 0x0008; - } - } - } - - const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); - if (changed) - check_irqs(check_mask); -} - -void spg2xx_device::uart_transmit_tick() +WRITE_LINE_MEMBER(spg2xx_device::audioirq_w) { - LOGMASKED(LOG_UART, "uart_transmit_tick: Transmitting %02x, setting TxReady, clearing TxBusy\n", (uint8_t)m_io_regs[0x35]); - m_uart_tx((uint8_t)m_io_regs[0x35]); - m_io_regs[0x31] |= 0x0002; - m_io_regs[0x31] &= ~0x0040; - if (BIT(m_io_regs[0x30], 1)) - { - const uint16_t old = IO_IRQ_STATUS; - IO_IRQ_STATUS |= 0x0100; - m_uart_tx_irq = true; - LOGMASKED(LOG_UART, "uart_transmit_tick: Setting UART IRQ bit\n"); - if (IO_IRQ_STATUS != old) - { - LOGMASKED(LOG_UART, "uart_transmit_tick: Bit newly set, checking IRQs\n"); - check_irqs(0x0100); - } - } + m_cpu->set_state_unsynced(UNSP_IRQ4_LINE, state); } -void spg2xx_device::uart_receive_tick() +WRITE_LINE_MEMBER(spg2xx_device::extirq_w) { - LOGMASKED(LOG_UART, "uart_receive_tick: Setting RBF and RxRDY\n"); - m_io_regs[0x31] |= 0x81; - m_uart_rx_available = true; - if (BIT(m_io_regs[0x30], 0)) - { - LOGMASKED(LOG_UART, "uart_receive_tick: RxIntEn is set, setting rx_irq to true and setting UART IRQ\n"); - m_uart_rx_irq = true; - IO_IRQ_STATUS |= 0x0100; - check_irqs(0x0100); - } + m_cpu->set_state_unsynced(UNSP_IRQ5_LINE, state); } -void spg2xx_device::extint_w(int channel, bool state) +WRITE_LINE_MEMBER(spg2xx_device::ffreq1_w) { - LOGMASKED(LOG_EXTINT, "Setting extint channel %d to %s\n", channel, state ? "true" : "false"); - bool old = m_extint[channel]; - m_extint[channel] = state; - if (old != state) - { - check_extint_irq(channel); - } + m_cpu->set_state_unsynced(UNSP_IRQ6_LINE, state); } -void spg2xx_device::check_extint_irq(int channel) +WRITE_LINE_MEMBER(spg2xx_device::ffreq2_w) { - LOGMASKED(LOG_EXTINT, "%sing extint %d interrupt\n", m_extint[channel] ? "rais" : "lower", channel + 1); - const uint16_t mask = (channel == 0) ? 0x0200 : 0x1000; - const uint16_t old_irq = IO_IRQ_STATUS; - if (m_extint[channel]) - IO_IRQ_STATUS |= mask; - else - IO_IRQ_STATUS &= ~mask; - - if (old_irq != IO_IRQ_STATUS) - { - LOGMASKED(LOG_EXTINT, "extint IRQ changed, so checking interrupts\n"); - check_irqs(mask); - } + m_cpu->set_state_unsynced(UNSP_IRQ7_LINE, state); } -void spg2xx_device::check_irqs(const uint16_t changed) -{ - // { - // m_cpu->set_state_unsynced(UNSP_IRQ1_LINE, ASSERT_LINE); - // } - - if (changed & 0x0c00) // Timer A, Timer B IRQ - { - LOGMASKED(LOG_TIMERS, "%ssserting IRQ2 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00), changed); - m_cpu->set_state_unsynced(UNSP_IRQ2_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? ASSERT_LINE : CLEAR_LINE); - } - - if (changed & 0x2100) // UART, ADC IRQ - { - LOGMASKED(LOG_UART, "%ssserting IRQ3 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100), changed); - m_cpu->set_state_unsynced(UNSP_IRQ3_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? ASSERT_LINE : CLEAR_LINE); - } - if (changed & 0x1200) // External IRQ - { - LOGMASKED(LOG_UART, "%ssserting IRQ5 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200), changed); - m_cpu->set_state_unsynced(UNSP_IRQ5_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? ASSERT_LINE : CLEAR_LINE); - } - if (changed & 0x0070) // 1024Hz, 2048Hz, 4096Hz IRQ - { - LOGMASKED(LOG_TIMERS, "%ssserting IRQ6 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070), changed); - m_cpu->set_state_unsynced(UNSP_IRQ6_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? ASSERT_LINE : CLEAR_LINE); - } - - if (changed & 0x008b) // TMB1, TMB2, 4Hz, key change IRQ - { - LOGMASKED(LOG_IRQS, "%ssserting IRQ7 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b), changed); - m_cpu->set_state_unsynced(UNSP_IRQ7_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? ASSERT_LINE : CLEAR_LINE); - } -} - -uint16_t spg2xx_device::do_special_gpio(uint32_t index, uint16_t mask) +READ16_MEMBER(spg2xx_device::space_r) { - uint16_t data = 0; - switch (index) - { - case 0: // Port A - if (mask & 0xe000) - { - const uint8_t csel = m_cpu->get_csb() & 0x0e; - data = (csel << 12) & mask; - } - break; - case 1: // Port B - // To do - break; - case 2: // Port C - // To do - break; - default: - // Can't happen - break; - } - return data; + address_space &cpuspace = m_cpu->space(AS_PROGRAM); + return cpuspace.read_word(offset); } -void spg2xx_device::do_gpio(uint32_t offset, bool write) +void spg2xx_device::configure_spg_io(spg2xx_io_device* io) { - uint32_t index = (offset - 1) / 5; - uint16_t buffer = m_io_regs[5 * index + 2]; - uint16_t dir = m_io_regs[5 * index + 3]; - uint16_t attr = m_io_regs[5 * index + 4]; - uint16_t special = m_io_regs[5 * index + 5]; - - uint16_t push = dir; - uint16_t pull = ~dir; - uint16_t what = (buffer & (push | pull)); - what ^= (dir & ~attr); - what &= ~special; - - switch (index) - { - case 0: - if (write) - m_porta_out(0, what, push &~ special); - what = (what & ~pull); - if (!write) - what |= m_porta_in(0, pull &~ special) & pull; - break; - case 1: - if (write) - m_portb_out(0, what, push &~ special); - what = (what & ~pull); - if (!write) - what |= m_portb_in(0, pull &~ special) & pull; - break; - case 2: - if (write) - m_portc_out(0, what, push &~ special); - what = (what & ~pull); - if (!write) - what |= m_portc_in(0, pull &~ special) & pull; - break; - } - - what |= do_special_gpio(index, special); - m_io_regs[5 * index + 1] = what; + io->porta_in().set(FUNC(spg2xx_device::porta_r)); + io->portb_in().set(FUNC(spg2xx_device::portb_r)); + io->portc_in().set(FUNC(spg2xx_device::portc_r)); + io->porta_out().set(FUNC(spg2xx_device::porta_w)); + io->portb_out().set(FUNC(spg2xx_device::portb_w)); + io->portc_out().set(FUNC(spg2xx_device::portc_w)); + io->adc_in<0>().set(FUNC(spg2xx_device::adc_r<0>)); + io->adc_in<1>().set(FUNC(spg2xx_device::adc_r<1>)); + io->eeprom_w().set(FUNC(spg2xx_device::eepromx_w)); + io->eeprom_r().set(FUNC(spg2xx_device::eepromx_r)); + io->uart_tx().set(FUNC(spg2xx_device::tx_w)); + io->chip_select().set(FUNC(spg2xx_device::cs_w)); + io->pal_read_callback().set(FUNC(spg2xx_device::get_pal_ntsc)); + io->write_timer_irq_callback().set(FUNC(spg2xx_device::timerirq_w)); + io->write_uart_adc_irq_callback().set(FUNC(spg2xx_device::uartirq_w)); + io->write_external_irq_callback().set(FUNC(spg2xx_device::extirq_w)); + io->write_ffrq_tmr1_irq_callback().set(FUNC(spg2xx_device::ffreq1_w)); + io->write_ffrq_tmr2_irq_callback().set(FUNC(spg2xx_device::ffreq2_w)); } -void spg2xx_device::do_i2c() +void spg24x_device::device_add_mconfig(machine_config &config) { - const uint16_t addr = ((m_io_regs[0x5b] & 0x06) << 7) | (uint8_t)m_io_regs[0x5c]; - - if (m_io_regs[0x58] & 0x40) // Serial EEPROM read - m_io_regs[0x5e] = m_eeprom_r(addr); - else - m_eeprom_w(addr, m_io_regs[0x5d]); - - m_io_regs[0x59] |= 1; -} + SPG2XX_AUDIO(config, m_spg_audio, DERIVED_CLOCK(1, 1)); + m_spg_audio->write_irq_callback().set(FUNC(spg24x_device::audioirq_w)); + m_spg_audio->space_read_callback().set(FUNC(spg24x_device::space_r)); -void spg2xx_device::do_cpu_dma(uint32_t len) -{ - address_space &mem = m_cpu->space(AS_PROGRAM); + m_spg_audio->add_route(0, *this, 1.0, AUTO_ALLOC_INPUT, 0); + m_spg_audio->add_route(1, *this, 1.0, AUTO_ALLOC_INPUT, 1); - uint32_t src = ((m_io_regs[0x101] & 0x3f) << 16) | m_io_regs[0x100]; - uint32_t dst = m_io_regs[0x103] & 0x3fff; + SPG24X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), m_cpu, m_screen); + configure_spg_io(m_spg_io); - for (uint32_t j = 0; j < len; j++) - { - mem.write_word((dst + j) & 0x3fff, mem.read_word(src + j)); - } + SPG2XX_SYSDMA(config, m_spg_sysdma, DERIVED_CLOCK(1, 1), m_cpu); - src += len; - m_io_regs[0x100] = (uint16_t)src; - m_io_regs[0x101] = (src >> 16) & 0x3f; - m_io_regs[0x102] = 0; - m_io_regs[0x103] = (dst + len) & 0x3fff; + SPG24X_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), m_cpu, m_screen); + m_spg_video->sprlimit_read_callback().set(FUNC(spg24x_device::get_sprlimit)); + m_spg_video->rowscrolloffset_read_callback().set(FUNC(spg24x_device::get_rowscrolloffset)); + m_spg_video->write_video_irq_callback().set(FUNC(spg24x_device::videoirq_w)); } -void spg2xx_device::device_add_mconfig(machine_config &config) +void spg28x_device::device_add_mconfig(machine_config &config) { SPG2XX_AUDIO(config, m_spg_audio, DERIVED_CLOCK(1, 1)); - m_spg_audio->write_irq_callback().set(FUNC(spg2xx_device::audioirq_w)); - m_spg_audio->space_read_callback().set(FUNC(spg2xx_device::space_r)); + m_spg_audio->write_irq_callback().set(FUNC(spg28x_device::audioirq_w)); + m_spg_audio->space_read_callback().set(FUNC(spg28x_device::space_r)); m_spg_audio->add_route(0, *this, 1.0, AUTO_ALLOC_INPUT, 0); m_spg_audio->add_route(1, *this, 1.0, AUTO_ALLOC_INPUT, 1); + + SPG28X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), m_cpu, m_screen); + configure_spg_io(m_spg_io); + + SPG2XX_SYSDMA(config, m_spg_sysdma, DERIVED_CLOCK(1, 1), m_cpu); + + SPG24X_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), m_cpu, m_screen); + m_spg_video->sprlimit_read_callback().set(FUNC(spg28x_device::get_sprlimit)); + m_spg_video->rowscrolloffset_read_callback().set(FUNC(spg28x_device::get_rowscrolloffset)); + m_spg_video->write_video_irq_callback().set(FUNC(spg28x_device::videoirq_w)); } diff --git a/src/devices/machine/spg2xx.h b/src/devices/machine/spg2xx.h index b35559d0dd3..806e8395c4d 100644 --- a/src/devices/machine/spg2xx.h +++ b/src/devices/machine/spg2xx.h @@ -36,6 +36,9 @@ #include "cpu/unsp/unsp.h" #include "spg2xx_audio.h" +#include "spg2xx_io.h" +#include "spg2xx_sysdma.h" +#include "spg2xx_video.h" #include "screen.h" class spg2xx_device : public device_t, public device_mixer_interface @@ -64,14 +67,16 @@ public: auto chip_select() { return m_chip_sel.bind(); } - void uart_rx(uint8_t data); - - void extint_w(int channel, bool state); + required_device<spg2xx_audio_device> m_spg_audio; + required_device<spg2xx_io_device> m_spg_io; + required_device<spg2xx_sysdma_device> m_spg_sysdma; + required_device<spg2xx_video_device> m_spg_video; - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(vblank); + void extint_w(int channel, bool state) { m_spg_io->extint_w(channel, state); } + void uart_rx(uint8_t data) { m_spg_io->uart_rx(data); } - required_device<spg2xx_audio_device> m_spg_audio; + DECLARE_WRITE_LINE_MEMBER(vblank) { m_spg_video->vblank(state); } + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return m_spg_video->screen_update(screen, bitmap, cliprect); } protected: spg2xx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint32_t sprite_limit) @@ -80,132 +85,28 @@ protected: m_sprite_limit = sprite_limit; } - virtual void device_add_mconfig(machine_config &config) override; - - enum - { - PAGE_ENABLE_MASK = 0x0008, - PAGE_WALLPAPER_MASK = 0x0004, - - SPRITE_ENABLE_MASK = 0x0001, - SPRITE_COORD_TL_MASK = 0x0002, - - PAGE_DEPTH_FLAG_MASK = 0x3000, - PAGE_DEPTH_FLAG_SHIFT = 12, - PAGE_TILE_HEIGHT_MASK = 0x00c0, - PAGE_TILE_HEIGHT_SHIFT = 6, - PAGE_TILE_WIDTH_MASK = 0x0030, - PAGE_TILE_WIDTH_SHIFT = 4, - TILE_X_FLIP = 0x0004, - TILE_Y_FLIP = 0x0008 - }; - - DECLARE_READ16_MEMBER(video_r); - DECLARE_WRITE16_MEMBER(video_w); - - virtual DECLARE_READ16_MEMBER(io_r); - virtual DECLARE_WRITE16_MEMBER(io_w); - + DECLARE_WRITE_LINE_MEMBER(videoirq_w); DECLARE_WRITE_LINE_MEMBER(audioirq_w); - DECLARE_READ16_MEMBER(space_r); + DECLARE_WRITE_LINE_MEMBER(timerirq_w); + DECLARE_WRITE_LINE_MEMBER(uartirq_w); + DECLARE_WRITE_LINE_MEMBER(extirq_w); + DECLARE_WRITE_LINE_MEMBER(ffreq1_w); + DECLARE_WRITE_LINE_MEMBER(ffreq2_w); - void check_extint_irq(int channel); - void check_irqs(const uint16_t changed); - inline void check_video_irq(); + DECLARE_READ16_MEMBER(space_r); void spg2xx_map(address_map &map); - static const device_timer_id TIMER_TMB1 = 0; - static const device_timer_id TIMER_TMB2 = 1; - static const device_timer_id TIMER_SCREENPOS = 2; - static const device_timer_id TIMER_BEAT = 3; - static const device_timer_id TIMER_UART_TX = 4; - static const device_timer_id TIMER_UART_RX = 5; - static const device_timer_id TIMER_4KHZ = 6; - static const device_timer_id TIMER_SRC_AB = 7; - static const device_timer_id TIMER_SRC_C = 8; - virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - - void update_porta_special_modes(); - void update_portb_special_modes(); - void do_gpio(uint32_t offset, bool write); - uint16_t do_special_gpio(uint32_t index, uint16_t mask); - - void update_timer_b_rate(); - void update_timer_ab_src(); - void update_timer_c_src(); - void increment_timer_a(); - - void uart_transmit_tick(); - void uart_receive_tick(); - - void system_timer_tick(); - - void do_i2c(); - void do_cpu_dma(uint32_t len); - void do_sprite_dma(uint32_t len); - - enum blend_enable_t : bool - { - BlendOff = false, - BlendOn = true - }; - - enum rowscroll_enable_t : bool - { - RowScrollOff = false, - RowScrollOn = true - }; - - enum flipx_t : bool - { - FlipXOff = false, - FlipXOn = true - }; - - void apply_saturation(const rectangle &cliprect); - void apply_fade(const rectangle &cliprect); - - template<blend_enable_t Blend, rowscroll_enable_t RowScroll, flipx_t FlipX> - void blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile); - void blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs); - void blit_sprite(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t base_addr); - void blit_sprites(const rectangle &cliprect, uint32_t scanline, int depth); - - uint8_t mix_channel(uint8_t a, uint8_t b); - - uint32_t m_screenbuf[320 * 240]; - uint8_t m_rgb5_to_rgb8[32]; - uint32_t m_rgb555_to_rgb888[0x8000]; - - bool m_hide_page0; - bool m_hide_page1; - bool m_hide_sprites; - bool m_debug_sprites; - bool m_debug_blit; - bool m_debug_palette; - uint8_t m_sprite_index_to_debug; - - - uint16_t m_io_regs[0x200]; - uint8_t m_uart_rx_fifo[8]; - uint8_t m_uart_rx_fifo_start; - uint8_t m_uart_rx_fifo_end; - uint8_t m_uart_rx_fifo_count; - bool m_uart_rx_available; - bool m_uart_rx_irq; - bool m_uart_tx_irq; - - bool m_extint[2]; - - uint16_t m_video_regs[0x100]; - uint32_t m_sprite_limit; - int m_rowscrolloffset; // auto racing in 'zone60' minigames needs this to be 15, the JAKKS games (Star Wars Revenge of the sith - Gunship Battle, Wheel of Fortune, Namco Ms. Pac-Man 5-in-1 Pole Position) need it to be 0, where does it come from? + // TODO: these are fixed values, put them in relevant devices? + uint16_t m_sprite_limit; + uint16_t m_rowscrolloffset; // auto racing in 'zone60' minigames needs this to be 15, the JAKKS games (Star Wars Revenge of the sith - Gunship Battle, Wheel of Fortune, Namco Ms. Pac-Man 5-in-1 Pole Position) need it to be 0, where does it come from? uint16_t m_pal_flag; + DECLARE_READ16_MEMBER(get_sprlimit) { return m_sprite_limit; } + DECLARE_READ16_MEMBER(get_rowscrolloffset) { return m_rowscrolloffset; } + DECLARE_READ16_MEMBER(get_pal_ntsc) { return m_pal_flag; } devcb_write16 m_porta_out; devcb_write16 m_portb_out; @@ -223,31 +124,26 @@ protected: devcb_write8 m_chip_sel; - uint16_t m_timer_a_preload; - uint16_t m_timer_b_preload; - uint16_t m_timer_b_divisor; - uint16_t m_timer_b_tick_rate; - - emu_timer *m_tmb1; - emu_timer *m_tmb2; - emu_timer *m_timer_src_ab; - emu_timer *m_timer_src_c; emu_timer *m_screenpos_timer; - emu_timer *m_4khz_timer; - uint32_t m_2khz_divider; - uint32_t m_1khz_divider; - uint32_t m_4hz_divider; - - uint32_t m_uart_baud_rate; - emu_timer *m_uart_tx_timer; - emu_timer *m_uart_rx_timer; - required_device<unsp_device> m_cpu; required_device<screen_device> m_screen; - required_shared_ptr<uint16_t> m_scrollram; - required_shared_ptr<uint16_t> m_paletteram; - required_shared_ptr<uint16_t> m_spriteram; + + void configure_spg_io(spg2xx_io_device* io); + + DECLARE_READ16_MEMBER(porta_r) { return m_porta_in(); } + DECLARE_READ16_MEMBER(portb_r) { return m_portb_in(); } + DECLARE_READ16_MEMBER(portc_r) { return m_portc_in(); } + DECLARE_WRITE16_MEMBER(porta_w) { m_porta_out(offset, data, mem_mask); } + DECLARE_WRITE16_MEMBER(portb_w) { m_portb_out(offset, data, mem_mask); } + DECLARE_WRITE16_MEMBER(portc_w) { m_portc_out(offset, data, mem_mask); } + template <size_t Line> DECLARE_READ16_MEMBER(adc_r) { return m_adc_in[Line](); } + + DECLARE_WRITE8_MEMBER(eepromx_w) { m_eeprom_w(offset, data, mem_mask); } + DECLARE_READ8_MEMBER(eepromx_r) { return m_eeprom_r(); }; + + DECLARE_WRITE8_MEMBER(tx_w) { m_uart_tx(offset, data, mem_mask); } + DECLARE_WRITE8_MEMBER(cs_w) { m_chip_sel(offset, data, mem_mask); } }; class spg24x_device : public spg2xx_device @@ -262,6 +158,9 @@ public: } spg24x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_add_mconfig(machine_config &config) override; + }; class spg28x_device : public spg2xx_device @@ -277,7 +176,8 @@ public: spg28x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual DECLARE_WRITE16_MEMBER(io_w) override; + virtual void device_add_mconfig(machine_config &config) override; + }; DECLARE_DEVICE_TYPE(SPG24X, spg24x_device) diff --git a/src/devices/machine/spg2xx_audio.h b/src/devices/machine/spg2xx_audio.h index 2ea8b26651a..22f5108e405 100644 --- a/src/devices/machine/spg2xx_audio.h +++ b/src/devices/machine/spg2xx_audio.h @@ -204,7 +204,7 @@ protected: AUDIO_CHAN_OFFSET_MASK = 0xf0f, }; - + enum // at audio write offset 0x400 in spg2xx { diff --git a/src/devices/machine/spg2xx_io.cpp b/src/devices/machine/spg2xx_io.cpp new file mode 100644 index 00000000000..f8daaef5bd0 --- /dev/null +++ b/src/devices/machine/spg2xx_io.cpp @@ -0,0 +1,1313 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz + +/* this is used by the SPG110, SPG24x and SPG28x + basic I/O behavior is definitely the same on the SPG110 but + the rest needs verifying */ + +#include "emu.h" +#include "spg2xx_io.h" + +DEFINE_DEVICE_TYPE(SPG24X_IO, spg24x_io_device, "spg24x_io", "SPG240-series System-on-a-Chip I/O") +DEFINE_DEVICE_TYPE(SPG28X_IO, spg28x_io_device, "spg28x_io", "SPG280-series System-on-a-Chip I/O") + +#define LOG_IO_READS (1U << 1) +#define LOG_IO_WRITES (1U << 2) +#define LOG_UNKNOWN_IO (1U << 3) +#define LOG_IRQS (1U << 4) +#define LOG_VLINES (1U << 5) +#define LOG_GPIO (1U << 6) +#define LOG_UART (1U << 7) +#define LOG_I2C (1U << 8) +#define LOG_SEGMENT (1U << 10) +#define LOG_WATCHDOG (1U << 11) +#define LOG_TIMERS (1U << 12) +#define LOG_FIQ (1U << 25) +#define LOG_SIO (1U << 26) +#define LOG_EXT_MEM (1U << 27) +#define LOG_EXTINT (1U << 28) +#define LOG_IO (LOG_IO_READS | LOG_IO_WRITES | LOG_IRQS | LOG_GPIO | LOG_UART | LOG_I2C | LOG_TIMERS | LOG_EXTINT | LOG_UNKNOWN_IO) +#define LOG_ALL (LOG_IO | LOG_VLINES | LOG_SEGMENT | LOG_WATCHDOG | LOG_FIQ | LOG_SIO | LOG_EXT_MEM) + +#define VERBOSE (0) +#include "logmacro.h" + + +#define IO_IRQ_ENABLE m_io_regs[0x21] +#define IO_IRQ_STATUS m_io_regs[0x22] + +spg2xx_io_device::spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , m_porta_out(*this) + , m_portb_out(*this) + , m_portc_out(*this) + , m_porta_in(*this) + , m_portb_in(*this) + , m_portc_in(*this) + , m_adc_in{{*this}, {*this}} + , m_eeprom_w(*this) + , m_eeprom_r(*this) + , m_uart_tx(*this) + , m_chip_sel(*this) + , m_cpu(*this, finder_base::DUMMY_TAG) + , m_screen(*this, finder_base::DUMMY_TAG) + , m_pal_read_cb(*this) + , m_timer_irq_cb(*this) + , m_uart_adc_irq_cb(*this) + , m_external_irq_cb(*this) + , m_ffreq_tmr1_irq_cb(*this) + , m_ffreq_tmr2_irq_cb(*this) +{ +} + +spg24x_io_device::spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : spg2xx_io_device(mconfig, SPG24X_IO, tag, owner, clock, 256) +{ +} + +spg28x_io_device::spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : spg2xx_io_device(mconfig, SPG28X_IO, tag, owner, clock, 64) +{ +} + + +void spg2xx_io_device::device_start() +{ + m_porta_out.resolve_safe(); + m_portb_out.resolve_safe(); + m_portc_out.resolve_safe(); + m_porta_in.resolve_safe(0); + m_portb_in.resolve_safe(0); + m_portc_in.resolve_safe(0); + m_adc_in[0].resolve_safe(0x0fff); + m_adc_in[1].resolve_safe(0x0fff); + m_eeprom_w.resolve_safe(); + m_eeprom_r.resolve_safe(0); + m_uart_tx.resolve_safe(); + m_chip_sel.resolve_safe(); + m_pal_read_cb.resolve_safe(0); + + m_timer_irq_cb.resolve(); + m_uart_adc_irq_cb.resolve(); + m_external_irq_cb.resolve(); + m_ffreq_tmr1_irq_cb.resolve(); + m_ffreq_tmr2_irq_cb.resolve(); + + m_tmb1 = timer_alloc(TIMER_TMB1); + m_tmb2 = timer_alloc(TIMER_TMB2); + m_tmb1->adjust(attotime::never); + m_tmb2->adjust(attotime::never); + + m_uart_tx_timer = timer_alloc(TIMER_UART_TX); + m_uart_tx_timer->adjust(attotime::never); + + m_uart_rx_timer = timer_alloc(TIMER_UART_RX); + m_uart_rx_timer->adjust(attotime::never); + + m_4khz_timer = timer_alloc(TIMER_4KHZ); + m_4khz_timer->adjust(attotime::never); + + m_timer_src_ab = timer_alloc(TIMER_SRC_AB); + m_timer_src_ab->adjust(attotime::never); + + m_timer_src_c = timer_alloc(TIMER_SRC_C); + m_timer_src_c->adjust(attotime::never); + + save_item(NAME(m_timer_a_preload)); + save_item(NAME(m_timer_b_preload)); + save_item(NAME(m_timer_b_divisor)); + save_item(NAME(m_timer_b_tick_rate)); + + save_item(NAME(m_io_regs)); + + save_item(NAME(m_extint)); + + save_item(NAME(m_2khz_divider)); + save_item(NAME(m_1khz_divider)); + save_item(NAME(m_4hz_divider)); + + save_item(NAME(m_uart_baud_rate)); + +} + +void spg2xx_io_device::device_reset() +{ + memset(m_io_regs, 0, 0x100 * sizeof(uint16_t)); + + m_timer_a_preload = 0; + m_timer_b_preload = 0; + m_timer_b_divisor = 0; + m_timer_b_tick_rate = 0; + + m_io_regs[0x23] = 0x0028; + m_io_regs[0x2c] = 0x1418; + m_io_regs[0x2d] = 0x1658; + + m_uart_rx_available = false; + memset(m_uart_rx_fifo, 0, ARRAY_LENGTH(m_uart_rx_fifo)); + m_uart_rx_fifo_start = 0; + m_uart_rx_fifo_end = 0; + m_uart_rx_fifo_count = 0; + m_uart_tx_irq = false; + m_uart_rx_irq = false; + + memset(m_extint, 0, sizeof(bool) * 2); + + m_4khz_timer->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096)); + + m_2khz_divider = 0; + m_1khz_divider = 0; + m_4hz_divider = 0; +} + +/************************* +* Machine Hardware * +*************************/ + +void spg2xx_io_device::uart_rx(uint8_t data) +{ + LOGMASKED(LOG_UART, "uart_rx: Pulling %02x into receive FIFO\n", data); + if (BIT(m_io_regs[0x30], 6)) + { + m_uart_rx_fifo[m_uart_rx_fifo_end] = data; + m_uart_rx_fifo_end = (m_uart_rx_fifo_end + 1) % ARRAY_LENGTH(m_uart_rx_fifo); + m_uart_rx_fifo_count++; + if (m_uart_rx_timer->remaining() == attotime::never) + m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate)); + } +} + +READ16_MEMBER(spg2xx_io_device::io_r) +{ + static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" }; + static const char gpioports[] = { 'A', 'B', 'C' }; + + uint16_t val = m_io_regs[offset]; + + switch (offset) + { + case 0x01: case 0x06: case 0x0b: // GPIO Data Port A/B/C + do_gpio(offset, false); + LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]); + val = m_io_regs[offset]; + break; + + case 0x02: case 0x03: case 0x04: case 0x05: + case 0x07: case 0x08: case 0x09: case 0x0a: + case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Other GPIO regs + LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]); + break; + + case 0x10: // Timebase Control + LOGMASKED(LOG_IO_READS, "io_r: Timebase Control = %04x\n", val); + break; + + case 0x12: // Timer A Data + LOGMASKED(LOG_IO_WRITES, "io_r: Timer A Data = %04x\n", val); + break; + + case 0x1c: // Video line counter + val = m_screen->vpos(); + LOGMASKED(LOG_VLINES, "io_r: Video Line = %04x\n", val); + break; + + case 0x20: // System Control + LOGMASKED(LOG_IO_READS, "io_r: System Control = %04x\n", val); + break; + + case 0x21: // IRQ Control + LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Control = %04x\n", machine().describe_context(), val); + break; + + case 0x22: // IRQ Status + LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Status = %04x\n", machine().describe_context(), val); + break; + + case 0x23: // External Memory Control + LOGMASKED(LOG_IO_READS, "%s: io_r: Ext. Memory Control = %04x\n", machine().describe_context(), val); + break; + + case 0x25: // ADC Control + LOGMASKED(LOG_IO_READS, "io_r: ADC Control = %04x\n", val); + break; + + case 0x27: // ADC Data + { + m_io_regs[0x27] = 0; + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS &= ~0x2000; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(changed); + LOGMASKED(LOG_IO_READS, "%s: io_r: ADC Data = %04x\n", machine().describe_context(), val); + break; + } + + case 0x29: // Wakeup Source + LOGMASKED(LOG_IO_READS, "io_r: Wakeup Source = %04x\n", val); + break; + + case 0x2b: + { + uint16_t pal = m_pal_read_cb(); + LOGMASKED(LOG_IO_READS, "io_r: NTSC/PAL = %04x\n", pal); + return pal; + } + + case 0x2c: // PRNG 0 + { + const uint16_t value = m_io_regs[0x2c]; + m_io_regs[0x2c] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff; + return value; + } + + case 0x2d: // PRNG 1 + { + const uint16_t value = m_io_regs[0x2d]; + m_io_regs[0x2d] = ((value << 1) | (BIT(value, 14) ^ BIT(value, 13))) & 0x7fff; + return value; + } + + case 0x2e: // FIQ Source Select + LOGMASKED(LOG_FIQ, "io_r: FIQ Source Select = %04x\n", val); + break; + + case 0x2f: // Data Segment + val = m_cpu->get_ds(); + LOGMASKED(LOG_SEGMENT, "io_r: Data Segment = %04x\n", val); + break; + + default: + LOGMASKED(LOG_UNKNOWN_IO, "io_r: Unknown register %04x\n", 0x3d00 + offset); + break; + } + + return val; +} + +READ16_MEMBER(spg2xx_io_device::io_extended_r) +{ + // this set of registers might only be on the 24x not the 11x + + offset += 0x30; + + uint16_t val = m_io_regs[offset]; + + switch (offset) + { + case 0x30: // UART Control + LOGMASKED(LOG_UART, "%s: io_r: UART Control = %04x\n", machine().describe_context(), val); + break; + + case 0x31: // UART Status + //LOGMASKED(LOG_UART, "%s: io_r: UART Status = %04x\n", machine().describe_context(), val); + break; + + case 0x36: // UART RX Data + if (m_uart_rx_available) + { + m_io_regs[0x31] &= ~0x0081; + LOGMASKED(LOG_UART, "UART Rx data is available, clearing bits\n"); + if (m_uart_rx_fifo_count) + { + LOGMASKED(LOG_UART, "Remaining count %d, value %02x\n", m_uart_rx_fifo_count, m_uart_rx_fifo[m_uart_rx_fifo_start]); + m_io_regs[0x36] = m_uart_rx_fifo[m_uart_rx_fifo_start]; + val = m_io_regs[0x36]; + m_uart_rx_fifo_start = (m_uart_rx_fifo_start + 1) % ARRAY_LENGTH(m_uart_rx_fifo); + m_uart_rx_fifo_count--; + + if (m_uart_rx_fifo_count == 0) + { + m_uart_rx_available = false; + } + else + { + LOGMASKED(LOG_UART, "Remaining count %d, setting up timer\n", m_uart_rx_fifo_count); + //uart_receive_tick(); + if (m_uart_rx_timer->remaining() == attotime::never) + m_uart_rx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate)); + } + } + else + { + m_uart_rx_available = false; + } + } + else + { + m_io_regs[0x37] |= 0x2000; + } + LOGMASKED(LOG_UART, "%s: io_r: UART Rx Data = %04x\n", machine().describe_context(), val); + break; + + case 0x37: // UART Rx FIFO Control + val &= ~0x0070; + val |= (m_uart_rx_available ? 7 : 0) << 4; + LOGMASKED(LOG_UART, "io_r: UART Rx FIFO Control = %04x\n", machine().describe_context(), val); + break; + + case 0x51: // unknown, polled by ClickStart cartridges ( clikstrt ) + return 0x8000; + + case 0x59: // I2C Status + LOGMASKED(LOG_I2C, "io_r: I2C Status = %04x\n", val); + break; + + case 0x5e: // I2C Data In + LOGMASKED(LOG_I2C, "io_r: I2C Data In = %04x\n", val); + break; + + default: + LOGMASKED(LOG_UNKNOWN_IO, "io_r: Unknown register %04x\n", 0x3d00 + offset); + break; + } + + return val; +} + +void spg2xx_io_device::update_porta_special_modes() +{ + static const char* const s_pa_special[4][16] = + { + // Input, Special 0 + // Input, Special 1 + // Output, Special 0 + // Output, Special 1 + + { "LP", "ExtClk2", "ExtClk1", "-", "SDA", "SlvRDY", "-", "-", "SPICLK", "-", "RxD", "SPISSB", "-", "-", "-", "-" }, + { "-", "-", "-", "SCK", "-", "SWS", "-", "-", "-", "-", "-", "-", "IRQ2B", "-", "-", "IRQ1B" }, + { "-", "-", "-", "SCK", "SDA", "SWS", "-", "-", "SPICLK", "TxD", "-", "SPISSB", "TAPWM", "TM1", "TBPWM", "TM2" }, + { "CSB3", "CSB2", "CSB1", "SCK", "SDA", "VSYNC", "HSYNC", "SYSCLK3", "SPICLK", "TxD", "SWS", "SPISSB", "-", "VSYNC", "HSYNC", "CSYNC" }, + }; + for (int bit = 15; bit >= 0; bit--) + { + if (!BIT(m_io_regs[0x05], bit)) + continue; + uint8_t type = (BIT(m_io_regs[0x03], bit) << 1) | BIT(m_io_regs[0x00], 0); + LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pa_special[type][bit]); + } +} + +void spg2xx_io_device::update_portb_special_modes() +{ + static const char* const s_pb_special[4][8] = + { + // Input, Special 0 + // Input, Special 1 + // Output, Special 0 + // Output, Special 1 + + { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" }, + { "-", "-", "-", "-", "-", "-", "SDA", "SlvRDY" }, + { "VSYNC", "HSYNC", "CSYNC", "-", "-", "SCK", "SDA", "SWS" }, + { "CSB3", "CSB2", "CSB1", "TBPWM", "TM2", "-", "-", "SYSCLK2" }, + }; + for (int bit = 7; bit >= 0; bit--) + { + if (!BIT(m_io_regs[0x0a], bit)) + continue; + uint8_t type = (BIT(m_io_regs[0x08], bit) << 1) | BIT(m_io_regs[0x00], 1); + LOGMASKED(LOG_GPIO, " Bit %2d: %s\n", bit, s_pb_special[type][bit]); + } +} + +void spg2xx_io_device::update_timer_b_rate() +{ + switch (m_io_regs[0x17] & 7) + { + case 0: + case 1: + case 5: + case 6: + case 7: + m_timer_src_c->adjust(attotime::never); + break; + case 2: + m_timer_src_c->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768)); + break; + case 3: + m_timer_src_c->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192)); + break; + case 4: + m_timer_src_c->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096)); + break; + } +} + +void spg2xx_io_device::update_timer_ab_src() +{ + if (m_timer_b_tick_rate == 0) + return; + + m_timer_b_divisor++; + if (m_timer_b_divisor >= m_timer_b_tick_rate) + { + m_timer_b_divisor = 0; + increment_timer_a(); + } +} + +void spg2xx_io_device::increment_timer_a() +{ + m_io_regs[0x12]++; + if (m_io_regs[0x12] == 0) + { + m_io_regs[0x12] = m_timer_a_preload; + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS |= 0x0800; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + { + //printf("Timer A overflow\n"); + check_irqs(0x0800); + } + } +} + +void spg2xx_io_device::update_timer_c_src() +{ + m_io_regs[0x16]++; + if (m_io_regs[0x16] == 0) + { + m_io_regs[0x16] = m_timer_b_preload; + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS |= 0x0400; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + { + printf("Timer B overflow\n"); + check_irqs(0x0400); + } + } +} + + +WRITE16_MEMBER(spg28x_io_device::io_extended_w) +{ + offset += 0x30; + + if (offset == 0x33) + { + m_io_regs[offset] = data; + m_uart_baud_rate = 27000000 / (0x10000 - m_io_regs[0x33]); + LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate scaler = %04x (%d baud)\n", machine().describe_context(), data, m_uart_baud_rate); + } + else + { + spg2xx_io_device::io_extended_w(space, offset-0x30, data, mem_mask); + } +} + +WRITE16_MEMBER(spg2xx_io_device::io_w) +{ + static const char *const gpioregs[] = { "GPIO Data Port", "GPIO Buffer Port", "GPIO Direction Port", "GPIO Attribute Port", "GPIO IRQ/Latch Port" }; + static const char gpioports[3] = { 'A', 'B', 'C' }; + + switch (offset) + { + case 0x00: // GPIO special function select + { + LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Configuration = %04x (IOBWake:%d, IOAWake:%d, IOBSpecSel:%d, IOASpecSel:%d)\n", machine().describe_context(), data + , BIT(data, 4), BIT(data, 3), BIT(data, 1), BIT(data, 0)); + const uint16_t old = m_io_regs[offset]; + m_io_regs[offset] = data; + const uint16_t changed = old ^ data; + if (BIT(changed, 0)) + update_porta_special_modes(); + if (BIT(changed, 1)) + update_portb_special_modes(); + break; + } + + case 0x01: case 0x06: case 0x0b: // GPIO data, port A/B/C + offset++; + // Intentional fallthrough - we redirect data register writes to the buffer register. + + case 0x02: case 0x04: // Port A + case 0x07: case 0x09: // Port B + case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Port C + LOGMASKED(LOG_GPIO, "%s: io_w: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], data); + m_io_regs[offset] = data; + do_gpio(offset, true); + break; + + case 0x03: // Port A Direction + LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port A = %04x\n", machine().describe_context(), data); + m_io_regs[offset] = data; + update_porta_special_modes(); + do_gpio(offset, true); + break; + + case 0x08: // Port B Direction + LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port B = %04x\n", machine().describe_context(), data); + m_io_regs[offset] = data; + update_portb_special_modes(); + do_gpio(offset, true); + break; + + case 0x05: // Port A Special + LOGMASKED(LOG_GPIO, "%s: io_w: Port A Special Function Select: %04x\n", machine().describe_context(), data); + m_io_regs[offset] = data; + update_porta_special_modes(); + break; + + case 0x0a: // Port B Special + LOGMASKED(LOG_GPIO, "%s: io_w: Port B Special Function Select: %04x\n", machine().describe_context(), data); + m_io_regs[offset] = data; + update_portb_special_modes(); + break; + + case 0x10: // Timebase Control + { + static const char* const s_tmb1_sel[2][4] = + { + { "8Hz", "16Hz", "32Hz", "64Hz" }, + { "12kHz", "24kHz", "40kHz", "40kHz" } + }; + static const char* const s_tmb2_sel[2][4] = + { + { "128Hz", "256Hz", "512Hz", "1024Hz" }, + { "105kHz", "210kHz", "420kHz", "840kHz" } + }; + static const uint32_t s_tmb1_freq[2][4] = + { + { 8, 16, 32, 64 }, + { 12000, 24000, 40000, 40000 } + }; + static const uint32_t s_tmb2_freq[2][4] = + { + { 128, 256, 512, 1024 }, + { 105000, 210000, 420000, 840000 } + }; + LOGMASKED(LOG_TIMERS, "io_w: Timebase Control = %04x (Source:%s, TMB2:%s, TMB1:%s)\n", data, + BIT(data, 4) ? "27MHz" : "32768Hz", s_tmb2_sel[BIT(data, 4)][(data >> 2) & 3], s_tmb1_sel[BIT(data, 4)][data & 3]); + m_io_regs[offset] = data; + const uint8_t hifreq = BIT(data, 4); + const uint32_t tmb1freq = s_tmb1_freq[hifreq][data & 3]; + m_tmb1->adjust(attotime::from_hz(tmb1freq), 0, attotime::from_hz(tmb1freq)); + const uint32_t tmb2freq = s_tmb2_freq[hifreq][(data >> 2) & 3]; + m_tmb2->adjust(attotime::from_hz(tmb2freq), 0, attotime::from_hz(tmb2freq)); + break; + } + + case 0x11: // Timebase Clear + LOGMASKED(LOG_TIMERS, "io_w: Timebase Clear = %04x\n", data); + break; + + case 0x12: // Timer A Data + LOGMASKED(LOG_TIMERS, "io_w: Timer A Data = %04x\n", data); + m_io_regs[offset] = data; + m_timer_a_preload = data; + break; + + case 0x13: // Timer A Control + { + static const char* const s_source_a[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" }; + static const char* const s_source_b[8] = { "2048Hz", "1024Hz", "256Hz", "TMB1", "4Hz", "2Hz", "1", "ExtClk2" }; + LOGMASKED(LOG_TIMERS, "io_w: Timer A Control = %04x (Source A:%s, Source B:%s)\n", data, + s_source_a[data & 7], s_source_b[(data >> 3) & 7]); + m_io_regs[offset] = data; + int timer_a_rate = 0; + switch (data & 7) + { + case 0: + case 1: + case 5: + case 6: + case 7: + m_timer_src_ab->adjust(attotime::never); + break; + case 2: + m_timer_src_ab->adjust(attotime::from_hz(32768), 0, attotime::from_hz(32768)); + timer_a_rate = 32768; + break; + case 3: + m_timer_src_ab->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192)); + timer_a_rate = 8192; + break; + case 4: + m_timer_src_ab->adjust(attotime::from_hz(4096), 0, attotime::from_hz(4096)); + timer_a_rate = 4096; + break; + } + switch ((data >> 3) & 7) + { + case 0: + m_timer_b_tick_rate = timer_a_rate / 2048; + break; + case 1: + m_timer_b_tick_rate = timer_a_rate / 1024; + break; + case 2: + m_timer_b_tick_rate = timer_a_rate / 256; + break; + case 3: + m_timer_b_tick_rate = 0; + break; + case 4: + m_timer_b_tick_rate = timer_a_rate / 4; + break; + case 5: + m_timer_b_tick_rate = timer_a_rate / 2; + break; + case 6: + m_timer_b_tick_rate = 1; + break; + case 7: + m_timer_b_tick_rate = 0; + break; + } + break; + } + + case 0x15: // Timer A IRQ Clear + { + LOGMASKED(LOG_TIMERS, "io_w: Timer A IRQ Clear\n"); + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS &= ~0x0800; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(0x0800); + break; + } + + case 0x16: // Timer B Data + LOGMASKED(LOG_TIMERS, "io_w: Timer B Data = %04x\n", data); + m_io_regs[offset] = data; + m_timer_b_preload = data; + break; + + case 0x17: // Timer B Control + { + static const char* const s_source_c[8] = { "0", "0", "32768Hz", "8192Hz", "4096Hz", "1", "0", "ExtClk1" }; + LOGMASKED(LOG_TIMERS, "io_w: Timer B Control = %04x (Source C:%s)\n", data, s_source_c[data & 7]); + m_io_regs[offset] = data; + if (m_io_regs[0x18] == 1) + { + update_timer_b_rate(); + } + break; + } + + case 0x18: // Timer B Enable + { + LOGMASKED(LOG_TIMERS, "io_w: Timer B Enable = %04x\n", data); + m_io_regs[offset] = data & 1; + if (data & 1) + { + update_timer_b_rate(); + } + else + { + m_timer_src_c->adjust(attotime::never); + } + break; + } + + case 0x19: // Timer B IRQ Clear + { + LOGMASKED(LOG_TIMERS, "io_w: Timer B IRQ Clear\n"); + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS &= ~0x0400; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(0x0400); + break; + } + + case 0x20: // System Control + { + static const char* const s_sysclk[4] = { "13.5MHz", "27MHz", "27MHz NoICE", "54MHz" }; + static const char* const s_lvd_voltage[4] = { "2.7V", "2.9V", "3.1V", "3.3V" }; + static const char* const s_weak_strong[2] = { "Weak", "Strong" }; + LOGMASKED(LOG_IO_WRITES, "io_w: System Control = %04x (Watchdog:%d, Sleep:%d, SysClk:%s, SysClkInv:%d, LVROutEn:%d, LVREn:%d\n" + , data, BIT(data, 15), BIT(data, 14), s_sysclk[(data >> 12) & 3], BIT(data, 11), BIT(data, 9), BIT(data, 8)); + LOGMASKED(LOG_IO_WRITES, " LVDEn:%d, LVDVoltSel:%s, 32kHzDisable:%d, StrWkMode:%s, VDACDisable:%d, ADACDisable:%d, ADACOutDisable:%d)\n" + , BIT(data, 7), s_lvd_voltage[(data >> 5) & 3], BIT(data, 4), s_weak_strong[BIT(data, 3)], BIT(data, 2), BIT(data, 1), BIT(data, 0)); + m_io_regs[offset] = data; + break; + } + + case 0x21: // IRQ Enable + { + LOGMASKED(LOG_IRQS, "io_w: IRQ Enable = %04x\n", data); + const uint16_t old = IO_IRQ_ENABLE; + m_io_regs[offset] = data; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(changed); + break; + } + + case 0x22: // IRQ Acknowledge + { + LOGMASKED(LOG_IRQS, "io_w: IRQ Acknowledge = %04x\n", data); + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS &= ~data; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (m_uart_rx_irq || m_uart_tx_irq) + { + LOGMASKED(LOG_IRQS | LOG_UART, "Re-setting UART IRQ due to still-unacknowledged Rx or Tx.\n"); + IO_IRQ_STATUS |= 0x0100; + } + if (changed) + check_irqs(changed); + break; + } + + case 0x23: // External Memory Control + { + static const char* const s_bus_arb[8] = + { + "Forbidden", "Forbidden", "Forbidden", "Forbidden", "Forbidden", "1:SPU/2:PPU/3:CPU", "Forbidden", "1:PPU/2:SPU/3:CPU" + }; + static const char* const s_addr_decode[4] = + { + "ROMCSB: 4000-3fffff, CSB1: ---, CSB2: ---, CSB3: ---", + "ROMCSB: 4000-1fffff, CSB1: 200000-3fffff, CSB2: ---, CSB3: ---", + "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff", + "ROMCSB: 4000-0fffff, CSB1: 100000-1fffff, CSB2: 200000-2fffff, CSB3: 300000-3fffff" + }; + static const char* const s_ram_decode[16] = + { + "None", "None", "None", "None", "None", "None", "None", "None", + "4KW, 3ff000-3fffff\n", + "8KW, 3fe000-3fffff\n", + "16KW, 3fc000-3fffff\n", + "32KW, 3f8000-3fffff\n", + "64KW, 3f0000-3fffff\n", + "128KW, 3e0000-3fffff\n", + "256KW, 3c0000-3fffff\n", + "512KW, 380000-3fffff\n" + }; + LOGMASKED(LOG_EXT_MEM, "io_w: Ext. Memory Control (not yet implemented) = %04x:\n", data); + LOGMASKED(LOG_EXT_MEM, " WaitStates:%d, BusArbPrio:%s\n", (data >> 1) & 3, s_bus_arb[(data >> 3) & 7]); + LOGMASKED(LOG_EXT_MEM, " ROMAddrDecode:%s\n", s_addr_decode[(data >> 6) & 3]); + LOGMASKED(LOG_EXT_MEM, " RAMAddrDecode:%s\n", s_ram_decode[(data >> 8) & 15]); + m_chip_sel((data >> 6) & 3); + m_io_regs[offset] = data; + break; + } + + case 0x24: // Watchdog + LOGMASKED(LOG_WATCHDOG, "io_w: Watchdog Pet = %04x\n", data); + break; + + case 0x25: // ADC Control + { + LOGMASKED(LOG_IO_WRITES, "%s: io_w: ADC Control = %04x\n", machine().describe_context(), data); + m_io_regs[offset] = data & ~0x1000; + if (BIT(data, 0)) + { + m_io_regs[0x27] = 0x8000 | (m_adc_in[BIT(data, 5)]() & 0x7fff); + m_io_regs[0x25] |= 0x2000; + } + if (BIT(data, 12) && !BIT(m_io_regs[offset], 1)) + { + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS |= 0x2000; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + { + check_irqs(changed); + } + } + break; + } + + case 0x28: // Sleep Mode + LOGMASKED(LOG_IO_WRITES, "io_w: Sleep Mode (%s enter value) = %04x\n", data == 0xaa55 ? "valid" : "invalid", data); + m_io_regs[offset] = data; + break; + + case 0x29: // Wakeup Source + { + m_io_regs[offset] = data; + static const char* const s_sources[8] = + { + "TMB1", "TMB2", "2Hz", "4Hz", "1024Hz", "2048Hz", "4096Hz", "Key" + }; + + LOGMASKED(LOG_IO_WRITES, "io_w: Wakeup Source = %04x:\n", data); + bool comma = false; + char buf[1024]; + int char_idx = 0; + for (int i = 7; i >= 0; i--) + { + if (BIT(data, i)) + { + char_idx += sprintf(&buf[char_idx], "%s%s", comma ? ", " : "", s_sources[i]); + comma = true; + } + } + buf[char_idx] = 0; + LOGMASKED(LOG_IO_WRITES, " %s\n", buf); + break; + } + + case 0x2c: // PRNG 0 seed + LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 0 seed = %04x\n", data & 0x7fff); + m_io_regs[offset] = data & 0x7fff; + break; + + case 0x2d: // PRNG 1 seed + LOGMASKED(LOG_IO_WRITES, "io_w: PRNG 1 seed = %04x\n", data & 0x7fff); + m_io_regs[offset] = data & 0x7fff; + break; + + case 0x2e: // FIQ Source Select + { + static const char* const s_fiq_select[8] = + { + "PPU", "SPU Channel", "Timer A", "Timer B", "UART/SPI", "External", "Reserved", "None" + }; + LOGMASKED(LOG_FIQ, "io_w: FIQ Source Select (not yet implemented) = %04x, %s\n", data, s_fiq_select[data & 7]); + m_io_regs[offset] = data; + break; + } + + case 0x2f: // Data Segment + m_cpu->set_ds(data & 0x3f); + LOGMASKED(LOG_SEGMENT, "io_w: Data Segment = %04x\n", data); + break; + + default: + LOGMASKED(LOG_UNKNOWN_IO, "io_w: Unknown register %04x = %04x\n", 0x3d00 + offset, data); + m_io_regs[offset] = data; + break; + } +} + + + + +WRITE16_MEMBER(spg2xx_io_device::io_extended_w) +{ + // this set of registers might only be on the 24x not the 11x + + offset += 0x30; + + switch (offset) + { + + case 0x30: // UART Control + { + static const char* const s_9th_bit[4] = { "0", "1", "Odd", "Even" }; + LOGMASKED(LOG_UART, "%s: io_w: UART Control = %04x (TxEn:%d, RxEn:%d, Bits:%d, MultiProc:%d, 9thBit:%s, TxIntEn:%d, RxIntEn:%d\n", + machine().describe_context(), data, BIT(data, 7), BIT(data, 6), BIT(data, 5) ? 9 : 8, BIT(data, 4), s_9th_bit[(data >> 2) & 3], + BIT(data, 1), BIT(data, 0)); + const uint16_t changed = m_io_regs[offset] ^ data; + m_io_regs[offset] = data; + if (!BIT(data, 6)) + { + m_uart_rx_available = false; + m_io_regs[0x36] = 0; + } + if (BIT(changed, 7)) + { + if (BIT(data, 7)) + { + m_io_regs[0x31] |= 0x0002; + } + else + { + m_io_regs[0x31] &= ~0x0042; + m_uart_tx_timer->adjust(attotime::never); + } + } + break; + } + + case 0x31: // UART Status + LOGMASKED(LOG_UART, "%s: io_w: UART Status = %04x\n", machine().describe_context(), data); + if (BIT(data, 0)) + { + m_io_regs[0x31] &= ~1; + m_uart_rx_irq = false; + } + if (BIT(data, 1)) + { + m_io_regs[0x31] &= ~2; + m_uart_tx_irq = false; + } + if (!m_uart_rx_irq && !m_uart_tx_irq) + { + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS &= ~0x0100; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(0x0100); + } + break; + + case 0x33: // UART Baud Rate (low byte) + case 0x34: // UART Baud Rate (high byte) + { + m_io_regs[offset] = data; + const uint32_t divisor = 16 * (0x10000 - ((m_io_regs[0x34] << 8) | m_io_regs[0x33])); + LOGMASKED(LOG_UART, "%s: io_w: UART Baud Rate (%s byte): Baud rate = %d\n", offset == 0x33 ? "low" : "high", machine().describe_context(), 27000000 / divisor); + m_uart_baud_rate = 27000000 / divisor; + break; + } + + case 0x35: // UART TX Data + LOGMASKED(LOG_UART, "%s: io_w: UART Tx Data = %02x\n", machine().describe_context(), data & 0x00ff); + m_io_regs[offset] = data; + if (BIT(m_io_regs[0x30], 7)) + { + LOGMASKED(LOG_UART, "io_w: UART Tx: Clearing ready bit, setting busy bit, setting up timer\n"); + m_uart_tx_timer->adjust(attotime::from_ticks(BIT(m_io_regs[0x30], 5) ? 11 : 10, m_uart_baud_rate)); + m_io_regs[0x31] &= ~0x0002; + m_io_regs[0x31] |= 0x0040; + } + break; + + case 0x36: // UART RX Data + LOGMASKED(LOG_UART, "%s: io_w: UART Rx Data (read-only) = %04x\n", machine().describe_context(), data); + break; + + case 0x37: // UART Rx FIFO Control + LOGMASKED(LOG_UART, "%s: io_w: UART Rx FIFO Control = %04x (Reset:%d, Overrun:%d, Underrun:%d, Count:%d, Threshold:%d)\n", + machine().describe_context(), data, BIT(data, 15), BIT(data, 14), BIT(data, 13), (data >> 4) & 7, data & 7); + if (data & 0x8000) + { + m_uart_rx_available = false; + m_io_regs[0x36] = 0; + } + m_io_regs[offset] &= ~data & 0x6000; + m_io_regs[offset] &= ~0x0007; + m_io_regs[offset] |= data & 0x0007; + break; + + case 0x50: // SIO Setup + { + static const char* const s_addr_mode[4] = { "16-bit", "None", "8-bit", "24-bit" }; + static const char* const s_baud_rate[4] = { "/16", "/4", "/8", "/32" }; + LOGMASKED(LOG_SIO, "io_w: SIO Setup (not implemented) = %04x (DS301Ready:%d, Start:%d, Auto:%d, IRQEn:%d, Width:%d, Related:%d\n", data + , BIT(data, 11), BIT(data, 10), BIT(data, 9), BIT(data, 8), BIT(data, 7) ? 16 : 8, BIT(data, 6)); + LOGMASKED(LOG_SIO, " (Mode:%s, RWProtocol:%d, Rate:sysclk%s, AddrMode:%s)\n" + , BIT(data, 5), BIT(data, 4), s_baud_rate[(data >> 2) & 3], s_addr_mode[data & 3]); + break; + } + + case 0x52: // SIO Start Address (low) + LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (low) (not implemented) = %04x\n", data); + break; + + case 0x53: // SIO Start Address (hi) + LOGMASKED(LOG_SIO, "io_w: SIO Stat Address (hi) (not implemented) = %04x\n", data); + break; + + case 0x54: // SIO Data + LOGMASKED(LOG_SIO, "io_w: SIO Data (not implemented) = %04x\n", data); + break; + + case 0x55: // SIO Automatic Transmit Count + LOGMASKED(LOG_SIO, "io_w: SIO Auto Transmit Count (not implemented) = %04x\n", data); + break; + + case 0x58: // I2C Command + LOGMASKED(LOG_I2C, "io_w: I2C Command = %04x\n", data); + m_io_regs[offset] = data; + do_i2c(); + break; + + case 0x59: // I2C Status / Acknowledge + LOGMASKED(LOG_I2C, "io_w: I2C Acknowledge = %04x\n", data); + m_io_regs[offset] &= ~data; + break; + + case 0x5a: // I2C Access Mode + LOGMASKED(LOG_I2C, "io_w: I2C Access Mode = %04x\n", data); + m_io_regs[offset] = data; + break; + + case 0x5b: // I2C Device Address + LOGMASKED(LOG_I2C, "io_w: I2C Device Address = %04x\n", data); + m_io_regs[offset] = data; + break; + + case 0x5c: // I2C Sub-Address + LOGMASKED(LOG_I2C, "io_w: I2C Sub-Address = %04x\n", data); + m_io_regs[offset] = data; + break; + + case 0x5d: // I2C Data Out + LOGMASKED(LOG_I2C, "io_w: I2C Data Out = %04x\n", data); + m_io_regs[offset] = data; + break; + + case 0x5e: // I2C Data In + LOGMASKED(LOG_I2C, "io_w: I2C Data In = %04x\n", data); + m_io_regs[offset] = data; + break; + + case 0x5f: // I2C Controller Mode + LOGMASKED(LOG_I2C, "io_w: I2C Controller Mode = %04x\n", data); + m_io_regs[offset] = data; + break; + + default: + LOGMASKED(LOG_UNKNOWN_IO, "io_w: Unknown register %04x = %04x\n", 0x3d00 + offset, data); + m_io_regs[offset] = data; + break; + } +} + +void spg2xx_io_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case TIMER_TMB1: + { + LOGMASKED(LOG_TIMERS, "TMB1 elapsed, setting IRQ Status bit 0 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 1, IO_IRQ_ENABLE); + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS |= 1; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(0x0001); + break; + } + + case TIMER_TMB2: + { + LOGMASKED(LOG_TIMERS, "TMB2 elapsed, setting IRQ Status bit 1 (old:%04x, new:%04x, enable:%04x)\n", IO_IRQ_STATUS, IO_IRQ_STATUS | 2, IO_IRQ_ENABLE); + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS |= 2; + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(0x0002); + break; + } + + case TIMER_UART_TX: + uart_transmit_tick(); + break; + + case TIMER_UART_RX: + uart_receive_tick(); + break; + + case TIMER_4KHZ: + system_timer_tick(); + break; + + case TIMER_SRC_AB: + update_timer_ab_src(); + break; + + case TIMER_SRC_C: + update_timer_c_src(); + break; + } +} + +void spg2xx_io_device::system_timer_tick() +{ + const uint16_t old = IO_IRQ_STATUS; + uint16_t check_mask = 0x0040; + IO_IRQ_STATUS |= 0x0040; + + m_2khz_divider++; + if (m_2khz_divider == 2) + { + m_2khz_divider = 0; + IO_IRQ_STATUS |= 0x0020; + check_mask |= 0x0020; + + m_1khz_divider++; + if (m_1khz_divider == 2) + { + m_1khz_divider = 0; + IO_IRQ_STATUS |= 0x0010; + check_mask |= 0x0010; + + m_4hz_divider++; + if (m_4hz_divider == 256) + { + m_4hz_divider = 0; + IO_IRQ_STATUS |= 0x0008; + check_mask |= 0x0008; + } + } + } + + const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE); + if (changed) + check_irqs(check_mask); +} + +void spg2xx_io_device::uart_transmit_tick() +{ + LOGMASKED(LOG_UART, "uart_transmit_tick: Transmitting %02x, setting TxReady, clearing TxBusy\n", (uint8_t)m_io_regs[0x35]); + m_uart_tx((uint8_t)m_io_regs[0x35]); + m_io_regs[0x31] |= 0x0002; + m_io_regs[0x31] &= ~0x0040; + if (BIT(m_io_regs[0x30], 1)) + { + const uint16_t old = IO_IRQ_STATUS; + IO_IRQ_STATUS |= 0x0100; + m_uart_tx_irq = true; + LOGMASKED(LOG_UART, "uart_transmit_tick: Setting UART IRQ bit\n"); + if (IO_IRQ_STATUS != old) + { + LOGMASKED(LOG_UART, "uart_transmit_tick: Bit newly set, checking IRQs\n"); + check_irqs(0x0100); + } + } +} + +void spg2xx_io_device::uart_receive_tick() +{ + LOGMASKED(LOG_UART, "uart_receive_tick: Setting RBF and RxRDY\n"); + m_io_regs[0x31] |= 0x81; + m_uart_rx_available = true; + if (BIT(m_io_regs[0x30], 0)) + { + LOGMASKED(LOG_UART, "uart_receive_tick: RxIntEn is set, setting rx_irq to true and setting UART IRQ\n"); + m_uart_rx_irq = true; + IO_IRQ_STATUS |= 0x0100; + check_irqs(0x0100); + } +} + +void spg2xx_io_device::extint_w(int channel, bool state) +{ + LOGMASKED(LOG_EXTINT, "Setting extint channel %d to %s\n", channel, state ? "true" : "false"); + bool old = m_extint[channel]; + m_extint[channel] = state; + if (old != state) + { + check_extint_irq(channel); + } +} + +void spg2xx_io_device::check_extint_irq(int channel) +{ + LOGMASKED(LOG_EXTINT, "%sing extint %d interrupt\n", m_extint[channel] ? "rais" : "lower", channel + 1); + const uint16_t mask = (channel == 0) ? 0x0200 : 0x1000; + const uint16_t old_irq = IO_IRQ_STATUS; + if (m_extint[channel]) + IO_IRQ_STATUS |= mask; + else + IO_IRQ_STATUS &= ~mask; + + if (old_irq != IO_IRQ_STATUS) + { + LOGMASKED(LOG_EXTINT, "extint IRQ changed, so checking interrupts\n"); + check_irqs(mask); + } +} + +void spg2xx_io_device::check_irqs(const uint16_t changed) +{ + if (changed & 0x0c00) // Timer A, Timer B IRQ + { + LOGMASKED(LOG_TIMERS, "%ssserting IRQ2 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00), changed); + m_timer_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0c00) ? ASSERT_LINE : CLEAR_LINE); + } + + if (changed & 0x2100) // UART, ADC IRQ + { + LOGMASKED(LOG_UART, "%ssserting IRQ3 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100), changed); + m_uart_adc_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x2100) ? ASSERT_LINE : CLEAR_LINE); + } + + if (changed & 0x1200) // External IRQ + { + LOGMASKED(LOG_UART, "%ssserting IRQ5 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200), changed); + m_external_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x1200) ? ASSERT_LINE : CLEAR_LINE); + } + + if (changed & 0x0070) // 1024Hz, 2048Hz, 4096Hz IRQ + { + LOGMASKED(LOG_TIMERS, "%ssserting IRQ6 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070), changed); //m_cpu->set_state_unsynced(UNSP_IRQ6_LINE, (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? ASSERT_LINE : CLEAR_LINE); + m_ffreq_tmr1_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x0070) ? ASSERT_LINE : CLEAR_LINE); + } + + if (changed & 0x008b) // TMB1, TMB2, 4Hz, key change IRQ + { + LOGMASKED(LOG_IRQS, "%ssserting IRQ7 (%04x, %04x)\n", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? "A" : "Dea", (IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b), changed); + m_ffreq_tmr2_irq_cb((IO_IRQ_ENABLE & IO_IRQ_STATUS & 0x008b) ? ASSERT_LINE : CLEAR_LINE); + } +} + +uint16_t spg2xx_io_device::do_special_gpio(uint32_t index, uint16_t mask) +{ + uint16_t data = 0; + switch (index) + { + case 0: // Port A + if (mask & 0xe000) + { + const uint8_t csel = m_cpu->get_csb() & 0x0e; + data = (csel << 12) & mask; + } + break; + case 1: // Port B + // To do + break; + case 2: // Port C + // To do + break; + default: + // Can't happen + break; + } + return data; +} + +void spg2xx_io_device::do_gpio(uint32_t offset, bool write) +{ + uint32_t index = (offset - 1) / 5; + uint16_t buffer = m_io_regs[5 * index + 2]; + uint16_t dir = m_io_regs[5 * index + 3]; + uint16_t attr = m_io_regs[5 * index + 4]; + uint16_t special = m_io_regs[5 * index + 5]; + + uint16_t push = dir; + uint16_t pull = ~dir; + uint16_t what = (buffer & (push | pull)); + what ^= (dir & ~attr); + what &= ~special; + + switch (index) + { + case 0: + if (write) + m_porta_out(0, what, push &~ special); + what = (what & ~pull); + if (!write) + what |= m_porta_in(0, pull &~ special) & pull; + break; + case 1: + if (write) + m_portb_out(0, what, push &~ special); + what = (what & ~pull); + if (!write) + what |= m_portb_in(0, pull &~ special) & pull; + break; + case 2: + if (write) + m_portc_out(0, what, push &~ special); + what = (what & ~pull); + if (!write) + what |= m_portc_in(0, pull &~ special) & pull; + break; + } + + what |= do_special_gpio(index, special); + m_io_regs[5 * index + 1] = what; +} + +void spg2xx_io_device::do_i2c() +{ + const uint16_t addr = ((m_io_regs[0x5b] & 0x06) << 7) | (uint8_t)m_io_regs[0x5c]; + + if (m_io_regs[0x58] & 0x40) // Serial EEPROM read + m_io_regs[0x5e] = m_eeprom_r(addr); + else + m_eeprom_w(addr, m_io_regs[0x5d]); + + m_io_regs[0x59] |= 1; +} diff --git a/src/devices/machine/spg2xx_io.h b/src/devices/machine/spg2xx_io.h new file mode 100644 index 00000000000..d829915cbec --- /dev/null +++ b/src/devices/machine/spg2xx_io.h @@ -0,0 +1,183 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz + +#ifndef MAME_MACHINE_SPG2XX_IO_H +#define MAME_MACHINE_SPG2XX_IO_H + +#pragma once + +#include "cpu/unsp/unsp.h" +#include "screen.h" + +class spg2xx_io_device : public device_t +{ +public: + spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + auto porta_out() { return m_porta_out.bind(); } + auto portb_out() { return m_portb_out.bind(); } + auto portc_out() { return m_portc_out.bind(); } + auto porta_in() { return m_porta_in.bind(); } + auto portb_in() { return m_portb_in.bind(); } + auto portc_in() { return m_portc_in.bind(); } + + template <size_t Line> auto adc_in() { return m_adc_in[Line].bind(); } + + auto eeprom_w() { return m_eeprom_w.bind(); } + auto eeprom_r() { return m_eeprom_r.bind(); } + + auto uart_tx() { return m_uart_tx.bind(); } + + auto chip_select() { return m_chip_sel.bind(); } + + void uart_rx(uint8_t data); + + void extint_w(int channel, bool state); + + DECLARE_READ16_MEMBER(io_r); + DECLARE_WRITE16_MEMBER(io_w); + + virtual DECLARE_READ16_MEMBER(io_extended_r); + virtual DECLARE_WRITE16_MEMBER(io_extended_w); + + + auto pal_read_callback() { return m_pal_read_cb.bind(); }; + + auto write_timer_irq_callback() { return m_timer_irq_cb.bind(); }; + auto write_uart_adc_irq_callback() { return m_uart_adc_irq_cb.bind(); }; + auto write_external_irq_callback() { return m_external_irq_cb.bind(); }; + auto write_ffrq_tmr1_irq_callback() { return m_ffreq_tmr1_irq_cb.bind(); }; + auto write_ffrq_tmr2_irq_callback() { return m_ffreq_tmr2_irq_cb.bind(); }; + +protected: + spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint32_t sprite_limit) + : spg2xx_io_device(mconfig, type, tag, owner, clock) + { + } + + void check_extint_irq(int channel); + void check_irqs(const uint16_t changed); + + static const device_timer_id TIMER_TMB1 = 0; + static const device_timer_id TIMER_TMB2 = 1; + + static const device_timer_id TIMER_UART_TX = 4; + static const device_timer_id TIMER_UART_RX = 5; + static const device_timer_id TIMER_4KHZ = 6; + static const device_timer_id TIMER_SRC_AB = 7; + static const device_timer_id TIMER_SRC_C = 8; + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + void update_porta_special_modes(); + void update_portb_special_modes(); + void do_gpio(uint32_t offset, bool write); + uint16_t do_special_gpio(uint32_t index, uint16_t mask); + + void update_timer_b_rate(); + void update_timer_ab_src(); + void update_timer_c_src(); + void increment_timer_a(); + + void uart_transmit_tick(); + void uart_receive_tick(); + + void system_timer_tick(); + + void do_i2c(); + + uint16_t m_io_regs[0x100]; + + uint8_t m_uart_rx_fifo[8]; + uint8_t m_uart_rx_fifo_start; + uint8_t m_uart_rx_fifo_end; + uint8_t m_uart_rx_fifo_count; + bool m_uart_rx_available; + bool m_uart_rx_irq; + bool m_uart_tx_irq; + + bool m_extint[2]; + + devcb_write16 m_porta_out; + devcb_write16 m_portb_out; + devcb_write16 m_portc_out; + devcb_read16 m_porta_in; + devcb_read16 m_portb_in; + devcb_read16 m_portc_in; + + devcb_read16 m_adc_in[2]; + + devcb_write8 m_eeprom_w; + devcb_read8 m_eeprom_r; + + devcb_write8 m_uart_tx; + + devcb_write8 m_chip_sel; + + uint16_t m_timer_a_preload; + uint16_t m_timer_b_preload; + uint16_t m_timer_b_divisor; + uint16_t m_timer_b_tick_rate; + + emu_timer *m_tmb1; + emu_timer *m_tmb2; + emu_timer *m_timer_src_ab; + emu_timer *m_timer_src_c; + + emu_timer *m_4khz_timer; + uint32_t m_2khz_divider; + uint32_t m_1khz_divider; + uint32_t m_4hz_divider; + + uint32_t m_uart_baud_rate; + emu_timer *m_uart_tx_timer; + emu_timer *m_uart_rx_timer; + + required_device<unsp_device> m_cpu; + required_device<screen_device> m_screen; + + devcb_read16 m_pal_read_cb; + + devcb_write_line m_timer_irq_cb; + devcb_write_line m_uart_adc_irq_cb; + devcb_write_line m_external_irq_cb; + devcb_write_line m_ffreq_tmr1_irq_cb; + devcb_write_line m_ffreq_tmr2_irq_cb; +}; + +class spg24x_io_device : public spg2xx_io_device +{ +public: + template <typename T, typename U> + spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag) + : spg24x_io_device(mconfig, tag, owner, clock) + { + m_cpu.set_tag(std::forward<T>(cpu_tag)); + m_screen.set_tag(std::forward<U>(screen_tag)); + } + + spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class spg28x_io_device : public spg2xx_io_device +{ +public: + template <typename T, typename U> + spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag) + : spg28x_io_device(mconfig, tag, owner, clock) + { + m_cpu.set_tag(std::forward<T>(cpu_tag)); + m_screen.set_tag(std::forward<U>(screen_tag)); + } + + spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_WRITE16_MEMBER(io_extended_w) override; +}; + +DECLARE_DEVICE_TYPE(SPG24X_IO, spg24x_io_device) +DECLARE_DEVICE_TYPE(SPG28X_IO, spg28x_io_device) + +#endif // MAME_MACHINE_SPG2XX_IO_H diff --git a/src/devices/machine/spg2xx_sysdma.cpp b/src/devices/machine/spg2xx_sysdma.cpp new file mode 100644 index 00000000000..fe0d61ea395 --- /dev/null +++ b/src/devices/machine/spg2xx_sysdma.cpp @@ -0,0 +1,117 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/***************************************************************************** + + SunPlus SPG2xx-series SoC peripheral emulation (System DMA) + +**********************************************************************/ + +#include "emu.h" +#include "spg2xx_sysdma.h" + +DEFINE_DEVICE_TYPE(SPG2XX_SYSDMA, spg2xx_sysdma_device, "spg2xx_sysdma", "SPG240-series System-on-a-Chip System DMA") + +#define LOG_DMA (1U << 9) +#define LOG_ALL (LOG_DMA) + +#define VERBOSE (0) +#include "logmacro.h" + + + +spg2xx_sysdma_device::spg2xx_sysdma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, SPG2XX_SYSDMA, tag, owner, clock) + , m_cpu(*this, finder_base::DUMMY_TAG) +{ +} + +void spg2xx_sysdma_device::device_start() +{ + save_item(NAME(m_dma_regs)); +} + +void spg2xx_sysdma_device::device_reset() +{ + memset(m_dma_regs, 0, 0x4 * sizeof(uint16_t)); +} + +/************************* +* Machine Hardware * +*************************/ + +READ16_MEMBER(spg2xx_sysdma_device::dma_r) +{ + offset &= 0x3; + + uint16_t val = m_dma_regs[offset]; + switch (offset) + { + + case 0x000: // DMA Source (L) + LOGMASKED(LOG_DMA, "dma_r: DMA Source (lo) = %04x\n", val); + break; + + case 0x001: // DMA Source (H) + LOGMASKED(LOG_DMA, "dma_r: DMA Source (hi) = %04x\n", val); + break; + + case 0x002: // DMA Length + LOGMASKED(LOG_DMA, "dma_r: DMA Length = %04x\n", 0); + val = 0; + break; + + case 0x003: // DMA Destination + LOGMASKED(LOG_DMA, "dma_r: DMA Dest = %04x\n", val); + break; + } + + return val; +} + +WRITE16_MEMBER(spg2xx_sysdma_device::dma_w) +{ + offset &= 0x3; + + switch (offset) + { + case 0x000: // DMA Source (lo) + LOGMASKED(LOG_DMA, "dma_w: DMA Source (lo) = %04x\n", data); + m_dma_regs[offset] = data; + break; + + case 0x001: // DMA Source (hi) + LOGMASKED(LOG_DMA, "dma_w: DMA Source (hi) = %04x\n", data); + m_dma_regs[offset] = data; + break; + + case 0x002: // DMA Length + LOGMASKED(LOG_DMA, "dma_w: DMA Length = %04x\n", data); + if (!(data & 0xc000)) // jak_dora writes 0xffff here which ends up trashing registers etc. why? such writes can't be valid + do_cpu_dma(data); + break; + + case 0x003: // DMA Destination + LOGMASKED(LOG_DMA, "dma_w: DMA Dest = %04x\n", data); + m_dma_regs[offset] = data; + break; + } +} + +void spg2xx_sysdma_device::do_cpu_dma(uint32_t len) +{ + address_space &mem = m_cpu->space(AS_PROGRAM); + + uint32_t src = ((m_dma_regs[0x001] & 0x3f) << 16) | m_dma_regs[0x000]; + uint32_t dst = m_dma_regs[0x003] & 0x3fff; + + for (uint32_t j = 0; j < len; j++) + { + mem.write_word((dst + j) & 0x3fff, mem.read_word(src + j)); + } + + src += len; + m_dma_regs[0x000] = (uint16_t)src; + m_dma_regs[0x001] = (src >> 16) & 0x3f; + m_dma_regs[0x002] = 0; + m_dma_regs[0x003] = (dst + len) & 0x3fff; +} diff --git a/src/devices/machine/spg2xx_sysdma.h b/src/devices/machine/spg2xx_sysdma.h new file mode 100644 index 00000000000..bea7755bcd9 --- /dev/null +++ b/src/devices/machine/spg2xx_sysdma.h @@ -0,0 +1,46 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/***************************************************************************** + + SunPlus SPG2xx-series SoC peripheral emulation (System DMA) + +**********************************************************************/ + +#ifndef MAME_MACHINE_SPG2XX_SYSDMA_H +#define MAME_MACHINE_SPG2XX_SYSDMA_H + +#pragma once + +#include "cpu/unsp/unsp.h" + +DECLARE_DEVICE_TYPE(SPG2XX_SYSDMA, spg2xx_sysdma_device) + + +class spg2xx_sysdma_device : public device_t +{ +public: + template <typename T> + spg2xx_sysdma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag) + : spg2xx_sysdma_device(mconfig, tag, owner, clock) + { + m_cpu.set_tag(std::forward<T>(cpu_tag)); + } + + spg2xx_sysdma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + DECLARE_READ16_MEMBER(dma_r); + DECLARE_WRITE16_MEMBER(dma_w); + +protected: + virtual void device_start() override; + virtual void device_reset() override; + +private: + void do_cpu_dma(uint32_t len); + + uint16_t m_dma_regs[0x4]; + + required_device<unsp_device> m_cpu; +}; + + +#endif // MAME_MACHINE_SPG2XX_SYSDMA_H diff --git a/src/devices/machine/spg2xx_video.cpp b/src/devices/machine/spg2xx_video.cpp new file mode 100644 index 00000000000..daef752bc82 --- /dev/null +++ b/src/devices/machine/spg2xx_video.cpp @@ -0,0 +1,828 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/***************************************************************************** + + SunPlus SPG2xx-series SoC peripheral emulation (Video) + +**********************************************************************/ + +#include "emu.h" +#include "spg2xx_video.h" + +DEFINE_DEVICE_TYPE(SPG24X_VIDEO, spg24x_video_device, "spg24x_video", "SPG240-series System-on-a-Chip (Video)") + +#define LOG_IRQS (1U << 4) +#define LOG_VLINES (1U << 5) +#define LOG_DMA (1U << 9) +#define LOG_PPU_READS (1U << 22) +#define LOG_PPU_WRITES (1U << 23) +#define LOG_UNKNOWN_PPU (1U << 24) +#define LOG_PPU (LOG_PPU_READS | LOG_PPU_WRITES | LOG_UNKNOWN_PPU) +#define LOG_ALL (LOG_IRQS | LOG_PPU | LOG_VLINES | LOG_DMA ) + +#define VERBOSE (0) +#include "logmacro.h" + +#define SPG_DEBUG_VIDEO (0) + +#define VIDEO_IRQ_ENABLE m_video_regs[0x62] +#define VIDEO_IRQ_STATUS m_video_regs[0x63] + +spg2xx_video_device::spg2xx_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , m_sprlimit_read_cb(*this) + , m_rowscrolloffset_read_cb(*this) + , m_cpu(*this, finder_base::DUMMY_TAG) + , m_screen(*this, finder_base::DUMMY_TAG) + , m_scrollram(*this, "scrollram") + , m_paletteram(*this, "paletteram") + , m_spriteram(*this, "spriteram") + , m_video_irq_cb(*this) +{ +} + +spg24x_video_device::spg24x_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : spg2xx_video_device(mconfig, SPG24X_VIDEO, tag, owner, clock) +{ +} + +void spg2xx_video_device::device_start() +{ + for (uint8_t i = 0; i < 32; i++) + { + m_rgb5_to_rgb8[i] = (i << 3) | (i >> 2); + } + for (uint16_t i = 0; i < 0x8000; i++) + { + m_rgb555_to_rgb888[i] = (m_rgb5_to_rgb8[(i >> 10) & 0x1f] << 16) | + (m_rgb5_to_rgb8[(i >> 5) & 0x1f] << 8) | + (m_rgb5_to_rgb8[(i >> 0) & 0x1f] << 0); + } + + m_screenpos_timer = timer_alloc(TIMER_SCREENPOS); + m_screenpos_timer->adjust(attotime::never); + + save_item(NAME(m_hide_page0)); + save_item(NAME(m_hide_page1)); + save_item(NAME(m_hide_sprites)); + save_item(NAME(m_debug_sprites)); + save_item(NAME(m_debug_blit)); + save_item(NAME(m_debug_palette)); + save_item(NAME(m_sprite_index_to_debug)); + + save_item(NAME(m_video_regs)); + + m_sprlimit_read_cb.resolve_safe(0); + m_rowscrolloffset_read_cb.resolve_safe(0); + + m_video_irq_cb.resolve(); + +} + +void spg2xx_video_device::device_reset() +{ + memset(m_video_regs, 0, 0x100 * sizeof(uint16_t)); + + m_video_regs[0x36] = 0xffff; + m_video_regs[0x37] = 0xffff; + m_video_regs[0x3c] = 0x0020; + m_video_regs[0x42] = 0x0001; + + m_hide_page0 = false; + m_hide_page1 = false; + m_hide_sprites = false; + m_debug_sprites = false; + m_debug_blit = false; + m_debug_palette = false; + m_sprite_index_to_debug = 0; +} + +/************************* +* Video Hardware * +*************************/ + +// Perform a lerp between a and b +inline uint8_t spg2xx_video_device::mix_channel(uint8_t bottom, uint8_t top) +{ + uint8_t alpha = (m_video_regs[0x2a] & 3) << 6; + return ((256 - alpha) * bottom + alpha * top) >> 8; +} + +template<spg2xx_video_device::blend_enable_t Blend, spg2xx_video_device::rowscroll_enable_t RowScroll, spg2xx_video_device::flipx_t FlipX> +void spg2xx_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset) +{ + address_space &space = m_cpu->space(AS_PROGRAM); + + uint32_t nc_bpp = ((bpp) + 1) << 1; + + if (SPG_DEBUG_VIDEO && m_debug_blit) + { + printf("s:%d line:%d xy:%08x,%08x bitmap_addr:%08x tile:%04x\n", cliprect.min_x, line, xoff, yoff, bitmap_addr, tile); + printf("hw:%d,%d yfm:%d nc_bppols:%d pobs:%02x ", w, h, yflipmask, nc_bpp, palette_offset); + } + palette_offset >>= nc_bpp; + palette_offset <<= nc_bpp; + if (SPG_DEBUG_VIDEO && m_debug_blit) + { + printf("poas:%02x\n", palette_offset); + } + + uint32_t bits_per_row = nc_bpp * w / 16; + uint32_t words_per_tile = bits_per_row * h; + uint32_t m = bitmap_addr + words_per_tile * tile + bits_per_row * (line ^ yflipmask); + uint32_t bits = 0; + uint32_t nbits = 0; + uint32_t y = line; + + int yy = (yoff + y) & 0x1ff; + if (yy >= 0x01c0) + yy -= 0x0200; + + if (yy > 240 || yy < 0) + return; + + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf("%3d:\n", yy); + + int y_index = yy * 320; + + for (int32_t x = FlipX ? (w - 1) : 0; FlipX ? x >= 0 : x < w; FlipX ? x-- : x++) + { + int xx = xoff + x; + + bits <<= nc_bpp; + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf(" %08x:%d ", bits, nbits); + if (nbits < nc_bpp) + { + uint16_t b = space.read_word(m++ & 0x3fffff); + b = (b << 8) | (b >> 8); + bits |= b << (nc_bpp - nbits); + nbits += 16; + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf("(%04x:%08x:%d) ", b, bits, nbits); + } + nbits -= nc_bpp; + + uint32_t pal = palette_offset + (bits >> 16); + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf("%02x:%02x:%04x ", bits >> 16, pal, bits & 0xffff); + bits &= 0xffff; + + if (RowScroll) + xx -= (int16_t)m_scrollram[(yy + m_rowscrolloffset_read_cb()) & 0x1ff]; + + xx &= 0x01ff; + if (xx >= 0x01c0) + xx -= 0x0200; + + if (xx >= 0 && xx < 320) + { + int pix_index = xx + y_index; + + uint16_t rgb = m_paletteram[pal]; + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf("rgb:%04x ", rgb); + + if (!(rgb & 0x8000)) + { + if (Blend) + { + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf("M\n"); + m_screenbuf[pix_index] = (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 16), m_rgb5_to_rgb8[(rgb >> 10) & 0x1f]) << 16) | + (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 8), m_rgb5_to_rgb8[(rgb >> 5) & 0x1f]) << 8) | + (mix_channel((uint8_t)(m_screenbuf[pix_index] >> 0), m_rgb5_to_rgb8[rgb & 0x1f])); + } + else + { + if (SPG_DEBUG_VIDEO && m_debug_blit) + printf("S\n"); + m_screenbuf[pix_index] = m_rgb555_to_rgb888[rgb]; + } + } + else if (SPG_DEBUG_VIDEO && m_debug_blit) + { + printf("X\n"); + } + } + } +} + +void spg2xx_video_device::draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs) +{ + uint32_t xscroll = regs[0]; + uint32_t yscroll = regs[1]; + uint32_t attr = regs[2]; + uint32_t ctrl = regs[3]; + uint32_t tilemap = regs[4]; + uint32_t palette_map = regs[5]; + address_space &space = m_cpu->space(AS_PROGRAM); + + if (!(ctrl & PAGE_ENABLE_MASK)) + { + return; + } + + if (((attr & PAGE_PRIORITY_FLAG_MASK) >> PAGE_PRIORITY_FLAG_SHIFT) != priority) + { + return; + } + + uint32_t tile_h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); + uint32_t tile_w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); + + uint32_t tile_count_x = 512 / tile_w; + + uint32_t bitmap_y = (scanline + yscroll) & 0xff; + uint32_t y0 = bitmap_y / tile_h; + uint32_t tile_scanline = bitmap_y % tile_h; + uint32_t tile_address = tile_count_x * y0; + if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_H)) + printf("s:%3d | baddr:%08x | yscr:%3d | bity:%3d | y0:%2d | ts:%2d\n", scanline, bitmap_addr, yscroll, bitmap_y, y0, tile_scanline); + + if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS)) + m_debug_blit = true; + for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++) + { + uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10; + uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff; + uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(tilemap) : space.read_word(tilemap + tile_address); + uint16_t palette = 0; + + if (!tile) + continue; + + palette = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2); + if (x0 & 1) + palette >>= 8; + + uint32_t tileattr = attr; + uint32_t tilectrl = ctrl; + if ((ctrl & 2) == 0) + { // -(1) bld(1) flip(2) pal(4) + tileattr &= ~0x000c; + tileattr |= (palette >> 2) & 0x000c; // flip + + tileattr &= ~0x0f00; + tileattr |= (palette << 8) & 0x0f00; // palette + + tilectrl &= ~0x0100; + tilectrl |= (palette << 2) & 0x0100; // blend + } + + const bool blend = (tileattr & 0x4000 || tilectrl & 0x0100); + const bool row_scroll = (tilectrl & 0x0010); + const bool flip_x = (tileattr & TILE_X_FLIP); + const uint32_t yflipmask = tileattr & TILE_Y_FLIP ? tile_h - 1 : 0; + const uint32_t palette_offset = (tileattr & 0x0f00) >> 4; + + const uint8_t bpp = tileattr & 0x0003; + + if (blend) + { + if (row_scroll) + { + if (flip_x) + draw<BlendOn, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + else + draw<BlendOn, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + } + else + { + if (flip_x) + draw<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + else + draw<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + } + } + else + { + if (row_scroll) + { + if (flip_x) + draw<BlendOff, RowScrollOn, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + else + draw<BlendOff, RowScrollOn, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + } + else + { + if (flip_x) + draw<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + else + draw<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + } + } + } + if (SPG_DEBUG_VIDEO && machine().input().code_pressed(KEYCODE_EQUALS)) + m_debug_blit = false; +} + +void spg2xx_video_device::draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr) +{ + uint32_t bitmap_addr = 0x40 * m_video_regs[0x22]; + uint16_t tile = m_spriteram[base_addr + 0]; + int16_t x = m_spriteram[base_addr + 1]; + int16_t y = m_spriteram[base_addr + 2]; + uint16_t attr = m_spriteram[base_addr + 3]; + + if (!tile) + { + return; + } + + if (((attr & PAGE_PRIORITY_FLAG_MASK) >> PAGE_PRIORITY_FLAG_SHIFT) != priority) + { + return; + } + + const uint32_t h = 8 << ((attr & PAGE_TILE_HEIGHT_MASK) >> PAGE_TILE_HEIGHT_SHIFT); + const uint32_t w = 8 << ((attr & PAGE_TILE_WIDTH_MASK) >> PAGE_TILE_WIDTH_SHIFT); + + if (!(m_video_regs[0x42] & SPRITE_COORD_TL_MASK)) + { + x = (160 + x) - w / 2; + y = (120 - y) - (h / 2) + 8; + } + + x &= 0x01ff; + y &= 0x01ff; + + uint32_t tile_line = ((scanline - y) + 0x200) % h; + int16_t test_y = (y + tile_line) & 0x1ff; + if (test_y >= 0x01c0) + test_y -= 0x0200; + + if (test_y != scanline) + { + return; + } + + bool blend = (attr & 0x4000); + bool flip_x = (attr & TILE_X_FLIP); + const uint8_t bpp = attr & 0x0003; + const uint32_t yflipmask = attr & TILE_Y_FLIP ? h - 1 : 0; + const uint32_t palette_offset = (attr & 0x0f00) >> 4; + +#if SPG_DEBUG_VIDEO + if (m_debug_sprites && machine().input().code_pressed(KEYCODE_MINUS)) + m_debug_blit = true; + if (blend) + { + if (flip_x) + draw<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + else + draw<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + } + else + { + if (flip_x) + draw<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + else + draw<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + } + m_debug_blit = false; +#else + if (blend) + { + if (flip_x) + draw<BlendOn, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + else + draw<BlendOn, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + } + else + { + if (flip_x) + draw<BlendOff, RowScrollOff, FlipXOn>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + else + draw<BlendOff, RowScrollOff, FlipXOff>(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + } +#endif +} + +void spg2xx_video_device::draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority) +{ + if (!(m_video_regs[0x42] & SPRITE_ENABLE_MASK)) + { + return; + } + +#if SPG_DEBUG_VIDEO + if (!m_debug_sprites) + { +#endif + for (uint32_t n = 0; n < m_sprlimit_read_cb(); n++) + { + draw_sprite(cliprect, scanline, priority, 4 * n); + } +#if SPG_DEBUG_VIDEO + } + else + { + draw_sprite(cliprect, scanline, priority, 4 * m_sprite_index_to_debug); + } +#endif +} + +void spg2xx_video_device::apply_saturation(const rectangle &cliprect) +{ + static const float s_u8_to_float = 1.0f / 255.0f; + static const float s_gray_r = 0.299f; + static const float s_gray_g = 0.587f; + static const float s_gray_b = 0.114f; + const float sat_adjust = (0xff - (m_video_regs[0x3c] & 0x00ff)) / (float)(0xff - 0x20); + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) + { + const uint32_t src_rgb = *src; + const float src_r = (uint8_t)(src_rgb >> 16) * s_u8_to_float; + const float src_g = (uint8_t)(src_rgb >> 8) * s_u8_to_float; + const float src_b = (uint8_t)(src_rgb >> 0) * s_u8_to_float; + const float luma = src_r * s_gray_r + src_g * s_gray_g + src_b * s_gray_b; + const float adjusted_r = luma + (src_r - luma) * sat_adjust; + const float adjusted_g = luma + (src_g - luma) * sat_adjust; + const float adjusted_b = luma + (src_b - luma) * sat_adjust; + const int integer_r = (int)floor(adjusted_r * 255.0f); + const int integer_g = (int)floor(adjusted_g * 255.0f); + const int integer_b = (int)floor(adjusted_b * 255.0f); + *src++ = (integer_r > 255 ? 0xff0000 : (integer_r < 0 ? 0 : ((uint8_t)integer_r << 16))) | + (integer_g > 255 ? 0x00ff00 : (integer_g < 0 ? 0 : ((uint8_t)integer_g << 8))) | + (integer_b > 255 ? 0x0000ff : (integer_b < 0 ? 0 : (uint8_t)integer_b)); + } + } +} + +void spg2xx_video_device::apply_fade(const rectangle &cliprect) +{ + const uint16_t fade_offset = m_video_regs[0x30]; + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) + { + const uint32_t src_rgb = *src; + const uint8_t src_r = (src_rgb >> 16) & 0xff; + const uint8_t src_g = (src_rgb >> 8) & 0xff; + const uint8_t src_b = (src_rgb >> 0) & 0xff; + const uint8_t r = src_r - fade_offset; + const uint8_t g = src_g - fade_offset; + const uint8_t b = src_b - fade_offset; + *src++ = (r > src_r ? 0 : (r << 16)) | + (g > src_g ? 0 : (g << 8)) | + (b > src_b ? 0 : (b << 0)); + } + } +} + +uint32_t spg2xx_video_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + memset(&m_screenbuf[320 * cliprect.min_y], 0, 4 * 320 * ((cliprect.max_y - cliprect.min_y) + 1)); + + const uint32_t page1_addr = 0x40 * m_video_regs[0x20]; + const uint32_t page2_addr = 0x40 * m_video_regs[0x21]; + uint16_t *page1_regs = m_video_regs + 0x10; + uint16_t *page2_regs = m_video_regs + 0x16; + + for (uint32_t scanline = (uint32_t)cliprect.min_y; scanline <= (uint32_t)cliprect.max_y; scanline++) + { + for (int i = 0; i < 4; i++) + { + if (!SPG_DEBUG_VIDEO || !m_hide_page0) + draw_page(cliprect, scanline, i, page1_addr, page1_regs); + if (!SPG_DEBUG_VIDEO || !m_hide_page1) + draw_page(cliprect, scanline, i, page2_addr, page2_regs); + if (!SPG_DEBUG_VIDEO || !m_hide_sprites) + draw_sprites(cliprect, scanline, i); + } + } + + if ((m_video_regs[0x3c] & 0x00ff) != 0x0020) + { + apply_saturation(cliprect); + } + + if (m_video_regs[0x30] != 0) + { + apply_fade(cliprect); + } + + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) + { + uint32_t *dest = &bitmap.pix32(y, cliprect.min_x); + uint32_t *src = &m_screenbuf[cliprect.min_x + 320 * y]; + memcpy(dest, src, sizeof(uint32_t) * ((cliprect.max_x - cliprect.min_x) + 1)); + } + + if (SPG_DEBUG_VIDEO && m_debug_palette) + { + for (int y = cliprect.min_y; y <= cliprect.max_y && y < 128; y++) + { + const uint16_t high_nybble = (y / 8) << 4; + uint32_t *dest = &bitmap.pix32(y, cliprect.min_x); + for (int x = cliprect.min_x; x <= cliprect.max_x && x < 256; x++) + { + const uint16_t low_nybble = x / 16; + const uint16_t palette_entry = high_nybble | low_nybble; + const uint16_t color = m_paletteram[palette_entry]; + if (!(color & 0x8000)) + { + *dest = m_rgb555_to_rgb888[color & 0x7fff]; + } + dest++; + } + } + } + + return 0; +} + +void spg2xx_video_device::do_sprite_dma(uint32_t len) +{ + address_space &mem = m_cpu->space(AS_PROGRAM); + + uint32_t src = m_video_regs[0x70] & 0x3fff; + uint32_t dst = m_video_regs[0x71]; + + for (uint32_t j = 0; j < len; j++) + { + m_spriteram[(dst + j) & 0x3ff] = mem.read_word(src + j); + } + + m_video_regs[0x72] = 0; + if (VIDEO_IRQ_ENABLE & 4) + { + const uint16_t old = VIDEO_IRQ_STATUS; + VIDEO_IRQ_STATUS |= 4; + const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS); + if (changed) + check_video_irq(); + } +} + +READ16_MEMBER(spg2xx_video_device::video_r) +{ + switch (offset) + { + case 0x38: // Current Line + LOGMASKED(LOG_VLINES, "video_r: Current Line: %04x\n", m_screen->vpos()); + return m_screen->vpos(); + + case 0x62: // Video IRQ Enable + LOGMASKED(LOG_IRQS, "video_r: Video IRQ Enable: %04x\n", VIDEO_IRQ_ENABLE); + return VIDEO_IRQ_ENABLE; + + case 0x63: // Video IRQ Status + LOGMASKED(LOG_IRQS, "video_r: Video IRQ Status: %04x\n", VIDEO_IRQ_STATUS); + return VIDEO_IRQ_STATUS; + + default: + LOGMASKED(LOG_UNKNOWN_PPU, "video_r: Unknown register %04x = %04x\n", 0x2800 + offset, m_video_regs[offset]); + break; + } + return m_video_regs[offset]; +} + +WRITE16_MEMBER(spg2xx_video_device::video_w) +{ + switch (offset) + { + case 0x10: // Page 1 X scroll + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 X Scroll = %04x\n", data & 0x01ff); + m_video_regs[offset] = data & 0x01ff; + break; + + case 0x11: // Page 1 Y scroll + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Y Scroll = %04x\n", data & 0x00ff); + m_video_regs[offset] = data & 0x00ff; + break; + + case 0x12: // Page 1 Attributes + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data + , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1)); + m_video_regs[offset] = data; + break; + + case 0x13: // Page 1 Control + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data + , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0)); + m_video_regs[offset] = data; + break; + + case 0x14: // Page 1 Tile Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Tile Address = %04x\n", data & 0x1fff); + m_video_regs[offset] = data; + break; + + case 0x15: // Page 1 Attribute Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Attribute Address = %04x\n", data & 0x1fff); + m_video_regs[offset] = data; + break; + + case 0x16: // Page 2 X scroll + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 X Scroll = %04x\n", data & 0x01ff); + m_video_regs[offset] = data & 0x01ff; + break; + + case 0x17: // Page 2 Y scroll + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Y Scroll: %04x = %04x\n", 0x2800 | offset, data & 0x00ff); + m_video_regs[offset] = data & 0x00ff; + break; + + case 0x18: // Page 2 Attributes + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attributes = %04x (Depth:%d, Palette:%d, VSize:%d, HSize:%d, FlipY:%d, FlipX:%d, BPP:%d)\n", data + , (data >> 12) & 3, (data >> 8) & 15, 8 << ((data >> 6) & 3), 8 << ((data >> 4) & 3), BIT(data, 3), BIT(data, 2), 2 * ((data & 3) + 1)); + m_video_regs[offset] = data; + break; + + case 0x19: // Page 2 Control + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Control = %04x (Blend:%d, HiColor:%d, RowScroll:%d, Enable:%d, Wallpaper:%d, RegSet:%d, Bitmap:%d)\n", data + , BIT(data, 8), BIT(data, 7), BIT(data, 4), BIT(data, 3), BIT(data, 2), BIT(data, 1), BIT(data, 0)); + m_video_regs[offset] = data; + break; + + case 0x1a: // Page 2 Tile Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Tile Address = %04x\n", data & 0x1fff); + m_video_regs[offset] = data; + break; + + case 0x1b: // Page 2 Attribute Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Attribute Address = %04x\n", data & 0x1fff); + m_video_regs[offset] = data; + break; + + case 0x20: // Page 1 Segment Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 1 Segment Address = %04x\n", data); + m_video_regs[offset] = data; + break; + + case 0x21: // Page 2 Segment Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Page 2 Segment Address = %04x\n", data); + m_video_regs[offset] = data; + break; + + case 0x22: // Sprite Segment Address + LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Segment Address = %04x\n", data); + m_video_regs[offset] = data; + break; + + case 0x2a: // Blend Level Control + LOGMASKED(LOG_PPU_WRITES, "video_w: Blend Level Control = %04x\n", data & 0x0003); + m_video_regs[offset] = data & 0x0003; + break; + + case 0x30: // Fade Effect Control + LOGMASKED(LOG_PPU_WRITES, "video_w: Fade Effect Control = %04x\n", data & 0x00ff); + m_video_regs[offset] = data & 0x00ff; + break; + + case 0x36: // IRQ pos V + case 0x37: // IRQ pos H + m_video_regs[offset] = data & 0x01ff; + LOGMASKED(LOG_IRQS, "video_w: Video IRQ Position: %04x,%04x (%04x)\n", m_video_regs[0x37], m_video_regs[0x36], 0x2800 | offset); + if (m_video_regs[0x37] < 160 && m_video_regs[0x36] < 240) + m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1)); + else + m_screenpos_timer->adjust(attotime::never); + break; + + case 0x39: // Latch 1st Line Pen Pulse + LOGMASKED(LOG_PPU_WRITES, "video_w: Latch 1st Line Pen Pulse = %04x\n", data & 0x0001); + m_video_regs[offset] = data & 0x0001; + break; + + case 0x3c: // TV Control 1 + LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 1 = %04x (Hue:%02x, Saturation:%02x)\n", data, data >> 8, data & 0x00ff); + m_video_regs[offset] = data; + break; + + case 0x3d: // TV Control 2 + { + static const char* const s_lpf_mode[4] = { "LPF1", "LPF2", "All", "Edge" }; + LOGMASKED(LOG_PPU_WRITES, "video_w: TV Control 2 = %04x (LPFMode:%s, Enable:%d, Interlace:%d)\n", data & 0x000f + , s_lpf_mode[(data >> 2) & 3], BIT(data, 1), BIT(data, 0)); + m_video_regs[offset] = data & 0x000f; + break; + } + + case 0x3e: // Light Pen Y Position + LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen Y (read only) = %04x\n", data & 0x01ff); + break; + + case 0x3f: // Light Pen YXPosition + LOGMASKED(LOG_PPU_WRITES, "video_w: Light Pen X (read only) = %04x\n", data & 0x01ff); + break; + + case 0x42: // Sprite Control + LOGMASKED(LOG_PPU_WRITES, "video_w: Sprite Control = %04x (TopLeft:%d, Enable:%d)\n", data & 0x0003, BIT(data, 1), BIT(data, 0)); + m_video_regs[offset] = data & 0x0003; + break; + + case 0x62: // Video IRQ Enable + { + LOGMASKED(LOG_IRQS, "video_w: Video IRQ Enable = %04x (DMA:%d, Timing:%d, Blanking:%d)\n", data & 0x0007, BIT(data, 2), BIT(data, 1), BIT(data, 0)); + const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS; + VIDEO_IRQ_ENABLE = data & 0x0007; + const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS); + if (changed) + check_video_irq(); + break; + } + + case 0x63: // Video IRQ Acknowledge + { + LOGMASKED(LOG_IRQS, "video_w: Video IRQ Acknowledge = %04x\n", data); + const uint16_t old = VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS; + VIDEO_IRQ_STATUS &= ~data; + const uint16_t changed = old ^ (VIDEO_IRQ_ENABLE & VIDEO_IRQ_STATUS); + if (changed) + check_video_irq(); + break; + } + + case 0x70: // Sprite DMA Source + LOGMASKED(LOG_DMA, "video_w: Sprite DMA Source = %04x\n", data & 0x3fff); + m_video_regs[offset] = data & 0x3fff; + break; + + case 0x71: // Sprite DMA Dest + LOGMASKED(LOG_DMA, "video_w: Sprite DMA Dest = %04x\n", data & 0x03ff); + m_video_regs[offset] = data & 0x03ff; + break; + + case 0x72: // Sprite DMA Length + { + LOGMASKED(LOG_DMA, "video_w: Sprite DMA Length = %04x\n", data & 0x03ff); + uint16_t length = data & 0x3ff; + do_sprite_dma(length ? length : 0x400); + break; + } + + default: + LOGMASKED(LOG_UNKNOWN_PPU, "video_w: Unknown register %04x = %04x\n", 0x2800 + offset, data); + m_video_regs[offset] = data; + break; + } +} + +WRITE_LINE_MEMBER(spg2xx_video_device::vblank) +{ + if (!state) + { + VIDEO_IRQ_STATUS &= ~1; + LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS); + check_video_irq(); + return; + } + +#if SPG_DEBUG_VIDEO + if (machine().input().code_pressed_once(KEYCODE_5)) + m_hide_page0 = !m_hide_page0; + if (machine().input().code_pressed_once(KEYCODE_6)) + m_hide_page1 = !m_hide_page1; + if (machine().input().code_pressed_once(KEYCODE_7)) + m_hide_sprites = !m_hide_sprites; + if (machine().input().code_pressed_once(KEYCODE_8)) + m_debug_sprites = !m_debug_sprites; + if (machine().input().code_pressed_once(KEYCODE_9)) + m_sprite_index_to_debug--; + if (machine().input().code_pressed_once(KEYCODE_0)) + m_sprite_index_to_debug++; + if (machine().input().code_pressed_once(KEYCODE_L)) + m_debug_palette = !m_debug_palette; +#endif + + if (VIDEO_IRQ_ENABLE & 1) + { + VIDEO_IRQ_STATUS |= 1; + LOGMASKED(LOG_IRQS, "Setting video IRQ status to %04x\n", VIDEO_IRQ_STATUS); + check_video_irq(); + } +} + +void spg2xx_video_device::check_video_irq() +{ + LOGMASKED(LOG_IRQS, "%ssserting IRQ0 (%04x, %04x)\n", (VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? "A" : "Dea", VIDEO_IRQ_STATUS, VIDEO_IRQ_ENABLE); + m_video_irq_cb((VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? ASSERT_LINE : CLEAR_LINE); +} + +void spg2xx_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case TIMER_SCREENPOS: + { + if (VIDEO_IRQ_ENABLE & 2) + { + VIDEO_IRQ_STATUS |= 2; + check_video_irq(); + } + m_screen->update_partial(m_screen->vpos()); + + // fire again, jak_dbz pinball needs this + m_screenpos_timer->adjust(m_screen->time_until_pos(m_video_regs[0x36], m_video_regs[0x37] << 1)); + break; + } + } +} diff --git a/src/devices/machine/spg2xx_video.h b/src/devices/machine/spg2xx_video.h new file mode 100644 index 00000000000..064e3cb9757 --- /dev/null +++ b/src/devices/machine/spg2xx_video.h @@ -0,0 +1,137 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/***************************************************************************** + + SunPlus SPG2xx-series SoC peripheral emulation (Video) + +**********************************************************************/ + +#ifndef MAME_MACHINE_SPG2XX_VIDEO_H +#define MAME_MACHINE_SPG2XX_VIDEO_H + +#pragma once + +#include "cpu/unsp/unsp.h" +#include "screen.h" + +class spg2xx_video_device : public device_t +{ +public: + spg2xx_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(vblank); + + DECLARE_READ16_MEMBER(video_r); + DECLARE_WRITE16_MEMBER(video_w); + + auto sprlimit_read_callback() { return m_sprlimit_read_cb.bind(); }; + auto rowscrolloffset_read_callback() { return m_rowscrolloffset_read_cb.bind(); }; + + auto write_video_irq_callback() { return m_video_irq_cb.bind(); }; + +protected: + + enum + { + PAGE_ENABLE_MASK = 0x0008, + PAGE_WALLPAPER_MASK = 0x0004, + + SPRITE_ENABLE_MASK = 0x0001, + SPRITE_COORD_TL_MASK = 0x0002, + + PAGE_PRIORITY_FLAG_MASK = 0x3000, + PAGE_PRIORITY_FLAG_SHIFT = 12, + PAGE_TILE_HEIGHT_MASK = 0x00c0, + PAGE_TILE_HEIGHT_SHIFT = 6, + PAGE_TILE_WIDTH_MASK = 0x0030, + PAGE_TILE_WIDTH_SHIFT = 4, + TILE_X_FLIP = 0x0004, + TILE_Y_FLIP = 0x0008 + }; + + + inline void check_video_irq(); + + static const device_timer_id TIMER_SCREENPOS = 2; + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + void do_sprite_dma(uint32_t len); + + enum blend_enable_t : bool + { + BlendOff = false, + BlendOn = true + }; + + enum rowscroll_enable_t : bool + { + RowScrollOff = false, + RowScrollOn = true + }; + + enum flipx_t : bool + { + FlipXOff = false, + FlipXOn = true + }; + + void apply_saturation(const rectangle &cliprect); + void apply_fade(const rectangle &cliprect); + + template<blend_enable_t Blend, rowscroll_enable_t RowScroll, flipx_t FlipX> + void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset); + void draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs); + void draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr); + void draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority); + + uint8_t mix_channel(uint8_t a, uint8_t b); + + uint32_t m_screenbuf[320 * 240]; + uint8_t m_rgb5_to_rgb8[32]; + uint32_t m_rgb555_to_rgb888[0x8000]; + + bool m_hide_page0; + bool m_hide_page1; + bool m_hide_sprites; + bool m_debug_sprites; + bool m_debug_blit; + bool m_debug_palette; + uint8_t m_sprite_index_to_debug; + + uint16_t m_video_regs[0x100]; + + devcb_read16 m_sprlimit_read_cb; + devcb_read16 m_rowscrolloffset_read_cb; + + emu_timer *m_screenpos_timer; + + required_device<unsp_device> m_cpu; + required_device<screen_device> m_screen; + required_shared_ptr<uint16_t> m_scrollram; + required_shared_ptr<uint16_t> m_paletteram; + required_shared_ptr<uint16_t> m_spriteram; + + devcb_write_line m_video_irq_cb; +}; + +class spg24x_video_device : public spg2xx_video_device +{ +public: + template <typename T, typename U> + spg24x_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag) + : spg24x_video_device(mconfig, tag, owner, clock) + { + m_cpu.set_tag(std::forward<T>(cpu_tag)); + m_screen.set_tag(std::forward<U>(screen_tag)); + } + + spg24x_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +DECLARE_DEVICE_TYPE(SPG24X_VIDEO, spg24x_video_device) + +#endif // MAME_MACHINE_SPG2XX_VIDEO_H diff --git a/src/devices/machine/tmp68301.cpp b/src/devices/machine/tmp68301.cpp index ebc710bcde5..1eea072c64a 100644 --- a/src/devices/machine/tmp68301.cpp +++ b/src/devices/machine/tmp68301.cpp @@ -23,7 +23,8 @@ DEFINE_DEVICE_TYPE(TMP68301, tmp68301_device, "tmp68301", "Toshiba TMP68301") void tmp68301_device::tmp68301_regs(address_map &map) { -// AM_RANGE(0x000,0x3ff) AM_RAM + map(0x000, 0x3ff).rw(FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); + map(0x080, 0x093).rw(FUNC(tmp68301_device::icr_r), FUNC(tmp68301_device::icr_w)).umask16(0x00ff); map(0x094, 0x095).rw(FUNC(tmp68301_device::imr_r), FUNC(tmp68301_device::imr_w)); @@ -134,9 +135,7 @@ WRITE8_MEMBER(tmp68301_device::icr_w) } tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, TMP68301, tag, owner, clock), - device_memory_interface(mconfig, *this), - m_cpu(*this, finder_base::DUMMY_TAG), + : m68000_device(mconfig, TMP68301, tag, owner, clock), m_in_parallel_cb(*this), m_out_parallel_cb(*this), m_ipl(0), @@ -145,8 +144,7 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, m_iisr(0), m_scr(0), m_pdir(0), - m_pdr(0), - m_space_config("regs", ENDIANNESS_LITTLE, 16, 10, 0, address_map_constructor(FUNC(tmp68301_device::tmp68301_regs), this)) + m_pdr(0) { memset(m_regs, 0, sizeof(m_regs)); memset(m_icr, 0, sizeof(m_icr)); @@ -159,13 +157,17 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, void tmp68301_device::device_start() { - int i; - for (i = 0; i < 3; i++) + m68000_device::device_start(); + + for (int i = 0; i < 3; i++) m_tmp68301_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmp68301_device::timer_callback), this)); m_in_parallel_cb.resolve_safe(0); m_out_parallel_cb.resolve_safe(); + m_program->install_device(0xfffc00, 0xffffff, *this, &tmp68301_device::tmp68301_regs); + m_int_ack_callback = device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback), this); + save_item(NAME(m_regs)); save_item(NAME(m_icr)); save_item(NAME(m_ipl)); @@ -183,6 +185,8 @@ void tmp68301_device::device_start() void tmp68301_device::device_reset() { + m68000_device::device_reset(); + m_ipr = 0; m_iisr = 0; m_imr = 0x7f7; // mask all irqs @@ -190,40 +194,10 @@ void tmp68301_device::device_reset() update_ipl(); } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -device_memory_interface::space_config_vector tmp68301_device::memory_space_config() const -{ - return space_config_vector { - std::make_pair(0, &m_space_config) - }; -} - //************************************************************************** // INLINE HELPERS //************************************************************************** -//------------------------------------------------- -// read_byte - read a byte at the given address -//------------------------------------------------- - -inline uint16_t tmp68301_device::read_word(offs_t address) -{ - return space(0).read_word(address << 1); -} - -//------------------------------------------------- -// write_byte - write a byte at the given address -//------------------------------------------------- - -inline void tmp68301_device::write_word(offs_t address, uint16_t data) -{ - space(0).write_word(address << 1, data); -} - IRQ_CALLBACK_MEMBER(tmp68301_device::irq_callback) { uint8_t IVNR = m_regs[0x9a/2] & 0xe0; // Interrupt Vector Number Register (IVNR) @@ -312,7 +286,7 @@ void tmp68301_device::update_timer(int i) { int scale = (TCR & 0x3c00)>>10; // P4..1 if (scale > 8) scale = 8; - duration = attotime::from_hz(m_cpu->unscaled_clock()) * ((1 << scale) * max); + duration = attotime::from_hz(unscaled_clock()) * ((1 << scale) * max); } break; } @@ -343,9 +317,9 @@ void tmp68301_device::update_ipl() if (new_ipl != m_ipl) { if (m_ipl != 0) - m_cpu->set_input_line(m_ipl, CLEAR_LINE); + set_input_line(m_ipl, CLEAR_LINE); if (new_ipl != 0) - m_cpu->set_input_line(new_ipl, ASSERT_LINE); + set_input_line(new_ipl, ASSERT_LINE); m_ipl = new_ipl; } @@ -366,18 +340,16 @@ uint8_t tmp68301_device::serial_interrupt_cause(int channel) READ16_MEMBER( tmp68301_device::regs_r ) { - return read_word(offset); + return m_regs[offset]; } WRITE16_MEMBER( tmp68301_device::regs_w ) { COMBINE_DATA(&m_regs[offset]); - write_word(offset,m_regs[offset]); - if (!ACCESSING_BITS_0_7) return; -// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", m_cpu->pc(),offset*2,data,mem_mask^0xffff); +// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", >pc(),offset*2,data,mem_mask^0xffff); switch( offset * 2 ) { diff --git a/src/devices/machine/tmp68301.h b/src/devices/machine/tmp68301.h index e019387802b..c350b9b0be6 100644 --- a/src/devices/machine/tmp68301.h +++ b/src/devices/machine/tmp68301.h @@ -16,27 +16,19 @@ -class tmp68301_device : public device_t, - public device_memory_interface +class tmp68301_device : public m68000_device { public: tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <typename T> void set_cputag(T &&tag) { m_cpu.set_tag(std::forward<T>(tag)); } // FIXME: M68000 ought to be a parent class, not an external object auto in_parallel_callback() { return m_in_parallel_cb.bind(); } auto out_parallel_callback() { return m_out_parallel_cb.bind(); } - // Hardware Registers - DECLARE_READ16_MEMBER( regs_r ); - DECLARE_WRITE16_MEMBER( regs_w ); - // Interrupts void external_interrupt_0(); void external_interrupt_1(); void external_interrupt_2(); - IRQ_CALLBACK_MEMBER(irq_callback); - private: DECLARE_READ16_MEMBER(imr_r); DECLARE_WRITE16_MEMBER(imr_w); @@ -53,13 +45,18 @@ private: DECLARE_READ8_MEMBER(icr_r); DECLARE_WRITE8_MEMBER(icr_w); + // Hardware Registers + DECLARE_READ16_MEMBER( regs_r ); + DECLARE_WRITE16_MEMBER( regs_w ); + void tmp68301_regs(address_map &map); + IRQ_CALLBACK_MEMBER(irq_callback); + protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual space_config_vector memory_space_config() const override; private: TIMER_CALLBACK_MEMBER(timer_callback); @@ -78,11 +75,6 @@ private: static constexpr uint16_t TIMER1_IRQ = 1 << 9; static constexpr uint16_t TIMER2_IRQ = 1 << 10; - inline uint16_t read_word(offs_t address); - inline void write_word(offs_t address, uint16_t data); - - required_device<m68000_base_device> m_cpu; - devcb_read16 m_in_parallel_cb; devcb_write16 m_out_parallel_cb; @@ -100,8 +92,6 @@ private: uint16_t m_pdir; uint16_t m_pdr; uint8_t m_icr[10]; - - const address_space_config m_space_config; }; DECLARE_DEVICE_TYPE(TMP68301, tmp68301_device) diff --git a/src/devices/machine/tms5501.cpp b/src/devices/machine/tms5501.cpp index f7581a30a72..d067497567a 100644 --- a/src/devices/machine/tms5501.cpp +++ b/src/devices/machine/tms5501.cpp @@ -263,6 +263,9 @@ READ8_MEMBER( tms5501_device::rst_r ) READ8_MEMBER( tms5501_device::sta_r ) { + if(is_transmit_register_empty()) + m_sta |= STA_XBE; + uint8_t data = m_sta; m_sta &= ~STA_OE; diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index d6dbe6cedea..64b844dd222 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -2292,6 +2292,9 @@ void upd765_family_device::read_id_start(floppy_info &fi) return; } + for(int i=0; i<4; i++) + cur_live.idbuf[i] = command[i+2]; + read_id_continue(fi); } diff --git a/src/devices/machine/vrc5074.cpp b/src/devices/machine/vrc5074.cpp index b04b689bd9b..0aeef7ebfdc 100644 --- a/src/devices/machine/vrc5074.cpp +++ b/src/devices/machine/vrc5074.cpp @@ -1008,7 +1008,7 @@ WRITE_LINE_MEMBER(vrc5074_device::uart_irq_callback) READ32_MEMBER(vrc5074_device::serial_r) { - uint32_t result = m_uart->ins8250_r(space, offset>>1); + uint32_t result = m_uart->ins8250_r(offset>>1); if (0 && LOG_NILE) logerror("%s serial_r offset %03X = %08X (%08x)\n", machine().describe_context(), offset>>1, result, offset*4); @@ -1017,7 +1017,7 @@ READ32_MEMBER(vrc5074_device::serial_r) WRITE32_MEMBER(vrc5074_device::serial_w) { - m_uart->ins8250_w(space, offset>>1, data); + m_uart->ins8250_w(offset>>1, data); if (PRINTF_SERIAL && offset == NREG_UARTTHR) { static std::string debugStr; printf("%c", data); diff --git a/src/devices/machine/z80ctc.cpp b/src/devices/machine/z80ctc.cpp index 1bd0f887397..74adf998feb 100644 --- a/src/devices/machine/z80ctc.cpp +++ b/src/devices/machine/z80ctc.cpp @@ -91,7 +91,7 @@ z80ctc_device::z80ctc_device(const machine_config &mconfig, const char *tag, dev // read - standard handler for reading //------------------------------------------------- -READ8_MEMBER( z80ctc_device::read ) +uint8_t z80ctc_device::read(offs_t offset) { return m_channel[offset & 3]->read(); } @@ -101,7 +101,7 @@ READ8_MEMBER( z80ctc_device::read ) // write - standard handler for writing //------------------------------------------------- -WRITE8_MEMBER( z80ctc_device::write ) +void z80ctc_device::write(offs_t offset, uint8_t data) { m_channel[offset & 3]->write(data); } diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h index 0b388eb3933..98dd852ddd2 100644 --- a/src/devices/machine/z80ctc.h +++ b/src/devices/machine/z80ctc.h @@ -88,8 +88,8 @@ public: template <int Channel> void set_clk(const XTAL &xtal) { channel_config(Channel).set_clock(xtal); } // read/write handlers - DECLARE_READ8_MEMBER( read ); - DECLARE_WRITE8_MEMBER( write ); + uint8_t read(offs_t offset); + void write(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER( trg0 ); DECLARE_WRITE_LINE_MEMBER( trg1 ); DECLARE_WRITE_LINE_MEMBER( trg2 ); diff --git a/src/devices/machine/z80dart.cpp b/src/devices/machine/z80dart.cpp index 05a7aef03f3..116f9264598 100644 --- a/src/devices/machine/z80dart.cpp +++ b/src/devices/machine/z80dart.cpp @@ -392,7 +392,7 @@ int z80dart_device::m1_r() // cd_ba_r - //------------------------------------------------- -READ8_MEMBER( z80dart_device::cd_ba_r ) +uint8_t z80dart_device::cd_ba_r(offs_t offset) { int ba = BIT(offset, 0); int cd = BIT(offset, 1); @@ -406,7 +406,7 @@ READ8_MEMBER( z80dart_device::cd_ba_r ) // cd_ba_w - //------------------------------------------------- -WRITE8_MEMBER( z80dart_device::cd_ba_w ) +void z80dart_device::cd_ba_w(offs_t offset, uint8_t data) { int ba = BIT(offset, 0); int cd = BIT(offset, 1); @@ -423,7 +423,7 @@ WRITE8_MEMBER( z80dart_device::cd_ba_w ) // ba_cd_r - //------------------------------------------------- -READ8_MEMBER( z80dart_device::ba_cd_r ) +uint8_t z80dart_device::ba_cd_r(offs_t offset) { int ba = BIT(offset, 1); int cd = BIT(offset, 0); @@ -437,7 +437,7 @@ READ8_MEMBER( z80dart_device::ba_cd_r ) // ba_cd_w - //------------------------------------------------- -WRITE8_MEMBER( z80dart_device::ba_cd_w ) +void z80dart_device::ba_cd_w(offs_t offset, uint8_t data) { int ba = BIT(offset, 1); int cd = BIT(offset, 0); diff --git a/src/devices/machine/z80dart.h b/src/devices/machine/z80dart.h index 6abceefa5d9..976eafe7f7b 100644 --- a/src/devices/machine/z80dart.h +++ b/src/devices/machine/z80dart.h @@ -418,20 +418,20 @@ public: m_txcb = txb; } - DECLARE_READ8_MEMBER( cd_ba_r ); - DECLARE_WRITE8_MEMBER( cd_ba_w ); - DECLARE_READ8_MEMBER( ba_cd_r ); - DECLARE_WRITE8_MEMBER( ba_cd_w ); + uint8_t cd_ba_r(offs_t offset); + void cd_ba_w(offs_t offset, uint8_t data); + uint8_t ba_cd_r(offs_t offset); + void ba_cd_w(offs_t offset, uint8_t data); - DECLARE_READ8_MEMBER( da_r ) { return m_chanA->data_read(); } - DECLARE_WRITE8_MEMBER( da_w ) { m_chanA->data_write(data); } - DECLARE_READ8_MEMBER( db_r ) { return m_chanB->data_read(); } - DECLARE_WRITE8_MEMBER( db_w ) { m_chanB->data_write(data); } + uint8_t da_r() { return m_chanA->data_read(); } + void da_w(uint8_t data) { m_chanA->data_write(data); } + uint8_t db_r() { return m_chanB->data_read(); } + void db_w(uint8_t data) { m_chanB->data_write(data); } - DECLARE_READ8_MEMBER( ca_r ) { return m_chanA->control_read(); } - DECLARE_WRITE8_MEMBER( ca_w ) { m_chanA->control_write(data); } - DECLARE_READ8_MEMBER( cb_r ) { return m_chanB->control_read(); } - DECLARE_WRITE8_MEMBER( cb_w ) { m_chanB->control_write(data); } + uint8_t ca_r() { return m_chanA->control_read(); } + void ca_w(uint8_t data) { m_chanA->control_write(data); } + uint8_t cb_r() { return m_chanB->control_read(); } + void cb_w(uint8_t data) { m_chanB->control_write(data); } // interrupt acknowledge int m1_r(); @@ -580,7 +580,7 @@ public: // construction/destruction i8274_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER( inta_r ) { return m1_r(); }; + uint8_t inta_r() { return m1_r(); }; }; diff --git a/src/devices/machine/z80sio.cpp b/src/devices/machine/z80sio.cpp index 8337aeafdf6..b985340e576 100644 --- a/src/devices/machine/z80sio.cpp +++ b/src/devices/machine/z80sio.cpp @@ -845,7 +845,7 @@ int i8274_new_device::m1_r() //------------------------------------------------- // cd_ba_r - //------------------------------------------------- -READ8_MEMBER( z80sio_device::cd_ba_r ) +uint8_t z80sio_device::cd_ba_r(offs_t offset) { int ba = BIT(offset, 0); int cd = BIT(offset, 1); @@ -858,7 +858,7 @@ READ8_MEMBER( z80sio_device::cd_ba_r ) //------------------------------------------------- // cd_ba_w - //------------------------------------------------- -WRITE8_MEMBER( z80sio_device::cd_ba_w ) +void z80sio_device::cd_ba_w(offs_t offset, uint8_t data) { int ba = BIT(offset, 0); int cd = BIT(offset, 1); @@ -874,7 +874,7 @@ WRITE8_MEMBER( z80sio_device::cd_ba_w ) //------------------------------------------------- // ba_cd_r - //------------------------------------------------- -READ8_MEMBER( z80sio_device::ba_cd_r ) +uint8_t z80sio_device::ba_cd_r(offs_t offset) { int ba = BIT(offset, 1); int cd = BIT(offset, 0); @@ -887,7 +887,7 @@ READ8_MEMBER( z80sio_device::ba_cd_r ) //------------------------------------------------- // ba_cd_w - //------------------------------------------------- -WRITE8_MEMBER( z80sio_device::ba_cd_w ) +void z80sio_device::ba_cd_w(offs_t offset, uint8_t data) { int ba = BIT(offset, 1); int cd = BIT(offset, 0); diff --git a/src/devices/machine/z80sio.h b/src/devices/machine/z80sio.h index eff587dc281..fabe6a20bfc 100644 --- a/src/devices/machine/z80sio.h +++ b/src/devices/machine/z80sio.h @@ -305,20 +305,20 @@ public: template <typename T> void set_cputag(T &&tag) { m_hostcpu.set_tag(std::forward<T>(tag)); } - DECLARE_READ8_MEMBER( cd_ba_r ); - DECLARE_WRITE8_MEMBER( cd_ba_w ); - DECLARE_READ8_MEMBER( ba_cd_r ); - DECLARE_WRITE8_MEMBER( ba_cd_w ); - - DECLARE_READ8_MEMBER( da_r ) { return m_chanA->data_read(); } - DECLARE_WRITE8_MEMBER( da_w ) { m_chanA->data_write(data); } - DECLARE_READ8_MEMBER( db_r ) { return m_chanB->data_read(); } - DECLARE_WRITE8_MEMBER( db_w ) { m_chanB->data_write(data); } - - DECLARE_READ8_MEMBER( ca_r ) { return m_chanA->control_read(); } - DECLARE_WRITE8_MEMBER( ca_w ) { m_chanA->control_write(data); } - DECLARE_READ8_MEMBER( cb_r ) { return m_chanB->control_read(); } - DECLARE_WRITE8_MEMBER( cb_w ) { m_chanB->control_write(data); } + uint8_t cd_ba_r(offs_t offset); + void cd_ba_w(offs_t offset, uint8_t data); + uint8_t ba_cd_r(offs_t offset); + void ba_cd_w(offs_t offset, uint8_t data); + + uint8_t da_r() { return m_chanA->data_read(); } + void da_w(uint8_t data) { m_chanA->data_write(data); } + uint8_t db_r() { return m_chanB->data_read(); } + void db_w(uint8_t data) { m_chanB->data_write(data); } + + uint8_t ca_r() { return m_chanA->control_read(); } + void ca_w(uint8_t data) { m_chanA->control_write(data); } + uint8_t cb_r() { return m_chanB->control_read(); } + void cb_w(uint8_t data) { m_chanB->control_write(data); } // interrupt acknowledge virtual int m1_r(); diff --git a/src/devices/sound/c6280.cpp b/src/devices/sound/c6280.cpp index 0e5873c86de..6c6f2410166 100644 --- a/src/devices/sound/c6280.cpp +++ b/src/devices/sound/c6280.cpp @@ -92,16 +92,16 @@ void c6280_device::sound_stream_update(sound_stream &stream, stream_sample_t **i if((ch >= 4) && (m_channel[ch].m_noise_control & 0x80)) { /* Noise mode */ - uint32_t step = m_noise_freq_tab[(m_channel[ch].m_noise_control & 0x1F) ^ 0x1F]; + uint32_t step = (m_channel[ch].m_noise_control & 0x1F) ^ 0x1F; for (int i = 0; i < samples; i += 1) { static int data = 0; - m_channel[ch].m_noise_counter += step; - if(m_channel[ch].m_noise_counter >= 0x800) + if(m_channel[ch].m_noise_counter <= 0) { + m_channel[ch].m_noise_counter = step << 2; data = (machine().rand() & 1) ? 0x1F : 0; } - m_channel[ch].m_noise_counter &= 0x7FF; + m_channel[ch].m_noise_counter--; outputs[0][i] += (int16_t)(vll * (data - 16)); outputs[1][i] += (int16_t)(vlr * (data - 16)); } @@ -118,28 +118,40 @@ void c6280_device::sound_stream_update(sound_stream &stream, stream_sample_t **i } else { - if ((m_lfo_control & 0x80) && (ch < 2)) + if ((m_lfo_control & 3) && (ch < 2)) { if (ch == 0) // CH 0 only, CH 1 is muted { /* Waveform mode with LFO */ - uint32_t step = m_channel[0].m_frequency; - uint16_t lfo_step = m_channel[1].m_frequency; + uint16_t lfo_step = m_channel[1].m_frequency ? m_channel[1].m_frequency : 0x1000; for (int i = 0; i < samples; i += 1) { - int offset, lfooffset; - int16_t data, lfo_data; - lfooffset = (m_channel[1].m_counter >> 12) & 0x1F; - m_channel[1].m_counter += m_wave_freq_tab[(lfo_step * m_lfo_frequency) & 0xfff]; // TODO : multiply? verify this from real hardware. - m_channel[1].m_counter &= 0x1FFFF; - lfo_data = m_channel[1].m_waveform[lfooffset]; - if (m_lfo_control & 3) + int32_t step = m_channel[0].m_frequency ? m_channel[0].m_frequency : 0x1000; + if (m_lfo_control & 0x80) // reset LFO + { + m_channel[1].m_tick = lfo_step * m_lfo_frequency; + m_channel[1].m_counter = 0; + } + else + { + int lfooffset = m_channel[1].m_counter; + m_channel[1].m_tick--; + if (m_channel[1].m_tick <= 0) + { + m_channel[1].m_tick = lfo_step * m_lfo_frequency; // TODO : multiply? verify this from real hardware. + m_channel[1].m_counter = (m_channel[1].m_counter + 1) & 0x1f; + } + int16_t lfo_data = m_channel[1].m_waveform[lfooffset]; step += ((lfo_data - 16) << (((m_lfo_control & 3)-1)<<1)); // verified from patent, TODO : same in real hardware? - - offset = (m_channel[0].m_counter >> 12) & 0x1F; - m_channel[0].m_counter += m_wave_freq_tab[step & 0xfff]; - m_channel[0].m_counter &= 0x1FFFF; - data = m_channel[0].m_waveform[offset]; + } + int offset = m_channel[0].m_counter; + m_channel[0].m_tick--; + if (m_channel[0].m_tick <= 0) + { + m_channel[0].m_tick = step; + m_channel[0].m_counter = (m_channel[0].m_counter + 1) & 0x1f; + } + int16_t data = m_channel[0].m_waveform[offset]; outputs[0][i] += (int16_t)(vll * (data - 16)); outputs[1][i] += (int16_t)(vlr * (data - 16)); } @@ -148,15 +160,17 @@ void c6280_device::sound_stream_update(sound_stream &stream, stream_sample_t **i else { /* Waveform mode */ - uint32_t step = m_wave_freq_tab[m_channel[ch].m_frequency]; + uint32_t step = m_channel[ch].m_frequency ? m_channel[ch].m_frequency : 0x1000; for (int i = 0; i < samples; i += 1) { - int offset; - int16_t data; - offset = (m_channel[ch].m_counter >> 12) & 0x1F; - m_channel[ch].m_counter += step; - m_channel[ch].m_counter &= 0x1FFFF; - data = m_channel[ch].m_waveform[offset]; + int offset = m_channel[ch].m_counter; + m_channel[ch].m_tick--; + if (m_channel[ch].m_tick <= 0) + { + m_channel[ch].m_tick = step; + m_channel[ch].m_counter = (m_channel[ch].m_counter + 1) & 0x1f; + } + int16_t data = m_channel[ch].m_waveform[offset]; outputs[0][i] += (int16_t)(vll * (data - 16)); outputs[1][i] += (int16_t)(vlr * (data - 16)); } @@ -205,6 +219,10 @@ WRITE8_MEMBER( c6280_device::c6280_w ) { chan->m_index = 0; } + if(((chan->m_control & 0x80) == 0) && (data & 0x80)) + { + chan->m_tick = chan->m_frequency; + } chan->m_control = data; break; @@ -261,38 +279,9 @@ c6280_device::c6280_device(const machine_config &mconfig, const char *tag, devic { } -//------------------------------------------------- -// calculate_clocks - (re)calculate clock-derived -// members -//------------------------------------------------- - -void c6280_device::calculate_clocks() -{ - int rate = clock() / 16; - - /* Make waveform frequency table */ - for (int i = 0; i < 4096; i += 1) - { - double step = (16 * 4096) / (i + 1); - m_wave_freq_tab[(1 + i) & 0xFFF] = (uint32_t)step; - } - - /* Make noise frequency table */ - for (int i = 0; i < 32; i += 1) - { - double step = (16 * 32) / (i+1); - m_noise_freq_tab[i] = (uint32_t)step; - } - - if (m_stream != nullptr) - m_stream->set_sample_rate(rate); - else - m_stream = machine().sound().stream_alloc(*this, 0, 2, rate); -} - void c6280_device::device_clock_changed() { - calculate_clocks(); + m_stream->set_sample_rate(clock()); } //------------------------------------------------- @@ -311,7 +300,7 @@ void c6280_device::device_start() m_lfo_control = 0; memset(m_channel, 0, sizeof(channel) * 8); - calculate_clocks(); + m_stream = machine().sound().stream_alloc(*this, 0, 2, clock()); /* Make volume table */ /* PSG has 48dB volume range spread over 32 steps */ @@ -338,5 +327,6 @@ void c6280_device::device_start() save_item(NAME(m_channel[chan].m_noise_control), chan); save_item(NAME(m_channel[chan].m_noise_counter), chan); save_item(NAME(m_channel[chan].m_counter), chan); + save_item(NAME(m_channel[chan].m_tick), chan); } } diff --git a/src/devices/sound/c6280.h b/src/devices/sound/c6280.h index 5b7f94bce7f..0cfdc34799b 100644 --- a/src/devices/sound/c6280.h +++ b/src/devices/sound/c6280.h @@ -8,6 +8,8 @@ class c6280_device : public device_t, public device_sound_interface { public: + static constexpr feature_type imperfect_features() { return feature::SOUND; } // Incorrect / Not verified noise / LFO output + c6280_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // write only @@ -22,8 +24,6 @@ protected: virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; private: - void calculate_clocks(); - struct channel { uint16_t m_frequency; uint8_t m_control; @@ -32,8 +32,9 @@ private: uint8_t m_index; int16_t m_dda; uint8_t m_noise_control; - uint32_t m_noise_counter; + int32_t m_noise_counter; uint32_t m_counter; + int32_t m_tick; }; // internal state @@ -44,8 +45,6 @@ private: uint8_t m_lfo_control; channel m_channel[8]; int16_t m_volume_table[32]; - uint32_t m_noise_freq_tab[32]; - uint32_t m_wave_freq_tab[4096]; }; DECLARE_DEVICE_TYPE(C6280, c6280_device) diff --git a/src/devices/sound/es8712.cpp b/src/devices/sound/es8712.cpp index e0b2699edd0..00ec7fe90d3 100644 --- a/src/devices/sound/es8712.cpp +++ b/src/devices/sound/es8712.cpp @@ -228,7 +228,7 @@ WRITE_LINE_MEMBER(es8712_device::msm_int) } else { - m_adpcm_select->write_ab(read_byte(m_base_offset)); + m_adpcm_select->ab_w(read_byte(m_base_offset)); m_adpcm_select->select_w(m_adpcm_trigger); m_adpcm_trigger ^= 1; if (m_adpcm_trigger == 0) diff --git a/src/devices/sound/meg.cpp b/src/devices/sound/meg.cpp new file mode 100644 index 00000000000..a1f9d67b293 --- /dev/null +++ b/src/devices/sound/meg.cpp @@ -0,0 +1,384 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Yamaha MEG - Multiple effects generator +// +// Audio dsp dedicated to effects generation + +#include "emu.h" +#include "debugger.h" +#include "meg.h" + +DEFINE_DEVICE_TYPE(MEG, meg_device, "meg", "Multiple Effects Generator (HD62098 / XM309A00)") +DEFINE_DEVICE_TYPE(MEGEMB, meg_embedded_device, "megemb", "Multiple Effects Generator (embedded)") + +void meg_base_device::prg_map(address_map &map) +{ + map(0, m_prg_size - 1).ram(); +} + +void meg_base_device::fp_map(address_map &map) +{ + map(0, m_prg_size - 1).ram(); +} + +void meg_base_device::offsets_map(address_map &map) +{ + map(0, 0x7f).ram(); +} + +meg_base_device::meg_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 prg_size) : + cpu_device(mconfig, type, tag, owner, clock), + m_program_config("program", ENDIANNESS_BIG, 64, prg_size > 256 ? 9 : 8, -3, address_map_constructor(FUNC(meg_base_device::prg_map), this)), + m_fp_config("fp", ENDIANNESS_BIG, 16, prg_size > 256 ? 9 : 8, -1, address_map_constructor(FUNC(meg_base_device::fp_map), this)), + m_offsets_config("offsets", ENDIANNESS_BIG, 16, prg_size > 256 ? 7 : 7, -1, address_map_constructor(FUNC(meg_base_device::offsets_map), this)), + m_prg_size(prg_size) +{ +} + + +void meg_base_device::prg_w(u16 address, u64 opcode) +{ + m_program->write_qword(address, opcode); +} + +void meg_base_device::fp_w(u16 address, u16 value) +{ + m_fp->write_word(address, value); +} + +void meg_base_device::offset_w(u16 address, u16 value) +{ + m_offsets->write_word(address, value); +} + +void meg_base_device::lfo_w(u8 reg, u16 value) +{ + m_lfo[reg] = value; + + static const int dt[8] = { 0, 32, 64, 128, 256, 512, 1024, 2048 }; + static const int sh[8] = { 0, 0, 1, 2, 3, 4, 5, 6 }; + + int scale = (value >> 5) & 7; + int step = ((value & 31) << sh[scale]) + dt[scale]; + logerror("lfo_w %02x freq=%5.2f phase=%6.4f\n", reg, step * 44100.0/4194304, (value >> 8)/256.0); +} + +void meg_base_device::map_w(u8 reg, u16 value) +{ + m_map[reg] = value; +} + +u64 meg_base_device::prg_r(u16 address) const +{ + return m_program->read_qword(address); +} + +u16 meg_base_device::fp_r(u16 address) const +{ + return m_fp->read_word(address); +} + +u16 meg_base_device::offset_r(u16 address) const +{ + return m_offsets->read_word(address); +} + +u16 meg_base_device::lfo_r(u8 reg) const +{ + return m_lfo[reg]; +} + +u16 meg_base_device::map_r(u8 reg) const +{ + return m_map[reg]; +} + + +void meg_base_device::device_start() +{ + m_program = &space(AS_PROGRAM); + m_fp = &space(AS_FP); + m_offsets = &space(AS_OFFSETS); + + state_add(STATE_GENPC, "GENPC", m_pc).noshow(); + state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow(); + state_add(0, "PC", m_pc); + + set_icountptr(m_icount); + + save_item(NAME(m_lfo)); + save_item(NAME(m_map)); + save_item(NAME(m_pc)); +} + +void meg_base_device::device_reset() +{ + memset(m_lfo, 0, sizeof(m_lfo)); + memset(m_map, 0, sizeof(m_map)); + m_pc = 0; +} + +uint32_t meg_base_device::execute_min_cycles() const +{ + return 1; +} + +uint32_t meg_base_device::execute_max_cycles() const +{ + return 1; +} + +uint32_t meg_base_device::execute_input_lines() const +{ + return 0; +} + +void meg_base_device::execute_run() +{ + if(machine().debug_flags & DEBUG_FLAG_ENABLED) + debugger_instruction_hook(m_pc); + m_icount = 0; +} + +device_memory_interface::space_config_vector meg_base_device::memory_space_config() const +{ + return space_config_vector { + std::make_pair(AS_PROGRAM, &m_program_config), + std::make_pair(AS_FP, &m_fp_config), + std::make_pair(AS_OFFSETS, &m_offsets_config) + }; +} + +void meg_base_device::state_import(const device_state_entry &entry) +{ +} + +void meg_base_device::state_export(const device_state_entry &entry) +{ +} + +void meg_base_device::state_string_export(const device_state_entry &entry, std::string &str) const +{ +} + +std::unique_ptr<util::disasm_interface> meg_base_device::create_disassembler() +{ + return std::make_unique<meg_disassembler>(this); +} + +meg_embedded_device::meg_embedded_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + meg_base_device(mconfig, MEGEMB, tag, owner, clock, 384) +{ +} + +meg_device::meg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + meg_base_device(mconfig, MEG, tag, owner, clock, 256) +{ +} + + +// vl70: +// 6d1e: write 1, r0l +// 6d26: write 2, r0l +// 6d2e: read 2 +// 6d36: write 3, r0l +// 6d3e: write reg 4:r0h, r0l +// 6d52: write reg 5:r0h, r0l-1 +// 6d68: write 7, r0l +// 6d70: write reg 8:r0h, r0l +// 6d84: write reg 9:r0h, r0l +// 6dac: write a, r0l +// 6db4: write reg cd:r1l, r0 +// 6dd4: write reg e:r0h, r0l +// 6dee: write reg f:r0h, r0l +// 6e08: read 10,11 +// 6e1c: write reg 1213:r1l, r0 +// 6e3c: write reg 14:r0h, r0l +// 6e50: write 15, r0l +// 6e58: write reg 16:r0h, r0l +// 6e6c: write reg 17:r0h, r0l +// 6e80: write reg 18:e0h, e0l + +void meg_device::map(address_map &map) +{ + map(0x00, 0x00).w(FUNC(meg_device::select_w)); + map(0x01, 0x01).w(FUNC(meg_device::s1_w)); + map(0x02, 0x02).rw(FUNC(meg_device::s2_r), FUNC(meg_device::s2_w)); + map(0x03, 0x03).w(FUNC(meg_device::s3_w)); + map(0x04, 0x04).w(FUNC(meg_device::s4_w)); + map(0x05, 0x05).w(FUNC(meg_device::s5_w)); + map(0x07, 0x07).w(FUNC(meg_device::s7_w)); + map(0x08, 0x08).w(FUNC(meg_device::s8_w)); + map(0x09, 0x09).w(FUNC(meg_device::s9_w)); + map(0x0a, 0x0a).w(FUNC(meg_device::sa_w)); + map(0x0c, 0x0c).w(FUNC(meg_device::fph_w)); + map(0x0d, 0x0d).w(FUNC(meg_device::fpl_w)); + map(0x0e, 0x0e).w(FUNC(meg_device::se_w)); + map(0x0f, 0x0f).w(FUNC(meg_device::sf_w)); + map(0x10, 0x10).r(FUNC(meg_device::s10_r)); + map(0x11, 0x11).r(FUNC(meg_device::s11_r)); + map(0x12, 0x12).w(FUNC(meg_device::offseth_w)); + map(0x13, 0x13).w(FUNC(meg_device::offsetl_w)); + map(0x14, 0x14).w(FUNC(meg_device::s14_w)); + map(0x15, 0x15).w(FUNC(meg_device::s15_w)); + map(0x16, 0x16).w(FUNC(meg_device::s16_w)); + map(0x17, 0x17).w(FUNC(meg_device::s17_w)); + map(0x18, 0x18).w(FUNC(meg_device::s18_w)); +} + +u8 meg_device::s2_r() +{ + logerror("read r2 %s\n", machine().describe_context()); + return 0x00; +} + +void meg_device::select_w(u8 data) +{ + m_reg = data; +} + +void meg_device::s1_w(u8 data) +{ + logerror("r1 %02x %s\n", data, machine().describe_context()); +} + +void meg_device::s2_w(u8 data) +{ + logerror("r2 %02x %s\n", data, machine().describe_context()); +} + +void meg_device::s3_w(u8 data) +{ + logerror("r3 %02x %s\n", data, machine().describe_context()); +} + +void meg_device::s4_w(u8 data) +{ + if(m_r4[m_reg] != data) { + m_r4[m_reg] = data; + logerror("r4[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +void meg_device::s5_w(u8 data) +{ + if(m_r5[m_reg] != data) { + m_r5[m_reg] = data; + logerror("r5[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +void meg_device::s7_w(u8 data) +{ + logerror("r7 %02x %s\n", data, machine().describe_context()); +} + +void meg_device::s8_w(u8 data) +{ + if(m_r8[m_reg] != data) { + m_r8[m_reg] = data; + logerror("r8[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + + +void meg_device::s9_w(u8 data) +{ + if(m_r9[m_reg] != data) { + m_r9[m_reg] = data; + logerror("r9[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +void meg_device::sa_w(u8 data) +{ + logerror("ra %02x %s\n", data, machine().describe_context()); +} + +void meg_device::fph_w(u8 data) +{ + fp_w(m_reg, (fp_r(m_reg) & 0x00ff) | (data << 8)); +} + + +void meg_device::fpl_w(u8 data) +{ + fp_w(m_reg, (fp_r(m_reg) & 0xff00) | data); +} + +void meg_device::se_w(u8 data) +{ + if(m_re[m_reg] != data) { + m_re[m_reg] = data; + logerror("re[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + + +void meg_device::sf_w(u8 data) +{ + if(m_rf[m_reg] != data) { + m_rf[m_reg] = data; + logerror("rf[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +u8 meg_device::s10_r() +{ + logerror("read r10 %s\n", machine().describe_context()); + return 0x00; +} + +u8 meg_device::s11_r() +{ + logerror("read r11 %s\n", machine().describe_context()); + return 0x00; +} + +void meg_device::offseth_w(u8 data) +{ + offset_w(m_reg, (offset_r(m_reg) & 0x00ff) | (data << 8)); +} + +void meg_device::offsetl_w(u8 data) +{ + offset_w(m_reg, (offset_r(m_reg) & 0xff00) | data); +} + +void meg_device::s14_w(u8 data) +{ + if(m_r14[m_reg] != data) { + m_r14[m_reg] = data; + logerror("r14[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +void meg_device::s15_w(u8 data) +{ + logerror("r15 %02x %s\n", data, machine().describe_context()); +} + +void meg_device::s16_w(u8 data) +{ + if(m_r16[m_reg] != data) { + m_r16[m_reg] = data; + logerror("r16[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +void meg_device::s17_w(u8 data) +{ + if(m_r17[m_reg] != data) { + m_r17[m_reg] = data; + logerror("r17[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} + +void meg_device::s18_w(u8 data) +{ + if(m_r18[m_reg] != data) { + m_r18[m_reg] = data; + logerror("r18[%02x] = %02x %s\n", m_reg, data, machine().describe_context()); + } +} diff --git a/src/devices/sound/meg.h b/src/devices/sound/meg.h new file mode 100644 index 00000000000..e9ff44f990a --- /dev/null +++ b/src/devices/sound/meg.h @@ -0,0 +1,122 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Yamaha MEG - Multiple effects generator +// +// Audio dsp dedicated to effects generation + +#ifndef DEVICES_SOUND_MEG_H +#define DEVICES_SOUND_MEG_H + +#pragma once + +#include "megd.h" + + +class meg_base_device : public cpu_device, public meg_disassembler::info +{ +public: + enum { + AS_FP = 1, + AS_OFFSETS = 2 + }; + + meg_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 prg_size); + + void prg_w(u16 address, u64 opcode); + void fp_w(u16 address, u16 value); + void offset_w(u16 address, u16 value); + void lfo_w(u8 reg, u16 value); + void map_w(u8 reg, u16 value); + u64 prg_r(u16 address) const; + virtual u16 fp_r(u16 address) const override; + virtual u16 offset_r(u16 address) const override; + u16 lfo_r(u8 reg) const; + u16 map_r(u8 reg) const; + +protected: + virtual void device_start() override; + virtual void device_reset() override; + virtual uint32_t execute_min_cycles() const override; + virtual uint32_t execute_max_cycles() const override; + virtual uint32_t execute_input_lines() const override; + virtual void execute_run() override; + virtual space_config_vector memory_space_config() const override; + virtual void state_import(const device_state_entry &entry) override; + virtual void state_export(const device_state_entry &entry) override; + virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; + virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; + +private: + address_space_config m_program_config, m_fp_config, m_offsets_config; + address_space *m_program, *m_fp, *m_offsets; + + u32 m_prg_size, m_pc; + int m_icount; + + u16 m_lfo[0x18], m_map[8]; + + void prg_map(address_map &map); + void fp_map(address_map &map); + void offsets_map(address_map &map); +}; + +class meg_embedded_device : public meg_base_device +{ +public: + meg_embedded_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 44100*384); +}; + +class meg_device : public meg_base_device +{ +public: + meg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 44100*256); + void map(address_map &map); + +private: + u8 m_r4[256]; + u8 m_r5[256]; + u8 m_r8[256]; + u8 m_r9[256]; + u8 m_re[256]; + u8 m_rf[256]; + u8 m_r12[256]; + u8 m_r13[256]; + u8 m_r14[256]; + u8 m_r16[256]; + u8 m_r17[256]; + u8 m_r18[256]; + u8 m_reg; + u8 s2_r(); + u8 s10_r(); + u8 s11_r(); + void select_w(u8 reg); + void s1_w(u8 data); + void s2_w(u8 data); + void s3_w(u8 data); + void s4_w(u8 data); + void s5_w(u8 data); + void s7_w(u8 data); + void s8_w(u8 data); + void s9_w(u8 data); + void sa_w(u8 data); + void fph_w(u8 data); + void fpl_w(u8 data); + void se_w(u8 data); + void sf_w(u8 data); + void s10_w(u8 data); + void s11_w(u8 data); + void offseth_w(u8 data); + void offsetl_w(u8 data); + void s14_w(u8 data); + void s15_w(u8 data); + void s16_w(u8 data); + void s17_w(u8 data); + void s18_w(u8 data); +}; + + +DECLARE_DEVICE_TYPE(MEG, meg_device) +DECLARE_DEVICE_TYPE(MEGEMB, meg_embedded_device) + +#endif diff --git a/src/devices/sound/megd.cpp b/src/devices/sound/megd.cpp new file mode 100644 index 00000000000..2790a7ca69c --- /dev/null +++ b/src/devices/sound/megd.cpp @@ -0,0 +1,118 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Yamaha MEG - Multiple effects generator +// +// Audio dsp dedicated to effects generation +// +// Disassembler + +#include "emu.h" +#include "megd.h" + +meg_disassembler::meg_disassembler(info *inf) : m_info(inf) +{ +} + +u32 meg_disassembler::opcode_alignment() const +{ + return 1; +} + +std::string meg_disassembler::gfp(offs_t address) const +{ + if(!m_info) + return util::string_format("fp%03x", address); + s16 fp = m_info->fp_r(address); + return util::string_format("%g", fp / 16384.0); +} + +std::string meg_disassembler::goffset(offs_t address) const +{ + return m_info ? util::string_format("%x", m_info->offset_r(address)) : util::string_format("of%02x", address); +} + +u32 meg_disassembler::b(u64 opc, u32 start, u32 count) +{ + return (opc >> start) & ((1 << count) - 1); +} + +void meg_disassembler::append(std::string &r, std::string e) +{ + if(r != "") + r += " ; "; + r += e; +} + +// 33333333 33333333 22222222 22222222 11111111 11111111 00000000 00000000 +// fedcba98 76543210 fedcba98 76543210 fedcba98 76543210 fedcba98 76543210 + +// 66665555 55555544 44444444 33333333 33222222 22221111 11111100 00000000 +// 32109876 54321098 76543210 98765432 10987654 32109876 54321098 76543210 +// XLB----- -rrrrrrr r--mmmmm m-MM---- -P-----* -----Arr rrrrrrmm mmmm---- + +// m = low is read port, high is write port, memory register +// r = low is read port, high is high port, rotating register + +// X = used for lo-fi variation only +// L = lfo read +// * = compute mul +// A = mul input = m or r +// P = P sent for register write +// B = register write to mbuf +// M = memory mode, none/read/write/read+1 + +offs_t meg_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) +{ + u64 opc = opcodes.r64(pc); + + std::string r; + + r = util::string_format("[m%02x]", b(opc, 39, 6)); + + if(b(opc, 62, 1)) + append(r, "lfo"); + + if(b(opc, 23, 1)) + switch(b(opc, 24, 2)) { + case 0: + if(b(opc, 18, 1)) + append(r, util::string_format("p += %s*m%02x", gfp(pc), b(opc, 4, 6))); + else + append(r, util::string_format("p += %s*r%02x", gfp(pc), b(opc, 10, 8))); + break; + case 1: + append(r, util::string_format("p = %s*(r%02x+m%02x)", gfp(pc), b(opc, 10, 8), b(opc, 4, 6))); + break; + case 2: + append(r, util::string_format("p ?= %s*(r%02x+m%02x)", gfp(pc), b(opc, 10, 8), b(opc, 4, 6))); + break; + case 3: + if(b(opc, 18, 1)) + append(r, util::string_format("p = %s*m%02x", gfp(pc), b(opc, 4, 6))); + else + append(r, util::string_format("p = %s*r%02x", gfp(pc), b(opc, 10, 8))); + break; + } + + if(b(opc, 30, 1)) { + if(b(opc, 61, 1)) + append(r, "mb = p"); + else if(b(opc, 46, 1) == 1) + append(r, util::string_format("m%02x = p", b(opc, 39, 6))); + else + append(r, util::string_format("r%02x = p", b(opc, 47, 8))); + } + + u32 memmode = b(opc, 36, 2); + if(memmode) { + static const char *modes[4] = { nullptr, "w", "r", "rw" }; + + append(r, util::string_format("mem_%s %x +%s", modes[memmode], b(opc, 33, 3), goffset(pc/3))); + r += util::string_format("-> m%02x", b(opcodes.r64(pc+2), 39, 6)); + } + + stream << r; + + return 1 | SUPPORTED; +} diff --git a/src/devices/sound/megd.h b/src/devices/sound/megd.h new file mode 100644 index 00000000000..59a13aa0ea4 --- /dev/null +++ b/src/devices/sound/megd.h @@ -0,0 +1,39 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Yamaha MEG - Multiple effects generator +// +// Audio dsp dedicated to effects generation +// +// Disassembler + +#ifndef DEVICES_SOUND_MEGD_H +#define DEVICES_SOUND_MEGD_H + +#pragma once + +class meg_disassembler : public util::disasm_interface +{ +public: + class info { + public: + virtual u16 fp_r(u16 address) const = 0; + virtual u16 offset_r(u16 address) const = 0; + }; + + meg_disassembler(info *inf = nullptr); + + virtual u32 opcode_alignment() const override; + virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; + +private: + info *m_info; + + std::string gfp(offs_t address) const; + std::string goffset(offs_t address) const; + + static inline u32 b(u64 opc, u32 start, u32 count); + static inline void append(std::string &r, std::string e); +}; + +#endif diff --git a/src/devices/sound/namco_163.cpp b/src/devices/sound/namco_163.cpp new file mode 100644 index 00000000000..6fdde572537 --- /dev/null +++ b/src/devices/sound/namco_163.cpp @@ -0,0 +1,176 @@ +// license:BSD-3-Clause +// copyright-holders:cam900 +/*************************************************************************** + + Namco 163 internal sound emulation by cam900 + 4 bit wavetable (variable length), 1 ~ 8 channel + Reference : https://wiki.nesdev.com/w/index.php/Namco_163_audio + +***************************************************************************/ + +#include "emu.h" +#include "namco_163.h" + + +DEFINE_DEVICE_TYPE(NAMCO_163, namco_163_sound_device, "namco_163_sound", "Namco 163 (Sound)") + +namco_163_sound_device::namco_163_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, NAMCO_163, tag, owner, clock) + , device_sound_interface(mconfig, *this) + , m_ram(nullptr) + , m_reg_addr(0x78) + , m_addr(0) + , m_inc(false) + , m_disable(false) + , m_stream(nullptr) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void namco_163_sound_device::device_start() +{ + m_ram = make_unique_clear<u8[]>(0x80); + m_stream = machine().sound().stream_alloc(*this, 0, 1, clock() / 15); + + save_pointer(NAME(m_ram), 0x80); + save_item(NAME(m_reg_addr)); + save_item(NAME(m_addr)); + save_item(NAME(m_inc)); + save_item(NAME(m_disable)); +} + + +//------------------------------------------------- +// device_clock_changed - called if the clock +// changes +//------------------------------------------------- + +void namco_163_sound_device::device_clock_changed() +{ + m_stream->set_sample_rate(clock() / 15); +} + + +inline s8 namco_163_sound_device::get_sample(u16 addr) +{ + return ((m_ram[(addr >> 1) & 0x7f] >> ((addr & 1) << 2)) & 0xf) - 8; +} + + +WRITE_LINE_MEMBER(namco_163_sound_device::disable_w) +{ + m_disable = state; +} + + +/********************************************************************************/ + +/* + Register Map (in RAM) + + 40 ffff ffff Channel 0 Frequency bits 0 - 7 + 41 pppp pppp Channel 0 Phase bits 0 - 7 + 42 ffff ffff Channel 0 Frequency bits 8 - 15 + 43 pppp pppp Channel 0 Phase bits 8 - 15 + 44 ---- --ff Channel 0 Frequency bits 16 - 17 + llll ll-- Channel 0 Waveform Length (256 - (l * 4)) 4 bit samples + 45 pppp pppp Channel 0 Phase bits 16 - 23 + 46 oooo oooo Channel 0 Waveform Offset at 4 bit samples + 47 ---- cccc Channel 0 Volume + + 48 ffff ffff Channel 1 Frequency bits 0 - 7 + 49 pppp pppp Channel 1 Phase bits 0 - 7 + 4a ffff ffff Channel 1 Frequency bits 8 - 15 + 4b pppp pppp Channel 1 Phase bits 8 - 15 + 4c ---- --ff Channel 1 Frequency bits 16 - 17 + llll ll-- Channel 1 Waveform Length (256 - (l * 4)) 4 bit samples + 4d pppp pppp Channel 1 Phase bits 16 - 23 + 4e oooo oooo Channel 1 Waveform Offset at 4 bit samples + 4f ---- cccc Channel 1 Volume + + . + . + . + + 78 ffff ffff Channel 7 Frequency bits 0 - 7 + 79 pppp pppp Channel 7 Phase bits 0 - 7 + 7a ffff ffff Channel 7 Frequency bits 8 - 15 + 7b pppp pppp Channel 7 Phase bits 8 - 15 + 7c ---- --ff Channel 7 Frequency bits 16 - 17 + llll ll-- Channel 7 Waveform Length (256 - (l * 4)) 4 bit samples + 7d pppp pppp Channel 7 Phase bits 16 - 23 + 7e oooo oooo Channel 7 Waveform Offset at 4 bit samples + 7f ---- cccc Channel 7 Volume + -ccc ---- Enable channels + -000 ---- Enable channel 7 only + -001 ---- Enable channel 7, 6 + -010 ---- Enable channel 7, 6, 5 + + . + . + . + + -111 ---- Enable all channels +*/ + +void namco_163_sound_device::addr_w(u8 data) +{ + m_inc = data & 0x80; + m_addr = data & 0x7f; +} + + +void namco_163_sound_device::data_w(u8 data) +{ + m_stream->update(); + m_ram[m_addr] = data; + if (m_inc) + m_addr = (m_addr + 1) & 0x7f; +} + + +u8 namco_163_sound_device::data_r() +{ + u8 val = m_ram[m_addr]; + if (m_inc) + m_addr = (m_addr + 1) & 0x7f; + + return val; +} + + +void namco_163_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) +{ + std::fill_n(&outputs[0][0], samples, 0); + + if (m_disable) + return; + + // Slightly noisy but closer to real hardware behavior + for (int s = 0; s < samples; s++) + { + u32 phase = (m_ram[m_reg_addr + 5] << 16) | (m_ram[m_reg_addr + 3] << 8) | m_ram[m_reg_addr + 1]; + const u32 freq = ((m_ram[m_reg_addr + 4] & 0x3) << 16) | (m_ram[m_reg_addr + 2] << 8) | m_ram[m_reg_addr + 0]; + const u16 length = 256 - (m_ram[m_reg_addr + 4] & 0xfc); + const u16 offset = m_ram[m_reg_addr + 6]; + const u8 vol = m_ram[m_reg_addr + 7] & 0xf; + + phase = (phase + freq) % (length << 16); + s32 output = get_sample((phase >> 16) + offset) * vol; + + m_ram[m_reg_addr + 1] = phase & 0xff; + m_ram[m_reg_addr + 3] = phase >> 8; + m_ram[m_reg_addr + 5] = phase >> 16; + + m_reg_addr += 8; + if (m_reg_addr >= 0x80) + { + m_reg_addr = 0x78 - ((m_ram[0x7f] & 0x70) >> 1); + } + outputs[0][s] = (output << 8); + } +} diff --git a/src/devices/sound/namco_163.h b/src/devices/sound/namco_163.h new file mode 100644 index 00000000000..1256884242b --- /dev/null +++ b/src/devices/sound/namco_163.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:cam900 +#ifndef MAME_SOUND_NAMCO_163_H +#define MAME_SOUND_NAMCO_163_H + +#pragma once + + +class namco_163_sound_device : public device_t, + public device_sound_interface +{ +public: + namco_163_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + DECLARE_WRITE_LINE_MEMBER(disable_w); + + void addr_w(u8 data); + void data_w(u8 data); + u8 data_r(); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_clock_changed() override; + + // global sound parameters + std::unique_ptr<u8[]> m_ram; + u8 m_reg_addr; + u8 m_addr; + bool m_inc; + bool m_disable; + sound_stream *m_stream; + + // internals + inline s8 get_sample(u16 addr); + + virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; +}; + +DECLARE_DEVICE_TYPE(NAMCO_163, namco_163_sound_device) + +#endif // MAME_SOUND_NAMCO_163_H diff --git a/src/devices/sound/swp30.cpp b/src/devices/sound/swp30.cpp index 56870df5ec7..f43df8084f9 100644 --- a/src/devices/sound/swp30.cpp +++ b/src/devices/sound/swp30.cpp @@ -150,8 +150,15 @@ DEFINE_DEVICE_TYPE(SWP30, swp30_device, "swp30", "Yamaha SWP30 sound chip") swp30_device::swp30_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, SWP30, tag, owner, clock), device_sound_interface(mconfig, *this), - device_rom_interface(mconfig, *this, 25+2, ENDIANNESS_LITTLE, 32) + device_rom_interface(mconfig, *this, 25+2, ENDIANNESS_LITTLE, 32), + m_meg(*this, "meg") { + (void)m_map; +} + +void swp30_device::device_add_mconfig(machine_config &config) +{ + MEGEMB(config, m_meg); } void swp30_device::device_start() @@ -160,7 +167,7 @@ void swp30_device::device_start() // Attenuantion for panning is 4.4 floating point. That means 0 // to -96.3dB. Since it's a nice range, we assume it's the same - // for other attenuation values. Computed value is is 1.16 + // for other attenuation values. Computed value is 1.16 // format, to avoid overflow for(int i=0; i<256; i++) @@ -328,8 +335,8 @@ void swp30_device::map(address_map &map) rchan(map, 0x27).rw(FUNC(swp30_device::prg_fp_r<3>), FUNC(swp30_device::prg_fp_w<3>)); rchan(map, 0x29).rw(FUNC(swp30_device::prg_fp_r<4>), FUNC(swp30_device::prg_fp_w<4>)); rchan(map, 0x2b).rw(FUNC(swp30_device::prg_fp_r<5>), FUNC(swp30_device::prg_fp_w<5>)); - rchan(map, 0x30).rw(FUNC(swp30_device::prg_int_r<0>), FUNC(swp30_device::prg_int_w<0>)); - rchan(map, 0x31).rw(FUNC(swp30_device::prg_int_r<1>), FUNC(swp30_device::prg_int_w<1>)); + rchan(map, 0x30).rw(FUNC(swp30_device::prg_off_r<0>), FUNC(swp30_device::prg_off_w<0>)); + rchan(map, 0x31).rw(FUNC(swp30_device::prg_off_r<1>), FUNC(swp30_device::prg_off_w<1>)); rchan(map, 0x3e).rw(FUNC(swp30_device::prg_lfo_r<0>), FUNC(swp30_device::prg_lfo_w<0>)); rchan(map, 0x3f).rw(FUNC(swp30_device::prg_lfo_r<1>), FUNC(swp30_device::prg_lfo_w<1>)); } @@ -381,14 +388,14 @@ void swp30_device::prg_address_w(u16 data) template<int sel> u16 swp30_device::prg_r() { constexpr offs_t shift = 48-16*sel; - return m_program[m_program_address] >> shift; + return m_meg->prg_r(m_program_address) >> shift; } template<int sel> void swp30_device::prg_w(u16 data) { constexpr offs_t shift = 48-16*sel; constexpr u64 mask = ~(u64(0xffff) << shift); - m_program[m_program_address] = (m_program[m_program_address] & mask) | (u64(data) << shift); + m_meg->prg_w(m_program_address, (m_meg->prg_r(m_program_address) & mask) | (u64(data) << shift)); if(sel == 3) { if(0) @@ -402,14 +409,12 @@ template<int sel> void swp30_device::prg_w(u16 data) template<int sel> u16 swp30_device::map_r() { - return m_map[sel]; + return m_meg->map_r(sel); } template<int sel> void swp30_device::map_w(u16 data) { - m_map[sel] = data; - if(0) - logerror("map %d: type=%02x offset=%05x size=%05x\n", sel, data >> 11, (data & 0xff) << 10, 0x400 << ((data >> 8) & 7)); + m_meg->map_w(sel, data); } @@ -656,54 +661,36 @@ void swp30_device::address_l_w(offs_t offset, u16 data) } -// MEG registers (Multiple Effects Generator) +// MEG registers forwarding template<int sel> u16 swp30_device::prg_fp_r(offs_t offset) { - offs_t adr = (offset >> 6)*6 + sel; - return m_program_pfp[adr]; + return m_meg->fp_r((offset >> 6)*6 + sel); } template<int sel> void swp30_device::prg_fp_w(offs_t offset, u16 data) { - offs_t adr = (offset >> 6)*6 + sel; - m_program_pfp[adr] = data; - if(0) - logerror("prg_fp_w %03x, %04x\n", adr, data); + m_meg->fp_w((offset >> 6)*6 + sel, data); } -template<int sel> u16 swp30_device::prg_int_r(offs_t offset) +template<int sel> u16 swp30_device::prg_off_r(offs_t offset) { - offs_t adr = (offset >> 6)*2 + sel; - return m_program_pint[adr]; + return m_meg->offset_r((offset >> 6)*2 + sel); } -template<int sel> void swp30_device::prg_int_w(offs_t offset, u16 data) +template<int sel> void swp30_device::prg_off_w(offs_t offset, u16 data) { - offs_t adr = (offset >> 6)*2 + sel; - m_program_pint[adr] = data; - if(0) - logerror("prg_int_w %02x, %04x\n", adr, data); + m_meg->offset_w((offset >> 6)*2 + sel, data); } template<int sel> u16 swp30_device::prg_lfo_r(offs_t offset) { - offs_t adr = (offset >> 6)*2 + sel; - return m_program_plfo[adr]; + return m_meg->lfo_r((offset >> 6)*2 + sel); } template<int sel> void swp30_device::prg_lfo_w(offs_t offset, u16 data) { - offs_t adr = (offset >> 6)*2 + sel; - m_program_plfo[adr] = data; - - static const int dt[8] = { 0, 32, 64, 128, 256, 512, 1024, 2048 }; - static const int sh[8] = { 0, 0, 1, 2, 3, 4, 5, 6 }; - - int scale = (data >> 5) & 7; - int step = ((data & 31) << sh[scale]) + dt[scale]; - if(0) - logerror("prg_lfo_w %02x freq=%5.2f phase=%6.4f\n", adr, step * 44100.0/4194304, (data >> 8)/256.0); + m_meg->lfo_w((offset >> 6)*2 + sel, data); } diff --git a/src/devices/sound/swp30.h b/src/devices/sound/swp30.h index 56e24b453f0..dd95a8dd85f 100644 --- a/src/devices/sound/swp30.h +++ b/src/devices/sound/swp30.h @@ -8,6 +8,8 @@ #pragma once +#include "meg.h" + class swp30_device : public device_t, public device_sound_interface, public device_rom_interface { public: @@ -20,8 +22,11 @@ protected: virtual void device_reset() override; virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; virtual void rom_bank_updated() override; + virtual void device_add_mconfig(machine_config &config) override; private: + required_device<meg_embedded_device> m_meg; + sound_stream *m_stream; s32 m_sample_increment[0x4000]; @@ -99,8 +104,8 @@ private: // MEG registers template<int sel> u16 prg_fp_r(offs_t offset); template<int sel> void prg_fp_w(offs_t offset, u16 data); - template<int sel> u16 prg_int_r(offs_t offset); - template<int sel> void prg_int_w(offs_t offset, u16 data); + template<int sel> u16 prg_off_r(offs_t offset); + template<int sel> void prg_off_w(offs_t offset, u16 data); template<int sel> u16 prg_lfo_r(offs_t offset); template<int sel> void prg_lfo_w(offs_t offset, u16 data); diff --git a/src/devices/sound/vrc6.cpp b/src/devices/sound/vrc6.cpp index 29729fc9fcc..b769fde4043 100644 --- a/src/devices/sound/vrc6.cpp +++ b/src/devices/sound/vrc6.cpp @@ -2,7 +2,7 @@ // copyright-holders:R. Belmont /*************************************************************************** - vrc6.c + vrc6.cpp Konami VRC6 additional sound channels Emulation by R. Belmont @@ -16,8 +16,6 @@ #include "emu.h" #include "vrc6.h" -#define DISABLE_VRC6_SOUND // not ready yet - // device type definition DEFINE_DEVICE_TYPE(VRC6, vrc6snd_device, "vrc6snd", "Konami VRC6 (Sound)") @@ -29,10 +27,10 @@ DEFINE_DEVICE_TYPE(VRC6, vrc6snd_device, "vrc6snd", "Konami VRC6 (Sound)") // vrc6snd_device - constructor //------------------------------------------------- -vrc6snd_device::vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +vrc6snd_device::vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, VRC6, tag, owner, clock) , device_sound_interface(mconfig, *this) - , m_freqctrl(0), m_pulsectrl{ 0, 0 }, m_sawrate(0) + , m_freqctrl(0), m_pulsectrl{ 0, 0 }, m_sawrate(0), m_master_freq(0) , m_pulsefrql{ 0, 0 }, m_pulsefrqh{ 0, 0 }, m_pulseduty{ 0, 0 } , m_sawfrql(0), m_sawfrqh(0), m_sawclock(0), m_sawaccum(0) , m_ticks{ 0, 0, 0 } @@ -55,10 +53,12 @@ void vrc6snd_device::device_start() m_ticks[0] = m_ticks[1] = m_ticks[2] = 0; m_output[0] = m_output[1] = m_output[2] = 0; m_pulseduty[0] = m_pulseduty[1] = 15; + m_master_freq = 0; save_item(NAME(m_freqctrl)); save_item(NAME(m_pulsectrl)); save_item(NAME(m_sawrate)); + save_item(NAME(m_master_freq)); save_item(NAME(m_sawaccum)); save_item(NAME(m_pulsefrql)); save_item(NAME(m_pulsefrqh)); @@ -85,6 +85,7 @@ void vrc6snd_device::device_reset() m_output[0] = m_output[1] = m_output[2] = 0; m_pulseduty[0] = m_pulseduty[1] = 15; m_pulsefrqh[0] = m_pulsefrqh[1] = m_sawfrqh = 0; + m_master_freq = 0; } //------------------------------------------------- @@ -94,27 +95,22 @@ void vrc6snd_device::device_reset() void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) { - stream_sample_t *out = outputs[0]; - int16_t tmp; - int i; + std::fill_n(&outputs[0][0], samples, 0); // check global halt bit if (m_freqctrl & 1) - { return; - } - for (i = 0; i < samples; i++) + for (int i = 0; i < samples; i++) { // update pulse1 if (m_pulsefrqh[0] & 0x80) { - m_ticks[0]--; if (m_ticks[0] == 0) { - m_ticks[0] = m_pulsefrql[0] | (m_pulsefrqh[0] & 0xf)<<4; + m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq; - m_pulseduty[0]--; + m_pulseduty[0] = (m_pulseduty[0] - 1) & 0xf; if (m_pulsectrl[0] & 0x80) { m_output[0] = m_pulsectrl[0] & 0xf; @@ -130,12 +126,9 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * m_output[0] = 0; } } - - if (m_pulseduty[0] == 0) - { - m_pulseduty[0] = 15; - } } + else + m_ticks[0]--; } else { @@ -145,12 +138,11 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * // update pulse2 if (m_pulsefrqh[1] & 0x80) { - m_ticks[1]--; if (m_ticks[1] == 0) { - m_ticks[1] = m_pulsefrql[1] | (m_pulsefrqh[1] & 0xf)<<4; + m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq; - m_pulseduty[1]--; + m_pulseduty[1] = (m_pulseduty[1] - 1) & 0xf; if (m_pulsectrl[1] & 0x80) { m_output[1] = m_pulsectrl[1] & 0xf; @@ -166,12 +158,9 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * m_output[1] = 0; } } - - if (m_pulseduty[1] == 0) - { - m_pulseduty[1] = 15; - } } + else + m_ticks[1]--; } else { @@ -181,10 +170,9 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * // update saw if (m_sawfrqh & 0x80) { - m_ticks[2]--; if (m_ticks[2] == 0) { - m_ticks[2] = m_sawfrql | (m_sawfrqh & 0xf)<<4; + m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq; // only update on even steps if ((m_sawclock > 0) && (!(m_sawclock & 1))) @@ -200,6 +188,8 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * m_output[2] = 0; } } + else + m_ticks[2]--; } else { @@ -207,10 +197,10 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * } // sum 2 4-bit pulses, 1 5-bit saw = unsigned 6 bit output - tmp = (int16_t)(uint8_t)(m_output[0] + m_output[1] + m_output[2]); + s16 tmp = (s16)(u8)(m_output[0] + m_output[1] + m_output[2]); tmp <<= 8; - out[i] = tmp; + outputs[0][i] = tmp; } } @@ -218,7 +208,7 @@ void vrc6snd_device::sound_stream_update(sound_stream &stream, stream_sample_t * // write - write to the chip's registers //--------------------------------------- -void vrc6snd_device::write(offs_t offset, uint8_t data) +void vrc6snd_device::write(offs_t offset, u8 data) { switch (offset >> 8) { @@ -232,28 +222,43 @@ void vrc6snd_device::write(offs_t offset, uint8_t data) case 1: m_pulsefrql[0] = data; - if (!(m_pulsefrqh[1] & 0x80)) + if (!(m_pulsefrqh[0] & 0x80)) { - m_ticks[0] &= ~0xff; - m_ticks[0] |= m_pulsefrql[0]; + m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq; } break; case 2: - #ifndef DISABLE_VRC6_SOUND m_pulsefrqh[0] = data; // if disabling channel, reset phase if (!(data & 0x80)) { m_pulseduty[0] = 15; - m_ticks[0] &= 0xff; - m_ticks[0] |= (m_pulsefrqh[0] & 0xf)<<4; + m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq; } - #endif break; case 3: m_freqctrl = data; + if (m_freqctrl & 4) + m_master_freq = 0x8; + else if (m_freqctrl & 2) + m_master_freq = 0x4; + else + m_master_freq = 0; + + if (!(m_pulsefrqh[0] & 0x80)) + { + m_ticks[0] = (m_pulsefrql[0] | ((m_pulsefrqh[0] & 0xf) << 8)) >> m_master_freq; + } + if (!(m_pulsefrqh[1] & 0x80)) + { + m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq; + } + if (!(m_sawfrqh & 0x80)) + { + m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq; + } break; } break; @@ -270,22 +275,18 @@ void vrc6snd_device::write(offs_t offset, uint8_t data) m_pulsefrql[1] = data; if (!(m_pulsefrqh[1] & 0x80)) { - m_ticks[1] &= ~0xff; - m_ticks[1] |= m_pulsefrql[1]; + m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq; } break; case 2: - #ifndef DISABLE_VRC6_SOUND m_pulsefrqh[1] = data; // if disabling channel, reset phase if (!(data & 0x80)) { m_pulseduty[1] = 15; - m_ticks[1] &= 0xff; - m_ticks[1] |= (m_pulsefrqh[1] & 0xf)<<4; + m_ticks[1] = (m_pulsefrql[1] | ((m_pulsefrqh[1] & 0xf) << 8)) >> m_master_freq; } - #endif break; } break; @@ -302,22 +303,18 @@ void vrc6snd_device::write(offs_t offset, uint8_t data) m_sawfrql = data; if (!(m_sawfrqh & 0x80)) { - m_ticks[2] &= ~0xff; - m_ticks[2] |= m_sawfrql; + m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq; } break; case 2: - #ifndef DISABLE_VRC6_SOUND m_sawfrqh = data; // if disabling channel, reset phase if (!(data & 0x80)) { m_sawaccum = 0; - m_ticks[2] &= 0xff; - m_ticks[2] |= (m_sawfrqh & 0xf)<<4; + m_ticks[2] = (m_sawfrql | ((m_sawfrqh & 0xf) << 8)) >> m_master_freq; } - #endif break; } break; diff --git a/src/devices/sound/vrc6.h b/src/devices/sound/vrc6.h index a24d34a90c4..f1ea8f5c9e3 100644 --- a/src/devices/sound/vrc6.h +++ b/src/devices/sound/vrc6.h @@ -22,9 +22,9 @@ class vrc6snd_device : public device_t, public device_sound_interface { public: // construction/destruction - vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + vrc6snd_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - void write(offs_t offset, uint8_t data); + void write(offs_t offset, u8 data); protected: // device-level overrides @@ -34,11 +34,11 @@ protected: virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; private: - uint8_t m_freqctrl, m_pulsectrl[2], m_sawrate; - uint8_t m_pulsefrql[2], m_pulsefrqh[2], m_pulseduty[2]; - uint8_t m_sawfrql, m_sawfrqh, m_sawclock, m_sawaccum; - uint16_t m_ticks[3]; - uint8_t m_output[3]; + u8 m_freqctrl, m_pulsectrl[2], m_sawrate, m_master_freq; + u8 m_pulsefrql[2], m_pulsefrqh[2], m_pulseduty[2]; + u8 m_sawfrql, m_sawfrqh, m_sawclock, m_sawaccum; + u16 m_ticks[3]; + u8 m_output[3]; sound_stream *m_stream; }; diff --git a/src/devices/sound/ym2413.cpp b/src/devices/sound/ym2413.cpp index 3935b1baa0e..755e66ea629 100644 --- a/src/devices/sound/ym2413.cpp +++ b/src/devices/sound/ym2413.cpp @@ -42,6 +42,8 @@ to do: #include "emu.h" #include "ym2413.h" +#include <algorithm> + #define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */ #define EG_SH 16 /* 16.16 fixed point (EG timing) */ #define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */ @@ -131,7 +133,7 @@ const uint32_t ym2413_device::sl_tab[16] = { }; #undef SC -const unsigned char ym2413_device::eg_inc[15*RATE_STEPS] = { +const uint8_t ym2413_device::eg_inc[15*RATE_STEPS] = { /*cycle:0 1 2 3 4 5 6 7*/ /* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..12 0 (increment by 0 or 1) */ @@ -158,7 +160,7 @@ const unsigned char ym2413_device::eg_inc[15*RATE_STEPS] = { #define O(a) (a*RATE_STEPS) /*note that there is no O(13) in this table - it's directly in the code */ -const unsigned char ym2413_device::eg_rate_select[16+64+16] = { /* Envelope Generator rates (16 + 64 rates + 16 RKS) */ +const uint8_t ym2413_device::eg_rate_select[16+64+16] = { /* Envelope Generator rates (16 + 64 rates + 16 RKS) */ /* 16 infinite time rates */ O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14), O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14), @@ -199,7 +201,7 @@ const unsigned char ym2413_device::eg_rate_select[16+64+16] = { /* Envelope Ge /*mask 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0 */ #define O(a) (a*1) -const unsigned char ym2413_device::eg_rate_shift[16+64+16] = { /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */ +const uint8_t ym2413_device::eg_rate_shift[16+64+16] = { /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */ /* 16 infinite time rates */ O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), @@ -350,9 +352,10 @@ const int8_t ym2413_device::lfo_pm_table[8*8] = { - waveform DC and DM select are 100% correct */ -const unsigned char ym2413_device::table[19][8] = { +const uint8_t ym2413_device::table[19][8] = { /* MULT MULT modTL DcDmFb AR/DR AR/DR SL/RR SL/RR */ /* 0 1 2 3 4 5 6 7 */ +/* These YM2413(OPLL) patch dumps are done via audio analysis (and a/b testing?) from Jarek and are known to be inaccurate */ {0x49, 0x4c, 0x4c, 0x12, 0x00, 0x00, 0x00, 0x00 }, //0 {0x61, 0x61, 0x1e, 0x17, 0xf0, 0x78, 0x00, 0x17 }, //1 @@ -385,9 +388,45 @@ const unsigned char ym2413_device::table[19][8] = { /* drum instruments definitions */ /* MULTI MULTI modTL xxx AR/DR AR/DR SL/RR SL/RR */ /* 0 1 2 3 4 5 6 7 */ - {0x01, 0x01, 0x16, 0x00, 0xfd, 0xf8, 0x2f, 0x6d },/* BD(multi verified, modTL verified, mod env - verified(close), carr. env verifed) */ - {0x01, 0x01, 0x00, 0x00, 0xd8, 0xd8, 0xf9, 0xf8 },/* HH(multi verified), SD(multi not used) */ - {0x05, 0x01, 0x00, 0x00, 0xf8, 0xba, 0x49, 0x55 },/* TOM(multi,env verified), TOP CYM(multi verified, env verified) */ +/* old dumps via audio analysis (and a/b testing?) from Jarek */ +//{0x01, 0x01, 0x16, 0x00, 0xfd, 0xf8, 0x2f, 0x6d },/* BD(multi verified, modTL verified, mod env - verified(close), carr. env verifed) */ +//{0x01, 0x01, 0x00, 0x00, 0xd8, 0xd8, 0xf9, 0xf8 },/* HH(multi verified), SD(multi not used) */ +//{0x05, 0x01, 0x00, 0x00, 0xf8, 0xba, 0x49, 0x55 },/* TOM(multi,env verified), TOP CYM(multi verified, env verified) */ +/* Drums dumped from the VRC7 using debug mode, these are likely also correct for ym2413(OPLL) but need verification */ + {0x01, 0x01, 0x18, 0x0f, 0xdf, 0xf8, 0x6a, 0x6d },/* BD */ + {0x01, 0x01, 0x00, 0x00, 0xc8, 0xd8, 0xa7, 0x68 },/* HH, SD */ + {0x05, 0x01, 0x00, 0x00, 0xf8, 0xaa, 0x59, 0x55 },/* TOM, TOP CYM */ +}; + +// VRC7 Instruments : Dumped from internal ROM +// reference : https://siliconpr0n.org/archive/doku.php?id=vendor:yamaha:opl2 +const uint8_t vrc7snd_device::vrc7_table[19][8] = { +/* MULT MULT modTL DcDmFb AR/DR AR/DR SL/RR SL/RR */ +/* 0 1 2 3 4 5 6 7 */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //0 (This is the user-defined instrument, should this default to anything?) + + {0x03, 0x21, 0x05, 0x06, 0xe8, 0x81, 0x42, 0x27 }, //1 + {0x13, 0x41, 0x14, 0x0d, 0xd8, 0xf6, 0x23, 0x12 }, //2 + {0x11, 0x11, 0x08, 0x08, 0xfa, 0xb2, 0x20, 0x12 }, //3 + {0x31, 0x61, 0x0c, 0x07, 0xa8, 0x64, 0x61, 0x27 }, //4 + {0x32, 0x21, 0x1e, 0x06, 0xe1, 0x76, 0x01, 0x28 }, //5 + {0x02, 0x01, 0x06, 0x00, 0xa3, 0xe2, 0xf4, 0xf4 }, //6 + {0x21, 0x61, 0x1d, 0x07, 0x82, 0x81, 0x11, 0x07 }, //7 + {0x23, 0x21, 0x22, 0x17, 0xa2, 0x72, 0x01, 0x17 }, //8 + {0x35, 0x11, 0x25, 0x00, 0x40, 0x73, 0x72, 0x01 }, //9 + {0xb5, 0x01, 0x0f, 0x0f, 0xa8, 0xa5, 0x51, 0x02 }, //A + {0x17, 0xc1, 0x24, 0x07, 0xf8, 0xf8, 0x22, 0x12 }, //B + {0x71, 0x23, 0x11, 0x06, 0x65, 0x74, 0x18, 0x16 }, //C + {0x01, 0x02, 0xd3, 0x05, 0xc9, 0x95, 0x03, 0x02 }, //D + {0x61, 0x63, 0x0c, 0x00, 0x94, 0xc0, 0x33, 0xf6 }, //E + {0x21, 0x72, 0x0d, 0x00, 0xc1, 0xd5, 0x56, 0x06 }, //F + +/* Drums (silent due to no RO output pin(?) on VRC7, but present internally; these are probably shared with YM2413) */ +/* MULTI MULTI modTL xxx AR/DR AR/DR SL/RR SL/RR */ +/* 0 1 2 3 4 5 6 7 */ + {0x01, 0x01, 0x18, 0x0f, 0xdf, 0xf8, 0x6a, 0x6d },/* BD */ + {0x01, 0x01, 0x00, 0x00, 0xc8, 0xd8, 0xa7, 0x68 },/* HH, SD */ + {0x05, 0x01, 0x00, 0x00, 0xf8, 0xaa, 0x59, 0x55 },/* TOM, TOP CYM */ }; /* work table */ @@ -823,21 +862,21 @@ void ym2413_device::rhythm_calc( OPLL_CH *CH, unsigned int noise ) */ /* base frequency derived from operator 1 in channel 7 */ - unsigned char bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1; - unsigned char bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1; - unsigned char bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1; + uint8_t bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1; + uint8_t bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1; + uint8_t bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1; - unsigned char res1 = (bit2 ^ bit7) | bit3; + uint8_t res1 = (bit2 ^ bit7) | bit3; /* when res1 = 0 phase = 0x000 | 0xd0; */ /* when res1 = 1 phase = 0x200 | (0xd0>>2); */ uint32_t phase = res1 ? (0x200|(0xd0>>2)) : 0xd0; /* enable gate based on frequency of operator 2 in channel 8 */ - unsigned char bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1; - unsigned char bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1; + uint8_t bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1; + uint8_t bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1; - unsigned char res2 = (bit3e | bit5e); + uint8_t res2 = (bit3e | bit5e); /* when res2 = 0 pass the phase from calculation above (res1); */ /* when res2 = 1 phase = 0x200 | (0xd0>>2); */ @@ -868,7 +907,7 @@ void ym2413_device::rhythm_calc( OPLL_CH *CH, unsigned int noise ) if( env < ENV_QUIET ) { /* base frequency derived from operator 1 in channel 7 */ - unsigned char bit8 = ((SLOT7_1->phase>>FREQ_SH)>>8)&1; + uint8_t bit8 = ((SLOT7_1->phase>>FREQ_SH)>>8)&1; /* when bit8 = 0 phase = 0x100; */ /* when bit8 = 1 phase = 0x200; */ @@ -894,21 +933,21 @@ void ym2413_device::rhythm_calc( OPLL_CH *CH, unsigned int noise ) if( env < ENV_QUIET ) { /* base frequency derived from operator 1 in channel 7 */ - unsigned char bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1; - unsigned char bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1; - unsigned char bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1; + uint8_t bit7 = ((SLOT7_1->phase>>FREQ_SH)>>7)&1; + uint8_t bit3 = ((SLOT7_1->phase>>FREQ_SH)>>3)&1; + uint8_t bit2 = ((SLOT7_1->phase>>FREQ_SH)>>2)&1; - unsigned char res1 = (bit2 ^ bit7) | bit3; + uint8_t res1 = (bit2 ^ bit7) | bit3; /* when res1 = 0 phase = 0x000 | 0x100; */ /* when res1 = 1 phase = 0x200 | 0x100; */ uint32_t phase = res1 ? 0x300 : 0x100; /* enable gate based on frequency of operator 2 in channel 8 */ - unsigned char bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1; - unsigned char bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1; + uint8_t bit5e= ((SLOT8_2->phase>>FREQ_SH)>>5)&1; + uint8_t bit3e= ((SLOT8_2->phase>>FREQ_SH)>>3)&1; - unsigned char res2 = (bit3e | bit5e); + uint8_t res2 = (bit3e | bit5e); /* when res2 = 0 pass the phase from calculation above (res1); */ /* when res2 = 1 phase = 0x200 | 0x100; */ if (res2) @@ -1635,11 +1674,14 @@ void ym2413_device::device_reset() noise_rng = 1; /* noise shift register */ /* setup instruments table */ - for (int i=0; i<19; i++) + if (m_inst_table != nullptr) { - for (int c=0; c<8; c++) + for (int i=0; i<19; i++) { - inst_tab[i][c] = table[i][c]; + for (int c=0; c<8; c++) + { + inst_tab[i][c] = m_inst_table[i][c]; + } } } @@ -1686,7 +1728,37 @@ void ym2413_device::data_port_w(u8 data) DEFINE_DEVICE_TYPE(YM2413, ym2413_device, "ym2413", "Yamaha YM2413 OPLL") ym2413_device::ym2413_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, YM2413, tag, owner, clock) + : ym2413_device(mconfig, YM2413, tag, owner, clock) +{ + for (int i = 0; i < 19; i++) + { + for (int c = 0; c < 8; c++) + { + m_inst_table[i][c] = table[i][c]; + } + } +} + +ym2413_device::ym2413_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) , device_sound_interface(mconfig, *this) { + for (int i = 0; i < 19; i++) + { + std::fill_n(&m_inst_table[i][0], 8, 0); + } +} + +DEFINE_DEVICE_TYPE(VRC7, vrc7snd_device, "vrc7snd", "Konami VRC7 (Sound)") + +vrc7snd_device::vrc7snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : ym2413_device(mconfig, VRC7, tag, owner, clock) +{ + for (int i = 0; i < 19; i++) + { + for (int c = 0; c < 8; c++) + { + m_inst_table[i][c] = vrc7_table[i][c]; + } + } } diff --git a/src/devices/sound/ym2413.h b/src/devices/sound/ym2413.h index 32114624eff..1b0d9869770 100644 --- a/src/devices/sound/ym2413.h +++ b/src/devices/sound/ym2413.h @@ -17,6 +17,8 @@ public: void data_port_w(u8 data); protected: + ym2413_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // device-level overrides virtual void device_start() override; virtual void device_clock_changed() override; @@ -25,6 +27,8 @@ protected: // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; + uint8_t m_inst_table[19][8]; + private: struct OPLL_SLOT { @@ -106,13 +110,13 @@ private: static const double ksl_tab[8*16]; static const uint32_t ksl_shift[4]; static const uint32_t sl_tab[16]; - static const unsigned char eg_inc[15*RATE_STEPS]; - static const unsigned char eg_rate_select[16+64+16]; - static const unsigned char eg_rate_shift[16+64+16]; + static const uint8_t eg_inc[15*RATE_STEPS]; + static const uint8_t eg_rate_select[16+64+16]; + static const uint8_t eg_rate_shift[16+64+16]; static const uint8_t mul_tab[16]; static const uint8_t lfo_am_table[LFO_AM_TAB_ELEMENTS]; static const int8_t lfo_pm_table[8*8]; - static const unsigned char table[19][8]; + static const uint8_t table[19][8]; int tl_tab[TL_TAB_LEN]; @@ -185,4 +189,15 @@ private: DECLARE_DEVICE_TYPE(YM2413, ym2413_device) +class vrc7snd_device : public ym2413_device +{ +public: + vrc7snd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +private: + static const uint8_t vrc7_table[19][8]; +}; + +DECLARE_DEVICE_TYPE(VRC7, vrc7snd_device) + #endif // MAME_SOUND_YM2413_H diff --git a/src/devices/video/mm5445.h b/src/devices/video/mm5445.h index 2ee2b8ed8cb..7d16d4f2ee2 100644 --- a/src/devices/video/mm5445.h +++ b/src/devices/video/mm5445.h @@ -37,8 +37,8 @@ VSS 20 |___________| 21 CLOCK IN O# = OUTPUT BIT # - MM5446, MM5448 don't have the brightness control pin, an extra output pin instead - MM5447, MM5448 don't have the data enable pin(always enabled), but another extra output pin + MM5446, MM5448 don't have the brightness control pin, an extra output pin instead + MM5447, MM5448 don't have the data enable pin(always enabled), but another extra output pin */ diff --git a/src/devices/video/tms9927.cpp b/src/devices/video/tms9927.cpp index bc8e187f8e8..7764aba05f7 100644 --- a/src/devices/video/tms9927.cpp +++ b/src/devices/video/tms9927.cpp @@ -54,6 +54,7 @@ tms9927_device::tms9927_device(const machine_config &mconfig, device_type type, , m_selfload(*this, finder_base::DUMMY_TAG) , m_reset(false) , m_valid_config(false) + , m_custom_visarea(0, 0, 0, 0) { std::fill(std::begin(m_reg), std::end(m_reg), 0x00); } @@ -349,6 +350,9 @@ void tms9927_device::recompute_parameters(bool postload) rectangle visarea(0, m_overscan_left + m_visible_hpix + m_overscan_right - 1, 0, m_overscan_top + m_visible_vpix + m_overscan_bottom - 1); + if (m_custom_visarea.width() > 1 && m_custom_visarea.height() > 1) + visarea = m_custom_visarea; + attotime refresh = clocks_to_attotime(HCOUNT * m_total_vpix); osd_printf_debug("TMS9927: Total = %dx%d, Visible = %dx%d, HSync = %d-%d, VSync = %d-%d, Skew=%d, Upscroll=%d, Period=%f Hz\n", m_total_hpix, m_total_vpix, m_visible_hpix, m_visible_vpix, m_hsyn_start, m_hsyn_end, m_vsyn_start, m_vsyn_end, SKEW_BITS, m_start_datarow, refresh.as_hz()); diff --git a/src/devices/video/tms9927.h b/src/devices/video/tms9927.h index 2e00344c1e7..7a23bd9fbe7 100644 --- a/src/devices/video/tms9927.h +++ b/src/devices/video/tms9927.h @@ -26,6 +26,7 @@ public: m_overscan_top = top; m_overscan_bottom = bottom; } + void set_visarea(s16 minx, s16 maxx, s16 miny, s16 maxy) { m_custom_visarea.set(minx, maxx, miny, maxy); } DECLARE_WRITE8_MEMBER(write); DECLARE_READ8_MEMBER(read); @@ -80,6 +81,7 @@ private: bool m_valid_config; uint16_t m_total_hpix, m_total_vpix; uint16_t m_visible_hpix, m_visible_vpix; + rectangle m_custom_visarea; uint16_t m_vsyn_start, m_vsyn_end; uint16_t m_hsyn_start, m_hsyn_end; diff --git a/src/devices/video/tms9928a.cpp b/src/devices/video/tms9928a.cpp index 31486b77f8b..c068d8b4ce8 100644 --- a/src/devices/video/tms9928a.cpp +++ b/src/devices/video/tms9928a.cpp @@ -166,11 +166,11 @@ void tms9928a_device::write(offs_t offset, uint8_t data) u8 tms9928a_device::vram_read() { - // prevent debugger from changing the address base - if (machine().side_effects_disabled()) return 0; - uint8_t data = m_ReadAhead; + // prevent debugger from changing the address base + if (machine().side_effects_disabled()) return data; + m_ReadAhead = m_vram_space->read_byte(m_Addr); m_Addr = (m_Addr + 1) & (m_vram_size - 1); m_latch = 0; @@ -193,11 +193,11 @@ void tms9928a_device::vram_write(u8 data) u8 tms9928a_device::register_read() { - // prevent debugger from changing the internal state - if (machine().side_effects_disabled()) return 0; - uint8_t data = m_StatusReg; + // prevent debugger from changing the internal state + if (machine().side_effects_disabled()) return data; + m_StatusReg = m_FifthSprite; check_interrupt(); m_latch = 0; diff --git a/src/emu/emupal.cpp b/src/emu/emupal.cpp index 59b77d66ebf..6a998c4849e 100644 --- a/src/emu/emupal.cpp +++ b/src/emu/emupal.cpp @@ -337,6 +337,18 @@ palette_device &palette_device::set_format(rrrrggggbbbbrgbx_t, u32 entries) return *this; } +palette_device &palette_device::set_format(xrgbrrrrggggbbbb_bit0_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder, entries); + return *this; +} + +palette_device &palette_device::set_format(xrgbrrrrggggbbbb_bit4_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder, entries); + return *this; +} + //************************************************************************** // GENERIC WRITE HANDLERS @@ -373,35 +385,35 @@ inline void palette_device::update_for_write(offs_t byte_offset, int bytes_modif // write - write a byte to the base paletteram //------------------------------------------------- -WRITE8_MEMBER(palette_device::write8) +void palette_device::write8(offs_t offset, u8 data) { m_paletteram.write8(offset, data); update_for_write(offset, 1); } -WRITE16_MEMBER(palette_device::write16) +void palette_device::write16(offs_t offset, u16 data, u16 mem_mask) { m_paletteram.write16(offset, data, mem_mask); update_for_write(offset * 2, 2); } -WRITE32_MEMBER(palette_device::write32) +void palette_device::write32(offs_t offset, u32 data, u32 mem_mask) { m_paletteram.write32(offset, data, mem_mask); update_for_write(offset * 4, 4); } -READ8_MEMBER(palette_device::read8) +u8 palette_device::read8(offs_t offset) { return m_paletteram.read8(offset); } -READ16_MEMBER(palette_device::read16) +u16 palette_device::read16(offs_t offset) { return m_paletteram.read16(offset); } -READ32_MEMBER(palette_device::read32) +u32 palette_device::read32(offs_t offset) { return m_paletteram.read32(offset); } @@ -412,24 +424,24 @@ READ32_MEMBER(palette_device::read32) // paletteram //------------------------------------------------- -WRITE8_MEMBER(palette_device::write8_ext) +void palette_device::write8_ext(offs_t offset, u8 data) { m_paletteram_ext.write8(offset, data); update_for_write(offset, 1); } -WRITE16_MEMBER(palette_device::write16_ext) +void palette_device::write16_ext(offs_t offset, u16 data, u16 mem_mask) { m_paletteram_ext.write16(offset, data, mem_mask); update_for_write(offset * 2, 2); } -READ8_MEMBER(palette_device::read8_ext) +u8 palette_device::read8_ext(offs_t offset) { return m_paletteram_ext.read8(offset); } -READ16_MEMBER(palette_device::read16_ext) +u16 palette_device::read16_ext(offs_t offset) { return m_paletteram_ext.read16(offset); } @@ -440,7 +452,7 @@ READ16_MEMBER(palette_device::read16_ext) // paletteram, updating indirect colors //------------------------------------------------- -WRITE8_MEMBER(palette_device::write_indirect) +void palette_device::write_indirect(offs_t offset, u8 data) { m_paletteram.write8(offset, data); update_for_write(offset, 1, true); @@ -452,7 +464,7 @@ WRITE8_MEMBER(palette_device::write_indirect) // paletteram, updating indirect colors //------------------------------------------------- -WRITE8_MEMBER(palette_device::write_indirect_ext) +void palette_device::write_indirect_ext(offs_t offset, u8 data) { m_paletteram_ext.write8(offset, data); update_for_write(offset, 1, true); diff --git a/src/emu/emupal.h b/src/emu/emupal.h index 0711bf1a296..b4f52ac2a55 100644 --- a/src/emu/emupal.h +++ b/src/emu/emupal.h @@ -97,36 +97,6 @@ //************************************************************************** -// CONSTANTS -//************************************************************************** - -// exotic 5-5-5 formats -#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit0 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder) -#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit4 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder) - -//************************************************************************** -// DEVICE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_PALETTE_ADD(_tag, _entries) \ - MCFG_DEVICE_ADD(_tag, PALETTE, 0) \ - downcast<palette_device &>(*device).set_entries(_entries); - - -#define MCFG_PALETTE_FORMAT(_format) \ - downcast<palette_device &>(*device).set_format(PALETTE_FORMAT_##_format); - - -// not implemented yet -#if 0 -#define MCFG_PALETTE_ADD_HARDCODED(_tag, _array) \ - MCFG_PALETTE_ADD(_tag, sizeof(_array) / 3) \ - downcast<palette_device &>(*device).set_init(palette_init_delegate(FUNC(palette_device::palette_init_RRRRGGGGBBBB_proms), downcast<palette_device *>(device))); -#endif - - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -273,7 +243,9 @@ public: enum rgb_444_prom_t { RGB_444_PROMS, RRRRGGGGBBBB_PROMS }; // exotic formats - enum rrrrggggbbbbrgbx_t { RRRRGGGGBBBBRGBx }; + enum rrrrggggbbbbrgbx_t { RRRRGGGGBBBBRGBx }; + enum xrgbrrrrggggbbbb_bit0_t { xRGBRRRRGGGGBBBB_bit0 }; + enum xrgbrrrrggggbbbb_bit4_t { xRGBRRRRGGGGBBBB_bit4 }; // construction/destruction palette_device(const machine_config &mconfig, const char *tag, device_t *owner, init_delegate &&init, u32 entries = 0U, u32 indirect = 0U); @@ -358,6 +330,8 @@ public: palette_device &set_format(grbx_888_t, u32 entries); palette_device &set_format(bgrx_888_t, u32 entries); palette_device &set_format(rrrrggggbbbbrgbx_t, u32 entries); + palette_device &set_format(xrgbrrrrggggbbbb_bit0_t, u32 entries); + palette_device &set_format(xrgbrrrrggggbbbb_bit4_t, u32 entries); template <typename T> palette_device &set_format(T x, u32 entries, u32 indirect) { set_format(x, entries); set_indirect_entries(indirect); return *this; } palette_device &set_membits(int membits) { m_membits = membits; m_membits_supplied = true; return *this; } palette_device &set_endianness(endianness_t endianness) { m_endianness = endianness; m_endianness_supplied = true; return *this; } @@ -404,18 +378,18 @@ public: } // generic read/write handlers - DECLARE_READ8_MEMBER(read8); - DECLARE_READ8_MEMBER(read8_ext); - DECLARE_WRITE8_MEMBER(write8); - DECLARE_WRITE8_MEMBER(write8_ext); - DECLARE_WRITE8_MEMBER(write_indirect); - DECLARE_WRITE8_MEMBER(write_indirect_ext); - DECLARE_READ16_MEMBER(read16); - DECLARE_READ16_MEMBER(read16_ext); - DECLARE_WRITE16_MEMBER(write16); - DECLARE_WRITE16_MEMBER(write16_ext); - DECLARE_READ32_MEMBER(read32); - DECLARE_WRITE32_MEMBER(write32); + u8 read8(offs_t offset); + u8 read8_ext(offs_t offset); + void write8(offs_t offset, u8 data); + void write8_ext(offs_t offset, u8 data); + void write_indirect(offs_t offset, u8 data); + void write_indirect_ext(offs_t offset, u8 data); + u16 read16(offs_t offset); + u16 read16_ext(offs_t offset); + void write16(offs_t offset, u16 data, u16 mem_mask = u16(~0)); + void write16_ext(offs_t offset, u16 data, u16 mem_mask = u16(~0)); + u32 read32(offs_t offset); + void write32(offs_t offset, u32 data, u32 mem_mask = u32(~0)); // helper to update palette when data changed void update() { if (!m_init.isnull()) m_init(*this); } diff --git a/src/emu/render.h b/src/emu/render.h index 9660b8fc71f..93621ea92c1 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -852,6 +852,8 @@ public: std::string m_input_tag; // input tag of this item ioport_port * m_input_port; // input port of this item ioport_value m_input_mask; // input mask of this item + u8 m_input_shift; // input mask rightshift for raw (trailing 0s) + bool m_input_raw; // get raw data from input port screen_device * m_screen; // pointer to screen int m_orientation; // orientation of this item render_bounds m_bounds; // bounds of the item diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp index b47d643e254..d083ba5510a 100644 --- a/src/emu/rendlay.cpp +++ b/src/emu/rendlay.cpp @@ -3283,6 +3283,8 @@ layout_view::item::item( , m_input_tag(env.get_attribute_string(itemnode, "inputtag", "")) , m_input_port(nullptr) , m_input_mask(0) + , m_input_shift(0) + , m_input_raw(false) , m_screen(nullptr) , m_orientation(orientation_add(env.parse_orientation(itemnode.get_child("orientation")), orientation)) , m_color(render_color_multiply(env.parse_color(itemnode.get_child("color")), color)) @@ -3308,6 +3310,8 @@ layout_view::item::item( if (index != -1) m_screen = screen_device_iterator(env.machine().root_device()).byindex(index); m_input_mask = env.get_attribute_int(itemnode, "inputmask", 0); + for (u32 mask = m_input_mask; (mask != 0) && (~mask & 1); mask >>= 1) m_input_shift++; + m_input_raw = env.get_attribute_int(itemnode, "inputraw", 0) == 1; if (m_have_output && m_element) m_output = m_element->default_state(); env.parse_bounds(itemnode.get_child("bounds"), m_rawbounds); @@ -3380,9 +3384,16 @@ int layout_view::item::state() const // if configured to an input, fetch the input value if (m_input_port) { - ioport_field const *const field = m_input_port->field(m_input_mask); - if (field) - return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0; + if (m_input_raw) + { + return (m_input_port->read() & m_input_mask) >> m_input_shift; + } + else + { + ioport_field const *const field = m_input_port->field(m_input_mask); + if (field) + return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0; + } } } diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index bc84a77bf9e..02957f24467 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -123,6 +123,7 @@ const double XTAL::known_xtals[] = { 6'900'000, /* 6.9_MHz_XTAL BBN BitGraph CPU */ 7'000'000, /* 7_MHz_XTAL Jaleco Mega System PCBs */ 7'159'090, /* 7.15909_MHz_XTAL Blood Bros (2x NTSC subcarrier) */ + 7'200'000, /* 7.2_MHz_XTAL Image Fight bootleg I80C031 MCU */ 7'372'800, /* 7.3728_MHz_XTAL - */ 7'864'300, /* 7.8643_MHz_XTAL Used on InterFlip games as video clock */ 7'987'000, /* 7.987_MHz_XTAL PC9801-86 YM2608 clock */ @@ -202,6 +203,7 @@ const double XTAL::known_xtals[] = { 14'318'181, /* 14.318181_MHz_XTAL Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */ 14'580'000, /* 14.58_MHz_XTAL Fortune 32:16 Video Controller */ 14'705'882, /* 14.705882_MHz_XTAL Aleck64 */ + 14'728'000, /* 14.728_MHz_XTAL ADM 36 */ 14'742'800, /* 14.7428_MHz_XTAL ADM 23 */ 14'745'600, /* 14.7456_MHz_XTAL Namco System 12 & System Super 22/23 for JVS */ 14'784'000, /* 14.784_MHz_XTAL Zenith Z-29 */ @@ -283,6 +285,7 @@ const double XTAL::known_xtals[] = { 23'961'600, /* 23.9616_MHz_XTAL Osborne 4 (Vixen) */ 24'000'000, /* 24_MHz_XTAL Mario, 80's Data East games, 80's Konami games */ 24'073'400, /* 24.0734_MHz_XTAL DEC Rainbow 100 */ + 24'300'000, /* 24.3_MHz_XTAL ADM 36 132-column display clock */ 24'576'000, /* 24.576_MHz_XTAL Pole Position h/w, Model 3 CPU board */ 24'883'200, /* 24.8832_MHz_XTAL DEC VT100 */ 25'000'000, /* 25_MHz_XTAL Namco System 22, Taito GNET, Dogyuun h/w */ diff --git a/src/lib/formats/dsk_dsk.cpp b/src/lib/formats/dsk_dsk.cpp index 5b019fb53d1..c90579b68d0 100644 --- a/src/lib/formats/dsk_dsk.cpp +++ b/src/lib/formats/dsk_dsk.cpp @@ -362,6 +362,12 @@ bool dsk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) skip = 2; } int tracks = header[0x30]; + + int img_tracks, img_heads; + image->get_maximal_geometry(img_tracks, img_heads); + if (tracks > img_tracks || heads > img_heads) + return false; + uint64_t track_offsets[84*2]; int cnt =0; if (!extendformat) { diff --git a/src/lib/formats/opd_dsk.cpp b/src/lib/formats/opd_dsk.cpp new file mode 100644 index 00000000000..b45b58762ed --- /dev/null +++ b/src/lib/formats/opd_dsk.cpp @@ -0,0 +1,61 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Sinclair ZX Spectrum + + Opus Discovery disk image formats + +***************************************************************************/ + +#include "opd_dsk.h" + + +opd_format::opd_format() : wd177x_format(formats) +{ +} + +const char *opd_format::name() const +{ + return "opd"; +} + +const char *opd_format::description() const +{ + return "Opus Discovery disk image"; +} + +const char *opd_format::extensions() const +{ + return "opd,opu"; +} + +int opd_format::identify(io_generic *io, uint32_t form_factor) +{ + int type = find_size(io, form_factor); + + if (type != -1) + return 90; + return 0; +} + +int opd_format::get_image_offset(const format &f, int head, int track) +{ + return (f.track_count * head + track) * compute_track_size(f); +} + +const opd_format::format opd_format::formats[] = +{ + { // 180k 40 track single sided double density - gaps unverified + floppy_image::FF_35, floppy_image::SSSD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, 0, {}, 36, 22, 27 + }, + { // 360k 40 track double sided double density - gaps unverified + floppy_image::FF_35, floppy_image::DSSD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, 0, {}, 36, 22, 27 + }, + {} +}; + + +const floppy_format_type FLOPPY_OPD_FORMAT = &floppy_image_format_creator<opd_format>; diff --git a/src/lib/formats/opd_dsk.h b/src/lib/formats/opd_dsk.h new file mode 100644 index 00000000000..3eb018ca1dc --- /dev/null +++ b/src/lib/formats/opd_dsk.h @@ -0,0 +1,38 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Sinclair ZX Spectrum + + Opus Discovery disk image formats + +***************************************************************************/ + +#pragma once + +#ifndef OPD_DSK_H +#define OPD_DSK_H + +#include "flopimg.h" +#include "wd177x_dsk.h" + + +class opd_format : public wd177x_format +{ +public: + opd_format(); + + virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int get_image_offset(const format &f, int head, int track) override; + virtual const char *name() const override; + virtual const char *description() const override; + virtual const char *extensions() const override; + +private: + static const format formats[]; +}; + + +extern const floppy_format_type FLOPPY_OPD_FORMAT; + +#endif // OPD_DSK_H diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp index 0f50a9103fb..aef920635fe 100644 --- a/src/lib/netlist/analog/nld_bjt.cpp +++ b/src/lib/netlist/analog/nld_bjt.cpp @@ -9,43 +9,45 @@ #include "netlist/nl_setup.h" #include "nlid_twoterm.h" + #include <cmath> namespace netlist { - namespace analog - { - -class diode +namespace analog { -public: - diode() : m_Is(1e-15), m_VT(0.0258), m_VT_inv(1.0 / m_VT) {} - diode(const nl_double Is, const nl_double n) - { - m_Is = Is; - m_VT = 0.0258 * n; - m_VT_inv = 1.0 / m_VT; - } - void set(const nl_double Is, const nl_double n) - { - m_Is = Is; - m_VT = 0.0258 * n; - m_VT_inv = 1.0 / m_VT; - } - nl_double I(const nl_double V) const { return m_Is * std::exp(V * m_VT_inv) - m_Is; } - nl_double g(const nl_double V) const { return m_Is * m_VT_inv * std::exp(V * m_VT_inv); } - nl_double V(const nl_double I) const { return std::log1p(I / m_Is) * m_VT; } // log1p(x)=log(1.0 + x) - nl_double gI(const nl_double I) const { return m_VT_inv * (I + m_Is); } + using constants = plib::constants<nl_double>; -private: - nl_double m_Is; - nl_double m_VT; - nl_double m_VT_inv; -}; + class diode + { + public: + diode() : m_Is(1e-15), m_VT(0.0258), m_VT_inv(1.0 / m_VT) {} + diode(const nl_double Is, const nl_double n) + { + m_Is = Is; + m_VT = 0.0258 * n; + m_VT_inv = 1.0 / m_VT; + } + void set(const nl_double Is, const nl_double n) + { + m_Is = Is; + m_VT = 0.0258 * n; + m_VT_inv = 1.0 / m_VT; + } + nl_double I(const nl_double V) const { return m_Is * std::exp(V * m_VT_inv) - m_Is; } + nl_double g(const nl_double V) const { return m_Is * m_VT_inv * std::exp(V * m_VT_inv); } + nl_double V(const nl_double I) const { return std::log1p(I / m_Is) * m_VT; } // log1p(x)=log(1.0 + x) + nl_double gI(const nl_double I) const { return m_VT_inv * (I + m_Is); } + + private: + nl_double m_Is; + nl_double m_VT; + nl_double m_VT_inv; + }; -// ----------------------------------------------------------------------------- -// nld_Q - Base classes -// ----------------------------------------------------------------------------- + // ----------------------------------------------------------------------------- + // nld_Q - Base classes + // ----------------------------------------------------------------------------- /*! Class representing the bjt model paramers. * @@ -73,7 +75,7 @@ private: * | | RBM | minimum base resistance at high currents | | RB | 10 | * | * | | RE | emitter resistance | | 0 | 1 | * | * | | RC | collector resistance | | 0 | 10 | * | - * | | CJE | B-E zero-bias depletion capacitance | F | 0 | 2pF | * | + * | Y | CJE | B-E zero-bias depletion capacitance | F | 0 | 2pF | * | * | | VJE | B-E built-in potential | V | 0.75 | 0.6 | | * | | MJE | B-E junction exponential factor | - | 0.33 | 0.33 | | * | | TF | ideal forward transit time | sec | 0 | 0.1ns | | @@ -81,7 +83,7 @@ private: * | | VTF | voltage describing VBC dependence of TF | V | infinite | | | * | | ITF | high-current parameter for effect on TF | A | 0 | | * | * | | PTF | excess phase at freq=1.0/(TF*2PI) Hz | deg | 0 | | | - * | | CJC | B-C zero-bias depletion capacitance | F | 0 | 2pF | * | + * | Y | CJC | B-C zero-bias depletion capacitance | F | 0 | 2pF | * | * | | VJC | B-C built-in potential | V | 0.75 | 0.5 | | * | | MJC | B-C junction exponential factor | - | 0.33 | 0.5 | | * | | XCJC | fraction of B-C depletion capacitance connected to internal base node | - | 1 | | | @@ -95,337 +97,369 @@ private: * | | KF | flicker-noise coefficient | - | 0 | | | * | | AF | flicker-noise exponent | - | 1 | | | * | | FC | coefficient for forward-bias depletion capacitance formula | - | 0.5 | | | - * | | TNOM | Parameter measurement temperature | C | 27 | 50 | | */ + * | | TNOM | Parameter measurement temperature | C | 27 | 50 | | + * */ class bjt_model_t : public param_model_t { public: bjt_model_t(device_t &device, const pstring &name, const pstring &val) : param_model_t(device, name, val) - , m_IS(*this, "IS") - , m_BF(*this, "BF") - , m_NF(*this, "NF") - , m_BR(*this, "BR") - , m_NR(*this, "NR") + , m_IS (*this, "IS") + , m_BF (*this, "BF") + , m_NF (*this, "NF") + , m_BR (*this, "BR") + , m_NR (*this, "NR") + , m_CJE(*this, "CJE") + , m_CJC(*this, "CJC") {} - value_t m_IS; //!< transport saturation current - value_t m_BF; //!< ideal maximum forward beta - value_t m_NF; //!< forward current emission coefficient - value_t m_BR; //!< ideal maximum reverse beta - value_t m_NR; //!< reverse current emission coefficient + value_t m_IS; //!< transport saturation current + value_t m_BF; //!< ideal maximum forward beta + value_t m_NF; //!< forward current emission coefficient + value_t m_BR; //!< ideal maximum reverse beta + value_t m_NR; //!< reverse current emission coefficient + value_t m_CJE; //!< B-E zero-bias depletion capacitance + value_t m_CJC; //!< B-C zero-bias depletion capacitance + }; // Have a common start for transistors -NETLIB_OBJECT(Q) -{ -public: - enum q_type { - BJT_NPN, - BJT_PNP + NETLIB_OBJECT(Q) + { + public: + enum q_type { + BJT_NPN, + BJT_PNP + }; + + NETLIB_CONSTRUCTOR(Q) + , m_model(*this, "MODEL", "NPN") + , m_qtype(BJT_NPN) + { + } + + NETLIB_IS_DYNAMIC(true) + + //NETLIB_RESETI(); + NETLIB_UPDATEI(); + + q_type qtype() const { return m_qtype; } + bool is_qtype(q_type atype) const { return m_qtype == atype; } + void set_qtype(q_type atype) { m_qtype = atype; } + protected: + + bjt_model_t m_model; + private: + q_type m_qtype; }; - NETLIB_CONSTRUCTOR(Q) - , m_model(*this, "MODEL", "NPN") - , m_qtype(BJT_NPN) + NETLIB_OBJECT_DERIVED(QBJT, Q) { - } - - NETLIB_IS_DYNAMIC(true) - - //NETLIB_RESETI(); - NETLIB_UPDATEI(); + public: + NETLIB_CONSTRUCTOR_DERIVED(QBJT, Q) + { } - q_type qtype() const { return m_qtype; } - bool is_qtype(q_type atype) const { return m_qtype == atype; } - void set_qtype(q_type atype) { m_qtype = atype; } -protected: + protected: - bjt_model_t m_model; -private: - q_type m_qtype; -}; + private: + }; -NETLIB_OBJECT_DERIVED(QBJT, Q) -{ -public: - NETLIB_CONSTRUCTOR_DERIVED(QBJT, Q) - { } -protected: -private: -}; + // ----------------------------------------------------------------------------- + // nld_QBJT_switch + // ----------------------------------------------------------------------------- + /* + * + - C + * B ----VVV----+ | + * | | + * Rb Rc + * Rb Rc + * Rb Rc + * | | + * +----+----+ + * | + * E + */ -// ----------------------------------------------------------------------------- -// nld_QBJT_switch -// ----------------------------------------------------------------------------- + NETLIB_OBJECT_DERIVED(QBJT_switch, QBJT) + { + NETLIB_CONSTRUCTOR_DERIVED(QBJT_switch, QBJT) + , m_RB(*this, "m_RB", true) + , m_RC(*this, "m_RC", true) + , m_BC_dummy(*this, "m_BC", true) + , m_gB(1e-9) + , m_gC(1e-9) + , m_V(0.0) + , m_state_on(*this, "m_state_on", 0) + { + register_subalias("B", m_RB.m_P); + register_subalias("E", m_RB.m_N); + register_subalias("C", m_RC.m_P); + //register_term("_E1", m_RC.m_N); + + //register_term("_B1", m_BC_dummy.m_P); + //register_term("_C1", m_BC_dummy.m_N); + + connect(m_RB.m_N, m_RC.m_N); + + connect(m_RB.m_P, m_BC_dummy.m_P); + connect(m_RC.m_P, m_BC_dummy.m_N); + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + NETLIB_UPDATE_PARAMI(); + NETLIB_UPDATE_TERMINALSI(); + + private: + nld_twoterm m_RB; + nld_twoterm m_RC; + + // FIXME: this is needed so we have all terminals belong to one net list + + nld_twoterm m_BC_dummy; + + nl_double m_gB; // base conductance / switch on + nl_double m_gC; // collector conductance / switch on + nl_double m_V; // internal voltage source + state_var<unsigned> m_state_on; + + private: + }; + // ----------------------------------------------------------------------------- + // nld_QBJT_EB + // ----------------------------------------------------------------------------- -/* - * + - C - * B ----VVV----+ | - * | | - * Rb Rc - * Rb Rc - * Rb Rc - * | | - * +----+----+ - * | - * E - */ -NETLIB_OBJECT_DERIVED(QBJT_switch, QBJT) -{ - NETLIB_CONSTRUCTOR_DERIVED(QBJT_switch, QBJT) - , m_RB(*this, "m_RB", true) - , m_RC(*this, "m_RC", true) - , m_BC_dummy(*this, "m_BC", true) - , m_gB(1e-9) - , m_gC(1e-9) - , m_V(0.0) - , m_state_on(*this, "m_state_on", 0) + NETLIB_OBJECT_DERIVED(QBJT_EB, QBJT) { - register_subalias("B", m_RB.m_P); - register_subalias("E", m_RB.m_N); - register_subalias("C", m_RC.m_P); - //register_term("_E1", m_RC.m_N); + public: + NETLIB_CONSTRUCTOR_DERIVED(QBJT_EB, QBJT) + , m_gD_BC(*this, "m_D_BC") + , m_gD_BE(*this, "m_D_BE") + , m_D_CB(*this, "m_D_CB", true) + , m_D_EB(*this, "m_D_EB", true) + , m_D_EC(*this, "m_D_EC", true) + , m_alpha_f(0) + , m_alpha_r(0) + { + register_subalias("E", m_D_EB.m_P); // Cathode + register_subalias("B", m_D_EB.m_N); // Anode + + register_subalias("C", m_D_CB.m_P); // Cathode + + connect(m_D_EB.m_P, m_D_EC.m_P); + connect(m_D_EB.m_N, m_D_CB.m_N); + connect(m_D_CB.m_P, m_D_EC.m_N); + + if (m_model.m_CJE > 0.0) + { + create_and_register_subdevice("m_CJE", m_CJE); + connect("B", "m_CJE.1"); + connect("E", "m_CJE.2"); + } + if (m_model.m_CJC > 0.0) + { + create_and_register_subdevice("m_CJC", m_CJC); + connect("B", "m_CJC.1"); + connect("C", "m_CJC.2"); + } + } + + protected: + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + NETLIB_UPDATE_PARAMI(); + NETLIB_UPDATE_TERMINALSI(); + + private: + generic_diode<diode_e::BIPOLAR> m_gD_BC; + generic_diode<diode_e::BIPOLAR> m_gD_BE; + + nld_twoterm m_D_CB; // gcc, gce - gcc, gec - gcc, gcc - gce | Ic + nld_twoterm m_D_EB; // gee, gec - gee, gce - gee, gee - gec | Ie + nld_twoterm m_D_EC; // 0, -gec, -gcc, 0 | 0 + + nl_double m_alpha_f; + nl_double m_alpha_r; + + NETLIB_SUBXX(analog, C) m_CJE; + NETLIB_SUBXX(analog, C) m_CJC; + }; - //register_term("_B1", m_BC_dummy.m_P); - //register_term("_C1", m_BC_dummy.m_N); - connect(m_RB.m_N, m_RC.m_N); + // ---------------------------------------------------------------------------------------- + // nld_Q + // ---------------------------------------------------------------------------------------- - connect(m_RB.m_P, m_BC_dummy.m_P); - connect(m_RC.m_P, m_BC_dummy.m_N); + NETLIB_UPDATE(Q) + { + // netlist().solver()->schedule1(); } - NETLIB_RESETI(); - NETLIB_UPDATEI(); - NETLIB_UPDATE_PARAMI(); - NETLIB_UPDATE_TERMINALSI(); + // ---------------------------------------------------------------------------------------- + // nld_QBJT_switch + // ---------------------------------------------------------------------------------------- -private: - nld_twoterm m_RB; - nld_twoterm m_RC; - // FIXME: this is needed so we have all terminals belong to one net list - - nld_twoterm m_BC_dummy; + NETLIB_RESET(QBJT_switch) + { + NETLIB_NAME(Q)::reset(); - nl_double m_gB; // base conductance / switch on - nl_double m_gC; // collector conductance / switch on - nl_double m_V; // internal voltage source - state_var<unsigned> m_state_on; + m_state_on = 0; -private: -}; + m_RB.set_G_V_I(exec().gmin(), 0.0, 0.0); + m_RC.set_G_V_I(exec().gmin(), 0.0, 0.0); -// ----------------------------------------------------------------------------- -// nld_QBJT_EB -// ----------------------------------------------------------------------------- + m_BC_dummy.set_G_V_I(exec().gmin() / 10.0, 0.0, 0.0); + } -NETLIB_OBJECT_DERIVED(QBJT_EB, QBJT) -{ -public: - NETLIB_CONSTRUCTOR_DERIVED(QBJT_EB, QBJT) - , m_gD_BC(*this, "m_D_BC") - , m_gD_BE(*this, "m_D_BE") - , m_D_CB(*this, "m_D_CB", true) - , m_D_EB(*this, "m_D_EB", true) - , m_D_EC(*this, "m_D_EC", true) - , m_alpha_f(0) - , m_alpha_r(0) + NETLIB_UPDATE(QBJT_switch) { - register_subalias("E", m_D_EB.m_P); // Cathode - register_subalias("B", m_D_EB.m_N); // Anode - - register_subalias("C", m_D_CB.m_P); // Cathode - - connect(m_D_EB.m_P, m_D_EC.m_P); - connect(m_D_EB.m_N, m_D_CB.m_N); - connect(m_D_CB.m_P, m_D_EC.m_N); + if (!m_RB.m_P.net().isRailNet()) + m_RB.m_P.solve_now(); // Basis + else if (!m_RB.m_N.net().isRailNet()) + m_RB.m_N.solve_now(); // Emitter + else if (!m_RC.m_P.net().isRailNet()) + m_RC.m_P.solve_now(); // Collector } -protected: - NETLIB_RESETI(); - NETLIB_UPDATEI(); - NETLIB_UPDATE_PARAMI(); - NETLIB_UPDATE_TERMINALSI(); - -private: - generic_diode m_gD_BC; - generic_diode m_gD_BE; - - nld_twoterm m_D_CB; // gcc, gce - gcc, gec - gcc, gcc - gce | Ic - nld_twoterm m_D_EB; // gee, gec - gee, gce - gee, gee - gec | Ie - nld_twoterm m_D_EC; // 0, -gec, -gcc, 0 | 0 - - nl_double m_alpha_f; - nl_double m_alpha_r; - -}; - - -// ---------------------------------------------------------------------------------------- -// nld_Q -// ---------------------------------------------------------------------------------------- - -NETLIB_UPDATE(Q) -{ -// netlist().solver()->schedule1(); -} - -// ---------------------------------------------------------------------------------------- -// nld_QBJT_switch -// ---------------------------------------------------------------------------------------- - - -NETLIB_RESET(QBJT_switch) -{ - NETLIB_NAME(Q)::reset(); - - m_state_on = 0; - - m_RB.set_G_V_I(exec().gmin(), 0.0, 0.0); - m_RC.set_G_V_I(exec().gmin(), 0.0, 0.0); - - m_BC_dummy.set_G_V_I(exec().gmin() / 10.0, 0.0, 0.0); - -} + NETLIB_UPDATE_PARAM(QBJT_switch) + { + nl_double IS = m_model.m_IS; + nl_double BF = m_model.m_BF; + nl_double NF = m_model.m_NF; + //nl_double VJE = m_model.dValue("VJE", 0.75); -NETLIB_UPDATE(QBJT_switch) -{ - if (!m_RB.m_P.net().isRailNet()) - m_RB.m_P.solve_now(); // Basis - else if (!m_RB.m_N.net().isRailNet()) - m_RB.m_N.solve_now(); // Emitter - else if (!m_RC.m_P.net().isRailNet()) - m_RC.m_P.solve_now(); // Collector -} + set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); + nl_double alpha = BF / (1.0 + BF); -NETLIB_UPDATE_PARAM(QBJT_switch) -{ - nl_double IS = m_model.m_IS; - nl_double BF = m_model.m_BF; - nl_double NF = m_model.m_NF; - //nl_double VJE = m_model.dValue("VJE", 0.75); + diode d(IS, NF); - set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); + // Assume 5mA Collector current for switch operation - nl_double alpha = BF / (1.0 + BF); + m_V = d.V(0.005 / alpha); - diode d(IS, NF); + /* Base current is 0.005 / beta + * as a rough estimate, we just scale the conductance down */ - // Assume 5mA Collector current for switch operation + m_gB = 1.0 / (m_V/(0.005 / BF)); - m_V = d.V(0.005 / alpha); + //m_gB = d.gI(0.005 / alpha); - /* Base current is 0.005 / beta - * as a rough estimate, we just scale the conductance down */ + if (m_gB < exec().gmin()) + m_gB = exec().gmin(); + m_gC = d.gI(0.005); // very rough estimate + } - m_gB = 1.0 / (m_V/(0.005 / BF)); + NETLIB_UPDATE_TERMINALS(QBJT_switch) + { + const nl_double m = (is_qtype( BJT_NPN) ? 1 : -1); + + const unsigned new_state = (m_RB.deltaV() * m > m_V ) ? 1 : 0; + if (m_state_on ^ new_state) + { + const nl_double gb = new_state ? m_gB : exec().gmin(); + const nl_double gc = new_state ? m_gC : exec().gmin(); + const nl_double v = new_state ? m_V * m : 0; + + m_RB.set_G_V_I(gb, v, 0.0); + m_RC.set_G_V_I(gc, 0.0, 0.0); + m_state_on = new_state; + } + } - //m_gB = d.gI(0.005 / alpha); - if (m_gB < exec().gmin()) - m_gB = exec().gmin(); - m_gC = d.gI(0.005); // very rough estimate -} + // ---------------------------------------------------------------------------------------- + // nld_Q - Ebers Moll + // ---------------------------------------------------------------------------------------- -NETLIB_UPDATE_TERMINALS(QBJT_switch) -{ - const nl_double m = (is_qtype( BJT_NPN) ? 1 : -1); - const unsigned new_state = (m_RB.deltaV() * m > m_V ) ? 1 : 0; - if (m_state_on ^ new_state) + NETLIB_UPDATE(QBJT_EB) { - const nl_double gb = new_state ? m_gB : exec().gmin(); - const nl_double gc = new_state ? m_gC : exec().gmin(); - const nl_double v = new_state ? m_V * m : 0; - - m_RB.set_G_V_I(gb, v, 0.0); - m_RC.set_G_V_I(gc, 0.0, 0.0); - m_state_on = new_state; + if (!m_D_EB.m_P.net().isRailNet()) + m_D_EB.m_P.solve_now(); // Basis + else if (!m_D_EB.m_N.net().isRailNet()) + m_D_EB.m_N.solve_now(); // Emitter + else + m_D_CB.m_N.solve_now(); // Collector } -} + NETLIB_RESET(QBJT_EB) + { + NETLIB_NAME(Q)::reset(); + if (m_CJE) + { + m_CJE->reset(); + m_CJE->m_C.setTo(m_model.m_CJE); + } + if (m_CJC) + { + m_CJC->reset(); + m_CJC->m_C.setTo(m_model.m_CJC); + } -// ---------------------------------------------------------------------------------------- -// nld_Q - Ebers Moll -// ---------------------------------------------------------------------------------------- + } + NETLIB_UPDATE_TERMINALS(QBJT_EB) + { + const nl_double polarity = (qtype() == BJT_NPN ? 1.0 : -1.0); + + m_gD_BE.update_diode(-m_D_EB.deltaV() * polarity); + m_gD_BC.update_diode(-m_D_CB.deltaV() * polarity); + + const nl_double gee = m_gD_BE.G(); + const nl_double gcc = m_gD_BC.G(); + const nl_double gec = m_alpha_r * gcc; + const nl_double gce = m_alpha_f * gee; + const nl_double sIe = -m_gD_BE.I() + m_alpha_r * m_gD_BC.I(); + const nl_double sIc = m_alpha_f * m_gD_BE.I() - m_gD_BC.I(); + const nl_double Ie = (sIe + gee * m_gD_BE.Vd() - gec * m_gD_BC.Vd()) * polarity; + const nl_double Ic = (sIc - gce * m_gD_BE.Vd() + gcc * m_gD_BC.Vd()) * polarity; + + m_D_EB.set_mat( gee, gec - gee, -Ie, + gce - gee, gee - gec, Ie); + m_D_CB.set_mat( gcc, gce - gcc, -Ic, + gec - gcc, gcc - gce, Ic); + m_D_EC.set_mat( 0, -gec, 0, + -gce, 0, 0); + } -NETLIB_UPDATE(QBJT_EB) -{ - if (!m_D_EB.m_P.net().isRailNet()) - m_D_EB.m_P.solve_now(); // Basis - else if (!m_D_EB.m_N.net().isRailNet()) - m_D_EB.m_N.solve_now(); // Emitter - else - m_D_CB.m_N.solve_now(); // Collector -} - -NETLIB_RESET(QBJT_EB) -{ - NETLIB_NAME(Q)::reset(); -} -NETLIB_UPDATE_TERMINALS(QBJT_EB) -{ - const nl_double polarity = (qtype() == BJT_NPN ? 1.0 : -1.0); - - m_gD_BE.update_diode(-m_D_EB.deltaV() * polarity); - m_gD_BC.update_diode(-m_D_CB.deltaV() * polarity); - - const nl_double gee = m_gD_BE.G(); - const nl_double gcc = m_gD_BC.G(); - const nl_double gec = m_alpha_r * gcc; - const nl_double gce = m_alpha_f * gee; - const nl_double sIe = -m_gD_BE.I() + m_alpha_r * m_gD_BC.I(); - const nl_double sIc = m_alpha_f * m_gD_BE.I() - m_gD_BC.I(); - const nl_double Ie = (sIe + gee * m_gD_BE.Vd() - gec * m_gD_BC.Vd()) * polarity; - const nl_double Ic = (sIc - gce * m_gD_BE.Vd() + gcc * m_gD_BC.Vd()) * polarity; - - m_D_EB.set_mat( gee, gec - gee, -Ie, - gce - gee, gee - gec, Ie); - m_D_CB.set_mat( gcc, gce - gcc, -Ic, - gec - gcc, gcc - gce, Ic); - m_D_EC.set_mat( 0, -gec, 0, - -gce, 0, 0); -} - - -NETLIB_UPDATE_PARAM(QBJT_EB) -{ - nl_double IS = m_model.m_IS; - nl_double BF = m_model.m_BF; - nl_double NF = m_model.m_NF; - nl_double BR = m_model.m_BR; - nl_double NR = m_model.m_NR; - //nl_double VJE = m_model.dValue("VJE", 0.75); + NETLIB_UPDATE_PARAM(QBJT_EB) + { + nl_double IS = m_model.m_IS; + nl_double BF = m_model.m_BF; + nl_double NF = m_model.m_NF; + nl_double BR = m_model.m_BR; + nl_double NR = m_model.m_NR; + //nl_double VJE = m_model.dValue("VJE", 0.75); - set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); + set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); - m_alpha_f = BF / (1.0 + BF); - m_alpha_r = BR / (1.0 + BR); + m_alpha_f = BF / (1.0 + BF); + m_alpha_r = BR / (1.0 + BR); - m_gD_BE.set_param(IS / m_alpha_f, NF, exec().gmin()); - m_gD_BC.set_param(IS / m_alpha_r, NR, exec().gmin()); -} + m_gD_BE.set_param(IS / m_alpha_f, NF, exec().gmin(), constants::T0()); + m_gD_BC.set_param(IS / m_alpha_r, NR, exec().gmin(), constants::T0()); + } - } //namespace analog +} // namespace analog - namespace devices { - NETLIB_DEVICE_IMPL_NS(analog, QBJT_EB, "QBJT_EB", "MODEL") - NETLIB_DEVICE_IMPL_NS(analog, QBJT_switch, "QBJT_SW", "MODEL") - } // namespace devices +namespace devices { + NETLIB_DEVICE_IMPL_NS(analog, QBJT_EB, "QBJT_EB", "MODEL") + NETLIB_DEVICE_IMPL_NS(analog, QBJT_switch, "QBJT_SW", "MODEL") +} // namespace devices } // namespace netlist diff --git a/src/lib/netlist/analog/nld_mosfet.cpp b/src/lib/netlist/analog/nld_mosfet.cpp new file mode 100644 index 00000000000..f941d06076a --- /dev/null +++ b/src/lib/netlist/analog/nld_mosfet.cpp @@ -0,0 +1,578 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nld_mosfet.cpp + * + * Formulas in here based on the following Sources: + * + * https://www.imperial.ac.uk/pls/portallive/docs/1/7292573.PDF + * http://www3.imperial.ac.uk/pls/portallive/docs/1/56133736.PDF + * https://people.rit.edu/lffeee/SPICE_MOSFET_Model_Intro.pdf + * https://people.rit.edu/lffeee/SPICE.pdf + * http://web.mit.edu/course/6/6.012/SPR98/www/lectures/S98_Lecture10.pdf + * http://homepages.rpi.edu/~sawyes/Models_review.pdf + * http://jaco.ec.t.kanazawa-u.ac.jp/edu/mix/pdf/3.pdf + * + * Farid N. Naim, Circuit Simulation (Wiley-IEEE Press, 2010). + * Stefan Jahn, Michael Margraf, Vincent Habchi and Raimund Jacob, "Qucs Technical Papers" (2007) + * + */ + +#include "netlist/solver/nld_solver.h" +#include "netlist/nl_setup.h" +#include "nlid_twoterm.h" + +#include <cmath> + +#define BODY_CONNECTED_TO_SOURCE (1) + +namespace netlist +{ +namespace analog +{ + + using constants = plib::constants<nl_double>; + + // ----------------------------------------------------------------------------- + // nld_FET - Base classes + // ----------------------------------------------------------------------------- + + /*! Class representing the nmos model paramers. + * + * This is the model representation of the nmos model. Typically, SPICE uses + * the following parameters. A "Y" in the first column indicates that the + * parameter is actually used in netlist. + * + * | NL? |Name | Description|Units |Default |Example | + * |:---:|------|-----------------------------------------------------------------------|-------|---------:|----------------:| + * | Y |Vto | Zero-bias threshold voltage | V | 0 | 1 | + * | Y |Kp | Transconductance parameter | A/V² | 0.00002 | 0.00003 | + * | Y |Gamma | Bulk threshold parameter | V^½ | 0 | 0.37 | + * | Y |Phi | Surface inversion potential | V | 0.6 | 0.65 | + * | Y |Lambda| Channel-length modulation (level 1 and 2 only) | 1/V | 0 | 0.02 | + * | |Rd | Drain ohmic resistance |W|0|1| + * | |Rs | Source ohmic resistance |W|0|1| + * | |Cbd | Zero-bias B-D junction capacitance |F|0|20f| + * | |Cbs | Zero-bias B-S junction capacitance |F|0|20f| + * | Y |Is | Bulk junction saturation current |A|0.00000000000001|1E-015| + * | Y |N | Bulk diode emission coefficient |-|1|* + * | |Pb | Bulk junction potential |V|0.8|0.87|8| + * | Y |Cgso | Gate-source overlap capacitance per meter channel width |F/m|0|0.00000000004| + * | Y |Cgdo | Gate-drain overlap capacitance per meter channel width |F/m|0|0.00000000004|* + * | Y |Cgbo | Gate-bulk overlap capacitance per meter channel width |F/m|0|0.0000000002|* + * | |Rsh | Drain and source diffusion sheet resistance |W|0|10|* + * | |Cj | Zero-bias bulk junction bottom capacitance per square meter of junction area|F/m²|0|0.0002|* + * | |Mj | Bulk junction bottom grading coefficient |-|0.5|0.5|* + * | |Cjsw | Zero-bias bulk junction sidewall capacitance per meter of junction perimeter|F/m|0|1p|* + * | |Mjsw | Bulk junction sidewall grading coefficient |-|.50 level 1 .33 level 2,3|| + * | |Js | Bulk junction saturation current per square-meter of junction area|A/m|0|0.00000001| + * | Y |Tox | Oxide thickness |m|0.0000001|0.0000001| + * | Y |Nsub | Substrate doping |1/cm³|0|4000000000000000| + * | |Nss | Surface state density |1/cm²|0|10000000000| + * | |Nfs | Fast surface state |1/cm²|0|10000000000|* + * | |TPG | Type of gate material: +1 opp. to substrate -1 same as substrate 0 Al gate|-|1| + * | |Xj | Metallurgical junction depth |m|0|1µ|* + * | Y |Ld | Lateral diffusion |m|0|0.8µ| + * | Y |Uo | Surface mobility |cm²/V/s|600|700| + * | |Ucrit | Critical field for mobility degradation (level 2 only) |V/cm|10000|10000| + * | |Uexp | Critical field exponent in mobility degradation (level 2 only) |-|0|0.1| + * | |Utra | Transverse field coefficient (level 2 only) |-|0|0.3|* + * | |Vmax | Maximum carrier drift velocity (levels 2 & 3 only) |m/s|0|50000| + * | |Neff | Total channel-charge exponent (level 2 only) |-|1|5| + * | |Kf | Flicker noise coefficient |-|0|1E-026| + * | |Af | Flicker noise exponent |-|1|1.2| + * | |Fc | Coefficient for forward-bias depletion capacitance formula |-|0.5| + * | |Delta | Width effect on threshold voltage(levels 2 and 3) |-|0|1| + * | |Theta | Mobility modulation (level 3 only) |-|0|0.1| + * | |Eta | Static feedback (level 3 only) |-|0|1| + * | |Kappa | Saturation field (level 3 only) |0.2|0.5| + * | |Tnom | Parameter measurement temperature |ºC|27|50|| + * | Y |L | Length scaling |-|100e-6|| + * | Y |W | Width scaling |-|100e-6|| + * */ + + class fet_model_t : public param_model_t + { + public: + fet_model_t(device_t &device, const pstring &name, const pstring &val) + : param_model_t(device, name, val) + , m_VTO(*this, "VTO") + , m_N(*this, "N") + , m_ISS(*this, "IS") // Haven't seen a model using ISS / ISD + , m_ISD(*this, "IS") + , m_LD(*this, "LD") + , m_L(*this, "L") + , m_W(*this, "W") + , m_TOX(*this, "TOX") + , m_KP(*this, "KP") + , m_UO(*this, "UO") + , m_PHI(*this, "PHI") + , m_NSUB(*this, "NSUB") + , m_GAMMA(*this, "GAMMA") + , m_LAMBDA(*this, "LAMBDA") + , m_RD(*this, "RD") + , m_RS(*this, "RS") + , m_CGSO(*this, "CGSO") + , m_CGDO(*this, "CGDO") + , m_CGBO(*this, "CGBO") + {} + + value_t m_VTO; //!< Threshold voltage [V] + value_t m_N; //!< Bulk diode emission coefficient + value_t m_ISS; //!< Body diode saturation current + value_t m_ISD; //!< Body diode saturation current + value_t m_LD; //!< Lateral diffusion [m] + value_t m_L; //!< Length scaling + value_t m_W; //!< Width scaling + value_t m_TOX; //!< Oxide thickness + value_t m_KP; //!< Transconductance parameter [A/V²] + value_t m_UO; //!< Surface mobility [cm²/V/s] + value_t m_PHI; //!< Surface inversion potential [V] + value_t m_NSUB; //!< Substrate doping [1/cm³] + value_t m_GAMMA; //!< Bulk threshold parameter [V^½] + value_t m_LAMBDA; //!< Channel-length modulation [1/V] + value_t m_RD; //!< Drain ohmic resistance + value_t m_RS; //!< Source ohmic resistance + value_t m_CGSO; //!< Gate-source overlap capacitance per meter channel width + value_t m_CGDO; //!< Gate-drain overlap capacitance per meter channel width + value_t m_CGBO; //!< Gate-bulk overlap capacitance per meter channel width + }; + + // Have a common start for mosfets + + NETLIB_OBJECT(FET) + { + public: + enum q_type { + FET_NMOS, + FET_PMOS + }; + + NETLIB_CONSTRUCTOR(FET) + , m_model(*this, "MODEL", "NMOS") + , m_qtype(FET_NMOS) + { + } + + NETLIB_IS_DYNAMIC(true) + + //NETLIB_RESETI(); + NETLIB_UPDATEI() { } + + q_type qtype() const { return m_qtype; } + bool is_qtype(q_type atype) const { return m_qtype == atype; } + void set_qtype(q_type atype) { m_qtype = atype; } + protected: + + fet_model_t m_model; + private: + q_type m_qtype; + }; + + // ----------------------------------------------------------------------------- + // nld_QBJT_EB + // ----------------------------------------------------------------------------- + + NETLIB_OBJECT_DERIVED(MOSFET, FET) + { + public: + NETLIB_CONSTRUCTOR_DERIVED(MOSFET, FET) + , m_DG(*this, "m_DG", true) + , m_SG(*this, "m_SG", true) + , m_SD(*this, "m_SD", true) + , m_D_BD(*this, "m_D_BD") +#if (!BODY_CONNECTED_TO_SOURCE) + , m_D_BS(*this, "m_D_BS") +#endif + , m_cap_gb(*this, "m_cap_gb") + , m_cap_gs(*this, "m_cap_gs") + , m_cap_gd(*this, "m_cap_gd") + , m_phi(0.0) + , m_gamma(0.0) + , m_vto(0.0) + , m_beta(0.0) + , m_lambda(0.0) + , m_Leff(0.0) + , m_CoxWL(0.0) + , m_polarity(qtype() == FET_NMOS ? 1.0 : -1.0) + , m_Cgb(0.0) + , m_Cgs(0.0) + , m_Cgd(0.0) + + { + register_subalias("S", m_SG.m_P); // Source + register_subalias("G", m_SG.m_N); // Gate + + register_subalias("D", m_DG.m_P); // Drain + + connect(m_SG.m_P, m_SD.m_P); + connect(m_SG.m_N, m_DG.m_N); + connect(m_DG.m_P, m_SD.m_N); + +#if 0 + if (m_model.m_CJE > 0.0) + { + create_and_register_subdevice("m_CJE", m_CJE); + connect("B", "m_CJE.1"); + connect("E", "m_CJE.2"); + } + if (m_model.m_CJC > 0.0) + { + create_and_register_subdevice("m_CJC", m_CJC); + connect("B", "m_CJC.1"); + connect("C", "m_CJC.2"); + } +#endif + } + + NETLIB_IS_TIMESTEP(true) + + NETLIB_TIMESTEPI() + { + const nl_double Ugd = -m_DG.deltaV() * m_polarity; // Gate - Drain + const nl_double Ugs = -m_SG.deltaV() * m_polarity; // Gate - Source + const nl_double Ubs = 0.0; // Bulk - Source == 0 if connected + const nl_double Ugb = Ugs - Ubs; + + m_cap_gb.timestep(m_Cgb, Ugb, step); + m_cap_gs.timestep(m_Cgs, Ugs, step); + m_cap_gd.timestep(m_Cgd, Ugd, step); + } + + protected: + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + NETLIB_UPDATE_PARAMI(); + NETLIB_UPDATE_TERMINALSI(); + + private: + + nld_twoterm m_DG; + nld_twoterm m_SG; + nld_twoterm m_SD; + + generic_diode<diode_e::MOS> m_D_BD; +#if (!BODY_CONNECTED_TO_SOURCE) + generic_diode<diode_e::MOS> m_D_BS; +#endif + + generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap_gb; + generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap_gs; + generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap_gd; + + + nl_double m_phi; + nl_double m_gamma; + nl_double m_vto; + nl_double m_beta; + nl_double m_lambda; + + /* used in capacitance calculation */ + nl_double m_Leff; + nl_double m_CoxWL; + nl_double m_polarity; + + /* capacitance values */ + + nl_double m_Cgb; + nl_double m_Cgs; + nl_double m_Cgd; + + void set_cap(generic_capacitor<capacitor_e::VARIABLE_CAPACITY> cap, + nl_double capval, nl_double V, + nl_double &g11, nl_double &g12, nl_double &g21, nl_double &g22, + nl_double &I1, nl_double &I2) + { + const nl_double I = cap.Ieq(capval, V) * m_polarity; + const nl_double G = cap.G(capval); + g11 += G; g12 -= G; g21 -= G; g22 += G; + I1 -= I; I2 += I; + //printf("Cap: %g\n", capval); + } + + void calculate_caps(nl_double Vgs, nl_double Vgd, nl_double Vth, + nl_double &Cgs, nl_double &Cgd, nl_double &Cgb) + { + nl_double Vctrl = Vgs - Vth * m_polarity; + // Cut off - now further differentiated into 3 different formulas + // Accumulation + if (Vctrl <= -m_phi) + { + Cgb = m_CoxWL; + Cgs = 0.0; + Cgd = 0.0; + } + else if (Vctrl <= -m_phi / 2.0) + { + Cgb = -Vctrl * m_CoxWL / m_phi; + Cgs = 0.0; + Cgd = 0.0; + } + // Depletion + else if (Vctrl <= 0) + { + Cgb = -Vctrl * m_CoxWL / m_phi; + Cgs = (Vctrl * m_CoxWL * (4.0 / 3.0) / m_phi + (2.0 / 3.0) * m_CoxWL); + Cgd = 0.0; + } + else + { + const nl_double Vdsat = Vctrl; + const nl_double Vds = Vgs - Vgd; + // saturation + if (Vdsat <= Vds) + { + Cgb = 0; + Cgs = (2.0 / 3.0) * m_CoxWL; + Cgd = 0; + } + else + { + // linear + const nl_double Sqr1 = std::pow(Vdsat - Vds, 2); + const nl_double Sqr2 = std::pow(2.0 * Vdsat - Vds, 2); + Cgb = 0; + Cgs = m_CoxWL * (1.0 - Sqr1 / Sqr2) * (2.0 / 3.0); + Cgd = m_CoxWL * (1.0 - Vdsat * Vdsat / Sqr2) * (2.0 / 3.0); + } + } + } + }; + + // ---------------------------------------------------------------------------------------- + // nld_Q - Ebers Moll + // ---------------------------------------------------------------------------------------- + + NETLIB_UPDATE(MOSFET) + { + if (!m_SG.m_P.net().isRailNet()) + m_SG.m_P.solve_now(); // Basis + else if (!m_SG.m_N.net().isRailNet()) + m_SG.m_N.solve_now(); // Emitter + else + m_DG.m_N.solve_now(); // Collector + } + + NETLIB_RESET(MOSFET) + { + NETLIB_NAME(FET)::reset(); + } + + NETLIB_UPDATE_TERMINALS(MOSFET) + { + const nl_double Vgd = -m_DG.deltaV() * m_polarity; // Gate - Drain + const nl_double Vgs = -m_SG.deltaV() * m_polarity; // Gate - Source + const nl_double Vbs = 0.0; // Bulk - Source == 0 if connected + const nl_double Vbd = m_SD.deltaV() * m_polarity; // Bulk - Drain = Source - Drain + const nl_double Vds = Vgs - Vgd; + +#if (!BODY_CONNECTED_TO_SOURCE) + m_D_BS.update_diode(Vbs); +#endif + m_D_BD.update_diode(Vbd); + + // Are we in forward mode ? + // in backward mode, just swap source and drain + const bool is_forward = Vds >= 0; + + // calculate Vth + const nl_double Vbulk = is_forward ? Vbs : Vbd; + const nl_double phi_m_Vbulk = (m_phi > Vbulk) ? std::sqrt(m_phi - Vbulk) : 0.0; + const nl_double Vth = m_vto * m_polarity + m_gamma * (phi_m_Vbulk - std::sqrt(m_phi)); + + const nl_double Vctrl = (is_forward ? Vgs : Vgd) - Vth; + + nl_double Ids, gm, gds, gmb; + const nl_double absVds = std::abs(Vds); + + if (Vctrl <= 0.0) + { + // cutoff region + Ids = 0.0; + gm = 0.0; + gds = 0.0; + gmb = 0.0; + } + else + { + const nl_double beta = m_beta * (1.0 + m_lambda * absVds); + if (Vctrl <= absVds) + { + // saturation region + Ids = beta * Vctrl * Vctrl / 2.0; + gm = beta * Vctrl; + gds = m_lambda * m_beta * Vctrl * Vctrl / 2.0; + } + else + { + // linear region + Ids = beta * absVds * (Vctrl - absVds / 2); + gm = beta * absVds; + gds = beta * (Vctrl - absVds) + m_lambda * m_beta * absVds * (Vctrl - absVds / 2.0); + } + + // backgate transconductance + const nl_double bgtc = (phi_m_Vbulk != 0.0) ? (m_gamma / phi_m_Vbulk / 2.0) : 0.0; + gmb = gm * bgtc; + } + + // FIXME: these are needed to compute capacitance + // nl_double Udsat = pol * std::max (Utst, 0.0); + // Uon = pol * Vth; + + // compute bulk diode equivalent currents + + const nl_double IeqBD = m_D_BD.Ieq(); + const nl_double gbd = m_D_BD.G(); +#if (!BODY_CONNECTED_TO_SOURCE) + const nl_double IeqBS = m_D_BS.Ieq(); + const nl_double gbs = m_D_BS.G(); +#else + const nl_double IeqBS = 0.0; + const nl_double gbs = 0.0; +#endif + // exchange controlling nodes if necessary + const nl_double gsource = is_forward ? (gm + gmb) : 0; + const nl_double gdrain = is_forward ? 0.0 : (gm + gmb); + + const nl_double IeqDS = (is_forward) ? + Ids - gm * Vgs - gmb * Vbs - gds * Vds + : -Ids - gm * Vgd - gmb * Vbd - gds * Vds; + + // IG = 0 + nl_double IG = 0.0; + nl_double ID = (+IeqBD - IeqDS) * m_polarity; + nl_double IS = (+IeqBS + IeqDS) * m_polarity; + nl_double IB = (-IeqBD - IeqBS) * m_polarity; + + nl_double gGG = 0.0; + nl_double gGD = 0.0; + nl_double gGS = 0.0; + nl_double gGB = 0.0; + + nl_double gDG = gm; + nl_double gDD = gds + gbd - gdrain; + const nl_double gDS = -gds - gsource; + const nl_double gDB = gmb - gbd; + + nl_double gSG = -gm; + const nl_double gSD = -gds + gdrain; + nl_double gSS = gbs + gds + gsource; + const nl_double gSB = -gbs - gmb; + + nl_double gBG = 0.0; + const nl_double gBD = -gbd; + const nl_double gBS = -gbs; + nl_double gBB = gbs + gbd; + + const nl_double Vgb = Vgs - Vbs; + + if (is_forward) + calculate_caps(Vgs, Vgd, Vth, m_Cgs, m_Cgd, m_Cgb); + else + calculate_caps(Vgd, Vgs, Vth, m_Cgd, m_Cgs, m_Cgb); + + set_cap(m_cap_gb, m_Cgb + m_model.m_CGBO * m_Leff, Vgb, gGG, gGB, gBG, gBB, IG, IB); + set_cap(m_cap_gs, m_Cgs + m_model.m_CGSO * m_model.m_W, Vgs, gGG, gGS, gSG, gSS, IG, IS); + set_cap(m_cap_gd, m_Cgd + m_model.m_CGDO * m_model.m_W, Vgd, gGG, gGD, gDG, gDD, IG, ID); + + // Source connected to body, Diode S-B shorted! + const nl_double gSSBB = gSS + gBB + gBS + gSB; + + // S G + m_SG.set_mat( gSSBB, gSG + gBG, +(IS + IB), // S + gGS + gGB, gGG, IG ); // G + // D G + m_DG.set_mat( gDD, gDG, +ID, // D + gGD, 0.0, 0.0 ); // G + // S D + m_SD.set_mat( 0.0, gSD + gBD, 0.0, // S + gDS + gDB, 0.0, 0.0); // D + } + + NETLIB_UPDATE_PARAM(MOSFET) + { + set_qtype((m_model.model_type() == "NMOS") ? FET_NMOS : FET_PMOS); + m_polarity = qtype() == FET_NMOS ? 1.0 : -1.0; + + /* + * From http://ltwiki.org/LTspiceHelp/LTspiceHelp/M_MOSFET.htm : + * + * VTO, KP, LAMBDA, PHI and GAMMA. These parameters are computed + * if the process parameters(NSUB, TOX,...) are given, but + * user-specified values always override. + * + * But couldn't find a formula for lambda anywhere + * + */ + + m_lambda = m_model.m_LAMBDA; // FIXME: m_lambda only set once + + // calculate effective channel length + m_Leff = m_model.m_L - 2 * m_model.m_LD; + nl_assert_always(m_Leff > 0.0, "Effective Lateral diffusion would be negative for model " + m_model.name()); + + nl_double Cox = (m_model.m_TOX > 0.0) ? (constants::eps_SiO2() * constants::eps_0() / m_model.m_TOX) : 0.0; + + // calculate DC transconductance coefficient + if (m_model.m_KP > 0) + m_beta = m_model.m_KP * m_model.m_W / m_Leff; + else if (Cox > 0 && m_model.m_UO > 0) + m_beta = m_model.m_UO * 1e-4 * Cox * m_model.m_W / m_Leff; + else + m_beta = 2e-5 * m_model.m_W / m_Leff; + + // Bulk diodes + + m_D_BD.set_param(m_model.m_ISD, m_model.m_N, exec().gmin(), constants::T0()); +#if (!BODY_CONNECTED_TO_SOURCE) + m_D_BS.set_param(m_model.m_ISS, m_model.m_N, exec().gmin(), constants::T0()); +#endif + + //FIXME::UT can disappear + const double Vt = constants::T0() * constants::k_b() / constants::Q_e(); + + // calculate surface potential if not given + + if (m_model.m_PHI > 0.0) + m_phi = m_model.m_PHI; + else if (m_model.m_NSUB > 0.0) + { + nl_assert_always(m_model.m_NSUB * 1e6 >= constants::NiSi(), "Error calculating phi for model " + m_model.name()); + m_phi = 2 * Vt * std::log (m_model.m_NSUB * 1e6 / constants::NiSi()); + } + else + m_phi = 0.6; + + // calculate bulk threshold if not given + if (m_model.m_GAMMA > 0.0) + m_gamma = m_model.m_GAMMA; + else + { + if (Cox > 0.0 && m_model.m_NSUB > 0) + m_gamma = std::sqrt (2.0 * constants::Q_e() * constants::eps_Si() * constants::eps_0() * m_model.m_NSUB * 1e6) / Cox; + else + m_gamma = 0.0; + } + + m_vto = m_model.m_VTO; + nl_assert_always(m_vto != 0.0, "Threshold voltage not specified for " + m_model.name()); + + /* FIXME: VTO if missing may be calculated from TPG, NSS and temperature. Usually models + * specify VTO so skip this here. + */ + + m_CoxWL = Cox * m_model.m_W * m_Leff; + + //printf("Cox: %g\n", m_Cox); + + } + +} // namespace analog + +namespace devices { + NETLIB_DEVICE_IMPL_NS(analog, MOSFET, "MOSFET", "MODEL") +} // namespace devices + +} // namespace netlist diff --git a/src/lib/netlist/analog/nld_mosfet.h b/src/lib/netlist/analog/nld_mosfet.h new file mode 100644 index 00000000000..32011d709d8 --- /dev/null +++ b/src/lib/netlist/analog/nld_mosfet.h @@ -0,0 +1,21 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nld_mosfet.h + * + */ + +#ifndef NLD_MOSFET_H_ +#define NLD_MOSFET_H_ + +#include "netlist/nl_setup.h" + +// ----------------------------------------------------------------------------- +// Macros +// ----------------------------------------------------------------------------- + +#define MOSFET(name, model) \ + NET_REGISTER_DEV(MOSFET, name) \ + NETDEV_PARAMI(name, MODEL, model) + +#endif /* NLD_MOSFET_H_ */ diff --git a/src/lib/netlist/analog/nld_opamps.cpp b/src/lib/netlist/analog/nld_opamps.cpp index 4b5a5f8ba38..8c3c655bfa9 100644 --- a/src/lib/netlist/analog/nld_opamps.cpp +++ b/src/lib/netlist/analog/nld_opamps.cpp @@ -129,10 +129,10 @@ namespace netlist } else if (m_type == 3) { - register_sub("CP1", m_CP); - register_sub("EBUF", m_EBUF); - register_sub("DN", m_DN, "D(IS=1e-15 N=1)"); - register_sub("DP", m_DP, "D(IS=1e-15 N=1)"); + create_and_register_subdevice("CP1", m_CP); + create_and_register_subdevice("EBUF", m_EBUF); + create_and_register_subdevice("DN", m_DN, "D(IS=1e-15 N=1)"); + create_and_register_subdevice("DP", m_DP, "D(IS=1e-15 N=1)"); //m_DP->m_model.setTo("D(IS=1e-15 N=1)"); //m_DN->m_model.setTo("D(IS=1e-15 N=1)"); diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp index f945100c652..5019c98c0e4 100644 --- a/src/lib/netlist/analog/nlid_twoterm.cpp +++ b/src/lib/netlist/analog/nlid_twoterm.cpp @@ -16,68 +16,6 @@ namespace netlist { namespace analog { -// ---------------------------------------------------------------------------------------- -// generic_diode -// ---------------------------------------------------------------------------------------- - -generic_diode::generic_diode(device_t &dev, const pstring &name) - : m_Vd(dev, name + ".m_Vd", 0.7) - , m_Id(dev, name + ".m_Id", 0.0) - , m_G(dev, name + ".m_G", 1e-15) - , m_Vt(0.0) - , m_Vmin(0.0) - , m_Is(0.0) - , m_logIs(0.0) - , m_n(0.0) - , m_gmin(1e-15) - , m_VtInv(0.0) - , m_Vcrit(0.0) -{ - set_param(1e-15, 1, 1e-15); -} - -void generic_diode::set_param(const nl_double Is, const nl_double n, nl_double gmin) -{ - static constexpr double csqrt2 = 1.414213562373095048801688724209; //std::sqrt(2.0); - m_Is = Is; - m_logIs = std::log(Is); - m_n = n; - m_gmin = gmin; - - m_Vt = 0.0258 * m_n; - m_Vmin = -5.0 * m_Vt; - - m_Vcrit = m_Vt * std::log(m_Vt / m_Is / csqrt2); - m_VtInv = 1.0 / m_Vt; -} - -void generic_diode::update_diode(const nl_double nVd) -{ - if (nVd < m_Vmin) - { - m_Vd = nVd; - m_G = m_gmin; - m_Id = - m_Is; - } - else if (nVd < m_Vcrit) - { - m_Vd = nVd; - //m_Vd = m_Vd + 10.0 * m_Vt * std::tanh((nVd - m_Vd) / 10.0 / m_Vt); - //const double IseVDVt = m_Is * std::exp(m_Vd * m_VtInv); - const double IseVDVt = std::exp(m_logIs + m_Vd * m_VtInv); - m_Id = IseVDVt - m_Is; - m_G = IseVDVt * m_VtInv + m_gmin; - } - else - { - const double a = std::max((nVd - m_Vd) * m_VtInv, plib::constants<nl_double>::cast(-0.99)); - m_Vd = m_Vd + std::log1p(a) * m_Vt; - //const double IseVDVt = m_Is * std::exp(m_Vd * m_VtInv); - const double IseVDVt = std::exp(m_logIs + m_Vd * m_VtInv); - m_Id = IseVDVt - m_Is; - m_G = IseVDVt * m_VtInv + m_gmin; - } -} // ---------------------------------------------------------------------------------------- // nld_twoterm @@ -193,40 +131,14 @@ NETLIB_UPDATE_PARAM(POT2) } // ---------------------------------------------------------------------------------------- -// nld_C -// ---------------------------------------------------------------------------------------- - -NETLIB_RESET(C) -{ - // FIXME: Startup conditions - set_G_V_I(exec().gmin(), 0.0, -5.0 / exec().gmin()); - //set(exec().gmin(), 0.0, 0.0); -} - -NETLIB_UPDATE_PARAM(C) -{ - m_GParallel = exec().gmin(); -} - -NETLIB_TIMESTEP(C) -{ - /* Gpar should support convergence */ - const nl_double G = m_C() / step + m_GParallel; - const nl_double I = -G * deltaV(); - set_mat( G, -G, -I, - -G, G, I); - //set(G, 0.0, I); -} - -// ---------------------------------------------------------------------------------------- // nld_L // ---------------------------------------------------------------------------------------- NETLIB_RESET(L) { - m_GParallel = exec().gmin(); + m_gmin = exec().gmin(); m_I = 0.0; - m_G = m_GParallel; + m_G = m_gmin; set_mat( m_G, -m_G, -m_I, -m_G, m_G, m_I); //set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN); @@ -240,7 +152,7 @@ NETLIB_TIMESTEP(L) { /* Gpar should support convergence */ m_I += m_I + m_G * deltaV(); - m_G = step / m_L() + m_GParallel; + m_G = step / m_L() + m_gmin; set_mat( m_G, -m_G, -m_I, -m_G, m_G, m_I); //set(m_G, 0.0, m_I); @@ -255,7 +167,7 @@ NETLIB_RESET(D) nl_double Is = m_model.m_IS; nl_double n = m_model.m_N; - m_D.set_param(Is, n, exec().gmin()); + m_D.set_param(Is, n, exec().gmin(), constants::T0()); set_G_V_I(m_D.G(), 0.0, m_D.Ieq()); } @@ -264,7 +176,7 @@ NETLIB_UPDATE_PARAM(D) nl_double Is = m_model.m_IS; nl_double n = m_model.m_N; - m_D.set_param(Is, n, exec().gmin()); + m_D.set_param(Is, n, exec().gmin(), constants::T0()); } NETLIB_UPDATE_TERMINALS(D) diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h index 08c7235caf1..aaf35fe9e28 100644 --- a/src/lib/netlist/analog/nlid_twoterm.h +++ b/src/lib/netlist/analog/nlid_twoterm.h @@ -35,8 +35,11 @@ #include "netlist/nl_base.h" #include "netlist/nl_setup.h" +#include "netlist/solver/nld_solver.h" #include "plib/pfunction.h" +#include <cmath> + // ----------------------------------------------------------------------------- // Implementation // ----------------------------------------------------------------------------- @@ -84,7 +87,7 @@ public: void solve_now(); - void solve_later(netlist_time delay = netlist_time::from_nsec(1)); + void solve_later(netlist_time delay = netlist_time::quantum()); void set_G_V_I(const nl_double G, const nl_double V, const nl_double I) { @@ -217,6 +220,131 @@ private: param_logic_t m_Reverse; }; +// ----------------------------------------------------------------------------- +// A generic capacitor model +// ----------------------------------------------------------------------------- + +enum class capacitor_e +{ + VARIABLE_CAPACITY, + CONSTANT_CAPACITY +}; + +template <capacitor_e TYPE> +class generic_capacitor +{ +}; + +#if 1 +template <> +class generic_capacitor<capacitor_e::VARIABLE_CAPACITY> +{ +public: + generic_capacitor(device_t &dev, const pstring &name) + : m_h(dev, name + ".m_h", 0.0) + , m_c(dev, name + ".m_c", 0.0) + , m_v(dev, name + ".m_v", 0.0) + , m_gmin(0.0) + { + } + + capacitor_e type() const { return capacitor_e::VARIABLE_CAPACITY; } + + nl_double G(nl_double cap) const + { + //return m_h * (2.0 * cap - m_c) + m_gmin; + return m_h * 0.5 * (cap + m_c) + m_gmin; + } + + nl_double Ieq(nl_double cap, nl_double v) const + { + plib::unused_var(v); +// return m_h * (cap * v - m_charge) - G(cap) * v; + return -m_h * 0.5 * (cap + m_c) * m_v; + } + + void timestep(nl_double cap, nl_double v, nl_double step) + { + m_h = 1.0 / step; + m_c = cap; + m_v = v; + } + + void setparams(nl_double gmin) { m_gmin = gmin; } + +private: + state_var<double> m_h; + state_var<double> m_c; + state_var<double> m_v; + nl_double m_gmin; +}; +#else +template <> +class generic_capacitor<capacitor_e::VARIABLE_CAPACITY> +{ +public: + generic_capacitor(device_t &dev, const pstring &name) + : m_h(dev, name + ".m_h", 0.0) + , m_charge(dev, name + ".m_charge", 0.0) + , m_v(dev, name + ".m_v", 0.0) + , m_gmin(0.0) + { + } + + constexpr capacitor_e type() const { return capacitor_e::VARIABLE_CAPACITY; } + + constexpr nl_double G(nl_double cap) const + { + return cap * m_h + m_gmin; + } + + constexpr nl_double Ieq(nl_double cap, nl_double v) const + { +// return m_h * (cap * v - m_charge) - G(cap) * v; +// return m_h * (cap * (v - m_v)) - G(cap) * v; + return -m_h * cap * m_v; + } + + void timestep(nl_double cap, nl_double v, nl_double step) + { + m_h = 1.0 / step; + m_charge = m_charge + cap * (v - m_v); + m_v = v; + } + + void setparams(nl_double gmin) { m_gmin = gmin; } + +private: + state_var<double> m_h; + state_var<double> m_charge; + state_var<double> m_v; + nl_double m_gmin; +}; +#endif +template <> +class generic_capacitor<capacitor_e::CONSTANT_CAPACITY> +{ +public: + generic_capacitor(device_t &dev, const pstring &name) + : m_h(dev, name + ".m_h", 0.0) + , m_gmin(0.0) + { + } + + capacitor_e type() const { return capacitor_e::CONSTANT_CAPACITY; } + nl_double G(nl_double cap) const { return cap * m_h + m_gmin; } + nl_double Ieq(nl_double cap, nl_double v) const { return - G(cap) * v; } + + void timestep(nl_double cap, nl_double v, nl_double step) + { + plib::unused_var(cap, v); + m_h = 1.0 / step; + } + void setparams(nl_double gmin) { m_gmin = gmin; } +private: + state_var<nl_double> m_h; + nl_double m_gmin; +}; // ----------------------------------------------------------------------------- // nld_C @@ -227,25 +355,45 @@ NETLIB_OBJECT_DERIVED(C, twoterm) public: NETLIB_CONSTRUCTOR_DERIVED(C, twoterm) , m_C(*this, "C", 1e-6) - , m_GParallel(0.0) + , m_cap(*this, "m_cap") { - //register_term("1", m_P); - //register_term("2", m_N); } NETLIB_IS_TIMESTEP(true) - NETLIB_TIMESTEPI(); + NETLIB_TIMESTEPI() + { + m_cap.timestep(m_C(), deltaV(), step); + if (m_cap.type() == capacitor_e::CONSTANT_CAPACITY) + { + const nl_double I = m_cap.Ieq(m_C(), deltaV()); + const nl_double G = m_cap.G(m_C()); + set_mat( G, -G, -I, + -G, G, I); + } + } + + NETLIB_IS_DYNAMIC(m_cap.type() == capacitor_e::VARIABLE_CAPACITY) + NETLIB_UPDATE_TERMINALSI() + { + const nl_double I = m_cap.Ieq(m_C(), deltaV()); + const nl_double G = m_cap.G(m_C()); + set_mat( G, -G, -I, + -G, G, I); + } param_double_t m_C; - NETLIB_RESETI(); + NETLIB_RESETI() + { + m_cap.setparams(exec().gmin()); + } protected: //NETLIB_UPDATEI(); - NETLIB_UPDATE_PARAMI(); + NETLIB_UPDATE_PARAMI() { } private: - nl_double m_GParallel; - + //generic_capacitor<capacitor_e::VARIABLE_CAPACITY> m_cap; + generic_capacitor<capacitor_e::CONSTANT_CAPACITY> m_cap; }; // ----------------------------------------------------------------------------- @@ -257,7 +405,7 @@ NETLIB_OBJECT_DERIVED(L, twoterm) public: NETLIB_CONSTRUCTOR_DERIVED(L, twoterm) , m_L(*this, "L", 1e-6) - , m_GParallel(0.0) + , m_gmin(0.0) , m_G(0.0) , m_I(0.0) { @@ -276,7 +424,7 @@ protected: private: param_double_t m_L; - nl_double m_GParallel; + nl_double m_gmin; nl_double m_G; nl_double m_I; }; @@ -285,14 +433,82 @@ private: // A generic diode model to be used in other devices (Diode, BJT ...) // ----------------------------------------------------------------------------- +enum class diode_e +{ + BIPOLAR, + MOS +}; + +template <diode_e TYPE> class generic_diode { public: - generic_diode(device_t &dev, const pstring &name); + generic_diode(device_t &dev, const pstring &name) + : m_Vd(dev, name + ".m_Vd", 0.7) + , m_Id(dev, name + ".m_Id", 0.0) + , m_G(dev, name + ".m_G", 1e-15) + , m_Vt(0.0) + , m_Vmin(0.0) // not used in MOS model + , m_Is(0.0) + , m_logIs(0.0) + , m_n(0.0) + , m_gmin(1e-15) + , m_VtInv(0.0) + , m_Vcrit(0.0) + { + set_param(1e-15, 1, 1e-15, 300.0); + } - void update_diode(const double nVd); + void update_diode(const double nVd) + { + if (TYPE == diode_e::BIPOLAR && nVd < m_Vmin) + { + m_Vd = nVd; + m_G = m_gmin; + m_Id = - m_Is; + } + else if (TYPE == diode_e::MOS && nVd < constants::zero()) + { + m_Vd = nVd; + m_G = m_Is * m_VtInv + m_gmin; + m_Id = m_G * m_Vd; + } + // FIXME: For MOS, stop here, the critical code path will not converge + else if (TYPE == diode_e::MOS || nVd < m_Vcrit) + { + m_Vd = nVd; + const double IseVDVt = std::exp(std::min(300.0, m_logIs + m_Vd * m_VtInv)); + m_Id = IseVDVt - m_Is; + m_G = IseVDVt * m_VtInv + m_gmin; + } + else + { + const double a = std::max((nVd - m_Vd) * m_VtInv, constants::cast(-0.99)); + m_Vd = m_Vd + std::log1p(a) * m_Vt; + //const double IseVDVt = m_Is * std::exp(m_Vd * m_VtInv); + const double IseVDVt = std::exp(m_logIs + m_Vd * m_VtInv); + m_Id = IseVDVt - m_Is; + m_G = IseVDVt * m_VtInv + m_gmin; + } + } + + + void set_param(const double Is, const double n, double gmin, double temp) + { + static constexpr double csqrt2 = 1.414213562373095048801688724209; //std::sqrt(2.0); + m_Is = Is; + m_logIs = std::log(Is); + m_n = n; + m_gmin = gmin; + + m_Vt = m_n * temp * constants::k_b() / constants::Q_e(); + + m_Vmin = -5.0 * m_Vt; + + m_Vcrit = m_Vt * std::log(m_Vt / m_Is / csqrt2); + m_VtInv = 1.0 / m_Vt; + } - void set_param(const double Is, const double n, double gmin); double I() const { return m_Id; } double G() const { return m_G; } @@ -391,7 +607,7 @@ protected: private: diode_model_t m_model; - generic_diode m_D; + generic_diode<diode_e::BIPOLAR> m_D; }; diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index ea034440b5e..6179a0e5932 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -28,7 +28,7 @@ space := space += TIDY_FLAGS = $(subst $(space),,$(TIDY_FLAGSX)) -#TIDY_FLAGS = -checks=llvm-include-order,llvm-namespace-comment,modernize-use-override,modernize-use-using -fix +TIDY_FLAGS = -checks=llvm-include-order,llvm-namespace-comment,modernize-use-override,modernize-use-using -fix #TIDY_FLAGS = -checks=llvm-include-order -fix #TIDY_FLAGS = -checks=llvm-namespace-comment -fix #TIDY_FLAGS = -checks=modernize-use-override -fix @@ -94,6 +94,7 @@ NLOBJS := \ $(NLOBJ)/nl_setup.o \ $(NLOBJ)/nl_factory.o \ $(NLOBJ)/analog/nld_bjt.o \ + $(NLOBJ)/analog/nld_mosfet.o \ $(NLOBJ)/analog/nlid_fourterm.o \ $(NLOBJ)/analog/nld_switches.o \ $(NLOBJ)/analog/nlid_twoterm.o \ @@ -229,6 +230,9 @@ maketree: $(sort $(OBJDIRS)) native: $(MAKE) CEXTRAFLAGS="-march=native -msse4.2 -Wall -Wpedantic -Wsign-compare -Wextra " +gcc5: + $(MAKE) CC=g++-5 LD=g++-5 CEXTRAFLAGS="-march=native -msse4.2 -Wall -Wpedantic -Wsign-compare -Wextra " + clang: $(MAKE) CC=clang++-9 LD=clang++-9 CEXTRAFLAGS="-march=native -Weverything -Werror -Wno-padded -Wno-weak-vtables -Wno-unused-template -Wno-missing-variable-declarations -Wno-float-equal -Wconversion -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-exit-time-destructors" diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index 06778d49ec5..c0353f2489a 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -45,6 +45,7 @@ namespace devices LIB_ENTRY(function) // only for macro devices - NO FEEDBACK loops LIB_ENTRY(QBJT_EB) LIB_ENTRY(QBJT_switch) + LIB_ENTRY(MOSFET) LIB_ENTRY(logic_input_ttl) LIB_ENTRY(logic_input) LIB_ENTRY(analog_input) diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 6cc6749eee6..abf58ccee16 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -92,6 +92,7 @@ #include "netlist/analog/nld_bjt.h" #include "netlist/analog/nld_fourterm.h" +#include "netlist/analog/nld_mosfet.h" #include "netlist/analog/nld_opamps.h" #include "netlist/analog/nld_switches.h" #include "netlist/analog/nld_twoterm.h" diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp index a2fd18e85a7..e40d3506cff 100644 --- a/src/lib/netlist/devices/nlid_proxy.cpp +++ b/src/lib/netlist/devices/nlid_proxy.cpp @@ -58,9 +58,9 @@ namespace netlist if (supply_V == 0.0) supply_V = 5.0; if (m_I.Q_Analog() > logic_family()->high_thresh_V(0.0, supply_V)) - out().push(1, NLTIME_FROM_NS(1)); + out().push(1, netlist_time::quantum()); else if (m_I.Q_Analog() < logic_family()->low_thresh_V(0.0, supply_V)) - out().push(0, NLTIME_FROM_NS(1)); + out().push(0, netlist_time::quantum()); else { // do nothing diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp index 86f5a2f941c..2e4542de4b6 100644 --- a/src/lib/netlist/macro/nlm_base.cpp +++ b/src/lib/netlist/macro/nlm_base.cpp @@ -31,9 +31,16 @@ NETLIST_END() * BJT Models * ---------------------------------------------------------------------------*/ +static NETLIST_START(mosfet_models) + //NET_MODEL("NMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=2E-5 UO=600 PHI=0.6 LD=0.0 L=1.0 TOX=1E-7 W=1.0 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0)") + //NET_MODEL("PMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=2E-5 UO=600 PHI=0.6 LD=0.0 L=1.0 TOX=1E-7 W=1.0 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0)") + NET_MODEL("NMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=0.0 UO=600 PHI=0.0 LD=0.0 L=100e-6 TOX=1E-7 W=100e-6 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0 CGSO=0 CGDO=0 CGBO=0)") + NET_MODEL("PMOS _(VTO=0.0 N=1.0 IS=1E-14 KP=0.0 UO=600 PHI=0.0 LD=0.0 L=100e-6 TOX=1E-7 W=100e-6 NSUB=0.0 GAMMA=0.0 RD=0.0 RS=0.0 LAMBDA=0.0 CGSO=0 CGDO=0 CGBO=0)") +NETLIST_END() + static NETLIST_START(bjt_models) - NET_MODEL("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)") - NET_MODEL("PNP _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)") + NET_MODEL("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1 CJE=0 CJC=0)") + NET_MODEL("PNP _(IS=1e-15 BF=100 NF=1 BR=1 NR=1 CJE=0 CJC=0)") NET_MODEL("2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)") NET_MODEL("2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)") @@ -81,7 +88,9 @@ NETLIST_START(base) LOCAL_SOURCE(diode_models) LOCAL_SOURCE(bjt_models) + LOCAL_SOURCE(mosfet_models) LOCAL_SOURCE(family_models) + LOCAL_SOURCE(TTL74XX_lib) LOCAL_SOURCE(CD4XXX_lib) LOCAL_SOURCE(OPAMP_lib) @@ -89,6 +98,7 @@ NETLIST_START(base) INCLUDE(diode_models) INCLUDE(bjt_models) + INCLUDE(mosfet_models) INCLUDE(family_models) INCLUDE(TTL74XX_lib) INCLUDE(CD4XXX_lib) diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 166703c25af..ad048e899bf 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -988,12 +988,9 @@ pstring param_t::get_initial(const device_t &dev, bool *found) return res; } - const pstring param_model_t::model_type() { - if (m_map.size() == 0) - state().setup().model_parse(this->Value(), m_map); - return m_map["COREMODEL"]; + return state().setup().models().model_type(value()); } param_str_t::param_str_t(device_t &device, const pstring &name, const pstring &val) @@ -1016,27 +1013,22 @@ param_ptr_t::param_ptr_t(device_t &device, const pstring &name, uint8_t * val) void param_model_t::changed() { state().log().fatal(MF_1_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME, name()); - m_map.clear(); } const pstring param_model_t::model_value_str(const pstring &entity) { - if (m_map.size() == 0) - state().setup().model_parse(this->Value(), m_map); - return state().setup().model_value_str(m_map, entity); + return state().setup().models().model_value_str(value(), entity); } nl_double param_model_t::model_value(const pstring &entity) { - if (m_map.size() == 0) - state().setup().model_parse(this->Value(), m_map); - return state().setup().model_value(m_map, entity); + return state().setup().models().model_value(value(), entity); } plib::unique_ptr<plib::pistream> param_data_t::stream() { - return device().setup().get_data_stream(Value()); + return device().setup().get_data_stream(value()); } bool detail::core_terminal_t::is_logic() const NL_NOEXCEPT diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 323f2fa7a0b..c1f07a55af2 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -162,7 +162,7 @@ class NETLIB_NAME(name) : public device_t #define nl_assert(x) do { if (0) if (!(x)) { /*throw nl_exception(plib::pfmt("assert: {1}:{2}: {3}")(__FILE__)(__LINE__)(#x) ); */} } while (0) #define NL_NOEXCEPT noexcept #endif -#define nl_assert_always(x, msg) do { if (!(x)) throw nl_exception(plib::pfmt("Fatal error: {1}\nCaused by assert: {2}:{3}: {4}")(msg)(__FILE__)(__LINE__)(#x)); } while (0) +#define nl_assert_always(x, msg) do { if (!(x)) throw nl_exception("Fatal error: {1}\nCaused by assert: {2}:{3}: {4}", msg, __FILE__, __LINE__, #x); } while (0) //============================================================ // Namespace starts @@ -223,6 +223,12 @@ namespace netlist explicit nl_exception(const pstring &text //!< text to be passed ) : plib::pexception(text) { } + + template<typename... Args> + explicit nl_exception(const pstring &fmt //!< format to be used + , Args&&... args //!< arguments to be passed + ) + : plib::pexception(plib::pfmt(fmt)(std::forward<Args>(args)...)) { } }; /*! Logic families descriptors are used to create proxy devices. @@ -1004,7 +1010,7 @@ namespace netlist public: param_str_t(device_t &device, const pstring &name, const pstring &val); - const pstring &operator()() const NL_NOEXCEPT { return Value(); } + const pstring &operator()() const NL_NOEXCEPT { return value(); } void setTo(const pstring ¶m) NL_NOEXCEPT { if (m_param != param) @@ -1016,8 +1022,9 @@ namespace netlist } protected: virtual void changed(); - const pstring &Value() const NL_NOEXCEPT { return m_param; } + const pstring &value() const NL_NOEXCEPT { return m_param; } private: + PALIGNAS_CACHELINE() pstring m_param; }; @@ -1036,8 +1043,8 @@ namespace netlist : m_value(param.model_value(name)) { } - const double &operator()() const noexcept { return m_value; } - operator const double&() const noexcept { return m_value; } + double operator()() const noexcept { return m_value; } + operator double() const noexcept { return m_value; } private: const double m_value; }; @@ -1055,7 +1062,6 @@ namespace netlist void changed() override; nl_double model_value(const pstring &entity) /*const*/; private: - detail::model_map_t m_map; }; // ----------------------------------------------------------------------------- @@ -1086,7 +1092,7 @@ namespace netlist param_rom_t(device_t &device, const pstring &name); - const ST & operator[] (std::size_t n) NL_NOEXCEPT { return m_data[n]; } + ST operator[] (std::size_t n) const NL_NOEXCEPT { return m_data[n]; } protected: void changed() override { @@ -1189,10 +1195,9 @@ namespace netlist const setup_t &setup() const; template<class C, typename... Args> - void register_sub(const pstring &name, pool_owned_ptr<C> &dev, const Args&... args) + void create_and_register_subdevice(const pstring &name, pool_owned_ptr<C> &dev, Args&&... args) { - //dev.reset(plib::palloc<C>(*this, name, args...)); - dev = pool().make_poolptr<C>(*this, name, args...); + dev = pool().make_poolptr<C>(*this, name, std::forward<Args>(args)...); } void register_subalias(const pstring &name, detail::core_terminal_t &term); @@ -1396,7 +1401,7 @@ namespace netlist void reset(); pstring m_name; - netlist_t &m_netlist; + netlist_t &m_netlist; plib::unique_ptr<plib::dynlib> m_lib; // external lib needs to be loaded as long as netlist exists plib::state_manager_t m_state; plib::unique_ptr<callbacks_t> m_callbacks; @@ -1553,7 +1558,7 @@ namespace netlist if (f != nullptr) f->read(reinterpret_cast<plib::pistream::value_type *>(&m_data[0]),1<<AW); else - device.state().log().warning("Rom {1} not found", Value()); + device.state().log().warning("Rom {1} not found", value()); } inline void logic_input_t::inactivate() NL_NOEXCEPT @@ -1705,7 +1710,7 @@ namespace netlist if (newQ != m_my_net.Q_Analog()) { m_my_net.set_Q_Analog(newQ); - m_my_net.toggle_and_push_to_queue(NLTIME_FROM_NS(1)); + m_my_net.toggle_and_push_to_queue(netlist_time::quantum()); } } diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h index faa5008ff56..98ca0e27370 100644 --- a/src/lib/netlist/nl_config.h +++ b/src/lib/netlist/nl_config.h @@ -89,6 +89,7 @@ // Use nano-second resolution - Sufficient for now static constexpr const auto NETLIST_INTERNAL_RES = 1000000000; +//static constexpr const auto NETLIST_INTERNAL_RES = 1000000000000; static constexpr const auto NETLIST_CLOCK = NETLIST_INTERNAL_RES; //#define NETLIST_INTERNAL_RES (UINT64_C(1000000000)) diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index a2f9dece076..3ae73b50f6f 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -32,17 +32,6 @@ namespace netlist , m_frontier_cnt(0) { } - void nlparse_t::register_model(const pstring &model_in) - { - auto pos = model_in.find(" "); - if (pos == pstring::npos) - log().fatal(MF_1_UNABLE_TO_PARSE_MODEL_1, model_in); - pstring model = plib::ucase(plib::trim(plib::left(model_in, pos))); - pstring def = plib::trim(model_in.substr(pos + 1)); - if (!m_models.insert({model, def}).second) - log().fatal(MF_1_MODEL_ALREADY_EXISTS_1, model_in); - } - void nlparse_t::register_alias(const pstring &alias, const pstring &out) { pstring alias_fqn = build_fqn(alias); @@ -748,6 +737,7 @@ void setup_t::resolve_inputs() detail::core_terminal_t *t1 = find_terminal(t1s); detail::core_terminal_t *t2 = find_terminal(t2s); + //printf("%s %s\n", t1s.c_str(), t2s.c_str()); if (connect(*t1, *t2)) li = m_links.erase(li); else @@ -818,19 +808,21 @@ const log_type &setup_t::log() const // ---------------------------------------------------------------------------------------- -// Model +// Models // ---------------------------------------------------------------------------------------- -static pstring model_string(detail::model_map_t &map) +void models_t::register_model(pstring model_in) { - pstring ret = map["COREMODEL"] + "("; - for (auto & i : map) - ret = ret + i.first + "=" + i.second + " "; - - return ret + ")"; + auto pos = model_in.find(" "); + if (pos == pstring::npos) + throw nl_exception(MF_1_UNABLE_TO_PARSE_MODEL_1, model_in); + pstring model = plib::ucase(plib::trim(plib::left(model_in, pos))); + pstring def = plib::trim(model_in.substr(pos + 1)); + if (!m_models.insert({model, def}).second) + throw nl_exception(MF_1_MODEL_ALREADY_EXISTS_1, model_in); } -void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map) +void models_t::model_parse(const pstring &model_in, model_map_t &map) { pstring model = model_in; std::size_t pos = 0; @@ -844,7 +836,7 @@ void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map) key = plib::ucase(model); auto i = m_models.find(key); if (i == m_models.end()) - log().fatal(MF_1_MODEL_NOT_FOUND, model); + throw nl_exception(MF_1_MODEL_NOT_FOUND, model); model = i->second; } pstring xmodel = plib::left(model, pos); @@ -857,12 +849,12 @@ void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map) if (i != m_models.end()) model_parse(xmodel, map); else - log().fatal(MF_1_MODEL_NOT_FOUND, model_in); + throw nl_exception(MF_1_MODEL_NOT_FOUND, model_in); } pstring remainder = plib::trim(model.substr(pos + 1)); if (!plib::endsWith(remainder, ")")) - log().fatal(MF_1_MODEL_ERROR_1, model); + throw nl_exception(MF_1_MODEL_ERROR_1, model); // FIMXE: Not optimal remainder = plib::left(remainder, remainder.size() - 1); @@ -871,29 +863,48 @@ void setup_t::model_parse(const pstring &model_in, detail::model_map_t &map) { auto pose = pe.find("="); if (pose == pstring::npos) - log().fatal(MF_1_MODEL_ERROR_ON_PAIR_1, model); + throw nl_exception(MF_1_MODEL_ERROR_ON_PAIR_1, model); map[plib::ucase(plib::left(pe, pose))] = pe.substr(pose + 1); } } -const pstring setup_t::model_value_str(detail::model_map_t &map, const pstring &entity) +pstring models_t::model_string(model_map_t &map) +{ + pstring ret = map["COREMODEL"] + "("; + for (auto & i : map) + ret = ret + i.first + "=" + i.second + " "; + + return ret + ")"; +} + +pstring models_t::model_value_str(pstring model, pstring entity) { + model_map_t &map = m_cache[model]; + + if (map.size() == 0) + model_parse(model , map); + pstring ret; if (entity != plib::ucase(entity)) - log().fatal(MF_2_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, entity, + throw nl_exception(MF_2_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, entity, model_string(map)); if (map.find(entity) == map.end()) - log().fatal(MF_2_ENTITY_1_NOT_FOUND_IN_MODEL_2, entity, model_string(map)); + throw nl_exception(MF_2_ENTITY_1_NOT_FOUND_IN_MODEL_2, entity, model_string(map)); else ret = map[entity]; return ret; } -nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity) +nl_double models_t::model_value(pstring model, pstring entity) { - pstring tmp = model_value_str(map, entity); + model_map_t &map = m_cache[model]; + + if (map.size() == 0) + model_parse(model , map); + + pstring tmp = model_value_str(model, entity); nl_double factor = plib::constants<nl_double>::one(); auto p = std::next(tmp.begin(), static_cast<pstring::difference_type>(tmp.size() - 1)); @@ -909,11 +920,12 @@ nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity) case 'a': factor = 1e-18; break; default: if (*p < '0' || *p > '9') - log().fatal(MF_1_UNKNOWN_NUMBER_FACTOR_IN_1, entity); + throw nl_exception(MF_1_UNKNOWN_NUMBER_FACTOR_IN_1, entity); } if (factor != plib::constants<nl_double>::one()) tmp = plib::left(tmp, tmp.size() - 1); // FIXME: check for errors + //printf("%s %s %e %e\n", entity.c_str(), tmp.c_str(), plib::pstonum<nl_double>(tmp), factor); return plib::pstonum<nl_double>(tmp) * factor; } @@ -939,12 +951,10 @@ pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_ const logic_family_desc_t *setup_t::family_from_model(const pstring &model) { - detail::model_map_t map; - model_parse(model, map); - if (model_value_str(map, "TYPE") == "TTL") + if (m_models.model_value_str(model, "TYPE") == "TTL") return family_TTL(); - if (model_value_str(map, "TYPE") == "CD4XXX") + if (m_models.model_value_str(model, "TYPE") == "CD4XXX") return family_CD4XXX(); for (auto & e : m_nlstate.m_family_cache) @@ -953,13 +963,13 @@ const logic_family_desc_t *setup_t::family_from_model(const pstring &model) auto ret = plib::make_unique<logic_family_std_proxy_t>(); - ret->m_fixed_V = model_value(map, "FV"); - ret->m_low_thresh_PCNT = model_value(map, "IVL"); - ret->m_high_thresh_PCNT = model_value(map, "IVH"); - ret->m_low_VO = model_value(map, "OVL"); - ret->m_high_VO = model_value(map, "OVH"); - ret->m_R_low = model_value(map, "ORL"); - ret->m_R_high = model_value(map, "ORH"); + ret->m_fixed_V = m_models.model_value(model, "FV"); + ret->m_low_thresh_PCNT = m_models.model_value(model, "IVL"); + ret->m_high_thresh_PCNT = m_models.model_value(model, "IVH"); + ret->m_low_VO = m_models.model_value(model, "OVL"); + ret->m_high_VO = m_models. model_value(model, "OVH"); + ret->m_R_low = m_models.model_value(model, "ORL"); + ret->m_R_high = m_models.model_value(model, "ORH"); auto retp = ret.get(); diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 2a6c19fdbc9..ed0248a48e6 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -202,8 +202,35 @@ namespace netlist const type_t m_type; }; + // ---------------------------------------------------------------------------------------- - // setup_t + // Collection of models + // ---------------------------------------------------------------------------------------- + + class models_t + { + public: + void register_model(pstring model_in); + /* model / family related */ + + pstring model_value_str(pstring model, pstring entity); + + double model_value(pstring model, pstring entity); + + pstring model_type(pstring model) { return model_value_str(model, "COREMODEL"); } + + private: + using model_map_t = std::unordered_map<pstring, pstring>; + + void model_parse(const pstring &model, model_map_t &map); + pstring model_string(model_map_t &map); + + std::unordered_map<pstring, pstring> m_models; + std::unordered_map<pstring, model_map_t> m_cache; + }; + + // ---------------------------------------------------------------------------------------- + // nlparse_t // ---------------------------------------------------------------------------------------- class nlparse_t @@ -213,7 +240,7 @@ namespace netlist nlparse_t(setup_t &netlist, log_type &log); - void register_model(const pstring &model_in); + void register_model(const pstring &model_in) { m_models.register_model(model_in); } void register_alias(const pstring &alias, const pstring &out); void register_dippins_arr(const pstring &terms); void register_dev(const pstring &classname, const pstring &name); @@ -240,7 +267,6 @@ namespace netlist /* include other files */ void include(const pstring &netlist_name); - /* parse a source */ pstring build_fqn(const pstring &obj_name) const; void register_alias_nofqn(const pstring &alias, const pstring &out); @@ -276,8 +302,12 @@ namespace netlist */ setup_t &setup() { return m_setup; } const setup_t &setup() const { return m_setup; } + + models_t &models() { return m_models; } + const models_t &models() const { return m_models; } + protected: - std::unordered_map<pstring, pstring> m_models; + models_t m_models; std::stack<pstring> m_namespace_stack; std::unordered_map<pstring, pstring> m_alias; std::vector<link_t> m_links; @@ -299,6 +329,10 @@ namespace netlist unsigned m_frontier_cnt; }; + // ---------------------------------------------------------------------------------------- + // setup_t + // ---------------------------------------------------------------------------------------- + class setup_t : public nlparse_t { public: @@ -323,24 +357,17 @@ namespace netlist param_t *find_param(const pstring ¶m_in, bool required = true) const; + /* get family */ + const logic_family_desc_t *family_from_model(const pstring &model); + void register_dynamic_log_devices(); void resolve_inputs(); plib::unique_ptr<plib::pistream> get_data_stream(const pstring &name); - factory::list_t &factory() { return m_factory; } const factory::list_t &factory() const { return m_factory; } - /* model / family related */ - - const pstring model_value_str(detail::model_map_t &map, const pstring &entity); - double model_value(detail::model_map_t &map, const pstring &entity); - - void model_parse(const pstring &model, detail::model_map_t &map); - - const logic_family_desc_t *family_from_model(const pstring &model); - /* helper - also used by nltool */ const pstring resolve_alias(const pstring &name) const; diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h index 9abe8beebef..7d7582774b1 100644 --- a/src/lib/netlist/nltypes.h +++ b/src/lib/netlist/nltypes.h @@ -20,12 +20,20 @@ #include "plib/pstate.h" #include "plib/pstring.h" #include "plib/ptime.h" +#include "plib/putil.h" #include <cstdint> #include <unordered_map> namespace netlist { + /*! @brief plib::constants struct specialized for nl_double + * + * This may be any of bool, uint8_t, uint16_t, uin32_t and uint64_t. + * The choice has little to no impact on performance. + */ + using constants = plib::constants<nl_double>; + /*! @brief netlist_sig_t is the type used for logic signals. * * This may be any of bool, uint8_t, uint16_t, uin32_t and uint64_t. @@ -108,11 +116,6 @@ namespace netlist OUTPUT = 2, /*!< object is an output */ }; - /*! Type of the model map used. - * This is used to hold all #Models in an unordered map - */ - using model_map_t = std::unordered_map<pstring, pstring>; - } // namespace detail #if (PHAS_INT128) diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h index 830ce3ec525..15fede3a99b 100644 --- a/src/lib/netlist/plib/palloc.h +++ b/src/lib/netlist/plib/palloc.h @@ -15,9 +15,9 @@ #include <cstddef> #include <cstdlib> #include <memory> +#include <type_traits> #include <utility> #include <vector> -#include <type_traits> #if defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER) #include <malloc.h> @@ -147,6 +147,12 @@ namespace plib { m_is_owned = false; m_ptr = nullptr; } + + /** + * \brief Return @c true if the stored pointer is not null. + */ + explicit operator bool() const noexcept { return m_ptr != nullptr; } + pointer release() { pointer tmp = m_ptr; diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h index 4d13fa3424b..cb9b59c01ce 100644 --- a/src/lib/netlist/plib/pfmtlog.h +++ b/src/lib/netlist/plib/pfmtlog.h @@ -191,6 +191,12 @@ public: return format_element(ptype_traits<T *>::size_spec(), ptype_traits<T *>::fmt_spec(), ptype_traits<T *>::cast(x)); } + template<typename X, typename Y, typename... Args> + pfmt &operator()(X&& x, Y && y, Args&&... args) + { + return ((*this)(std::forward<X>(x)))(std::forward<Y>(y), std::forward<Args>(args)...); + } + template<typename T> pfmt &x(const T &x) { diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp index 83d6f9f5e29..5e1a231da81 100644 --- a/src/lib/netlist/plib/pparser.cpp +++ b/src/lib/netlist/plib/pparser.cpp @@ -285,9 +285,9 @@ ppreprocessor::ppreprocessor(defines_map_type *defines) m_expr_sep.emplace_back(" "); m_expr_sep.emplace_back("\t"); - m_defines.insert({"__PLIB_PREPROCESSOR__", define_t("__PLIB_PREPROCESSOR__", "1")}); if (defines != nullptr) m_defines = *defines; + m_defines.insert({"__PLIB_PREPROCESSOR__", define_t("__PLIB_PREPROCESSOR__", "1")}); } void ppreprocessor::error(const pstring &err) diff --git a/src/lib/netlist/plib/ptime.h b/src/lib/netlist/plib/ptime.h index 32ccc4f7b0d..250e1b8f683 100644 --- a/src/lib/netlist/plib/ptime.h +++ b/src/lib/netlist/plib/ptime.h @@ -112,7 +112,7 @@ namespace plib static constexpr ptime from_sec(const internal_type s) noexcept { return ptime(s, UINT64_C( 1)); } static constexpr ptime from_hz(const internal_type hz) noexcept { return ptime(1 , hz); } static constexpr ptime from_raw(const internal_type raw) noexcept { return ptime(raw); } - static constexpr ptime from_double(const double t) noexcept { return ptime(static_cast<internal_type>( t * static_cast<double>(RES)), RES); } + static constexpr ptime from_double(const double t) noexcept { return ptime(static_cast<internal_type>(t * static_cast<double>(RES) + 0.5), RES); } static constexpr ptime zero() noexcept { return ptime(0, RES); } static constexpr ptime quantum() noexcept { return ptime(1, RES); } diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h index 0db2ae28ffb..e8145361d9d 100644 --- a/src/lib/netlist/plib/putil.h +++ b/src/lib/netlist/plib/putil.h @@ -66,6 +66,35 @@ namespace plib static constexpr T one() noexcept { return static_cast<T>(1); } static constexpr T two() noexcept { return static_cast<T>(2); } + /*! + * \brief Electric constant of vacuum + */ + static constexpr T eps_0() noexcept { return static_cast<T>(8.854187817e-12); } + /*! + * \brief Relative permittivity of Silicon dioxide + */ + static constexpr T eps_SiO2() noexcept { return static_cast<T>(3.9); } + /*! + * \brief Relative permittivity of Silicon + */ + static constexpr T eps_Si() noexcept { return static_cast<T>(11.7); } + /*! + * \brief Boltzmann constant + */ + static constexpr T k_b() noexcept { return static_cast<T>(1.38064852e-23); } + /*! + * \brief room temperature (gives VT = 0.02585 at T=300) + */ + static constexpr T T0() noexcept { return static_cast<T>(300); } + /*! + * \brief Elementary charge + */ + static constexpr T Q_e() noexcept { return static_cast<T>(1.6021765314e-19); } + /*! + * \brief Intrinsic carrier concentration in 1/m^3 of Silicon + */ + static constexpr T NiSi() noexcept { return static_cast<T>(1.45e16); } + template <typename V> static constexpr const T cast(V &&v) noexcept { return static_cast<T>(v); } }; diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp index 1fe14b0f5e1..0a7bf5ef3c3 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.cpp +++ b/src/lib/netlist/solver/nld_matrix_solver.cpp @@ -19,7 +19,7 @@ namespace devices : m_railstart(0) , m_last_V(0.0) , m_DD_n_m_1(0.0) - , m_h_n_m_1(1e-9) + , m_h_n_m_1(1e-12) { } diff --git a/src/lib/netlist/solver/nld_ms_direct2.h b/src/lib/netlist/solver/nld_ms_direct2.h index 1e7103f8672..01f77c3bc3c 100644 --- a/src/lib/netlist/solver/nld_ms_direct2.h +++ b/src/lib/netlist/solver/nld_ms_direct2.h @@ -44,6 +44,7 @@ namespace devices const float_type v0 = (this->RHS(0) - b * v1) / a; std::array<float_type, 2> new_V = {v0, v1}; + this->m_stat_calculations++; const float_type err = (newton_raphson ? this->delta(new_V) : 0.0); this->store(new_V); return (err > this->m_params.m_accuracy) ? 2 : 1; diff --git a/src/lib/netlist/solver/nld_solver.h b/src/lib/netlist/solver/nld_solver.h index c9ec967a72a..3580ca94996 100644 --- a/src/lib/netlist/solver/nld_solver.h +++ b/src/lib/netlist/solver/nld_solver.h @@ -48,7 +48,7 @@ namespace devices , m_gmin(*this, "GMIN", 1e-9) , m_pivot(*this, "PIVOT", false) // use pivoting - on supported solvers , m_nr_loops(*this, "NR_LOOPS", 250) // Newton-Raphson loops - , m_nr_recalc_delay(*this, "NR_RECALC_DELAY", NLTIME_FROM_NS(10).as_double()) // Delay to next solve attempt if nr loops exceeded + , m_nr_recalc_delay(*this, "NR_RECALC_DELAY", netlist_time::quantum().as_double()) // Delay to next solve attempt if nr loops exceeded , m_parallel(*this, "PARALLEL", 0) /* automatic time step */ diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt index 233d50a5f1d..5f490afbb11 100644 --- a/src/mame/arcade.flt +++ b/src/mame/arcade.flt @@ -1307,6 +1307,7 @@ unianapc.cpp unico.cpp unkfr.cpp unkhorse.cpp +unkpoker.cpp upscope.cpp usbilliards.cpp usgames.cpp diff --git a/src/mame/audio/aztarac.cpp b/src/mame/audio/aztarac.cpp index 74a1b32bcdc..24d0a930fd3 100644 --- a/src/mame/audio/aztarac.cpp +++ b/src/mame/audio/aztarac.cpp @@ -21,7 +21,7 @@ WRITE16_MEMBER(aztarac_state::sound_w) if (ACCESSING_BITS_0_7) { data &= 0xff; - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_sound_status ^= 0x21; if (m_sound_status & 0x20) m_audiocpu->set_input_line(0, HOLD_LINE); @@ -32,7 +32,7 @@ READ8_MEMBER(aztarac_state::snd_command_r) { m_sound_status |= 0x01; m_sound_status &= ~0x20; - return m_soundlatch->read(space,offset); + return m_soundlatch->read(); } READ8_MEMBER(aztarac_state::snd_status_r) diff --git a/src/mame/audio/cage.cpp b/src/mame/audio/cage.cpp index 71be3313f6a..9a3a3bec780 100644 --- a/src/mame/audio/cage.cpp +++ b/src/mame/audio/cage.cpp @@ -469,7 +469,7 @@ WRITE32_MEMBER( atari_cage_device::cage_to_main_w ) { if (LOG_COMM) logerror("%s Data from CAGE = %04X\n", machine().describe_context(), data); - m_soundlatch->write(space, 0, data, mem_mask); + m_soundlatch->write(data); m_cage_to_cpu_ready = 1; update_control_lines(); } @@ -489,10 +489,10 @@ READ32_MEMBER( atari_cage_device::cage_io_status_r ) uint16_t atari_cage_device::main_r() { if (LOG_COMM) - logerror("%s:main read data = %04X\n", machine().describe_context(), m_soundlatch->read(machine().dummy_space(), 0, 0)); + logerror("%s:main read data = %04X\n", machine().describe_context(), m_soundlatch->read()); m_cage_to_cpu_ready = 0; update_control_lines(); - return m_soundlatch->read(machine().dummy_space(), 0, 0xffff); + return m_soundlatch->read(); } diff --git a/src/mame/audio/cchasm.cpp b/src/mame/audio/cchasm.cpp index f72a19ac0e5..6ca1bbf1240 100644 --- a/src/mame/audio/cchasm.cpp +++ b/src/mame/audio/cchasm.cpp @@ -41,13 +41,13 @@ READ8_MEMBER(cchasm_state::soundlatch2_r) { m_sound_flags &= ~0x80; m_ctc->trg2(0); - return m_soundlatch2->read(space, offset); + return m_soundlatch2->read(); } WRITE8_MEMBER(cchasm_state::soundlatch4_w) { m_sound_flags |= 0x40; - m_soundlatch4->write(space, offset, data); + m_soundlatch4->write(data); m_maincpu->set_input_line(1, HOLD_LINE); } @@ -61,11 +61,11 @@ WRITE16_MEMBER(cchasm_state::io_w) switch (offset & 0xf) { case 0: - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); break; case 1: m_sound_flags |= 0x80; - m_soundlatch2->write(space, offset, data); + m_soundlatch2->write(data); m_ctc->trg2(1); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); break; @@ -81,10 +81,10 @@ READ16_MEMBER(cchasm_state::io_r) switch (offset & 0xf) { case 0x0: - return m_soundlatch3->read(space, offset) << 8; + return m_soundlatch3->read() << 8; case 0x1: m_sound_flags &= ~0x40; - return m_soundlatch4->read(space,offset) << 8; + return m_soundlatch4->read() << 8; case 0x2: return (m_sound_flags| (ioport("IN3")->read() & 0x07) | 0x08) << 8; case 0x5: diff --git a/src/mame/audio/efo_zsu.cpp b/src/mame/audio/efo_zsu.cpp index 785cb67a3a2..4c731aad393 100644 --- a/src/mame/audio/efo_zsu.cpp +++ b/src/mame/audio/efo_zsu.cpp @@ -78,7 +78,7 @@ cedar_magnet_sound_device::cedar_magnet_sound_device(const machine_config &mconf WRITE8_MEMBER(efo_zsu_device::sound_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); } diff --git a/src/mame/audio/hyprolyb.cpp b/src/mame/audio/hyprolyb.cpp index e4a3c024219..6f52a35727b 100644 --- a/src/mame/audio/hyprolyb.cpp +++ b/src/mame/audio/hyprolyb.cpp @@ -43,7 +43,7 @@ void hyprolyb_adpcm_device::device_reset() WRITE8_MEMBER( hyprolyb_adpcm_device::write ) { - m_soundlatch2->write(m_audiocpu->space(AS_PROGRAM), offset, data); + m_soundlatch2->write(data); m_adpcm_ready = 0x80; } @@ -73,7 +73,7 @@ READ8_MEMBER( hyprolyb_adpcm_device::ready_r ) READ8_MEMBER( hyprolyb_adpcm_device::data_r ) { m_adpcm_ready = 0x00; - return m_soundlatch2->read(m_audiocpu->space(AS_PROGRAM), offset); + return m_soundlatch2->read(); } void hyprolyb_adpcm_device::vck_callback( int st ) diff --git a/src/mame/audio/leland.cpp b/src/mame/audio/leland.cpp index 3d44fd2a539..c27e2871bdf 100644 --- a/src/mame/audio/leland.cpp +++ b/src/mame/audio/leland.cpp @@ -550,7 +550,7 @@ WRITE8_MEMBER( leland_80186_sound_device::leland_80186_command_lo_w ) { if (LOG_COMM) logerror("%s:Write sound command latch lo = %02X\n", machine().describe_context(), data); m_sound_command = (m_sound_command & 0xff00) | data; - m_soundlatch->write(space, offset, m_sound_command); + m_soundlatch->write(m_sound_command); } @@ -558,7 +558,7 @@ WRITE8_MEMBER( leland_80186_sound_device::leland_80186_command_hi_w ) { if (LOG_COMM) logerror("%s:Write sound command latch hi = %02X\n", machine().describe_context(), data); m_sound_command = (m_sound_command & 0x00ff) | (data << 8); - m_soundlatch->write(space, offset, m_sound_command); + m_soundlatch->write(m_sound_command); } @@ -730,8 +730,8 @@ READ16_MEMBER( leland_80186_sound_device::peripheral_r ) return ((m_clock_active << 1) & 0x7e); case 1: - if (LOG_COMM) logerror("%s:Read sound command latch = %02X\n", machine().describe_context(), m_soundlatch->read(space, offset)); - return m_soundlatch->read(space, offset); + if (LOG_COMM) logerror("%s:Read sound command latch = %02X\n", machine().describe_context(), m_soundlatch->read()); + return m_soundlatch->read(); case 2: if (ACCESSING_BITS_0_7) diff --git a/src/mame/audio/mario.cpp b/src/mame/audio/mario.cpp index f9b912e8305..94fa3f3da1e 100644 --- a/src/mame/audio/mario.cpp +++ b/src/mame/audio/mario.cpp @@ -25,21 +25,21 @@ #define ACTIVELOW_PORT_BIT(P,A,D) ((P & (~(1 << A))) | ((D ^ 1) << A)) #define ACTIVEHIGH_PORT_BIT(P,A,D) ((P & (~(1 << A))) | (D << A)) -#define I8035_T_R(M,N) ((m_soundlatch2->read(M,0) >> (N)) & 1) -#define I8035_T_W_AH(M,N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(M, 0, m_portT); } while (0) +#define I8035_T_R(N) ((m_soundlatch2->read() >> (N)) & 1) +#define I8035_T_W_AH(N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(m_portT); } while (0) -#define I8035_P1_R(M) (m_soundlatch3->read(M,0)) -#define I8035_P2_R(M) (m_soundlatch4->read(M,0)) -#define I8035_P1_W(M,D) m_soundlatch3->write(M,0,D) +#define I8035_P1_R() (m_soundlatch3->read()) +#define I8035_P2_R() (m_soundlatch4->read()) +#define I8035_P1_W(D) m_soundlatch3->write(D) #if (USE_8039) -#define I8035_P2_W(M,D) do { m_soundlatch4->write(M,0,D); } while (0) +#define I8035_P2_W(D) do { m_soundlatch4->write(D); } while (0) #else -#define I8035_P2_W(M,D) do { set_ea(((D) & 0x20) ? 0 : 1); m_soundlatch4->write(M,0,D); } while (0) +#define I8035_P2_W(D) do { set_ea(((D) & 0x20) ? 0 : 1); m_soundlatch4->write(D); } while (0) #endif -#define I8035_P1_W_AH(M,B,D) I8035_P1_W(M,ACTIVEHIGH_PORT_BIT(I8035_P1_R(M),B,(D))) -#define I8035_P2_W_AH(M,B,D) I8035_P2_W(M,ACTIVEHIGH_PORT_BIT(I8035_P2_R(M),B,(D))) +#define I8035_P1_W_AH(B,D) I8035_P1_W(ACTIVEHIGH_PORT_BIT(I8035_P1_R(),B,(D))) +#define I8035_P2_W_AH(B,D) I8035_P2_W(ACTIVEHIGH_PORT_BIT(I8035_P2_R(),B,(D))) #if OLD_SOUND @@ -446,19 +446,17 @@ void mario_state::sound_start() void mario_state::sound_reset() { - address_space &space = m_audiocpu->space(AS_PROGRAM); - #if USE_8039 set_ea(1); #endif /* FIXME: convert to latch8 */ - m_soundlatch->clear_w(space, 0, 0); - if (m_soundlatch2) m_soundlatch2->clear_w(space, 0, 0); - if (m_soundlatch3) m_soundlatch3->clear_w(space, 0, 0); - if (m_soundlatch4) m_soundlatch4->clear_w(space, 0, 0); - if (m_soundlatch3) I8035_P1_W(space, 0x00); /* Input port */ - if (m_soundlatch4) I8035_P2_W(space, 0xff); /* Port is in high impedance state after reset */ + m_soundlatch->clear_w(); + if (m_soundlatch2) m_soundlatch2->clear_w(); + if (m_soundlatch3) m_soundlatch3->clear_w(); + if (m_soundlatch4) m_soundlatch4->clear_w(); + if (m_soundlatch3) I8035_P1_W(0x00); /* Input port */ + if (m_soundlatch4) I8035_P2_W(0xff); /* Port is in high impedance state after reset */ m_last = 0; } @@ -471,32 +469,32 @@ void mario_state::sound_reset() READ8_MEMBER(mario_state::mario_sh_p1_r) { - return I8035_P1_R(space); + return I8035_P1_R(); } READ8_MEMBER(mario_state::mario_sh_p2_r) { - return I8035_P2_R(space) & 0xEF; /* Bit 4 connected to GND! */ + return I8035_P2_R() & 0xEF; /* Bit 4 connected to GND! */ } READ_LINE_MEMBER(mario_state::mario_sh_t0_r) { - return I8035_T_R(machine().dummy_space(), 0); + return I8035_T_R(0); } READ_LINE_MEMBER(mario_state::mario_sh_t1_r) { - return I8035_T_R(machine().dummy_space(), 1); + return I8035_T_R(1); } READ8_MEMBER(mario_state::mario_sh_tune_r) { uint8_t *SND = memregion("audiocpu")->base(); uint16_t mask = memregion("audiocpu")->bytes()-1; - uint8_t p2 = I8035_P2_R(space); + uint8_t p2 = I8035_P2_R(); if ((p2 >> 7) & 1) - return m_soundlatch->read(space, offset); + return m_soundlatch->read(); else return (SND[(0x1000 + (p2 & 0x0f) * 256 + offset) & mask]); } @@ -512,12 +510,12 @@ WRITE8_MEMBER(mario_state::mario_sh_sound_w) WRITE8_MEMBER(mario_state::mario_sh_p1_w) { - I8035_P1_W(space, data); + I8035_P1_W(data); } WRITE8_MEMBER(mario_state::mario_sh_p2_w) { - I8035_P2_W(space, data); + I8035_P2_W(data); } /**************************************************************** @@ -539,7 +537,7 @@ WRITE8_MEMBER(mario_state::masao_sh_irqtrigger_w) WRITE8_MEMBER(mario_state::mario_sh_tuneselect_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); } /* Sound 0 and 1 are pulsed !*/ @@ -576,22 +574,22 @@ WRITE8_MEMBER(mario_state::mario_sh3_w) m_audiocpu->set_input_line(0,CLEAR_LINE); break; case 1: /* get coin */ - I8035_T_W_AH(space, 0,data & 1); + I8035_T_W_AH(0,data & 1); break; case 2: /* ice */ - I8035_T_W_AH(space, 1, data & 1); + I8035_T_W_AH(1, data & 1); break; case 3: /* crab */ - I8035_P1_W_AH(space, 0, data & 1); + I8035_P1_W_AH(0, data & 1); break; case 4: /* turtle */ - I8035_P1_W_AH(space, 1, data & 1); + I8035_P1_W_AH(1, data & 1); break; case 5: /* fly */ - I8035_P1_W_AH(space, 2, data & 1); + I8035_P1_W_AH(2, data & 1); break; case 6: /* coin */ - I8035_P1_W_AH(space, 3, data & 1); + I8035_P1_W_AH(3, data & 1); break; case 7: /* skid */ #if OLD_SOUND diff --git a/src/mame/audio/nichisnd.cpp b/src/mame/audio/nichisnd.cpp index f6dd3030111..5df8f043dca 100644 --- a/src/mame/audio/nichisnd.cpp +++ b/src/mame/audio/nichisnd.cpp @@ -61,7 +61,7 @@ WRITE8_MEMBER(nichisnd_device::soundbank_w) WRITE8_MEMBER(nichisnd_device::soundlatch_clear_w) { - if (!(data & 0x01)) m_soundlatch->clear_w(space, 0, 0); + if (!(data & 0x01)) m_soundlatch->clear_w(); } @@ -139,5 +139,5 @@ void nichisnd_device::device_reset() // use this to connect to the sound board WRITE8_MEMBER(nichisnd_device::sound_host_command_w) { - m_soundlatch->write(space,0,data); + m_soundlatch->write(data); } diff --git a/src/mame/audio/rax.cpp b/src/mame/audio/rax.cpp index d294628464d..ee023e613a6 100644 --- a/src/mame/audio/rax.cpp +++ b/src/mame/audio/rax.cpp @@ -56,7 +56,7 @@ enum WRITE16_MEMBER( acclaim_rax_device::data_w ) { - m_data_in->write(space, 0, data, 0xffff); + m_data_in->write(data); m_cpu->set_input_line(ADSP2181_IRQL0, ASSERT_LINE); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); } @@ -65,7 +65,7 @@ WRITE16_MEMBER( acclaim_rax_device::data_w ) READ16_MEMBER( acclaim_rax_device::data_r ) { m_adsp_snd_pf0 = 1; - return m_data_out->read(space, 0); + return m_data_out->read(); } @@ -256,12 +256,12 @@ WRITE16_MEMBER( acclaim_rax_device::rom_bank_w ) READ16_MEMBER( acclaim_rax_device::host_r ) { m_cpu->set_input_line(ADSP2181_IRQL0, CLEAR_LINE); - return m_data_in->read(space, 0); + return m_data_in->read(); } WRITE16_MEMBER( acclaim_rax_device::host_w ) { - m_data_out->write(space, 0, data, 0xffff); + m_data_out->write(data); m_adsp_snd_pf0 = 0; } diff --git a/src/mame/audio/redalert.cpp b/src/mame/audio/redalert.cpp index a962dffd207..c6d93755eb8 100644 --- a/src/mame/audio/redalert.cpp +++ b/src/mame/audio/redalert.cpp @@ -66,7 +66,7 @@ WRITE8_MEMBER(redalert_state::redalert_analog_w) WRITE8_MEMBER(redalert_state::redalert_audio_command_w) { /* the byte is connected to port A of the AY8910 */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); /* D7 is also connected to the NMI input of the CPU - the NMI is actually toggled by a 74121 (R1=27K, C10=330p) */ @@ -142,7 +142,7 @@ void redalert_state::sound_start() WRITE8_MEMBER(redalert_state::redalert_voice_command_w) { - m_soundlatch2->write(space, 0, (data & 0x78) >> 3); + m_soundlatch2->write((data & 0x78) >> 3); m_voicecpu->set_input_line(I8085_RST75_LINE, (~data & 0x80) ? ASSERT_LINE : CLEAR_LINE); } @@ -246,7 +246,7 @@ void redalert_state::ww3_audio(machine_config &config) WRITE8_MEMBER(redalert_state::demoneye_audio_command_w) { /* the byte is connected to port A of the AY8910 */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/audio/scramble.cpp b/src/mame/audio/scramble.cpp index 075d0fd235a..710568d899b 100644 --- a/src/mame/audio/scramble.cpp +++ b/src/mame/audio/scramble.cpp @@ -122,7 +122,7 @@ WRITE8_MEMBER(scramble_state::hotshock_sh_irqtrigger_w) READ8_MEMBER( scramble_state::hotshock_soundlatch_r ) { m_audiocpu->set_input_line(0, CLEAR_LINE); - return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM),0); + return m_soundlatch->read(); } void scramble_state::sh_init() diff --git a/src/mame/audio/snk6502.cpp b/src/mame/audio/snk6502.cpp index 091186b79a2..94e647db077 100644 --- a/src/mame/audio/snk6502.cpp +++ b/src/mame/audio/snk6502.cpp @@ -995,7 +995,10 @@ WRITE8_MEMBER(sasuke_sound_device::sound_w) m_samples->start(3, 3); if (BIT(data & ~m_last_port1, 7)) + { + m_custom->reset_offset(0); // TODO: why is this the only game that needs this when unmuting? m_custom->unmute_channel(0); + } else if (BIT(~data & m_last_port1, 7)) m_custom->mute_channel(0); diff --git a/src/mame/audio/snk6502.h b/src/mame/audio/snk6502.h index b237e7249a6..354fca29081 100644 --- a/src/mame/audio/snk6502.h +++ b/src/mame/audio/snk6502.h @@ -27,6 +27,7 @@ public: void mute_channel(int channel); void unmute_channel(int channel); void set_sound0_stop_on_rollover(int value) { m_sound0_stop_on_rollover = value; } + void reset_offset(int channel) { m_tone_channels[channel].offset = 0; } void speech_w(uint8_t data, const uint16_t *table, int start); diff --git a/src/mame/audio/starwars.cpp b/src/mame/audio/starwars.cpp index 8d962273545..2f9074f2f56 100644 --- a/src/mame/audio/starwars.cpp +++ b/src/mame/audio/starwars.cpp @@ -68,8 +68,8 @@ READ8_MEMBER(starwars_state::starwars_main_ready_flag_r) WRITE8_MEMBER(starwars_state::starwars_soundrst_w) { - m_soundlatch->acknowledge_w(space, 0, 0); - m_mainlatch->acknowledge_w(space, 0, 0); + m_soundlatch->acknowledge_w(); + m_mainlatch->acknowledge_w(); /* reset sound CPU here */ m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); diff --git a/src/mame/audio/timeplt.cpp b/src/mame/audio/timeplt.cpp index c276cd3fcfe..78e41db51d2 100644 --- a/src/mame/audio/timeplt.cpp +++ b/src/mame/audio/timeplt.cpp @@ -128,7 +128,7 @@ WRITE8_MEMBER( timeplt_audio_device::filter_w ) WRITE8_MEMBER(timeplt_audio_device::sound_data_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); } diff --git a/src/mame/drivers/a1supply.cpp b/src/mame/drivers/a1supply.cpp index 991531caef3..964736feb25 100644 --- a/src/mame/drivers/a1supply.cpp +++ b/src/mame/drivers/a1supply.cpp @@ -87,11 +87,11 @@ void a1supply_state::video_start() { } -MACHINE_CONFIG_START(a1supply_state::a1supply) - +void a1supply_state::a1supply(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(a1supply) + NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK); + m_maincpu->set_constructor(netlist_a1supply); /* video hardware */ SCREEN(config, "screen", SCREEN_TYPE_RASTER); @@ -101,7 +101,7 @@ MACHINE_CONFIG_START(a1supply_state::a1supply) m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL); m_video->set_fieldcount(1); m_video->set_threshold(0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/a5105.cpp b/src/mame/drivers/a5105.cpp index f9f2d38e97d..037daf3feab 100644 --- a/src/mame/drivers/a5105.cpp +++ b/src/mame/drivers/a5105.cpp @@ -560,7 +560,8 @@ static const z80_daisy_config a5105_daisy_chain[] = { nullptr } }; -MACHINE_CONFIG_START(a5105_state::a5105) +void a5105_state::a5105(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, XTAL(15'000'000) / 4); m_maincpu->set_addrmap(AS_PROGRAM, &a5105_state::a5105_mem); @@ -568,12 +569,12 @@ MACHINE_CONFIG_START(a5105_state::a5105) m_maincpu->set_daisy_config(a5105_daisy_chain); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 25*8-1) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(50); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + m_screen->set_screen_update("upd7220", FUNC(upd7220_device::screen_update)); + m_screen->set_size(40*8, 32*8); + m_screen->set_visarea(0, 40*8-1, 0, 25*8-1); GFXDECODE(config, m_gfxdecode, m_palette, gfx_a5105); PALETTE(config, m_palette, FUNC(a5105_state::a5105_palette), 16); @@ -606,7 +607,7 @@ MACHINE_CONFIG_START(a5105_state::a5105) /* internal ram */ RAM(config, RAM_TAG).set_default_size("64K"); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( a5105 ) diff --git a/src/mame/drivers/a51xx.cpp b/src/mame/drivers/a51xx.cpp index b3d2d2a3521..39ff383e87e 100644 --- a/src/mame/drivers/a51xx.cpp +++ b/src/mame/drivers/a51xx.cpp @@ -126,42 +126,42 @@ static GFXDECODE_START( gfx_a51xx ) GFXDECODE_ENTRY( "chargen", 0x0000, a51xx_charlayout, 0, 1 ) GFXDECODE_END -MACHINE_CONFIG_START(a51xx_state::a5120) +void a51xx_state::a5120(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(4'000'000)) - MCFG_DEVICE_PROGRAM_MAP(a5120_mem) - MCFG_DEVICE_IO_MAP(a5120_io) + Z80(config, m_maincpu, XTAL(4'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &a51xx_state::a5120_mem); + m_maincpu->set_addrmap(AS_IO, &a51xx_state::a5120_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(a51xx_state, screen_update_a5120) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(640, 480); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(a51xx_state::screen_update_a5120)); + screen.set_palette("palette"); GFXDECODE(config, "gfxdecode", "palette", gfx_a51xx); PALETTE(config, "palette", palette_device::MONOCHROME); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a51xx_state::a5130) +void a51xx_state::a5130(machine_config &config) +{ a5120(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(a5130_mem) - MCFG_DEVICE_IO_MAP(a5130_io) + m_maincpu->set_addrmap(AS_PROGRAM, &a51xx_state::a5130_mem); + m_maincpu->set_addrmap(AS_IO, &a51xx_state::a5130_io); MCFG_MACHINE_RESET_OVERRIDE(a51xx_state,a5130) /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(a51xx_state, screen_update_a5130) + subdevice<screen_device>("screen")->set_screen_update(FUNC(a51xx_state::screen_update_a5130)); MCFG_VIDEO_START_OVERRIDE(a51xx_state,a5130) -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( a5120 ) diff --git a/src/mame/drivers/abc1600.cpp b/src/mame/drivers/abc1600.cpp index 3d1f1c7b419..0b04337d1cb 100644 --- a/src/mame/drivers/abc1600.cpp +++ b/src/mame/drivers/abc1600.cpp @@ -605,12 +605,12 @@ void abc1600_state::update_drdy2() READ8_MEMBER( abc1600_state::dart_r ) { - return m_dart->ba_cd_r(space, A2_A1 ^ 0x03); + return m_dart->ba_cd_r(A2_A1 ^ 0x03); } WRITE8_MEMBER( abc1600_state::dart_w ) { - m_dart->ba_cd_w(space, A2_A1 ^ 0x03, data); + m_dart->ba_cd_w(A2_A1 ^ 0x03, data); } //------------------------------------------------- @@ -873,7 +873,7 @@ void abc1600_state::machine_reset() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( abc1600 ) +// machine_config( abc1600 ) //------------------------------------------------- void abc1600_state::abc1600(machine_config &config) diff --git a/src/mame/drivers/abc80.cpp b/src/mame/drivers/abc80.cpp index b3ae56fd5cf..7e146613588 100644 --- a/src/mame/drivers/abc80.cpp +++ b/src/mame/drivers/abc80.cpp @@ -482,7 +482,7 @@ QUICKLOAD_LOAD_MEMBER( abc80_state, bac ) //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( abc80 ) +// machine_config( abc80 ) //------------------------------------------------- MACHINE_CONFIG_START(abc80_state::abc80) diff --git a/src/mame/drivers/abc80x.cpp b/src/mame/drivers/abc80x.cpp index 0bae43ca079..581c5ee516c 100644 --- a/src/mame/drivers/abc80x.cpp +++ b/src/mame/drivers/abc80x.cpp @@ -1049,7 +1049,7 @@ QUICKLOAD_LOAD_MEMBER( abc800_state, bac ) //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( common ) +// machine_config( common ) //------------------------------------------------- MACHINE_CONFIG_START(abc800_state::common) @@ -1118,10 +1118,11 @@ MACHINE_CONFIG_END //------------------------------------------------- -// MACHINE_CONFIG( abc800c ) +// machine_config( abc800c ) //------------------------------------------------- -MACHINE_CONFIG_START(abc800c_state::abc800c) +void abc800c_state::abc800c(machine_config &config) +{ common(config); // basic machine hardware @@ -1132,23 +1133,23 @@ MACHINE_CONFIG_START(abc800c_state::abc800c) abc800c_video(config); // peripheral hardware - MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc800") - MCFG_SLOT_FIXED(true) + abc_keyboard_port_device &kb(*subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG)); + kb.set_default_option("abc800"); + kb.set_fixed(true); - MCFG_DEVICE_MODIFY(ABCBUS_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc830") + subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc830"); // internal ram RAM(config, RAM_TAG).set_default_size("16K").set_extra_options("32K"); -MACHINE_CONFIG_END +} //------------------------------------------------- -// MACHINE_CONFIG( abc800m ) +// machine_config( abc800m ) //------------------------------------------------- -MACHINE_CONFIG_START(abc800m_state::abc800m) +void abc800m_state::abc800m(machine_config &config) +{ common(config); // basic machine hardware @@ -1159,23 +1160,23 @@ MACHINE_CONFIG_START(abc800m_state::abc800m) abc800m_video(config); // peripheral hardware - MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc800") - MCFG_SLOT_FIXED(true) + abc_keyboard_port_device &kb(*subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG)); + kb.set_default_option("abc800"); + kb.set_fixed(true); - MCFG_DEVICE_MODIFY(ABCBUS_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc830") + subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc830"); // internal ram RAM(config, RAM_TAG).set_default_size("16K").set_extra_options("32K"); -MACHINE_CONFIG_END +} //------------------------------------------------- -// MACHINE_CONFIG( abc802 ) +// machine_config( abc802 ) //------------------------------------------------- -MACHINE_CONFIG_START(abc802_state::abc802) +void abc802_state::abc802(machine_config &config) +{ common(config); // basic machine hardware @@ -1189,22 +1190,21 @@ MACHINE_CONFIG_START(abc802_state::abc802) m_dart->out_dtrb_callback().set(FUNC(abc802_state::lrs_w)); m_dart->out_rtsb_callback().set(FUNC(abc802_state::mux80_40_w)); - MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc55") + subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG)->set_default_option("abc55"); - MCFG_DEVICE_MODIFY(ABCBUS_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc834") + subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc834"); // internal ram RAM(config, RAM_TAG).set_default_size("64K"); -MACHINE_CONFIG_END +} //------------------------------------------------- -// MACHINE_CONFIG( abc806 ) +// machine_config( abc806 ) //------------------------------------------------- -MACHINE_CONFIG_START(abc806_state::abc806) +void abc806_state::abc806(machine_config &config) +{ common(config); // basic machine hardware @@ -1219,18 +1219,16 @@ MACHINE_CONFIG_START(abc806_state::abc806) m_dart->out_dtrb_callback().set(FUNC(abc806_state::keydtr_w)); - MCFG_DEVICE_MODIFY(ABC_KEYBOARD_PORT_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc77") + subdevice<abc_keyboard_port_device>(ABC_KEYBOARD_PORT_TAG)->set_default_option("abc77"); - MCFG_DEVICE_MODIFY(ABCBUS_TAG) - MCFG_SLOT_DEFAULT_OPTION("abc832") + subdevice<abcbus_slot_device>(ABCBUS_TAG)->set_default_option("abc832"); // internal ram RAM(config, RAM_TAG).set_default_size("160K").set_extra_options("544K"); // software list SOFTWARE_LIST(config, "flop_list2").set_original("abc806"); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/ac1.cpp b/src/mame/drivers/ac1.cpp index 877821ec2ff..c1e75686566 100644 --- a/src/mame/drivers/ac1.cpp +++ b/src/mame/drivers/ac1.cpp @@ -129,11 +129,12 @@ static INPUT_PORTS_START( ac1 ) INPUT_PORTS_END /* Machine driver */ -MACHINE_CONFIG_START(ac1_state::ac1) +void ac1_state::ac1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(8'000'000) / 4) - MCFG_DEVICE_PROGRAM_MAP(ac1_mem) - MCFG_DEVICE_IO_MAP(ac1_io) + Z80(config, m_maincpu, XTAL(8'000'000) / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &ac1_state::ac1_mem); + m_maincpu->set_addrmap(AS_IO, &ac1_state::ac1_io); z80pio_device& pio(Z80PIO(config, "z80pio", XTAL(8'000'000)/4)); pio.in_pa_callback().set(FUNC(ac1_state::ac1_port_a_r)); @@ -142,13 +143,13 @@ MACHINE_CONFIG_START(ac1_state::ac1) pio.out_pb_callback().set(FUNC(ac1_state::ac1_port_b_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(64*6, 16*8) - MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 16*8-1) - MCFG_SCREEN_UPDATE_DRIVER(ac1_state, screen_update_ac1) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(64*6, 16*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(ac1_state::screen_update_ac1)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ac1); @@ -158,19 +159,19 @@ MACHINE_CONFIG_START(ac1_state::ac1) WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25); CASSETTE(config, m_cassette); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(ac1_state::ac1_32) +void ac1_state::ac1_32(machine_config &config) +{ ac1(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(ac1_32_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &ac1_state::ac1_32_mem); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(64*6, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(ac1_state, screen_update_ac1_32) -MACHINE_CONFIG_END + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_size(64*6, 32*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(ac1_state::screen_update_ac1_32)); +} /* ROM definition */ ROM_START( ac1 ) diff --git a/src/mame/drivers/acd.cpp b/src/mame/drivers/acd.cpp index 64ff4cd0863..4207ac70b57 100644 --- a/src/mame/drivers/acd.cpp +++ b/src/mame/drivers/acd.cpp @@ -26,8 +26,9 @@ private: static INPUT_PORTS_START( acd ) INPUT_PORTS_END -MACHINE_CONFIG_START(acd_state::acd) -MACHINE_CONFIG_END +void acd_state::acd(machine_config &config) +{ +} ROM_START( acd ) ROM_REGION( 0x10000, "maincpu", 0 ) diff --git a/src/mame/drivers/ace.cpp b/src/mame/drivers/ace.cpp index 97574d561b1..9bb971d5e44 100644 --- a/src/mame/drivers/ace.cpp +++ b/src/mame/drivers/ace.cpp @@ -322,27 +322,27 @@ void aceal_state::machine_reset() elem = 0; } -MACHINE_CONFIG_START(aceal_state::ace) - +void aceal_state::ace(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8080, MASTER_CLOCK/9) /* 2 MHz ? */ - MCFG_DEVICE_PROGRAM_MAP(main_map) + I8080(config, m_maincpu, MASTER_CLOCK/9); /* 2 MHz ? */ + m_maincpu->set_addrmap(AS_PROGRAM, &aceal_state::main_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(4*8, 32*8-1, 2*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(aceal_state, screen_update_ace) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 32*8); + screen.set_visarea(4*8, 32*8-1, 2*8, 32*8-1); + screen.set_screen_update(FUNC(aceal_state::screen_update_ace)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ace); PALETTE(config, m_palette, palette_device::MONOCHROME); /* sound hardware */ /* ???? */ -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/aceex.cpp b/src/mame/drivers/aceex.cpp index d4830b3906f..fcf2de94a0c 100644 --- a/src/mame/drivers/aceex.cpp +++ b/src/mame/drivers/aceex.cpp @@ -84,12 +84,13 @@ void aceex2814_state::machine_reset() #define Y1_CLOCK 40320000 #define Y2_CLOCK 45342720 -MACHINE_CONFIG_START(aceex2814_state::aceex2814) +void aceex2814_state::aceex2814(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I80C31, Y2_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(aceex2814_map) -MACHINE_CONFIG_END + I80C31(config, m_maincpu, Y2_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &aceex2814_state::aceex2814_map); +} ROM_START( aceex2814 ) ROM_REGION( 0x10000, "maincpu", 0 ) diff --git a/src/mame/drivers/acefruit.cpp b/src/mame/drivers/acefruit.cpp index 49a05bdb9bc..c3ebc08de7b 100644 --- a/src/mame/drivers/acefruit.cpp +++ b/src/mame/drivers/acefruit.cpp @@ -626,33 +626,33 @@ static GFXDECODE_START( gfx_acefruit ) GFXDECODE_ENTRY( "gfx1", 0x1800, charlayout, 8, 4 ) GFXDECODE_END -MACHINE_CONFIG_START(acefruit_state::acefruit) - +void acefruit_state::acefruit(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 2500000) /* 2.5MHz */ - MCFG_DEVICE_PROGRAM_MAP(acefruit_map) - MCFG_DEVICE_IO_MAP(acefruit_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", acefruit_state, acefruit_vblank) + Z80(config, m_maincpu, 2500000); /* 2.5MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &acefruit_state::acefruit_map); + m_maincpu->set_addrmap(AS_IO, &acefruit_state::acefruit_io); + m_maincpu->set_vblank_int("screen", FUNC(acefruit_state::acefruit_vblank)); WATCHDOG_TIMER(config, "watchdog"); GFXDECODE(config, m_gfxdecode, m_palette, gfx_acefruit); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 255) - MCFG_SCREEN_UPDATE_DRIVER(acefruit_state, screen_update_acefruit) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(512, 256); + m_screen->set_visarea_full(); + m_screen->set_screen_update(FUNC(acefruit_state::screen_update_acefruit)); + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(acefruit_state::acefruit_palette), 16); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* sound hardware */ -MACHINE_CONFIG_END +} void acefruit_state::init_sidewndr() { diff --git a/src/mame/drivers/acesp.cpp b/src/mame/drivers/acesp.cpp index 7f1b049ff2d..01584aaba1b 100644 --- a/src/mame/drivers/acesp.cpp +++ b/src/mame/drivers/acesp.cpp @@ -86,13 +86,13 @@ static INPUT_PORTS_START( ace_sp ) INPUT_PORTS_END -MACHINE_CONFIG_START(ace_sp_state::ace_sp) - MCFG_DEVICE_ADD("maincpu", HD6303Y, 1000000) - MCFG_DEVICE_PROGRAM_MAP(ace_sp_map) - - MCFG_DEVICE_ADD("pia0", PIA6821, 0) +void ace_sp_state::ace_sp(machine_config &config) +{ + HD6303Y(config, m_maincpu, 1000000); + m_maincpu->set_addrmap(AS_PROGRAM, &ace_sp_state::ace_sp_map); -MACHINE_CONFIG_END + PIA6821(config, "pia0", 0); +} #define SP_CBOWL_SOUND \ diff --git a/src/mame/drivers/acommand.cpp b/src/mame/drivers/acommand.cpp index 9864cbdb312..c3560e0ea95 100644 --- a/src/mame/drivers/acommand.cpp +++ b/src/mame/drivers/acommand.cpp @@ -468,21 +468,21 @@ TIMER_DEVICE_CALLBACK_MEMBER(acommand_state::acommand_scanline) m_maincpu->set_input_line(3, HOLD_LINE); } -MACHINE_CONFIG_START(acommand_state::acommand) - +void acommand_state::acommand(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M68000,12000000) - MCFG_DEVICE_PROGRAM_MAP(acommand_map) + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &acommand_state::acommand_map); TIMER(config, "scantimer").configure_scanline(FUNC(acommand_state::acommand_scanline), "screen", 0, 1); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(acommand_state, screen_update_acommand) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(acommand_state::screen_update_acommand)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_acommand); PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x4000); @@ -494,14 +494,14 @@ MACHINE_CONFIG_START(acommand_state::acommand) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki1", OKIM6295, 2112000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + OKIM6295(config, m_oki1, 2112000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified + m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 1.0); - MCFG_DEVICE_ADD("oki2", OKIM6295, 2112000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, m_oki2, 2112000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 1.0); +} /*************************************************************************** diff --git a/src/mame/drivers/acrnsys.cpp b/src/mame/drivers/acrnsys.cpp index e7dcea8a45a..2eaa8aca2eb 100644 --- a/src/mame/drivers/acrnsys.cpp +++ b/src/mame/drivers/acrnsys.cpp @@ -123,7 +123,7 @@ void acrnsys_state::a6502_mem(address_map &map) { map.unmap_value_low(); map(0x0000, 0x03ff).ram(); - map(0x0e00, 0x0e7f).mirror(0x100).rw(m_ins8154, FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w)); + map(0x0e00, 0x0e7f).mirror(0x100).rw(m_ins8154, FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io)); map(0xf000, 0xffff).rom().region("maincpu", 0); } diff --git a/src/mame/drivers/acrnsys1.cpp b/src/mame/drivers/acrnsys1.cpp index af3e882cfee..e9ba3b9f17b 100644 --- a/src/mame/drivers/acrnsys1.cpp +++ b/src/mame/drivers/acrnsys1.cpp @@ -185,8 +185,8 @@ WRITE8_MEMBER( acrnsys1_state::acrnsys1_led_segment_w ) void acrnsys1_state::acrnsys1_map(address_map &map) { map(0x0000, 0x03ff).ram(); - map(0x0e00, 0x0e7f).mirror(0x100).rw("b1", FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w)); - map(0x0e80, 0x0eff).mirror(0x100).ram(); + map(0x0e00, 0x0e7f).mirror(0x100).rw("b1", FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io)); + map(0x0e80, 0x0eff).mirror(0x100).rw("b1", FUNC(ins8154_device::read_ram), FUNC(ins8154_device::write_ram)); map(0xf800, 0xf9ff).mirror(0x600).rom(); } diff --git a/src/mame/drivers/acvirus.cpp b/src/mame/drivers/acvirus.cpp index 79aaa6f16c8..a95efbdd4de 100644 --- a/src/mame/drivers/acvirus.cpp +++ b/src/mame/drivers/acvirus.cpp @@ -106,13 +106,14 @@ void acvirus_state::virus_map(address_map &map) map(0x8000, 0xffff).bankr("rombank"); } -MACHINE_CONFIG_START(acvirus_state::virus) - MCFG_DEVICE_ADD("maincpu", I8052, XTAL(12'000'000)) - MCFG_DEVICE_PROGRAM_MAP(virus_map) +void acvirus_state::virus(machine_config &config) +{ + I8052(config, m_maincpu, XTAL(12'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &acvirus_state::virus_map); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); -MACHINE_CONFIG_END +} static INPUT_PORTS_START( virus ) INPUT_PORTS_END diff --git a/src/mame/drivers/adm36.cpp b/src/mame/drivers/adm36.cpp new file mode 100644 index 00000000000..2298543b7eb --- /dev/null +++ b/src/mame/drivers/adm36.cpp @@ -0,0 +1,202 @@ +// license:BSD-3-Clause +// copyright-holders:Robbbert,AJR +/************************************************************************************************************ + + Skeleton driver for ADM 36 Video Display Terminal. + + The detachable keyboard has not been dumped. It is controlled serially through the PIO. + +************************************************************************************************************/ + +#include "emu.h" +#include "bus/rs232/rs232.h" +#include "cpu/z80/z80.h" +#include "machine/er1400.h" +#include "machine/z80ctc.h" +#include "machine/z80pio.h" +#include "machine/z80sio.h" +#include "video/tms9927.h" +#include "screen.h" + + +class adm36_state : public driver_device +{ +public: + adm36_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_earom(*this, "earom") + , m_vtac(*this, "vtac") + , m_chargen(*this, "chargen") + , m_vram(*this, "vram%u", 0U) + { + } + + void adm36(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void pio_pa_w(u8 data); + u8 pio_pb_r(); + void pio_pb_w(u8 data); + DECLARE_WRITE_LINE_MEMBER(vsyn_w); + + void mem_map(address_map &map); + void io_map(address_map &map); + + required_device<z80_device> m_maincpu; + required_device<er1400_device> m_earom; + required_device<crt5037_device> m_vtac; + required_region_ptr<u8> m_chargen; + required_shared_ptr_array<u8, 2> m_vram; + + bool m_vsyn; +}; + + +u32 adm36_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void adm36_state::machine_start() +{ + m_vsyn = false; + + save_item(NAME(m_vsyn)); +} + +void adm36_state::machine_reset() +{ +} + +void adm36_state::pio_pa_w(u8 data) +{ + m_earom->data_w(BIT(data, 0)); +} + +u8 adm36_state::pio_pb_r() +{ + return (m_earom->data_r() ? 0 : 1) | (m_vsyn ? 0x20 : 0); +} + +void adm36_state::pio_pb_w(u8 data) +{ + m_earom->clock_w(!BIT(data, 4)); + m_earom->c3_w(BIT(data, 3)); + m_earom->c2_w(BIT(data, 2)); + m_earom->c1_w(BIT(data, 1)); +} + +WRITE_LINE_MEMBER(adm36_state::vsyn_w) +{ + m_vsyn = bool(state); +} + +void adm36_state::mem_map(address_map &map) +{ + map(0x0000, 0x2fff).rom().region("maincpu", 0); + map(0x6000, 0x67ff).ram(); // MK4802J-3 (U76) + map(0xe000, 0xefff).ram().share("vram0"); // 4x MK4118AN-1 (U66-U69) + map(0xf000, 0xffff).ram().share("vram1"); // 4x MK4118AN-1 (U81-U84) +} + +void adm36_state::io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x03).mirror(0x0c).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); + map(0x10, 0x13).mirror(0x0c).rw("sio", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w)); + map(0x20, 0x23).mirror(0x0c).rw("pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write)); + map(0x40, 0x4f).rw(m_vtac, FUNC(crt5037_device::read), FUNC(crt5037_device::write)); +} + + +static INPUT_PORTS_START(adm36) +INPUT_PORTS_END + + +static const z80_daisy_config daisy_chain[] = +{ + { "ctc" }, + { "sio" }, + { "pio" }, + { nullptr } +}; + +void adm36_state::adm36(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, 14.728_MHz_XTAL / 6); + m_maincpu->set_addrmap(AS_PROGRAM, &adm36_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &adm36_state::io_map); + m_maincpu->set_daisy_config(daisy_chain); + + z80pio_device &pio(Z80PIO(config, "pio", 14.728_MHz_XTAL / 6)); + pio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + pio.out_pa_callback().set(FUNC(adm36_state::pio_pa_w)); + pio.in_pb_callback().set(FUNC(adm36_state::pio_pb_r)); + pio.out_pb_callback().set(FUNC(adm36_state::pio_pb_w)); + + ER1400(config, m_earom); + + //F3870(config, "keybcpu", 3.579545_MHz_XTAL); + + z80ctc_device &ctc(Z80CTC(config, "ctc", 14.728_MHz_XTAL / 6)); + ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ctc.set_clk<0>(14.728_MHz_XTAL / 12); + ctc.set_clk<1>(14.728_MHz_XTAL / 12); + ctc.set_clk<2>(14.728_MHz_XTAL / 12); + ctc.set_clk<3>(14.728_MHz_XTAL / 12); + ctc.zc_callback<0>().set("sio", FUNC(z80sio_device::txca_w)); + ctc.zc_callback<1>().set("sio", FUNC(z80sio_device::rxca_w)); + ctc.zc_callback<2>().set("sio", FUNC(z80sio_device::txcb_w)); + ctc.zc_callback<2>().append("sio", FUNC(z80sio_device::rxcb_w)); + + z80sio_device &sio(Z80SIO(config, "sio", 14.728_MHz_XTAL / 6)); // MK3887N + sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + sio.out_txda_callback().set("modem", FUNC(rs232_port_device::write_txd)); + sio.out_rtsa_callback().set("modem", FUNC(rs232_port_device::write_rts)); + sio.out_dtra_callback().set("modem", FUNC(rs232_port_device::write_dtr)); + sio.out_txdb_callback().set("printer", FUNC(rs232_port_device::write_txd)); + sio.out_dtrb_callback().set("printer", FUNC(rs232_port_device::write_rts)); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(14.728_MHz_XTAL, 936, 0, 720, 262, 0, 240); + //screen.set_raw(24.3_MHz_XTAL, 1548, 0, 1188, 262, 0, 240); + screen.set_screen_update(FUNC(adm36_state::screen_update)); + + CRT5037(config, m_vtac, 14.728_MHz_XTAL / 9); + m_vtac->set_char_width(9); + m_vtac->set_screen("screen"); + m_vtac->vsyn_callback().set(FUNC(adm36_state::vsyn_w)); + + rs232_port_device &modem(RS232_PORT(config, "modem", default_rs232_devices, nullptr)); // RS-232C, RS-422A or 20mA current loop + modem.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w)); + modem.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w)); + modem.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w)); + modem.dsr_handler().set("pio", FUNC(z80pio_device::pb6_w)); + + rs232_port_device &printer(RS232_PORT(config, "printer", default_rs232_devices, nullptr)); + printer.rxd_handler().set("sio", FUNC(z80sio_device::rxb_w)); + printer.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w)); + printer.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w)); +} + + +ROM_START(adm36) + ROM_REGION(0x3000, "maincpu", 0) + ROM_LOAD("u71_136261-012.bin", 0x0000, 0x2000, CRC(f08315c7) SHA1(3943a5fc587e690df81aa9694e6e452673ec5513)) + ROM_LOAD("u72_131671-015.bin", 0x2000, 0x1000, CRC(c397f4e2) SHA1(21513472fe4237bda8448a2ad85496757d4ece12)) + // U73-U75 are empty sockets + + ROM_REGION(0x1000, "chargen", 0) + ROM_LOAD("u56.bin", 0x0000, 0x1000, CRC(70e46897) SHA1(85b4360912fc05243b3b2df29bde5a3def94086b)) +ROM_END + + +COMP(1981, adm36, 0, 0, adm36, adm36, adm36_state, empty_init, "Lear Siegler", "ADM 36 Video Display Terminal", MACHINE_IS_SKELETON) diff --git a/src/mame/drivers/adp.cpp b/src/mame/drivers/adp.cpp index e25c64cd256..50200fc0a47 100644 --- a/src/mame/drivers/adp.cpp +++ b/src/mame/drivers/adp.cpp @@ -540,11 +540,11 @@ void adp_state::fstation_hd63484_map(address_map &map) map(0x80000, 0xfffff).ram(); } -MACHINE_CONFIG_START(adp_state::quickjac) - - MCFG_DEVICE_ADD(m_maincpu, M68000, 8000000) - MCFG_DEVICE_PROGRAM_MAP(quickjac_mem) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(adp_state, duart_iack_handler) +void adp_state::quickjac(machine_config &config) +{ + M68000(config, m_maincpu, 8000000); + m_maincpu->set_addrmap(AS_PROGRAM, &adp_state::quickjac_mem); + m_maincpu->set_irq_acknowledge_callback(FUNC(adp_state::duart_iack_handler)); MCFG_MACHINE_START_OVERRIDE(adp_state,skattv) MCFG_MACHINE_RESET_OVERRIDE(adp_state,skattv) @@ -561,13 +561,13 @@ MACHINE_CONFIG_START(adp_state::quickjac) MSM6242(config, "rtc", XTAL(32'768)); //rtc.out_int_handler().set(FUNC(adp_state::rtc_irq)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(384, 280) - MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0, 280-1) - MCFG_SCREEN_UPDATE_DEVICE("acrtc", hd63484_device, update_screen) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(384, 280); + screen.set_visarea_full(); + screen.set_screen_update("acrtc", FUNC(hd63484_device::update_screen)); + screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(adp_state::adp_palette), 0x10); @@ -577,8 +577,7 @@ MACHINE_CONFIG_START(adp_state::quickjac) ym2149_device &aysnd(YM2149(config, "aysnd", 3686400/2)); aysnd.port_a_read_callback().set_ioport("PA"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.10); - -MACHINE_CONFIG_END +} void adp_state::skattv(machine_config &config) { @@ -617,18 +616,18 @@ void adp_state::funland(machine_config &config) m_acrtc->set_addrmap(0, &adp_state::fstation_hd63484_map); } -MACHINE_CONFIG_START(adp_state::fstation) +void adp_state::fstation(machine_config &config) +{ funland(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(fstation_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &adp_state::fstation_mem); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_size(640, 480); + screen.set_visarea_full(); m_palette->set_init(FUNC(adp_state::fstation_palette)); -MACHINE_CONFIG_END +} ROM_START( quickjac ) diff --git a/src/mame/drivers/aeroboto.cpp b/src/mame/drivers/aeroboto.cpp index cce96b7a489..9ec149faaa6 100644 --- a/src/mame/drivers/aeroboto.cpp +++ b/src/mame/drivers/aeroboto.cpp @@ -244,24 +244,24 @@ void aeroboto_state::machine_reset() m_sy = 0; } -MACHINE_CONFIG_START(aeroboto_state::formatz) - +void aeroboto_state::formatz(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809, XTAL(10'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(main_map) + MC6809(config, m_maincpu, XTAL(10'000'000)/2); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &aeroboto_state::main_map); - MCFG_DEVICE_ADD("audiocpu", MC6809, XTAL(10'000'000)/4) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) + MC6809(config, m_audiocpu, XTAL(10'000'000)/4); /* verified on pcb */ + m_audiocpu->set_addrmap(AS_PROGRAM, &aeroboto_state::sound_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 31*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(aeroboto_state, screen_update_aeroboto) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, aeroboto_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 31*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(aeroboto_state::screen_update_aeroboto)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(aeroboto_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_aeroboto); @@ -279,7 +279,7 @@ MACHINE_CONFIG_START(aeroboto_state::formatz) ay1.add_route(ALL_OUTPUTS, "mono", 0.25); AY8910(config, "ay2", XTAL(10'000'000)/16).add_route(ALL_OUTPUTS, "mono", 0.25); /* verified on pcb */ -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/aerofgt.cpp b/src/mame/drivers/aerofgt.cpp index 0639b91322b..fdf4c27c720 100644 --- a/src/mame/drivers/aerofgt.cpp +++ b/src/mame/drivers/aerofgt.cpp @@ -76,7 +76,7 @@ Verification still needed for the other PCBs. WRITE8_MEMBER(aerofgt_state::karatblzbl_soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/agat.cpp b/src/mame/drivers/agat.cpp index ae9d8b1613d..b0d8cb1b2f8 100644 --- a/src/mame/drivers/agat.cpp +++ b/src/mame/drivers/agat.cpp @@ -1076,21 +1076,21 @@ static void agat7_cards(device_slot_interface &device) // Nippel Co-processor (R65C02 clone + dual-ported RAM) } -MACHINE_CONFIG_START(agat7_state::agat7) - MCFG_DEVICE_ADD(m_maincpu, M6502, XTAL(14'300'000) / 14) - MCFG_DEVICE_PROGRAM_MAP(agat7_map) - MCFG_DEVICE_VBLANK_INT_DRIVER(A7_VIDEO_TAG ":a7screen", agat7_state, agat_vblank) +void agat7_state::agat7(machine_config &config) +{ + M6502(config, m_maincpu, XTAL(14'300'000) / 14); + m_maincpu->set_addrmap(AS_PROGRAM, &agat7_state::agat7_map); + m_maincpu->set_vblank_int(A7_VIDEO_TAG ":a7screen", FUNC(agat7_state::agat_vblank)); TIMER(config, "scantimer").configure_scanline(FUNC(agat7_state::timer_irq), A7_VIDEO_TAG ":a7screen", 0, 1); - MCFG_DEVICE_ADD(m_video, AGAT7VIDEO, RAM_TAG, "gfx1") + AGAT7VIDEO(config, m_video, RAM_TAG, "gfx1"); RAM(config, m_ram).set_default_size("32K").set_default_value(0);//.set_extra_options("64K,128K"); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(A7_SPEAKER_TAG, SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); /* /INH banking */ ADDRESS_MAP_BANK(config, m_upperbank).set_map(&agat7_state::inhbank_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x3000); @@ -1132,7 +1132,7 @@ MACHINE_CONFIG_START(agat7_state::agat7) CASSETTE(config,m_cassette); m_cassette->set_default_state(CASSETTE_STOPPED); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/aim65.cpp b/src/mame/drivers/aim65.cpp index 0aa75c8b772..dc8a1dbed81 100644 --- a/src/mame/drivers/aim65.cpp +++ b/src/mame/drivers/aim65.cpp @@ -188,8 +188,8 @@ image_init_result aim65_state::load_cart(device_image_interface &image, generic_ MACHINE_CONFIG_START(aim65_state::aim65) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, AIM65_CLOCK) /* 1 MHz */ - MCFG_DEVICE_PROGRAM_MAP(aim65_mem) + M6502(config, m_maincpu, AIM65_CLOCK); /* 1 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &aim65_state::aim65_mem); config.set_default_layout(layout_aim65); diff --git a/src/mame/drivers/airbustr.cpp b/src/mame/drivers/airbustr.cpp index 9c83c3eff46..7e779e622ce 100644 --- a/src/mame/drivers/airbustr.cpp +++ b/src/mame/drivers/airbustr.cpp @@ -562,23 +562,23 @@ void airbustr_state::machine_reset() /* Machine Driver */ -MACHINE_CONFIG_START(airbustr_state::airbustr) - +void airbustr_state::airbustr(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("master", Z80, XTAL(12'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(master_map) - MCFG_DEVICE_IO_MAP(master_io_map) + Z80(config, m_master, XTAL(12'000'000)/2); /* verified on pcb */ + m_master->set_addrmap(AS_PROGRAM, &airbustr_state::master_map); + m_master->set_addrmap(AS_IO, &airbustr_state::master_io_map); TIMER(config, "scantimer").configure_scanline(FUNC(airbustr_state::airbustr_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("slave", Z80, XTAL(12'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(slave_map) - MCFG_DEVICE_IO_MAP(slave_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", airbustr_state, slave_interrupt) /* nmi signal from master cpu */ + Z80(config, m_slave, XTAL(12'000'000)/2); /* verified on pcb */ + m_slave->set_addrmap(AS_PROGRAM, &airbustr_state::slave_map); + m_slave->set_addrmap(AS_IO, &airbustr_state::slave_io_map); + m_slave->set_vblank_int("screen", FUNC(airbustr_state::slave_interrupt)); /* nmi signal from master cpu */ - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(12'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", airbustr_state, irq0_line_hold) // nmi are caused by sub cpu writing a sound command + Z80(config, m_audiocpu, XTAL(12'000'000)/2); /* verified on pcb */ + m_audiocpu->set_addrmap(AS_PROGRAM, &airbustr_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &airbustr_state::sound_io_map); + m_audiocpu->set_vblank_int("screen", FUNC(airbustr_state::irq0_line_hold)); // nmi are caused by sub cpu writing a sound command config.m_minimum_quantum = attotime::from_hz(6000); // Palette RAM is filled by sub cpu with data supplied by main cpu // Maybe a high value is safer in order to avoid glitches @@ -586,14 +586,14 @@ MACHINE_CONFIG_START(airbustr_state::airbustr) WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_seconds(3)); /* a guess, and certainly wrong */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57.4) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(airbustr_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, airbustr_state, screen_vblank)) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(57.4); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0, 32*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(airbustr_state::screen_update)); + m_screen->screen_vblank().set(FUNC(airbustr_state::screen_vblank)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_airbustr); PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 768); @@ -618,9 +618,8 @@ MACHINE_CONFIG_START(airbustr_state::airbustr) ymsnd.add_route(2, "mono", 0.25); ymsnd.add_route(3, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(12'000'000)/4, okim6295_device::PIN7_LOW) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) -MACHINE_CONFIG_END + OKIM6295(config, "oki", XTAL(12'000'000)/4, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.80); /* verified on pcb */ +} void airbustr_state::airbustrb(machine_config &config) { diff --git a/src/mame/drivers/airraid.cpp b/src/mame/drivers/airraid.cpp index 02e407a0f8c..8835909b340 100644 --- a/src/mame/drivers/airraid.cpp +++ b/src/mame/drivers/airraid.cpp @@ -389,17 +389,17 @@ INPUT_PORTS_END -MACHINE_CONFIG_START(airraid_state::airraid) - +void airraid_state::airraid(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, Z80,XTAL(12'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(airraid_map) + Z80(config, m_maincpu, XTAL(12'000'000)/2); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &airraid_state::airraid_map); TIMER(config, "scantimer").configure_scanline(FUNC(airraid_state::cshooter_scanline), "airraid_vid:screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181)/4) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(airraid_sound_map) - MCFG_DEVICE_OPCODES_MAP(airraid_sound_decrypted_opcodes_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("seibu_sound", seibu_sound_device, im0_vector_cb) + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181)/4)); /* verified on pcb */ + audiocpu.set_addrmap(AS_PROGRAM, &airraid_state::airraid_sound_map); + audiocpu.set_addrmap(AS_OPCODES, &airraid_state::airraid_sound_decrypted_opcodes_map); + audiocpu.set_irq_acknowledge_callback("seibu_sound", FUNC(seibu_sound_device::im0_vector_cb)); config.m_perfect_cpu_quantum = subtag("maincpu"); @@ -422,14 +422,14 @@ MACHINE_CONFIG_START(airraid_state::airraid) m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write)); SEI80BU(config, "sei80bu", 0).set_device_rom_tag("audiocpu"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(airraid_state::airraid_crypt) +void airraid_state::airraid_crypt(machine_config &config) +{ airraid(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_OPCODES, &airraid_state::decrypted_opcodes_map); +} diff --git a/src/mame/drivers/albazc.cpp b/src/mame/drivers/albazc.cpp index efd285a48ce..dc83bed62e7 100644 --- a/src/mame/drivers/albazc.cpp +++ b/src/mame/drivers/albazc.cpp @@ -276,24 +276,24 @@ static GFXDECODE_START( gfx_hanaroku ) GFXDECODE_END -MACHINE_CONFIG_START(albazc_state::hanaroku) - - MCFG_DEVICE_ADD("maincpu", Z80,6000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(hanaroku_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", albazc_state, irq0_line_hold) +void albazc_state::hanaroku(machine_config &config) +{ + Z80(config, m_maincpu, 6000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &albazc_state::hanaroku_map); + m_maincpu->set_vblank_int("screen", FUNC(albazc_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH ); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(0, 48*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(albazc_state, screen_update_hanaroku) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 64*8); + screen.set_visarea(0, 48*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(albazc_state::screen_update_hanaroku)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_hanaroku); @@ -306,7 +306,7 @@ MACHINE_CONFIG_START(albazc_state::hanaroku) aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.port_b_read_callback().set_ioport("DSW2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} ROM_START( hanaroku ) diff --git a/src/mame/drivers/albazg.cpp b/src/mame/drivers/albazg.cpp index 190c104741f..a2c11c23249 100644 --- a/src/mame/drivers/albazg.cpp +++ b/src/mame/drivers/albazg.cpp @@ -359,13 +359,13 @@ void albazg_state::machine_reset() m_prot_lock = 0; } -MACHINE_CONFIG_START(albazg_state::yumefuda) - +void albazg_state::yumefuda(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80 , MASTER_CLOCK/2) /* xtal is 12 Mhz, unknown divider*/ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(port_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", albazg_state, irq0_line_hold) + Z80(config, m_maincpu, MASTER_CLOCK/2); /* xtal is 12 Mhz, unknown divider*/ + m_maincpu->set_addrmap(AS_PROGRAM, &albazg_state::main_map); + m_maincpu->set_addrmap(AS_IO, &albazg_state::port_map); + m_maincpu->set_vblank_int("screen", FUNC(albazg_state::irq0_line_hold)); EEPROM_93C46_16BIT(config, "eeprom"); @@ -377,13 +377,13 @@ MACHINE_CONFIG_START(albazg_state::yumefuda) ppi.in_pc_callback().set(FUNC(albazg_state::mux_r)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(albazg_state, screen_update_yumefuda) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(albazg_state::screen_update_yumefuda)); + screen.set_palette("palette"); h46505_device &crtc(H46505(config, "crtc", MASTER_CLOCK/16)); /* hand tuned to get ~60 fps */ crtc.set_screen("screen"); @@ -402,7 +402,7 @@ MACHINE_CONFIG_START(albazg_state::yumefuda) aysnd.port_b_read_callback().set_ioport("DSW2"); aysnd.port_a_write_callback().set(FUNC(albazg_state::yumefuda_output_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} /***************************************************************************************/ diff --git a/src/mame/drivers/aleisttl.cpp b/src/mame/drivers/aleisttl.cpp index c5de63e532d..55792d80cf5 100644 --- a/src/mame/drivers/aleisttl.cpp +++ b/src/mame/drivers/aleisttl.cpp @@ -100,11 +100,11 @@ void sburners_state::video_start() { } -MACHINE_CONFIG_START(sburners_state::sburners) - +void sburners_state::sburners(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(sburners) + NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK); + m_maincpu->set_constructor(netlist_sburners); /* video hardware */ SCREEN(config, "screen", SCREEN_TYPE_RASTER); @@ -114,7 +114,7 @@ MACHINE_CONFIG_START(sburners_state::sburners) m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL); m_video->set_fieldcount(1); m_video->set_threshold(0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp index f17df4c1bf8..f0784a972e9 100644 --- a/src/mame/drivers/alesis.cpp +++ b/src/mame/drivers/alesis.cpp @@ -414,7 +414,8 @@ HD44780_PIXEL_UPDATE(alesis_state::sr16_pixel_update) bitmap.pix16(line*9 + y, pos*6 + x) = state; } -MACHINE_CONFIG_START(alesis_state::hr16) +void alesis_state::hr16(machine_config &config) +{ /* basic machine hardware */ I8031(config, m_maincpu, 12_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &alesis_state::hr16_mem); @@ -424,13 +425,13 @@ MACHINE_CONFIG_START(alesis_state::hr16) m_maincpu->port_out_cb<3>().set(FUNC(alesis_state::p3_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(6*16, 9*2) - MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1) - MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(6*16, 9*2); + screen.set_visarea_full(); + screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(alesis_state::alesis_palette), 2); @@ -445,9 +446,10 @@ MACHINE_CONFIG_START(alesis_state::hr16) ALESIS_DM3AG(config, "dm3ag", 12_MHz_XTAL/2); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(alesis_state::sr16) +void alesis_state::sr16(machine_config &config) +{ hr16(config); /* basic machine hardware */ @@ -456,14 +458,15 @@ MACHINE_CONFIG_START(alesis_state::sr16) m_maincpu->port_in_cb<1>().set_constant(0); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(6*8, 9*2) - MCFG_SCREEN_VISIBLE_AREA(0, 6*8-1, 0, 9*2-1) + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_size(6*8, 9*2); + screen.set_visarea_full(); + config.set_default_layout(layout_sr16); m_lcdc->set_lcd_size(2, 8); m_lcdc->set_pixel_update_cb(FUNC(alesis_state::sr16_pixel_update), this); -MACHINE_CONFIG_END +} void alesis_state::mmt8(machine_config &config) { diff --git a/src/mame/drivers/alesis_qs.cpp b/src/mame/drivers/alesis_qs.cpp index 0ad9d363649..09c55100e4e 100644 --- a/src/mame/drivers/alesis_qs.cpp +++ b/src/mame/drivers/alesis_qs.cpp @@ -51,10 +51,11 @@ void qs_state::qs7_prog_map(address_map &map) map(0x00000, 0x3ffff).rom(); } -MACHINE_CONFIG_START(qs_state::qs7) +void qs_state::qs7(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", H83048, XTAL(10'000'000)) /* FIX-ME! Actual CPU is H8/510 and XTAL value is a guess */ - MCFG_DEVICE_PROGRAM_MAP(qs7_prog_map) + H83048(config, m_maincpu, XTAL(10'000'000)); /* FIX-ME! Actual CPU is H8/510 and XTAL value is a guess */ + m_maincpu->set_addrmap(AS_PROGRAM, &qs_state::qs7_prog_map); //MCFG_ALESIS_KEYSCAN_ASIC_ADD("keyscan") @@ -76,7 +77,7 @@ MACHINE_CONFIG_START(qs_state::qs7) //MCFG_PCMCIA_ADD("pcmcia") //MIDI //RS232 -MACHINE_CONFIG_END +} ROM_START( alesqs7 ) ROM_REGION( 0x80000, "maincpu", 0 ) diff --git a/src/mame/drivers/alg.cpp b/src/mame/drivers/alg.cpp index d12a48319e2..e341d5dc1af 100644 --- a/src/mame/drivers/alg.cpp +++ b/src/mame/drivers/alg.cpp @@ -305,11 +305,11 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(alg_state::alg_r1) - +void alg_state::alg_r1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_PROGRAM_MAP(main_map_r1) + M68000(config, m_maincpu, amiga_state::CLK_7M_NTSC); + m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_r1); ADDRESS_MAP_BANK(config, "overlay").set_map(&alg_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -333,13 +333,13 @@ MACHINE_CONFIG_START(alg_state::alg_r1) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_NTSC)); - paula.add_route(0, "lspeaker", 0.25); - paula.add_route(1, "rspeaker", 0.25); - paula.add_route(2, "rspeaker", 0.25); - paula.add_route(3, "lspeaker", 0.25); - paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); - paula.int_cb().set(FUNC(amiga_state::paula_int_w)); + PAULA_8364(config, m_paula, amiga_state::CLK_C1_NTSC); + m_paula->add_route(0, "lspeaker", 0.25); + m_paula->add_route(1, "rspeaker", 0.25); + m_paula->add_route(2, "rspeaker", 0.25); + m_paula->add_route(3, "lspeaker", 0.25); + m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); + m_paula->int_cb().set(FUNC(amiga_state::paula_int_w)); m_laserdisc->add_route(0, "lspeaker", 1.0); m_laserdisc->add_route(1, "rspeaker", 1.0); @@ -359,32 +359,31 @@ MACHINE_CONFIG_START(alg_state::alg_r1) m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w)); m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w)); m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(alg_state::alg_r2) +void alg_state::alg_r2(machine_config &config) +{ alg_r1(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(main_map_r2) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_r2); +} -MACHINE_CONFIG_START(alg_state::picmatic) +void alg_state::picmatic(machine_config &config) +{ alg_r1(config); /* adjust for PAL specs */ - MCFG_DEVICE_REPLACE("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(main_map_picmatic) + m_maincpu->set_clock(amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_picmatic); config.device_remove("screen"); pal_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_PAL) + m_paula->set_clock(amiga_state::CLK_C1_PAL); m_cia_0->set_clock(amiga_state::CLK_E_PAL); m_cia_1->set_clock(amiga_state::CLK_E_PAL); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_PAL) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_PAL); +} diff --git a/src/mame/drivers/alien.cpp b/src/mame/drivers/alien.cpp index fdb75504b26..f5d3d69e1dc 100644 --- a/src/mame/drivers/alien.cpp +++ b/src/mame/drivers/alien.cpp @@ -136,27 +136,27 @@ void alien_state::machine_reset() //m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); } -MACHINE_CONFIG_START(alien_state::alien) +void alien_state::alien(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", SH4LE, MASTER_CLOCK) /* 200MHz */ - MCFG_DEVICE_PROGRAM_MAP(alien_map) - MCFG_CPU_FORCE_NO_DRC() + SH4LE(config, m_maincpu, MASTER_CLOCK); /* 200MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &alien_state::alien_map); + m_maincpu->set_force_no_drc(true); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_UPDATE_DRIVER(alien_state, screen_update) - MCFG_SCREEN_SIZE((32)*8, (32)*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_screen_update(FUNC(alien_state::screen_update)); + screen.set_size((32)*8, (32)*8); + screen.set_visarea_full(); - MCFG_PALETTE_ADD("palette", 0x1000) + PALETTE(config, "palette").set_entries(0x1000); /* sound hardware */ SPEAKER(config, "mono").front_center(); - -MACHINE_CONFIG_END +} void alien_state::init_dkbanans() { diff --git a/src/mame/drivers/aliens.cpp b/src/mame/drivers/aliens.cpp index f99907d2e3a..e57b00000bd 100644 --- a/src/mame/drivers/aliens.cpp +++ b/src/mame/drivers/aliens.cpp @@ -44,7 +44,7 @@ WRITE8_MEMBER(aliens_state::aliens_coin_counter_w) WRITE8_MEMBER(aliens_state::aliens_sh_irqtrigger_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/alinvade.cpp b/src/mame/drivers/alinvade.cpp index e77ae1747d4..a9138a1e94c 100644 --- a/src/mame/drivers/alinvade.cpp +++ b/src/mame/drivers/alinvade.cpp @@ -207,26 +207,25 @@ WRITE_LINE_MEMBER(alinvade_state::vblank_irq) m_maincpu->set_input_line(0,HOLD_LINE); } -MACHINE_CONFIG_START(alinvade_state::alinvade) - +void alinvade_state::alinvade(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502,2000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(alinvade_map) + M6502(config, m_maincpu, 2000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &alinvade_state::alinvade_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(128, 128) - MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 128-1) - MCFG_SCREEN_UPDATE_DRIVER(alinvade_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, alinvade_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(128, 128); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(alinvade_state::screen_update)); + screen.screen_vblank().set(FUNC(alinvade_state::vblank_irq)); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("discrete", DISCRETE, alinvade_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + DISCRETE(config, m_discrete, alinvade_discrete).add_route(ALL_OUTPUTS, "mono", 1.0); +} diff --git a/src/mame/drivers/alpha68k.cpp b/src/mame/drivers/alpha68k.cpp index 2f33da06c14..91cf03e1d66 100644 --- a/src/mame/drivers/alpha68k.cpp +++ b/src/mame/drivers/alpha68k.cpp @@ -291,7 +291,7 @@ WRITE8_MEMBER(alpha68k_state::outlatch_w) //AT WRITE8_MEMBER(alpha68k_state::tnextspc_soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } //ZT diff --git a/src/mame/drivers/alphasma.cpp b/src/mame/drivers/alphasma.cpp index 4e89daeaa2f..afb54668e78 100644 --- a/src/mame/drivers/alphasma.cpp +++ b/src/mame/drivers/alphasma.cpp @@ -431,7 +431,8 @@ void alphasmart_state::machine_reset() m_port_d = 0; } -MACHINE_CONFIG_START(alphasmart_state::alphasmart) +void alphasmart_state::alphasmart(machine_config &config) +{ /* basic machine hardware */ MC68HC11(config, m_maincpu, XTAL(8'000'000)/2); // MC68HC11D0, XTAL is 8 Mhz, unknown divider m_maincpu->set_addrmap(AS_PROGRAM, &alphasmart_state::alphasmart_mem); @@ -446,24 +447,24 @@ MACHINE_CONFIG_START(alphasmart_state::alphasmart) RAM(config, RAM_TAG).set_default_size("128K"); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(alphasmart_state, screen_update) - MCFG_SCREEN_SIZE(6*40, 9*4) - MCFG_SCREEN_VISIBLE_AREA(0, (6*40)-1, 0, (9*4)-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(alphasmart_state::screen_update)); + screen.set_size(6*40, 9*4); + screen.set_visarea_full(); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(alphasmart_state::alphasmart_palette), 2); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(asma2k_state::asma2k) +void asma2k_state::asma2k(machine_config &config) +{ alphasmart(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(asma2k_mem) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &asma2k_state::asma2k_mem); +} /* ROM definition */ ROM_START( asmapro ) diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp index a70fb3da764..86885ce5761 100644 --- a/src/mame/drivers/alphatro.cpp +++ b/src/mame/drivers/alphatro.cpp @@ -731,9 +731,9 @@ static void alphatro_floppies(device_slot_interface &device) MACHINE_CONFIG_START(alphatro_state::alphatro) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL / 4) - MCFG_DEVICE_PROGRAM_MAP(alphatro_map) - MCFG_DEVICE_IO_MAP(alphatro_io) + Z80(config, m_maincpu, 16_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &alphatro_state::alphatro_map); + m_maincpu->set_addrmap(AS_IO, &alphatro_state::alphatro_io); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); diff --git a/src/mame/drivers/alto1.cpp b/src/mame/drivers/alto1.cpp index 3031a9a937e..d59d46922e4 100644 --- a/src/mame/drivers/alto1.cpp +++ b/src/mame/drivers/alto1.cpp @@ -30,8 +30,9 @@ private: static INPUT_PORTS_START( alto1 ) INPUT_PORTS_END -MACHINE_CONFIG_START(alto1_state::alto1) -MACHINE_CONFIG_END +void alto1_state::alto1(machine_config &config) +{ +} ROM_START( alto1 ) ROM_REGION( 0x4000, "roms", 0 ) diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp index 4bdc14402f9..480666fc0d9 100644 --- a/src/mame/drivers/alto2.cpp +++ b/src/mame/drivers/alto2.cpp @@ -280,14 +280,15 @@ void alto2_state::alto2_iomem_map(address_map &map) map(0, 2*ALTO2_RAM_SIZE-1).m(m_maincpu, FUNC(alto2_cpu_device::iomem_map)); } -MACHINE_CONFIG_START(alto2_state::alto2) +void alto2_state::alto2(machine_config &config) +{ // Basic machine hardware // SYSCLK is Display Control part A51 (tagged 29.4MHz) divided by 5(?) // 5.8MHz according to de.wikipedia.org/wiki/Xerox_Alto - MCFG_DEVICE_ADD("maincpu", ALTO2, XTAL(29'491'200)/5) - MCFG_DEVICE_PROGRAM_MAP(alto2_ucode_map) - MCFG_DEVICE_DATA_MAP(alto2_const_map) - MCFG_DEVICE_IO_MAP(alto2_iomem_map) + ALTO2(config, m_maincpu, XTAL(29'491'200)/5); + m_maincpu->set_addrmap(AS_PROGRAM, &alto2_state::alto2_ucode_map); + m_maincpu->set_addrmap(AS_DATA, &alto2_state::alto2_const_map); + m_maincpu->set_addrmap(AS_IO, &alto2_state::alto2_iomem_map); // Video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -302,12 +303,11 @@ MACHINE_CONFIG_START(alto2_state::alto2) // Sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.80); DIABLO_HD(config, DIABLO_HD_0, 3333333); DIABLO_HD(config, DIABLO_HD_1, 3333333); -MACHINE_CONFIG_END + } /* Driver Init */ diff --git a/src/mame/drivers/alvg.cpp b/src/mame/drivers/alvg.cpp index 150803c825a..64badefb851 100644 --- a/src/mame/drivers/alvg.cpp +++ b/src/mame/drivers/alvg.cpp @@ -45,11 +45,12 @@ void alvg_state::init_alvg() { } -MACHINE_CONFIG_START(alvg_state::alvg) +void alvg_state::alvg(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M65C02, 2000000) - MCFG_DEVICE_PROGRAM_MAP(alvg_map) -MACHINE_CONFIG_END + M65C02(config, m_maincpu, 2000000); + m_maincpu->set_addrmap(AS_PROGRAM, &alvg_state::alvg_map); +} /*---------------------------------------------------------------------------- / A.G. Soccer Ball - A.G. Football has identical ROMs but different playfield diff --git a/src/mame/drivers/amaticmg.cpp b/src/mame/drivers/amaticmg.cpp index ae2f4f99c08..5c22c61027c 100644 --- a/src/mame/drivers/amaticmg.cpp +++ b/src/mame/drivers/amaticmg.cpp @@ -846,11 +846,12 @@ void amaticmg_state::machine_reset() * Machine Drivers * ************************************/ -MACHINE_CONFIG_START(amaticmg_state::amaticmg) +void amaticmg_state::amaticmg(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) /* WRONG! */ - MCFG_DEVICE_PROGRAM_MAP(amaticmg_map) - MCFG_DEVICE_IO_MAP(amaticmg_portmap) + Z80(config, m_maincpu, CPU_CLOCK); /* WRONG! */ + m_maincpu->set_addrmap(AS_PROGRAM, &amaticmg_state::amaticmg_map); + m_maincpu->set_addrmap(AS_IO, &amaticmg_state::amaticmg_portmap); // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -866,13 +867,13 @@ MACHINE_CONFIG_START(amaticmg_state::amaticmg) ppi1.out_pc_callback().set(FUNC(amaticmg_state::out_c_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(amaticmg_state::screen_update_amaticmg)); + screen.set_palette(m_palette); mc6845_device &crtc(MC6845(config, "crtc", CRTC_CLOCK)); crtc.set_screen("screen"); @@ -886,9 +887,8 @@ MACHINE_CONFIG_START(amaticmg_state::amaticmg) /* sound hardware */ SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM3812, SND_CLOCK) /* Y3014B DAC */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) -MACHINE_CONFIG_END + YM3812(config, "ymsnd", SND_CLOCK).add_route(ALL_OUTPUTS, "speaker", 0.5); /* Y3014B DAC */ +} WRITE_LINE_MEMBER(amaticmg_state::amaticmg2_irq) @@ -898,42 +898,40 @@ WRITE_LINE_MEMBER(amaticmg_state::amaticmg2_irq) } -MACHINE_CONFIG_START(amaticmg_state::amaticmg2) +void amaticmg_state::amaticmg2(machine_config &config) +{ amaticmg(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(amaticmg2_portmap) + m_maincpu->set_addrmap(AS_IO, &amaticmg_state::amaticmg2_portmap); I8255A(config, "ppi8255_2"); // MG4: 0x89 -> A:out; B:out; C(h):in; C(l):in. - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg2) + subdevice<screen_device>("screen")->set_screen_update(FUNC(amaticmg_state::screen_update_amaticmg2)); subdevice<mc6845_device>("crtc")->out_vsync_callback().set(FUNC(amaticmg_state::amaticmg2_irq)); m_gfxdecode->set_info(gfx_amaticmg2); m_palette->set_init(FUNC(amaticmg_state::amaticmg2_palette)); m_palette->set_entries(0x10000); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(amaticmg_state::amaticmg4) +void amaticmg_state::amaticmg4(machine_config &config) +{ amaticmg(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(amaticmg4_portmap) + m_maincpu->set_addrmap(AS_IO, &amaticmg_state::amaticmg4_portmap); I8255A(config, "ppi8255_2"); // MG4: 0x89 -> A:out; B:out; C(h):in; C(l):in. - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg2) + subdevice<screen_device>("screen")->set_screen_update(FUNC(amaticmg_state::screen_update_amaticmg2)); subdevice<mc6845_device>("crtc")->out_vsync_callback().set(FUNC(amaticmg_state::amaticmg2_irq)); m_gfxdecode->set_info(gfx_amaticmg2); m_palette->set_init(FUNC(amaticmg_state::amaticmg2_palette)); m_palette->set_entries(0x10000); -MACHINE_CONFIG_END +} /************************************ diff --git a/src/mame/drivers/ambush.cpp b/src/mame/drivers/ambush.cpp index 781d8d2074e..0e15f2331aa 100644 --- a/src/mame/drivers/ambush.cpp +++ b/src/mame/drivers/ambush.cpp @@ -724,21 +724,22 @@ WRITE8_MEMBER(ambush_state::output_latches_w) // MACHINE DEFINTIONS //************************************************************************** -MACHINE_CONFIG_START(ambush_state::ambush_base) - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(main_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", ambush_state, irq0_line_hold) +void ambush_state::ambush_base(machine_config &config) +{ + z80_device &maincpu(Z80(config, "maincpu", XTAL(18'432'000)/6)); + maincpu.set_addrmap(AS_PROGRAM, &ambush_state::main_map); + maincpu.set_addrmap(AS_IO, &ambush_state::main_portmap); + maincpu.set_vblank_int("screen", FUNC(ambush_state::irq0_line_hold)); WATCHDOG_TIMER(config, "watchdog"); MCFG_MACHINE_START_OVERRIDE(ambush_state, ambush) // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(18'432'000)/3, 384, 0, 256, 264, 16, 240) - MCFG_SCREEN_UPDATE_DRIVER(ambush_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(XTAL(18'432'000)/3, 384, 0, 256, 264, 16, 240); + screen.set_screen_update(FUNC(ambush_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_ambush); @@ -753,7 +754,7 @@ MACHINE_CONFIG_START(ambush_state::ambush_base) ay8912_device &ay2(AY8912(config, "ay2", XTAL(18'432'000)/6/2)); ay2.port_a_read_callback().set_ioport("joystick"); ay2.add_route(ALL_OUTPUTS, "mono", 0.33); -MACHINE_CONFIG_END +} void ambush_state::ambush(machine_config &config) { @@ -770,10 +771,10 @@ void ambush_state::ambush(machine_config &config) m_outlatch[1]->q_out_cb<7>().set(FUNC(ambush_state::coin_counter_2_w)); } -MACHINE_CONFIG_START(ambush_state::mariobl) +void ambush_state::mariobl(machine_config &config) +{ ambush_base(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bootleg_map) + subdevice<z80_device>("maincpu")->set_addrmap(AS_PROGRAM, &ambush_state::bootleg_map); // To be verified: do these bootlegs only have one LS259? ls259_device &outlatch(LS259(config, "outlatch")); @@ -782,8 +783,7 @@ MACHINE_CONFIG_START(ambush_state::mariobl) MCFG_MACHINE_START_OVERRIDE(ambush_state, mariobl) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(ambush_state, screen_update_bootleg) + subdevice<screen_device>("screen")->set_screen_update(FUNC(ambush_state::screen_update_bootleg)); m_gfxdecode->set_info(gfx_mariobl); @@ -796,7 +796,7 @@ MACHINE_CONFIG_START(ambush_state::mariobl) ay8910_device &ay2(AY8910(config.replace(), "ay2", XTAL(18'432'000)/6/2)); ay2.port_a_read_callback().set_ioport("joystick"); ay2.add_route(ALL_OUTPUTS, "mono", 0.33); -MACHINE_CONFIG_END +} void ambush_state::mariobla(machine_config &config) { @@ -809,7 +809,8 @@ void ambush_state::mariobla(machine_config &config) outlatch.q_out_cb<6>().set_nop(); } -MACHINE_CONFIG_START(ambush_state::dkong3abl) +void ambush_state::dkong3abl(machine_config &config) +{ mariobl(config); MCFG_MACHINE_START_OVERRIDE(ambush_state, dkong3abl) @@ -817,7 +818,7 @@ MACHINE_CONFIG_START(ambush_state::dkong3abl) m_gfxdecode->set_info(gfx_dkong3abl); subdevice<palette_device>("palette")->set_init(FUNC(ambush_state::dkong3_palette)); -MACHINE_CONFIG_END +} //************************************************************************** diff --git a/src/mame/drivers/amerihok.cpp b/src/mame/drivers/amerihok.cpp index c4e0da17d90..73276053c03 100644 --- a/src/mame/drivers/amerihok.cpp +++ b/src/mame/drivers/amerihok.cpp @@ -39,20 +39,44 @@ private: virtual void machine_start() override; virtual void machine_reset() override; - DECLARE_WRITE8_MEMBER(control_w); + void control_w(u8 data); + void p2_w(u8 data); + u8 p3_r(); - required_device<cpu_device> m_maincpu; + required_device<z8_device> m_maincpu; required_device<okim6376_device> m_oki; void amerihok_data_map(address_map &map); void amerihok_map(address_map &map); + + u32 m_outputs[2]; + u32 m_latched_outputs[2]; + u8 m_old_p2; }; -WRITE8_MEMBER(amerihok_state::control_w) +void amerihok_state::control_w(u8 data) { m_oki->st_w(!BIT(data, 4)); m_oki->ch2_w(!BIT(data, 7)); } +void amerihok_state::p2_w(u8 data) +{ + if (BIT(data, 5) && !BIT(m_old_p2, 5)) + { + m_outputs[1] = (m_outputs[1] << 1) | BIT(m_outputs[0], 31); + m_outputs[0] = (m_outputs[0] << 1) | BIT(data, 6); + } + + if (BIT(data, 7) && (m_outputs[0] != m_latched_outputs[0] || m_outputs[1] != m_latched_outputs[1])) + { + m_latched_outputs[0] = m_outputs[0]; + m_latched_outputs[1] = m_outputs[1]; + logerror("Outputs = %08X%08X\n", m_latched_outputs[1], m_latched_outputs[0]); + } + + m_old_p2 = data; +} + void amerihok_state::amerihok_map(address_map &map) { map(0x0000, 0xffff).rom().region("maincpu", 0); @@ -60,17 +84,49 @@ void amerihok_state::amerihok_map(address_map &map) void amerihok_state::amerihok_data_map(address_map &map) { + map(0x1000, 0x1000).portr("1000"); map(0x2000, 0x2000).w(FUNC(amerihok_state::control_w)); + map(0x3000, 0x3000).portr("3000"); map(0x4000, 0x4000).w(m_oki, FUNC(okim6376_device::write)); } static INPUT_PORTS_START( amerihok ) + PORT_START("1000") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CODE(KEYCODE_Z) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CODE(KEYCODE_X) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_CODE(KEYCODE_C) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_V) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_CODE(KEYCODE_B) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_N) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON7) PORT_CODE(KEYCODE_M) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON8) PORT_CODE(KEYCODE_COMMA) + + PORT_START("3000") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_A) PORT_NAME("Score Visitor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_S) PORT_NAME("Score Home") + PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("P2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON9) PORT_CODE(KEYCODE_STOP) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON10) PORT_CODE(KEYCODE_SLASH) + PORT_BIT(0xee, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("P3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("oki", okim6376_device, busy_r) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_COIN1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_COIN2) INPUT_PORTS_END void amerihok_state::machine_start() { + std::fill(std::begin(m_outputs), std::end(m_outputs), 0); + std::fill(std::begin(m_latched_outputs), std::end(m_latched_outputs), 0); + + save_item(NAME(m_outputs)); + save_item(NAME(m_latched_outputs)); } void amerihok_state::machine_reset() @@ -83,6 +139,9 @@ void amerihok_state::amerihok(machine_config &config) Z8681(config, m_maincpu, 12_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &amerihok_state::amerihok_map); m_maincpu->set_addrmap(AS_DATA, &amerihok_state::amerihok_data_map); + m_maincpu->p2_in_cb().set_ioport("P2"); + m_maincpu->p2_out_cb().set(FUNC(amerihok_state::p2_w)); + m_maincpu->p3_in_cb().set_ioport("P3"); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/amico2k.cpp b/src/mame/drivers/amico2k.cpp index f6dcebdf5b7..cf3874d260c 100644 --- a/src/mame/drivers/amico2k.cpp +++ b/src/mame/drivers/amico2k.cpp @@ -215,10 +215,11 @@ void amico2k_state::machine_start() save_item(NAME(m_segment)); } -MACHINE_CONFIG_START(amico2k_state::amico2k) +void amico2k_state::amico2k(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, 1000000) /* 1MHz */ - MCFG_DEVICE_PROGRAM_MAP(amico2k_mem) + M6502(config, m_maincpu, 1000000); /* 1MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &amico2k_state::amico2k_mem); /* video hardware */ config.set_default_layout(layout_amico2k); @@ -228,7 +229,7 @@ MACHINE_CONFIG_START(amico2k_state::amico2k) ppi.out_pa_callback().set(FUNC(amico2k_state::ppi_pa_w)); ppi.in_pb_callback().set(FUNC(amico2k_state::ppi_pb_r)); ppi.out_pb_callback().set(FUNC(amico2k_state::ppi_pb_w)); -MACHINE_CONFIG_END +} /* ROM definition */ diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp index f5e4b23132a..c963688ee98 100644 --- a/src/mame/drivers/amiga.cpp +++ b/src/mame/drivers/amiga.cpp @@ -1565,7 +1565,8 @@ static void amiga_floppies(device_slot_interface &device) } // basic elements common to all amigas -MACHINE_CONFIG_START(amiga_state::amiga_base) +void amiga_state::amiga_base(machine_config &config) +{ // video pal_video(config); @@ -1591,13 +1592,13 @@ MACHINE_CONFIG_START(amiga_state::amiga_base) // audio SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_PAL)); - paula.add_route(0, "lspeaker", 0.50); - paula.add_route(1, "rspeaker", 0.50); - paula.add_route(2, "rspeaker", 0.50); - paula.add_route(3, "lspeaker", 0.50); - paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); - paula.int_cb().set(FUNC(amiga_state::paula_int_w)); + PAULA_8364(config, m_paula, amiga_state::CLK_C1_PAL); + m_paula->add_route(0, "lspeaker", 0.50); + m_paula->add_route(1, "rspeaker", 0.50); + m_paula->add_route(2, "rspeaker", 0.50); + m_paula->add_route(3, "lspeaker", 0.50); + m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); + m_paula->int_cb().set(FUNC(amiga_state::paula_int_w)); // floppy drives AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL); @@ -1634,9 +1635,10 @@ MACHINE_CONFIG_START(amiga_state::amiga_base) SOFTWARE_LIST(config, "apps_list").set_original("amiga_apps"); SOFTWARE_LIST(config, "flop_list").set_original("amiga_flop"); SOFTWARE_LIST(config, "ocs_list").set_original("amigaocs_flop"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a1000_state::a1000) +void a1000_state::a1000(machine_config &config) +{ amiga_base(config); // keyboard @@ -1649,31 +1651,30 @@ MACHINE_CONFIG_START(a1000_state::a1000) .kbrst_cb().set(FUNC(a1000_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a1000_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a1000_state::a1000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&a1000_state::a1000_overlay_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); ADDRESS_MAP_BANK(config, "bootrom").set_map(&a1000_state::a1000_bootrom_map).set_options(ENDIANNESS_BIG, 16, 19, 0x40000); SOFTWARE_LIST(config, "a1000_list").set_original("amiga_a1000"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a1000_state::a1000n) +void a1000_state::a1000n(machine_config &config) +{ a1000(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a2000_state::a2000) +void a2000_state::a2000(machine_config &config) +{ amiga_base(config); // keyboard @@ -1686,8 +1687,8 @@ MACHINE_CONFIG_START(a2000_state::a2000) .kbrst_cb().set(FUNC(a2000_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a2000_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a2000_state::a2000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1708,24 +1709,23 @@ MACHINE_CONFIG_START(a2000_state::a2000) ZORRO_SLOT(config, "zorro3", m_zorro, zorro2_cards, nullptr); ZORRO_SLOT(config, "zorro4", m_zorro, zorro2_cards, nullptr); ZORRO_SLOT(config, "zorro5", m_zorro, zorro2_cards, nullptr); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a2000_state::a2000n) +void a2000_state::a2000n(machine_config &config) +{ a2000(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a500_state::a500) +void a500_state::a500(machine_config &config) +{ amiga_base(config); // keyboard @@ -1735,8 +1735,8 @@ MACHINE_CONFIG_START(a500_state::a500) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a500_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a500_state::a500_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1745,23 +1745,22 @@ MACHINE_CONFIG_START(a500_state::a500) m_side->int2_handler().set(FUNC(a500_state::side_int2_w)); m_side->int6_handler().set(FUNC(a500_state::side_int6_w)); ZORRO_SLOT(config, "slot", m_side, a500_expansion_cards, nullptr); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a500_state::a500n) +void a500_state::a500n(machine_config &config) +{ a500(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(cdtv_state::cdtv) +void cdtv_state::cdtv(machine_config &config) +{ amiga_base(config); // keyboard @@ -1774,18 +1773,18 @@ MACHINE_CONFIG_START(cdtv_state::cdtv) .kbrst_cb().set(FUNC(a1000_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(cdtv_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_mem); // remote control input converter - MCFG_DEVICE_ADD("u75", M6502, XTAL(3'000'000)) - MCFG_DEVICE_PROGRAM_MAP(cdtv_rc_mem) - MCFG_DEVICE_DISABLE() + m6502_device &u75(M6502(config, "u75", XTAL(3'000'000))); + u75.set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_rc_mem); + u75.set_disable(); // lcd controller #if 0 - MCFG_DEVICE_ADD("u62", LC6554, XTAL(4'000'000)) - MCFG_DEVICE_PROGRAM_MAP(lcd_mem) + lc6554_device &u62(LC6554(config, "u62", XTAL(4'000'000))); // device isn't emulated yet + u62.set_addrmap(AS_PROGRAM, &cdtv_state::lcd_mem); #endif ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1807,40 +1806,38 @@ MACHINE_CONFIG_START(cdtv_state::cdtv) m_dmac->io_write_handler().set(FUNC(cdtv_state::dmac_io_write)); m_dmac->int_handler().set(FUNC(cdtv_state::dmac_int_w)); - tpi6525_device &tpi(TPI6525(config, "u32", 0)); - tpi.out_irq_cb().set(FUNC(cdtv_state::tpi_int_w)); - tpi.out_pb_cb().set(FUNC(cdtv_state::tpi_port_b_write)); + TPI6525(config, m_tpi, 0); + m_tpi->out_irq_cb().set(FUNC(cdtv_state::tpi_int_w)); + m_tpi->out_pb_cb().set(FUNC(cdtv_state::tpi_port_b_write)); // cd-rom CR511B(config, m_cdrom, 0); - m_cdrom->scor_handler().set("u32", FUNC(tpi6525_device::i1_w)).invert(); - m_cdrom->stch_handler().set("u32", FUNC(tpi6525_device::i2_w)).invert(); - m_cdrom->sten_handler().set("u32", FUNC(tpi6525_device::i3_w)); - m_cdrom->xaen_handler().set("u32", FUNC(tpi6525_device::pb2_w)); - m_cdrom->drq_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w)); - m_cdrom->dten_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w)); + m_cdrom->scor_handler().set(m_tpi, FUNC(tpi6525_device::i1_w)).invert(); + m_cdrom->stch_handler().set(m_tpi, FUNC(tpi6525_device::i2_w)).invert(); + m_cdrom->sten_handler().set(m_tpi, FUNC(tpi6525_device::i3_w)); + m_cdrom->xaen_handler().set(m_tpi, FUNC(tpi6525_device::pb2_w)); + m_cdrom->drq_handler().set(m_dmac, FUNC(amiga_dmac_device::xdreq_w)); + m_cdrom->dten_handler().set(m_dmac, FUNC(amiga_dmac_device::xdreq_w)); // software SOFTWARE_LIST(config, "cd_list").set_original("cdtv"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(cdtv_state::cdtvn) +void cdtv_state::cdtvn(machine_config &config) +{ cdtv(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("u36") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_dmac->set_clock(amiga_state::CLK_7M_NTSC); + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a3000_state::a3000) +void a3000_state::a3000(machine_config &config) +{ amiga_base(config); // keyboard @@ -1849,8 +1846,8 @@ MACHINE_CONFIG_START(a3000_state::a3000) kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68030, XTAL(32'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a3000_mem) + M68030(config, m_maincpu, XTAL(32'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a3000_state::a3000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); @@ -1862,19 +1859,20 @@ MACHINE_CONFIG_START(a3000_state::a3000) // software SOFTWARE_LIST(config, "a3000_list").set_original("amiga_a3000"); SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a3000_state::a3000n) +void a3000_state::a3000n(machine_config &config) +{ a3000(config); config.device_remove("screen"); ntsc_video(config); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a500p_state::a500p) +void a500p_state::a500p(machine_config &config) +{ amiga_base(config); // keyboard @@ -1884,8 +1882,8 @@ MACHINE_CONFIG_START(a500p_state::a500p) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a500p_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a500p_state::a500p_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_1mb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1898,23 +1896,22 @@ MACHINE_CONFIG_START(a500p_state::a500p) // software SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a500p_state::a500pn) +void a500p_state::a500pn(machine_config &config) +{ a500p(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a600_state::a600) +void a600_state::a600(machine_config &config) +{ amiga_base(config); // keyboard @@ -1924,8 +1921,8 @@ MACHINE_CONFIG_START(a600_state::a600) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL) - MCFG_DEVICE_PROGRAM_MAP(a600_mem) + M68000(config, m_maincpu, amiga_state::CLK_7M_PAL); + m_maincpu->set_addrmap(AS_PROGRAM, &a600_state::a600_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map16).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -1944,25 +1941,23 @@ MACHINE_CONFIG_START(a600_state::a600) // software SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a600_state::a600n) +void a600_state::a600n(machine_config &config) +{ a600(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_MODIFY("gayle") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) + m_maincpu->set_clock(amiga_state::CLK_7M_NTSC); + subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a1200_state::a1200) +void a1200_state::a1200(machine_config &config) +{ amiga_base(config); // keyboard @@ -1972,14 +1967,13 @@ MACHINE_CONFIG_START(a1200_state::a1200) kbd.krst_handler().set(FUNC(amiga_state::kbreset_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2) - MCFG_DEVICE_PROGRAM_MAP(a1200_mem) + M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a1200_state::a1200_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); config.device_remove("palette"); @@ -1998,8 +1992,7 @@ MACHINE_CONFIG_START(a1200_state::a1200) // keyboard #if 0 - MCFG_DEVICE_MODIFY("kbd") - MCFG_SLOT_DEFAULT_OPTION("a1200_us") + subdevice<amiga_keyboard_bus_device>("kbd").set_default_option("a1200_us"); #endif // todo: pcmcia @@ -2007,28 +2000,25 @@ MACHINE_CONFIG_START(a1200_state::a1200) // software SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop"); SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a1200_state::a1200n) +void a1200_state::a1200n(machine_config &config) +{ a1200(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) - MCFG_DEVICE_MODIFY("gayle") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) + m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2); + subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a4000_state::a4000) +void a4000_state::a4000(machine_config &config) +{ amiga_base(config); // keyboard @@ -2037,14 +2027,13 @@ MACHINE_CONFIG_START(a4000_state::a4000) kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w)); // main cpu - MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a4000_mem) + M68040(config, m_maincpu, XTAL(50'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); config.device_remove("palette"); @@ -2062,55 +2051,52 @@ MACHINE_CONFIG_START(a4000_state::a4000) // software SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop"); SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a4000_state::a4000n) +void a4000_state::a4000n(machine_config &config) +{ a4000(config); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a4000_state::a400030) +void a4000_state::a400030(machine_config &config) +{ a4000(config); // main cpu - config.device_remove("maincpu"); - MCFG_DEVICE_ADD("maincpu", M68EC030, XTAL(50'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a400030_mem) + M68EC030(config.replace(), m_maincpu, XTAL(50'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a400030_mem); // todo: ide -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a4000_state::a400030n) +void a4000_state::a400030n(machine_config &config) +{ a400030(config); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(cd32_state::cd32) +void cd32_state::cd32(machine_config &config) +{ amiga_base(config); // main cpu - MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2) - MCFG_DEVICE_PROGRAM_MAP(cd32_mem) + M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cd32_state::cd32_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); @@ -2124,68 +2110,62 @@ MACHINE_CONFIG_START(cd32_state::cd32) akiko.sda_r_callback().set("i2cmem", FUNC(i2cmem_device::read_sda)); akiko.sda_w_callback().set("i2cmem", FUNC(i2cmem_device::write_sda)); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); config.device_remove("palette"); MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga) - MCFG_DEVICE_ADD("cdda", CDDA) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) + CDDA(config, m_cdda); + m_cdda->add_route(0, "lspeaker", 0.50); + m_cdda->add_route(1, "rspeaker", 0.50); m_cia_0->pa_wr_callback().set(FUNC(cd32_state::akiko_cia_0_port_a_write)); m_cia_0->sp_wr_callback().set_nop(); CDROM(config, "cdrom").set_interface("cd32_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("cd32"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(cd32_state::cd32n) +void cd32_state::cd32n(machine_config &config) +{ cd32(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2) + m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} -MACHINE_CONFIG_START(a4000_state::a4000t) +void a4000_state::a4000t(machine_config &config) +{ a4000(config); // main cpu - config.device_remove("maincpu"); - MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(a4000t_mem) + M68040(config.replace(), m_maincpu, XTAL(50'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000t_mem); // todo: ide, zorro3, scsi, super dmac -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(a4000_state::a4000tn) +void a4000_state::a4000tn(machine_config &config) +{ a4000(config); config.device_remove("screen"); ntsc_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE - MCFG_DEVICE_MODIFY("amiga") - MCFG_DEVICE_CLOCK(amiga_state::CLK_C1_NTSC) + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); + m_paula->set_clock(amiga_state::CLK_C1_NTSC); m_cia_0->set_clock(amiga_state::CLK_E_NTSC); m_cia_1->set_clock(amiga_state::CLK_E_NTSC); - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC) -MACHINE_CONFIG_END + m_fdc->set_clock(amiga_state::CLK_7M_NTSC); +} //************************************************************************** diff --git a/src/mame/drivers/ampoker2.cpp b/src/mame/drivers/ampoker2.cpp index b5581f8e40f..4bd0e3570f7 100644 --- a/src/mame/drivers/ampoker2.cpp +++ b/src/mame/drivers/ampoker2.cpp @@ -1166,28 +1166,28 @@ GFXDECODE_END * Machine Driver * *************************/ -MACHINE_CONFIG_START(ampoker2_state::ampoker2) - +void ampoker2_state::ampoker2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK/2) /* 3 MHz */ - MCFG_DEVICE_PROGRAM_MAP(program_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(ampoker2_state, nmi_line_pulse, 1536) + Z80(config, m_maincpu, MASTER_CLOCK/2); /* 3 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &oker2_state::program_map); + m_maincpu->set_addrmap(AS_IO, &oker2_state::io_map); + m_maincpu->set_periodic_int(FUNC(ampoker2_state::nmi_line_pulse), attotime::from_hz(1536)); WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_msec(200)); /* 200 ms, measured */ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); /* if VBLANK is used, the watchdog timer stop to work. - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); */ - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(20*8, 56*8-1, 2*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(ampoker2_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen.set_size(64*8, 32*8); + screen.set_visarea(20*8, 56*8-1, 2*8, 32*8-1); + screen.set_screen_update(FUNC(ampoker2_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_ampoker2); PALETTE(config, "palette", FUNC(ampoker2_state::ampoker2_palette), 512); @@ -1195,15 +1195,16 @@ MACHINE_CONFIG_START(ampoker2_state::ampoker2) /* sound hardware */ SPEAKER(config, "mono").front_center(); AY8910(config, "aysnd", MASTER_CLOCK/4).add_route(ALL_OUTPUTS, "mono", 0.30); /* 1.5 MHz, measured */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(ampoker2_state::sigma2k) +void ampoker2_state::sigma2k(machine_config &config) +{ ampoker2(config); /* video hardware */ m_gfxdecode->set_info(gfx_sigma2k); MCFG_VIDEO_START_OVERRIDE(ampoker2_state, sigma2k) -MACHINE_CONFIG_END +} /************************* diff --git a/src/mame/drivers/ampro.cpp b/src/mame/drivers/ampro.cpp index 74a7b2e1f43..b5c7cbce501 100644 --- a/src/mame/drivers/ampro.cpp +++ b/src/mame/drivers/ampro.cpp @@ -88,17 +88,17 @@ WRITE8_MEMBER( ampro_state::port00_w ) READ8_MEMBER( ampro_state::io_r ) { if (offset < 0x40) - return m_ctc->read(space, offset>>4); + return m_ctc->read(offset>>4); else - return m_dart->ba_cd_r(space, offset>>2); + return m_dart->ba_cd_r(offset>>2); } WRITE8_MEMBER( ampro_state::io_w ) { if (offset < 0x40) - m_ctc->write(space, offset>>4, data); + m_ctc->write(offset>>4, data); else - m_dart->ba_cd_w(space, offset>>2, data); + m_dart->ba_cd_w(offset>>2, data); } void ampro_state::ampro_mem(address_map &map) diff --git a/src/mame/drivers/ampscarp.cpp b/src/mame/drivers/ampscarp.cpp index 05b72db1734..f9ca05e3442 100644 --- a/src/mame/drivers/ampscarp.cpp +++ b/src/mame/drivers/ampscarp.cpp @@ -37,10 +37,11 @@ void ampscarp_state::mem_map(address_map &map) static INPUT_PORTS_START( ampscarp ) INPUT_PORTS_END -MACHINE_CONFIG_START(ampscarp_state::ampscarp) - MCFG_DEVICE_ADD("maincpu", MC68HC11, 8'000'000) // type and clock unknown - MCFG_DEVICE_PROGRAM_MAP(mem_map) -MACHINE_CONFIG_END +void ampscarp_state::ampscarp(machine_config &config) +{ + MC68HC11(config, m_maincpu, 8'000'000); // type and clock unknown + m_maincpu->set_addrmap(AS_PROGRAM, &scarp_state::mem_map); +} ROM_START( ampscarp ) ROM_REGION( 0x20000, "maincpu", 0 ) diff --git a/src/mame/drivers/amspdwy.cpp b/src/mame/drivers/amspdwy.cpp index cc817a8c466..373b1e92627 100644 --- a/src/mame/drivers/amspdwy.cpp +++ b/src/mame/drivers/amspdwy.cpp @@ -247,27 +247,27 @@ void amspdwy_state::machine_reset() m_wheel_return[1] = 0; } -MACHINE_CONFIG_START(amspdwy_state::amspdwy) - +void amspdwy_state::amspdwy(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 3000000) - MCFG_DEVICE_PROGRAM_MAP(amspdwy_map) - MCFG_DEVICE_IO_MAP(amspdwy_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", amspdwy_state, irq0_line_hold) /* IRQ: 60Hz, NMI: retn */ + Z80(config, m_maincpu, 3000000); + m_maincpu->set_addrmap(AS_PROGRAM, &amspdwy_state::amspdwy_map); + m_maincpu->set_addrmap(AS_IO, &amspdwy_state::amspdwy_portmap); + m_maincpu->set_vblank_int("screen", FUNC(amspdwy_state::irq0_line_hold)); /* IRQ: 60Hz, NMI: retn */ - MCFG_DEVICE_ADD("audiocpu", Z80, 3000000) - MCFG_DEVICE_PROGRAM_MAP(amspdwy_sound_map) + Z80(config, m_audiocpu, 3000000); + m_audiocpu->set_addrmap(AS_PROGRAM, &amspdwy_state::amspdwy_sound_map); config.m_perfect_cpu_quantum = subtag("maincpu"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(amspdwy_state, screen_update_amspdwy) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0+16, 256-16-1); + m_screen->set_screen_update(FUNC(amspdwy_state::screen_update_amspdwy)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_amspdwy); PALETTE(config, m_palette).set_format(palette_device::BGR_233_inverted, 32); @@ -283,7 +283,7 @@ MACHINE_CONFIG_START(amspdwy_state::amspdwy) m_ym2151->irq_handler().set_inputline(m_audiocpu, 0); m_ym2151->add_route(0, "lspeaker", 1.0); m_ym2151->add_route(1, "rspeaker", 1.0); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/amstr_pc.cpp b/src/mame/drivers/amstr_pc.cpp index 5ef0dec8787..3abea11e6d8 100644 --- a/src/mame/drivers/amstr_pc.cpp +++ b/src/mame/drivers/amstr_pc.cpp @@ -503,7 +503,8 @@ void amstrad_pc_state::cfg_fdc(device_t *device) fdc1->set_default_option("35dd"); } -MACHINE_CONFIG_START(amstrad_pc_state::pc200) +void amstrad_pc_state::pc200(machine_config &config) +{ /* basic machine hardware */ I8086(config, m_maincpu, 8000000); m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_pc_state::ppc640_map); @@ -513,14 +514,12 @@ MACHINE_CONFIG_START(amstrad_pc_state::pc200) PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); // FIXME: determine ISA bus clock - MCFG_DEVICE_ADD("aga", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "aga_pc200", true) - MCFG_DEVICE_ADD("fdc", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "fdc_xt", true) - MCFG_SLOT_OPTION_MACHINE_CONFIG("fdc_xt", cfg_fdc) - MCFG_DEVICE_ADD("com", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "com", true) - MCFG_SLOT_OPTION_MACHINE_CONFIG("com", cfg_com) + ISA8_SLOT(config, "aga", 0, "mb:isa", pc_isa8_cards, "aga_pc200", true); + ISA8_SLOT(config, "fdc", 0, "mb:isa", pc_isa8_cards, "fdc_xt", true).set_option_machine_config("fdc_xt", cfg_fdc); + ISA8_SLOT(config, "com", 0, "mb:isa", pc_isa8_cards, "com", true).set_option_machine_config("com", cfg_com); - MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false) - MCFG_DEVICE_ADD("isa2", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false) + ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, nullptr, false); + ISA8_SLOT(config, "isa2", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* printer */ pc_lpt_device &lpt0(PC_LPT(config, "lpt_0")); @@ -539,7 +538,7 @@ MACHINE_CONFIG_START(amstrad_pc_state::pc200) /* internal ram */ RAM(config, m_ram).set_default_size("640K").set_extra_options("512K"); -MACHINE_CONFIG_END +} void amstrad_pc_state::pc2086(machine_config &config) { diff --git a/src/mame/drivers/amstrad.cpp b/src/mame/drivers/amstrad.cpp index 2c62608955a..c9280c9a6ed 100644 --- a/src/mame/drivers/amstrad.cpp +++ b/src/mame/drivers/amstrad.cpp @@ -905,10 +905,10 @@ void amstrad_centronics_devices(device_slot_interface &device) MACHINE_CONFIG_START(amstrad_state::amstrad_base) /* Machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL / 4) - MCFG_DEVICE_PROGRAM_MAP(amstrad_mem) - MCFG_DEVICE_IO_MAP(amstrad_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(amstrad_state,amstrad_cpu_acknowledge_int) + Z80(config, m_maincpu, 16_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_state::amstrad_mem); + m_maincpu->set_addrmap(AS_IO, &amstrad_state::amstrad_io); + m_maincpu->set_irq_acknowledge_callback(FUNC(amstrad_state::amstrad_cpu_acknowledge_int)); config.m_minimum_quantum = attotime::from_hz(60); @@ -922,12 +922,12 @@ MACHINE_CONFIG_START(amstrad_state::amstrad_base) ppi.out_pc_callback().set(FUNC(amstrad_state::amstrad_ppi_portc_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(16_MHz_XTAL, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15) - MCFG_SCREEN_UPDATE_DRIVER(amstrad_state, screen_update_amstrad) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, amstrad_state, screen_vblank_amstrad)) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(16_MHz_XTAL, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15); + m_screen->set_screen_update(FUNC(amstrad_state::screen_update_amstrad)); + m_screen->screen_vblank().set(FUNC(amstrad_state::screen_vblank_amstrad)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(amstrad_state::amstrad_cpc_palette), 32); @@ -965,7 +965,8 @@ MACHINE_CONFIG_START(amstrad_state::amstrad_base) MACHINE_CONFIG_END -MACHINE_CONFIG_START(amstrad_state::cpc464) +void amstrad_state::cpc464(machine_config &config) +{ amstrad_base(config); cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", 16_MHz_XTAL / 4, cpc464_exp_cards, nullptr)); @@ -977,7 +978,7 @@ MACHINE_CONFIG_START(amstrad_state::cpc464) /* internal ram */ RAM(config, m_ram).set_default_size("64K").set_extra_options("128K,320K,576K"); -MACHINE_CONFIG_END +} void amstrad_state::cpc664(machine_config &config) { @@ -1018,21 +1019,22 @@ void amstrad_state::cpc6128(machine_config &config) } -MACHINE_CONFIG_START(amstrad_state::kccomp) +void amstrad_state::kccomp(machine_config &config) +{ cpc6128(config); MCFG_MACHINE_START_OVERRIDE(amstrad_state,kccomp) MCFG_MACHINE_RESET_OVERRIDE(amstrad_state,kccomp) m_palette->set_init(FUNC(amstrad_state::kccomp_palette)); -MACHINE_CONFIG_END +} MACHINE_CONFIG_START(amstrad_state::cpcplus) /* Machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 40_MHz_XTAL / 10) - MCFG_DEVICE_PROGRAM_MAP(amstrad_mem) - MCFG_DEVICE_IO_MAP(amstrad_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(amstrad_state,amstrad_cpu_acknowledge_int) + Z80(config, m_maincpu, 40_MHz_XTAL / 10); + m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_state::amstrad_mem); + m_maincpu->set_addrmap(AS_IO, &amstrad_state::amstrad_io); + m_maincpu->set_irq_acknowledge_callback(FUNC(amstrad_state::amstrad_cpu_acknowledge_int)); config.m_minimum_quantum = attotime::from_hz(60); @@ -1046,12 +1048,12 @@ MACHINE_CONFIG_START(amstrad_state::cpcplus) ppi.out_pc_callback().set(FUNC(amstrad_state::amstrad_ppi_portc_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15) - MCFG_SCREEN_UPDATE_DRIVER(amstrad_state, screen_update_amstrad) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, amstrad_state, screen_vblank_amstrad)) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15); + m_screen->set_screen_update(FUNC(amstrad_state::screen_update_amstrad)); + m_screen->screen_vblank().set(FUNC(amstrad_state::screen_vblank_amstrad)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(amstrad_state::amstrad_plus_palette), 4096); @@ -1105,12 +1107,13 @@ MACHINE_CONFIG_START(amstrad_state::cpcplus) MACHINE_CONFIG_END -MACHINE_CONFIG_START(amstrad_state::gx4000) +void amstrad_state::gx4000(machine_config &config) +{ /* Machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 40_MHz_XTAL / 10) - MCFG_DEVICE_PROGRAM_MAP(amstrad_mem) - MCFG_DEVICE_IO_MAP(amstrad_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(amstrad_state,amstrad_cpu_acknowledge_int) + Z80(config, m_maincpu, 40_MHz_XTAL / 10); + m_maincpu->set_addrmap(AS_PROGRAM, &amstrad_state::amstrad_mem); + m_maincpu->set_addrmap(AS_IO, &amstrad_state::amstrad_io); + m_maincpu->set_irq_acknowledge_callback(FUNC(amstrad_state::amstrad_cpu_acknowledge_int)); config.m_minimum_quantum = attotime::from_hz(60); @@ -1124,12 +1127,12 @@ MACHINE_CONFIG_START(amstrad_state::gx4000) ppi.out_pc_callback().set(FUNC(amstrad_state::amstrad_ppi_portc_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15) - MCFG_SCREEN_UPDATE_DRIVER(amstrad_state, screen_update_amstrad) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, amstrad_state, screen_vblank_amstrad)) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw((40_MHz_XTAL * 2) / 5, 1024, 32, 32 + 640 + 64, 312, 56 + 15, 200 + 15); + m_screen->set_screen_update(FUNC(amstrad_state::screen_update_amstrad)); + m_screen->screen_vblank().set(FUNC(amstrad_state::screen_vblank_amstrad)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(amstrad_state::amstrad_plus_palette), 4096); @@ -1153,10 +1156,11 @@ MACHINE_CONFIG_START(amstrad_state::gx4000) /* internal ram */ RAM(config, m_ram).set_default_size("64K"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(amstrad_state::aleste) +void amstrad_state::aleste(machine_config &config) +{ cpc6128(config); MCFG_MACHINE_START_OVERRIDE(amstrad_state,aleste) MCFG_MACHINE_RESET_OVERRIDE(amstrad_state,aleste) @@ -1187,7 +1191,7 @@ MACHINE_CONFIG_START(amstrad_state::aleste) /* internal ram */ m_ram->set_default_size("2M"); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/amusco.cpp b/src/mame/drivers/amusco.cpp index 8c5c28053b6..aa5cf9db461 100644 --- a/src/mame/drivers/amusco.cpp +++ b/src/mame/drivers/amusco.cpp @@ -532,8 +532,8 @@ void amusco_state::amusco_palette(palette_device &palette) const * Machine Drivers * *************************/ -MACHINE_CONFIG_START(amusco_state::amusco) - +void amusco_state::amusco(machine_config &config) +{ /* basic machine hardware */ I8088(config, m_maincpu, CPU_CLOCK); // 5 MHz ? m_maincpu->set_addrmap(AS_PROGRAM, &amusco_state::mem_map); @@ -574,12 +574,12 @@ MACHINE_CONFIG_START(amusco_state::amusco) TICKET_DISPENSER(config, m_hopper, attotime::from_msec(30), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(88*8, 27*10) // screen size: 88*8 27*10 - MCFG_SCREEN_VISIBLE_AREA(0*8, 74*8-1, 0*10, 24*10-1) // visible scr: 74*8 24*10 - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(88*8, 27*10); // screen size: 88*8 27*10 + m_screen->set_visarea(0*8, 74*8-1, 0*10, 24*10-1); // visible scr: 74*8 24*10 + m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update)); GFXDECODE(config, m_gfxdecode, "palette", gfx_amusco); PALETTE(config, "palette", FUNC(amusco_state::amusco_palette), 8*8); @@ -595,9 +595,8 @@ MACHINE_CONFIG_START(amusco_state::amusco) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("sn", SN76489A, SND_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) -MACHINE_CONFIG_END + SN76489A(config, "sn", SND_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); +} void amusco_state::draw88pkr(machine_config &config) { diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp index 42bb35a58ea..282c61e12f5 100644 --- a/src/mame/drivers/amust.cpp +++ b/src/mame/drivers/amust.cpp @@ -433,11 +433,12 @@ void amust_state::init_amust() membank("bankw0")->configure_entry(0, &main[0xf800]); } -MACHINE_CONFIG_START(amust_state::amust) +void amust_state::amust(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(16'000'000) / 4) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, XTAL(16'000'000) / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &amust_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &amust_state::io_map); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green())); @@ -451,8 +452,7 @@ MACHINE_CONFIG_START(amust_state::amust) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 800) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + BEEP(config, m_beep, 800).add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ h46505_device &crtc(H46505(config, "crtc", XTAL(14'318'181) / 8)); @@ -503,7 +503,7 @@ MACHINE_CONFIG_START(amust_state::amust) ppi2.in_pb_callback().set(FUNC(amust_state::port09_r)); ppi2.in_pc_callback().set(FUNC(amust_state::port0a_r)); ppi2.out_pc_callback().set(FUNC(amust_state::port0a_w)); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( amust ) diff --git a/src/mame/drivers/anes.cpp b/src/mame/drivers/anes.cpp index c7370d40d4a..44a6d42b748 100644 --- a/src/mame/drivers/anes.cpp +++ b/src/mame/drivers/anes.cpp @@ -156,29 +156,29 @@ void anes_state::machine_start() -MACHINE_CONFIG_START(anes_state::anes) +void anes_state::anes(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(16'000'000) / 2) // Z0840008PSC - MCFG_DEVICE_PROGRAM_MAP(prg_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", anes_state, irq0_line_hold) + z80_device &maincpu(Z80(config, "maincpu", XTAL(16'000'000) / 2)); // Z0840008PSC + maincpu.set_addrmap(AS_PROGRAM, &anes_state::prg_map); + maincpu.set_addrmap(AS_IO, &anes_state::io_map); + maincpu.set_vblank_int("screen", FUNC(anes_state::irq0_line_hold)); // all wrong - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(anes_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(anes_state::screen_update)); + screen.set_palette("palette"); - MCFG_PALETTE_ADD("palette", 0x100) + PALETTE(config, "palette").set_entries(0x100); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ym", YM2413, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + YM2413(config, "ym", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 0.30); +} ROM_START( tonpuu ) diff --git a/src/mame/drivers/apbeena.cpp b/src/mame/drivers/apbeena.cpp deleted file mode 100644 index c83e72ef05e..00000000000 --- a/src/mame/drivers/apbeena.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:R. Belmont -/*************************************************************************** - - apbeena.cpp - - Skeleton driver for the Sega Advanced Pico BEENA - - H/W is custom Sega SoC with ARM7TDMI core at 81 MHz. - - TODO: - Everything! - Needs the internal BIOS dumped. - -***************************************************************************/ - -#include "emu.h" -#include "cpu/arm7/arm7.h" - -class beena_state : public driver_device -{ -public: - beena_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "arm7") - { } - - void beena(machine_config &config); - -private: - void machine_start() override; - void machine_reset() override; - - void beena_arm7_map(address_map &map); - - required_device<arm7_cpu_device> m_maincpu; -}; - -void beena_state::beena_arm7_map(address_map &map) -{ - map(0x00000000, 0x000001ff).rom().region("cart", 0); - map(0x80000000, 0x807fffff).rom().region("cart", 0); -} - -static INPUT_PORTS_START( beena ) -INPUT_PORTS_END - -void beena_state::machine_reset() -{ -} - -void beena_state::machine_start() -{ -} - -void beena_state::beena(machine_config &config) -{ - ARM7_BE(config, m_maincpu, 81'000'000); - m_maincpu->set_addrmap(AS_PROGRAM, &beena_state::beena_arm7_map); -} - -ROM_START( apb_frpc ) - ROM_REGION32_BE( 0x80000, "bios", 0 ) // SoC internal BIOS - ROM_LOAD16_WORD_SWAP( "beenabios.bin", 0x000000, 0x080000, NO_DUMP ) - - ROM_REGION32_BE( 0x800000, "cart", 0 ) // cartridge ROM - ROM_LOAD16_WORD_SWAP( "freshprettycure.bin", 0x000000, 0x800000, CRC(afa3466c) SHA1(b49914f97db95f611489487f558d13d7cceb3299) ) - - ROM_REGION( 0x2000000, "pages", 0 ) // book pages - ROM_LOAD( "0 - 0010.png", 0x000000, 0x186546b, CRC(6d3d8c91) SHA1(9909322c09277ddd306f10f9a04a897b0fe74961) ) - ROM_LOAD( "0 - 0011.png", 0x000000, 0x179d3a8, CRC(c3911254) SHA1(2d2932e97a0b20a9b5e5fd78a3bbad0f1e146813) ) - ROM_LOAD( "0 - 0005.png", 0x000000, 0x18998f4, CRC(16837cc0) SHA1(eb86b2943cf603a63cd5b94faa0d06ee8a3139d6) ) - ROM_LOAD( "0 - 0007.png", 0x000000, 0x195df07, CRC(efccbb5b) SHA1(83de26d52cb6578d8323551a289223c8a305e37d) ) - ROM_LOAD( "0 - 0008.png", 0x000000, 0x18a9dd8, CRC(7455ebb2) SHA1(34576eee067534535cda838a9e94794e2cfee585) ) - ROM_LOAD( "0 - 0002.png", 0x000000, 0x1e37a3d, CRC(62ae3535) SHA1(d8f6c19c466715df5a568ac7cac8dacb53f2e04a) ) - ROM_LOAD( "0 - 0004.png", 0x000000, 0x19a864d, CRC(edede3ea) SHA1(81914894358c74064aa5f9e980ac37f7140f80c3) ) - ROM_LOAD( "0 - 0003.png", 0x000000, 0x1ce4f16, CRC(fe6c72d9) SHA1(2c4412eb518fbac2e8519c87e53270d960ecab53) ) - ROM_LOAD( "0 - 0009.png", 0x000000, 0x17a5c57, CRC(59ead843) SHA1(29c4cd7929cfd68f41d65024ee5ca3cc62fa4a8b) ) - ROM_LOAD( "0 - 0006.png", 0x000000, 0x195b7e5, CRC(3e307e6d) SHA1(23ed9ab2a4122d7cb33d8d6174ca901b88647b4d) ) - ROM_LOAD( "0 - 0012.png", 0x000000, 0x187a9df, CRC(f1cdc95d) SHA1(aa926c9360edcecdaa3a9ce1b5e17ee61048cee4) ) - ROM_LOAD( "0 - 0001.png", 0x000000, 0x1ca26ec, CRC(d8e18a54) SHA1(887a96931bf622cb673f2550323ad3923eff337e) ) -ROM_END - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -CONS( 2009, apb_frpc, 0, 0, beena, beena, beena_state, empty_init, "Sega", "Advanced Pico BEENA: Issho ni Henshin Fresh Pretty Cure", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp index e7d306c60c5..6d065a94df2 100644 --- a/src/mame/drivers/apc.cpp +++ b/src/mame/drivers/apc.cpp @@ -936,13 +936,13 @@ static void apc_floppies(device_slot_interface &device) device.option_add("8", FLOPPY_8_DSDD); } -MACHINE_CONFIG_START(apc_state::apc) - +void apc_state::apc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu,I8086,MAIN_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(apc_map) - MCFG_DEVICE_IO_MAP(apc_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) + I8086(config, m_maincpu, MAIN_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &apc_state::apc_map); + m_maincpu->set_addrmap(AS_IO, &apc_state::apc_io); + m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); PIT8253(config, m_pit, 0); m_pit->set_clk<0>(MAIN_CLOCK); // heartbeat IRQ @@ -1003,9 +1003,8 @@ MACHINE_CONFIG_START(apc_state::apc) /* sound hardware */ SPEAKER(config, m_speaker).front_center(); - MCFG_DEVICE_ADD(m_sound, UPD1771C, MAIN_CLOCK) //uPD1771C-006 - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + UPD1771C(config, m_sound, MAIN_CLOCK).add_route(ALL_OUTPUTS, "mono", 1.00); //uPD1771C-006 +} /*************************************************************************** diff --git a/src/mame/drivers/apollo.cpp b/src/mame/drivers/apollo.cpp index eb071504cbc..6398cfbb1f3 100644 --- a/src/mame/drivers/apollo.cpp +++ b/src/mame/drivers/apollo.cpp @@ -1042,11 +1042,12 @@ READ_LINE_MEMBER( apollo_state::apollo_kbd_is_german ) MACHINE DRIVERS ***************************************************************************/ -MACHINE_CONFIG_START(apollo_state::dn3500) +void apollo_state::dn3500(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(MAINCPU, M68030, 25000000) /* 25 MHz 68030 */ - MCFG_DEVICE_PROGRAM_MAP(dn3500_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge) + M68030(config, m_maincpu, 25000000); /* 25 MHz 68030 */ + m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dn3500_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge)); config.m_minimum_quantum = attotime::from_hz(60); @@ -1057,14 +1058,15 @@ MACHINE_CONFIG_START(apollo_state::dn3500) #ifdef APOLLO_XXL apollo_stdio_device &stdio(APOLLO_STDIO(config, APOLLO_STDIO_TAG, 0)); - stdio.tx_callback().set(m_sio, FUNC(apollo_sio::rx_b_w)); + stdio.tx_cb().set(m_sio, FUNC(apollo_sio::rx_b_w)); #endif -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(apollo_state::dsp3500) - MCFG_DEVICE_ADD(MAINCPU, M68030, 25000000) /* 25 MHz 68030 */ - MCFG_DEVICE_PROGRAM_MAP(dsp3500_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge) +void apollo_state::dsp3500(machine_config &config) +{ + M68030(config, m_maincpu, 25000000); /* 25 MHz 68030 */ + m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dsp3500_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge)); config.m_minimum_quantum = attotime::from_hz(60); apollo_terminal(config); @@ -1074,7 +1076,7 @@ MACHINE_CONFIG_START(apollo_state::dsp3500) /* terminal hardware */ config.set_default_layout(layout_apollo_dsp); -MACHINE_CONFIG_END +} void apollo_state::dn3500_19i(machine_config &config) { @@ -1096,22 +1098,24 @@ void apollo_state::dn3500_15i(machine_config &config) m_keyboard->german_cb().set(FUNC(apollo_state::apollo_kbd_is_german)); } -MACHINE_CONFIG_START(apollo_state::dn3000) +void apollo_state::dn3000(machine_config &config) +{ dn3500(config); - MCFG_DEVICE_REPLACE(MAINCPU, M68020PMMU, 12000000) /* 12 MHz */ - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge) - MCFG_DEVICE_PROGRAM_MAP(dn3000_map) + M68020PMMU(config.replace(), m_maincpu, 12000000); /* 12 MHz */ + m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge)); + m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dn3000_map); config.device_remove( APOLLO_SIO2_TAG ); m_ram->set_default_size("8M").set_extra_options("4M"); // FIXME: is this interrupt really only connected on DN3000? m_rtc->irq().set(FUNC(apollo_state::apollo_rtc_irq_function)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(apollo_state::dsp3000) - MCFG_DEVICE_ADD(MAINCPU, M68020PMMU, 12000000) /* 12 MHz */ - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge) - MCFG_DEVICE_PROGRAM_MAP(dsp3000_map) +void apollo_state::dsp3000(machine_config &config) +{ + M68020PMMU(config, m_maincpu, 12000000); /* 12 MHz */ + m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge)); + m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dsp3000_map); config.m_minimum_quantum = attotime::from_hz(60); apollo_terminal(config); @@ -1123,7 +1127,7 @@ MACHINE_CONFIG_START(apollo_state::dsp3000) /* terminal hardware */ config.set_default_layout(layout_apollo_dsp); -MACHINE_CONFIG_END +} void apollo_state::dn3000_19i(machine_config &config) { @@ -1145,16 +1149,18 @@ void apollo_state::dn3000_15i(machine_config &config) m_keyboard->german_cb().set(FUNC(apollo_state::apollo_kbd_is_german)); } -MACHINE_CONFIG_START(apollo_state::dn5500) +void apollo_state::dn5500(machine_config &config) +{ dn3500(config); - MCFG_DEVICE_REPLACE(MAINCPU, M68040, 25000000) /* 25 MHz */ - MCFG_DEVICE_PROGRAM_MAP(dn5500_map) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(apollo_state::dsp5500) - MCFG_DEVICE_ADD(MAINCPU, M68040, 25000000) /* 25 MHz */ - MCFG_DEVICE_PROGRAM_MAP(dsp5500_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(apollo_state,apollo_irq_acknowledge) + M68040(config.replace(), m_maincpu, 25000000); /* 25 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dn5500_map); +} + +void apollo_state::dsp5500(machine_config &config) +{ + M68040(config, m_maincpu, 25000000); /* 25 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &apollo_state::dsp5500_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(apollo_state::apollo_irq_acknowledge)); config.m_minimum_quantum = attotime::from_hz(60); apollo_terminal(config); @@ -1165,7 +1171,7 @@ MACHINE_CONFIG_START(apollo_state::dsp5500) /* terminal hardware */ config.set_default_layout(layout_apollo_dsp); -MACHINE_CONFIG_END +} void apollo_state::dn5500_19i(machine_config &config) { diff --git a/src/mame/drivers/apple1.cpp b/src/mame/drivers/apple1.cpp index b6a1d60d281..72a660dfda5 100644 --- a/src/mame/drivers/apple1.cpp +++ b/src/mame/drivers/apple1.cpp @@ -595,14 +595,14 @@ static void apple1_cards(device_slot_interface &device) } MACHINE_CONFIG_START(apple1_state::apple1) - MCFG_DEVICE_ADD(m_maincpu, M6502, 960000) // effective CPU speed - MCFG_DEVICE_PROGRAM_MAP(apple1_map) + M6502(config, m_maincpu, 960000); // effective CPU speed + m_maincpu->set_addrmap(AS_PROGRAM, &apple1_state::apple1_map); // video timings are identical to the Apple II, unsurprisingly - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(14'318'181), (65*7)*2, 0, (40*7)*2, 262, 0, 192) - MCFG_SCREEN_UPDATE_DRIVER(apple1_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(14'318'181), (65*7)*2, 0, (40*7)*2, 262, 0, 192); + m_screen->set_screen_update(FUNC(apple1_state::screen_update)); + m_screen->set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index 47a60cf9807..4f4e9f3ba35 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -1492,14 +1492,15 @@ void apple2_state::space84(machine_config &config) apple2p(config); } -MACHINE_CONFIG_START(apple2_state::apple2jp) +void apple2_state::apple2jp(machine_config &config) +{ apple2p(config); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(apple2_state, screen_update_jp) -MACHINE_CONFIG_END + m_screen->set_screen_update(FUNC(apple2_state::screen_update_jp)); +} #if 0 -static MACHINE_CONFIG_START( laba2p ) +void apple2_state::laba2p(machine_config &config) +{ apple2p(config); MCFG_MACHINE_START_OVERRIDE(apple2_state,laba2p) @@ -1509,8 +1510,7 @@ static MACHINE_CONFIG_START( laba2p ) // A2BUS_LAB_80COL("sl3", A2BUS_LAB_80COL).set_onboard(m_a2bus); A2BUS_IWM_FDC("sl6", A2BUS_IWM_FDC).set_onboard(m_a2bus); - -MACHINE_CONFIG_END +} #endif /*************************************************************************** diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 6ada5b9bc5c..3dfce268e3d 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -153,6 +153,7 @@ Address bus A0-A11 is Y0-Y11 #include "bus/a2bus/ssprite.h" #include "bus/a2bus/ssbapple.h" #include "bus/a2bus/transwarp.h" +#include "bus/a2bus/a2vulcan.h" #include "bus/rs232/rs232.h" @@ -3955,6 +3956,7 @@ static void apple2_cards(device_slot_interface &device) device.option_add("arcbd", A2BUS_ARCADEBOARD); /* Third Millenium Engineering Arcade Board */ device.option_add("midi", A2BUS_MIDI); /* Generic 6840+6850 MIDI board */ device.option_add("zipdrive", A2BUS_ZIPDRIVE); /* ZIP Technologies IDE card */ + device.option_add("focusdrive", A2BUS_FOCUSDRIVE); /* Focus Drive IDE card */ device.option_add("echoiiplus", A2BUS_ECHOPLUS); /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */ device.option_add("scsi", A2BUS_SCSI); /* Apple II SCSI Card */ device.option_add("applicard", A2BUS_APPLICARD); /* PCPI Applicard */ @@ -3977,6 +3979,8 @@ static void apple2_cards(device_slot_interface &device) device.option_add("ssprite", A2BUS_SSPRITE); /* Synetix SuperSprite Board */ device.option_add("ssbapple", A2BUS_SSBAPPLE); /* SSB Apple speech board */ device.option_add("twarp", A2BUS_TRANSWARP); /* AE TransWarp accelerator */ + device.option_add("vulcan", A2BUS_VULCAN); /* Applied Engineering Vulcan IDE drive */ + device.option_add("vulcangold", A2BUS_VULCANGOLD); /* Applied Engineering Vulcan Gold IDE drive */ } static void apple2eaux_cards(device_slot_interface &device) diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index 491c0dd1391..02c24e34e1e 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -85,6 +85,7 @@ #include "bus/a2bus/timemasterho.h" #include "bus/a2bus/mouse.h" #include "bus/a2bus/ezcgi.h" +#include "bus/a2bus/a2vulcan.h" //#include "bus/a2bus/pc_xporter.h" // various timing standards @@ -4041,7 +4042,7 @@ READ8_MEMBER(apple2gs_state::doc_adc_read) int apple2gs_state::apple2_fdc_has_35() { - return (floppy_get_count(machine())); // - apple525_get_count(machine)) > 0; + return device_type_iterator<sonydriv_floppy_image_device>(*this).count(); // - apple525_get_count(machine)) > 0; } int apple2gs_state::apple2_fdc_has_525() @@ -4522,6 +4523,7 @@ static void apple2_cards(device_slot_interface &device) device.option_add("arcbd", A2BUS_ARCADEBOARD); /* Third Millenium Engineering Arcade Board */ device.option_add("midi", A2BUS_MIDI); /* Generic 6840+6850 MIDI board */ device.option_add("zipdrive", A2BUS_ZIPDRIVE); /* ZIP Technologies IDE card */ + device.option_add("focusdrive", A2BUS_FOCUSDRIVE); /* Focus Drive IDE card */ device.option_add("echoiiplus", A2BUS_ECHOPLUS); /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */ device.option_add("scsi", A2BUS_SCSI); /* Apple II SCSI Card */ device.option_add("applicard", A2BUS_APPLICARD); /* PCPI Applicard */ @@ -4539,6 +4541,8 @@ static void apple2_cards(device_slot_interface &device) device.option_add("ezcgi", A2BUS_EZCGI); /* E-Z Color Graphics Interface */ device.option_add("ezcgi9938", A2BUS_EZCGI_9938); /* E-Z Color Graphics Interface (TMS9938) */ device.option_add("ezcgi9958", A2BUS_EZCGI_9958); /* E-Z Color Graphics Interface (TMS9958) */ + device.option_add("vulcan", A2BUS_VULCAN); /* Applied Engineering Vulcan IDE drive */ + device.option_add("vulcangold", A2BUS_VULCANGOLD); /* Applied Engineering Vulcan Gold IDE drive */ // device.option_add("magicmusician", A2BUS_MAGICMUSICIAN); /* Magic Musician Card */ // device.option_add("pcxport", A2BUS_PCXPORTER); /* Applied Engineering PC Transporter */ } diff --git a/src/mame/drivers/apple3.cpp b/src/mame/drivers/apple3.cpp index 10b7d2004f0..ecaa1453d03 100644 --- a/src/mame/drivers/apple3.cpp +++ b/src/mame/drivers/apple3.cpp @@ -25,6 +25,7 @@ #include "bus/a2bus/a2applicard.h" #include "bus/a2bus/a2thunderclock.h" #include "bus/a2bus/mouse.h" +#include "bus/a2bus/a2zipdrive.h" #include "bus/rs232/rs232.h" @@ -44,6 +45,7 @@ static void apple3_cards(device_slot_interface &device) device.option_add("applicard", A2BUS_APPLICARD); // PCPI Applicard device.option_add("thclock", A2BUS_THUNDERCLOCK); // ThunderWare ThunderClock Plus - driver assumes slot 2 by default device.option_add("mouse", A2BUS_MOUSE); // Apple II Mouse Card + device.option_add("focusdrive", A2BUS_FOCUSDRIVE); // Focus Drive IDE card } static void a3_floppies(device_slot_interface &device) diff --git a/src/mame/drivers/applix.cpp b/src/mame/drivers/applix.cpp index 4a031b8fafb..01b3043ef01 100644 --- a/src/mame/drivers/applix.cpp +++ b/src/mame/drivers/applix.cpp @@ -847,14 +847,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(applix_state::cass_timer) } } -MACHINE_CONFIG_START(applix_state::applix) +void applix_state::applix(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 30_MHz_XTAL / 4) // MC68000-P10 @ 7.5 MHz - MCFG_DEVICE_PROGRAM_MAP(applix_mem) + M68000(config, m_maincpu, 30_MHz_XTAL / 4); // MC68000-P10 @ 7.5 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &applix_state::applix_mem); - MCFG_DEVICE_ADD("subcpu", Z80, 16_MHz_XTAL / 2) // Z80H - MCFG_DEVICE_PROGRAM_MAP(subcpu_mem) - MCFG_DEVICE_IO_MAP(subcpu_io) + z80_device &subcpu(Z80(config, "subcpu", 16_MHz_XTAL / 2)); // Z80H + subcpu.set_addrmap(AS_PROGRAM, &applix_state::subcpu_mem); + subcpu.set_addrmap(AS_IO, &applix_state::subcpu_io); i8051_device &kbdcpu(I8051(config, "kbdcpu", 11060250)); kbdcpu.set_addrmap(AS_PROGRAM, &applix_state::keytronic_pc3270_program); @@ -867,12 +868,12 @@ MACHINE_CONFIG_START(applix_state::applix) kbdcpu.port_out_cb<3>().set(FUNC(applix_state::p3_write)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(640, 200) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(640, 200); + screen.set_visarea_full(); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); PALETTE(config, m_palette, FUNC(applix_state::applix_palette), 16); /* sound hardware */ @@ -918,7 +919,7 @@ MACHINE_CONFIG_START(applix_state::applix) FLOPPY_CONNECTOR(config, "fdc:0", applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true); FLOPPY_CONNECTOR(config, "fdc:1", applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true); TIMER(config, "applix_c").configure_periodic(FUNC(applix_state::cass_timer), attotime::from_hz(100000)); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( applix ) diff --git a/src/mame/drivers/apricot.cpp b/src/mame/drivers/apricot.cpp index b27900d1abe..9d605409ffc 100644 --- a/src/mame/drivers/apricot.cpp +++ b/src/mame/drivers/apricot.cpp @@ -212,7 +212,7 @@ READ8_MEMBER( apricot_state::sio_da_r ) if (m_bus_locked) return m_sio->m1_r(); - return m_sio->da_r(space, offset); + return m_sio->da_r(); } READ8_MEMBER( apricot_state::sio_ca_r ) @@ -220,7 +220,7 @@ READ8_MEMBER( apricot_state::sio_ca_r ) if (m_bus_locked) return m_sio->m1_r(); - return m_sio->ca_r(space, offset); + return m_sio->ca_r(); } READ8_MEMBER( apricot_state::sio_cb_r ) @@ -228,7 +228,7 @@ READ8_MEMBER( apricot_state::sio_cb_r ) if (m_bus_locked) return m_sio->m1_r(); - return m_sio->cb_r(space, offset); + return m_sio->cb_r(); } READ8_MEMBER( apricot_state::sio_db_r ) @@ -236,7 +236,7 @@ READ8_MEMBER( apricot_state::sio_db_r ) if (m_bus_locked) return m_sio->m1_r(); - return m_sio->db_r(space, offset); + return m_sio->db_r(); } diff --git a/src/mame/drivers/apricotf.cpp b/src/mame/drivers/apricotf.cpp index f94215f1183..93ec038ba5d 100644 --- a/src/mame/drivers/apricotf.cpp +++ b/src/mame/drivers/apricotf.cpp @@ -342,27 +342,28 @@ void apricotf_floppies(device_slot_interface &device) //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( act_f1 ) +// machine_config( act_f1 ) //------------------------------------------------- -MACHINE_CONFIG_START(f1_state::act_f1) +void f1_state::act_f1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(I8086_TAG, I8086, 14_MHz_XTAL / 4) - MCFG_DEVICE_PROGRAM_MAP(act_f1_mem) - MCFG_DEVICE_IO_MAP(act_f1_io) + I8086(config, m_maincpu, 14_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &f1_state::act_f1_mem); + m_maincpu->set_addrmap(AS_IO, &f1_state::act_f1_io); INPUT_MERGER_ANY_HIGH(config, "irqs").output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); /* video hardware */ - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(f1_state, screen_update) - MCFG_SCREEN_SIZE(640, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 16) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(f1_state::screen_update)); + screen.set_size(640, 256); + screen.set_visarea_full(); + screen.set_palette(m_palette); + + PALETTE(config, m_palette).set_entries(16); GFXDECODE(config, "gfxdecode", m_palette, gfx_act_f1); /* Devices */ @@ -389,7 +390,7 @@ MACHINE_CONFIG_START(f1_state::act_f1) FLOPPY_CONNECTOR(config, WD2797_TAG ":0", apricotf_floppies, "d32w", f1_state::floppy_formats); FLOPPY_CONNECTOR(config, WD2797_TAG ":1", apricotf_floppies, "d32w", f1_state::floppy_formats); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/apricotp.cpp b/src/mame/drivers/apricotp.cpp index 674fc70a5b7..2def89372c1 100644 --- a/src/mame/drivers/apricotp.cpp +++ b/src/mame/drivers/apricotp.cpp @@ -563,39 +563,40 @@ FLOPPY_FORMATS_END //------------------------------------------------- -// MACHINE_CONFIG( fp ) +// machine_config( fp ) //------------------------------------------------- -MACHINE_CONFIG_START(fp_state::fp) +void fp_state::fp(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(I8086_TAG, I8086, 15_MHz_XTAL / 3) - MCFG_DEVICE_PROGRAM_MAP(fp_mem) - MCFG_DEVICE_IO_MAP(fp_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(I8259A_TAG, pic8259_device, inta_cb) + I8086(config, m_maincpu, 15_MHz_XTAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &fp_state::fp_mem); + m_maincpu->set_addrmap(AS_IO, &fp_state::fp_io); + m_maincpu->set_irq_acknowledge_callback(I8259A_TAG, FUNC(pic8259_device::inta_cb)); - MCFG_DEVICE_ADD(HD63B01V1_TAG, HD6301, 2000000) - MCFG_DEVICE_PROGRAM_MAP(sound_mem) - MCFG_DEVICE_DISABLE() + HD6301(config, m_soundcpu, 2000000); + m_soundcpu->set_addrmap(AS_PROGRAM, &fp_state::sound_mem); + m_soundcpu->set_disable(); /* video hardware */ config.set_default_layout(layout_apricotp); - MCFG_SCREEN_ADD(SCREEN_LCD_TAG, LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(fp_state, screen_update) - MCFG_SCREEN_SIZE(640, 200) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_SCREEN_ADD(SCREEN_CRT_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update) - MCFG_SCREEN_SIZE(640, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1) - - MCFG_PALETTE_ADD("palette", 16) + screen_device &screen_lcd(SCREEN(config, SCREEN_LCD_TAG, SCREEN_TYPE_RASTER)); + screen_lcd.set_refresh_hz(50); + screen_lcd.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen_lcd.set_screen_update(FUNC(fp_state::screen_update)); + screen_lcd.set_size(640, 200); + screen_lcd.set_visarea_full(); + screen_lcd.set_palette("palette"); + + screen_device &screen_crt(SCREEN(config, SCREEN_CRT_TAG, SCREEN_TYPE_RASTER)); + screen_crt.set_refresh_hz(50); + screen_crt.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen_crt.set_screen_update(MC6845_TAG, FUNC(mc6845_device::screen_update)); + screen_crt.set_size(640, 256); + screen_crt.set_visarea_full(); + + PALETTE(config, "palette").set_entries(16); GFXDECODE(config, "gfxdecode", "palette", gfx_act_f1); MC6845(config, m_crtc, 4000000); @@ -606,8 +607,7 @@ MACHINE_CONFIG_START(fp_state::fp) // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(SN76489AN_TAG, SN76489A, 2000000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + SN76489A(config, SN76489AN_TAG, 2000000).add_route(ALL_OUTPUTS, "mono", 1.00); /* Devices */ APRICOT_KEYBOARD(config, APRICOT_KEYBOARD_TAG, 0); @@ -647,7 +647,7 @@ MACHINE_CONFIG_START(fp_state::fp) /* internal ram */ RAM(config, RAM_TAG).set_default_size("256K").set_extra_options("512K,1M"); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/aquarium.cpp b/src/mame/drivers/aquarium.cpp index bf714d07714..d4379d9181f 100644 --- a/src/mame/drivers/aquarium.cpp +++ b/src/mame/drivers/aquarium.cpp @@ -287,33 +287,33 @@ static GFXDECODE_START( gfx_aquarium ) GFXDECODE_ENTRY( "gfx4", 0, char5bpplayout, 0x400, 32 ) GFXDECODE_END -MACHINE_CONFIG_START(aquarium_state::aquarium) - +void aquarium_state::aquarium(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) // clock not verified on pcb - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", aquarium_state, irq1_line_hold) + M68000(config, m_maincpu, XTAL(32'000'000)/2); // clock not verified on pcb + m_maincpu->set_addrmap(AS_PROGRAM, &aquarium_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(aquarium_state::irq1_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/6) // clock not verified on pcb - MCFG_DEVICE_PROGRAM_MAP(snd_map) - MCFG_DEVICE_IO_MAP(snd_portmap) + Z80(config, m_audiocpu, XTAL(32'000'000)/6); // clock not verified on pcb + m_audiocpu->set_addrmap(AS_PROGRAM, &aquarium_state::snd_map); + m_audiocpu->set_addrmap(AS_IO, &aquarium_state::snd_portmap); // Is this the actual IC type? Some other Excellent games from this period use a MAX693. - MCFG_DEVICE_ADD("watchdog", MB3773, 0) + MB3773(config, m_watchdog, 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(2*8, 42*8-1, 2*8, 34*8-1) - MCFG_SCREEN_UPDATE_DRIVER(aquarium_state, screen_update_aquarium) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 64*8); + m_screen->set_visarea(2*8, 42*8-1, 2*8, 34*8-1); + m_screen->set_screen_update(FUNC(aquarium_state::screen_update_aquarium)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_aquarium); PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x1000/2); - MCFG_DEVICE_ADD("spritegen", EXCELLENT_SPRITE, 0) + EXCELLENT_SPRITE(config, m_sprgen, 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -328,10 +328,10 @@ MACHINE_CONFIG_START(aquarium_state::aquarium) ymsnd.add_route(0, "lspeaker", 0.45); ymsnd.add_route(1, "rspeaker", 0.45); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(1'056'000), okim6295_device::PIN7_HIGH) // pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(1'056'000), okim6295_device::PIN7_HIGH); // pin 7 not verified + m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.47); + m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.47); +} ROM_START( aquarium ) ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 code */ diff --git a/src/mame/drivers/arachnid.cpp b/src/mame/drivers/arachnid.cpp index a8c329f3187..fc63ada443a 100644 --- a/src/mame/drivers/arachnid.cpp +++ b/src/mame/drivers/arachnid.cpp @@ -420,13 +420,14 @@ void arachnid_state::machine_start() ***************************************************************************/ /*------------------------------------------------- - MACHINE_CONFIG_START( arachnid ) + machine_config( arachnid ) -------------------------------------------------*/ -MACHINE_CONFIG_START(arachnid_state::arachnid) +void arachnid_state::arachnid(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD(M6809_TAG, MC6809, 10.738635_MHz_XTAL / 3) - MCFG_DEVICE_PROGRAM_MAP(arachnid_map) + MC6809(config, m_maincpu, 10.738635_MHz_XTAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &arachnid_state::arachnid_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MK48Z02 (or DS1220Y) @@ -456,13 +457,12 @@ MACHINE_CONFIG_START(arachnid_state::arachnid) // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.0); ptm6840_device &ptm(PTM6840(config, PTM6840_TAG, 10.738635_MHz_XTAL / 3 / 4)); ptm.set_external_clocks(0, 0, 0); ptm.o1_callback().set(FUNC(arachnid_state::ptm_o1_callback)); -MACHINE_CONFIG_END +} /*************************************************************************** ROMS diff --git a/src/mame/drivers/arcadecl.cpp b/src/mame/drivers/arcadecl.cpp index 40b621c324f..28153da28e3 100644 --- a/src/mame/drivers/arcadecl.cpp +++ b/src/mame/drivers/arcadecl.cpp @@ -320,11 +320,11 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(sparkz_state::sparkz) - +void sparkz_state::sparkz(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, MASTER_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, MASTER_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &sparkz_state::main_map); EEPROM_2804(config, "eeprom").lock_after_write(true); @@ -336,21 +336,20 @@ MACHINE_CONFIG_START(sparkz_state::sparkz) palette.set_format(palette_device::IRGB_1555, 512); palette.set_membits(8); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/2, 456, 0+12, 336+12, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(sparkz_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, sparkz_state, video_int_write_line)) + m_screen->set_raw(MASTER_CLOCK/2, 456, 0+12, 336+12, 262, 0, 240); + m_screen->set_screen_update(FUNC(sparkz_state::screen_update)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(FUNC(sparkz_state::video_int_write_line)); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, MASTER_CLOCK/4/3, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, MASTER_CLOCK/4/3, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); +} void arcadecl_state::arcadecl(machine_config &config) { diff --git a/src/mame/drivers/argo.cpp b/src/mame/drivers/argo.cpp index 8cfe5601103..7b4eaa8eee0 100644 --- a/src/mame/drivers/argo.cpp +++ b/src/mame/drivers/argo.cpp @@ -350,20 +350,21 @@ uint32_t argo_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, return 0; } -MACHINE_CONFIG_START(argo_state::argo) +void argo_state::argo(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 3500000) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, 3500000); + m_maincpu->set_addrmap(AS_PROGRAM, &argo_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &argo_state::io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(argo_state, screen_update) - MCFG_SCREEN_SIZE(640, 250) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(argo_state::screen_update)); + screen.set_size(640, 250); + screen.set_visarea_full(); +} /* ROM definition */ ROM_START( argo ) diff --git a/src/mame/drivers/argox.cpp b/src/mame/drivers/argox.cpp index d24fde057ca..964895d77a8 100644 --- a/src/mame/drivers/argox.cpp +++ b/src/mame/drivers/argox.cpp @@ -71,13 +71,14 @@ void os214_state::os214_io_map(address_map &map) // ADDRESS_MAP_GLOBAL_MASK(0xff) } -MACHINE_CONFIG_START(os214_state::os214) +void os214_state::os214(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", H83002, XTAL(16'000'000)) /* X1 xtal value is correct, + H83002(config, m_maincpu, XTAL(16'000'000)); /* X1 xtal value is correct, but there can be some clock divider perhaps ? */ - MCFG_DEVICE_PROGRAM_MAP(os214_prg_map) - MCFG_DEVICE_IO_MAP(os214_io_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &os214_state::os214_prg_map); + m_maincpu->set_addrmap(AS_IO, &os214_state::os214_io_map); +} void os214_state::init_os214() { diff --git a/src/mame/drivers/arkanoid.cpp b/src/mame/drivers/arkanoid.cpp index 35264d11775..d2ef042afe2 100644 --- a/src/mame/drivers/arkanoid.cpp +++ b/src/mame/drivers/arkanoid.cpp @@ -1344,12 +1344,12 @@ Pixel clock: 3 MHz = 192 HTotal, assuming it's 6 MHz #define ARKANOID_VBEND 16 #define ARKANOID_VBSTART 240 -MACHINE_CONFIG_START(arkanoid_state::arkanoid) - +void arkanoid_state::arkanoid(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(arkanoid_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(12'000'000)/2); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::arkanoid_map); + m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold)); WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 128); // 74LS393 at ic21, counts 128 vblanks before firing watchdog; z80 /RESET ls08 ic19 pin 9 input comes from ls04 ic20 pin 8, ls04 ic20 pin 9 input comes from ic21 ls393 pin 8, and ls393 is set to chain both 4 bit counters together @@ -1359,14 +1359,14 @@ MACHINE_CONFIG_START(arkanoid_state::arkanoid) config.m_minimum_quantum = attotime::from_hz(6000); // 100 CPU slices per second to synchronize between the MCU and the main CPU /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_RAW_PARAMS(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(arkanoid_state, screen_update_arkanoid) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_raw(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART); + screen.set_screen_update(FUNC(arkanoid_state::screen_update_arkanoid)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_arkanoid); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512); @@ -1379,7 +1379,7 @@ MACHINE_CONFIG_START(arkanoid_state::arkanoid) aysnd.port_a_read_callback().set_ioport("UNUSED"); aysnd.port_b_read_callback().set_ioport("DSW"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.66); -MACHINE_CONFIG_END +} void arkanoid_state::p3mcu(machine_config &config) { @@ -1401,15 +1401,15 @@ void arkanoid_state::p3mcuay(machine_config &config) aysnd.add_route(ALL_OUTPUTS, "mono", 0.66); } -MACHINE_CONFIG_START(arkanoid_state::bootleg) +void arkanoid_state::bootleg(machine_config &config) +{ arkanoid(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bootleg_map) + m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::bootleg_map); config.device_remove("mcu"); -MACHINE_CONFIG_END +} void arkanoid_state::aysnd(machine_config &config) { @@ -1423,24 +1423,24 @@ void arkanoid_state::aysnd(machine_config &config) } -MACHINE_CONFIG_START(arkanoid_state::hexa) - +void arkanoid_state::hexa(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/2) /* Imported from arkanoid - correct? */ - MCFG_DEVICE_PROGRAM_MAP(hexa_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(12'000'000)/2); /* Imported from arkanoid - correct? */ + m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::hexa_map); + m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold)); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_RAW_PARAMS(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(arkanoid_state, screen_update_hexa) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_raw(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART); + screen.set_screen_update(FUNC(arkanoid_state::screen_update_hexa)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_hexa); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256); @@ -1451,39 +1451,39 @@ MACHINE_CONFIG_START(arkanoid_state::hexa) aysnd.port_a_read_callback().set_ioport("INPUTS"); aysnd.port_b_read_callback().set_ioport("DSW"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(arkanoid_state::hexaa) +void arkanoid_state::hexaa(machine_config &config) +{ hexa(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(hexaa_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold) - - MCFG_DEVICE_ADD("subcpu", Z80, XTAL(12'000'000)/2) // ? - MCFG_DEVICE_PROGRAM_MAP(hexaa_sub_map) - MCFG_DEVICE_IO_MAP(hexaa_sub_iomap) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::hexaa_map); + m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold)); + z80_device &subcpu(Z80(config, "subcpu", XTAL(12'000'000)/2)); // ? + subcpu.set_addrmap(AS_PROGRAM, &arkanoid_state::hexaa_sub_map); + subcpu.set_addrmap(AS_IO, &arkanoid_state::hexaa_sub_iomap); +} -MACHINE_CONFIG_START(arkanoid_state::brixian) +void arkanoid_state::brixian(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(brixian_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", arkanoid_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(12'000'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &arkanoid_state::brixian_map); + m_maincpu->set_vblank_int("screen", FUNC(arkanoid_state::irq0_line_hold)); /* there is a 68705 but it's only role appears to be to copy data to RAM at startup */ /* the RAM is also battery backed, making the 68705 almost redundant as long as the battery doesn't die(!) */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_RAW_PARAMS(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(arkanoid_state, screen_update_hexa) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_raw(ARKANOID_PIXEL_CLOCK,ARKANOID_HTOTAL,ARKANOID_HBEND,ARKANOID_HBSTART,ARKANOID_VTOTAL,ARKANOID_VBEND,ARKANOID_VBSTART); + screen.set_screen_update(FUNC(arkanoid_state::screen_update_hexa)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_arkanoid); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512); @@ -1494,7 +1494,7 @@ MACHINE_CONFIG_START(arkanoid_state::brixian) aysnd.port_a_read_callback().set_ioport("INPUTS"); aysnd.port_b_read_callback().set_ioport("DSW"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/armedf.cpp b/src/mame/drivers/armedf.cpp index 650cef1b339..7c030762afa 100644 --- a/src/mame/drivers/armedf.cpp +++ b/src/mame/drivers/armedf.cpp @@ -391,12 +391,12 @@ WRITE16_MEMBER(armedf_state::bootleg_io_w) WRITE16_MEMBER(armedf_state::sound_command_w) { if (ACCESSING_BITS_0_7) - m_soundlatch->write(space, 0, ((data & 0x7f) << 1) | 1); + m_soundlatch->write(((data & 0x7f) << 1) | 1); } READ8_MEMBER(armedf_state::soundlatch_clear_r) { - m_soundlatch->clear_w(space, 0, 0); + m_soundlatch->clear_w(); return 0; } @@ -1271,26 +1271,26 @@ void armedf_state::terraf_sound(machine_config &config) vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); } -MACHINE_CONFIG_START(armedf_state::terraf) - +void armedf_state::terraf(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz? - MCFG_DEVICE_PROGRAM_MAP(terraf_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz? + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terraf_map); + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert)); - MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) + NB1414M4(config, m_nb1414m4, 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 ); + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1299,35 +1299,35 @@ MACHINE_CONFIG_START(armedf_state::terraf) /* sound hardware */ terraf_sound(config); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(armedf_state::terrafjb) +} +void armedf_state::terrafjb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz - MCFG_DEVICE_PROGRAM_MAP(terraf_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terraf_map); + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_portmap) - MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ? + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz + audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::sound_map); + audiocpu.set_addrmap(AS_IO, &armedf_state::sound_portmap); + audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ? - MCFG_DEVICE_ADD("extra", Z80, XTAL(16'000'000)/4) // 4mhz? - MCFG_DEVICE_PROGRAM_MAP(terrafjb_extraz80_map) - MCFG_DEVICE_IO_MAP(terrafjb_extraz80_portmap) + Z80(config, m_extra, XTAL(16'000'000)/4); // 4mhz? + m_extra->set_addrmap(AS_PROGRAM, &armedf_state::terrafjb_extraz80_map); + m_extra->set_addrmap(AS_IO, &armedf_state::terrafjb_extraz80_portmap); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 ); + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1339,15 +1339,14 @@ MACHINE_CONFIG_START(armedf_state::terrafjb) GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // 4mhz - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) + YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // 4mhz DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); // unknown DAC DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} void armedf_state::terrafb(machine_config &config) { @@ -1355,26 +1354,26 @@ void armedf_state::terrafb(machine_config &config) config.device_remove("nb1414m4"); } -MACHINE_CONFIG_START(armedf_state::kozure) - +void armedf_state::kozure(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz - MCFG_DEVICE_PROGRAM_MAP(kozure_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::kozure_map); + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert)); - MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) + NB1414M4(config, m_nb1414m4, 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 ) // 320 x 240, trusted - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 ); // 320 x 240, trusted + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1383,31 +1382,31 @@ MACHINE_CONFIG_START(armedf_state::kozure) /* sound hardware */ terraf_sound(config); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(armedf_state::armedf) +} +void armedf_state::armedf(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz - MCFG_DEVICE_PROGRAM_MAP(armedf_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::armedf_map); + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_portmap) - MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ? + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz + audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::sound_map); + audiocpu.set_addrmap(AS_IO, &armedf_state::sound_portmap); + audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(12*8, (64-12)*8-1, 1*8, 31*8-1 ); + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,armedf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1419,41 +1418,40 @@ MACHINE_CONFIG_START(armedf_state::armedf) GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // 4mhz - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) + YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // 4mhz DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(armedf_state::cclimbr2) +} +void armedf_state::cclimbr2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz - MCFG_DEVICE_PROGRAM_MAP(cclimbr2_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq2_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::cclimbr2_map); + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq2_line_assert)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz - MCFG_DEVICE_PROGRAM_MAP(cclimbr2_soundmap) - MCFG_DEVICE_IO_MAP(sound_portmap) - MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ? + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz + audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::cclimbr2_soundmap); + audiocpu.set_addrmap(AS_IO, &armedf_state::sound_portmap); + audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ? - MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) + NB1414M4(config, m_nb1414m4, 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1 ); + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1465,36 +1463,36 @@ MACHINE_CONFIG_START(armedf_state::cclimbr2) GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // or YM3526? - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) + YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // or YM3526? DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(armedf_state::legion_common) +void armedf_state::legion_common(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // 8mhz - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq2_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq2_line_assert)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) // 4mhz - MCFG_DEVICE_PROGRAM_MAP(cclimbr2_soundmap) - MCFG_DEVICE_PERIODIC_INT_DRIVER(armedf_state, irq0_line_hold, XTAL(8'000'000)/2/512) // ? + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz + audiocpu.set_addrmap(AS_PROGRAM, &armedf_state::cclimbr2_soundmap); + audiocpu.set_periodic_int(FUNC(armedf_state::irq0_line_hold), attotime::from_hz(XTAL(8'000'000)/2/512)); // ? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1 ); + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,terraf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1511,48 +1509,45 @@ MACHINE_CONFIG_START(armedf_state::legion_common) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT).add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(armedf_state::legion) +void armedf_state::legion(machine_config &config) +{ legion_common(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(legion_map) + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::legion_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_IO_MAP(sound_3526_portmap) + subdevice<z80_device>("audiocpu")->set_addrmap(AS_IO, &armedf_state::sound_3526_portmap); - MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) + NB1414M4(config, m_nb1414m4, 0); - MCFG_DEVICE_ADD("ymsnd", YM3526, XTAL(24'000'000)/6) // 4mhz - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) -MACHINE_CONFIG_END + YM3526(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // 4mhz +} -MACHINE_CONFIG_START(armedf_state::legionjb) +void armedf_state::legionjb(machine_config &config) +{ legion_common(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(legionjb_map) + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::legionjb_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_IO_MAP(sound_portmap) + subdevice<z80_device>("audiocpu")->set_addrmap(AS_IO, &armedf_state::sound_portmap); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(24'000'000)/6) // or YM3526? - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) -MACHINE_CONFIG_END + YM3812(config, "ymsnd", XTAL(24'000'000)/6).add_route(ALL_OUTPUTS, "speaker", 0.5); // or YM3526? +} -MACHINE_CONFIG_START(armedf_state::legionjb2) +void armedf_state::legionjb2(machine_config &config) +{ legionjb(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(legionjb2_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::legionjb2_map); +} -MACHINE_CONFIG_START(bigfghtr_state::bigfghtr) +void bigfghtr_state::bigfghtr(machine_config &config) +{ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) // verified - MCFG_DEVICE_PROGRAM_MAP(bigfghtr_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", armedf_state, irq1_line_assert) + M68000(config, m_maincpu, XTAL(16'000'000)/2); // verified + m_maincpu->set_addrmap(AS_PROGRAM, &bigfghtr_state::bigfghtr_map); + m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert)); i8751_device &mcu(I8751(config, "mcu", XTAL(16'000'000)/2)); // verified mcu.set_addrmap(AS_PROGRAM, &bigfghtr_state::bigfghtr_mcu_map); @@ -1560,13 +1555,13 @@ MACHINE_CONFIG_START(bigfghtr_state::bigfghtr) mcu.port_in_cb<1>().set_constant(0xdf); // bit 5: bus contention related? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(16'000'000)/2,531,12*8,(64-12)*8, 254, 1*8, 31*8) // guess, matches 59.3 Hz from reference - measured at 59.1358Hz - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(XTAL(16'000'000)/2,531,12*8,(64-12)*8, 254, 1*8, 31*8); // guess, matches 59.3 Hz from reference - measured at 59.1358Hz + screen.set_palette(m_palette); + screen.set_screen_update(FUNC(armedf_state::screen_update_armedf)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); MCFG_VIDEO_START_OVERRIDE(armedf_state,armedf) - MCFG_SCREEN_UPDATE_DRIVER(armedf_state, screen_update_armedf) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 2048); @@ -1575,7 +1570,7 @@ MACHINE_CONFIG_START(bigfghtr_state::bigfghtr) /* sound hardware */ terraf_sound(config); -MACHINE_CONFIG_END +} /************************************* * diff --git a/src/mame/drivers/arsystems.cpp b/src/mame/drivers/arsystems.cpp index f34be720572..8fffdfb3f08 100644 --- a/src/mame/drivers/arsystems.cpp +++ b/src/mame/drivers/arsystems.cpp @@ -300,11 +300,11 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(arcadia_amiga_state::arcadia) - +void arcadia_amiga_state::arcadia(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_NTSC) - MCFG_DEVICE_PROGRAM_MAP(arcadia_map) + M68000(config, m_maincpu, amiga_state::CLK_7M_NTSC); + m_maincpu->set_addrmap(AS_PROGRAM, &arcadia_amiga_state::arcadia_map); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000); @@ -321,13 +321,13 @@ MACHINE_CONFIG_START(arcadia_amiga_state::arcadia) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - paula_8364_device &paula(PAULA_8364(config, "amiga", amiga_state::CLK_C1_NTSC)); - paula.add_route(0, "lspeaker", 0.50); - paula.add_route(1, "rspeaker", 0.50); - paula.add_route(2, "rspeaker", 0.50); - paula.add_route(3, "lspeaker", 0.50); - paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); - paula.int_cb().set(FUNC(amiga_state::paula_int_w)); + PAULA_8364(config, m_paula, amiga_state::CLK_C1_NTSC); + m_paula->add_route(0, "lspeaker", 0.50); + m_paula->add_route(1, "rspeaker", 0.50); + m_paula->add_route(2, "rspeaker", 0.50); + m_paula->add_route(3, "lspeaker", 0.50); + m_paula->mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); + m_paula->int_cb().set(FUNC(amiga_state::paula_int_w)); /* cia */ MOS8520(config, m_cia_0, amiga_state::CLK_E_NTSC); @@ -347,15 +347,15 @@ MACHINE_CONFIG_START(arcadia_amiga_state::arcadia) m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w)); m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w)); m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(arcadia_amiga_state::argh) +void arcadia_amiga_state::argh(machine_config &config) +{ arcadia(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(argh_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &arcadia_amiga_state::argh_map); +} /************************************* diff --git a/src/mame/drivers/artmagic.cpp b/src/mame/drivers/artmagic.cpp index 74405910caa..79548718334 100644 --- a/src/mame/drivers/artmagic.cpp +++ b/src/mame/drivers/artmagic.cpp @@ -804,8 +804,8 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(artmagic_state::artmagic) - +void artmagic_state::artmagic(machine_config &config) +{ /* basic machine hardware */ M68000(config, m_maincpu, MASTER_CLOCK_25MHz/2); m_maincpu->set_addrmap(AS_PROGRAM, &artmagic_state::main_map); @@ -827,40 +827,37 @@ MACHINE_CONFIG_START(artmagic_state::artmagic) /* video hardware */ TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_40MHz/6, 428, 0, 320, 313, 0, 256) - MCFG_SCREEN_UPDATE_DEVICE("tms", tms34010_device, tms340x0_rgb32) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(MASTER_CLOCK_40MHz/6, 428, 0, 320, 313, 0, 256); + screen.set_screen_update("tms", FUNC(tms34010_device::tms340x0_rgb32)); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, MASTER_CLOCK_40MHz/3/10, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.65) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, MASTER_CLOCK_40MHz/3/10, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.65); +} -MACHINE_CONFIG_START(artmagic_state::cheesech) +void artmagic_state::cheesech(machine_config &config) +{ artmagic(config); - MCFG_DEVICE_MODIFY("oki") - MCFG_SOUND_ROUTES_RESET() - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + m_oki->reset_routes(); + m_oki->add_route(ALL_OUTPUTS, "mono", 1.0); +} -MACHINE_CONFIG_START(artmagic_state::stonebal) +void artmagic_state::stonebal(machine_config &config) +{ artmagic(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(stonebal_map) + m_maincpu->set_addrmap(AS_PROGRAM, &artmagic_state::stonebal_map); - MCFG_DEVICE_MODIFY("tms") - MCFG_DEVICE_PROGRAM_MAP(stonebal_tms_map) + m_tms->set_addrmap(AS_PROGRAM, &artmagic_state::stonebal_tms_map); - MCFG_DEVICE_MODIFY("oki") - MCFG_SOUND_ROUTES_RESET() - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45) -MACHINE_CONFIG_END + m_oki->reset_routes(); + m_oki->add_route(ALL_OUTPUTS, "mono", 0.45); +} void artmagic_state::shtstar(machine_config &config) { diff --git a/src/mame/drivers/asst128.cpp b/src/mame/drivers/asst128.cpp index f07914d5fe2..2de3a578e95 100644 --- a/src/mame/drivers/asst128.cpp +++ b/src/mame/drivers/asst128.cpp @@ -102,21 +102,22 @@ static DEVICE_INPUT_DEFAULTS_START( asst128 ) DEVICE_INPUT_DEFAULTS("DSW0", 0x30, 0x20) DEVICE_INPUT_DEFAULTS_END -MACHINE_CONFIG_START(asst128_state::asst128) - MCFG_DEVICE_ADD("maincpu", I8086, 4772720) - MCFG_DEVICE_PROGRAM_MAP(asst128_map) - MCFG_DEVICE_IO_MAP(asst128_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb) +void asst128_state::asst128(machine_config &config) +{ + I8086(config, m_maincpu, 4772720); + m_maincpu->set_addrmap(AS_PROGRAM, &asst128_state::asst128_map); + m_maincpu->set_addrmap(AS_IO, &asst128_state::asst128_io); + m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - MCFG_DEVICE_ADD("mb", ASST128_MOTHERBOARD, 0) - downcast<asst128_mb_device &>(*device).set_cputag("maincpu"); - MCFG_DEVICE_INPUT_DEFAULTS(asst128) + asst128_mb_device &mb(ASST128_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(asst128)); subdevice<cassette_image_device>("mb:cassette")->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); // FIXME: determine ISA bus clock - MCFG_DEVICE_ADD("board0", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "cga_mc1502", true) - MCFG_DEVICE_ADD("board1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "lpt", true) + ISA8_SLOT(config, "board0", 0, "mb:isa", pc_isa8_cards, "cga_mc1502", true); + ISA8_SLOT(config, "board1", 0, "mb:isa", pc_isa8_cards, "lpt", true); PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); @@ -128,7 +129,7 @@ MACHINE_CONFIG_START(asst128_state::asst128) PC_JOY(config, "pc_joy"); RAM(config, RAM_TAG).set_default_size("512K").set_extra_options("64K, 128K, 256K"); -MACHINE_CONFIG_END +} ROM_START( asst128 ) ROM_REGION16_LE(0x10000,"bios", 0) diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp index 6fb6fe5fb9a..53145eec6bf 100644 --- a/src/mame/drivers/asteroid.cpp +++ b/src/mame/drivers/asteroid.cpp @@ -811,18 +811,18 @@ void asteroid_state::astdelux(machine_config &config) } -MACHINE_CONFIG_START(asteroid_state::llander) +void asteroid_state::llander(machine_config &config) +{ asteroid_base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(llander_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, MASTER_CLOCK/4096/12) + m_maincpu->set_addrmap(AS_PROGRAM, &asteroid_state::llander_map); + m_maincpu->set_periodic_int(FUNC(asteroid_state::llander_interrupt), attotime::from_hz(MASTER_CLOCK/4096/12)); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6) - MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070) - MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update) + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_refresh_hz(CLOCK_3KHZ/12/6); + screen.set_visarea(522, 1566, 270, 1070); + screen.set_screen_update("vector", FUNC(vector_device::screen_update)); output_latch_device &outlatch(*subdevice<output_latch_device>("outlatch")); // LS174 at N11 outlatch.bit_handler<0>().set_output("lamp4"); // LAMP5 (COMMAND MISSION) @@ -834,7 +834,7 @@ MACHINE_CONFIG_START(asteroid_state::llander) /* sound hardware */ llander_sound(config); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/astrafr.cpp b/src/mame/drivers/astrafr.cpp index dd80d010adb..1ad452a5c66 100644 --- a/src/mame/drivers/astrafr.cpp +++ b/src/mame/drivers/astrafr.cpp @@ -311,7 +311,8 @@ MACHINE_START_MEMBER(astrafr_state,astra_2e) } -MACHINE_CONFIG_START(astrafr_state::astrafr_dual) +void astrafr_state::astrafr_dual(machine_config &config) +{ M68340(config, m_maincpu, 16000000); m_maincpu->set_addrmap(AS_PROGRAM, &astrafr_state::astrafr_master_map); @@ -319,17 +320,19 @@ MACHINE_CONFIG_START(astrafr_state::astrafr_dual) m_slavecpu->set_addrmap(AS_PROGRAM, &astrafr_state::astrafr_slave_map); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_common ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astrafr_dual_2e) +void astrafr_state::astrafr_dual_2e(machine_config &config) +{ astrafr_dual(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_2e ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astrafr_dual_37) +void astrafr_state::astrafr_dual_37(machine_config &config) +{ astrafr_dual(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 ) -MACHINE_CONFIG_END +} void astrafr_state::astrafr_dual_alt(machine_config &config) { @@ -340,28 +343,32 @@ void astrafr_state::astrafr_dual_alt(machine_config &config) m_slavecpu->set_addrmap(AS_PROGRAM, &astrafr_state::astrafr_slave_map); } -MACHINE_CONFIG_START(astrafr_state::astrafr_dual_alt_37) +void astrafr_state::astrafr_dual_alt_37(machine_config &config) +{ astrafr_dual_alt(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astra_single) +void astrafr_state::astra_single(machine_config &config) +{ M68340(config, m_maincpu, 16000000); m_maincpu->set_addrmap(AS_PROGRAM, &astrafr_state::astra_map); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_common ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astra_single_37) +void astrafr_state::astra_single_37(machine_config &config) +{ astra_single(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astra_single_2e) +void astrafr_state::astra_single_2e(machine_config &config) +{ astra_single(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_2e ) -MACHINE_CONFIG_END +} MACHINE_START_MEMBER(astrafr_state,astra_57) { @@ -372,21 +379,24 @@ MACHINE_START_MEMBER(astrafr_state,astra_57) } -MACHINE_CONFIG_START(astrafr_state::astra_single_alt) +void astrafr_state::astra_single_alt(machine_config &config) +{ M68340(config, m_maincpu, 16000000); m_maincpu->set_addrmap(AS_PROGRAM, &astrafr_state::astra_map); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_common ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astra_single_alt_57) +void astrafr_state::astra_single_alt_57(machine_config &config) +{ astra_single_alt(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_57 ) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrafr_state::astra_single_alt_37) +void astrafr_state::astra_single_alt_37(machine_config &config) +{ astra_single_alt(config); MCFG_MACHINE_START_OVERRIDE(astrafr_state, astra_37 ) -MACHINE_CONFIG_END +} /* are the ptM roms Master and ptS roms Slave? or is as_partyd set actually the master, with the larger roms? diff --git a/src/mame/drivers/astrcorp.cpp b/src/mame/drivers/astrcorp.cpp index d36fc131700..3a106ec783a 100644 --- a/src/mame/drivers/astrcorp.cpp +++ b/src/mame/drivers/astrcorp.cpp @@ -544,26 +544,26 @@ TODO: understand if later hardware uses different parameters (XTAL is almost sur #define ASTROCORP_VBEND 0 #define ASTROCORP_VBSTART 240 -MACHINE_CONFIG_START(astrocorp_state::showhand) - +void astrocorp_state::showhand(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(showhand_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", astrocorp_state, irq4_line_hold) + M68000(config, m_maincpu, XTAL(20'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::showhand_map); + m_maincpu->set_vblank_int("screen", FUNC(astrocorp_state::irq4_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); EEPROM_93C46_16BIT(config, "eeprom").default_data(showhand_default_eeprom, sizeof(showhand_default_eeprom)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(58.846) // measured on pcb -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) -// MCFG_SCREEN_SIZE(320, 240) -// MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) - MCFG_SCREEN_RAW_PARAMS(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,320,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(astrocorp_state, screen_update_astrocorp) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); +// m_screen->set_refresh_hz(58.846); // measured on pcb +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); +// m_screen->set_size(320, 240); +// m_screen->set_visarea_full(); + m_screen->set_raw(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,320,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART); + m_screen->set_screen_update(FUNC(astrocorp_state::screen_update_astrocorp)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrocorp); PALETTE(config, m_palette).set_format(palette_device::BGR_565, 0x100); @@ -571,16 +571,15 @@ MACHINE_CONFIG_START(astrocorp_state::showhand) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(20'000'000)/20, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(20'000'000)/20, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); +} -MACHINE_CONFIG_START(astrocorp_state::showhanc) +void astrocorp_state::showhanc(machine_config &config) +{ showhand(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(showhanc_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::showhanc_map); +} TIMER_DEVICE_CALLBACK_MEMBER(astrocorp_state::skilldrp_scanline) @@ -594,11 +593,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(astrocorp_state::skilldrp_scanline) m_maincpu->set_input_line(2, HOLD_LINE); } -MACHINE_CONFIG_START(astrocorp_state::skilldrp) - +void astrocorp_state::skilldrp(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) // JX-1689F1028N GRX586.V5 - MCFG_DEVICE_PROGRAM_MAP(skilldrp_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); // JX-1689F1028N GRX586.V5 + m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::skilldrp_map); TIMER(config, "scantimer").configure_scanline(FUNC(astrocorp_state::skilldrp_scanline), "screen", 0, 1); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -608,14 +607,14 @@ MACHINE_CONFIG_START(astrocorp_state::skilldrp) TICKET_DISPENSER(config, m_hopper, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(58.846) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) -// MCFG_SCREEN_SIZE(0x200, 0x100) -// MCFG_SCREEN_VISIBLE_AREA(0, 0x200-1, 0, 0xf0-1) - MCFG_SCREEN_RAW_PARAMS(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,512,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(astrocorp_state, screen_update_astrocorp) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); +// m_screen->set_refresh_hz(58.846); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); +// m_screen->set_size(0x200, 0x100); +// m_screen->set_visarea(0, 0x200-1, 0, 0xf0-1); + m_screen->set_raw(ASTROCORP_PIXEL_CLOCK,ASTROCORP_HTOTAL,ASTROCORP_HBEND,512,ASTROCORP_VTOTAL,ASTROCORP_VBEND,ASTROCORP_VBSTART); + m_screen->set_screen_update(FUNC(astrocorp_state::screen_update_astrocorp)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrocorp); PALETTE(config, m_palette).set_format(palette_device::BGR_565, 0x100); @@ -623,16 +622,15 @@ MACHINE_CONFIG_START(astrocorp_state::skilldrp) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(24'000'000)/24, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(24'000'000)/24, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); +} -MACHINE_CONFIG_START(astrocorp_state::speeddrp) +void astrocorp_state::speeddrp(machine_config &config) +{ skilldrp(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(speeddrp_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &astrocorp_state::speeddrp_map); +} /*************************************************************************** diff --git a/src/mame/drivers/astrof.cpp b/src/mame/drivers/astrof.cpp index 44cb8ea63e4..7864d161b7c 100644 --- a/src/mame/drivers/astrof.cpp +++ b/src/mame/drivers/astrof.cpp @@ -926,68 +926,66 @@ void astrof_state::base(machine_config &config) } -MACHINE_CONFIG_START(astrof_state::astrof) +void astrof_state::astrof(machine_config &config) +{ base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(astrof_map) + m_maincpu->set_addrmap(AS_PROGRAM, &astrof_state::astrof_map); MCFG_MACHINE_START_OVERRIDE(astrof_state,astrof) /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(astrof_state, screen_update_astrof) + m_screen->set_screen_update(FUNC(astrof_state::screen_update_astrof)); /* audio hardware */ astrof_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrof_state::abattle) +void astrof_state::abattle(machine_config &config) +{ astrof(config); /* basic machine hardware */ MCFG_MACHINE_START_OVERRIDE(astrof_state,abattle) MCFG_MACHINE_RESET_OVERRIDE(astrof_state,abattle) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrof_state::spfghmk2) +void astrof_state::spfghmk2(machine_config &config) +{ base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(spfghmk2_map) + m_maincpu->set_addrmap(AS_PROGRAM, &astrof_state::spfghmk2_map); MCFG_MACHINE_START_OVERRIDE(astrof_state,spfghmk2) /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(astrof_state, screen_update_astrof) + m_screen->set_screen_update(FUNC(astrof_state::screen_update_astrof)); /* audio hardware */ spfghmk2_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(astrof_state::tomahawk) +void astrof_state::tomahawk(machine_config &config) +{ base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(tomahawk_map) + m_maincpu->set_addrmap(AS_PROGRAM, &astrof_state::tomahawk_map); MCFG_MACHINE_START_OVERRIDE(astrof_state,tomahawk) /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(astrof_state, screen_update_tomahawk) + m_screen->set_screen_update(FUNC(astrof_state::screen_update_tomahawk)); /* audio hardware */ tomahawk_audio(config); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/astrohome.cpp b/src/mame/drivers/astrohome.cpp index b04948e5487..b4e49c93224 100644 --- a/src/mame/drivers/astrohome.cpp +++ b/src/mame/drivers/astrohome.cpp @@ -18,6 +18,7 @@ #include "bus/astrocde/exp.h" #include "bus/astrocde/ram.h" #include "bus/astrocde/ctrl.h" +#include "bus/astrocde/accessory.h" #include "softlist.h" #include "speaker.h" @@ -31,6 +32,7 @@ public: , m_cart(*this, "cartslot") , m_exp(*this, "exp") , m_ctrl(*this, "ctrl%u", 1U) + , m_accessory(*this, "accessory") , m_keypad(*this, "KEYPAD%u", 0U) { } @@ -45,6 +47,7 @@ private: required_device<astrocade_cart_slot_device> m_cart; required_device<astrocade_exp_device> m_exp; required_device_array<astrocade_ctrl_port_device, 4> m_ctrl; + required_device<astrocade_accessory_port_device> m_accessory; required_ioport_array<4> m_keypad; }; @@ -181,6 +184,8 @@ void astrocde_home_state::astrocde(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &astrocde_home_state::astrocade_mem); m_maincpu->set_addrmap(AS_IO, &astrocde_home_state::astrocade_io); + config.m_perfect_cpu_quantum = subtag("maincpu"); + MCFG_MACHINE_START_OVERRIDE(astrocde_home_state, astrocde) /* video hardware */ @@ -192,10 +197,11 @@ void astrocde_home_state::astrocde(machine_config &config) PALETTE(config, "palette", FUNC(astrocde_home_state::astrocade_palette), 512); /* control ports */ - ASTROCADE_CTRL_PORT(config, m_ctrl[0], astrocade_controllers, "joy"); - ASTROCADE_CTRL_PORT(config, m_ctrl[1], astrocade_controllers, nullptr); - ASTROCADE_CTRL_PORT(config, m_ctrl[2], astrocade_controllers, nullptr); - ASTROCADE_CTRL_PORT(config, m_ctrl[3], astrocade_controllers, nullptr); + for (uint32_t port = 0; port < 4; port++) + { + ASTROCADE_CTRL_PORT(config, m_ctrl[port], astrocade_controllers, port == 0 ? "joy" : nullptr); + m_ctrl[port]->ltpen_handler().set(FUNC(astrocde_home_state::lightpen_trigger_w)); + } /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -213,6 +219,10 @@ void astrocde_home_state::astrocde(machine_config &config) /* cartridge */ ASTROCADE_CART_SLOT(config, m_cart, astrocade_cart, nullptr); + /* cartridge */ + ASTROCADE_ACCESSORY_PORT(config, m_accessory, m_screen, astrocade_accessories, nullptr); + m_accessory->ltpen_handler().set(FUNC(astrocde_home_state::lightpen_trigger_w)); + /* Software lists */ SOFTWARE_LIST(config, "cart_list").set_original("astrocde"); } @@ -247,7 +257,7 @@ ROM_END void astrocde_state::init_astrocde() { - m_video_config = AC_SOUND_PRESENT | AC_LIGHTPEN_INTS; + m_video_config = AC_SOUND_PRESENT; } MACHINE_START_MEMBER(astrocde_home_state, astrocde) @@ -258,7 +268,10 @@ MACHINE_START_MEMBER(astrocde_home_state, astrocde) // if no RAM is mounted and the handlers are installed, the system starts with garbage on screen and a RESET is necessary // thus, install RAM only if an expansion is mounted if (m_exp->get_card_mounted()) + { m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x5000, 0xffff, read8_delegate(FUNC(astrocade_exp_device::read),(astrocade_exp_device*)m_exp), write8_delegate(FUNC(astrocade_exp_device::write),(astrocade_exp_device*)m_exp)); + m_maincpu->space(AS_IO).install_readwrite_handler(0x0080, 0x00ff, 0x0000, 0x0000, 0xff00, read8_delegate(FUNC(astrocade_exp_device::read_io),(astrocade_exp_device*)m_exp), write8_delegate(FUNC(astrocade_exp_device::write_io),(astrocade_exp_device*)m_exp)); + } } /************************************* diff --git a/src/mame/drivers/astropc.cpp b/src/mame/drivers/astropc.cpp index 810a97b111c..f9fd2241caa 100644 --- a/src/mame/drivers/astropc.cpp +++ b/src/mame/drivers/astropc.cpp @@ -51,12 +51,13 @@ INPUT_PORTS_END -MACHINE_CONFIG_START(astropc_state::astropc) +void astropc_state::astropc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I486, 40000000 ) // ?? - MCFG_DEVICE_PROGRAM_MAP(astropc_map) - MCFG_DEVICE_IO_MAP(astropc_io) -MACHINE_CONFIG_END + I486(config, m_maincpu, 40000000 ); // ?? + m_maincpu->set_addrmap(AS_PROGRAM, &astropc_state::astropc_map); + m_maincpu->set_addrmap(AS_IO, &astropc_state::astropc_io); +} ROM_START( blackbd ) diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 5a56bfb3429..4e6dabd9abc 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -275,7 +275,7 @@ WRITE_LINE_MEMBER(asuka_state::asuka_msm5205_vck) if (m_adpcm_ff) { - m_adpcm_select->write_ba(m_sound_data[m_adpcm_pos]); + m_adpcm_select->ba_w(m_sound_data[m_adpcm_pos]); m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff; } } diff --git a/src/mame/drivers/atarifb.cpp b/src/mame/drivers/atarifb.cpp index fb0f6ad1a47..127bfcbab2b 100644 --- a/src/mame/drivers/atarifb.cpp +++ b/src/mame/drivers/atarifb.cpp @@ -557,23 +557,23 @@ void atarifb_state::machine_reset() m_counter_y_in2b = 0; } -MACHINE_CONFIG_START(atarifb_state::atarifb) - +void atarifb_state::atarifb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, 750000) - MCFG_DEVICE_PROGRAM_MAP(atarifb_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(atarifb_state, irq0_line_hold, 4*60) + M6502(config, m_maincpu, 750000); + m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::atarifb_map); + m_maincpu->set_periodic_int(FUNC(atarifb_state::irq0_line_hold), attotime::from_hz(4*60)); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2037) /* 16.3ms * 1/8 = 2037.5. Is it 1/8th or 3/32nds? (1528?) */) - MCFG_SCREEN_SIZE(38*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 38*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(atarifb_state, screen_update_atarifb) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2037) /* 16.3ms * 1/8 = 2037.5. Is it 1/8th or 3/32nds? (1528?) */); + m_screen->set_size(38*8, 32*8); + m_screen->set_visarea(0*8, 38*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(atarifb_state::screen_update_atarifb)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_atarifb); PALETTE(config, m_palette, FUNC(atarifb_state::atarifb_palette), 12); @@ -581,50 +581,46 @@ MACHINE_CONFIG_START(atarifb_state::atarifb) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("discrete", DISCRETE, atarifb_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.18) -MACHINE_CONFIG_END + DISCRETE(config, m_discrete, atarifb_discrete).add_route(ALL_OUTPUTS, "mono", 0.18); +} -MACHINE_CONFIG_START(atarifb_state::atarifb4) +void atarifb_state::atarifb4(machine_config &config) +{ atarifb(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(atarifb4_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::atarifb4_map); +} -MACHINE_CONFIG_START(atarifb_state::abaseb) +void atarifb_state::abaseb(machine_config &config) +{ atarifb(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(abaseb_map) + m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::abaseb_map); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(atarifb_state, screen_update_abaseb) + m_screen->set_screen_update(FUNC(atarifb_state::screen_update_abaseb)); /* sound hardware */ - MCFG_DEVICE_REPLACE("discrete", DISCRETE, abaseb_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.24) -MACHINE_CONFIG_END + DISCRETE(config.replace(), m_discrete, abaseb_discrete).add_route(ALL_OUTPUTS, "mono", 0.24); +} -MACHINE_CONFIG_START(atarifb_state::soccer) +void atarifb_state::soccer(machine_config &config) +{ atarifb(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(soccer_map) + m_maincpu->set_addrmap(AS_PROGRAM, &atarifb_state::soccer_map); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0*8, 38*8-1, 2*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(atarifb_state, screen_update_soccer) + m_screen->set_visarea(0*8, 38*8-1, 2*8, 32*8-1); + m_screen->set_screen_update(FUNC(atarifb_state::screen_update_soccer)); m_gfxdecode->set_info(gfx_soccer); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/atarig1.cpp b/src/mame/drivers/atarig1.cpp index eed910b7d63..a4d3de4453d 100644 --- a/src/mame/drivers/atarig1.cpp +++ b/src/mame/drivers/atarig1.cpp @@ -396,11 +396,11 @@ static const atari_rle_objects_config modesc_pitfight = * *************************************/ -MACHINE_CONFIG_START(atarig1_state::atarig1) - +void atarig1_state::atarig1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz); + m_maincpu->set_addrmap(AS_PROGRAM, &atarig1_state::main_map); MCFG_MACHINE_START_OVERRIDE(atarig1_state,atarig1) MCFG_MACHINE_RESET_OVERRIDE(atarig1_state,atarig1) @@ -414,16 +414,16 @@ MACHINE_CONFIG_START(atarig1_state::atarig1) PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 1280); /* initialize the playfield */ - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, atarig1_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarig1_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0) + TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(atarig1_state::get_playfield_tile_info)); + TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarig1_state::get_alpha_tile_info)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(atarig1_state, screen_update_atarig1) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarig1_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(atarig1_state::screen_update_atarig1)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(FUNC(atarig1_state::video_int_write_line)); MCFG_VIDEO_START_OVERRIDE(atarig1_state,atarig1) @@ -434,7 +434,7 @@ MACHINE_CONFIG_START(atarig1_state::atarig1) m_jsa->main_int_cb().set_inputline(m_maincpu, M68K_IRQ_2); m_jsa->test_read_cb().set_ioport("IN0").bit(14); m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} void atarig1_state::hydrap(machine_config &config) diff --git a/src/mame/drivers/atarig42.cpp b/src/mame/drivers/atarig42.cpp index 5761fe7fe57..8878331f30f 100644 --- a/src/mame/drivers/atarig42.cpp +++ b/src/mame/drivers/atarig42.cpp @@ -515,10 +515,9 @@ static const atari_rle_objects_config modesc_0x400 = *************************************/ MACHINE_CONFIG_START(atarig42_state::atarig42) - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz); + m_maincpu->set_addrmap(AS_PROGRAM, &atarig42_state::main_map); EEPROM_2816(config, "eeprom").lock_after_write(true); @@ -529,16 +528,16 @@ MACHINE_CONFIG_START(atarig42_state::atarig42) PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 2048); MCFG_TILEMAP_ADD_CUSTOM("playfield", "gfxdecode", 2, atarig42_state, get_playfield_tile_info, 8,8, atarig42_playfield_scan, 128,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarig42_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0) + TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarig42_state::get_alpha_tile_info)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(atarig42_state, screen_update_atarig42) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarig42_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(atarig42_state::screen_update_atarig42)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(FUNC(atarig42_state::video_int_write_line)); MCFG_VIDEO_START_OVERRIDE(atarig42_state,atarig42) diff --git a/src/mame/drivers/atarigt.cpp b/src/mame/drivers/atarigt.cpp index 793c2a8ca42..d5850333303 100644 --- a/src/mame/drivers/atarigt.cpp +++ b/src/mame/drivers/atarigt.cpp @@ -806,9 +806,9 @@ static const atari_rle_objects_config modesc = MACHINE_CONFIG_START(atarigt_state::atarigt) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68EC020, ATARI_CLOCK_50MHz/2) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(atarigt_state, scanline_int_gen, 250) + M68EC020(config, m_maincpu, ATARI_CLOCK_50MHz/2); + m_maincpu->set_addrmap(AS_PROGRAM, &atarigt_state::main_map); + m_maincpu->set_periodic_int(FUNC(atarigt_state::scanline_int_gen), attotime::from_hz(250)); MCFG_MACHINE_RESET_OVERRIDE(atarigt_state,atarigt) @@ -816,18 +816,18 @@ MACHINE_CONFIG_START(atarigt_state::atarigt) /* video hardware */ GFXDECODE(config, m_gfxdecode, m_palette, gfx_atarigt); - MCFG_PALETTE_ADD("palette", MRAM_ENTRIES) + PALETTE(config, m_palette).set_entries(MRAM_ENTRIES); MCFG_TILEMAP_ADD_CUSTOM("playfield", "gfxdecode", 2, atarigt_state, get_playfield_tile_info, 8,8, atarigt_playfield_scan, 128,64) - MCFG_TILEMAP_ADD_STANDARD("alpha", "gfxdecode", 2, atarigt_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64, 32) + TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64, 32).set_info_callback(FUNC(atarigt_state::get_alpha_tile_info)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses a pair of GALs to determine H and V parameters */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(atarigt_state, screen_update_atarigt) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarigt_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(atarigt_state::screen_update_atarigt)); + m_screen->screen_vblank().set(FUNC(atarigt_state::video_int_write_line)); MCFG_VIDEO_START_OVERRIDE(atarigt_state,atarigt) diff --git a/src/mame/drivers/atarigx2.cpp b/src/mame/drivers/atarigx2.cpp index e4d1ceba43d..f29764b4113 100644 --- a/src/mame/drivers/atarigx2.cpp +++ b/src/mame/drivers/atarigx2.cpp @@ -1488,8 +1488,8 @@ static const atari_rle_objects_config modesc_0x400 = MACHINE_CONFIG_START(atarigx2_state::atarigx2) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68EC020, ATARI_CLOCK_14MHz) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68EC020(config, m_maincpu, ATARI_CLOCK_14MHz); + m_maincpu->set_addrmap(AS_PROGRAM, &atarigx2_state::main_map); ADC0809(config, m_adc, ATARI_CLOCK_14MHz/16); m_adc->in_callback<0>().set_ioport("A2D0"); @@ -1508,16 +1508,16 @@ MACHINE_CONFIG_START(atarigx2_state::atarigx2) PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 2048); MCFG_TILEMAP_ADD_CUSTOM("playfield", "gfxdecode", 2, atarigx2_state, get_playfield_tile_info, 8,8, atarigx2_playfield_scan, 128,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarigx2_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0) + TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarigx2_state::get_alpha_tile_info)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses a pair of GALs to determine H and V parameters */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(atarigx2_state, screen_update_atarigx2) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarigx2_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(atarigx2_state::screen_update_atarigx2)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(FUNC(atarigx2_state::video_int_write_line)); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/atarist.cpp b/src/mame/drivers/atarist.cpp index c618f36c0d9..a6eb2d80444 100644 --- a/src/mame/drivers/atarist.cpp +++ b/src/mame/drivers/atarist.cpp @@ -2074,7 +2074,7 @@ void st_state::keyboard(machine_config &config) } //------------------------------------------------- -// MACHINE_CONFIG( st ) +// machine_config( st ) //------------------------------------------------- void st_state::st(machine_config &config) @@ -2106,7 +2106,7 @@ void st_state::st(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( megast ) +// machine_config( megast ) //------------------------------------------------- void megast_state::megast(machine_config &config) @@ -2141,7 +2141,7 @@ void megast_state::megast(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( ste ) +// machine_config( ste ) //------------------------------------------------- void ste_state::ste(machine_config &config) @@ -2181,7 +2181,7 @@ void ste_state::ste(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( megaste ) +// machine_config( megaste ) //------------------------------------------------- void megaste_state::megaste(machine_config &config) @@ -2198,7 +2198,7 @@ void megaste_state::megaste(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( stbook ) +// machine_config( stbook ) //------------------------------------------------- #if 0 void stbook_state::stbook(machine_config &config) @@ -2282,7 +2282,7 @@ void stbook_state::stbook(machine_config &config) #endif //------------------------------------------------- -// MACHINE_CONFIG( tt030 ) +// machine_config( tt030 ) //------------------------------------------------- void ste_state::tt030(machine_config &config) @@ -2292,7 +2292,7 @@ void ste_state::tt030(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( falcon ) +// machine_config( falcon ) //------------------------------------------------- void ste_state::falcon(machine_config &config) @@ -2302,7 +2302,7 @@ void ste_state::falcon(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( falcon40 ) +// machine_config( falcon40 ) //------------------------------------------------- void ste_state::falcon40(machine_config &config) diff --git a/src/mame/drivers/atarisy1.cpp b/src/mame/drivers/atarisy1.cpp index 1d779105db3..7c9b8fbff0b 100644 --- a/src/mame/drivers/atarisy1.cpp +++ b/src/mame/drivers/atarisy1.cpp @@ -724,14 +724,14 @@ void atarisy1_state::add_adc(machine_config &config) m_ajsint->output_handler().set(FUNC(atarisy1_state::joystick_int)); } -MACHINE_CONFIG_START(atarisy1_state::atarisy1) - +void atarisy1_state::atarisy1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68010, ATARI_CLOCK_14MHz/2) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68010(config, m_maincpu, ATARI_CLOCK_14MHz/2); + m_maincpu->set_addrmap(AS_PROGRAM, &atarisy1_state::main_map); - MCFG_DEVICE_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + M6502(config, m_audiocpu, ATARI_CLOCK_14MHz/8); + m_audiocpu->set_addrmap(AS_PROGRAM, &atarisy1_state::sound_map); MCFG_MACHINE_START_OVERRIDE(atarisy1_state,atarisy1) MCFG_MACHINE_RESET_OVERRIDE(atarisy1_state,atarisy1) @@ -756,20 +756,20 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1) PALETTE(config, m_palette).set_format(palette_device::IRGB_4444, 1024); - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, atarisy1_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, atarisy1_state, get_alpha_tile_info, 8,8, SCAN_ROWS, 64,32, 0) + TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(atarisy1_state::get_playfield_tile_info)); + TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(atarisy1_state::get_alpha_tile_info)); ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, atarisy1_state::s_mob_config); m_mob->set_gfxdecode(m_gfxdecode); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* video timing comes from an 82S163 (H) and an 82S129 (V) */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(atarisy1_state, screen_update_atarisy1) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, atarisy1_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(atarisy1_state::screen_update_atarisy1)); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(FUNC(atarisy1_state::video_int_write_line)); MCFG_VIDEO_START_OVERRIDE(atarisy1_state,atarisy1) @@ -784,13 +784,13 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1) ymsnd.add_route(0, "lspeaker", 0.80); ymsnd.add_route(1, "rspeaker", 0.80); - MCFG_DEVICE_ADD("pokey", POKEY, ATARI_CLOCK_14MHz/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) + pokey_device &pokey(POKEY(config, "pokey", ATARI_CLOCK_14MHz/8)); + pokey.add_route(ALL_OUTPUTS, "lspeaker", 0.40); + pokey.add_route(ALL_OUTPUTS, "rspeaker", 0.40); - MCFG_DEVICE_ADD("tms", TMS5220C, ATARI_CLOCK_14MHz/2/11) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + TMS5220C(config, m_tms, ATARI_CLOCK_14MHz/2/11); + m_tms->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_tms->add_route(ALL_OUTPUTS, "rspeaker", 1.0); /* via */ via6522_device &via(VIA6522(config, "via6522_0", ATARI_CLOCK_14MHz/8)); @@ -798,7 +798,7 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1) via.readpb_handler().set(FUNC(atarisy1_state::via_pb_r)); via.writepa_handler().set(FUNC(atarisy1_state::via_pa_w)); via.writepb_handler().set(FUNC(atarisy1_state::via_pb_w)); -MACHINE_CONFIG_END +} void atarisy1_state::marble(machine_config &config) { diff --git a/src/mame/drivers/atarittl.cpp b/src/mame/drivers/atarittl.cpp index f580f7a41b1..beeae807a92 100644 --- a/src/mame/drivers/atarittl.cpp +++ b/src/mame/drivers/atarittl.cpp @@ -37,7 +37,6 @@ TM-019 Pursuit (1975) K8P-B 90128 NO TM-012,029,034 Quadrapong (1974) A000845 NO TM-009 Qwak!/Quack (1974) A000937,A000953 YES 72074/37-2530N (K9) - TM-001,023,029,032 Rebound/Spike/Volleyball (1974) A000517,A000846,SPIKE-(A or B) NO TM-047 Shark JAWS (1975) A003806 YES 004182, 004183 TM-008,029 Space Race (1973) A000803 NO TM-046 Steeplechase/Astroturf (1975) A003750 YES 003774 ROM Bugle (C8), 003773-01 "A" Horse (C4), 003773-02 "B" Horse (D4) @@ -53,7 +52,7 @@ TM-018 Dodgeball/Dodgem (Not Produced/Released) (1975) TM-024 Qwakers (Not Produced/Released) (1974?) (Kee Games clone of Qwak!?) - - Information (current as of 21 Dec. 2016) on what logic chips (and some analog parts) are still needed to be emulated in the + - Information (current as of 27 Mar. 2019) on what logic chips (and some analog parts) are still needed to be emulated in the netlist system per-game: TM-057 (Stunt Cycle) @@ -63,9 +62,7 @@ TM-055 (Indy 4) 7406 Hex Inverter Buffers/Drivers with O.C. H.V. Outputs (note: Might not be needed, could just clone from 7404) - 7414 Hex Schmitt-Trigger Inverters 7417 Hex Buffers/Drivers - 74164 8-bit Serial-In, Parallel-Out Shift Register 9301 1-of-10 Decoder LM339 Quad Comparator @@ -328,10 +325,11 @@ uint32_t stuntcyc_state::screen_update_stuntcyc(screen_device &screen, bitmap_rg return 0; } -MACHINE_CONFIG_START(atarikee_state::atarikee) +void atarikee_state::atarikee(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(atarikee) + NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK); + m_maincpu->set_constructor(netlist_atarikee); /* video hardware */ SCREEN(config, "screen", SCREEN_TYPE_RASTER); @@ -341,15 +339,15 @@ MACHINE_CONFIG_START(atarikee_state::atarikee) m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL); m_video->set_fieldcount(1); m_video->set_threshold(0.30); -MACHINE_CONFIG_END +} //#define STUNTCYC_NL_CLOCK (14318181*69) #define STUNTCYC_NL_CLOCK (SC_HTOTAL*SC_VTOTAL*60*140) MACHINE_CONFIG_START(stuntcyc_state::stuntcyc) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, STUNTCYC_NL_CLOCK) - MCFG_NETLIST_SETUP(stuntcyc) + NETLIST_CPU(config, m_maincpu, STUNTCYC_NL_CLOCK); + m_maincpu->set_constructor(netlist_stuntcyc); //MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "VIDEO_OUT", fixedfreq_device, update_vid, "fixfreq") MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit0", "probe_bit0", stuntcyc_state, probe_bit0_cb, "") @@ -362,9 +360,9 @@ MACHINE_CONFIG_START(stuntcyc_state::stuntcyc) MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_clock", "probe_clock", stuntcyc_state, probe_clock_cb, "") /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(stuntcyc_state, screen_update_stuntcyc) - MCFG_SCREEN_RAW_PARAMS(SC_HTOTAL*SC_VTOTAL*60, SC_HTOTAL, 0, SC_HTOTAL, SC_VTOTAL, 0, SC_VTOTAL) + SCREEN(config, m_probe_screen, SCREEN_TYPE_RASTER); + m_probe_screen->set_screen_update(FUNC(stuntcyc_state::screen_update_stuntcyc)); + m_probe_screen->set_raw(SC_HTOTAL*SC_VTOTAL*60, SC_HTOTAL, 0, SC_HTOTAL, SC_VTOTAL, 0, SC_VTOTAL); //FIXFREQ(config, m_video).set_screen("screen"); //m_video->set_monitor_clock(SC_VIDCLOCK); //m_video->set_horz_params(SC_HTOTAL-67,SC_HTOTAL-40,SC_HTOTAL-8, SC_HTOTAL); @@ -375,8 +373,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(gtrak10_state::gtrak10) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(gtrak10) + NETLIST_CPU(config, "maincpu", NETLIST_CLOCK).set_constructor(netlist_gtrak10); MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "VIDEO_OUT", fixedfreq_device, update_composite_monochrome, "fixfreq") @@ -685,10 +682,6 @@ ROM_START( quadpong ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END -ROM_START( rebound ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) -ROM_END - ROM_START( spacrace ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END @@ -744,7 +737,6 @@ GAME(1975, tankii, 0, atarikee, 0, atarikee_state, empty_init, //GAME(1974, pinpong, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Pin Pong [TTL]", MACHINE_IS_SKELETON) //GAME(1975, pursuit, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Pursuit [TTL]", MACHINE_IS_SKELETON) //GAME(1974, quadpong, eliminat, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Quadrapong [TTL]", MACHINE_IS_SKELETON) -//GAME(1974, rebound, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Rebound/Spike/Volleyball [TTL]", MACHINE_IS_SKELETON) //GAME(1973, spacrace, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Space Race [TTL]", MACHINE_IS_SKELETON) //GAME(1974, touchme, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Touch-Me [TTL]", MACHINE_IS_SKELETON) //? //GAME(1974, worldcup, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "World Cup/World Cup Football [TTL]", MACHINE_IS_SKELETON) diff --git a/src/mame/drivers/atetris.cpp b/src/mame/drivers/atetris.cpp index 1b9d58ee07d..82b98b17fea 100644 --- a/src/mame/drivers/atetris.cpp +++ b/src/mame/drivers/atetris.cpp @@ -242,10 +242,10 @@ READ8_MEMBER(atetris_mcu_state::mcu_bus_r) switch (m_mcu->p2_r() & 0xf0) { case 0x40: - return m_soundlatch[1]->read(space, 0); + return m_soundlatch[1]->read(); case 0xf0: - return m_soundlatch[0]->read(space, 0); + return m_soundlatch[0]->read(); default: return 0xff; @@ -261,8 +261,8 @@ WRITE8_MEMBER(atetris_mcu_state::mcu_p2_w) WRITE8_MEMBER(atetris_mcu_state::mcu_reg_w) { // FIXME: a lot of sound writes seem to get lost this way; why doesn't that hurt? - m_soundlatch[0]->write(space, 0, offset | 0x20); - m_soundlatch[1]->write(space, 0, data); + m_soundlatch[0]->write(offset | 0x20); + m_soundlatch[1]->write(data); } diff --git a/src/mame/drivers/atm.cpp b/src/mame/drivers/atm.cpp index f75c0f69974..99c9ffe7a0f 100644 --- a/src/mame/drivers/atm.cpp +++ b/src/mame/drivers/atm.cpp @@ -187,13 +187,14 @@ static GFXDECODE_START( gfx_atmtb2 ) GFXDECODE_END -MACHINE_CONFIG_START(atm_state::atm) +void atm_state::atm(machine_config &config) +{ spectrum_128(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(atm_mem) - MCFG_DEVICE_IO_MAP(atm_io) - MCFG_DEVICE_OPCODES_MAP(atm_switch) + m_maincpu->set_addrmap(AS_PROGRAM, &atm_state::atm_mem); + m_maincpu->set_addrmap(AS_IO, &atm_state::atm_io); + m_maincpu->set_addrmap(AS_OPCODES, &atm_state::atm_switch); + MCFG_MACHINE_RESET_OVERRIDE(atm_state, atm ) BETA_DISK(config, m_beta, 0); @@ -201,7 +202,7 @@ MACHINE_CONFIG_START(atm_state::atm) subdevice<gfxdecode_device>("gfxdecode")->set_info(gfx_atm); config.device_remove("exp"); -MACHINE_CONFIG_END +} void atm_state::atmtb2(machine_config &config) { diff --git a/src/mame/drivers/atom.cpp b/src/mame/drivers/atom.cpp index 4d89b77cf24..5a46cf62aaa 100644 --- a/src/mame/drivers/atom.cpp +++ b/src/mame/drivers/atom.cpp @@ -710,8 +710,8 @@ FLOPPY_FORMATS_END0 MACHINE_CONFIG_START(atom_state::atom) /* basic machine hardware */ - MCFG_DEVICE_ADD(SY6502_TAG, M6502, X2/4) - MCFG_DEVICE_PROGRAM_MAP(atom_mem) + M6502(config, m_maincpu, X2/4); + m_maincpu->set_addrmap(AS_PROGRAM, &atom_state::atom_mem); /* video hardware */ SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER); @@ -722,8 +722,7 @@ MACHINE_CONFIG_START(atom_state::atom) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); /* devices */ TIMER(config, "hz2400").configure_periodic(FUNC(atom_state::cassette_output_tick), attotime::from_hz(4806)); @@ -784,8 +783,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(atomeb_state::atomeb) atom(config); - MCFG_DEVICE_MODIFY(SY6502_TAG) - MCFG_DEVICE_PROGRAM_MAP(atomeb_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &atomeb_state::atomeb_mem); /* cartridges */ config.device_remove("cartslot"); @@ -866,11 +864,11 @@ void atom_state::atombb(machine_config &config) MACHINE_DRIVER( prophet2 ) -------------------------------------------------*/ -//static MACHINE_CONFIG_START( prophet2 ) +//void atom_state::prophet2(machine_config &config) +//{ // atom(config); // /* basic machine hardware */ -// MCFG_DEVICE_MODIFY(SY6502_TAG) -// MCFG_DEVICE_PROGRAM_MAP(prophet_mem) +// m_maincpu->set_addrmap(AS_PROGRAM, &atom_state::prophet_mem); // // /* fdc */ // config.device_remove(I8271_TAG); @@ -878,31 +876,29 @@ void atom_state::atombb(machine_config &config) // config.device_remove(I8271_TAG ":1"); // // /* internal ram */ -// MCFG_RAM_MODIFY(RAM_TAG) -// MCFG_RAM_DEFAULT_SIZE("32K") +// subdevice<ram_device>(RAM_TAG)->set_default_size("32K"); // /* Software lists */ // config.device_remove("rom_list"); // config.device_remove("flop_list"); -//MACHINE_CONFIG_END +//} /*------------------------------------------------- MACHINE_DRIVER( prophet3 ) -------------------------------------------------*/ -//static MACHINE_CONFIG_START( prophet3 ) +//void atom_state::prophet3(machine_config &config) +//{ // atom(config); // /* basic machine hardware */ -// MCFG_DEVICE_MODIFY(SY6502_TAG) -// MCFG_DEVICE_PROGRAM_MAP(prophet_mem) +// m_maincpu->set_addrmap(AS_PROGRAM, &atom_state::prophet_mem); // // /* internal ram */ -// MCFG_RAM_MODIFY(RAM_TAG) -// MCFG_RAM_DEFAULT_SIZE("32K") +// subdevice<ram_device>(RAM_TAG)->set_default_size("32K"); // /* Software lists */ // config.device_remove("rom_list"); -//MACHINE_CONFIG_END +//} /*------------------------------------------------- MACHINE_DRIVER( atommc ) diff --git a/src/mame/drivers/atronic.cpp b/src/mame/drivers/atronic.cpp index f198a5e0e23..76f28412ad7 100644 --- a/src/mame/drivers/atronic.cpp +++ b/src/mame/drivers/atronic.cpp @@ -65,24 +65,24 @@ static INPUT_PORTS_START( atronic ) INPUT_PORTS_END -MACHINE_CONFIG_START(atronic_state::atronic) +void atronic_state::atronic(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z180, 6000000) - MCFG_DEVICE_PROGRAM_MAP(atronic_map) - MCFG_DEVICE_IO_MAP(atronic_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atronic_state, irq0_line_hold) - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(atronic_state, screen_update) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 8) - -MACHINE_CONFIG_END + Z180(config, m_maincpu, 6000000); + m_maincpu->set_addrmap(AS_PROGRAM, &atronic_state::atronic_map); + m_maincpu->set_addrmap(AS_IO, &atronic_state::atronic_portmap); + m_maincpu->set_vblank_int("screen", FUNC(atronic_state::irq0_line_hold)); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_screen_update(FUNC(atronic_state::screen_update)); + screen.set_size(32*8, 32*8); + screen.set_visarea_full(); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_entries(8); +} ROM_START( atronic ) diff --git a/src/mame/drivers/avalnche.cpp b/src/mame/drivers/avalnche.cpp index 2789147e5b1..4782401e76e 100644 --- a/src/mame/drivers/avalnche.cpp +++ b/src/mame/drivers/avalnche.cpp @@ -215,12 +215,12 @@ void avalnche_state::machine_start() save_item(NAME(m_avalance_video_inverted)); } -MACHINE_CONFIG_START(avalnche_state::avalnche_base) - +void avalnche_state::avalnche_base(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, 12.096_MHz_XTAL / 16) /* clock input is the "2H" signal divided by two */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(avalnche_state, nmi_line_pulse, 8*60) + M6502(config, m_maincpu, 12.096_MHz_XTAL / 16); /* clock input is the "2H" signal divided by two */ + m_maincpu->set_addrmap(AS_PROGRAM, &avalnche_state::main_map); + m_maincpu->set_periodic_int(FUNC(avalnche_state::nmi_line_pulse), attotime::from_hz(8*60)); F9334(config, m_latch); // F8 m_latch->q_out_cb<0>().set_output("led0"); // 1 CREDIT LAMP @@ -232,27 +232,28 @@ MACHINE_CONFIG_START(avalnche_state::avalnche_base) WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 16, 256) - MCFG_SCREEN_UPDATE_DRIVER(avalnche_state, screen_update_avalnche) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 16, 256); + screen.set_screen_update(FUNC(avalnche_state::screen_update_avalnche)); +} -MACHINE_CONFIG_START(avalnche_state::avalnche) +void avalnche_state::avalnche(machine_config &config) +{ avalnche_base(config); /* sound hardware */ avalnche_sound(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(avalnche_state::acatch) +void avalnche_state::acatch(machine_config &config) +{ avalnche_base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(catch_map) + m_maincpu->set_addrmap(AS_PROGRAM, &avalnche_state::catch_map); /* sound hardware... */ acatch_sound(config); -MACHINE_CONFIG_END +} /************************************* diff --git a/src/mame/drivers/ave_arb.cpp b/src/mame/drivers/ave_arb.cpp index 3ca879b461f..638c5533549 100644 --- a/src/mame/drivers/ave_arb.cpp +++ b/src/mame/drivers/ave_arb.cpp @@ -8,6 +8,9 @@ AVE Micro Systems ARB chess computer driver, in some regions redistributed by Chafitz, and in Germany by Sandy Electronic. +TODO: +- verify gms40 module memory layout + ******************************************************************************* Auto Response Board (ARB) overview: @@ -24,16 +27,21 @@ Known modules (*denotes not dumped yet): - Sargon 2.5 - *Grand Master Series 3 - *Grand Master Series 3.5 -- *Grand Master Series 4.0 +- Grand Master Series 4.0 Newer modules included button label stickers for OPTIONS, Verify, Take Back, Clear. +Around 2012, Steve Braid(aka Trilobyte/Steve UK) started manufacturing ARB V2 boards +without a module slot. CPU and VIA were replaced with new WDC 14MHz-rated chips, +running at 16MHz. + ******************************************************************************/ #include "emu.h" #include "includes/chessbase.h" #include "cpu/m6502/m6502.h" +#include "cpu/m6502/m65c02.h" #include "machine/6522via.h" #include "machine/nvram.h" #include "sound/dac.h" @@ -67,16 +75,18 @@ public: // machine drivers void arb(machine_config &config); + void v2(machine_config &config); private: // devices/pointers required_device<cpu_device> m_maincpu; required_device<via6522_device> m_via; required_device<dac_bit_interface> m_dac; - required_device<generic_slot_device> m_cart; + optional_device<generic_slot_device> m_cart; // address maps void main_map(address_map &map); + void v2_map(address_map &map); // cartridge DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge); @@ -172,6 +182,13 @@ void arb_state::main_map(address_map &map) map(0x8000, 0x800f).mirror(0x1ff0).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write)); } +void arb_state::v2_map(address_map &map) +{ + map(0x0000, 0x7fff).ram().share("nvram"); // BS62LV256 + map(0x8000, 0x800f).mirror(0x1ff0).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write)); + map(0xa000, 0xffff).rom(); +} + /****************************************************************************** @@ -202,13 +219,13 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void arb_state::arb(machine_config &config) +void arb_state::v2(machine_config &config) { /* basic machine hardware */ - M6502(config, m_maincpu, 4_MHz_XTAL/2); - m_maincpu->set_addrmap(AS_PROGRAM, &arb_state::main_map); + M65C02(config, m_maincpu, 16_MHz_XTAL); // W65C02S6TPG-14 + m_maincpu->set_addrmap(AS_PROGRAM, &arb_state::v2_map); - VIA6522(config, m_via, 4_MHz_XTAL/4); + VIA6522(config, m_via, 16_MHz_XTAL); // W65C22S6TPG-14 m_via->writepa_handler().set(FUNC(arb_state::leds_w)); m_via->writepb_handler().set(FUNC(arb_state::control_w)); m_via->readpa_handler().set(FUNC(arb_state::input_r)); @@ -223,6 +240,17 @@ void arb_state::arb(machine_config &config) SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); +} + +void arb_state::arb(machine_config &config) +{ + v2(config); + + /* basic machine hardware */ + M6502(config.replace(), m_maincpu, 4_MHz_XTAL/2); // R6502P + m_maincpu->set_addrmap(AS_PROGRAM, &arb_state::main_map); + + m_via->set_clock(4_MHz_XTAL/4); // R6522P /* cartridge */ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "arb", "bin"); @@ -243,6 +271,11 @@ ROM_START( arb ) // none here, it's in the module slot ROM_END +ROM_START( arbv2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "sargon_4.0", 0x0000, 0x10000, CRC(c519c9e8) SHA1(d7597d50c0f4f9aa6d990c8d3b485e39cb44ff06) ) // AT27C512R +ROM_END + } // anonymous namespace @@ -251,5 +284,6 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ -CONS( 1980, arb, 0, 0, arb, arb, arb_state, empty_init, "AVE Micro Systems", "Auto Response Board", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ +CONS( 1980, arb, 0, 0, arb, arb, arb_state, empty_init, "AVE Micro Systems", "Auto Response Board", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 2012, arbv2, arb, 0, v2, arb, arb_state, empty_init, "hack (Steve Braid)", "ARB V2 Sargon 4.0", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/drivers/avigo.cpp b/src/mame/drivers/avigo.cpp index d916f462b86..c9984604763 100644 --- a/src/mame/drivers/avigo.cpp +++ b/src/mame/drivers/avigo.cpp @@ -751,9 +751,9 @@ void avigo_state::nvram_init(nvram_device &nvram, void *base, size_t size) MACHINE_CONFIG_START(avigo_state::avigo) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 4000000) - MCFG_DEVICE_PROGRAM_MAP(avigo_mem) - MCFG_DEVICE_IO_MAP(avigo_io) + Z80(config, m_maincpu, 4000000); + m_maincpu->set_addrmap(AS_PROGRAM, &avigo_state::avigo_mem); + m_maincpu->set_addrmap(AS_IO, &avigo_state::avigo_io); config.m_minimum_quantum = attotime::from_hz(60); NS16550(config, m_uart, XTAL(1'843'200)); @@ -770,13 +770,13 @@ MACHINE_CONFIG_START(avigo_state::avigo) m_serport->cts_handler().set(m_uart, FUNC(ins8250_uart_device::cts_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(avigo_state, screen_update) - MCFG_SCREEN_SIZE(AVIGO_SCREEN_WIDTH, AVIGO_SCREEN_HEIGHT + AVIGO_PANEL_HEIGHT) - MCFG_SCREEN_VISIBLE_AREA(0, AVIGO_SCREEN_WIDTH-1, 0, AVIGO_SCREEN_HEIGHT + AVIGO_PANEL_HEIGHT -1) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(avigo_state::screen_update)); + screen.set_size(AVIGO_SCREEN_WIDTH, AVIGO_SCREEN_HEIGHT + AVIGO_PANEL_HEIGHT); + screen.set_visarea_full(); + screen.set_palette(m_palette); config.set_default_layout(layout_avigo); diff --git a/src/mame/drivers/avt.cpp b/src/mame/drivers/avt.cpp index a361afe730e..2fca9828c07 100644 --- a/src/mame/drivers/avt.cpp +++ b/src/mame/drivers/avt.cpp @@ -956,7 +956,8 @@ WRITE_LINE_MEMBER( avt_state::avtbingo_w ) m_pio0->port_b_write(ioport("IN0")->read()); } -MACHINE_CONFIG_START(avt_state::avt) +void avt_state::avt(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, CPU_CLOCK); /* guess */ m_maincpu->set_daisy_config(daisy_chain); @@ -964,13 +965,13 @@ MACHINE_CONFIG_START(avt_state::avt) m_maincpu->set_addrmap(AS_IO, &avt_state::avt_portmap); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) /* 240x224 (through CRTC) */ - MCFG_SCREEN_UPDATE_DRIVER(avt_state, screen_update_avt) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea_full(); /* 240x224 (through CRTC) */ + screen.set_screen_update(FUNC(avt_state::screen_update_avt)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_avt); PALETTE(config, m_palette, FUNC(avt_state::avt_palette), 8*16); @@ -1004,7 +1005,7 @@ MACHINE_CONFIG_START(avt_state::avt) // PORT A d0-d7 = TP13,TP12,TP11,TP10,TP8,TP7,TP5,TP3 // PORT B d0-d7 = "Player2", DCOM, CCOM, BCOM, ACOM, LOCKOUT/TP6, TP4, 50/60HZ (held high, jumper on JP13 grounds it) // DCOM,CCOM,BCOM,ACOM appear to be muxes -MACHINE_CONFIG_END +} // Leave avtnfl as it was until more is learnt. WRITE_LINE_MEMBER( avt_state::avtnfl_w ) diff --git a/src/mame/drivers/aztarac.cpp b/src/mame/drivers/aztarac.cpp index 3da54644eb7..65b66adb159 100644 --- a/src/mame/drivers/aztarac.cpp +++ b/src/mame/drivers/aztarac.cpp @@ -149,17 +149,17 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(aztarac_state::aztarac) - +void aztarac_state::aztarac(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 8000000) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", aztarac_state, irq4_line_hold) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(aztarac_state, irq_callback) + M68000(config, m_maincpu, 8000000); + m_maincpu->set_addrmap(AS_PROGRAM, &aztarac_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(aztarac_state::irq4_line_hold)); + m_maincpu->set_irq_acknowledge_callback(FUNC(aztarac_state::irq_callback)); - MCFG_DEVICE_ADD("audiocpu", Z80, 2000000) - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(aztarac_state, snd_timed_irq, 100) + Z80(config, m_audiocpu, 2000000); + m_audiocpu->set_addrmap(AS_PROGRAM, &aztarac_state::sound_map); + m_audiocpu->set_periodic_int(FUNC(aztarac_state::snd_timed_irq), attotime::from_hz(100)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); @@ -167,11 +167,11 @@ MACHINE_CONFIG_START(aztarac_state::aztarac) /* video hardware */ VECTOR(config, m_vector, 0); - MCFG_SCREEN_ADD("screen", VECTOR) - MCFG_SCREEN_REFRESH_RATE(40) - MCFG_SCREEN_SIZE(400, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) - MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update) + SCREEN(config, m_screen, SCREEN_TYPE_VECTOR); + m_screen->set_refresh_hz(40); + m_screen->set_size(400, 300); + m_screen->set_visarea(0, 1024-1, 0, 768-1); + m_screen->set_screen_update("vector", FUNC(vector_device::screen_update)); /* sound hardware */ @@ -186,7 +186,7 @@ MACHINE_CONFIG_START(aztarac_state::aztarac) AY8910(config, "ay3", 2000000).add_route(ALL_OUTPUTS, "mono", 0.15); AY8910(config, "ay4", 2000000).add_route(ALL_OUTPUTS, "mono", 0.15); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/b16.cpp b/src/mame/drivers/b16.cpp index f434bbb48e9..343c4eaf055 100644 --- a/src/mame/drivers/b16.cpp +++ b/src/mame/drivers/b16.cpp @@ -266,20 +266,21 @@ WRITE8_MEMBER(b16_state::memory_write_byte) } -MACHINE_CONFIG_START(b16_state::b16) +void b16_state::b16(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, I8086, XTAL(14'318'181)/2) //unknown xtal - MCFG_DEVICE_PROGRAM_MAP(b16_map) - MCFG_DEVICE_IO_MAP(b16_io) + I8086(config, m_maincpu, XTAL(14'318'181)/2); //unknown xtal + m_maincpu->set_addrmap(AS_PROGRAM, &b16_state::b16_map); + m_maincpu->set_addrmap(AS_IO, &b16_state::b16_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(b16_state, screen_update) - MCFG_SCREEN_SIZE(640, 400) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(b16_state::screen_update)); + screen.set_size(640, 400); + screen.set_visarea_full(); + screen.set_palette(m_palette); H46505(config, m_mc6845, XTAL(14'318'181)/5); /* unknown clock, hand tuned to get ~60 fps */ m_mc6845->set_screen("screen"); @@ -291,10 +292,9 @@ MACHINE_CONFIG_START(b16_state::b16) m_dma8237->out_memw_callback().set(FUNC(b16_state::memory_write_byte)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_b16); - MCFG_PALETTE_ADD(m_palette, 8) + PALETTE(config, m_palette).set_entries(8); // MCFG_PALETTE_INIT_STANDARD(black_and_white) // TODO - -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( b16 ) diff --git a/src/mame/drivers/b2m.cpp b/src/mame/drivers/b2m.cpp index 6aebb124f2c..2312cc3a958 100644 --- a/src/mame/drivers/b2m.cpp +++ b/src/mame/drivers/b2m.cpp @@ -187,22 +187,23 @@ static void b2m_floppies(device_slot_interface &device) /* Machine driver */ -MACHINE_CONFIG_START(b2m_state::b2m) +void b2m_state::b2m(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8080, 2000000) - MCFG_DEVICE_PROGRAM_MAP(b2m_mem) - MCFG_DEVICE_IO_MAP(b2m_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", b2m_state, b2m_vblank_interrupt) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) + I8080(config, m_maincpu, 2000000); + m_maincpu->set_addrmap(AS_PROGRAM, &b2m_state::b2m_mem); + m_maincpu->set_addrmap(AS_IO, &b2m_state::b2m_io); + m_maincpu->set_vblank_int("screen", FUNC(b2m_state::b2m_vblank_interrupt)); + m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(384, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(b2m_state, screen_update_b2m) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(384, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(b2m_state::screen_update_b2m)); + screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(b2m_state::b2m_palette), 4); @@ -233,11 +234,10 @@ MACHINE_CONFIG_START(b2m_state::b2m) /* sound */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); /* uart */ - MCFG_DEVICE_ADD("uart", I8251, 0) + I8251(config, "uart", 0); FD1793(config, m_fdc, 8_MHz_XTAL / 8); m_fdc->drq_wr_callback().set(FUNC(b2m_state::b2m_fdc_drq)); @@ -248,13 +248,13 @@ MACHINE_CONFIG_START(b2m_state::b2m) /* internal ram */ RAM(config, RAM_TAG).set_default_size("128K").set_default_value(0x00); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(b2m_state::b2mrom) +void b2m_state::b2mrom(machine_config &config) +{ b2m(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(b2m_rom_io) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_IO, &b2m_state::b2m_rom_io); +} /* ROM definition */ diff --git a/src/mame/drivers/backfire.cpp b/src/mame/drivers/backfire.cpp index 443da670dd9..a123d45916f 100644 --- a/src/mame/drivers/backfire.cpp +++ b/src/mame/drivers/backfire.cpp @@ -362,11 +362,11 @@ void backfire_state::machine_start() { } -MACHINE_CONFIG_START(backfire_state::backfire) - +void backfire_state::backfire(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", ARM, 28000000/4) /* Unconfirmed */ - MCFG_DEVICE_PROGRAM_MAP(backfire_map) + ARM(config, m_maincpu, 28000000/4); /* Unconfirmed */ + m_maincpu->set_addrmap(AS_PROGRAM, &backfire_state::backfire_map); EEPROM_93C46_16BIT(config, "eeprom"); @@ -380,26 +380,25 @@ MACHINE_CONFIG_START(backfire_state::backfire) GFXDECODE(config, "gfxdecode", m_palette, gfx_backfire); config.set_default_layout(layout_dualhsxs); - MCFG_SCREEN_ADD("lscreen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(backfire_state, screen_update_left) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, backfire_state, vbl_interrupt)) - - MCFG_SCREEN_ADD("rscreen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(backfire_state, screen_update_right) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_lscreen, SCREEN_TYPE_RASTER); + m_lscreen->set_refresh_hz(60); + m_lscreen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_lscreen->set_size(40*8, 32*8); + m_lscreen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + m_lscreen->set_screen_update(FUNC(backfire_state::screen_update_left)); + m_lscreen->set_palette(m_palette); + m_lscreen->screen_vblank().set(FUNC(backfire_state::vbl_interrupt)); + + screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); + rscreen.set_refresh_hz(60); + rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + rscreen.set_size(40*8, 32*8); + rscreen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + rscreen.set_screen_update(FUNC(backfire_state::screen_update_right)); + rscreen.set_palette(m_palette); DECO16IC(config, m_deco_tilegen[0], 0); m_deco_tilegen[0]->set_screen(m_lscreen); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -416,7 +415,6 @@ MACHINE_CONFIG_START(backfire_state::backfire) DECO16IC(config, m_deco_tilegen[1], 0); m_deco_tilegen[1]->set_screen(m_lscreen); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -447,10 +445,10 @@ MACHINE_CONFIG_START(backfire_state::backfire) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymz", YMZ280B, 28000000 / 2) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + ymz280b_device &ymz(YMZ280B(config, "ymz", 28000000 / 2)); + ymz.add_route(0, "lspeaker", 1.0); + ymz.add_route(1, "rspeaker", 1.0); +} /* diff --git a/src/mame/drivers/badlands.cpp b/src/mame/drivers/badlands.cpp index c31031e750c..d2d51288124 100644 --- a/src/mame/drivers/badlands.cpp +++ b/src/mame/drivers/badlands.cpp @@ -440,15 +440,15 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(badlands_state::badlands) - +void badlands_state::badlands(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", badlands_state, vblank_int) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2); + m_maincpu->set_addrmap(AS_PROGRAM, &badlands_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(badlands_state::vblank_int)); - MCFG_DEVICE_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8) - MCFG_DEVICE_PROGRAM_MAP(audio_map) + M6502(config, m_audiocpu, ATARI_CLOCK_14MHz/8); + m_audiocpu->set_addrmap(AS_PROGRAM, &badlands_state::audio_map); TIMER(config, "scantimer").configure_scanline(FUNC(badlands_state::sound_scanline), "screen", 0, 1); MCFG_MACHINE_START_OVERRIDE(badlands_state,badlands) @@ -464,18 +464,18 @@ MACHINE_CONFIG_START(badlands_state::badlands) palette.set_format(palette_device::IRGB_1555, 256); palette.set_membits(8); - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, badlands_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,32) + TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32).set_info_callback(FUNC(badlands_state::get_playfield_tile_info)); ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, badlands_state::s_mob_config); m_mob->set_gfxdecode(m_gfxdecode); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(badlands_state, screen_update_badlands) - MCFG_SCREEN_PALETTE("palette") + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(badlands_state::screen_update_badlands)); + m_screen->set_palette("palette"); MCFG_VIDEO_START_OVERRIDE(badlands_state,badlands) @@ -485,7 +485,7 @@ MACHINE_CONFIG_START(badlands_state::badlands) SPEAKER(config, "mono").front_center(); YM2151(config, "ymsnd", ATARI_CLOCK_14MHz/4).add_route(0, "mono", 0.30).add_route(1, "mono", 0.30); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/badlandsbl.cpp b/src/mame/drivers/badlandsbl.cpp index 4de71b6a8dc..fc49343a059 100644 --- a/src/mame/drivers/badlandsbl.cpp +++ b/src/mame/drivers/badlandsbl.cpp @@ -218,15 +218,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(badlandsbl_state::bootleg_sound_scanline) m_audiocpu->set_input_line(0, HOLD_LINE); } -MACHINE_CONFIG_START(badlandsbl_state::badlandsb) - +void badlandsbl_state::badlandsb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/4) /* Divisor estimated */ - MCFG_DEVICE_PROGRAM_MAP(bootleg_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", badlandsbl_state, irq1_line_hold) //vblank_int) + M68000(config, m_maincpu, XTAL(28'000'000)/4); /* Divisor estimated */ + m_maincpu->set_addrmap(AS_PROGRAM, &badlandsbl_state::bootleg_map); + m_maincpu->set_vblank_int("screen", FUNC(badlandsbl_state::irq1_line_hold)); //vblank_int) - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(20'000'000)/12) /* Divisor estimated */ - MCFG_DEVICE_PROGRAM_MAP(bootleg_audio_map) + Z80(config, m_audiocpu, XTAL(20'000'000)/12); /* Divisor estimated */ + m_audiocpu->set_addrmap(AS_PROGRAM, &badlandsbl_state::bootleg_audio_map); TIMER(config, "scantimer").configure_scanline(FUNC(badlandsbl_state::bootleg_sound_scanline), "screen", 0, 1); // config.m_perfect_cpu_quantum = subtag("maincpu"); @@ -241,18 +241,18 @@ MACHINE_CONFIG_START(badlandsbl_state::badlandsb) palette.set_format(palette_device::IRGB_1555, 256); palette.set_membits(8); - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, badlands_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 64,32) + TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32).set_info_callback(FUNC(badlands_state::get_playfield_tile_info)); // ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, badlands_state::s_mob_config); // m_mob->set_gfxdecode(m_gfxdecode); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(badlandsbl_state, screen_update_badlandsbl) - MCFG_SCREEN_PALETTE("palette") + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(badlandsbl_state::screen_update_badlandsbl)); + m_screen->set_palette("palette"); MCFG_VIDEO_START_OVERRIDE(badlands_state,badlands) @@ -260,7 +260,7 @@ MACHINE_CONFIG_START(badlandsbl_state::badlandsb) SPEAKER(config, "mono").front_center(); YM2151(config, "ymsnd", XTAL(20'000'000)/8).add_route(0, "mono", 0.30).add_route(1, "mono", 0.30); /* Divisor estimated */ -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/bailey.cpp b/src/mame/drivers/bailey.cpp index 4307c565800..e77823ba5de 100644 --- a/src/mame/drivers/bailey.cpp +++ b/src/mame/drivers/bailey.cpp @@ -88,11 +88,11 @@ void bailey_state::video_start() { } -MACHINE_CONFIG_START(bailey_state::bailey) - +void bailey_state::bailey(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(bailey) + NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK); + m_maincpu->set_constructor(netlist_bailey); /* video hardware */ SCREEN(config, "screen", SCREEN_TYPE_RASTER); @@ -102,7 +102,7 @@ MACHINE_CONFIG_START(bailey_state::bailey) m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL); m_video->set_fieldcount(1); m_video->set_threshold(0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/banctec.cpp b/src/mame/drivers/banctec.cpp index 7162aac96f7..5daea29a7ac 100644 --- a/src/mame/drivers/banctec.cpp +++ b/src/mame/drivers/banctec.cpp @@ -136,24 +136,25 @@ static GFXDECODE_START( gfx_banctec ) GFXDECODE_ENTRY( "chargen", 0x00000, banctec_gfx_layout, 0, 1 ) GFXDECODE_END -MACHINE_CONFIG_START(banctec_state::banctec) +void banctec_state::banctec(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I80C31, XTAL(11'059'200)) - MCFG_DEVICE_PROGRAM_MAP(banctec_mem) + I80C31(config, m_maincpu, XTAL(11'059'200)); + m_maincpu->set_addrmap(AS_PROGRAM, &banctec_state::banctec_mem); - MCFG_DEVICE_ADD("mcu", M6803, 4000000) /* Actual MCU is a Motorola 6803 and the clock frequency is still unknown */ - MCFG_DEVICE_PROGRAM_MAP(banctec_mcu_mem) + m6803_cpu_device &mcu(M6803(config, "mcu", 4000000)); /* Actual MCU is a Motorola 6803 and the clock frequency is still unknown */ + mcu.set_addrmap(AS_PROGRAM, &banctec_state::banctec_mcu_mem); // The video signal is generated by a R6545EAP character generator chip // The U20 EPROM holds the image data for the character set. // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE((52+1)*8, (31+1)*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 25*8-1) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size((52+1)*8, (31+1)*8); + screen.set_visarea(0*8, 40*8-1, 0*8, 25*8-1); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); PALETTE(config, m_palette, palette_device::MONOCHROME); GFXDECODE(config, "gfxdecode", m_palette, gfx_banctec); @@ -163,7 +164,7 @@ MACHINE_CONFIG_START(banctec_state::banctec) crtc.set_char_width(8); crtc.set_update_row_callback(FUNC(banctec_state::crtc_update_row), this); crtc.set_on_update_addr_change_callback(FUNC(banctec_state::crtc_addr), this); -MACHINE_CONFIG_END +} ROM_START(banctec) ROM_REGION(0x800, "maincpu", 0) diff --git a/src/mame/drivers/bankp.cpp b/src/mame/drivers/bankp.cpp index 35db3bbc218..843c6e9296e 100644 --- a/src/mame/drivers/bankp.cpp +++ b/src/mame/drivers/bankp.cpp @@ -293,20 +293,20 @@ INTERRUPT_GEN_MEMBER(bankp_state::vblank_irq) device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -MACHINE_CONFIG_START(bankp_state::bankp) - +void bankp_state::bankp(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK/6) - MCFG_DEVICE_PROGRAM_MAP(bankp_map) - MCFG_DEVICE_IO_MAP(bankp_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bankp_state, vblank_irq) + Z80(config, m_maincpu, MASTER_CLOCK/6); + m_maincpu->set_addrmap(AS_PROGRAM, &bankp_state::bankp_map); + m_maincpu->set_addrmap(AS_IO, &bankp_state::bankp_io_map); + m_maincpu->set_vblank_int("screen", FUNC(bankp_state::vblank_irq)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(bankp_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + screen.set_screen_update(FUNC(bankp_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bankp); PALETTE(config, m_palette, FUNC(bankp_state::bankp_palette), 32*4+16*8, 32); @@ -314,15 +314,12 @@ MACHINE_CONFIG_START(bankp_state::bankp) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("sn1", SN76489, MASTER_CLOCK/6) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + SN76489(config, "sn1", MASTER_CLOCK/6).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("sn2", SN76489, MASTER_CLOCK/6) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + SN76489(config, "sn2", MASTER_CLOCK/6).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("sn3", SN76489, MASTER_CLOCK/6) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + SN76489(config, "sn3", MASTER_CLOCK/6).add_route(ALL_OUTPUTS, "mono", 1.0); +} diff --git a/src/mame/drivers/barata.cpp b/src/mame/drivers/barata.cpp index 90e72d01e12..6e3e193ca05 100644 --- a/src/mame/drivers/barata.cpp +++ b/src/mame/drivers/barata.cpp @@ -307,7 +307,8 @@ READ8_MEMBER(barata_state::port2_r) * Machine Drivers * ************************/ -MACHINE_CONFIG_START(barata_state::barata) +void barata_state::barata(machine_config &config) +{ /* basic machine hardware */ I8051(config, m_maincpu, CPU_CLOCK); m_maincpu->port_out_cb<0>().set(FUNC(barata_state::port0_w)); @@ -322,7 +323,7 @@ MACHINE_CONFIG_START(barata_state::barata) SPEAKER(config, "speaker").front_center(); /* TODO: add sound samples */ -MACHINE_CONFIG_END +} /************************* * Rom Load * diff --git a/src/mame/drivers/batman.cpp b/src/mame/drivers/batman.cpp index efacf459faf..54f76b81007 100644 --- a/src/mame/drivers/batman.cpp +++ b/src/mame/drivers/batman.cpp @@ -183,11 +183,11 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(batman_state::batman) - +void batman_state::batman(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz); + m_maincpu->set_addrmap(AS_PROGRAM, &batman_state::main_map); EEPROM_2816(config, "eeprom").lock_after_write(true); @@ -204,13 +204,13 @@ MACHINE_CONFIG_START(batman_state::batman) TILEMAP(config, "vad:alpha", "gfxdecode", 2, 8, 8, TILEMAP_SCAN_ROWS, 64, 32, 0).set_info_callback(DEVICE_SELF_OWNER, FUNC(batman_state::get_alpha_tile_info)); ATARI_MOTION_OBJECTS(config, "vad:mob", 0, m_screen, batman_state::s_mob_config).set_gfxdecode("gfxdecode"); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses a VAD chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(batman_state, screen_update_batman) - MCFG_SCREEN_PALETTE("palette") + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(batman_state::screen_update_batman)); + m_screen->set_palette("palette"); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -219,7 +219,7 @@ MACHINE_CONFIG_START(batman_state::batman) m_jsa->main_int_cb().set_inputline(m_maincpu, M68K_IRQ_6); m_jsa->test_read_cb().set_ioport("260010").bit(6); m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/battlex.cpp b/src/mame/drivers/battlex.cpp index 4896c37c772..da2d2a9f05d 100644 --- a/src/mame/drivers/battlex.cpp +++ b/src/mame/drivers/battlex.cpp @@ -291,42 +291,42 @@ void battlex_state::machine_reset() m_in0_b4 = 0; } -MACHINE_CONFIG_START(battlex_state::battlex) - +void battlex_state::battlex(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,XTAL(10'000'000)/4 ) // ? - MCFG_DEVICE_PROGRAM_MAP(battlex_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(battlex_state, battlex_interrupt, 400) /* controls game speed? */ + Z80(config, m_maincpu, XTAL(10'000'000)/4 ); // ? + m_maincpu->set_addrmap(AS_PROGRAM, &battlex_state::battlex_map); + m_maincpu->set_addrmap(AS_IO, &battlex_state::io_map); + m_maincpu->set_periodic_int(FUNC(battlex_state::battlex_interrupt), attotime::from_hz(400)); /* controls game speed? */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(battlex_state, screen_update_battlex) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(battlex_state::screen_update_battlex)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_battlex); - MCFG_PALETTE_ADD("palette", 64 + 128) + PALETTE(config, m_palette).set_entries(64 + 128); /* sound hardware */ SPEAKER(config, "mono").front_center(); AY8910(config, "ay1", XTAL(10'000'000)/8).add_route(ALL_OUTPUTS, "mono", 0.40); // ? -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(battlex_state::dodgeman) +void battlex_state::dodgeman(machine_config &config) +{ battlex(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(dodgeman_io_map) + m_maincpu->set_addrmap(AS_IO, &battlex_state::dodgeman_io_map); MCFG_VIDEO_START_OVERRIDE(battlex_state, dodgeman) AY8910(config, "ay2", XTAL(10'000'000)/8).add_route(ALL_OUTPUTS, "mono", 0.40); // ? -MACHINE_CONFIG_END +} /************************************* diff --git a/src/mame/drivers/battlnts.cpp b/src/mame/drivers/battlnts.cpp index 63108a148de..10af6e61f14 100644 --- a/src/mame/drivers/battlnts.cpp +++ b/src/mame/drivers/battlnts.cpp @@ -231,26 +231,26 @@ void battlnts_state::machine_reset() m_spritebank = 0; } -MACHINE_CONFIG_START(battlnts_state::battlnts) - +void battlnts_state::battlnts(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", HD6309, XTAL(24'000'000) / 2 /* 3000000*4? */) - MCFG_DEVICE_PROGRAM_MAP(battlnts_map) + HD6309(config, m_maincpu, XTAL(24'000'000) / 2 /* 3000000*4? */); + m_maincpu->set_addrmap(AS_PROGRAM, &battlnts_state::battlnts_map); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000) / 6 /* 3579545? */) - MCFG_DEVICE_PROGRAM_MAP(battlnts_sound_map) + Z80(config, m_audiocpu, XTAL(24'000'000) / 6 /* 3579545? */); + m_audiocpu->set_addrmap(AS_PROGRAM, &battlnts_state::battlnts_sound_map); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(battlnts_state, screen_update_battlnts) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, battlnts_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(battlnts_state::screen_update_battlnts)); + screen.set_palette("palette"); + screen.screen_vblank().set(FUNC(battlnts_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, "palette", gfx_battlnts); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 128); @@ -270,12 +270,10 @@ MACHINE_CONFIG_START(battlnts_state::battlnts) GENERIC_LATCH_8(config, "soundlatch"); - MCFG_DEVICE_ADD("ym1", YM3812, XTAL(24'000'000) / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM3812(config, "ym1", XTAL(24'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("ym2", YM3812, XTAL(24'000'000) / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + YM3812(config, "ym2", XTAL(24'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 1.0); +} /************************************* diff --git a/src/mame/drivers/bbusters.cpp b/src/mame/drivers/bbusters.cpp index 701d7eadabe..26b9f3ba59c 100644 --- a/src/mame/drivers/bbusters.cpp +++ b/src/mame/drivers/bbusters.cpp @@ -244,7 +244,7 @@ void bbusters_state::machine_start() WRITE8_MEMBER(bbusters_state_base::sound_cpu_w) { - m_soundlatch[0]->write(space, 0, data&0xff); + m_soundlatch[0]->write(data&0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/bcs3.cpp b/src/mame/drivers/bcs3.cpp index 802ab90ed8d..f9d9f12cc8a 100644 --- a/src/mame/drivers/bcs3.cpp +++ b/src/mame/drivers/bcs3.cpp @@ -384,8 +384,8 @@ void bcs3_state::init_bcs3d() s_cols = 29; } -MACHINE_CONFIG_START(bcs3_state::bcs3) - +void bcs3_state::bcs3(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, XTAL(5'000'000) /2); m_maincpu->set_addrmap(AS_PROGRAM, &bcs3_state::bcs3_mem); @@ -393,13 +393,13 @@ MACHINE_CONFIG_START(bcs3_state::bcs3) m_maincpu->set_daisy_config(daisy_chain_intf); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(28*8, 12*10) - MCFG_SCREEN_VISIBLE_AREA(0,28*8-1,0,12*10-1) - MCFG_SCREEN_UPDATE_DRIVER(bcs3_state, screen_update_bcs3) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(28*8, 12*10); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bcs3_state::screen_update_bcs3)); + screen.set_palette("palette"); GFXDECODE(config, "gfxdecode", "palette", gfx_bcs3); PALETTE(config, "palette", palette_device::MONOCHROME); @@ -409,10 +409,10 @@ MACHINE_CONFIG_START(bcs3_state::bcs3) m_ctc->zc_callback<1>().set(FUNC(bcs3_state::ctc_z1_w)); CASSETTE(config, m_cass); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(bcs3_state::bcs3a) +} +void bcs3_state::bcs3a(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, XTAL(7'000'000) /2); m_maincpu->set_addrmap(AS_PROGRAM, &bcs3_state::bcs3a_mem); @@ -420,13 +420,13 @@ MACHINE_CONFIG_START(bcs3_state::bcs3a) m_maincpu->set_daisy_config(daisy_chain_intf); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(29*8, 12*10) - MCFG_SCREEN_VISIBLE_AREA(0,29*8-1,0,12*10-1) - MCFG_SCREEN_UPDATE_DRIVER(bcs3_state, screen_update_bcs3a) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(29*8, 12*10); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bcs3_state::screen_update_bcs3a)); + screen.set_palette("palette"); GFXDECODE(config, "gfxdecode", "palette", gfx_bcs3); PALETTE(config, "palette", palette_device::MONOCHROME); @@ -436,14 +436,14 @@ MACHINE_CONFIG_START(bcs3_state::bcs3a) m_ctc->zc_callback<1>().set(FUNC(bcs3_state::ctc_z1_w)); CASSETTE(config, m_cass); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bcs3_state::bcs3b) +void bcs3_state::bcs3b(machine_config &config) +{ bcs3a(config); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(40*8, 24*10) - MCFG_SCREEN_VISIBLE_AREA(0,40*8-1,0,24*10-1) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_size(40*8, 24*10); + subdevice<screen_device>("screen")->set_visarea(0, 40*8-1, 0, 24*10-1); +} /* ROM definition */ diff --git a/src/mame/drivers/beaminv.cpp b/src/mame/drivers/beaminv.cpp index 4648b557265..3de767c935e 100644 --- a/src/mame/drivers/beaminv.cpp +++ b/src/mame/drivers/beaminv.cpp @@ -340,22 +340,21 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(beaminv_state::beaminv) - +void beaminv_state::beaminv(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 2000000) /* 2 MHz ? */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(main_io_map) + Z80(config, m_maincpu, 2000000); /* 2 MHz ? */ + m_maincpu->set_addrmap(AS_PROGRAM, &beaminv_state::main_map); + m_maincpu->set_addrmap(AS_IO, &beaminv_state::main_io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 247, 16, 231) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_UPDATE_DRIVER(beaminv_state, screen_update_beaminv) - -MACHINE_CONFIG_END + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 247, 16, 231); + m_screen->set_refresh_hz(60); + m_screen->set_screen_update(FUNC(beaminv_state::screen_update_beaminv)); +} diff --git a/src/mame/drivers/beathead.cpp b/src/mame/drivers/beathead.cpp index 7bafc37d61e..e5590015a80 100644 --- a/src/mame/drivers/beathead.cpp +++ b/src/mame/drivers/beathead.cpp @@ -333,11 +333,11 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(beathead_state::beathead) - +void beathead_state::beathead(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", ASAP, ATARI_CLOCK_14MHz) - MCFG_DEVICE_PROGRAM_MAP(main_map) + ASAP(config, m_maincpu, ATARI_CLOCK_14MHz); + m_maincpu->set_addrmap(AS_PROGRAM, &beathead_state::main_map); EEPROM_2804(config, "eeprom").lock_after_write(true); @@ -346,13 +346,13 @@ MACHINE_CONFIG_START(beathead_state::beathead) TIMER(config, m_scan_timer).configure_generic(FUNC(beathead_state::scanline_callback)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_UPDATE_DRIVER(beathead_state, screen_update) - MCFG_SCREEN_SIZE(42*8, 262) - MCFG_SCREEN_VISIBLE_AREA(0*8, 42*8-1, 0*8, 30*8-1) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_refresh_hz(60); + m_screen->set_screen_update(FUNC(beathead_state::screen_update)); + m_screen->set_size(42*8, 262); + m_screen->set_visarea(0*8, 42*8-1, 0*8, 30*8-1); + m_screen->set_palette(m_palette); PALETTE(config, m_palette); m_palette->set_format(palette_device::IRGB_1555, 32768); @@ -364,7 +364,7 @@ MACHINE_CONFIG_START(beathead_state::beathead) ATARI_JSA_III(config, m_jsa, 0); m_jsa->test_read_cb().set_ioport("IN2").bit(6); m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/belatra.cpp b/src/mame/drivers/belatra.cpp index 3f36955692a..39b3855f32c 100644 --- a/src/mame/drivers/belatra.cpp +++ b/src/mame/drivers/belatra.cpp @@ -70,14 +70,15 @@ void belatra_state::belatra_map(address_map &map) static INPUT_PORTS_START( belatra ) INPUT_PORTS_END -MACHINE_CONFIG_START(belatra_state::belatra) - MCFG_DEVICE_ADD("maincpu", ARM7, 54000000) // guess... - MCFG_DEVICE_PROGRAM_MAP(belatra_map) +void belatra_state::belatra(machine_config &config) +{ + ARM7(config, m_maincpu, 54000000); // guess... + m_maincpu->set_addrmap(AS_PROGRAM, &belatra_state::belatra_map); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); /* unknown sound */ -MACHINE_CONFIG_END +} ROM_START( merryjn ) diff --git a/src/mame/drivers/berzerk.cpp b/src/mame/drivers/berzerk.cpp index 1741dac8e38..18cde8158e8 100644 --- a/src/mame/drivers/berzerk.cpp +++ b/src/mame/drivers/berzerk.cpp @@ -1120,39 +1120,38 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(berzerk_state::berzerk) - +void berzerk_state::berzerk(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(berzerk_map) - MCFG_DEVICE_IO_MAP(berzerk_io_map) + Z80(config, m_maincpu, MAIN_CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &berzerk_state::berzerk_map); + m_maincpu->set_addrmap(AS_IO, &berzerk_state::berzerk_io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_DEVICE_ADD("ls181_10c", TTL74181) - MCFG_DEVICE_ADD("ls181_12c", TTL74181) + TTL74181(config, m_ls181_10c); + TTL74181(config, m_ls181_12c); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(berzerk_state, screen_update) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + m_screen->set_screen_update(FUNC(berzerk_state::screen_update)); /* audio hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speech", S14001A, S14001_CLOCK/16/8) /* placeholder - the clock is software controllable */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + S14001A(config, m_s14001a, S14001_CLOCK/16/8).add_route(ALL_OUTPUTS, "mono", 1.00); /* placeholder - the clock is software controllable */ EXIDY(config, m_custom, 0).add_route(ALL_OUTPUTS, "mono", 0.33); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(berzerk_state::frenzy) +void berzerk_state::frenzy(machine_config &config) +{ berzerk(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(frenzy_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &berzerk_state::frenzy_map); +} diff --git a/src/mame/drivers/bestleag.cpp b/src/mame/drivers/bestleag.cpp index d8907d8e910..8916f5382fd 100644 --- a/src/mame/drivers/bestleag.cpp +++ b/src/mame/drivers/bestleag.cpp @@ -381,18 +381,19 @@ static GFXDECODE_START( gfx_bestleag ) GFXDECODE_ENTRY( "gfx2", 0, bestleag_char16layout, 0x300, 16 ) GFXDECODE_END -MACHINE_CONFIG_START(bestleag_state::bestleag) - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(bestleag_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bestleag_state, irq6_line_hold) - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bestleag_state, screen_update_bestleag) - MCFG_SCREEN_PALETTE(m_palette) +void bestleag_state::bestleag(machine_config &config) +{ + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &bestleag_state::bestleag_map); + m_maincpu->set_vblank_int("screen", FUNC(bestleag_state::irq6_line_hold)); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(bestleag_state::screen_update_bestleag)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bestleag); PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x800); @@ -400,16 +401,16 @@ MACHINE_CONFIG_START(bestleag_state::bestleag) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki", OKIM6295, 1000000, okim6295_device::PIN7_HIGH) /* Hand-tuned */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH); /* Hand-tuned */ + m_oki->add_route(ALL_OUTPUTS, "lspeaker", 1.00); + m_oki->add_route(ALL_OUTPUTS, "rspeaker", 1.00); +} -MACHINE_CONFIG_START(bestleag_state::bestleaw) +void bestleag_state::bestleaw(machine_config &config) +{ bestleag(config); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(bestleag_state, screen_update_bestleaw) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_screen_update(FUNC(bestleag_state::screen_update_bestleaw)); +} /* Rom Loading */ diff --git a/src/mame/drivers/beta.cpp b/src/mame/drivers/beta.cpp index 77b4ed96a7c..45ad006e090 100644 --- a/src/mame/drivers/beta.cpp +++ b/src/mame/drivers/beta.cpp @@ -347,16 +347,15 @@ void beta_state::machine_start() MACHINE_CONFIG_START(beta_state::beta) /* basic machine hardware */ - MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(4'000'000)/4) - MCFG_DEVICE_PROGRAM_MAP(beta_mem) + M6502(config, m_maincpu, XTAL(4'000'000)/4); + m_maincpu->set_addrmap(AS_PROGRAM, &beta_state::beta_mem); /* video hardware */ config.set_default_layout(layout_beta); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); /* devices */ mos6532_new_device &m6532(MOS6532_NEW(config, M6532_TAG, XTAL(4'000'000)/4)); diff --git a/src/mame/drivers/bfcobra.cpp b/src/mame/drivers/bfcobra.cpp index ac979b2976c..f406329a2cd 100644 --- a/src/mame/drivers/bfcobra.cpp +++ b/src/mame/drivers/bfcobra.cpp @@ -1638,28 +1638,29 @@ INTERRUPT_GEN_MEMBER(bfcobra_state::vblank_gen) update_irqs(); } -MACHINE_CONFIG_START(bfcobra_state::bfcobra) - MCFG_DEVICE_ADD("maincpu", Z80, Z80_XTAL) - MCFG_DEVICE_PROGRAM_MAP(z80_prog_map) - MCFG_DEVICE_IO_MAP(z80_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bfcobra_state, vblank_gen) +void bfcobra_state::bfcobra(machine_config &config) +{ + Z80(config, m_maincpu, Z80_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &bfcobra_state::z80_prog_map); + m_maincpu->set_addrmap(AS_IO, &bfcobra_state::z80_io_map); + m_maincpu->set_vblank_int("screen", FUNC(bfcobra_state::vblank_gen)); - MCFG_DEVICE_ADD("audiocpu", MC6809, M6809_XTAL) // MC6809P - MCFG_DEVICE_PROGRAM_MAP(m6809_prog_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(bfcobra_state, timer_irq, 1000) + MC6809(config, m_audiocpu, M6809_XTAL); // MC6809P + m_audiocpu->set_addrmap(AS_PROGRAM, &bfcobra_state::m6809_prog_map); + m_audiocpu->set_periodic_int(FUNC(bfcobra_state::timer_irq), attotime::from_hz(1000)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* TODO */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512 - 1, 0, 256 - 1) - MCFG_SCREEN_UPDATE_DRIVER(bfcobra_state, screen_update_bfcobra) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bfcobra_state::screen_update_bfcobra)); - MCFG_PALETTE_ADD("palette", 256) + PALETTE(config, m_palette).set_entries(256); ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // MUSIC Semiconductor TR9C1710 RAMDAC or equivalent ramdac.set_addrmap(0, &bfcobra_state::ramdac_map); @@ -1669,8 +1670,7 @@ MACHINE_CONFIG_START(bfcobra_state::bfcobra) AY8910(config, "aysnd", M6809_XTAL / 4).add_route(ALL_OUTPUTS, "mono", 0.20); - MCFG_DEVICE_ADD("upd", UPD7759) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) + UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.40); /* ACIAs */ ACIA6850(config, m_acia6850_0, 0); @@ -1688,7 +1688,7 @@ MACHINE_CONFIG_START(bfcobra_state::bfcobra) acia_clock.signal_handler().set(FUNC(bfcobra_state::write_acia_clock)); METERS(config, m_meters, 0).set_number(8); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/bfm_ad5.cpp b/src/mame/drivers/bfm_ad5.cpp index 82b05b6d69f..b97d231501a 100644 --- a/src/mame/drivers/bfm_ad5.cpp +++ b/src/mame/drivers/bfm_ad5.cpp @@ -79,15 +79,16 @@ INTERRUPT_GEN_MEMBER(adder5_state::ad5_fake_timer_int) // m_maincpu->set_input_line_and_vector(5, HOLD_LINE, 0x8c); } -MACHINE_CONFIG_START(adder5_state::bfm_ad5) - MCFG_DEVICE_ADD("maincpu", MCF5206E, 40000000) /* MCF5206eFT */ - MCFG_DEVICE_PROGRAM_MAP(ad5_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(adder5_state, ad5_fake_timer_int, 1000) +void adder5_state::bfm_ad5(machine_config &config) +{ + MCF5206E(config, m_maincpu, 40000000); /* MCF5206eFT */ + m_maincpu->set_addrmap(AS_PROGRAM, &adder5_state::ad5_map); + m_maincpu->set_periodic_int(FUNC(adder5_state::ad5_fake_timer_int), attotime::from_hz(1000)); MCF5206E_PERIPHERAL(config, "maincpu_onboard", 0); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); /* unknown sound */ -MACHINE_CONFIG_END +} #include "bfm_ad5sw.hxx" diff --git a/src/mame/drivers/bfm_sc2.cpp b/src/mame/drivers/bfm_sc2.cpp index 9e8d5303a15..048bef99198 100644 --- a/src/mame/drivers/bfm_sc2.cpp +++ b/src/mame/drivers/bfm_sc2.cpp @@ -201,9 +201,9 @@ public: , m_upd7759(*this, "upd") , m_vfd0(*this, "vfd0") , m_vfd1(*this, "vfd1") + , m_ym2413(*this, "ymsnd") , m_strobein(*this, "STROBE%u", 0) , m_rombank1(*this, "bank1") - , m_ym2413(*this, "ymsnd") , m_meters(*this, "meters") , m_lamps(*this, "lamp%u", 0U) { @@ -272,6 +272,7 @@ protected: required_device<cpu_device> m_maincpu; required_device<upd7759_device> m_upd7759; optional_device<bfm_bd1_device> m_vfd0, m_vfd1; + optional_device<ym2413_device> m_ym2413; int m_sc2_show_door; int m_sc2_door_state; @@ -287,7 +288,6 @@ protected: private: required_ioport_array<12> m_strobein; optional_memory_bank m_rombank1; - optional_device<ym2413_device> m_ym2413; optional_device<meters_device> m_meters; // scorpion2_vid doesn't use this (scorpion2_vidm does) @@ -2277,11 +2277,12 @@ void bfm_sc2_state::machine_start() save_state(); } -MACHINE_CONFIG_START(bfm_sc2_vid_state::scorpion2_vid) - MCFG_DEVICE_ADD("maincpu", M6809, MASTER_CLOCK/4 ) // 6809 CPU at 2 Mhz - MCFG_DEVICE_PROGRAM_MAP(memmap_vid) // setup scorpion2 board memorymap - MCFG_DEVICE_PERIODIC_INT_DRIVER(bfm_sc2_vid_state, timer_irq, 1000) // generate 1000 IRQ's per second - config.m_minimum_quantum = attotime::from_hz(960); // needed for serial communication !! +void bfm_sc2_vid_state::scorpion2_vid(machine_config &config) +{ + M6809(config, m_maincpu, MASTER_CLOCK/4); // 6809 CPU at 2 Mhz + m_maincpu->set_addrmap(AS_PROGRAM, &bfm_sc2_vid_state::memmap_vid); // setup scorpion2 board memorymap + m_maincpu->set_periodic_int(FUNC(bfm_sc2_vid_state::timer_irq), attotime::from_hz(1000)); // generate 1000 IRQ's per second + config.m_minimum_quantum = attotime::from_hz(960); // needed for serial communication !! WATCHDOG_TIMER(config, "watchdog").set_time(PERIOD_OF_555_MONOSTABLE(120000,100e-9)); @@ -2295,18 +2296,17 @@ MACHINE_CONFIG_START(bfm_sc2_vid_state::scorpion2_vid) BFM_ADDER2(config, "adder2", 0); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("upd", UPD7759) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + YM2413(config, m_ym2413, XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0); +} /* machine driver for scorpion2_vid board with meters (i.e. quintoon uk). Are we really sure the other games don't?*/ -MACHINE_CONFIG_START(bfm_sc2_vid_state::scorpion2_vidm) +void bfm_sc2_vid_state::scorpion2_vidm(machine_config &config) +{ scorpion2_vid(config); _8meters(config); -MACHINE_CONFIG_END +} @@ -3747,10 +3747,11 @@ void bfm_sc2_dmd_state::machine_start() /* machine driver for scorpion2 board */ -MACHINE_CONFIG_START(bfm_sc2_awp_state::scorpion2) - MCFG_DEVICE_ADD("maincpu", M6809, MASTER_CLOCK/4 ) - MCFG_DEVICE_PROGRAM_MAP(memmap_no_vid) - MCFG_DEVICE_PERIODIC_INT_DRIVER(bfm_sc2_awp_state, timer_irq, 1000) +void bfm_sc2_awp_state::scorpion2(machine_config &config) +{ + M6809(config, m_maincpu, MASTER_CLOCK/4); + m_maincpu->set_addrmap(AS_PROGRAM, &bfm_sc2_awp_state::memmap_no_vid); + m_maincpu->set_periodic_int(FUNC(bfm_sc2_awp_state::timer_irq), attotime::from_hz(1000)); WATCHDOG_TIMER(config, "watchdog").set_time(PERIOD_OF_555_MONOSTABLE(120000,100e-9)); @@ -3758,11 +3759,9 @@ MACHINE_CONFIG_START(bfm_sc2_awp_state::scorpion2) BFM_BD1(config, m_vfd1, 60, 1); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("upd",UPD7759) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("ymsnd",YM2413, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2413(config, m_ym2413, XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "e2ram").set_custom_handler(FUNC(bfm_sc2_awp_state::e2ram_init)); @@ -3784,7 +3783,7 @@ MACHINE_CONFIG_START(bfm_sc2_awp_state::scorpion2) m_reel[5]->optic_handler().set(FUNC(bfm_sc2_awp_state::reel_optic_cb<5>)); _8meters(config); -MACHINE_CONFIG_END +} #if 0 void bfm_sc2_awp_state::scorpion2_3m(machine_config &config) @@ -3807,20 +3806,19 @@ void bfm_sc2_awp_state::scorpion3(machine_config &config) /* machine driver for scorpion2 board + matrix board */ -MACHINE_CONFIG_START(bfm_sc2_dmd_state::scorpion2_dm01) +void bfm_sc2_dmd_state::scorpion2_dm01(machine_config &config) +{ config.m_minimum_quantum = attotime::from_hz(960); // needed for serial communication !! - MCFG_DEVICE_ADD("maincpu", M6809, MASTER_CLOCK/4 ) - MCFG_DEVICE_PROGRAM_MAP(memmap_no_vid) - MCFG_DEVICE_PERIODIC_INT_DRIVER(bfm_sc2_dmd_state, timer_irq, 1000) + M6809(config, m_maincpu, MASTER_CLOCK/4); + m_maincpu->set_addrmap(AS_PROGRAM, &bfm_sc2_dmd_state::memmap_no_vid); + m_maincpu->set_periodic_int(FUNC(bfm_sc2_dmd_state::timer_irq), attotime::from_hz(1000)); WATCHDOG_TIMER(config, "watchdog").set_time(PERIOD_OF_555_MONOSTABLE(120000,100e-9)); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd",YM2413, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2413(config, m_ym2413, XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("upd",UPD7759) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "e2ram").set_custom_handler(FUNC(bfm_sc2_dmd_state::e2ram_init)); @@ -3844,7 +3842,7 @@ MACHINE_CONFIG_START(bfm_sc2_dmd_state::scorpion2_dm01) m_reel[5]->optic_handler().set(FUNC(bfm_sc2_dmd_state::reel_optic_cb<5>)); _8meters(config); -MACHINE_CONFIG_END +} void bfm_sc2_dmd_state::scorpion2_dm01_3m(machine_config &config) { diff --git a/src/mame/drivers/bfm_swp.cpp b/src/mame/drivers/bfm_swp.cpp index 737fb1f05f7..85e2b22ab64 100644 --- a/src/mame/drivers/bfm_swp.cpp +++ b/src/mame/drivers/bfm_swp.cpp @@ -201,25 +201,24 @@ void bfm_swp_state::machine_start() } -MACHINE_CONFIG_START(bfm_swp_state::bfm_swp) - +void bfm_swp_state::bfm_swp(machine_config &config) +{ /* basic machine hardware */ M68340(config, m_maincpu, 16000000); m_maincpu->set_addrmap(AS_PROGRAM, &bfm_swp_state::bfm_swp_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_UPDATE_DRIVER(bfm_swp_state, screen_update) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_screen_update(FUNC(bfm_swp_state::screen_update)); + screen.set_size(64*8, 64*8); + screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymz", YMZ280B, 10000000 ) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + YMZ280B(config, "ymz", 10000000).add_route(ALL_OUTPUTS, "mono", 1.0); +} ROM_START( c3_rtime ) ROM_REGION( 0x100000, "maincpu", 0 ) diff --git a/src/mame/drivers/bgt.cpp b/src/mame/drivers/bgt.cpp index 4f2f90354a6..f9e6c432114 100644 --- a/src/mame/drivers/bgt.cpp +++ b/src/mame/drivers/bgt.cpp @@ -49,11 +49,12 @@ static INPUT_PORTS_START( bgt ) INPUT_PORTS_END -MACHINE_CONFIG_START(bgt_state::bgt) - MCFG_DEVICE_ADD("maincpu", V30, 12000000 ) // ? unknown CPU.. definitely x86 based tho - MCFG_DEVICE_PROGRAM_MAP(bgt_map) - MCFG_DEVICE_IO_MAP(bgt_io) -MACHINE_CONFIG_END +void bgt_state::bgt(machine_config &config) +{ + V30(config, m_maincpu, 12000000); // ? unknown CPU.. definitely x86 based tho + m_maincpu->set_addrmap(AS_PROGRAM, &bgt_state::bgt_map); + m_maincpu->set_addrmap(AS_IO, &bgt_state::bgt_io); +} ROM_START( bg_ddb ) ROM_REGION( 0x100000, "maincpu", 0 ) diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp index c32d45dffe8..0c49250c480 100644 --- a/src/mame/drivers/bigbord2.cpp +++ b/src/mame/drivers/bigbord2.cpp @@ -548,7 +548,8 @@ MC6845_UPDATE_ROW( bigbord2_state::crtc_update_row ) #define MAIN_CLOCK 8_MHz_XTAL / 2 -MACHINE_CONFIG_START(bigbord2_state::bigbord2) +void bigbord2_state::bigbord2(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, MAIN_CLOCK); m_maincpu->set_addrmap(AS_PROGRAM, &bigbord2_state::bigbord2_mem); @@ -556,9 +557,9 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2) m_maincpu->set_daisy_config(daisy_chain); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(10.69425_MHz_XTAL, 700, 0, 560, 260, 0, 240) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(10.69425_MHz_XTAL, 700, 0, 560, 260, 0, 240); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_crt8002); PALETTE(config, m_palette, palette_device::MONOCHROME); @@ -615,7 +616,7 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2) m_syslatch1->q_out_cb<6>().set(FUNC(bigbord2_state::disk_motor_w)); // MOTOR m_syslatch1->q_out_cb<7>().set("beeper", FUNC(beep_device::set_state)); // BELL - MCFG_DEVICE_ADD("outlatch1", LS259, 0) // U96 + LS259(config, "outlatch1", 0); // U96 /* keyboard */ generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); @@ -623,9 +624,8 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 950) // actual frequency is unknown - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) -MACHINE_CONFIG_END + BEEP(config, "beeper", 950).add_route(ALL_OUTPUTS, "mono", 0.50); // actual frequency is unknown +} /* ROMs */ diff --git a/src/mame/drivers/bigstrkb.cpp b/src/mame/drivers/bigstrkb.cpp index e77eedb6992..a74d01c7885 100644 --- a/src/mame/drivers/bigstrkb.cpp +++ b/src/mame/drivers/bigstrkb.cpp @@ -200,21 +200,21 @@ GFXDECODE_END /* Machine Driver */ -MACHINE_CONFIG_START(bigstrkb_state::bigstrkb) - - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(bigstrkb_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bigstrkb_state, irq6_line_hold) +void bigstrkb_state::bigstrkb(machine_config &config) +{ + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &bigstrkb_state::bigstrkb_map); + m_maincpu->set_vblank_int("screen", FUNC(bigstrkb_state::irq6_line_hold)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bigstrkb); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bigstrkb_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(bigstrkb_state::screen_update)); + screen.set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x400); @@ -222,14 +222,14 @@ MACHINE_CONFIG_START(bigstrkb_state::bigstrkb) SPEAKER(config, "rspeaker").front_right(); // YM2151(config, "ymsnd", 4000000); - MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30) + okim6295_device &oki1(OKIM6295(config, "oki1", 4000000, okim6295_device::PIN7_HIGH)); + oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.30); + oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.30); - MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30) -MACHINE_CONFIG_END + okim6295_device &oki2(OKIM6295(config, "oki2", 4000000, okim6295_device::PIN7_HIGH)); + oki2.add_route(ALL_OUTPUTS, "lspeaker", 0.30); + oki2.add_route(ALL_OUTPUTS, "rspeaker", 0.30); +} /* Rom Loading */ diff --git a/src/mame/drivers/bingo.cpp b/src/mame/drivers/bingo.cpp index 1be53b0a822..b00b4794f7b 100644 --- a/src/mame/drivers/bingo.cpp +++ b/src/mame/drivers/bingo.cpp @@ -46,11 +46,12 @@ void bingo_state::init_bingo() { } -MACHINE_CONFIG_START(bingo_state::bingo) +void bingo_state::bingo(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", S2650, 1000000) - MCFG_DEVICE_PROGRAM_MAP(bingo_map) -MACHINE_CONFIG_END + S2650(config, m_maincpu, 1000000); + m_maincpu->set_addrmap(AS_PROGRAM, &bingo_state::bingo_map); +} class seeben_state : public driver_device { @@ -89,11 +90,12 @@ void seeben_state::init_seeben() { } -MACHINE_CONFIG_START(seeben_state::seeben) +void seeben_state::seeben(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8085A, 1000000) - MCFG_DEVICE_PROGRAM_MAP(seeben_map) -MACHINE_CONFIG_END + I8085A(config, m_maincpu, 1000000); + m_maincpu->set_addrmap(AS_PROGRAM, &seeben_state::seeben_map); +} class splin_state : public driver_device { @@ -134,11 +136,12 @@ void splin_state::init_splin() { } -MACHINE_CONFIG_START(splin_state::splin) +void splin_state::splin(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I80186, 16000000) - MCFG_DEVICE_PROGRAM_MAP(splin_map) -MACHINE_CONFIG_END + I80186(config, m_maincpu, 16000000); + m_maincpu->set_addrmap(AS_PROGRAM, &splin_state::splin_map); +} ROM_START(cntinntl) ROM_REGION(0x8000, "maincpu", 0) diff --git a/src/mame/drivers/bingoc.cpp b/src/mame/drivers/bingoc.cpp index e6a55bd123d..1b16e332a72 100644 --- a/src/mame/drivers/bingoc.cpp +++ b/src/mame/drivers/bingoc.cpp @@ -109,7 +109,7 @@ READ8_MEMBER(bingoc_state::sound_test_r) #else WRITE16_MEMBER(bingoc_state::main_sound_latch_w) { - m_soundlatch->write(space,0,data&0xff); + m_soundlatch->write(data&0xff); m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } #endif @@ -168,40 +168,40 @@ static INPUT_PORTS_START( bingoc ) INPUT_PORTS_END -MACHINE_CONFIG_START(bingoc_state::bingoc) - - MCFG_DEVICE_ADD("maincpu", M68000,8000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bingoc_state, irq2_line_hold) +void bingoc_state::bingoc(machine_config &config) +{ + M68000(config, m_maincpu, 8000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &bingoc_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(bingoc_state::irq2_line_hold)); - MCFG_DEVICE_ADD("soundcpu", Z80,4000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_io) + Z80(config, m_soundcpu, 4000000); /* ? MHz */ + m_soundcpu->set_addrmap(AS_PROGRAM, &bingoc_state::sound_map); + m_soundcpu->set_addrmap(AS_IO, &bingoc_state::sound_io); #if SOUND_TEST - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bingoc_state, nmi_line_pulse) + m_soundcpu->set_vblank_int("screen", FUNC(bingoc_state::nmi_line_pulse)); #endif - MCFG_DEVICE_ADD("uart1", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart2", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart3", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart4", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart5", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart6", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart7", I8251, 4000000) // unknown - MCFG_DEVICE_ADD("uart8", I8251, 4000000) // unknown + I8251(config, "uart1", 4000000); // unknown + I8251(config, "uart2", 4000000); // unknown + I8251(config, "uart3", 4000000); // unknown + I8251(config, "uart4", 4000000); // unknown + I8251(config, "uart5", 4000000); // unknown + I8251(config, "uart6", 4000000); // unknown + I8251(config, "uart7", 4000000); // unknown + I8251(config, "uart8", 4000000); // unknown - MCFG_DEVICE_ADD("io", SEGA_315_5338A, 0) // ? + SEGA_315_5338A(config, "io", 0); // ? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(bingoc_state, screen_update_bingoc) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bingoc_state::screen_update_bingoc)); + screen.set_palette("palette"); - MCFG_PALETTE_ADD("palette", 0x100) + PALETTE(config, "palette").set_entries(0x100); SPEAKER(config, "lspeaker").front_left(); //might just be mono... @@ -211,10 +211,10 @@ MACHINE_CONFIG_START(bingoc_state::bingoc) YM2151(config, "ymsnd", 7159160/2).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0); - MCFG_DEVICE_ADD("upd", UPD7759) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) -MACHINE_CONFIG_END + UPD7759(config, m_upd7759); + m_upd7759->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_upd7759->add_route(ALL_OUTPUTS, "rspeaker", 1.0); +} ROM_START( bingoc ) ROM_REGION( 0x40000, "maincpu", 0 ) diff --git a/src/mame/drivers/bingoman.cpp b/src/mame/drivers/bingoman.cpp index 17da5720752..db3196dd5fb 100644 --- a/src/mame/drivers/bingoman.cpp +++ b/src/mame/drivers/bingoman.cpp @@ -379,28 +379,28 @@ void bingoman_state::bingoman_palette(palette_device &palette) const { } -MACHINE_CONFIG_START(bingoman_state::bingoman) - +void bingoman_state::bingoman(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", H83002, XTAL(20'000'000)) /* TODO: correct CPU type */ - MCFG_DEVICE_PROGRAM_MAP(bingoman_prg_map) - MCFG_DEVICE_IO_MAP(bingoman_io_map) + H83002(config, m_maincpu, XTAL(20'000'000)); /* TODO: correct CPU type */ + m_maincpu->set_addrmap(AS_PROGRAM, &bingoman_state::bingoman_prg_map); + m_maincpu->set_addrmap(AS_IO, &bingoman_state::bingoman_io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(bingoman_state, screen_update) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_screen_update(FUNC(bingoman_state::screen_update)); + screen.set_size(32*8, 32*8); + screen.set_visarea_full(); + screen.set_palette("palette"); GFXDECODE(config, "gfxdecode", "palette", gfx_bingoman); PALETTE(config, "palette", FUNC(bingoman_state::bingoman_palette), 8); /* sound hardware */ SPEAKER(config, "mono").front_center(); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/bingowav.cpp b/src/mame/drivers/bingowav.cpp index f2284300fc5..9286efd3343 100644 --- a/src/mame/drivers/bingowav.cpp +++ b/src/mame/drivers/bingowav.cpp @@ -82,7 +82,6 @@ void bingowav_state::bingowav_main_map(address_map &map) map(0x140000, 0x140001).nopr(); map(0x150001, 0x150001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x150003, 0x150003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); - map(0xfffc00, 0xffffff).rw("maintmp", FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); } void bingowav_state::bingowav_audio_map(address_map &map) @@ -114,12 +113,9 @@ INPUT_PORTS_END void bingowav_state::bingowav(machine_config &config) { - M68000(config, m_maincpu, 12000000); // actually TMP63803F-16 + TMP68301(config, m_maincpu, 12000000); // actually TMP63803F-16 m_maincpu->set_addrmap(AS_PROGRAM, &bingowav_state::bingowav_main_map); - tmp68301_device &tmp68301(TMP68301(config, "maintmp", 0)); // wrong - tmp68301.set_cputag(m_maincpu); - te7750_device &mainioh(TE7750(config, "mainioh")); mainioh.ios_cb().set_constant(5); diff --git a/src/mame/drivers/bionicc.cpp b/src/mame/drivers/bionicc.cpp index 47c348b84f3..635b9ef7c6f 100644 --- a/src/mame/drivers/bionicc.cpp +++ b/src/mame/drivers/bionicc.cpp @@ -108,7 +108,7 @@ WRITE8_MEMBER(bionicc_state::mcu_shared_w) WRITE8_MEMBER(bionicc_state::out1_w) { - m_soundlatch->write(space,0,data); + m_soundlatch->write(data); } WRITE8_MEMBER(bionicc_state::out3_w) @@ -388,21 +388,21 @@ void bionicc_state::machine_reset() m_scroll[3] = 0; } -MACHINE_CONFIG_START(bionicc_state::bionicc) - +void bionicc_state::bionicc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) /* 12 MHz - verified in schematics */ - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); /* 12 MHz - verified in schematics */ + m_maincpu->set_addrmap(AS_PROGRAM, &bionicc_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(bionicc_state::scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181) / 4) /* EXO3 C,B=GND, A=5V ==> Divisor 2^2 */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181) / 4)); /* EXO3 C,B=GND, A=5V ==> Divisor 2^2 */ + audiocpu.set_addrmap(AS_PROGRAM, &bionicc_state::sound_map); /* FIXME: interrupt timing * schematics indicate that nmi_line is set on M680000 access with AB1=1 * and IOCS=0 (active low), see pages A-1/10, A-4/10 in schematics */ - MCFG_DEVICE_PERIODIC_INT_DRIVER(bionicc_state, nmi_line_pulse, 4*60) + audiocpu.set_periodic_int(FUNC(bionicc_state::nmi_line_pulse), attotime::from_hz(4*60)); /* Protection MCU Intel C8751H-88 runs at 24MHz / 4 = 6MHz */ I8751(config, m_mcu, XTAL(24'000'000) / 4); @@ -411,16 +411,16 @@ MACHINE_CONFIG_START(bionicc_state::bionicc) m_mcu->port_out_cb<3>().set(FUNC(bionicc_state::out3_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); /* FIXME: should be 257 visible horizontal pixels, first visible pixel should be repeated, back porch/front porch should be separated */ - MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 386, 0, 256, 260, 16, 240) - MCFG_SCREEN_UPDATE_DRIVER(bionicc_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen.set_raw(XTAL(24'000'000) / 4, 386, 0, 256, 260, 16, 240); + screen.set_screen_update(FUNC(bionicc_state::screen_update)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bionicc); - MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0) + TIGEROAD_SPRITE(config, m_spritegen, 0); PALETTE(config, m_palette).set_format(2, &bionicc_state::RRRRGGGGBBBBIIII, 1024); @@ -431,7 +431,7 @@ MACHINE_CONFIG_START(bionicc_state::bionicc) GENERIC_LATCH_8(config, m_soundlatch); YM2151(config, "ymsnd", XTAL(14'318'181) / 4).add_route(0, "mono", 0.60).add_route(1, "mono", 0.60); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/bitgraph.cpp b/src/mame/drivers/bitgraph.cpp index 07a98fdb25e..4d8c2f6e2c6 100644 --- a/src/mame/drivers/bitgraph.cpp +++ b/src/mame/drivers/bitgraph.cpp @@ -492,14 +492,15 @@ void bitgraph_state::machine_reset() } -MACHINE_CONFIG_START(bitgraph_state::bg_motherboard) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(40) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(1024, 768) - MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) - MCFG_SCREEN_UPDATE_DRIVER(bitgraph_state, screen_update) - MCFG_SCREEN_PALETTE("palette") +void bitgraph_state::bg_motherboard(machine_config &config) +{ + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(40); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + m_screen->set_size(1024, 768); + m_screen->set_visarea_full(); + m_screen->set_screen_update(FUNC(bitgraph_state::screen_update)); + m_screen->set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); @@ -551,13 +552,13 @@ MACHINE_CONFIG_START(bitgraph_state::bg_motherboard) m_pia->readpb_handler().set(FUNC(bitgraph_state::pia_pb_r)); m_pia->writepb_handler().set(FUNC(bitgraph_state::pia_pb_w)); - MCFG_DEVICE_ADD(EAROM_TAG, ER2055, 0) + ER2055(config, m_earom, 0); SPEAKER(config, "mono").front_center(); AY8912(config, m_psg, XTAL(1'294'400)); m_psg->port_a_write_callback().set(FUNC(bitgraph_state::earom_write)); m_psg->add_route(ALL_OUTPUTS, "mono", 1.00); -MACHINE_CONFIG_END +} #ifdef UNUSED_FUNCTION void bitgraph_state::bg_ppu(machine_config &config) diff --git a/src/mame/drivers/bk.cpp b/src/mame/drivers/bk.cpp index 60dd90a8033..5094b821dde 100644 --- a/src/mame/drivers/bk.cpp +++ b/src/mame/drivers/bk.cpp @@ -193,12 +193,12 @@ void bk_state::bk0010(machine_config &config) SOFTWARE_LIST(config, "cass_list").set_original("bk0010"); } -MACHINE_CONFIG_START(bk_state::bk0010fd) +void bk_state::bk0010fd(machine_config &config) +{ bk0010(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bk0010fd_mem) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &bk_state::bk0010fd_mem); +} /* ROM definition */ diff --git a/src/mame/drivers/bking.cpp b/src/mame/drivers/bking.cpp index 3e6917692ef..7243c7be871 100644 --- a/src/mame/drivers/bking.cpp +++ b/src/mame/drivers/bking.cpp @@ -42,7 +42,7 @@ WRITE8_MEMBER(bking_state::bking_sndnmi_enable_w) WRITE8_MEMBER(bking_state::bking_soundlatch_w) { - m_soundlatch->write(space, offset, bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7)); + m_soundlatch->write(bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7)); } WRITE8_MEMBER(bking_state::bking3_addr_l_w) @@ -389,33 +389,33 @@ MACHINE_RESET_MEMBER(bking_state,bking3) m_addr_l = 0; } -MACHINE_CONFIG_START(bking_state::bking) - +void bking_state::bking(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("main_cpu", Z80, XTAL(12'000'000)/4) /* 3 MHz */ - MCFG_DEVICE_PROGRAM_MAP(bking_map) - MCFG_DEVICE_IO_MAP(bking_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bking_state, irq0_line_hold) + z80_device &maincpu(Z80(config, "main_cpu", XTAL(12'000'000)/4)); /* 3 MHz */ + maincpu.set_addrmap(AS_PROGRAM, &bking_state::bking_map); + maincpu.set_addrmap(AS_IO, &bking_state::bking_io_map); + maincpu.set_vblank_int("screen", FUNC(bking_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(6'000'000)/2) /* 3 MHz */ - MCFG_DEVICE_PROGRAM_MAP(bking_audio_map) + Z80(config, m_audiocpu, XTAL(6'000'000)/2); /* 3 MHz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &bking_state::bking_audio_map); /* interrupts (from Jungle King hardware, might be wrong): */ /* - no interrupts synced with vblank */ /* - NMI triggered by the main CPU */ /* - periodic IRQ, with frequency 6000000/(4*16*16*10*16) = 36.621 Hz, */ - MCFG_DEVICE_PERIODIC_INT_DRIVER(bking_state, irq0_line_hold, (double)6000000/(4*16*16*10*16)) + m_audiocpu->set_periodic_int(FUNC(bking_state::irq0_line_hold), attotime::from_hz((double)6000000/(4*16*16*10*16))); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bking_state, screen_update_bking) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, bking_state, screen_vblank_bking)) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(bking_state::screen_update_bking)); + m_screen->screen_vblank().set(FUNC(bking_state::screen_vblank_bking)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bking); PALETTE(config, m_palette, FUNC(bking_state::bking_palette), 4*8 + 4*4 + 4*2 + 4*2); @@ -438,22 +438,22 @@ MACHINE_CONFIG_START(bking_state::bking) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bking_state::bking3) +void bking_state::bking3(machine_config &config) +{ bking(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("main_cpu") - MCFG_DEVICE_IO_MAP(bking3_io_map) + subdevice<z80_device>("main_cpu")->set_addrmap(AS_IO, &bking_state::bking3_io_map); - MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL(3'000'000)) /* xtal is 3MHz, divided by 4 internally */ + TAITO68705_MCU(config, m_bmcu, XTAL(3'000'000)); /* xtal is 3MHz, divided by 4 internally */ MCFG_MACHINE_START_OVERRIDE(bking_state,bking3) MCFG_MACHINE_RESET_OVERRIDE(bking_state,bking3) config.m_minimum_quantum = attotime::from_hz(6000); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/blackt96.cpp b/src/mame/drivers/blackt96.cpp index 58c2ca104f9..690fab53182 100644 --- a/src/mame/drivers/blackt96.cpp +++ b/src/mame/drivers/blackt96.cpp @@ -477,10 +477,11 @@ void blackt96_state::tile_callback(int &tile, int& fx, int& fy, int& region) } -MACHINE_CONFIG_START(blackt96_state::blackt96) - MCFG_DEVICE_ADD("maincpu", M68000, 18000000 /2) - MCFG_DEVICE_PROGRAM_MAP(blackt96_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blackt96_state, irq1_line_hold) +void blackt96_state::blackt96(machine_config &config) +{ + M68000(config, m_maincpu, 18000000 /2); + m_maincpu->set_addrmap(AS_PROGRAM, &blackt96_state::blackt96_map); + m_maincpu->set_vblank_int("screen", FUNC(blackt96_state::irq1_line_hold)); pic16c57_device &audiocpu(PIC16C57(config, "audiocpu", 8000000)); /* ? */ audiocpu.write_a().set(FUNC(blackt96_state::blackt96_soundio_port_a_w)); @@ -491,14 +492,14 @@ MACHINE_CONFIG_START(blackt96_state::blackt96) GFXDECODE(config, m_gfxdecode, m_palette, gfx_blackt96); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1) - MCFG_SCREEN_VISIBLE_AREA(0*8, 256-1, 2*8, 240-1) - MCFG_SCREEN_UPDATE_DRIVER(blackt96_state, screen_update_blackt96) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); +// screen.set_visarea(0*8, 16*32-1, 0*8, 16*32-1); + screen.set_visarea(0*8, 256-1, 2*8, 240-1); + screen.set_screen_update(FUNC(blackt96_state::screen_update_blackt96)); + screen.set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 0x800); @@ -510,15 +511,15 @@ MACHINE_CONFIG_START(blackt96_state::blackt96) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki1", OKIM6295, 8000000/8, okim6295_device::PIN7_HIGH) // music - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47) - MCFG_DEVICE_ADDRESS_MAP(0, oki1_map) + OKIM6295(config, m_oki[0], 8000000/8, okim6295_device::PIN7_HIGH); // music + m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.47); + m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.47); + m_oki[0]->set_addrmap(0, &blackt96_state::oki1_map); - MCFG_DEVICE_ADD("oki2", OKIM6295, 8000000/8, okim6295_device::PIN7_HIGH) // sfx - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47) -MACHINE_CONFIG_END + OKIM6295(config, m_oki[1], 8000000/8, okim6295_device::PIN7_HIGH); // sfx + m_oki[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.47); + m_oki[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.47); +} ROM_START( blackt96 ) diff --git a/src/mame/drivers/bladestl.cpp b/src/mame/drivers/bladestl.cpp index 9642568b377..1897ab49c91 100644 --- a/src/mame/drivers/bladestl.cpp +++ b/src/mame/drivers/bladestl.cpp @@ -300,31 +300,31 @@ void bladestl_state::machine_reset() for (i = 0; i < 4 ; i++) m_last_track[i] = 0; - m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0); + m_soundlatch->acknowledge_w(); } -MACHINE_CONFIG_START(bladestl_state::bladestl) - +void bladestl_state::bladestl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, HD6309E, XTAL(24'000'000) / 8) // divider not verified (from 007342 custom) - MCFG_DEVICE_PROGRAM_MAP(main_map) + HD6309E(config, m_maincpu, XTAL(24'000'000) / 8); // divider not verified (from 007342 custom) + m_maincpu->set_addrmap(AS_PROGRAM, &bladestl_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(bladestl_state::bladestl_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD(m_audiocpu, MC6809E, XTAL(24'000'000) / 16) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + MC6809E(config, m_audiocpu, XTAL(24'000'000) / 16); + m_audiocpu->set_addrmap(AS_PROGRAM, &bladestl_state::sound_map); config.m_minimum_quantum = attotime::from_hz(600); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bladestl_state, screen_update_bladestl) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(bladestl_state::screen_update_bladestl)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_bladestl); PALETTE(config, "palette", FUNC(bladestl_state::bladestl_palette)).set_format(palette_device::xBGR_555, 32 + 16*16, 32+16); @@ -360,13 +360,10 @@ MACHINE_CONFIG_START(bladestl_state::bladestl) ymsnd.add_route(2, "filter3", 0.45); ymsnd.add_route(3, "mono", 0.45); - MCFG_DEVICE_ADD(m_filter1, FILTER_RC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADD(m_filter2, FILTER_RC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADD(m_filter3, FILTER_RC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + FILTER_RC(config, m_filter1).add_route(ALL_OUTPUTS, "mono", 1.0); + FILTER_RC(config, m_filter2).add_route(ALL_OUTPUTS, "mono", 1.0); + FILTER_RC(config, m_filter3).add_route(ALL_OUTPUTS, "mono", 1.0); +} /************************************* diff --git a/src/mame/drivers/blitz68k.cpp b/src/mame/drivers/blitz68k.cpp index cb9ee10da3d..30df7046f1b 100644 --- a/src/mame/drivers/blitz68k.cpp +++ b/src/mame/drivers/blitz68k.cpp @@ -1720,24 +1720,25 @@ void blitz68k_state::ramdac_config(machine_config &config) ramdac.set_addrmap(0, &blitz68k_state::ramdac_map); } -MACHINE_CONFIG_START(blitz68k_state::ilpag) - MCFG_DEVICE_ADD(m_maincpu, M68000, 11059200 ) // ? - MCFG_DEVICE_PROGRAM_MAP(ilpag_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq4_line_hold) //3 & 6 used, mcu comms? - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) +void blitz68k_state::ilpag(machine_config &config) +{ + M68000(config, m_maincpu, 11059200 ); // ? + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::ilpag_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq4_line_hold)); //3 & 6 used, mcu comms? + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k) -MACHINE_CONFIG_END +} /* 20089f = 1 -> menu @@ -1777,29 +1778,30 @@ TIMER_DEVICE_CALLBACK_MEMBER(blitz68k_state::steaser_mcu_sim) } -MACHINE_CONFIG_START(blitz68k_state::steaser) +void blitz68k_state::steaser(machine_config &config) +{ ilpag(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(steaser_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq5_line_hold) //3, 4 & 6 used, mcu comms? + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::steaser_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq5_line_hold)); //3, 4 & 6 used, mcu comms? TIMER(config, "coinsim").configure_periodic(FUNC(blitz68k_state::steaser_mcu_sim), attotime::from_hz(10000)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::cjffruit) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(22'118'400)/2) - MCFG_DEVICE_PROGRAM_MAP(cjffruit_map) +void blitz68k_state::cjffruit(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(22'118'400)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::cjffruit_map); // MC68HC705C8P (Sound MCU) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-8-1) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 0, 256-8-1); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); R6545_1(config, m_crtc, XTAL(22'118'400)/8); m_crtc->set_screen("screen"); @@ -1811,13 +1813,14 @@ MACHINE_CONFIG_START(blitz68k_state::cjffruit) ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::bankrob) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200)) - MCFG_DEVICE_PROGRAM_MAP(bankrob_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq3_line_hold) // protection prevents correct irq frequency by crtc +void blitz68k_state::bankrob(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(11'059'200)); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::bankrob_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq3_line_hold)); // protection prevents correct irq frequency by crtc // irq 2 reads from MCUs // MC68HC705C8P (MCU1) @@ -1826,12 +1829,12 @@ MACHINE_CONFIG_START(blitz68k_state::bankrob) // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 0+4, 256-1-4); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); H46505(config, m_crtc, XTAL(11'059'200)/4); m_crtc->set_screen("screen"); @@ -1843,25 +1846,26 @@ MACHINE_CONFIG_START(blitz68k_state::bankrob) ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::bankroba) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200) ) - MCFG_DEVICE_PROGRAM_MAP(bankroba_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq5_line_hold) // protection prevents correct irq frequency by crtc +void blitz68k_state::bankroba(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(11'059'200)); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::bankroba_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq5_line_hold)); // protection prevents correct irq frequency by crtc // irq 3,4 read from MCUs // MC68HC705C8P (MCU) // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+7, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 0+7, 256-1); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); H46505(config, m_crtc, XTAL(11'059'200)/4); m_crtc->set_screen("screen"); @@ -1873,24 +1877,25 @@ MACHINE_CONFIG_START(blitz68k_state::bankroba) ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k_addr_factor1) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::deucesw2) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(22'118'400) / 2) - MCFG_DEVICE_PROGRAM_MAP(deucesw2_map) +void blitz68k_state::deucesw2(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(22'118'400) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::deucesw2_map); // irq 2 reads from MCUs // MC68HC705C8P (MCU) // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); R6545_1(config, m_crtc, XTAL(22'118'400)/8); m_crtc->set_screen("screen"); @@ -1902,13 +1907,14 @@ MACHINE_CONFIG_START(blitz68k_state::deucesw2) ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::dualgame) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200) ) - MCFG_DEVICE_PROGRAM_MAP(dualgame_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq2_line_hold) // lev 2 = MCUs, lev 3 = vblank +void blitz68k_state::dualgame(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(11'059'200)); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::dualgame_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq2_line_hold)); // lev 2 = MCUs, lev 3 = vblank // MC68HC705C8P (MCU1) @@ -1916,12 +1922,12 @@ MACHINE_CONFIG_START(blitz68k_state::dualgame) // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 0+4, 256-1-4); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); H46505(config, m_crtc, XTAL(11'059'200)/4); m_crtc->set_screen("screen"); @@ -1933,24 +1939,25 @@ MACHINE_CONFIG_START(blitz68k_state::dualgame) ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::hermit) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(22'118'400)/2 ) - MCFG_DEVICE_PROGRAM_MAP(hermit_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq1_line_hold) // protection prevents correct irq frequency by crtc +void blitz68k_state::hermit(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(22'118'400)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::hermit_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq1_line_hold)); // protection prevents correct irq frequency by crtc // MC68HC705C8P (MCU) // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 0+4, 256-1-4); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k)); H46505(config, m_crtc, XTAL(22'118'400)/8); m_crtc->set_screen("screen"); @@ -1962,12 +1969,13 @@ MACHINE_CONFIG_START(blitz68k_state::hermit) ramdac_config(config); MCFG_VIDEO_START_OVERRIDE(blitz68k_state,blitz68k) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blitz68k_state::maxidbl) - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(11'059'200)) - MCFG_DEVICE_PROGRAM_MAP(maxidbl_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blitz68k_state, irq3_line_hold) // protection prevents correct irq frequency by crtc +void blitz68k_state::maxidbl(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(11'059'200)); + m_maincpu->set_addrmap(AS_PROGRAM, &blitz68k_state::maxidbl_map); + m_maincpu->set_vblank_int("screen", FUNC(blitz68k_state::irq3_line_hold)); // protection prevents correct irq frequency by crtc // irq 2 reads from MCUs // MC68HC705C8P (MCU1) @@ -1978,12 +1986,12 @@ MACHINE_CONFIG_START(blitz68k_state::maxidbl) // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k_noblit) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(blitz68k_state::screen_update_blitz68k_noblit)); H46505(config, m_crtc, XTAL(11'059'200)/4); m_crtc->set_screen("screen"); diff --git a/src/mame/drivers/blmbycar.cpp b/src/mame/drivers/blmbycar.cpp index d2d83eaa0f2..827c4be384f 100644 --- a/src/mame/drivers/blmbycar.cpp +++ b/src/mame/drivers/blmbycar.cpp @@ -364,24 +364,24 @@ MACHINE_RESET_MEMBER(blmbycar_state,blmbycar) } -MACHINE_CONFIG_START(blmbycar_state::blmbycar) - +void blmbycar_state::blmbycar(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000)/2) /* 12MHz */ - MCFG_DEVICE_PROGRAM_MAP(blmbycar_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blmbycar_state, irq1_line_hold) + M68000(config, m_maincpu, XTAL(24'000'000)/2); /* 12MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &blmbycar_state::blmbycar_map); + m_maincpu->set_vblank_int("screen", FUNC(blmbycar_state::irq1_line_hold)); MCFG_MACHINE_START_OVERRIDE(blmbycar_state,blmbycar) MCFG_MACHINE_RESET_OVERRIDE(blmbycar_state,blmbycar) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(0x180, 0x100) - MCFG_SCREEN_VISIBLE_AREA(0, 0x180-1, 0, 0x100-1) - MCFG_SCREEN_UPDATE_DRIVER(blmbycar_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(0x180, 0x100); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(blmbycar_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_blmbycar); @@ -394,10 +394,10 @@ MACHINE_CONFIG_START(blmbycar_state::blmbycar) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(1'000'000), okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_DEVICE_ADDRESS_MAP(0, blmbycar_oki_map) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + okim6295_device &oki(OKIM6295(config, "oki", XTAL(1'000'000), okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified + oki.set_addrmap(0, &blmbycar_state::blmbycar_oki_map); + oki.add_route(ALL_OUTPUTS, "mono", 1.0); +} MACHINE_START_MEMBER(blmbycar_state,watrball) @@ -412,21 +412,21 @@ MACHINE_RESET_MEMBER(blmbycar_state,watrball) m_retvalue = 0; } -MACHINE_CONFIG_START(blmbycar_state::watrball) +void blmbycar_state::watrball(machine_config &config) +{ blmbycar(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(watrball_map) + m_maincpu->set_addrmap(AS_PROGRAM, &blmbycar_state::watrball_map); MCFG_MACHINE_START_OVERRIDE(blmbycar_state,watrball) MCFG_MACHINE_RESET_OVERRIDE(blmbycar_state,watrball) /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_VISIBLE_AREA(0, 0x180-1, 16, 0x100-1) -MACHINE_CONFIG_END + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_visarea(0, 0x180-1, 16, 0x100-1); +} /*************************************************************************** diff --git a/src/mame/drivers/blockout.cpp b/src/mame/drivers/blockout.cpp index 9ffdb8bde97..e3a4b9fc722 100644 --- a/src/mame/drivers/blockout.cpp +++ b/src/mame/drivers/blockout.cpp @@ -304,26 +304,25 @@ TIMER_DEVICE_CALLBACK_MEMBER(blockout_state::blockout_scanline) m_maincpu->set_input_line(5, ASSERT_LINE); } -MACHINE_CONFIG_START(blockout_state::blockout) - +void blockout_state::blockout(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, MAIN_CLOCK) /* MRH - 8.76 makes gfx/adpcm samples sync better -- but 10 is correct speed*/ - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, MAIN_CLOCK); /* MRH - 8.76 makes gfx/adpcm samples sync better -- but 10 is correct speed*/ + m_maincpu->set_addrmap(AS_PROGRAM, &blockout_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(blockout_state::blockout_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, AUDIO_CLOCK) /* 3.579545 MHz */ - MCFG_DEVICE_PROGRAM_MAP(audio_map) + Z80(config, m_audiocpu, AUDIO_CLOCK); /* 3.579545 MHz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &blockout_state::audio_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); /* assume same as ddragon3 with adjusted visible display area */ - MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 448, 0, 320, 272, 10, 250) - MCFG_SCREEN_UPDATE_DRIVER(blockout_state, screen_update_blockout) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 513) + m_screen->set_raw(XTAL(28'000'000) / 4, 448, 0, 320, 272, 10, 250); + m_screen->set_screen_update(FUNC(blockout_state::screen_update_blockout)); + m_screen->set_palette(m_palette); + PALETTE(config, m_palette).set_entries(513); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -337,16 +336,16 @@ MACHINE_CONFIG_START(blockout_state::blockout) ymsnd.add_route(0, "lspeaker", 0.60); ymsnd.add_route(1, "rspeaker", 0.60); - MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) -MACHINE_CONFIG_END + okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH)); + oki.add_route(ALL_OUTPUTS, "lspeaker", 0.50); + oki.add_route(ALL_OUTPUTS, "rspeaker", 0.50); +} -MACHINE_CONFIG_START(blockout_state::agress) +void blockout_state::agress(machine_config &config) +{ blockout(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP(agress_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &blockout_state::agress_map); +} /************************************* * diff --git a/src/mame/drivers/blocktax.cpp b/src/mame/drivers/blocktax.cpp index 396213fb843..1b43e664755 100644 --- a/src/mame/drivers/blocktax.cpp +++ b/src/mame/drivers/blocktax.cpp @@ -73,24 +73,24 @@ void blocktax_state::blocktax_map(address_map &map) static INPUT_PORTS_START( blocktax ) INPUT_PORTS_END -MACHINE_CONFIG_START(blocktax_state::blocktax) - MCFG_DEVICE_ADD("maincpu", I80C51, 30_MHz_XTAL/2) /* P89C51RD2HBA (80C51 with internal flash rom) */ +void blocktax_state::blocktax(machine_config &config) +{ + I80C51(config, m_maincpu, 30_MHz_XTAL/2); /* P89C51RD2HBA (80C51 with internal flash rom) */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(blocktax_state, screen_update_blocktax) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1); + screen.set_screen_update(FUNC(blocktax_state::screen_update_blocktax)); + screen.set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x200); SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 30_MHz_XTAL/16, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.00) -MACHINE_CONFIG_END + OKIM6295(config, "oki", 30_MHz_XTAL/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "speaker", 1.00); // clock frequency & pin 7 not verified +} ROM_START( blocktax ) ROM_REGION( 0x10000, "maincpu", 0 ) /* Internal MCU Flash */ diff --git a/src/mame/drivers/blstroid.cpp b/src/mame/drivers/blstroid.cpp index bbbeb3f719c..2cb3789e2f1 100644 --- a/src/mame/drivers/blstroid.cpp +++ b/src/mame/drivers/blstroid.cpp @@ -175,11 +175,11 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(blstroid_state::blstroid) - +void blstroid_state::blstroid(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2); + m_maincpu->set_addrmap(AS_PROGRAM, &blstroid_state::main_map); EEPROM_2804(config, "eeprom").lock_after_write(true); @@ -190,19 +190,19 @@ MACHINE_CONFIG_START(blstroid_state::blstroid) PALETTE(config, "palette").set_format(palette_device::xRGB_555, 512); - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, blstroid_state, get_playfield_tile_info, 16,8, SCAN_ROWS, 64,64) + TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 16,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(blstroid_state::get_playfield_tile_info)); ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, blstroid_state::s_mob_config); m_mob->set_gfxdecode(m_gfxdecode); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz, 456*2, 0, 320*2, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(blstroid_state, screen_update_blstroid) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, blstroid_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz, 456*2, 0, 320*2, 262, 0, 240); + m_screen->set_screen_update(FUNC(blstroid_state::screen_update_blstroid)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(FUNC(blstroid_state::video_int_write_line)); MCFG_VIDEO_START_OVERRIDE(blstroid_state,blstroid) @@ -217,7 +217,7 @@ MACHINE_CONFIG_START(blstroid_state::blstroid) m_jsa->add_route(1, "rspeaker", 1.0); config.device_remove("jsa:pokey"); config.device_remove("jsa:tms"); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/blueprnt.cpp b/src/mame/drivers/blueprnt.cpp index b579f2f0c9e..b99d4516e5b 100644 --- a/src/mame/drivers/blueprnt.cpp +++ b/src/mame/drivers/blueprnt.cpp @@ -85,7 +85,7 @@ READ8_MEMBER(blueprnt_state::grasspin_sh_dipsw_r) WRITE8_MEMBER(blueprnt_state::blueprnt_sound_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -346,17 +346,17 @@ void blueprnt_state::machine_reset() } -MACHINE_CONFIG_START(blueprnt_state::blueprnt) - +void blueprnt_state::blueprnt(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 7000000/2) // 3.5 MHz - MCFG_DEVICE_PROGRAM_MAP(blueprnt_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", blueprnt_state, irq0_line_hold) - - MCFG_DEVICE_ADD("audiocpu", Z80, 10000000/2/2/2) // 1.25 MHz (2H) - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(blueprnt_state, irq0_line_hold, 4*60) // IRQs connected to 32V + Z80(config, m_maincpu, 7000000/2); // 3.5 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &blueprnt_state::blueprnt_map); + m_maincpu->set_vblank_int("screen", FUNC(blueprnt_state::irq0_line_hold)); + + Z80(config, m_audiocpu, 10000000/2/2/2); // 1.25 MHz (2H) + m_audiocpu->set_addrmap(AS_PROGRAM, &blueprnt_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &blueprnt_state::sound_io); + m_audiocpu->set_periodic_int(FUNC(blueprnt_state::irq0_line_hold), attotime::from_hz(4*60)); // IRQs connected to 32V // NMIs are caused by the main CPU config.m_perfect_cpu_quantum = subtag("maincpu"); @@ -364,14 +364,15 @@ MACHINE_CONFIG_START(blueprnt_state::blueprnt) WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(blueprnt_state::screen_update_blueprnt)); + screen.set_palette(m_palette); + MCFG_VIDEO_START_OVERRIDE(blueprnt_state, blueprnt) - MCFG_SCREEN_UPDATE_DRIVER(blueprnt_state, screen_update_blueprnt) - MCFG_SCREEN_PALETTE(m_palette) GFXDECODE(config, m_gfxdecode, m_palette, gfx_blueprnt); PALETTE(config, m_palette, FUNC(blueprnt_state::blueprnt_palette), 128*4+8); @@ -390,15 +391,15 @@ MACHINE_CONFIG_START(blueprnt_state::blueprnt) ay2.port_a_read_callback().set_ioport("DILSW1"); ay2.port_b_read_callback().set_ioport("DILSW2"); ay2.add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(blueprnt_state::grasspin) +void blueprnt_state::grasspin(machine_config &config) +{ blueprnt(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(grasspin_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &blueprnt_state::grasspin_map); +} /************************************* * diff --git a/src/mame/drivers/blw700i.cpp b/src/mame/drivers/blw700i.cpp index 088a1d60ff0..8fec247e2b5 100644 --- a/src/mame/drivers/blw700i.cpp +++ b/src/mame/drivers/blw700i.cpp @@ -268,19 +268,20 @@ static INPUT_PORTS_START( lw700i ) INPUT_PORTS_END -MACHINE_CONFIG_START(lw700i_state::lw700i) - MCFG_DEVICE_ADD("maincpu", H83003, XTAL(16'000'000)) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(io_map) +void lw700i_state::lw700i(machine_config &config) +{ + H83003(config, m_maincpu, XTAL(16'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &lw700i_state::main_map); + m_maincpu->set_addrmap(AS_IO, &lw700i_state::io_map); TIMER(config, "scantimer").configure_scanline(FUNC(lw700i_state::vbl_interrupt), "screen", 0, 1); - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_UPDATE_DRIVER(lw700i_state, screen_update) - MCFG_SCREEN_SIZE(640, 400) - MCFG_SCREEN_VISIBLE_AREA(0, 480, 0, 128) -MACHINE_CONFIG_END + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_screen_update(FUNC(lw700i_state::screen_update)); + m_screen->set_size(640, 400); + m_screen->set_visarea(0, 480, 0, 128); +} ROM_START(blw700i) ROM_REGION(0x200000, "maincpu", 0) /* H8/3003 program ROM */ diff --git a/src/mame/drivers/bmjr.cpp b/src/mame/drivers/bmjr.cpp index 3433b79859f..a1bee2628d3 100644 --- a/src/mame/drivers/bmjr.cpp +++ b/src/mame/drivers/bmjr.cpp @@ -337,21 +337,22 @@ void bmjr_state::machine_reset() m_cass->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR); } -MACHINE_CONFIG_START(bmjr_state::bmjr) +void bmjr_state::bmjr(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M6800, XTAL(4'000'000)/4) //unknown clock / divider - MCFG_DEVICE_PROGRAM_MAP(bmjr_mem) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bmjr_state, irq0_line_hold) + M6800(config, m_maincpu, XTAL(4'000'000)/4); //unknown clock / divider + m_maincpu->set_addrmap(AS_PROGRAM, &bmjr_state::bmjr_mem); + m_maincpu->set_vblank_int("screen", FUNC(bmjr_state::irq0_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(256, 192) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 192-1) - MCFG_SCREEN_UPDATE_DRIVER(bmjr_state, screen_update_bmjr) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(256, 192); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bmjr_state::screen_update_bmjr)); + screen.set_palette("palette"); PALETTE(config, "palette", palette_device::BRG_3BIT); GFXDECODE(config, "gfxdecode", "palette", gfx_bmjr); @@ -363,7 +364,7 @@ MACHINE_CONFIG_START(bmjr_state::bmjr) /* Devices */ CASSETTE(config, m_cass); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( bmjr ) diff --git a/src/mame/drivers/bml3.cpp b/src/mame/drivers/bml3.cpp index fb6a85e44d6..1764a848202 100644 --- a/src/mame/drivers/bml3.cpp +++ b/src/mame/drivers/bml3.cpp @@ -939,21 +939,22 @@ static void bml3_cards(device_slot_interface &device) } -MACHINE_CONFIG_START(bml3_state::bml3_common) +void bml3_state::bml3_common(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, MC6809, CPU_EXT_CLOCK) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bml3_state, bml3_timer_firq) -// MCFG_DEVICE_PERIODIC_INT_DRIVER(bml3_state, bml3_firq, 45) + MC6809(config, m_maincpu, CPU_EXT_CLOCK); + m_maincpu->set_vblank_int("screen", FUNC(bml3_state::bml3_timer_firq)); +// m_maincpu->set_periodic_int(FUNC(bml3_state::bml3_firq), attotime::fromhz(45)); // MCFG_MACHINE_RESET_OVERRIDE(bml3_state,bml3) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2400)) /* Service manual specifies "Raster return period" as 2.4 ms (p.64), although the total vertical non-displaying time seems to be 4 ms. */ - MCFG_SCREEN_SIZE(640, 400) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2400)); /* Service manual specifies "Raster return period" as 2.4 ms (p.64), although the total vertical non-displaying time seems to be 4 ms. */ + screen.set_size(640, 400); + screen.set_visarea(0, 320-1, 0, 200-1); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); PALETTE(config, m_palette, palette_device::BRG_3BIT); /* Devices */ @@ -1000,19 +1001,18 @@ MACHINE_CONFIG_START(bml3_state::bml3_common) User may want to switch this to MP-1802 (5.25" DS/DD). Note it isn't feasible to use both, as they each place boot ROM at F800. */ - MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl1", bml3_cards, "bml3mp1805") - MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl2", bml3_cards, nullptr) - MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl3", bml3_cards, nullptr) - MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl4", bml3_cards, nullptr) - MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl5", bml3_cards, nullptr) - MCFG_BML3BUS_SLOT_ADD("bml3bus", "sl6", bml3_cards, "bml3kanji") - -MACHINE_CONFIG_END + BML3BUS_SLOT(config, "sl1", "bml3bus", bml3_cards, "bml3mp1805"); + BML3BUS_SLOT(config, "sl2", "bml3bus", bml3_cards, nullptr); + BML3BUS_SLOT(config, "sl3", "bml3bus", bml3_cards, nullptr); + BML3BUS_SLOT(config, "sl4", "bml3bus", bml3_cards, nullptr); + BML3BUS_SLOT(config, "sl5", "bml3bus", bml3_cards, nullptr); + BML3BUS_SLOT(config, "sl6", "bml3bus", bml3_cards, "bml3kanji"); +} -MACHINE_CONFIG_START(bml3_state::bml3) +void bml3_state::bml3(machine_config &config) +{ bml3_common(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP(bml3_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &bml3_state::bml3_mem); #if 0 // TODO: slot device for sound card @@ -1024,23 +1024,23 @@ MACHINE_CONFIG_START(bml3_state::bml3) m_ym2203->add_route(2, "mono", 0.50); m_ym2203->add_route(3, "mono", 0.50); #endif -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bml3_state::bml3mk2) +void bml3_state::bml3mk2(machine_config &config) +{ bml3_common(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP(bml3mk2_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &bml3_state::bml3mk2_mem); // TODO: anything to add here? -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bml3_state::bml3mk5) +void bml3_state::bml3mk5(machine_config &config) +{ bml3_common(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP(bml3mk5_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &bml3_state::bml3mk5_mem); // TODO: anything to add here? -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/bnstars.cpp b/src/mame/drivers/bnstars.cpp index b0fca21dd6d..62be3100cf4 100644 --- a/src/mame/drivers/bnstars.cpp +++ b/src/mame/drivers/bnstars.cpp @@ -809,17 +809,17 @@ void bnstars_state::bnstars_sound_map(address_map &map) } -MACHINE_CONFIG_START(bnstars_state::bnstars) - +void bnstars_state::bnstars(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", V70, 20000000) // 20MHz - MCFG_DEVICE_PROGRAM_MAP(bnstars_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(ms32_state,irq_callback) + V70(config, m_maincpu, 20000000); // 20MHz + m_maincpu->set_addrmap(AS_PROGRAM, &bnstars_state::bnstars_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(ms32_state::irq_callback)); TIMER(config, "scantimer").configure_scanline(FUNC(bnstars_state::ms32_interrupt), "lscreen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) // Unverified; it's possibly higher than 4MHz - MCFG_DEVICE_PROGRAM_MAP(bnstars_sound_map) + Z80(config, m_audiocpu, 4000000); // Unverified; it's possibly higher than 4MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &bnstars_state::bnstars_sound_map); config.m_minimum_quantum = attotime::from_hz(60000); @@ -835,21 +835,21 @@ MACHINE_CONFIG_START(bnstars_state::bnstars) config.set_default_layout(layout_dualhsxs); - MCFG_SCREEN_ADD("lscreen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bnstars_state, screen_update_bnstars_left) - MCFG_SCREEN_PALETTE("palette") + screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER)); + lscreen.set_refresh_hz(60); + lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + lscreen.set_size(40*8, 32*8); + lscreen.set_visarea(0*8, 40*8-1, 0*8, 28*8-1); + lscreen.set_screen_update(FUNC(bnstars_state::screen_update_bnstars_left)); + lscreen.set_palette("palette"); - MCFG_SCREEN_ADD("rscreen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bnstars_state, screen_update_bnstars_right) - MCFG_SCREEN_PALETTE("palette2") + screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); + rscreen.set_refresh_hz(60); + rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + rscreen.set_size(40*8, 32*8); + rscreen.set_visarea(0*8, 40*8-1, 0*8, 28*8-1); + rscreen.set_screen_update(FUNC(bnstars_state::screen_update_bnstars_right)); + rscreen.set_palette("palette2"); /* sound hardware */ @@ -859,19 +859,18 @@ MACHINE_CONFIG_START(bnstars_state::bnstars) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - MCFG_DEVICE_ADD("ymf1", YMF271, 16934400) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used? -// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0) - - MCFG_DEVICE_ADD("ymf2", YMF271, 16934400) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used? -// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0) - -MACHINE_CONFIG_END + ymf271_device &ymf1(YMF271(config, "ymf1", 16934400)); + ymf1.add_route(0, "lspeaker", 1.0); + ymf1.add_route(1, "rspeaker", 1.0); +// ymf1.add_route(2, "lspeaker", 1.0); Output 2/3 not used? +// ymf1.add_route(3, "rspeaker", 1.0); + + ymf271_device &ymf2(YMF271(config, "ymf2", 16934400)); + ymf2.add_route(0, "lspeaker", 1.0); + ymf2.add_route(1, "rspeaker", 1.0); +// ymf2.add_route(2, "lspeaker", 1.0); Output 2/3 not used? +// ymf2.add_route(3, "rspeaker", 1.0); +} ROM_START( bnstars1 ) diff --git a/src/mame/drivers/bntyhunt.cpp b/src/mame/drivers/bntyhunt.cpp index 780947f4050..d77a0ee1e28 100644 --- a/src/mame/drivers/bntyhunt.cpp +++ b/src/mame/drivers/bntyhunt.cpp @@ -53,22 +53,23 @@ static INPUT_PORTS_START( bntyhunt ) INPUT_PORTS_END -MACHINE_CONFIG_START(bntyhunt_state::bntyhunt) +void bntyhunt_state::bntyhunt(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", PENTIUM, 200000000) /* Probably a Pentium or higher .. ?? Mhz*/ - MCFG_DEVICE_PROGRAM_MAP(bntyhunt_map) + PENTIUM(config, m_maincpu, 200000000); /* Probably a Pentium or higher .. ?? Mhz*/ + m_maincpu->set_addrmap(AS_PROGRAM, &bntyhunt_state::bntyhunt_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(bntyhunt_state, screen_update) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 0x100) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(bntyhunt_state::screen_update)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea_full(); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_entries(0x100); +} ROM_START(bntyhunt) diff --git a/src/mame/drivers/bogeyman.cpp b/src/mame/drivers/bogeyman.cpp index 806df1a1e95..2b93e910767 100644 --- a/src/mame/drivers/bogeyman.cpp +++ b/src/mame/drivers/bogeyman.cpp @@ -229,24 +229,24 @@ WRITE8_MEMBER(bogeyman_state::colbank_w) } } -MACHINE_CONFIG_START(bogeyman_state::bogeyman) - +void bogeyman_state::bogeyman(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD("maincpu", M6502, 1500000) /* Verified */ - MCFG_DEVICE_PROGRAM_MAP(bogeyman_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(bogeyman_state, irq0_line_hold, 16*60) // Controls sound + M6502(config, m_maincpu, 1500000); /* Verified */ + m_maincpu->set_addrmap(AS_PROGRAM, &bogeyman_state::bogeyman_map); + m_maincpu->set_periodic_int(FUNC(bogeyman_state::irq0_line_hold), attotime::from_hz(16*60)); // Controls sound // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); +// screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); // DECO video CRTC, unverified - MCFG_SCREEN_RAW_PARAMS(XTAL(12'000'000)/2,384,0,256,272,8,248) - MCFG_SCREEN_UPDATE_DRIVER(bogeyman_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen.set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248); + screen.set_screen_update(FUNC(bogeyman_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bogeyman); PALETTE(config, m_palette, FUNC(bogeyman_state::bogeyman_palette)).set_format(palette_device::BGR_233_inverted, 16 + 256); @@ -260,7 +260,7 @@ MACHINE_CONFIG_START(bogeyman_state::bogeyman) m_ay1->add_route(ALL_OUTPUTS, "mono", 0.30); YM2149(config, m_ay2, 1500000).add_route(ALL_OUTPUTS, "mono", 0.30); /* Verified */ -MACHINE_CONFIG_END +} /* ROMs */ diff --git a/src/mame/drivers/bombjack.cpp b/src/mame/drivers/bombjack.cpp index f9874712a8b..c884dc89d10 100644 --- a/src/mame/drivers/bombjack.cpp +++ b/src/mame/drivers/bombjack.cpp @@ -110,9 +110,9 @@ READ8_MEMBER(bombjack_state::soundlatch_read_and_clear) { // An extra flip-flop is used to clear the LS273 after reading it through a LS245 // (this flip-flop is then cleared in sync with the sound CPU clock) - uint8_t res = m_soundlatch->read(space, 0); + uint8_t res = m_soundlatch->read(); if (!machine().side_effects_disabled()) - m_soundlatch->clear_w(space, 0, 0); + m_soundlatch->clear_w(); return res; } diff --git a/src/mame/drivers/boogwing.cpp b/src/mame/drivers/boogwing.cpp index 689c35361e0..177c93873d8 100644 --- a/src/mame/drivers/boogwing.cpp +++ b/src/mame/drivers/boogwing.cpp @@ -336,13 +336,13 @@ DECO16IC_BANK_CB_MEMBER(boogwing_state::bank_callback2) return offset; } -MACHINE_CONFIG_START(boogwing_state::boogwing) - +void boogwing_state::boogwing(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, MAIN_XTAL/2) /* DE102 */ - MCFG_DEVICE_PROGRAM_MAP(boogwing_map) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", boogwing_state, irq6_line_hold) + M68000(config, m_maincpu, MAIN_XTAL/2); /* DE102 */ + m_maincpu->set_addrmap(AS_PROGRAM, &boogwing_state::boogwing_map); + m_maincpu->set_addrmap(AS_OPCODES, &boogwing_state::decrypted_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(boogwing_state::irq6_line_hold)); H6280(config, m_audiocpu, SOUND_XTAL/4); m_audiocpu->set_addrmap(AS_PROGRAM, &boogwing_state::audio_map); @@ -350,19 +350,18 @@ MACHINE_CONFIG_START(boogwing_state::boogwing) m_audiocpu->add_route(ALL_OUTPUTS, "rspeaker", 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(MAIN_XTAL / 4, 442, 0, 320, 274, 8, 248) // same as robocop2(cninja.cpp)? verify this from real pcb. - MCFG_SCREEN_UPDATE_DRIVER(boogwing_state, screen_update_boogwing) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(MAIN_XTAL / 4, 442, 0, 320, 274, 8, 248); // same as robocop2(cninja.cpp)? verify this from real pcb. + screen.set_screen_update(FUNC(boogwing_state::screen_update_boogwing)); GFXDECODE(config, "gfxdecode", m_deco_ace, gfx_boogwing); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) - MCFG_DEVICE_ADD("spriteram2", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); + BUFFERED_SPRITERAM16(config, m_spriteram[1]); DECO_ACE(config, m_deco_ace, 0); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -378,7 +377,6 @@ MACHINE_CONFIG_START(boogwing_state::boogwing) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -419,14 +417,14 @@ MACHINE_CONFIG_START(boogwing_state::boogwing) ymsnd.add_route(0, "lspeaker", 0.80); ymsnd.add_route(1, "rspeaker", 0.80); - MCFG_DEVICE_ADD("oki1", OKIM6295, SOUND_XTAL/32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.40) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.40) + OKIM6295(config, m_oki[0], SOUND_XTAL/32, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.40); + m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.40); - MCFG_DEVICE_ADD("oki2", OKIM6295, SOUND_XTAL/16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30) -MACHINE_CONFIG_END + OKIM6295(config, m_oki[1], SOUND_XTAL/16, okim6295_device::PIN7_HIGH); + m_oki[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.30); + m_oki[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.30); +} /**********************************************************************************/ diff --git a/src/mame/drivers/bottom9.cpp b/src/mame/drivers/bottom9.cpp index 15e3c7f6167..a03988f867a 100644 --- a/src/mame/drivers/bottom9.cpp +++ b/src/mame/drivers/bottom9.cpp @@ -90,7 +90,7 @@ WRITE8_MEMBER(bottom9_state::bottom9_bankedram2_w) if (m_k052109_selected) k052109_051960_w(space, offset + 0x2000, data); else - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); } WRITE8_MEMBER(bottom9_state::bankswitch_w) diff --git a/src/mame/drivers/bowltry.cpp b/src/mame/drivers/bowltry.cpp index d22bf158a38..a9d16c6c9d1 100644 --- a/src/mame/drivers/bowltry.cpp +++ b/src/mame/drivers/bowltry.cpp @@ -99,24 +99,24 @@ uint32_t bowltry_state::screen_update_bowltry(screen_device &screen, bitmap_rgb3 -MACHINE_CONFIG_START(bowltry_state::bowltry) - MCFG_DEVICE_ADD("maincpu", H83008, 16000000 ) - MCFG_DEVICE_PROGRAM_MAP( bowltry_map ) -// MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bowltry_state, irq0_line_hold) // uses vector $64, IMIAB according to the manual (timer/compare B, internal to the CPU) +void bowltry_state::bowltry(machine_config &config) +{ + H83008(config, m_maincpu, 16000000); + m_maincpu->set_addrmap(AS_PROGRAM, &bowltry_state::bowltry_map); +// m_maincpu->set_vblank_int("screen", FUNC(bowltry_state::irq0_line_hold)); // uses vector $64, IMIAB according to the manual (timer/compare B, internal to the CPU) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bowltry_state, screen_update_bowltry) - //MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bowltry_state::screen_update_bowltry)); + //screen.set_palette("palette"); - //MCFG_PALETTE_ADD("palette", 65536) + //PALETTE(config, "palette").set_entries(65536); /* tt5665 sound */ - -MACHINE_CONFIG_END +} ROM_START( bowltry ) ROM_REGION( 0x080000, "maincpu", 0 ) diff --git a/src/mame/drivers/boxer.cpp b/src/mame/drivers/boxer.cpp index 73f44c564aa..0eccc410514 100644 --- a/src/mame/drivers/boxer.cpp +++ b/src/mame/drivers/boxer.cpp @@ -491,27 +491,27 @@ void boxer_state::machine_reset() } -MACHINE_CONFIG_START(boxer_state::boxer) - +void boxer_state::boxer(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK / 16) - MCFG_DEVICE_PROGRAM_MAP(boxer_map) + M6502(config, m_maincpu, MASTER_CLOCK / 16); + m_maincpu->set_addrmap(AS_PROGRAM, &boxer_state::boxer_map); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(256, 262) - MCFG_SCREEN_VISIBLE_AREA(8, 247, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(boxer_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(256, 262); + m_screen->set_visarea(8, 247, 0, 239); + m_screen->set_screen_update(FUNC(boxer_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_boxer); PALETTE(config, m_palette, FUNC(boxer_state::boxer_palette), 4); /* sound hardware */ -MACHINE_CONFIG_END +} /************************************* diff --git a/src/mame/drivers/br8641.cpp b/src/mame/drivers/br8641.cpp index 95c4d452321..b58495a71d5 100644 --- a/src/mame/drivers/br8641.cpp +++ b/src/mame/drivers/br8641.cpp @@ -158,7 +158,8 @@ static const z80_daisy_config daisy_chain_intf[] = -MACHINE_CONFIG_START(brandt8641_state::brandt8641) +void brandt8641_state::brandt8641(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, XTAL(4'000'000)); // U4 ,4MHz crystal on board m_maincpu->set_addrmap(AS_PROGRAM, &brandt8641_state::brandt8641_mem); @@ -167,8 +168,7 @@ MACHINE_CONFIG_START(brandt8641_state::brandt8641) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 2000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + BEEP(config, m_beep, 2000).add_route(ALL_OUTPUTS, "mono", 0.50); // Z80APIO U9 // Z80APIO U14 @@ -186,7 +186,7 @@ MACHINE_CONFIG_START(brandt8641_state::brandt8641) m_pio3->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); Z80CTC(config, "ctc", XTAL(4'000'000)); // Z80CTC U8 -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( br8641 ) diff --git a/src/mame/drivers/bsktball.cpp b/src/mame/drivers/bsktball.cpp index b15237bf44e..d1b786f94ed 100644 --- a/src/mame/drivers/bsktball.cpp +++ b/src/mame/drivers/bsktball.cpp @@ -238,11 +238,11 @@ void bsktball_state::machine_reset() } -MACHINE_CONFIG_START(bsktball_state::bsktball) - +void bsktball_state::bsktball(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502,750000) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M6502(config, m_maincpu, 750000); + m_maincpu->set_addrmap(AS_PROGRAM, &bsktball_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(bsktball_state::bsktball_scanline), "screen", 0, 1); f9334_device &outlatch(F9334(config, "outlatch")); // M6 @@ -255,13 +255,13 @@ MACHINE_CONFIG_START(bsktball_state::bsktball) outlatch.q_out_cb<7>().set(FUNC(bsktball_state::nmion_w)); // NMI On /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 28*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bsktball_state, screen_update_bsktball) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 28*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(bsktball_state::screen_update_bsktball)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bsktball); PALETTE(config, m_palette, FUNC(bsktball_state::bsktball_palette), 2*4 + 4*4*4*4, 4); @@ -270,7 +270,7 @@ MACHINE_CONFIG_START(bsktball_state::bsktball) SPEAKER(config, "mono").front_center(); DISCRETE(config, m_discrete, bsktball_discrete).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/btime.cpp b/src/mame/drivers/btime.cpp index 2998cf45386..8a7301793ae 100644 --- a/src/mame/drivers/btime.cpp +++ b/src/mame/drivers/btime.cpp @@ -1277,23 +1277,23 @@ MACHINE_RESET_MEMBER(btime_state,mmonkey) m_protection_ret = 0; } -MACHINE_CONFIG_START(btime_state::btime) - +void btime_state::btime(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", DECO_CPU7, HCLK2) /* seletable between H2/H4 via jumper */ - MCFG_DEVICE_PROGRAM_MAP(btime_map) + DECO_CPU7(config, m_maincpu, HCLK2); /* selectable between H2/H4 via jumper */ + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::btime_map); - MCFG_DEVICE_ADD("audiocpu", M6502, HCLK1/3/2) - MCFG_DEVICE_PROGRAM_MAP(audio_map) + M6502(config, m_audiocpu, HCLK1/3/2); + m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::audio_map); TIMER(config, "8vck").configure_scanline(FUNC(btime_state::audio_nmi_gen), "screen", 0, 8); INPUT_MERGER_ALL_HIGH(config, "audionmi").output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI); /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_RAW_PARAMS(HCLK, 384, 8, 248, 272, 8, 248) - MCFG_SCREEN_UPDATE_DRIVER(btime_state, screen_update_btime) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(HCLK, 384, 8, 248, 272, 8, 248); + m_screen->set_screen_update(FUNC(btime_state::screen_update_btime)); + m_screen->set_palette(m_palette); MCFG_MACHINE_START_OVERRIDE(btime_state,btime) MCFG_MACHINE_RESET_OVERRIDE(btime_state,btime) @@ -1322,33 +1322,33 @@ MACHINE_CONFIG_START(btime_state::btime) ay2.add_route(1, "discrete", 1.0, 4); ay2.add_route(2, "discrete", 1.0, 5); - MCFG_DEVICE_ADD("discrete", DISCRETE, btime_sound_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + DISCRETE(config, "discrete", btime_sound_discrete).add_route(ALL_OUTPUTS, "mono", 1.0); +} -MACHINE_CONFIG_START(btime_state::cookrace) +void btime_state::cookrace(machine_config &config) +{ btime(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("maincpu", DECO_C10707, HCLK2) - MCFG_DEVICE_PROGRAM_MAP(cookrace_map) + DECO_C10707(config.replace(), m_maincpu, HCLK2); + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::cookrace_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(audio_map) + m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::audio_map); /* video hardware */ m_gfxdecode->set_info(gfx_cookrace); m_screen->set_screen_update(FUNC(btime_state::screen_update_cookrace)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(btime_state::lnc) +void btime_state::lnc(machine_config &config) +{ btime(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("maincpu", DECO_C10707, HCLK2) - MCFG_DEVICE_PROGRAM_MAP(lnc_map) + DECO_C10707(config.replace(), m_maincpu, HCLK2); + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::lnc_map); MCFG_MACHINE_RESET_OVERRIDE(btime_state,lnc) @@ -1359,7 +1359,7 @@ MACHINE_CONFIG_START(btime_state::lnc) m_palette->set_init(FUNC(btime_state::lnc_palette)); m_screen->set_screen_update(FUNC(btime_state::screen_update_lnc)); -MACHINE_CONFIG_END +} void btime_state::wtennis(machine_config &config) @@ -1371,24 +1371,24 @@ void btime_state::wtennis(machine_config &config) } -MACHINE_CONFIG_START(btime_state::mmonkey) +void btime_state::mmonkey(machine_config &config) +{ wtennis(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(mmonkey_map) + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::mmonkey_map); MCFG_MACHINE_START_OVERRIDE(btime_state,mmonkey) MCFG_MACHINE_RESET_OVERRIDE(btime_state,mmonkey) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(btime_state::bnj) +void btime_state::bnj(machine_config &config) +{ btime(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("maincpu", DECO_C10707, HCLK4) - MCFG_DEVICE_CLOCK(HCLK4) - MCFG_DEVICE_PROGRAM_MAP(bnj_map) + DECO_C10707(config.replace(), m_maincpu, HCLK4); + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::bnj_map); /* video hardware */ m_gfxdecode->set_info(gfx_bnj); @@ -1397,24 +1397,25 @@ MACHINE_CONFIG_START(btime_state::bnj) m_screen->set_screen_update(FUNC(btime_state::screen_update_bnj)); m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); // 256 * 240, confirmed -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(btime_state::sdtennis) +void btime_state::sdtennis(machine_config &config) +{ bnj(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("audiocpu", DECO_C10707, HCLK1/3/2) - MCFG_DEVICE_PROGRAM_MAP(audio_map) -MACHINE_CONFIG_END + DECO_C10707(config.replace(), m_audiocpu, HCLK1/3/2); + m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::audio_map); +} -MACHINE_CONFIG_START(btime_state::zoar) +void btime_state::zoar(machine_config &config) +{ btime(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(zoar_map) + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::zoar_map); /* video hardware */ m_gfxdecode->set_info(gfx_zoar); @@ -1433,19 +1434,18 @@ MACHINE_CONFIG_START(btime_state::zoar) ay8910_device &ay2(AY8910(config.replace(), "ay2", HCLK1)); ay2.add_route(ALL_OUTPUTS, "mono", 0.23); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(btime_state::disco) +void btime_state::disco(machine_config &config) +{ btime(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(HCLK4) - MCFG_DEVICE_PROGRAM_MAP(disco_map) + m_maincpu->set_clock(HCLK4); + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::disco_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(disco_audio_map) + m_audiocpu->set_addrmap(AS_PROGRAM, &btime_state::disco_audio_map); m_soundlatch->set_separate_acknowledge(true); @@ -1456,19 +1456,19 @@ MACHINE_CONFIG_START(btime_state::disco) MCFG_VIDEO_START_OVERRIDE(btime_state,disco) m_screen->set_screen_update(FUNC(btime_state::screen_update_disco)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(btime_state::tisland) +void btime_state::tisland(machine_config &config) +{ btime(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(tisland_map) + m_maincpu->set_addrmap(AS_PROGRAM, &btime_state::tisland_map); /* video hardware */ m_gfxdecode->set_info(gfx_zoar); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/bullet.cpp b/src/mame/drivers/bullet.cpp index 507b00c5c3d..c14f216c834 100644 --- a/src/mame/drivers/bullet.cpp +++ b/src/mame/drivers/bullet.cpp @@ -1103,7 +1103,7 @@ void bulletf_state::machine_reset() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( bullet ) +// machine_config( bullet ) //------------------------------------------------- void bullet_state::bullet(machine_config &config) @@ -1184,7 +1184,7 @@ void bullet_state::bullet(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( bulletf ) +// machine_config( bulletf ) //------------------------------------------------- void bulletf_state::bulletf(machine_config &config) diff --git a/src/mame/drivers/busicom.cpp b/src/mame/drivers/busicom.cpp index 63ab41c8e12..c12e1a7f9a3 100644 --- a/src/mame/drivers/busicom.cpp +++ b/src/mame/drivers/busicom.cpp @@ -224,7 +224,8 @@ void busicom_state::machine_reset() //static const char layout_busicom [] = "busicom"; -MACHINE_CONFIG_START(busicom_state::busicom) +void busicom_state::busicom(machine_config &config) +{ /* basic machine hardware */ I4004(config, m_maincpu, 750000); m_maincpu->set_rom_map(&busicom_state::busicom_rom); @@ -234,18 +235,18 @@ MACHINE_CONFIG_START(busicom_state::busicom) m_maincpu->set_ram_ports_map(&busicom_state::busicom_mp); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(40*17, 44*11) - MCFG_SCREEN_VISIBLE_AREA(0, 40*17-1, 0, 44*11-1) - MCFG_SCREEN_UPDATE_DRIVER(busicom_state, screen_update_busicom) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(40*17, 44*11); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(busicom_state::screen_update_busicom)); + screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(busicom_state::busicom_palette), 16); TIMER(config, "busicom_timer").configure_periodic(FUNC(busicom_state::timer_callback), attotime::from_msec(28*2)); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( busicom ) diff --git a/src/mame/drivers/buster.cpp b/src/mame/drivers/buster.cpp index 89fa36f74c6..c207b414280 100644 --- a/src/mame/drivers/buster.cpp +++ b/src/mame/drivers/buster.cpp @@ -322,20 +322,21 @@ static GFXDECODE_START( gfx_buster ) GFXDECODE_END -MACHINE_CONFIG_START(buster_state::buster) +void buster_state::buster(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,XTAL(3'579'545)) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(mainmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", buster_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(3'579'545)); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &buster_state::mainmap); + m_maincpu->set_vblank_int("screen", FUNC(buster_state::irq0_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(buster_state, screen_update_buster) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 16, 256-16-1); + screen.set_screen_update(FUNC(buster_state::screen_update_buster)); + screen.set_palette(m_palette); mc6845_device &crtc(MC6845(config, "crtc", XTAL(3'579'545)/4)); //unknown clock / type crtc.set_screen("screen"); @@ -349,7 +350,7 @@ MACHINE_CONFIG_START(buster_state::buster) SPEAKER(config, "mono").front_center(); AY8910(config, "aysnd", 1500000/2).add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} ROM_START( buster ) diff --git a/src/mame/drivers/bw2.cpp b/src/mame/drivers/bw2.cpp index 0d8430fe6fe..43a624e86c2 100644 --- a/src/mame/drivers/bw2.cpp +++ b/src/mame/drivers/bw2.cpp @@ -539,7 +539,7 @@ void bw2_state::machine_start() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( bw2 ) +// machine_config( bw2 ) //------------------------------------------------- void bw2_state::bw2(machine_config &config) diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp index 70d8d85dda0..e0879582c50 100644 --- a/src/mame/drivers/bwidow.cpp +++ b/src/mame/drivers/bwidow.cpp @@ -763,22 +763,22 @@ INPUT_PORTS_END * *************************************/ -MACHINE_CONFIG_START(bwidow_state::bwidow) - +void bwidow_state::bwidow(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK / 8) - MCFG_DEVICE_PROGRAM_MAP(bwidow_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(bwidow_state, irq0_line_assert, CLOCK_3KHZ / 12) + M6502(config, m_maincpu, MASTER_CLOCK / 8); + m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::bwidow_map); + m_maincpu->set_periodic_int(FUNC(bwidow_state::irq0_line_assert), attotime::from_hz(CLOCK_3KHZ / 12)); - MCFG_DEVICE_ADD("earom", ER2055) + ER2055(config, m_earom); /* video hardware */ VECTOR(config, "vector", 0); - MCFG_SCREEN_ADD("screen", VECTOR) - MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ / 12 / 4) - MCFG_SCREEN_SIZE(400, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 480, 0, 440) - MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_VECTOR)); + screen.set_refresh_hz(CLOCK_3KHZ / 12 / 4); + screen.set_size(400, 300); + screen.set_visarea(0, 480, 0, 440); + screen.set_screen_update("vector", FUNC(vector_device::screen_update)); avg_device &avg(AVG(config, "avg", 0)); avg.set_vector_tag("vector"); @@ -786,54 +786,52 @@ MACHINE_CONFIG_START(bwidow_state::bwidow) /* sound hardware */ bwidow_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bwidow_state::bwidowp) +void bwidow_state::bwidowp(machine_config &config) +{ bwidow(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bwidowp_map) + m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::bwidowp_map); WATCHDOG_TIMER(config, "watchdog"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bwidow_state::gravitar) +void bwidow_state::gravitar(machine_config &config) +{ bwidow(config); /* basic machine hardware */ /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 420, 0, 400) + subdevice<screen_device>("screen")->set_visarea(0, 420, 0, 400); /* sound hardware */ gravitar_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bwidow_state::lunarbat) +void bwidow_state::lunarbat(machine_config &config) +{ gravitar(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(spacduel_map) + m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::spacduel_map); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 500, 0, 440) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_visarea(0, 500, 0, 440); +} -MACHINE_CONFIG_START(bwidow_state::spacduel) +void bwidow_state::spacduel(machine_config &config) +{ gravitar(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(spacduel_map) + m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::spacduel_map); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 540, 0, 400) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_visarea(0, 540, 0, 400); +} diff --git a/src/mame/drivers/bwing.cpp b/src/mame/drivers/bwing.cpp index a1ac29aed36..b7c493e2dc9 100644 --- a/src/mame/drivers/bwing.cpp +++ b/src/mame/drivers/bwing.cpp @@ -89,7 +89,7 @@ WRITE8_MEMBER(bwing_state::bwp1_ctrl_w) m_subcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); // SNMI else { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(DECO16_IRQ_LINE, HOLD_LINE); // SNDREQ } break; @@ -363,36 +363,36 @@ void bwing_state::bwing_postload() } -MACHINE_CONFIG_START(bwing_state::bwing) - +void bwing_state::bwing(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) - MCFG_DEVICE_PROGRAM_MAP(bwp1_map) + MC6809E(config, m_maincpu, 2000000); + m_maincpu->set_addrmap(AS_PROGRAM, &bwing_state::bwp1_map); - MCFG_DEVICE_ADD("sub", MC6809E, 2000000) - MCFG_DEVICE_PROGRAM_MAP(bwp2_map) + MC6809E(config, m_subcpu, 2000000); + m_subcpu->set_addrmap(AS_PROGRAM, &bwing_state::bwp2_map); - MCFG_DEVICE_ADD("audiocpu", DECO16, 2000000) - MCFG_DEVICE_PROGRAM_MAP(bwp3_map) - MCFG_DEVICE_IO_MAP(bwp3_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(bwing_state, bwp3_interrupt, 1000) + DECO16(config, m_audiocpu, 2000000); + m_audiocpu->set_addrmap(AS_PROGRAM, &bwing_state::bwp3_map); + m_audiocpu->set_addrmap(AS_IO, &bwing_state::bwp3_io_map); + m_audiocpu->set_periodic_int(FUNC(bwing_state::bwp3_interrupt), attotime::from_hz(1000)); config.m_minimum_quantum = attotime::from_hz(18000); // high enough? ADDRESS_MAP_BANK(config, "vrambank").set_map(&bwing_state::bank_map).set_options(ENDIANNESS_BIG, 8, 15, 0x2000); // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(600)) // must be long enough for polling - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bwing_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(600)); // must be long enough for polling + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(bwing_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bwing); - MCFG_PALETTE_ADD("palette", 64) + PALETTE(config, m_palette).set_entries(64); // sound hardware @@ -408,7 +408,7 @@ MACHINE_CONFIG_START(bwing_state::bwing) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} //**************************************************************************** // ROM Maps diff --git a/src/mame/drivers/by35.cpp b/src/mame/drivers/by35.cpp index 7ae2922d4e1..88e703ca13a 100644 --- a/src/mame/drivers/by35.cpp +++ b/src/mame/drivers/by35.cpp @@ -1092,10 +1092,11 @@ DISCRETE_SOUND_END -MACHINE_CONFIG_START(by35_state::by35) +void by35_state::by35(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6800, 530000) // No xtal, just 2 chips forming a multivibrator oscillator around 530KHz - MCFG_DEVICE_PROGRAM_MAP(by35_map) + M6800(config, m_maincpu, 530000); // No xtal, just 2 chips forming a multivibrator oscillator around 530KHz + m_maincpu->set_addrmap(AS_PROGRAM, &by35_state::by35_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 'F' filled causes Credit Display to be blank on first startup @@ -1132,34 +1133,35 @@ MACHINE_CONFIG_START(by35_state::by35) m_pia_u11->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); TIMER(config, "timer_d_freq").configure_periodic(FUNC(by35_state::u11_timer), attotime::from_hz(317)); // 555 timer TIMER(config, m_display_refresh_timer).configure_generic(FUNC(by35_state::timer_d_pulse)); // 555 Active pulse length -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(as2888_state::as2888_audio) +void as2888_state::as2888_audio(machine_config &config) +{ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("discrete", DISCRETE, as2888_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + DISCRETE(config, m_discrete, as2888_discrete).add_route(ALL_OUTPUTS, "mono", 1.00); m_pia_u11->writepb_handler().set(FUNC(as2888_state::u11_b_as2888_w)); m_pia_u11->cb2_handler().set(FUNC(as2888_state::u11_cb2_as2888_w)); TIMER(config, "timer_s_freq").configure_periodic(FUNC(as2888_state::timer_s), attotime::from_hz(353000)); // Inverter clock on AS-2888 sound board TIMER(config, m_snd_sustain_timer).configure_generic(FUNC(as2888_state::timer_as2888)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(as2888_state::as2888) +void as2888_state::as2888(machine_config &config) +{ by35(config); as2888_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(by35_state::nuovo) +void by35_state::nuovo(machine_config &config) +{ by35(config); - MCFG_DEVICE_REPLACE("maincpu", M6802, 2000000) // ? MHz ? Large crystal next to CPU, schematics don't indicate speed. - MCFG_DEVICE_PROGRAM_MAP(nuovo_map) - -MACHINE_CONFIG_END + M6802(config.replace(), m_maincpu, 2000000); // ? MHz ? Large crystal next to CPU, schematics don't indicate speed. + m_maincpu->set_addrmap(AS_PROGRAM, &by35_state::nuovo_map); +} diff --git a/src/mame/drivers/by68701.cpp b/src/mame/drivers/by68701.cpp index 4f341501499..9a95b171784 100644 --- a/src/mame/drivers/by68701.cpp +++ b/src/mame/drivers/by68701.cpp @@ -46,11 +46,12 @@ void by68701_state::init_by68701() { } -MACHINE_CONFIG_START(by68701_state::by68701) +void by68701_state::by68701(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6803, 3579545/4) - MCFG_DEVICE_PROGRAM_MAP(by68701_map) -MACHINE_CONFIG_END + M6803(config, m_maincpu, 3579545/4); + m_maincpu->set_addrmap(AS_PROGRAM, &by68701_state::by68701_map); +} /*------------------ / Flash Gordon diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp index d58145bc62a..59462dfbea2 100644 --- a/src/mame/drivers/c10.cpp +++ b/src/mame/drivers/c10.cpp @@ -159,23 +159,24 @@ static GFXDECODE_START( gfx_c10 ) GFXDECODE_END -MACHINE_CONFIG_START(c10_state::c10) +void c10_state::c10(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(8'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(c10_mem) - MCFG_DEVICE_IO_MAP(c10_io) + Z80(config, m_maincpu, XTAL(8'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &c10_state::c10_mem); + m_maincpu->set_addrmap(AS_IO, &c10_state::c10_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(c10_state, screen_update) - MCFG_SCREEN_SIZE(640, 250) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(c10_state::screen_update)); + screen.set_size(640, 250); + screen.set_visarea_full(); + screen.set_palette("palette"); GFXDECODE(config, "gfxdecode", "palette", gfx_c10); PALETTE(config, "palette", palette_device::MONOCHROME); -MACHINE_CONFIG_END +} void c10_state::init_c10() { diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp index 3879b635d2b..9e5c25375b1 100644 --- a/src/mame/drivers/c128.cpp +++ b/src/mame/drivers/c128.cpp @@ -1629,7 +1629,7 @@ void c128_state::machine_reset() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( ntsc ) +// machine_config( ntsc ) //------------------------------------------------- void c128_state::ntsc(machine_config &config) @@ -1783,7 +1783,7 @@ void c128_state::ntsc(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( c128 ) +// machine_config( c128 ) //------------------------------------------------- void c128_state::c128(machine_config &config) @@ -1796,7 +1796,7 @@ void c128_state::c128(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( c128dcr ) +// machine_config( c128dcr ) //------------------------------------------------- void c128_state::c128dcr(machine_config &config) @@ -1809,7 +1809,7 @@ void c128_state::c128dcr(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( c128d81 ) +// machine_config( c128d81 ) //------------------------------------------------- void c128_state::c128d81(machine_config &config) @@ -1824,7 +1824,7 @@ void c128_state::c128d81(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( pal ) +// machine_config( pal ) //------------------------------------------------- void c128_state::pal(machine_config &config) @@ -1978,7 +1978,7 @@ void c128_state::pal(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( c128pal ) +// machine_config( c128pal ) //------------------------------------------------- void c128_state::c128pal(machine_config &config) @@ -1991,7 +1991,7 @@ void c128_state::c128pal(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( c128dcrp ) +// machine_config( c128dcrp ) //------------------------------------------------- void c128_state::c128dcrp(machine_config &config) diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp index 0344221dd7f..d532e00c410 100644 --- a/src/mame/drivers/c64.cpp +++ b/src/mame/drivers/c64.cpp @@ -1260,7 +1260,7 @@ void c64_state::machine_reset() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( ntsc ) +// machine_config( ntsc ) //------------------------------------------------- void c64_state::ntsc(machine_config &config) @@ -1380,7 +1380,7 @@ void c64_state::ntsc(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( pet64 ) +// machine_config( pet64 ) //------------------------------------------------- void c64_state::pet64(machine_config &config) @@ -1391,7 +1391,7 @@ void c64_state::pet64(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( ntsc_sx ) +// machine_config( ntsc_sx ) //------------------------------------------------- void sx64_state::ntsc_sx(machine_config &config) @@ -1409,7 +1409,7 @@ void sx64_state::ntsc_sx(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( ntsc_dx ) +// machine_config( ntsc_dx ) //------------------------------------------------- void sx64_state::ntsc_dx(machine_config &config) @@ -1422,7 +1422,7 @@ void sx64_state::ntsc_dx(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( ntsc_c ) +// machine_config( ntsc_c ) //------------------------------------------------- void c64c_state::ntsc_c(machine_config &config) @@ -1436,7 +1436,7 @@ void c64c_state::ntsc_c(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( pal ) +// machine_config( pal ) //------------------------------------------------- void c64_state::pal(machine_config &config) @@ -1556,7 +1556,7 @@ void c64_state::pal(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( pal_sx ) +// machine_config( pal_sx ) //------------------------------------------------- void sx64_state::pal_sx(machine_config &config) @@ -1574,7 +1574,7 @@ void sx64_state::pal_sx(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( pal_c ) +// machine_config( pal_c ) //------------------------------------------------- void c64c_state::pal_c(machine_config &config) @@ -1588,7 +1588,7 @@ void c64c_state::pal_c(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( pal_gs ) +// machine_config( pal_gs ) //------------------------------------------------- void c64gs_state::pal_gs(machine_config &config) diff --git a/src/mame/drivers/c64dtv.cpp b/src/mame/drivers/c64dtv.cpp index d8843f8b1ec..ba115565d03 100644 --- a/src/mame/drivers/c64dtv.cpp +++ b/src/mame/drivers/c64dtv.cpp @@ -49,14 +49,15 @@ INPUT_PORTS_END // MACHINE DRIVERS //************************************************************************** -MACHINE_CONFIG_START(c64dtv_state::c64dtv) +void c64dtv_state::c64dtv(machine_config &config) +{ // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(c64dtv_state, screen_update) - MCFG_SCREEN_SIZE(640,480) - MCFG_SCREEN_VISIBLE_AREA(0,639, 0,479) - MCFG_SCREEN_REFRESH_RATE(30) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(c64dtv_state::screen_update)); + screen.set_size(640,480); + screen.set_visarea_full(); + screen.set_refresh_hz(30); +} diff --git a/src/mame/drivers/c65.cpp b/src/mame/drivers/c65.cpp index 82a47b11fad..69d0e552db1 100644 --- a/src/mame/drivers/c65.cpp +++ b/src/mame/drivers/c65.cpp @@ -684,12 +684,12 @@ WRITE_LINE_MEMBER(c65_state::cia0_irq) // c65_irq(state || m_vicirq); } -MACHINE_CONFIG_START(c65_state::c65) - +void c65_state::c65(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M4510, MAIN_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(c65_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", c65_state, vic3_vblank_irq) + M4510(config, m_maincpu, MAIN_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &c65_state::c65_map); + m_maincpu->set_vblank_int("screen", FUNC(c65_state::vic3_vblank_irq)); MOS6526(config, m_cia0, MAIN_CLOCK); m_cia0->set_tod_clock(60); @@ -707,14 +707,14 @@ MACHINE_CONFIG_START(c65_state::c65) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(c65_state, screen_update) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK*4, 910, 0, 640, 262, 0, 200) // mods needed - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); +// m_screen->set_refresh_hz(60); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + m_screen->set_screen_update(FUNC(c65_state::screen_update)); +// m_screen->set_size(32*8, 32*8); +// m_screen->set_visarea(0*8, 32*8-1, 0*8, 32*8-1); + m_screen->set_raw(MAIN_CLOCK*4, 910, 0, 640, 262, 0, 200); // mods needed + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_c65); @@ -727,7 +727,7 @@ MACHINE_CONFIG_START(c65_state::c65) // software list SOFTWARE_LIST(config, "flop_list").set_original("c65_flop"); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/cabaret.cpp b/src/mame/drivers/cabaret.cpp index b4510bf9fc2..eaf24dac033 100644 --- a/src/mame/drivers/cabaret.cpp +++ b/src/mame/drivers/cabaret.cpp @@ -365,12 +365,13 @@ INTERRUPT_GEN_MEMBER(cabaret_state::cabaret_interrupt) device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -MACHINE_CONFIG_START(cabaret_state::cabaret) +void cabaret_state::cabaret(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z180, XTAL(12'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(cabaret_map) - MCFG_DEVICE_IO_MAP(cabaret_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cabaret_state, cabaret_interrupt) + Z180(config, m_maincpu, XTAL(12'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cabaret_state::cabaret_map); + m_maincpu->set_addrmap(AS_IO, &cabaret_state::cabaret_portmap); + m_maincpu->set_vblank_int("screen", FUNC(cabaret_state::cabaret_interrupt)); i8255_device &ppi1(I8255(config, "ppi1")); ppi1.in_pa_callback().set_ioport("BUTTONS2"); @@ -389,22 +390,21 @@ MACHINE_CONFIG_START(cabaret_state::cabaret) ppi3.in_pc_callback().set_ioport("DSW2"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(cabaret_state, screen_update_cabaret) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(cabaret_state::screen_update_cabaret)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cabaret); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x800); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0); +} void cabaret_state::init_cabaret() diff --git a/src/mame/drivers/calchase.cpp b/src/mame/drivers/calchase.cpp index 087b93dbda9..6d9f8322993 100644 --- a/src/mame/drivers/calchase.cpp +++ b/src/mame/drivers/calchase.cpp @@ -678,10 +678,10 @@ void calchase_state::machine_reset() } MACHINE_CONFIG_START(calchase_state::calchase) - MCFG_DEVICE_ADD("maincpu", PENTIUM, 133000000) // Cyrix 686MX-PR200 CPU - MCFG_DEVICE_PROGRAM_MAP(calchase_map) - MCFG_DEVICE_IO_MAP(calchase_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb) + PENTIUM(config, m_maincpu, 133000000); // Cyrix 686MX-PR200 CPU + m_maincpu->set_addrmap(AS_PROGRAM, &calchase_state::calchase_map); + m_maincpu->set_addrmap(AS_IO, &calchase_state::calchase_io); + m_maincpu->set_irq_acknowledge_callback("pic8259_1", FUNC(pic8259_device::inta_cb)); pcat_common(config); @@ -710,10 +710,10 @@ MACHINE_CONFIG_START(calchase_state::calchase) MACHINE_CONFIG_END MACHINE_CONFIG_START(calchase_state::hostinv) - MCFG_DEVICE_ADD("maincpu", PENTIUM, 133000000) // Cyrix 686MX-PR200 CPU - MCFG_DEVICE_PROGRAM_MAP(calchase_map) - MCFG_DEVICE_IO_MAP(calchase_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb) + PENTIUM(config, m_maincpu, 133000000); // Cyrix 686MX-PR200 CPU + m_maincpu->set_addrmap(AS_PROGRAM, &calchase_state::calchase_map); + m_maincpu->set_addrmap(AS_IO, &calchase_state::calchase_io); + m_maincpu->set_irq_acknowledge_callback("pic8259_1", FUNC(pic8259_device::inta_cb)); pcat_common(config); diff --git a/src/mame/drivers/calcune.cpp b/src/mame/drivers/calcune.cpp index 30b07a721b9..3ac491ca372 100644 --- a/src/mame/drivers/calcune.cpp +++ b/src/mame/drivers/calcune.cpp @@ -249,23 +249,23 @@ MACHINE_START_MEMBER(calcune_state,calcune) m_vdp2->stop_timers(); } -MACHINE_CONFIG_START(calcune_state::calcune) - MCFG_DEVICE_ADD("maincpu", M68000, MASTER_CLOCK_NTSC / 7) /* 7.67 MHz */ - MCFG_DEVICE_PROGRAM_MAP(calcune_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(calcune_state,genesis_int_callback) +void calcune_state::calcune(machine_config &config) +{ + M68000(config, m_maincpu, MASTER_CLOCK_NTSC / 7); /* 7.67 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &calcune_state::calcune_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(calcune_state::genesis_int_callback)); - MCFG_DEVICE_ADD("z80", Z80, MASTER_CLOCK_NTSC / 15) /* 3.58 MHz */ - MCFG_DEVICE_DISABLE() /* no code is ever uploaded for the Z80, so it's unused here even if it is present on the PCB */ + Z80(config, "z80", MASTER_CLOCK_NTSC / 15).set_disable(); /* 3.58 MHz, no code is ever uploaded for the Z80, so it's unused here even if it is present on the PCB */ MCFG_MACHINE_START_OVERRIDE(calcune_state,calcune) MCFG_MACHINE_RESET_OVERRIDE(calcune_state,calcune) - MCFG_SCREEN_ADD("megadriv", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) // Vblank handled manually. - MCFG_SCREEN_SIZE(64*8, 620) - MCFG_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(calcune_state, screen_update_calcune) + screen_device &screen(SCREEN(config, "megadriv", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually. + screen.set_size(64*8, 620); + screen.set_visarea(0, 40*8-1, 0, 28*8-1); + screen.set_screen_update(FUNC(calcune_state::screen_update_calcune)); SEGA315_5313(config, m_vdp, MASTER_CLOCK_NTSC, m_maincpu); m_vdp->set_is_pal(false); @@ -293,7 +293,7 @@ MACHINE_CONFIG_START(calcune_state::calcune) TIMER(config, "scantimer").configure_scanline("gen_vdp", FUNC(sega315_5313_device::megadriv_scanline_timer_callback_alt_timing), "megadriv", 0, 1); TIMER(config, "scantimer2").configure_scanline("gen_vdp2", FUNC(sega315_5313_device::megadriv_scanline_timer_callback_alt_timing), "megadriv", 0, 1); - MCFG_PALETTE_ADD("palette", 0xc0*2) + PALETTE(config, m_palette).set_entries(0xc0*2); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -301,10 +301,10 @@ MACHINE_CONFIG_START(calcune_state::calcune) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymz", YMZ280B, XTAL(16'934'400)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400))); + ymz.add_route(0, "lspeaker", 1.0); + ymz.add_route(1, "rspeaker", 1.0); +} void calcune_state::init_calcune() { diff --git a/src/mame/drivers/calomega.cpp b/src/mame/drivers/calomega.cpp index ebc3b18c442..7ab70433082 100644 --- a/src/mame/drivers/calomega.cpp +++ b/src/mame/drivers/calomega.cpp @@ -2570,7 +2570,8 @@ WRITE_LINE_MEMBER(calomega_state::write_acia_clock) * Machine Drivers * *************************************************/ -MACHINE_CONFIG_START(calomega_state::sys903) +void calomega_state::sys903(machine_config &config) +{ /* basic machine hardware */ M6502(config, m_maincpu, CPU_CLOCK); /* confirmed */ m_maincpu->set_addrmap(AS_PROGRAM, &calomega_state::sys903_map); @@ -2588,13 +2589,13 @@ MACHINE_CONFIG_START(calomega_state::sys903) m_pia[1]->writepb_handler().set(FUNC(calomega_state::s903_mux_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE((39+1)*8, (31+1)*8) /* Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1) */ - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 31*8-1) /* Taken from MC6845 init, registers 01 & 06 */ - MCFG_SCREEN_UPDATE_DRIVER(calomega_state, screen_update_calomega) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size((39+1)*8, (31+1)*8); /* Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1) */ + screen.set_visarea(0*8, 32*8-1, 0*8, 31*8-1); /* Taken from MC6845 init, registers 01 & 06 */ + screen.set_screen_update(FUNC(calomega_state::screen_update_calomega)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_calomega); PALETTE(config, m_palette, FUNC(calomega_state::calomega_palette), 256); // or 128? is the upper half of the PROMs really valid colors? @@ -2616,7 +2617,7 @@ MACHINE_CONFIG_START(calomega_state::sys903) clock_device &aciabaud(CLOCK(config, "aciabaud", UART_CLOCK)); aciabaud.signal_handler().set(FUNC(calomega_state::write_acia_clock)); -MACHINE_CONFIG_END +} void calomega_state::s903mod(machine_config &config) diff --git a/src/mame/drivers/calorie.cpp b/src/mame/drivers/calorie.cpp index 7f834415829..ad1109fffdf 100644 --- a/src/mame/drivers/calorie.cpp +++ b/src/mame/drivers/calorie.cpp @@ -250,8 +250,8 @@ WRITE8_MEMBER(calorie_state::calorie_flipscreen_w) READ8_MEMBER(calorie_state::calorie_soundlatch_r) { - uint8_t latch = m_soundlatch->read(space, 0); - m_soundlatch->clear_w(space, 0, 0); + uint8_t latch = m_soundlatch->read(); + m_soundlatch->clear_w(); return latch; } @@ -465,28 +465,28 @@ void calorie_state::machine_reset() } -MACHINE_CONFIG_START(calorie_state::calorie) - +void calorie_state::calorie(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* 4 MHz */ - MCFG_DEVICE_PROGRAM_MAP(calorie_map) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", calorie_state, irq0_line_hold) + Z80(config, m_maincpu, 4000000); /* 4 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &calorie_state::calorie_map); + m_maincpu->set_addrmap(AS_OPCODES, &calorie_state::decrypted_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(calorie_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80,3000000) /* 3 MHz */ - MCFG_DEVICE_PROGRAM_MAP(calorie_sound_map) - MCFG_DEVICE_IO_MAP(calorie_sound_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(calorie_state, irq0_line_hold, 64) + z80_device &audiocpu(Z80(config, "audiocpu", 3000000)); /* 3 MHz */ + audiocpu.set_addrmap(AS_PROGRAM, &calorie_state::calorie_sound_map); + audiocpu.set_addrmap(AS_IO, &calorie_state::calorie_sound_io_map); + audiocpu.set_periodic_int(FUNC(calorie_state::irq0_line_hold), attotime::from_hz(64)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(calorie_state, screen_update_calorie) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 16, 256-16-1); + screen.set_screen_update(FUNC(calorie_state::screen_update_calorie)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_calorie); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x100); @@ -501,7 +501,7 @@ MACHINE_CONFIG_START(calorie_state::calorie) YM2149(config, "ay2", 1500000).add_route(ALL_OUTPUTS, "mono", 0.8); YM2149(config, "ay3", 1500000).add_route(ALL_OUTPUTS, "mono", 0.8); -MACHINE_CONFIG_END +} void calorie_state::caloriee(machine_config &config) { diff --git a/src/mame/drivers/camplynx.cpp b/src/mame/drivers/camplynx.cpp index be69800ca53..4252753af13 100644 --- a/src/mame/drivers/camplynx.cpp +++ b/src/mame/drivers/camplynx.cpp @@ -867,7 +867,8 @@ void camplynx_state::lynx_disk(machine_config &config) FLOPPY_CONNECTOR(config, m_floppy1, camplynx_floppies, "525qd", camplynx_state::camplynx_floppy_formats).enable_sound(true); } -MACHINE_CONFIG_START(camplynx_state::lynx48k) +void camplynx_state::lynx48k(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, 24_MHz_XTAL / 6); m_maincpu->set_addrmap(AS_PROGRAM, &camplynx_state::lynx48k_mem); @@ -876,12 +877,12 @@ MACHINE_CONFIG_START(camplynx_state::lynx48k) MCFG_MACHINE_RESET_OVERRIDE(camplynx_state, lynx48k) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(512, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 479) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(512, 480); + screen.set_visarea_full(); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); lynx_common(config); @@ -900,7 +901,7 @@ MACHINE_CONFIG_START(camplynx_state::lynx48k) /* software lists */ SOFTWARE_LIST(config, "cass_list").set_original("camplynx_cass"); -MACHINE_CONFIG_END +} void camplynx_state::lynx96k(machine_config &config) { @@ -914,7 +915,8 @@ void camplynx_state::lynx96k(machine_config &config) SOFTWARE_LIST(config, "flop_list").set_original("camplynx_flop").set_filter("96K"); } -MACHINE_CONFIG_START(camplynx_state::lynx128k) +void camplynx_state::lynx128k(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, 24_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &camplynx_state::lynx128k_mem); @@ -923,12 +925,12 @@ MACHINE_CONFIG_START(camplynx_state::lynx128k) MCFG_MACHINE_RESET_OVERRIDE(camplynx_state, lynx128k) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(512, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 479) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(512, 480); + screen.set_visarea_full(); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); lynx_common(config); @@ -950,7 +952,7 @@ MACHINE_CONFIG_START(camplynx_state::lynx128k) /* software lists */ SOFTWARE_LIST(config, "cass_list").set_original("camplynx_cass"); SOFTWARE_LIST(config, "flop_list").set_original("camplynx_flop").set_filter("128K"); -MACHINE_CONFIG_END +} void camplynx_state::init_lynx48k() { diff --git a/src/mame/drivers/candela.cpp b/src/mame/drivers/candela.cpp index 471b9a0c9bc..09528cc6d03 100644 --- a/src/mame/drivers/candela.cpp +++ b/src/mame/drivers/candela.cpp @@ -714,9 +714,10 @@ void can09t_state::can09t(machine_config &config) #define CAN09_X1_CLOCK 22.1184_MHz_XTAL /* UKI 22118.40 Khz */ #define CAN09_CPU_CLOCK (CAN09_X1_CLOCK / 16) /* ~1.38MHz Divider needs to be check but is the most likelly */ -MACHINE_CONFIG_START(can09_state::can09) - MCFG_DEVICE_ADD("maincpu", MC6809E, CAN09_CPU_CLOCK) // MC68A09EP - MCFG_DEVICE_PROGRAM_MAP(can09_map) +void can09_state::can09(machine_config &config) +{ + MC6809E(config, m_maincpu, CAN09_CPU_CLOCK); // MC68A09EP + m_maincpu->set_addrmap(AS_PROGRAM, &can09_state::can09_map); /* RAM banks */ RAM(config, RAM_TAG).set_default_size("768K"); @@ -752,11 +753,11 @@ MACHINE_CONFIG_START(can09_state::can09) /* screen - totally faked value for now */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_RAW_PARAMS(4_MHz_XTAL / 2, 512, 0, 512, 576, 0, 576) - MCFG_SCREEN_UPDATE_DRIVER(can09_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_raw(4_MHz_XTAL / 2, 512, 0, 512, 576, 0, 576); + screen.set_screen_update(FUNC(can09_state::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); /* Floppy */ @@ -782,11 +783,11 @@ MACHINE_CONFIG_START(can09_state::can09) /* 0xFF93 0xE034 (PIA1 Port B) = 0x18 - Write Data on Port B */ #if 1 - MCFG_DEVICE_ADD(PIA2_TAG, PIA6821, 0) // CPU board - MCFG_DEVICE_ADD("acia1", ACIA6850, 0) // CPU board - MCFG_DEVICE_ADD("acia2", ACIA6850, 0) // CPU board + PIA6821(config, PIA2_TAG, 0); // CPU board + ACIA6850(config, "acia1", 0); // CPU board + ACIA6850(config, "acia2", 0); // CPU board #endif -MACHINE_CONFIG_END +} ROM_START( can09t ) /* The smaller grey computer */ ROM_REGION(0x10000, "roms", 0) diff --git a/src/mame/drivers/canon_s80.cpp b/src/mame/drivers/canon_s80.cpp index ab08eab9614..d103fa2cfcc 100644 --- a/src/mame/drivers/canon_s80.cpp +++ b/src/mame/drivers/canon_s80.cpp @@ -39,11 +39,12 @@ void canons80_state::canons80_map(address_map &map) map(0x8000, 0xffff).rom(); } -MACHINE_CONFIG_START(canons80_state::canons80) +void canons80_state::canons80(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", HD6301, 5000000) /* hd63a01xop 5 MHz guessed: TODO: check on PCB */ - MCFG_DEVICE_PROGRAM_MAP(canons80_map) -MACHINE_CONFIG_END + hd6301_cpu_device &maincpu(HD6301(config, "maincpu", 5000000)); /* hd63a01xop 5 MHz guessed: TODO: check on PCB */ + maincpu.set_addrmap(AS_PROGRAM, &canons80_state::canons80_map); +} void canons80_state::init_canons80() { diff --git a/src/mame/drivers/canyon.cpp b/src/mame/drivers/canyon.cpp index 340b7c3e99d..22e5d3b0822 100644 --- a/src/mame/drivers/canyon.cpp +++ b/src/mame/drivers/canyon.cpp @@ -239,11 +239,11 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(canyon_state::canyon) - +void canyon_state::canyon(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, 12.096_MHz_XTAL / 16) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M6502(config, m_maincpu, 12.096_MHz_XTAL / 16); + m_maincpu->set_addrmap(AS_PROGRAM, &canyon_state::main_map); F9334(config, m_outlatch); // C7 m_outlatch->q_out_cb<0>().set("discrete", FUNC(discrete_device::write_line<CANYON_WHISTLE1_EN>)); @@ -256,11 +256,11 @@ MACHINE_CONFIG_START(canyon_state::canyon) WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 0, 240) // HSYNC = 15,750 Hz - MCFG_SCREEN_UPDATE_DRIVER(canyon_state, screen_update_canyon) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", m6502_device::NMI_LINE)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 0, 240); // HSYNC = 15,750 Hz + screen.set_screen_update(FUNC(canyon_state::screen_update_canyon)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, m6502_device::NMI_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_canyon); PALETTE(config, m_palette, FUNC(canyon_state::canyon_palette), 4); @@ -269,10 +269,10 @@ MACHINE_CONFIG_START(canyon_state::canyon) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("discrete", DISCRETE, canyon_discrete) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + DISCRETE(config, m_discrete, canyon_discrete); + m_discrete->add_route(0, "lspeaker", 1.0); + m_discrete->add_route(1, "rspeaker", 1.0); +} diff --git a/src/mame/drivers/capbowl.cpp b/src/mame/drivers/capbowl.cpp index 63dc7f8bf21..40c47292461 100644 --- a/src/mame/drivers/capbowl.cpp +++ b/src/mame/drivers/capbowl.cpp @@ -198,7 +198,7 @@ WRITE8_MEMBER(capbowl_state::track_reset_w) WRITE8_MEMBER(capbowl_state::sndcmd_w) { m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); } @@ -316,30 +316,30 @@ void capbowl_state::machine_reset() } -MACHINE_CONFIG_START(capbowl_state::capbowl) - +void capbowl_state::capbowl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809E, MASTER_CLOCK / 4) // MC68B09EP - MCFG_DEVICE_PROGRAM_MAP(capbowl_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", capbowl_state, interrupt) + MC6809E(config, m_maincpu, MASTER_CLOCK / 4); // MC68B09EP + m_maincpu->set_addrmap(AS_PROGRAM, &capbowl_state::capbowl_map); + m_maincpu->set_vblank_int("screen", FUNC(capbowl_state::interrupt)); // watchdog: 555 timer 16 cycles, edge triggered, ~0.3s attotime const period = PERIOD_OF_555_ASTABLE(100000.0, 100000.0, 0.1e-6); WATCHDOG_TIMER(config, m_watchdog).set_time(period * 16 - period / 2); - MCFG_DEVICE_ADD("audiocpu", MC6809E, MASTER_CLOCK / 4) // MC68B09EP - MCFG_DEVICE_PROGRAM_MAP(sound_map) + MC6809E(config, m_audiocpu, MASTER_CLOCK / 4); // MC68B09EP + m_audiocpu->set_addrmap(AS_PROGRAM, &capbowl_state::sound_map); NVRAM(config, "nvram", nvram_device::DEFAULT_RANDOM); TICKET_DISPENSER(config, "ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_SIZE(360, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 244) - MCFG_SCREEN_REFRESH_RATE(57) - MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_size(360, 256); + m_screen->set_visarea(0, 359, 0, 244); + m_screen->set_refresh_hz(57); + m_screen->set_screen_update(FUNC(capbowl_state::screen_update)); TMS34061(config, m_tms34061, 0); m_tms34061->set_rowshift(8); /* VRAM address is (row << rowshift) | col */ @@ -364,21 +364,20 @@ MACHINE_CONFIG_START(capbowl_state::capbowl) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(capbowl_state::bowlrama) +void capbowl_state::bowlrama(machine_config &config) +{ capbowl(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bowlrama_map) + m_maincpu->set_addrmap(AS_PROGRAM, &capbowl_state::bowlrama_map); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 239) -MACHINE_CONFIG_END + m_screen->set_visarea(0, 359, 0, 239); +} diff --git a/src/mame/drivers/capcom.cpp b/src/mame/drivers/capcom.cpp index 5bfc2af9c90..9ce5ced5903 100644 --- a/src/mame/drivers/capcom.cpp +++ b/src/mame/drivers/capcom.cpp @@ -46,11 +46,12 @@ void capcom_state::init_capcom() { } -MACHINE_CONFIG_START(capcom_state::capcom) +void capcom_state::capcom(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 16670000) // M68306 - MCFG_DEVICE_PROGRAM_MAP(capcom_map) -MACHINE_CONFIG_END + M68000(config, m_maincpu, 16670000); // M68306 + m_maincpu->set_addrmap(AS_PROGRAM, &capcom_state::capcom_map); +} /*------------------------------------------------------------------- / Airborne (03/96) diff --git a/src/mame/drivers/caprcyc.cpp b/src/mame/drivers/caprcyc.cpp index ef07509a8f3..c4debe1e3b6 100644 --- a/src/mame/drivers/caprcyc.cpp +++ b/src/mame/drivers/caprcyc.cpp @@ -63,17 +63,17 @@ INPUT_PORTS_END ***************************************************************************/ -MACHINE_CONFIG_START(caprcyc_state::caprcyc) - +void caprcyc_state::caprcyc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", VR4300BE, 100000000) // cpu configuration is unknown - MCFG_DEVICE_PROGRAM_MAP(caprcyc_map) + VR4300BE(config, m_maincpu, 100000000); // cpu configuration is unknown + m_maincpu->set_addrmap(AS_PROGRAM, &caprcyc_state::caprcyc_map); /* no video! */ /* sound hardware */ //.. -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/cardline.cpp b/src/mame/drivers/cardline.cpp index 2b41aedbbf6..a9eeb335eda 100644 --- a/src/mame/drivers/cardline.cpp +++ b/src/mame/drivers/cardline.cpp @@ -326,8 +326,8 @@ void cardline_state::cardline_palette(palette_device &palette) const } } -MACHINE_CONFIG_START(cardline_state::cardline) - +void cardline_state::cardline(machine_config &config) +{ /* basic machine hardware */ I80C32(config, m_maincpu, MASTER_CLOCK); m_maincpu->set_port_forced_input(1, 0x10); @@ -338,14 +338,14 @@ MACHINE_CONFIG_START(cardline_state::cardline) //m_maincpu->set_vblank_int("screen", FUNC(cardline_state::irq1_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 35*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) - //MCFG_SCREEN_UPDATE_DRIVER(cardline_state, screen_update_cardline) - //MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 35*8); + screen.set_visarea(0*8, 64*8-1, 0*8, 32*8-1); + //screen.set_screen_update(FUNC(cardline_state::screen_update_cardline)); + //screen.set_palette(m_palette); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cardline); PALETTE(config, m_palette, FUNC(cardline_state::cardline_palette), 512); @@ -365,11 +365,10 @@ MACHINE_CONFIG_START(cardline_state::cardline) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) - -MACHINE_CONFIG_END + okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified + oki.add_route(ALL_OUTPUTS, "lspeaker", 1.0); + oki.add_route(ALL_OUTPUTS, "rspeaker", 1.0); +} /*************************************************************************** diff --git a/src/mame/drivers/carjmbre.cpp b/src/mame/drivers/carjmbre.cpp index 57be932e911..e482a16d989 100644 --- a/src/mame/drivers/carjmbre.cpp +++ b/src/mame/drivers/carjmbre.cpp @@ -356,25 +356,25 @@ static GFXDECODE_START( gfx_carjmbre ) GFXDECODE_END -MACHINE_CONFIG_START(carjmbre_state::carjmbre) - +void carjmbre_state::carjmbre(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", carjmbre_state, vblank_nmi) + Z80(config, m_maincpu, XTAL(18'432'000)/6); + m_maincpu->set_addrmap(AS_PROGRAM, &carjmbre_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(carjmbre_state::vblank_nmi)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6/2) - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_io_map) + Z80(config, m_audiocpu, XTAL(18'432'000)/6/2); + m_audiocpu->set_addrmap(AS_PROGRAM, &carjmbre_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &carjmbre_state::sound_io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(carjmbre_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(carjmbre_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_carjmbre); PALETTE(config, m_palette, FUNC(carjmbre_state::carjmbre_palette), 64); @@ -387,7 +387,7 @@ MACHINE_CONFIG_START(carjmbre_state::carjmbre) AY8910(config, "ay1", XTAL(18'432'000)/6/2).add_route(ALL_OUTPUTS, "mono", 0.25); AY8910(config, "ay2", XTAL(18'432'000)/6/2).add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/carpolo.cpp b/src/mame/drivers/carpolo.cpp index 07f3b2906e9..3063e809d50 100644 --- a/src/mame/drivers/carpolo.cpp +++ b/src/mame/drivers/carpolo.cpp @@ -231,8 +231,8 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(carpolo_state::carpolo) - +void carpolo_state::carpolo(machine_config &config) +{ /* basic machine hardware */ M6502(config, m_maincpu, XTAL(11'289'000)/12); /* 940.75 kHz */ m_maincpu->set_addrmap(AS_PROGRAM, &carpolo_state::main_map); @@ -279,18 +279,18 @@ MACHINE_CONFIG_START(carpolo_state::carpolo) m_ttl74153_1k->zb_cb().set(FUNC(carpolo_state::ls153_zb_w)); // pia1 pb4 /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 239, 0, 255) - MCFG_SCREEN_UPDATE_DRIVER(carpolo_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, carpolo_state, screen_vblank)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(256, 256); + screen.set_visarea(0, 239, 0, 255); + screen.set_screen_update(FUNC(carpolo_state::screen_update)); + screen.screen_vblank().set(FUNC(carpolo_state::screen_vblank)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_carpolo); PALETTE(config, m_palette, FUNC(carpolo_state::carpolo_palette), 12*2+2*16+4*2); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/carrera.cpp b/src/mame/drivers/carrera.cpp index 6ba9a74ecc3..5cccb69c5c6 100644 --- a/src/mame/drivers/carrera.cpp +++ b/src/mame/drivers/carrera.cpp @@ -315,20 +315,21 @@ void carrera_state::carrera_palette(palette_device &palette) const } -MACHINE_CONFIG_START(carrera_state::carrera) +void carrera_state::carrera(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK / 6) - MCFG_DEVICE_PROGRAM_MAP(carrera_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, MASTER_CLOCK / 6); + m_maincpu->set_addrmap(AS_PROGRAM, &carrera_state::carrera_map); + m_maincpu->set_addrmap(AS_IO, &carrera_state::io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(carrera_state, screen_update_carrera) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(carrera_state::screen_update_carrera)); + screen.set_palette(m_palette); mc6845_device &crtc(MC6845(config, "crtc", MASTER_CLOCK / 16)); crtc.set_screen("screen"); @@ -347,7 +348,7 @@ MACHINE_CONFIG_START(carrera_state::carrera) aysnd.port_a_read_callback().set(FUNC(carrera_state::unknown_r)); aysnd.port_b_read_callback().set(FUNC(carrera_state::unknown_r)); aysnd.add_route(ALL_OUTPUTS, "mono", 1.00); -MACHINE_CONFIG_END +} ROM_START( carrera ) diff --git a/src/mame/drivers/casloopy.cpp b/src/mame/drivers/casloopy.cpp index 417a3ceca75..a11cf3b67c6 100644 --- a/src/mame/drivers/casloopy.cpp +++ b/src/mame/drivers/casloopy.cpp @@ -520,24 +520,23 @@ DEVICE_IMAGE_LOAD_MEMBER( casloopy_state, loopy_cart ) MACHINE_CONFIG_START(casloopy_state::casloopy) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",SH2A,8000000) - MCFG_DEVICE_PROGRAM_MAP(casloopy_map) + SH2A(config, m_maincpu, 8000000); + m_maincpu->set_addrmap(AS_PROGRAM, &casloopy_state::casloopy_map); -// MCFG_DEVICE_ADD("subcpu",V60,8000000) -// MCFG_DEVICE_PROGRAM_MAP(casloopy_sub_map) +// v60_device &subcpu(V60(config, "subcpu", 8000000)); +// subcpu.set_addrmap(AS_PROGRAM, &casloopy_state::casloopy_sub_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(8000000, 444, 0, 256, 263, 0, 224) - -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) -// MCFG_SCREEN_SIZE(444, 263) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(casloopy_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 512) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(8000000, 444, 0, 256, 263, 0, 224); +// m_screen->set_refresh_hz(60); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); +// m_screen->set_size(444, 263); +// m_screen->set_visarea(0*8, 32*8-1, 0*8, 32*8-1); + m_screen->set_screen_update(FUNC(casloopy_state::screen_update)); + m_screen->set_palette(m_palette); + + PALETTE(config, m_palette).set_entries(512); GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty); diff --git a/src/mame/drivers/castle.cpp b/src/mame/drivers/castle.cpp index 1ab9a1b4209..7a10dfd8331 100644 --- a/src/mame/drivers/castle.cpp +++ b/src/mame/drivers/castle.cpp @@ -84,13 +84,14 @@ static INPUT_PORTS_START( castrev ) INPUT_PORTS_END -MACHINE_CONFIG_START(castle_state::castle_V1rvE) - MCFG_DEVICE_ADD("maincpu", HD6303Y, 1000000) - MCFG_DEVICE_PROGRAM_MAP(V1rvE_mastermap) +void castle_state::castle_V1rvE(machine_config &config) +{ + HD6303Y(config, m_maincpu, 1000000); + m_maincpu->set_addrmap(AS_PROGRAM, &castle_state::V1rvE_mastermap); - MCFG_DEVICE_ADD("slavecpu", HD6303Y, 1000000) - MCFG_DEVICE_PROGRAM_MAP(V1rvE_slavemap) -MACHINE_CONFIG_END + hd6303y_cpu_device &slavecpu(HD6303Y(config, "slavecpu", 1000000)); + slavecpu.set_addrmap(AS_PROGRAM, &castle_state::V1rvE_slavemap); +} @@ -102,12 +103,13 @@ void castle_state::V2rvA_map(address_map &map) } -MACHINE_CONFIG_START(castle_state::castle_V2rvA) - MCFG_DEVICE_ADD("maincpu", HD6303Y, 1000000) - MCFG_DEVICE_PROGRAM_MAP(V2rvA_map) +void castle_state::castle_V2rvA(machine_config &config) +{ + HD6303Y(config, m_maincpu, 1000000); + m_maincpu->set_addrmap(AS_PROGRAM, &castle_state::V2rvA_map); - MCFG_DEVICE_ADD("pia", PIA6821) -MACHINE_CONFIG_END + PIA6821(config, "pia"); +} ROM_START( castrev ) diff --git a/src/mame/drivers/caswin.cpp b/src/mame/drivers/caswin.cpp index d9dffa9b6fd..36dd70252f3 100644 --- a/src/mame/drivers/caswin.cpp +++ b/src/mame/drivers/caswin.cpp @@ -333,21 +333,22 @@ void caswin_state::caswin_palette(palette_device &palette) const } -MACHINE_CONFIG_START(caswin_state::vvillage) +void caswin_state::vvillage(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 4000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(vvillage_mem) - MCFG_DEVICE_IO_MAP(vvillage_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", caswin_state, irq0_line_hold) + Z80(config, m_maincpu, 4000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &caswin_state::vvillage_mem); + m_maincpu->set_addrmap(AS_IO, &caswin_state::vvillage_io); + m_maincpu->set_vblank_int("screen", FUNC(caswin_state::irq0_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(caswin_state, screen_update_vvillage) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 16, 256-16-1); + screen.set_screen_update(FUNC(caswin_state::screen_update_vvillage)); + screen.set_palette("palette"); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -360,7 +361,7 @@ MACHINE_CONFIG_START(caswin_state::vvillage) aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.port_b_read_callback().set_ioport("DSW2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.40); -MACHINE_CONFIG_END +} ROM_START( caswin ) ROM_REGION( 0x8000, "maincpu", 0 ) diff --git a/src/mame/drivers/cat.cpp b/src/mame/drivers/cat.cpp index 95bb7baffc5..8fb88335a64 100644 --- a/src/mame/drivers/cat.cpp +++ b/src/mame/drivers/cat.cpp @@ -1054,23 +1054,23 @@ WRITE_LINE_MEMBER(cat_state::prn_ack_ff) // switch the flipflop state on the ris #endif } -MACHINE_CONFIG_START(cat_state::cat) - +void cat_state::cat(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M68000, XTAL(19'968'000)/4) - MCFG_DEVICE_PROGRAM_MAP(cat_mem) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cat_state,cat_int_ack) + M68000(config, m_maincpu, XTAL(19'968'000)/4); + m_maincpu->set_addrmap(AS_PROGRAM, &cat_state::cat_mem); + m_maincpu->set_irq_acknowledge_callback(FUNC(cat_state::cat_int_ack)); MCFG_MACHINE_START_OVERRIDE(cat_state,cat) MCFG_MACHINE_RESET_OVERRIDE(cat_state,cat) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(672, 344) - MCFG_SCREEN_VISIBLE_AREA(0, 672-1, 0, 344-1) - MCFG_SCREEN_UPDATE_DRIVER(cat_state, screen_update_cat) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(672, 344); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(cat_state::screen_update_cat)); MCFG_VIDEO_START_OVERRIDE(cat_state,cat) @@ -1091,7 +1091,7 @@ MACHINE_CONFIG_START(cat_state::cat) SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 1.00); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); -MACHINE_CONFIG_END +} ROM_START( cat ) ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp index 54047855bc0..9b1dde95e6e 100644 --- a/src/mame/drivers/cave.cpp +++ b/src/mame/drivers/cave.cpp @@ -242,7 +242,7 @@ WRITE16_MEMBER(cave_state::sound_cmd_w) { // m_sound_flag[0] = 1; // m_sound_flag[1] = 1; - m_soundlatch->write(space, offset, data, mem_mask); + m_soundlatch->write(data); m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply } @@ -250,14 +250,14 @@ WRITE16_MEMBER(cave_state::sound_cmd_w) READ8_MEMBER(cave_state::soundlatch_lo_r) { // m_sound_flag[0] = 0; - return m_soundlatch->read(space, offset, 0x00ff) & 0xff; + return m_soundlatch->read() & 0xff; } /* Sound CPU: read the high 8 bits of the 16 bit sound latch */ READ8_MEMBER(cave_state::soundlatch_hi_r) { // m_sound_flag[1] = 0; - return m_soundlatch->read(space, offset, 0xff00) >> 8; + return m_soundlatch->read() >> 8; } /* Main CPU: read the latch written by the sound CPU (acknowledge) */ diff --git a/src/mame/drivers/cavepc.cpp b/src/mame/drivers/cavepc.cpp index b5d03cd967a..56455c256db 100644 --- a/src/mame/drivers/cavepc.cpp +++ b/src/mame/drivers/cavepc.cpp @@ -112,23 +112,24 @@ void cavepc_state::machine_reset() membank("bank1")->set_base(memregion("bios")->base() + 0x30000); } -MACHINE_CONFIG_START(cavepc_state::cavepc) +void cavepc_state::cavepc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", PENTIUM3, 200000000) /* AMD Athlon 64 X2 5050e Brisbane 2.60GHz, 1024KB L2 Cache ! */ - MCFG_DEVICE_PROGRAM_MAP(cavepc_map) - MCFG_DEVICE_IO_MAP(cavepc_io) + PENTIUM3(config, m_maincpu, 200000000); /* AMD Athlon 64 X2 5050e Brisbane 2.60GHz, 1024KB L2 Cache ! */ + m_maincpu->set_addrmap(AS_PROGRAM, &cavepc_state::cavepc_map); + m_maincpu->set_addrmap(AS_IO, &cavepc_state::cavepc_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 199) - MCFG_SCREEN_UPDATE_DRIVER(cavepc_state, screen_update_cavepc) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 16) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(640, 480); + screen.set_visarea(0, 639, 0, 199); + screen.set_screen_update(FUNC(cavepc_state::screen_update_cavepc)); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_entries(16); +} diff --git a/src/mame/drivers/cball.cpp b/src/mame/drivers/cball.cpp index 37c9e8f1426..31cfcddf6fe 100644 --- a/src/mame/drivers/cball.cpp +++ b/src/mame/drivers/cball.cpp @@ -264,27 +264,27 @@ static GFXDECODE_START( gfx_cball ) GFXDECODE_END -MACHINE_CONFIG_START(cball_state::cball) - +void cball_state::cball(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6800, XTAL(12'096'000) / 16) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(cpu_map) + M6800(config, m_maincpu, XTAL(12'096'000) / 16); /* ? */ + m_maincpu->set_addrmap(AS_PROGRAM, &cball_state::cpu_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(256, 262) - MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 223) - MCFG_SCREEN_UPDATE_DRIVER(cball_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(256, 262); + m_screen->set_visarea(0, 255, 0, 223); + m_screen->set_screen_update(FUNC(cball_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cball); PALETTE(config, m_palette, FUNC(cball_state::cball_palette), 6); /* sound hardware */ -MACHINE_CONFIG_END +} ROM_START( cball ) diff --git a/src/mame/drivers/cbasebal.cpp b/src/mame/drivers/cbasebal.cpp index 8c22084cf2f..304bcd0f7ca 100644 --- a/src/mame/drivers/cbasebal.cpp +++ b/src/mame/drivers/cbasebal.cpp @@ -71,7 +71,7 @@ WRITE8_MEMBER(cbasebal_state::bankedram_w) break; case 1: if (offset < 0x800) - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); break; default: cbasebal_scrollram_w(space, offset, data); @@ -261,26 +261,26 @@ void cbasebal_state::machine_reset() m_scroll_y[1] = 0; } -MACHINE_CONFIG_START(cbasebal_state::cbasebal) - +void cbasebal_state::cbasebal(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 6000000) /* ??? */ - MCFG_DEVICE_PROGRAM_MAP(cbasebal_map) - MCFG_DEVICE_IO_MAP(cbasebal_portmap) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cbasebal_state, irq0_line_hold) /* ??? */ + Z80(config, m_maincpu, 6000000); /* ??? */ + m_maincpu->set_addrmap(AS_PROGRAM, &cbasebal_state::cbasebal_map); + m_maincpu->set_addrmap(AS_IO, &cbasebal_state::cbasebal_portmap); + m_maincpu->set_addrmap(AS_OPCODES, &cbasebal_state::decrypted_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(cbasebal_state::irq0_line_hold)); /* ??? */ EEPROM_93C46_16BIT(config, "eeprom"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cbasebal_state, screen_update_cbasebal) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + screen.set_screen_update(FUNC(cbasebal_state::screen_update_cbasebal)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cbasebal); @@ -289,12 +289,10 @@ MACHINE_CONFIG_START(cbasebal_state::cbasebal) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.50); // clock frequency & pin 7 not verified - MCFG_DEVICE_ADD("ymsnd", YM2413, 3579545) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + YM2413(config, "ymsnd", 3579545).add_route(ALL_OUTPUTS, "mono", 1.0); +} diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp index b208483c91c..069ee861e7e 100644 --- a/src/mame/drivers/cbm2.cpp +++ b/src/mame/drivers/cbm2.cpp @@ -2219,7 +2219,7 @@ MACHINE_RESET_MEMBER( p500_state, p500 ) //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( 128k ) +// machine_config( 128k ) //------------------------------------------------- void cbm2_state::_128k(machine_config &config) @@ -2229,7 +2229,7 @@ void cbm2_state::_128k(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( 256k ) +// machine_config( 256k ) //------------------------------------------------- void cbm2_state::_256k(machine_config &config) @@ -2239,7 +2239,7 @@ void cbm2_state::_256k(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( p500_ntsc ) +// machine_config( p500_ntsc ) //------------------------------------------------- void p500_state::p500_ntsc(machine_config &config) @@ -2376,7 +2376,7 @@ void p500_state::p500_ntsc(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( p500_pal ) +// machine_config( p500_pal ) //------------------------------------------------- void p500_state::p500_pal(machine_config &config) @@ -2510,7 +2510,7 @@ void p500_state::p500_pal(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm2lp_ntsc ) +// machine_config( cbm2lp_ntsc ) //------------------------------------------------- void cbm2_state::cbm2lp_ntsc(machine_config &config) @@ -2640,7 +2640,7 @@ void cbm2_state::cbm2lp_ntsc(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( b128 ) +// machine_config( b128 ) //------------------------------------------------- void cbm2_state::b128(machine_config &config) @@ -2651,7 +2651,7 @@ void cbm2_state::b128(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( b256 ) +// machine_config( b256 ) //------------------------------------------------- void cbm2_state::b256(machine_config &config) @@ -2662,7 +2662,7 @@ void cbm2_state::b256(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm2lp_pal ) +// machine_config( cbm2lp_pal ) //------------------------------------------------- void cbm2_state::cbm2lp_pal(machine_config &config) @@ -2674,7 +2674,7 @@ void cbm2_state::cbm2lp_pal(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm610 ) +// machine_config( cbm610 ) //------------------------------------------------- void cbm2_state::cbm610(machine_config &config) @@ -2685,7 +2685,7 @@ void cbm2_state::cbm610(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm620 ) +// machine_config( cbm620 ) //------------------------------------------------- void cbm2_state::cbm620(machine_config &config) @@ -2696,7 +2696,7 @@ void cbm2_state::cbm620(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm2hp_ntsc ) +// machine_config( cbm2hp_ntsc ) //------------------------------------------------- void cbm2_state::cbm2hp_ntsc(machine_config &config) @@ -2707,7 +2707,7 @@ void cbm2_state::cbm2hp_ntsc(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( b128hp ) +// machine_config( b128hp ) //------------------------------------------------- void cbm2hp_state::b128hp(machine_config &config) @@ -2718,7 +2718,7 @@ void cbm2hp_state::b128hp(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( b256hp ) +// machine_config( b256hp ) //------------------------------------------------- void cbm2hp_state::b256hp(machine_config &config) @@ -2729,7 +2729,7 @@ void cbm2hp_state::b256hp(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( bx256hp ) +// machine_config( bx256hp ) //------------------------------------------------- void cbm2hp_state::bx256hp(machine_config &config) @@ -2763,7 +2763,7 @@ void cbm2hp_state::bx256hp(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm2hp_pal ) +// machine_config( cbm2hp_pal ) //------------------------------------------------- void cbm2_state::cbm2hp_pal(machine_config &config) @@ -2778,7 +2778,7 @@ void cbm2_state::cbm2hp_pal(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm710 ) +// machine_config( cbm710 ) //------------------------------------------------- void cbm2hp_state::cbm710(machine_config &config) @@ -2789,7 +2789,7 @@ void cbm2hp_state::cbm710(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm720 ) +// machine_config( cbm720 ) //------------------------------------------------- void cbm2hp_state::cbm720(machine_config &config) @@ -2800,7 +2800,7 @@ void cbm2hp_state::cbm720(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( cbm730 ) +// machine_config( cbm730 ) //------------------------------------------------- void cbm2hp_state::cbm730(machine_config &config) diff --git a/src/mame/drivers/cbuster.cpp b/src/mame/drivers/cbuster.cpp index 188da21cdcf..87e1bed2fb9 100644 --- a/src/mame/drivers/cbuster.cpp +++ b/src/mame/drivers/cbuster.cpp @@ -64,7 +64,7 @@ WRITE16_MEMBER(cbuster_state::twocrude_control_w) return; case 2: /* Sound CPU write */ - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); return; case 4: /* Protection, maybe this is a PAL on the board? @@ -299,23 +299,23 @@ void cbuster_state::machine_reset() m_pri = 0; } -MACHINE_CONFIG_START(cbuster_state::twocrude) - +void cbuster_state::twocrude(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000)/2) /* Custom chip 59 @ 12MHz Verified */ - MCFG_DEVICE_PROGRAM_MAP(twocrude_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cbuster_state, irq4_line_assert)/* VBL */ + M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 @ 12MHz Verified */ + m_maincpu->set_addrmap(AS_PROGRAM, &cbuster_state::twocrude_map); + m_maincpu->set_vblank_int("screen", FUNC(cbuster_state::irq4_line_assert)); /* VBL */ H6280(config, m_audiocpu, XTAL(24'000'000)/4); /* Custom chip 45, 6MHz Verified */ m_audiocpu->set_addrmap(AS_PROGRAM, &cbuster_state::sound_map); m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cbuster_state, screen_update_twocrude) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(529)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(cbuster_state::screen_update_twocrude)); GFXDECODE(config, "gfxdecode", m_palette, gfx_cbuster); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); @@ -323,7 +323,6 @@ MACHINE_CONFIG_START(cbuster_state::twocrude) BUFFERED_SPRITERAM16(config, m_spriteram); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -339,7 +338,6 @@ MACHINE_CONFIG_START(cbuster_state::twocrude) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -365,19 +363,16 @@ MACHINE_CONFIG_START(cbuster_state::twocrude) m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); // YM2203_PITCH_HACK - Pitch is too low at 1.3425MHz (see also stfight.cpp) - MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/24 * 3) /* 1.3425MHz Verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) + YM2203(config, "ym1", XTAL(32'220'000)/24 * 3).add_route(ALL_OUTPUTS, "mono", 0.60); /* 1.3425MHz Verified */ ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9)); /* 3.58MHz Verified */ ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */ ym2.add_route(ALL_OUTPUTS, "mono", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) /* 1.0068MHz Verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) + OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); /* 1.0068MHz Verified */ - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH) /* 2.01375MHz Verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, "oki2", XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* 2.01375MHz Verified */ +} /******************************************************************************/ diff --git a/src/mame/drivers/cc40.cpp b/src/mame/drivers/cc40.cpp index 8736bed7f98..e333a96ba3a 100644 --- a/src/mame/drivers/cc40.cpp +++ b/src/mame/drivers/cc40.cpp @@ -598,15 +598,14 @@ MACHINE_CONFIG_START(cc40_state::cc40) NVRAM(config, "sysram.2", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(60) // arbitrary - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(6*31+1, 9*1+1+1) - MCFG_SCREEN_VISIBLE_AREA(0, 6*31, 0, 9*1+1) - //screen.set_visarea_full(); + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); // arbitrary + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(6*31+1, 9*1+1+1); + screen.set_visarea_full(); config.set_default_layout(layout_cc40); - MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(cc40_state::cc40_palette), 3); diff --git a/src/mame/drivers/cchance.cpp b/src/mame/drivers/cchance.cpp index e3d9a4cd3af..a57966eaee3 100644 --- a/src/mame/drivers/cchance.cpp +++ b/src/mame/drivers/cchance.cpp @@ -217,11 +217,11 @@ void cchance_state::machine_reset() m_bell_io = 0; } -MACHINE_CONFIG_START(cchance_state::cchance) - - MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cchance_state, irq0_line_hold) +void cchance_state::cchance(machine_config &config) +{ + Z80(config, m_maincpu, 4000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &cchance_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(cchance_state::irq0_line_hold)); GFXDECODE(config, "gfxdecode", m_palette, gfx_cchance); @@ -229,14 +229,14 @@ MACHINE_CONFIG_START(cchance_state::cchance) m_seta001->set_gfxdecode_tag("gfxdecode"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57.5) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cchance_state, screen_update_tnzs) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cchance_state, screen_vblank_tnzs)) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(57.5); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(cchance_state::screen_update_tnzs)); + m_screen->screen_vblank().set(FUNC(cchance_state::screen_vblank_tnzs)); + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(cchance_state::prompalette), 512); @@ -246,7 +246,7 @@ MACHINE_CONFIG_START(cchance_state::cchance) aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.port_b_read_callback().set_ioport("DSW2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} ROM_START( cchance ) ROM_REGION( 0x10000, "maincpu", 0 ) diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index 688276e222d..803c089a1ba 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -255,7 +255,7 @@ void cclimber_state::machine_start() WRITE8_MEMBER(cclimber_state::swimmer_sh_soundlatch_w) { - m_soundlatch->write(space,offset,data); + m_soundlatch->write(data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } @@ -1105,33 +1105,33 @@ WRITE_LINE_MEMBER(cclimber_state::bagmanf_vblank_irq) m_maincpu->set_input_line(0, HOLD_LINE); } -MACHINE_CONFIG_START(cclimber_state::root) - +void cclimber_state::root(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(18'432'000)/3/2) /* 3.072 MHz */ - MCFG_DEVICE_PROGRAM_MAP(cclimber_map) - MCFG_DEVICE_IO_MAP(cclimber_portmap) + Z80(config, m_maincpu, XTAL(18'432'000)/3/2); /* 3.072 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::cclimber_map); + m_maincpu->set_addrmap(AS_IO, &cclimber_state::cclimber_portmap); - MCFG_DEVICE_ADD(m_mainlatch, LS259, 0) + LS259(config, m_mainlatch, 0); m_mainlatch->q_out_cb<0>().set(FUNC(cclimber_state::nmi_mask_w)); m_mainlatch->q_out_cb<1>().set(FUNC(cclimber_state::flip_screen_x_w)); m_mainlatch->q_out_cb<2>().set(FUNC(cclimber_state::flip_screen_y_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cclimber_state, screen_update_cclimber) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cclimber_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(cclimber_state::screen_update_cclimber)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(cclimber_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cclimber); PALETTE(config, m_palette, FUNC(cclimber_state::cclimber_palette), 16*4+8*4); MCFG_VIDEO_START_OVERRIDE(cclimber_state,cclimber) -MACHINE_CONFIG_END +} void cclimber_state::cclimber(machine_config &config) @@ -1186,7 +1186,8 @@ void cclimber_state::bagmanf(machine_config &config) } -MACHINE_CONFIG_START(cclimber_state::yamato) +void cclimber_state::yamato(machine_config &config) +{ root(config); /* basic machine hardware */ @@ -1196,15 +1197,15 @@ MACHINE_CONFIG_START(cclimber_state::yamato) maincpu.set_addrmap(AS_OPCODES, &cclimber_state::yamato_decrypted_opcodes_map); maincpu.set_decrypted_tag(":decrypted_opcodes"); - MCFG_DEVICE_ADD("audiocpu", Z80, 3072000) /* 3.072 MHz ? */ - MCFG_DEVICE_PROGRAM_MAP(yamato_audio_map) - MCFG_DEVICE_IO_MAP(yamato_audio_portmap) + Z80(config, m_audiocpu, 3072000); /* 3.072 MHz ? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cclimber_state::yamato_audio_map); + m_audiocpu->set_addrmap(AS_IO, &cclimber_state::yamato_audio_portmap); /* video hardware */ m_palette->set_entries(16*4+8*4+256); m_palette->set_init(FUNC(cclimber_state::yamato_palette)); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(cclimber_state, screen_update_yamato) + + subdevice<screen_device>("screen")->set_screen_update(FUNC(cclimber_state::screen_update_yamato)); /* audio hardware */ SPEAKER(config, "speaker").front_center(); @@ -1212,10 +1213,11 @@ MACHINE_CONFIG_START(cclimber_state::yamato) AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.25); /* 1.536 MHz */ AY8910(config, "ay2", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.25); /* 1.536 MHz */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(cclimber_state::toprollr) +void cclimber_state::toprollr(machine_config &config) +{ cclimber(config); sega_315_5018_device &maincpu(SEGA_315_5018(config.replace(), m_maincpu, XTAL(18'432'000)/3/2)); /* 3.072 MHz */ @@ -1236,36 +1238,36 @@ MACHINE_CONFIG_START(cclimber_state::toprollr) MCFG_VIDEO_START_OVERRIDE(cclimber_state,toprollr) subdevice<screen_device>("screen")->set_screen_update(FUNC(cclimber_state::screen_update_toprollr)); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(cclimber_state::swimmer) +void cclimber_state::swimmer(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(18'432'000)/6) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(swimmer_map) + Z80(config, m_maincpu, XTAL(18'432'000)/6); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::swimmer_map); - MCFG_DEVICE_ADD(m_mainlatch, LS259, 0) + LS259(config, m_mainlatch, 0); m_mainlatch->q_out_cb<0>().set(FUNC(cclimber_state::nmi_mask_w)); m_mainlatch->q_out_cb<1>().set(FUNC(cclimber_state::flip_screen_x_w)); m_mainlatch->q_out_cb<2>().set(FUNC(cclimber_state::flip_screen_y_w)); m_mainlatch->q_out_cb<3>().set(FUNC(cclimber_state::sidebg_enable_w)); m_mainlatch->q_out_cb<4>().set(FUNC(cclimber_state::palette_bank_w)); - MCFG_DEVICE_ADD("audiocpu", Z80,XTAL(4'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(swimmer_audio_map) - MCFG_DEVICE_IO_MAP(swimmer_audio_portmap) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cclimber_state, nmi_line_pulse, (double)4000000/16384) /* IRQs are triggered by the main CPU */ + Z80(config, m_audiocpu, XTAL(4'000'000)/2); /* verified on pcb */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cclimber_state::swimmer_audio_map); + m_audiocpu->set_addrmap(AS_IO, &cclimber_state::swimmer_audio_portmap); + m_audiocpu->set_periodic_int(FUNC(cclimber_state::nmi_line_pulse), attotime::from_hz((double)4000000/16384)); /* IRQs are triggered by the main CPU */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60.57) /* verified on pcb */ - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cclimber_state, screen_update_swimmer) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cclimber_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60.57); /* verified on pcb */ + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(cclimber_state::screen_update_swimmer)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(cclimber_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_swimmer); PALETTE(config, m_palette, FUNC(cclimber_state::swimmer_palette), 32*8+4*8+1); @@ -1280,7 +1282,7 @@ MACHINE_CONFIG_START(cclimber_state::swimmer) AY8910(config, "ay1", XTAL(4'000'000)/2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* verified on pcb */ AY8910(config, "ay2", XTAL(4'000'000)/2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* verified on pcb */ -MACHINE_CONFIG_END +} void cclimber_state::guzzler(machine_config &config) { diff --git a/src/mame/drivers/ccs2810.cpp b/src/mame/drivers/ccs2810.cpp index 0c31b362ec6..9372ecc73f6 100644 --- a/src/mame/drivers/ccs2810.cpp +++ b/src/mame/drivers/ccs2810.cpp @@ -173,7 +173,7 @@ READ8_MEMBER(ccs_state::io_read) { // A7-A3 are compared against jumper settings if (m_ser_en->read() && (offset & 0x00f8) == m_ser_addr_sel->read()) - return m_ins8250->ins8250_r(space, offset & 7); + return m_ins8250->ins8250_r(offset & 7); return 0xff; } @@ -182,7 +182,7 @@ WRITE8_MEMBER(ccs_state::io_write) { // A7-A3 are compared against jumper settings if (m_ser_en->read() && (offset & 0x00f8) == m_ser_addr_sel->read()) - m_ins8250->ins8250_w(space, offset & 7, data); + m_ins8250->ins8250_w(offset & 7, data); } void ccs_state::ccs2810_mem(address_map &map) diff --git a/src/mame/drivers/cdc721.cpp b/src/mame/drivers/cdc721.cpp index bec2d25e4af..c6825c48a8e 100644 --- a/src/mame/drivers/cdc721.cpp +++ b/src/mame/drivers/cdc721.cpp @@ -268,7 +268,7 @@ uint32_t cdc721_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap { uint16_t ma = m_videoram[y * 2] | m_videoram[y * 2 + 1] << 8; - for (ra = 0; ra < 16; ra++) + for (ra = 0; ra < 15; ra++) { uint16_t *p = &bitmap.pix16(sy++); @@ -304,12 +304,13 @@ uint32_t cdc721_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap return 0; } -MACHINE_CONFIG_START(cdc721_state::cdc721) +void cdc721_state::cdc721(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD("maincpu", Z80, 6_MHz_XTAL) // Zilog Z8400B (Z80B) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cdc721_state, restart_cb) + Z80(config, m_maincpu, 6_MHz_XTAL); // Zilog Z8400B (Z80B) + m_maincpu->set_addrmap(AS_PROGRAM, &cdc721_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &cdc721_state::io_map); + m_maincpu->set_irq_acknowledge_callback(FUNC(cdc721_state::restart_cb)); ADDRESS_MAP_BANK(config, "block0").set_map(&cdc721_state::block0_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x4000); ADDRESS_MAP_BANK(config, "block4").set_map(&cdc721_state::block4_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x4000); @@ -319,13 +320,10 @@ MACHINE_CONFIG_START(cdc721_state::cdc721) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MCM51L01C45 (256x4) + battery /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(cdc721_state, screen_update) - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(12.936_MHz_XTAL, 800, 0, 640, 539, 0, 450); + screen.set_screen_update(FUNC(cdc721_state::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(cdc721_state::cdc721_palette), 3); GFXDECODE(config, "gfxdecode", "palette", gfx_cdc721); @@ -398,7 +396,7 @@ MACHINE_CONFIG_START(cdc721_state::cdc721) chb.ri_handler().set("pbuart", FUNC(ins8250_device::ri_w)); INPUT_MERGER_ANY_HIGH(config, "int2").output_handler().set(FUNC(cdc721_state::int_w<2>)); // 74S05 (open collector) -MACHINE_CONFIG_END +} ROM_START( cdc721 ) ROM_REGION( 0x4000, "resident", 0 ) diff --git a/src/mame/drivers/cedar_magnet.cpp b/src/mame/drivers/cedar_magnet.cpp index 219e83956f3..4c545df2b14 100644 --- a/src/mame/drivers/cedar_magnet.cpp +++ b/src/mame/drivers/cedar_magnet.cpp @@ -767,13 +767,13 @@ INTERRUPT_GEN_MEMBER(cedar_magnet_state::irq) m_cedsprite->irq_hold(); } -MACHINE_CONFIG_START(cedar_magnet_state::cedar_magnet) - +void cedar_magnet_state::cedar_magnet(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(cedar_magnet_map) - MCFG_DEVICE_IO_MAP(cedar_magnet_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cedar_magnet_state, irq) + Z80(config, m_maincpu, 4000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &cedar_magnet_state::cedar_magnet_map); + m_maincpu->set_addrmap(AS_IO, &cedar_magnet_state::cedar_magnet_io); + m_maincpu->set_vblank_int("screen", FUNC(cedar_magnet_state::irq)); ADDRESS_MAP_BANK(config, "bank0").set_map(&cedar_magnet_state::cedar_bank0).set_options(ENDIANNESS_LITTLE, 8, 18, 0x10000); ADDRESS_MAP_BANK(config, "mb_sub_ram").set_map(&cedar_magnet_state::cedar_magnet_mainboard_sub_ram_map).set_options(ENDIANNESS_LITTLE, 8, 18, 0x10000); @@ -794,15 +794,15 @@ MACHINE_CONFIG_START(cedar_magnet_state::cedar_magnet) m_ic49_pio->out_pb_callback().set(FUNC(cedar_magnet_state::ic49_pio_pb_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-8-1, 0, 192-1) - MCFG_SCREEN_UPDATE_DRIVER(cedar_magnet_state, screen_update_cedar_magnet) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-8-1, 0, 192-1); + screen.set_screen_update(FUNC(cedar_magnet_state::screen_update_cedar_magnet)); + screen.set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 0x400) + PALETTE(config, m_palette).set_entries(0x400); CEDAR_MAGNET_SOUND(config, m_cedsound, 0); CEDAR_MAGNET_PLANE(config, m_cedplane0, 0); @@ -812,7 +812,7 @@ MACHINE_CONFIG_START(cedar_magnet_state::cedar_magnet) CEDAR_MAGNET_FLOP(config, "flop", 0); config.m_perfect_cpu_quantum = subtag("maincpu"); -MACHINE_CONFIG_END +} #define BIOS_ROM \ diff --git a/src/mame/drivers/cesclass.cpp b/src/mame/drivers/cesclass.cpp index abbe6c160c1..a8633d13ae7 100644 --- a/src/mame/drivers/cesclass.cpp +++ b/src/mame/drivers/cesclass.cpp @@ -248,29 +248,28 @@ void cesclassic_state::cesclassic_palette(palette_device &palette) const palette.set_pen_color(i, pal2bit(i), 0, 0); } -MACHINE_CONFIG_START(cesclassic_state::cesclassic) - - MCFG_DEVICE_ADD("maincpu", M68000, 24000000/2 ) - MCFG_DEVICE_PROGRAM_MAP(cesclassic_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("l_lcd", cesclassic_state, irq2_line_assert) // TODO: unknown sources - MCFG_DEVICE_PERIODIC_INT_DRIVER(cesclassic_state, irq3_line_assert, 60*8) +void cesclassic_state::cesclassic(machine_config &config) +{ + M68000(config, m_maincpu, 24000000/2); + m_maincpu->set_addrmap(AS_PROGRAM, &cesclassic_state::cesclassic_map); + m_maincpu->set_vblank_int("l_lcd", FUNC(cesclassic_state::irq2_line_assert)); // TODO: unknown sources + m_maincpu->set_periodic_int(FUNC(cesclassic_state::irq3_line_assert), attotime::from_hz(60*8)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("l_lcd", LCD) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(cesclassic_state, screen_update) - MCFG_SCREEN_SIZE(8*16*2, 8*8+3*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 8*16*2-1, 0*8, 8*8-1) + screen_device &screen(SCREEN(config, "l_lcd", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_screen_update(FUNC(cesclassic_state::screen_update)); + screen.set_size(8*16*2, 8*8+3*8); + screen.set_visarea(0*8, 8*16*2-1, 0*8, 8*8-1); PALETTE(config, m_palette, FUNC(cesclassic_state::cesclassic_palette), 4); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 24000000/16, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 24000000/16, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.5); +} ROM_START(hrclass) diff --git a/src/mame/drivers/chaknpop.cpp b/src/mame/drivers/chaknpop.cpp index 0bbc792177f..01feb17a84e 100644 --- a/src/mame/drivers/chaknpop.cpp +++ b/src/mame/drivers/chaknpop.cpp @@ -362,24 +362,24 @@ void chaknpop_state::machine_reset() m_flip_y = 0; } -MACHINE_CONFIG_START(chaknpop_state::chaknpop) - +void chaknpop_state::chaknpop(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'000'000) / 6) // Verified on PCB - MCFG_DEVICE_PROGRAM_MAP(chaknpop_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", chaknpop_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(18'000'000) / 6); // Verified on PCB + m_maincpu->set_addrmap(AS_PROGRAM, &chaknpop_state::chaknpop_map); + m_maincpu->set_vblank_int("screen", FUNC(chaknpop_state::irq0_line_hold)); - MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL(18'000'000) / 6) // Verified on PCB + TAITO68705_MCU(config, m_bmcu, XTAL(18'000'000) / 6); // Verified on PCB config.m_minimum_quantum = attotime::from_hz(6000); // 100 CPU slices per frame - a high value to ensure proper synchronization of the CPUs /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(59.1828) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(chaknpop_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(59.1828); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(chaknpop_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_chaknpop); PALETTE(config, m_palette, FUNC(chaknpop_state::chaknpop_palette), 1024); @@ -396,7 +396,7 @@ MACHINE_CONFIG_START(chaknpop_state::chaknpop) ay2.port_a_write_callback().set(FUNC(chaknpop_state::unknown_port_1_w)); // ?? ay2.port_b_write_callback().set(FUNC(chaknpop_state::unknown_port_2_w)); // ?? ay2.add_route(ALL_OUTPUTS, "mono", 0.10); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp index 97f1fc12b41..8bc7082d3a3 100644 --- a/src/mame/drivers/champbas.cpp +++ b/src/mame/drivers/champbas.cpp @@ -519,12 +519,12 @@ INTERRUPT_GEN_MEMBER(champbas_state::vblank_irq) } -MACHINE_CONFIG_START(champbas_state::talbot) - +void champbas_state::talbot(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(champbasj_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq) + Z80(config, m_maincpu, XTAL(18'432'000)/6); + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map); + m_maincpu->set_vblank_int("screen", FUNC(champbas_state::vblank_irq)); LS259(config, m_mainlatch); m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w)); @@ -536,18 +536,18 @@ MACHINE_CONFIG_START(champbas_state::talbot) m_mainlatch->q_out_cb<6>().set(FUNC(champbas_state::mcu_start_w)); m_mainlatch->q_out_cb<7>().set(FUNC(champbas_state::mcu_switch_w)); - MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) + ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu"); WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(champbas_state, screen_update_champbas) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(32*8, 32*8); + screen.set_visarea(0, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(champbas_state::screen_update_champbas)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_talbot); PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32); @@ -558,15 +558,15 @@ MACHINE_CONFIG_START(champbas_state::talbot) GENERIC_LATCH_8(config, "soundlatch"); AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.5); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(champbas_state::champbas) +void champbas_state::champbas(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(champbas_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq) + Z80(config, m_maincpu, XTAL(18'432'000)/6); + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbas_map); + m_maincpu->set_vblank_int("screen", FUNC(champbas_state::vblank_irq)); LS259(config, m_mainlatch); // 9D; 8G on Champion Baseball II Double Board Configuration m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w)); @@ -578,18 +578,18 @@ MACHINE_CONFIG_START(champbas_state::champbas) m_mainlatch->q_out_cb<6>().set_nop(); // no MCU m_mainlatch->q_out_cb<7>().set_nop(); // no MCU - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(champbas_sound_map) + z80_device &audiocpu(Z80(config, "audiocpu", XTAL(18'432'000)/6)); + audiocpu.set_addrmap(AS_PROGRAM, &champbas_state::champbas_sound_map); WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(champbas_state, screen_update_champbas) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(champbas_state::screen_update_champbas)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_champbas); PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32); @@ -605,70 +605,70 @@ MACHINE_CONFIG_START(champbas_state::champbas) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(champbas_state::champbasj) +void champbas_state::champbasj(machine_config &config) +{ champbas(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(champbasj_map) + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map); m_mainlatch->q_out_cb<6>().set(FUNC(champbas_state::mcu_start_w)); m_mainlatch->q_out_cb<7>().set(FUNC(champbas_state::mcu_switch_w)); - MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) // note: 8302 rom on champbb2 (same device!) + ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // note: 8302 rom on champbb2 (same device!) config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(champbas_state::champbasja) +void champbas_state::champbasja(machine_config &config) +{ champbas(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(champbasja_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasja_map); +} -MACHINE_CONFIG_START(champbas_state::champbasjb) +void champbas_state::champbasjb(machine_config &config) +{ champbas(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(champbasjb_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasjb_map); +} -MACHINE_CONFIG_START(champbas_state::champbb2) +void champbas_state::champbb2(machine_config &config) +{ champbasj(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(champbb2_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbb2_map); +} -MACHINE_CONFIG_START(champbas_state::champbb2j) +void champbas_state::champbb2j(machine_config &config) +{ champbb2(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(champbb2j_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbb2j_map); +} -MACHINE_CONFIG_START(champbas_state::tbasebal) +void champbas_state::tbasebal(machine_config &config) +{ champbas(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(tbasebal_map) - - MCFG_DEVICE_ADD("mcu", M68705P3, XTAL(18'432'000)/6) // ?Mhz -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::tbasebal_map); + M68705P3(config, "mcu", XTAL(18'432'000)/6); // ?Mhz +} -MACHINE_CONFIG_START(exctsccr_state::exctsccr) +void exctsccr_state::exctsccr(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6 ) - MCFG_DEVICE_PROGRAM_MAP(exctsccr_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", exctsccr_state, vblank_irq) + Z80(config, m_maincpu, XTAL(18'432'000)/6); + m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_map); + m_maincpu->set_vblank_int("screen", FUNC(exctsccr_state::vblank_irq)); LS259(config, m_mainlatch); m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w)); @@ -680,27 +680,27 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccr) m_mainlatch->q_out_cb<6>().set(FUNC(exctsccr_state::mcu_start_w)); m_mainlatch->q_out_cb<7>().set(FUNC(exctsccr_state::mcu_switch_w)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181)/4 ) - MCFG_DEVICE_PROGRAM_MAP(exctsccr_sound_map) - MCFG_DEVICE_IO_MAP(exctsccr_sound_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(exctsccr_state, nmi_line_pulse, 4000) // 4 kHz, updates the dac + Z80(config, m_audiocpu, XTAL(14'318'181)/4); + m_audiocpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_sound_map); + m_audiocpu->set_addrmap(AS_IO, &exctsccr_state::exctsccr_sound_io_map); + m_audiocpu->set_periodic_int(FUNC(exctsccr_state::nmi_line_pulse), attotime::from_hz(4000)); // 4 kHz, updates the dac timer_device &exc_snd_irq(TIMER(config, "exc_snd_irq")); exc_snd_irq.configure_periodic(FUNC(exctsccr_state::exctsccr_sound_irq), attotime::from_hz(75)); // irq source unknown, determines music tempo exc_snd_irq.set_start_delay(attotime::from_hz(75)); - MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) // note: 8302 rom, or 8303 on exctscc2 (same device!) + ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // note: 8302 rom, or 8303 on exctscc2 (same device!) config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu"); WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60.54) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(exctsccr_state, screen_update_exctsccr) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60.54); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr); PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32); @@ -724,15 +724,15 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccr) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} /* Bootleg running on a modified Champion Baseball board */ -MACHINE_CONFIG_START(exctsccr_state::exctsccrb) - +void exctsccr_state::exctsccrb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(exctsccrb_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", exctsccr_state, vblank_irq) + Z80(config, m_maincpu, XTAL(18'432'000)/6); + m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccrb_map); + m_maincpu->set_vblank_int("screen", FUNC(exctsccr_state::vblank_irq)); LS259(config, m_mainlatch); m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w)); @@ -744,21 +744,21 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccrb) m_mainlatch->q_out_cb<6>().set(FUNC(exctsccr_state::mcu_start_w)); m_mainlatch->q_out_cb<7>().set(FUNC(exctsccr_state::mcu_switch_w)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6) - MCFG_DEVICE_PROGRAM_MAP(champbas_sound_map) + Z80(config, m_audiocpu, XTAL(18'432'000)/6); + m_audiocpu->set_addrmap(AS_PROGRAM, &exctsccr_state::champbas_sound_map); - MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(18'432'000)/6/8) // champbasj 8201 on pcb, though unused + ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // champbasj 8201 on pcb, though unused config.m_perfect_cpu_quantum = subtag("alpha_8201:mcu"); WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(exctsccr_state, screen_update_exctsccr) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr); PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32); @@ -774,7 +774,7 @@ MACHINE_CONFIG_START(exctsccr_state::exctsccrb) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/champbwl.cpp b/src/mame/drivers/champbwl.cpp index bcba22c6383..2998b5b976c 100644 --- a/src/mame/drivers/champbwl.cpp +++ b/src/mame/drivers/champbwl.cpp @@ -489,12 +489,12 @@ WRITE_LINE_MEMBER(champbwl_state::screen_vblank_champbwl) } -MACHINE_CONFIG_START(champbwl_state::champbwl) - +void champbwl_state::champbwl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16000000/4) /* 4MHz */ - MCFG_DEVICE_PROGRAM_MAP(champbwl_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbwl_state, irq0_line_hold) + Z80(config, m_maincpu, 16000000/4); /* 4MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::champbwl_map); + m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -505,14 +505,14 @@ MACHINE_CONFIG_START(champbwl_state::champbwl) m_seta001->set_gfxdecode_tag("gfxdecode"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57.5) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(champbwl_state, screen_update_champbwl) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, champbwl_state, screen_vblank_champbwl)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57.5); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(champbwl_state::screen_update_champbwl)); + screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_champbwl)); + screen.set_palette(m_palette); GFXDECODE(config, "gfxdecode", m_palette, gfx_champbwl); PALETTE(config, m_palette, FUNC(champbwl_state::champbwl_palette), 512); @@ -521,10 +521,10 @@ MACHINE_CONFIG_START(champbwl_state::champbwl) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("x1snd", X1_010, 16000000) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + X1_010(config, m_x1, 16000000); + m_x1->add_route(0, "lspeaker", 1.0); + m_x1->add_route(1, "rspeaker", 1.0); +} @@ -553,12 +553,12 @@ MACHINE_START_MEMBER(champbwl_state,doraemon) m_mainbank->configure_entries(0, 4, &ROM[0], 0x4000); } -MACHINE_CONFIG_START(champbwl_state::doraemon) - +void champbwl_state::doraemon(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(14'318'181)/4) - MCFG_DEVICE_PROGRAM_MAP(doraemon_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", champbwl_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(14'318'181)/4); + m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::doraemon_map); + m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -570,23 +570,22 @@ MACHINE_CONFIG_START(champbwl_state::doraemon) MCFG_MACHINE_START_OVERRIDE(champbwl_state,doraemon) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(320, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(champbwl_state, screen_update_doraemon) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, champbwl_state, screen_vblank_doraemon)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(320, 256); + screen.set_visarea(0, 320-1, 16, 256-16-1); + screen.set_screen_update(FUNC(champbwl_state::screen_update_doraemon)); + screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_doraemon)); + screen.set_palette(m_palette); GFXDECODE(config, "gfxdecode", m_palette, gfx_champbwl); PALETTE(config, m_palette, FUNC(champbwl_state::champbwl_palette), 512); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("x1snd", X1_010, XTAL(14'318'181)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + X1_010(config, m_x1, XTAL(14'318'181)).add_route(ALL_OUTPUTS, "mono", 1.0); +} diff --git a/src/mame/drivers/chanbara.cpp b/src/mame/drivers/chanbara.cpp index 290badcd9b2..352aeb368de 100644 --- a/src/mame/drivers/chanbara.cpp +++ b/src/mame/drivers/chanbara.cpp @@ -394,22 +394,22 @@ void chanbara_state::machine_reset() m_scrollhi = 0; } -MACHINE_CONFIG_START(chanbara_state::chanbara) - - MCFG_DEVICE_ADD("maincpu", MC6809E, XTAL(12'000'000)/8) - MCFG_DEVICE_PROGRAM_MAP(chanbara_map) +void chanbara_state::chanbara(machine_config &config) +{ + MC6809E(config, m_maincpu, XTAL(12'000'000)/8); + m_maincpu->set_addrmap(AS_PROGRAM, &chanbara_state::chanbara_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(57.4122) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(57.4122); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0, 32*8-1, 2*8, 30*8-1); // DECO video CRTC - MCFG_SCREEN_RAW_PARAMS(XTAL(12'000'000)/2,384,0,256,272,16,240) - MCFG_SCREEN_UPDATE_DRIVER(chanbara_state, screen_update_chanbara) - MCFG_SCREEN_PALETTE(m_palette) + screen.set_raw(XTAL(12'000'000)/2,384,0,256,272,16,240); + screen.set_screen_update(FUNC(chanbara_state::screen_update_chanbara)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_chanbara); @@ -422,7 +422,7 @@ MACHINE_CONFIG_START(chanbara_state::chanbara) ymsnd.port_a_write_callback().set(FUNC(chanbara_state::chanbara_ay_out_0_w)); ymsnd.port_b_write_callback().set(FUNC(chanbara_state::chanbara_ay_out_1_w)); ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} ROM_START( chanbara ) diff --git a/src/mame/drivers/chance32.cpp b/src/mame/drivers/chance32.cpp index 7169627c897..4e95975b043 100644 --- a/src/mame/drivers/chance32.cpp +++ b/src/mame/drivers/chance32.cpp @@ -458,23 +458,23 @@ void chance32_state::machine_reset() } -MACHINE_CONFIG_START(chance32_state::chance32) - +void chance32_state::chance32(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,12000000/2) - MCFG_DEVICE_PROGRAM_MAP(chance32_map) - MCFG_DEVICE_IO_MAP(chance32_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", chance32_state, irq0_line_hold) + Z80(config, m_maincpu, 12000000/2); + m_maincpu->set_addrmap(AS_PROGRAM, &chance32_state::chance32_map); + m_maincpu->set_addrmap(AS_IO, &chance32_state::chance32_portmap); + m_maincpu->set_vblank_int("screen", FUNC(chance32_state::irq0_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(52.786) -// MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(40*16, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 35*16-1, 0, 29*8-1) - MCFG_SCREEN_UPDATE_DRIVER(chance32_state, screen_update_chance32) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(52.786); +// screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(40*16, 32*8); + screen.set_visarea(0, 35*16-1, 0, 29*8-1); + screen.set_screen_update(FUNC(chance32_state::screen_update_chance32)); + screen.set_palette("palette"); h46505_device &crtc(H46505(config, "crtc", 12000000/16)); /* 52.786 Hz (similar to Major Poker) */ crtc.set_screen("screen"); @@ -488,9 +488,8 @@ MACHINE_CONFIG_START(chance32_state::chance32) SPEAKER(config, "mono").front_center(); /* clock at 1050 kHz match the 8000 Hz samples stored inside the ROM */ - MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, "oki", 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified +} ROM_START( chance32 ) diff --git a/src/mame/drivers/channelf.cpp b/src/mame/drivers/channelf.cpp index 5927fad742d..529a911e10d 100644 --- a/src/mame/drivers/channelf.cpp +++ b/src/mame/drivers/channelf.cpp @@ -207,107 +207,107 @@ void channelf_state::channelf_cart(machine_config &config) SOFTWARE_LIST(config, "cart_list").set_original("channelf"); } -MACHINE_CONFIG_START(channelf_state::channelf) +void channelf_state::channelf(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", F8, 3.579545_MHz_XTAL/2) /* Colorburst/2 */ - MCFG_DEVICE_PROGRAM_MAP(channelf_map) - MCFG_DEVICE_IO_MAP(channelf_io) + F8(config, m_maincpu, 3.579545_MHz_XTAL/2); /* Colorburst/2 */ + m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map); + m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(128, 64) - MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3) - MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(128, 64); + screen.set_visarea(4, 112 - 7, 4, 64 - 3); + screen.set_screen_update(FUNC(channelf_state::screen_update_channelf)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("custom", CHANNELF_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 1.00); channelf_cart(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(channelf_state::sabavdpl) +void channelf_state::sabavdpl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", F8, 4_MHz_XTAL/2) /* PAL speed */ - MCFG_DEVICE_PROGRAM_MAP(channelf_map) - MCFG_DEVICE_IO_MAP(channelf_io) + F8(config, m_maincpu, 4_MHz_XTAL/2); /* PAL speed */ + m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map); + m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(4623)) /* approximate */ - MCFG_SCREEN_SIZE(128, 64) - MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3) - MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(4623)); /* approximate */ + screen.set_size(128, 64); + screen.set_visarea(4, 112 - 7, 4, 64 - 3); + screen.set_screen_update(FUNC(channelf_state::screen_update_channelf)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("custom", CHANNELF_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 1.00); channelf_cart(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(channelf_state::channlf2) +void channelf_state::channlf2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", F8, 3.579545_MHz_XTAL/2) /* Colorburst / 2 */ - MCFG_DEVICE_PROGRAM_MAP(channelf_map) - MCFG_DEVICE_IO_MAP(channelf_io) + F8(config, m_maincpu, 3.579545_MHz_XTAL/2); /* Colorburst / 2 */ + m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map); + m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(128, 64) - MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3) - MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(128, 64); + screen.set_visarea(4, 112 - 7, 4, 64 - 3); + screen.set_screen_update(FUNC(channelf_state::screen_update_channelf)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("custom", CHANNELF_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 1.00); channelf_cart(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(channelf_state::sabavpl2) +void channelf_state::sabavpl2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", F8, 4_MHz_XTAL/2) /* PAL speed */ - MCFG_DEVICE_PROGRAM_MAP(channelf_map) - MCFG_DEVICE_IO_MAP(channelf_io) + F8(config, m_maincpu, 4_MHz_XTAL/2); /* PAL speed */ + m_maincpu->set_addrmap(AS_PROGRAM, &channelf_state::channelf_map); + m_maincpu->set_addrmap(AS_IO, &channelf_state::channelf_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(4623)) /* approximate */ - MCFG_SCREEN_SIZE(128, 64) - MCFG_SCREEN_VISIBLE_AREA(4, 112 - 7, 4, 64 - 3) - MCFG_SCREEN_UPDATE_DRIVER(channelf_state, screen_update_channelf) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(4623)); /* approximate */ + screen.set_size(128, 64); + screen.set_visarea(4, 112 - 7, 4, 64 - 3); + screen.set_screen_update(FUNC(channelf_state::screen_update_channelf)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(channelf_state::channelf_palette), 8); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("custom", CHANNELF_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + CHANNELF_SOUND(config, m_custom).add_route(ALL_OUTPUTS, "mono", 0.50); channelf_cart(config); -MACHINE_CONFIG_END +} ROM_START( channelf ) ROM_REGION(0x10000,"maincpu",0) diff --git a/src/mame/drivers/chaos.cpp b/src/mame/drivers/chaos.cpp index 91be9688c35..b21f9ec811b 100644 --- a/src/mame/drivers/chaos.cpp +++ b/src/mame/drivers/chaos.cpp @@ -148,17 +148,18 @@ void chaos_state::machine_reset() memcpy(m_p_ram+0x7000, ROM+0x3000, 0x1000); } -MACHINE_CONFIG_START(chaos_state::chaos) +void chaos_state::chaos(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", S2650, XTAL(1'000'000)) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_DATA_MAP(data_map) + S2650(config, m_maincpu, XTAL(1'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &chaos_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &chaos_state::io_map); + m_maincpu->set_addrmap(AS_DATA, &chaos_state::data_map); /* video hardware */ GENERIC_TERMINAL(config, m_terminal, 0); m_terminal->set_keyboard_callback(FUNC(chaos_state::kbd_put)); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( chaos ) diff --git a/src/mame/drivers/cheekyms.cpp b/src/mame/drivers/cheekyms.cpp index a13c1bc7f9f..e1d29578682 100644 --- a/src/mame/drivers/cheekyms.cpp +++ b/src/mame/drivers/cheekyms.cpp @@ -121,30 +121,30 @@ INTERRUPT_GEN_MEMBER(cheekyms_state::vblank_irq) } -MACHINE_CONFIG_START(cheekyms_state::cheekyms) - +void cheekyms_state::cheekyms(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,5000000/2) /* 2.5 MHz */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cheekyms_state, vblank_irq) + Z80(config, m_maincpu, 5000000/2); /* 2.5 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &cheekyms_state::main_map); + m_maincpu->set_addrmap(AS_IO, &cheekyms_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(cheekyms_state::vblank_irq)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cheekyms_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 4*8, 28*8-1); + m_screen->set_screen_update(FUNC(cheekyms_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cheekyms); PALETTE(config, m_palette, FUNC(cheekyms_state::cheekyms_palette), 0xc0); /* audio hardware */ CHEEKY_MOUSE_AUDIO(config, m_sound_board, 0); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/chicago.cpp b/src/mame/drivers/chicago.cpp index e58d99d8501..aa26674789a 100644 --- a/src/mame/drivers/chicago.cpp +++ b/src/mame/drivers/chicago.cpp @@ -94,11 +94,11 @@ void chicago_state::video_start() { } -MACHINE_CONFIG_START(chicago_state::chicago) - +void chicago_state::chicago(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(chicago) + NETLIST_CPU(config, m_maincpu, NETLIST_CLOCK); + m_maincpu->set_constructor(netlist_chicago); /* video hardware */ SCREEN(config, "screen", SCREEN_TYPE_RASTER); @@ -108,7 +108,7 @@ MACHINE_CONFIG_START(chicago_state::chicago) m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL); m_video->set_fieldcount(1); m_video->set_threshold(0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp index fc1ea2d0e52..751dd6d191d 100644 --- a/src/mame/drivers/chihiro.cpp +++ b/src/mame/drivers/chihiro.cpp @@ -1862,24 +1862,20 @@ void chihiro_state::an2131sc_configuration(device_t *device) MCFG_OHCI_HLEAN2131SC_REGION(":others", 0x2080) } -MACHINE_CONFIG_START(chihiro_state::chihiro_base) +void chihiro_state::chihiro_base(machine_config &config) +{ xbox_base(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(chihiro_map) - MCFG_DEVICE_IO_MAP(chihiro_map_io) + m_maincpu->set_addrmap(AS_PROGRAM, &chihiro_state::chihiro_map); + m_maincpu->set_addrmap(AS_IO, &chihiro_state::chihiro_map_io); - //BUS_MASTER_IDE_CONTROLLER(config, "ide").options(ide_baseboard, nullptr, "bb", true); - MCFG_DEVICE_MODIFY(":pci:09.0:ide:0") - MCFG_DEVICE_SLOT_INTERFACE(ide_baseboard, nullptr, true) - MCFG_DEVICE_MODIFY(":pci:09.0:ide:1") - MCFG_DEVICE_SLOT_INTERFACE(ide_baseboard, "bb", true) + subdevice<ide_controller_32_device>(":pci:09.0:ide")->options(ide_baseboard, nullptr, "bb", true); OHCI_USB_CONNECTOR(config, ":pci:02.0:port1", usb_baseboard, "an2131qc", true).set_option_machine_config("an2131qc", an2131qc_configuration); OHCI_USB_CONNECTOR(config, ":pci:02.0:port2", usb_baseboard, "an2131sc", true).set_option_machine_config("an2131sc", an2131sc_configuration); OHCI_USB_CONNECTOR(config, ":pci:02.0:port3", usb_baseboard, nullptr, false); OHCI_USB_CONNECTOR(config, ":pci:02.0:port4", usb_baseboard, nullptr, false); - MCFG_DEVICE_ADD("jvs_master", JVS_MASTER, 0) + JVS_MASTER(config, "jvs_master", 0); sega_837_13551_device &sega837(SEGA_837_13551(config, "837_13551", 0, "jvs_master")); sega837.set_port_tag<0>("TILT"); sega837.set_port_tag<1>("P1"); @@ -1893,7 +1889,7 @@ MACHINE_CONFIG_START(chihiro_state::chihiro_base) sega837.set_port_tag<9>("A6"); sega837.set_port_tag<10>("A7"); sega837.set_port_tag<11>("OUTPUT"); -MACHINE_CONFIG_END +} void chihiro_state::chihirogd(machine_config &config) { diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp index a01a688822c..38d578349f8 100644 --- a/src/mame/drivers/chinagat.cpp +++ b/src/mame/drivers/chinagat.cpp @@ -186,7 +186,7 @@ WRITE8_MEMBER(chinagat_state::interrupt_w) switch (offset) { case 0: /* 3e00 - SND irq */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); break; case 1: /* 3e01 - NMI ack */ diff --git a/src/mame/drivers/chsuper.cpp b/src/mame/drivers/chsuper.cpp index d4db4037f48..e8e4407e7c1 100644 --- a/src/mame/drivers/chsuper.cpp +++ b/src/mame/drivers/chsuper.cpp @@ -364,27 +364,27 @@ void chsuper_state::ramdac_map(address_map &map) * Machine Drivers * ***************************/ -MACHINE_CONFIG_START(chsuper_state::chsuper) - +void chsuper_state::chsuper(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z180, XTAL(12'000'000) / 4) /* HD64180RP8, 8 MHz? */ - MCFG_DEVICE_PROGRAM_MAP(chsuper_prg_map) - MCFG_DEVICE_IO_MAP(chsuper_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", chsuper_state, irq0_line_hold) + Z180(config, m_maincpu, XTAL(12'000'000) / 4); /* HD64180RP8, 8 MHz? */ + m_maincpu->set_addrmap(AS_PROGRAM, &chsuper_state::chsuper_prg_map); + m_maincpu->set_addrmap(AS_IO, &chsuper_state::chsuper_portmap); + m_maincpu->set_vblank_int("screen", FUNC(chsuper_state::irq0_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_UPDATE_DRIVER(chsuper_state, screen_update) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0, 30*8-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_screen_update(FUNC(chsuper_state::screen_update)); + screen.set_size(64*8, 64*8); + screen.set_visarea(0*8, 48*8-1, 0, 30*8-1); + screen.set_palette(m_palette); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); GFXDECODE(config, m_gfxdecode, m_palette, gfx_chsuper); - MCFG_PALETTE_ADD("palette", 0x100) + PALETTE(config, m_palette).set_entries(0x100); ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); ramdac.set_addrmap(0, &chsuper_state::ramdac_map); @@ -396,7 +396,7 @@ MACHINE_CONFIG_START(chsuper_state::chsuper) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} /*************************** diff --git a/src/mame/drivers/circusc.cpp b/src/mame/drivers/circusc.cpp index a5a75eb1491..111971420a4 100644 --- a/src/mame/drivers/circusc.cpp +++ b/src/mame/drivers/circusc.cpp @@ -344,11 +344,11 @@ WRITE_LINE_MEMBER(circusc_state::vblank_irq) m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); } -MACHINE_CONFIG_START(circusc_state::circusc) - +void circusc_state::circusc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", KONAMI1, 2048000) /* 2 MHz? */ - MCFG_DEVICE_PROGRAM_MAP(circusc_map) + KONAMI1(config, m_maincpu, 2048000); /* 2 MHz? */ + m_maincpu->set_addrmap(AS_PROGRAM, &circusc_state::circusc_map); ls259_device &mainlatch(LS259(config, "mainlatch")); // 2C mainlatch.q_out_cb<0>().set(FUNC(circusc_state::flipscreen_w)); // FLIP @@ -360,18 +360,18 @@ MACHINE_CONFIG_START(circusc_state::circusc) WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(14'318'181)/4) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, XTAL(14'318'181)/4); + m_audiocpu->set_addrmap(AS_PROGRAM, &circusc_state::sound_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(circusc_state, screen_update_circusc) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, circusc_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(circusc_state::screen_update_circusc)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(circusc_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_circusc); PALETTE(config, m_palette, FUNC(circusc_state::circusc_palette), 16*16 + 16*16, 32); @@ -381,19 +381,16 @@ MACHINE_CONFIG_START(circusc_state::circusc) GENERIC_LATCH_8(config, "soundlatch"); - MCFG_DEVICE_ADD("sn1", SN76496, XTAL(14'318'181)/8) - MCFG_SOUND_ROUTE(0, "fltdisc", 1.0, 0) + SN76496(config, m_sn_1, XTAL(14'318'181)/8).add_route(0, "fltdisc", 1.0, 0); - MCFG_DEVICE_ADD("sn2", SN76496, XTAL(14'318'181)/8) - MCFG_SOUND_ROUTE(0, "fltdisc", 1.0, 1) + SN76496(config, m_sn_2, XTAL(14'318'181)/8).add_route(0, "fltdisc", 1.0, 1); DAC_8BIT_R2R(config, "dac", 0).add_route(0, "fltdisc", 1.0, 2); // ls374.7g + r44+r45+r47+r48+r50+r56+r57+r58+r59 (20k) + r46+r49+r51+r52+r53+r54+r55 (10k) + upc324.3h voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); - MCFG_DEVICE_ADD("fltdisc", DISCRETE, circusc_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + DISCRETE(config, m_discrete, circusc_discrete).add_route(ALL_OUTPUTS, "mono", 1.0); +} diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp index d4392aaf2b9..f3917a6c2a9 100644 --- a/src/mame/drivers/cischeat.cpp +++ b/src/mame/drivers/cischeat.cpp @@ -1949,37 +1949,37 @@ WRITE_LINE_MEMBER(cischeat_state::sound_irq) -MACHINE_CONFIG_START(cischeat_state::bigrun) - +void cischeat_state::bigrun(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("cpu1", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(bigrun_map) + M68000(config, m_cpu1, 10000000); + m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_map); TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::bigrun_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("cpu2", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(bigrun_map2) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cischeat_state, irq4_line_hold) + M68000(config, m_cpu2, 10000000); + m_cpu2->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_map2); + m_cpu2->set_vblank_int("screen", FUNC(cischeat_state::irq4_line_hold)); - MCFG_DEVICE_ADD("cpu3", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(bigrun_map3) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cischeat_state, irq4_line_hold) + M68000(config, m_cpu3, 10000000); + m_cpu3->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_map3); + m_cpu3->set_vblank_int("screen", FUNC(cischeat_state::irq4_line_hold)); - MCFG_DEVICE_ADD("soundcpu", M68000, 6000000) - MCFG_DEVICE_PROGRAM_MAP(bigrun_sound_map) + M68000(config, m_soundcpu, 6000000); + m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::bigrun_sound_map); // timing set by the YM irqhandler -// MCFG_DEVICE_PERIODIC_INT_DRIVER(cischeat_state, irq4_line_hold, 16*30) +// m_soundcpu->set_periodic_int(FUNC(cischeat_state::irq4_line_hold), attotime::from_hz(16*30)); config.m_minimum_quantum = attotime::from_hz(1200); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_bigrun) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0+16, 256-16-1); + m_screen->set_screen_update(FUNC(cischeat_state::screen_update_bigrun)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bigrun); PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x4000/2); @@ -2002,36 +2002,32 @@ MACHINE_CONFIG_START(cischeat_state::bigrun) ymsnd.add_route(0, "lspeaker", 0.50); ymsnd.add_route(1, "rspeaker", 0.50); - MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) + OKIM6295(config, m_oki1, 4000000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified + m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 0.25); + m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 0.25); - MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) -MACHINE_CONFIG_END + OKIM6295(config, m_oki2, 4000000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.25); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.25); +} -MACHINE_CONFIG_START(cischeat_state::cischeat) +void cischeat_state::cischeat(machine_config &config) +{ bigrun(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("cpu1") - MCFG_DEVICE_PROGRAM_MAP(cischeat_map) + m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_map); - MCFG_DEVICE_MODIFY("cpu2") - MCFG_DEVICE_PROGRAM_MAP(cischeat_map2) + m_cpu2->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_map2); - MCFG_DEVICE_MODIFY("cpu3") - MCFG_DEVICE_PROGRAM_MAP(cischeat_map3) + m_cpu3->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_map3); - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_PROGRAM_MAP(cischeat_sound_map) + m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::cischeat_sound_map); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-8-1) - MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_cischeat) + m_screen->set_visarea(0, 256-1, 0+16, 256-16-8-1); + m_screen->set_screen_update(FUNC(cischeat_state::screen_update_cischeat)); m_gfxdecode->set_info(gfx_cischeat); m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 0x8000/2); @@ -2044,27 +2040,24 @@ MACHINE_CONFIG_START(cischeat_state::cischeat) m_tmap[2]->set_colorbase(0x6c00/2); m_tmap[2]->set_bits_per_color_code(5); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(cischeat_state::f1gpstar) +void cischeat_state::f1gpstar(machine_config &config) +{ bigrun(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("cpu1") - MCFG_DEVICE_CLOCK(12000000) - MCFG_DEVICE_PROGRAM_MAP(f1gpstar_map) + m_cpu1->set_clock(12000000); + m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_map); - MCFG_DEVICE_MODIFY("cpu2") - MCFG_DEVICE_CLOCK(12000000) - MCFG_DEVICE_PROGRAM_MAP(f1gpstar_map2) + m_cpu2->set_clock(12000000); + m_cpu2->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_map2); - MCFG_DEVICE_MODIFY("cpu3") - MCFG_DEVICE_CLOCK(12000000) - MCFG_DEVICE_PROGRAM_MAP(f1gpstar_map3) + m_cpu3->set_clock(12000000); + m_cpu3->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_map3); - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_PROGRAM_MAP(f1gpstar_sound_map) + m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstar_sound_map); /* video hardware */ m_gfxdecode->set_info(gfx_f1gpstar); @@ -2076,34 +2069,32 @@ MACHINE_CONFIG_START(cischeat_state::f1gpstar) m_tmap[2]->set_colorbase(0x6e00/2); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_f1gpstar) -MACHINE_CONFIG_END + m_screen->set_screen_update(FUNC(cischeat_state::screen_update_f1gpstar)); +} -MACHINE_CONFIG_START(cischeat_state::f1gpstr2) +void cischeat_state::f1gpstr2(machine_config &config) +{ f1gpstar(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("cpu1") - MCFG_DEVICE_PROGRAM_MAP(f1gpstr2_map) + m_cpu1->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstr2_map); - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_PROGRAM_MAP(f1gpstr2_sound_map) + m_soundcpu->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstr2_sound_map); - MCFG_DEVICE_ADD("cpu5", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(f1gpstr2_io_map) + M68000(config, m_cpu5, 10000000); + m_cpu5->set_addrmap(AS_PROGRAM, &cischeat_state::f1gpstr2_io_map); config.m_minimum_quantum = attotime::from_hz(12000); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(wildplt_state::wildplt) +void wildplt_state::wildplt(machine_config &config) +{ f1gpstr2(config); - MCFG_DEVICE_MODIFY("cpu1") - MCFG_DEVICE_PROGRAM_MAP(wildplt_map) -MACHINE_CONFIG_END + m_cpu1->set_addrmap(AS_PROGRAM, &wildplt_state::wildplt_map); +} /************************************************************************** @@ -2128,24 +2119,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::scudhamm_scanline) m_maincpu->set_input_line(2, HOLD_LINE); } -MACHINE_CONFIG_START(cischeat_state::scudhamm) - +void cischeat_state::scudhamm(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(scudhamm_map) + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::scudhamm_map); TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::scudhamm_scanline), "screen", 0, 1); WATCHDOG_TIMER(config, m_watchdog); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) - MCFG_SCREEN_REFRESH_RATE(30) //TODO: wrong! - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0 +16, 256-1 -16) - MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_scudhamm) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); + m_screen->set_refresh_hz(30); //TODO: wrong! + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0 +16, 256-1 -16); + m_screen->set_screen_update(FUNC(cischeat_state::screen_update_scudhamm)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_scudhamm); PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x8000/2); @@ -2158,14 +2149,14 @@ MACHINE_CONFIG_START(cischeat_state::scudhamm) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) + OKIM6295(config, m_oki1, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified + m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 0.5); + m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 0.5); - MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) -MACHINE_CONFIG_END + OKIM6295(config, m_oki2, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.5); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.5); +} /************************************************************************** @@ -2183,14 +2174,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::armchamp2_scanline) m_maincpu->set_input_line(4, HOLD_LINE); } -MACHINE_CONFIG_START(cischeat_state::armchmp2) +void cischeat_state::armchmp2(machine_config &config) +{ scudhamm(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(armchmp2_map) + m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::armchmp2_map); subdevice<timer_device>("scantimer")->set_callback(FUNC(cischeat_state::armchamp2_scanline)); -MACHINE_CONFIG_END +} /************************************************************************** @@ -2215,11 +2206,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::captflag_scanline) m_maincpu->set_input_line(3, HOLD_LINE); } -MACHINE_CONFIG_START(cischeat_state::captflag) - +void cischeat_state::captflag(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M68000, XTAL(24'000'000) / 2) // TMP68000P-12 - MCFG_DEVICE_PROGRAM_MAP(captflag_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); // TMP68000P-12 + m_maincpu->set_addrmap(AS_PROGRAM, &cischeat_state::captflag_map); TIMER(config, "scantimer").configure_scanline(FUNC(cischeat_state::captflag_scanline), "screen", 0, 1); TICKET_DISPENSER(config, m_captflag_hopper, attotime::from_msec(2000), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH ); @@ -2228,14 +2219,14 @@ MACHINE_CONFIG_START(cischeat_state::captflag) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) - MCFG_SCREEN_REFRESH_RATE(30) //TODO: wrong! -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0 +16, 256-1 -16) - MCFG_SCREEN_UPDATE_DRIVER(cischeat_state, screen_update_scudhamm) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); +// m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); + m_screen->set_refresh_hz(30); //TODO: wrong! +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500 * 3) /* not accurate */); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0 +16, 256-1 -16); + m_screen->set_screen_update(FUNC(cischeat_state::screen_update_scudhamm)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_scudhamm); PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x8000/2); @@ -2255,16 +2246,16 @@ MACHINE_CONFIG_START(cischeat_state::captflag) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki1", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified - MCFG_DEVICE_ADDRESS_MAP(0, captflag_oki1_map) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) + OKIM6295(config, m_oki1, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified + m_oki1->set_addrmap(0, &cischeat_state::captflag_oki1_map); + m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 0.5); + m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 0.5); - MCFG_DEVICE_ADD("oki2", OKIM6295, 4000000/2, okim6295_device::PIN7_HIGH) // pin 7 not verified - MCFG_DEVICE_ADDRESS_MAP(0, captflag_oki2_map) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) -MACHINE_CONFIG_END + OKIM6295(config, m_oki2, 4000000/2, okim6295_device::PIN7_HIGH); // pin 7 not verified + m_oki2->set_addrmap(0, &cischeat_state::captflag_oki2_map); + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.5); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.5); +} /*************************************************************************** diff --git a/src/mame/drivers/citycon.cpp b/src/mame/drivers/citycon.cpp index 5f440903871..47ea952a56e 100644 --- a/src/mame/drivers/citycon.cpp +++ b/src/mame/drivers/citycon.cpp @@ -198,22 +198,22 @@ void citycon_state::machine_reset() } -MACHINE_CONFIG_START(citycon_state::citycon) - +void citycon_state::citycon(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809, CPU_CLOCK) // HD68B09P - MCFG_DEVICE_PROGRAM_MAP(citycon_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_assert) + MC6809(config, m_maincpu, CPU_CLOCK); // HD68B09P + m_maincpu->set_addrmap(AS_PROGRAM, &citycon_state::citycon_map); + m_maincpu->set_vblank_int("screen", FUNC(citycon_state::irq0_line_assert)); - MCFG_DEVICE_ADD("audiocpu", MC6809E, MASTER_CLOCK / 32) // schematics allow for either a 6809 or 6809E; HD68A09EP found on one actual PCB - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", citycon_state, irq0_line_hold) // actually unused, probably it was during development + mc6809e_device &audiocpu(MC6809E(config, "audiocpu", MASTER_CLOCK / 32)); // schematics allow for either a 6809 or 6809E; HD68A09EP found on one actual PCB + audiocpu.set_addrmap(AS_PROGRAM, &citycon_state::sound_map); + audiocpu.set_vblank_int("screen", FUNC(citycon_state::irq0_line_hold)); // actually unused, probably it was during development /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(citycon_state, screen_update_citycon) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + screen.set_screen_update(FUNC(citycon_state::screen_update_citycon)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_citycon); PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::RGBx_444, 640+1024); // 640 real palette + 1024 virtual palette @@ -233,7 +233,7 @@ MACHINE_CONFIG_START(citycon_state::citycon) ymsnd.add_route(1, "mono", 0.40); ymsnd.add_route(2, "mono", 0.40); ymsnd.add_route(3, "mono", 0.20); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/clayshoo.cpp b/src/mame/drivers/clayshoo.cpp index bddff8b1082..3c571d811a0 100644 --- a/src/mame/drivers/clayshoo.cpp +++ b/src/mame/drivers/clayshoo.cpp @@ -322,30 +322,30 @@ void clayshoo_state::machine_reset() m_analog_port_val = 0; } -MACHINE_CONFIG_START(clayshoo_state::clayshoo) - +void clayshoo_state::clayshoo(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,5068000/4) /* 5.068/4 Mhz (divider is a guess) */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(main_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clayshoo_state, irq0_line_hold) + Z80(config, m_maincpu, 5068000/4); /* 5.068/4 Mhz (divider is a guess) */ + m_maincpu->set_addrmap(AS_PROGRAM, &clayshoo_state::main_map); + m_maincpu->set_addrmap(AS_IO, &clayshoo_state::main_io_map); + m_maincpu->set_vblank_int("screen", FUNC(clayshoo_state::irq0_line_hold)); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 255, 64, 255) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_UPDATE_DRIVER(clayshoo_state, screen_update_clayshoo) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_size(256, 256); + screen.set_visarea(0, 255, 64, 255); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_screen_update(FUNC(clayshoo_state::screen_update_clayshoo)); I8255A(config, "ppi8255_0"); i8255_device &ppi1(I8255A(config, "ppi8255_1")); ppi1.out_pa_callback().set(FUNC(clayshoo_state::input_port_select_w)); ppi1.in_pb_callback().set(FUNC(clayshoo_state::input_port_r)); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/clcd.cpp b/src/mame/drivers/clcd.cpp index 136ccc419de..4e2f60a1795 100644 --- a/src/mame/drivers/clcd.cpp +++ b/src/mame/drivers/clcd.cpp @@ -657,10 +657,11 @@ static INPUT_PORTS_START( clcd ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // clears screen and goes into infinite loop INPUT_PORTS_END -MACHINE_CONFIG_START(clcd_state::clcd) +void clcd_state::clcd(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M65C02, 2000000) - MCFG_DEVICE_PROGRAM_MAP(clcd_mem) + M65C02(config, m_maincpu, 2000000); + m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); @@ -712,24 +713,23 @@ MACHINE_CONFIG_START(clcd_state::clcd) m_rtc->set_default_24h(true); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(80) - MCFG_SCREEN_UPDATE_DRIVER(clcd_state, screen_update) - MCFG_SCREEN_SIZE(480, 128) - MCFG_SCREEN_VISIBLE_AREA(0, 480-1, 0, 128-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(80); + screen.set_screen_update(FUNC(clcd_state::screen_update)); + screen.set_size(480, 128); + screen.set_visarea_full(); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(clcd_state::clcd_palette), 2); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.25); RAM(config, "ram").set_default_size("128K").set_extra_options("32K,64K").set_default_value(0); NVRAM(config, "nvram").set_custom_handler(FUNC(clcd_state::nvram_init)); -MACHINE_CONFIG_END +} ROM_START( clcd ) diff --git a/src/mame/drivers/clowndwn.cpp b/src/mame/drivers/clowndwn.cpp index 2fe069950f8..e31862cef12 100644 --- a/src/mame/drivers/clowndwn.cpp +++ b/src/mame/drivers/clowndwn.cpp @@ -56,21 +56,21 @@ void clowndwn_state::machine_reset() } -MACHINE_CONFIG_START(clowndwn_state::clowndwn) - +void clowndwn_state::clowndwn(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6802, 8000000) // unknown type and clock - MCFG_DEVICE_PROGRAM_MAP(clowndwn_map) + M6802(config, m_maincpu, 8000000); // unknown type and clock + m_maincpu->set_addrmap(AS_PROGRAM, &clowndwn_state::clowndwn_map); - MCFG_DEVICE_ADD("pia0", PIA6821, 0) - MCFG_DEVICE_ADD("pia1", PIA6821, 0) - MCFG_DEVICE_ADD("pia2", PIA6821, 0) - MCFG_DEVICE_ADD("pia3", PIA6821, 0) - MCFG_DEVICE_ADD("pia4", PIA6821, 0) + PIA6821(config, "pia0", 0); + PIA6821(config, "pia1", 0); + PIA6821(config, "pia2", 0); + PIA6821(config, "pia3", 0); + PIA6821(config, "pia4", 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); -MACHINE_CONFIG_END +} // has diff --git a/src/mame/drivers/clpoker.cpp b/src/mame/drivers/clpoker.cpp index d80eb9e38eb..71f1c76c27a 100644 --- a/src/mame/drivers/clpoker.cpp +++ b/src/mame/drivers/clpoker.cpp @@ -253,11 +253,12 @@ static GFXDECODE_START( gfx_clpoker ) GFXDECODE_END -MACHINE_CONFIG_START(clpoker_state::clpoker) +void clpoker_state::clpoker(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000) / 3) // Z0840004PSC, divider not verified - MCFG_DEVICE_PROGRAM_MAP(prg_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, XTAL(12'000'000) / 3); // Z0840004PSC, divider not verified + m_maincpu->set_addrmap(AS_PROGRAM, &clpoker_state::prg_map); + m_maincpu->set_addrmap(AS_IO, &clpoker_state::io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // HY6116ALP-12 @@ -273,16 +274,16 @@ MACHINE_CONFIG_START(clpoker_state::clpoker) TICKET_DISPENSER(config, m_hopper, attotime::from_msec(60), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) // wrong - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) // wrong - MCFG_SCREEN_SIZE(64*8, 32*8) // wrong - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) // probably right - MCFG_SCREEN_UPDATE_DRIVER(clpoker_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, clpoker_state, vblank_w)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); // wrong + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); // wrong + screen.set_size(64*8, 32*8); // wrong + screen.set_visarea_full(); // probably right + screen.set_screen_update(FUNC(clpoker_state::screen_update)); + screen.set_palette("palette"); + screen.screen_vblank().set(FUNC(clpoker_state::vblank_w)); - MCFG_PALETTE_ADD("palette", 0x100) + PALETTE(config, "palette").set_entries(0x100); ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, "palette")); // HM86171 ramdac.set_addrmap(0, &clpoker_state::ramdac_map); @@ -294,7 +295,7 @@ MACHINE_CONFIG_START(clpoker_state::clpoker) aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.port_b_read_callback().set_ioport("DSW2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.30); -MACHINE_CONFIG_END +} ROM_START( clpoker ) diff --git a/src/mame/drivers/clshroad.cpp b/src/mame/drivers/clshroad.cpp index 4c443919ac8..f908f05a46b 100644 --- a/src/mame/drivers/clshroad.cpp +++ b/src/mame/drivers/clshroad.cpp @@ -272,16 +272,16 @@ INTERRUPT_GEN_MEMBER(clshroad_state::sound_timer_irq) device.execute().set_input_line(0, HOLD_LINE); } -MACHINE_CONFIG_START(clshroad_state::firebatl) - +void clshroad_state::firebatl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CLOCK) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(clshroad_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq) + Z80(config, m_maincpu, MAIN_CLOCK); /* ? */ + m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_map); + m_maincpu->set_vblank_int("screen", FUNC(clshroad_state::vblank_irq)); - MCFG_DEVICE_ADD("audiocpu", Z80, MAIN_CLOCK) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */ + Z80(config, m_audiocpu, MAIN_CLOCK); /* ? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_sound_map); + m_audiocpu->set_periodic_int(FUNC(clshroad_state::sound_timer_irq), attotime::from_hz(120)); /* periodic interrupt, don't know about the frequency */ ls259_device &mainlatch(LS259(config, "mainlatch")); mainlatch.q_out_cb<0>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); @@ -290,13 +290,13 @@ MACHINE_CONFIG_START(clshroad_state::firebatl) mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(0x120, 0x100) - MCFG_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1) - MCFG_SCREEN_UPDATE_DRIVER(clshroad_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(0x120, 0x100); + screen.set_visarea(0, 0x120-1, 0x0+16, 0x100-16-1); + screen.set_screen_update(FUNC(clshroad_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_firebatl); PALETTE(config, m_palette, FUNC(clshroad_state::firebatl_palette), 512+64*4, 256); @@ -306,21 +306,20 @@ MACHINE_CONFIG_START(clshroad_state::firebatl) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("custom", WIPING_CUSTOM, 96000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(clshroad_state::clshroad) + WIPING_CUSTOM(config, "custom", 96000).add_route(ALL_OUTPUTS, "mono", 1.0); +} +void clshroad_state::clshroad(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CLOCK) /* ? real speed unknown. 3MHz is too low and causes problems */ - MCFG_DEVICE_PROGRAM_MAP(clshroad_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq) + Z80(config, m_maincpu, MAIN_CLOCK); /* ? real speed unknown. 3MHz is too low and causes problems */ + m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_map); + m_maincpu->set_vblank_int("screen", FUNC(clshroad_state::vblank_irq)); - MCFG_DEVICE_ADD("audiocpu", Z80, MAIN_CLOCK) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map) - //MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */ - MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */ + Z80(config, m_audiocpu, MAIN_CLOCK); /* ? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_sound_map); + //m_audiocpu->set_vblank_int("screen", FUNC(clshroad_state::irq0_line_hold)); /* IRQ, no NMI */ + m_audiocpu->set_periodic_int(FUNC(clshroad_state::sound_timer_irq), attotime::from_hz(60)); /* periodic interrupt, don't know about the frequency */ ls259_device &mainlatch(LS259(config, "mainlatch")); mainlatch.q_out_cb<0>().set_nop(); // never writes here? @@ -329,13 +328,13 @@ MACHINE_CONFIG_START(clshroad_state::clshroad) mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(0x120, 0x100) - MCFG_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1) - MCFG_SCREEN_UPDATE_DRIVER(clshroad_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(0x120, 0x100); + screen.set_visarea(0, 0x120-1, 0x0+16, 0x100-16-1); + screen.set_screen_update(FUNC(clshroad_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_clshroad); PALETTE(config, m_palette, FUNC(clshroad_state::clshroad_palette), 256); @@ -345,9 +344,8 @@ MACHINE_CONFIG_START(clshroad_state::clshroad) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("custom", WIPING_CUSTOM, 96000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + WIPING_CUSTOM(config, "custom", 96000).add_route(ALL_OUTPUTS, "mono", 1.0); +} /*************************************************************************** diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp index 742537c6b29..148e0386fd8 100644 --- a/src/mame/drivers/cmi.cpp +++ b/src/mame/drivers/cmi.cpp @@ -2158,29 +2158,30 @@ static void cmi2x_floppies(device_slot_interface &device) device.option_add("8dssd", FLOPPY_8_DSSD); } -MACHINE_CONFIG_START(cmi_state::cmi2x) - MCFG_DEVICE_ADD("maincpu1", MC6809E, Q209_CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(maincpu1_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu1_interrupt_callback) +void cmi_state::cmi2x(machine_config &config) +{ + MC6809E(config, m_maincpu1, Q209_CPU_CLOCK); + m_maincpu1->set_addrmap(AS_PROGRAM, &cmi_state::maincpu1_map); + m_maincpu1->set_irq_acknowledge_callback(FUNC(cmi_state::cpu1_interrupt_callback)); config.m_perfect_cpu_quantum = subtag("maincpu1"); - MCFG_DEVICE_ADD("maincpu2", MC6809E, Q209_CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(maincpu2_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu2_interrupt_callback) + MC6809E(config, m_maincpu2, Q209_CPU_CLOCK); + m_maincpu2->set_addrmap(AS_PROGRAM, &cmi_state::maincpu2_map); + m_maincpu2->set_irq_acknowledge_callback(FUNC(cmi_state::cpu2_interrupt_callback)); config.m_perfect_cpu_quantum = subtag("maincpu2"); - MCFG_DEVICE_ADD("muskeys", M6802, 4_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(muskeys_map) + M6802(config, m_muskeyscpu, 4_MHz_XTAL); + m_muskeyscpu->set_addrmap(AS_PROGRAM, &cmi_state::muskeys_map); - MCFG_DEVICE_ADD("alphakeys", M6802, 3.84_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(alphakeys_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cmi_state, irq0_line_hold, 3.84_MHz_XTAL / 400) // TODO: PIA controls this + M6802(config, m_alphakeyscpu, 3.84_MHz_XTAL); + m_alphakeyscpu->set_addrmap(AS_PROGRAM, &cmi_state::alphakeys_map); + m_alphakeyscpu->set_periodic_int(FUNC(cmi_state::irq0_line_hold), attotime::from_hz(3.84_MHz_XTAL / 400)); // TODO: PIA controls this - MCFG_DEVICE_ADD("smptemidi", M68000, 20_MHz_XTAL / 2) - MCFG_DEVICE_PROGRAM_MAP(midicpu_map) + M68000(config, m_midicpu, 20_MHz_XTAL / 2); + m_midicpu->set_addrmap(AS_PROGRAM, &cmi_state::midicpu_map); - MCFG_DEVICE_ADD("cmi07cpu", MC6809E, Q209_CPU_CLOCK) // ? - MCFG_DEVICE_PROGRAM_MAP(cmi07cpu_map) + MC6809E(config, m_cmi07cpu, Q209_CPU_CLOCK); // ? + m_cmi07cpu->set_addrmap(AS_PROGRAM, &cmi_state::cmi07cpu_map); /* alpha-numeric display */ DL1416T(config, m_dp1, u32(0)); @@ -2324,7 +2325,7 @@ MACHINE_CONFIG_START(cmi_state::cmi2x) cmi01a_device &cmi01a_7(CMI01A_CHANNEL_CARD(config, "cmi01a_7", 0)); cmi01a_7.add_route(ALL_OUTPUTS, "mono", 0.25); cmi01a_7.irq_callback().set(FUNC(cmi_state::channel_irq<0>)); -MACHINE_CONFIG_END +} ROM_START( cmi2x ) /* Q133 Processor control card */ diff --git a/src/mame/drivers/cmmb.cpp b/src/mame/drivers/cmmb.cpp index 6dab344cdc1..8b8a811fe07 100644 --- a/src/mame/drivers/cmmb.cpp +++ b/src/mame/drivers/cmmb.cpp @@ -416,22 +416,22 @@ void cmmb_state::machine_reset() } -MACHINE_CONFIG_START(cmmb_state::cmmb) - +void cmmb_state::cmmb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M65SC02, MAIN_CLOCK/5) // Unknown clock, but chip rated for 14MHz - MCFG_DEVICE_PROGRAM_MAP(cmmb_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cmmb_state, vblank_irq) + M65SC02(config, m_maincpu, MAIN_CLOCK/5); // Unknown clock, but chip rated for 14MHz + m_maincpu->set_addrmap(AS_PROGRAM, &cmmb_state::cmmb_map); + m_maincpu->set_vblank_int("screen", FUNC(cmmb_state::vblank_irq)); AT29C020(config, "at29c020"); ADDRESS_MAP_BANK(config, "bnk2000").set_map(&cmmb_state::bnk2000_map).set_options(ENDIANNESS_LITTLE, 8, 32, 0x8000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/12, 384, 0, 256, 264, 0, 240) // TBD, not real measurements - MCFG_SCREEN_UPDATE_DRIVER(cmmb_state, screen_update_cmmb) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(MAIN_CLOCK/12, 384, 0, 256, 264, 0, 240); // TBD, not real measurements + screen.set_screen_update(FUNC(cmmb_state::screen_update_cmmb)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cmmb); @@ -440,7 +440,7 @@ MACHINE_CONFIG_START(cmmb_state::cmmb) /* sound hardware */ // SPEAKER(config, "mono").front_center(); // AY8910(config, "aysnd", 8000000/4).add_route(ALL_OUTPUTS, "mono", 0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp index 754914d6e9f..a2b6418ac47 100644 --- a/src/mame/drivers/cninja.cpp +++ b/src/mame/drivers/cninja.cpp @@ -791,11 +791,11 @@ MACHINE_RESET_MEMBER(cninja_state,robocop2) m_priority = 0; } -MACHINE_CONFIG_START(cninja_state::cninja) - +void cninja_state::cninja(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(cninja_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninja_map); h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8)); audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map); @@ -808,18 +808,17 @@ MACHINE_CONFIG_START(cninja_state::cninja) irq.vblank_irq_callback().set_inputline(m_maincpu, 5); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248) - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninja) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248); + m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninja)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(1); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -833,7 +832,6 @@ MACHINE_CONFIG_START(cninja_state::cninja) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -863,8 +861,7 @@ MACHINE_CONFIG_START(cninja_state::cninja) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000) / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) + YM2203(config, "ym1", XTAL(32'220'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.60); ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9)); ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */ @@ -872,22 +869,20 @@ MACHINE_CONFIG_START(cninja_state::cninja) ym2.add_route(0, "mono", 0.45); ym2.add_route(1, "mono", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); + OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); +} -MACHINE_CONFIG_START(cninja_state::stoneage) +void cninja_state::stoneage(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(cninja_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninja_map); - MCFG_DEVICE_ADD("audiocpu", Z80, 3579545) - MCFG_DEVICE_PROGRAM_MAP(stoneage_s_map) + Z80(config, m_audiocpu, 3579545); + m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::stoneage_s_map); deco_irq_device &irq(DECO_IRQ(config, "irq", 0)); irq.set_screen_tag(m_screen); @@ -895,21 +890,22 @@ MACHINE_CONFIG_START(cninja_state::stoneage) irq.raster2_irq_callback().set_inputline(m_maincpu, 4); irq.vblank_irq_callback().set_inputline(m_maincpu, 5); + MCFG_VIDEO_START_OVERRIDE(cninja_state,cninja) + /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248) - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninja) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248); + m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninja)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); MCFG_VIDEO_START_OVERRIDE(cninja_state,stoneage) - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(1); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -923,7 +919,6 @@ MACHINE_CONFIG_START(cninja_state::stoneage) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -958,35 +953,33 @@ MACHINE_CONFIG_START(cninja_state::stoneage) ymsnd.add_route(0, "mono", 0.45); ymsnd.add_route(1, "mono", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) -MACHINE_CONFIG_END + OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); +} -MACHINE_CONFIG_START(cninja_state::cninjabl2) +void cninja_state::cninjabl2(machine_config &config) +{ stoneage(config); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(cninjabl2_s_map) + m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl2_s_map); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl2) + m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninjabl2)); m_ioprot->soundlatch_irq_cb().set_inputline(m_audiocpu, INPUT_LINE_IRQ0); config.device_remove("ymsnd"); - MCFG_DEVICE_REPLACE("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADDRESS_MAP(0, cninjabl2_oki_map) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(cninja_state::cninjabl) + okim6295_device &oki1(OKIM6295(config.replace(), "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_LOW)); + oki1.add_route(ALL_OUTPUTS, "mono", 1.0); + oki1.set_addrmap(0, &cninja_state::cninjabl2_oki_map); +} +void cninja_state::cninjabl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(cninjabl_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl_map); - MCFG_DEVICE_ADD("audiocpu", Z80, 3579545) - MCFG_DEVICE_PROGRAM_MAP(cninjabl_sound_map) + Z80(config, m_audiocpu, 3579545); + m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl_sound_map); deco_irq_device &irq(DECO_IRQ(config, "irq", 0)); irq.set_screen_tag(m_screen); @@ -995,18 +988,17 @@ MACHINE_CONFIG_START(cninja_state::cninjabl) irq.vblank_irq_callback().set_inputline(m_maincpu, 5); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248) - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248); + m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninjabl)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninjabl); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(1); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1020,7 +1012,6 @@ MACHINE_CONFIG_START(cninja_state::cninjabl) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -1046,16 +1037,15 @@ MACHINE_CONFIG_START(cninja_state::cninjabl) ymsnd.add_route(0, "mono", 0.45); ymsnd.add_route(1, "mono", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) -MACHINE_CONFIG_END - + OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); +} -MACHINE_CONFIG_START(cninja_state::edrandy) +void cninja_state::edrandy(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(edrandy_map) + M68000(config, m_maincpu, XTAL(24'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::edrandy_map); h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8)); audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map); @@ -1068,18 +1058,17 @@ MACHINE_CONFIG_START(cninja_state::edrandy) irq.vblank_irq_callback().set_inputline(m_maincpu, 5); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248) - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_edrandy) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(24'000'000) / 4, 376, 0, 256, 274, 8, 248); + m_screen->set_screen_update(FUNC(cninja_state::screen_update_edrandy)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1093,7 +1082,6 @@ MACHINE_CONFIG_START(cninja_state::edrandy) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -1122,8 +1110,7 @@ MACHINE_CONFIG_START(cninja_state::edrandy) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000) / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) + YM2203(config, "ym1", XTAL(32'220'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.60); ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9)); ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */ @@ -1131,19 +1118,17 @@ MACHINE_CONFIG_START(cninja_state::edrandy) ym2.add_route(0, "mono", 0.45); ym2.add_route(1, "mono", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75); + OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); +} -MACHINE_CONFIG_START(cninja_state::robocop2) +void cninja_state::robocop2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(robocop2_map) + M68000(config, m_maincpu, XTAL(28'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::robocop2_map); h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8)); audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map); @@ -1157,10 +1142,10 @@ MACHINE_CONFIG_START(cninja_state::robocop2) irq.vblank_irq_callback().set_inputline(m_maincpu, 5); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248) - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_robocop2) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248); + m_screen->set_screen_update(FUNC(cninja_state::screen_update_robocop2)); + m_screen->set_palette(m_palette); MCFG_MACHINE_START_OVERRIDE(cninja_state,robocop2) MCFG_MACHINE_RESET_OVERRIDE(cninja_state,robocop2) @@ -1168,10 +1153,9 @@ MACHINE_CONFIG_START(cninja_state::robocop2) GFXDECODE(config, m_gfxdecode, m_palette, gfx_robocop2); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1186,7 +1170,6 @@ MACHINE_CONFIG_START(cninja_state::robocop2) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -1217,9 +1200,9 @@ MACHINE_CONFIG_START(cninja_state::robocop2) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000) / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60) + ym2203_device &ym1(YM2203(config, "ym1", XTAL(32'220'000) / 8)); + ym1.add_route(ALL_OUTPUTS, "lspeaker", 0.60); + ym1.add_route(ALL_OUTPUTS, "rspeaker", 0.60); ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9)); ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */ @@ -1227,22 +1210,22 @@ MACHINE_CONFIG_START(cninja_state::robocop2) ym2.add_route(0, "lspeaker", 0.45); ym2.add_route(1, "rspeaker", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.75) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.75) - - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60) -MACHINE_CONFIG_END + okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)); + oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75); + oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75); + OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH); + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60); +} -MACHINE_CONFIG_START(cninja_state::mutantf) +void cninja_state::mutantf(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(mutantf_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cninja_state, irq6_line_hold) + M68000(config, m_maincpu, XTAL(28'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::mutantf_map); + m_maincpu->set_vblank_int("screen", FUNC(cninja_state::irq6_line_hold)); h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8)); audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map_mutantf); @@ -1250,9 +1233,9 @@ MACHINE_CONFIG_START(cninja_state::mutantf) audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248) // same as robocop2? verify this from real pcb - MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_mutantf) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248); // same as robocop2? verify this from real pcb + m_screen->set_screen_update(FUNC(cninja_state::screen_update_mutantf)); MCFG_MACHINE_START_OVERRIDE(cninja_state,robocop2) MCFG_MACHINE_RESET_OVERRIDE(cninja_state,robocop2) @@ -1261,11 +1244,10 @@ MACHINE_CONFIG_START(cninja_state::mutantf) GFXDECODE(config, m_gfxdecode, m_palette, gfx_mutantf); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) - MCFG_DEVICE_ADD("spriteram2", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); + BUFFERED_SPRITERAM16(config, m_spriteram[1]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1281,7 +1263,6 @@ MACHINE_CONFIG_START(cninja_state::mutantf) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -1320,14 +1301,14 @@ MACHINE_CONFIG_START(cninja_state::mutantf) ymsnd.add_route(0, "lspeaker", 0.45); ymsnd.add_route(1, "rspeaker", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.75) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.75) + okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH)); + oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75); + oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75); - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH); + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60); +} /**********************************************************************************/ diff --git a/src/mame/drivers/cntsteer.cpp b/src/mame/drivers/cntsteer.cpp index 2a1fd5ff109..d22c8ac16ef 100644 --- a/src/mame/drivers/cntsteer.cpp +++ b/src/mame/drivers/cntsteer.cpp @@ -512,7 +512,7 @@ WRITE8_MEMBER(cntsteer_state::gekitsui_sub_irq_ack) WRITE8_MEMBER(cntsteer_state::cntsteer_sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -919,19 +919,19 @@ MACHINE_RESET_MEMBER(cntsteer_state,cntsteer) MACHINE_RESET_CALL_MEMBER(zerotrgt); } -MACHINE_CONFIG_START(cntsteer_state::cntsteer) - +void cntsteer_state::cntsteer(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) /* MC68B09E */ - MCFG_DEVICE_PROGRAM_MAP(cntsteer_cpu1_map) + MC6809E(config, m_maincpu, 2000000); /* MC68B09E */ + m_maincpu->set_addrmap(AS_PROGRAM, &cntsteer_state::cntsteer_cpu1_map); - MCFG_DEVICE_ADD("subcpu", MC6809E, 2000000) /* MC68B09E */ - MCFG_DEVICE_PROGRAM_MAP(cntsteer_cpu2_map) -// MCFG_DEVICE_DISABLE() + MC6809E(config, m_subcpu, 2000000); /* MC68B09E */ + m_subcpu->set_addrmap(AS_PROGRAM, &cntsteer_state::cntsteer_cpu2_map); +// m_subcpu->set_disable(); - MCFG_DEVICE_ADD("audiocpu", M6502, 1500000) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cntsteer_state, sound_interrupt, 480) + M6502(config, m_audiocpu, 1500000); /* ? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cntsteer_state::sound_map); + m_audiocpu->set_periodic_int(FUNC(cntsteer_state::sound_interrupt), attotime::from_hz(480)); MCFG_MACHINE_START_OVERRIDE(cntsteer_state,cntsteer) MCFG_MACHINE_RESET_OVERRIDE(cntsteer_state,cntsteer) @@ -971,20 +971,20 @@ MACHINE_CONFIG_START(cntsteer_state::cntsteer) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(cntsteer_state::zerotrgt) +} +void cntsteer_state::zerotrgt(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(gekitsui_cpu1_map) + MC6809E(config, m_maincpu, 2000000); /* ? */ + m_maincpu->set_addrmap(AS_PROGRAM, &cntsteer_state::gekitsui_cpu1_map); - MCFG_DEVICE_ADD("subcpu", MC6809E, 2000000) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(gekitsui_cpu2_map) + MC6809E(config, m_subcpu, 2000000); /* ? */ + m_subcpu->set_addrmap(AS_PROGRAM, &cntsteer_state::gekitsui_cpu2_map); - MCFG_DEVICE_ADD("audiocpu", M6502, 1500000) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cntsteer_state, sound_interrupt, 480) + M6502(config, m_audiocpu, 1500000); /* ? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cntsteer_state::sound_map); + m_audiocpu->set_periodic_int(FUNC(cntsteer_state::sound_interrupt), attotime::from_hz(480)); config.m_minimum_quantum = attotime::from_hz(6000); @@ -992,14 +992,14 @@ MACHINE_CONFIG_START(cntsteer_state::zerotrgt) MCFG_MACHINE_RESET_OVERRIDE(cntsteer_state,zerotrgt) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cntsteer_state, screen_update_zerotrgt) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) // ? + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(256, 256); + screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(cntsteer_state::screen_update_zerotrgt)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); // ? GFXDECODE(config, m_gfxdecode, m_palette, gfx_zerotrgt); PALETTE(config, m_palette, FUNC(cntsteer_state::zerotrgt_palette), 256); @@ -1014,7 +1014,7 @@ MACHINE_CONFIG_START(cntsteer_state::zerotrgt) AY8910(config, "ay1", 1500000).add_route(ALL_OUTPUTS, "speaker", 0.5); AY8910(config, "ay2", 1500000).add_route(ALL_OUTPUTS, "speaker", 0.5); -MACHINE_CONFIG_END +} /***************************************************************************/ diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp index 3d358b5edaa..035c9ac6ea7 100644 --- a/src/mame/drivers/cobra.cpp +++ b/src/mame/drivers/cobra.cpp @@ -3305,25 +3305,23 @@ MACHINE_CONFIG_START(cobra_state::cobra) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(512, 400) - MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 399) - MCFG_SCREEN_UPDATE_DRIVER(cobra_state, screen_update_cobra) - MCFG_PALETTE_ADD("palette", 65536) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(512, 400); + m_screen->set_visarea_full(); + m_screen->set_screen_update(FUNC(cobra_state::screen_update_cobra)); + PALETTE(config, m_palette).set_entries(65536); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("rfsnd", RF5C400, XTAL(16'934'400)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + rf5c400_device &rfsnd(RF5C400(config, "rfsnd", XTAL(16'934'400))); + rfsnd.add_route(0, "lspeaker", 1.0); + rfsnd.add_route(1, "rspeaker", 1.0); - MCFG_DEVICE_ADD(m_dmadac[0], DMADAC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) + DMADAC(config, m_dmadac[0]).add_route(ALL_OUTPUTS, "lspeaker", 1.0); - MCFG_DEVICE_ADD(m_dmadac[1], DMADAC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + DMADAC(config, m_dmadac[1]).add_route(ALL_OUTPUTS, "rspeaker", 1.0); M48T58(config, "m48t58", 0); diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp index 8de06298232..45e0049cbef 100644 --- a/src/mame/drivers/coco12.cpp +++ b/src/mame/drivers/coco12.cpp @@ -378,7 +378,7 @@ void t4426_cart(device_slot_interface &device) } //------------------------------------------------- -// MACHINE_CONFIG_START( coco_sound ) +// machine_config( coco_sound ) //------------------------------------------------- void coco_state::coco_sound(machine_config &config) @@ -399,7 +399,7 @@ void coco_state::coco_sound(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG ( coco_floating ) +// machine_config ( coco_floating ) //------------------------------------------------- void coco_state::coco_floating_map(address_map &map) @@ -427,12 +427,12 @@ static DEVICE_INPUT_DEFAULTS_START( printer ) DEVICE_INPUT_DEFAULTS_END //------------------------------------------------- -// MACHINE_CONFIG +// machine_config //------------------------------------------------- -MACHINE_CONFIG_START(coco12_state::coco) - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(XTAL(14'318'181) / 16) +void coco12_state::coco(machine_config &config) +{ + this->set_clock(XTAL(14'318'181) / 16); // basic machine hardware MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1)); @@ -499,7 +499,7 @@ MACHINE_CONFIG_START(coco12_state::coco) SOFTWARE_LIST(config, "coco_cart_list").set_original("coco_cart").set_filter("COCO"); SOFTWARE_LIST(config, "coco_flop_list").set_original("coco_flop").set_filter("COCO"); SOFTWARE_LIST(config, "dragon_cart_list").set_compatible("dragon_cart"); -MACHINE_CONFIG_END +} void coco12_state::cocoh(machine_config &config) { diff --git a/src/mame/drivers/coco3.cpp b/src/mame/drivers/coco3.cpp index c341b6f3215..9c985218e0b 100644 --- a/src/mame/drivers/coco3.cpp +++ b/src/mame/drivers/coco3.cpp @@ -242,9 +242,9 @@ DEVICE_INPUT_DEFAULTS_END // MACHINE CONFIGURATION //************************************************************************** -MACHINE_CONFIG_START(coco3_state::coco3) - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(XTAL(28'636'363) / 32) +void coco3_state::coco3(machine_config &config) +{ + this->set_clock(XTAL(28'636'363) / 32); // basic machine hardware MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1)); @@ -329,12 +329,12 @@ MACHINE_CONFIG_START(coco3_state::coco3) SOFTWARE_LIST(config, "cart_list").set_original("coco_cart").set_filter("COCO3"); SOFTWARE_LIST(config, "flop_list").set_original("coco_flop").set_filter("COCO3"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(coco3_state::coco3p) +void coco3_state::coco3p(machine_config &config) +{ coco3(config); - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(XTAL(28'475'000) / 32) + this->set_clock(XTAL(28'475'000) / 32); // An additional 4.433618 MHz XTAL is required for PAL color encoding GIME_PAL(config.replace(), m_gime, XTAL(28'475'000), MAINCPU_TAG, RAM_TAG, CARTRIDGE_TAG, MAINCPU_TAG); @@ -344,7 +344,7 @@ MACHINE_CONFIG_START(coco3_state::coco3p) m_gime->irq_wr_callback().set(FUNC(coco3_state::gime_irq_w)); m_gime->firq_wr_callback().set(FUNC(coco3_state::gime_firq_w)); m_gime->floating_bus_rd_callback().set(FUNC(coco3_state::floating_bus_r)); -MACHINE_CONFIG_END +} void coco3_state::coco3h(machine_config &config) { diff --git a/src/mame/drivers/cocoloco.cpp b/src/mame/drivers/cocoloco.cpp index 6b1f8bbd68a..202477886be 100644 --- a/src/mame/drivers/cocoloco.cpp +++ b/src/mame/drivers/cocoloco.cpp @@ -514,14 +514,14 @@ INPUT_PORTS_END MACHINE_CONFIG_START(cocoloco_state::cocoloco) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cocoloco_map) + M6502(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &cocoloco_state::cocoloco_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(CPU_CLOCK * 4, 384, 0, 256, 262, 0, 256) // TODO: not accurate, ~50 Hz - MCFG_SCREEN_UPDATE_DRIVER(cocoloco_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(CPU_CLOCK * 4, 384, 0, 256, 262, 0, 256); // TODO: not accurate, ~50 Hz + screen.set_screen_update(FUNC(cocoloco_state::screen_update)); + screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(cocoloco_state::cocoloco_palette), 0x10); diff --git a/src/mame/drivers/coinmstr.cpp b/src/mame/drivers/coinmstr.cpp index 443f1bfdab2..5abd1acc21e 100644 --- a/src/mame/drivers/coinmstr.cpp +++ b/src/mame/drivers/coinmstr.cpp @@ -1255,10 +1255,11 @@ uint32_t coinmstr_state::screen_update_coinmstr(screen_device &screen, bitmap_in } -MACHINE_CONFIG_START(coinmstr_state::coinmstr) - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) // 7 MHz. - MCFG_DEVICE_PROGRAM_MAP(coinmstr_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", coinmstr_state, irq0_line_hold) +void coinmstr_state::coinmstr(machine_config &config) +{ + Z80(config, m_maincpu, CPU_CLOCK); // 7 MHz. + m_maincpu->set_addrmap(AS_PROGRAM, &coinmstr_state::coinmstr_map); + m_maincpu->set_vblank_int("screen", FUNC(coinmstr_state::irq0_line_hold)); pia6821_device &pia0(PIA6821(config, "pia0", 0)); pia0.readpa_handler().set_ioport("PIA0.A"); @@ -1273,16 +1274,16 @@ MACHINE_CONFIG_START(coinmstr_state::coinmstr) pia2.readpb_handler().set_ioport("PIA2.B"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 46*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(coinmstr_state, screen_update_coinmstr) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 64*8); + screen.set_visarea(0*8, 46*8-1, 0*8, 32*8-1); + screen.set_screen_update(FUNC(coinmstr_state::screen_update_coinmstr)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_coinmstr); - MCFG_PALETTE_ADD("palette", 46*32*4) + PALETTE(config, m_palette).set_entries(46*32*4); h46505_device &crtc(H46505(config, "crtc", 14000000 / 16)); crtc.set_screen("screen"); @@ -1295,39 +1296,39 @@ MACHINE_CONFIG_START(coinmstr_state::coinmstr) ay8910_device &aysnd(AY8910(config, "aysnd", SND_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(coinmstr_state::quizmstr) +void coinmstr_state::quizmstr(machine_config &config) +{ coinmstr(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(quizmstr_io_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_IO, &coinmstr_state::quizmstr_io_map); +} -MACHINE_CONFIG_START(coinmstr_state::trailblz) +void coinmstr_state::trailblz(machine_config &config) +{ coinmstr(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(trailblz_io_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_IO, &coinmstr_state::trailblz_io_map); +} -MACHINE_CONFIG_START(coinmstr_state::supnudg2) +void coinmstr_state::supnudg2(machine_config &config) +{ coinmstr(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(supnudg2_io_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_IO, &coinmstr_state::supnudg2_io_map); +} -MACHINE_CONFIG_START(coinmstr_state::pokeroul) +void coinmstr_state::pokeroul(machine_config &config) +{ coinmstr(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(pokeroul_io_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_IO, &coinmstr_state::pokeroul_io_map); +} -MACHINE_CONFIG_START(coinmstr_state::jpcoin) +void coinmstr_state::jpcoin(machine_config &config) +{ coinmstr(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(jpcoin_map) - MCFG_DEVICE_IO_MAP(jpcoin_io_map) + m_maincpu->set_addrmap(AS_PROGRAM, &coinmstr_state::jpcoin_map); + m_maincpu->set_addrmap(AS_IO, &coinmstr_state::jpcoin_io_map); // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); -MACHINE_CONFIG_END +} /* diff --git a/src/mame/drivers/coinmvga.cpp b/src/mame/drivers/coinmvga.cpp index 00fcb00a8d7..3c3e47934dc 100644 --- a/src/mame/drivers/coinmvga.cpp +++ b/src/mame/drivers/coinmvga.cpp @@ -636,33 +636,33 @@ void coinmvga_state::ramdac2_map(address_map &map) } -MACHINE_CONFIG_START(coinmvga_state::coinmvga) - +void coinmvga_state::coinmvga(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", H83007, CPU_CLOCK) /* xtal */ - MCFG_DEVICE_PROGRAM_MAP(coinmvga_map) - MCFG_DEVICE_IO_MAP(coinmvga_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", coinmvga_state, vblank_irq) /* wrong, fix me */ + H83007(config, m_maincpu, CPU_CLOCK); /* xtal */ + m_maincpu->set_addrmap(AS_PROGRAM, &coinmvga_state::coinmvga_map); + m_maincpu->set_addrmap(AS_IO, &coinmvga_state::coinmvga_io_map); + m_maincpu->set_vblank_int("screen", FUNC(coinmvga_state::vblank_irq)); /* wrong, fix me */ // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(640,480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(coinmvga_state, screen_update_coinmvga) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(640,480); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(coinmvga_state::screen_update_coinmvga)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_coinmvga); GFXDECODE(config, "gfxdecode2", m_palette2, gfx_coinmvga2); - MCFG_PALETTE_ADD("palette", 256) + PALETTE(config, m_palette).set_entries(256); ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); ramdac.set_addrmap(0, &coinmvga_state::ramdac_map); - MCFG_PALETTE_ADD("palette2", 16) + PALETTE(config, m_palette2).set_entries(16); ramdac_device &ramdac2(RAMDAC(config, "ramdac2", 0, m_palette2)); ramdac2.set_addrmap(0, &coinmvga_state::ramdac2_map); @@ -670,10 +670,10 @@ MACHINE_CONFIG_START(coinmvga_state::coinmvga) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymz", YMZ280B, SND_CLOCK) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + ymz280b_device &ymz(YMZ280B(config, "ymz", SND_CLOCK)); + ymz.add_route(0, "lspeaker", 1.0); + ymz.add_route(1, "rspeaker", 1.0); +} /************************* diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp index c0381746fb0..c1ae7af450b 100644 --- a/src/mame/drivers/combatsc.cpp +++ b/src/mame/drivers/combatsc.cpp @@ -202,7 +202,7 @@ WRITE8_MEMBER(combatsc_state::combatscb_io_w) switch (offset) { case 0x400: combatscb_priority_w(space, 0, data); break; - case 0x800: m_soundlatch->write(space, offset, data); break; + case 0x800: m_soundlatch->write(data); break; case 0xc00: combatsc_vreg_w(space, 0, data); break; default: m_io_ram[offset] = data; break; } diff --git a/src/mame/drivers/comebaby.cpp b/src/mame/drivers/comebaby.cpp index 65bf27731f4..da1e49c37a9 100644 --- a/src/mame/drivers/comebaby.cpp +++ b/src/mame/drivers/comebaby.cpp @@ -236,25 +236,26 @@ static INPUT_PORTS_START( comebaby ) INPUT_PORTS_END -MACHINE_CONFIG_START(comebaby_state::comebaby) +void comebaby_state::comebaby(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", PENTIUM2, (66666666*19)/2) /* Actually a Celeron */ - MCFG_DEVICE_PROGRAM_MAP(comebaby_map) - MCFG_DEVICE_IO_MAP(comebaby_io) + PENTIUM2(config, m_maincpu, (66666666*19)/2); /* Actually a Celeron */ + m_maincpu->set_addrmap(AS_PROGRAM, &comebaby_state::comebaby_map); + m_maincpu->set_addrmap(AS_IO, &comebaby_state::comebaby_io); pcat_common(config); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(comebaby_state, screen_update) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 0x100) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(comebaby_state::screen_update)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea_full(); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_entries(0x100); +} ROM_START(comebaby) diff --git a/src/mame/drivers/commando.cpp b/src/mame/drivers/commando.cpp index 442db94c3d1..4c310d24464 100644 --- a/src/mame/drivers/commando.cpp +++ b/src/mame/drivers/commando.cpp @@ -252,16 +252,16 @@ void commando_state::machine_reset() } -MACHINE_CONFIG_START(commando_state::commando) - +void commando_state::commando(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, PHI_MAIN) // ??? - MCFG_DEVICE_PROGRAM_MAP(commando_map) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) + Z80(config, m_maincpu, PHI_MAIN); // ??? + m_maincpu->set_addrmap(AS_PROGRAM, &commando_state::commando_map); + m_maincpu->set_addrmap(AS_OPCODES, &commando_state::decrypted_opcodes_map); - MCFG_DEVICE_ADD("audiocpu", Z80, PHI_B) // 3 MHz - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(commando_state, irq0_line_hold, 4*60) + Z80(config, m_audiocpu, PHI_B); // 3 MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &commando_state::sound_map); + m_audiocpu->set_periodic_int(FUNC(commando_state::irq0_line_hold), attotime::from_hz(4*60)); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -287,7 +287,7 @@ MACHINE_CONFIG_START(commando_state::commando) YM2203(config, "ym1", PHI_B/2).add_route(ALL_OUTPUTS, "mono", 0.15); YM2203(config, "ym2", PHI_B/2).add_route(ALL_OUTPUTS, "mono", 0.15); -MACHINE_CONFIG_END +} /* ROMs */ diff --git a/src/mame/drivers/compgolf.cpp b/src/mame/drivers/compgolf.cpp index bada8ab9c80..14c334fee6f 100644 --- a/src/mame/drivers/compgolf.cpp +++ b/src/mame/drivers/compgolf.cpp @@ -222,21 +222,21 @@ void compgolf_state::machine_reset() m_scrolly_hi = 0; } -MACHINE_CONFIG_START(compgolf_state::compgolf) - +void compgolf_state::compgolf(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000) // HD68B09EP - MCFG_DEVICE_PROGRAM_MAP(compgolf_map) + MC6809E(config, m_maincpu, 2000000); // HD68B09EP + m_maincpu->set_addrmap(AS_PROGRAM, &compgolf_state::compgolf_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(1*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(compgolf_state, screen_update_compgolf) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(256, 256); + screen.set_visarea(1*8, 32*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(compgolf_state::screen_update_compgolf)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); PALETTE(config, m_palette, FUNC(compgolf_state::compgolf_palette), 0x100); GFXDECODE(config, m_gfxdecode, m_palette, gfx_compgolf); @@ -249,7 +249,7 @@ MACHINE_CONFIG_START(compgolf_state::compgolf) ymsnd.port_a_write_callback().set(FUNC(compgolf_state::compgolf_scrollx_lo_w)); ymsnd.port_b_write_callback().set(FUNC(compgolf_state::compgolf_scrolly_lo_w)); ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} /************************************* diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp index 18543289904..8883140629e 100644 --- a/src/mame/drivers/compis.cpp +++ b/src/mame/drivers/compis.cpp @@ -199,7 +199,7 @@ READ16_MEMBER( compis_state::pcs6_2_3_r ) { if (ACCESSING_BITS_0_7) { - return m_mpsc->inta_r(space, 0); + return m_mpsc->inta_r(); } else { @@ -222,7 +222,7 @@ READ16_MEMBER( compis_state::pcs6_4_5_r ) { if (ACCESSING_BITS_0_7) { - return m_mpsc->cd_ba_r(space, offset & 0x03); + return m_mpsc->cd_ba_r(offset & 0x03); } else { @@ -237,7 +237,7 @@ WRITE16_MEMBER( compis_state::pcs6_4_5_w ) { if (ACCESSING_BITS_0_7) { - m_mpsc->cd_ba_w(space, offset & 0x03, data); + m_mpsc->cd_ba_w(offset & 0x03, data); } else { @@ -734,7 +734,7 @@ void compis_state::machine_reset() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( compis ) +// machine_config( compis ) //------------------------------------------------- void compis_state::compis(machine_config &config) @@ -829,7 +829,7 @@ void compis_state::compis(machine_config &config) //------------------------------------------------- -// MACHINE_CONFIG( compis2 ) +// machine_config( compis2 ) //------------------------------------------------- void compis_state::compis2(machine_config &config) diff --git a/src/mame/drivers/compucolor.cpp b/src/mame/drivers/compucolor.cpp index fea08626904..7be709ab659 100644 --- a/src/mame/drivers/compucolor.cpp +++ b/src/mame/drivers/compucolor.cpp @@ -395,17 +395,18 @@ void compucolor2_state::machine_reset() m_rs232->write_dtr(1); } -MACHINE_CONFIG_START(compucolor2_state::compucolor2) +void compucolor2_state::compucolor2(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD(I8080_TAG, I8080, XTAL(17'971'200)/9) - MCFG_DEVICE_PROGRAM_MAP(compucolor2_mem) - MCFG_DEVICE_IO_MAP(compucolor2_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(compucolor2_state,int_ack) + I8080(config, m_maincpu, XTAL(17'971'200)/9); + m_maincpu->set_addrmap(AS_PROGRAM, &compucolor2_state::compucolor2_mem); + m_maincpu->set_addrmap(AS_IO, &compucolor2_state::compucolor2_io); + m_maincpu->set_irq_acknowledge_callback(FUNC(compucolor2_state::int_ack)); // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(17'971'200)/2, 93*6, 0, 64*6, 268, 0, 256) - MCFG_SCREEN_UPDATE_DRIVER(compucolor2_state, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(XTAL(17'971'200)/2, 93*6, 0, 64*6, 268, 0, 256); + screen.set_screen_update(FUNC(compucolor2_state::screen_update)); PALETTE(config, m_palette, palette_device::RGB_3BIT); @@ -439,7 +440,7 @@ MACHINE_CONFIG_START(compucolor2_state::compucolor2) // software list SOFTWARE_LIST(config, "flop_list").set_original("compclr2_flop"); -MACHINE_CONFIG_END +} ROM_START( compclr2 ) ROM_REGION( 0x4000, I8080_TAG, 0 ) diff --git a/src/mame/drivers/comquest.cpp b/src/mame/drivers/comquest.cpp index 0afa37d849f..acec184d755 100644 --- a/src/mame/drivers/comquest.cpp +++ b/src/mame/drivers/comquest.cpp @@ -214,11 +214,12 @@ void comquest_state::machine_reset() } -MACHINE_CONFIG_START(comquest_state::comquest) +void comquest_state::comquest(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6805, 4000000) /* 4000000? */ - /*MCFG_DEVICE_ADD("maincpu", HD63705, 4000000) instruction set looks like m6805/m6808 */ - /*MCFG_DEVICE_ADD("maincpu", M68705, 4000000) instruction set looks like m6805/m6808 */ + M6805(config, m_maincpu, 4000000); /* 4000000? */ + /* HD63705(config, m_maincpu, 4000000); instruction set looks like m6805/m6808 */ + /* M68705(config, m_maincpu, 4000000); instruction set looks like m6805/m6808 */ /* 8 bit bus, integrated io, serial io?, @@ -244,25 +245,25 @@ MACHINE_CONFIG_START(comquest_state::comquest) not epson e0c88 */ - MCFG_DEVICE_PROGRAM_MAP(comquest_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &comquest_state::comquest_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(30) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(64*4, 128) /* 160 x 102 */ - MCFG_SCREEN_VISIBLE_AREA(0, 64*4-1, 0, 128-1) - MCFG_SCREEN_UPDATE_DRIVER(comquest_state, screen_update_comquest) - MCFG_SCREEN_PALETTE("palette") - - GFXDECODE(config, "gfxdecode", "palette", gfx_comquest ); + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(30); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(64*4, 128); /* 160 x 102 */ + screen.set_visarea_full(); + screen.set_screen_update(FUNC(comquest_state::screen_update_comquest)); + screen.set_palette("palette"); + + GFXDECODE(config, "gfxdecode", "palette", gfx_comquest); PALETTE(config, "palette", palette_device::MONOCHROME); /* sound hardware */ /* unknown ? */ -MACHINE_CONFIG_END +} ROM_START(comquest) // ROM_REGION(0x10000,"maincpu",0) diff --git a/src/mame/drivers/comx35.cpp b/src/mame/drivers/comx35.cpp index bf3ed801e55..c6b10c873db 100644 --- a/src/mame/drivers/comx35.cpp +++ b/src/mame/drivers/comx35.cpp @@ -592,7 +592,7 @@ void comx35_state::machine_reset() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( pal ) +// machine_config( pal ) //------------------------------------------------- void comx35_state::base(machine_config &config, const XTAL clock) diff --git a/src/mame/drivers/contra.cpp b/src/mame/drivers/contra.cpp index 5501a2e8367..b8990718f0c 100644 --- a/src/mame/drivers/contra.cpp +++ b/src/mame/drivers/contra.cpp @@ -206,27 +206,27 @@ void contra_state::machine_reset() m_audiocpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -MACHINE_CONFIG_START(contra_state::contra) - +void contra_state::contra(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", HD6309E, XTAL(24'000'000) / 8) /* 3000000? (HD63C09EP) */ - MCFG_DEVICE_PROGRAM_MAP(contra_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", contra_state, contra_interrupt) + HD6309E(config, m_maincpu, XTAL(24'000'000) / 8); /* 3000000? (HD63C09EP) */ + m_maincpu->set_addrmap(AS_PROGRAM, &contra_state::contra_map); + m_maincpu->set_vblank_int("screen", FUNC(contra_state::contra_interrupt)); - MCFG_DEVICE_ADD("audiocpu", MC6809E, XTAL(24'000'000)/8) /* 3000000? (HD68B09EP) */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) + MC6809E(config, m_audiocpu, XTAL(24'000'000)/8); /* 3000000? (HD68B09EP) */ + m_audiocpu->set_addrmap(AS_PROGRAM, &contra_state::sound_map); config.m_minimum_quantum = attotime::from_hz(6000); /* enough for the sound CPU to read all commands */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(37*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 35*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(contra_state, screen_update_contra) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(37*8, 32*8); + m_screen->set_visarea(0*8, 35*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(contra_state::screen_update_contra)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_contra); @@ -247,7 +247,7 @@ MACHINE_CONFIG_START(contra_state::contra) GENERIC_LATCH_8(config, "soundlatch"); YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 0.60).add_route(1, "rspeaker", 0.60); -MACHINE_CONFIG_END +} ROM_START( contra ) diff --git a/src/mame/drivers/controlid.cpp b/src/mame/drivers/controlid.cpp index 926eaea65f2..f026d795baa 100644 --- a/src/mame/drivers/controlid.cpp +++ b/src/mame/drivers/controlid.cpp @@ -144,7 +144,8 @@ void controlidx628_state::controlidx628_palette(palette_device &palette) const * Machine Driver * *************************/ -MACHINE_CONFIG_START(controlidx628_state::controlidx628) +void controlidx628_state::controlidx628(machine_config &config) +{ // basic machine hardware at89s52_device &maincpu(AT89S52(config, "maincpu", XTAL(11'059'200))); maincpu.set_addrmap(AS_IO, &controlidx628_state::io_map); @@ -156,18 +157,18 @@ MACHINE_CONFIG_START(controlidx628_state::controlidx628) maincpu.port_out_cb<3>().set(FUNC(controlidx628_state::p3_w)); // video hardware - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE(132, 65) - MCFG_SCREEN_VISIBLE_AREA(3, 130, 0, 63) - MCFG_SCREEN_UPDATE_DEVICE("nt7534", nt7534_device, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + screen.set_size(132, 65); + screen.set_visarea(3, 130, 0, 63); + screen.set_screen_update("nt7534", FUNC(nt7534_device::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(controlidx628_state::controlidx628_palette), 2); NT7534(config, m_lcdc); -MACHINE_CONFIG_END +} /************************* diff --git a/src/mame/drivers/coolridr.cpp b/src/mame/drivers/coolridr.cpp index aea75c76552..b58f7718fb7 100644 --- a/src/mame/drivers/coolridr.cpp +++ b/src/mame/drivers/coolridr.cpp @@ -3219,16 +3219,17 @@ WRITE_LINE_MEMBER(coolridr_state::scsp2_to_sh1_irq) #define MAIN_CLOCK XTAL(28'636'363) -MACHINE_CONFIG_START(coolridr_state::coolridr) - MCFG_DEVICE_ADD("maincpu", SH2, MAIN_CLOCK) // 28 MHz - MCFG_DEVICE_PROGRAM_MAP(system_h1_map) +void coolridr_state::coolridr(machine_config &config) +{ + SH2(config, m_maincpu, MAIN_CLOCK); // 28 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &coolridr_state::system_h1_map); TIMER(config, "scantimer").configure_scanline(FUNC(coolridr_state::interrupt_main), "screen", 0, 1); - MCFG_DEVICE_ADD("soundcpu", M68000, 22579000/2) // 22.579 MHz XTAL / 2 = 11.2895 MHz - MCFG_DEVICE_PROGRAM_MAP(system_h1_sound_map) + M68000(config, m_soundcpu, 22579000/2); // 22.579 MHz XTAL / 2 = 11.2895 MHz + m_soundcpu->set_addrmap(AS_PROGRAM, &coolridr_state::system_h1_sound_map); - MCFG_DEVICE_ADD("sub", SH1, 16000000) // SH7032 HD6417032F20!! 16 MHz - MCFG_DEVICE_PROGRAM_MAP(coolridr_submap) + SH1(config, m_subcpu, 16000000); // SH7032 HD6417032F20!! 16 MHz + m_subcpu->set_addrmap(AS_PROGRAM, &coolridr_state::coolridr_submap); TIMER(config, "scantimer2").configure_scanline(FUNC(coolridr_state::interrupt_sub), "screen", 0, 1); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -3247,19 +3248,19 @@ MACHINE_CONFIG_START(coolridr_state::coolridr) GFXDECODE(config, m_gfxdecode, m_palette, gfx_coolridr); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(640, 512) - MCFG_SCREEN_VISIBLE_AREA(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL) - MCFG_SCREEN_UPDATE_DRIVER(coolridr_state, screen_update<0>) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(640, 512); + m_screen->set_visarea(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL); + m_screen->set_screen_update(FUNC(coolridr_state::screen_update<0>)); + m_screen->set_palette(m_palette); - MCFG_SCREEN_ADD("screen2", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(640, 512) - MCFG_SCREEN_VISIBLE_AREA(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL) - MCFG_SCREEN_UPDATE_DRIVER(coolridr_state, screen_update<1>) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER)); + screen2.set_refresh_hz(60); + screen2.set_size(640, 512); + screen2.set_visarea(CLIPMINX_FULL,CLIPMAXX_FULL, CLIPMINY_FULL, CLIPMAXY_FULL); + screen2.set_screen_update(FUNC(coolridr_state::screen_update<1>)); + screen2.set_palette(m_palette); PALETTE(config, m_palette, palette_device::RGB_555); @@ -3280,20 +3281,19 @@ MACHINE_CONFIG_START(coolridr_state::coolridr) scsp2.main_irq_cb().set(FUNC(coolridr_state::scsp2_to_sh1_irq)); scsp2.add_route(0, "lspeaker", 1.0); scsp2.add_route(1, "rspeaker", 1.0); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(coolridr_state::aquastge) +void coolridr_state::aquastge(machine_config &config) +{ coolridr(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(aquastge_h1_map) + m_maincpu->set_addrmap(AS_PROGRAM, &coolridr_state::aquastge_h1_map); - MCFG_DEVICE_MODIFY("sub") - MCFG_DEVICE_PROGRAM_MAP(aquastge_submap) + m_subcpu->set_addrmap(AS_PROGRAM, &coolridr_state::aquastge_submap); sega_315_5649_device &io(SEGA_315_5649(config.replace(), "io", 0)); io.in_pc_callback().set_ioport("IN0"); io.in_pd_callback().set_ioport("IN1"); -MACHINE_CONFIG_END +} ROM_START( coolridr ) ROM_REGION( 0x200000, "maincpu", 0 ) /* SH2 code */ diff --git a/src/mame/drivers/cop01.cpp b/src/mame/drivers/cop01.cpp index 75ee04124aa..06a8329f43a 100644 --- a/src/mame/drivers/cop01.cpp +++ b/src/mame/drivers/cop01.cpp @@ -79,13 +79,13 @@ Mighty Guy board layout: WRITE8_MEMBER(cop01_state::cop01_sound_command_w) { - m_soundlatch->write(space, offset, data); - m_audiocpu->set_input_line(0, ASSERT_LINE ); + m_soundlatch->write(data); + m_audiocpu->set_input_line(0, ASSERT_LINE); } READ8_MEMBER(cop01_state::cop01_sound_command_r) { - int res = (m_soundlatch->read(space, offset) & 0x7f) << 1; + int res = (m_soundlatch->read() & 0x7f) << 1; /* bit 0 seems to be a timer */ if ((m_audiocpu->total_cycles() / TIMER_RATE) & 1) @@ -446,27 +446,27 @@ void cop01_state::machine_reset() } -MACHINE_CONFIG_START(cop01_state::cop01) - +void cop01_state::cop01(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MAINCPU_CLOCK/2) /* unknown clock / divider */ - MCFG_DEVICE_PROGRAM_MAP(cop01_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cop01_state, irq0_line_assert) + Z80(config, m_maincpu, MAINCPU_CLOCK/2); /* unknown clock / divider */ + m_maincpu->set_addrmap(AS_PROGRAM, &cop01_state::cop01_map); + m_maincpu->set_addrmap(AS_IO, &cop01_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(cop01_state::irq0_line_assert)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(3'000'000)) /* unknown clock / divider, hand-tuned to match audio reference */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(audio_io_map) + Z80(config, m_audiocpu, XTAL(3'000'000)); /* unknown clock / divider, hand-tuned to match audio reference */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cop01_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &cop01_state::audio_io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cop01_state, screen_update_cop01) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(cop01_state::screen_update_cop01)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cop01); PALETTE(config, m_palette, FUNC(cop01_state::cop01_palette), 16+8*16+16*16, 256); @@ -481,31 +481,31 @@ MACHINE_CONFIG_START(cop01_state::cop01) AY8910(config, "ay2", 1250000).add_route(ALL_OUTPUTS, "mono", 0.25); /* unknown clock / divider, hand-tuned to match audio reference */ AY8910(config, "ay3", 1250000).add_route(ALL_OUTPUTS, "mono", 0.25); /* unknown clock / divider, hand-tuned to match audio reference */ -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mightguy_state::mightguy) +} +void mightguy_state::mightguy(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MAINCPU_CLOCK/2) /* unknown divider */ - MCFG_DEVICE_PROGRAM_MAP(cop01_map) - MCFG_DEVICE_IO_MAP(mightguy_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cop01_state, irq0_line_assert) + Z80(config, m_maincpu, MAINCPU_CLOCK/2); /* unknown divider */ + m_maincpu->set_addrmap(AS_PROGRAM, &mightguy_state::cop01_map); + m_maincpu->set_addrmap(AS_IO, &mightguy_state::mightguy_io_map); + m_maincpu->set_vblank_int("screen", FUNC(cop01_state::irq0_line_assert)); - MCFG_DEVICE_ADD("audiocpu", Z80, AUDIOCPU_CLOCK/2) /* unknown divider */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(mightguy_audio_io_map) + Z80(config, m_audiocpu, AUDIOCPU_CLOCK/2); /* unknown divider */ + m_audiocpu->set_addrmap(AS_PROGRAM, &mightguy_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &mightguy_state::mightguy_audio_io_map); NB1412M2(config, m_prot, XTAL(8'000'000)/2); // divided by 2 maybe m_prot->dac_callback().set("dac", FUNC(dac_byte_interface::data_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cop01_state, screen_update_cop01) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(cop01_state::screen_update_cop01)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cop01); PALETTE(config, m_palette, FUNC(cop01_state::cop01_palette), 16+8*16+16*16, 256); @@ -515,14 +515,13 @@ MACHINE_CONFIG_START(mightguy_state::mightguy) GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ymsnd", YM3526, AUDIOCPU_CLOCK/2) /* unknown divider */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM3526(config, "ymsnd", AUDIOCPU_CLOCK/2).add_route(ALL_OUTPUTS, "mono", 1.0); /* unknown divider */ DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "mono", 0.5); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/copsnrob.cpp b/src/mame/drivers/copsnrob.cpp index cff3ebf65f7..061158521e4 100644 --- a/src/mame/drivers/copsnrob.cpp +++ b/src/mame/drivers/copsnrob.cpp @@ -248,11 +248,11 @@ void copsnrob_state::machine_reset() } -MACHINE_CONFIG_START(copsnrob_state::copsnrob) - +void copsnrob_state::copsnrob(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502,14318180/16) /* 894886.25 kHz */ - MCFG_DEVICE_PROGRAM_MAP(main_map) + M6502(config, m_maincpu, 14318180/16); /* 894886.25 kHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &copsnrob_state::main_map); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -267,7 +267,7 @@ MACHINE_CONFIG_START(copsnrob_state::copsnrob) PALETTE(config, m_palette, palette_device::MONOCHROME); copsnrob_audio(config); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/corona.cpp b/src/mame/drivers/corona.cpp index 83e220434c4..6cec44a583e 100644 --- a/src/mame/drivers/corona.cpp +++ b/src/mame/drivers/corona.cpp @@ -526,14 +526,14 @@ uint32_t corona_state::screen_update_luckyrlt(screen_device &screen, bitmap_ind1 WRITE8_MEMBER(corona_state::sound_latch_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_soundcpu->set_input_line(0, ASSERT_LINE); } READ8_MEMBER(corona_state::sound_latch_r) { m_soundcpu->set_input_line(0, CLEAR_LINE); - return m_soundlatch->read(space, 0); + return m_soundlatch->read(); } @@ -1385,28 +1385,29 @@ INPUT_PORTS_END * Machine Drivers * *******************************************/ -MACHINE_CONFIG_START(corona_state::winner81) +void corona_state::winner81(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, WC81_MAIN_XTAL/8) /* measured */ - MCFG_DEVICE_PROGRAM_MAP(winner81_map) - MCFG_DEVICE_IO_MAP(winner81_cpu_io_map) + Z80(config, m_maincpu, WC81_MAIN_XTAL/8); /* measured */ + m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::winner81_map); + m_maincpu->set_addrmap(AS_IO, &corona_state::winner81_cpu_io_map); - MCFG_DEVICE_ADD("soundcpu", Z80, WC81_MAIN_XTAL/10) /* measured */ - MCFG_DEVICE_PROGRAM_MAP(winner81_sound_map) - MCFG_DEVICE_IO_MAP(winner81_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(corona_state, nmi_line_pulse, 244) /* 244 Hz (1MHz/16/16/16) */ + Z80(config, m_soundcpu, WC81_MAIN_XTAL/10); /* measured */ + m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::winner81_sound_map); + m_soundcpu->set_addrmap(AS_IO, &corona_state::winner81_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(corona_state::nmi_line_pulse), attotime::from_hz(244)); /* 244 Hz (1MHz/16/16/16) */ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(corona_state::screen_update_winner)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100); @@ -1415,30 +1416,31 @@ MACHINE_CONFIG_START(corona_state::winner81) GENERIC_LATCH_8(config, m_soundlatch); AY8912(config, "aysnd", AY_CLK1).add_route(ALL_OUTPUTS, "mono", 1.0); /* measured */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(corona_state::winner82) +void corona_state::winner82(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, WC82_MAIN_XTAL/8) /* measured */ - MCFG_DEVICE_PROGRAM_MAP(winner82_map) - MCFG_DEVICE_IO_MAP(winner82_cpu_io_map) + Z80(config, m_maincpu, WC82_MAIN_XTAL/8); /* measured */ + m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::winner82_map); + m_maincpu->set_addrmap(AS_IO, &corona_state::winner82_cpu_io_map); - MCFG_DEVICE_ADD("soundcpu", Z80, WC82_MAIN_XTAL/8) /* measured */ - MCFG_DEVICE_PROGRAM_MAP(winner82_sound_map) /* IM1 instead of NMI */ - MCFG_DEVICE_IO_MAP(winner82_sound_cpu_io_map) + Z80(config, m_soundcpu, WC82_MAIN_XTAL/8); /* measured */ + m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::winner82_sound_map); /* IM1 instead of NMI */ + m_soundcpu->set_addrmap(AS_IO, &corona_state::winner82_sound_cpu_io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(corona_state::screen_update_winner)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100); @@ -1447,31 +1449,32 @@ MACHINE_CONFIG_START(corona_state::winner82) GENERIC_LATCH_8(config, m_soundlatch); AY8910(config, "aysnd", AY_CLK2).add_route(ALL_OUTPUTS, "mono", 1.0); /* measured */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(corona_state::re800) +void corona_state::re800(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */ - MCFG_DEVICE_PROGRAM_MAP(re800_map) - MCFG_DEVICE_IO_MAP(re800_cpu_io_map) + Z80(config, m_maincpu, RE_MAIN_XTAL/8); /* measured 2MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::re800_map); + m_maincpu->set_addrmap(AS_IO, &corona_state::re800_cpu_io_map); - MCFG_DEVICE_ADD("soundcpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */ - MCFG_DEVICE_PROGRAM_MAP(re800_sound_map) - MCFG_DEVICE_IO_MAP(re800_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(corona_state, nmi_line_pulse, 244) /* 244 Hz (1MHz/16/16/16) */ + Z80(config, m_soundcpu, RE_MAIN_XTAL/8); /* measured 2MHz */ + m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::re800_sound_map); + m_soundcpu->set_addrmap(AS_IO, &corona_state::re800_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(corona_state::nmi_line_pulse), attotime::from_hz(244)); /* 244 Hz (1MHz/16/16/16) */ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 32*8-1); + m_screen->set_screen_update(FUNC(corona_state::screen_update_winner)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100); @@ -1480,30 +1483,31 @@ MACHINE_CONFIG_START(corona_state::re800) GENERIC_LATCH_8(config, m_soundlatch); AY8912(config, "aysnd", AY_CLK2).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(corona_state::rcirulet) +void corona_state::rcirulet(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */ - MCFG_DEVICE_PROGRAM_MAP(re800_map) - MCFG_DEVICE_IO_MAP(re800_cpu_io_map) + Z80(config, m_maincpu, RE_MAIN_XTAL/8); /* measured 2MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::re800_map); + m_maincpu->set_addrmap(AS_IO, &corona_state::re800_cpu_io_map); - MCFG_DEVICE_ADD("soundcpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */ - MCFG_DEVICE_PROGRAM_MAP(winner82_sound_map) /* IM1 instead of NMI */ - MCFG_DEVICE_IO_MAP(winner82_sound_cpu_io_map) + Z80(config, m_soundcpu, RE_MAIN_XTAL/8); /* measured 2MHz */ + m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::winner82_sound_map); /* IM1 instead of NMI */ + m_soundcpu->set_addrmap(AS_IO, &corona_state::winner82_sound_cpu_io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_winner) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 32*8-1); + m_screen->set_screen_update(FUNC(corona_state::screen_update_winner)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100); @@ -1512,31 +1516,32 @@ MACHINE_CONFIG_START(corona_state::rcirulet) GENERIC_LATCH_8(config, m_soundlatch); AY8912(config, "aysnd", AY_CLK2).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(corona_state::luckyrlt) +void corona_state::luckyrlt(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */ - MCFG_DEVICE_PROGRAM_MAP(luckyrlt_map) - MCFG_DEVICE_IO_MAP(luckyrlt_cpu_io_map) + Z80(config, m_maincpu, RE_MAIN_XTAL/8); /* measured 2MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::luckyrlt_map); + m_maincpu->set_addrmap(AS_IO, &corona_state::luckyrlt_cpu_io_map); - MCFG_DEVICE_ADD("soundcpu", Z80, RE_MAIN_XTAL/8) /* measured 2MHz */ - MCFG_DEVICE_PROGRAM_MAP(luckyrlt_sound_map) - MCFG_DEVICE_IO_MAP(luckyrlt_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(corona_state, nmi_line_pulse, 244) /* 244 Hz (1MHz/16/16/16) */ + Z80(config, m_soundcpu, RE_MAIN_XTAL/8); /* measured 2MHz */ + m_soundcpu->set_addrmap(AS_PROGRAM, &corona_state::luckyrlt_sound_map); + m_soundcpu->set_addrmap(AS_IO, &corona_state::luckyrlt_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(corona_state::nmi_line_pulse), attotime::from_hz(244)); /* 244 Hz (1MHz/16/16/16) */ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(corona_state, screen_update_luckyrlt) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); //not accurate + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 30*8-1); + m_screen->set_screen_update(FUNC(corona_state::screen_update_luckyrlt)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); PALETTE(config, "palette", FUNC(corona_state::corona_palette), 0x100); @@ -1545,7 +1550,7 @@ MACHINE_CONFIG_START(corona_state::luckyrlt) GENERIC_LATCH_8(config, m_soundlatch); AY8912(config, "aysnd", AY_CLK1).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} /**************** Corona Co,LTD. Hardware **************** diff --git a/src/mame/drivers/cosmicos.cpp b/src/mame/drivers/cosmicos.cpp index bca91f96fc8..628e0446309 100644 --- a/src/mame/drivers/cosmicos.cpp +++ b/src/mame/drivers/cosmicos.cpp @@ -533,8 +533,7 @@ MACHINE_CONFIG_START(cosmicos_state::cosmicos) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG); m_cti->inlace_cb().set_constant(0); diff --git a/src/mame/drivers/cps1.cpp b/src/mame/drivers/cps1.cpp index 0d0394a4e40..331e605040c 100644 --- a/src/mame/drivers/cps1.cpp +++ b/src/mame/drivers/cps1.cpp @@ -299,15 +299,15 @@ WRITE8_MEMBER(cps_state::cps1_oki_pin7_w) WRITE16_MEMBER(cps_state::cps1_soundlatch_w) { if (ACCESSING_BITS_0_7) - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); else - m_soundlatch->write(space, 0, data >> 8); + m_soundlatch->write(data >> 8); } WRITE16_MEMBER(cps_state::cps1_soundlatch2_w) { if (ACCESSING_BITS_0_7) - m_soundlatch2->write(space, 0, data & 0xff); + m_soundlatch2->write(data & 0xff); } WRITE16_MEMBER(cps_state::cps1_coinctrl_w) diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp index 0dc9143e303..40abe058624 100644 --- a/src/mame/drivers/cps2.cpp +++ b/src/mame/drivers/cps2.cpp @@ -1295,61 +1295,62 @@ MACHINE_START_MEMBER(cps2_state,cps2) } -MACHINE_CONFIG_START(cps2_state::cps2) - +void cps2_state::cps2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) - MCFG_DEVICE_PROGRAM_MAP(cps2_map) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) + M68000(config, m_maincpu, XTAL(16'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &cps2_state::cps2_map); + m_maincpu->set_addrmap(AS_OPCODES, &cps2_state::decrypted_opcodes_map); TIMER(config, "scantimer").configure_scanline(FUNC(cps2_state::cps2_interrupt), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(8'000'000)) - MCFG_DEVICE_PROGRAM_MAP(qsound_sub_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cps2_state, irq0_line_hold, 250) // measured + Z80(config, m_audiocpu, XTAL(8'000'000)); + m_audiocpu->set_addrmap(AS_PROGRAM, &cps2_state::qsound_sub_map); + m_audiocpu->set_periodic_int(FUNC(cps2_state::irq0_line_hold), attotime::from_hz(250)); // measured MCFG_MACHINE_START_OVERRIDE(cps2_state, cps2) EEPROM_93C46_16BIT(config, "eeprom"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(cps2_state, screen_update_cps2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps2_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART); + m_screen->set_screen_update(FUNC(cps2_state::screen_update_cps2)); + m_screen->screen_vblank().set(FUNC(cps2_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); - MCFG_PALETTE_ADD("palette", 0xc00) + PALETTE(config, m_palette).set_entries(0xc00); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("qsound", QSOUND) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + QSOUND(config, m_qsound); + m_qsound->add_route(0, "lspeaker", 1.0); + m_qsound->add_route(1, "rspeaker", 1.0); +} -MACHINE_CONFIG_START(cps2_state::dead_cps2) +void cps2_state::dead_cps2(machine_config &config) +{ cps2(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(dead_cps2_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &cps2_state::dead_cps2_map); +} -MACHINE_CONFIG_START(cps2_state::gigaman2) +void cps2_state::gigaman2(machine_config &config) +{ cps2(config); config.device_remove("audiocpu"); // gigaman2 has an AT89C4051 (8051) MCU as an audio cpu, no qsound. config.device_remove("qsound"); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified + m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.47); + m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.47); +} /************************************* * diff --git a/src/mame/drivers/crbaloon.cpp b/src/mame/drivers/crbaloon.cpp index 4d24798c54b..ff32e1de93e 100644 --- a/src/mame/drivers/crbaloon.cpp +++ b/src/mame/drivers/crbaloon.cpp @@ -361,31 +361,30 @@ INTERRUPT_GEN_MEMBER(crbaloon_state::vblank_irq) } -MACHINE_CONFIG_START(crbaloon_state::crbaloon) - +void crbaloon_state::crbaloon(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CRBALOON_MASTER_XTAL / 3) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_IO_MAP(main_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", crbaloon_state, vblank_irq) + Z80(config, m_maincpu, CRBALOON_MASTER_XTAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &crbaloon_state::main_map); + m_maincpu->set_addrmap(AS_IO, &crbaloon_state::main_io_map); + m_maincpu->set_vblank_int("screen", FUNC(crbaloon_state::vblank_irq)); /* video hardware */ GFXDECODE(config, m_gfxdecode, "palette", gfx_crbaloon); PALETTE(config, "palette", FUNC(crbaloon_state::crbaloon_palette), 32); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(crbaloon_state, screen_update_crbaloon) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_ALWAYS_UPDATE); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1); + screen.set_screen_update(FUNC(crbaloon_state::screen_update_crbaloon)); + screen.set_palette("palette"); /* audio hardware */ crbaloon_audio(config); - -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/crimfght.cpp b/src/mame/drivers/crimfght.cpp index 861696da537..b56c39cac2f 100644 --- a/src/mame/drivers/crimfght.cpp +++ b/src/mame/drivers/crimfght.cpp @@ -57,7 +57,7 @@ WRITE8_MEMBER(crimfght_state::k052109_051960_w) WRITE8_MEMBER(crimfght_state::sound_w) { // writing the latch asserts the irq line - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); } diff --git a/src/mame/drivers/crospang.cpp b/src/mame/drivers/crospang.cpp index fb3b3c4a6d0..1d0f7970c4b 100644 --- a/src/mame/drivers/crospang.cpp +++ b/src/mame/drivers/crospang.cpp @@ -40,15 +40,15 @@ /* main cpu */ -void crospang_state::crospang_base_map(address_map &map) +void crospang_state::base_map(address_map &map) { map(0x000000, 0x0fffff).rom().nopw(); // writes to rom quite often - map(0x100000, 0x100001).w(FUNC(crospang_state::bestri_tilebank_select_w)); - map(0x10000e, 0x10000f).w(FUNC(crospang_state::bestri_tilebank_data_w)); + map(0x100000, 0x100001).w(FUNC(crospang_state::tilebank_select_w)); + map(0x10000e, 0x10000f).w(FUNC(crospang_state::tilebank_data_w)); - map(0x120000, 0x1207ff).ram().w(FUNC(crospang_state::crospang_fg_videoram_w)).share("fg_videoram"); - map(0x122000, 0x1227ff).ram().w(FUNC(crospang_state::crospang_bg_videoram_w)).share("bg_videoram"); + map(0x120000, 0x1207ff).ram().w(FUNC(crospang_state::fg_videoram_w)).share("fg_videoram"); + map(0x122000, 0x1227ff).ram().w(FUNC(crospang_state::bg_videoram_w)).share("bg_videoram"); map(0x200000, 0x2005ff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0x210000, 0x2107ff).ram().share("spriteram"); map(0x270001, 0x270001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); @@ -62,31 +62,31 @@ void crospang_state::crospang_base_map(address_map &map) void crospang_state::crospang_map(address_map &map) { - crospang_base_map(map); + base_map(map); - map(0x100002, 0x100003).w(FUNC(crospang_state::crospang_fg_scrolly_w)); - map(0x100004, 0x100005).w(FUNC(crospang_state::crospang_bg_scrollx_w)); - map(0x100006, 0x100007).w(FUNC(crospang_state::crospang_bg_scrolly_w)); - map(0x100008, 0x100009).w(FUNC(crospang_state::crospang_fg_scrollx_w)); + map(0x100002, 0x100003).w(FUNC(crospang_state::fg_scrolly_w)); + map(0x100004, 0x100005).w(FUNC(crospang_state::bg_scrollx_w)); + map(0x100006, 0x100007).w(FUNC(crospang_state::bg_scrolly_w)); + map(0x100008, 0x100009).w(FUNC(crospang_state::fg_scrollx_w)); map(0x320000, 0x32ffff).ram(); } void crospang_state::pitapat_map(address_map &map) { - crospang_base_map(map); + base_map(map); - map(0x100002, 0x100003).w(FUNC(crospang_state::crospang_fg_scrolly_w)); - map(0x100004, 0x100005).w(FUNC(crospang_state::crospang_bg_scrollx_w)); - map(0x100006, 0x100007).w(FUNC(crospang_state::crospang_bg_scrolly_w)); - map(0x100008, 0x100009).w(FUNC(crospang_state::crospang_fg_scrollx_w)); + map(0x100002, 0x100003).w(FUNC(crospang_state::fg_scrolly_w)); + map(0x100004, 0x100005).w(FUNC(crospang_state::bg_scrollx_w)); + map(0x100006, 0x100007).w(FUNC(crospang_state::bg_scrolly_w)); + map(0x100008, 0x100009).w(FUNC(crospang_state::fg_scrollx_w)); map(0x300000, 0x30ffff).ram(); } void crospang_state::bestri_map(address_map &map) { - crospang_base_map(map); + base_map(map); map(0x100004, 0x100005).w(FUNC(crospang_state::bestri_fg_scrollx_w)); map(0x100006, 0x100007).w(FUNC(crospang_state::bestri_fg_scrolly_w)); @@ -98,7 +98,7 @@ void crospang_state::bestri_map(address_map &map) void crospang_state::bestria_map(address_map &map) { - crospang_base_map(map); + base_map(map); map(0x100006, 0x100007).w(FUNC(crospang_state::bestri_fg_scrollx_w)); map(0x100008, 0x100009).w(FUNC(crospang_state::bestri_fg_scrolly_w)); @@ -110,13 +110,13 @@ void crospang_state::bestria_map(address_map &map) /* sound cpu */ -void crospang_state::crospang_sound_map(address_map &map) +void crospang_state::sound_map(address_map &map) { map(0x0000, 0xbfff).rom(); map(0xc000, 0xc7ff).ram(); } -void crospang_state::crospang_sound_io_map(address_map &map) +void crospang_state::sound_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); @@ -393,33 +393,42 @@ static const gfx_layout tlayout = RGN_FRAC(1,2), 4, { RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 }, - { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, - 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, + { STEP8(8*2*16,1), STEP8(0,1) }, + { STEP16(0,8*2) }, + 64*8 +}; + +static const gfx_layout tlayout_alt = +{ + 16,16, + RGN_FRAC(1,2), + 4, + { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0 }, + { STEP8(0,1), STEP8(8*2*16,1) }, + { STEP16(0,8*2) }, 64*8 }; static GFXDECODE_START( gfx_crospang ) - GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx1", 0, tlayout, 0, 64 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "gfx1", 0, tlayout_alt, 0, 64 ) /* Tiles 16x16 */ GFXDECODE_END void crospang_state::machine_start() { - save_item(NAME(m_bestri_tilebank)); - save_item(NAME(m_bestri_tilebankselect)); + save_item(NAME(m_tilebank)); + save_item(NAME(m_tilebankselect)); } void crospang_state::machine_reset() { - m_bestri_tilebank[0] = 0x00; - m_bestri_tilebank[1] = 0x01; - m_bestri_tilebank[2] = 0x02; - m_bestri_tilebank[3] = 0x03; + m_tilebank[0] = 0x00; + m_tilebank[1] = 0x01; + m_tilebank[2] = 0x02; + m_tilebank[3] = 0x03; - m_bestri_tilebankselect = 0; + m_tilebankselect = 0; } void crospang_state::crospang(machine_config &config) @@ -430,8 +439,8 @@ void crospang_state::crospang(machine_config &config) m_maincpu->set_vblank_int("screen", FUNC(crospang_state::irq6_line_hold)); z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181)/4)); /* 3.579545MHz */ - audiocpu.set_addrmap(AS_PROGRAM, &crospang_state::crospang_sound_map); - audiocpu.set_addrmap(AS_IO, &crospang_state::crospang_sound_io_map); + audiocpu.set_addrmap(AS_PROGRAM, &crospang_state::sound_map); + audiocpu.set_addrmap(AS_IO, &crospang_state::sound_io_map); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -439,7 +448,7 @@ void crospang_state::crospang(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 64*8); screen.set_visarea(0, 40*8-1, 0, 30*8-1); - screen.set_screen_update(FUNC(crospang_state::screen_update_crospang)); + screen.set_screen_update(FUNC(crospang_state::screen_update)); screen.set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x300); @@ -743,34 +752,9 @@ ROM_START( pitapat ) ROM_LOAD16_BYTE( "ud17", 0x080001, 0x40000, CRC(d4c67e2e) SHA1(e684b58333d64f5961983b42f56c61bb0bea2e5c) ) ROM_END -void crospang_state::tumblepb_gfx1_rearrange() -{ - uint8_t *rom = memregion("gfx1")->base(); - int len = memregion("gfx1")->bytes(); - int i; - - /* gfx data is in the wrong order */ - for (i = 0; i < len; i++) - { - if ((i & 0x20) == 0) - { - int t = rom[i]; rom[i] = rom[i + 0x20]; rom[i + 0x20] = t; - } - } - /* low/high half are also swapped */ - for (i = 0; i < len / 2; i++) - { - int t = rom[i]; rom[i] = rom[i + len / 2]; rom[i + len / 2] = t; - } -} - -void crospang_state::init_crospang() -{ - tumblepb_gfx1_rearrange(); -} -GAME( 1998, crospang, 0, crospang, crospang, crospang_state, init_crospang, ROT0, "F2 System", "Cross Pang", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, heuksun, 0, crospang, heuksun, crospang_state, init_crospang, ROT0, "Oksan / F2 System", "Heuk Sun Baek Sa (Korea)", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, bestri, 0, bestri, bestri, crospang_state, init_crospang, ROT0, "F2 System", "Bestri (Korea, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, bestria, bestri, bestria, bestri, crospang_state, init_crospang, ROT0, "F2 System", "Bestri (Korea, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, pitapat, 0, pitapat, pitapat, crospang_state, init_crospang, ROT0, "F2 System", "Pitapat Puzzle", MACHINE_SUPPORTS_SAVE ) // Test Mode calls it 'Puzzle Ball' +GAME( 1998, crospang, 0, crospang, crospang, crospang_state, empty_init, ROT0, "F2 System", "Cross Pang", MACHINE_SUPPORTS_SAVE ) +GAME( 1997, heuksun, 0, crospang, heuksun, crospang_state, empty_init, ROT0, "Oksan / F2 System", "Heuk Sun Baek Sa (Korea)", MACHINE_SUPPORTS_SAVE ) +GAME( 1998, bestri, 0, bestri, bestri, crospang_state, empty_init, ROT0, "F2 System", "Bestri (Korea, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1998, bestria, bestri, bestria, bestri, crospang_state, empty_init, ROT0, "F2 System", "Bestri (Korea, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1997, pitapat, 0, pitapat, pitapat, crospang_state, empty_init, ROT0, "F2 System", "Pitapat Puzzle", MACHINE_SUPPORTS_SAVE ) // Test Mode calls it 'Puzzle Ball' diff --git a/src/mame/drivers/crvision.cpp b/src/mame/drivers/crvision.cpp index 642e80b867f..081d886b9fb 100644 --- a/src/mame/drivers/crvision.cpp +++ b/src/mame/drivers/crvision.cpp @@ -780,7 +780,7 @@ void crvision_state::creativision(machine_config &config) } /*------------------------------------------------- - MACHINE_CONFIG_START( ntsc ) + machine_config( ntsc ) -------------------------------------------------*/ void crvision_state::ntsc(machine_config &config) @@ -795,7 +795,7 @@ void crvision_state::ntsc(machine_config &config) } /*------------------------------------------------- - MACHINE_CONFIG_START( pal ) + machine_config( pal ) -------------------------------------------------*/ void crvision_pal_state::pal(machine_config &config) @@ -810,7 +810,7 @@ void crvision_pal_state::pal(machine_config &config) } /*------------------------------------------------- - MACHINE_CONFIG_START( lasr2001 ) + machine_config( lasr2001 ) -------------------------------------------------*/ void laser2001_state::lasr2001(machine_config &config) diff --git a/src/mame/drivers/csplayh5.cpp b/src/mame/drivers/csplayh5.cpp index 6ac1e75b7ec..bca9301e1ca 100644 --- a/src/mame/drivers/csplayh5.cpp +++ b/src/mame/drivers/csplayh5.cpp @@ -49,14 +49,12 @@ public: csplayh5_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_tmp68301(*this, "tmp68301"), m_nichisnd(*this, "nichisnd"), m_key(*this, "KEY.%u", 0), m_region_maincpu(*this, "maincpu") { } - required_device<cpu_device> m_maincpu; - required_device<tmp68301_device> m_tmp68301; + required_device<tmp68301_device> m_maincpu; required_device<nichisnd_device> m_nichisnd; required_ioport_array<5> m_key; required_memory_region m_region_maincpu; @@ -142,8 +140,6 @@ void csplayh5_state::csplayh5_map(address_map &map) map(0x800000, 0xbfffff).rom().region("blit_gfx", 0); // GFX ROM routes here map(0xc00000, 0xc7ffff).ram().share("nvram").mirror(0x380000); // work RAM - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } #if USE_H8 @@ -330,7 +326,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_state::csplayh5_irq) int scanline = param; if(scanline == 212*2) - m_tmp68301->external_interrupt_0(); + m_maincpu->external_interrupt_0(); } WRITE_LINE_MEMBER(csplayh5_state::csplayh5_vdp0_interrupt) @@ -361,16 +357,12 @@ WRITE16_MEMBER(csplayh5_state::tmp68301_parallel_port_w) void csplayh5_state::csplayh5(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, 16000000); /* TMP68301-16 */ + TMP68301(config, m_maincpu, 16000000); /* TMP68301-16 */ m_maincpu->set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_map); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); + m_maincpu->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w)); TIMER(config, "scantimer", 0).configure_scanline(timer_device::expired_delegate(FUNC(csplayh5_state::csplayh5_irq), this), "screen", 0, 1); - TMP68301(config, m_tmp68301, 0); - m_tmp68301->set_cputag(m_maincpu); - m_tmp68301->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w)); - #if USE_H8 h830002_device &subcpu(H83002(config, "subcpu", DVD_CLOCK/2)); /* unknown divider */ subcpu.set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_sub_map); diff --git a/src/mame/drivers/cswat.cpp b/src/mame/drivers/cswat.cpp index 2a9918b6ada..7052a3b98d3 100644 --- a/src/mame/drivers/cswat.cpp +++ b/src/mame/drivers/cswat.cpp @@ -257,30 +257,29 @@ void cswat_state::machine_start() save_item(NAME(m_nmi_enabled)); } -MACHINE_CONFIG_START(cswat_state::cswat) - +void cswat_state::cswat(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809E, XTAL(18'432'000)/3/4) // HD68A09EP, 1.5MHz? - MCFG_DEVICE_PROGRAM_MAP(cswat_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cswat_state, irq0_line_assert) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cswat_state, nmi_handler, 300) // ? + MC6809E(config, m_maincpu, XTAL(18'432'000)/3/4); // HD68A09EP, 1.5MHz? + m_maincpu->set_addrmap(AS_PROGRAM, &cswat_state::cswat_map); + m_maincpu->set_vblank_int("screen", FUNC(cswat_state::irq0_line_assert)); + m_maincpu->set_periodic_int(FUNC(cswat_state::nmi_handler), attotime::from_hz(300)); // ? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(36*8, 28*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_SCREEN_UPDATE_DRIVER(cswat_state, screen_update_cswat) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(36*8, 28*8); + screen.set_visarea_full(); + screen.set_palette("palette"); + screen.set_screen_update(FUNC(cswat_state::screen_update_cswat)); GFXDECODE(config, "gfxdecode", "palette", gfx_cswat); - MCFG_PALETTE_ADD("palette", 4*256) + PALETTE(config, "palette").set_entries(4*256); /* sound hardware */ // TODO -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/ct486.cpp b/src/mame/drivers/ct486.cpp index c9ed963917e..0cd1035ad38 100644 --- a/src/mame/drivers/ct486.cpp +++ b/src/mame/drivers/ct486.cpp @@ -110,11 +110,12 @@ void ct486_state::ct486_io(address_map &map) // MACHINE DRIVERS //************************************************************************** -MACHINE_CONFIG_START(ct486_state::ct486) - MCFG_DEVICE_ADD("maincpu", I486, XTAL(25'000'000)) - MCFG_DEVICE_PROGRAM_MAP(ct486_map) - MCFG_DEVICE_IO_MAP(ct486_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("cs4031", cs4031_device, int_ack_r) +void ct486_state::ct486(machine_config &config) +{ + I486(config, m_maincpu, XTAL(25'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &ct486_state::ct486_map); + m_maincpu->set_addrmap(AS_IO, &ct486_state::ct486_io); + m_maincpu->set_irq_acknowledge_callback("cs4031", FUNC(cs4031_device::int_ack_r)); CS4031(config, m_cs4031, XTAL(25'000'000), "maincpu", "isa", "bios", "keybc"); // cpu connections @@ -166,29 +167,28 @@ MACHINE_CONFIG_START(ct486_state::ct486) m_isabus->drq5_callback().set(m_cs4031, FUNC(cs4031_device::dreq5_w)); m_isabus->drq6_callback().set(m_cs4031, FUNC(cs4031_device::dreq6_w)); m_isabus->drq7_callback().set(m_cs4031, FUNC(cs4031_device::dreq7_w)); - MCFG_DEVICE_ADD("board1", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "fdcsmc", true) - MCFG_DEVICE_ADD("board2", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "comat", true) - MCFG_DEVICE_ADD("board3", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "ide", true) - MCFG_DEVICE_ADD("board4", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "lpt", true) - MCFG_DEVICE_ADD("isa1", ISA16_SLOT, 0, "isabus", pc_isa16_cards, "svga_et4k", false) - MCFG_DEVICE_ADD("isa2", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false) - MCFG_DEVICE_ADD("isa3", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false) - MCFG_DEVICE_ADD("isa4", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false) - MCFG_DEVICE_ADD("isa5", ISA16_SLOT, 0, "isabus", pc_isa16_cards, nullptr, false) + ISA16_SLOT(config, "board1", 0, "isabus", pc_isa16_cards, "fdcsmc", true); + ISA16_SLOT(config, "board2", 0, "isabus", pc_isa16_cards, "comat", true); + ISA16_SLOT(config, "board3", 0, "isabus", pc_isa16_cards, "ide", true); + ISA16_SLOT(config, "board4", 0, "isabus", pc_isa16_cards, "lpt", true); + ISA16_SLOT(config, "isa1", 0, "isabus", pc_isa16_cards, "svga_et4k", false); + ISA16_SLOT(config, "isa2", 0, "isabus", pc_isa16_cards, nullptr, false); + ISA16_SLOT(config, "isa3", 0, "isabus", pc_isa16_cards, nullptr, false); + ISA16_SLOT(config, "isa4", 0, "isabus", pc_isa16_cards, nullptr, false); + ISA16_SLOT(config, "isa5", 0, "isabus", pc_isa16_cards, nullptr, false); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); // video hardware - MCFG_PALETTE_ADD("palette", 256) // todo: really needed? + PALETTE(config, "palette").set_entries(256); // todo: really needed? /* software lists */ SOFTWARE_LIST(config, "pc_disk_list").set_original("ibm5150"); SOFTWARE_LIST(config, "at_disk_list").set_original("ibm5170"); SOFTWARE_LIST(config, "at_cdrom_list").set_original("ibm5170_cdrom"); -MACHINE_CONFIG_END +} //************************************************************************** diff --git a/src/mame/drivers/cubo.cpp b/src/mame/drivers/cubo.cpp index 64a9790afe3..4d2df329d95 100644 --- a/src/mame/drivers/cubo.cpp +++ b/src/mame/drivers/cubo.cpp @@ -1030,11 +1030,11 @@ static INPUT_PORTS_START( mgprem11 ) INPUT_PORTS_END -MACHINE_CONFIG_START(cubo_state::cubo) - +void cubo_state::cubo(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2) - MCFG_DEVICE_PROGRAM_MAP(cubo_mem) + M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &cubo_state::cubo_mem); ADDRESS_MAP_BANK(config, "overlay").set_map(&amiga_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000); @@ -1050,9 +1050,8 @@ MACHINE_CONFIG_START(cubo_state::cubo) // video hardware pal_video(config); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga_aga) - MCFG_SCREEN_NO_PALETTE + m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga)); + m_screen->set_palette(finder_base::DUMMY_TAG); MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga) @@ -1068,9 +1067,9 @@ MACHINE_CONFIG_START(cubo_state::cubo) paula.mem_read_cb().set(FUNC(amiga_state::chip_ram_r)); paula.int_cb().set(FUNC(amiga_state::paula_int_w)); - MCFG_DEVICE_ADD("cdda", CDDA) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) + CDDA(config, m_cdda); + m_cdda->add_route(0, "lspeaker", 0.50); + m_cdda->add_route(1, "rspeaker", 0.50); /* cia */ // these are setup differently on other amiga drivers (needed for floppy to work) which is correct / why? @@ -1093,7 +1092,7 @@ MACHINE_CONFIG_START(cubo_state::cubo) m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w)); m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w)); m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w)); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/cultures.cpp b/src/mame/drivers/cultures.cpp index 1d9f7de846b..23e0fc58f67 100644 --- a/src/mame/drivers/cultures.cpp +++ b/src/mame/drivers/cultures.cpp @@ -404,37 +404,35 @@ void cultures_state::machine_reset() -MACHINE_CONFIG_START(cultures_state::cultures) - +void cultures_state::cultures(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MCLK/2) /* 8.000 MHz */ - MCFG_DEVICE_PROGRAM_MAP(cultures_map) - MCFG_DEVICE_IO_MAP(cultures_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cultures_state, cultures_interrupt) + Z80(config, m_maincpu, MCLK/2); /* 8.000 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &cultures_state::cultures_map); + m_maincpu->set_addrmap(AS_IO, &cultures_state::cultures_io_map); + m_maincpu->set_vblank_int("screen", FUNC(cultures_state::cultures_interrupt)); ADDRESS_MAP_BANK(config, "vrambank").set_map(&cultures_state::vrambank_map).set_options(ENDIANNESS_LITTLE, 8, 15, 0x4000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cultures_state, screen_update_cultures) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 48*8-1, 0*8, 30*8-1); + screen.set_screen_update(FUNC(cultures_state::screen_update_cultures)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_cultures); - MCFG_PALETTE_ADD("palette", 0x3000/2) - MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0) + PALETTE(config, "palette").set_format(palette_device::xRGBRRRRGGGGBBBB_bit0, 0x3000/2); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, MCLK/8, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) - MCFG_DEVICE_ADDRESS_MAP(0, oki_map) - -MACHINE_CONFIG_END + okim6295_device &oki(OKIM6295(config, "oki", MCLK/8, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified + oki.add_route(ALL_OUTPUTS, "mono", 0.30); + oki.set_addrmap(0, &cultures_state::oki_map); +} /* diff --git a/src/mame/drivers/cupidon.cpp b/src/mame/drivers/cupidon.cpp index 96cdaf46259..d6c776f615b 100644 --- a/src/mame/drivers/cupidon.cpp +++ b/src/mame/drivers/cupidon.cpp @@ -103,24 +103,25 @@ static INPUT_PORTS_START( cupidon ) INPUT_PORTS_END -MACHINE_CONFIG_START(cupidon_state::cupidon) +void cupidon_state::cupidon(machine_config &config) +{ M68340(config, m_maincpu, 16000000); // The access to 3FF00 at the start would suggest this is a 68340 so probably 16 or 25 mhz? m_maincpu->set_addrmap(AS_PROGRAM, &cupidon_state::cupidon_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cupidon_state, screen_update_cupidon) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 0*8, 32*8-1); + screen.set_screen_update(FUNC(cupidon_state::screen_update_cupidon)); + screen.set_palette("palette"); - MCFG_PALETTE_ADD("palette", 0x10000) + PALETTE(config, "palette").set_entries(0x10000); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); /* unknown sound, probably DAC driven using 68340 DMA */ -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/cvicny.cpp b/src/mame/drivers/cvicny.cpp index 12a03f7ee71..7d5dca51587 100644 --- a/src/mame/drivers/cvicny.cpp +++ b/src/mame/drivers/cvicny.cpp @@ -135,14 +135,15 @@ static INPUT_PORTS_START( cvicny ) INPUT_PORTS_END -MACHINE_CONFIG_START(cvicny_state::cvicny) +void cvicny_state::cvicny(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(2'000'000)) - MCFG_DEVICE_PROGRAM_MAP(cvicny_mem) + Z80(config, m_maincpu, XTAL(2'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &cvicny_state::cvicny_mem); /* video hardware */ config.set_default_layout(layout_cvicny); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( cvicny ) diff --git a/src/mame/drivers/cvs.cpp b/src/mame/drivers/cvs.cpp index 66c87ae485f..f5b527639a0 100644 --- a/src/mame/drivers/cvs.cpp +++ b/src/mame/drivers/cvs.cpp @@ -376,7 +376,7 @@ READ8_MEMBER(cvs_state::cvs_speech_command_r) { /* FIXME: this was by observation on board ??? * -bit 7 is TMS status (active LO) */ - return ((m_tms5110->ctl_r(space, 0) ^ 1) << 7) | (m_soundlatch->read(space, 0) & 0x7f); + return ((m_tms5110->ctl_r(space, 0) ^ 1) << 7) | (m_soundlatch->read() & 0x7f); } @@ -432,7 +432,7 @@ WRITE8_MEMBER(cvs_state::audio_command_w) { LOG(("data %02x\n", data)); /* cause interrupt on audio CPU if bit 7 set */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); cvs_slave_cpu_interrupt(data & 0x80 ? 1 : 0); } diff --git a/src/mame/drivers/cxhumax.cpp b/src/mame/drivers/cxhumax.cpp index c256cc23952..3f990dd8a32 100644 --- a/src/mame/drivers/cxhumax.cpp +++ b/src/mame/drivers/cxhumax.cpp @@ -1055,26 +1055,27 @@ void cxhumax_state::machine_reset() memset(m_gxa_cmd_regs,0,sizeof(m_gxa_cmd_regs)); } -MACHINE_CONFIG_START(cxhumax_state::cxhumax) - MCFG_DEVICE_ADD("maincpu", ARM920T, 180000000) // CX24175 (RevC up?) - MCFG_DEVICE_PROGRAM_MAP(cxhumax_map) +void cxhumax_state::cxhumax(machine_config &config) +{ + ARM920T(config, m_maincpu, 180000000); // CX24175 (RevC up?) + m_maincpu->set_addrmap(AS_PROGRAM, &cxhumax_state::cxhumax_map); INTEL_28F320J3D(config, "flash"); I2CMEM(config, "eeprom", 0).set_data_size(0x2000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(1920, 1080) - MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 1080-1) - MCFG_SCREEN_UPDATE_DRIVER(cxhumax_state, screen_update_cxhumax) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(1920, 1080); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(cxhumax_state::screen_update_cxhumax)); PALETTE(config, "palette", palette_device::MONOCHROME); GENERIC_TERMINAL(config, m_terminal, 0); -MACHINE_CONFIG_END +} ROM_START( hxhdci2k ) ROM_REGION( 0x400000, "flash", 0 ) diff --git a/src/mame/drivers/cyberbal.cpp b/src/mame/drivers/cyberbal.cpp index 120ab37491d..dc1bb096aa3 100644 --- a/src/mame/drivers/cyberbal.cpp +++ b/src/mame/drivers/cyberbal.cpp @@ -487,11 +487,11 @@ void cyberbal_state::cyberbalt(machine_config &config) SLAPSTIC(config, "slapstic", 116, true); } -MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p) - +void cyberbal2p_state::cyberbal2p(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2) - MCFG_DEVICE_PROGRAM_MAP(cyberbal2p_map) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2); + m_maincpu->set_addrmap(AS_PROGRAM, &cyberbal2p_state::cyberbal2p_map); EEPROM_2816(config, "eeprom").lock_after_write(true); @@ -509,14 +509,14 @@ MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p) m_mob->set_config(cyberbal2p_state::s_mob_config); m_mob->set_gfxdecode("gfxdecode"); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(cyberbal2p_state, screen_update_cyberbal2p) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cyberbal2p_state, video_int_write_line)) + m_screen->set_raw(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240); + m_screen->set_screen_update(FUNC(cyberbal2p_state::screen_update_cyberbal2p)); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(FUNC(cyberbal2p_state::video_int_write_line)); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -525,7 +525,7 @@ MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p) m_jsa->main_int_cb().set_inputline(m_maincpu, M68K_IRQ_3); m_jsa->test_read_cb().set_ioport("IN2").bit(15); m_jsa->add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/cybertnk.cpp b/src/mame/drivers/cybertnk.cpp index bbdc9169587..fa85d13f0d3 100644 --- a/src/mame/drivers/cybertnk.cpp +++ b/src/mame/drivers/cybertnk.cpp @@ -513,7 +513,7 @@ WRITE8_MEMBER( cybertnk_state::sound_cmd_w ) } else if (offset == 1) { - m_soundlatch->write(space, offset, data & 0xff); + m_soundlatch->write(data & 0xff); } } @@ -819,38 +819,39 @@ GFXDECODE_END */ -MACHINE_CONFIG_START(cybertnk_state::cybertnk) - MCFG_DEVICE_ADD("maincpu", M68000,XTAL(20'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(master_mem) - MCFG_DEVICE_VBLANK_INT_DRIVER("lscreen", cybertnk_state, irq1_line_assert) +void cybertnk_state::cybertnk(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(20'000'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &cybertnk_state::master_mem); + m_maincpu->set_vblank_int("lscreen", FUNC(cybertnk_state::irq1_line_assert)); - MCFG_DEVICE_ADD("slave", M68000,XTAL(20'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(slave_mem) - MCFG_DEVICE_VBLANK_INT_DRIVER("lscreen", cybertnk_state, irq3_line_hold) + m68000_device &slave(M68000(config, "slave", XTAL(20'000'000)/2)); + slave.set_addrmap(AS_PROGRAM, &cybertnk_state::slave_mem); + slave.set_vblank_int("lscreen", FUNC(cybertnk_state::irq3_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80,XTAL(3'579'545)) - MCFG_DEVICE_PROGRAM_MAP(sound_mem) + Z80(config, m_audiocpu, XTAL(3'579'545)); + m_audiocpu->set_addrmap(AS_PROGRAM, &cybertnk_state::sound_mem); config.m_minimum_quantum = attotime::from_hz(60000); //arbitrary value, needed to get the communication to work /* video hardware */ config.set_default_layout(layout_dualhsxs); - MCFG_SCREEN_ADD("lscreen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cybertnk_state, screen_update_cybertnk_left) - MCFG_SCREEN_PALETTE(m_palette) - - MCFG_SCREEN_ADD("rscreen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cybertnk_state, screen_update_cybertnk_right) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER)); + lscreen.set_refresh_hz(60); + lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + lscreen.set_size(32*8, 32*8); + lscreen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1); + lscreen.set_screen_update(FUNC(cybertnk_state::screen_update_cybertnk_left)); + lscreen.set_palette(m_palette); + + screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); + rscreen.set_refresh_hz(60); + rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + rscreen.set_size(32*8, 32*8); + rscreen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1); + rscreen.set_screen_update(FUNC(cybertnk_state::screen_update_cybertnk_right)); + rscreen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cybertnk); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x4000); @@ -862,13 +863,11 @@ MACHINE_CONFIG_START(cybertnk_state::cybertnk) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0, HOLD_LINE); - // Splited output per chip - MCFG_DEVICE_ADD("ym1", Y8950, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) + // Split output per chip + Y8950(config, "ym1", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "lspeaker", 1.0); - MCFG_DEVICE_ADD("ym2", Y8950, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) -MACHINE_CONFIG_END + Y8950(config, "ym2", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "rspeaker", 1.0); +} /*************************************************************************** diff --git a/src/mame/drivers/cybstorm.cpp b/src/mame/drivers/cybstorm.cpp index ebf8d211bfc..17ec3230508 100644 --- a/src/mame/drivers/cybstorm.cpp +++ b/src/mame/drivers/cybstorm.cpp @@ -222,11 +222,11 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(cybstorm_state::round2) - +void cybstorm_state::round2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68EC020, ATARI_CLOCK_14MHz) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68EC020(config, m_maincpu, ATARI_CLOCK_14MHz); + m_maincpu->set_addrmap(AS_PROGRAM, &cybstorm_state::main_map); EEPROM_2816(config, "eeprom").lock_after_write(true); @@ -245,15 +245,14 @@ MACHINE_CONFIG_START(cybstorm_state::round2) GFXDECODE(config, m_gfxdecode, "palette", gfx_cybstorm); PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 32768); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_palette("palette"); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240) - - MCFG_SCREEN_UPDATE_DRIVER(cybstorm_state, screen_update_cybstorm) -MACHINE_CONFIG_END + m_screen->set_raw(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(cybstorm_state::screen_update_cybstorm)); +} void cybstorm_state::cybstorm(machine_config &config) diff --git a/src/mame/drivers/cyclemb.cpp b/src/mame/drivers/cyclemb.cpp index a41c93dca08..7c5e4a10c77 100644 --- a/src/mame/drivers/cyclemb.cpp +++ b/src/mame/drivers/cyclemb.cpp @@ -404,7 +404,7 @@ WRITE8_MEMBER(cyclemb_state::cyclemb_bankswitch_w) #if 0 WRITE8_MEMBER(cyclemb_state::sound_cmd_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } #endif @@ -418,7 +418,7 @@ READ8_MEMBER(cyclemb_state::mcu_status_r) WRITE8_MEMBER(cyclemb_state::sound_cmd_w)//actually ciom { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } #endif @@ -561,7 +561,7 @@ WRITE8_MEMBER( cyclemb_state::skydest_i8741_0_w ) m_mcu[0].txd = data; m_mcu[1].rst = 0; - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); if(m_mcu[0].txd == 0x41) m_mcu[0].state = 1; @@ -627,7 +627,7 @@ READ8_MEMBER(cyclemb_state::skydest_i8741_1_r) if(m_mcu[1].rst == 1) return 0x40; - return m_soundlatch->read(space,0); + return m_soundlatch->read(); } WRITE8_MEMBER(cyclemb_state::skydest_i8741_1_w) @@ -639,7 +639,7 @@ WRITE8_MEMBER(cyclemb_state::skydest_i8741_1_w) m_mcu[1].rst = 1; } //else - // m_soundlatch->clear_w(space, 0, 0); + // m_soundlatch->clear_w(); } @@ -976,26 +976,27 @@ static GFXDECODE_START( gfx_cyclemb ) GFXDECODE_ENTRY( "sprite_data", 0, spritelayout_32x32, 0x00, 0x40 ) GFXDECODE_END -MACHINE_CONFIG_START(cyclemb_state::cyclemb) +void cyclemb_state::cyclemb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'000'000)/3) // Z8400BPS - MCFG_DEVICE_PROGRAM_MAP(cyclemb_map) - MCFG_DEVICE_IO_MAP(cyclemb_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cyclemb_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(18'000'000)/3); // Z8400BPS + m_maincpu->set_addrmap(AS_PROGRAM, &cyclemb_state::cyclemb_map); + m_maincpu->set_addrmap(AS_IO, &cyclemb_state::cyclemb_io); + m_maincpu->set_vblank_int("screen", FUNC(cyclemb_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'000'000)/6) - MCFG_DEVICE_PROGRAM_MAP(cyclemb_sound_map) - MCFG_DEVICE_IO_MAP(cyclemb_sound_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(cyclemb_state, irq0_line_hold, 60) + Z80(config, m_audiocpu, XTAL(18'000'000)/6); + m_audiocpu->set_addrmap(AS_PROGRAM, &cyclemb_state::cyclemb_sound_map); + m_audiocpu->set_addrmap(AS_IO, &cyclemb_state::cyclemb_sound_io); + m_audiocpu->set_periodic_int(FUNC(cyclemb_state::irq0_line_hold), attotime::from_hz(60)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cyclemb_state, screen_update_cyclemb) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(cyclemb_state::screen_update_cyclemb)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cyclemb); PALETTE(config, m_palette, FUNC(cyclemb_state::cyclemb_palette), 256); @@ -1010,20 +1011,20 @@ MACHINE_CONFIG_START(cyclemb_state::cyclemb) // ymsnd.irq_handler().set(FUNC(cyclemb_state::ym_irq)); // ymsnd.port_b_read_callback().set_ioport("UNK"); ymsnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(cyclemb_state::skydest) +void cyclemb_state::skydest(machine_config &config) +{ cyclemb(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(skydest_io) + m_maincpu->set_addrmap(AS_IO, &cyclemb_state::skydest_io); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(2*8, 34*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cyclemb_state, screen_update_skydest) + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_size(64*8, 32*8); + screen.set_visarea(2*8, 34*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(cyclemb_state::screen_update_skydest)); -// MCFG_PALETTE_INIT_OWNER(cyclemb_state,skydest) -MACHINE_CONFIG_END +// m_palette->set_init(FUNC(cyclemb_state::skydest)); +} /*************************************************************************** diff --git a/src/mame/drivers/cz101.cpp b/src/mame/drivers/cz101.cpp index 8c4de1be0fd..3ece028eed4 100644 --- a/src/mame/drivers/cz101.cpp +++ b/src/mame/drivers/cz101.cpp @@ -381,7 +381,8 @@ void cz101_state::machine_reset() // MACHINE DEFINTIONS //************************************************************************** -MACHINE_CONFIG_START( cz101_state::cz101 ) +void cz101_state::cz101(machine_config &config) +{ UPD7810(config, m_maincpu, 10_MHz_XTAL); // actually 7811, but internal ROM disabled m_maincpu->set_addrmap(AS_PROGRAM, &cz101_state::maincpu_map); m_maincpu->pa_in_cb().set(FUNC(cz101_state::port_a_r)); @@ -392,13 +393,13 @@ MACHINE_CONFIG_START( cz101_state::cz101 ) CLOCK(config, "midi_clock", 2_MHz_XTAL)/*.signal_handler().set(m_maincpu, FUNC(upd7810_device::sck_w))*/; // not supported yet // video hardware - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(6*16+1, 19) - MCFG_SCREEN_VISIBLE_AREA(0, 6*16, 0, 19-1) - MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(6*16+1, 19); + screen.set_visarea_full(); + screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(cz101_state::cz101_palette), 3); @@ -407,7 +408,7 @@ MACHINE_CONFIG_START( cz101_state::cz101 ) m_hd44780->set_pixel_update_cb(FUNC(cz101_state::lcd_pixel_update), this); config.set_default_layout(layout_cz101); -MACHINE_CONFIG_END +} //************************************************************************** diff --git a/src/mame/drivers/d6800.cpp b/src/mame/drivers/d6800.cpp index 005868fdd12..fac7892b7b5 100644 --- a/src/mame/drivers/d6800.cpp +++ b/src/mame/drivers/d6800.cpp @@ -408,17 +408,17 @@ QUICKLOAD_LOAD_MEMBER( d6800_state, d6800 ) MACHINE_CONFIG_START(d6800_state::d6800) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M6800, XTAL(4'000'000)/4) - MCFG_DEVICE_PROGRAM_MAP(d6800_map) + M6800(config, m_maincpu, XTAL(4'000'000)/4); + m_maincpu->set_addrmap(AS_PROGRAM, &d6800_state::d6800_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_SIZE(64, 32) - MCFG_SCREEN_VISIBLE_AREA(0, 63, 0, 31) - MCFG_SCREEN_UPDATE_DRIVER(d6800_state, screen_update_d6800) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(25)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_size(64, 32); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(d6800_state::screen_update_d6800)); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(25)); + screen.set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); diff --git a/src/mame/drivers/d9final.cpp b/src/mame/drivers/d9final.cpp index c91d37e472a..7590a51ce4b 100644 --- a/src/mame/drivers/d9final.cpp +++ b/src/mame/drivers/d9final.cpp @@ -302,37 +302,36 @@ void d9final_state::machine_start() membank("bank1")->set_entry(0); } -MACHINE_CONFIG_START(d9final_state::d9final) +void d9final_state::d9final(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 24000000/4)/* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(d9final_map) - MCFG_DEVICE_IO_MAP(d9final_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", d9final_state, irq0_line_hold) + Z80(config, m_maincpu, 24000000/4); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &d9final_state::d9final_map); + m_maincpu->set_addrmap(AS_IO, &d9final_state::d9final_io); + m_maincpu->set_vblank_int("screen", FUNC(d9final_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // Sharp LH5116D-10 + battery /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(d9final_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 512-1, 16, 256-16-1); + screen.set_screen_update(FUNC(d9final_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_d9final); PALETTE(config, "palette", palette_device::BLACK).set_format(palette_device::xBRG_444, 0x400); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 0.5); - //MCFG_DEVICE_ADD("essnd", ES8712, 24000000/3) // clock unknown - //MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + //ES8712(config, "essnd", 24000000/3).add_route(ALL_OUTPUTS, "mono", 1.0); // clock unknown RTC62421(config, "rtc", XTAL(32'768)); // internal oscillator -MACHINE_CONFIG_END +} ROM_START( d9final ) diff --git a/src/mame/drivers/dai.cpp b/src/mame/drivers/dai.cpp index e06e90ba308..9791381e4c0 100644 --- a/src/mame/drivers/dai.cpp +++ b/src/mame/drivers/dai.cpp @@ -187,12 +187,13 @@ static GFXDECODE_START( gfx_dai ) GFXDECODE_END /* machine definition */ -MACHINE_CONFIG_START(dai_state::dai) +void dai_state::dai(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8080, 2000000) - MCFG_DEVICE_PROGRAM_MAP(dai_mem) - MCFG_DEVICE_IO_MAP(dai_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(dai_state,int_ack) + I8080(config, m_maincpu, 2000000); + m_maincpu->set_addrmap(AS_PROGRAM, &dai_state::dai_mem); + m_maincpu->set_addrmap(AS_IO, &dai_state::dai_io); + m_maincpu->set_irq_acknowledge_callback(FUNC(dai_state::int_ack)); config.m_minimum_quantum = attotime::from_hz(60); PIT8253(config, m_pit, 0); @@ -206,13 +207,13 @@ MACHINE_CONFIG_START(dai_state::dai) I8255(config, "ppi8255"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(1056, 542) - MCFG_SCREEN_VISIBLE_AREA(0, 1056-1, 0, 302-1) - MCFG_SCREEN_UPDATE_DRIVER(dai_state, screen_update_dai) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(1056, 542); + screen.set_visarea(0, 1056-1, 0, 302-1); + screen.set_screen_update(FUNC(dai_state::screen_update_dai)); + screen.set_palette(m_palette); GFXDECODE(config, "gfxdecode", m_palette, gfx_dai); PALETTE(config, m_palette, FUNC(dai_state::dai_palette), ARRAY_LENGTH(s_palette)); @@ -241,7 +242,7 @@ MACHINE_CONFIG_START(dai_state::dai) /* software lists */ SOFTWARE_LIST(config, "cass_list").set_original("dai_cass"); -MACHINE_CONFIG_END +} ROM_START(dai) diff --git a/src/mame/drivers/dambustr.cpp b/src/mame/drivers/dambustr.cpp index 42b6fdc1f75..9c185d0b378 100644 --- a/src/mame/drivers/dambustr.cpp +++ b/src/mame/drivers/dambustr.cpp @@ -261,10 +261,11 @@ void dambustr_state::init_dambustr() -MACHINE_CONFIG_START(dambustr_state::dambustr) +void dambustr_state::dambustr(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 18432000/6) /* 3.072 MHz */ - MCFG_DEVICE_PROGRAM_MAP(dambustr_map) + Z80(config, m_maincpu, 18432000/6); /* 3.072 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &dambustr_state::dambustr_map); MCFG_MACHINE_RESET_OVERRIDE(dambustr_state,galaxold) @@ -276,12 +277,12 @@ MACHINE_CONFIG_START(dambustr_state::dambustr) WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(16000.0/132/2) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dambustr_state, screen_update_dambustr) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(16000.0/132/2); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(dambustr_state::screen_update_dambustr)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dambustr); PALETTE(config, m_palette, FUNC(dambustr_state::dambustr_palette), 32+2+64+8); // 32 for the characters, 2 for the bullets, 64 for the stars, 8 for the background @@ -292,7 +293,7 @@ MACHINE_CONFIG_START(dambustr_state::dambustr) SPEAKER(config, "speaker").front_center(); galaxian_audio(config); -MACHINE_CONFIG_END +} ROM_START( dambustr ) diff --git a/src/mame/drivers/darkmist.cpp b/src/mame/drivers/darkmist.cpp index 36306862d63..58cd566b3e6 100644 --- a/src/mame/drivers/darkmist.cpp +++ b/src/mame/drivers/darkmist.cpp @@ -239,23 +239,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline) -MACHINE_CONFIG_START(darkmist_state::darkmist) +void darkmist_state::darkmist(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(memmap) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) + Z80(config, m_maincpu, 4000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &darkmist_state::memmap); + m_maincpu->set_addrmap(AS_OPCODES, &darkmist_state::decrypted_opcodes_map); TIMER(config, "scantimer").configure_scanline(FUNC(darkmist_state::scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("t5182", T5182, 0) + T5182(config, m_t5182, 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 16, 256-16-1); + m_screen->set_screen_update(FUNC(darkmist_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_darkmist); PALETTE(config, m_palette, FUNC(darkmist_state::darkmist_palette)); @@ -269,7 +270,7 @@ MACHINE_CONFIG_START(darkmist_state::darkmist) ymsnd.irq_handler().set(m_t5182, FUNC(t5182_device::ym2151_irq_handler)); ymsnd.add_route(0, "mono", 1.0); ymsnd.add_route(1, "mono", 1.0); -MACHINE_CONFIG_END +} ROM_START( darkmist ) ROM_REGION( 0x18000, "maincpu", 0 ) diff --git a/src/mame/drivers/darkseal.cpp b/src/mame/drivers/darkseal.cpp index 836a9e017b0..d812725b8cd 100644 --- a/src/mame/drivers/darkseal.cpp +++ b/src/mame/drivers/darkseal.cpp @@ -201,33 +201,32 @@ GFXDECODE_END /******************************************************************************/ -MACHINE_CONFIG_START(darkseal_state::darkseal) - +void darkseal_state::darkseal(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(24'000'000)/2) /* Custom chip 59 */ - MCFG_DEVICE_PROGRAM_MAP(darkseal_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", darkseal_state, irq6_line_assert)/* VBL */ + M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 */ + m_maincpu->set_addrmap(AS_PROGRAM, &darkseal_state::darkseal_map); + m_maincpu->set_vblank_int("screen", FUNC(darkseal_state::irq6_line_assert)); /* VBL */ H6280(config, m_audiocpu, XTAL(32'220'000)/4); /* Custom chip 45, Audio section crystal is 32.220 MHz */ m_audiocpu->set_addrmap(AS_PROGRAM, &darkseal_state::sound_map); m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(darkseal_state, screen_update) - MCFG_SCREEN_PALETTE("colors") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(529)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(darkseal_state::screen_update)); + screen.set_palette(m_palette); GFXDECODE(config, "gfxdecode", m_palette, gfx_darkseal); - MCFG_PALETTE_ADD(m_palette, 2048) + PALETTE(config, m_palette).set_entries(2048); - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x64); m_deco_tilegen[0]->set_pf2_size(DECO_64x64); // both these tilemaps need to be twice the y size of usual! m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -241,7 +240,6 @@ MACHINE_CONFIG_START(darkseal_state::darkseal) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -264,20 +262,17 @@ MACHINE_CONFIG_START(darkseal_state::darkseal) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); - MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45) + YM2203(config, "ym1", XTAL(32'220'000)/8).add_route(ALL_OUTPUTS, "mono", 0.45); ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9)); ym2.irq_handler().set_inputline(m_audiocpu, 1); // IRQ2 ym2.add_route(0, "mono", 0.55); ym2.add_route(1, "mono", 0.55); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, "oki2", XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); +} /******************************************************************************/ diff --git a/src/mame/drivers/daruma.cpp b/src/mame/drivers/daruma.cpp index 2a4946ba9fb..1ac8fd665f1 100644 --- a/src/mame/drivers/daruma.cpp +++ b/src/mame/drivers/daruma.cpp @@ -118,17 +118,17 @@ static INPUT_PORTS_START( daruma ) INPUT_PORTS_END -MACHINE_CONFIG_START(daruma_state::daruma) +void daruma_state::daruma(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I80C32,11059200) //verified on pcb - MCFG_DEVICE_PROGRAM_MAP(mem_prg) - MCFG_DEVICE_IO_MAP(mem_io) + I80C32(config, m_maincpu, 11059200); //verified on pcb + m_maincpu->set_addrmap(AS_PROGRAM, &daruma_state::mem_prg); + m_maincpu->set_addrmap(AS_IO, &daruma_state::mem_io); // TODO: ports /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(0, "mono", 1.00) + SPEAKER_SOUND(config, m_speaker).add_route(0, "mono", 1.00); /* TODO: config.set_default_layout(layout_daruma); @@ -136,9 +136,9 @@ MACHINE_CONFIG_START(daruma_state::daruma) Motors: MTA011 http://pdf.datasheetcatalog.com/datasheet/Shindengen/mXstzvq.pdf - The motor controller suposedly is used to cut the paper strip out after finishing printing something. + The motor controller supposedly is used to cut the paper strip out after finishing printing something. */ -MACHINE_CONFIG_END +} ROM_START( ds348 ) ROM_REGION( 0x10000, "maincpu", 0 ) diff --git a/src/mame/drivers/dassault.cpp b/src/mame/drivers/dassault.cpp index 6addb4cf626..6dac523c34a 100644 --- a/src/mame/drivers/dassault.cpp +++ b/src/mame/drivers/dassault.cpp @@ -522,16 +522,16 @@ void dassault_state::machine_reset() m_priority = 0; } -MACHINE_CONFIG_START(dassault_state::dassault) - +void dassault_state::dassault(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/2) /* 14MHz - Accurate */ - MCFG_DEVICE_PROGRAM_MAP(dassault_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dassault_state, irq4_line_assert) + M68000(config, m_maincpu, XTAL(28'000'000)/2); /* 14MHz - Accurate */ + m_maincpu->set_addrmap(AS_PROGRAM, &dassault_state::dassault_map); + m_maincpu->set_vblank_int("screen", FUNC(dassault_state::irq4_line_assert)); - MCFG_DEVICE_ADD("sub", M68000, XTAL(28'000'000)/2) /* 14MHz - Accurate */ - MCFG_DEVICE_PROGRAM_MAP(dassault_sub_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dassault_state, irq5_line_assert) + M68000(config, m_subcpu, XTAL(28'000'000)/2); /* 14MHz - Accurate */ + m_subcpu->set_addrmap(AS_PROGRAM, &dassault_state::dassault_sub_map); + m_subcpu->set_vblank_int("screen", FUNC(dassault_state::irq5_line_assert)); H6280(config, m_audiocpu, XTAL(32'220'000)/8); /* Accurate */ m_audiocpu->set_addrmap(AS_PROGRAM, &dassault_state::sound_map); @@ -546,18 +546,17 @@ MACHINE_CONFIG_START(dassault_state::dassault) sharedram.intr_callback().set_inputline("sub", M68K_IRQ_6); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248) // same as robocop2(cninja.cpp)? verify this from real pcb. - MCFG_SCREEN_UPDATE_DRIVER(dassault_state, screen_update_dassault) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248); // same as robocop2(cninja.cpp)? verify this from real pcb. + screen.set_screen_update(FUNC(dassault_state::screen_update_dassault)); GFXDECODE(config, "gfxdecode", m_palette, gfx_dassault); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 4096); - MCFG_DEVICE_ADD("spriteram1", BUFFERED_SPRITERAM16) - MCFG_DEVICE_ADD("spriteram2", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram[0]); + BUFFERED_SPRITERAM16(config, m_spriteram[1]); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -573,7 +572,6 @@ MACHINE_CONFIG_START(dassault_state::dassault) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -603,9 +601,9 @@ MACHINE_CONFIG_START(dassault_state::dassault) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); // IRQ1 - MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) + ym2203_device &ym1(YM2203(config, "ym1", XTAL(32'220'000)/8)); + ym1.add_route(ALL_OUTPUTS, "lspeaker", 0.40); + ym1.add_route(ALL_OUTPUTS, "rspeaker", 0.40); ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9)); ym2.irq_handler().set_inputline(m_audiocpu, 1); @@ -613,14 +611,14 @@ MACHINE_CONFIG_START(dassault_state::dassault) ym2.add_route(0, "lspeaker", 0.45); ym2.add_route(1, "rspeaker", 0.45); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) // verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) + okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH)); // verified + oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.50); + oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.50); - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH) // verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) -MACHINE_CONFIG_END + OKIM6295(config, m_oki2, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH); // verified + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.25); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.25); +} /**********************************************************************************/ diff --git a/src/mame/drivers/datum.cpp b/src/mame/drivers/datum.cpp index d774b737b66..6b957acd9a1 100644 --- a/src/mame/drivers/datum.cpp +++ b/src/mame/drivers/datum.cpp @@ -182,10 +182,11 @@ WRITE8_MEMBER( datum_state::pb_w ) } -MACHINE_CONFIG_START(datum_state::datum) +void datum_state::datum(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M6802, XTAL(4'000'000)) // internally divided to 1 MHz - MCFG_DEVICE_PROGRAM_MAP(datum_mem) + M6802(config, m_maincpu, XTAL(4'000'000)); // internally divided to 1 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &datum_state::datum_mem); /* video hardware */ config.set_default_layout(layout_datum); @@ -202,8 +203,8 @@ MACHINE_CONFIG_START(datum_state::datum) pia2.irqa_handler().set_inputline("maincpu", M6802_IRQ_LINE); pia2.irqb_handler().set_inputline("maincpu", M6802_IRQ_LINE); - MCFG_DEVICE_ADD("acia", ACIA6850, 0) // rs232 -MACHINE_CONFIG_END + ACIA6850(config, "acia", 0); // rs232 +} /* ROM definition */ diff --git a/src/mame/drivers/dblcrown.cpp b/src/mame/drivers/dblcrown.cpp index b4169a16577..55eab934533 100644 --- a/src/mame/drivers/dblcrown.cpp +++ b/src/mame/drivers/dblcrown.cpp @@ -599,24 +599,24 @@ It needs at least 64 instances because 0xa05b will be eventually nuked by the vb } -MACHINE_CONFIG_START(dblcrown_state::dblcrown) - +void dblcrown_state::dblcrown(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(dblcrown_map) - MCFG_DEVICE_IO_MAP(dblcrown_io) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &dblcrown_state::dblcrown_map); + m_maincpu->set_addrmap(AS_IO, &dblcrown_state::dblcrown_io); TIMER(config, "scantimer").configure_scanline(FUNC(dblcrown_state::dblcrown_irq_scanline), "screen", 0, 1); WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_msec(1000)); /* 1000 ms. (minimal of MAX693A watchdog long timeout period with internal oscillator) */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(dblcrown_state, screen_update) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_screen_update(FUNC(dblcrown_state::screen_update)); + screen.set_size(64*8, 64*8); + screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dblcrown); @@ -632,7 +632,7 @@ MACHINE_CONFIG_START(dblcrown_state::dblcrown) /* sound hardware */ SPEAKER(config, "mono").front_center(); YMZ284(config, "ymz", SND_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.75); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp index dc7ae8b18f6..c38f2a3f567 100644 --- a/src/mame/drivers/dblewing.cpp +++ b/src/mame/drivers/dblewing.cpp @@ -352,17 +352,17 @@ DECOSPR_PRIORITY_CB_MEMBER(dblewing_state::pri_callback) return 0; // sprites always on top? } -MACHINE_CONFIG_START(dblewing_state::dblewing) - +void dblewing_state::dblewing(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/2) /* DE102 */ - MCFG_DEVICE_PROGRAM_MAP(dblewing_map) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dblewing_state, irq6_line_hold) + M68000(config, m_maincpu, XTAL(28'000'000)/2); /* DE102 */ + m_maincpu->set_addrmap(AS_PROGRAM, &dblewing_state::dblewing_map); + m_maincpu->set_addrmap(AS_OPCODES, &dblewing_state::decrypted_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(dblewing_state::irq6_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'220'000)/9) - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_IO_MAP(sound_io) + Z80(config, m_audiocpu, XTAL(32'220'000)/9); + m_audiocpu->set_addrmap(AS_PROGRAM, &dblewing_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &dblewing_state::sound_io); INPUT_MERGER_ANY_HIGH(config, "soundirq").output_handler().set_inputline(m_audiocpu, 0); @@ -370,19 +370,18 @@ MACHINE_CONFIG_START(dblewing_state::dblewing) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58.443) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dblewing_state, screen_update_dblewing) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58.443); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(dblewing_state::screen_update_dblewing)); + screen.set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xBGR_444, 4096); GFXDECODE(config, "gfxdecode", "palette", gfx_dblewing); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); @@ -418,9 +417,8 @@ MACHINE_CONFIG_START(dblewing_state::dblewing) ymsnd.irq_handler().set("soundirq", FUNC(input_merger_device::in_w<1>)); ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'000'000)/28, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + OKIM6295(config, "oki", XTAL(28'000'000)/28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00); +} diff --git a/src/mame/drivers/dbz.cpp b/src/mame/drivers/dbz.cpp index 392a6f667b7..aba4c725577 100644 --- a/src/mame/drivers/dbz.cpp +++ b/src/mame/drivers/dbz.cpp @@ -97,7 +97,7 @@ WRITE16_MEMBER(dbz_state::dbzcontrol_w) WRITE16_MEMBER(dbz_state::dbz_sound_command_w) { - m_soundlatch->write(space, 0, data >> 8); + m_soundlatch->write(data >> 8); } WRITE16_MEMBER(dbz_state::dbz_sound_cause_nmi) @@ -324,25 +324,25 @@ void dbz_state::machine_reset() m_control = 0; } -MACHINE_CONFIG_START(dbz_state::dbz) - +void dbz_state::dbz(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 16000000) - MCFG_DEVICE_PROGRAM_MAP(dbz_map) + M68000(config, m_maincpu, 16000000); + m_maincpu->set_addrmap(AS_PROGRAM, &dbz_state::dbz_map); TIMER(config, "scantimer").configure_scanline(FUNC(dbz_state::dbz_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) - MCFG_DEVICE_PROGRAM_MAP(dbz_sound_map) - MCFG_DEVICE_IO_MAP(dbz_sound_io_map) + Z80(config, m_audiocpu, 4000000); + m_audiocpu->set_addrmap(AS_PROGRAM, &dbz_state::dbz_sound_map); + m_audiocpu->set_addrmap(AS_IO, &dbz_state::dbz_sound_io_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(55) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 40*8) - MCFG_SCREEN_VISIBLE_AREA(0, 48*8-1, 0, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dbz_state, screen_update_dbz) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(55); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 40*8); + screen.set_visarea(0, 48*8-1, 0, 32*8-1); + screen.set_screen_update(FUNC(dbz_state::screen_update_dbz)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_dbz); @@ -382,10 +382,10 @@ MACHINE_CONFIG_START(dbz_state::dbz) ymsnd.add_route(0, "lspeaker", 1.0); ymsnd.add_route(1, "rspeaker", 1.0); - MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) -MACHINE_CONFIG_END + okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH)); + oki.add_route(ALL_OUTPUTS, "lspeaker", 1.0); + oki.add_route(ALL_OUTPUTS, "rspeaker", 1.0); +} /**********************************************************************************/ diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp index e4c43a85cf1..062def2d2e3 100644 --- a/src/mame/drivers/dccons.cpp +++ b/src/mame/drivers/dccons.cpp @@ -593,7 +593,8 @@ void dc_cons_state::gdrom_config(device_t *device) MCFG_SOUND_ROUTE(1, "^^aica", 1.0) } -MACHINE_CONFIG_START(dc_cons_state::dc) +void dc_cons_state::dc(machine_config &config) +{ /* basic machine hardware */ SH4LE(config, m_maincpu, CPU_CLOCK); m_maincpu->set_md(0, 1); @@ -611,8 +612,8 @@ MACHINE_CONFIG_START(dc_cons_state::dc) TIMER(config, "scantimer").configure_scanline(FUNC(dc_state::dc_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("soundcpu", ARM7, ((XTAL(33'868'800)*2)/3)/8) // AICA bus clock is 2/3rds * 33.8688. ARM7 gets 1 bus cycle out of each 8. - MCFG_DEVICE_PROGRAM_MAP(dc_audio_map) + ARM7(config, m_soundcpu, ((XTAL(33'868'800)*2)/3)/8); // AICA bus clock is 2/3rds * 33.8688. ARM7 gets 1 bus cycle out of each 8. + m_soundcpu->set_addrmap(AS_PROGRAM, &dc_cons_state::dc_audio_map); MCFG_MACHINE_RESET_OVERRIDE(dc_cons_state,dc_console ) @@ -658,10 +659,10 @@ MACHINE_CONFIG_START(dc_cons_state::dc) dcctrl3.set_port_tag<7>("P4:A5"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(13458568*2, 857, 0, 640, 524, 0, 480) /* TODO: where pclk actually comes? */ - MCFG_SCREEN_UPDATE_DEVICE("powervr2", powervr2_device, screen_update) - MCFG_PALETTE_ADD("palette", 0x1000) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(13458568*2, 857, 0, 640, 524, 0, 480); /* TODO: where pclk actually comes? */ + screen.set_screen_update("powervr2", FUNC(powervr2_device::screen_update)); + PALETTE(config, "palette").set_entries(0x1000); POWERVR2(config, m_powervr2, 0); m_powervr2->irq_callback().set(FUNC(dc_state::pvr_irq)); @@ -680,13 +681,13 @@ MACHINE_CONFIG_START(dc_cons_state::dc) ATA_INTERFACE(config, m_ata, 0); m_ata->irq_handler().set(FUNC(dc_cons_state::ata_interrupt)); - MCFG_DEVICE_MODIFY("ata:0") - MCFG_SLOT_OPTION_ADD("gdrom", GDROM) - MCFG_SLOT_OPTION_MACHINE_CONFIG("gdrom", gdrom_config) - MCFG_SLOT_DEFAULT_OPTION("gdrom") + ata_slot_device &ata_0(*subdevice<ata_slot_device>("ata:0")); + ata_0.option_add("gdrom", GDROM); + ata_0.set_option_machine_config("gdrom", gdrom_config); + ata_0.set_default_option("gdrom"); SOFTWARE_LIST(config, "cd_list").set_original("dc"); -MACHINE_CONFIG_END +} #define ROM_LOAD_BIOS(bios,name,offset,length,hash) \ diff --git a/src/mame/drivers/dday.cpp b/src/mame/drivers/dday.cpp index 00d67128fb4..7a061fc3215 100644 --- a/src/mame/drivers/dday.cpp +++ b/src/mame/drivers/dday.cpp @@ -254,21 +254,21 @@ void dday_state::machine_reset() } -MACHINE_CONFIG_START(dday_state::dday) - +void dday_state::dday(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 2000000) /* 2 MHz ? */ - MCFG_DEVICE_PROGRAM_MAP(dday_map) + Z80(config, m_maincpu, 2000000); /* 2 MHz ? */ + m_maincpu->set_addrmap(AS_PROGRAM, &dday_state::dday_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dday_state, screen_update_dday) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 0*8, 28*8-1); + m_screen->set_screen_update(FUNC(dday_state::screen_update_dday)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dday); PALETTE(config, m_palette, FUNC(dday_state::dday_palette), 256).enable_shadows(); @@ -279,7 +279,7 @@ MACHINE_CONFIG_START(dday_state::dday) AY8910(config, m_ay1, 1000000).add_route(ALL_OUTPUTS, "mono", 0.25); AY8910(config, "ay2", 1000000).add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/ddayjlc.cpp b/src/mame/drivers/ddayjlc.cpp index b4418cc9fc3..95662ced4bb 100644 --- a/src/mame/drivers/ddayjlc.cpp +++ b/src/mame/drivers/ddayjlc.cpp @@ -349,7 +349,7 @@ WRITE8_MEMBER(ddayjlc_state::bg2_w) WRITE8_MEMBER(ddayjlc_state::sound_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } @@ -599,26 +599,26 @@ void ddayjlc_state::ddayjlc_palette(palette_device &palette) const palette.set_pen_color(0x203, rgb_t(0xff, 0xff, 0xff)); } -MACHINE_CONFIG_START(ddayjlc_state::ddayjlc) - +void ddayjlc_state::ddayjlc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,12000000/3) - MCFG_DEVICE_PROGRAM_MAP(main_map) + Z80(config, m_maincpu, 12000000/3); + m_maincpu->set_addrmap(AS_PROGRAM, &ddayjlc_state::main_map); - MCFG_DEVICE_ADD("audiocpu", Z80, 12000000/4) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, 12000000/4); + m_audiocpu->set_addrmap(AS_PROGRAM, &ddayjlc_state::sound_map); config.m_minimum_quantum = attotime::from_hz(6000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(ddayjlc_state, screen_update_ddayjlc) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddayjlc_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(ddayjlc_state::screen_update_ddayjlc)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(ddayjlc_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ddayjlc); PALETTE(config, m_palette, FUNC(ddayjlc_state::ddayjlc_palette), 0x200+4); @@ -632,7 +632,7 @@ MACHINE_CONFIG_START(ddayjlc_state::ddayjlc) ay1.add_route(ALL_OUTPUTS, "mono", 1.0); AY8910(config, "ay2", 12000000/6).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} ROM_START( ddayjlc ) diff --git a/src/mame/drivers/ddealer.cpp b/src/mame/drivers/ddealer.cpp index e98802e3bde..d46ca085054 100644 --- a/src/mame/drivers/ddealer.cpp +++ b/src/mame/drivers/ddealer.cpp @@ -628,33 +628,32 @@ void ddealer_state::machine_reset() m_coin_input = 0; } -MACHINE_CONFIG_START(ddealer_state::ddealer) - - MCFG_DEVICE_ADD("maincpu" , M68000, XTAL(16'000'000)/2) /* 8MHz */ - MCFG_DEVICE_PROGRAM_MAP(ddealer_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", ddealer_state, irq4_line_hold) - MCFG_DEVICE_PERIODIC_INT_DRIVER(ddealer_state, irq1_line_hold, 90)//guess, controls music tempo, 112 is way too fast +void ddealer_state::ddealer(machine_config &config) +{ + M68000(config, m_maincpu, XTAL(16'000'000)/2); /* 8MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &ddealer_state::ddealer_map); + m_maincpu->set_vblank_int("screen", FUNC(ddealer_state::irq4_line_hold)); + m_maincpu->set_periodic_int(FUNC(ddealer_state::irq1_line_hold), attotime::from_hz(90)); //guess, controls music tempo, 112 is way too fast // M50747 or NMK-110 8131 MCU GFXDECODE(config, m_gfxdecode, m_palette, gfx_ddealer); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(ddealer_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0*8, 48*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(ddealer_state::screen_update)); + screen.set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x200); TIMER(config, "coinsim").configure_periodic(FUNC(ddealer_state::mcu_sim), attotime::from_hz(10000)); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2203, XTAL(6'000'000) / 8) /* 7.5KHz */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) -MACHINE_CONFIG_END + YM2203(config, "ymsnd", XTAL(6'000'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.40); /* 7.5KHz */ +} diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index b9a52077718..e05af0653f3 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -4331,8 +4331,8 @@ void dynax_state::htengoku_banked_map(address_map &map) map(0x80000, 0x801ff).w(FUNC(dynax_state::tenkai_palette_w)); } -MACHINE_CONFIG_START(ddenlovr_state::htengoku) - +void ddenlovr_state::htengoku(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, 20000000 / 4); m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::htengoku_mem_map); @@ -4392,7 +4392,7 @@ MACHINE_CONFIG_START(ddenlovr_state::htengoku) /* devices */ msm6242_device &rtc(MSM6242(config, "rtc", XTAL(32'768))); rtc.out_int_handler().set("mainirq", FUNC(rst_pos_buffer_device::rst1_w)); -MACHINE_CONFIG_END +} /*************************************************************************** @@ -9692,8 +9692,8 @@ WRITE_LINE_MEMBER(ddenlovr_state::ddenlovr_irq) m_maincpu->set_input_line(M68K_IRQ_1, HOLD_LINE); } -MACHINE_CONFIG_START(ddenlovr_state::ddenlovr) - +void ddenlovr_state::ddenlovr(machine_config &config) +{ /* basic machine hardware */ M68000(config, m_maincpu, XTAL(24'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::ddenlovr_map); @@ -9730,14 +9730,14 @@ MACHINE_CONFIG_START(ddenlovr_state::ddenlovr) YMZ284(config, "aysnd", XTAL(28'636'363) / 16).add_route(ALL_OUTPUTS, "mono", 0.30); // or /8 ? - okim6295_device &oki(OKIM6295(config, "oki", XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH)); - oki.add_route(ALL_OUTPUTS, "mono", 0.80); + OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); /* devices */ RTC72421(config, "rtc", XTAL(32'768)); // internal oscillator -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(ddenlovr_state::ddenlovj) +void ddenlovr_state::ddenlovj(machine_config &config) +{ ddenlovr(config); /* basic machine hardware */ @@ -9748,7 +9748,7 @@ MACHINE_CONFIG_START(ddenlovr_state::ddenlovj) m_mainlatch->q_out_cb<5>().set(FUNC(ddenlovr_state::ddenlovr_blitter_irq_ack_w)); RTC62421(config.replace(), "rtc", XTAL(32'768)); // internal oscillator -MACHINE_CONFIG_END +} void ddenlovr_state::ddenlovrk(machine_config &config) { @@ -10061,7 +10061,7 @@ void ddenlovr_state::kotbinyo(machine_config &config) m_screen->set_visarea(0, 336-1-1, 1+4, 256-15-1+4); m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); - m_screen->set_palette("palette"); + m_screen->set_palette(m_palette); m_screen->screen_vblank().set(FUNC(ddenlovr_state::hanakanz_irq)); PALETTE(config, m_palette).set_entries(0x200); @@ -10431,7 +10431,8 @@ void ddenlovr_state::mjflove(machine_config &config) AY8910(config, "aysnd", 28636363/8).add_route(ALL_OUTPUTS, "mono", 0.30); } -MACHINE_CONFIG_START(ddenlovr_state::hparadis) +void ddenlovr_state::hparadis(machine_config &config) +{ quizchq(config); /* basic machine hardware */ @@ -10445,30 +10446,30 @@ MACHINE_CONFIG_START(ddenlovr_state::hparadis) config.device_remove("rtc"); MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,hparadis) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(ddenlovr_state::jongtei) +} +void ddenlovr_state::jongtei(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(20'000'000) / 2) // KL5C80A12 - MCFG_DEVICE_PROGRAM_MAP(hanakanz_map) - MCFG_DEVICE_IO_MAP(jongtei_portmap) + Z80(config, m_maincpu, XTAL(20'000'000) / 2); // KL5C80A12 + m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map); + m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::jongtei_portmap); MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,hanakanz) MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(336, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 5, 256-11-1) - MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddenlovr_state, hanakanz_irq)) - - MCFG_PALETTE_ADD("palette", 0x200) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(336, 256); + m_screen->set_visarea(0, 336-1, 5, 256-11-1); + m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(FUNC(ddenlovr_state::hanakanz_irq)); + + PALETTE(config, m_palette).set_entries(0x200); blitter_irq().set(FUNC(ddenlovr_state::mjflove_blitter_irq)); @@ -10479,29 +10480,27 @@ MACHINE_CONFIG_START(ddenlovr_state::jongtei) YM2413(config, "ym2413", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); /* devices */ MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(FUNC(ddenlovr_state::hanakanz_rtc_irq)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(ddenlovr_state::mjgnight) +void ddenlovr_state::mjgnight(machine_config &config) +{ jongtei(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(mjgnight_portmap) + m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::mjgnight_portmap); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(336, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 5-4, 256-11-1-4) -MACHINE_CONFIG_END + m_screen->set_size(336, 256); + m_screen->set_visarea(0, 336-1, 5-4, 256-11-1-4); +} /*************************************************************************** Mahjong Seiryu Densetsu ***************************************************************************/ -MACHINE_CONFIG_START(ddenlovr_state::sryudens) - +void ddenlovr_state::sryudens(machine_config &config) +{ /* basic machine hardware */ tmpz84c015_device &maincpu(TMPZ84C015(config, m_maincpu, XTAL(16'000'000) / 2)); // ? maincpu.set_addrmap(AS_PROGRAM, &ddenlovr_state::sryudens_map); @@ -10513,17 +10512,17 @@ MACHINE_CONFIG_START(ddenlovr_state::sryudens) MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(60.8532) // VSync 60.8532Hz, HSync 15.2790kHz - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(336, 256+22) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 0+5, 256-12-1) - MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) - - MCFG_PALETTE_ADD("palette", 0x100) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60.8532); // VSync 60.8532Hz, HSync 15.2790kHz + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(336, 256+22); + m_screen->set_visarea(0, 336-1, 0+5, 256-12-1); + m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)); + + PALETTE(config, m_palette).set_entries(0x100); blitter_irq().set(FUNC(ddenlovr_state::mjflove_blitter_irq)); @@ -10536,20 +10535,19 @@ MACHINE_CONFIG_START(ddenlovr_state::sryudens) YMZ284(config, "aysnd", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.30); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) // ? - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // ? /* devices */ RTC62421(config, "rtc", XTAL(32'768)).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)); // internal oscillator -MACHINE_CONFIG_END +} /*************************************************************************** Mahjong Janshin Plus ***************************************************************************/ // PCB: NM7001004 -MACHINE_CONFIG_START(ddenlovr_state::janshinp) - +void ddenlovr_state::janshinp(machine_config &config) +{ /* basic machine hardware */ tmpz84c015_device &maincpu(TMPZ84C015(config, m_maincpu, XTAL(16'000'000) / 2)); maincpu.set_addrmap(AS_PROGRAM, &ddenlovr_state::janshinp_map); @@ -10561,17 +10559,17 @@ MACHINE_CONFIG_START(ddenlovr_state::janshinp) MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(60.8532) // VSync 60.8532Hz, HSync 15.2790kHz ? - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(336, 256+22) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 0+5, 256-12-1) - MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) - - MCFG_PALETTE_ADD("palette", 0x100) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60.8532); // VSync 60.8532Hz, HSync 15.2790kHz ? + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(336, 256+22); + m_screen->set_visarea(0, 336-1, 0+5, 256-12-1); + m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)); + + PALETTE(config, m_palette).set_entries(0x100); blitter_irq().set(FUNC(ddenlovr_state::mjflove_blitter_irq)); @@ -10584,12 +10582,11 @@ MACHINE_CONFIG_START(ddenlovr_state::janshinp) YMZ284(config, "aysnd", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.30); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) // ? - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // ? /* devices */ MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)); -MACHINE_CONFIG_END +} // Same PCB as janshinp void ddenlovr_state::dtoyoken(machine_config &config) @@ -10618,8 +10615,8 @@ MACHINE_START_MEMBER(ddenlovr_state,seljan2) MACHINE_START_CALL_MEMBER(ddenlovr); } -MACHINE_CONFIG_START(ddenlovr_state::seljan2) - +void ddenlovr_state::seljan2(machine_config &config) +{ /* basic machine hardware */ tmpz84c015_device &maincpu(TMPZ84C015(config, m_maincpu, XTAL(16'000'000) / 2)); maincpu.set_addrmap(AS_PROGRAM, &ddenlovr_state::seljan2_map); @@ -10631,17 +10628,17 @@ MACHINE_CONFIG_START(ddenlovr_state::seljan2) MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(60.8532) // VSync 60.8532Hz, HSync 15.2790kHz ? - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(336, 256+22) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 0+5, 256-12-1) - MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) - - MCFG_PALETTE_ADD("palette", 0x100) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60.8532); // VSync 60.8532Hz, HSync 15.2790kHz ? + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(336, 256+22); + m_screen->set_visarea(0, 336-1, 0+5, 256-12-1); + m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)); + + PALETTE(config, m_palette).set_entries(0x100); blitter_irq().set("maincpu", FUNC(tmpz84c015_device::pa7_w)).invert(); // PA bit 7 = blitter busy @@ -10657,12 +10654,11 @@ MACHINE_CONFIG_START(ddenlovr_state::seljan2) aysnd.port_b_write_callback().set(FUNC(ddenlovr_state::ddenlovr_select_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.30); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) // ? - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // ? /* devices */ MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)); -MACHINE_CONFIG_END +} /*************************************************************************** @@ -10670,28 +10666,28 @@ MACHINE_CONFIG_END ***************************************************************************/ -MACHINE_CONFIG_START(ddenlovr_state::daimyojn) - +void ddenlovr_state::daimyojn(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(20'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(hanakanz_map) - MCFG_DEVICE_IO_MAP(daimyojn_portmap) + Z80(config, m_maincpu, XTAL(20'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map); + m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::daimyojn_portmap); MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjflove) MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(59.7922) // HSync 15.4248kHz - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(336, 256+22) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1-1, 1, 256-15-1) - MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddenlovr_state, hanakanz_irq)) - - MCFG_PALETTE_ADD("palette", 0x200) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(59.7922); // HSync 15.4248kHz + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(336, 256+22); + m_screen->set_visarea(0, 336-1-1, 1, 256-15-1); + m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(FUNC(ddenlovr_state::hanakanz_irq)); + + PALETTE(config, m_palette).set_entries(0x200); MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,hanakanz) // blitter commands in the roms are shuffled around @@ -10700,12 +10696,11 @@ MACHINE_CONFIG_START(ddenlovr_state::daimyojn) YM2413(config, "ym2413", XTAL(28'636'363) / 8).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + OKIM6295(config, m_oki, XTAL(28'636'363) / 28, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); /* devices */ MSM6242(config, "rtc", XTAL(32'768)).out_int_handler().set(FUNC(ddenlovr_state::hanakanz_rtc_irq)); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp index 19efd23349f..ce4f861d11c 100644 --- a/src/mame/drivers/ddragon.cpp +++ b/src/mame/drivers/ddragon.cpp @@ -260,7 +260,7 @@ WRITE8_MEMBER(darktowr_state::darktowr_bankswitch_w) * *************************************/ -void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, uint8_t data) +void ddragon_state::ddragon_interrupt_ack(offs_t offset, uint8_t data) { switch (offset) { @@ -277,7 +277,7 @@ void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, u break; case 3: /* 380e - SND IRQ and latch */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); break; case 4: /* 380f - MCU IRQ */ @@ -290,14 +290,14 @@ void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, u READ8_MEMBER(ddragon_state::ddragon_interrupt_r) { - ddragon_interrupt_ack(space, offset, 0xff); + ddragon_interrupt_ack(offset, 0xff); return 0xff; } WRITE8_MEMBER(ddragon_state::ddragon_interrupt_w) { - ddragon_interrupt_ack(space, offset, data); + ddragon_interrupt_ack(offset, data); } diff --git a/src/mame/drivers/ddragon3.cpp b/src/mame/drivers/ddragon3.cpp index 88f096a3d5f..746b587b3a3 100644 --- a/src/mame/drivers/ddragon3.cpp +++ b/src/mame/drivers/ddragon3.cpp @@ -206,7 +206,7 @@ WRITE8_MEMBER(ddragon3_state::oki_bankswitch_w) WRITE16_MEMBER(wwfwfest_state::wwfwfest_soundwrite) { // upper byte is always set to 0x31 for some reason - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); } @@ -255,7 +255,7 @@ READ16_MEMBER(wwfwfest_state::wwfwfest_paletteram_r) WRITE16_MEMBER(wwfwfest_state::wwfwfest_paletteram_w) { offset = (offset & 0x000f) | (offset & 0x7fc0) >> 2; - m_palette->write16(space, offset, data, mem_mask); + m_palette->write16(offset, data, mem_mask); } /*- Priority Control -*/ @@ -820,22 +820,22 @@ void ddragon3_state::machine_reset() m_bg_tilebase = 0; } -MACHINE_CONFIG_START(ddragon3_state::ddragon3) - +void ddragon3_state::ddragon3(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 20_MHz_XTAL / 2) - MCFG_DEVICE_PROGRAM_MAP(ddragon3_map) + M68000(config, m_maincpu, 20_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &ddragon3_state::ddragon3_map); TIMER(config, "scantimer").configure_scanline(FUNC(ddragon3_state::ddragon3_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(3'579'545)) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, XTAL(3'579'545)); + m_audiocpu->set_addrmap(AS_PROGRAM, &ddragon3_state::sound_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248) /* HTOTAL and VTOTAL are guessed */ - MCFG_SCREEN_UPDATE_DRIVER(ddragon3_state, screen_update_ddragon3) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248); /* HTOTAL and VTOTAL are guessed */ + m_screen->set_screen_update(FUNC(ddragon3_state::screen_update_ddragon3)); + m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ddragon3); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 768); @@ -854,66 +854,62 @@ MACHINE_CONFIG_START(ddragon3_state::ddragon3) ym2151.add_route(0, "lspeaker", 0.50); ym2151.add_route(1, "rspeaker", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.50) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.50) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH); + m_oki->add_route(ALL_OUTPUTS, "lspeaker", 1.50); + m_oki->add_route(ALL_OUTPUTS, "rspeaker", 1.50); +} -MACHINE_CONFIG_START(ddragon3_state::ddragon3b) +void ddragon3_state::ddragon3b(machine_config &config) +{ ddragon3(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(dd3b_map) + m_maincpu->set_addrmap(AS_PROGRAM, &ddragon3_state::dd3b_map); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(NOOP) -MACHINE_CONFIG_END + m_screen->screen_vblank().set_nop(); +} -MACHINE_CONFIG_START(ddragon3_state::ctribe) +void ddragon3_state::ctribe(machine_config &config) +{ ddragon3(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(ctribe_map) + m_maincpu->set_addrmap(AS_PROGRAM, &ddragon3_state::ctribe_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(ctribe_sound_map) + m_audiocpu->set_addrmap(AS_PROGRAM, &ddragon3_state::ctribe_sound_map); m_palette->set_format(palette_device::xBGR_444, 768); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(ddragon3_state, screen_update_ctribe) - MCFG_SCREEN_VBLANK_CALLBACK(NOOP) + m_screen->set_screen_update(FUNC(ddragon3_state::screen_update_ctribe)); + m_screen->screen_vblank().set_nop(); - MCFG_DEVICE_MODIFY("ym2151") - MCFG_SOUND_ROUTES_RESET() - MCFG_SOUND_ROUTE(0, "lspeaker", 1.20) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.20) - - MCFG_DEVICE_MODIFY("oki") - MCFG_SOUND_ROUTES_RESET() - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) -MACHINE_CONFIG_END + ym2151_device &ym2151(*subdevice<ym2151_device>("ym2151")); + ym2151.reset_routes(); + ym2151.add_route(0, "lspeaker", 1.20); + ym2151.add_route(1, "rspeaker", 1.20); + m_oki->reset_routes(); + m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.80); + m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.80); +} -MACHINE_CONFIG_START(wwfwfest_state::wwfwfest) +void wwfwfest_state::wwfwfest(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 24_MHz_XTAL / 2) /* 24 crystal, 12 rated chip */ - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, 24_MHz_XTAL / 2); /* 24 crystal, 12 rated chip */ + m_maincpu->set_addrmap(AS_PROGRAM, &wwfwfest_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(ddragon3_state::ddragon3_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(3'579'545)) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, XTAL(3'579'545)); + m_audiocpu->set_addrmap(AS_PROGRAM, &wwfwfest_state::sound_map); /* video hardware */ BUFFERED_SPRITERAM16(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248) /* HTOTAL and VTOTAL are guessed */ - MCFG_SCREEN_UPDATE_DRIVER(wwfwfest_state, screen_update_wwfwfest) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(28_MHz_XTAL / 4, 448, 0, 320, 272, 8, 248); /* HTOTAL and VTOTAL are guessed */ + m_screen->set_screen_update(FUNC(wwfwfest_state::screen_update_wwfwfest)); + m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_wwfwfest); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 8192); @@ -929,14 +925,14 @@ MACHINE_CONFIG_START(wwfwfest_state::wwfwfest) ym2151.add_route(0, "mono", 0.45); ym2151.add_route(1, "mono", 0.45); - MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) /* Verified - Pin 7 tied to +5VDC */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.90); /* Verified - Pin 7 tied to +5VDC */ +} -MACHINE_CONFIG_START(wwfwfest_state::wwfwfstb) +void wwfwfest_state::wwfwfstb(machine_config &config) +{ wwfwfest(config); MCFG_VIDEO_START_OVERRIDE(wwfwfest_state,wwfwfstb) -MACHINE_CONFIG_END +} /************************************* diff --git a/src/mame/drivers/ddribble.cpp b/src/mame/drivers/ddribble.cpp index c5b4a7a09b7..e632afca03c 100644 --- a/src/mame/drivers/ddribble.cpp +++ b/src/mame/drivers/ddribble.cpp @@ -257,33 +257,33 @@ void ddribble_state::machine_reset() m_charbank[1] = 0; } -MACHINE_CONFIG_START(ddribble_state::ddribble) - +void ddribble_state::ddribble(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, MC6809E, XTAL(18'432'000)/12) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(cpu0_map) + MC6809E(config, m_maincpu, XTAL(18'432'000)/12); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &ddribble_state::cpu0_map); - MCFG_DEVICE_ADD(m_cpu1, MC6809E, XTAL(18'432'000)/12) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(cpu1_map) + MC6809E(config, m_cpu1, XTAL(18'432'000)/12); /* verified on pcb */ + m_cpu1->set_addrmap(AS_PROGRAM, &ddribble_state::cpu1_map); - MCFG_DEVICE_ADD("cpu2", MC6809E, XTAL(18'432'000)/12) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(cpu2_map) + mc6809e_device &cpu2(MC6809E(config, "cpu2", XTAL(18'432'000)/12)); /* verified on pcb */ + cpu2.set_addrmap(AS_PROGRAM, &ddribble_state::cpu2_map); config.m_minimum_quantum = attotime::from_hz(6000); /* we need heavy synch */ WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) -/* MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) */ - MCFG_SCREEN_UPDATE_DRIVER(ddribble_state, screen_update_ddribble) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddribble_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); +/* screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); */ + screen.set_screen_update(FUNC(ddribble_state::screen_update_ddribble)); + screen.set_palette("palette"); + screen.screen_vblank().set(FUNC(ddribble_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, "palette", gfx_ddribble); PALETTE(config, "palette", FUNC(ddribble_state::ddribble_palette)).set_format(palette_device::xBGR_555, 64 + 256, 64); @@ -299,17 +299,16 @@ MACHINE_CONFIG_START(ddribble_state::ddribble) ymsnd.add_route(2, "filter3", 0.25); ymsnd.add_route(3, "mono", 0.25); - MCFG_DEVICE_ADD(m_vlm, VLM5030, XTAL(3'579'545)) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADDRESS_MAP(0, vlm_map) - - MCFG_DEVICE_ADD(m_filter1, FILTER_RC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADD(m_filter2, FILTER_RC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADD(m_filter3, FILTER_RC) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + VLM5030(config, m_vlm, XTAL(3'579'545)); /* verified on pcb */ + m_vlm->add_route(ALL_OUTPUTS, "mono", 1.0); + m_vlm->set_addrmap(0, &ddribble_state::vlm_map); + + FILTER_RC(config, m_filter1).add_route(ALL_OUTPUTS, "mono", 1.0); + + FILTER_RC(config, m_filter2).add_route(ALL_OUTPUTS, "mono", 1.0); + + FILTER_RC(config, m_filter3).add_route(ALL_OUTPUTS, "mono", 1.0); +} ROM_START( ddribble ) diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp index 105f03a1b83..5cd6700491b 100644 --- a/src/mame/drivers/dec0.cpp +++ b/src/mame/drivers/dec0.cpp @@ -363,7 +363,7 @@ WRITE16_MEMBER(dec0_state::dec0_control_w) case 4: /* 6502 sound cpu */ if (ACCESSING_BITS_0_7) - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); break; case 6: /* Intel 8751 microcontroller - Bad Dudes, Heavy Barrel, Birdy Try only */ @@ -398,7 +398,7 @@ WRITE16_MEMBER(dec0_automat_state::automat_control_w) { case 0xe: /* z80 sound cpu */ if (ACCESSING_BITS_0_7) - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); break; case 12: /* DMA flag */ @@ -425,7 +425,7 @@ WRITE16_MEMBER(dec0_automat_state::automat_control_w) WRITE16_MEMBER(dec0_state::midres_sound_w) { if (ACCESSING_BITS_0_7) - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); } /******************************************************************************/ @@ -795,7 +795,7 @@ READ16_MEMBER( dec0_automat_state::automat_palette_r ) WRITE16_MEMBER( dec0_automat_state::automat_palette_w ) { offset ^=0xf; - m_palette->write16(space, offset, data, mem_mask); + m_palette->write16(offset, data, mem_mask); } diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp index c753f285d4e..1b1a1c7ddc1 100644 --- a/src/mame/drivers/dec8.cpp +++ b/src/mame/drivers/dec8.cpp @@ -361,7 +361,7 @@ WRITE8_MEMBER(dec8_state::csilver_control_w) WRITE8_MEMBER(dec8_state::dec8_sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(m6502_device::NMI_LINE, ASSERT_LINE); m_m6502_timer->adjust(m_audiocpu->cycles_to_attotime(3)); } diff --git a/src/mame/drivers/deco156.cpp b/src/mame/drivers/deco156.cpp index 82ffa6910b2..dbb66553328 100644 --- a/src/mame/drivers/deco156.cpp +++ b/src/mame/drivers/deco156.cpp @@ -329,27 +329,26 @@ DECOSPR_PRIORITY_CB_MEMBER(deco156_state::pri_callback) return 0; } -MACHINE_CONFIG_START(deco156_state::hvysmsh) - +void deco156_state::hvysmsh(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", ARM, 28000000) /* Unconfirmed */ - MCFG_DEVICE_PROGRAM_MAP(hvysmsh_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco156_state, deco32_vbl_interrupt) + ARM(config, m_maincpu, 28000000); /* Unconfirmed */ + m_maincpu->set_addrmap(AS_PROGRAM, &deco156_state::hvysmsh_map); + m_maincpu->set_vblank_int("screen", FUNC(deco156_state::deco32_vbl_interrupt)); EEPROM_93C46_16BIT(config, "eeprom"); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(deco156_state, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(529)); + screen.set_size(40*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(deco156_state::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_hvysmsh); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 1024); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); @@ -373,36 +372,35 @@ MACHINE_CONFIG_START(deco156_state::hvysmsh) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("oki1", OKIM6295, 28000000/28, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) - - MCFG_DEVICE_ADD("oki2", OKIM6295, 28000000/14, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.35) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35) -MACHINE_CONFIG_END + OKIM6295(config, m_oki1, 28000000/28, okim6295_device::PIN7_HIGH); + m_oki1->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_oki1->add_route(ALL_OUTPUTS, "rspeaker", 1.0); -MACHINE_CONFIG_START(deco156_state::wcvol95) + OKIM6295(config, m_oki2, 28000000/14, okim6295_device::PIN7_HIGH); + m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.35); + m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.35); +} +void deco156_state::wcvol95(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", ARM, 28000000) /* Unconfirmed */ - MCFG_DEVICE_PROGRAM_MAP(wcvol95_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco156_state, deco32_vbl_interrupt) + ARM(config, m_maincpu, 28000000); /* Unconfirmed */ + m_maincpu->set_addrmap(AS_PROGRAM, &deco156_state::wcvol95_map); + m_maincpu->set_vblank_int("screen", FUNC(deco156_state::deco32_vbl_interrupt)); EEPROM_93C46_16BIT(config, "eeprom"); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(deco156_state, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(529)); + screen.set_size(40*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(deco156_state::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_hvysmsh); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); @@ -426,10 +424,10 @@ MACHINE_CONFIG_START(deco156_state::wcvol95) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymz", YMZ280B, 28000000 / 2) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + ymz280b_device &ymz(YMZ280B(config, "ymz", 28000000 / 2)); + ymz.add_route(0, "lspeaker", 1.0); + ymz.add_route(1, "rspeaker", 1.0); +} /**********************************************************************************/ diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index 026b633b546..7d20995e28a 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -1881,7 +1881,6 @@ void captaven_state::captaven(machine_config &config) PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1895,7 +1894,6 @@ void captaven_state::captaven(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); // pf3 is in 8bpp mode, pf4 is not used - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_32x32); m_deco_tilegen[1]->set_pf2_size(DECO_32x32); m_deco_tilegen[1]->set_pf1_trans_mask(0xff); @@ -1962,7 +1960,6 @@ void fghthist_state::fghthist(machine_config &config) PALETTE(config, m_palette).set_entries(2048); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1978,7 +1975,6 @@ void fghthist_state::fghthist(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -2087,7 +2083,6 @@ void dragngun_state::dragngun(machine_config &config) BUFFERED_SPRITERAM32(config, m_spriteram); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -2103,7 +2098,6 @@ void dragngun_state::dragngun(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0xff); @@ -2215,7 +2209,6 @@ void dragngun_state::lockload(machine_config &config) PALETTE(config, m_palette).set_entries(2048); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -2231,7 +2224,6 @@ void dragngun_state::lockload(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_32x32); m_deco_tilegen[1]->set_pf2_size(DECO_32x32); // lockload definitely wants pf34 half width.. m_deco_tilegen[1]->set_pf1_trans_mask(0xff); @@ -2295,7 +2287,6 @@ void nslasher_state::tattass(machine_config &config) DECO_ACE(config, m_deco_ace, 0); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -2311,7 +2302,6 @@ void nslasher_state::tattass(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -2371,7 +2361,6 @@ void nslasher_state::nslasher(machine_config &config) DECO_ACE(config, m_deco_ace, 0); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -2387,7 +2376,6 @@ void nslasher_state::nslasher(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag(m_gfxdecode); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/deco_ld.cpp b/src/mame/drivers/deco_ld.cpp index 8caa719787b..c4fe0e9a003 100644 --- a/src/mame/drivers/deco_ld.cpp +++ b/src/mame/drivers/deco_ld.cpp @@ -255,7 +255,7 @@ uint32_t deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_ind WRITE8_MEMBER(deco_ld_state::decold_sound_cmd_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/deco_mlc.cpp b/src/mame/drivers/deco_mlc.cpp index d902574728e..b3639af5000 100644 --- a/src/mame/drivers/deco_mlc.cpp +++ b/src/mame/drivers/deco_mlc.cpp @@ -507,24 +507,24 @@ void deco_mlc_state::machine_reset() m_vbl_i = 0xffffffff; } -MACHINE_CONFIG_START(deco_mlc_state::avengrgs) - +void deco_mlc_state::avengrgs(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, SH2, 42000000/2) /* 21 MHz clock confirmed on real board */ - MCFG_DEVICE_PROGRAM_MAP(avengrgs_map) + SH2(config, m_maincpu, 42000000/2); /* 21 MHz clock confirmed on real board */ + m_maincpu->set_addrmap(AS_PROGRAM, &deco_mlc_state::avengrgs_map); EEPROM_93C46_16BIT(config, m_eeprom); /* Actually 93c45 */ TIMER(config, m_raster_irq_timer).configure_generic(FUNC(deco_mlc_state::interrupt_gen)); /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(deco_mlc_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, deco_mlc_state, screen_vblank_mlc)) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(58); + m_screen->set_size(40*8, 32*8); + m_screen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(deco_mlc_state::screen_update)); + m_screen->screen_vblank().set(FUNC(deco_mlc_state::screen_vblank_mlc)); + m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_deco_mlc); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048); @@ -534,29 +534,29 @@ MACHINE_CONFIG_START(deco_mlc_state::avengrgs) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD(m_ymz, YMZ280B, 42000000 / 3) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(deco_mlc_state::mlc) + YMZ280B(config, m_ymz, 42000000 / 3); + m_ymz->add_route(0, "lspeaker", 1.0); + m_ymz->add_route(1, "rspeaker", 1.0); +} +void deco_mlc_state::mlc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, ARM,42000000/6) /* 42 MHz -> 7MHz clock confirmed on real board */ - MCFG_DEVICE_PROGRAM_MAP(decomlc_map) + ARM(config, m_maincpu, 42000000/6); /* 42 MHz -> 7MHz clock confirmed on real board */ + m_maincpu->set_addrmap(AS_PROGRAM, &deco_mlc_state::decomlc_map); EEPROM_93C46_16BIT(config, m_eeprom); /* Actually 93c45 */ TIMER(config, m_raster_irq_timer).configure_generic(FUNC(deco_mlc_state::interrupt_gen)); /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(deco_mlc_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, deco_mlc_state, screen_vblank_mlc)) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(58); + m_screen->set_size(40*8, 32*8); + m_screen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(deco_mlc_state::screen_update)); + m_screen->screen_vblank().set(FUNC(deco_mlc_state::screen_vblank_mlc)); + m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_deco_mlc); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048); @@ -569,10 +569,10 @@ MACHINE_CONFIG_START(deco_mlc_state::mlc) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD(m_ymz, YMZ280B, 42000000 / 3) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + YMZ280B(config, m_ymz, 42000000 / 3); + m_ymz->add_route(0, "lspeaker", 1.0); + m_ymz->add_route(1, "rspeaker", 1.0); +} void deco_mlc_state::mlc_6bpp(machine_config &config) { @@ -581,16 +581,16 @@ void deco_mlc_state::mlc_6bpp(machine_config &config) m_gfxdecode->set_info(gfx_6bpp); } -MACHINE_CONFIG_START(deco_mlc_state::mlc_5bpp) +void deco_mlc_state::mlc_5bpp(machine_config &config) +{ mlc(config); m_gfxdecode->set_info(gfx_5bpp); // TODO: mono? ch.0 doesn't output any sound in-game - MCFG_DEVICE_MODIFY("ymz") - MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.0) -MACHINE_CONFIG_END + m_ymz->add_route(1, "lspeaker", 1.0); + m_ymz->add_route(0, "rspeaker", 1.0); +} /***************************************************************************/ diff --git a/src/mame/drivers/decocass.cpp b/src/mame/drivers/decocass.cpp index 3ef0719f32a..8f86b713c48 100644 --- a/src/mame/drivers/decocass.cpp +++ b/src/mame/drivers/decocass.cpp @@ -950,14 +950,14 @@ void decocass_state::decocass_palette(palette_device &palette) const } -MACHINE_CONFIG_START(decocass_state::decocass) - +void decocass_state::decocass(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", DECO_222, HCLK4) /* the earlier revision board doesn't have the 222 but must have the same thing implemented in logic for the M6502 */ - MCFG_DEVICE_PROGRAM_MAP(decocass_map) + DECO_222(config, m_maincpu, HCLK4); /* the earlier revision board doesn't have the 222 but must have the same thing implemented in logic for the M6502 */ + m_maincpu->set_addrmap(AS_PROGRAM, &decocass_state::decocass_map); - MCFG_DEVICE_ADD("audiocpu", M6502, HCLK1/3/2) - MCFG_DEVICE_PROGRAM_MAP(decocass_sound_map) + M6502(config, m_audiocpu, HCLK1/3/2); + m_audiocpu->set_addrmap(AS_PROGRAM, &decocass_state::decocass_sound_map); TIMER(config, "audionmi").configure_scanline(FUNC(decocass_state::decocass_audio_nmi_gen), "screen", 0, 8); I8041(config, m_mcu, HCLK); @@ -973,10 +973,10 @@ MACHINE_CONFIG_START(decocass_state::decocass) DECOCASS_TAPE(config, m_cassette, 0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(HCLK, 384, 0*8, 256, 272, 1*8, 248) - MCFG_SCREEN_UPDATE_DRIVER(decocass_state, screen_update_decocass) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(HCLK, 384, 0*8, 256, 272, 1*8, 248); + m_screen->set_screen_update(FUNC(decocass_state::screen_update_decocass)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_decocass); PALETTE(config, m_palette, FUNC(decocass_state::decocass_palette), 64, 32); @@ -990,249 +990,280 @@ MACHINE_CONFIG_START(decocass_state::decocass) AY8910(config, "ay1", HCLK2).add_route(ALL_OUTPUTS, "mono", 0.40); AY8910(config, "ay2", HCLK2).add_route(ALL_OUTPUTS, "mono", 0.40); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::ctsttape) +void decocass_type1_state::ctsttape(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,ctsttape) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cprogolfj) +void decocass_type1_state::cprogolfj(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cprogolfj) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cdsteljn) +void decocass_type1_state::cdsteljn(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cdsteljn) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cmanhat) +void decocass_type1_state::cmanhat(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cmanhat) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cfishing) +void decocass_type3_state::cfishing(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cfishing) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::chwy) +void decocass_type1_state::chwy(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,chwy) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cterrani) +void decocass_type1_state::cterrani(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cterrani) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::castfant) +void decocass_type1_state::castfant(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,castfant) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::csuperas) +void decocass_type1_state::csuperas(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,csuperas) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cocean1a) /* 10 */ +void decocass_type1_state::cocean1a(machine_config &config) /* 10 */ +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cocean1a) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::clocknch) +void decocass_type1_state::clocknch(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,clocknch) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::clocknchj) +void decocass_type1_state::clocknchj(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,clocknchj) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cfboy0a1) /* 12 */ +void decocass_type1_state::cfboy0a1(machine_config &config) /* 12 */ +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cfboy0a1) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cprogolf) +void decocass_type1_state::cprogolf(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cprogolf) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cluckypo) +void decocass_type1_state::cluckypo(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cluckypo) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::ctisland) +void decocass_type1_state::ctisland(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,ctisland) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::ctisland3) +void decocass_type1_state::ctisland3(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,ctisland3) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type1_state::cexplore) +void decocass_type1_state::cexplore(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type1_state,cexplore) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cbtime) +void decocass_type3_state::cbtime(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cbtime) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cburnrub) +void decocass_type3_state::cburnrub(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cburnrub) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cgraplop) +void decocass_type3_state::cgraplop(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cgraplop) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cgraplop2) +void decocass_type3_state::cgraplop2(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cgraplop2) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::clapapa) +void decocass_type3_state::clapapa(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,clapapa) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cskater) +void decocass_type3_state::cskater(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cskater) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cprobowl) +void decocass_type3_state::cprobowl(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cprobowl) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cnightst) +void decocass_type3_state::cnightst(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cnightst) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cpsoccer) +void decocass_type3_state::cpsoccer(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cpsoccer) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::csdtenis) +void decocass_type3_state::csdtenis(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,csdtenis) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::czeroize) +void decocass_type3_state::czeroize(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,czeroize) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cppicf) +void decocass_type3_state::cppicf(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cppicf) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decocass_type3_state::cfghtice) +void decocass_type3_state::cfghtice(machine_config &config) +{ decocass(config); /* basic machine hardware */ MCFG_MACHINE_RESET_OVERRIDE(decocass_type3_state,cfghtice) -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/decstation.cpp b/src/mame/drivers/decstation.cpp index 93e23d9fb0c..4d7d412e1a9 100644 --- a/src/mame/drivers/decstation.cpp +++ b/src/mame/drivers/decstation.cpp @@ -543,7 +543,8 @@ static void dec_scsi_devices(device_slot_interface &device) device.option_add_internal("asc", NCR53C94); } -MACHINE_CONFIG_START(decstation_state::kn01) +void decstation_state::kn01(machine_config &config) +{ R2000(config, m_maincpu, 16.67_MHz_XTAL, 65536, 131072); m_maincpu->set_endianness(ENDIANNESS_LITTLE); m_maincpu->set_fpu(mips1_device_base::MIPS_R3010Av4); @@ -565,9 +566,10 @@ MACHINE_CONFIG_START(decstation_state::kn01) MC146818(config, m_rtc, XTAL(32'768)); m_rtc->set_binary(true); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(decstation_state::kn02ba) +void decstation_state::kn02ba(machine_config &config) +{ R3000A(config, m_maincpu, 33.333_MHz_XTAL, 65536, 131072); m_maincpu->set_endianness(ENDIANNESS_LITTLE); m_maincpu->set_fpu(mips1_device_base::MIPS_R3010Av4); @@ -626,7 +628,7 @@ MACHINE_CONFIG_START(decstation_state::kn02ba) NSCSI_CONNECTOR(config, "scsibus:5", dec_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsibus:6", dec_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsibus:7", dec_scsi_devices, "asc", true).set_option_machine_config("asc", [this] (device_t *device) { ncr5394(device); }); -MACHINE_CONFIG_END +} static INPUT_PORTS_START( decstation ) PORT_START("UNUSED") // unused IN0 diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp index 63d6637136b..bcd83f09b89 100644 --- a/src/mame/drivers/decwritr.cpp +++ b/src/mame/drivers/decwritr.cpp @@ -408,25 +408,25 @@ void decwriter_state::machine_reset() // MACHINE DRIVERS //************************************************************************** -MACHINE_CONFIG_START(decwriter_state::la120) - - MCFG_DEVICE_ADD("maincpu", I8080A, XTAL(18'000'000) / 9) // 18Mhz xtal on schematics, using an i8224 clock divider/reset sanitizer IC - MCFG_DEVICE_PROGRAM_MAP(la120_mem) - MCFG_DEVICE_IO_MAP(la120_io) - //MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("prtlsi", dc305_device, inta_cb) +void decwriter_state::la120(machine_config &config) +{ + I8080A(config, m_maincpu, XTAL(18'000'000) / 9); // 18Mhz xtal on schematics, using an i8224 clock divider/reset sanitizer IC + m_maincpu->set_addrmap(AS_PROGRAM, &decwriter_state::la120_mem); + m_maincpu->set_addrmap(AS_IO, &decwriter_state::la120_io); + //m_maincpu->set_irq_acknowledge_callback("prtlsi", FUNC(dc305_device::inta_cb)); /* video hardware */ //TODO: no actual screen! has 8 leds above the keyboard (similar to vt100/vk100) and has 4 7segment leds for showing an error code. - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(decwriter_state, screen_update) - MCFG_SCREEN_SIZE(640,480) - MCFG_SCREEN_VISIBLE_AREA(0,639, 0,479) - MCFG_SCREEN_REFRESH_RATE(30) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(decwriter_state::screen_update)); + screen.set_size(640,480); + screen.set_visarea_full(); + screen.set_refresh_hz(30); - //MCFG_DEVICE_ADD("prtlsi", DC305, XTAL(18'000'000) / 9) - //MCFG_DC305_OUT_RXC_CB(WRITELINE("usart", i8251_device, write_rxc)) - //MCFG_DC305_OUT_TXC_CB(WRITELINE("usart", i8251_device, write_txc)) - //MCFG_DC305_OUT_INT_CB(WRITELINE("mainint", input_merger_device, in_w<0>)) + //dc305_device &prtlsi(DC305(config, "prtlsi", XTAL(18'000'000) / 9)); + //prtlsi.out_rxc_cb().set("usart", FUNC(i8251_device, write_rxc)); + //prtlsi.out_txc_cb().set("usart", FUNC(i8251_device, write_txc)); + //prtlsi.out_int_cb().set("mainint", FUNC(input_merger_device::in_w<0>)); LS259(config, m_ledlatch); // E2 on keyboard m_ledlatch->q_out_cb<0>().set_output("led1").invert(); // ON LINE @@ -442,8 +442,7 @@ MACHINE_CONFIG_START(decwriter_state::la120) /* audio hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 786) // TODO: LA120 speaker is controlled by asic; VT100 has: 7.945us per serial clock = ~125865.324hz, / 160 clocks per char = ~ 786 hz - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + BEEP(config, m_speaker, 786).add_route(ALL_OUTPUTS, "mono", 0.50); // TODO: LA120 speaker is controlled by asic; VT100 has: 7.945us per serial clock = ~125865.324hz, / 160 clocks per char = ~ 786 hz /* i8251 */ I8251(config, "usart", XTAL(18'000'000) / 9); @@ -461,7 +460,7 @@ MACHINE_CONFIG_START(decwriter_state::la120) */ ER1400(config, m_nvm); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/deshoros.cpp b/src/mame/drivers/deshoros.cpp index cb489a945da..8dfda215b70 100644 --- a/src/mame/drivers/deshoros.cpp +++ b/src/mame/drivers/deshoros.cpp @@ -266,21 +266,21 @@ void destiny_state::machine_reset() bank_select_w(m_maincpu->space(AS_PROGRAM), 0, 0); } -MACHINE_CONFIG_START(destiny_state::destiny) - +void destiny_state::destiny(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6809, XTAL(4'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(destiny_state, irq0_line_hold, 50) // timer irq controls update speed, frequency needs to be determined yet (2MHz through three 74LS390) + M6809(config, m_maincpu, XTAL(4'000'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &destiny_state::main_map); + m_maincpu->set_periodic_int(FUNC(destiny_state::irq0_line_hold), attotime::from_hz(50)); // timer irq controls update speed, frequency needs to be determined yet (2MHz through three 74LS390) /* video hardware (dummy) */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(6*16, 9*2) - MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1) - MCFG_SCREEN_UPDATE_DRIVER(destiny_state, screen_update_destiny) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(6*16, 9*2); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(destiny_state::screen_update_destiny)); + screen.set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); @@ -288,7 +288,7 @@ MACHINE_CONFIG_START(destiny_state::destiny) SPEAKER(config, "mono").front_center(); BEEP(config, m_beeper, 800); // TODO: determine exact frequency thru schematics m_beeper->add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/destroyr.cpp b/src/mame/drivers/destroyr.cpp index d51dd8c033c..33c33c66d7b 100644 --- a/src/mame/drivers/destroyr.cpp +++ b/src/mame/drivers/destroyr.cpp @@ -465,12 +465,12 @@ void destroyr_state::machine_start() save_item(NAME(m_potsense)); } -MACHINE_CONFIG_START(destroyr_state::destroyr) - +void destroyr_state::destroyr(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6800, XTAL(12'096'000) / 16) - MCFG_DEVICE_PROGRAM_MAP(destroyr_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(destroyr_state, irq0_line_assert, 4*60) + M6800(config, m_maincpu, XTAL(12'096'000) / 16); + m_maincpu->set_addrmap(AS_PROGRAM, &destroyr_state::destroyr_map); + m_maincpu->set_periodic_int(FUNC(destroyr_state::irq0_line_assert), attotime::from_hz(4*60)); f9334_device &outlatch(F9334(config, "outlatch")); // F8 outlatch.q_out_cb<0>().set_output("led0").invert(); // LED 1 @@ -485,18 +485,18 @@ MACHINE_CONFIG_START(destroyr_state::destroyr) WATCHDOG_TIMER(config, m_watchdog); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(256, 262) - MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(destroyr_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(256, 262); + m_screen->set_visarea(0, 255, 0, 239); + m_screen->set_screen_update(FUNC(destroyr_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_destroyr); PALETTE(config, m_palette, FUNC(destroyr_state::destroyr_palette), 8); /* sound hardware */ -MACHINE_CONFIG_END +} ROM_START( destroyr ) diff --git a/src/mame/drivers/dfruit.cpp b/src/mame/drivers/dfruit.cpp index 1d5838668c5..634c4a59914 100644 --- a/src/mame/drivers/dfruit.cpp +++ b/src/mame/drivers/dfruit.cpp @@ -371,28 +371,28 @@ TIMER_DEVICE_CALLBACK_MEMBER(dfruit_state::dfruit_irq_scanline) #define MASTER_CLOCK XTAL(14'000'000) -MACHINE_CONFIG_START(dfruit_state::dfruit) - +void dfruit_state::dfruit(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80,MASTER_CLOCK/2) //!!! TC0091LVC !!! - MCFG_DEVICE_PROGRAM_MAP(dfruit_map) + Z80(config, m_maincpu, MASTER_CLOCK/2); //!!! TC0091LVC !!! + m_maincpu->set_addrmap(AS_PROGRAM, &dfruit_state::dfruit_map); TIMER(config, "scantimer").configure_scanline(FUNC(dfruit_state::dfruit_irq_scanline), "screen", 0, 1); //MCFG_MACHINE_START_OVERRIDE(dfruit_state,4enraya) //MCFG_MACHINE_RESET_OVERRIDE(dfruit_state,4enraya) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dfruit_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dfruit_state, screen_vblank)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(dfruit_state::screen_update)); + screen.screen_vblank().set(FUNC(dfruit_state::screen_vblank)); + screen.set_palette("palette"); GFXDECODE(config, "gfxdecode", "palette", gfx_dfruit); - MCFG_PALETTE_ADD("palette", 0x100) + PALETTE(config, "palette").set_entries(0x100); TC0091LVC(config, m_vdp, 0); m_vdp->set_gfxdecode_tag("gfxdecode"); @@ -408,7 +408,7 @@ MACHINE_CONFIG_START(dfruit_state::dfruit) opn.port_a_read_callback().set_ioport("IN4"); opn.port_b_read_callback().set_ioport("IN5"); opn.add_route(ALL_OUTPUTS, "mono", 0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/dgpix.cpp b/src/mame/drivers/dgpix.cpp index ad3d02361e2..7e855c2e3c3 100644 --- a/src/mame/drivers/dgpix.cpp +++ b/src/mame/drivers/dgpix.cpp @@ -431,10 +431,11 @@ void dgpix_state::machine_reset() } -MACHINE_CONFIG_START(dgpix_state::dgpix) - MCFG_DEVICE_ADD("maincpu", E132XT, 20000000*4) /* 4x internal multiplier */ - MCFG_DEVICE_PROGRAM_MAP(cpu_map) - MCFG_DEVICE_IO_MAP(io_map) +void dgpix_state::dgpix(machine_config &config) +{ + E132XT(config, m_maincpu, 20000000*4); /* 4x internal multiplier */ + m_maincpu->set_addrmap(AS_PROGRAM, &dgpix_state::cpu_map); + m_maincpu->set_addrmap(AS_IO, &dgpix_state::io_map); /* unknown 16bit sound cpu, embedded inside the KS0164 sound chip @@ -444,19 +445,19 @@ MACHINE_CONFIG_START(dgpix_state::dgpix) NVRAM(config, "nvram", nvram_device::DEFAULT_NONE); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(dgpix_state, screen_update_dgpix) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(512, 256); + screen.set_visarea(0, 319, 0, 239); + screen.set_screen_update(FUNC(dgpix_state::screen_update_dgpix)); + screen.set_palette("palette"); PALETTE(config, "palette", palette_device::BGR_555); /* sound hardware */ // KS0164 sound chip -MACHINE_CONFIG_END +} /* diff --git a/src/mame/drivers/diablo1300.cpp b/src/mame/drivers/diablo1300.cpp index 868a3f7867b..692ad0730c5 100644 --- a/src/mame/drivers/diablo1300.cpp +++ b/src/mame/drivers/diablo1300.cpp @@ -176,12 +176,13 @@ void diablo1300_state::machine_reset() { } -MACHINE_CONFIG_START( diablo1300_state::diablo1300 ) +void diablo1300_state::diablo1300(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", DIABLO1300, XTAL(1'689'600)) - MCFG_DEVICE_PROGRAM_MAP(diablo1300_map) - MCFG_DEVICE_DATA_MAP(diablo1300_data_map) -MACHINE_CONFIG_END + DIABLO1300(config, m_maincpu, XTAL(1'689'600)); + m_maincpu->set_addrmap(AS_PROGRAM, &diablo1300_state::diablo1300_map); + m_maincpu->set_addrmap(AS_DATA, &diablo1300_state::diablo1300_data_map); +} ROM_START( diablo ) ROM_REGION( 0x10000, "maincpu", ROMREGION_16BIT ) diff --git a/src/mame/drivers/didact.cpp b/src/mame/drivers/didact.cpp index d0b969a2a5f..0fa835eb64f 100644 --- a/src/mame/drivers/didact.cpp +++ b/src/mame/drivers/didact.cpp @@ -649,8 +649,8 @@ void modulab_state::modulab_map(address_map &map) // map(0x0800, 0x13ff).ram().mirror(0xe000); // expansion port area consisting of 3 chip selects each selecting 0x3ff byte addresses map(0x1400, 0x17ff).rom().mirror(0xe000).region("maincpu", 0x0000); map(0x1800, 0x187f).rw(FUNC(modulab_state::io_r), FUNC(modulab_state::io_w)).mirror(0xe200); - map(0x1900, 0x197f).rw(m_pia1, FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w)).mirror(0xe200); - map(0x1980, 0x19ff).ram().mirror(0xe200); // 8154 internal RAM + map(0x1900, 0x197f).rw(m_pia1, FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io)).mirror(0xe200); + map(0x1980, 0x19ff).rw(m_pia1, FUNC(ins8154_device::read_ram), FUNC(ins8154_device::write_ram)).mirror(0xe200); map(0x1c00, 0x1fff).rom().mirror(0xe000).region("maincpu", 0x0400); } diff --git a/src/mame/drivers/dietgo.cpp b/src/mame/drivers/dietgo.cpp index 5243065a098..656aa5e8d18 100644 --- a/src/mame/drivers/dietgo.cpp +++ b/src/mame/drivers/dietgo.cpp @@ -205,33 +205,32 @@ DECO16IC_BANK_CB_MEMBER(dietgo_state::bank_callback) return (bank & 0x70) << 8; } -MACHINE_CONFIG_START(dietgo_state::dietgo) - +void dietgo_state::dietgo(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000)/2) /* DE102 (verified on pcb) */ - MCFG_DEVICE_PROGRAM_MAP(dietgo_map) - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dietgo_state, irq6_line_hold) + M68000(config, m_maincpu, XTAL(28'000'000)/2); /* DE102 (verified on pcb) */ + m_maincpu->set_addrmap(AS_PROGRAM, &dietgo_state::dietgo_map); + m_maincpu->set_addrmap(AS_OPCODES, &dietgo_state::decrypted_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(dietgo_state::irq6_line_hold)); H6280(config, m_audiocpu, XTAL(32'220'000)/4/3); /* Custom chip 45; XIN is 32.220MHZ/4, verified on pcb */ m_audiocpu->set_addrmap(AS_PROGRAM, &dietgo_state::sound_map); m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dietgo_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(40*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(dietgo_state::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xBGR_888, 1024); GFXDECODE(config, "gfxdecode", "palette", gfx_dietgo); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); @@ -265,9 +264,8 @@ MACHINE_CONFIG_START(dietgo_state::dietgo) ymsnd.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */ ymsnd.add_route(ALL_OUTPUTS, "mono", 0.45); - MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, "oki", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* verified on pcb */ +} /* Diet Go Go */ diff --git a/src/mame/drivers/digel804.cpp b/src/mame/drivers/digel804.cpp index fc01f97e320..254f36741dc 100644 --- a/src/mame/drivers/digel804.cpp +++ b/src/mame/drivers/digel804.cpp @@ -631,11 +631,12 @@ WRITE_LINE_MEMBER( ep804_state::ep804_acia_irq_w ) { } -MACHINE_CONFIG_START(digel804_state::digel804) +void digel804_state::digel804(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, Z80, 3.6864_MHz_XTAL/2) /* Z80A, X1(aka E0 on schematics): 3.6864Mhz */ - MCFG_DEVICE_PROGRAM_MAP(z80_mem_804_1_4) - MCFG_DEVICE_IO_MAP(z80_io_1_4) + Z80(config, m_maincpu, 3.6864_MHz_XTAL/2); /* Z80A, X1(aka E0 on schematics): 3.6864Mhz */ + m_maincpu->set_addrmap(AS_PROGRAM, &digel804_state::z80_mem_804_1_4); + m_maincpu->set_addrmap(AS_IO, &digel804_state::z80_io_1_4); config.m_minimum_quantum = attotime::from_hz(60); ROC10937(config, m_vfd); // RIGHT_TO_LEFT @@ -669,9 +670,8 @@ MACHINE_CONFIG_START(digel804_state::digel804) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} void ep804_state::ep804(machine_config &config) { diff --git a/src/mame/drivers/digijet.cpp b/src/mame/drivers/digijet.cpp index 21da2bc0113..f7644ae3353 100644 --- a/src/mame/drivers/digijet.cpp +++ b/src/mame/drivers/digijet.cpp @@ -50,11 +50,12 @@ void digijet_state::io_map(address_map &map) static INPUT_PORTS_START( digijet ) INPUT_PORTS_END -MACHINE_CONFIG_START(digijet_state::digijet) +void digijet_state::digijet(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(I8049_TAG, I8049, XTAL(11'000'000)) - MCFG_DEVICE_IO_MAP(io_map) -MACHINE_CONFIG_END + I8049(config, m_maincpu, XTAL(11'000'000)); + m_maincpu->set_addrmap(AS_IO, &digijet_state::io_map); +} ROM_START( digijet ) ROM_REGION( 0x800, I8049_TAG, 0 ) diff --git a/src/mame/drivers/dim68k.cpp b/src/mame/drivers/dim68k.cpp index c9d74be39ab..ab51d8c4d88 100644 --- a/src/mame/drivers/dim68k.cpp +++ b/src/mame/drivers/dim68k.cpp @@ -311,25 +311,25 @@ void dim68k_state::kbd_put(u8 data) m_term_data = data; } -MACHINE_CONFIG_START(dim68k_state::dim68k) +void dim68k_state::dim68k(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(10'000'000)) - MCFG_DEVICE_PROGRAM_MAP(dim68k_mem) + M68000(config, m_maincpu, XTAL(10'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &dim68k_state::dim68k_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 250-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); + screen.set_size(640, 480); + screen.set_visarea(0, 640-1, 0, 250-1); PALETTE(config, m_palette, palette_device::MONOCHROME); GFXDECODE(config, "gfxdecode", m_palette, gfx_dim68k); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ UPD765A(config, "fdc", 8'000'000, true, true); // these options unknown @@ -347,7 +347,7 @@ MACHINE_CONFIG_START(dim68k_state::dim68k) // software lists SOFTWARE_LIST(config, "flop_list").set_original("dim68k"); -MACHINE_CONFIG_END +} /* 68000 diff --git a/src/mame/drivers/divebomb.cpp b/src/mame/drivers/divebomb.cpp index a0002de0685..c33052b34a1 100644 --- a/src/mame/drivers/divebomb.cpp +++ b/src/mame/drivers/divebomb.cpp @@ -386,19 +386,19 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(divebomb_state::divebomb) - - MCFG_DEVICE_ADD("fgcpu", Z80,XTAL1/4) // ? - MCFG_DEVICE_PROGRAM_MAP(divebomb_fgcpu_map) - MCFG_DEVICE_IO_MAP(divebomb_fgcpu_iomap) +void divebomb_state::divebomb(machine_config &config) +{ + Z80(config, m_fgcpu, XTAL1/4); // ? + m_fgcpu->set_addrmap(AS_PROGRAM, &divebomb_state::divebomb_fgcpu_map); + m_fgcpu->set_addrmap(AS_IO, &divebomb_state::divebomb_fgcpu_iomap); - MCFG_DEVICE_ADD("spritecpu", Z80,XTAL1/4) // ? - MCFG_DEVICE_PROGRAM_MAP(divebomb_spritecpu_map) - MCFG_DEVICE_IO_MAP(divebomb_spritecpu_iomap) + Z80(config, m_spritecpu, XTAL1/4); // ? + m_spritecpu->set_addrmap(AS_PROGRAM, &divebomb_state::divebomb_spritecpu_map); + m_spritecpu->set_addrmap(AS_IO, &divebomb_state::divebomb_spritecpu_iomap); - MCFG_DEVICE_ADD("rozcpu", Z80,XTAL1/4) // ? - MCFG_DEVICE_PROGRAM_MAP(divebomb_rozcpu_map) - MCFG_DEVICE_IO_MAP(divebomb_rozcpu_iomap) + Z80(config, m_rozcpu, XTAL1/4); // ? + m_rozcpu->set_addrmap(AS_PROGRAM, &divebomb_state::divebomb_rozcpu_map); + m_rozcpu->set_addrmap(AS_IO, &divebomb_state::divebomb_rozcpu_iomap); config.m_perfect_cpu_quantum = subtag("fgcpu"); @@ -452,19 +452,13 @@ MACHINE_CONFIG_START(divebomb_state::divebomb) SPEAKER(config, "mono").front_center(); // All frequencies unverified - MCFG_DEVICE_ADD("sn0", SN76489, XTAL1/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) - MCFG_DEVICE_ADD("sn1", SN76489, XTAL1/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) - MCFG_DEVICE_ADD("sn2", SN76489, XTAL1/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) - MCFG_DEVICE_ADD("sn3", SN76489, XTAL1/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) - MCFG_DEVICE_ADD("sn4", SN76489, XTAL1/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) - MCFG_DEVICE_ADD("sn5", SN76489, XTAL1/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) -MACHINE_CONFIG_END + SN76489(config, "sn0", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15); + SN76489(config, "sn1", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15); + SN76489(config, "sn2", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15); + SN76489(config, "sn3", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15); + SN76489(config, "sn4", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15); + SN76489(config, "sn5", XTAL1/8).add_route(ALL_OUTPUTS, "mono", 0.15); +} diff --git a/src/mame/drivers/diverboy.cpp b/src/mame/drivers/diverboy.cpp index 2d40f4bb4c9..304cacca37e 100644 --- a/src/mame/drivers/diverboy.cpp +++ b/src/mame/drivers/diverboy.cpp @@ -151,7 +151,7 @@ WRITE16_MEMBER(diverboy_state::soundcmd_w) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -274,25 +274,25 @@ void diverboy_state::machine_start() { } -MACHINE_CONFIG_START(diverboy_state::diverboy) - - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) /* guess */ - MCFG_DEVICE_PROGRAM_MAP(diverboy_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", diverboy_state, irq6_line_hold) +void diverboy_state::diverboy(machine_config &config) +{ + M68000(config, m_maincpu, 12000000); /* guess */ + m_maincpu->set_addrmap(AS_PROGRAM, &diverboy_state::diverboy_map); + m_maincpu->set_vblank_int("screen", FUNC(diverboy_state::irq6_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) - MCFG_DEVICE_PROGRAM_MAP(snd_map) + Z80(config, m_audiocpu, 4000000); + m_audiocpu->set_addrmap(AS_PROGRAM, &diverboy_state::snd_map); GFXDECODE(config, m_gfxdecode, m_palette, gfx_diverboy); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8+4, 40*8+1, 2*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(diverboy_state, screen_update_diverboy) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(0*8+4, 40*8+1, 2*8, 32*8-1); + m_screen->set_screen_update(FUNC(diverboy_state::screen_update_diverboy)); + m_screen->set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x400); @@ -301,9 +301,8 @@ MACHINE_CONFIG_START(diverboy_state::diverboy) GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("oki", OKIM6295, 1320000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 1320000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.50); // clock frequency & pin 7 not verified +} /* diff --git a/src/mame/drivers/djboy.cpp b/src/mame/drivers/djboy.cpp index e9f84591e37..c6e8dcdcea1 100644 --- a/src/mame/drivers/djboy.cpp +++ b/src/mame/drivers/djboy.cpp @@ -273,11 +273,11 @@ WRITE8_MEMBER(djboy_state::beast_p0_w) { if (!BIT(m_beast_p0, 1) && BIT(data, 1)) { - m_slavelatch->write(space, 0, m_beast_p1); + m_slavelatch->write(m_beast_p1); } if (BIT(data, 0) == 0) - m_beastlatch->acknowledge_w(space, 0, data); + m_beastlatch->acknowledge_w(); m_beast_p0 = data; } @@ -285,7 +285,7 @@ WRITE8_MEMBER(djboy_state::beast_p0_w) READ8_MEMBER(djboy_state::beast_p1_r) { if (BIT(m_beast_p0, 0) == 0) - return m_beastlatch->read(space, 0); + return m_beastlatch->read(); else return 0; // ? } @@ -478,22 +478,22 @@ void djboy_state::machine_reset() m_scrolly = 0; } -MACHINE_CONFIG_START(djboy_state::djboy) - - MCFG_DEVICE_ADD("mastercpu", Z80, 12_MHz_XTAL / 2) // 6.000MHz, verified - MCFG_DEVICE_PROGRAM_MAP(mastercpu_am) - MCFG_DEVICE_IO_MAP(mastercpu_port_am) +void djboy_state::djboy(machine_config &config) +{ + Z80(config, m_mastercpu, 12_MHz_XTAL / 2); // 6.000MHz, verified + m_mastercpu->set_addrmap(AS_PROGRAM, &djboy_state::mastercpu_am); + m_mastercpu->set_addrmap(AS_IO, &djboy_state::mastercpu_port_am); TIMER(config, "scantimer").configure_scanline(FUNC(djboy_state::djboy_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("slavecpu", Z80, 12_MHz_XTAL / 2) // 6.000MHz, verified - MCFG_DEVICE_PROGRAM_MAP(slavecpu_am) - MCFG_DEVICE_IO_MAP(slavecpu_port_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", djboy_state, irq0_line_hold) + Z80(config, m_slavecpu, 12_MHz_XTAL / 2); // 6.000MHz, verified + m_slavecpu->set_addrmap(AS_PROGRAM, &djboy_state::slavecpu_am); + m_slavecpu->set_addrmap(AS_IO, &djboy_state::slavecpu_port_am); + m_slavecpu->set_vblank_int("screen", FUNC(djboy_state::irq0_line_hold)); - MCFG_DEVICE_ADD("soundcpu", Z80, 12_MHz_XTAL / 2) // 6.000MHz, verified - MCFG_DEVICE_PROGRAM_MAP(soundcpu_am) - MCFG_DEVICE_IO_MAP(soundcpu_port_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", djboy_state, irq0_line_hold) + Z80(config, m_soundcpu, 12_MHz_XTAL / 2); // 6.000MHz, verified + m_soundcpu->set_addrmap(AS_PROGRAM, &djboy_state::soundcpu_am); + m_soundcpu->set_addrmap(AS_IO, &djboy_state::soundcpu_port_am); + m_soundcpu->set_vblank_int("screen", FUNC(djboy_state::irq0_line_hold)); I80C51(config, m_beast, 12_MHz_XTAL / 2); // 6.000MHz, verified m_beast->port_in_cb<0>().set(FUNC(djboy_state::beast_p0_r)); @@ -513,17 +513,17 @@ MACHINE_CONFIG_START(djboy_state::djboy) m_beastlatch->data_pending_callback().set_inputline(m_beast, INPUT_LINE_IRQ0); m_beastlatch->set_separate_acknowledge(true); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57.5) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(djboy_state, screen_update_djboy) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, djboy_state, screen_vblank_djboy)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57.5); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 16, 256-16-1); + screen.set_screen_update(FUNC(djboy_state::screen_update_djboy)); + screen.screen_vblank().set(FUNC(djboy_state::screen_vblank_djboy)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_djboy); - MCFG_PALETTE_ADD("palette", 0x200) + PALETTE(config, m_palette).set_entries(0x200); KANEKO_PANDORA(config, m_pandora, 0); m_pandora->set_gfxdecode_tag(m_gfxdecode); @@ -534,18 +534,18 @@ MACHINE_CONFIG_START(djboy_state::djboy) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI); - MCFG_DEVICE_ADD("ymsnd", YM2203, 12_MHz_XTAL / 4) // 3.000MHz, verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.40) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) + ym2203_device &ymsnd(YM2203(config, "ymsnd", 12_MHz_XTAL / 4)); // 3.000MHz, verified + ymsnd.add_route(ALL_OUTPUTS, "lspeaker", 0.40); + ymsnd.add_route(ALL_OUTPUTS, "rspeaker", 0.40); - MCFG_DEVICE_ADD("oki_l", OKIM6295, 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW) // 1.500MHz, verified - MCFG_DEVICE_ROM("oki") - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) + okim6295_device &oki_l(OKIM6295(config, "oki_l", 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW)); // 1.500MHz, verified + oki_l.set_device_rom_tag("oki"); + oki_l.add_route(ALL_OUTPUTS, "lspeaker", 0.50); - MCFG_DEVICE_ADD("oki_r", OKIM6295, 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW) // 1.500MHz, verified - MCFG_DEVICE_ROM("oki") - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) -MACHINE_CONFIG_END + okim6295_device &oki_r(OKIM6295(config, "oki_r", 12_MHz_XTAL / 8, okim6295_device::PIN7_LOW)); // 1.500MHz, verified + oki_r.set_device_rom_tag("oki"); + oki_r.add_route(ALL_OUTPUTS, "rspeaker", 0.50); +} ROM_START( djboy ) diff --git a/src/mame/drivers/djmain.cpp b/src/mame/drivers/djmain.cpp index 1239d9c5df1..11354990fbc 100644 --- a/src/mame/drivers/djmain.cpp +++ b/src/mame/drivers/djmain.cpp @@ -1379,25 +1379,25 @@ void djmain_state::machine_reset() * *************************************/ -MACHINE_CONFIG_START(djmain_state::djmainj) - +void djmain_state::djmainj(machine_config &config) +{ /* basic machine hardware */ // popn3 works 9.6 MHz or slower in some songs */ - //MCFG_DEVICE_ADD("maincpu", M68EC020, 18432000/2) /* 9.216 MHz!? */ - MCFG_DEVICE_ADD("maincpu", M68EC020, 32000000/4) /* 8.000 MHz!? */ - MCFG_DEVICE_PROGRAM_MAP(maincpu_djmainj) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", djmain_state, vb_interrupt) + //M68EC020(config, m_maincpu, 18432000/2); /* 9.216 MHz!? */ + M68EC020(config, m_maincpu, 32000000/4); /* 8.000 MHz!? */ + m_maincpu->set_addrmap(AS_PROGRAM, &djmain_state::maincpu_djmainj); + m_maincpu->set_vblank_int("screen", FUNC(djmain_state::vb_interrupt)); ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, true); m_ata->irq_handler().set(FUNC(djmain_state::ide_interrupt)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA(12, 512-12-1, 0, 384-1) - MCFG_SCREEN_UPDATE_DRIVER(djmain_state, screen_update_djmain) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 64*8); + screen.set_visarea(12, 512-12-1, 0, 384-1); + screen.set_screen_update(FUNC(djmain_state::screen_update_djmain)); PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 0x4440 / 4); GFXDECODE(config, m_gfxdecode, m_palette, gfx_djmain); @@ -1413,28 +1413,28 @@ MACHINE_CONFIG_START(djmain_state::djmainj) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("k054539_1", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + k054539_device &k054539_1(K054539(config, "k054539_1", XTAL(18'432'000))); + k054539_1.set_addrmap(0, &djmain_state::k054539_map); + k054539_1.add_route(0, "lspeaker", 1.0); + k054539_1.add_route(1, "rspeaker", 1.0); - MCFG_DEVICE_ADD("k054539_2", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) -MACHINE_CONFIG_END + k054539_device &k054539_2(K054539(config, "k054539_2", XTAL(18'432'000))); + k054539_2.set_addrmap(0, &djmain_state::k054539_map); + k054539_2.add_route(0, "lspeaker", 1.0); + k054539_2.add_route(1, "rspeaker", 1.0); +} -MACHINE_CONFIG_START(djmain_state::djmainu) +void djmain_state::djmainu(machine_config &config) +{ djmainj(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(maincpu_djmainu) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &djmain_state::maincpu_djmainu); +} -MACHINE_CONFIG_START(djmain_state::djmaina) +void djmain_state::djmaina(machine_config &config) +{ djmainj(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(maincpu_djmaina) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &djmain_state::maincpu_djmaina); +} diff --git a/src/mame/drivers/dkmb.cpp b/src/mame/drivers/dkmb.cpp index 617f45138cf..02684188d89 100644 --- a/src/mame/drivers/dkmb.cpp +++ b/src/mame/drivers/dkmb.cpp @@ -119,24 +119,24 @@ static INPUT_PORTS_START( dkmb ) INPUT_PORTS_END -MACHINE_CONFIG_START(dkmb_state::dkmb) - - MCFG_DEVICE_ADD("maincpu", PPC603R, 75'000'000) // Actually MPC603RRX266LC - MCFG_DEVICE_PROGRAM_MAP(main_map) +void dkmb_state::dkmb(machine_config &config) +{ + PPC603R(config, m_maincpu, 75'000'000); // Actually MPC603RRX266LC + m_maincpu->set_addrmap(AS_PROGRAM, &dkmb_state::main_map); - MCFG_DEVICE_ADD("pic", PIC16C56, 4'000'000) // Actually PIC12C508, clock not verified + PIC16C56(config, "pic", 4'000'000); // Actually PIC12C508, clock not verified - MCFG_SCREEN_ADD("screen", RASTER) // wrong - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_UPDATE_DRIVER(dkmb_state, screen_update) - MCFG_SCREEN_SIZE(1024, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 256-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // wrong + screen.set_refresh_hz(60); + screen.set_screen_update(FUNC(dkmb_state::screen_update)); + screen.set_size(1024, 256); + screen.set_visarea_full(); - MCFG_PALETTE_ADD("palette", 65536) + PALETTE(config, "palette").set_entries(65536); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); -MACHINE_CONFIG_END +} ROM_START( dkmb ) diff --git a/src/mame/drivers/dkong.cpp b/src/mame/drivers/dkong.cpp index 55af4b84ce7..9be28348ab8 100644 --- a/src/mame/drivers/dkong.cpp +++ b/src/mame/drivers/dkong.cpp @@ -1692,11 +1692,11 @@ WRITE_LINE_MEMBER(dkong_state::busreq_w ) m_dma8257->hlda_w(state); } -MACHINE_CONFIG_START(dkong_state::dkong_base) - +void dkong_state::dkong_base(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, Z80, CLOCK_1H) - MCFG_DEVICE_PROGRAM_MAP(dkong_map) + Z80(config, m_maincpu, CLOCK_1H); + m_maincpu->set_addrmap(AS_PROGRAM, &dkong_state::dkong_map); MCFG_MACHINE_START_OVERRIDE(dkong_state,dkong2b) MCFG_MACHINE_RESET_OVERRIDE(dkong_state,dkong) @@ -1710,19 +1710,20 @@ MACHINE_CONFIG_START(dkong_state::dkong_base) m_dma8257->set_reverse_rw_mode(1); // why? /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_dkong) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dkong_state, vblank_irq)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + m_screen->set_screen_update(FUNC(dkong_state::screen_update_dkong)); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(FUNC(dkong_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dkong); PALETTE(config, m_palette, FUNC(dkong_state::dkong2b_palette), DK2B_PALETTE_LENGTH); MCFG_VIDEO_START_OVERRIDE(dkong_state,dkong) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::radarscp) +void dkong_state::radarscp(machine_config &config) +{ dkong_base(config); /* basic machine hardware */ @@ -1732,9 +1733,10 @@ MACHINE_CONFIG_START(dkong_state::radarscp) /* sound hardware */ radarscp_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::radarscp1) +void dkong_state::radarscp1(machine_config &config) +{ dkong_base(config); /* basic machine hardware */ @@ -1744,10 +1746,11 @@ MACHINE_CONFIG_START(dkong_state::radarscp1) /* sound hardware */ radarscp1_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::dkong2b) +void dkong_state::dkong2b(machine_config &config) +{ dkong_base(config); /* basic machine hardware */ @@ -1758,7 +1761,7 @@ MACHINE_CONFIG_START(dkong_state::dkong2b) dkong2b_audio(config); WATCHDOG_TIMER(config, m_watchdog); -MACHINE_CONFIG_END +} void dkong_state::dk_braze(machine_config &config) { @@ -1788,12 +1791,12 @@ void dkong_state::dk3_braze(machine_config &config) EEPROM_93C46_8BIT(config, "eeprom"); } -MACHINE_CONFIG_START(dkong_state::dkong3) - +void dkong_state::dkong3(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(8'000'000) / 2) /* verified in schematics */ - MCFG_DEVICE_PROGRAM_MAP(dkong3_map) - MCFG_DEVICE_IO_MAP(dkong3_io_map) + Z80(config, m_maincpu, XTAL(8'000'000) / 2); /* verified in schematics */ + m_maincpu->set_addrmap(AS_PROGRAM, &dkong_state::dkong3_map); + m_maincpu->set_addrmap(AS_IO, &dkong_state::dkong3_io_map); MCFG_MACHINE_START_OVERRIDE(dkong_state, dkong3) @@ -1818,27 +1821,28 @@ MACHINE_CONFIG_START(dkong_state::dkong3) /* sound hardware */ dkong3_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::dkongjr) +void dkong_state::dkongjr(machine_config &config) +{ dkong_base(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(dkongjr_map) + m_maincpu->set_addrmap(AS_PROGRAM, &dkong_state::dkongjr_map); /* sound hardware */ dkongjr_audio(config); WATCHDOG_TIMER(config, m_watchdog); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::pestplce) +void dkong_state::pestplce(machine_config &config) +{ dkongjr(config); /* video hardware */ m_palette->set_init(FUNC(dkong_state::dkong2b_palette)); // wrong! m_screen->set_screen_update(FUNC(dkong_state::screen_update_pestplce)); -MACHINE_CONFIG_END +} void dkong_state::dkong3b(machine_config &config) { @@ -1893,35 +1897,35 @@ void dkong_state::spclforc(machine_config &config) * *************************************/ -MACHINE_CONFIG_START(dkong_state::strtheat) +void dkong_state::strtheat(machine_config &config) +{ dkong2b(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(epos_readport) + m_maincpu->set_addrmap(AS_IO, &dkong_state::epos_readport); MCFG_MACHINE_RESET_OVERRIDE(dkong_state,strtheat) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::drakton) +void dkong_state::drakton(machine_config &config) +{ dkong2b(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(epos_readport) + m_maincpu->set_addrmap(AS_IO, &dkong_state::epos_readport); MCFG_MACHINE_RESET_OVERRIDE(dkong_state,drakton) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dkong_state::drktnjr) +void dkong_state::drktnjr(machine_config &config) +{ dkongjr(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(epos_readport) + m_maincpu->set_addrmap(AS_IO, &dkong_state::epos_readport); MCFG_MACHINE_RESET_OVERRIDE(dkong_state,drakton) -MACHINE_CONFIG_END +} /************************************* * diff --git a/src/mame/drivers/dlair2.cpp b/src/mame/drivers/dlair2.cpp index 2ce7003e0d7..daf30d47ebb 100644 --- a/src/mame/drivers/dlair2.cpp +++ b/src/mame/drivers/dlair2.cpp @@ -183,22 +183,22 @@ INTERRUPT_GEN_MEMBER(dlair2_state::dlair2_timer_irq) device.execute().set_input_line_and_vector(0,HOLD_LINE,0x20/4); } -MACHINE_CONFIG_START(dlair2_state::dlair2) - +void dlair2_state::dlair2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8088 , MAIN_CLOCK/3) /* Schematics show I8088 "max" CPU */ - MCFG_DEVICE_PROGRAM_MAP(dlair2_map) - MCFG_DEVICE_IO_MAP(dlair2_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(dlair2_state, dlair2_timer_irq, 60) // timer irq, TODO: timing + I8088(config, m_maincpu, MAIN_CLOCK/3); /* Schematics show I8088 "max" CPU */ + m_maincpu->set_addrmap(AS_PROGRAM, &dlair2_state::dlair2_map); + m_maincpu->set_addrmap(AS_IO, &dlair2_state::dlair2_io); + m_maincpu->set_periodic_int(FUNC(dlair2_state::dlair2_timer_irq), attotime::from_hz(60)); // timer irq, TODO: timing /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(dlair2_state, screen_update) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_screen_update(FUNC(dlair2_state::screen_update)); + screen.set_size(32*8, 32*8); + screen.set_visarea_full(); + screen.set_palette("palette"); // GFXDECODE(config, "gfxdecode", "palette", gfx_dlair2); @@ -206,7 +206,7 @@ MACHINE_CONFIG_START(dlair2_state::dlair2) /* sound hardware */ SPEAKER(config, "mono").front_center(); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/dmax8000.cpp b/src/mame/drivers/dmax8000.cpp index f6a0a6cfae7..fea238d8e2e 100644 --- a/src/mame/drivers/dmax8000.cpp +++ b/src/mame/drivers/dmax8000.cpp @@ -152,11 +152,12 @@ static void floppies(device_slot_interface &device) } -MACHINE_CONFIG_START(dmax8000_state::dmax8000) +void dmax8000_state::dmax8000(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 4'000'000) // no idea what crystal is used, but 4MHz clock is confirmed - MCFG_DEVICE_PROGRAM_MAP(dmax8000_mem) - MCFG_DEVICE_IO_MAP(dmax8000_io) + Z80(config, m_maincpu, 4'000'000); // no idea what crystal is used, but 4MHz clock is confirmed + m_maincpu->set_addrmap(AS_PROGRAM, &dmax8000_state::dmax8000_mem); + m_maincpu->set_addrmap(AS_IO, &dmax8000_state::dmax8000_io); MCFG_MACHINE_RESET_OVERRIDE(dmax8000_state, dmax8000) z80ctc_device &ctc(Z80CTC(config, "ctc", 4_MHz_XTAL)); @@ -198,7 +199,7 @@ MACHINE_CONFIG_START(dmax8000_state::dmax8000) // this is all guess rtc.set_mode24(0); // 12 hour rtc.set_day1(1); // monday -MACHINE_CONFIG_END +} /* ROM definition */ diff --git a/src/mame/drivers/dmndrby.cpp b/src/mame/drivers/dmndrby.cpp index 00f63ad35a8..25b833b0540 100644 --- a/src/mame/drivers/dmndrby.cpp +++ b/src/mame/drivers/dmndrby.cpp @@ -115,7 +115,7 @@ private: WRITE8_MEMBER(dmndrby_state::dderby_sound_w) { - m_soundlatch->write(space,0,data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -535,27 +535,28 @@ INTERRUPT_GEN_MEMBER(dmndrby_state::dderby_timer_irq) m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xcf); /* RST 08h */ } -MACHINE_CONFIG_START(dmndrby_state::dderby) +void dmndrby_state::dderby(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,4000000) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(memmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dmndrby_state, dderby_irq) - MCFG_DEVICE_PERIODIC_INT_DRIVER(dmndrby_state, dderby_timer_irq, 244/2) + Z80(config, m_maincpu, 4000000); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &dmndrby_state::memmap); + m_maincpu->set_vblank_int("screen", FUNC(dmndrby_state::dderby_irq)); + m_maincpu->set_periodic_int(FUNC(dmndrby_state::dderby_timer_irq), attotime::from_hz(244/2)); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* verified on schematics */ - MCFG_DEVICE_PROGRAM_MAP(dderby_sound_map) + Z80(config, m_audiocpu, 4000000); /* verified on schematics */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dmndrby_state::dderby_sound_map); config.m_minimum_quantum = attotime::from_hz(6000); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(dmndrby_state, screen_update_dderby) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 16, 256-16-1); + screen.set_screen_update(FUNC(dmndrby_state::screen_update_dderby)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dmndrby); PALETTE(config, m_palette, FUNC(dmndrby_state::dmndrby_palette), 0x300, 0x20); @@ -565,7 +566,7 @@ MACHINE_CONFIG_START(dmndrby_state::dderby) GENERIC_LATCH_8(config, m_soundlatch); AY8910(config, "ay1", 1789750).add_route(ALL_OUTPUTS, "mono", 0.35); // frequency guessed -MACHINE_CONFIG_END +} ROM_START( dmndrby ) diff --git a/src/mame/drivers/dms5000.cpp b/src/mame/drivers/dms5000.cpp index 06e14ea41c0..1eb4a93cc4a 100644 --- a/src/mame/drivers/dms5000.cpp +++ b/src/mame/drivers/dms5000.cpp @@ -94,25 +94,26 @@ uint32_t dms5000_state::screen_update_dms5000(screen_device &screen, bitmap_ind1 return 0; } -MACHINE_CONFIG_START(dms5000_state::dms5000) +void dms5000_state::dms5000(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8086, XTAL(9'830'400)) - MCFG_DEVICE_PROGRAM_MAP(dms5000_mem) - MCFG_DEVICE_IO_MAP(dms5000_io) + I8086(config, m_maincpu, XTAL(9'830'400)); + m_maincpu->set_addrmap(AS_PROGRAM, &dms5000_state::dms5000_mem); + m_maincpu->set_addrmap(AS_IO, &dms5000_state::dms5000_io); - MCFG_DEVICE_ADD("cntlatch", LS259, 0) // V34 + LS259(config, "cntlatch", 0); // V34 /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(dms5000_state, screen_update_dms5000) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(50); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + m_screen->set_size(640, 480); + m_screen->set_visarea_full(); + m_screen->set_screen_update(FUNC(dms5000_state::screen_update_dms5000)); + m_screen->set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( dms5000 ) diff --git a/src/mame/drivers/dogfgt.cpp b/src/mame/drivers/dogfgt.cpp index 90943c3da50..b419707cf60 100644 --- a/src/mame/drivers/dogfgt.cpp +++ b/src/mame/drivers/dogfgt.cpp @@ -227,26 +227,26 @@ void dogfgt_state::machine_reset() } -MACHINE_CONFIG_START(dogfgt_state::dogfgt) - +void dogfgt_state::dogfgt(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, M6502, 1500000) /* 1.5 MHz ???? */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(dogfgt_state, irq0_line_hold, 16*60) /* ? controls music tempo */ + M6502(config, m_maincpu, 1500000); /* 1.5 MHz ???? */ + m_maincpu->set_addrmap(AS_PROGRAM, &dogfgt_state::main_map); + m_maincpu->set_periodic_int(FUNC(dogfgt_state::irq0_line_hold), attotime::from_hz(16*60)); /* ? controls music tempo */ - MCFG_DEVICE_ADD(m_subcpu, M6502, 1500000) /* 1.5 MHz ???? */ - MCFG_DEVICE_PROGRAM_MAP(sub_map) + M6502(config, m_subcpu, 1500000); /* 1.5 MHz ???? */ + m_subcpu->set_addrmap(AS_PROGRAM, &dogfgt_state::sub_map); config.m_minimum_quantum = attotime::from_hz(6000); /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dogfgt_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(dogfgt_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dogfgt); PALETTE(config, m_palette, FUNC(dogfgt_state::dogfgt_palette)).set_format(palette_device::BGR_233, 16 + 64); @@ -256,7 +256,7 @@ MACHINE_CONFIG_START(dogfgt_state::dogfgt) AY8910(config, m_ay[0], 1500000).add_route(ALL_OUTPUTS, "mono", 0.30); AY8910(config, m_ay[1], 1500000).add_route(ALL_OUTPUTS, "mono", 0.30); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/dominob.cpp b/src/mame/drivers/dominob.cpp index 913b7da384e..3daa7ceede5 100644 --- a/src/mame/drivers/dominob.cpp +++ b/src/mame/drivers/dominob.cpp @@ -302,22 +302,22 @@ static GFXDECODE_START( gfx_dominob ) GFXDECODE_END -MACHINE_CONFIG_START(dominob_state::dominob) - +void dominob_state::dominob(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,XTAL(12'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(memmap) - MCFG_DEVICE_IO_MAP(portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dominob_state, irq0_line_hold) + Z80(config, m_maincpu, XTAL(12'000'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &dominob_state::memmap); + m_maincpu->set_addrmap(AS_IO, &dominob_state::portmap); + m_maincpu->set_vblank_int("screen", FUNC(dominob_state::irq0_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(59.1524) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dominob_state, screen_update_dominob) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(59.1524); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 32*8-1); + screen.set_screen_update(FUNC(dominob_state::screen_update_dominob)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dominob); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 512); @@ -327,7 +327,7 @@ MACHINE_CONFIG_START(dominob_state::dominob) ym2149_device &aysnd(YM2149(config, "aysnd", XTAL(12'000'000)/4)); aysnd.port_b_read_callback().set_ioport("DSW"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.30); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/dooyong.cpp b/src/mame/drivers/dooyong.cpp index 0a7836e1d07..64acce48ce0 100644 --- a/src/mame/drivers/dooyong.cpp +++ b/src/mame/drivers/dooyong.cpp @@ -1447,7 +1447,8 @@ void dooyong_z80_ym2203_state::sound_2203(machine_config &config) ym2.add_route(ALL_OUTPUTS, "mono", 0.40); } -MACHINE_CONFIG_START(dooyong_z80_state::sound_2151) +void dooyong_z80_state::sound_2151(machine_config &config) +{ SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, "soundlatch"); @@ -1457,11 +1458,11 @@ MACHINE_CONFIG_START(dooyong_z80_state::sound_2151) ymsnd.add_route(0, "mono", 0.50); ymsnd.add_route(1, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, 1_MHz_XTAL, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END + OKIM6295(config, "oki", 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); +} -MACHINE_CONFIG_START(dooyong_state::sound_2151_4mhz) +void dooyong_state::sound_2151_4mhz(machine_config &config) +{ SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, "soundlatch"); @@ -1471,33 +1472,32 @@ MACHINE_CONFIG_START(dooyong_state::sound_2151_4mhz) ymsnd.add_route(0, "mono", 0.50); ymsnd.add_route(1, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH) /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(dooyong_z80_ym2203_state::lastday) + OKIM6295(config, "oki", 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */ +} +void dooyong_z80_ym2203_state::lastday(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8MHz verified for Last Day / D-day */ - MCFG_DEVICE_PROGRAM_MAP(lastday_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold) + Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8MHz verified for Last Day / D-day */ + m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_map); + m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4MHz verified for Last Day / D-day */ - MCFG_DEVICE_PROGRAM_MAP(lastday_sound_map) + Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4MHz verified for Last Day / D-day */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_sound_map); MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80) /* video hardware */ - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_lastday) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 ); + screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_lastday)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 1024); @@ -1524,31 +1524,31 @@ MACHINE_CONFIG_START(dooyong_z80_ym2203_state::lastday) ym2.irq_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>)); ym2.port_a_read_callback().set(FUNC(dooyong_z80_ym2203_state::unk_r)); ym2.add_route(ALL_OUTPUTS, "mono", 0.40); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(dooyong_z80_ym2203_state::gulfstrm) +} +void dooyong_z80_ym2203_state::gulfstrm(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 8000000) /* ??? */ - MCFG_DEVICE_PROGRAM_MAP(gulfstrm_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold) + Z80(config, m_maincpu, 8000000); /* ??? */ + m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::gulfstrm_map); + m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 8000000) /* ??? */ - MCFG_DEVICE_PROGRAM_MAP(lastday_sound_map) + Z80(config, m_audiocpu, 8000000); /* ??? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_sound_map); MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80) /* video hardware */ - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_gulfstrm) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 ); + screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_gulfstrm)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024); @@ -1561,31 +1561,31 @@ MACHINE_CONFIG_START(dooyong_z80_ym2203_state::gulfstrm) /* sound hardware */ sound_2203(config); /* 3.579545MHz */ -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(dooyong_z80_ym2203_state::pollux) +} +void dooyong_z80_ym2203_state::pollux(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8Mhz */ - MCFG_DEVICE_PROGRAM_MAP(pollux_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold) + Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8Mhz */ + m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::pollux_map); + m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4Mhz */ - MCFG_DEVICE_PROGRAM_MAP(pollux_sound_map) + Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4Mhz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::pollux_sound_map); MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80) /* video hardware */ - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_ym2203_state, screen_update_pollux) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 ); + screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_pollux)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024*2); @@ -1598,31 +1598,31 @@ MACHINE_CONFIG_START(dooyong_z80_ym2203_state::pollux) /* sound hardware */ sound_2203(config); /* 3.579545MHz or 4Mhz ??? */ -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(dooyong_z80_state::bluehawk) +} +void dooyong_z80_state::bluehawk(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 8000000) /* ??? */ - MCFG_DEVICE_PROGRAM_MAP(bluehawk_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold) + Z80(config, m_maincpu, 8000000); /* ??? */ + m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_map); + m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* ??? */ - MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map) + Z80(config, m_audiocpu, 4000000); /* ??? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map); MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) /* video hardware */ - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_bluehawk) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 ); + screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_bluehawk)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bluehawk); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024); @@ -1637,31 +1637,31 @@ MACHINE_CONFIG_START(dooyong_z80_state::bluehawk) /* sound hardware */ sound_2151(config); /* 3.579545MHz or 4Mhz ??? */ -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(dooyong_z80_state::flytiger) +} +void dooyong_z80_state::flytiger(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8MHz */ - MCFG_DEVICE_PROGRAM_MAP(flytiger_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold) + Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::flytiger_map); + m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4Mhz */ - MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map) + Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4Mhz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map); MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) /* video hardware */ - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_flytiger) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram8_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 ); + screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_flytiger)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_flytiger); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024*2); @@ -1675,28 +1675,28 @@ MACHINE_CONFIG_START(dooyong_z80_state::flytiger) /* sound hardware */ sound_2151(config); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(dooyong_z80_state::primella) +} +void dooyong_z80_state::primella(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL/2) /* 8MHz */ - MCFG_DEVICE_PROGRAM_MAP(primella_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dooyong_state, irq0_line_hold) + Z80(config, m_maincpu, 16_MHz_XTAL/2); /* 8MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::primella_map); + m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold)); - MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) /* 4MHz */ - MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map) + Z80(config, m_audiocpu, 16_MHz_XTAL/4); /* 4MHz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map); MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 0*8, 32*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(dooyong_z80_state, screen_update_primella) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 0*8, 32*8-1 ); + screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_primella)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_primella); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024); @@ -1711,7 +1711,7 @@ MACHINE_CONFIG_START(dooyong_z80_state::primella) /* sound hardware */ sound_2151_4mhz(config); /* PCB has only 1 OSC at 16Mhz */ -MACHINE_CONFIG_END +} TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline) @@ -1726,26 +1726,26 @@ TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline) } -MACHINE_CONFIG_START(rshark_state::dooyong_68k) - +void rshark_state::dooyong_68k(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD("maincpu", M68000, 8_MHz_XTAL) // 8MHz measured on Super-X + M68000(config, m_maincpu, 8_MHz_XTAL); // 8MHz measured on Super-X TIMER(config, "scantimer").configure_scanline(FUNC(rshark_state::scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, 8_MHz_XTAL/2) // 4MHz measured on Super-X - MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map) + Z80(config, m_audiocpu, 8_MHz_XTAL/2); // 4MHz measured on Super-X + m_audiocpu->set_addrmap(AS_PROGRAM, &rshark_state::bluehawk_sound_map); // video hardware - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(rshark_state, screen_update_rshark) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(rshark_state::screen_update_rshark)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_rshark); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048); @@ -1760,43 +1760,43 @@ MACHINE_CONFIG_START(rshark_state::dooyong_68k) // sound hardware sound_2151_4mhz(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(rshark_state::rshark) +void rshark_state::rshark(machine_config &config) +{ dooyong_68k(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(rshark_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &rshark_state::rshark_map); +} -MACHINE_CONFIG_START(rshark_state::superx) +void rshark_state::superx(machine_config &config) +{ dooyong_68k(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(superx_map) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(popbingo_state::popbingo) + m_maincpu->set_addrmap(AS_PROGRAM, &rshark_state::superx_map); +} +void popbingo_state::popbingo(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD("maincpu", M68000, 20_MHz_XTAL/2) // 10MHz measured - MCFG_DEVICE_PROGRAM_MAP(popbingo_map) + M68000(config, m_maincpu, 20_MHz_XTAL/2); // 10MHz measured + m_maincpu->set_addrmap(AS_PROGRAM, &popbingo_state::popbingo_map); TIMER(config, "scantimer").configure_scanline(FUNC(popbingo_state::scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, 16_MHz_XTAL/4) // 4MHz measured - MCFG_DEVICE_PROGRAM_MAP(bluehawk_sound_map) + Z80(config, m_audiocpu, 16_MHz_XTAL/4); // 4MHz measured + m_audiocpu->set_addrmap(AS_PROGRAM, &popbingo_state::bluehawk_sound_map); // video hardware - MCFG_DEVICE_ADD(m_spriteram, BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(popbingo_state, screen_update_popbingo) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(m_spriteram, buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1); + m_screen->set_screen_update(FUNC(popbingo_state::screen_update_popbingo)); + m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_popbingo); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048); @@ -1808,7 +1808,7 @@ MACHINE_CONFIG_START(popbingo_state::popbingo) // sound hardware sound_2151_4mhz(config); -MACHINE_CONFIG_END +} } // anonymous namespace diff --git a/src/mame/drivers/dorachan.cpp b/src/mame/drivers/dorachan.cpp index a4c377f8cf2..9c08186054f 100644 --- a/src/mame/drivers/dorachan.cpp +++ b/src/mame/drivers/dorachan.cpp @@ -226,23 +226,23 @@ void dorachan_state::machine_reset() m_prot_value = 0; } -MACHINE_CONFIG_START(dorachan_state::dorachan) - +void dorachan_state::dorachan(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 2000000) - MCFG_DEVICE_PROGRAM_MAP(dorachan_map) - MCFG_DEVICE_IO_MAP(dorachan_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(dorachan_state, irq0_line_hold, 2*60) + Z80(config, m_maincpu, 2000000); + m_maincpu->set_addrmap(AS_PROGRAM, &dorachan_state::dorachan_map); + m_maincpu->set_addrmap(AS_IO, &dorachan_state::dorachan_io_map); + m_maincpu->set_periodic_int(FUNC(dorachan_state::irq0_line_hold), attotime::from_hz(2*60)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_UPDATE_DRIVER(dorachan_state, screen_update_dorachan) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_refresh_hz(60); + m_screen->set_screen_update(FUNC(dorachan_state::screen_update_dorachan)); PALETTE(config, m_palette, palette_device::BGR_3BIT); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/dotrikun.cpp b/src/mame/drivers/dotrikun.cpp index cc4a1a22bec..0a379652e2c 100644 --- a/src/mame/drivers/dotrikun.cpp +++ b/src/mame/drivers/dotrikun.cpp @@ -197,26 +197,27 @@ void dotrikun_state::machine_reset() m_color = 0; } -MACHINE_CONFIG_START(dotrikun_state::dotrikun) - +void dotrikun_state::dotrikun(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, MASTER_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(dotrikun_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, MASTER_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &dotrikun_state::dotrikun_map); + m_maincpu->set_addrmap(AS_IO, &dotrikun_state::io_map); + TIMER(config, "scanline_on").configure_scanline(FUNC(dotrikun_state::scanline_on), "screen", 0, 1); TIMER(config, m_scanline_off_timer).configure_generic(FUNC(dotrikun_state::scanline_off)); TIMER(config, m_interrupt_timer).configure_generic(FUNC(dotrikun_state::interrupt)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK, 128+128, 0, 128, 192+64, 0, 192) - MCFG_SCREEN_UPDATE_DRIVER(dotrikun_state, screen_update) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(MASTER_CLOCK, 128+128, 0, 128, 192+64, 0, 192); + m_screen->set_screen_update(FUNC(dotrikun_state::screen_update)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette("palette"); PALETTE(config, "palette", palette_device::RGB_3BIT); /* no sound hardware */ -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp index 82ddfb2d936..c336b62b628 100644 --- a/src/mame/drivers/dragon.cpp +++ b/src/mame/drivers/dragon.cpp @@ -187,13 +187,13 @@ static void dragon_alpha_floppies(device_slot_interface &device) device.option_add("dd", FLOPPY_35_DD); } -MACHINE_CONFIG_START(dragon_state::dragon_base) - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(14.218_MHz_XTAL / 16) +void dragon_state::dragon_base(machine_config &config) +{ + this->set_clock(14.218_MHz_XTAL / 16); // basic machine hardware - MCFG_DEVICE_ADD("maincpu", MC6809E, DERIVED_CLOCK(1, 1)) - MCFG_DEVICE_PROGRAM_MAP(dragon_mem) + MC6809E(config, m_maincpu, DERIVED_CLOCK(1, 1)); + m_maincpu->set_addrmap(AS_PROGRAM, &dragon_state::dragon_mem); // devices pia6821_device &pia0(PIA6821(config, PIA0_TAG, 0)); @@ -243,9 +243,10 @@ MACHINE_CONFIG_START(dragon_state::dragon_base) SOFTWARE_LIST(config, "dragon_cass_list").set_original("dragon_cass"); SOFTWARE_LIST(config, "dragon_flop_list").set_original("dragon_flop"); SOFTWARE_LIST(config, "coco_cart_list").set_compatible("coco_cart"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(dragon_state::dragon32) +void dragon_state::dragon32(machine_config &config) +{ dragon_base(config); // internal ram RAM(config, m_ram).set_default_size("32K").set_extra_options("64K"); @@ -255,7 +256,7 @@ MACHINE_CONFIG_START(dragon_state::dragon32) cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); -MACHINE_CONFIG_END +} void dragon64_state::dragon64(machine_config &config) { @@ -278,13 +279,14 @@ void dragon64_state::dragon64(machine_config &config) SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9"); } -MACHINE_CONFIG_START(dragon64_state::dragon64h) +void dragon64_state::dragon64h(machine_config &config) +{ dragon64(config); // Replace M6809 with HD6309 - MCFG_DEVICE_REPLACE(MAINCPU_TAG, HD6309E, DERIVED_CLOCK(1, 1)) - MCFG_DEVICE_PROGRAM_MAP(dragon_mem) + HD6309E(config.replace(), m_maincpu, DERIVED_CLOCK(1, 1)); + m_maincpu->set_addrmap(AS_PROGRAM, &dragon64_state::dragon_mem); m_ram->set_default_size("64K"); -MACHINE_CONFIG_END +} void dragon200e_state::dragon200e(machine_config &config) { @@ -293,15 +295,16 @@ void dragon200e_state::dragon200e(machine_config &config) m_vdg->set_get_char_rom(FUNC(dragon200e_state::char_rom_r)); } -MACHINE_CONFIG_START(d64plus_state::d64plus) +void d64plus_state::d64plus(machine_config &config) +{ dragon64(config); // video hardware - MCFG_SCREEN_ADD("plus_screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(640, 264) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 264-1) - MCFG_SCREEN_UPDATE_DEVICE("crtc", hd6845_device, screen_update) + screen_device &plus_screen(SCREEN(config, "plus_screen", SCREEN_TYPE_RASTER)); + plus_screen.set_refresh_hz(50); + plus_screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + plus_screen.set_size(640, 264); + plus_screen.set_visarea_full(); + plus_screen.set_screen_update("crtc", FUNC(hd6845_device::screen_update)); PALETTE(config, m_palette, palette_device::MONOCHROME); // crtc @@ -310,7 +313,7 @@ MACHINE_CONFIG_START(d64plus_state::d64plus) m_crtc->set_show_border_area(false); m_crtc->set_char_width(8); m_crtc->set_update_row_callback(FUNC(d64plus_state::crtc_update_row), this); -MACHINE_CONFIG_END +} void dragon_alpha_state::dgnalpha(machine_config &config) { @@ -356,10 +359,10 @@ void dragon_alpha_state::dgnalpha(machine_config &config) SOFTWARE_LIST(config, "dragon_os9_list").set_original("dragon_os9"); } -MACHINE_CONFIG_START(dragon64_state::tanodr64) +void dragon64_state::tanodr64(machine_config &config) +{ dragon64(config); - MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(14.318181_MHz_XTAL / 16) + this->set_clock(14.318181_MHz_XTAL / 16); m_sam->set_clock(14.318181_MHz_XTAL); @@ -371,17 +374,17 @@ MACHINE_CONFIG_START(dragon64_state::tanodr64) m_vdg->input_callback().set(m_sam, FUNC(sam6883_device::display_read)); // cartridge - MCFG_DEVICE_MODIFY(CARTRIDGE_TAG) - MCFG_DEVICE_SLOT_INTERFACE(dragon_cart, "sdtandy_fdc", false) -MACHINE_CONFIG_END + subdevice<cococart_slot_device>(CARTRIDGE_TAG)->set_default_option("sdtandy_fdc"); +} -MACHINE_CONFIG_START(dragon64_state::tanodr64h) +void dragon64_state::tanodr64h(machine_config &config) +{ tanodr64(config); // Replace M6809 CPU with HD6309 CPU - MCFG_DEVICE_REPLACE(MAINCPU_TAG, HD6309E, DERIVED_CLOCK(1, 1)) - MCFG_DEVICE_PROGRAM_MAP(dragon_mem) + HD6309E(config.replace(), m_maincpu, DERIVED_CLOCK(1, 1)); + m_maincpu->set_addrmap(AS_PROGRAM, &dragon64_state::dragon_mem); m_ram->set_default_size("64K"); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/dragrace.cpp b/src/mame/drivers/dragrace.cpp index ac22a6b9920..876a8a1527c 100644 --- a/src/mame/drivers/dragrace.cpp +++ b/src/mame/drivers/dragrace.cpp @@ -272,24 +272,24 @@ void dragrace_state::machine_reset() m_gear[1] = 0; } -MACHINE_CONFIG_START(dragrace_state::dragrace) - +void dragrace_state::dragrace(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6800, 12.096_MHz_XTAL / 12) - MCFG_DEVICE_PROGRAM_MAP(dragrace_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(dragrace_state, irq0_line_hold, 4*60) + M6800(config, m_maincpu, 12.096_MHz_XTAL / 12); + m_maincpu->set_addrmap(AS_PROGRAM, &dragrace_state::dragrace_map); + m_maincpu->set_periodic_int(FUNC(dragrace_state::irq0_line_hold), attotime::from_hz(4*60)); WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8); TIMER(config, "frame_timer").configure_periodic(FUNC(dragrace_state::dragrace_frame_callback), attotime::from_hz(60)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(256, 262) - MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(dragrace_state, screen_update_dragrace) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(256, 262); + m_screen->set_visarea(0, 255, 0, 239); + m_screen->set_screen_update(FUNC(dragrace_state::screen_update_dragrace)); + m_screen->set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_dragrace); PALETTE(config, "palette", FUNC(dragrace_state::dragrace_palette), 16); @@ -298,9 +298,9 @@ MACHINE_CONFIG_START(dragrace_state::dragrace) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("discrete", DISCRETE, dragrace_discrete) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + DISCRETE(config, m_discrete, dragrace_discrete); + m_discrete->add_route(0, "lspeaker", 1.0); + m_discrete->add_route(1, "rspeaker", 1.0); f9334_device &latch_f5(F9334(config, "latch_f5")); // F5 latch_f5.parallel_out_cb().set(FUNC(dragrace_state::speed1_w)).mask(0x1f); // set 3SPEED1-7SPEED1 @@ -324,7 +324,7 @@ MACHINE_CONFIG_START(dragrace_state::dragrace) latch_e5.q_out_cb<3>().set(m_discrete, FUNC(discrete_device::write_line<DRAGRACE_MOTOR2_EN>)); // Motor2 enable latch_e5.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line<DRAGRACE_HITONE_EN>)); // HiTone enable latch_e5.q_out_cb<7>().set_output("led1"); // Player 2 Start Lamp -MACHINE_CONFIG_END +} ROM_START( dragrace ) diff --git a/src/mame/drivers/dreambal.cpp b/src/mame/drivers/dreambal.cpp index 84da2840c07..6040f329c5f 100644 --- a/src/mame/drivers/dreambal.cpp +++ b/src/mame/drivers/dreambal.cpp @@ -311,21 +311,21 @@ void dreambal_state::machine_reset() } // xtals = 28.000, 9.8304 -MACHINE_CONFIG_START(dreambal_state::dreambal) - +void dreambal_state::dreambal(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 28000000/2) - MCFG_DEVICE_PROGRAM_MAP(dreambal_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dreambal_state, irq6_line_hold) // 5 valid too? + M68000(config, m_maincpu, 28000000/2); + m_maincpu->set_addrmap(AS_PROGRAM, &dreambal_state::dreambal_map); + m_maincpu->set_vblank_int("screen", FUNC(dreambal_state::irq6_line_hold)); // 5 valid too? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dreambal_state, screen_update_dreambal) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(dreambal_state::screen_update_dreambal)); + screen.set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xBGR_444, 0x400/2); GFXDECODE(config, "gfxdecode", "palette", gfx_dreambal); @@ -338,7 +338,6 @@ MACHINE_CONFIG_START(dreambal_state::dreambal) m_deco104->port_c_cb().set_ioport("DSW"); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); @@ -356,10 +355,8 @@ MACHINE_CONFIG_START(dreambal_state::dreambal) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 9830400/8, okim6295_device::PIN7_HIGH) - - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + OKIM6295(config, "oki", 9830400/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00); +} diff --git a/src/mame/drivers/dreamwld.cpp b/src/mame/drivers/dreamwld.cpp index cc93023d745..8267c94898b 100644 --- a/src/mame/drivers/dreamwld.cpp +++ b/src/mame/drivers/dreamwld.cpp @@ -746,48 +746,46 @@ void dreamwld_state::machine_reset() } -MACHINE_CONFIG_START(dreamwld_state::baryon) - +void dreamwld_state::baryon(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68EC020, XTAL(32'000'000)/2) /* 16MHz verified */ - MCFG_DEVICE_PROGRAM_MAP(baryon_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dreamwld_state, irq4_line_hold) + M68EC020(config, m_maincpu, XTAL(32'000'000)/2); /* 16MHz verified */ + m_maincpu->set_addrmap(AS_PROGRAM, &dreamwld_state::baryon_map); + m_maincpu->set_vblank_int("screen", FUNC(dreamwld_state::irq4_line_hold)); - MCFG_DEVICE_ADD("mcu", AT89C52, XTAL(32'000'000)/2) /* AT89C52 or 87(C)52, unknown clock (value from docs) */ - MCFG_DEVICE_DISABLE() /* Internal ROM aren't dumped */ + AT89C52(config, "mcu", XTAL(32'000'000)/2).set_disable(); /* AT89C52 or 87(C)52, unknown clock (value from docs), internal ROMs aren't dumped */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(57.793) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(512,256) - MCFG_SCREEN_VISIBLE_AREA(0, 308-1, 0, 224-1) - MCFG_SCREEN_UPDATE_DRIVER(dreamwld_state, screen_update_dreamwld) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dreamwld_state, screen_vblank_dreamwld)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(57.793); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(512,256); + screen.set_visarea(0, 308-1, 0, 224-1); + screen.set_screen_update(FUNC(dreamwld_state::screen_update_dreamwld)); + screen.screen_vblank().set(FUNC(dreamwld_state::screen_vblank_dreamwld)); + screen.set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dreamwld); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_LOW) /* 1MHz verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - MCFG_DEVICE_ADDRESS_MAP(0, oki1_map) -MACHINE_CONFIG_END + okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'000'000)/32, okim6295_device::PIN7_LOW)); /* 1MHz verified */ + oki1.add_route(ALL_OUTPUTS, "mono", 1.00); + oki1.set_addrmap(0, &dreamwld_state::oki1_map); +} -MACHINE_CONFIG_START(dreamwld_state::dreamwld) +void dreamwld_state::dreamwld(machine_config &config) +{ baryon(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(dreamwld_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dreamwld_state, irq4_line_hold) + m_maincpu->set_addrmap(AS_PROGRAM, &dreamwld_state::dreamwld_map); - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_LOW) /* 1MHz verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - MCFG_DEVICE_ADDRESS_MAP(0, oki2_map) -MACHINE_CONFIG_END + okim6295_device &oki2(OKIM6295(config, "oki2", XTAL(32'000'000)/32, okim6295_device::PIN7_LOW)); /* 1MHz verified */ + oki2.add_route(ALL_OUTPUTS, "mono", 1.00); + oki2.set_addrmap(0, &dreamwld_state::oki2_map); +} /* @@ -1023,7 +1021,7 @@ ROM_START( rolcrush ) ROM_LOAD( "mx27c4000_5.bin", 0x000000, 0x80000, CRC(7afa6adb) SHA1(d4049e1068a5f7abf0e14d0b9fbbbc6dfb5d0170) ) ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKI Samples - 2nd chip (neither OKI or rom is present, empty sockets) */ - /* not populared */ + /* not populated */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */ ROM_LOAD( "m27c160.8.bin", 0x000000, 0x200000, CRC(a509bc36) SHA1(aaa008e07e4b24ff9dbcee5925d6516d1662931c) ) @@ -1057,7 +1055,7 @@ ROM_START( rolcrusha ) ROM_LOAD( "5", 0x000000, 0x80000, CRC(7afa6adb) SHA1(d4049e1068a5f7abf0e14d0b9fbbbc6dfb5d0170) ) ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKI Samples - 2nd chip (neither OKI or rom is present, empty sockets) */ - /* not populared */ + /* not populated */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */ ROM_LOAD( "8", 0x000000, 0x200000, CRC(01446191) SHA1(b106ed6c085fad617552972db78866a3346e4553) ) @@ -1219,7 +1217,7 @@ ROM_START( gaialast ) ROM_LOAD( "1", 0x000000, 0x80000, CRC(2dbad410) SHA1(bb788ea14bb605be9af9c8f8adec94ad1c17ab55) ) ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKI Samples - 2nd chip (neither OKI or rom is present, empty sockets) */ - /* not populared */ + /* not populated */ ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprite Tiles - decoded */ ROM_LOAD( "10", 0x000000, 0x200000, CRC(5822ef93) SHA1(8ce22c30f8027f35c5f72eb6ce57a74540dd55da) ) diff --git a/src/mame/drivers/drgnmst.cpp b/src/mame/drivers/drgnmst.cpp index 67be3d857a5..5928ea8497c 100644 --- a/src/mame/drivers/drgnmst.cpp +++ b/src/mame/drivers/drgnmst.cpp @@ -373,11 +373,11 @@ void drgnmst_state::machine_reset() m_oki_bank[0] = 0; } -MACHINE_CONFIG_START(drgnmst_state::drgnmst) - - MCFG_DEVICE_ADD("maincpu", M68000, 12_MHz_XTAL) /* Confirmed */ - MCFG_DEVICE_PROGRAM_MAP(drgnmst_main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", drgnmst_state, irq2_line_hold) +void drgnmst_state::drgnmst(machine_config &config) +{ + M68000(config, m_maincpu, 12_MHz_XTAL); /* Confirmed */ + m_maincpu->set_addrmap(AS_PROGRAM, &drgnmst_state::drgnmst_main_map); + m_maincpu->set_vblank_int("screen", FUNC(drgnmst_state::irq2_line_hold)); PIC16C55(config, m_audiocpu, 32_MHz_XTAL / 8); /* 4MHz - Confirmed */ m_audiocpu->read_a().set(FUNC(drgnmst_state::pic16c5x_port0_r)); @@ -389,26 +389,26 @@ MACHINE_CONFIG_START(drgnmst_state::drgnmst) GFXDECODE(config, m_gfxdecode, m_palette, gfx_drgnmst); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, 56*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(drgnmst_state, screen_update) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(8*8, 56*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(drgnmst_state::screen_update)); + screen.set_palette(m_palette); PALETTE(config, m_palette).set_format(2, &drgnmst_state::drgnmst_IIIIRRRRGGGGBBBB, 0x2000); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki1", OKIM6295, 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH) - MCFG_DEVICE_ADDRESS_MAP(0, drgnmst_oki1_map) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + OKIM6295(config, m_oki[0], 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH); + m_oki[0]->set_addrmap(0, &drgnmst_state::drgnmst_oki1_map); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.00); - MCFG_DEVICE_ADD("oki2", OKIM6295, 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + OKIM6295(config, m_oki[1], 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH); + m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.00); +} ROM_START( drgnmst ) diff --git a/src/mame/drivers/dribling.cpp b/src/mame/drivers/dribling.cpp index 736a9ed58fe..107dedfec10 100644 --- a/src/mame/drivers/dribling.cpp +++ b/src/mame/drivers/dribling.cpp @@ -268,13 +268,13 @@ void dribling_state::machine_reset() } -MACHINE_CONFIG_START(dribling_state::dribling) - +void dribling_state::dribling(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 5000000) - MCFG_DEVICE_PROGRAM_MAP(dribling_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dribling_state, dribling_irq_gen) + Z80(config, m_maincpu, 20_MHz_XTAL / 4); // XTAL verified, divider not + m_maincpu->set_addrmap(AS_PROGRAM, &dribling_state::dribling_map); + m_maincpu->set_addrmap(AS_IO, &dribling_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(dribling_state::dribling_irq_gen)); I8255A(config, m_ppi8255_0); m_ppi8255_0->in_pa_callback().set(FUNC(dribling_state::dsr_r)); @@ -290,19 +290,19 @@ MACHINE_CONFIG_START(dribling_state::dribling) WATCHDOG_TIMER(config, m_watchdog); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 255, 40, 255) - MCFG_SCREEN_UPDATE_DRIVER(dribling_state, screen_update_dribling) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(256, 256); + screen.set_visarea(0, 255, 40, 255); + screen.set_screen_update(FUNC(dribling_state::screen_update_dribling)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(dribling_state::dribling_palette), 256); /* sound hardware */ -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/drtomy.cpp b/src/mame/drivers/drtomy.cpp index 35e0857e9cb..722585083db 100644 --- a/src/mame/drivers/drtomy.cpp +++ b/src/mame/drivers/drtomy.cpp @@ -306,22 +306,22 @@ void drtomy_state::machine_reset() m_oki_bank = 0; } -MACHINE_CONFIG_START(drtomy_state::drtomy) - +void drtomy_state::drtomy(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000,24000000/2) /* ? MHz */ - MCFG_DEVICE_PROGRAM_MAP(drtomy_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", drtomy_state, irq6_line_hold) + M68000(config, m_maincpu, 24000000/2); /* ? MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &drtomy_state::drtomy_map); + m_maincpu->set_vblank_int("screen", FUNC(drtomy_state::irq6_line_hold)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*16, 32*16) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(drtomy_state, screen_update_drtomy) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*16, 32*16); + screen.set_visarea(0, 320-1, 16, 256-1); + screen.set_screen_update(FUNC(drtomy_state::screen_update_drtomy)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_drtomy); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024); @@ -329,9 +329,8 @@ MACHINE_CONFIG_START(drtomy_state::drtomy) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 26000000/16, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.8) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 26000000/16, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.8); +} ROM_START( drtomy ) diff --git a/src/mame/drivers/drw80pkr.cpp b/src/mame/drivers/drw80pkr.cpp index f3cd2adb424..4cbdce3e6f1 100644 --- a/src/mame/drivers/drw80pkr.cpp +++ b/src/mame/drivers/drw80pkr.cpp @@ -451,7 +451,8 @@ INPUT_PORTS_END * Machine Driver * *************************/ -MACHINE_CONFIG_START(drw80pkr_state::drw80pkr) +void drw80pkr_state::drw80pkr(machine_config &config) +{ // basic machine hardware I8039(config, m_maincpu, CPU_CLOCK); m_maincpu->set_addrmap(AS_PROGRAM, &drw80pkr_state::map); @@ -468,13 +469,13 @@ MACHINE_CONFIG_START(drw80pkr_state::drw80pkr) m_maincpu->set_vblank_int("screen", FUNC(drw80pkr_state::irq0_line_hold)); // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE((31+1)*8, (31+1)*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 24*8-1, 0*8, 27*8-1) - MCFG_SCREEN_UPDATE_DRIVER(drw80pkr_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size((31+1)*8, (31+1)*8); + screen.set_visarea(0*8, 24*8-1, 0*8, 27*8-1); + screen.set_screen_update(FUNC(drw80pkr_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_drw80pkr); PALETTE(config, "palette", FUNC(drw80pkr_state::drw80pkr_palette), 16 * 16); @@ -485,7 +486,7 @@ MACHINE_CONFIG_START(drw80pkr_state::drw80pkr) SPEAKER(config, "mono").front_center(); AY8912(config, m_aysnd, 20000000/12).add_route(ALL_OUTPUTS, "mono", 0.75); -MACHINE_CONFIG_END +} /************************* * Rom Load * diff --git a/src/mame/drivers/dual68.cpp b/src/mame/drivers/dual68.cpp index e17ff9fb232..e49dbf70b65 100644 --- a/src/mame/drivers/dual68.cpp +++ b/src/mame/drivers/dual68.cpp @@ -93,24 +93,25 @@ void dual68_state::kbd_put(u8 data) //m_term_data = data; } -MACHINE_CONFIG_START(dual68_state::dual68) +void dual68_state::dual68(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 16_MHz_XTAL / 2) // MC68000L8 - MCFG_DEVICE_PROGRAM_MAP(dual68_mem) + M68000(config, m_maincpu, 16_MHz_XTAL / 2); // MC68000L8 + m_maincpu->set_addrmap(AS_PROGRAM, &dual68_state::dual68_mem); - MCFG_DEVICE_ADD("siocpu", I8085A, 9.8304_MHz_XTAL) // NEC D8085AC-2 - MCFG_DEVICE_PROGRAM_MAP(sio4_mem) - MCFG_DEVICE_IO_MAP(sio4_io) + i8085a_cpu_device &siocpu(I8085A(config, "siocpu", 9.8304_MHz_XTAL)); // NEC D8085AC-2 + siocpu.set_addrmap(AS_PROGRAM, &dual68_state::sio4_mem); + siocpu.set_addrmap(AS_IO, &dual68_state::sio4_io); /* video hardware */ GENERIC_TERMINAL(config, m_terminal, 0); m_terminal->set_keyboard_callback(FUNC(dual68_state::kbd_put)); - MCFG_DEVICE_ADD("usart1", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B - MCFG_DEVICE_ADD("usart2", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B - MCFG_DEVICE_ADD("usart3", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B - MCFG_DEVICE_ADD("usart4", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B -MACHINE_CONFIG_END + MC2661(config, "usart1", 9.8304_MHz_XTAL / 2); // SCN2661B + MC2661(config, "usart2", 9.8304_MHz_XTAL / 2); // SCN2661B + MC2661(config, "usart3", 9.8304_MHz_XTAL / 2); // SCN2661B + MC2661(config, "usart4", 9.8304_MHz_XTAL / 2); // SCN2661B +} /* ROM definition */ ROM_START( dual68 ) diff --git a/src/mame/drivers/duet16.cpp b/src/mame/drivers/duet16.cpp index 07f469bf14e..a0d31db2481 100644 --- a/src/mame/drivers/duet16.cpp +++ b/src/mame/drivers/duet16.cpp @@ -353,7 +353,8 @@ static DEVICE_INPUT_DEFAULTS_START(keyboard) DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 ) DEVICE_INPUT_DEFAULTS_END -MACHINE_CONFIG_START(duet16_state::duet16) +void duet16_state::duet16(machine_config &config) +{ I8086(config, m_maincpu, 24_MHz_XTAL / 3); m_maincpu->set_addrmap(AS_PROGRAM, &duet16_state::duet16_mem); m_maincpu->set_addrmap(AS_IO, &duet16_state::duet16_io); @@ -423,16 +424,16 @@ MACHINE_CONFIG_START(duet16_state::duet16) crtc.set_char_width(8); crtc.set_update_row_callback(FUNC(duet16_state::crtc_update_row), this); - MCFG_PALETTE_ADD("palette", 8) + PALETTE(config, m_pal).set_entries(8); PALETTE(config, m_chrpal, palette_device::BRG_3BIT); GFXDECODE(config, "gfxdecode", m_chrpal, gfx_duet16); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DEVICE("crtc", h46505_device, screen_update) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(640, 480); + m_screen->set_visarea_full(); + m_screen->set_screen_update("crtc", FUNC(h46505_device::screen_update)); MSM58321(config, m_rtc, 32768_Hz_XTAL); m_rtc->d0_handler().set(FUNC(duet16_state::rtc_d0_w)); @@ -442,7 +443,7 @@ MACHINE_CONFIG_START(duet16_state::duet16) m_rtc->busy_handler().set(FUNC(duet16_state::rtc_busy_w)); m_rtc->set_year0(1980); m_rtc->set_default_24h(true); -MACHINE_CONFIG_END +} ROM_START(duet16) ROM_REGION(0x2000, "rom", 0) diff --git a/src/mame/drivers/dunhuang.cpp b/src/mame/drivers/dunhuang.cpp index 163ae690c7b..2ef9246b647 100644 --- a/src/mame/drivers/dunhuang.cpp +++ b/src/mame/drivers/dunhuang.cpp @@ -804,27 +804,27 @@ void dunhuang_state::machine_reset() } -MACHINE_CONFIG_START(dunhuang_state::dunhuang) - +void dunhuang_state::dunhuang(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,12000000/2) - MCFG_DEVICE_PROGRAM_MAP(dunhuang_map) - MCFG_DEVICE_IO_MAP(dunhuang_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", dunhuang_state, irq0_line_hold) + Z80(config, m_maincpu, 12000000/2); + m_maincpu->set_addrmap(AS_PROGRAM, &dunhuang_state::dunhuang_map); + m_maincpu->set_addrmap(AS_IO, &dunhuang_state::dunhuang_io_map); + m_maincpu->set_vblank_int("screen", FUNC(dunhuang_state::irq0_line_hold)); WATCHDOG_TIMER(config, "watchdog").set_time(attotime::from_seconds(5)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0+8, 512-8-1, 0+16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(dunhuang_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(512, 256); + m_screen->set_visarea(0+8, 512-8-1, 0+16, 256-16-1); + m_screen->set_screen_update(FUNC(dunhuang_state::screen_update)); + m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dunhuang); - MCFG_PALETTE_ADD("palette", 0x100) + PALETTE(config, m_palette).set_entries(0x100); ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // HMC HM86171 VGA 256 colour RAMDAC ramdac.set_addrmap(0, &dunhuang_state::ramdac_map); @@ -839,9 +839,8 @@ MACHINE_CONFIG_START(dunhuang_state::dunhuang) ay8910.port_a_write_callback().set(FUNC(dunhuang_state::input_w)); ay8910.add_route(ALL_OUTPUTS, "mono", 0.30); - MCFG_DEVICE_ADD("oki", OKIM6295, 12000000/8, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) -MACHINE_CONFIG_END + OKIM6295(config, "oki", 12000000/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); +} /*************************************************************************** diff --git a/src/mame/drivers/dvk_kcgd.cpp b/src/mame/drivers/dvk_kcgd.cpp index 68ad6b8f872..d654e026898 100644 --- a/src/mame/drivers/dvk_kcgd.cpp +++ b/src/mame/drivers/dvk_kcgd.cpp @@ -346,7 +346,8 @@ static GFXDECODE_START( gfx_kcgd ) GFXDECODE_ENTRY("maincpu", 0112236, kcgd_charlayout, 0, 1) GFXDECODE_END -MACHINE_CONFIG_START(kcgd_state::kcgd) +void kcgd_state::kcgd(machine_config &config) +{ K1801VM2(config, m_maincpu, XTAL(30'800'000)/4); m_maincpu->set_addrmap(AS_PROGRAM, &kcgd_state::kcgd_mem); m_maincpu->set_initial_mode(0100000); @@ -355,12 +356,12 @@ MACHINE_CONFIG_START(kcgd_state::kcgd) scantimer.configure_periodic(FUNC(kcgd_state::scanline_callback), attotime::from_hz(50*28*11)); // XXX verify scantimer.set_start_delay(attotime::from_hz(XTAL(30'800'000)/KCGD_HORZ_START)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(kcgd_state, screen_update) - MCFG_SCREEN_RAW_PARAMS(XTAL(30'800'000), KCGD_TOTAL_HORZ, KCGD_HORZ_START, + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_screen_update(FUNC(kcgd_state::screen_update)); + m_screen->set_raw(XTAL(30'800'000), KCGD_TOTAL_HORZ, KCGD_HORZ_START, KCGD_HORZ_START+KCGD_DISP_HORZ, KCGD_TOTAL_VERT, KCGD_VERT_START, KCGD_VERT_START+KCGD_DISP_VERT); - MCFG_SCREEN_PALETTE(m_palette) + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(kcgd_state::kcgd_palette), 16); @@ -372,7 +373,7 @@ MACHINE_CONFIG_START(kcgd_state::kcgd) clock_device &keyboard_clock(CLOCK(config, "keyboard_clock", 4800*16)); keyboard_clock.signal_handler().set(FUNC(kcgd_state::write_keyboard_clock)); #endif -MACHINE_CONFIG_END +} ROM_START( dvk_kcgd ) ROM_REGION16_BE(0x100000,"maincpu", ROMREGION_ERASE00) diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp index 1dc84215d1a..a1e0b109afa 100644 --- a/src/mame/drivers/dvk_ksm.cpp +++ b/src/mame/drivers/dvk_ksm.cpp @@ -414,11 +414,12 @@ static GFXDECODE_START( gfx_ksm ) GFXDECODE_ENTRY("chargen", 0x0000, ksm_charlayout, 0, 1) GFXDECODE_END -MACHINE_CONFIG_START(ksm_state::ksm) - MCFG_DEVICE_ADD("maincpu", I8080, XTAL(15'400'000)/10) - MCFG_DEVICE_PROGRAM_MAP(ksm_mem) - MCFG_DEVICE_IO_MAP(ksm_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) +void ksm_state::ksm(machine_config &config) +{ + I8080(config, m_maincpu, XTAL(15'400'000)/10); + m_maincpu->set_addrmap(AS_PROGRAM, &ksm_state::ksm_mem); + m_maincpu->set_addrmap(AS_IO, &ksm_state::ksm_io); + m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb)); TIMER(config, "scantimer").configure_scanline(FUNC(ksm_state::scanline_callback), "screen", 0, 1); @@ -464,7 +465,7 @@ MACHINE_CONFIG_START(ksm_state::ksm) // baud rate is supposed to be 4800 but keyboard is slightly faster clock_device &keyboard_clock(CLOCK(config, "keyboard_clock", 4960*16)); keyboard_clock.signal_handler().set(FUNC(ksm_state::write_keyboard_clock)); -MACHINE_CONFIG_END +} ROM_START( dvk_ksm ) ROM_REGION(0x1000, "maincpu", ROMREGION_ERASE00) diff --git a/src/mame/drivers/dynadice.cpp b/src/mame/drivers/dynadice.cpp index 7456a37d451..73048c13abd 100644 --- a/src/mame/drivers/dynadice.cpp +++ b/src/mame/drivers/dynadice.cpp @@ -260,28 +260,28 @@ void dynadice_state::machine_reset() m_ay_data = 0; } -MACHINE_CONFIG_START(dynadice_state::dynadice) - +void dynadice_state::dynadice(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD(m_maincpu, I8080, 18.432_MHz_XTAL / 8) - MCFG_DEVICE_PROGRAM_MAP(dynadice_map) - MCFG_DEVICE_IO_MAP(dynadice_io_map) + I8080(config, m_maincpu, 18.432_MHz_XTAL / 8); + m_maincpu->set_addrmap(AS_PROGRAM, &dynadice_state::dynadice_map); + m_maincpu->set_addrmap(AS_IO, &dynadice_state::dynadice_io_map); - MCFG_DEVICE_ADD("audiocpu", Z80, 18.432_MHz_XTAL / 6) - MCFG_DEVICE_PROGRAM_MAP(dynadice_sound_map) - MCFG_DEVICE_IO_MAP(dynadice_sound_io_map) + z80_device &audiocpu(Z80(config, "audiocpu", 18.432_MHz_XTAL / 6)); + audiocpu.set_addrmap(AS_PROGRAM, &dynadice_state::dynadice_sound_map); + audiocpu.set_addrmap(AS_IO, &dynadice_state::dynadice_sound_io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256+16, 256) - MCFG_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 3*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dynadice_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256+16, 256); + screen.set_visarea(0*8, 34*8-1, 3*8, 28*8-1); + screen.set_screen_update(FUNC(dynadice_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_dynadice); PALETTE(config, "palette", palette_device::BRG_3BIT); @@ -291,7 +291,7 @@ MACHINE_CONFIG_START(dynadice_state::dynadice) GENERIC_LATCH_8(config, "soundlatch"); AY8910(config, m_ay8910, 2000000).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} ROM_START( dynadice ) ROM_REGION( 0x10000, "maincpu", 0 ) diff --git a/src/mame/drivers/egghunt.cpp b/src/mame/drivers/egghunt.cpp index 29d48c6fe2e..b01bd8a025a 100644 --- a/src/mame/drivers/egghunt.cpp +++ b/src/mame/drivers/egghunt.cpp @@ -227,7 +227,7 @@ WRITE8_MEMBER(egghunt_state::egghunt_vidram_bank_w) WRITE8_MEMBER(egghunt_state::egghunt_soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp index ebec71eb31d..b3b34eecd71 100644 --- a/src/mame/drivers/equites.cpp +++ b/src/mame/drivers/equites.cpp @@ -444,7 +444,7 @@ WRITE8_MEMBER(equites_state::equites_c0f8_w) case 7: // c0ff: sound command latch clear // Note: solder pad CP1 on the pcb would allow to disable this - m_soundlatch->clear_w(space, 0, 0); + m_soundlatch->clear_w(); break; } } diff --git a/src/mame/drivers/esd16.cpp b/src/mame/drivers/esd16.cpp index a012af3cc94..094df3194e7 100644 --- a/src/mame/drivers/esd16.cpp +++ b/src/mame/drivers/esd16.cpp @@ -85,70 +85,66 @@ ToDo: ***************************************************************************/ -WRITE16_MEMBER(esd16_state::esd16_sound_command_w) +void esd16_state::sound_command_w(u8 data) { - if (ACCESSING_BITS_0_7) - { - m_soundlatch->write(space, 0, data & 0xff); - m_audiocpu->set_input_line(0, ASSERT_LINE); // Generate an IRQ - m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply - } + m_soundlatch->write(data & 0xff); + m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply } -WRITE16_MEMBER(esd16_state::hedpanic_platform_w) +template<unsigned Layer> +void esd16_state::vram_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_vram[Layer][offset]); + m_tilemap[Layer]->mark_tile_dirty(offset); + m_tilemap_16x16[Layer]->mark_tile_dirty(offset); +} + +void esd16_state::hedpanic_platform_w(u16 data) { int offsets = m_headpanic_platform_x[0] + 0x40 * m_headpanic_platform_y[0]; - m_vram_1[offsets] = data; - m_tilemap_1_16x16->mark_tile_dirty(offsets); + m_vram[1][offsets] = data; + m_tilemap[1]->mark_tile_dirty(offsets); + m_tilemap_16x16[1]->mark_tile_dirty(offsets); } -READ16_MEMBER(esd16_state::esd_eeprom_r) +u8 esd16_state::eeprom_r() { - if (ACCESSING_BITS_8_15) - { - return ((m_eeprom->do_read() & 0x01) << 15); - } - -// logerror("(0x%06x) unk EEPROM read: %04x\n", m_maincpu->pc(), mem_mask); - return 0; + return ((m_eeprom->do_read() & 0x01) << 7); } -WRITE16_MEMBER(esd16_state::esd_eeprom_w) +void esd16_state::eeprom_w(u8 data) { - if (ACCESSING_BITS_8_15) - ioport("EEPROMOUT")->write(data, 0xffff); - -// logerror("(0x%06x) Unk EEPROM write: %04x %04x\n", m_maincpu->pc(), data, mem_mask); + m_io_eepromout->write(data, 0xff); } -void esd16_state::esd16_io_area_dsw(address_map &map, u32 base) +void esd16_state::io_area_dsw(address_map &map, u32 base) { map(base + 0x0, base + 0x1).nopw(); /* Irq Ack */ map(base + 0x2, base + 0x3).portr("P1_P2"); map(base + 0x4, base + 0x5).portr("SYSTEM"); map(base + 0x6, base + 0x7).portr("DSW"); - map(base + 0x8, base + 0x9).w(FUNC(esd16_state::esd16_tilemap0_color_w)); + map(base + 0x8, base + 0x9).w(FUNC(esd16_state::tilemap0_color_w)); map(base + 0xa, base + 0xb).nopw(); /* Unknown */ - map(base + 0xc, base + 0xd).w(FUNC(esd16_state::esd16_sound_command_w)); + map(base + 0xd, base + 0xd).w(FUNC(esd16_state::sound_command_w)); map(base + 0xe, base + 0xf).nopw(); /* n/c */ } -void esd16_state::esd16_io_area_eeprom(address_map &map, u32 base) +void esd16_state::io_area_eeprom(address_map &map, u32 base) { map(base + 0x0, base + 0x1).nopw(); /* Irq Ack */ map(base + 0x2, base + 0x3).portr("P1_P2"); map(base + 0x4, base + 0x5).portr("SYSTEM"); - map(base + 0x6, base + 0x7).r(FUNC(esd16_state::esd_eeprom_r)); - map(base + 0x8, base + 0x9).w(FUNC(esd16_state::esd16_tilemap0_color_w)); + map(base + 0x6, base + 0x6).r(FUNC(esd16_state::eeprom_r)); + map(base + 0x8, base + 0x9).w(FUNC(esd16_state::tilemap0_color_w)); map(base + 0xa, base + 0xb).nopw(); /* Unknown */ - map(base + 0xc, base + 0xd).w(FUNC(esd16_state::esd16_sound_command_w)); - map(base + 0xe, base + 0xf).w(FUNC(esd16_state::esd_eeprom_w)); + map(base + 0xd, base + 0xd).w(FUNC(esd16_state::sound_command_w)); + map(base + 0xe, base + 0xf).w(FUNC(esd16_state::eeprom_w)); } -void esd16_state::esd16_vid_attr_area(address_map &map, u32 base) +void esd16_state::vid_attr_area(address_map &map, u32 base) { map(base + 0x0, base + 0x3).writeonly().share("scroll_0"); map(base + 0x4, base + 0x7).writeonly().share("scroll_1"); @@ -158,20 +154,20 @@ void esd16_state::esd16_vid_attr_area(address_map &map, u32 base) map(base + 0xe, base + 0xf).writeonly().share("head_layersize"); } -void esd16_state::esd16_palette_area(address_map &map, u32 base) +void esd16_state::palette_area(address_map &map, u32 base) { map(base + 0x000, base + 0xfff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); } -void esd16_state::esd16_sprite_area(address_map &map, u32 base) +void esd16_state::sprite_area(address_map &map, u32 base) { map(base + 0x000, base + 0x7ff).writeonly().share("spriteram").mirror(0x000800); } -void esd16_state::esd16_vram_area(address_map &map, u32 base) +void esd16_state::vram_area(address_map &map, u32 base) { - map(base + 0x00000, base + 0x03fff).w(FUNC(esd16_state::esd16_vram_0_w)).share("vram_0").mirror(0x4000); - map(base + 0x20000, base + 0x23fff).w(FUNC(esd16_state::esd16_vram_1_w)).share("vram_1").mirror(0x4000); + map(base + 0x00000, base + 0x03fff).w(FUNC(esd16_state::vram_w<0>)).share("vram_0").mirror(0x4000); + map(base + 0x20000, base + 0x23fff).w(FUNC(esd16_state::vram_w<1>)).share("vram_1").mirror(0x4000); } /*** Memory Maps ***/ @@ -181,11 +177,11 @@ void esd16_state::multchmp_map(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x100000, 0x10ffff).ram(); - esd16_palette_area(map, 0x200000); - esd16_sprite_area(map, 0x300000); - esd16_vram_area(map, 0x400000); - esd16_vid_attr_area(map, 0x500000); - esd16_io_area_dsw(map, 0x600000); + palette_area(map, 0x200000); + sprite_area(map, 0x300000); + vram_area(map, 0x400000); + vid_attr_area(map, 0x500000); + io_area_dsw(map, 0x600000); map(0x700008, 0x70000b).nopr(); // unused protection? } @@ -196,13 +192,13 @@ void esd16_state::jumppop_map(address_map &map) map(0x120000, 0x123fff).ram(); map(0x1a0000, 0x1a7fff).ram(); - esd16_palette_area(map, 0x140000); - esd16_sprite_area(map, 0x160000); - esd16_io_area_dsw(map, 0x180000); - esd16_vram_area(map, 0x300000); - esd16_vid_attr_area(map, 0x380000); + palette_area(map, 0x140000); + sprite_area(map, 0x160000); + io_area_dsw(map, 0x180000); + vram_area(map, 0x300000); + vid_attr_area(map, 0x380000); - map(0x180008, 0x180009).w(FUNC(esd16_state::esd16_tilemap0_color_jumppop_w)); // todo + map(0x180008, 0x180009).w(FUNC(esd16_state::tilemap0_color_jumppop_w)); // todo } void esd16_state::hedpanic_map(address_map &map) @@ -210,11 +206,11 @@ void esd16_state::hedpanic_map(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x100000, 0x10ffff).ram(); - esd16_palette_area(map, 0x800000); - esd16_sprite_area(map, 0x900000); - esd16_vram_area(map, 0xa00000); - esd16_vid_attr_area(map, 0xb00000); - esd16_io_area_eeprom(map, 0xc00000); + palette_area(map, 0x800000); + sprite_area(map, 0x900000); + vram_area(map, 0xa00000); + vid_attr_area(map, 0xb00000); + io_area_eeprom(map, 0xc00000); map(0xd00008, 0xd00009).w(FUNC(esd16_state::hedpanic_platform_w)); // protection } @@ -226,11 +222,11 @@ void esd16_state::mchampdx_map(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x200000, 0x20ffff).ram(); - esd16_vram_area(map, 0x300000); - esd16_palette_area(map, 0x400000); - esd16_io_area_eeprom(map, 0x500000); - esd16_sprite_area(map, 0x600000); - esd16_vid_attr_area(map, 0x700000); + vram_area(map, 0x300000); + palette_area(map, 0x400000); + io_area_eeprom(map, 0x500000); + sprite_area(map, 0x600000); + vid_attr_area(map, 0x700000); map(0xd00008, 0xd00009).w(FUNC(esd16_state::hedpanic_platform_w)); // not used in mchampdx? } @@ -242,11 +238,11 @@ void esd16_state::tangtang_map(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x700000, 0x70ffff).ram(); - esd16_palette_area(map, 0x100000); - esd16_sprite_area(map, 0x200000); - esd16_vram_area(map, 0x300000); - esd16_vid_attr_area(map, 0x400000); - esd16_io_area_eeprom(map, 0x500000); + palette_area(map, 0x100000); + sprite_area(map, 0x200000); + vram_area(map, 0x300000); + vid_attr_area(map, 0x400000); + io_area_eeprom(map, 0x500000); map(0x600008, 0x600009).w(FUNC(esd16_state::hedpanic_platform_w)); } @@ -259,34 +255,26 @@ void esd16_state::tangtang_map(address_map &map) ***************************************************************************/ -WRITE8_MEMBER(esd16_state::esd16_sound_rombank_w) +void esd16_state::sound_rombank_w(u8 data) { - int bank = data & 0xf; - membank("bank1")->set_entry(bank); + m_audiobank->set_entry(data & 0xf); } -void esd16_state::multchmp_sound_map(address_map &map) +void esd16_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); // ROM - map(0x8000, 0xbfff).bankr("bank1"); // Banked ROM + map(0x8000, 0xbfff).bankr("audiobank"); // Banked ROM map(0xf800, 0xffff).ram(); // RAM } -READ8_MEMBER(esd16_state::esd16_sound_command_r) -{ - /* Clear IRQ only after reading the command, or some get lost */ - m_audiocpu->set_input_line(0, CLEAR_LINE); - return m_soundlatch->read(space, 0); -} - -void esd16_state::multchmp_sound_io_map(address_map &map) +void esd16_state::sound_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x01).w("ymsnd", FUNC(ym3812_device::write)); // YM3812 map(0x02, 0x02).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // M6295 - map(0x03, 0x03).r(FUNC(esd16_state::esd16_sound_command_r)); // From Main CPU + map(0x03, 0x03).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU map(0x04, 0x04).nopw(); // ? $00, $30 - map(0x05, 0x05).w(FUNC(esd16_state::esd16_sound_rombank_w)); // ROM Bank + map(0x05, 0x05).w(FUNC(esd16_state::sound_rombank_w)); // ROM Bank map(0x06, 0x06).noprw(); // ? At the start / ? 1 (End of NMI routine) } @@ -484,9 +472,9 @@ static INPUT_PORTS_START( hedpanic ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START( "EEPROMOUT" ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) INPUT_PORTS_END @@ -521,9 +509,9 @@ static INPUT_PORTS_START( swatpolc ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START( "EEPROMOUT" ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) INPUT_PORTS_END /*************************************************************************** @@ -542,10 +530,8 @@ static const gfx_layout jumppop_sprite_16x16x4 = RGN_FRAC(1,2), 4, { RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 }, - { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, - 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, + { STEP8(8*2*16,1), STEP8(0,1) }, + { STEP16(0,8*2) }, 64*8 }; @@ -554,9 +540,9 @@ static const gfx_layout hedpanic_sprite_16x16x5 = 16,16, RGN_FRAC(1,3), 5, - { RGN_FRAC(2,3), RGN_FRAC(0,3), RGN_FRAC(0,3)+8, RGN_FRAC(1,3),RGN_FRAC(1,3)+8 }, - { 256+0,256+1,256+2,256+3,256+4,256+5,256+6,256+7,0,1,2,3,4,5,6,7 }, - { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16 }, + { RGN_FRAC(2,3), RGN_FRAC(0,3), RGN_FRAC(0,3)+8, RGN_FRAC(1,3),RGN_FRAC(1,3)+8 }, + { STEP8(8*2*16,1), STEP8(0,1) }, + { STEP16(0,8*2) }, 16*32, }; @@ -565,9 +551,9 @@ static const gfx_layout hedpanic_layout_8x8x8 = 8,8, RGN_FRAC(1,1), 8, - { 0,1,2,3,4,5,6,7 }, - { 0*8,2*8,1*8,3*8,4*8,6*8,5*8,7*8 }, - { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64 }, + { STEP8(0,1) }, + { STEP8(0,8) }, + { STEP8(0,8*8) }, 64*8, }; @@ -576,12 +562,9 @@ static const gfx_layout hedpanic_layout_16x16x8 = 16,16, RGN_FRAC(1,1), 8, - { 0,1,2,3,4,5,6,7 }, - { 0*8,2*8,1*8,3*8,4*8,6*8,5*8,7*8, - 64*8+0*8,64*8+2*8,64*8+1*8,64*8+3*8,64*8+4*8,64*8+6*8,64*8+5*8,64*8+7*8 }, - { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64, - 128*8+0*64,128*8+1*64,128*8+2*64,128*8+3*64,128*8+4*64,128*8+5*64,128*8+6*64,128*8+7*64 - }, + { STEP8(0,1) }, + { STEP8(0,8), STEP8(8*8*8,8) }, + { STEP8(0,8*8), STEP8(8*8*8*2,8*8) }, 256*8, }; @@ -611,19 +594,18 @@ void esd16_state::machine_start() { uint8_t *AUDIO = memregion("audiocpu")->base(); - membank("bank1")->configure_entries(0, 16, &AUDIO[0x0000], 0x4000); + m_audiobank->configure_entries(0, 16, &AUDIO[0x0000], 0x4000); - save_item(NAME(m_tilemap0_color)); - save_item(NAME(m_tilemap1_color)); + save_item(NAME(m_tilemap_color)); } void esd16_state::machine_reset() { - m_tilemap0_color = 0; - m_tilemap1_color = 0; + m_tilemap_color[0] = 0; + m_tilemap_color[1] = 0; } -DECOSPR_PRIORITY_CB_MEMBER(esd16_state::hedpanic_pri_callback) +DECOSPR_PRIORITY_CB_MEMBER(esd16_state::pri_callback) { if (pri & 0x8000) return 0xfffe; // under "tilemap 1" @@ -639,35 +621,33 @@ void esd16_state::esd16(machine_config &config) m_maincpu->set_vblank_int("screen", FUNC(esd16_state::irq6_line_hold)); Z80(config, m_audiocpu, XTAL(16'000'000)/4); /* 4MHz */ - m_audiocpu->set_addrmap(AS_PROGRAM, &esd16_state::multchmp_sound_map); - m_audiocpu->set_addrmap(AS_IO, &esd16_state::multchmp_sound_io_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &esd16_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &esd16_state::sound_io_map); m_audiocpu->set_periodic_int(FUNC(esd16_state::nmi_line_pulse), attotime::from_hz(32*60)); /* IRQ By Main CPU */ - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(0x140, 0x100); screen.set_visarea(0, 0x140-1, 0+8, 0x100-8-1); - screen.set_screen_update(FUNC(esd16_state::screen_update_hedpanic)); + screen.set_screen_update(FUNC(esd16_state::screen_update)); screen.set_palette("palette"); DECO_SPRITE(config, m_sprgen, 0); m_sprgen->set_gfx_region(0); m_sprgen->set_is_bootleg(true); - m_sprgen->set_pri_callback(FUNC(esd16_state::hedpanic_pri_callback), this); + m_sprgen->set_pri_callback(FUNC(esd16_state::pri_callback), this); m_sprgen->set_flipallx(1); m_sprgen->set_gfxdecode_tag(m_gfxdecode); GFXDECODE(config, m_gfxdecode, "palette", gfx_esd16); PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x1000/2); - /* sound hardware */ SPEAKER(config, "mono").front_center(); - GENERIC_LATCH_8(config, m_soundlatch); + GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, 0); YM3812(config, "ymsnd", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.30); /* 4MHz */ @@ -808,12 +788,12 @@ ROM_START( multchmp ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, CRC(6652c04a) SHA1(178e1d42847506d869ef79db2f7e10df05e9ef76) ) - ROM_LOAD32_BYTE( "esd11.fu29", 0x000001, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) ) - ROM_LOAD32_BYTE( "esd7.fu26", 0x000002, 0x080000, CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) ) + ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) ) + ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) ) ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, CRC(299f32c2) SHA1(274752444f6ddba16eeefc02c3e78525c079b3d8) ) ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, CRC(d815974b) SHA1(3e528a5df79fa7dc0f38b0ee7f2f3a0ebc97a369) ) - ROM_LOAD32_BYTE( "esd12.fu33", 0x200001, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) ) - ROM_LOAD32_BYTE( "esd8.fu30", 0x200002, 0x080000, CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) ) + ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) ) + ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) ) ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, CRC(e2689bb2) SHA1(1da9b1f7335d5c2d1c2f8353fccf91c0109d2e9d) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ @@ -837,12 +817,12 @@ ROM_START( multchmpk ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ ROM_LOAD32_BYTE( "multchmp.u31", 0x000000, 0x080000, CRC(b1e4e9e3) SHA1(1a7393e9073b028b4170393b3788ad8cb86c0c78) ) - ROM_LOAD32_BYTE( "multchmp.u33", 0x000001, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) ) - ROM_LOAD32_BYTE( "multchmp.u29", 0x000002, 0x080000, CRC(01bd1399) SHA1(b717ccffe0af92a42a0879736d34d3ad71840233) ) + ROM_LOAD32_BYTE( "multchmp.u33", 0x000002, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) ) + ROM_LOAD32_BYTE( "multchmp.u29", 0x000001, 0x080000, CRC(01bd1399) SHA1(b717ccffe0af92a42a0879736d34d3ad71840233) ) ROM_LOAD32_BYTE( "multchmp.u27", 0x000003, 0x080000, CRC(dc42704e) SHA1(58a04a47ffc6d6ae0e4d49e466b1c58b37ad741a) ) ROM_LOAD32_BYTE( "multchmp.u32", 0x200000, 0x080000, CRC(f05cb5b4) SHA1(1b33e60942238e39d61ae59e9317b99e83595ab1) ) - ROM_LOAD32_BYTE( "multchmp.u34", 0x200001, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) ) - ROM_LOAD32_BYTE( "multchmp.u30", 0x200002, 0x080000, CRC(c6b4cc18) SHA1(d9097b85584272cfe4989a40d622ef1feeee6775) ) + ROM_LOAD32_BYTE( "multchmp.u34", 0x200002, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) ) + ROM_LOAD32_BYTE( "multchmp.u30", 0x200001, 0x080000, CRC(c6b4cc18) SHA1(d9097b85584272cfe4989a40d622ef1feeee6775) ) ROM_LOAD32_BYTE( "multchmp.u28", 0x200003, 0x080000, CRC(449991fa) SHA1(fd93e420a04cb8bea5421aa9cbe079bd3e7d4924) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ @@ -866,12 +846,12 @@ ROM_START( multchmpa ) /* Also found on a ESD 10-10-98 PCB which looks identical ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, CRC(a3cfe895) SHA1(a8dc0d5d9e64d4c5112177b8f20b5bdb86ca73af) ) - ROM_LOAD32_BYTE( "esd11.fu29", 0x000001, 0x080000, CRC(d3c1855e) SHA1(bb547d4a45a745e9ae4a6727087cdf325105de90) ) - ROM_LOAD32_BYTE( "esd7.fu26", 0x000002, 0x080000, CRC(042d59ff) SHA1(8e45a4757e07d8aaf50b151d8849c1a27424e64b) ) + ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(d3c1855e) SHA1(bb547d4a45a745e9ae4a6727087cdf325105de90) ) + ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, CRC(042d59ff) SHA1(8e45a4757e07d8aaf50b151d8849c1a27424e64b) ) ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, CRC(ed5b4e58) SHA1(82c3ee9e2525c0b370a29d5560c21ec6380d1a43) ) ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, CRC(396d77b6) SHA1(f22449a7f9f50e172e36db4f399c14e527409884) ) - ROM_LOAD32_BYTE( "esd12.fu33", 0x200001, 0x080000, CRC(a68848a8) SHA1(915239a961d76af6a1a567eb89b1569f158e714e) ) - ROM_LOAD32_BYTE( "esd8.fu30", 0x200002, 0x080000, CRC(fa8cd2d3) SHA1(ddc1b98867e6d2eee458bf35a933e7cdc59f4c7e) ) + ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(a68848a8) SHA1(915239a961d76af6a1a567eb89b1569f158e714e) ) + ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, CRC(fa8cd2d3) SHA1(ddc1b98867e6d2eee458bf35a933e7cdc59f4c7e) ) ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, CRC(97fde7b1) SHA1(b3610f6fcc1367ff079dc01121c86bc1e1f4c7a2) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ @@ -949,8 +929,8 @@ ROM_START( mchampdx ) ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) ) - ROM_LOAD16_BYTE( "rom.fu34", 0x000001, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) ) + ROM_LOAD32_WORD( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) ) + ROM_LOAD32_WORD( "rom.fu34", 0x000002, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x40000, CRC(2fbe94ab) SHA1(1bc4a33ec93a80fb598722d2b50bdf3ccaaa984a) ) @@ -975,8 +955,8 @@ ROM_START( mchampdxa ) ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) ) - ROM_LOAD16_BYTE( "rom.fu34", 0x000001, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) ) + ROM_LOAD32_WORD( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) ) + ROM_LOAD32_WORD( "rom.fu34", 0x000002, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x40000, CRC(2fbe94ab) SHA1(1bc4a33ec93a80fb598722d2b50bdf3ccaaa984a) ) @@ -1001,8 +981,8 @@ ROM_START( mchampdxb ) ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "ver1114_fu35", 0x000000, 0x200000, CRC(c515c704) SHA1(c1657534314e66a25c38f70a12f14d2225ab89cc) ) // SMT Flash MX chips - ROM_LOAD16_BYTE( "ver1114_fu34", 0x000001, 0x200000, CRC(39d448bb) SHA1(07cd6e30a25d1c0caeef0f95f23df0ca6a2c7a26) ) + ROM_LOAD32_WORD( "ver1114_fu35", 0x000000, 0x200000, CRC(c515c704) SHA1(c1657534314e66a25c38f70a12f14d2225ab89cc) ) // SMT Flash MX chips + ROM_LOAD32_WORD( "ver1114_fu34", 0x000002, 0x200000, CRC(39d448bb) SHA1(07cd6e30a25d1c0caeef0f95f23df0ca6a2c7a26) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x40000, CRC(2fbe94ab) SHA1(1bc4a33ec93a80fb598722d2b50bdf3ccaaa984a) ) @@ -1114,8 +1094,8 @@ ROM_START( hedpanic ) /* Story line & game instructions in English */ ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) ) - ROM_LOAD16_BYTE( "esd9.fu34", 0x000001, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) + ROM_LOAD32_WORD( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) ) + ROM_LOAD32_WORD( "esd9.fu34", 0x000002, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) /* AT27010 mask rom */ @@ -1141,8 +1121,8 @@ ROM_START( hedpanicf ) /* Story line in Japanese, game instructions in English * ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) ) - ROM_LOAD16_BYTE( "esd9.fu34", 0x000001, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) + ROM_LOAD32_WORD( "esd8.fu35", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) ) + ROM_LOAD32_WORD( "esd9.fu34", 0x000002, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) /* AT27010 mask rom */ @@ -1168,8 +1148,8 @@ ROM_START( hedpanica ) /* Story line & game instructions in English, copyright y ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(9b5a45c5) SHA1(fbd8bc6ccc068d2cc7fe4f575fa0847f53e786ab) ) - ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(8f2099cc) SHA1(40795ae5fb8de613c2d5b6147992c153695bf698) ) + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(9b5a45c5) SHA1(fbd8bc6ccc068d2cc7fe4f575fa0847f53e786ab) ) + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(8f2099cc) SHA1(40795ae5fb8de613c2d5b6147992c153695bf698) ) ROM_REGION( 0x80000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.bin", 0x000000, 0x080000, CRC(5692fe92) SHA1(4423039cb437ab36d198b212ef394bf1704be404) ) /* SU10 */ @@ -1195,8 +1175,8 @@ ROM_START( hedpanico ) /* Story line & game instructions in English, copyright y ROM_FILL( 0x500000, 0x100000, 0x00 ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "sm3.fu35", 0x000000, 0x200000, CRC(94dd4cfc) SHA1(a3f9c49611f0bc9d26166dafb44e2c5ebbb31127) ) - ROM_LOAD16_BYTE( "sm4.fu34", 0x000001, 0x200000, CRC(6da0fb9e) SHA1(c4e7487953f45c5f6ce2ebe558b4c325f6ec54eb) ) + ROM_LOAD32_WORD( "sm3.fu35", 0x000000, 0x200000, CRC(94dd4cfc) SHA1(a3f9c49611f0bc9d26166dafb44e2c5ebbb31127) ) + ROM_LOAD32_WORD( "sm4.fu34", 0x000002, 0x200000, CRC(6da0fb9e) SHA1(c4e7487953f45c5f6ce2ebe558b4c325f6ec54eb) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.rom", 0x000000, 0x020000, CRC(d7ca6806) SHA1(8ad668bfb5b7561cc0f3e36dfc3c936b136a4274) ) /* SU10 */ @@ -1273,8 +1253,8 @@ ROM_START( deluxe5 ) /* Deluxe 5 */ ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */ - ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */ @@ -1299,8 +1279,8 @@ ROM_START( deluxe5a ) /* Deluxe 5 */ ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */ - ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */ @@ -1325,8 +1305,8 @@ ROM_START( deluxe5b ) /* Deluxe 5 */ ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */ - ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) /* No labels on the flash roms */ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */ @@ -1352,8 +1332,8 @@ ROM_START( deluxe4u ) /* Deluxe 4 U - Removes Blackjack game, but otherwise same ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(6df14570) SHA1(fa4fc64c984d6a94fe61ec809ec515e840388704) ) /* Specific to Deluxe 4 U - No labels on the flash roms */ - ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(93175d6d) SHA1(691832134f43e17bb767dff080b2736288961414) ) /* Specific to Deluxe 4 U - No labels on the flash roms */ + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(6df14570) SHA1(fa4fc64c984d6a94fe61ec809ec515e840388704) ) /* Specific to Deluxe 4 U - No labels on the flash roms */ + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(93175d6d) SHA1(691832134f43e17bb767dff080b2736288961414) ) /* Specific to Deluxe 4 U - No labels on the flash roms */ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */ @@ -1432,8 +1412,8 @@ ROM_START( tangtang ) ROM_LOAD16_BYTE( "xju08.bin", 0x100000, 0x040000, CRC(ecc2d8c7) SHA1(1aabdf7204fcdff8d46cb50de8b097e3775dddf3) ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35.bin", 0x000000, 0x200000, CRC(84f3f833) SHA1(f84e41d93dc47a58ada800b921a7e5902b7631cd) ) - ROM_LOAD16_BYTE( "fu34.bin", 0x000001, 0x200000, CRC(bf91f543) SHA1(7c149fed8b8044850cd6b798622a91c45336cd47) ) + ROM_LOAD32_WORD( "fu35.bin", 0x000000, 0x200000, CRC(84f3f833) SHA1(f84e41d93dc47a58ada800b921a7e5902b7631cd) ) + ROM_LOAD32_WORD( "fu34.bin", 0x000002, 0x200000, CRC(bf91f543) SHA1(7c149fed8b8044850cd6b798622a91c45336cd47) ) ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(f2dfb02d) SHA1(04001488697aad3e5b2d15c9f5a81dc2b7d0952c) ) @@ -1508,8 +1488,8 @@ ROM_START( swatpolc ) /* SWAT Police */ ROM_LOAD16_BYTE( "esd5.ju07", 0x200000, 0x080000, CRC(d2c27f03) SHA1(7cbdf7f7ff17df16ca81823f69e82ae1cf96b714) ) ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, CRC(c55897c5) SHA1(f6e0ef1c2fcfe6a511fe787a3abeff4da16d1b54) ) /* No labels on the flash roms */ - ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, CRC(7117a6a2) SHA1(17c0ab02698cffa0582ed2d2b7dbb7fed8cd9393) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(c55897c5) SHA1(f6e0ef1c2fcfe6a511fe787a3abeff4da16d1b54) ) /* No labels on the flash roms */ + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(7117a6a2) SHA1(17c0ab02698cffa0582ed2d2b7dbb7fed8cd9393) ) /* No labels on the flash roms */ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ ROM_LOAD( "at27c020.su10", 0x00000, 0x40000, CRC(c43efec2) SHA1(4ef328d8703b81328de09ecc4328763aba06e883) ) /* AT27C020 mask rom with no label */ @@ -1618,8 +1598,8 @@ ROM_START( jumppop ) ROM_LOAD( "sp1.bin", 0x100000, 0x100000, CRC(7eae782e) SHA1(a33c544ad9516ec409c209968e72f63e7cdb934b) ) ROM_REGION( 0x200000, "bgs", 0 ) - ROM_LOAD16_BYTE( "bg1.bin", 0x000000, 0x100000, CRC(5b37f943) SHA1(fe73b839f29d4c32823418711b22f85a5f583ec2) ) - ROM_LOAD16_BYTE( "bg0.bin", 0x000001, 0x100000, CRC(35a1363d) SHA1(66c550b0bdea7c8b079f186f5e044f731d31bc58) ) + ROM_LOAD32_WORD( "bg1.bin", 0x000000, 0x100000, CRC(5b37f943) SHA1(fe73b839f29d4c32823418711b22f85a5f583ec2) ) + ROM_LOAD32_WORD( "bg0.bin", 0x000002, 0x100000, CRC(35a1363d) SHA1(66c550b0bdea7c8b079f186f5e044f731d31bc58) ) ROM_REGION( 0x80000, "oki", 0 ) /* Oki samples */ ROM_LOAD( "samples.bin", 0x00000, 0x40000, CRC(066f30a7) SHA1(6bdd0210001c597819f7132ffa1dc1b1d55b4e0a) ) @@ -1642,8 +1622,8 @@ ROM_START( jumppope ) /* Running on an original ESD 11-09-98 PCB with original E ROM_REGION( 0x200000, "bgs", 0 ) ROM_LOAD32_BYTE( "esd5.fu28", 0x000000, 0x080000, CRC(0d47f821) SHA1(fc1ef080eb05990909e25d5db59918f1f4e90a67) ) // [even 1/2] 99.769974%, [even 2/2] 99.267578% - ROM_LOAD32_BYTE( "esd6.fu29", 0x000001, 0x080000, CRC(c01af40d) SHA1(fce0244027d4d4eb5cff1809cf8f404bfe016455) ) // [even 1/2] 99.778366%, [even 2/2] 99.267578% - ROM_LOAD32_BYTE( "esd4.fu26", 0x000002, 0x080000, CRC(97b409be) SHA1(3a4344ca8ffb0aee046e3c0bab2d7c3f7c0eb204) ) // [odd 1/2] 99.763107%, [odd 2/2] 99.267578% + ROM_LOAD32_BYTE( "esd6.fu29", 0x000002, 0x080000, CRC(c01af40d) SHA1(fce0244027d4d4eb5cff1809cf8f404bfe016455) ) // [even 1/2] 99.778366%, [even 2/2] 99.267578% + ROM_LOAD32_BYTE( "esd4.fu26", 0x000001, 0x080000, CRC(97b409be) SHA1(3a4344ca8ffb0aee046e3c0bab2d7c3f7c0eb204) ) // [odd 1/2] 99.763107%, [odd 2/2] 99.267578% ROM_LOAD32_BYTE( "esd3.fu27", 0x000003, 0x080000, CRC(3358a693) SHA1(2e368e5c26755bbe6d04838015fd4ca5e43ccfb5) ) // [odd 1/2] 99.784470%, [odd 2/2] 99.267578% ROM_REGION( 0x80000, "oki", 0 ) /* Oki samples */ diff --git a/src/mame/drivers/espial.cpp b/src/mame/drivers/espial.cpp index a222b72a6d6..74d539b2225 100644 --- a/src/mame/drivers/espial.cpp +++ b/src/mame/drivers/espial.cpp @@ -96,7 +96,7 @@ INTERRUPT_GEN_MEMBER(espial_state::espial_sound_nmi_gen) WRITE8_MEMBER(espial_state::espial_master_soundlatch_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/exterm.cpp b/src/mame/drivers/exterm.cpp index fdc3b8337dc..08498e86355 100644 --- a/src/mame/drivers/exterm.cpp +++ b/src/mame/drivers/exterm.cpp @@ -174,8 +174,8 @@ WRITE16_MEMBER(exterm_state::output_port_0_w) WRITE8_MEMBER(exterm_state::sound_latch_w) { // data is latched independently for both sound CPUs - m_soundlatch[0]->write(space, 0, data); - m_soundlatch[1]->write(space, 0, data); + m_soundlatch[0]->write(data); + m_soundlatch[1]->write(data); } diff --git a/src/mame/drivers/fantland.cpp b/src/mame/drivers/fantland.cpp index 4299704624b..1f1acef77df 100644 --- a/src/mame/drivers/fantland.cpp +++ b/src/mame/drivers/fantland.cpp @@ -74,7 +74,7 @@ WRITE8_MEMBER(fantland_state::nmi_enable_w) WRITE8_MEMBER(fantland_state::soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/fcrash.cpp b/src/mame/drivers/fcrash.cpp index 0bc74f47002..e00e92efb17 100644 --- a/src/mame/drivers/fcrash.cpp +++ b/src/mame/drivers/fcrash.cpp @@ -102,7 +102,7 @@ WRITE16_MEMBER( cps_state::fcrash_soundlatch_w ) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -111,7 +111,7 @@ WRITE16_MEMBER(cps_state::cawingbl_soundlatch_w) { if (ACCESSING_BITS_8_15) { - m_soundlatch->write(space, 0, data >> 8); + m_soundlatch->write(data >> 8); m_audiocpu->set_input_line(0, HOLD_LINE); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); /* boost the interleave or some voices get dropped */ } diff --git a/src/mame/drivers/fidel_as12.cpp b/src/mame/drivers/fidel_as12.cpp index 9b27dc53940..d81aa784ea5 100644 --- a/src/mame/drivers/fidel_as12.cpp +++ b/src/mame/drivers/fidel_as12.cpp @@ -145,8 +145,6 @@ void as12_state::as12(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &as12_state::div_trampoline); ADDRESS_MAP_BANK(config, m_mainmap).set_map(&as12_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16); - TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL)); - const attotime irq_period = attotime::from_hz(585); // from 556 timer (22nF, 110K, 1K) TIMER(config, m_irq_on).configure_periodic(FUNC(as12_state::irq_on<M6502_IRQ_LINE>), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us diff --git a/src/mame/drivers/fidel_cc1.cpp b/src/mame/drivers/fidel_cc1.cpp new file mode 100644 index 00000000000..cfee2fdda67 --- /dev/null +++ b/src/mame/drivers/fidel_cc1.cpp @@ -0,0 +1,221 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Berger, Sean Riddle +/****************************************************************************** +* +* fidel_cc1.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp + +Fidelity's 1st generation chess computers: +- *Chess Challenger +- *Chess Challenger 3 +- *Chess Challenger 10 (UCC10) + +* denotes not dumped (actually CC1 is dumped, but with half of the contents missing) + +TODO: +- driver is untested, but it should be easy to get working when a good dump + shows up (or a rom of CC3, even) + +******************************************************************************* + +Chess Challenger (1) +-------------------- +This is the world's 1st released dedicated chess computer. Oddly, the rows/columns +are reversed: left to right is 1-8, bottom to top is A-H, eg. pawn from D2 to D4 +is 4B to 4D here. + +PCB label PC-P-86, P179 C-2 7.77 +NEC 8080AF @ 2MHz(18MHz XTAL through a 8224) +Everything goes via a NEC B8228, its special features are unused. +NEC 2316A ROM(2KB), 4*2101AL RAM(0.5KB total) +8255C for I/O, 4*7seg display + 2 extra leds, 12-key keypad + +Chess Challenger 3 is on the same hardware, but with double ROM size, and they +corrected the reversed chess notation. It was also offered as an upgrade to CC1. + +Chess Challenger 10 version 'C'(model UCC10) is on (nearly) the same PCB too, +label P179 C-3 9.77, with a small daughterboard for 8KB ROM. Again, it was also +offered as an upgrade to CC1, or CC3. + +******************************************************************************/ + +#include "emu.h" +#include "includes/fidelbase.h" + +#include "cpu/i8085/i8085.h" +#include "machine/i8255.h" + +// internal artwork +#include "fidel_cc1.lh" // clickable + + +namespace { + +class cc1_state : public fidelbase_state +{ +public: + cc1_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag), + m_ppi8255(*this, "ppi8255"), + m_delay(*this, "delay") + { } + + // machine drivers + void cc1(machine_config &config); + +private: + // devices/pointers + required_device<i8255_device> m_ppi8255; + optional_device<timer_device> m_delay; + + // address maps + void main_map(address_map &map); + void main_io(address_map &map); + + // I/O handlers + void prepare_display(); + DECLARE_READ8_MEMBER(ppi_porta_r); + DECLARE_WRITE8_MEMBER(ppi_portb_w); + DECLARE_WRITE8_MEMBER(ppi_portc_w); +}; + + +/****************************************************************************** + Devices, I/O +******************************************************************************/ + +// misc handlers + +void cc1_state::prepare_display() +{ + // 4 7segs + 2 leds + set_display_segmask(0xf, 0x7f); + display_matrix(7, 6, m_7seg_data, m_led_select); +} + + +// I8255 PPI + +READ8_MEMBER(cc1_state::ppi_porta_r) +{ + // 74148(priority encoder) I0-I7: inputs + // d0-d2: 74148 S0-S2, d3: 74148 GS + u8 data = count_leading_zeros(m_inp_matrix[0]->read()) - 24; + + // d5-d7: more inputs (direct) + data |= ~m_inp_matrix[1]->read() << 5 & 0xe0; + + // d4: 555 Q + return data | ((m_delay->enabled()) ? 0x10 : 0); +} + +WRITE8_MEMBER(cc1_state::ppi_portb_w) +{ + // d0-d6: digit segment data + m_7seg_data = bitswap<7>(data,0,1,2,3,4,5,6); + prepare_display(); +} + +WRITE8_MEMBER(cc1_state::ppi_portc_w) +{ + // d6: trigger monostable 555 (R=15K, C=1uF) + if (~data & m_led_select & 0x40 && !m_delay->enabled()) + m_delay->adjust(attotime::from_msec(17)); + + // d0-d3: digit select + // d4: check led, d5: lose led + m_led_select = data; + prepare_display(); +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +void cc1_state::main_map(address_map &map) +{ + map.global_mask(0x1fff); + map(0x0000, 0x0fff).rom(); + map(0x1000, 0x11ff).mirror(0x0e00).ram(); +} + +void cc1_state::main_io(address_map &map) +{ + map.global_mask(0x0f); + map(0x00, 0x03).mirror(0x04).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write)); +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( cc1 ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("1") PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3") PORT_CODE(KEYCODE_3) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("4") PORT_CODE(KEYCODE_4) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5") PORT_CODE(KEYCODE_5) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6") PORT_CODE(KEYCODE_6) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("7") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("8") PORT_CODE(KEYCODE_8) + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9") PORT_CODE(KEYCODE_9) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) + + PORT_START("RESET") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, cc1_state, reset_button, nullptr) +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Drivers +******************************************************************************/ + +void cc1_state::cc1(machine_config &config) +{ + /* basic machine hardware */ + I8080A(config, m_maincpu, 18_MHz_XTAL/9); + m_maincpu->set_addrmap(AS_PROGRAM, &cc1_state::main_map); + m_maincpu->set_addrmap(AS_IO, &cc1_state::main_io); + + I8255(config, m_ppi8255); + m_ppi8255->in_pa_callback().set(FUNC(cc1_state::ppi_porta_r)); + m_ppi8255->out_pb_callback().set(FUNC(cc1_state::ppi_portb_w)); + m_ppi8255->tri_pb_callback().set_constant(0); + m_ppi8255->out_pc_callback().set(FUNC(cc1_state::ppi_portc_w)); + + TIMER(config, "delay").configure_generic(timer_device::expired_delegate()); + + TIMER(config, "display_decay").configure_periodic(FUNC(cc1_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_fidel_cc1); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( cc1 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "d2316ac_011", 0x0000, 0x0800, BAD_DUMP CRC(e27f9816) SHA1(ad9881b3bf8341829a27e86de27805fc2ccb5f7d) ) // A4 line was broken +ROM_END + +} // anonymous namespace + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS +CONS( 1977, cc1, 0, 0, cc1, cc1, cc1_state, empty_init, "Fidelity Electronics", "Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/fidel_cc10.cpp b/src/mame/drivers/fidel_cc10.cpp index 2989db64f32..128332a5001 100644 --- a/src/mame/drivers/fidel_cc10.cpp +++ b/src/mame/drivers/fidel_cc10.cpp @@ -13,14 +13,12 @@ TODO: Fidelity Chess Challenger 10 (CCX) ------------------- -4 versions are known to exist: A,B,C,D. Strangely, version C(UCC10) has an 8080 -instead of Z80. Chess Challenger 1,3 and 7 also run on very similar hardware. +3 versions are known to exist: A,B,C. Strangely, version C(UCC10) has an 8080 +instead of Z80 and no beeper, it's on CC1-based hardware. Z80A CPU @ 4MHz, NEC D8255C 4KB ROM(NEC 2332A), 2*256 bytes RAM(4*NEC 2111AL-4) - The beeper is via a 556 timer, fixed-frequency at around 1300-1400Hz. -Not all hardware configurations include the beeper. Checker Challenger 4 (ACR) is on the same PCB, twice less RAM and the beeper gone. @@ -268,8 +266,8 @@ void ccx_state::acr(machine_config &config) m_ppi8255->tri_pa_callback().set_constant(0); m_ppi8255->in_pb_callback().set_constant(0); m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w)); - m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r)); m_ppi8255->tri_pb_callback().set_constant(0); + m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r)); m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w)); TIMER(config, "display_decay").configure_periodic(FUNC(ccx_state::display_decay_tick), attotime::from_msec(1)); diff --git a/src/mame/drivers/fidel_cc7.cpp b/src/mame/drivers/fidel_cc7.cpp index 36bd7756dc7..40ca74b4b0f 100644 --- a/src/mame/drivers/fidel_cc7.cpp +++ b/src/mame/drivers/fidel_cc7.cpp @@ -7,10 +7,10 @@ ******************************************************************************* -Fidelity Chess Challenger 7 (BCC) +Fidelity Chess Challenger 7 (CC7, BCC) ------------------------ -model CC7 is an older version -RE information from netlist by Berger +It was Fidelity's most sold chess computer. model CC7 is an older version. +CC7 known serial numbers range from 1979 to 1980. BCC from 1980 to 1983. Zilog Z80A, 3.579MHz from XTAL Z80 IRQ/NMI unused, no timer IC. @@ -19,6 +19,8 @@ This is a cost-reduced design from CC10, no special I/O chips. Backgammon Challenger (BKC) is the same PCB, with the speaker connection going to the display panel instead. +RE information from netlist by Berger (a BCC model) + Memory map: ----------- 0000-0FFF: 4K 2332 ROM CN19103N BCC-REVB. @@ -225,6 +227,11 @@ ROM_START( cc7 ) // model BCC ROM_LOAD( "cn19103n_bcc-revb", 0x0000, 0x1000, CRC(a397d471) SHA1(9b12bc442fccee40f4d8500c792bc9d886c5e1a5) ) // 2332 ROM_END +ROM_START( cc7o ) // model CC7, PCB label 510-380 + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "101-32016", 0x0000, 0x1000, CRC(b9076c52) SHA1(09b17ac6cd6a1c5c62aea3649f3367bcf4405598) ) // 2332 +ROM_END + ROM_START( backgamc ) // model BKC, PCB label P-380A-5 ROM_REGION( 0x10000, "maincpu", 0 ) @@ -241,5 +248,6 @@ ROM_END // YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS CONS( 1979, cc7, 0, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1979, cc7o, cc7, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model CC7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1979, backgamc, 0, 0, bkc, bkc, bcc_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp index 0f7e002dbe2..6405d2fc4b1 100644 --- a/src/mame/drivers/fidel_eag68k.cpp +++ b/src/mame/drivers/fidel_eag68k.cpp @@ -11,12 +11,10 @@ Excel 68000 I/O is very similar to EAG, so it's handled in this driver as well TODO: - USART is not emulated -- V5 CPU comms is unemulated, it's still playable but not at all as intended -- V9(68030 @ 32MHz) is faster than V10(68040 @ 25MHz) but it should be the other - way around, culprit is unemulated cache? - V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place at twice the frequency due to lack of superscalar. -- V11 beeper is too high pitched, obviously related to wrong CPU type too +- V11 beeper is too high pitched, related to wrong CPU type too? But even at 72MHz + it's still wrong, so maybe waitstates or clock divider on I/O access. ******************************************************************************* @@ -38,8 +36,7 @@ I/O is via TTL, overall very similar to EAG. Elite Avant Garde (EAG, model 6114) ----------------------------------- -There are 5 versions of model 6114(V1 to V5). The one emulated here came from a V2, -but is practically emulated as a V4. +There are 5 versions of model 6114(V1 to V5): V1: 128KB DRAM, no EEPROM V2: 128KB DRAM @@ -78,7 +75,7 @@ Memory map: (of what is known) 300000-30000F W hi d0: NE591: 7seg data 300000-30000F W lo d0: NE591: LED data 300000-30000F R lo d7: 74259: keypad rows 0-7 -400000-400001 W lo d0-d3: 74145/7442: led/keypad mux, buzzer out +400000-400007 W lo d0: 74259,74145/7442: led/keypad mux, buzzer out 400000-4????? R hi: external module slot 700002-700003 R lo d7: 74251: keypad row 8 604000-607FFF: 16KB EEPROM @@ -158,6 +155,7 @@ B0000x-xxxxxx: see V7, -800000 #include "includes/fidelbase.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "machine/ram.h" #include "machine/nvram.h" #include "sound/volt_reg.h" @@ -179,7 +177,8 @@ public: { } // machine drivers - void eag(machine_config &config); + void eagv2(machine_config &config); + void eagv3(machine_config &config); void eagv5(machine_config &config); void eagv7(machine_config &config); void eagv9(machine_config &config); @@ -197,8 +196,7 @@ protected: // address maps void eag_map(address_map &map); void eagv7_map(address_map &map); - void eagv11_map(address_map &map); - void eagv5_slave_map(address_map &map); + void eagv10_map(address_map &map); // I/O handlers void prepare_display(); @@ -209,6 +207,35 @@ protected: DECLARE_WRITE8_MEMBER(digit_w); }; +class eagv5_state : public eag_state +{ +public: + eagv5_state(const machine_config &mconfig, device_type type, const char *tag) : + eag_state(mconfig, type, tag), + m_subcpu(*this, "subcpu"), + m_mainlatch(*this, "mainlatch"), + m_sublatch(*this, "sublatch") + { } + + // machine drivers + void eagv5(machine_config &config); + +private: + // devices/pointers + required_device<cpu_device> m_subcpu; + required_device<generic_latch_8_device> m_mainlatch; + required_device<generic_latch_8_device> m_sublatch; + + // address maps + void main_map(address_map &map); + void sub_map(address_map &map); + + // I/O handlers + DECLARE_WRITE8_MEMBER(reset_subcpu_w); + DECLARE_READ8_MEMBER(main_ack_r); + DECLARE_READ8_MEMBER(sub_ack_r); +}; + class excel68k_state : public eag_state { public: @@ -226,12 +253,10 @@ private: void fex68k_map(address_map &map); void fex68km2_map(address_map &map); void fex68km3_map(address_map &map); - - // I/O handlers, mux_w is a little different - virtual DECLARE_WRITE8_MEMBER(mux_w) override; }; + /****************************************************************************** Devices, I/O ******************************************************************************/ @@ -249,10 +274,14 @@ void eag_state::prepare_display() WRITE8_MEMBER(eag_state::mux_w) { - // d0-d3: 74145 A-D + // a1-a3,d0: 74259 + u8 mask = 1 << offset; + m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); + + // 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C) // 74145 0-8: input mux, digit/led select // 74145 9: speaker out - u16 sel = 1 << (data & 0xf); + u16 sel = 1 << (m_led_select & 0xf); m_dac->write(BIT(sel, 9)); m_inp_mux = sel & 0x1ff; prepare_display(); @@ -285,16 +314,24 @@ WRITE8_MEMBER(eag_state::digit_w) } -// fex68k-specific +// EAG V5 -WRITE8_MEMBER(excel68k_state::mux_w) +WRITE8_MEMBER(eagv5_state::reset_subcpu_w) { - // a1-a3,d0: 74259 - u8 mask = 1 << offset; - m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); + // reset subcpu, from trigger to monostable 555 (R1=47K, C1=1uF) + m_subcpu->pulse_input_line(INPUT_LINE_RESET, attotime::from_msec(52)); +} - // 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C) - eag_state::mux_w(space, offset, m_led_select & 0xf); +READ8_MEMBER(eagv5_state::main_ack_r) +{ + // d8,d9: latches ack state + return (m_mainlatch->pending_r() << 1 ^ 2) | m_sublatch->pending_r(); +} + +READ8_MEMBER(eagv5_state::sub_ack_r) +{ + // d8,d9: latches ack state + return (m_sublatch->pending_r() << 1 ^ 2) | m_mainlatch->pending_r(); } @@ -342,13 +379,28 @@ void eag_state::eag_map(address_map &map) map(0x104000, 0x107fff).ram(); map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr(); map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff); + map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask16(0x00ff); map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask16(0xff00); - map(0x400001, 0x400001).w(FUNC(eag_state::mux_w)); - map(0x400002, 0x400007).nopw(); // ? map(0x604000, 0x607fff).ram().share("nvram"); map(0x700003, 0x700003).r(FUNC(eag_state::input2_r)); } +void eagv5_state::main_map(address_map &map) +{ + eag_map(map); + map(0x500000, 0x500000).r(m_sublatch, FUNC(generic_latch_8_device::read)).w(m_mainlatch, FUNC(generic_latch_8_device::write)); + map(0x500002, 0x500002).rw(FUNC(eagv5_state::main_ack_r), FUNC(eagv5_state::reset_subcpu_w)); +} + +void eagv5_state::sub_map(address_map &map) +{ + map(0x000000, 0x00ffff).rom(); + map(0x000001, 0x000001).mirror(0x00fffe).w(m_sublatch, FUNC(generic_latch_8_device::write)); + map(0x044000, 0x047fff).ram(); + map(0x140000, 0x140000).r(FUNC(eagv5_state::sub_ack_r)); + map(0x140001, 0x140001).r(m_mainlatch, FUNC(generic_latch_8_device::read)); +} + void eag_state::eagv7_map(address_map &map) { map(0x000000, 0x01ffff).rom(); @@ -356,34 +408,26 @@ void eag_state::eagv7_map(address_map &map) map(0x200000, 0x2fffff).ram(); map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr(); map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff); + map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff); map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00); - map(0x400001, 0x400001).w(FUNC(eag_state::mux_w)); - map(0x400004, 0x400007).nopw(); // ? map(0x604000, 0x607fff).ram().share("nvram"); map(0x700003, 0x700003).r(FUNC(eag_state::input2_r)); map(0x800000, 0x807fff).ram(); } -void eag_state::eagv11_map(address_map &map) +void eag_state::eagv10_map(address_map &map) { map(0x00000000, 0x0001ffff).rom(); map(0x00200000, 0x003fffff).ram(); map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr(); map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff); + map(0x00c00000, 0x00c00007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff); map(0x00c00000, 0x00c07fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00); - map(0x00c00001, 0x00c00001).w(FUNC(eag_state::mux_w)); - map(0x00c00004, 0x00c00007).nopw(); // ? map(0x00e04000, 0x00e07fff).ram().share("nvram"); map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r)); map(0x01000000, 0x0101ffff).ram(); } -void eag_state::eagv5_slave_map(address_map &map) -{ - map(0x000000, 0x00ffff).rom(); - map(0x044000, 0x047fff).ram(); -} - /****************************************************************************** @@ -477,7 +521,7 @@ void eag_state::eag_base(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map); - const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 600Hz + const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 4060 Q13, 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on<M68K_IRQ_2>), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off<M68K_IRQ_2>), irq_period); @@ -499,21 +543,41 @@ void eag_state::eag_base(machine_config &config) SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc"); } -void eag_state::eag(machine_config &config) +void eag_state::eagv2(machine_config &config) { eag_base(config); - RAM(config, m_ram).set_default_size("1M").set_extra_options("128K, 512K, 1M"); + + /* basic machine hardware */ + RAM(config, m_ram).set_extra_options("128K, 512K, 1M"); + m_ram->set_default_size("128K"); } -void eag_state::eagv5(machine_config &config) +void eag_state::eagv3(machine_config &config) { - eag(config); + eagv2(config); /* basic machine hardware */ - m_ram->set_default_size("128K"); + m_ram->set_default_size("512K"); +} - m68000_device &subcpu(M68000(config, "subcpu", 16_MHz_XTAL)); - subcpu.set_addrmap(AS_PROGRAM, &eag_state::eagv5_slave_map); +void eagv5_state::eagv5(machine_config &config) +{ + eagv2(config); + + /* basic machine hardware */ + m_maincpu->set_addrmap(AS_PROGRAM, &eagv5_state::main_map); + + M68000(config, m_subcpu, 16_MHz_XTAL); + m_subcpu->set_addrmap(AS_PROGRAM, &eagv5_state::sub_map); + m_subcpu->set_periodic_int(FUNC(eagv5_state::irq2_line_hold), attotime::from_hz(16_MHz_XTAL/0x4000)); // 4060 Q14, ~1kHz + + GENERIC_LATCH_8(config, m_mainlatch); + GENERIC_LATCH_8(config, m_sublatch); + m_sublatch->data_pending_callback().set_inputline(m_maincpu, M68K_IRQ_1); // IPL0 + + // gen_latch syncs on write, but this is still needed with tight cpu comms + // (not that it locks up or anything, but it will calculate moves much slower if timing is off) + config.m_perfect_cpu_quantum = subtag("maincpu"); } void eag_state::eagv7(machine_config &config) @@ -521,7 +585,7 @@ void eag_state::eagv7(machine_config &config) eag_base(config); /* basic machine hardware */ - M68020(config.replace(), m_maincpu, 20_MHz_XTAL); + M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // also seen with 25MHz XTAL m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map); } @@ -530,7 +594,7 @@ void eag_state::eagv9(machine_config &config) eagv7(config); /* basic machine hardware */ - M68030(config.replace(), m_maincpu, 32_MHz_XTAL); + M68030(config.replace(), m_maincpu, 32_MHz_XTAL/2); // also seen with 40MHz XTAL m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map); } @@ -540,7 +604,7 @@ void eag_state::eagv10(machine_config &config) /* basic machine hardware */ M68040(config.replace(), m_maincpu, 25_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map); } void eag_state::eagv11(machine_config &config) @@ -549,7 +613,7 @@ void eag_state::eagv11(machine_config &config) /* basic machine hardware */ M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2*2); // wrong! should be M68EC060 @ 72MHz - m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map); m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600)); config.device_remove("irq_on"); // 8.25us is too long @@ -593,24 +657,24 @@ ROM_START( fex68km3 ) // model 6098, PCB label 510.1120B01 ROM_END -ROM_START( feagv2 ) // from a V2 board +ROM_START( feagv2 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("6114_e5_yellow.u22", 0x00000, 0x10000, CRC(f9c7bada) SHA1(60e545f829121b9a4f1100d9e85ac83797715e80) ) // 27c512 ROM_LOAD16_BYTE("6114_o5_green.u19", 0x00001, 0x10000, CRC(04f97b22) SHA1(8b2845dd115498f7b385e8948eca6a5893c223d1) ) // " ROM_END -ROM_START( feagv2a ) // from a V3 board +ROM_START( feagv3 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("elite_1.6_e.u22", 0x00000, 0x10000, CRC(c8b89ccc) SHA1(d62e0a72f54b793ab8853468a81255b62f874658) ) ROM_LOAD16_BYTE("elite_1.6_o.u19", 0x00001, 0x10000, CRC(904c7061) SHA1(742110576cf673321440bc81a4dae4c949b49e38) ) ROM_END ROM_START( feagv5 ) - ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_REGION( 0x20000, "maincpu", 0 ) // PCB label 510.1136A01 ROM_LOAD16_BYTE("master_e", 0x00000, 0x10000, CRC(e424bddc) SHA1(ff03656addfe5c47f06df2efb4602f43a9e19d96) ) ROM_LOAD16_BYTE("master_o", 0x00001, 0x10000, CRC(33a00894) SHA1(849460332b1ac10d452ca3631eb99f5597511b73) ) - ROM_REGION( 0x10000, "subcpu", 0 ) + ROM_REGION( 0x10000, "subcpu", 0 ) // PCB label 510.1138B01 ROM_LOAD16_BYTE("slave_e", 0x00000, 0x08000, CRC(eea4de52) SHA1(a64ca8a44b431e2fa7f00e44cab7e6aa2d4a9403) ) ROM_LOAD16_BYTE("slave_o", 0x00001, 0x08000, CRC(35fe2fdf) SHA1(731da12ee290bad9bc03cffe281c8cc48e555dfb) ) ROM_END @@ -663,11 +727,11 @@ CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_ini CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) +CONS( 1989, feagv2, 0, 0, eagv2, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, feagv3, feagv2, 0, eagv3, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eagv5_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1990, feagv7, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1990, feagv9, feagv2, 0, eagv9, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp index b3b2bc3ac56..65dc0419162 100644 --- a/src/mame/drivers/fidel_elite.cpp +++ b/src/mame/drivers/fidel_elite.cpp @@ -321,8 +321,6 @@ void elite_state::pc(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &elite_state::div_trampoline); ADDRESS_MAP_BANK(config, m_mainmap).set_map(&elite_state::pc_map).set_options(ENDIANNESS_LITTLE, 8, 16); - TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL)); - const attotime irq_period = attotime::from_hz(38.4_kHz_XTAL/64); // through 4060 IC, 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(elite_state::irq_on<M6502_IRQ_LINE>), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_hz(38.4_kHz_XTAL*2)); // edge! @@ -354,7 +352,6 @@ void elite_state::eas(machine_config &config) /* basic machine hardware */ m_maincpu->set_clock(3_MHz_XTAL); m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eas_map); - TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL)); I8255(config, m_ppi8255); // port B: input, port A & C: output m_ppi8255->out_pa_callback().set(FUNC(elite_state::ppi_porta_w)); @@ -374,7 +371,6 @@ void elite_state::eas_priv(machine_config &config) /* basic machine hardware */ M65C02(config.replace(), m_maincpu, 3.579545_MHz_XTAL); // UM6502C m_maincpu->set_addrmap(AS_PROGRAM, &elite_state::div_trampoline); - TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3.579545_MHz_XTAL)); config.set_default_layout(layout_fidel_eas_priv); } @@ -386,7 +382,6 @@ void elite_state::eag(machine_config &config) /* basic machine hardware */ m_maincpu->set_clock(5_MHz_XTAL); // R65C02P4 m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eag_map); - TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(5_MHz_XTAL)); config.device_remove("nvram"); NVRAM(config, "nvram.ic8", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/fidel_excel.cpp b/src/mame/drivers/fidel_excel.cpp index f1aeeeddad2..11fc4f12107 100644 --- a/src/mame/drivers/fidel_excel.cpp +++ b/src/mame/drivers/fidel_excel.cpp @@ -518,6 +518,6 @@ CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, excel_state, empty_in CONS( 1986, fexcelp, 0, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1986, fexcelpb, fexcelp, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit 'S'", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/drivers/fidel_sc12.cpp b/src/mame/drivers/fidel_sc12.cpp index 49859191df4..87cf7de0cf9 100644 --- a/src/mame/drivers/fidel_sc12.cpp +++ b/src/mame/drivers/fidel_sc12.cpp @@ -174,8 +174,6 @@ void sc12_state::sc12(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &sc12_state::div_trampoline); ADDRESS_MAP_BANK(config, m_mainmap).set_map(&sc12_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16); - TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL)); - const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K) TIMER(config, m_irq_on).configure_periodic(FUNC(sc12_state::irq_on<M6502_IRQ_LINE>), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us @@ -202,7 +200,6 @@ void sc12_state::sc12b(machine_config &config) /* basic machine hardware */ m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4 - TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL)); // change irq timer frequency const attotime irq_period = attotime::from_hz(596); // from 556 timer (22nF, 82K+26K, 1K) diff --git a/src/mame/drivers/fidel_vcc.cpp b/src/mame/drivers/fidel_vcc.cpp index 9dc11d87f53..b54bddd4990 100644 --- a/src/mame/drivers/fidel_vcc.cpp +++ b/src/mame/drivers/fidel_vcc.cpp @@ -151,7 +151,7 @@ void vcc_state::machine_start() { fidelbase_state::machine_start(); - // game relies on RAM initialized filled with 1 + // game relies on RAM filled with FF at power-on for (int i = 0; i < 0x400; i++) m_maincpu->space(AS_PROGRAM).write_byte(i + 0x4000, 0xff); } diff --git a/src/mame/drivers/finalizr.cpp b/src/mame/drivers/finalizr.cpp index 3d818910126..1f4a85cc9e8 100644 --- a/src/mame/drivers/finalizr.cpp +++ b/src/mame/drivers/finalizr.cpp @@ -195,7 +195,7 @@ static INPUT_PORTS_START( finalizr ) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END -static INPUT_PORTS_START( finalizrb ) +static INPUT_PORTS_START( finalizra ) PORT_INCLUDE( finalizr ) PORT_MODIFY("DSW2") @@ -336,6 +336,31 @@ ROM_START( finalizr ) ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */ ROM_END +ROM_START( finalizra ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.9c", 0x4000, 0x4000, CRC(7d464e5c) SHA1(45b1591a6be713dfc58ab657e61531ea2b9263c1) ) + ROM_LOAD( "2.12c", 0x8000, 0x4000, CRC(383dc94e) SHA1(f192e16e83ae34cc97af07072a4dc68e7c4c362c) ) + ROM_LOAD( "3.13c", 0xc000, 0x4000, CRC(ce177f6e) SHA1(034cbe0c1e2baf9577741b3c222a8b4a8ac8c919) ) + + ROM_REGION( 0x1000, "audiocpu", 0 ) /* 8039 */ + ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, BAD_DUMP CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) /* this comes from the bootleg, the original has a custom IC */ + + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "523h04.5e", 0x00000, 0x4000, CRC(c056d710) SHA1(3fe0ab7ef3bce7298c2a073d0985c33f9dc40062) ) + ROM_LOAD16_BYTE( "523h07.5f", 0x00001, 0x4000, CRC(50e512ba) SHA1(f916afb9df1872f9de571d20b9045b20d9172eaa) ) + ROM_LOAD16_BYTE( "523h05.6e", 0x08000, 0x4000, CRC(ae0d0f76) SHA1(6dd0119e4ba7ebb32ba1ca6395f80d18f1617ce8) ) + ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) ) + ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) ) + ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) ) + /* 18000-1ffff empty */ + + ROM_REGION( 0x0240, "proms", 0 ) /* PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles) */ + ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) /* palette */ + ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) /* palette */ + ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) /* characters */ + ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */ +ROM_END + ROM_START( finalizrb ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "finalizr.5", 0x4000, 0x8000, CRC(a55e3f14) SHA1(47f6da214b36cc56be547fa4313afcc5572508a2) ) @@ -362,5 +387,6 @@ ROM_END -GAME( 1985, finalizr, 0, finalizr, finalizr, finalizr_state, empty_init, ROT90, "Konami", "Finalizer - Super Transformation", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, finalizrb, finalizr, finalizr, finalizrb, finalizr_state, empty_init, ROT90, "bootleg", "Finalizer - Super Transformation (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, finalizr, 0, finalizr, finalizr, finalizr_state, empty_init, ROT90, "Konami", "Finalizer - Super Transformation (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, finalizra, finalizr, finalizr, finalizra, finalizr_state, empty_init, ROT90, "Konami", "Finalizer - Super Transformation (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, finalizrb, finalizr, finalizr, finalizra, finalizr_state, empty_init, ROT90, "bootleg", "Finalizer - Super Transformation (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/firebeat.cpp b/src/mame/drivers/firebeat.cpp index 2bb69eb3511..2341bbcbbbb 100644 --- a/src/mame/drivers/firebeat.cpp +++ b/src/mame/drivers/firebeat.cpp @@ -489,12 +489,12 @@ READ32_MEMBER(firebeat_state::keyboard_wheel_r ) READ8_MEMBER(firebeat_state::midi_uart_r ) { - return m_duart_midi->read(space, offset >> 6); + return m_duart_midi->read(offset >> 6); } WRITE8_MEMBER(firebeat_state::midi_uart_w ) { - m_duart_midi->write(space, offset >> 6, data); + m_duart_midi->write(offset >> 6, data); } WRITE_LINE_MEMBER(firebeat_state::midi_uart_ch0_irq_callback) diff --git a/src/mame/drivers/firetrap.cpp b/src/mame/drivers/firetrap.cpp index bdf1a5eeb8b..638303b51ca 100644 --- a/src/mame/drivers/firetrap.cpp +++ b/src/mame/drivers/firetrap.cpp @@ -339,7 +339,7 @@ WRITE_LINE_MEMBER(firetrap_state::firetrap_adpcm_int) WRITE8_MEMBER(firetrap_state::adpcm_data_w) { m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); - m_adpcm_select->write_ba(data); + m_adpcm_select->ba_w(data); } WRITE8_MEMBER(firetrap_state::flip_screen_w) diff --git a/src/mame/drivers/flipjack.cpp b/src/mame/drivers/flipjack.cpp index 49710b33951..6fa9210f59a 100644 --- a/src/mame/drivers/flipjack.cpp +++ b/src/mame/drivers/flipjack.cpp @@ -262,7 +262,7 @@ WRITE8_MEMBER(flipjack_state::layer_w) WRITE8_MEMBER(flipjack_state::soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); if (BIT(data, 7)) m_audiocpu->set_input_line(0, ASSERT_LINE); } diff --git a/src/mame/drivers/flkatck.cpp b/src/mame/drivers/flkatck.cpp index d58e65bda44..59ca6d48324 100644 --- a/src/mame/drivers/flkatck.cpp +++ b/src/mame/drivers/flkatck.cpp @@ -69,7 +69,7 @@ WRITE8_MEMBER(flkatck_state::flkatck_ls138_w) flkatck_bankswitch_w(space, 0, data); break; case 0x05: /* sound code number */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); break; case 0x06: /* Cause interrupt on audio CPU */ m_audiocpu->set_input_line(0, HOLD_LINE); diff --git a/src/mame/drivers/flower.cpp b/src/mame/drivers/flower.cpp index eca0e8d727e..e007c8decf4 100644 --- a/src/mame/drivers/flower.cpp +++ b/src/mame/drivers/flower.cpp @@ -316,7 +316,7 @@ WRITE8_MEMBER(flower_state::coin_counter_w) WRITE8_MEMBER(flower_state::sound_command_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); if(m_audio_nmi_enable == true) m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/freekick.cpp b/src/mame/drivers/freekick.cpp index 4aafbbef37e..bbda9f6c448 100644 --- a/src/mame/drivers/freekick.cpp +++ b/src/mame/drivers/freekick.cpp @@ -42,6 +42,68 @@ TODO: To enter Test Mode - press Button1 durning RESET (code at $79d) +**************************************************************************** + + Perfect Billiard/Gigas Omega + ---------------------- ----- + + GND A1 B1 GND GND 1A 1B GND + GND A2 B2 GND GND 2A 2B GND + +5V A3 B3 +5V +5V 3A 3B GND + +5V A4 B4 +5V +5V 4A 4B GND + +12V A5 B5 +12V +12V 5A 5B GND + SPEAKER(+) A6 B6 SPEAKER(-) SPEAKER(+) 6A 6B SPEAKER(-) + COIN METER 1 A7 B7 COIN METER 2 COIN A 7A 7B COUNTER B + COIN SW1 A8 B8 COIN SW2 COUNTER A 8A 8B COIN B + 1P START A9 B9 2P START 1P START 9A 9B 2P START + 1P UP A10 B10 2P UP COIN EMPTY SW 10A 10B + 1P DOWN A11 B11 2P DOWN 11A 11B + 1P LEFT A12 B12 2P LEFT 12A 12B + 1P RIGHT A13 B13 2P RIGHT 13A 13B + 1P SHOOT A14 B14 2P SHOOT 1P SHOOT 14A 14B 2P SHOOT + A15 B15 15A 15B + RED A16 B16 BLUE RED 16A 16B BLUE + GREEN A17 B17 SYNC GREEN 17A 17B SYNC + GND A18 B18 GND GND 18A 18B GND + 1P L 19A 19B 2P L + 1P R 20A 20B 2P R + +5V 21A 21B GND + AC IN 22A 22B AC OUT + + Counter Run/Free Kick + --------------------- + + GND 1B 1A GND + GND 2B 2A GND + +5V 3B 3A +5V + +5V 4B 4A +5V + 5B 5A + +12V 6B 6A +12V + INPUT PREVENTION KEY 7B 7A INPUT PREVENTION KEY + COUNTER B 8B 8A COUNTER A + 9B 9A + SPEAKER(-) 10B 10A SPEAKER(+) + 11B 11A + GREEN 12B 12A RED + SYNC 13B 13A BLUE + 14B 14A GND + 15B 15A + COIN B(SERVICE) 16B 16A COIN A + 2P START 17B 17A 1P START + 2P UP 18B 18A 1P UP + 2P DOWN 19B 19A 1P DOWN + 2P LEFT 20B 20A 1P LEFT + 2P RIGHT 21B 21A 1P RIGHT + 2P PUSH 1 22B 22A 1P PUSH 1 + 2P PUSH 2 23B 23A 1P PUSH 2 + 24B 24A + 2PL (Sensor Dial) 25B 25A 1PL (Sensor Dial) + 2PR (Sensor Dial) 26B 26A 1PR (Sensor Dial) + GND 27B 27A GND + GND 28B 28A GND + +**************************************************************************** + */ #include "emu.h" @@ -1395,31 +1457,63 @@ ROM_END // Omega code/gfx looks to be based on gigas mk2, given the "MarkII" graphic in the gfx roms and gigas MarkII style continue numbers etc // PCB is marked "K.K NS6102-A" and seems to be somewhere between gigas hardware and freekick hardware (3x dipswitch arrays) // Supposedly an extremely limited release with ~10 PCBs produced. -ROM_START( omega ) +// A second PCB found with the CPU (under a metal cap) to be a NEC MC-8123 317-5002 - same as Gigas & Gigas Mark II, however +// neither Omega set will work with the 317-5002 key in MAME, so maybe the CPU was factory reprogrammed? +// A single byte difference at 0x1120 in 17.M10 (when decoded) looks like a legit bug fix as it changes a branch +// which incorrectly jumps over a bit of initialization code + +ROM_START( omega ) // ROM at M10 labeled "17" to indicate a later Bug fix version + ROM_REGION(0xc000, "maincpu", 0) // encrypted + ROM_LOAD( "17.m10", 0x0000, 0x4000, CRC(c7de0993) SHA1(35ecd464935faba1dc7d0dbf48e1b17153626bfd) ) // 27128 + ROM_LOAD( "8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376) ) // 27256 + + ROM_REGION(0x2000, "maincpu:key", 0) // MC8123 key + ROM_LOAD( "omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2) ) + + ROM_REGION(0xc000, "gfx1", 0) + ROM_LOAD( "4.f10", 0x00000, 0x04000, CRC(bf780a8e) SHA1(53bfabf74f1a7782c6c1803498a24da0bf8db995) ) // 27128 + ROM_LOAD( "5.h10", 0x04000, 0x04000, CRC(b491647f) SHA1(88017033a781ecc49a83241bc49e2077a480ac2b) ) // 27128 + ROM_LOAD( "6.j10", 0x08000, 0x04000, CRC(65beba5b) SHA1(e6d61dc52dcbb30570b48d7b1d7807dd0be41400) ) // 27128 + + ROM_REGION(0xc000, "gfx2", 0) + ROM_LOAD( "3.d10", 0x00000, 0x04000, CRC(c678b202) SHA1(ee93385e11158ccaf51a22d813bd7020c04cfdad) ) // 27128 + ROM_LOAD( "1.a10", 0x04000, 0x04000, CRC(e0aeada9) SHA1(ed00f6dca4f9701ff89390922d39341b179597c7) ) // 27128 + ROM_LOAD( "2.c10", 0x08000, 0x04000, CRC(dbc0a47f) SHA1(b617c5a10c655e7befaeaecd9ce736e972285e6b) ) // 27128 + + ROM_REGION(0x600, "proms", 0) + ROM_LOAD( "tbp24s10n.3f", 0x0000, 0x100, CRC(75ec7472) SHA1(868811e838c570a0f576a0ece249cab2d4274d65) ) /* Or compatible type prom like the 82S129 */ + ROM_LOAD( "tbp24s10n.4f", 0x0100, 0x100, CRC(5113a114) SHA1(3a5ab68c93d1f2c05ceb0311e12a54fd124d8435) ) + ROM_LOAD( "tbp24s10n.3g", 0x0200, 0x100, CRC(b6b5d4a0) SHA1(2b7ba59a6c185326e11ce8ccd96b3c8cfd652fdf) ) + ROM_LOAD( "tbp24s10n.4g", 0x0300, 0x100, CRC(931bc299) SHA1(f116f1d6a4324b86b0aae0a5a040236b3a4fd12d) ) + ROM_LOAD( "tbp24s10n.3e", 0x0400, 0x100, CRC(899e089d) SHA1(5a485d3ef7d2102451ff76452cac106061cc5cd6) ) + ROM_LOAD( "tbp24s10n.4e", 0x0500, 0x100, CRC(28321dd8) SHA1(4ba0f6c381ef929a476d4d7aa71b1397c48a644e) ) +ROM_END + +ROM_START( omegaa ) // ROM at M10 labeled "7" to indicate the original version skipping some initialization code ROM_REGION(0xc000, "maincpu", 0) // encrypted - ROM_LOAD("17.m10", 0x0000, 0x4000, CRC(c7de0993) SHA1(35ecd464935faba1dc7d0dbf48e1b17153626bfd)) // 27128 - ROM_LOAD("8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376)) // 27256 + ROM_LOAD( "7.m10", 0x0000, 0x4000, CRC(6e7d77e1) SHA1(7675cea41391595cd7a3e1893478185989f4c319) ) // 27128 + ROM_LOAD( "8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376) ) // 27256 ROM_REGION(0x2000, "maincpu:key", 0) // MC8123 key - ROM_LOAD("omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2)) + ROM_LOAD( "omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2) ) ROM_REGION(0xc000, "gfx1", 0) - ROM_LOAD("4.f10", 0x00000, 0x04000, CRC(bf780a8e) SHA1(53bfabf74f1a7782c6c1803498a24da0bf8db995)) // 27128 - ROM_LOAD("5.h10", 0x04000, 0x04000, CRC(b491647f) SHA1(88017033a781ecc49a83241bc49e2077a480ac2b)) // 27128 - ROM_LOAD("6.j10", 0x08000, 0x04000, CRC(65beba5b) SHA1(e6d61dc52dcbb30570b48d7b1d7807dd0be41400)) // 27128 + ROM_LOAD( "4.f10", 0x00000, 0x04000, CRC(bf780a8e) SHA1(53bfabf74f1a7782c6c1803498a24da0bf8db995) ) // 27128 + ROM_LOAD( "5.h10", 0x04000, 0x04000, CRC(b491647f) SHA1(88017033a781ecc49a83241bc49e2077a480ac2b) ) // 27128 + ROM_LOAD( "6.j10", 0x08000, 0x04000, CRC(65beba5b) SHA1(e6d61dc52dcbb30570b48d7b1d7807dd0be41400) ) // 27128 ROM_REGION(0xc000, "gfx2", 0) - ROM_LOAD("3.d10", 0x00000, 0x04000, CRC(c678b202) SHA1(ee93385e11158ccaf51a22d813bd7020c04cfdad)) // 27128 - ROM_LOAD("1.a10", 0x04000, 0x04000, CRC(e0aeada9) SHA1(ed00f6dca4f9701ff89390922d39341b179597c7)) // 27128 - ROM_LOAD("2.c10", 0x08000, 0x04000, CRC(dbc0a47f) SHA1(b617c5a10c655e7befaeaecd9ce736e972285e6b)) // 27128 + ROM_LOAD( "3.d10", 0x00000, 0x04000, CRC(c678b202) SHA1(ee93385e11158ccaf51a22d813bd7020c04cfdad) ) // 27128 + ROM_LOAD( "1.a10", 0x04000, 0x04000, CRC(e0aeada9) SHA1(ed00f6dca4f9701ff89390922d39341b179597c7) ) // 27128 + ROM_LOAD( "2.c10", 0x08000, 0x04000, CRC(dbc0a47f) SHA1(b617c5a10c655e7befaeaecd9ce736e972285e6b) ) // 27128 ROM_REGION(0x600, "proms", 0) - ROM_LOAD("tbp24s10n.3f", 0x0000, 0x100, CRC(75ec7472) SHA1(868811e838c570a0f576a0ece249cab2d4274d65) ) /* Or compatible type prom like the 82S129 */ - ROM_LOAD("tbp24s10n.4f", 0x0100, 0x100, CRC(5113a114) SHA1(3a5ab68c93d1f2c05ceb0311e12a54fd124d8435) ) - ROM_LOAD("tbp24s10n.3g", 0x0200, 0x100, CRC(b6b5d4a0) SHA1(2b7ba59a6c185326e11ce8ccd96b3c8cfd652fdf) ) - ROM_LOAD("tbp24s10n.4g", 0x0300, 0x100, CRC(931bc299) SHA1(f116f1d6a4324b86b0aae0a5a040236b3a4fd12d) ) - ROM_LOAD("tbp24s10n.3e", 0x0400, 0x100, CRC(899e089d) SHA1(5a485d3ef7d2102451ff76452cac106061cc5cd6) ) - ROM_LOAD("tbp24s10n.4e", 0x0500, 0x100, CRC(28321dd8) SHA1(4ba0f6c381ef929a476d4d7aa71b1397c48a644e) ) + ROM_LOAD( "tbp24s10n.3f", 0x0000, 0x100, CRC(75ec7472) SHA1(868811e838c570a0f576a0ece249cab2d4274d65) ) /* Or compatible type prom like the 82S129 */ + ROM_LOAD( "tbp24s10n.4f", 0x0100, 0x100, CRC(5113a114) SHA1(3a5ab68c93d1f2c05ceb0311e12a54fd124d8435) ) + ROM_LOAD( "tbp24s10n.3g", 0x0200, 0x100, CRC(b6b5d4a0) SHA1(2b7ba59a6c185326e11ce8ccd96b3c8cfd652fdf) ) + ROM_LOAD( "tbp24s10n.4g", 0x0300, 0x100, CRC(931bc299) SHA1(f116f1d6a4324b86b0aae0a5a040236b3a4fd12d) ) + ROM_LOAD( "tbp24s10n.3e", 0x0400, 0x100, CRC(899e089d) SHA1(5a485d3ef7d2102451ff76452cac106061cc5cd6) ) + ROM_LOAD( "tbp24s10n.4e", 0x0500, 0x100, CRC(28321dd8) SHA1(4ba0f6c381ef929a476d4d7aa71b1397c48a644e) ) ROM_END @@ -1465,7 +1559,8 @@ GAME( 1986, gigasb, gigas, gigas, gigas, freekick_state, init_gigas GAME( 1986, oigas, gigas , oigas, gigas, freekick_state, init_gigasb, ROT270, "bootleg", "Oigas (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, gigasm2, 0, gigasm, gigasm2, freekick_state, init_gigas, ROT270, "Sega", "Gigas Mark II (MC-8123, 317-5002)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, gigasm2b, gigasm2, gigas, gigasm2, freekick_state, init_gigasb, ROT270, "bootleg", "Gigas Mark II (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, omega, 0, omega, omega, freekick_state, init_gigas, ROT270, "Nihon System", "Omega", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, omega, 0, omega, omega, freekick_state, init_gigas, ROT270, "Nihon System", "Omega", MACHINE_SUPPORTS_SAVE ) // Bug fix version +GAME( 1986, omegaa, omega, omega, omega, freekick_state, init_gigas, ROT270, "Nihon System", "Omega (earlier)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, pbillrd, 0, pbillrd, pbillrd, freekick_state, empty_init, ROT0, "Nihon System", "Perfect Billiard", MACHINE_SUPPORTS_SAVE ) GAME( 1987, pbillrds, pbillrd, pbillrdm, pbillrd, freekick_state, init_pbillrds, ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-0030)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, pbillrdsa, pbillrd, pbillrdm, pbillrd, freekick_state, init_pbillrds, ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-5008)", MACHINE_SUPPORTS_SAVE ) // sticker on CPU module different (wrong?) functionality the same diff --git a/src/mame/drivers/fromanc2.cpp b/src/mame/drivers/fromanc2.cpp index b9aec13b2ea..8bd66cfc0fb 100644 --- a/src/mame/drivers/fromanc2.cpp +++ b/src/mame/drivers/fromanc2.cpp @@ -37,8 +37,8 @@ WRITE16_MEMBER(fromanc2_state::sndcmd_w) { - m_soundlatch->write(space, offset, (data >> 8) & 0xff); // 1P (LEFT) - m_soundlatch2->write(space, offset, data & 0xff); // 2P (RIGHT) + m_soundlatch->write((data >> 8) & 0xff); // 1P (LEFT) + m_soundlatch2->write(data & 0xff); // 2P (RIGHT) m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); m_sndcpu_nmi_flag = 0; diff --git a/src/mame/drivers/fs3216.cpp b/src/mame/drivers/fs3216.cpp index cbe6aa178df..19dbda235b7 100644 --- a/src/mame/drivers/fs3216.cpp +++ b/src/mame/drivers/fs3216.cpp @@ -58,8 +58,8 @@ private: u16 irq_r(); IRQ_CALLBACK_MEMBER(intack); - DECLARE_READ8_MEMBER(ctc_r); - DECLARE_WRITE8_MEMBER(ctc_w); + u8 ctc_r(offs_t offset); + void ctc_w(offs_t offset, u8 data); u16 earom_recall_r(); u16 earom_store_r(); @@ -226,14 +226,14 @@ IRQ_CALLBACK_MEMBER(fs3216_state::intack) return m_vecprom[irqline]; } -READ8_MEMBER(fs3216_state::ctc_r) +u8 fs3216_state::ctc_r(offs_t offset) { - return m_ctc->read(space, offset >> 1); + return m_ctc->read(offset >> 1); } -WRITE8_MEMBER(fs3216_state::ctc_w) +void fs3216_state::ctc_w(offs_t offset, u8 data) { - m_ctc->write(space, offset >> 1, data); + m_ctc->write(offset >> 1, data); } u16 fs3216_state::earom_recall_r() diff --git a/src/mame/drivers/funkyjet.cpp b/src/mame/drivers/funkyjet.cpp index 2c2b8f0cef0..00d81fe3716 100644 --- a/src/mame/drivers/funkyjet.cpp +++ b/src/mame/drivers/funkyjet.cpp @@ -334,7 +334,6 @@ void funkyjet_state::funkyjet(machine_config &config) PALETTE(config, "palette").set_format(palette_device::xBGR_444, 1024); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/funworld.cpp b/src/mame/drivers/funworld.cpp index 313a1b7a88a..7aaf94a31ef 100644 --- a/src/mame/drivers/funworld.cpp +++ b/src/mame/drivers/funworld.cpp @@ -101,7 +101,7 @@ * Unknown Fun World A7-11 game 1, Fun World, 1985. * Unknown Fun World A7-11 game 2, Fun World, 1985. * Unknown Fun World A0-1 game, Fun World, 1991. - * Joker Card (Epoxy brick CPU), Fun World, 1991. + * Joker Card / Multi Card (Epoxy brick CPU), Fun World, 1991. ***************************************************************************************** @@ -472,6 +472,17 @@ The only visible changes are in the NVRAM, where the $0000 offset hasn't the JMP $C210 instruction injected at the start... + + * Joker Card / Multi Card (Epoxy brick CPU) + + These series are running in a derivative hardware with epoxy CPU brick. + CPU is RP65C02A, with 2x Toshiba TC5565APL-10 RAMs. 1x Intel D27128A ROM. + and 1x PAL16L8B. + + The main program is inside the battery backed RAM, and need to be dumped. + See more notes below in the ROM loading. + + ***************************************************************************************** Memory Map (generic) @@ -1203,20 +1214,23 @@ void funworld_state::saloon_map(address_map &map) { map(0x0000, 0x07ff).ram().share("nvram"); map(0x0800, 0x0800).portr("IN0"); + map(0x0801, 0x0801).portr("IN1"); + map(0x0802, 0x0802).portr("IN2"); // maybe map(0x0808, 0x0808).portr("IN3"); // maybe - map(0x0802, 0x0802).portr("IN4"); // maybe - map(0x0a01, 0x0a01).portr("IN1"); + map(0x0810, 0x0810).nopw(); + map(0x0a00, 0x0a00).portr("IN4"); + map(0x0a01, 0x0a01).portr("IN5"); + map(0x081b, 0x081b).portw("I2C_CK"); map(0x081c, 0x081c).w("crtc", FUNC(mc6845_device::address_w)); map(0x081d, 0x081d).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); - map(0x1000, 0x1000).portr("IN2"); + map(0x1000, 0x1000).portr("I2C_DI").portw("I2C_DO"); map(0x1800, 0x1800).r("ay8910", FUNC(ay8910_device::data_r)); map(0x1800, 0x1801).w("ay8910", FUNC(ay8910_device::address_data_w)); -// AM_RANGE(0x2000, 0x2000) AM_READNOP /* some unknown reads... maybe a DSW */ + map(0x2000, 0x2003).nopr(); // check for extra ROM in $2000. if exist just jump to $2100 map(0x6000, 0x6fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram"); map(0x7000, 0x7fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram"); map(0x8000, 0xffff).rom(); } - /* Unknown R/W ----------- @@ -1259,7 +1273,7 @@ void funworld_state::intergames_map(address_map &map) map(0x8000, 0xffff).rom(); } -void funworld_state::fw_a7_11_map(address_map &map) +void funworld_state::fw_brick_map(address_map &map) { map(0x0000, 0x07ff).ram().share("nvram"); map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); @@ -1270,12 +1284,11 @@ void funworld_state::fw_a7_11_map(address_map &map) map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); map(0x2000, 0x2fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram"); map(0x3000, 0x3fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram"); - map(0x4000, 0x4000).nopr(); - map(0x8000, 0xbfff).ram(); + map(0x4000, 0x7fff).nopr(); // check for the brick RAM programming ROM. + map(0x8000, 0xbfff).ram().share("nvram1"); map(0xc000, 0xffff).rom(); } - /************************* * Input ports * *************************/ @@ -2469,91 +2482,95 @@ INPUT_PORTS_END static INPUT_PORTS_START( saloon ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-3") PORT_CODE(KEYCODE_3) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-4") PORT_CODE(KEYCODE_4) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-5") PORT_CODE(KEYCODE_5) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_6) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_7) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-8") PORT_CODE(KEYCODE_8) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-1") PORT_CODE(KEYCODE_Q) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-2") PORT_CODE(KEYCODE_W) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-3") PORT_CODE(KEYCODE_E) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-6") PORT_CODE(KEYCODE_Y) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_U) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_I) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-1") PORT_CODE(KEYCODE_A) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_D) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_F) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-5") PORT_CODE(KEYCODE_G) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-6") PORT_CODE(KEYCODE_H) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-7") PORT_CODE(KEYCODE_J) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-8") PORT_CODE(KEYCODE_K) - - PORT_START("IN3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN4") + PORT_START("IN0") // 0800h + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Play / Start / Enter") // ok + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2) // funcion aun no detectada + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / High / Menu Dwn") // ok + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Take / Autohold / Exit") // ok + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Menu") // ok + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Menu-Up") PORT_CODE(KEYCODE_6) // ok -> revisar otra funcionalidad + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1") // ok + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Bet") // ok + + PORT_START("IN1") // 0801h + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-1") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-2") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-3") PORT_CODE(KEYCODE_D) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-4") PORT_CODE(KEYCODE_F) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-5") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-6") PORT_CODE(KEYCODE_H) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-7") PORT_CODE(KEYCODE_J) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-8") PORT_CODE(KEYCODE_K) + + PORT_START("IN2") // 0802h PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Low") // ok PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) // ok PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("IN3") // 0808h + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // ok + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PROBADO: NO HACE NADA + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // PROBADO: NO HACE NADA + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Credits IN/OUT") // ok + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PROBADO: NO HACE NADA + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Keyout (Scarico Coin)") // ok + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PROBADO: NO HACE NADA + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Warm Reset") PORT_CODE(KEYCODE_R)// OK + + PORT_START("IN4") // 0A00h + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-1") PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-2") PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-3") PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-4") PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-5") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-6") PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-7") PORT_CODE(KEYCODE_7_PAD) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-8") PORT_CODE(KEYCODE_8_PAD) + + PORT_START("IN5") // 0A01h + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-1") PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-2") PORT_CODE(KEYCODE_L) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-3") PORT_CODE(KEYCODE_E) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-4") PORT_CODE(KEYCODE_0) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-5") PORT_CODE(KEYCODE_T) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-6") PORT_CODE(KEYCODE_Y) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-7") PORT_CODE(KEYCODE_U) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-8") PORT_CODE(KEYCODE_I) + + PORT_START("I2C_CK") // 081Bh + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("i2cmem" , i2cmem_device, write_scl) // Serial Clock + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("I2C_DI") // 1000h Input + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", i2cmem_device, read_sda) // Serial Data In + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-1") PORT_CODE(KEYCODE_Z) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-2") PORT_CODE(KEYCODE_X) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-3") PORT_CODE(KEYCODE_C) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-4") PORT_CODE(KEYCODE_V) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-5") PORT_CODE(KEYCODE_B) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-6") PORT_CODE(KEYCODE_N) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-7") PORT_CODE(KEYCODE_M) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-8") PORT_CODE(KEYCODE_L) - - PORT_START("SW1") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_START("I2C_DO") // 1000h Output + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("i2cmem", i2cmem_device, write_sda) // Serial Data Out + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END static INPUT_PORTS_START( funquiz ) @@ -2936,6 +2953,13 @@ static INPUT_PORTS_START( royal ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( fw_brick1 ) + PORT_INCLUDE( novoplay ) + PORT_MODIFY("DSW") + PORT_DIPNAME( 0x20, 0x00, "Game Type" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x20, "Multi Card (without Jokers)" ) + PORT_DIPSETTING( 0x00, "Joker Card (with Jokers)" ) +INPUT_PORTS_END /************************* * Graphics Layouts * @@ -3110,6 +3134,11 @@ void funworld_state::fw1stpal(machine_config &config) ay8910.port_a_write_callback().set(FUNC(funworld_state::funworld_lamp_a_w)); ay8910.port_b_write_callback().set(FUNC(funworld_state::funworld_lamp_b_w)); ay8910.add_route(ALL_OUTPUTS, "mono", 2.5); /* analyzed to avoid clips */ + + /* Serial Memory */ + i2cmem_device &m_i2cmem(I2CMEM(config, "i2cmem", 0)); + m_i2cmem.set_data_size(256); + m_i2cmem.set_e0(1); } @@ -3181,6 +3210,8 @@ void funworld_state::saloon(machine_config &config) fw1stpal(config); R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::saloon_map); + config.device_remove("pia0"); + config.device_remove("pia1"); } @@ -3228,7 +3259,8 @@ void funworld_state::fw_brick_1(machine_config &config) { fw1stpal(config); R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_a7_11_map); + m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map); + NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0); // m_gfxdecode->set_info(gfx_fw2ndpal); } @@ -3237,10 +3269,555 @@ void funworld_state::fw_brick_2(machine_config &config) { fw2ndpal(config); R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_a7_11_map); + m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map); + NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0); // m_gfxdecode->set_info(gfx_fw2ndpal); } +// TO-DO: clean up and relocate, when convenient, all the opcode-encryption stuff + +class royalcrdf_state : public funworld_state +{ +public: + royalcrdf_state(const machine_config &mconfig, device_type type, const char* tag) + : funworld_state(mconfig, type, tag) + { + } + + void royalcrdf(machine_config& config); + + void driver_init() override; + +private: + cpu_device* _maincpu {}; + DECLARE_READ8_MEMBER(royalcrdf_opcode_r); + + void royalcrdf_opcodes_map(address_map& map); +}; + +READ8_MEMBER(royalcrdf_state::royalcrdf_opcode_r) +{ + // address-based data bitswap; 4 address bits are involved, but only + // 5 different bitswaps exist, with clear regularities, so the + // hardware is probably selecting the appropiate one by + // applying passive logic to the address bits; we encode it + // indexed by all the involved address bits instead. A notable fact is that + // all the permutations in royalcrdf & multiwin are odd-parity ones, + // so an intriguing possibility is that the hardware be applying + // a fixed odd number (3 would suffice) of address-dependent + // 1-bit-to-1-bit bitswaps; furthermore, in both sets one of the + // bitswaps is equal to the one applied to all the data (but notice + // that, in those cases, we are applying it twice to opcodes here) + constexpr std::array<std::array<int,4>,16> bs{ // bitswaps for data bits 1,2,5 & 7, in that order + 1,5,2,7, + 1,5,2,7, + 5,1,7,2, + 7,2,5,1, + 1,5,2,7, + 1,5,2,7, + 5,2,1,7, + 7,2,5,1, + 1,5,2,7, + 1,5,2,7, + 5,1,7,2, + 1,7,5,2, + 1,5,2,7, + 1,5,2,7, + 5,2,1,7, + 1,7,5,2, + }; + + // xor masks, dependent on the same address bits than the bitswaps, + // and with the same 5-values structure + constexpr std::array<uint8_t,16> xm { + 0x02, 0x02, 0xa6, 0x82, 0x02, 0x02, 0x06, 0x82, 0x02, 0x02, 0xa6, 0x00, 0x02, 0x02, 0x06, 0x00 + }; + + uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)}; + unsigned idx {bitswap<4>(offset, 8,5,2,1)}; + + return bitswap<8>(data, bs[idx][3],6,bs[idx][2],4,3,bs[idx][1],bs[idx][0],0) ^ xm[idx]; +} + +void royalcrdf_state::royalcrdf_opcodes_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(royalcrdf_state::royalcrdf_opcode_r)); +} + +void royalcrdf_state::driver_init() +{ + uint8_t *ROM = memregion("maincpu")->base(); + for (int x = 0x8000; x < 0x10000; x++) + { + ROM[x] = bitswap<8>(ROM[x]^0x22,2,6,7,4,3,1,5,0); + } +} + +void royalcrdf_state::royalcrdf(machine_config &config) +{ + fw2ndpal(config); + + _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu")); + _maincpu->set_addrmap(AS_OPCODES, &royalcrdf_state::royalcrdf_opcodes_map); +} + +class multiwin_state : public funworld_state +{ +public: + multiwin_state(const machine_config &mconfig, device_type type, const char* tag) + : funworld_state(mconfig, type, tag) + { + } + + void multiwin(machine_config& config); + + void driver_init() override; + +private: + cpu_device* _maincpu {}; + DECLARE_READ8_MEMBER(multiwin_opcode_r); + + void multiwin_opcodes_map(address_map& map); +}; + +READ8_MEMBER(multiwin_state::multiwin_opcode_r) +{ + // same general encryption scheme than the one used by the EVONA Royald Card set; + // 4 address bits determine which bitswap+xor is applied to the opcodes; in this case, + // one of the address bits don't have effect on the bitswap, just on the xor; + // again, we have just five different bitswaps, and the hardware is probably using + // passive logic on the address bits to do the selection + constexpr std::array<std::array<int,5>,8> bs { // bitswaps for data bits 0,2,4,5 & 7, in that order + 5,2,4,0,7, + 4,0,2,7,5, + 7,4,5,2,0, + 4,0,2,7,5, + 2,7,0,5,4, + 4,0,2,7,5, + 0,5,7,4,2, + 4,0,2,7,5, + }; + + // xor masks + constexpr std::array<uint8_t,16> xm { + 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x30, 0x00, 0x00, 0xb5, 0x10, 0xb5, 0x20, 0xb5, 0x30, 0xb5 + }; + + uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)}; + unsigned idx {bitswap<4>(offset, 6,9,5,3)}; + + return bitswap<8>(data, bs[idx&7][4],6,bs[idx&7][3],bs[idx&7][2],3,bs[idx&7][1],1,bs[idx&7][0]) ^ xm[idx]; +} + +void multiwin_state::multiwin_opcodes_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(multiwin_state::multiwin_opcode_r)); +} + +void multiwin_state::driver_init() +{ + uint8_t *ROM = memregion("maincpu")->base(); + for (int x = 0x8000; x < 0x10000; x++) + { + ROM[x] = bitswap<8>(ROM[x]^0x91,5,6,7,2,3,0,1,4); + } +} + +void multiwin_state::multiwin(machine_config &config) +{ + fw2ndpal(config); + + _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu")); + _maincpu->set_addrmap(AS_OPCODES, &multiwin_state::multiwin_opcodes_map); +} + + +class powercrd_state : public funworld_state +{ +public: + powercrd_state(const machine_config &mconfig, device_type type, const char* tag) + : funworld_state(mconfig, type, tag) + { + } + + void powercrd(machine_config& config); + +private: + cpu_device* _maincpu {}; + DECLARE_READ8_MEMBER(powercrd_opcode_r); + + void powercrd_opcodes_map(address_map& map); +}; + +READ8_MEMBER(powercrd_state::powercrd_opcode_r) +{ + // encryption controlled by the lower two bits of the address; no clear structure is + // seen in the tables, so it looks like a lookup into randomly or pseudorandomly + // generated permutation tables; all opcodes in the [8da0, 9e0b) & [c000, ef80) are + // believed to be covered by these tables; errors could be lurking in the least used opcodes; + // this same encryption scheme (with different tables) is seen in megacard & jokercrd + + constexpr uint8_t UNKN {0xfc}; + + constexpr std::array<std::array<uint8_t,256>,4> decryption_tables + { + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + 0xe8, 0x29, UNKN, UNKN, 0x85, UNKN, 0x18, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, // 0_ + UNKN, UNKN, 0xa6, 0x4c, UNKN, UNKN, 0x84, UNKN, UNKN, UNKN, 0x69, UNKN, 0x91, 0x38, 0xa8, UNKN, // 1_ + UNKN, 0x9d, 0xd8, 0x49, 0xc0, UNKN, 0x66, UNKN, UNKN, 0xe6, 0xb9, 0xad, UNKN, UNKN, UNKN, 0x10, // 2_ + UNKN, 0xd0, UNKN, 0x92, UNKN, UNKN, 0x74, UNKN, 0x9e, UNKN, UNKN, UNKN, UNKN, 0xb1, UNKN, 0x3d, // 3_ + 0xa5, 0xc4, UNKN, UNKN, UNKN, 0xce, 0x6a, 0x3a, UNKN, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, UNKN, // 4_ + 0x9c, UNKN, UNKN, UNKN, UNKN, 0x79, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 5_ + UNKN, 0xed, UNKN, UNKN, UNKN, UNKN, 0xc9, 0x99, UNKN, 0xa9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 6_ + UNKN, UNKN, 0xc8, UNKN, 0xe0, 0x2d, UNKN, 0x7d, UNKN, UNKN, 0x80, 0x64, 0xf0, UNKN, UNKN, UNKN, // 7_ + UNKN, UNKN, UNKN, UNKN, 0x98, UNKN, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, 0x1a, UNKN, UNKN, UNKN, // 8_ + UNKN, 0x30, UNKN, UNKN, 0xc6, 0x90, UNKN, UNKN, UNKN, 0x6d, 0xee, UNKN, UNKN, UNKN, 0xe4, UNKN, // 9_ + UNKN, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0d, 0x95, UNKN, 0x8e, 0x40, UNKN, 0x20, 0xb2, UNKN, // a_ + UNKN, UNKN, UNKN, UNKN, UNKN, 0x65, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, UNKN, 0x05, UNKN, // b_ + UNKN, UNKN, 0xba, 0x8a, UNKN, UNKN, UNKN, 0x60, 0xf8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // c_ + 0xdd, UNKN, UNKN, UNKN, 0xaa, 0xe9, 0x8d, 0xa0, UNKN, 0xb5, UNKN, 0xca, UNKN, UNKN, 0x0a, UNKN, // d_ + 0x2a, UNKN, UNKN, UNKN, 0xb0, UNKN, UNKN, 0x48, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4a, 0xcd, 0x45, // e_ + UNKN, UNKN, UNKN, 0x09, UNKN, UNKN, 0xc5, UNKN, UNKN, 0x88, 0xae, UNKN, 0x86, UNKN, 0xda, 0x8c, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, UNKN, UNKN, 0xae, UNKN, 0x4e, 0xda, UNKN, UNKN, UNKN, 0x60, UNKN, UNKN, UNKN, UNKN, 0x64, // 0_ + 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x86, 0x9c, 0x88, 0xe4, 0xc4, UNKN, UNKN, 0x95, // 1_ + 0x2a, UNKN, 0xe0, UNKN, UNKN, 0x99, UNKN, UNKN, 0x90, UNKN, UNKN, UNKN, 0x6c, 0x49, UNKN, UNKN, // 2_ + 0xf0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x66, UNKN, 0x11, 0xee, UNKN, UNKN, 0x4c, // 3_ + 0xb0, UNKN, UNKN, 0x45, 0xc6, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, 0xc8, 0x1a, UNKN, UNKN, // 4_ + UNKN, UNKN, 0x09, 0x91, UNKN, 0xc9, 0xf8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x92, 0x20, 0xa4, // 5_ + UNKN, 0x65, UNKN, 0xe8, UNKN, 0xd8, 0x3d, UNKN, UNKN, UNKN, UNKN, UNKN, 0x80, 0xbd, 0x84, UNKN, // 6_ + UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_ + 0xaa, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0d, 0x18, UNKN, UNKN, UNKN, 0x8a, UNKN, UNKN, UNKN, 0x26, // 8_ + 0xc0, UNKN, UNKN, UNKN, 0x3a, 0xc5, UNKN, 0x6d, 0xe9, UNKN, 0x4a, 0xb9, UNKN, 0x05, 0x0a, UNKN, // 9_ + UNKN, 0xfa, UNKN, UNKN, UNKN, 0xd5, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, // a_ + 0x10, UNKN, 0xf9, 0x5a, UNKN, 0xa2, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa9, UNKN, 0xa6, UNKN, UNKN, // b_ + 0xca, UNKN, UNKN, 0x85, UNKN, UNKN, UNKN, UNKN, UNKN, 0xb2, UNKN, UNKN, UNKN, 0x9d, UNKN, 0x7a, // c_ + UNKN, 0x79, 0xa5, UNKN, UNKN, 0xb1, UNKN, 0x8e, 0xad, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // d_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, 0x8d, UNKN, UNKN, UNKN, 0xb5, 0xce, // e_ + UNKN, UNKN, 0x38, UNKN, 0xe6, UNKN, UNKN, 0xd0, 0x69, UNKN, UNKN, 0x29, UNKN, UNKN, UNKN, UNKN, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, UNKN, 0x30, 0xb5, 0x49, 0xb0, UNKN, 0xc5, UNKN, 0x1a, UNKN, UNKN, UNKN, UNKN, 0x90, UNKN, // 0_ + UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4a, 0x9a, UNKN, 0xfa, UNKN, UNKN, 0x5a, UNKN, 0xae, UNKN, // 2_ + UNKN, UNKN, 0xe0, UNKN, UNKN, UNKN, 0x8d, 0x0a, UNKN, UNKN, 0xed, UNKN, 0x88, UNKN, UNKN, UNKN, // 3_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xee, UNKN, UNKN, UNKN, 0xb1, UNKN, 0x9c, UNKN, 0x0d, // 4_ + 0x4c, UNKN, 0x69, UNKN, UNKN, 0xa9, UNKN, UNKN, 0x05, 0xa4, UNKN, 0x4e, UNKN, UNKN, UNKN, UNKN, // 5_ + 0xc6, UNKN, UNKN, 0xbd, 0x09, UNKN, UNKN, UNKN, UNKN, 0x20, UNKN, 0x3a, 0xc0, UNKN, UNKN, UNKN, // 6_ + 0xa0, UNKN, UNKN, UNKN, 0x80, UNKN, 0x95, UNKN, UNKN, UNKN, 0xe8, UNKN, 0xd0, UNKN, UNKN, UNKN, // 7_ + 0x60, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x40, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 8_ + UNKN, UNKN, 0x9d, UNKN, UNKN, UNKN, UNKN, 0xa5, UNKN, UNKN, 0xf0, UNKN, UNKN, UNKN, UNKN, UNKN, // 9_ + UNKN, 0x38, UNKN, 0xca, 0xa2, 0x8e, UNKN, 0xb9, UNKN, 0xa6, 0xcd, 0x2a, UNKN, UNKN, UNKN, UNKN, // a_ + UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, UNKN, UNKN, 0xf8, UNKN, UNKN, 0x11, 0xce, UNKN, UNKN, UNKN, // b_ + UNKN, UNKN, 0xda, UNKN, UNKN, UNKN, 0x6c, UNKN, UNKN, UNKN, UNKN, 0x8a, UNKN, UNKN, UNKN, UNKN, // c_ + UNKN, UNKN, UNKN, 0x84, UNKN, UNKN, UNKN, UNKN, 0xc9, UNKN, 0x7a, UNKN, 0x48, 0xd8, UNKN, 0x18, // d_ + 0xe6, UNKN, UNKN, 0x68, UNKN, 0x29, UNKN, UNKN, 0xc4, 0x65, UNKN, UNKN, 0xa8, UNKN, 0x85, UNKN, // e_ + UNKN, 0xc8, 0xd5, 0xe4, UNKN, 0x7d, 0x10, UNKN, UNKN, UNKN, 0x25, UNKN, UNKN, 0x1d, 0x64, UNKN, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, 0x99, 0xf0, UNKN, UNKN, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, 0x64, UNKN, UNKN, 0x2a, UNKN, // 0_ + 0xb5, UNKN, 0xa6, UNKN, UNKN, 0x65, UNKN, 0xf8, UNKN, UNKN, UNKN, 0x58, UNKN, UNKN, 0xc8, UNKN, // 1_ + 0x1a, UNKN, UNKN, UNKN, 0x09, 0x91, UNKN, 0xe0, UNKN, UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, UNKN, // 2_ + UNKN, 0xa4, 0xb0, UNKN, 0xd9, 0xe4, 0xd0, UNKN, UNKN, 0x5a, 0x2d, UNKN, UNKN, 0x4c, 0xa0, UNKN, // 3_ + 0x85, UNKN, 0x49, UNKN, UNKN, UNKN, UNKN, UNKN, 0x88, UNKN, UNKN, 0xbd, 0x69, 0x95, UNKN, UNKN, // 4_ + UNKN, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, 0x80, 0x0d, UNKN, UNKN, 0x30, UNKN, UNKN, UNKN, 0x9d, // 5_ + UNKN, UNKN, UNKN, 0x26, UNKN, 0xd5, 0x1d, UNKN, 0x4e, UNKN, 0xe8, UNKN, UNKN, UNKN, UNKN, 0x05, // 6_ + 0xa5, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, UNKN, UNKN, 0x25, UNKN, UNKN, // 7_ + UNKN, UNKN, UNKN, 0xc9, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, 0x45, UNKN, UNKN, 0xa8, UNKN, UNKN, // 8_ + 0x9a, UNKN, 0xca, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe6, UNKN, UNKN, UNKN, UNKN, UNKN, 0x60, 0x8d, // 9_ + UNKN, UNKN, UNKN, UNKN, UNKN, 0xda, 0xee, 0xb2, 0x7d, UNKN, UNKN, 0x84, UNKN, UNKN, 0xaa, UNKN, // a_ + 0x90, UNKN, UNKN, 0x6d, 0xb1, UNKN, UNKN, UNKN, UNKN, 0x78, UNKN, UNKN, 0x8e, UNKN, 0xc0, 0x40, // b_ + UNKN, UNKN, 0x38, 0xc6, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd8, UNKN, UNKN, 0x0a, UNKN, UNKN, 0xb9, // c_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xfa, UNKN, UNKN, UNKN, UNKN, 0x10, 0x20, // d_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa9, UNKN, UNKN, UNKN, UNKN, 0xc5, UNKN, // e_ + UNKN, 0x86, 0x29, 0x4a, UNKN, UNKN, 0x18, 0x98, UNKN, UNKN, UNKN, 0x9c, UNKN, 0x7a, UNKN, 0x48, // f_ + }; + + uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)}; + return decryption_tables[offset&3][data]; +} + +void powercrd_state::powercrd_opcodes_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(powercrd_state::powercrd_opcode_r)); +} + +void powercrd_state::powercrd(machine_config &config) +{ + fw2ndpal(config); + + _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu")); + _maincpu->set_addrmap(AS_OPCODES, &powercrd_state::powercrd_opcodes_map); +} + +class megacard_state : public funworld_state +{ +public: + megacard_state(const machine_config &mconfig, device_type type, const char* tag) + : funworld_state(mconfig, type, tag) + { + } + + void megacard(machine_config& config); + +private: + cpu_device* _maincpu {}; + DECLARE_READ8_MEMBER(megacard_opcode_r); + + void megacard_opcodes_map(address_map& map); +}; + +READ8_MEMBER(megacard_state::megacard_opcode_r) +{ + // all opcodes in the [c000, fc80) range are believed to be covered by these tables; + // errors could be lurking in the least used opcodes + + constexpr uint8_t UNKN {0xfc}; + + constexpr std::array<std::array<uint8_t,256>,4> decryption_tables + { + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, 0x6c, UNKN, UNKN, UNKN, 0xfa, 0x38, UNKN, UNKN, 0x4c, 0xd8, UNKN, 0xe8, UNKN, 0xc5, UNKN, // 0_ + UNKN, 0xa6, 0x91, UNKN, UNKN, UNKN, UNKN, 0x58, 0xa0, 0xe0, 0xb9, 0x4e, UNKN, UNKN, UNKN, 0x78, // 1_ + 0xe9, 0xee, UNKN, 0xca, 0x85, UNKN, 0xe6, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, UNKN, UNKN, // 2_ + UNKN, UNKN, UNKN, UNKN, 0x90, UNKN, UNKN, 0x64, UNKN, UNKN, 0x45, 0x60, UNKN, UNKN, 0x69, UNKN, // 3_ + UNKN, UNKN, 0xea, 0xf8, 0x7a, UNKN, UNKN, 0x1a, UNKN, UNKN, UNKN, UNKN, UNKN, 0xb1, UNKN, 0x80, // 4_ + UNKN, UNKN, 0x84, UNKN, UNKN, UNKN, UNKN, 0x49, UNKN, UNKN, 0x7c, UNKN, 0x20, 0x8a, 0xed, UNKN, // 5_ + 0x8c, UNKN, UNKN, UNKN, 0x5a, UNKN, UNKN, UNKN, 0xa8, 0xa9, UNKN, 0x6d, 0xc9, 0x95, UNKN, 0xda, // 6_ + 0xaa, 0xe4, UNKN, UNKN, UNKN, UNKN, 0x8e, 0xae, 0x3a, 0xc0, UNKN, 0xd5, 0x92, UNKN, UNKN, UNKN, // 7_ + 0xc6, UNKN, UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, UNKN, 0x86, 0x9c, UNKN, UNKN, 0xc8, UNKN, UNKN, // 8_ + UNKN, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd0, 0xa2, UNKN, UNKN, UNKN, UNKN, 0x25, UNKN, 0xa5, // 9_ + UNKN, 0x9d, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, // a_ + UNKN, UNKN, UNKN, 0xb2, UNKN, 0x29, UNKN, 0x09, UNKN, UNKN, UNKN, 0xb0, UNKN, UNKN, 0xb5, UNKN, // b_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0a, UNKN, UNKN, 0x7d, UNKN, 0xf0, UNKN, 0x00, // c_ + UNKN, UNKN, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, 0x4a, 0x88, 0x05, UNKN, UNKN, 0x10, 0xce, UNKN, // d_ + UNKN, UNKN, 0xc4, UNKN, 0x18, UNKN, UNKN, UNKN, 0x99, 0xf9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xdd, // e_ + 0x11, UNKN, 0x26, UNKN, 0x65, 0x98, UNKN, 0xad, 0x2a, UNKN, UNKN, 0x8d, UNKN, UNKN, UNKN, UNKN, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, UNKN, UNKN, 0x18, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, 0xcd, 0x0a, // 0_ + 0xe6, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, UNKN, // 1_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x69, UNKN, 0xd0, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2d, UNKN, // 2_ + UNKN, 0x88, UNKN, UNKN, UNKN, 0x98, UNKN, 0x99, UNKN, 0xb1, UNKN, UNKN, 0x9c, 0x1a, UNKN, UNKN, // 3_ + UNKN, 0x7a, 0xae, 0xa2, 0xca, 0xba, UNKN, 0x25, UNKN, UNKN, 0x10, UNKN, 0xea, 0x79, 0x8a, UNKN, // 4_ + UNKN, 0x60, UNKN, UNKN, UNKN, UNKN, 0x84, 0xd8, 0xa9, UNKN, UNKN, UNKN, 0xe9, UNKN, 0xda, UNKN, // 5_ + 0xc0, UNKN, UNKN, 0x3d, 0x8d, UNKN, UNKN, UNKN, UNKN, 0x68, UNKN, 0x92, UNKN, 0x48, UNKN, UNKN, // 6_ + 0x9d, 0x49, 0x95, 0xc6, 0xb0, UNKN, 0x40, UNKN, UNKN, UNKN, 0x05, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_ + UNKN, 0x0d, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, UNKN, 0x30, UNKN, 0x66, UNKN, UNKN, 0xa5, UNKN, // 8_ + 0x64, UNKN, 0x29, UNKN, UNKN, 0x86, UNKN, 0xb2, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2a, 0x6d, 0x3a, // 9_ + 0x38, UNKN, UNKN, 0x91, UNKN, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, UNKN, // a_ + UNKN, UNKN, UNKN, UNKN, 0xb5, 0xf8, UNKN, UNKN, UNKN, 0xc5, UNKN, UNKN, UNKN, 0x09, UNKN, UNKN, // b_ + UNKN, UNKN, UNKN, UNKN, 0x11, 0x90, 0x4c, UNKN, 0x85, UNKN, UNKN, UNKN, 0x4a, UNKN, UNKN, UNKN, // c_ + UNKN, UNKN, 0x20, 0xb9, UNKN, UNKN, UNKN, UNKN, 0x00, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // d_ + UNKN, 0x80, 0x65, UNKN, UNKN, 0xe8, 0xc9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xee, 0xf0, UNKN, UNKN, // e_ + UNKN, 0xa0, 0xc8, UNKN, UNKN, UNKN, 0xc4, UNKN, 0x4e, 0xe0, 0xa8, UNKN, 0x45, UNKN, UNKN, 0xa6, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, 0x86, UNKN, UNKN, 0xe6, 0xc9, UNKN, 0x1a, UNKN, 0xdd, 0x88, UNKN, UNKN, UNKN, UNKN, 0x8e, // 0_ + UNKN, 0xe0, UNKN, UNKN, 0x4c, 0xd0, UNKN, 0x64, UNKN, 0xa4, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xee, UNKN, 0x74, UNKN, 0xa0, UNKN, 0xed, UNKN, 0xe9, // 2_ + UNKN, 0xd9, UNKN, UNKN, UNKN, UNKN, 0x0a, UNKN, 0x49, UNKN, 0x1d, 0xa2, UNKN, 0x8d, UNKN, 0x00, // 3_ + 0xa9, UNKN, UNKN, 0xea, UNKN, UNKN, UNKN, UNKN, UNKN, 0xf0, 0xfa, UNKN, UNKN, UNKN, UNKN, 0x84, // 4_ + UNKN, UNKN, 0x38, UNKN, 0xbd, UNKN, 0x9d, 0x92, 0xb1, UNKN, 0x95, UNKN, 0xe8, 0x45, UNKN, UNKN, // 5_ + UNKN, UNKN, 0xb5, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x85, UNKN, UNKN, // 6_ + UNKN, UNKN, UNKN, UNKN, 0xa6, 0xa5, 0xe4, 0x09, UNKN, 0x29, UNKN, 0x5a, 0x90, UNKN, 0xc0, UNKN, // 7_ + 0xca, UNKN, UNKN, UNKN, 0x18, UNKN, UNKN, UNKN, UNKN, 0x66, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, // 8_ + 0x98, 0xb0, 0x26, 0xc4, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, 0xc6, UNKN, UNKN, UNKN, 0xd8, UNKN, // 9_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x3d, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, // a_ + 0xce, 0x10, UNKN, 0x05, 0x80, 0x48, UNKN, UNKN, UNKN, 0xf8, 0x0d, UNKN, UNKN, UNKN, UNKN, UNKN, // b_ + UNKN, UNKN, UNKN, UNKN, 0x91, 0xc5, UNKN, UNKN, UNKN, 0x9c, UNKN, 0x30, 0xc8, UNKN, UNKN, UNKN, // c_ + 0x69, 0x60, 0x9a, 0xb2, UNKN, UNKN, 0x2a, UNKN, 0x65, UNKN, UNKN, UNKN, 0x25, UNKN, 0x79, 0x6a, // d_ + UNKN, 0x20, 0xb9, UNKN, 0x3a, 0xd5, UNKN, 0x4a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x99, 0xa8, // e_ + UNKN, UNKN, UNKN, UNKN, 0xda, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, 0x7a, 0xad, UNKN, UNKN, UNKN, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, UNKN, UNKN, 0x60, UNKN, UNKN, 0xb1, UNKN, UNKN, UNKN, 0x29, UNKN, 0x8e, 0x74, 0x9a, 0xea, // 0_ + UNKN, 0x6d, UNKN, 0x92, 0xb5, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x7d, 0xb9, 0xa2, UNKN, 0x6a, // 1_ + UNKN, UNKN, UNKN, 0xb0, 0xc4, UNKN, UNKN, 0x2d, UNKN, 0x79, 0x8a, UNKN, UNKN, UNKN, 0xa0, UNKN, // 2_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, 0x1a, UNKN, 0xaa, 0x80, UNKN, UNKN, // 3_ + UNKN, UNKN, 0x10, UNKN, 0x3a, UNKN, UNKN, UNKN, 0x8d, UNKN, UNKN, UNKN, UNKN, 0xf8, UNKN, 0x25, // 4_ + UNKN, UNKN, 0x40, UNKN, 0x85, UNKN, 0x95, UNKN, UNKN, 0xcd, UNKN, UNKN, 0x4c, 0x98, UNKN, UNKN, // 5_ + UNKN, 0x68, UNKN, 0xe9, 0x9e, 0x09, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x5a, 0xee, // 6_ + UNKN, 0x86, UNKN, UNKN, UNKN, 0xd5, UNKN, 0xa5, 0x65, UNKN, UNKN, UNKN, UNKN, 0x4e, 0xe0, 0x90, // 7_ + UNKN, UNKN, 0xc0, 0xce, UNKN, UNKN, UNKN, 0xad, UNKN, UNKN, UNKN, 0x88, UNKN, UNKN, UNKN, UNKN, // 8_ + UNKN, 0xda, UNKN, UNKN, UNKN, 0xb2, UNKN, 0x7a, UNKN, UNKN, UNKN, UNKN, 0x91, UNKN, UNKN, 0xc5, // 9_ + UNKN, UNKN, 0x05, 0xe6, UNKN, UNKN, 0x49, UNKN, UNKN, 0x0d, 0x9d, 0x4a, UNKN, UNKN, 0xc8, UNKN, // a_ + UNKN, UNKN, UNKN, UNKN, 0x20, UNKN, 0x1d, UNKN, UNKN, 0xd0, UNKN, UNKN, 0xfa, UNKN, 0xbd, UNKN, // b_ + UNKN, UNKN, UNKN, UNKN, 0x2a, UNKN, UNKN, 0x0a, UNKN, UNKN, 0xca, UNKN, 0x9c, 0x69, UNKN, UNKN, // c_ + 0x00, 0xd8, 0x38, UNKN, UNKN, UNKN, 0xa6, UNKN, UNKN, UNKN, 0xc6, UNKN, UNKN, UNKN, UNKN, UNKN, // d_ + UNKN, 0xc9, UNKN, UNKN, UNKN, UNKN, 0x64, 0x48, UNKN, UNKN, 0xa8, UNKN, 0xe8, UNKN, UNKN, UNKN, // e_ + UNKN, UNKN, 0xa9, UNKN, 0xf0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x18, UNKN, UNKN, UNKN, UNKN, // f_ + }; + + uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)}; + return decryption_tables[offset&3][data]; +} + +void megacard_state::megacard_opcodes_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(megacard_state::megacard_opcode_r)); +} + +void megacard_state::megacard(machine_config &config) +{ + fw2ndpal(config); + + _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu")); + _maincpu->set_addrmap(AS_OPCODES, &megacard_state::megacard_opcodes_map); +} + +class jokercrd_state : public funworld_state +{ +public: + jokercrd_state(const machine_config &mconfig, device_type type, const char* tag) + : funworld_state(mconfig, type, tag) + { + } + + void jokercrd(machine_config& config); + +private: + cpu_device* _maincpu {}; + DECLARE_READ8_MEMBER(jokercrd_opcode_r); + + void jokercrd_opcodes_map(address_map& map); +}; + +READ8_MEMBER(jokercrd_state::jokercrd_opcode_r) +{ + // even when errors could be lurking in the least used opcodes, + // all of them in the [8050,b369) & [c000, f063) ranges are believed + // to be covered by these tables, with the exception of the one @c0f1: + + // c0da: a6 6a ldx $6a + // c0dc: ad 5c 00 lda $005c + // c0df: 29 3f and #$3f + // c0e1: 85 70 sta $70 + // c0e3: 20 fa c0 jsr $c0fa + // c0e6: a5 70 lda $70 + // c0e8: 9d 33 02 sta $0233, x + // c0eb: a2 00 ldx #$00 + // c0ed: e4 6a cpx $6a + // c0ef: f0 08 beq $c0f9 + // c0f1: XX 33 02 nop #$33 #$02 [YYY $0233, x] + // c0f4: f0 e4 beq $c0da + // c0f6: e8 inx + // c0f7: 80 f4 bra $c0ed + // c0f9: 60 rts + // + // c0fa: ad 4b 07 lda $074b + // c0fd: 0d 4c 07 ora $074c + // c100: d0 01 bne $c103 + // c102: 60 rts + // c103: a5 70 lda $70 + // c105: 29 30 and #$30 + // c107: 09 01 ora #$01 + // c109: 85 70 sta $70 + // c10b: 60 rts + + // it should be noted, however, that the subroutine @c0da seems to be called just from here: + // c044: 64 6a stz $6a + // c046: 20 da c0 jsr $c0da + // and, if no interrupt is messing with the accesed data, the STZ @c044 should make the BEQ @c0ef + // become an inconditional jump, converting the opcode @c0f1 in dead code + + + constexpr uint8_t UNKN {0xfc}; + + constexpr std::array<std::array<uint8_t,256>,4> decryption_tables + { + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, UNKN, UNKN, 0x3d, 0xe0, UNKN, UNKN, 0xb0, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 0_ + UNKN, UNKN, 0x4a, 0x65, 0x18, 0x64, 0xad, UNKN, 0x90, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_ + UNKN, UNKN, 0x49, UNKN, 0xa8, 0x8c, 0x20, UNKN, UNKN, 0xf8, UNKN, UNKN, 0xe6, UNKN, 0x88, UNKN, // 2_ + UNKN, UNKN, UNKN, UNKN, 0xb2, UNKN, UNKN, UNKN, UNKN, 0x58, 0x38, 0x45, UNKN, UNKN, UNKN, UNKN, // 3_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, 0xa5, 0xa9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 4_ + UNKN, UNKN, UNKN, UNKN, 0xda, 0xa2, UNKN, 0x4e, 0x1a, UNKN, 0xe4, UNKN, UNKN, UNKN, 0x0c, 0x98, // 5_ + 0xa6, UNKN, UNKN, UNKN, 0x9c, 0xfa, UNKN, 0xbd, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 6_ + UNKN, UNKN, 0xc0, 0xc5, UNKN, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, 0x8a, UNKN, 0x80, // 7_ + UNKN, UNKN, 0x95, UNKN, UNKN, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, // 8_ + 0xb1, UNKN, UNKN, UNKN, UNKN, 0xd0, 0x0d, 0xc9, UNKN, UNKN, UNKN, UNKN, 0x29, 0x3a, 0xc8, 0x8d, // 9_ + 0xc6, 0xee, 0x25, UNKN, 0x05, 0x6e, UNKN, 0x2a, UNKN, 0x85, UNKN, UNKN, 0xd8, UNKN, 0xce, UNKN, // a_ + UNKN, UNKN, UNKN, 0xe9, 0xc4, 0xe8, UNKN, UNKN, 0x99, 0x6a, 0x0a, UNKN, 0x84, UNKN, UNKN, UNKN, // b_ + UNKN, UNKN, UNKN, 0x9d, 0x2d, 0x10, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, 0x11, UNKN, // c_ + UNKN, 0xb9, 0x86, UNKN, 0xca, UNKN, UNKN, UNKN, UNKN, UNKN, 0x7a, UNKN, 0xf0, 0x09, 0x4c, UNKN, // d_ + 0x60, 0x78, UNKN, UNKN, UNKN, 0x48, 0x5a, UNKN, UNKN, UNKN, 0x79, UNKN, UNKN, UNKN, UNKN, 0xba, // e_ + UNKN, UNKN, 0x6d, 0x92, UNKN, 0x26, UNKN, UNKN, 0xb5, UNKN, 0x69, UNKN, UNKN, 0xa4, UNKN, 0x1d, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, UNKN, 0x0c, UNKN, 0x60, 0x6d, 0x20, 0xda, UNKN, 0xf0, UNKN, // 0_ + UNKN, 0xcd, 0x95, UNKN, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x8e, UNKN, 0x29, UNKN, // 1_ + 0x90, UNKN, UNKN, UNKN, 0x69, 0xb5, UNKN, UNKN, UNKN, UNKN, 0xd0, 0xad, UNKN, UNKN, UNKN, 0x9a, // 2_ + 0xb6, 0x40, UNKN, 0xd5, 0xfa, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, 0x88, UNKN, // 3_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2a, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, UNKN, UNKN, UNKN, // 4_ + 0xee, UNKN, UNKN, UNKN, 0x64, UNKN, 0xb0, 0x9d, UNKN, UNKN, UNKN, 0x80, UNKN, 0xf8, 0xe8, UNKN, // 5_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x91, UNKN, 0xb9, 0x8a, UNKN, UNKN, UNKN, 0x10, UNKN, // 6_ + 0x4a, UNKN, UNKN, 0xc8, 0x9c, 0x4e, UNKN, UNKN, UNKN, UNKN, 0xb2, 0x85, 0x45, 0xc9, UNKN, UNKN, // 7_ + 0x1a, UNKN, UNKN, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xca, UNKN, 0xc6, UNKN, 0xb1, UNKN, UNKN, // 8_ + 0x1d, UNKN, 0xa8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xc5, // 9_ + 0xe0, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x30, UNKN, 0x0d, UNKN, 0x8d, // a_ + UNKN, 0x86, UNKN, UNKN, 0xd9, 0xbd, UNKN, UNKN, 0x05, 0xaa, UNKN, 0x38, UNKN, 0x18, 0xe4, UNKN, // b_ + UNKN, 0xa6, UNKN, 0xa5, 0xc0, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4c, 0x84, UNKN, 0x6e, UNKN, // c_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x19, 0x65, UNKN, UNKN, UNKN, 0xce, 0x7a, UNKN, 0x3a, // d_ + UNKN, 0x7d, UNKN, 0x0a, 0x49, UNKN, UNKN, UNKN, 0xe6, 0xd8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // e_ + UNKN, UNKN, UNKN, UNKN, 0x09, 0xa9, 0x25, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x5a, UNKN, 0x68, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + UNKN, 0x20, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, 0xb0, 0x85, 0x3d, UNKN, 0x86, UNKN, UNKN, // 0_ + 0x18, UNKN, UNKN, UNKN, 0x8a, 0xad, 0x79, 0x98, UNKN, UNKN, 0xc0, UNKN, 0x30, UNKN, 0x10, UNKN, // 1_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe4, UNKN, UNKN, UNKN, 0x29, UNKN, UNKN, UNKN, UNKN, // 2_ + 0x9e, 0x6d, 0xa6, UNKN, 0xc9, 0x6e, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 3_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, 0x9c, 0x09, UNKN, UNKN, UNKN, 0xfa, UNKN, // 4_ + UNKN, 0x69, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, 0xc4, UNKN, 0x1a, 0x4c, 0x5a, UNKN, // 5_ + UNKN, UNKN, 0xe9, UNKN, 0xb1, UNKN, 0x0c, 0xee, 0xda, 0xb2, 0xce, UNKN, 0x74, UNKN, UNKN, UNKN, // 6_ + 0x7d, 0x0d, 0x48, UNKN, UNKN, UNKN, 0xf8, 0xd8, UNKN, UNKN, 0x0a, UNKN, UNKN, 0x45, 0xc6, UNKN, // 7_ + UNKN, UNKN, UNKN, UNKN, UNKN, 0x26, UNKN, UNKN, UNKN, 0xc5, UNKN, UNKN, UNKN, 0xae, UNKN, UNKN, // 8_ + 0xa9, UNKN, 0x90, 0x3a, UNKN, UNKN, 0x6c, UNKN, 0x64, UNKN, UNKN, 0xd5, UNKN, UNKN, UNKN, UNKN, // 9_ + UNKN, 0x7a, UNKN, 0x05, 0xa8, UNKN, UNKN, 0x60, UNKN, UNKN, 0xa4, 0x8d, 0x2a, UNKN, UNKN, UNKN, // a_ + UNKN, UNKN, UNKN, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x92, 0x66, // b_ + UNKN, UNKN, 0xd0, 0xf0, UNKN, UNKN, 0x38, 0xbd, 0xa2, UNKN, 0xed, 0x9d, 0x80, UNKN, 0xa5, UNKN, // c_ + UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x99, UNKN, 0x88, UNKN, 0xcd, UNKN, 0xe8, // d_ + 0xca, 0xb5, 0x49, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe6, 0xe0, 0x4a, UNKN, // e_ + UNKN, UNKN, UNKN, 0xc8, UNKN, 0xb9, 0x91, UNKN, UNKN, UNKN, UNKN, 0x65, 0x95, UNKN, UNKN, UNKN, // f_ + + //_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f + 0x65, UNKN, UNKN, UNKN, 0x30, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, 0xda, 0x2d, 0xc4, UNKN, 0x68, // 0_ + UNKN, 0xa2, UNKN, UNKN, 0x2a, 0xa6, UNKN, UNKN, UNKN, 0x86, UNKN, UNKN, 0x60, UNKN, 0xe6, 0xa4, // 1_ + UNKN, 0x84, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, 0xce, 0xe4, 0xf8, 0xa0, UNKN, 0x8d, // 2_ + UNKN, 0xcd, UNKN, UNKN, UNKN, 0x88, 0x4a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 3_ + 0xd8, UNKN, UNKN, UNKN, 0x40, 0x11, UNKN, UNKN, 0xaa, 0x79, UNKN, 0x98, UNKN, 0x85, UNKN, UNKN, // 4_ + 0x9a, 0xc6, UNKN, UNKN, 0x74, UNKN, UNKN, UNKN, UNKN, 0x95, 0xdd, UNKN, UNKN, 0x6d, UNKN, UNKN, // 5_ + 0x8a, 0x6e, UNKN, UNKN, 0x18, 0xc5, UNKN, 0xf9, UNKN, 0xb0, 0x7a, UNKN, UNKN, UNKN, UNKN, 0xc0, // 6_ + 0x99, UNKN, UNKN, 0x10, 0x90, 0x38, 0x09, UNKN, UNKN, UNKN, 0xe0, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_ + UNKN, UNKN, UNKN, 0xb5, UNKN, 0x4c, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xfa, UNKN, UNKN, // 8_ + UNKN, UNKN, 0x6a, 0x29, UNKN, UNKN, 0x5a, 0xae, UNKN, 0x3a, UNKN, 0x9c, UNKN, 0x0d, 0x49, 0xee, // 9_ + UNKN, UNKN, UNKN, UNKN, 0xa5, 0x69, 0xf0, UNKN, 0x80, UNKN, 0xc8, UNKN, UNKN, UNKN, 0xb9, UNKN, // a_ + 0x1a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0c, UNKN, UNKN, UNKN, UNKN, UNKN, // b_ + UNKN, UNKN, UNKN, UNKN, 0x64, UNKN, UNKN, 0xb2, 0x9d, UNKN, UNKN, 0xca, UNKN, UNKN, 0x0a, 0x05, // c_ + UNKN, UNKN, UNKN, 0x91, UNKN, UNKN, UNKN, 0x92, UNKN, UNKN, UNKN, 0xed, UNKN, UNKN, UNKN, UNKN, // d_ + UNKN, 0xec, 0x20, UNKN, 0xad, 0xd0, UNKN, 0x3d, UNKN, 0xb1, 0x6c, 0x66, UNKN, 0x4e, UNKN, 0xd5, // e_ + 0xe9, UNKN, UNKN, 0xa9, UNKN, UNKN, 0xe8, UNKN, UNKN, 0xc9, 0xa8, UNKN, UNKN, 0x48, UNKN, UNKN, // f_ + }; + + uint8_t data {_maincpu->space(AS_PROGRAM).read_byte(offset)}; + return decryption_tables[offset&3][data]; +} + +void jokercrd_state::jokercrd_opcodes_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(jokercrd_state::jokercrd_opcode_r)); +} + +void jokercrd_state::jokercrd(machine_config &config) +{ + fw2ndpal(config); + + _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu")); + _maincpu->set_addrmap(AS_OPCODES, &jokercrd_state::jokercrd_opcodes_map); +} + + /************************* * Rom Load * @@ -4429,9 +5006,9 @@ ROM_START( pool10e ) ROM_LOAD( "am27s29.u25", 0x0000, 0x0200, CRC(2c315cbf) SHA1(f3f91329f2b8388decf26a050f8fb7da38694218) ) ROM_REGION( 0x3000, "plds", 0 ) - ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0892, NO_DUMP ) /* read protected */ - ROM_LOAD( "palce20v8h.u22", 0x1000, 0x0a92, NO_DUMP ) /* read protected */ - ROM_LOAD( "palce20v8h.u23", 0x2000, 0x0a92, NO_DUMP ) /* read protected */ + ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0892, BAD_DUMP CRC(123d539a) SHA1(cccf0cbae3175b091a998eedf4aa44a55b679400) ) /* read protected */ + ROM_LOAD( "palce20v8h.u22", 0x1000, 0x0a92, BAD_DUMP CRC(ba2a021f) SHA1(e9c5970f80c7446c91282d53cfe97c92353dce7d) ) /* read protected */ + ROM_LOAD( "palce20v8h.u23", 0x2000, 0x0a92, BAD_DUMP CRC(ba2a021f) SHA1(e9c5970f80c7446c91282d53cfe97c92353dce7d) ) /* read protected */ ROM_END @@ -6064,14 +6641,32 @@ ROM_START( saloon ) ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) ) ROM_REGION( 0x10000, "gfx1", 0 ) - ROM_LOAD( "2s.bin", 0x0000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) ) - ROM_LOAD( "3s.bin", 0x8000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) ) + ROM_LOAD( "3s.bin", 0x0000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) ) + ROM_LOAD( "2s.bin", 0x8000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) ) /* looks strange */ ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) ) + + ROM_REGION( 0x0100, "i2cmem", 0 ) + ROM_LOAD( "saloon_i2c.bin", 0x0000, 0x0100, CRC(57e9ce5a) SHA1(3a8420a8ed50faf31a30c01f9438f1df95e5789a) ) ROM_END +ROM_START( nevadafw ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) ) + + ROM_REGION( 0x10000, "gfx1", 0 ) + ROM_LOAD( "3s.bin", 0x0000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) ) + ROM_LOAD( "2s.bin", 0x8000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) ) + + /* looks strange */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) ) + + ROM_REGION( 0x0100, "i2cmem", 0 ) + ROM_LOAD( "nevada_i2c.bin", 0x0000, 0x0100, CRC(cdb519db) SHA1(b7781cebee3c8f788a78f8fec9314ae5af513514) ) +ROM_END /**** Fun World Quiz **** @@ -6480,9 +7075,32 @@ ROM_START( fw_a0_1 ) ROM_END /* - Joker Card + Joker Card / Multi Card Funworld. + This game is running in a derivative hardware with epoxy CPU brick. + CPU is a 65C02, with two 5565 RAMs and one 27128 ROM. + Also there are present some PLD and logic. (see above). + + The main program is inside the battery backed RAM, and need to be dumped. + These RAMs are connected to the mainboard battery, so once the Brick is unplugged, + the battery stops to feed the RAM and the program just vanish. + + From factory, they used the central connector to plug a module with the game program, + and then the code inside the ROM check for offset $4000 onward if the module is + present through some sort of checksum. If the module is present, the code will + copy the range 4000-7fff (the game program inside the external module) to the + 8000-bfff location, where is the battery backed RAM inside the brick. + + We need to find a new working board and reverse the central connector, to construct + some interface that allows us to dump the content of the internal battery backed RAM. + + For debug purposes, we plugged an external game code from another similar game, that + matches all calls from the original ROM code. We suspect is the same code with different + language (English instead German). With this external code the game is completely playable. + + ---- + CPU epoxy brick marked "76AF". Epoxy Brick contents: @@ -6495,6 +7113,7 @@ ROM_END - LOGIC: 1x HD74HC241P. 1x M74LS245P. 1x SN74LS139N. + */ ROM_START( jokcrdep ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -6504,6 +7123,12 @@ ROM_START( jokcrdep ) ROM_LOAD( "200_zg_2.bin", 0x0000, 0x8000, CRC(ba994fc3) SHA1(95d2a802c38d7249f10eb2bbe46edfb9b14b6faa) ) ROM_LOAD( "200_zg_1.bin", 0x8000, 0x8000, CRC(367db105) SHA1(400b82dc9e0be4c17a02add009aab3c43dd901f8) ) + ROM_REGION( 0x0800, "nvram", 0 ) + ROM_LOAD( "joker_nvram.bin", 0x0000, 0x0800, CRC(92019972) SHA1(E6D1E231CD2CE27E718ED9482DBE9DDC8612EB67) ) // Default NVRAM. + + ROM_REGION( 0x4000, "nvram1", 0 ) + ROM_LOAD( "e-0.bin", 0x0000, 0x4000, BAD_DUMP CRC(8FD42F3B) SHA1(208209761DE046189070B88AD4340C8D7FF55F1F) ) // Internal suicide program. Taken from Novo Play. + ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "sn82s147n.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) ) ROM_END @@ -6637,8 +7262,8 @@ void funworld_state::init_saloon() Low 11 bits of address are scrambled. Color: - Still trying.... - + Data has bits 2-3-5-6-7 scrambled. + Address has the 8 lower bits scrambled. *************************************************/ { @@ -6652,6 +7277,9 @@ void funworld_state::init_saloon() uint8_t *prom = memregion("proms")->base(); int sizep = memregion("proms")->bytes(); + popmessage(" Please: Start with <2> and <Z> buttons pressed to run system properly"); + + /***************************** * Program ROM decryption * *****************************/ @@ -6674,6 +7302,7 @@ void funworld_state::init_saloon() int a = ((i & 0xff00) | bitswap<8>(i & 0xff, 2, 0, 1, 3, 4, 5, 6, 7)); rom[a] = buffer[i]; } + } @@ -6717,74 +7346,12 @@ void funworld_state::init_saloon() } m_palette->update(); -} -void funworld_state::init_multiwin() -/***************************************************** + // inversion for i2c clock generation in i2c_rx routine + rom[0xbf23] = 0x60; // ex 70h + rom[0xbf2a] = 0x70; // ex 60h - This only decrypt the text strings. - Need more work to get the opcodes properly decrypted - -******************************************************/ -{ - uint8_t *ROM = memregion("maincpu")->base(); - for (int x = 0x8000; x < 0x10000; x++) - { - ROM[x] = ROM[x] ^ 0x91; - ROM[x] = bitswap<8>(ROM[x],5,6,7,2,3,0,1,4); - - uint8_t code = ROM[x]; - - /* decrypt code here */ - ROM[x+0x10000] = code; - } -} - - -void funworld_state::init_royalcdc() -{ -/***************************************************** - - This only decrypt the text strings. - The opcode encryption seems to be conditional, and - bits of the XOR (and bitswap?) can be turned on and - off, possibly depending on the address - -******************************************************/ - - uint8_t *ROM = memregion("maincpu")->base(); - for (int x = 0x8000; x < 0x10000; x++) - { - ROM[x] = ROM[x] ^ 0x22; - // this seems correct for the data, plaintext decrypts fine - ROM[x] = bitswap<8>(ROM[x],2,6,7,4,3,1,5,0); - - // the code uses different encryption, there are conflicts here - // so it's probably address based - uint8_t code = ROM[x]; - if (code==0x12) code = 0x10; // ^0x02 - else if (code==0x1a) code = 0x18; // ^0x02 - else if (code==0x20) code = 0xa2; // ^0x82 - else if (code==0x26) code = 0xa2; // ^0x84 - else if (code==0x39) code = 0xbd; // ^0x84 - else if (code==0x5a) code = 0x58; // ^0x02 - else if (code==0x5c) code = 0xd8; // ^0x84 - else if (code==0x84) code = 0xa2; // ^0x26 - else if (code==0x8f) code = 0xa9; // ^0x26 - else if (code==0xaf) code = 0xa9; // ^0x06 - else if (code==0xa2) code = 0x80; // ^0x22 - else if (code==0xa3) code = 0x85; // ^0x26 - else if (code==0xa8) code = 0x8e; // ^0x26 - else if (code==0xa9) code = 0x8d; // ^0x24 - else if (code==0xbb) code = 0xbd; // ^0x06 - else if (code==0xc8) code = 0xca; // ^0x02 - else if (code==0xc6) code = 0xe0; // ^0x26 - else if (code==0xce) code = 0xe8; // ^0x26 - else if (code==0xf4) code = 0xd0; // ^0x24 - - ROM[x+0x10000] = code; - } } @@ -7239,7 +7806,7 @@ GAMEL( 1991, royalcrdc, royalcrd, royalcd2, royalcrd, funworld_state, empty_ini GAMEL( 1991, royalcrdd, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (Austrian, set 5)", 0, layout_royalcrd ) GAMEL( 1991, royalcrde, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (Austrian, set 6)", 0, layout_jollycrd ) GAMEL( 1991, royalcrdt, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (TAB original)", 0, layout_jollycrd ) -GAME( 1991, royalcrdf, royalcrd, royalcd1, royalcrd, funworld_state, init_royalcdc, ROT0, "Evona Electronic","Royal Card (Slovak, encrypted)", MACHINE_NOT_WORKING ) +GAME( 1991, royalcrdf, royalcrd, royalcrdf,royalcrd, royalcrdf_state,driver_init, ROT0, "Evona Electronic","Royal Card (Slovak, encrypted)", MACHINE_NOT_WORKING ) GAMEL( 1990, royalcrdg, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (Austrian, set 7, CMC C1030 HW)", 0, layout_jollycrd ) // big CPLD GAMEL( 1991, royalcrdh, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (Austrian, set 8)", 0, layout_jollycrd ) GAMEL( 1991, royalcdfr, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (French)", 0, layout_jollycrd ) @@ -7270,11 +7837,12 @@ GAMEL( 198?, jolyjokrb, jolyjokr, fw1stpal, funworld, funworld_state, empty_ini GAMEL( 198?, jolyjokrc, jolyjokr, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Apple Time", "Jolly Joker (Apple Time)", MACHINE_NOT_WORKING, layout_jollycrd ) // bad program ROM... // Encrypted games... -GAME( 1992, multiwin, 0, fw1stpal, funworld, funworld_state, init_multiwin, ROT0, "Fun World", "Multi Win (Ver.0167, encrypted)", MACHINE_NOT_WORKING ) -GAME( 1993, powercrd, 0, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Fun World", "Power Card (Ver 0263, encrypted)", MACHINE_NOT_WORKING ) // clone of Bonus Card. -GAME( 1993, megacard, 0, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Fun World", "Mega Card (Ver.0210, encrypted)", MACHINE_NOT_WORKING ) -GAME( 1993, jokercrd, 0, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", MACHINE_NOT_WORKING ) -GAME( 198?, saloon, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Saloon (French, encrypted)", MACHINE_NOT_WORKING ) +GAME( 1992, multiwin, 0, multiwin, funworld, multiwin_state, driver_init, ROT0, "Fun World", "Multi Win (Ver.0167, encrypted)", MACHINE_NOT_WORKING) +GAME( 1993, powercrd, 0, powercrd, funworld, powercrd_state, empty_init, ROT0, "Fun World", "Power Card (Ver 0263, encrypted)", MACHINE_NOT_WORKING ) // clone of Bonus Card. +GAME( 1993, megacard, 0, megacard, funworld, megacard_state, empty_init, ROT0, "Fun World", "Mega Card (Ver.0210, encrypted)", MACHINE_NOT_WORKING ) +GAME( 1993, jokercrd, 0, jokercrd, funworld, jokercrd_state, empty_init, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", MACHINE_NOT_WORKING ) +GAME( 198?, saloon, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Saloon (French, encrypted)", 0) +GAME( 198?, nevadafw, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Nevada (French, encrypted)", 0) // Encrypted TAB blue PCB... GAMEL( 199?, jolycdit, jollycrd, cuoreuno, jolycdit, funworld_state, init_tabblue, ROT0, "bootleg", "Jolly Card (Italian, blue TAB board, encrypted)", 0, layout_royalcrd ) @@ -7291,15 +7859,14 @@ GAME( 199?, mongolnw, 0, royalcd1, royalcrd, funworld_state, init_mong GAME( 199?, soccernw, 0, royalcd1, royalcrd, funworld_state, init_soccernw, ROT0, "<unknown>", "Soccer New (Italian)", MACHINE_UNEMULATED_PROTECTION ) // Other games... -GAME( 198?, funquiz, 0, funquiz, funquiz, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (Austrian)", 0 ) -GAMEL( 1986, novoplay, 0, fw2ndpal, novoplay, funworld_state, empty_init, ROT0, "Admiral/Novomatic","Novo Play Multi Card / Club Card", 0, layout_novoplay ) -GAME( 1991, intrgmes, 0, intrgmes, funworld, funworld_state, empty_init, ROT0, "Inter Games", "unknown Inter Games poker", MACHINE_NOT_WORKING ) -GAMEL( 1985, fw_a7_11, 0, fw_brick_2, funworld, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 1", MACHINE_NOT_WORKING, layout_jollycrd ) -GAMEL( 1985, fw_a7_11a, fw_a7_11, fw_brick_1, funworld, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 2", MACHINE_NOT_WORKING, layout_jollycrd ) -GAMEL( 1991, fw_a0_1, 0, fw_brick_2, funworld, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A0-1 game", MACHINE_NOT_WORKING, layout_jollycrd ) -GAMEL( 1991, jokcrdep, 0, fw_brick_2, funworld, funworld_state, empty_init, ROT0, "Fun World", "Joker Card (Epoxy brick CPU)" , MACHINE_NOT_WORKING, layout_jollycrd ) +GAME( 198?, funquiz, 0, funquiz, funquiz, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (Austrian)", 0 ) +GAMEL( 1986, novoplay, 0, fw2ndpal, novoplay, funworld_state, empty_init, ROT0, "Admiral/Novomatic","Novo Play Multi Card / Club Card", 0, layout_novoplay ) +GAME( 1991, intrgmes, 0, intrgmes, funworld, funworld_state, empty_init, ROT0, "Inter Games", "unknown Inter Games poker", MACHINE_NOT_WORKING ) +GAMEL( 1985, fw_a7_11, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 1", MACHINE_NOT_WORKING, layout_jollycrd ) +GAMEL( 1985, fw_a7_11a, fw_a7_11, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 2", MACHINE_NOT_WORKING, layout_jollycrd ) +GAMEL( 1991, fw_a0_1, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A0-1 game", MACHINE_NOT_WORKING, layout_jollycrd ) +GAMEL( 1991, jokcrdep, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "Joker Card / Multi Card (Epoxy brick CPU)", MACHINE_NOT_WORKING, layout_jollycrd ) // These are 2-in-1 stealth boards, they can run the Poker game, or, using completely separate hardware on the same PCB, a NES / MSX Multigames! GAMEL( 1991, royalcrd_nes, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with NES multigame)", MACHINE_NOT_WORKING, layout_jollycrd ) GAMEL( 1991, royalcrd_msx, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with MSX multigame)", MACHINE_NOT_WORKING, layout_jollycrd ) - diff --git a/src/mame/drivers/fuukifg2.cpp b/src/mame/drivers/fuukifg2.cpp index c30d173c010..a2342012754 100644 --- a/src/mame/drivers/fuukifg2.cpp +++ b/src/mame/drivers/fuukifg2.cpp @@ -77,7 +77,7 @@ WRITE16_MEMBER(fuuki16_state::vregs_w) WRITE8_MEMBER( fuuki16_state::sound_command_w ) { - m_soundlatch->write(space,0,data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); // m_maincpu->spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); // Fixes glitching in rasters diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp index 66dd20ad350..5faa1cf89aa 100644 --- a/src/mame/drivers/gaelco2.cpp +++ b/src/mame/drivers/gaelco2.cpp @@ -85,18 +85,18 @@ void gaelco2_state::mcu_hostmem_map(address_map &map) void gaelco2_state::maniacsq_map(address_map &map) { - map(0x000000, 0x03ffff).rom(); /* ROM */ - map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ + map(0x000000, 0x03ffff).rom(); /* ROM */ + map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ - map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */ - map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */ - map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */ - map(0x30004a, 0x30004b).nopw(); /* Sound muting? */ - map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */ - map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */ - map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ - map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */ + map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */ + map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */ + map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */ + map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */ + map(0x30004a, 0x30004b).nopw(); /* Sound muting? */ + map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */ + map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */ + map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ + map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */ } @@ -193,7 +193,7 @@ void gaelco2_state::maniacsq(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 320-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -449,10 +449,10 @@ INPUT_PORTS_END void gaelco2_state::saltcrdi_map(address_map &map) { map(0x000000, 0x03ffff).rom(); - map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); + map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); - map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); - map(0x218004, 0x218009).ram().share("vregs"); + map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); + map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); map(0x300000, 0x300001).portr("IN0"); map(0x310000, 0x310001).portr("DSW"); map(0x320000, 0x320001).portr("COIN"); @@ -476,7 +476,7 @@ void gaelco2_state::saltcrdi(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 384-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -558,19 +558,19 @@ Note 1x 28x2 edge connector void gaelco2_state::play2000_map(address_map &map) { - map(0x000000, 0x03ffff).rom(); /* ROM */ - map(0x100000, 0x100001).portr("IN0"); /* Coins + other buttons? */ + map(0x000000, 0x03ffff).rom(); /* ROM */ + map(0x100000, 0x100001).portr("IN0"); /* Coins + other buttons? */ map(0x110000, 0x110001).portr("IN1"); - map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ + map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ - map(0x214000, 0x214fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x215000, 0x217fff).ram(); /* Written to, but unused? */ - map(0x218000, 0x218003).ram(); /* Written to, but unused? */ - map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */ - map(0x21800a, 0x218fff).ram(); /* Written to, but unused? */ + map(0x214000, 0x214fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */ + map(0x215000, 0x217fff).ram(); /* Written to, but unused? */ + map(0x218000, 0x218003).ram(); /* Written to, but unused? */ + map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */ + map(0x21800a, 0x218fff).ram(); /* Written to, but unused? */ // AM_RANGE(0x843100, 0x84315e) ? - map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ - map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */ + map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ + map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */ } static INPUT_PORTS_START( play2000 ) @@ -732,7 +732,7 @@ void gaelco2_state::play2000(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 384-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -757,30 +757,30 @@ void gaelco2_state::play2000(machine_config &config) BANG ============================================================================*/ -READ16_MEMBER(bang_state::p1_gun_x){return (m_light0_x->read() * 320 / 0x100) + 1;} -READ16_MEMBER(bang_state::p1_gun_y){return (m_light0_y->read() * 240 / 0x100) - 4;} -READ16_MEMBER(bang_state::p2_gun_x){return (m_light1_x->read() * 320 / 0x100) + 1;} -READ16_MEMBER(bang_state::p2_gun_y){return (m_light1_y->read() * 240 / 0x100) - 4;} +u16 bang_state::p1_gun_x(){return (m_light0_x->read() * 320 / 0x100) + 1;} +u16 bang_state::p1_gun_y(){return (m_light0_y->read() * 240 / 0x100) - 4;} +u16 bang_state::p2_gun_x(){return (m_light1_x->read() * 320 / 0x100) + 1;} +u16 bang_state::p2_gun_y(){return (m_light1_y->read() * 240 / 0x100) - 4;} void bang_state::bang_map(address_map &map) { - map(0x000000, 0x0fffff).rom(); /* ROM */ - map(0x200000, 0x20ffff).ram().w(FUNC(bang_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ + map(0x000000, 0x0fffff).rom(); /* ROM */ + map(0x200000, 0x20ffff).ram().w(FUNC(bang_state::vram_w)).share("spriteram"); /* Video RAM */ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_cg1v_device::gaelcosnd_r), FUNC(gaelco_cg1v_device::gaelcosnd_w)); /* Sound Registers */ - map(0x210000, 0x211fff).ram().w(FUNC(bang_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x218004, 0x218009).readonly(); /* Video Registers */ - map(0x218004, 0x218007).writeonly().share("vregs"); /* Video Registers */ - map(0x218008, 0x218009).nopw(); /* CLR INT Video */ + map(0x210000, 0x211fff).ram().w(FUNC(bang_state::palette_w)).share("paletteram"); /* Palette */ + map(0x218004, 0x218009).readonly(); /* Video Registers */ + map(0x218004, 0x218007).w(FUNC(bang_state::vregs_w)).share("vregs"); /* Video Registers */ + map(0x218008, 0x218009).nopw(); /* CLR INT Video */ map(0x300000, 0x300001).portr("P1"); - map(0x300002, 0x300003).nopr(); /* Random number generator? */ - map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */ + map(0x300002, 0x300003).nopr(); /* Random number generator? */ + map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */ map(0x300010, 0x300011).portr("P2"); map(0x300020, 0x300021).portr("COIN"); - map(0x310000, 0x310001).r(FUNC(bang_state::p1_gun_x)).w(FUNC(bang_state::bang_clr_gun_int_w)); /* Gun 1P X */ /* CLR INT Gun */ - map(0x310002, 0x310003).r(FUNC(bang_state::p2_gun_x)); /* Gun 2P X */ - map(0x310004, 0x310005).r(FUNC(bang_state::p1_gun_y)); /* Gun 1P Y */ - map(0x310006, 0x310007).r(FUNC(bang_state::p2_gun_y)); /* Gun 2P Y */ - map(0xfe0000, 0xfeffff).ram(); /* Work RAM */ + map(0x310000, 0x310001).r(FUNC(bang_state::p1_gun_x)).w(FUNC(bang_state::bang_clr_gun_int_w)); /* Gun 1P X */ /* CLR INT Gun */ + map(0x310002, 0x310003).r(FUNC(bang_state::p2_gun_x)); /* Gun 2P X */ + map(0x310004, 0x310005).r(FUNC(bang_state::p1_gun_y)); /* Gun 1P Y */ + map(0x310006, 0x310007).r(FUNC(bang_state::p2_gun_y)); /* Gun 2P Y */ + map(0xfe0000, 0xfeffff).ram(); /* Work RAM */ } @@ -838,7 +838,7 @@ void bang_state::bang(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 320-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -970,18 +970,18 @@ ROM_END void gaelco2_state::alighunt_map(address_map &map) { - map(0x000000, 0x0fffff).rom(); /* ROM */ - map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ - map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ - map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */ - map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */ - map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */ - map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */ - map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */ - map(0x500006, 0x500007).nopw(); /* ??? */ - map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ - map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */ + map(0x000000, 0x0fffff).rom(); /* ROM */ + map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */ + map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ + map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */ + map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */ + map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */ + map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */ + map(0x320000, 0x320001).portr("COIN"); /* COINSW + SERVICESW */ + map(0x500000, 0x500001).w(FUNC(gaelco2_state::alighunt_coin_w)); /* Coin lockout + counters */ + map(0x500006, 0x500007).nopw(); /* ??? */ + map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ + map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */ } @@ -1077,7 +1077,7 @@ void gaelco2_state::alighunt(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 320-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -1240,18 +1240,18 @@ ROM_END void gaelco2_state::touchgo_map(address_map &map) { - map(0x000000, 0x0fffff).rom(); /* ROM */ - map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ - map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ - map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */ - map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */ - map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */ - map(0x300004, 0x300005).portr("IN2"); /* COINSW + Input 3P */ - map(0x300006, 0x300007).portr("IN3"); /* SERVICESW + Input 4P */ - map(0x500000, 0x500001).select(0x0038).w(FUNC(gaelco2_state::wrally2_latch_w)); /* Coin counters */ - map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ - map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */ + map(0x000000, 0x0fffff).rom(); /* ROM */ + map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */ + map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ + map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */ + map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */ + map(0x300000, 0x300001).portr("IN0"); /* DSW #1 + Input 1P */ + map(0x300002, 0x300003).portr("IN1"); /* DSW #2 + Input 2P */ + map(0x300004, 0x300005).portr("IN2"); /* COINSW + Input 3P */ + map(0x300006, 0x300007).portr("IN3"); /* SERVICESW + Input 4P */ + map(0x500000, 0x500001).select(0x0038).w(FUNC(gaelco2_state::wrally2_latch_w)); /* Coin counters */ + map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ + map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */ } @@ -1386,7 +1386,7 @@ void gaelco2_state::touchgo(machine_config &config) lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ lscreen.set_size(64*16, 32*16); lscreen.set_visarea(0, 480-1, 16, 256-1); - lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_left)); + lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_left)); lscreen.set_palette(m_palette); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); @@ -1394,7 +1394,7 @@ void gaelco2_state::touchgo(machine_config &config) rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ rscreen.set_size(64*16, 32*16); rscreen.set_visarea(0, 480-1, 16, 256-1); - rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_right)); + rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_right)); rscreen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising)); rscreen.set_palette(m_palette); @@ -1620,18 +1620,18 @@ ROM_END void gaelco2_state::snowboar_map(address_map &map) { - map(0x000000, 0x0fffff).rom(); /* ROM */ - map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ - map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_cg1v_device::gaelcosnd_r), FUNC(gaelco_cg1v_device::gaelcosnd_w)); /* Sound Registers */ - map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x212000, 0x213fff).ram(); /* Extra RAM */ - map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */ + map(0x000000, 0x0fffff).rom(); /* ROM */ + map(0x200000, 0x20ffff).ram().w(FUNC(gaelco2_state::vram_w)).share("spriteram"); /* Video RAM */ + map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_cg1v_device::gaelcosnd_r), FUNC(gaelco_cg1v_device::gaelcosnd_w)); /* Sound Registers */ + map(0x210000, 0x211fff).ram().w(FUNC(gaelco2_state::palette_w)).share("paletteram"); /* Palette */ + map(0x212000, 0x213fff).ram(); /* Extra RAM */ + map(0x218004, 0x218009).ram().w(FUNC(gaelco2_state::vregs_w)).share("vregs"); /* Video Registers */ map(0x300000, 0x300001).portr("P1"); - map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */ + map(0x300000, 0x30000f).w(m_mainlatch, FUNC(ls259_device::write_d0)).umask16(0x00ff); /* Coin Counters & serial EEPROM */ map(0x300010, 0x300011).portr("P2"); map(0x300020, 0x300021).portr("COIN"); map(0x310000, 0x31ffff).rw(FUNC(gaelco2_state::snowboar_protection_r), FUNC(gaelco2_state::snowboar_protection_w)).share("snowboar_prot"); /* Protection */ - map(0xfe0000, 0xfeffff).ram(); /* Work RAM */ + map(0xfe0000, 0xfeffff).ram(); /* Work RAM */ } @@ -1691,7 +1691,7 @@ void gaelco2_state::snowboar(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 384-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -1735,7 +1735,7 @@ void gaelco2_state::maniacsqs(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(64*16, 32*16); screen.set_visarea(0, 320-1, 16, 256-1); - screen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2)); + screen.set_screen_update(FUNC(gaelco2_state::screen_update)); screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); @@ -1853,19 +1853,19 @@ ROM_END void wrally2_state::wrally2_map(address_map &map) { - map(0x000000, 0x0fffff).rom(); /* ROM */ - map(0x200000, 0x20ffff).ram().w(FUNC(wrally2_state::gaelco2_vram_w)).share("spriteram"); /* Video RAM */ + map(0x000000, 0x0fffff).rom(); /* ROM */ + map(0x200000, 0x20ffff).ram().w(FUNC(wrally2_state::vram_w)).share("spriteram"); /* Video RAM */ map(0x202890, 0x2028ff).rw("gaelco", FUNC(gaelco_gae1_device::gaelcosnd_r), FUNC(gaelco_gae1_device::gaelcosnd_w)); /* Sound Registers */ - map(0x210000, 0x211fff).ram().w(FUNC(wrally2_state::gaelco2_palette_w)).share("paletteram"); /* Palette */ - map(0x212000, 0x213fff).ram(); /* Extra RAM */ - map(0x218004, 0x218009).ram().share("vregs"); /* Video Registers */ - map(0x300000, 0x300001).portr("IN0"); /* DIPSW #2 + Inputs 1P */ - map(0x300002, 0x300003).portr("IN1"); /* DIPSW #1 */ - map(0x300004, 0x300005).portr("IN2"); /* Inputs 2P + COINSW */ - map(0x300006, 0x300007).portr("IN3"); /* SERVICESW */ - map(0x400000, 0x400001).select(0x0038).w(FUNC(wrally2_state::wrally2_latch_w)); /* Coin counters, etc. */ - map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ - map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */ + map(0x210000, 0x211fff).ram().w(FUNC(wrally2_state::palette_w)).share("paletteram"); /* Palette */ + map(0x212000, 0x213fff).ram(); /* Extra RAM */ + map(0x218004, 0x218009).ram().w(FUNC(wrally2_state::vregs_w)).share("vregs"); /* Video Registers */ + map(0x300000, 0x300001).portr("IN0"); /* DIPSW #2 + Inputs 1P */ + map(0x300002, 0x300003).portr("IN1"); /* DIPSW #1 */ + map(0x300004, 0x300005).portr("IN2"); /* Inputs 2P + COINSW */ + map(0x300006, 0x300007).portr("IN3"); /* SERVICESW */ + map(0x400000, 0x400001).select(0x0038).w(FUNC(wrally2_state::wrally2_latch_w)); /* Coin counters, etc. */ + map(0xfe0000, 0xfe7fff).ram(); /* Work RAM */ + map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM (shared with D5002FP) */ } @@ -1984,7 +1984,7 @@ void wrally2_state::wrally2(machine_config &config) lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ lscreen.set_size(384, 32*16); lscreen.set_visarea(0, 384-1, 16, 256-1); - lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_left)); + lscreen.set_screen_update(FUNC(gaelco2_state::screen_update_left)); lscreen.set_palette(m_palette); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); @@ -1992,7 +1992,7 @@ void wrally2_state::wrally2(machine_config &config) rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ rscreen.set_size(384, 32*16); rscreen.set_visarea(0, 384-1, 16, 256-1); - rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_gaelco2_right)); + rscreen.set_screen_update(FUNC(gaelco2_state::screen_update_right)); rscreen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); rscreen.set_palette(m_palette); @@ -2298,36 +2298,36 @@ ROM_END -GAME( 1994, aligator, 0, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (World, protected)", 0 ) -GAME( 1994, aligators, aligator, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (Spain, protected)", 0 ) -GAME( 1994, aligatorun, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 1)", 0 ) -GAME( 1994, aligatoruna, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 2)", 0 ) // strange version, starts on space stages, but clearly a recompile not a trivial hack of the above, show version maybe? +GAME( 1994, aligator, 0, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (World, protected)", 0 ) +GAME( 1994, aligators, aligator, alighunt_d5002fp, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (Spain, protected)", 0 ) +GAME( 1994, aligatorun, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 1)", 0 ) +GAME( 1994, aligatoruna, aligator, alighunt, alighunt, gaelco2_state, init_alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected, set 2)", 0 ) // strange version, starts on space stages, but clearly a recompile not a trivial hack of the above, show version maybe? -GAME( 1995, touchgo, 0, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (World)", MACHINE_IMPERFECT_SOUND ) -GAME( 1995, touchgon, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Non North America)", MACHINE_IMPERFECT_SOUND ) -GAME( 1995, touchgoe, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (earlier revision)", MACHINE_IMPERFECT_SOUND ) -GAME( 1995, touchgok, touchgo, touchgo, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Korea, unprotected)", MACHINE_IMPERFECT_SOUND ) // doesn't say 'Korea' but was sourced there, shows 2 copyright lines like the 'earlier revision' +GAME( 1995, touchgo, 0, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (World)", MACHINE_IMPERFECT_SOUND ) +GAME( 1995, touchgon, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Non North America)", MACHINE_IMPERFECT_SOUND ) +GAME( 1995, touchgoe, touchgo, touchgo_d5002fp, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (earlier revision)", MACHINE_IMPERFECT_SOUND ) +GAME( 1995, touchgok, touchgo, touchgo, touchgo, gaelco2_state, init_touchgo, ROT0, "Gaelco", "Touch & Go (Korea, unprotected)", MACHINE_IMPERFECT_SOUND ) // doesn't say 'Korea' but was sourced there, shows 2 copyright lines like the 'earlier revision' -GAME( 1995, wrally2, 0, wrally2, wrally2, wrally2_state, init_wrally2, ROT0, "Gaelco", "World Rally 2: Twin Racing (mask ROM version)", 0 ) -GAME( 1995, wrally2a, wrally2, wrally2, wrally2, wrally2_state, empty_init, ROT0, "Gaelco", "World Rally 2: Twin Racing (EPROM version)", 0 ) +GAME( 1995, wrally2, 0, wrally2, wrally2, wrally2_state, init_wrally2, ROT0, "Gaelco", "World Rally 2: Twin Racing (mask ROM version)", 0 ) +GAME( 1995, wrally2a, wrally2, wrally2, wrally2, wrally2_state, empty_init, ROT0, "Gaelco", "World Rally 2: Twin Racing (EPROM version)", 0 ) // All sets identify as Version 1.0, but are clearly different revisions -GAME( 1996, maniacsq, 0, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum DEEE)", 0 ) -GAME( 1996, maniacsqa, maniacsq, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum CF2D)", 0 ) -GAME( 1996, maniacsqu, maniacsq, maniacsq, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum BB73)", 0 ) -GAME( 1996, maniacsqs, maniacsq, maniacsqs, snowboar, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum 66B1, 960419/1 PCB)", 0 ) // Official version on Snow Board Championship PCB, doesn't use the protection +GAME( 1996, maniacsq, 0, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum DEEE)", 0 ) +GAME( 1996, maniacsqa, maniacsq, maniacsq_d5002fp, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (protected, Version 1.0, Checksum CF2D)", 0 ) +GAME( 1996, maniacsqu, maniacsq, maniacsq, maniacsq, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum BB73)", 0 ) +GAME( 1996, maniacsqs, maniacsq, maniacsqs, snowboar, gaelco2_state, empty_init, ROT0, "Gaelco", "Maniac Square (unprotected, Version 1.0, Checksum 66B1, 960419/1 PCB)", 0 ) // Official version on Snow Board Championship PCB, doesn't use the protection -GAME( 1996, snowboar, 0, snowboar, snowboar, gaelco2_state, empty_init, ROT0, "Gaelco", "Snow Board Championship (Version 2.1)", 0 ) -GAME( 1996, snowboara, snowboar, snowboar, snowboar, gaelco2_state, init_snowboar, ROT0, "Gaelco", "Snow Board Championship (Version 2.0)", 0 ) +GAME( 1996, snowboar, 0, snowboar, snowboar, gaelco2_state, init_snowboar, ROT0, "Gaelco", "Snow Board Championship (Version 2.1)", 0 ) +GAME( 1996, snowboara, snowboar, snowboar, snowboar, gaelco2_state, init_snowboara, ROT0, "Gaelco", "Snow Board Championship (Version 2.0)", 0 ) -GAME( 1998, bang, 0, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Bang!", 0 ) -GAME( 1998, bangj, bang, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Gun Gabacho (Japan)", 0 ) +GAME( 1998, bang, 0, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Bang!", 0 ) +GAME( 1998, bangj, bang, bang, bang, bang_state, init_bang, ROT0, "Gaelco", "Gun Gabacho (Japan)", 0 ) // 2-in-1 gambling game, appears to be cloned Gaelco hardware complete with DS5002FP, or possibly manufactured by Gaelco for Nova Desitec but without any Gaelco branding. // these are Italian versions, English versions also exist -GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy)", 0 ) -GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump -GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 ) +GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy)", 0 ) +GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump +GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 ) // Gym exercise bike -GAME( 1997, saltcrdi, 0, saltcrdi, saltcrdi, gaelco2_state, empty_init, ROT0, "Salter Fitness / Gaelco", "Pro Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB)", MACHINE_NOT_WORKING ) // there are other machines in the Cardioline series, without TV displays +GAME( 1997, saltcrdi, 0, saltcrdi, saltcrdi, gaelco2_state, empty_init, ROT0, "Salter Fitness / Gaelco", "Pro Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB)", MACHINE_NOT_WORKING ) // there are other machines in the Cardioline series, without TV displays diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp index 50ec35f225a..2c6498c9886 100644 --- a/src/mame/drivers/gaelco3d.cpp +++ b/src/mame/drivers/gaelco3d.cpp @@ -213,7 +213,7 @@ void gaelco3d_state::machine_reset() { MACHINE_RESET_CALL_MEMBER( common ); m_tms_offset_xor = 0; - m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0); + m_soundlatch->acknowledge_w(); } diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index c3213bc002e..80f07246f8e 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -681,17 +681,15 @@ WRITE_LINE_MEMBER(galaxian_state::vblank_interrupt_w) m_maincpu->set_input_line(m_irq_line, ASSERT_LINE); } -WRITE_LINE_MEMBER(galaxian_state::tenspot_interrupt_w) +INPUT_CHANGED_MEMBER(galaxian_state::tenspot_fake) { - vblank_interrupt_w(state); - - if (m_fake_select.read_safe(0x00)) + if (newval) { m_tenspot_current_game++; m_tenspot_current_game%=10; tenspot_set_game_bank(m_tenspot_current_game, 1); - m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); } + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); } WRITE8_MEMBER(galaxian_state::irq_enable_w) @@ -957,7 +955,7 @@ WRITE8_MEMBER(galaxian_state::explorer_sound_control_w) READ8_MEMBER(galaxian_state::explorer_sound_latch_r) { m_audiocpu->set_input_line(0, CLEAR_LINE); - return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM), 0); + return m_soundlatch->read(); } @@ -1351,7 +1349,7 @@ WRITE8_MEMBER(galaxian_state::kingball_sound1_w) WRITE8_MEMBER(galaxian_state::kingball_sound2_w) { m_kingball_sound = (m_kingball_sound & ~0x02) | (data << 1); - m_soundlatch->write(space, 0, m_kingball_sound | 0xf0); + m_soundlatch->write(m_kingball_sound | 0xf0); } @@ -1427,7 +1425,7 @@ READ8_MEMBER(galaxian_state::jumpbug_protection_r) WRITE8_MEMBER(galaxian_state::checkman_sound_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -3254,7 +3252,7 @@ static INPUT_PORTS_START( tenspot ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("FAKE_SELECT") /* fake button to move onto next game - until select rom is understood! */ - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, galaxian_state, tenspot_fake, nullptr) PORT_MODIFY("IN0") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY @@ -6165,9 +6163,6 @@ void galaxian_state::tenspot(machine_config &config) /* separate tile/sprite ROMs */ m_gfxdecode->set_info(gfx_tenspot); - - /* video hardware */ - m_screen->screen_vblank().set(FUNC(galaxian_state::tenspot_interrupt_w)); } void galaxian_state::zigzag(machine_config &config) @@ -7040,6 +7035,12 @@ void galaxian_state::init_nolock() space.unmap_write(0x6002, 0x6002, 0x7f8); } +// The first rom loads at 0800, then 1800, 2800?, 3800 and 4800. +// Unfortunately the 3rd rom appears to be total garbage. +// Each block of 256 bytes is in reverse order. Some code +// is missing: 00xx, 4Axx, 10xx, 11xx at least. The game +// uses 0200-05FF as RAM. It also accesses 6000, 6800, 700x, 7800. +// Perhaps the missing code was stored in battery-backed RAM? void galaxian_state::init_warofbugg() { uint8_t* romdata = memregion("maincpu")->base(); @@ -7047,9 +7048,10 @@ void galaxian_state::init_warofbugg() uint8_t buf[0x4000]; memcpy(buf, romdata, 0x4000); - // the rom data is at the very least, backwards, but there still seems to be missing code - for (int i = 0; i < 0x4000; i++) - romdata[i] = buf[i^0x7ff]; + // unscramble each block + for (int i = 0; i < 0x40; i++) + for (int j = 0; j < 0x100; j++) + romdata[i*256+j] = buf[i*256+(j^0xff)]; init_nolock(); @@ -8465,11 +8467,11 @@ ROM_END ROM_START( warofbugg ) ROM_REGION( 0x4000, "maincpu", 0 ) - ROM_LOAD( "wotbg-u-1.bin", 0x0000, 0x0800, CRC(f43ff0a8) SHA1(b87abeb8af9105fa8fba78f9a68363bd89066e7f) ) - ROM_LOAD( "wotbg-v-2.bin", 0x0800, 0x0800, CRC(eb7a028b) SHA1(8c822ae11d3cc04f749a7cd639d15b9fc830ab35) ) - ROM_LOAD( "wotbg-w-3.bin", 0x1000, 0x0800, CRC(693e0e50) SHA1(00b19969cee0f95bfb8251c2df133ff2c9ae3b00) ) - ROM_LOAD( "wotbg-y-4.bin", 0x1800, 0x0800, CRC(885d4982) SHA1(4aeaf514a9413a9cb9a971fd258c6cf46ca66fc4) ) - ROM_LOAD( "wotbg-z-5.bin", 0x2000, 0x0800, CRC(60041ef2) SHA1(cced5837a037ac5cd8fa6260d69d8e33de5ecd48) ) + ROM_LOAD( "wotbg-u-1.bin", 0x0000, 0x0800, CRC(f43ff0a8) SHA1(b87abeb8af9105fa8fba78f9a68363bd89066e7f) ) // -> 0800 + ROM_LOAD( "wotbg-v-2.bin", 0x0800, 0x0800, CRC(eb7a028b) SHA1(8c822ae11d3cc04f749a7cd639d15b9fc830ab35) ) // -> 1800 + ROM_LOAD( "wotbg-w-3.bin", 0x1000, 0x0800, CRC(693e0e50) SHA1(00b19969cee0f95bfb8251c2df133ff2c9ae3b00) ) // -> ???? garbage + ROM_LOAD( "wotbg-y-4.bin", 0x1800, 0x0800, CRC(885d4982) SHA1(4aeaf514a9413a9cb9a971fd258c6cf46ca66fc4) ) // -> 3800 + ROM_LOAD( "wotbg-z-5.bin", 0x2000, 0x0800, CRC(60041ef2) SHA1(cced5837a037ac5cd8fa6260d69d8e33de5ecd48) ) // -> 4800 ROM_REGION( 0x1000, "gfx1", 0 ) ROM_LOAD( "warofbug.1k", 0x0000, 0x0800, CRC(8100fa85) SHA1(06641c431cace36dec98b87555f62e72f3e53a31) ) diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp index 1bcf2709313..bc6fa8cdb8a 100644 --- a/src/mame/drivers/galivan.cpp +++ b/src/mame/drivers/galivan.cpp @@ -44,12 +44,12 @@ TODO WRITE8_MEMBER(galivan_state::galivan_sound_command_w) { - m_soundlatch->write(space,0,((data & 0x7f) << 1) | 1); + m_soundlatch->write(((data & 0x7f) << 1) | 1); } READ8_MEMBER(galivan_state::soundlatch_clear_r) { - m_soundlatch->clear_w(space, 0, 0); + m_soundlatch->clear_w(); return 0; } diff --git a/src/mame/drivers/galspnbl.cpp b/src/mame/drivers/galspnbl.cpp index 266975edcf0..a9334dce508 100644 --- a/src/mame/drivers/galspnbl.cpp +++ b/src/mame/drivers/galspnbl.cpp @@ -51,7 +51,7 @@ WRITE16_MEMBER(galspnbl_state::soundcommand_w) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space,offset,data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } } diff --git a/src/mame/drivers/gamemachine.cpp b/src/mame/drivers/gamemachine.cpp index 2fd5afb363b..b746176d95e 100644 --- a/src/mame/drivers/gamemachine.cpp +++ b/src/mame/drivers/gamemachine.cpp @@ -40,7 +40,7 @@ Calculator: Shooting Gallery: [RET] [Cyc] [Zig] [Rnd] [ ] [ ] [ ] [ ] [ ] [ ] * Cyclic, Zigzag, Random - [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] + [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] * + any of 20 buttons for shooting target Black Jack: [RET] [Dl ] [ ] [ ] [ ] [ ] [ ] [ ] [Hit] [Stn] * Deal, Hit, Stand @@ -111,7 +111,7 @@ static NETLIST_START(nl_gamemachine) CAP(C1, CAP_P(50)) CAP(C2, CAP_U(0.001)) - CAP(C3, CAP_U(0.002)) // Schematics state this as 2pF, doesn't make sense, this looks like a ladder layout + CAP(C3, CAP_U(0.002)) CAP(C4, CAP_U(0.005)) CAP(C5, CAP_U(0.010)) diff --git a/src/mame/drivers/gameplan.cpp b/src/mame/drivers/gameplan.cpp index 57fdb0a0629..b663151fc37 100644 --- a/src/mame/drivers/gameplan.cpp +++ b/src/mame/drivers/gameplan.cpp @@ -167,8 +167,7 @@ WRITE_LINE_MEMBER(gameplan_state::r6532_irq) WRITE8_MEMBER(gameplan_state::r6532_soundlatch_w) { - address_space &progspace = m_maincpu->space(AS_PROGRAM); - m_soundlatch->write(progspace, 0, data); + m_soundlatch->write(data); } diff --git a/src/mame/drivers/ghosteo.cpp b/src/mame/drivers/ghosteo.cpp index 2ef6214f5f8..6f9e166c67a 100644 --- a/src/mame/drivers/ghosteo.cpp +++ b/src/mame/drivers/ghosteo.cpp @@ -185,7 +185,7 @@ WRITE8_MEMBER( ghosteo_state::qs1000_p3_w ) membank("qs1000:bank")->set_entry(data & 0x07); if (!BIT(data, 5)) - m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5)); + m_soundlatch->acknowledge_w(); } diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp index a641ea11a38..3bb329ab9ea 100644 --- a/src/mame/drivers/gladiatr.cpp +++ b/src/mame/drivers/gladiatr.cpp @@ -254,14 +254,14 @@ WRITE8_MEMBER(ppking_state::cpu2_irq_ack_w) WRITE8_MEMBER(gladiatr_state_base::adpcm_command_w) { - m_soundlatch->write(space,0,data); + m_soundlatch->write(data); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER(gladiatr_state_base::adpcm_command_r) { m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return m_soundlatch->read(space,0); + return m_soundlatch->read(); } WRITE_LINE_MEMBER(gladiatr_state_base::flipscreen_w) @@ -550,7 +550,7 @@ WRITE8_MEMBER(ppking_state::ppking_qx0_w) m_mcu[0].txd = data; m_mcu[1].rst = 0; - m_soundlatch2->write(space, 0, data & 0xff); + m_soundlatch2->write(data & 0xff); mcu_input_check(); @@ -580,7 +580,7 @@ READ8_MEMBER(ppking_state::ppking_qx1_r) if(m_mcu[1].rst == 1) return 0x40; - return m_soundlatch2->read(space,0); + return m_soundlatch2->read(); } READ8_MEMBER(ppking_state::ppking_qx3_r) diff --git a/src/mame/drivers/go2000.cpp b/src/mame/drivers/go2000.cpp index a841c6a9f03..588c2b10b1c 100644 --- a/src/mame/drivers/go2000.cpp +++ b/src/mame/drivers/go2000.cpp @@ -85,7 +85,7 @@ private: WRITE16_MEMBER(go2000_state::sound_cmd_w) { - m_soundlatch->write(space, offset, data & 0xff); + m_soundlatch->write(data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/goal92.cpp b/src/mame/drivers/goal92.cpp index 11828b83cf4..d9a83a4058a 100644 --- a/src/mame/drivers/goal92.cpp +++ b/src/mame/drivers/goal92.cpp @@ -24,7 +24,7 @@ WRITE16_MEMBER(goal92_state::goal92_sound_command_w) { if (ACCESSING_BITS_8_15) { - m_soundlatch->write(space, 0, (data >> 8) & 0xff); + m_soundlatch->write((data >> 8) & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } diff --git a/src/mame/drivers/gsword.cpp b/src/mame/drivers/gsword.cpp index 43ef1af09de..2343771b234 100644 --- a/src/mame/drivers/gsword.cpp +++ b/src/mame/drivers/gsword.cpp @@ -395,7 +395,7 @@ WRITE8_MEMBER(gsword_state::nmi_set_w) WRITE8_MEMBER(gsword_state::sound_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/halleys.cpp b/src/mame/drivers/halleys.cpp index c4278cadb6f..f6c23f9dc17 100644 --- a/src/mame/drivers/halleys.cpp +++ b/src/mame/drivers/halleys.cpp @@ -1603,7 +1603,7 @@ WRITE8_MEMBER(halleys_state::sndnmi_msk_w) WRITE8_MEMBER(halleys_state::soundcommand_w) { m_io_ram[0x8a] = data; - m_soundlatch->write(space,offset,data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp index b1a48703efa..3e06972b1cb 100644 --- a/src/mame/drivers/hh_hmcs40.cpp +++ b/src/mame/drivers/hh_hmcs40.cpp @@ -1773,7 +1773,7 @@ READ8_MEMBER(pairmtch_state::input_r) WRITE8_MEMBER(pairmtch_state::sound_w) { // R5x: soundlatch (to audiocpu R2x) - m_soundlatch[0]->write(space, 0, bitswap<8>(data,7,6,5,4,0,1,2,3)); + m_soundlatch[0]->write(bitswap<8>(data,7,6,5,4,0,1,2,3)); } // handlers: audiocpu side @@ -1781,7 +1781,7 @@ WRITE8_MEMBER(pairmtch_state::sound_w) WRITE8_MEMBER(pairmtch_state::sound2_w) { // R2x: soundlatch (to maincpu R5x) - m_soundlatch[1]->write(space, 0, bitswap<8>(data,7,6,5,4,0,1,2,3)); + m_soundlatch[1]->write(bitswap<8>(data,7,6,5,4,0,1,2,3)); } WRITE16_MEMBER(pairmtch_state::speaker_w) diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp index 0301dea356b..86d067360bd 100644 --- a/src/mame/drivers/hh_pic16.cpp +++ b/src/mame/drivers/hh_pic16.cpp @@ -858,7 +858,7 @@ static INPUT_PORTS_START( matchme ) PORT_CONFSETTING( 0x02^0x07, "3" ) PORT_CONFSETTING( 0x04^0x07, "4" ) PORT_CONFNAME( 0x08, 0x08, DEF_STR( Difficulty ) ) - PORT_CONFSETTING( 0x08, "Amateur" ) // AMR + PORT_CONFSETTING( 0x08, "Amateur" ) // AM PORT_CONFSETTING( 0x00, "Professional" ) // PRO PORT_START("IN.4") // another fake diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp index aacc0a98ba0..f7365320e96 100644 --- a/src/mame/drivers/hh_sm510.cpp +++ b/src/mame/drivers/hh_sm510.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:hap, Sean Riddle, algestam +// copyright-holders:hap, Sean Riddle, Henrik Algestam // thanks-to:Igor, ChoccyHobNob, RColtrane /*************************************************************************** @@ -16,9 +16,8 @@ TODO: confident that it's same) - Currently there is no accurate way to dump the SM511/SM511 melody ROM electronically. For the ones that weren't decapped, they were read by - playing back all melody data and reconstructing it to ROM. - Visual(decap) verification is wanted for: - * gnw_climber, gnw_bjack + playing back all melody data and reconstructing it to ROM. Visual(decap) + verification is wanted for: gnw_bfight, gnw_bjack, gnw_climber - identify lcd segments for tgaiden **************************************************************************** @@ -29,8 +28,9 @@ Trivia: Most of the Nintendo G&W have built-in cheats, likely kept in by Nintendo to test the game. These were not accessible to users of course, but for the sake of fun they're (usually) available on MAME. -BTANB: On some of the earlier G&W games, eg. gnw_mmouse, gnw_pchute, gnw_fire, -the controls still work after game over, this happens on the real thing too. +BTANB: On some of the earlier G&W games, eg. gnw_fire, gnw_mmouse, gnw_pchute, +gnw_popeye, the controls still work after game over, this happens on the real +thing too. Game list (* denotes not emulated yet) @@ -46,7 +46,7 @@ CN-07* g ? Helmet (aka Headache) LN-08* g ? Lion PR-21 ws SM5A Parachute OC-22 ws SM5A Octopus -PP-23* ws SM5A? Popeye +PP-23 ws SM5A Popeye FP-24* ws SM5A Chef MC-25 ws SM5A Mickey Mouse EG-26 ws SM5A Egg (near-certainly same ROM as MC-25, but LCD differs) @@ -85,7 +85,7 @@ NH-103 nws SM510 Manhole TF-104 nws SM510 Tropical Fish YM-105 nws SM511 Super Mario Bros. DR-106 nws SM511 Climber -BF-107* nws SM511? Balloon Fight +BF-107 nws SM511 Balloon Fight MJ-108* nws SM511? Mario The Juggler BU-201 sc SM510? Spitball Sparky UD-202* sc SM510? Crab Grab @@ -94,7 +94,7 @@ AK-302* mvs SM511? Donkey Kong 3 HK-303* mvs SM511? Donkey Kong Hockey YM-801* cs SM511 Super Mario Bros. (assume same ROM as nws version) DR-802* cs SM511 Climber " -BF-803* cs SM511? Balloon Fight " +BF-803* cs SM511 Balloon Fight " YM-901-S* x SM511 Super Mario Bros. " RGW-001 (2010 Ball remake) is on different hardware, ATmega169PV MCU. @@ -1411,6 +1411,97 @@ ROM_END /*************************************************************************** + Nintendo Game & Watch: Popeye (model PP-23) + * PCB label PP-23 Y + * Sharp SM5A label PP-23 52YD (no decap) + * lcd screen with custom segments, 1-bit sound + + This is the wide screen version, there's also tabletop and panorama versions. + +***************************************************************************/ + +class gnw_popeye_state : public hh_sm510_state +{ +public: + gnw_popeye_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_sm510_state(mconfig, type, tag) + { } + + void gnw_popeye(machine_config &config); +}; + +// config + +static INPUT_PORTS_START( gnw_popeye ) + PORT_START("IN.0") // R2 + PORT_CONFNAME( 0x01, 0x00, "Infinite Lives (Cheat)") // when cheat is activated, not all segments are lit on the ACL reset screen + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) // same as 0x01? + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // reset? + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) // alarm test? + + PORT_START("IN.1") // R3 + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // R4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Time") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game B") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game A") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Alarm") + + PORT_START("BA") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_16WAY + + PORT_START("B") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_16WAY + + PORT_START("ACL") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, acl_button, nullptr) PORT_NAME("ACL") +INPUT_PORTS_END + +void gnw_popeye_state::gnw_popeye(machine_config &config) +{ + /* basic machine hardware */ + SM5A(config, m_maincpu); + m_maincpu->set_r_mask_option(sm510_base_device::RMASK_DIRECT); // confirmed + m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm500_lcd_segment_w)); + m_maincpu->read_k().set(FUNC(hh_sm510_state::input_r)); + m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_input_w)); + m_maincpu->read_ba().set_ioport("BA"); + m_maincpu->read_b().set_ioport("B"); + + /* video hardware */ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_svg_region("svg"); + screen.set_refresh_hz(50); + screen.set_size(1604, 1080); + screen.set_visarea_full(); + + TIMER(config, "display_decay").configure_periodic(FUNC(hh_sm510_state::display_decay_tick), attotime::from_msec(1)); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( gnw_popeye ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "pp-23", 0x0000, 0x0740, CRC(49987769) SHA1(ad90659a3ce7169a4df16367c5307435d9f9d956) ) + + ROM_REGION( 218428, "svg", 0) + ROM_LOAD( "gnw_popeye.svg", 0, 218428, CRC(b2c3fdf2) SHA1(5e782f25f9ff432a292e67efc7f5653cf2a81b60) ) +ROM_END + + + + + +/*************************************************************************** + Nintendo Game & Watch: Mickey Mouse (model MC-25), Egg (model EG-26) * Sharp SM5A label ? * lcd screen with custom segments, 1-bit sound @@ -3275,6 +3366,7 @@ ROM_END /*************************************************************************** Nintendo Game & Watch: Super Mario Bros. (model: see below) + * PCB label YM-105 * Sharp SM511 label YM-105 9024B (new wide screen version) (die label ?) * lcd screen with custom segments, 1-bit sound @@ -3462,6 +3554,100 @@ ROM_END /*************************************************************************** + Nintendo Game & Watch: Balloon Fight (model: see below) + * PCB label DR-106 (same PCB as in Climber (new wide screen version)) + * Sharp SM511 label BF-107 9031B (new wide screen version) (no decap) + * lcd screen with custom segments, 1-bit sound + + First released in 1986 on Crystal Screen (model BF-803), rereleased on + New Wide Screen in 1988 (model BF-107). The graphic LCD elements look the same + in both versions but the graphical background is slightly different. + Until further proof, it's assumed that the ROM is the same for both models. + +***************************************************************************/ + +class gnw_bfight_state : public hh_sm510_state +{ +public: + gnw_bfight_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_sm510_state(mconfig, type, tag) + { } + + void gnw_bfight(machine_config &config); +}; + +// config + +static INPUT_PORTS_START( gnw_bfight ) + PORT_START("IN.0") // S1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Time") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Alarm") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.1") // S2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) + + PORT_START("IN.2") // S3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) // Eject + PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("ACL") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, acl_button, nullptr) PORT_NAME("ACL") + + PORT_START("B") // MCU B(beta) pin pulled to GND + PORT_CONFNAME( 0x01, 0x01, "Infinite Lives (Cheat)") + PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +void gnw_bfight_state::gnw_bfight(machine_config &config) +{ + /* basic machine hardware */ + SM511(config, m_maincpu); + m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w)); + m_maincpu->read_k().set(FUNC(hh_sm510_state::input_r)); + m_maincpu->write_s().set(FUNC(hh_sm510_state::input_w)); + m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_r1_w)); + m_maincpu->read_b().set_ioport("B"); + + /* video hardware */ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_svg_region("svg"); + screen.set_refresh_hz(50); + screen.set_size(1549, 1080); + screen.set_visarea_full(); + + TIMER(config, "display_decay").configure_periodic(FUNC(hh_sm510_state::display_decay_tick), attotime::from_msec(1)); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( gnw_bfight ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "bf-107.program", 0x0000, 0x1000, CRC(4c8d07ed) SHA1(a8974dff85d5f3bacaadb71b86e9b30994b6d129) ) + + ROM_REGION( 0x100, "maincpu:melody", 0 ) + ROM_LOAD( "bf-107.melody", 0x000, 0x100, BAD_DUMP CRC(aadc22a1) SHA1(f6e5572232eb9e83f6833073e1e1e99776245c50) ) // decap needed for verification + + ROM_REGION( 558341, "svg", 0) + ROM_LOAD( "gnw_bfight.svg", 0, 558341, CRC(f0d61fe8) SHA1(b0b56224a967e4b26836c0f7e3015d13b42ae5cc) ) +ROM_END + + + + + +/*************************************************************************** + Nintendo Micro Vs. System: Boxing (model BX-301) * Sharp SM511 label BX-301 287C (die label KMS73B, KMS744) * wide lcd screen with custom segments, 1-bit sound @@ -8776,6 +8962,7 @@ CONS( 1991, kgarfld, 0, 0, kgarfld, kgarfld, kgarfld_state, // Nintendo G&W: wide screen CONS( 1981, gnw_pchute, 0, 0, gnw_pchute, gnw_pchute, gnw_pchute_state, empty_init, "Nintendo", "Game & Watch: Parachute", MACHINE_SUPPORTS_SAVE ) CONS( 1981, gnw_octopus, 0, 0, gnw_octopus, gnw_octopus, gnw_octopus_state, empty_init, "Nintendo", "Game & Watch: Octopus", MACHINE_SUPPORTS_SAVE ) +CONS( 1981, gnw_popeye, 0, 0, gnw_popeye, gnw_popeye, gnw_popeye_state, empty_init, "Nintendo", "Game & Watch: Popeye (wide screen)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, gnw_mmouse, 0, 0, gnw_mmouse, gnw_mmouse, gnw_mmouse_state, empty_init, "Nintendo", "Game & Watch: Mickey Mouse", MACHINE_SUPPORTS_SAVE ) CONS( 1981, gnw_egg, gnw_mmouse, 0, gnw_egg, gnw_mmouse, gnw_mmouse_state, empty_init, "Nintendo", "Game & Watch: Egg", MACHINE_SUPPORTS_SAVE ) CONS( 1984, nupogodi, gnw_mmouse, 0, nupogodi, gnw_mmouse, gnw_mmouse_state, empty_init, "Elektronika", "Nu, pogodi!", MACHINE_SUPPORTS_SAVE ) @@ -8804,6 +8991,7 @@ CONS( 1983, gnw_manhole, 0, 0, gnw_manhole, gnw_manhole, gnw_manhole_st CONS( 1985, gnw_tfish, 0, 0, gnw_tfish, gnw_tfish, gnw_tfish_state, empty_init, "Nintendo", "Game & Watch: Tropical Fish", MACHINE_SUPPORTS_SAVE ) CONS( 1988, gnw_smb, 0, 0, gnw_smb, gnw_smb, gnw_smb_state, empty_init, "Nintendo", "Game & Watch: Super Mario Bros. (new wide screen)", MACHINE_SUPPORTS_SAVE ) CONS( 1988, gnw_climber, 0, 0, gnw_climber, gnw_climber, gnw_climber_state, empty_init, "Nintendo", "Game & Watch: Climber (new wide screen)", MACHINE_SUPPORTS_SAVE ) +CONS( 1988, gnw_bfight, 0, 0, gnw_bfight, gnw_bfight, gnw_bfight_state, empty_init, "Nintendo", "Game & Watch: Balloon Fight (new wide screen)", MACHINE_SUPPORTS_SAVE ) // Nintendo G&W: micro vs. system (actually, no official Game & Watch logo anywhere) CONS( 1984, gnw_boxing, 0, 0, gnw_boxing, gnw_boxing, gnw_boxing_state, empty_init, "Nintendo", "Micro Vs. System: Boxing", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 37b19a1b17d..3a650e9cd06 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -228,7 +228,7 @@ #include "tcfballa.lh" #include "timaze.lh" #include "xl25.lh" // clickable -#include "zodiac.lh" +#include "zodiac.lh" // clickable //#include "hh_tms1k_test.lh" // common test-layout - use external artwork @@ -394,6 +394,17 @@ u8 hh_tms1k_state::read_rotated_inputs(int columns, u8 rowmask) return ret; } +void hh_tms1k_state::switch_change(int sel, u32 mask, bool next) +{ + // config switches (for direct control) + ioport_field *inp = m_inp_matrix[sel]->field(mask); + + if (next && inp->has_next_setting()) + inp->select_next_setting(); + else if (!next && inp->has_previous_setting()) + inp->select_previous_setting(); +} + INPUT_CHANGED_MEMBER(hh_tms1k_state::reset_button) { // when an input is directly wired to MCU INIT pin @@ -1213,7 +1224,7 @@ static INPUT_PORTS_START( zodiac ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") PORT_CHAR(13) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Clear") PORT_CHAR(8) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Clear") PORT_CHAR(8) PORT_START("IN.5") // R8 PORT_CONFNAME( 0x03, 0x01, "Mode") @@ -6724,6 +6735,12 @@ static INPUT_PORTS_START( simon ) PORT_CONFSETTING( 0x04, "2" ) PORT_CONFSETTING( 0x08, "3" ) PORT_CONFSETTING( 0x01, "4" ) + + PORT_START("SWITCH") // fake + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<0>, 0x07) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<0>, 0x07) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<3>, 0x0f) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<3>, 0x0f) INPUT_PORTS_END void simon_state::simon(machine_config &config) @@ -6882,6 +6899,14 @@ static INPUT_PORTS_START( ssimon ) PORT_CONFSETTING( 0x00, "Simple" ) PORT_CONFSETTING( 0x01, "Normal" ) PORT_CONFSETTING( 0x02, "Super" ) + + PORT_START("SWITCH") // fake + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<0>, 0x0f) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<0>, 0x0f) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<4>, 0x0f) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<4>, 0x0f) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<6>, 0x03) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<6>, 0x03) INPUT_PORTS_END void ssimon_state::ssimon(machine_config &config) @@ -8373,8 +8398,6 @@ public: hh_tms1k_state(mconfig, type, tag) { } - TIMER_DEVICE_CALLBACK_MEMBER(show_arm_position); - DECLARE_WRITE16_MEMBER(write_r); DECLARE_WRITE16_MEMBER(write_o); DECLARE_READ8_MEMBER(read_k); @@ -8383,13 +8406,6 @@ public: // handlers -TIMER_DEVICE_CALLBACK_MEMBER(alphie_state::show_arm_position) -{ - // arm position 1(up) to 5(down) - output().set_value("q_pos", 32 - count_leading_zeros(m_inp_matrix[1]->read())); - output().set_value("a_pos", 32 - count_leading_zeros(m_inp_matrix[2]->read())); -} - WRITE16_MEMBER(alphie_state::write_r) { // R1-R5, input mux (using d5 for Vss) @@ -8419,17 +8435,25 @@ READ8_MEMBER(alphie_state::read_k) // config -static const ioport_value alphie_armpos_table[5] = { 0x01, 0x02, 0x04, 0x08, 0x10 }; - static INPUT_PORTS_START( alphie ) PORT_START("IN.0") // K1 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, true) PORT_START("IN.1") // K2 - PORT_BIT( 0x1f, 0x00, IPT_POSITIONAL_V ) PORT_PLAYER(2) PORT_POSITIONS(5) PORT_REMAP_TABLE(alphie_armpos_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Question Arm") + PORT_CONFNAME( 0x1f, 0x01, "Question" ) + PORT_CONFSETTING( 0x01, "1" ) + PORT_CONFSETTING( 0x02, "2" ) + PORT_CONFSETTING( 0x04, "3" ) + PORT_CONFSETTING( 0x08, "4" ) + PORT_CONFSETTING( 0x10, "5" ) PORT_START("IN.2") // K4 - PORT_BIT( 0x1f, 0x00, IPT_POSITIONAL_V ) PORT_POSITIONS(5) PORT_REMAP_TABLE(alphie_armpos_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Answer Arm") + PORT_CONFNAME( 0x1f, 0x01, "Answer" ) + PORT_CONFSETTING( 0x01, "1" ) + PORT_CONFSETTING( 0x02, "2" ) + PORT_CONFSETTING( 0x04, "3" ) + PORT_CONFSETTING( 0x08, "4" ) + PORT_CONFSETTING( 0x10, "5" ) PORT_START("IN.3") // K8 PORT_CONFNAME( 0x0f, 0x01, "Activity" ) @@ -8437,6 +8461,14 @@ static INPUT_PORTS_START( alphie ) PORT_CONFSETTING( 0x02, "Lunar Landing" ) PORT_CONFSETTING( 0x04, "Robot Land" ) PORT_CONFSETTING( 0x08, "Tunes" ) + + PORT_START("SWITCH") // fake + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<1>, 0x1f) PORT_NAME("Question Arm Up") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<1>, 0x1f) PORT_NAME("Question Arm Down") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<2>, 0x1f) PORT_NAME("Answer Arm Up") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<2>, 0x1f) PORT_NAME("Answer Arm Down") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_prev<3>, 0x0f) PORT_NAME("Activity Selector Left") + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, switch_next<3>, 0x0f) PORT_NAME("Activity Selector Right") INPUT_PORTS_END // output PLA is guessed @@ -8455,7 +8487,6 @@ void alphie_state::alphie(machine_config &config) m_maincpu->r().set(FUNC(alphie_state::write_r)); m_maincpu->o().set(FUNC(alphie_state::write_o)); - TIMER(config, "arm_position").configure_periodic(FUNC(alphie_state::show_arm_position), attotime::from_msec(50)); TIMER(config, "display_decay").configure_periodic(FUNC(hh_tms1k_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_alphie); @@ -10326,7 +10357,7 @@ COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, mathmagi_state, emp CONS( 1979, bcheetah, 0, 0, bcheetah, bcheetah, bcheetah_state, empty_init, "Bandai", "System Control Car: Cheetah", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_MECHANICAL ) // *** CONS( 1978, amaztron, 0, 0, amaztron, amaztron, amaztron_state, empty_init, "Coleco", "Amaze-A-Tron", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // *** -COMP( 1979, zodiac, 0, 0, zodiac, zodiac, zodiac_state, empty_init, "Coleco", "Zodiac - The Astrology Computer", MACHINE_SUPPORTS_SAVE ) +COMP( 1979, zodiac, 0, 0, zodiac, zodiac, zodiac_state, empty_init, "Coleco", "Zodiac - The Astrology Computer", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1978, cqback, 0, 0, cqback, cqback, cqback_state, empty_init, "Coleco", "Electronic Quarterback", MACHINE_SUPPORTS_SAVE ) CONS( 1979, h2hfootb, 0, 0, h2hfootb, h2hfootb, h2hfootb_state, empty_init, "Coleco", "Head to Head: Electronic Football", MACHINE_SUPPORTS_SAVE ) CONS( 1979, h2hbaskb, 0, 0, h2hbaskb, h2hbaskb, h2hbaskb_state, empty_init, "Coleco", "Head to Head: Electronic Basketball (TMS1000 version)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/himesiki.cpp b/src/mame/drivers/himesiki.cpp index 11450a4f99c..d785957e74f 100644 --- a/src/mame/drivers/himesiki.cpp +++ b/src/mame/drivers/himesiki.cpp @@ -117,7 +117,7 @@ WRITE8_MEMBER(himesiki_state::himesiki_rombank_w) WRITE8_MEMBER(himesiki_state::himesiki_sound_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_subcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/homedata.cpp b/src/mame/drivers/homedata.cpp index b43a51f46fa..e0d202ed7d9 100644 --- a/src/mame/drivers/homedata.cpp +++ b/src/mame/drivers/homedata.cpp @@ -311,7 +311,7 @@ WRITE8_MEMBER(homedata_state::mrokumei_sound_bank_w) WRITE8_MEMBER(homedata_state::mrokumei_sound_cmd_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -430,7 +430,7 @@ READ8_MEMBER(homedata_state::pteacher_keyboard_r) READ8_MEMBER(homedata_state::pteacher_upd7807_porta_r) { if (!BIT(m_upd7807_portc, 6)) - m_upd7807_porta = m_soundlatch->read(space, 0); + m_upd7807_porta = m_soundlatch->read(); else logerror("%s: read PA with PC *not* clear\n", machine().describe_context()); diff --git a/src/mame/drivers/hotblock.cpp b/src/mame/drivers/hotblock.cpp index c053f266313..edc22b3f467 100644 --- a/src/mame/drivers/hotblock.cpp +++ b/src/mame/drivers/hotblock.cpp @@ -92,7 +92,7 @@ READ8_MEMBER(hotblock_state::video_read) if (m_port0 & 0x20) // port 0 = a8 e8 -- palette { if (offset < 0x200) - return m_palette->read8(space, offset); + return m_palette->read8(offset); return 0; } @@ -130,7 +130,7 @@ WRITE8_MEMBER(hotblock_state::video_write) if (m_port0 & 0x20) // port 0 = a8 e8 -- palette { if (offset < 0x200) - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); } else // port 0 = 88 c8 { diff --git a/src/mame/drivers/hvyunit.cpp b/src/mame/drivers/hvyunit.cpp index 8290f0d6837..fc0b73138ff 100644 --- a/src/mame/drivers/hvyunit.cpp +++ b/src/mame/drivers/hvyunit.cpp @@ -327,10 +327,10 @@ READ8_MEMBER(hvyunit_state::mermaid_p0_r) WRITE8_MEMBER(hvyunit_state::mermaid_p0_w) { if (!BIT(m_mermaid_p[0], 1) && BIT(data, 1)) - m_slavelatch->write(space, 0, m_mermaid_p[1]); + m_slavelatch->write(m_mermaid_p[1]); if (BIT(data, 0) == 0) - m_mermaid_p[1] = m_mermaidlatch->read(space, 0); + m_mermaid_p[1] = m_mermaidlatch->read(); m_mermaid_p[0] = data; } diff --git a/src/mame/drivers/inder.cpp b/src/mame/drivers/inder.cpp index 5ba2087af90..9cfa448e438 100644 --- a/src/mame/drivers/inder.cpp +++ b/src/mame/drivers/inder.cpp @@ -1268,9 +1268,9 @@ WRITE8_MEMBER( inder_state::sndbank_w ) void inder_state::update_mus() { if ((m_sound_addr < 0x40000) && (m_sndbank != 0xff)) - m_13->write_ba(m_p_speech[m_sound_addr]); + m_13->ba_w(m_p_speech[m_sound_addr]); else - m_13->write_ba(0); + m_13->ba_w(0); } WRITE_LINE_MEMBER( inder_state::qc7a_w ) diff --git a/src/mame/drivers/invqix.cpp b/src/mame/drivers/invqix.cpp index 536e7f6e8fc..bfd2ffeba4d 100644 --- a/src/mame/drivers/invqix.cpp +++ b/src/mame/drivers/invqix.cpp @@ -2,7 +2,7 @@ // copyright-holders:R. Belmont /*************************************************************************** - invqix.c + invqix.cpp Space Invaders / Qix Silver Anniversary Edition Taito/Namco America inc. diff --git a/src/mame/drivers/ironhors.cpp b/src/mame/drivers/ironhors.cpp index 421898ca5f9..a5d64a49be4 100644 --- a/src/mame/drivers/ironhors.cpp +++ b/src/mame/drivers/ironhors.cpp @@ -436,7 +436,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::farwest_scanline_tick) READ8_MEMBER(ironhors_state::farwest_soundlatch_r) { - return m_soundlatch->read(m_soundcpu->space(AS_PROGRAM), 0); + return m_soundlatch->read(); } void ironhors_state::farwest(machine_config &config) diff --git a/src/mame/drivers/isbc8010.cpp b/src/mame/drivers/isbc8010.cpp index f6537974f96..d13e49b7fa4 100644 --- a/src/mame/drivers/isbc8010.cpp +++ b/src/mame/drivers/isbc8010.cpp @@ -224,9 +224,9 @@ void isbc8010_state::isbc8010(machine_config &config) // hd6402.read_si_callback().set(FUNC(sdk80_state::nascom1_hd6402_si)); // hd6402.write_so_callback().set(FUNC(sdk80_state::nascom1_hd6402_so)); -// clock_device &uart_clock(CLOCK(config, "uart_clock", (XTAL(16'000'000) / 16) / 256)); -// uart_clock.signal_handler().set("hd6402", FUNC(ay31015_device::write_tcp)); -// uart_clock.signal_handler().append("hd6402", FUNC(ay31015_device::write_rcp)); +// clock_device &uart_clock(CLOCK(config, "uart_clock", (XTAL(16'000'000) / 16) / 256)); +// uart_clock.signal_handler().set("hd6402", FUNC(ay31015_device::write_tcp)); +// uart_clock.signal_handler().append("hd6402", FUNC(ay31015_device::write_rcp)); /* Devices */ // i8279_device &kbdc(I8279(config, "i8279", 3100000)); // based on divider diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp index aa4b51c5d35..79886c8b5f3 100644 --- a/src/mame/drivers/itech8.cpp +++ b/src/mame/drivers/itech8.cpp @@ -814,7 +814,7 @@ WRITE8_MEMBER(itech8_state::gtg2_sound_data_w) ((data & 0x5d) << 1) | ((data & 0x20) >> 3) | ((data & 0x02) << 5); - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); } diff --git a/src/mame/drivers/jangou.cpp b/src/mame/drivers/jangou.cpp index f35b4a257f1..7a5f2409031 100644 --- a/src/mame/drivers/jangou.cpp +++ b/src/mame/drivers/jangou.cpp @@ -260,14 +260,14 @@ READ8_MEMBER(jangou_state::input_system_r) WRITE8_MEMBER(jangou_state::sound_latch_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_cpu_1->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER(jangou_state::sound_latch_r) { m_cpu_1->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return m_soundlatch->read(space, 0); + return m_soundlatch->read(); } /* Jangou HC-55516 CVSD */ diff --git a/src/mame/drivers/joystand.cpp b/src/mame/drivers/joystand.cpp index 633de6a096e..2d6544d7069 100644 --- a/src/mame/drivers/joystand.cpp +++ b/src/mame/drivers/joystand.cpp @@ -106,7 +106,6 @@ public: joystand_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_tmp68301(*this, "tmp68301"), m_palette(*this, "palette"), m_bg15_palette(*this, "bg15_palette"), m_gfxdecode(*this, "gfxdecode"), @@ -142,8 +141,7 @@ protected: private: // devices - required_device<cpu_device> m_maincpu; - required_device<tmp68301_device> m_tmp68301; + required_device<tmp68301_device> m_maincpu; required_device<palette_device> m_palette; required_device<palette_device> m_bg15_palette; required_device<gfxdecode_device> m_gfxdecode; @@ -479,8 +477,6 @@ void joystand_state::joystand_map(address_map &map) map(0xe00020, 0xe00021).r(FUNC(joystand_state::e00020_r)); // master slot map(0xe80040, 0xe8005f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write)).umask16(0x00ff); - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -584,21 +580,17 @@ void joystand_state::machine_reset() INTERRUPT_GEN_MEMBER(joystand_state::joystand_interrupt) { // VBlank is connected to INT1 (external interrupts pin 1) - m_tmp68301->external_interrupt_1(); + m_maincpu->external_interrupt_1(); } void joystand_state::joystand(machine_config &config) { // basic machine hardware - M68000(config, m_maincpu, XTAL(16'000'000)); // !! TMP68301 !! + TMP68301(config, m_maincpu, XTAL(16'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &joystand_state::joystand_map); m_maincpu->set_vblank_int("screen", FUNC(joystand_state::joystand_interrupt)); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - TMP68301(config, m_tmp68301, 0); - m_tmp68301->set_cputag(m_maincpu); - m_tmp68301->in_parallel_callback().set(FUNC(joystand_state::eeprom_r)); - m_tmp68301->out_parallel_callback().set(FUNC(joystand_state::eeprom_w)); + m_maincpu->in_parallel_callback().set(FUNC(joystand_state::eeprom_r)); + m_maincpu->out_parallel_callback().set(FUNC(joystand_state::eeprom_w)); // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); diff --git a/src/mame/drivers/kas89.cpp b/src/mame/drivers/kas89.cpp index 5de1f4a17af..8cb66d12e2b 100644 --- a/src/mame/drivers/kas89.cpp +++ b/src/mame/drivers/kas89.cpp @@ -389,14 +389,14 @@ WRITE8_MEMBER(kas89_state::sound_comm_w) else { - m_soundlatch->write(space, 0, data); - m_audiocpu->set_input_line(0, ASSERT_LINE ); + m_soundlatch->write(data); + m_audiocpu->set_input_line(0, ASSERT_LINE); } } WRITE8_MEMBER(kas89_state::int_ack_w) { - m_audiocpu->set_input_line(0, CLEAR_LINE ); + m_audiocpu->set_input_line(0, CLEAR_LINE); } diff --git a/src/mame/drivers/kchamp.cpp b/src/mame/drivers/kchamp.cpp index f207a1dda29..8c4a19ef8b3 100644 --- a/src/mame/drivers/kchamp.cpp +++ b/src/mame/drivers/kchamp.cpp @@ -681,6 +681,92 @@ ROM_START( kchampvs2 ) ROM_LOAD( "lt.k8", 0x0200, 0x0100, CRC(ba4a5651) SHA1(77e81bd64ab59a7466d20eabdff4be241e963c52) ) /* blue */ ROM_END +// This version has a mix of the "Karate Champ (US VS version, set 1)" ROMs and a few ROMs unique to "Taisen Karate Dou (Japan VS version)" along with 1 completely unique program ROM. +// The only difference is instead of "My hero" as found in the later US sets it says "My hero deserves the fair". +ROM_START( kchampvs3 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "bs24.d13", 0x00000, 0x02000, CRC(829da69b) SHA1(3266e7686e537f34ee5ce4cccc349eb12fc65038) ) + ROM_LOAD( "bs23.d11", 0x02000, 0x02000, CRC(091f810e) SHA1(283edb08ce106835185a1c2d6b88f7544d75f3b4) ) + ROM_LOAD( "bs22.d10", 0x04000, 0x02000, CRC(d4df2a52) SHA1(60d6cb1cb51c6f80a0f88913d4152ab8bda752d6) ) + ROM_LOAD( "bs21.d8", 0x06000, 0x02000, CRC(80839912) SHA1(4a3c6ad8eba756ae8e89faf42b72b41f85731e67) ) // only unique ROM + ROM_LOAD( "bs20.d7", 0x08000, 0x02000, CRC(623a467b) SHA1(5f150c67632f8e32769b75aa0615d0eb018afdc4) ) + ROM_LOAD( "bs19.d6", 0x0a000, 0x02000, CRC(43e196c4) SHA1(8029798ea0a560603c3dcde56db5a1ccde58c514) ) + ROM_CONTINUE( 0x0e000, 0x02000 ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_LOAD( "bs18.d4", 0x00000, 0x02000, CRC(eaa646eb) SHA1(cbd48f4d5d225b71c2dd0b14f420838561e3f83e) ) + ROM_LOAD( "bs17.d2", 0x02000, 0x02000, CRC(d71031ad) SHA1(b168f4ef4feb4195305404df699acecb731eab02) ) + ROM_LOAD( "bs16.d1", 0x04000, 0x02000, CRC(6f811c43) SHA1(1d33ac8129562ab709bd7396b4c2457b6db99277) ) + + ROM_REGION( 0x08000, "gfx1", 0 ) + ROM_LOAD( "bs12.k1", 0x00000, 0x02000, CRC(4c574ecd) SHA1(86914eef33da73463ba6261eecae75209d24fac1) ) + ROM_LOAD( "bs13.k3", 0x02000, 0x02000, CRC(750b66af) SHA1(c7824994b977d4e846f3ecadfcfc51331f52b6f4) ) + ROM_LOAD( "bs14.k5", 0x04000, 0x02000, CRC(9ad6227c) SHA1(708af5e70927040cf7f2ae6f792344c19099530c) ) + ROM_LOAD( "bs15.k6", 0x06000, 0x02000, CRC(3b6d5de5) SHA1(288fffcbc9369db5c75e7e0d6181612de6f12da3) ) + + ROM_REGION( 0x18000, "gfx2", 0 ) // 00, 06, 03 and 09 match the karatevs set + ROM_LOAD( "bs00.a1", 0x00000, 0x02000, CRC(c46a8b88) SHA1(a47e56a6dc7f36b896b8156e77a1da7e8be2332e) ) + ROM_LOAD( "bs06.c1", 0x02000, 0x02000, CRC(cf8982ff) SHA1(aafb249503ad51f64b1f31ea2d869dfc0e065d19) ) + ROM_LOAD( "bs01.a3", 0x04000, 0x02000, CRC(b4842ea9) SHA1(471475f65edbd292b9162ad50e5cb0c7144845b0) ) + ROM_LOAD( "bs07.c3", 0x06000, 0x02000, CRC(8cd166a5) SHA1(4b623c4c0025d75b3ed9746f8b6730bf3e65d85a) ) + ROM_LOAD( "bs02.a5", 0x08000, 0x02000, CRC(4cbd3aa3) SHA1(a9a683dcc4f52b18450659a20434a4d2a7b411d9) ) + ROM_LOAD( "bs08.c5", 0x0a000, 0x02000, CRC(6be342a6) SHA1(0b8ac7ef7c6a6464fbc027a9fd17fa7ce1ffd962) ) + ROM_LOAD( "bs03.a6", 0x0c000, 0x02000, CRC(bde8a52b) SHA1(1a0800472caf8c79a15cc977dad1a7bc97c74b2b) ) + ROM_LOAD( "bs09.c6", 0x0e000, 0x02000, CRC(e9a5f945) SHA1(e6b21912bee97de06819c8ac85a45bbc70030f88) ) + ROM_LOAD( "bs04.a8", 0x10000, 0x02000, CRC(7346db8a) SHA1(d2b2c1700ae0ff9c614a9981a3da3d69879e9f25) ) + ROM_LOAD( "bs10.c8", 0x12000, 0x02000, CRC(b78714fc) SHA1(4df7f15c37d56a9d66d0049aad65b32063e5c29a) ) + ROM_LOAD( "bs05.a10", 0x14000, 0x02000, CRC(b2557102) SHA1(ec4285029fc3ee1ad0adb05f363b234c67f8903d) ) + ROM_LOAD( "bs11.c10", 0x16000, 0x02000, CRC(c85aba0e) SHA1(4be21b38623c2a8ae7f1e7397fb002e4cb9e4614) ) + + ROM_REGION( 0x0300, "proms", 0 ) + ROM_LOAD( "br27.k10", 0x0000, 0x0100, CRC(f683c54a) SHA1(92893990456b92f04a2be98b8e9626e97b7a2562) ) /* red */ + ROM_LOAD( "br26.k9", 0x0100, 0x0100, CRC(3ddbb6c4) SHA1(0eca5594d6812bc79f8b78f83fe003877d20c973) ) /* green */ + ROM_LOAD( "br25.k8", 0x0200, 0x0100, CRC(ba4a5651) SHA1(77e81bd64ab59a7466d20eabdff4be241e963c52) ) /* blue */ +ROM_END + +// This version has a mix of the "Karate Champ (US VS version, set 1)" ROMs and a few ROMs unique to "Taisen Karate Dou (Japan VS version)". +// It displays the dialog balloon in red with a boat below it. +ROM_START( kchampvs4 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "bs24.d13", 0x00000, 0x02000, CRC(829da69b) SHA1(3266e7686e537f34ee5ce4cccc349eb12fc65038) ) + ROM_LOAD( "bs23.d11", 0x02000, 0x02000, CRC(091f810e) SHA1(283edb08ce106835185a1c2d6b88f7544d75f3b4) ) + ROM_LOAD( "bs22.d10", 0x04000, 0x02000, CRC(d4df2a52) SHA1(60d6cb1cb51c6f80a0f88913d4152ab8bda752d6) ) + ROM_LOAD( "bs21.d8", 0x06000, 0x02000, CRC(3d4ef0da) SHA1(228c8e47bb7123b69746506402edb875a43d7af5) ) + ROM_LOAD( "bs20.d7", 0x08000, 0x02000, CRC(623a467b) SHA1(5f150c67632f8e32769b75aa0615d0eb018afdc4) ) + ROM_LOAD( "bs19.d6", 0x0a000, 0x02000, CRC(43e196c4) SHA1(8029798ea0a560603c3dcde56db5a1ccde58c514) ) + ROM_CONTINUE( 0x0e000, 0x02000 ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ + ROM_LOAD( "bs18.d4", 0x00000, 0x02000, CRC(eaa646eb) SHA1(cbd48f4d5d225b71c2dd0b14f420838561e3f83e) ) + ROM_LOAD( "bs17.d2", 0x02000, 0x02000, CRC(d71031ad) SHA1(b168f4ef4feb4195305404df699acecb731eab02) ) + ROM_LOAD( "bs16.d1", 0x04000, 0x02000, CRC(6f811c43) SHA1(1d33ac8129562ab709bd7396b4c2457b6db99277) ) + + ROM_REGION( 0x08000, "gfx1", 0 ) + ROM_LOAD( "bs12.k1", 0x00000, 0x02000, CRC(4c574ecd) SHA1(86914eef33da73463ba6261eecae75209d24fac1) ) + ROM_LOAD( "bs13.k3", 0x02000, 0x02000, CRC(750b66af) SHA1(c7824994b977d4e846f3ecadfcfc51331f52b6f4) ) + ROM_LOAD( "bs14.k5", 0x04000, 0x02000, CRC(9ad6227c) SHA1(708af5e70927040cf7f2ae6f792344c19099530c) ) + ROM_LOAD( "bs15.k6", 0x06000, 0x02000, CRC(3b6d5de5) SHA1(288fffcbc9369db5c75e7e0d6181612de6f12da3) ) + + ROM_REGION( 0x18000, "gfx2", 0 ) // 00, 06, 03 and 09 match the karatevs set + ROM_LOAD( "bs00.a1", 0x00000, 0x02000, CRC(c46a8b88) SHA1(a47e56a6dc7f36b896b8156e77a1da7e8be2332e) ) + ROM_LOAD( "bs06.c1", 0x02000, 0x02000, CRC(cf8982ff) SHA1(aafb249503ad51f64b1f31ea2d869dfc0e065d19) ) + ROM_LOAD( "bs01.a3", 0x04000, 0x02000, CRC(b4842ea9) SHA1(471475f65edbd292b9162ad50e5cb0c7144845b0) ) + ROM_LOAD( "bs07.c3", 0x06000, 0x02000, CRC(8cd166a5) SHA1(4b623c4c0025d75b3ed9746f8b6730bf3e65d85a) ) + ROM_LOAD( "bs02.a5", 0x08000, 0x02000, CRC(4cbd3aa3) SHA1(a9a683dcc4f52b18450659a20434a4d2a7b411d9) ) + ROM_LOAD( "bs08.c5", 0x0a000, 0x02000, CRC(6be342a6) SHA1(0b8ac7ef7c6a6464fbc027a9fd17fa7ce1ffd962) ) + ROM_LOAD( "bs03.a6", 0x0c000, 0x02000, CRC(bde8a52b) SHA1(1a0800472caf8c79a15cc977dad1a7bc97c74b2b) ) + ROM_LOAD( "bs09.c6", 0x0e000, 0x02000, CRC(e9a5f945) SHA1(e6b21912bee97de06819c8ac85a45bbc70030f88) ) + ROM_LOAD( "bs04.a8", 0x10000, 0x02000, CRC(7346db8a) SHA1(d2b2c1700ae0ff9c614a9981a3da3d69879e9f25) ) + ROM_LOAD( "bs10.c8", 0x12000, 0x02000, CRC(b78714fc) SHA1(4df7f15c37d56a9d66d0049aad65b32063e5c29a) ) + ROM_LOAD( "bs05.a10", 0x14000, 0x02000, CRC(b2557102) SHA1(ec4285029fc3ee1ad0adb05f363b234c67f8903d) ) + ROM_LOAD( "bs11.c10", 0x16000, 0x02000, CRC(c85aba0e) SHA1(4be21b38623c2a8ae7f1e7397fb002e4cb9e4614) ) + + ROM_REGION( 0x0300, "proms", 0 ) + ROM_LOAD( "br27.k10", 0x0000, 0x0100, CRC(f683c54a) SHA1(92893990456b92f04a2be98b8e9626e97b7a2562) ) /* red */ + ROM_LOAD( "br26.k9", 0x0100, 0x0100, CRC(3ddbb6c4) SHA1(0eca5594d6812bc79f8b78f83fe003877d20c973) ) /* green */ + ROM_LOAD( "br25.k8", 0x0200, 0x0100, CRC(ba4a5651) SHA1(77e81bd64ab59a7466d20eabdff4be241e963c52) ) /* blue */ +ROM_END + ROM_START( karatevs ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "br24.d13", 0x00000, 0x02000, CRC(ea9cda49) SHA1(7d753a8d391418d0fe5231eb88b3627f7d3fd99e) ) @@ -772,4 +858,6 @@ GAME( 1984, kchamp, 0, kchamp, kchamp, kchamp_state, empty_init, GAME( 1984, karatedo, kchamp, kchamp, kchamp, kchamp_state, empty_init, ROT90, "Data East Corporation", "Karate Dou (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1984, kchampvs, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East USA", "Karate Champ (US VS version, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1984, kchampvs2, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs2, ROT90, "Data East USA", "Karate Champ (US VS version, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, kchampvs3, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East USA", "Karate Champ (US VS version, set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, kchampvs4, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East USA", "Karate Champ (US VS version, set 4)", MACHINE_SUPPORTS_SAVE ) GAME( 1984, karatevs, kchamp, kchampvs, kchampvs, kchamp_state, init_kchampvs, ROT90, "Data East Corporation", "Taisen Karate Dou (Japan VS version)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/kickgoal.cpp b/src/mame/drivers/kickgoal.cpp index 4520698d0c7..96c206769aa 100644 --- a/src/mame/drivers/kickgoal.cpp +++ b/src/mame/drivers/kickgoal.cpp @@ -385,7 +385,7 @@ WRITE8_MEMBER(kickgoal_state::soundio_port_c_w) { if (!(data & 0x10)) { - m_pic_portb = m_soundlatch->read(space, 0); + m_pic_portb = m_soundlatch->read(); m_sound_command_sent = 0x00; } } @@ -412,7 +412,7 @@ WRITE8_MEMBER(kickgoal_state::soundio_port_c_w) WRITE16_MEMBER(kickgoal_state::to_pic_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_sound_command_sent = 0x20; } diff --git a/src/mame/drivers/kingobox.cpp b/src/mame/drivers/kingobox.cpp index 575bd849403..68d6f3776ae 100644 --- a/src/mame/drivers/kingobox.cpp +++ b/src/mame/drivers/kingobox.cpp @@ -47,7 +47,7 @@ void kingofb_state::scroll_interrupt_w(uint8_t data) void kingofb_state::sound_command_w(uint8_t data) { - m_soundlatch->write(machine().dummy_space(), 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } diff --git a/src/mame/drivers/kingpin.cpp b/src/mame/drivers/kingpin.cpp index 0273e41542a..b0cf004626e 100644 --- a/src/mame/drivers/kingpin.cpp +++ b/src/mame/drivers/kingpin.cpp @@ -69,7 +69,7 @@ private: WRITE8_MEMBER(kingpin_state::sound_nmi_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/kncljoe.cpp b/src/mame/drivers/kncljoe.cpp index 74d90fec1c6..670a8c18638 100644 --- a/src/mame/drivers/kncljoe.cpp +++ b/src/mame/drivers/kncljoe.cpp @@ -39,7 +39,7 @@ Updates: WRITE8_MEMBER(kncljoe_state::sound_cmd_w) { if ((data & 0x80) == 0) - m_soundlatch->write(space, 0, data & 0x7f); + m_soundlatch->write(data & 0x7f); else m_soundcpu->set_input_line(0, ASSERT_LINE); } diff --git a/src/mame/drivers/krz2000.cpp b/src/mame/drivers/krz2000.cpp index fe2b785a0be..71e62fb3c10 100644 --- a/src/mame/drivers/krz2000.cpp +++ b/src/mame/drivers/krz2000.cpp @@ -65,17 +65,12 @@ void k2000_state::k2000_map(address_map &map) map(0x000000, 0x0fffff).rom().region("maincpu", 0); map(0x100000, 0x11ffff).ram(); // is this area banked between RAM (write of 0x20 to 7e0001) vs setup/SU ROM (write of 0x30 to 7e0001) ? // byte writes to 7e0000-7e0001 - unknown, possibly banking or status? - map(0xfffc00, 0xffffff).rw("tmp68301", FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } void k2000_state::k2000(machine_config &config) { - M68301(config, m_maincpu, XTAL(12'000'000)); + TMP68301(config, m_maincpu, XTAL(12'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &k2000_state::k2000_map); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - tmp68301_device &tmp68301(TMP68301(config, "tmp68301", 0)); - tmp68301.set_cputag(m_maincpu); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); diff --git a/src/mame/drivers/ksayakyu.cpp b/src/mame/drivers/ksayakyu.cpp index f0ca353b282..2bb6b96cad4 100644 --- a/src/mame/drivers/ksayakyu.cpp +++ b/src/mame/drivers/ksayakyu.cpp @@ -93,7 +93,7 @@ WRITE8_MEMBER(ksayakyu_state::bank_select_w) WRITE8_MEMBER(ksayakyu_state::latch_w) { m_sound_status &= ~0x80; - m_soundlatch->write(space, 0, data | 0x80); + m_soundlatch->write(data | 0x80); } READ8_MEMBER(ksayakyu_state::sound_status_r) @@ -104,7 +104,7 @@ READ8_MEMBER(ksayakyu_state::sound_status_r) WRITE8_MEMBER(ksayakyu_state::tomaincpu_w) { m_sound_status |= 0x80; - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); } READ8_MEMBER(ksayakyu_state::int_ack_r) diff --git a/src/mame/drivers/ladyfrog.cpp b/src/mame/drivers/ladyfrog.cpp index 718eabb91b7..8bbe47e89fa 100644 --- a/src/mame/drivers/ladyfrog.cpp +++ b/src/mame/drivers/ladyfrog.cpp @@ -89,7 +89,7 @@ TIMER_CALLBACK_MEMBER(ladyfrog_state::nmi_callback) WRITE8_MEMBER(ladyfrog_state::sound_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(ladyfrog_state::nmi_callback),this), data); } diff --git a/src/mame/drivers/lasso.cpp b/src/mame/drivers/lasso.cpp index f5ecc749f62..2b4be527c75 100644 --- a/src/mame/drivers/lasso.cpp +++ b/src/mame/drivers/lasso.cpp @@ -52,7 +52,7 @@ INPUT_CHANGED_MEMBER(lasso_state::coin_inserted) /* Write to the sound latch and generate an IRQ on the sound CPU */ WRITE8_MEMBER(lasso_state::sound_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/limenko.cpp b/src/mame/drivers/limenko.cpp index bb0fe8a026e..6d7c3a7b9b2 100644 --- a/src/mame/drivers/limenko.cpp +++ b/src/mame/drivers/limenko.cpp @@ -198,7 +198,7 @@ WRITE8_MEMBER(limenko_state::qs1000_p3_w) membank("qs1000:bank")->set_entry(data & 0x07); if (!BIT(data, 5)) - m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5)); + m_soundlatch->acknowledge_w(); } /***************************************************************************************************** @@ -273,7 +273,7 @@ READ8_MEMBER(limenko_state::spotty_sound_r) // check m_spotty_sound_cmd bits... if(m_spotty_sound_cmd == 0xf7) - return m_soundlatch->read(space,0); + return m_soundlatch->read(); else return m_oki->read(); } diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp index 04202e11ff0..86448a1593b 100644 --- a/src/mame/drivers/looping.cpp +++ b/src/mame/drivers/looping.cpp @@ -419,7 +419,7 @@ WRITE_LINE_MEMBER(looping_state::looping_spcint) WRITE8_MEMBER(looping_state::looping_soundlatch_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(INT_9980A_LEVEL2, ASSERT_LINE); } diff --git a/src/mame/drivers/lordgun.cpp b/src/mame/drivers/lordgun.cpp index 575d80e3a3c..5e488dee5ac 100644 --- a/src/mame/drivers/lordgun.cpp +++ b/src/mame/drivers/lordgun.cpp @@ -272,8 +272,8 @@ READ16_MEMBER(lordgun_state::lordgun_gun_1_y_r) WRITE16_MEMBER(lordgun_state::soundlatch_w) { - if (ACCESSING_BITS_0_7) m_soundlatch->write(space, 0, (data >> 0) & 0xff); - if (ACCESSING_BITS_8_15) m_soundlatch2->write(space, 0, (data >> 8) & 0xff); + if (ACCESSING_BITS_0_7) m_soundlatch->write((data >> 0) & 0xff); + if (ACCESSING_BITS_8_15) m_soundlatch2->write((data >> 8) & 0xff); m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/ltcasino.cpp b/src/mame/drivers/ltcasino.cpp index e6fb14e2898..65d28465663 100644 --- a/src/mame/drivers/ltcasino.cpp +++ b/src/mame/drivers/ltcasino.cpp @@ -1,18 +1,17 @@ -// license:BSD-3-Clause -// copyright-holders:Pierpaolo Prazzoli, David Haywood -/* +// license: BSD-3-Clause +// copyright-holders: Pierpaolo Prazzoli, David Haywood, Dirk Best +/*************************************************************************** -Little Casino -Mini Vegas 4in1 + Little Casino + Mini Vegas 4in1 -Non-Payout 'Gambling' style games. + Non-Payout 'Gambling' style games. -TODO: + TODO: + - color version of the first version is undumped? + - figure out the rest of the dipswitches + - keyboard -inputs (dips multiplexed?) -colours (there are 2 flyers which show different colours?) -hook up TMS9937 and 2 x 6821 PIAs -etc. Mini Vegas CC-089 (c) Entertainment Enterprises Ltd. 1983 @@ -53,60 +52,238 @@ Other: Hitachi HD46821P 1MHz NMOS Peripheral Interface Adapter (PIA) x 2 D1 - Power On Diode 44 pin edge connector -*/ + +***************************************************************************/ #include "emu.h" #include "cpu/m6502/m6502.h" +#include "machine/6821pia.h" #include "sound/ay8910.h" +#include "video/tms9927.h" #include "emupal.h" #include "screen.h" #include "speaker.h" +#include "ltcasino.lh" +#include "ltcasinn.lh" +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + class ltcasino_state : public driver_device { public: ltcasino_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_tile_num_ram(*this, "tile_nuram"), - m_tile_atr_ram(*this, "tile_atr_ram"), m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode") + m_pia(*this, "pia%u", 0U), + m_vtc(*this, "vtc"), + m_video_ram(*this, "video_ram"), + m_attribute_ram(*this, "attribute_ram"), + m_gfxdecode(*this, "gfxdecode"), + m_lamps(*this, "button_%u", 0U), + m_tilemap(nullptr) { } void init_mv4in1(); - void ltcasino(machine_config &config); -protected: - virtual void video_start() override; + void ltcasino(machine_config &config); + void ltcasinn(machine_config &config); private: - required_shared_ptr<uint8_t> m_tile_num_ram; - required_shared_ptr<uint8_t> m_tile_atr_ram; required_device<cpu_device> m_maincpu; + required_device_array<pia6821_device, 2> m_pia; + required_device<crt5037_device> m_vtc; + required_shared_ptr<uint8_t> m_video_ram; + required_shared_ptr<uint8_t> m_attribute_ram; required_device<gfxdecode_device> m_gfxdecode; + output_finder<5> m_lamps; tilemap_t *m_tilemap; - DECLARE_WRITE8_MEMBER(tile_num_w); - DECLARE_WRITE8_MEMBER(tile_atr_w); + void main_map(address_map &map); - TILE_GET_INFO_MEMBER(get_tile_info); - void ltcasino_palette(palette_device &palette) const; + void ltcasinn_palette(palette_device &palette) const; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TILE_GET_INFO_MEMBER(ltcasino_tile_info); + TILE_GET_INFO_MEMBER(ltcasinn_tile_info); - void main_map(address_map &map); + void machine_start_ltcasino(); + void machine_start_ltcasinn(); + + DECLARE_WRITE8_MEMBER(output_r_w); + DECLARE_WRITE8_MEMBER(output_t_w); }; -/* Video */ +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void ltcasino_state::main_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x07ff).ram(); + map(0x8000, 0xcfff).rom(); + map(0xd000, 0xd7ff).ram().share(m_video_ram); + map(0xe000, 0xe7ff).ram().share(m_attribute_ram); + map(0xec00, 0xec03).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xec10, 0xec13).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xec20, 0xec21).r("aysnd", FUNC(ay8910_device::data_r)); + map(0xec20, 0xec21).w("aysnd", FUNC(ay8910_device::data_address_w)); + map(0xec30, 0xec3f).rw("vtc", FUNC(crt5037_device::read), FUNC(crt5037_device::write)); + map(0xf000, 0xffff).rom(); +} + + +//************************************************************************** +// INPUT PORT DEFINITIONS +//************************************************************************** + +static INPUT_PORTS_START( ltcasino ) + PORT_START("COIN") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1) PORT_WRITE_LINE_DEVICE_MEMBER("pia0", pia6821_device, ca1_w) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN2) PORT_WRITE_LINE_DEVICE_MEMBER("pia0", pia6821_device, cb1_w) + + PORT_START("Q") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1) PORT_NAME("Button 1") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2) PORT_NAME("Button 2") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3) PORT_NAME("Button 3") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4) PORT_NAME("Button 4") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5) PORT_NAME("Button 5") + PORT_DIPNAME(0x20, 0x00, "Enable Craps") // off to enter service + PORT_DIPSETTING( 0x20, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME(0x40, 0x00, "Enable Poker") // off to enter service + PORT_DIPSETTING( 0x40, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME(0x80, 0x00, "Enable Black Jack") // off to enter service + PORT_DIPSETTING( 0x80, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + + PORT_START("S") + PORT_DIPUNKNOWN_DIPLOC(0x01, IP_ACTIVE_LOW, "DSW3:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, IP_ACTIVE_LOW, "DSW3:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, IP_ACTIVE_LOW, "DSW3:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, IP_ACTIVE_LOW, "DSW3:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "DSW3:5") + PORT_DIPNAME(0x60, 0x00, DEF_STR( Service_Mode )) + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x20, DEF_STR( Off )) + PORT_DIPSETTING( 0x40, DEF_STR( Off )) + PORT_DIPSETTING( 0x60, DEF_STR( On )) + PORT_DIPLOCATION("DSW3:6,7") + PORT_DIPNAME(0x80, 0x00, DEF_STR( Demo_Sounds )) + PORT_DIPSETTING( 0x80, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPLOCATION("DSW3:8") + + PORT_START("A") + PORT_DIPNAME(0x03, 0x03, "Hands to Start") + PORT_DIPSETTING( 0x03, "3") + PORT_DIPSETTING( 0x02, "4") + PORT_DIPSETTING( 0x01, "5") + PORT_DIPSETTING( 0x00, "6") + PORT_DIPLOCATION("A:1,2") + PORT_DIPNAME(0x0c, 0x0c, DEF_STR( Coinage )) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_2C )) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C )) + PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C )) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C )) + PORT_DIPLOCATION("A:3,4") + PORT_DIPNAME(0x10, 0x10, "Coin Limit") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x10, DEF_STR( On )) // limits to 15 coins + PORT_DIPLOCATION("A:5") + PORT_DIPNAME(0x20, 0x00, DEF_STR( Unknown )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) // needs to be 0 or ltcasinn can reset on coin-up + PORT_DIPSETTING( 0x20, DEF_STR( Off )) + PORT_DIPLOCATION("A:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, IP_ACTIVE_LOW, "A:7") + PORT_DIPNAME(0x80, 0x80, "Screen Mode") + PORT_DIPSETTING( 0x80, "60 Hz") + PORT_DIPSETTING( 0x00, "50 Hz") + PORT_DIPLOCATION("A:8") + + PORT_START("B") + PORT_DIPNAME(0x01, 0x01, "Show High Scores") // When it's OFF, it doesn't show or allow High Scores + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x01, DEF_STR( On )) + PORT_DIPLOCATION("B:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, IP_ACTIVE_LOW, "B:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, IP_ACTIVE_LOW, "B:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, IP_ACTIVE_LOW, "B:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "B:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, IP_ACTIVE_LOW, "B:6") + PORT_DIPNAME(0x40, 0x40, "Bonus Hand") + PORT_DIPSETTING( 0x40, "100000 & 200000") + PORT_DIPSETTING( 0x00, DEF_STR( None )) + PORT_DIPLOCATION("B:7") + PORT_DIPNAME(0x80, 0x80, "Demo") // some kind of demo play? + PORT_DIPSETTING( 0x80, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPLOCATION("B:8") +INPUT_PORTS_END + +static INPUT_PORTS_START( ltcasinn ) + PORT_INCLUDE(ltcasino) + + PORT_MODIFY("COIN") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("B") + PORT_DIPNAME(0x02, 0x02, "Memory Test") // tests d000 to d7ff + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x02, DEF_STR( On )) + PORT_DIPLOCATION("B:2") + + PORT_MODIFY("S") + PORT_DIPNAME(0x01, 0x01, "Keyboard") + PORT_DIPSETTING( 0x01, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPLOCATION("DSW3:1") +INPUT_PORTS_END + +static INPUT_PORTS_START( mv4in1 ) + PORT_INCLUDE(ltcasino) + + PORT_MODIFY("Q") + PORT_DIPNAME(0x20, 0x00, "Enable Dice") // must be off to enter service + PORT_DIPSETTING( 0x20, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME(0x40, 0x00, "Enable Poker") // must be off to enter service + PORT_DIPSETTING( 0x40, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME(0x80, 0x00, "Enable 21") // must be off to enter service + PORT_DIPSETTING( 0x80, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + + PORT_MODIFY("S") + PORT_DIPNAME(0x01, 0x01, "Keyboard") + PORT_DIPSETTING( 0x01, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPLOCATION("DSW3:1") +INPUT_PORTS_END + + +//************************************************************************** +// VIDEO EMULATION +//************************************************************************** -void ltcasino_state::ltcasino_palette(palette_device &palette) const +void ltcasino_state::ltcasinn_palette(palette_device &palette) const { - for (int i = 0; i < 64; i++) + for (int i = 0; i < 8; i++) { - palette.set_pen_color(2*i+0, pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1)); - palette.set_pen_color(2*i+1, pal1bit(i >> 3), pal1bit(i >> 5), pal1bit(i >> 4)); + // basic 3 bit palette + palette.set_indirect_color(i, rgb_t(pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1))); + + // setup pen colors for the drawgfx system + for (int j = 0; j < 8; j++) + { + palette.set_pen_indirect((j << 4) | (i << 1) | 0, i); + palette.set_pen_indirect((j << 4) | (i << 1) | 1, j); + } } } @@ -116,676 +293,178 @@ void ltcasino_state::ltcasino_palette(palette_device &palette) const ---- x--- unknown (used by ltcasino) ---- -xxx background color */ -TILE_GET_INFO_MEMBER(ltcasino_state::get_tile_info) +TILE_GET_INFO_MEMBER(ltcasino_state::ltcasino_tile_info) { - int tileno = m_tile_num_ram[tile_index]; - // TODO: wtf +1 on attribute offset otherwise glitches occurs on left side of objects? - int colour = m_tile_atr_ram[(tile_index+1) & 0x7ff]; + uint16_t code = m_video_ram[tile_index]; + // +1 on attribute offset otherwise glitches occurs on left side of objects? + uint8_t attr = m_attribute_ram[(tile_index + 1) & 0x7ff]; - tileno += (colour & 0x80) << 1; + code |= BIT(attr, 7) << 8; - SET_TILE_INFO_MEMBER(0,tileno,((colour & 0x70) >> 1) | (colour & 7),0); + SET_TILE_INFO_MEMBER(0, code, 0, 0); } -void ltcasino_state::video_start() +TILE_GET_INFO_MEMBER(ltcasino_state::ltcasinn_tile_info) { - m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::get_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,64,32); + uint16_t code = m_video_ram[tile_index]; + // +1 on attribute offset otherwise glitches occurs on left side of objects? + uint8_t attr = m_attribute_ram[(tile_index + 1) & 0x7ff]; + + code |= BIT(attr, 7) << 8; + + SET_TILE_INFO_MEMBER(0, code, ((attr & 0x70) >> 1) | (attr & 7), 0); } uint32_t ltcasino_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - m_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_tilemap->mark_all_dirty(); + m_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; } -WRITE8_MEMBER(ltcasino_state::tile_num_w) +static const gfx_layout tiles8x8_layout = { - m_tile_num_ram[offset] = data; - m_tilemap->mark_tile_dirty(offset); -} + 8,8, + RGN_FRAC(1,1), + 1, + { 0 }, + { 7, 6, 5, 4, 3, 2, 1, 0 }, + { STEP8(0,8) }, + 8*8 +}; -WRITE8_MEMBER(ltcasino_state::tile_atr_w) -{ - m_tile_atr_ram[offset] = data; - m_tilemap->mark_tile_dirty((offset + 1) & 0x7ff); -} +static GFXDECODE_START( gfx_ltcasino ) + GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 1) +GFXDECODE_END +static GFXDECODE_START( gfx_ltcasinn ) + GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 64) +GFXDECODE_END -void ltcasino_state::main_map(address_map &map) + +//************************************************************************** +// MACHINE EMULATION +//************************************************************************** + +void ltcasino_state::init_mv4in1() { - map(0x0000, 0x7fff).ram(); - map(0x8000, 0xcfff).rom(); - map(0xd000, 0xd7ff).ram().w(FUNC(ltcasino_state::tile_num_w)).share(m_tile_num_ram); - map(0xd800, 0xdfff).ram(); - map(0xe000, 0xe7ff).ram().w(FUNC(ltcasino_state::tile_atr_w)).share(m_tile_atr_ram); - map(0xe800, 0xebff).ram(); - - map(0xec00, 0xec00).portr("IN0"); // PIA 6821 n. 1 - map(0xec01, 0xec01).portr("IN1"); - map(0xec02, 0xec02).portr("IN2"); - map(0xec03, 0xec03).portr("IN3"); - map(0xec10, 0xec10).portr("IN4"); // PIA 6821 n. 2 - map(0xec12, 0xec12).portr("IN5"); + uint8_t *rom = memregion("maincpu")->base(); + for (int i = 0; i < 0x10000; i++) + rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0); +} - map(0xec20, 0xec21).r("aysnd", FUNC(ay8910_device::data_r)); - map(0xec20, 0xec21).w("aysnd", FUNC(ay8910_device::data_address_w)); - map(0xec30, 0xec3f).ram(); // TMS9937 - map(0xec3e, 0xec3e).nopr(); //not used - map(0xf000, 0xffff).rom(); +void ltcasino_state::machine_start_ltcasino() +{ + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::ltcasino_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_lamps.resolve(); } +void ltcasino_state::machine_start_ltcasinn() +{ + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::ltcasinn_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_lamps.resolve(); +} -static INPUT_PORTS_START( ltcasino ) - PORT_START("IN0") /* Q in service */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) - PORT_DIPNAME( 0x20, 0x00, "Enable Craps" ) //off to enter service - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, "Enable Poker" ) //off to enter service - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Enable Black Jack" ) //off to enter service - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN1") - PORT_DIPNAME( 0x01, 0x00, "1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) - - PORT_START("IN2") /* R in service */ - PORT_DIPNAME( 0x01, 0x00, "2" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN3") - PORT_DIPNAME( 0x01, 0x00, "3" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "?" ) //set this LOW after insert a coin - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 ) - - PORT_START("IN4") /* S in service */ - PORT_DIPNAME( 0x01, 0x00, "4" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) //off to enter service - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_SERVICE( 0x40, IP_ACTIVE_HIGH ) //service? - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN5") /* T in service */ - PORT_DIPNAME( 0x01, 0x00, "5" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN6") // B in service - PORT_DIPNAME( 0x01, 0x01, "6" ) // from 1 to 0x40 seem affect the credit - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) //ok? - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("BUTTONS") // A in service - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) -INPUT_PORTS_END +WRITE8_MEMBER(ltcasino_state::output_r_w) +{ + // 7------- unknown (toggles rapidly) + // -6------ unknown (toggles rapidly) + // --5----- coin counter + // ---43210 button lamps 5 to 1 + + m_lamps[0] = BIT(data, 0); // button 1 + m_lamps[1] = BIT(data, 1); // button 2 + m_lamps[2] = BIT(data, 2); // button 3 + m_lamps[3] = BIT(data, 3); // button 4 + m_lamps[4] = BIT(data, 4); // button 5 + + machine().bookkeeping().coin_counter_w(0, BIT(data, 5)); +} -static INPUT_PORTS_START( ltcasinn ) - PORT_START("IN0") /* Q in service */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) //start? - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) //off to enter service - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) //off to enter service - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) //off to enter service - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN1") - PORT_DIPNAME( 0x01, 0x00, "1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Reset?" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("IN2") /* R in service */ - PORT_DIPNAME( 0x01, 0x00, "2" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN3") - PORT_DIPNAME( 0x01, 0x00, "3" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) //off to get the race start - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN4") /* S in service */ - PORT_DIPNAME( 0x01, 0x01, "Plug the Keyboard" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) //off to enter service - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_SERVICE( 0x40, IP_ACTIVE_HIGH ) //service? - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN5") /* T in service */ - PORT_DIPNAME( 0x01, 0x00, "5" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN6") // B in service - PORT_DIPNAME( 0x01, 0x01, "6" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - - PORT_START("BUTTONS") // A in service - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) -INPUT_PORTS_END +WRITE8_MEMBER(ltcasino_state::output_t_w) +{ + // 76543210 unknown + logerror("output_t_w: %02x\n", data); +} -static INPUT_PORTS_START( mv4in1 ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) - - PORT_DIPNAME( 0x20, 0x00, "Enable Dice" ) // must be off to enter service - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, "Enable Poker" ) // must be off to enter service - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Enable 21" ) // must be off to enter service - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN1") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) - - PORT_START("IN2") // Shows as "R" in service mode - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN3") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "?" ) //set this LOW after insert a coin - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 ) - - PORT_START("IN4") // Shows as "S" in service mode - PORT_DIPNAME( 0x01, 0x01, "Keyboard" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) //off to enter service - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_SERVICE( 0x40, IP_ACTIVE_HIGH ) //service? - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN5") // Shows as "T" in service mode - PORT_DIPNAME( 0x01, 0x00, "5" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("IN6") // B in service - PORT_DIPNAME( 0x01, 0x01, "6" ) // from 1 to 0x40 seem affect the credit - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) //ok? - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("BUTTONS") // A in service - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) -INPUT_PORTS_END +//************************************************************************** +// MACHINE DEFINTIONS +//************************************************************************** -static const gfx_layout tiles8x8_layout = +void ltcasino_state::ltcasino(machine_config &config) { - 8,8, - RGN_FRAC(1,1), - 1, - { 0 }, - { 7, 6, 5, 4, 3, 2, 1, 0 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 -}; + M6502(config, m_maincpu, 18.432_MHz_XTAL/16); // clock unknown + m_maincpu->set_addrmap(AS_PROGRAM, <casino_state::main_map); + PIA6821(config, m_pia[0], 0); + m_pia[0]->readpa_handler().set_ioport("Q"); + m_pia[0]->writepb_handler().set(FUNC(ltcasino_state::output_r_w)); -static GFXDECODE_START( gfx_ltcasino ) - GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 64 ) -GFXDECODE_END + PIA6821(config, m_pia[1], 0); + m_pia[1]->readpa_handler().set_ioport("S"); + m_pia[1]->writepb_handler().set(FUNC(ltcasino_state::output_t_w)); + MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasino) -void ltcasino_state::ltcasino(machine_config &config) -{ - /* basic machine hardware */ - M6502(config, m_maincpu, XTAL(18'432'000)/9); /* 2.048MHz ?? (or 18.432MHz/8 = 2.304MHz) - not verified */ - m_maincpu->set_addrmap(AS_PROGRAM, <casino_state::main_map); - m_maincpu->set_vblank_int("screen", FUNC(ltcasino_state::irq0_line_hold)); + // video hardware + CRT5037(config, m_vtc, 18.432_MHz_XTAL/16); // this clock gives about 61/51 hz + m_vtc->set_char_width(8); + m_vtc->set_screen("screen"); + m_vtc->set_visarea(48, 463, 0, 255); + m_vtc->vsyn_callback().set_inputline("maincpu", 0); // ? + m_vtc->vsyn_callback().append(m_pia[0], FUNC(pia6821_device::cb2_w)); // ? - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(64*8, 32*8); - screen.set_visarea(6*8, 58*8-1, 0, 32*8-1); + screen.set_raw(18.432_MHz_XTAL/2, 560, 48, 464, 268, 0, 256); screen.set_screen_update(FUNC(ltcasino_state::screen_update)); screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_ltcasino); - PALETTE(config, "palette", FUNC(ltcasino_state::ltcasino_palette), 2*64); - /* sound hardware */ + PALETTE(config, "palette", palette_device::MONOCHROME); + + // sound hardware SPEAKER(config, "mono").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", XTAL(18'432'000)/18)); /* 1.024MHz ?? (or 18.432MHz/16 = 1.152MHz) - not verified */ - aysnd.port_a_read_callback().set_ioport("BUTTONS"); - aysnd.port_b_read_callback().set_ioport("IN6"); - //ltcasino -> pc: F3F3 (A in service) and F3FD (B in service) + ay8910_device &aysnd(AY8910(config, "aysnd", 18.432_MHz_XTAL/16)); // clock unknown + aysnd.port_a_read_callback().set_ioport("A"); + aysnd.port_b_read_callback().set_ioport("B"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.4); } +void ltcasino_state::ltcasinn(machine_config &config) +{ + ltcasino(config); + + MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasinn) + + config.device_remove("palette"); + PALETTE(config, "palette", FUNC(ltcasino_state::ltcasinn_palette), 128, 8); + + m_gfxdecode->set_info(gfx_ltcasinn); +} + + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** ROM_START( ltcasino ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "a", 0x8000, 0x1000, CRC(14909fee) SHA1(bf53fa65da7f013ea1ac6b4942cdfdb34ef16252) ) - ROM_LOAD( "b", 0x9800, 0x0800, CRC(1473f854) SHA1(eadaec1f6d653e61458bc262945c20140f4530eb) ) - ROM_LOAD( "c", 0xa800, 0x0800, CRC(7a07004b) SHA1(62bd0f3d12b7eada6fc271abea60569aca7262b0) ) - ROM_LOAD( "d", 0xb800, 0x0800, CRC(5148cafc) SHA1(124039f48784bf032f612714db73fb67a216a1e7) ) - ROM_LOAD( "e", 0xc800, 0x0800, CRC(5f9e103a) SHA1(b0e9ace4c3962c06e5250fac16a245dca711350f) ) - ROM_LOAD( "f", 0xf000, 0x1000, CRC(7345aada) SHA1(6640f5eb1130c8f1cb197eb12b8e6403c7f8d34d) ) + ROM_LOAD( "a", 0x8000, 0x1000, CRC(14909fee) SHA1(bf53fa65da7f013ea1ac6b4942cdfdb34ef16252) ) + ROM_LOAD( "b", 0x9800, 0x0800, CRC(1473f854) SHA1(eadaec1f6d653e61458bc262945c20140f4530eb) ) + ROM_LOAD( "c", 0xa800, 0x0800, CRC(7a07004b) SHA1(62bd0f3d12b7eada6fc271abea60569aca7262b0) ) + ROM_LOAD( "d", 0xb800, 0x0800, CRC(5148cafc) SHA1(124039f48784bf032f612714db73fb67a216a1e7) ) + ROM_LOAD( "e", 0xc800, 0x0800, CRC(5f9e103a) SHA1(b0e9ace4c3962c06e5250fac16a245dca711350f) ) + ROM_LOAD( "f", 0xf000, 0x1000, CRC(7345aada) SHA1(6640f5eb1130c8f1cb197eb12b8e6403c7f8d34d) ) ROM_REGION( 0x0800, "gfx1", 0 ) - ROM_LOAD( "v", 0x0000, 0x0800, CRC(f1f75675) SHA1(8f3777e6b2a3f824f94b28669cac501ec02bbf36) ) + ROM_LOAD( "v", 0x0000, 0x0800, CRC(f1f75675) SHA1(8f3777e6b2a3f824f94b28669cac501ec02bbf36) ) ROM_END - ROM_START( ltcasinn ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "lc2_ra.bin", 0x8000, 0x1000, CRC(1a595442) SHA1(b8fe3e5ed2024a57187c0ce547c1bbef2429ed63) ) @@ -801,26 +480,23 @@ ROM_END ROM_START( mv4in1 ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "g.ic13", 0x8000, 0x1000, CRC(ac33bd85) SHA1(fd555f70d0a7040473d35ec38e19185671a471ea) ) - ROM_LOAD( "f.ic14", 0x9000, 0x1000, CRC(f95c87d1) SHA1(df5ed53722ec55a97eabe10b0ed3f1ba32cbe55f) ) - ROM_LOAD( "e.ic15", 0xa000, 0x1000, CRC(e525fcf2) SHA1(f1ec0c514e25ec4a1caf737ff8a962c81fb2706a) ) - ROM_LOAD( "d.ic16", 0xb000, 0x1000, CRC(ab34673f) SHA1(520a173a342a27b5f9d995e6f53c3a2f0f359f9e) ) - ROM_LOAD( "c.ic17", 0xc000, 0x1000, CRC(e384edf4) SHA1(99042528ce2b35191248d90162ca06a1a585667c) ) - ROM_LOAD( "b.ic18", 0xf000, 0x1000, CRC(3450b862) SHA1(816d13fd8d03c299c1dbecf971ee5fae2f1d64bc) ) + ROM_LOAD( "g.ic13", 0x8000, 0x1000, CRC(ac33bd85) SHA1(fd555f70d0a7040473d35ec38e19185671a471ea) ) + ROM_LOAD( "f.ic14", 0x9000, 0x1000, CRC(f95c87d1) SHA1(df5ed53722ec55a97eabe10b0ed3f1ba32cbe55f) ) + ROM_LOAD( "e.ic15", 0xa000, 0x1000, CRC(e525fcf2) SHA1(f1ec0c514e25ec4a1caf737ff8a962c81fb2706a) ) + ROM_LOAD( "d.ic16", 0xb000, 0x1000, CRC(ab34673f) SHA1(520a173a342a27b5f9d995e6f53c3a2f0f359f9e) ) + ROM_LOAD( "c.ic17", 0xc000, 0x1000, CRC(e384edf4) SHA1(99042528ce2b35191248d90162ca06a1a585667c) ) + ROM_LOAD( "b.ic18", 0xf000, 0x1000, CRC(3450b862) SHA1(816d13fd8d03c299c1dbecf971ee5fae2f1d64bc) ) ROM_REGION( 0x1000, "gfx1", 0 ) - ROM_LOAD( "a.ic19", 0x0000, 0x1000, CRC(a25c125e) SHA1(e0ba83ccddbd82a2bf52585ae0accb9192cbb00e) ) + ROM_LOAD( "a.ic19", 0x0000, 0x1000, CRC(a25c125e) SHA1(e0ba83ccddbd82a2bf52585ae0accb9192cbb00e) ) ROM_END -void ltcasino_state::init_mv4in1() -{ - uint8_t *rom = memregion("maincpu")->base(); - for (int i = 0; i < 0x10000; i++) - rom[i]=bitswap<8>(rom[i],7,6,5,4,3,1,2,0); -} - +//************************************************************************** +// SYSTEM DRIVERS +//************************************************************************** -GAME( 1982, ltcasino, 0, ltcasino, ltcasino, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (older)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1983, mv4in1, ltcasino, ltcasino, mv4in1, ltcasino_state, init_mv4in1, ROT0, "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1984, ltcasinn, 0, ltcasino, ltcasinn, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (newer)", MACHINE_NOT_WORKING ) +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROTATION COMPANY FULLNAME FLAGS +GAMEL( 1982, ltcasino, 0, ltcasino, ltcasino, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (older)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasino ) +GAMEL( 1983, mv4in1, ltcasino, ltcasinn, mv4in1, ltcasino_state, init_mv4in1, ROT0, "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn ) +GAMEL( 1984, ltcasinn, 0, ltcasinn, ltcasinn, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (newer)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn ) diff --git a/src/mame/drivers/lwings.cpp b/src/mame/drivers/lwings.cpp index f96736b6c7e..cac34b47796 100644 --- a/src/mame/drivers/lwings.cpp +++ b/src/mame/drivers/lwings.cpp @@ -139,7 +139,7 @@ WRITE8_MEMBER(lwings_state::avengers_protection_w) else if (pc == 0x0445) { m_soundstate = 0x80; - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); } } @@ -1766,7 +1766,7 @@ ROM_END void lwings_state::init_avengersb() { /* set up protection handlers */ - m_maincpu->space(AS_PROGRAM).install_write_handler(0xf80c, 0xf80c, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0xf80c, 0xf80c, write8smo_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch)); } diff --git a/src/mame/drivers/m63.cpp b/src/mame/drivers/m63.cpp index cebcc902653..36043376f5b 100644 --- a/src/mame/drivers/m63.cpp +++ b/src/mame/drivers/m63.cpp @@ -457,7 +457,7 @@ READ8_MEMBER(m63_state::snddata_r) { switch (m_p2 & 0xf0) { - case 0x60: return m_soundlatch->read(space, 0); ; + case 0x60: return m_soundlatch->read(); case 0x70: return memregion("user1")->base()[((m_p1 & 0x1f) << 8) | offset]; } return 0xff; diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp index 25acbf8901e..c1546b33b77 100644 --- a/src/mame/drivers/m72.cpp +++ b/src/mame/drivers/m72.cpp @@ -1080,6 +1080,11 @@ void m72_state::poundfor_sound_portmap(address_map &map) map(0x42, 0x42).rw("soundlatch", FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::acknowledge_w)); } +void m72_state::i80c31_mem_map(address_map &map) +{ + map(0x0000, 0x1fff).rom().region("mcu", 0); +} + void m72_state::mcu_io_map(address_map &map) { /* External access */ @@ -1876,11 +1881,21 @@ void m72_state::m72_8751(machine_config &config) mculatch.data_pending_callback().set_inputline(m_mcu, MCS51_INT1_LINE); mculatch.set_separate_acknowledge(true); - I8751(config, m_mcu, XTAL(8'000'000)); /* Uses its own XTAL */ - m_mcu->set_addrmap(AS_IO, &m72_state::mcu_io_map); - m_mcu->port_out_cb<1>().set(FUNC(m72_state::mcu_port1_w)); + i8751_device &mcu(I8751(config, m_mcu, XTAL(8'000'000))); /* Uses its own XTAL */ + mcu.set_addrmap(AS_IO, &m72_state::mcu_io_map); + mcu.port_out_cb<1>().set(FUNC(m72_state::mcu_port1_w)); } +void m72_state::imgfightb(machine_config &config) +{ + m72_8751(config); + i80c31_device &mcu(I80C31(config.replace(), m_mcu, XTAL(7'200'000))); + mcu.set_addrmap(AS_PROGRAM, &m72_state::i80c31_mem_map); + mcu.set_addrmap(AS_IO, &m72_state::mcu_io_map); + mcu.port_out_cb<1>().set(FUNC(m72_state::mcu_port1_w)); + + // TODO: uses 6116 type RAM instead of MB8421 and MB8431 +} void m72_state::rtype(machine_config &config) { @@ -2672,6 +2687,49 @@ ROM_START( imgfightj ) ROM_LOAD( "if-c-v1.bin", 0x10000, 0x10000, CRC(45b68bf5) SHA1(2fb28793019ca85b3b6d7c4c31eedff1d71f2d83) ) ROM_END +ROM_START( imgfightb ) // mostly identical to imgfightj content-wise, it's a 4 PCB stack bootleg with flying wires + ROM_REGION( 0x100000, "maincpu", 0 ) // identical, but ic111.9e + ROM_LOAD16_BYTE( "ic108.9b", 0x00001, 0x10000, CRC(592d2d80) SHA1(d54916a9bfe4b65a972b62202af706135e73518d) ) + ROM_LOAD16_BYTE( "ic89.7b", 0x00000, 0x10000, CRC(61f89056) SHA1(3e0724dbc2b00a30193ea6cfac8b4331055d4fd4) ) + ROM_LOAD16_BYTE( "ic111.9e", 0x40001, 0x10000, CRC(da50622e) SHA1(32c75b6270d401a6825632c66f3026cae7b5b81f) ) // slight difference: 99.998474%: 0x1116 from 0x09 to 0x0d + ROM_RELOAD( 0xc0001, 0x10000 ) + ROM_LOAD16_BYTE( "ic110.9d", 0x60001, 0x10000, CRC(0e0aefcd) SHA1(f5056a2d0612d912aff1e0eccb1182de7ae16990) ) + ROM_RELOAD( 0xe0001, 0x10000 ) + ROM_LOAD16_BYTE( "ic92.7e", 0x40000, 0x10000, CRC(38fce272) SHA1(4fe4d0838d21f3022b440a32ec69b25e936e62dd) ) + ROM_RELOAD( 0xc0000, 0x10000 ) + ROM_LOAD16_BYTE( "ic91.7d", 0x60000, 0x10000, CRC(d69c0722) SHA1(ef18e7b7057f19caaa61d0b8c07d2d0c6e0a555e) ) + ROM_RELOAD( 0xe0000, 0x10000 ) + + ROM_REGION( 0x10000, "mcu", 0 ) + ROM_LOAD( "25.ic27.2l", 0x00000, 0x2000, CRC(d83359a2) SHA1(2d486bf4a873abfe591e0d9383f9e230f47bc42a) ) // i80c31 instead of i8751, contents identical to imgfightj MCU, with second half padded with 0xff + + ROM_REGION( 0x080000, "sprites", 0 ) // half size ROMs, but identical content + ROM_LOAD( "ic96.7k", 0x00000, 0x10000, CRC(d4febb03) SHA1(6fe53b198bdcef1708ff134c64af9c064e274e1b) ) /* sprites */ + ROM_LOAD( "ic97.7l", 0x10000, 0x10000, CRC(973d7bbc) SHA1(409242ddc7eb90564a15b222641e53d11ab1e04a) ) + ROM_LOAD( "ic115.9k", 0x20000, 0x10000, CRC(2328880b) SHA1(a35c77a7d04614dbfbca4c79bb3e729115129ee4) ) + ROM_LOAD( "ic116.9l", 0x30000, 0x10000, CRC(6da001ea) SHA1(473ed89b77809b3b76bfa9f5ca4008c9534cdbb4) ) + ROM_LOAD( "ic94.7h", 0x40000, 0x10000, CRC(92bc7fda) SHA1(521d4a29e06eb8790fdeeba968f99a389f50a24e) ) + ROM_LOAD( "ic95.7j", 0x50000, 0x10000, CRC(e63a5918) SHA1(fd3374866f922cef72c0678aa751ad1e6f95a12a) ) + ROM_LOAD( "ic113.9h", 0x60000, 0x10000, CRC(27caec8e) SHA1(cc1943ba9548715425e799f418750cd70c3f88da) ) + ROM_LOAD( "ic114.9j", 0x70000, 0x10000, CRC(1933eb65) SHA1(4c24cfd059c11875f53b57cc020fbdbac903bd4a) ) + + ROM_REGION( 0x040000, "gfx2", 0 ) // identical + ROM_LOAD( "ic30.3d", 0x00000, 0x10000, CRC(34ee2d77) SHA1(38826e0318aa8da893fa4c93f217288c015df606) ) /* tiles #1 */ + ROM_LOAD( "ic31.3e", 0x10000, 0x10000, CRC(6bd2845b) SHA1(149cf14f919590da88b9a8e254690da010709862) ) + ROM_LOAD( "ic29.3c", 0x20000, 0x10000, CRC(090d50e5) SHA1(4f2a7c76320b3f8dafae90a246187e034fe7562b) ) + ROM_LOAD( "ic32.3f", 0x30000, 0x10000, CRC(3a8e3083) SHA1(8a75d556790b6bea41ead1a5f95589dd293bdf4e) ) + + ROM_REGION( 0x040000, "gfx3", 0 ) // identical + ROM_LOAD( "ic35.3k", 0x00000, 0x10000, CRC(b425c829) SHA1(0ccd487dba00bb7cb0ff5d1c67f8fee3e68df5d8) ) /* tiles #2 */ + ROM_LOAD( "ic36.3l", 0x10000, 0x10000, CRC(e9bfe23e) SHA1(f97a68dbdce7e06d07faab19acf7625cdc8eeaa8) ) + ROM_LOAD( "ic34.3j", 0x20000, 0x10000, CRC(256e50f2) SHA1(9e9fda4f1f1449548942c0da4478f61fe0d263d1) ) + ROM_LOAD( "ic33.3h", 0x30000, 0x10000, CRC(4c682785) SHA1(f61f1227e0ad629fdfca106306b17a9f6a9959e3) ) + + ROM_REGION( 0x20000, "samples", 0 ) /* samples, identical */ + ROM_LOAD( "ic28.lower.2n.bin", 0x00000, 0x10000, CRC(cb64a194) SHA1(940fad6b9147bccc8290e112f5973f8ea062b52f) ) + ROM_LOAD( "ic28.lower.2n.bin", 0x10000, 0x10000, CRC(45b68bf5) SHA1(2fb28793019ca85b3b6d7c4c31eedff1d71f2d83) ) +ROM_END + ROM_START( loht ) ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_BYTE( "tom_c-h0.rom", 0x00001, 0x20000, CRC(a63204b6) SHA1(d217bc70650a1a1bbe0cf536ec3bb678f670718d) ) @@ -3830,6 +3888,7 @@ GAME( 1988, nspiritj, nspirit, m72_8751, nspirit, m72_state, init_m GAME( 1988, imgfight, 0, m72, imgfight, m72_state, init_imgfight, ROT270, "Irem", "Image Fight (World, revision A)", MACHINE_SUPPORTS_SAVE ) // doesn't wait / check for japan warning string.. fails rom check if used with japanese mcu rom (World version?) GAME( 1988, imgfightj, imgfight, m72_8751, imgfight, m72_state, init_m72_8751, ROT270, "Irem", "Image Fight (Japan)", MACHINE_SUPPORTS_SAVE ) // waits for japan warning screen, works with our mcu dump, can't actually see warning screen due to priority / mixing errors, check tilemap viewer (Japan Version) +GAME( 1988, imgfightb, imgfight, imgfightb, imgfight, m72_state, init_m72_8751, ROT270, "Irem", "Image Fight (Japan, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // uses an 80c31 MCU, which isn't hooked up correctly yet. Gives 'RAM NG 7' error GAME( 1989, loht, 0, m72, loht, m72_state, init_loht, ROT0, "Irem", "Legend of Hero Tonma", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // fails rom check if used with Japan MCU rom (World version?) GAME( 1989, lohtj, loht, m72_8751, loht, m72_state, init_m72_8751, ROT0, "Irem", "Legend of Hero Tonma (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // waits for japan warning screen, works with our mcu dump (Japan Version) diff --git a/src/mame/drivers/macrossp.cpp b/src/mame/drivers/macrossp.cpp index 62ae2e8c7f5..d0fe5b3b565 100644 --- a/src/mame/drivers/macrossp.cpp +++ b/src/mame/drivers/macrossp.cpp @@ -310,7 +310,7 @@ WRITE32_MEMBER(macrossp_state::macrossp_soundcmd_w) if (ACCESSING_BITS_16_31) { //logerror("%08x write soundcmd %08x (%08x)\n",m_maincpu->pc(),data,mem_mask); - m_soundlatch->write(space, 0, data >> 16, 0xffff); + m_soundlatch->write(data >> 16); m_sndpending = 1; m_audiocpu->set_input_line(2, HOLD_LINE); /* spin for a while to let the sound CPU read the command */ @@ -322,7 +322,7 @@ READ16_MEMBER(macrossp_state::macrossp_soundcmd_r) { // logerror("%06x read soundcmd\n",m_audiocpu->pc()); m_sndpending = 0; - return m_soundlatch->read(space, offset, mem_mask); + return m_soundlatch->read(); } WRITE16_MEMBER(macrossp_state::palette_fade_w) diff --git a/src/mame/drivers/magmax.cpp b/src/mame/drivers/magmax.cpp index 647abfb29a6..0b3aef9ecb9 100644 --- a/src/mame/drivers/magmax.cpp +++ b/src/mame/drivers/magmax.cpp @@ -40,7 +40,7 @@ WRITE16_MEMBER(magmax_state::cpu_irq_ack_w) READ8_MEMBER(magmax_state::sound_r) { - return (m_soundlatch->read(space, 0) << 1) | m_LS74_q; + return (m_soundlatch->read() << 1) | m_LS74_q; } WRITE8_MEMBER(magmax_state::ay8910_portB_0_w) diff --git a/src/mame/drivers/matmania.cpp b/src/mame/drivers/matmania.cpp index 003d1281534..4b75f814977 100644 --- a/src/mame/drivers/matmania.cpp +++ b/src/mame/drivers/matmania.cpp @@ -58,13 +58,13 @@ READ8_MEMBER(matmania_state::maniach_mcu_status_r) WRITE8_MEMBER(matmania_state::matmania_sh_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); } WRITE8_MEMBER(matmania_state::maniach_sh_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } diff --git a/src/mame/drivers/mazerbla.cpp b/src/mame/drivers/mazerbla.cpp index c5cdaa330d3..14c437ef855 100644 --- a/src/mame/drivers/mazerbla.cpp +++ b/src/mame/drivers/mazerbla.cpp @@ -962,8 +962,8 @@ void mazerbla_state::machine_reset() if (m_soundlatch.found()) { - m_soundlatch->clear_w(machine().dummy_space(), 0, 0); - m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0); + m_soundlatch->clear_w(); + m_soundlatch->acknowledge_w(); } for (i = 0; i < 4; i++) diff --git a/src/mame/drivers/megasys1.cpp b/src/mame/drivers/megasys1.cpp index 34b19cf50a4..c0ae6c43862 100644 --- a/src/mame/drivers/megasys1.cpp +++ b/src/mame/drivers/megasys1.cpp @@ -571,7 +571,7 @@ void megasys1_state::z80_sound_map(address_map &map) { map(0x0000, 0x3fff).rom(); map(0xc000, 0xc7ff).ram(); - map(0xe000, 0xe000).lr8("soundlatch_r_z", [this](address_space &space, offs_t offset){ return m_soundlatch[0]->read(space, 0) & 0xff; }); + map(0xe000, 0xe000).lr8("soundlatch_r_z", [this](){ return m_soundlatch[0]->read() & 0xff; }); map(0xf000, 0xf000).nopw(); /* ?? */ } diff --git a/src/mame/drivers/meijinsn.cpp b/src/mame/drivers/meijinsn.cpp index 044f9e47e00..fab8e143cfa 100644 --- a/src/mame/drivers/meijinsn.cpp +++ b/src/mame/drivers/meijinsn.cpp @@ -118,7 +118,7 @@ private: WRITE16_MEMBER(meijinsn_state::sound_w) { if (ACCESSING_BITS_0_7) - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); } READ16_MEMBER(meijinsn_state::alpha_mcu_r) diff --git a/src/mame/drivers/mephisto.cpp b/src/mame/drivers/mephisto.cpp index 10831424658..d1c142e3194 100644 --- a/src/mame/drivers/mephisto.cpp +++ b/src/mame/drivers/mephisto.cpp @@ -415,11 +415,11 @@ void mephisto_state::init_mephisto() ***************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1984, mm2, mm4, 0, mm2, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM2 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, rebel5, mm4, 0, rebel5, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto Rebell 5,0 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, mm4, 0, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer Turbo Kit + HG440", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, mm5, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, mm50, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 5.0 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, mm5tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer Turbo Kit + HG550", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS */ +CONS( 1984, mm2, mm4, 0, mm2, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM II", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, rebel5, mm4, 0, rebel5, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto Rebell 5.0", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, mm4, 0, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM IV", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM IV (TurboKit + HG440)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, mm5, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM V (V5.1)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, mm50, mm4, 0, mephisto, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM V (V5.0)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, mm5tk, mm4, 0, mm4tk, mephisto, mephisto_state, init_mephisto, "Hegener & Glaser", "Mephisto MM V (V5.1) (TurboKit + HG550)", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index f707ab3cb4d..989513f433e 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -292,10 +292,9 @@ WRITE_LINE_MEMBER(metro_state::puzzlet_vblank_irq) READ_LINE_MEMBER(metro_state::rxd_r) { - address_space &space = m_maincpu->space(AS_PROGRAM); - uint8_t data = m_soundlatch->read(space, 0); + uint8_t data = m_soundlatch->read(); - m_soundlatch->write(space, 0, data >> 1); + m_soundlatch->write(data >> 1); return data & 1; @@ -303,7 +302,7 @@ READ_LINE_MEMBER(metro_state::rxd_r) WRITE8_MEMBER(metro_state::soundlatch_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); // seen rxd_r m_maincpu->spin_until_interrupt(); m_busy_sndcpu = 1; diff --git a/src/mame/drivers/mgames.cpp b/src/mame/drivers/mgames.cpp index 7da4899e525..82e504689fc 100644 --- a/src/mame/drivers/mgames.cpp +++ b/src/mame/drivers/mgames.cpp @@ -238,6 +238,8 @@ public: void mgames(machine_config &config); private: + tilemap_t *m_tilemap; + DECLARE_READ8_MEMBER(mixport_r); DECLARE_WRITE8_MEMBER(outport0_w); DECLARE_WRITE8_MEMBER(outport1_w); @@ -247,12 +249,14 @@ private: DECLARE_WRITE8_MEMBER(outport5_w); DECLARE_WRITE8_MEMBER(outport6_w); DECLARE_WRITE8_MEMBER(outport7_w); + void mgames_palette(palette_device &palette) const; uint32_t screen_update_mgames(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TILE_GET_INFO_MEMBER(tile_info); + void main_map(address_map &map); - virtual void machine_start() override { m_lamps.resolve(); } - virtual void video_start() override; + virtual void machine_start() override; uint8_t m_output[8]; required_shared_ptr<uint8_t> m_video; @@ -263,41 +267,40 @@ private: output_finder<9> m_lamps; }; +TILE_GET_INFO_MEMBER( mgames_state::tile_info ) +{ + uint8_t code = m_video[tile_index]; + uint8_t color = m_video[tile_index + 0x400] & 0x3f; + + SET_TILE_INFO_MEMBER(0, code, color, 0); +} -void mgames_state::video_start() +void mgames_state::machine_start() { + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mgames_state::tile_info), this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + + m_lamps.resolve(); } uint32_t mgames_state::screen_update_mgames(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - gfx_element *const gfx = m_gfxdecode->gfx(0); + m_tilemap->mark_all_dirty(); + m_tilemap->draw(screen, bitmap, cliprect, 0, 0); - int count = 0; - for (int y = 0; y < 32; y++) - { - for (int x = 0; x < 32; x++) - { - uint16_t const dat = m_video[count]; - uint16_t const col = m_video[count + 0x400] & 0x7f; - gfx->opaque(bitmap, cliprect, dat, col, 0, 0, x * 16, y * 16); - count++; - } - } return 0; } void mgames_state::mgames_palette(palette_device &palette) const { - for (int i = 0; i < 0x100; i++) + for (int i = 0; i < 64; i++) { - rgb_t color; - - if (i & 0x01) - color = rgb_t(pal2bit((i & 0x6) >> 1), pal2bit((i & 0x18) >> 3), pal2bit((i & 0x60) >> 5)); - else - color = rgb_t::black(); - - palette.set_pen_color(i, color); + palette.set_indirect_color(i, rgb_t( + pal2bit((i >> 0) & 3), + pal2bit((i >> 2) & 3), + pal2bit((i >> 4) & 3) + )); + palette.set_pen_indirect(i * 2 + 0, 0); // all tiles black background + palette.set_pen_indirect(i * 2 + 1, i); } } @@ -622,20 +625,19 @@ static INPUT_PORTS_START( mgames ) INPUT_PORTS_END -static const gfx_layout tiles16x16_layout = +static const gfx_layout gfx_16x16x1 = { 16,16, RGN_FRAC(1,1), 1, { 0 }, - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16}, + { STEP16(0,1) }, + { STEP16(0,16) }, 16*16 }; static GFXDECODE_START( gfx_mgames ) - GFXDECODE_ENTRY( "gfx1", 0, tiles16x16_layout, 0, 0x100 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_16x16x1, 0, 64 ) GFXDECODE_END @@ -658,7 +660,7 @@ void mgames_state::mgames(machine_config &config) screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_mgames); - PALETTE(config, m_palette, FUNC(mgames_state::mgames_palette), 0x200); + PALETTE(config, m_palette, FUNC(mgames_state::mgames_palette), 128, 64); /* sound hardware */ // to do... diff --git a/src/mame/drivers/mikromik.cpp b/src/mame/drivers/mikromik.cpp index f122675dd3c..043c2c50188 100644 --- a/src/mame/drivers/mikromik.cpp +++ b/src/mame/drivers/mikromik.cpp @@ -54,6 +54,7 @@ #include "emu.h" #include "includes/mikromik.h" +#include "machine/74259.h" #include "softlist.h" //#define VERBOSE 1 @@ -89,43 +90,7 @@ READ8_MEMBER( mm1_state::read ) if (mmu & MMU_IOEN) { - switch ((offset >> 4) & 0x07) - { - case 0: - data = m_dmac->read(offset & 0x0f); - break; - - case 1: - data = m_mpsc->cd_ba_r(space, offset & 0x03); - break; - - case 2: - data = m_crtc->read(space, offset & 0x01); - break; - - case 3: - data = m_pit->read(offset & 0x03); - break; - - case 4: - data = m_iop->read(space, 0); - break; - - case 5: - if (BIT(offset, 0)) - { - data = m_fdc->fifo_r(); - } - else - { - data = m_fdc->msr_r(); - } - break; - - case 7: - data = m_hgdc->read(offset & 0x01); - break; - } + data = m_io->read8(offset & 0x7f); } else { @@ -158,43 +123,7 @@ WRITE8_MEMBER( mm1_state::write ) if (mmu & MMU_IOEN) { - switch ((offset >> 4) & 0x07) - { - case 0: - m_dmac->write(offset & 0x0f, data); - break; - - case 1: - m_mpsc->cd_ba_w(space, offset & 0x03, data); - break; - - case 2: - m_crtc->write(space, offset & 0x01, data); - break; - - case 3: - m_pit->write(offset & 0x03, data); - break; - - case 4: - m_iop->write(space, 0, data); - break; - - case 5: - if (BIT(offset, 0)) - { - m_fdc->fifo_w(data); - } - break; - - case 6: - ls259_w(space, offset & 0x07, data); - break; - - case 7: - m_hgdc->write(offset & 0x01, data); - break; - } + m_io->write8(offset & 0x7f, data); } else { @@ -207,53 +136,88 @@ WRITE8_MEMBER( mm1_state::write ) //------------------------------------------------- -// ls259_w - +// a8_w - //------------------------------------------------- -WRITE8_MEMBER( mm1_state::ls259_w ) +WRITE_LINE_MEMBER( mm1_state::a8_w ) { - int d = BIT(data, 0); + LOG("IC24 A8 %u\n", state); + m_a8 = state; +} - switch (offset) - { - case 0: // IC24 A8 - LOG("IC24 A8 %u\n", d); - m_a8 = d; - break; - - case 1: // RECALL - LOG("RECALL %u\n", d); - m_recall = d; - if (d) m_fdc->soft_reset(); - break; - - case 2: // _RV28/RX21 - m_rx21 = d; - break; - - case 3: // _TX21 - m_tx21 = d; - break; - - case 4: // _RCL - m_rcl = d; - break; - - case 5: // _INTC - m_intc = d; - break; - - case 6: // LLEN - LOG("LLEN %u\n", d); - m_llen = d; - break; - - case 7: // MOTOR ON - LOG("MOTOR %u\n", d); - m_floppy0->mon_w(!d); - m_floppy1->mon_w(!d); - break; - } + +//------------------------------------------------- +// recall_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::recall_w ) +{ + LOG("RECALL %u\n", state); + m_recall = state; + if (state) m_fdc->soft_reset(); +} + + +//------------------------------------------------- +// rx21_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::rx21_w ) +{ + m_rx21 = state; +} + + +//------------------------------------------------- +// tx21_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::tx21_w ) +{ + m_tx21 = state; +} + + +//------------------------------------------------- +// rcl_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::rcl_w ) +{ + m_rcl = state; +} + + +//------------------------------------------------- +// intc_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::intc_w ) +{ + m_intc = state; +} + + +//------------------------------------------------- +// llen_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::llen_w ) +{ + LOG("LLEN %u\n", state); + m_llen = state; +} + + +//------------------------------------------------- +// motor_on_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( mm1_state::motor_on_w ) +{ + LOG("MOTOR %u\n", state); + m_floppy0->mon_w(!state); + m_floppy1->mon_w(!state); } @@ -271,6 +235,18 @@ void mm1_state::mm1_map(address_map &map) map(0x0000, 0xffff).rw(FUNC(mm1_state::read), FUNC(mm1_state::write)); } +void mm1_state::mmu_io_map(address_map &map) +{ + map(0x00, 0x0f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write)); + map(0x10, 0x13).mirror(0x0c).rw(m_mpsc, FUNC(upd7201_device::cd_ba_r), FUNC(upd7201_device::cd_ba_w)); + map(0x20, 0x21).mirror(0x0e).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write)); + map(0x30, 0x33).mirror(0x0c).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); + map(0x40, 0x40).mirror(0x0f).rw(m_iop, FUNC(i8212_device::read), FUNC(i8212_device::write)); + map(0x50, 0x51).mirror(0x0e).m(m_fdc, FUNC(upd765a_device::map)); + map(0x60, 0x67).mirror(0x08).w("outlatch", FUNC(ls259_device::write_d0)); + map(0x70, 0x71).mirror(0x0e).rw(m_hgdc, FUNC(upd7220_device::read), FUNC(upd7220_device::write)); +} + //************************************************************************** @@ -437,14 +413,6 @@ void mm1_state::machine_start() void mm1_state::machine_reset() { - address_space &program = m_maincpu->space(AS_PROGRAM); - - // reset LS259 - for (int i = 0; i < 8; i++) - { - ls259_w(program, i, 0); - } - // reset FDC m_fdc->reset(); } @@ -470,10 +438,25 @@ void mm1_state::mm1(machine_config &config) config.m_perfect_cpu_quantum = subtag(I8085A_TAG); // peripheral hardware + ADDRESS_MAP_BANK(config, m_io); + m_io->set_addrmap(0, &mm1_state::mmu_io_map); + m_io->set_data_width(8); + m_io->set_addr_width(7); + I8212(config, m_iop, 0); m_iop->int_wr_callback().set_inputline(m_maincpu, I8085_RST65_LINE); m_iop->di_rd_callback().set(KB_TAG, FUNC(mm1_keyboard_device::read)); + ls259_device &outlatch(LS259(config, "outlatch")); + outlatch.q_out_cb<0>().set(FUNC(mm1_state::a8_w)); // IC24 A8 + outlatch.q_out_cb<1>().set(FUNC(mm1_state::recall_w)); // RECALL + outlatch.q_out_cb<2>().set(FUNC(mm1_state::rx21_w)); // _RV28/RX21 + outlatch.q_out_cb<3>().set(FUNC(mm1_state::tx21_w)); // _TX21 + outlatch.q_out_cb<4>().set(FUNC(mm1_state::rcl_w)); // _RCL + outlatch.q_out_cb<5>().set(FUNC(mm1_state::intc_w)); // _INTC + outlatch.q_out_cb<6>().set(FUNC(mm1_state::llen_w)); // LLEN + outlatch.q_out_cb<7>().set(FUNC(mm1_state::motor_on_w)); // MOTOR ON + AM9517A(config, m_dmac, 6.144_MHz_XTAL/2); m_dmac->out_hreq_callback().set(FUNC(mm1_state::dma_hrq_w)); m_dmac->out_eop_callback().set(FUNC(mm1_state::dma_eop_w)); diff --git a/src/mame/drivers/mil4000.cpp b/src/mame/drivers/mil4000.cpp index 3c7e1efb736..d4e37d14353 100644 --- a/src/mame/drivers/mil4000.cpp +++ b/src/mame/drivers/mil4000.cpp @@ -589,7 +589,7 @@ void mil4000_state::mil4000(machine_config &config) void mil4000_state::chewheel(machine_config &config) { mil4000(config); - + m_maincpu->set_addrmap(AS_PROGRAM, &mil4000_state::chewheel_map); /* 2MHz */ } diff --git a/src/mame/drivers/mirage.cpp b/src/mame/drivers/mirage.cpp index 49f970c0b9d..92107fedea7 100644 --- a/src/mame/drivers/mirage.cpp +++ b/src/mame/drivers/mirage.cpp @@ -315,7 +315,6 @@ void miragemj_state::mirage(machine_config &config) PALETTE(config, "palette").set_format(palette_device::xBGR_555, 1024); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/mirax.cpp b/src/mame/drivers/mirax.cpp index 41946d23965..8a4f47b3c80 100644 --- a/src/mame/drivers/mirax.cpp +++ b/src/mame/drivers/mirax.cpp @@ -296,7 +296,7 @@ WRITE_LINE_MEMBER(mirax_state::nmi_mask_w) WRITE8_MEMBER(mirax_state::sound_cmd_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp index 5bddb9f9bdb..bc3baaef96c 100644 --- a/src/mame/drivers/mitchell.cpp +++ b/src/mame/drivers/mitchell.cpp @@ -433,7 +433,7 @@ void mitchell_state::mstworld_sound_map(address_map &map) WRITE8_MEMBER(mitchell_state::mstworld_sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/mk14.cpp b/src/mame/drivers/mk14.cpp index eaf6bb8b5c9..076e88fe577 100644 --- a/src/mame/drivers/mk14.cpp +++ b/src/mame/drivers/mk14.cpp @@ -117,8 +117,8 @@ void mk14_state::mem_map(address_map &map) map.unmap_value_high(); map.global_mask(0x0fff); map(0x000, 0x1ff).mirror(0x600).rom(); // ROM - map(0x800, 0x87f).mirror(0x600).rw("ic8", FUNC(ins8154_device::ins8154_r), FUNC(ins8154_device::ins8154_w)); // I/O - map(0x880, 0x8ff).mirror(0x600).ram(); // 128 I/O chip RAM + map(0x800, 0x87f).mirror(0x600).rw("ic8", FUNC(ins8154_device::read_io), FUNC(ins8154_device::write_io)); // I/O + map(0x880, 0x8ff).mirror(0x600).rw("ic8", FUNC(ins8154_device::read_ram), FUNC(ins8154_device::write_ram)); // 128 bytes I/O chip RAM map(0x900, 0x9ff).mirror(0x400).rw(FUNC(mk14_state::keyboard_r), FUNC(mk14_state::display_w)); map(0xb00, 0xbff).ram(); // VDU RAM map(0xf00, 0xfff).ram(); // Standard RAM diff --git a/src/mame/drivers/mmm.cpp b/src/mame/drivers/mmm.cpp index 0f077d6d761..2e2e2f9dc45 100644 --- a/src/mame/drivers/mmm.cpp +++ b/src/mame/drivers/mmm.cpp @@ -26,9 +26,12 @@ public: void mmm(machine_config &config); private: - DECLARE_WRITE8_MEMBER(strobe_w); - DECLARE_READ8_MEMBER(inputs_r); - DECLARE_WRITE8_MEMBER(ay_porta_w); + void strobe_w(u8 data); + u8 inputs_r(); + void ay_porta_w(u8 data); + + u8 ctc_r(offs_t offset); + void ctc_w(offs_t offset, u8 data); void io_map(address_map &map); void mem_map(address_map &map); @@ -40,12 +43,12 @@ private: }; -WRITE8_MEMBER(mmm_state::strobe_w) +void mmm_state::strobe_w(u8 data) { m_strobe = data; } -READ8_MEMBER(mmm_state::inputs_r) +u8 mmm_state::inputs_r() { u8 result = 0xff; for (int i = 0; i < 8; i++) @@ -54,11 +57,21 @@ READ8_MEMBER(mmm_state::inputs_r) return result; } -WRITE8_MEMBER(mmm_state::ay_porta_w) +void mmm_state::ay_porta_w(u8 data) { logerror("Writing %02X to AY-3-8910 port A\n", data); } +u8 mmm_state::ctc_r(offs_t offset) +{ + return m_ctc->read(offset >> 4); +} + +void mmm_state::ctc_w(offs_t offset, u8 data) +{ + m_ctc->write(offset >> 4, data); +} + void mmm_state::mem_map(address_map &map) { map(0x0000, 0x3fff).rom(); @@ -72,13 +85,7 @@ void mmm_state::io_map(address_map &map) map(0x03, 0x03).w("aysnd", FUNC(ay8910_device::address_w)); map(0x04, 0x04).w("aysnd", FUNC(ay8910_device::data_w)); map(0x05, 0x05).r("aysnd", FUNC(ay8910_device::data_r)); - map(0x06, 0x06).select(0x30).lrw8("ctc_rw", - [this](address_space &space, offs_t offset, u8 mem_mask) { - return m_ctc->read(space, offset >> 4, mem_mask); - }, - [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { - m_ctc->write(space, offset >> 4, data, mem_mask); - }); + map(0x06, 0x06).select(0x30).rw(FUNC(mmm_state::ctc_r), FUNC(mmm_state::ctc_w)); map(0x07, 0x07).r(FUNC(mmm_state::inputs_r)); } diff --git a/src/mame/drivers/model1.cpp b/src/mame/drivers/model1.cpp index 8c50750fe83..cda8f528396 100644 --- a/src/mame/drivers/model1.cpp +++ b/src/mame/drivers/model1.cpp @@ -890,7 +890,7 @@ WRITE16_MEMBER(model1_state::md0_w) WRITE16_MEMBER(model1_state::p_w) { uint16_t old = m_paletteram16[offset]; - m_palette->write16(space, offset, data, mem_mask); + m_palette->write16(offset, data, mem_mask); if(0 && m_paletteram16[offset] != old) logerror("XVIDEO: p_w %x, %04x @ %04x (%x)\n", offset, data, mem_mask, m_maincpu->pc()); } diff --git a/src/mame/drivers/ms32.cpp b/src/mame/drivers/ms32.cpp index 431ee15cae4..83b746c473a 100644 --- a/src/mame/drivers/ms32.cpp +++ b/src/mame/drivers/ms32.cpp @@ -522,7 +522,7 @@ READ32_MEMBER(ms32_state::ms32_read_inputs3) WRITE32_MEMBER(ms32_state::ms32_sound_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); // give the Z80 time to respond m_maincpu->spin_until_time(attotime::from_usec(40)); @@ -1657,7 +1657,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ms32_state::ms32_interrupt) READ8_MEMBER(ms32_state::latch_r) { - return m_soundlatch->read(space,0)^0xff; + return m_soundlatch->read()^0xff; } WRITE8_MEMBER(ms32_state::ms32_snd_bank_w) diff --git a/src/mame/drivers/msisaac.cpp b/src/mame/drivers/msisaac.cpp index 6aeb46add8f..37c029fda7e 100644 --- a/src/mame/drivers/msisaac.cpp +++ b/src/mame/drivers/msisaac.cpp @@ -36,7 +36,7 @@ TIMER_CALLBACK_MEMBER(msisaac_state::nmi_callback) WRITE8_MEMBER(msisaac_state::sound_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(msisaac_state::nmi_callback),this), data); } diff --git a/src/mame/drivers/mugsmash.cpp b/src/mame/drivers/mugsmash.cpp index 55d8c7d9358..8e4b03d8ea0 100644 --- a/src/mame/drivers/mugsmash.cpp +++ b/src/mame/drivers/mugsmash.cpp @@ -60,7 +60,7 @@ WRITE16_MEMBER(mugsmash_state::mugsmash_reg2_w) switch (offset) { case 1: - m_soundlatch->write(space, 1, data & 0xff); + m_soundlatch->write(data & 0xff); break; default: diff --git a/src/mame/drivers/namcos1.cpp b/src/mame/drivers/namcos1.cpp index a8ed56b9b95..458bedf556e 100644 --- a/src/mame/drivers/namcos1.cpp +++ b/src/mame/drivers/namcos1.cpp @@ -347,12 +347,12 @@ C - uses sub board with support for player 3 and 4 controls /**********************************************************************/ -WRITE8_MEMBER(namcos1_state::audiocpu_irq_ack_w) +void namcos1_state::audiocpu_irq_ack_w(u8 data) { m_audiocpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -WRITE8_MEMBER(namcos1_state::mcu_irq_ack_w) +void namcos1_state::mcu_irq_ack_w(u8 data) { m_mcu->set_input_line(HD6301_IRQ_LINE, CLEAR_LINE); } @@ -366,20 +366,20 @@ READ8_MEMBER(namcos1_state::dsw_r) // ------1- ls257 dsw selector 3y // -------0 ls257 dsw selector 4y - m_dsw_sel->write_ba(m_io_dipsw->read()); + m_dsw_sel->ba_w(m_io_dipsw->read()); m_dsw_sel->select_w(BIT(offset, 1)); - return 0xf0 | bitswap<4>(m_dsw_sel->output_r(space, 0), 0, 1, 2, 3); + return 0xf0 | bitswap<4>(m_dsw_sel->output_r(), 0, 1, 2, 3); } -WRITE8_MEMBER(namcos1_state::coin_w) +void namcos1_state::coin_w(u8 data) { machine().bookkeeping().coin_lockout_global_w(BIT(~data, 0)); machine().bookkeeping().coin_counter_w(0, BIT(data, 1)); machine().bookkeeping().coin_counter_w(1, BIT(data, 2)); } -WRITE8_MEMBER(namcos1_state::dac_gain_w) +void namcos1_state::dac_gain_w(u8 data) { /* DAC0 (GAIN0 = bit0, GAIN1 = bit2) */ int dac0_gain = (BIT(data, 2) << 1) | BIT(data, 0); diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp index d3343cb5054..0b03529e90e 100644 --- a/src/mame/drivers/namcos2.cpp +++ b/src/mame/drivers/namcos2.cpp @@ -2332,8 +2332,8 @@ ROM_START( assault ) NAMCOS2_GFXROM_LOAD_128K( "atshape.bin", 0x000000, CRC(dfcad82b) SHA1(9c3826b8dc36fa0d71c0de7f8be3479d9a025803) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "at1dat0.bin", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) ) - NAMCOS2_DATA_LOAD_O_128K( "at1dat1.bin", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) ) + NAMCOS2_DATA_LOAD_E_128K( "at1dat0.13s", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) ) + NAMCOS2_DATA_LOAD_O_128K( "at1dat1.13p", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "atvoi1.bin", 0x000000, 0x080000, CRC(d36a649e) SHA1(30173f32c6ec9dda6b8946baa14266e828b0324e) ) @@ -2383,8 +2383,8 @@ ROM_START( assaultj ) NAMCOS2_GFXROM_LOAD_128K( "atshape.bin", 0x000000, CRC(dfcad82b) SHA1(9c3826b8dc36fa0d71c0de7f8be3479d9a025803) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "at1dat0.bin", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) ) - NAMCOS2_DATA_LOAD_O_128K( "at1dat1.bin", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) ) + NAMCOS2_DATA_LOAD_E_128K( "at1dat0.13s", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) ) + NAMCOS2_DATA_LOAD_O_128K( "at1dat1.13p", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "atvoi1.bin", 0x000000, 0x080000, CRC(d36a649e) SHA1(30173f32c6ec9dda6b8946baa14266e828b0324e) ) @@ -2434,8 +2434,8 @@ ROM_START( assaultp ) NAMCOS2_GFXROM_LOAD_128K( "atshape.bin", 0x000000, CRC(dfcad82b) SHA1(9c3826b8dc36fa0d71c0de7f8be3479d9a025803) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "at1dat0.bin", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) ) - NAMCOS2_DATA_LOAD_O_128K( "at1dat1.bin", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) ) + NAMCOS2_DATA_LOAD_E_128K( "at1dat0.13s", 0x000000, CRC(844890f4) SHA1(1be30760acd81fae836301d81d6adbb3e5941373) ) + NAMCOS2_DATA_LOAD_O_128K( "at1dat1.13p", 0x000000, CRC(21715313) SHA1(97c6edae6a5f1df434f1dcf7be307b5e006e72a6) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "atvoi1.bin", 0x000000, 0x080000, CRC(d36a649e) SHA1(30173f32c6ec9dda6b8946baa14266e828b0324e) ) @@ -2484,8 +2484,8 @@ ROM_START( burnforc ) NAMCOS2_GFXROM_LOAD_128K( "bu_shape.bin", 0x000000,CRC(80a6b722) SHA1(2c24327a890310c5e8086dc6821627108a88c62e) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.bin", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) ) - NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.bin", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) ) + NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.13s", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) ) + NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.13p", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "bu_voi-1.bin", 0x000000, 0x080000, CRC(99d8a239) SHA1(1ebc586048e757ac0ac68dc9cc171f4849e67cef) ) @@ -2533,8 +2533,8 @@ ROM_START( burnforco ) NAMCOS2_GFXROM_LOAD_128K( "bu_shape.bin", 0x000000,CRC(80a6b722) SHA1(2c24327a890310c5e8086dc6821627108a88c62e) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.bin", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) ) - NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.bin", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) ) + NAMCOS2_DATA_LOAD_E_128K( "bu1_dat0.13s", 0x000000, CRC(e0a9d92f) SHA1(15042e6d7b31bec08ccdf36e89fdb4b6fb62fa4b) ) + NAMCOS2_DATA_LOAD_O_128K( "bu1_dat1.13p", 0x000000, CRC(5fe54b73) SHA1(a5d4895f0a4523be20de40ccaa74f8fad0d5df7d) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "bu_voi-1.bin", 0x000000, 0x080000, CRC(99d8a239) SHA1(1ebc586048e757ac0ac68dc9cc171f4849e67cef) ) @@ -2575,8 +2575,8 @@ ROM_START( cosmogng ) ROM_LOAD( "co1sha0.bin", 0x000000, 0x80000, CRC(063a70cc) SHA1(c3179d55d57c47d3fef49d45e45b88c4d8250548) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "co1dat0.bin", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) ) - NAMCOS2_DATA_LOAD_O_128K( "co1dat1.bin", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) ) + NAMCOS2_DATA_LOAD_E_128K( "co1dat0.13s", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) ) + NAMCOS2_DATA_LOAD_O_128K( "co1dat1.13p", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "co2voi1.bin", 0x000000, 0x080000, CRC(5a301349) SHA1(e333ea5955a66ac8d7c94cd50047efaf6fa95b15) ) @@ -2618,8 +2618,8 @@ ROM_START( cosmogngj ) ROM_LOAD( "co1sha0.bin", 0x000000, 0x80000, CRC(063a70cc) SHA1(c3179d55d57c47d3fef49d45e45b88c4d8250548) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "co1dat0.bin", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) ) - NAMCOS2_DATA_LOAD_O_128K( "co1dat1.bin", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) ) + NAMCOS2_DATA_LOAD_E_128K( "co1dat0.13s", 0x000000, CRC(b53da2ae) SHA1(a7fe63668d50928d5d2e2249a5f377c7e8dfc6a5) ) + NAMCOS2_DATA_LOAD_O_128K( "co1dat1.13p", 0x000000, CRC(d21ad10b) SHA1(dcf2d4cc048ea57507952a9a35390af7de5cfe34) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "co1voi1.bin", 0x000000, 0x080000, CRC(b5ba8f15) SHA1(9e54b9ba1cd44353782adf337376dff9eec4e937) ) @@ -2668,8 +2668,8 @@ ROM_START( dirtfoxj ) NAMCOS2_GFXROM_LOAD_128K( "df1_sha.bin", 0x000000, CRC(9a7c9a9b) SHA1(06221ae8d3f6bebbb5a7ab2eaaf35b9922389115) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_256K( "df1_dat0.bin", 0x000000, CRC(f5851c85) SHA1(e99c05891622cdaab394630b7b2678968e6761d7) ) - NAMCOS2_DATA_LOAD_O_256K( "df1_dat1.bin", 0x000000, CRC(1a31e46b) SHA1(4be7115893b27d6a3dc38c97dcb41eafebb423cd) ) + NAMCOS2_DATA_LOAD_E_256K( "df1_dat0.13s", 0x000000, CRC(f5851c85) SHA1(e99c05891622cdaab394630b7b2678968e6761d7) ) + NAMCOS2_DATA_LOAD_O_256K( "df1_dat1.13p", 0x000000, CRC(1a31e46b) SHA1(4be7115893b27d6a3dc38c97dcb41eafebb423cd) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "df1_voi1.bin", 0x000000, 0x080000, CRC(15053904) SHA1(b8ca7e5e53249dbee8284ce1e5c0e6438e64b2cf) ) @@ -2712,8 +2712,8 @@ ROM_START( dsaber ) ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(698e7a3e) SHA1(4d41bf0242626ca1448d1f650c84b5987a7f6597) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.data0", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) ) - NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.data1", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) ) + NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.13s", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) ) + NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.13p", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "do voi-1a.voice1", 0x000000, 0x080000, CRC(dadf6a57) SHA1(caba21fc6b62d140f6d8231411ce82ae0ad2837a) ) @@ -2760,8 +2760,8 @@ ROM_START( dsabera ) ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(698e7a3e) SHA1(4d41bf0242626ca1448d1f650c84b5987a7f6597) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.data0", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) ) - NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.data1", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) ) + NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.13s", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) ) + NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.13p", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "do voi-1a.voice1", 0x000000, 0x080000, CRC(dadf6a57) SHA1(caba21fc6b62d140f6d8231411ce82ae0ad2837a) ) @@ -2807,8 +2807,8 @@ ROM_START( dsaberj ) ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(698e7a3e) SHA1(4d41bf0242626ca1448d1f650c84b5987a7f6597) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.data0", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) ) - NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.data1", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) ) + NAMCOS2_DATA_LOAD_E_128K( "do1 dat0.13s", 0x000000, CRC(3e53331f) SHA1(3dd4c133f587361f30ab1b890f5b05749d5838e3) ) + NAMCOS2_DATA_LOAD_O_128K( "do1 dat1.13p", 0x000000, CRC(d5427f11) SHA1(af8d8153dc60044616a6b0571831c53c09fefda1) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "do voi-1a.voice1", 0x000000, 0x080000, CRC(dadf6a57) SHA1(caba21fc6b62d140f6d8231411ce82ae0ad2837a) ) @@ -3119,8 +3119,8 @@ ROM_START( finalap2 ) NAMCOS2_GFXROM_LOAD_256K( "fls2sha", 0x000000, CRC(f7b40a85) SHA1(a458a1cc0dae757fe8a15cb5f5ae46d3c033df00) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_256K( "fls2dat0", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) ) - NAMCOS2_DATA_LOAD_O_256K( "fls2dat1", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) ) + NAMCOS2_DATA_LOAD_E_256K( "fls2dat0.13s", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) ) + NAMCOS2_DATA_LOAD_O_256K( "fls2dat1.13p", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* PROM for road colors */ ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) ) @@ -3174,8 +3174,8 @@ ROM_START( finalap2j ) NAMCOS2_GFXROM_LOAD_256K( "fls2sha", 0x000000, BAD_DUMP CRC(f7b40a85) SHA1(a458a1cc0dae757fe8a15cb5f5ae46d3c033df00) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data ROMs */ - NAMCOS2_DATA_LOAD_E_256K( "fls2dat0", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) ) - NAMCOS2_DATA_LOAD_O_256K( "fls2dat1", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) ) + NAMCOS2_DATA_LOAD_E_256K( "fls2dat0.13s", 0x000000, CRC(f1af432c) SHA1(c514261a49ceb5c3ba0246519ba5d02e9a20d950) ) + NAMCOS2_DATA_LOAD_O_256K( "fls2dat1.13p", 0x000000, CRC(8719533e) SHA1(98d2767da6f7f67da7af15e8cfed95adb04b7427) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* PROM for road colors */ ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) ) @@ -3460,8 +3460,8 @@ ROM_START( finalap3bl ) // bootleg set NAMCOS2_GFXROM_LOAD_256K( "flt2_sha.bin", 0x000000, CRC(6986565b) SHA1(df95f2ad5d1e938551d33153f2dcc4711ffd0eba) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "flt1d0", 0x000000, CRC(80004966) SHA1(112b2a9b0ea792d5dbff1b9cf904da788aeede29) ) - NAMCOS2_DATA_LOAD_O_128K( "flt1d1", 0x000000, CRC(a2e93e8c) SHA1(9c8a5431a79153a70eb6939d16e0a5a6be235e75) ) + NAMCOS2_DATA_LOAD_E_128K( "flt1d0.13s", 0x000000, CRC(80004966) SHA1(112b2a9b0ea792d5dbff1b9cf904da788aeede29) ) + NAMCOS2_DATA_LOAD_O_128K( "flt1d1.13p", 0x000000, CRC(a2e93e8c) SHA1(9c8a5431a79153a70eb6939d16e0a5a6be235e75) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) ) @@ -3519,10 +3519,10 @@ ROM_START( finehour ) NAMCOS2_GFXROM_LOAD_256K( "fh1_sha.bin", 0x000000, CRC(15875eb0) SHA1(9225df6b01897938488461ebf0717e6d7b81d562) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "fh1_dt0.bin", 0x000000, CRC(2441c26f) SHA1(429c8f12f7bef3e62153ac8b9e00ea870db36a7b) ) - NAMCOS2_DATA_LOAD_O_128K( "fh1_dt1.bin", 0x000000, CRC(48154deb) SHA1(d6fde316f90bc847f60fa8d997504da34337ffa4) ) - NAMCOS2_DATA_LOAD_E_128K( "fh1_dt2.bin", 0x100000, CRC(12453ba4) SHA1(26ad0da6e56ece6f1ba0b0cf23d2fdae2ce24100) ) - NAMCOS2_DATA_LOAD_O_128K( "fh1_dt3.bin", 0x100000, CRC(50bab9da) SHA1(9c18e5fb810123f9d17042212e0878172e220d2a) ) + NAMCOS2_DATA_LOAD_E_128K( "fh1_dt0.13s", 0x000000, CRC(2441c26f) SHA1(429c8f12f7bef3e62153ac8b9e00ea870db36a7b) ) + NAMCOS2_DATA_LOAD_O_128K( "fh1_dt1.13p", 0x000000, CRC(48154deb) SHA1(d6fde316f90bc847f60fa8d997504da34337ffa4) ) + NAMCOS2_DATA_LOAD_E_128K( "fh1_dt2.13r", 0x100000, CRC(12453ba4) SHA1(26ad0da6e56ece6f1ba0b0cf23d2fdae2ce24100) ) + NAMCOS2_DATA_LOAD_O_128K( "fh1_dt3.13n", 0x100000, CRC(50bab9da) SHA1(9c18e5fb810123f9d17042212e0878172e220d2a) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "fh1_vo1.bin", 0x000000, 0x080000, CRC(07560fc7) SHA1(76f3855f5a4567dc65d513e37072072c2a011e7e) ) @@ -3737,8 +3737,8 @@ ROM_START( fourtrax ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ NAMCOS2_DATA_LOAD_E_256K( "fx_dat0.13s", 0x000000, CRC(63abf69b) SHA1(6776991eeff434bf9720f49ad6e62c37fc7ddf40) ) - NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13r", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) ) - NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13p", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) ) + NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13p", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) ) + NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13r", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) ) NAMCOS2_DATA_LOAD_O_256K( "fx_dat3.13n", 0x100000, CRC(605725f7) SHA1(b94ce0ec37f879a5e46a097058cb2dd57e2281f1) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ @@ -3796,8 +3796,8 @@ ROM_START( fourtraxj ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ NAMCOS2_DATA_LOAD_E_256K( "fx_dat0.13s", 0x000000, CRC(63abf69b) SHA1(6776991eeff434bf9720f49ad6e62c37fc7ddf40) ) - NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13r", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) ) - NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13p", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) ) + NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13p", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) ) + NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13r", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) ) NAMCOS2_DATA_LOAD_O_256K( "fx_dat3.13n", 0x100000, CRC(605725f7) SHA1(b94ce0ec37f879a5e46a097058cb2dd57e2281f1) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ @@ -3866,8 +3866,8 @@ ROM_START( fourtraxa ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ NAMCOS2_DATA_LOAD_E_256K( "fx_dat0.13s", 0x000000, CRC(63abf69b) SHA1(6776991eeff434bf9720f49ad6e62c37fc7ddf40) ) - NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13r", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) ) - NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13p", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) ) + NAMCOS2_DATA_LOAD_O_256K( "fx_dat1.13p", 0x000000, CRC(725bed14) SHA1(bbf886ac7f8c2c7857bc0b5d7f8fc7e63e8e9559) ) + NAMCOS2_DATA_LOAD_E_256K( "fx_dat2.13r", 0x100000, CRC(71e4a5a0) SHA1(a0188c920a43c5e69e25464627094b6b6ed26a59) ) NAMCOS2_DATA_LOAD_O_256K( "fx_dat3.13n", 0x100000, CRC(605725f7) SHA1(b94ce0ec37f879a5e46a097058cb2dd57e2281f1) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ @@ -3917,10 +3917,10 @@ ROM_START( marvland ) NAMCOS2_GFXROM_LOAD_256K( "mv1-sha.bin", 0x000000, CRC(a47db5d3) SHA1(110e26412aa84f229773049112709be457b7a6ff) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "mv2_dat0", 0x000000, CRC(62e6318b) SHA1(5c26bc054298f2a0980f7e82ba1844bc9f5eff98) ) - NAMCOS2_DATA_LOAD_O_128K( "mv2_dat1", 0x000000, CRC(8a6902ca) SHA1(272e8699b872b3a50d72090b43c57493e6642bfe) ) - NAMCOS2_DATA_LOAD_E_128K( "mv2_dat2", 0x100000, CRC(f5c6408c) SHA1(568fb08d0763dc91674d708fa2d15ca952956145) ) - NAMCOS2_DATA_LOAD_O_128K( "mv2_dat3", 0x100000, CRC(6df76955) SHA1(fcfb520399acdd3776f66944121d6980552d3100) ) + NAMCOS2_DATA_LOAD_E_128K( "mv2_dat0.13s", 0x000000, CRC(62e6318b) SHA1(5c26bc054298f2a0980f7e82ba1844bc9f5eff98) ) + NAMCOS2_DATA_LOAD_O_128K( "mv2_dat1.13p", 0x000000, CRC(8a6902ca) SHA1(272e8699b872b3a50d72090b43c57493e6642bfe) ) + NAMCOS2_DATA_LOAD_E_128K( "mv2_dat2.13r", 0x100000, CRC(f5c6408c) SHA1(568fb08d0763dc91674d708fa2d15ca952956145) ) + NAMCOS2_DATA_LOAD_O_128K( "mv2_dat3.13n", 0x100000, CRC(6df76955) SHA1(fcfb520399acdd3776f66944121d6980552d3100) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "mv1-voi1.bin", 0x000000, 0x080000, CRC(de5cac09) SHA1(2d73e54c4f159e52db2c403a59d6c137cce6f53e) ) @@ -3965,8 +3965,8 @@ ROM_START( marvlandj ) NAMCOS2_GFXROM_LOAD_256K( "mv1-sha.bin", 0x000000, CRC(a47db5d3) SHA1(110e26412aa84f229773049112709be457b7a6ff) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "mv1-dat0.bin", 0x000000, CRC(e15f412e) SHA1(d3ff006d4577540a690c912e94897a1b638ac265) ) - NAMCOS2_DATA_LOAD_O_128K( "mv1-dat1.bin", 0x000000, CRC(73e1545a) SHA1(a04034e56fef69fb2a2eb88f2f392c376e52d00d) ) + NAMCOS2_DATA_LOAD_E_128K( "mv1-dat0.13s", 0x000000, CRC(e15f412e) SHA1(d3ff006d4577540a690c912e94897a1b638ac265) ) + NAMCOS2_DATA_LOAD_O_128K( "mv1-dat1.13p", 0x000000, CRC(73e1545a) SHA1(a04034e56fef69fb2a2eb88f2f392c376e52d00d) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "mv1-voi1.bin", 0x000000, 0x080000, CRC(de5cac09) SHA1(2d73e54c4f159e52db2c403a59d6c137cce6f53e) ) @@ -4152,8 +4152,8 @@ ROM_START( mirninja ) NAMCOS2_GFXROM_LOAD_128K( "mn_sha.bin", 0x000000, CRC(c28af90f) SHA1(8b7f95375eb32c3e30c2a55b7f543235f56d3a13) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "mn1_dat0.bin", 0x000000, CRC(104bcca8) SHA1(e8368d0dc51bf0653143bf2261d7ed5b54d92941) ) - NAMCOS2_DATA_LOAD_O_128K( "mn1_dat1.bin", 0x000000, CRC(d2a918fb) SHA1(032b7a7bcc60c41325e7b35df9a932e68cdd0788) ) + NAMCOS2_DATA_LOAD_E_128K( "mn1_dat0.13s", 0x000000, CRC(104bcca8) SHA1(e8368d0dc51bf0653143bf2261d7ed5b54d92941) ) + NAMCOS2_DATA_LOAD_O_128K( "mn1_dat1.13p", 0x000000, CRC(d2a918fb) SHA1(032b7a7bcc60c41325e7b35df9a932e68cdd0788) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "mn_voi1.bin", 0x000000, 0x080000, CRC(2ca3573c) SHA1(b2af101730de4ccc68acc1ed143c21a8c81f64db) ) @@ -4205,8 +4205,8 @@ ROM_START( ordyne ) NAMCOS2_GFXROM_LOAD_128K( "or_shape.shape", 0x000000, CRC(7aec9dee) SHA1(2e774e4cff69173b4524d6b25a6a449ba5498a6a) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "or1_d0.data0", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) ) - NAMCOS2_DATA_LOAD_O_128K( "or1_d1.data1", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) ) + NAMCOS2_DATA_LOAD_E_128K( "or1_d0.13s", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) ) + NAMCOS2_DATA_LOAD_O_128K( "or1_d1.13p", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "or_voi1.voice1", 0x000000, 0x080000, CRC(369e0bca) SHA1(2a921bb373dd043bd7b2a30e5e46ec3b8b3b5c8d) ) @@ -4261,8 +4261,8 @@ ROM_START( ordyneje ) NAMCOS2_GFXROM_LOAD_128K( "or_shape.shape", 0x000000, CRC(7aec9dee) SHA1(2e774e4cff69173b4524d6b25a6a449ba5498a6a) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "or1_d0.data0", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) ) - NAMCOS2_DATA_LOAD_O_128K( "or1_d1.data1", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) ) + NAMCOS2_DATA_LOAD_E_128K( "or1_d0.13s", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) ) + NAMCOS2_DATA_LOAD_O_128K( "or1_d1.13p", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "or_voi1.voice1", 0x000000, 0x080000, CRC(369e0bca) SHA1(2a921bb373dd043bd7b2a30e5e46ec3b8b3b5c8d) ) @@ -4317,8 +4317,8 @@ ROM_START( ordynej ) NAMCOS2_GFXROM_LOAD_128K( "or_shape.shape", 0x000000, CRC(7aec9dee) SHA1(2e774e4cff69173b4524d6b25a6a449ba5498a6a) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "or1_d0.data0", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) ) - NAMCOS2_DATA_LOAD_O_128K( "or1_d1.data1", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) ) + NAMCOS2_DATA_LOAD_E_128K( "or1_d0.13s", 0x000000, CRC(de214f7a) SHA1(59883c7886b403306c30e51d7f49225483792650) ) + NAMCOS2_DATA_LOAD_O_128K( "or1_d1.13p", 0x000000, CRC(25e3e6c8) SHA1(ad093f15edaea71f6c7226c6e4f3c2130d418013) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "or_voi1.voice1", 0x000000, 0x080000, CRC(369e0bca) SHA1(2a921bb373dd043bd7b2a30e5e46ec3b8b3b5c8d) ) @@ -4376,8 +4376,8 @@ ROM_START( phelios ) NAMCOS2_GFXROM_LOAD_128K( "ps_shape.shape", 0x000000, CRC(58e26fcf) SHA1(9edc3b54964f923ed07ee878520ccf3f188f04ad) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "ps2_dat0.data0", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) ) - NAMCOS2_DATA_LOAD_O_128K( "ps2_dat1.data1", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) ) + NAMCOS2_DATA_LOAD_E_128K( "ps2_dat0.13s", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) ) + NAMCOS2_DATA_LOAD_O_128K( "ps2_dat1.13p", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ps_voi-1.voice1", 0x000000, 0x080000, CRC(f67376ed) SHA1(b54257aad34c6ad03d5b040e6a5dda94a48b6780) ) @@ -4431,8 +4431,8 @@ ROM_START( pheliosj ) NAMCOS2_GFXROM_LOAD_128K( "ps_shape.shape", 0x000000, CRC(58e26fcf) SHA1(9edc3b54964f923ed07ee878520ccf3f188f04ad) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "ps1_dat0.data0", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) ) /* Same DATA as World set, but labeled PS1 */ - NAMCOS2_DATA_LOAD_O_128K( "ps1_dat1.data1", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) ) /* Same DATA as World set, but labeled PS1 */ + NAMCOS2_DATA_LOAD_E_128K( "ps1_dat0.13s", 0x000000, CRC(ee4194b0) SHA1(a0c2a807db70164ed761e5ad04301e5ae1173e7a) ) /* Same DATA as World set, but labeled PS1 */ + NAMCOS2_DATA_LOAD_O_128K( "ps1_dat1.13p", 0x000000, CRC(5b22d714) SHA1(f6cb1fe661f7691269840245f06875845fd6eb33) ) /* Same DATA as World set, but labeled PS1 */ ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ps_voi-1.voice1", 0x000000, 0x080000, CRC(f67376ed) SHA1(b54257aad34c6ad03d5b040e6a5dda94a48b6780) ) @@ -4472,9 +4472,9 @@ ROM_START( rthun2 ) ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(cf58fbbe) SHA1(fbe3b2f0c3267b298993d6238d97b119e13e07f6) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.bin", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) ) - NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.bin", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) ) - NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.bin", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) ) + NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.13s", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) ) + NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.13p", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) ) + NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.13r", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "rst1_voi1.bin", 0x000000, 0x080000, CRC(e42027cd) SHA1(fa3a81118c7f112289c27023236dec2e9cbc78b5) ) @@ -4515,9 +4515,9 @@ ROM_START( rthun2j ) ROM_LOAD( "shape.bin", 0x000000, 0x80000, CRC(cf58fbbe) SHA1(fbe3b2f0c3267b298993d6238d97b119e13e07f6) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.bin", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) ) - NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.bin", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) ) - NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.bin", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) ) + NAMCOS2_DATA_LOAD_E_128K( "rst1_data0.13s", 0x000000, CRC(0baf44ee) SHA1(5135d634f76893adb26a32976a69e2d47e2385c6) ) + NAMCOS2_DATA_LOAD_O_128K( "rst1_data1.13p", 0x000000, CRC(58a8daac) SHA1(c13ae8fc25b748a006c6db5b4b7ae593738544e8) ) + NAMCOS2_DATA_LOAD_E_128K( "rst1_data2.13r", 0x100000, CRC(8e850a2a) SHA1(e5230e80a23ca6d09c2c53f443ecf70cc74075d7) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "rst1_voi1.bin", 0x000000, 0x080000, CRC(e42027cd) SHA1(fa3a81118c7f112289c27023236dec2e9cbc78b5) ) @@ -4667,10 +4667,10 @@ ROM_START( sgunner2 ) ROM_LOAD( "sns_sha0.bin", 0x000000, 0x80000, CRC(0374fd67) SHA1(2f09536ef4f8e1aa719108e73642feb376d6efff) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.bin", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) ) - NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.bin", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) ) - NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.bin", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) ) - NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.bin", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) ) + NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.13s", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) ) + NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.13p", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) ) + NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.13r", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) ) + NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.13n", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "sns_voi1.bin", 0x000000, 0x080000, CRC(219c97f7) SHA1(d4b1d81e3d0e2585bc2fa305c0d80beef15b2a9f) ) @@ -4719,10 +4719,10 @@ ROM_START( sgunner2j ) ROM_LOAD( "sns_sha0.bin", 0x000000, 0x80000, CRC(0374fd67) SHA1(2f09536ef4f8e1aa719108e73642feb376d6efff) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.bin", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) ) - NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.bin", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) ) - NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.bin", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) ) - NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.bin", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) ) + NAMCOS2_DATA_LOAD_E_128K( "sns_dat0.13s", 0x000000, CRC(48295d93) SHA1(2b314128d5ed7d30895967dbd2ecd8f1dfdc61ca) ) + NAMCOS2_DATA_LOAD_O_128K( "sns_dat1.13p", 0x000000, CRC(b44cc656) SHA1(7126ef28bf174c6c560469fa6dc4cfb439811850) ) + NAMCOS2_DATA_LOAD_E_128K( "sns_dat2.13r", 0x100000, CRC(ca2ae645) SHA1(8addc8ed8244d0ff4c03909e865e3f15934963f1) ) + NAMCOS2_DATA_LOAD_O_128K( "sns_dat3.13n", 0x100000, CRC(203bb018) SHA1(36e20ab81ed69a941e13518ff2ae52acd6b22a78) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "sns_voi1.bin", 0x000000, 0x080000, CRC(219c97f7) SHA1(d4b1d81e3d0e2585bc2fa305c0d80beef15b2a9f) ) @@ -4809,8 +4809,8 @@ ROM_START( sws92 ) ROM_LOAD( "sss_sha0.bin", 0x000000, 0x80000, CRC(b71a731a) SHA1(29eab0ad5618f54e6c790d20f7dc895afae6c709) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.bin", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) ) - NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.bin", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) ) + NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.13s", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) ) + NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.13p", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ss_voi1.bin", 0x000000, 0x080000, CRC(503e51b7) SHA1(2e159fcc9bb0bef9a3476ae233bc8d61fabbb4bd) ) @@ -4852,10 +4852,10 @@ ROM_START( sws92g ) ROM_LOAD( "sss_sha0.bin", 0x000000, 0x80000, CRC(b71a731a) SHA1(29eab0ad5618f54e6c790d20f7dc895afae6c709) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.bin", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) ) - NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.bin", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) ) - NAMCOS2_DATA_LOAD_E_256K( "ssg1dat2.bin", 0x080000, CRC(754128aa) SHA1(459ffb08bcd905644d6019e5b25870dcb1e2b418) ) - NAMCOS2_DATA_LOAD_O_256K( "ssg1dat3.bin", 0x080000, CRC(cb3fed01) SHA1(68887d46fd07cd8fb67d58f37e74a6aefdae4328) ) + NAMCOS2_DATA_LOAD_E_256K( "sss1dat0.13s", 0x000000, CRC(db3e6aec) SHA1(928960e3dc9c8225e695d12e9b18fbb7f151c151) ) + NAMCOS2_DATA_LOAD_O_256K( "sss1dat1.13p", 0x000000, CRC(463b5ba8) SHA1(029dce2e7ee50181392b6ef409bbd192105fb065) ) + NAMCOS2_DATA_LOAD_E_256K( "ssg1dat2.13r", 0x080000, CRC(754128aa) SHA1(459ffb08bcd905644d6019e5b25870dcb1e2b418) ) + NAMCOS2_DATA_LOAD_O_256K( "ssg1dat3.13n", 0x080000, CRC(cb3fed01) SHA1(68887d46fd07cd8fb67d58f37e74a6aefdae4328) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ss_voi1.bin", 0x000000, 0x080000, CRC(503e51b7) SHA1(2e159fcc9bb0bef9a3476ae233bc8d61fabbb4bd) ) @@ -4897,8 +4897,8 @@ ROM_START( sws93 ) ROM_LOAD( "sst_sha0.bin", 0x000000, 0x80000, CRC(4f64d4bd) SHA1(0eb5311448cfd91b1e139b64b2f35b5179237e58) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_512K( "sst1dat0.bin", 0x000000, CRC(b99c9656) SHA1(ac9e6bf46204dad70caf0d75614a20af0269a07f) ) - NAMCOS2_DATA_LOAD_O_512K( "sst1dat1.bin", 0x000000, CRC(60cf6281) SHA1(c02a5bf8f4f94cbe8b0448c9457af53cd1c043d0) ) + NAMCOS2_DATA_LOAD_E_512K( "sst1dat0.13s", 0x000000, CRC(b99c9656) SHA1(ac9e6bf46204dad70caf0d75614a20af0269a07f) ) + NAMCOS2_DATA_LOAD_O_512K( "sst1dat1.13p", 0x000000, CRC(60cf6281) SHA1(c02a5bf8f4f94cbe8b0448c9457af53cd1c043d0) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ss_voi1.bin", 0x000000, 0x080000, CRC(503e51b7) SHA1(2e159fcc9bb0bef9a3476ae233bc8d61fabbb4bd) ) @@ -4939,9 +4939,9 @@ ROM_START( suzuka8h ) ROM_LOAD( "eh2-sha0.bin", 0x000000, 0x80000, CRC(7f24619c) SHA1(0d19ab621cb42c5315be9a6b56f6711fc46ffff7) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.bin", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) ) - NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.bin", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) ) - NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.bin", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) ) + NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.13s", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) ) + NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.13p", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) ) + NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.13n", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ ROM_LOAD( "ehs1_landdt.10w", 0, 0x100, CRC(cde7e8a6) SHA1(860273daf2e649418746adf50a67ae33f9f3740c) ) @@ -4986,9 +4986,9 @@ ROM_START( suzuka8hj ) ROM_LOAD( "eh1-sha0.bin", 0x000000, 0x80000, CRC(39585cf9) SHA1(8cc18b5745ab2cf50d4df0a17fc1a57771db28ab) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.bin", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) ) - NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.bin", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) ) - NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.bin", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) ) + NAMCOS2_DATA_LOAD_E_256K( "eh1-d0.13s", 0x000000, CRC(b43e5dfa) SHA1(7e24ee46169532cdb5c504239f7961f8d17e86e4) ) + NAMCOS2_DATA_LOAD_O_256K( "eh1-d1.13p", 0x000000, CRC(9825d5bf) SHA1(720f0e90c69a2e0c48889d510a15102768226a67) ) + NAMCOS2_DATA_LOAD_O_256K( "eh1-d3.13n", 0x100000, CRC(f46d301f) SHA1(70797fd584735844539553efcad53e11239ec10e) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ ROM_LOAD( "ehs1_landdt.10w", 0, 0x100, CRC(cde7e8a6) SHA1(860273daf2e649418746adf50a67ae33f9f3740c) ) @@ -5039,8 +5039,8 @@ ROM_START( suzuk8h2 ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat0.13s", 0x000000, CRC(12a202fb) SHA1(dca1b88cb524d54a699d4f6003854cfc980e084b) ) - NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13r", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) ) - NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13p", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) ) + NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13p", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) ) + NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13r", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) ) NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat3.13n", 0x100000, CRC(85aecb3f) SHA1(00ab6104dee0cd0fbdb0235b88b41e4d26794f98) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ @@ -5092,8 +5092,8 @@ ROM_START( suzuk8h2j ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat0.13s", 0x000000, CRC(12a202fb) SHA1(dca1b88cb524d54a699d4f6003854cfc980e084b) ) - NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13r", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) ) - NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13p", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) ) + NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat1.13p", 0x000000, CRC(91790905) SHA1(988af294959dbb8636f808347b44897a133d3203) ) + NAMCOS2_DATA_LOAD_E_512K( "ehs1-dat2.13r", 0x100000, CRC(087da1f3) SHA1(e9c4ba0383e883502c0f45ae6e6d5daba4eccb01) ) NAMCOS2_DATA_LOAD_O_512K( "ehs1-dat3.13n", 0x100000, CRC(85aecb3f) SHA1(00ab6104dee0cd0fbdb0235b88b41e4d26794f98) ) ROM_REGION( 0x100, "c45_road:clut", 0 ) /* prom for road colors */ @@ -5148,8 +5148,8 @@ ROM_START( valkyrie ) NAMCOS2_GFXROM_LOAD_128K( "wdshape.bin", 0x000000, CRC(3b5e0249) SHA1(259bbabf57a8ad739c646c56aad6d0b92e10adcd) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "wd1dat0.bin", 0x000000, CRC(ea209f48) SHA1(5e73a745dc2faaa4ce6c633d4072d41e9e494276) ) - NAMCOS2_DATA_LOAD_O_128K( "wd1dat1.bin", 0x000000, CRC(04b48ada) SHA1(aa046f8856bdd5b56d481c2c12ad2808c6517a5f) ) + NAMCOS2_DATA_LOAD_E_128K( "wd1dat0.13s", 0x000000, CRC(ea209f48) SHA1(5e73a745dc2faaa4ce6c633d4072d41e9e494276) ) + NAMCOS2_DATA_LOAD_O_128K( "wd1dat1.13p", 0x000000, CRC(04b48ada) SHA1(aa046f8856bdd5b56d481c2c12ad2808c6517a5f) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "wd1voi1.bin", 0x000000, 0x040000, CRC(f1ace193) SHA1(dd13bdf4b99c6bf4e356d623ff2e3da72db331dd) ) @@ -5198,10 +5198,10 @@ ROM_START( kyukaidk ) NAMCOS2_GFXROM_LOAD_128K( "ky1_sha.bin", 0x000000, CRC(380a20d7) SHA1(9627d2e0192779d50bfb25d5c19976275818c310) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.bin", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) ) - NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.bin", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) ) - NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.bin", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) ) - NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.bin", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) ) + NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.13s", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) ) + NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.13p", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) ) + NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.13r", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) ) + NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.13n", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ky1_v1.bin", 0x000000, 0x080000, CRC(5ff81aec) SHA1(0535eda474de0a4aa3b48649b04afe2b7a8619c9) ) @@ -5245,10 +5245,10 @@ ROM_START( kyukaidko ) NAMCOS2_GFXROM_LOAD_128K( "ky1_sha.bin", 0x000000, CRC(380a20d7) SHA1(9627d2e0192779d50bfb25d5c19976275818c310) ) ROM_REGION16_BE( 0x200000, "data_rom", 0 ) /* Shared data roms */ - NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.bin", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) ) - NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.bin", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) ) - NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.bin", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) ) - NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.bin", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) ) + NAMCOS2_DATA_LOAD_E_128K( "ky1_d0.13s", 0x000000, CRC(c9cf399d) SHA1(90cba42781b1e03ecc3f5b802d740ace6b88baaa) ) + NAMCOS2_DATA_LOAD_O_128K( "ky1_d1.13p", 0x000000, CRC(6d4f21b9) SHA1(f234a785f61969be684d2a4aed59616f125d72fc) ) + NAMCOS2_DATA_LOAD_E_128K( "ky1_d2.13r", 0x100000, CRC(eb6d19c8) SHA1(c9fdb33fe191d3c4d284db7cbb05d852551a998d) ) + NAMCOS2_DATA_LOAD_O_128K( "ky1_d3.13n", 0x100000, CRC(95674701) SHA1(9a8832837b9a3f8b75437717ea84d86261bfce59) ) ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */ ROM_LOAD( "ky1_v1.bin", 0x000000, 0x080000, CRC(5ff81aec) SHA1(0535eda474de0a4aa3b48649b04afe2b7a8619c9) ) diff --git a/src/mame/drivers/nbmj8991.cpp b/src/mame/drivers/nbmj8991.cpp index c42bd8cae89..0099eeea68f 100644 --- a/src/mame/drivers/nbmj8991.cpp +++ b/src/mame/drivers/nbmj8991.cpp @@ -44,7 +44,7 @@ Notes: WRITE8_MEMBER(nbmj8991_state::soundbank_w) { - if (!(data & 0x80)) m_soundlatch->clear_w(space, 0, 0); + if (!(data & 0x80)) m_soundlatch->clear_w(); membank("bank1")->set_entry(data & 0x03); } diff --git a/src/mame/drivers/nbmj9195.cpp b/src/mame/drivers/nbmj9195.cpp index 6d113bd3ddf..ccf226021ef 100644 --- a/src/mame/drivers/nbmj9195.cpp +++ b/src/mame/drivers/nbmj9195.cpp @@ -205,7 +205,7 @@ READ8_MEMBER(nbmj9195_state::others_cpu_portc_r) WRITE8_MEMBER(nbmj9195_state::soundcpu_porte_w) { - if (!(data & 0x01)) m_soundlatch->clear_w(space, 0, 0); + if (!(data & 0x01)) m_soundlatch->clear_w(); } diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 3832b156820..638e1cce022 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -991,7 +991,7 @@ WRITE8_MEMBER(mvs_state::io_control_w) WRITE8_MEMBER(neogeo_base_state::audio_command_w) { // glitches in s1945p without the boost_interleave here - m_soundlatch->write(space, offset, data, mem_mask); + m_soundlatch->write(data); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); } @@ -1092,7 +1092,7 @@ WRITE16_MEMBER(neogeo_base_state::memcard_w) CUSTOM_INPUT_MEMBER(neogeo_base_state::get_audio_result) { - uint8_t ret = m_soundlatch2->read(m_audiocpu->space(AS_PROGRAM), 0); + uint8_t ret = m_soundlatch2->read(); return ret; } @@ -1648,7 +1648,7 @@ void neogeo_base_state::machine_reset() { // disable audiocpu NMI m_audionmi->in_w<1>(0); - m_soundlatch->acknowledge_r(machine().dummy_space(), 0); + m_soundlatch->acknowledge_w(); m_maincpu->reset(); diff --git a/src/mame/drivers/neoprint.cpp b/src/mame/drivers/neoprint.cpp index 2a86c3a906f..a074b6c05f7 100644 --- a/src/mame/drivers/neoprint.cpp +++ b/src/mame/drivers/neoprint.cpp @@ -224,7 +224,7 @@ WRITE8_MEMBER(neoprint_state::audio_cpu_clear_nmi_w) WRITE8_MEMBER(neoprint_state::audio_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); audio_cpu_assert_nmi(); @@ -237,7 +237,7 @@ WRITE8_MEMBER(neoprint_state::audio_command_w) READ8_MEMBER(neoprint_state::audio_command_r) { - uint8_t ret = m_soundlatch->read(space, 0); + uint8_t ret = m_soundlatch->read(); //if (LOG_CPU_COMM) logerror(" AUD CPU PC %04x: audio_command_r %02x\n", m_audiocpu->pc(), ret); @@ -916,6 +916,6 @@ GAME( 1997, npusagif, 0, neoprint, neoprint, neoprint_state, init_9 GAME( 1998, 98best44, 0, neoprint, neoprint, neoprint_state, init_98best44, ROT0, "SNK", "Neo Print - '98 NeoPri Best 44 (Japan) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) GAME( 1998, npsprg98, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Spring '98 (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) GAME( 1999, npmillen, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Millennium Multi Shot Edition (World) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) -GAME( 1999, npfpit, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Fuyo Pri Iitoko Tori (Japan) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) +GAME( 1999, npfpit, 0, neoprint, neoprint, neoprint_state, init_npmillen, ROT0, "SNK", "Neo Print - Fuyu Pri Iitoko-dori (Japan) (T4i 3.07)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) GAME( 1996, nprsp, 0, nprsp, neoprint, neoprint_state, init_nprsp, ROT0, "SNK", "NeopriSP Retro Collection (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) GAME( 1996, npssr2, 0, nprsp, neoprint, neoprint_state, init_nprsp, ROT0, "SNK", "Neo Print Special: Sekai Ryokou 2 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/niyanpai.cpp b/src/mame/drivers/niyanpai.cpp index 47a75a37d65..5cdbd6a3f82 100644 --- a/src/mame/drivers/niyanpai.cpp +++ b/src/mame/drivers/niyanpai.cpp @@ -154,8 +154,6 @@ void niyanpai_state::niyanpai_map(address_map &map) map(0x240a01, 0x240a01).w(FUNC(niyanpai_state::clutsel_0_w)); map(0x240c01, 0x240c01).w(FUNC(niyanpai_state::clutsel_1_w)); map(0x240e01, 0x240e01).w(FUNC(niyanpai_state::clutsel_2_w)); - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } void niyanpai_state::musobana_map(address_map &map) @@ -193,8 +191,6 @@ void niyanpai_state::musobana_map(address_map &map) map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r)); map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r)); map(0x280400, 0x280401).portr("SYSTEM"); - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } void niyanpai_state::mhhonban_map(address_map &map) @@ -234,8 +230,6 @@ void niyanpai_state::mhhonban_map(address_map &map) map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r)); map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r)); map(0x280400, 0x280401).portr("SYSTEM"); - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } void niyanpai_state::zokumahj_map(address_map &map) @@ -274,8 +268,6 @@ void niyanpai_state::zokumahj_map(address_map &map) map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r)); map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r)); map(0x280400, 0x280401).portr("SYSTEM"); - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -687,20 +679,16 @@ INPUT_PORTS_END WRITE_LINE_MEMBER(niyanpai_state::vblank_irq) { if (state) - m_tmp68301->external_interrupt_0(); + m_maincpu->external_interrupt_0(); } void niyanpai_state::niyanpai(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */ + TMP68301(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &niyanpai_state::niyanpai_map); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - TMP68301(config, m_tmp68301, 0); - m_tmp68301->set_cputag(m_maincpu); - m_tmp68301->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w)); + m_maincpu->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/nmg5.cpp b/src/mame/drivers/nmg5.cpp index 29f0938e8b5..f3867cd07b0 100644 --- a/src/mame/drivers/nmg5.cpp +++ b/src/mame/drivers/nmg5.cpp @@ -335,7 +335,7 @@ WRITE16_MEMBER(nmg5_state::vram_w) WRITE8_MEMBER(nmg5_state::soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp index 027d15ebbc6..3d2b78fb778 100644 --- a/src/mame/drivers/nmk16.cpp +++ b/src/mame/drivers/nmk16.cpp @@ -7371,25 +7371,15 @@ ROM_START( redhawke ) /* Excellent Co., Ldt license (no code scramble), (c) 1997 ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) ROM_END +void nmk16_state::init_redhawki() +{ + decryptcode( machine(), 23, 22, 21, 20, 19, 18, 15, 16, 17, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); +} + ROM_START( redhawki ) ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "rhit-2.bin", 0x000000, 0x004000, CRC(30cade0e) SHA1(2123ca858bcaed5165739107ccc2830561af0b38) ) - ROM_CONTINUE(0x20000,0x4000) - ROM_CONTINUE(0x10000,0x4000) - ROM_CONTINUE(0x30000,0x4000) - ROM_CONTINUE(0x08000,0x4000) - ROM_CONTINUE(0x28000,0x4000) - ROM_CONTINUE(0x18000,0x4000) - ROM_CONTINUE(0x38000,0x4000) - - ROM_LOAD16_BYTE( "rhit-3.bin", 0x000001, 0x004000, CRC(37dbb3c2) SHA1(d1f8258f357b885d38f87d288f98046dbd7d56aa) ) - ROM_CONTINUE(0x20001,0x4000) - ROM_CONTINUE(0x10001,0x4000) - ROM_CONTINUE(0x30001,0x4000) - ROM_CONTINUE(0x08001,0x4000) - ROM_CONTINUE(0x28001,0x4000) - ROM_CONTINUE(0x18001,0x4000) - ROM_CONTINUE(0x38001,0x4000) + ROM_LOAD16_BYTE( "rhit-2.bin", 0x000000, 0x020000, CRC(30cade0e) SHA1(2123ca858bcaed5165739107ccc2830561af0b38) ) + ROM_LOAD16_BYTE( "rhit-3.bin", 0x000001, 0x020000, CRC(37dbb3c2) SHA1(d1f8258f357b885d38f87d288f98046dbd7d56aa) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */ ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) @@ -7408,41 +7398,15 @@ ROM_START( redhawki ) ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) ROM_END +void nmk16_state::init_redhawkg() +{ + decryptcode( machine(), 23, 22, 21, 20, 19, 18, 15, 14, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); +} + ROM_START( redhawkg ) // original Afega PCB with Delta Coin sticker ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x002000, CRC(ccd459eb) SHA1(677b03f1e3973f0e1f09272d336c2dd9da8f843c) ) - ROM_CONTINUE(0x20000,0x2000) - ROM_CONTINUE(0x10000,0x2000) - ROM_CONTINUE(0x30000,0x2000) - ROM_CONTINUE(0x04000,0x2000) - ROM_CONTINUE(0x24000,0x2000) - ROM_CONTINUE(0x14000,0x2000) - ROM_CONTINUE(0x34000,0x2000) - ROM_CONTINUE(0x08000,0x2000) - ROM_CONTINUE(0x28000,0x2000) - ROM_CONTINUE(0x18000,0x2000) - ROM_CONTINUE(0x38000,0x2000) - ROM_CONTINUE(0x0c000,0x2000) - ROM_CONTINUE(0x2c000,0x2000) - ROM_CONTINUE(0x1c000,0x2000) - ROM_CONTINUE(0x3c000,0x2000) - - ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x002000, CRC(483802fd) SHA1(4ec2b15bc89c12806dab78ae30f5fe24e26d46eb) ) - ROM_CONTINUE(0x20001,0x2000) - ROM_CONTINUE(0x10001,0x2000) - ROM_CONTINUE(0x30001,0x2000) - ROM_CONTINUE(0x04001,0x2000) - ROM_CONTINUE(0x24001,0x2000) - ROM_CONTINUE(0x14001,0x2000) - ROM_CONTINUE(0x34001,0x2000) - ROM_CONTINUE(0x08001,0x2000) - ROM_CONTINUE(0x28001,0x2000) - ROM_CONTINUE(0x18001,0x2000) - ROM_CONTINUE(0x38001,0x2000) - ROM_CONTINUE(0x0c001,0x2000) - ROM_CONTINUE(0x2c001,0x2000) - ROM_CONTINUE(0x1c001,0x2000) - ROM_CONTINUE(0x3c001,0x2000) + ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x020000, CRC(ccd459eb) SHA1(677b03f1e3973f0e1f09272d336c2dd9da8f843c) ) + ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x020000, CRC(483802fd) SHA1(4ec2b15bc89c12806dab78ae30f5fe24e26d46eb) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */ ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) @@ -8458,8 +8422,8 @@ GAME( 1995, dolmen, 0, twinactn, dolmen, nmk16_state, empty GAME( 1998, stagger1, 0, stagger1, stagger1, nmk16_state, empty_init, ROT270, "Afega", "Stagger I (Japan)", 0 ) GAME( 1997, redhawk, stagger1, stagger1, stagger1, nmk16_state, init_redhawk, ROT270, "Afega (New Vision Ent. license)", "Red Hawk (US)", 0 ) -GAME( 1997, redhawki, stagger1, redhawki, stagger1, nmk16_state, empty_init, ROT0, "Afega (Hea Dong Corp license)", "Red Hawk (Italy)", 0 ) // bootleg? strange scroll regs -GAME( 1997, redhawkg, stagger1, redhawki, stagger1, nmk16_state, empty_init, ROT0, "Afega", "Red Hawk (Greece)", 0 ) +GAME( 1997, redhawki, stagger1, redhawki, stagger1, nmk16_state, init_redhawki, ROT0, "Afega (Hea Dong Corp license)", "Red Hawk (Italy)", 0 ) // bootleg? strange scroll regs +GAME( 1997, redhawkg, stagger1, redhawki, stagger1, nmk16_state, init_redhawkg, ROT0, "Afega", "Red Hawk (Greece)", 0 ) GAME( 1997, redhawke, stagger1, stagger1, stagger1, nmk16_state, empty_init, ROT270, "Afega (Excellent Co. license)", "Red Hawk (Excellent Co., Ltd)", 0 ) GAME( 1997, redhawkk, stagger1, stagger1, stagger1, nmk16_state, empty_init, ROT270, "Afega", "Red Hawk (Korea)", 0 ) GAME( 1997, redhawkb, stagger1, redhawkb, redhawkb, nmk16_state, empty_init, ROT0, "bootleg", "Vince (bootleg of Red Hawk)", 0 ) diff --git a/src/mame/drivers/novag_delta1.cpp b/src/mame/drivers/novag_delta1.cpp index ccf7a530e6f..27a04716eb5 100644 --- a/src/mame/drivers/novag_delta1.cpp +++ b/src/mame/drivers/novag_delta1.cpp @@ -11,12 +11,6 @@ Novag Delta-1, the chess engine seems similar to Boris (see aci_boris.cpp) - 4KB ROM(2332A), 256 bytes RAM(2*2111A-4) - 4-digit 7seg panel, no sound, no chessboard -TODO: -- After the computer is done calculating its move, sometimes it will blank the - display, making game progress impossible. CPU bug, or unexpected interrupt? - An easy way to repro this is by repeatedly pressing enter without inputting - a move: it's a feature to make it play against itself. - ******************************************************************************/ #include "emu.h" @@ -26,7 +20,7 @@ TODO: #include "machine/f3853.h" // internal artwork -#include "novag_delta1.lh" +#include "novag_delta1.lh" // clickable namespace { @@ -41,6 +35,9 @@ public: // machine drivers void delta1(machine_config &config); +protected: + virtual void machine_start() override; + private: // address maps void main_map(address_map &map); @@ -50,8 +47,24 @@ private: DECLARE_WRITE8_MEMBER(mux_w); DECLARE_WRITE8_MEMBER(digit_w); DECLARE_READ8_MEMBER(input_r); + + TIMER_DEVICE_CALLBACK_MEMBER(blink) { m_blink = !m_blink; } + bool m_blink; }; +void delta1_state::machine_start() +{ + novagbase_state::machine_start(); + + // zerofill/register for savestates + m_blink = false; + save_item(NAME(m_blink)); + + // game reads from uninitialized RAM while it's thinking + for (int i = 0; i < 0x100; i++) + m_maincpu->space(AS_PROGRAM).write_byte(i + 0x2000, machine().rand()); +} + /****************************************************************************** Devices, I/O @@ -61,7 +74,7 @@ private: WRITE8_MEMBER(delta1_state::mux_w) { - // IO00-02: MC14028B A-C (IO03: GND) + // IO00-02: MC14028B A-C (D to GND) // MC14028B Q3-Q7: input mux // MC14028B Q4-Q7: digit select through 75492 u16 sel = 1 << (~data & 7); @@ -77,14 +90,15 @@ WRITE8_MEMBER(delta1_state::mux_w) READ8_MEMBER(delta1_state::input_r) { // IO04-07: multiplexed inputs - return read_inputs(5) << 4 | m_led_select; + // IO03: GND + return read_inputs(5) << 4 | m_led_select | 8; } WRITE8_MEMBER(delta1_state::digit_w) { - // IO17: segment commons, active low (always 0?) + // IO17: R/C circuit to segment commons (for automated blinking) // IO10-16: digit segments A-G - data = (data & 0x80) ? 0 : (data & 0x7f); + data = (data & 0x80 && m_blink) ? 0 : (data & 0x7f); m_7seg_data = bitswap<7>(data, 0,1,2,3,4,5,6); } @@ -116,7 +130,7 @@ void delta1_state::main_io(address_map &map) static INPUT_PORTS_START( delta1 ) PORT_START("IN.0") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Time Set") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Time Set") PORT_BIT(0x0d, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START("IN.1") @@ -140,7 +154,7 @@ static INPUT_PORTS_START( delta1 ) PORT_START("IN.4") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("FP / Black Bishop") // find position PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("EP / Black Knight") // enter position - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Color / Black Pawn") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Change Color / Black Pawn") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") PORT_START("RESET") // not on matrix @@ -164,6 +178,7 @@ void delta1_state::delta1(machine_config &config) f3853_device &f3853(F3853(config, "f3853", 2000000)); f3853.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ); + TIMER(config, "display_blink").configure_periodic(FUNC(delta1_state::blink), attotime::from_msec(250)); // approximation TIMER(config, "display_decay").configure_periodic(FUNC(delta1_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_novag_delta1); } @@ -188,4 +203,4 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -CONS( 1979, ccdelta1, 0, 0, delta1, delta1, delta1_state, empty_init, "Novag", "Chess Champion: Delta-1", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING ) +CONS( 1979, ccdelta1, 0, 0, delta1, delta1, delta1_state, empty_init, "Novag", "Chess Champion: Delta-1", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/nyny.cpp b/src/mame/drivers/nyny.cpp index 70c933ae030..df6f824ec22 100644 --- a/src/mame/drivers/nyny.cpp +++ b/src/mame/drivers/nyny.cpp @@ -371,14 +371,14 @@ MC6845_END_UPDATE( nyny_state::crtc_end_update ) WRITE8_MEMBER(nyny_state::audio_1_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6802_IRQ_LINE, HOLD_LINE); } WRITE8_MEMBER(nyny_state::audio_1_answer_w) { - m_soundlatch3->write(space, 0, data); + m_soundlatch3->write(data); m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } @@ -398,7 +398,7 @@ WRITE8_MEMBER(nyny_state::nyny_ay8910_37_port_a_w) WRITE8_MEMBER(nyny_state::audio_2_command_w) { - m_soundlatch2->write(space, 0, (data & 0x60) >> 5); + m_soundlatch2->write((data & 0x60) >> 5); m_audiocpu2->set_input_line(M6802_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE); } diff --git a/src/mame/drivers/olibochu.cpp b/src/mame/drivers/olibochu.cpp index 8f3db209f83..1b54945cdcb 100644 --- a/src/mame/drivers/olibochu.cpp +++ b/src/mame/drivers/olibochu.cpp @@ -263,7 +263,7 @@ WRITE8_MEMBER(olibochu_state::sound_command_w) for (c = 15; c >= 0; c--) if (m_cmd & (1 << c)) break; - if (c >= 0) m_soundlatch->write(space, 0, 15 - c); + if (c >= 0) m_soundlatch->write(15 - c); } diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp index e1533bfd65a..464628c8aa3 100644 --- a/src/mame/drivers/omegrace.cpp +++ b/src/mame/drivers/omegrace.cpp @@ -356,7 +356,7 @@ WRITE8_MEMBER(omegrace_state::omegrace_leds_w) WRITE8_MEMBER(omegrace_state::omegrace_soundlatch_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/oneshot.cpp b/src/mame/drivers/oneshot.cpp index 695db6e8ae9..6a66a1b596a 100644 --- a/src/mame/drivers/oneshot.cpp +++ b/src/mame/drivers/oneshot.cpp @@ -35,6 +35,85 @@ NOTE: An eBay auction of the PCB shows "1996.9.16 PROMAT" on the JAMMA+ adapter One Shot One Kill. This information was used for the year & manufacturer. Also listed in an Approved Game list on a HK government site as "Promet" + +Main board: ++---------------------------------------------+ +| 5MHz +------------+ | +|VOL YM3812 Z80A M6295 |25x6 row pin| | +| YM3014 6116 PAL +------------+ | +| PAL | +| +---------+ | +| KM681000LP | ACTEL | | +| | A1020A | | +| KM681000LP | PL84C | | +|J +---------+ | +|A | +|M +---------++---------+ | +|M MB.ROM | Cypress || ACTEL | | +|A KM6264 | CY7C384A|| A1020A | | +| KM6264 PAL | -XJC || PL84C | | +| +---------++---------+ | +| PAL PAL KM681000LP | +| DSW2 6 6116 KM681000LP PAL | +| 8 6116 PAL | +| DSW1 0 +------------+ | +| 27MHz 0 CXK58256 |25x4 row pin| | +|LED 12MHz 0 CXK58256 +------------+ | ++---------------------------------------------+ + + CPU: 68000, Z80A +Sound: YM3812/YM3014 + OKI M6295 (badged as K-666/K-664 + AD-65) + OSC: 27MHz, 12MHz & 5MHz + RAM: Samsung KM681000LP-10 128Kx8 Low power SRAM x 4 + Samsung KM6264AL-10 8Kx8 Low power SRAM x 2 + Sony CXK58256-10L 32Kx8 High speed SRAM x 2 + UMC UM6116K-2 2Kx8 SRAM x 3 +Other: Cypress CY7C384A 2K Very high speed Gate CMOS FPGA + Actel A1020A FPGA + DSW 8 position dipswitch x 2 + LED - Power LED + VOL - Volume adjust pot +Connectors to ROM board: + 25 pins by 6 rows & 25 pins by 4 rows + +Rom board: ++-----------------------+ +| +------------+ | +| |25x6 row pin| | +| +------------+ | +| U15* UI8 | +| | +| UA2 UI8A | +| | +| U14* UI11 | +| | +| UA22 UI11A | +| | +| UA24 UI13 | +| | +| +---------+ UI13A | +| | ACTEL | | +| | A1020A | UI16 | +| | PL84C | | +| +---------+ UI16A | +| +------------+ | +| |25x4 row pin| | +| +------------+ | ++-----------------------+ + +Note: * denotes unpopulated + +Other: Actel A1020A FPGA +Connectors to main board: + 25 pins by 6 rows & 25 pins by 4 rows + +For One Shot One Kill: + There is an additional board that connects to the JAMMA connector that has some logic chips, + a JAMMA edge connector and two 4 pin headers to connect the light guns as well as a 2 wire jumper + that connects to some ROM board logic chips (assumed) for light gun input. Also the YM3812 sound + chip appears to be unpopulated for One Shot One Kill. + The ROM board for One Shot One Kill has 8 additional logic chips along the front edge of the PCB + */ #include "emu.h" @@ -50,9 +129,9 @@ NOTE: An eBay auction of the PCB shows "1996.9.16 PROMAT" on the JAMMA+ adapter #include "speaker.h" -READ16_MEMBER(oneshot_state::oneshot_in0_word_r) +u16 oneshot_state::oneshot_in0_word_r() { - int data = ioport("DSW1")->read(); + const u16 data = m_io_dsw1->read(); switch (data & 0x0c) { @@ -73,7 +152,7 @@ READ16_MEMBER(oneshot_state::oneshot_in0_word_r) return data; } -READ16_MEMBER(oneshot_state::oneshot_gun_x_p1_r) +u16 oneshot_state::oneshot_gun_x_p1_r() { /* shots must be in a different location to register */ m_p1_wobble ^= 1; @@ -81,12 +160,12 @@ READ16_MEMBER(oneshot_state::oneshot_gun_x_p1_r) return m_gun_x_p1 ^ m_p1_wobble; } -READ16_MEMBER(oneshot_state::oneshot_gun_y_p1_r) +u16 oneshot_state::oneshot_gun_y_p1_r() { return m_gun_y_p1; } -READ16_MEMBER(oneshot_state::oneshot_gun_x_p2_r) +u16 oneshot_state::oneshot_gun_x_p2_r() { /* shots must be in a different location to register */ m_p2_wobble ^= 1; @@ -94,34 +173,32 @@ READ16_MEMBER(oneshot_state::oneshot_gun_x_p2_r) return m_gun_x_p2 ^ m_p2_wobble; } -READ16_MEMBER(oneshot_state::oneshot_gun_y_p2_r) +u16 oneshot_state::oneshot_gun_y_p2_r() { return m_gun_y_p2; } -WRITE16_MEMBER(oneshot_state::soundbank_w) +void oneshot_state::soundbank_w(u8 data) { - if (ACCESSING_BITS_0_7) - { - m_oki->set_rom_bank((data & 0x03) ^ 0x03); - } + m_oki->set_rom_bank((data & 0x03) ^ 0x03); } -void oneshot_state::oneshot_map(address_map &map) +void oneshot_state::mem_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x080000, 0x087fff).ram(); map(0x0c0000, 0x0c07ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x120000, 0x120fff).ram().share("sprites"); - map(0x180000, 0x180fff).ram().w(FUNC(oneshot_state::oneshot_mid_videoram_w)).share("mid_videoram"); // some people , girl etc. - map(0x181000, 0x181fff).ram().w(FUNC(oneshot_state::oneshot_fg_videoram_w)).share("fg_videoram"); // credits etc. - map(0x182000, 0x182fff).ram().w(FUNC(oneshot_state::oneshot_bg_videoram_w)).share("bg_videoram"); // credits etc. + map(0x120000, 0x120fff).ram().share("spriteram"); + //map(0x13f000, 0x13f000).noprw(); // Unknown read / writes + map(0x180000, 0x180fff).ram().w(FUNC(oneshot_state::mid_videoram_w)).share("mid_videoram"); // some people , girl etc. + map(0x181000, 0x181fff).ram().w(FUNC(oneshot_state::fg_videoram_w)).share("fg_videoram"); // credits etc. + map(0x182000, 0x182fff).ram().w(FUNC(oneshot_state::bg_videoram_w)).share("bg_videoram"); // credits etc. map(0x188000, 0x18800f).writeonly().share("scroll"); // scroll registers map(0x190003, 0x190003).r("soundlatch", FUNC(generic_latch_8_device::read)); map(0x190011, 0x190011).w("soundlatch", FUNC(generic_latch_8_device::write)); - map(0x190018, 0x190019).w(FUNC(oneshot_state::soundbank_w)); + map(0x190019, 0x190019).w(FUNC(oneshot_state::soundbank_w)); map(0x190026, 0x190027).r(FUNC(oneshot_state::oneshot_gun_x_p1_r)); map(0x19002e, 0x19002f).r(FUNC(oneshot_state::oneshot_gun_x_p2_r)); map(0x190036, 0x190037).r(FUNC(oneshot_state::oneshot_gun_y_p1_r)); @@ -133,7 +210,7 @@ void oneshot_state::oneshot_map(address_map &map) map(0x19c034, 0x19c035).portr("P2"); } -void oneshot_state::oneshot_sound_map(address_map &map) +void oneshot_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x8000).rw("soundlatch", FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::write)); @@ -316,10 +393,8 @@ static const gfx_layout oneshot16x16_layout = RGN_FRAC(1,8), 8, { RGN_FRAC(0,8),RGN_FRAC(1,8),RGN_FRAC(2,8),RGN_FRAC(3,8),RGN_FRAC(4,8),RGN_FRAC(5,8),RGN_FRAC(6,8),RGN_FRAC(7,8) }, - { 0,1,2,3,4,5,6,7, - 64+0,64+1,64+2,64+3,64+4,64+5,64+6,64+7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 128+0*8, 128+1*8, 128+2*8, 128+3*8, 128+4*8, 128+5*8, 128+6*8, 128+7*8 }, + { STEP8(0,1), STEP8(8*8,1) }, + { STEP8(0,8), STEP8(8*8*2,8) }, 16*16 }; @@ -329,15 +404,15 @@ static const gfx_layout oneshot8x8_layout = RGN_FRAC(1,8), 8, { RGN_FRAC(0,8),RGN_FRAC(1,8),RGN_FRAC(2,8),RGN_FRAC(3,8),RGN_FRAC(4,8),RGN_FRAC(5,8),RGN_FRAC(6,8),RGN_FRAC(7,8) }, - { 0,1,2,3,4,5,6,7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + { STEP8(0,1) }, + { STEP8(0,8) }, 8*8 }; static GFXDECODE_START( gfx_oneshot ) - GFXDECODE_ENTRY( "gfx1", 0, oneshot16x16_layout, 0x00, 4 ) /* sprites */ - GFXDECODE_ENTRY( "gfx1", 0, oneshot8x8_layout, 0x00, 4 ) /* sprites */ + GFXDECODE_ENTRY( "gfx1", 0, oneshot16x16_layout, 0, 4 ) /* sprites */ + GFXDECODE_ENTRY( "gfx1", 0, oneshot8x8_layout, 0, 4 ) /* sprites */ GFXDECODE_END void oneshot_state::machine_start() @@ -365,11 +440,11 @@ void oneshot_state::machine_reset() void oneshot_state::oneshot(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, 12000000); - m_maincpu->set_addrmap(AS_PROGRAM, &oneshot_state::oneshot_map); + M68000(config, m_maincpu, 12_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &oneshot_state::mem_map); m_maincpu->set_vblank_int("screen", FUNC(oneshot_state::irq4_line_hold)); - Z80(config, "audiocpu", 5000000).set_addrmap(AS_PROGRAM, &oneshot_state::oneshot_sound_map); + Z80(config, "audiocpu", 5_MHz_XTAL).set_addrmap(AS_PROGRAM, &oneshot_state::sound_map); // Not verified /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -387,11 +462,11 @@ void oneshot_state::oneshot(machine_config &config) GENERIC_LATCH_8(config, "soundlatch"); - ym3812_device &ymsnd(YM3812(config, "ymsnd", 3500000)); + ym3812_device &ymsnd(YM3812(config, "ymsnd", 5_MHz_XTAL/2)); // 2.5MHz or 3MHz (12MHz/4) - clock frequency not verified ymsnd.irq_handler().set_inputline("audiocpu", 0); ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); - OKIM6295(config, m_oki, 1056000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified + OKIM6295(config, m_oki, 5_MHz_XTAL/4, okim6295_device::PIN7_HIGH); // 1.25MHz??? - clock frequency & pin 7 not verified m_oki->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -401,6 +476,13 @@ void oneshot_state::maddonna(machine_config &config) subdevice<screen_device>("screen")->set_screen_update(FUNC(oneshot_state::screen_update_maddonna)); } +void oneshot_state::komocomo(machine_config &config) +{ + oneshot(config); + subdevice<screen_device>("screen")->set_screen_update(FUNC(oneshot_state::screen_update_komocomo)); +} + + ROM_START( oneshot ) ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */ @@ -411,21 +493,21 @@ ROM_START( oneshot ) ROM_LOAD( "1shot.ua2", 0x00000, 0x010000, CRC(f655b80e) SHA1(2574a812c35801755c187a47f46ccdb0983c5feb) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ - ROM_LOAD( "1shot-ui.16a",0x000000, 0x080000, CRC(f765f9a2) SHA1(f6c386e0421fcb0e420585dd27d9dad951bb2556) ) - ROM_LOAD( "1shot-ui.13a",0x080000, 0x080000, CRC(3361b5d8) SHA1(f7db674d479765d4e58fb663aa5e13dde2abcce7) ) - ROM_LOAD( "1shot-ui.11a",0x100000, 0x080000, CRC(8f8bd027) SHA1(fbec952ab5604c8e20c5e7cfd2844f4fe5441186) ) - ROM_LOAD( "1shot-ui.08a",0x180000, 0x080000, CRC(254b1701) SHA1(163bfa70508fca20be70dd0af8b768ab6bf211b9) ) - ROM_LOAD( "1shot-ui.16", 0x200000, 0x080000, CRC(ff246b27) SHA1(fef6029030268174ef9648b8f437aeda68475346) ) - ROM_LOAD( "1shot-ui.13", 0x280000, 0x080000, CRC(80342e83) SHA1(2ac2b300382a607a539d2b0982ab596f05be3ad3) ) - ROM_LOAD( "1shot-ui.11", 0x300000, 0x080000, CRC(b8938345) SHA1(318cf0d070db786680a45811bbd765fa37caaf62) ) - ROM_LOAD( "1shot-ui.08", 0x380000, 0x080000, CRC(c9953bef) SHA1(21917a9dcc0afaeec20672ad863d0c9d583369e3) ) + ROM_LOAD( "1shot-ui.16a", 0x000000, 0x080000, CRC(f765f9a2) SHA1(f6c386e0421fcb0e420585dd27d9dad951bb2556) ) + ROM_LOAD( "1shot-ui.13a", 0x080000, 0x080000, CRC(3361b5d8) SHA1(f7db674d479765d4e58fb663aa5e13dde2abcce7) ) + ROM_LOAD( "1shot-ui.11a", 0x100000, 0x080000, CRC(8f8bd027) SHA1(fbec952ab5604c8e20c5e7cfd2844f4fe5441186) ) + ROM_LOAD( "1shot-ui.08a", 0x180000, 0x080000, CRC(254b1701) SHA1(163bfa70508fca20be70dd0af8b768ab6bf211b9) ) + ROM_LOAD( "1shot-ui.16", 0x200000, 0x080000, CRC(ff246b27) SHA1(fef6029030268174ef9648b8f437aeda68475346) ) + ROM_LOAD( "1shot-ui.13", 0x280000, 0x080000, CRC(80342e83) SHA1(2ac2b300382a607a539d2b0982ab596f05be3ad3) ) + ROM_LOAD( "1shot-ui.11", 0x300000, 0x080000, CRC(b8938345) SHA1(318cf0d070db786680a45811bbd765fa37caaf62) ) + ROM_LOAD( "1shot-ui.08", 0x380000, 0x080000, CRC(c9953bef) SHA1(21917a9dcc0afaeec20672ad863d0c9d583369e3) ) ROM_REGION( 0x100000, "oki", 0 ) /* Samples */ ROM_LOAD( "1shot.u15", 0x000000, 0x080000, CRC(e3759a47) SHA1(1159335924a6d68a0a24bfbe0c9182107f3f05f8) ) ROM_LOAD( "1shot.u14", 0x080000, 0x080000, CRC(222e33f8) SHA1(2665afdf4cb1a29325df62efc1843a4b2cf34a4e) ) ROM_REGION( 0x10000, "user1", 0 ) - ROM_LOAD( "1shot.mb", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, zooming? + ROM_LOAD( "1shot.mb", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose ROM_END ROM_START( maddonna ) @@ -441,28 +523,54 @@ ROM_START( maddonna ) ROM_LOAD( "maddonna.b7", 0x080000, 0x080000, CRC(4920d2ec) SHA1(e72a374bca81ffa4f925326455e007df7227ae08) ) ROM_LOAD( "maddonna.b9", 0x100000, 0x080000, CRC(3a8a3feb) SHA1(832654902963c163644134431fd1221e1895cfec) ) ROM_LOAD( "maddonna.b11", 0x180000, 0x080000, CRC(6f9b7fdf) SHA1(14ced1d43eae3b6db4a0a4c12fb26cbd13eb7428) ) - ROM_LOAD( "maddonna.b6", 0x200000, 0x080000, CRC(b02e9e0e) SHA1(6e527a2bfda0f4f420c10139c75dac2704e08d08) ) - ROM_LOAD( "maddonna.b8", 0x280000, 0x080000, CRC(03f1de40) SHA1(bb0c0525155404c0740ac5f048f71ae7651a5941) ) - ROM_LOAD( "maddonna.b10", 0x300000, 0x080000, CRC(87936423) SHA1(dda42f3685427edad7686d9712ff07d2fd9bf57e) ) - ROM_LOAD( "maddonna.b12", 0x380000, 0x080000, CRC(879ab23c) SHA1(5288016542a10e60ccb28a930d8dfe4db41c6fc6) ) + ROM_LOAD( "maddonna.b6", 0x200000, 0x080000, CRC(b02e9e0e) SHA1(6e527a2bfda0f4f420c10139c75dac2704e08d08) ) + ROM_LOAD( "maddonna.b8", 0x280000, 0x080000, CRC(03f1de40) SHA1(bb0c0525155404c0740ac5f048f71ae7651a5941) ) + ROM_LOAD( "maddonna.b10", 0x300000, 0x080000, CRC(87936423) SHA1(dda42f3685427edad7686d9712ff07d2fd9bf57e) ) + ROM_LOAD( "maddonna.b12", 0x380000, 0x080000, CRC(879ab23c) SHA1(5288016542a10e60ccb28a930d8dfe4db41c6fc6) ) ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) /* Samples */ /* no samples for this game */ ROM_REGION( 0x10000, "user1", 0 ) - ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, zooming? + ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose ROM_END -// The tiles containing the copyright string (tiles 0x3979 onwards) differ in this set. -// Both versions have tiles containing the 'Tuning - Germany' copyright messages, but -// the parent set has additional tiles containing the '(c)Copyright 1995' which is shown -// on the title screen. -// -// The lack of these tiles in this set causes all subsequent tiles to be shifted. It is -// likely that the correct program roms for this set either don't show '(c)Copyright 1995' -// or display it using the regular font instead. +ROM_START( komocomo ) // ROM PCB marked : GAME B/D TOPnew1 002 + ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "11.ua24", 0x00000, 0x10000, CRC(31c18579) SHA1(da97207afced0cf844b111752e9f634a49bc7115) ) + ROM_LOAD16_BYTE( "10.ua22", 0x00001, 0x10000, CRC(fa839c0f) SHA1(53aee489e694e5777bd5ac20aa2b51c2c9e5493a) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */ + ROM_LOAD( "9.ua2", 0x00000, 0x010000, CRC(f2080071) SHA1(68cbae9559879b2dc19c41a7efbd13ab4a569d3f) ) + + ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "8.ui16a", 0x000000, 0x080000, CRC(11ac04ab) SHA1(321a7af3bdf47fa0ec1f7bbd758dd1023b409a06) ) + ROM_LOAD( "6.ui13a", 0x080000, 0x080000, CRC(bb498592) SHA1(f7946a40d35ae0726860dd65f1aaf1c145d51afd) ) + ROM_LOAD( "4.ui11a", 0x100000, 0x080000, CRC(d22dd6d8) SHA1(f466167d088275cdc973535401895272d48c8079) ) + ROM_LOAD( "2.ui8a", 0x180000, 0x080000, CRC(cc5360f8) SHA1(61670b970a71af8f008052a98c10127f8b412a85) ) + ROM_LOAD( "7.ui16", 0x200000, 0x080000, CRC(dc71de75) SHA1(adc8f51acf34e41b94a740dc2b7a66b23a7ffcf5) ) + ROM_LOAD( "5.ui13", 0x280000, 0x080000, CRC(56bc3719) SHA1(947d7fe45273052fbd666ad8e9bef9818c6e3104) ) + ROM_LOAD( "3.ui11", 0x300000, 0x080000, CRC(646073d1) SHA1(87593ccbe9419da2ea70763784acc12221b5bed8) ) + ROM_LOAD( "1.ui8", 0x380000, 0x080000, CRC(58ba6622) SHA1(ee5a759ab22a663da5bba1db5fec23958bfee771) ) + + ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) /* Samples */ + /* no samples for this game */ + + ROM_REGION( 0x10000, "user1", 0 ) + ROM_LOAD( "12.bin", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose +ROM_END + + +/* The tiles containing the copyright string (tiles 0x3979 onwards) differ in this set. + Both versions have tiles containing the 'Tuning - Germany' copyright messages, but + the parent set has additional tiles containing the '(c)Copyright 1995' which is shown + on the title screen. + + The lack of these tiles in this set causes all subsequent tiles to be shifted. It is + likely that the correct program roms for this set either don't show '(c)Copyright 1995' + or display it using the regular font instead. */ -ROM_START( maddonnb ) +ROM_START( maddonnab ) ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */ /* program roms missing in this dump, gfx don't seem 100% correct for other ones */ ROM_LOAD16_BYTE( "maddonnb.b16", 0x00000, 0x20000, NO_DUMP ) @@ -485,11 +593,13 @@ ROM_START( maddonnb ) /* no samples for this game */ ROM_REGION( 0x10000, "user1", 0 ) - ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, zooming? + ROM_LOAD( "x1", 0x00000, 0x10000, CRC(6b213183) SHA1(599c59d155d11edb151bfaed1d24ef964462a447) ) // motherboard rom, unknown purpose ROM_END +// all sets have a large (unused) PROMAT logo in them +GAME( 1995, maddonna, 0, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Promat (Tuning license)", "Mad Donna (Tuning, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, maddonnab,maddonna, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Promat (Tuning license)", "Mad Donna (Tuning, set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, komocomo, maddonna, komocomo, maddonna, oneshot_state, empty_init, ROT0, "bootleg", "Komo Como (Topmar, bootleg?)", MACHINE_SUPPORTS_SAVE ) // shows TOPMAR (an anagram of PROMAT) on the side, possibly a hack of the original PROMAT version -GAME( 1995, maddonna, 0, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Tuning", "Mad Donna (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, maddonnb, maddonna, maddonna, maddonna, oneshot_state, empty_init, ROT0, "Tuning", "Mad Donna (set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1996, oneshot, 0, oneshot, oneshot , oneshot_state, empty_init, ROT0, "Promat", "One Shot One Kill", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/onyx.cpp b/src/mame/drivers/onyx.cpp index 2159d1f04a4..c7b013307a6 100644 --- a/src/mame/drivers/onyx.cpp +++ b/src/mame/drivers/onyx.cpp @@ -98,14 +98,14 @@ void onyx_state::z8002_m1_w(uint8_t data) void onyx_state::c8002_io(address_map &map) { - map(0xff00, 0xff07).lrw8("sio1_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[0]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[0]->cd_ba_w(space, offset >> 1, data, mem_mask); }); - map(0xff08, 0xff0f).lrw8("sio2_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[1]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[1]->cd_ba_w(space, offset >> 1, data, mem_mask); }); - map(0xff10, 0xff17).lrw8("sio3_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[2]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[2]->cd_ba_w(space, offset >> 1, data, mem_mask); }); - map(0xff18, 0xff1f).lrw8("sio4_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[3]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[3]->cd_ba_w(space, offset >> 1, data, mem_mask); }); - map(0xff20, 0xff27).lrw8("sio5_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_sio[4]->cd_ba_r(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_sio[4]->cd_ba_w(space, offset >> 1, data, mem_mask); }); - map(0xff30, 0xff37).lrw8("ctc1_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_ctc[0]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_ctc[0]->write(space, offset >> 1, data, mem_mask); }); - map(0xff38, 0xff3f).lrw8("ctc2_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_ctc[1]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_ctc[1]->write(space, offset >> 1, data, mem_mask); }); - map(0xff40, 0xff47).lrw8("ctc3_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_ctc[2]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_ctc[2]->write(space, offset >> 1, data, mem_mask); }); + map(0xff00, 0xff07).lrw8("sio1_rw", [this](offs_t offset) { return m_sio[0]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[0]->cd_ba_w(offset >> 1, data); }); + map(0xff08, 0xff0f).lrw8("sio2_rw", [this](offs_t offset) { return m_sio[1]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[1]->cd_ba_w(offset >> 1, data); }); + map(0xff10, 0xff17).lrw8("sio3_rw", [this](offs_t offset) { return m_sio[2]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[2]->cd_ba_w(offset >> 1, data); }); + map(0xff18, 0xff1f).lrw8("sio4_rw", [this](offs_t offset) { return m_sio[3]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[3]->cd_ba_w(offset >> 1, data); }); + map(0xff20, 0xff27).lrw8("sio5_rw", [this](offs_t offset) { return m_sio[4]->cd_ba_r(offset >> 1); }, [this](offs_t offset, u8 data) { m_sio[4]->cd_ba_w(offset >> 1, data); }); + map(0xff30, 0xff37).lrw8("ctc1_rw", [this](offs_t offset) { return m_ctc[0]->read(offset >> 1); }, [this](offs_t offset, u8 data) { m_ctc[0]->write(offset >> 1, data); }); + map(0xff38, 0xff3f).lrw8("ctc2_rw", [this](offs_t offset) { return m_ctc[1]->read(offset >> 1); }, [this](offs_t offset, u8 data) { m_ctc[1]->write(offset >> 1, data); }); + map(0xff40, 0xff47).lrw8("ctc3_rw", [this](offs_t offset) { return m_ctc[2]->read(offset >> 1); }, [this](offs_t offset, u8 data) { m_ctc[2]->write(offset >> 1, data); }); map(0xff50, 0xff57).lrw8("pio1_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_pio[0]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_pio[0]->write(space, offset >> 1, data, mem_mask); }); map(0xff58, 0xff5f).lrw8("pio2_rw", [this](address_space &space, offs_t offset, u8 mem_mask) { return m_pio[1]->read(space, offset >> 1, mem_mask); }, [this](address_space &space, offs_t offset, u8 data, u8 mem_mask) { m_pio[1]->write(space, offset >> 1, data, mem_mask); }); map(0xffb9, 0xffb9).w(FUNC(onyx_state::z8002_m1_w)); diff --git a/src/mame/drivers/othello.cpp b/src/mame/drivers/othello.cpp index b7588ab04c4..513ea3fbe3e 100644 --- a/src/mame/drivers/othello.cpp +++ b/src/mame/drivers/othello.cpp @@ -234,8 +234,8 @@ void othello_state::main_portmap(address_map &map) READ8_MEMBER(othello_state::latch_r) { - int retval = m_soundlatch->read(space, 0); - m_soundlatch->clear_w(space, 0, 0); + int retval = m_soundlatch->read(); + m_soundlatch->clear_w(); return retval; } diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp index 96ba59b0c1c..3ee610c955f 100644 --- a/src/mame/drivers/pasopia7.cpp +++ b/src/mame/drivers/pasopia7.cpp @@ -630,7 +630,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r ) } else if(io_port >= 0x28 && io_port <= 0x2b) - return m_ctc->read(space,io_port & 3); + return m_ctc->read(io_port & 3); else if(io_port >= 0x30 && io_port <= 0x33) return m_pio->read(space, io_port & 3); @@ -681,7 +681,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w ) } else if(io_port >= 0x28 && io_port <= 0x2b) - m_ctc->write(space, io_port & 3, data); + m_ctc->write(io_port & 3, data); else if(io_port >= 0x30 && io_port <= 0x33) m_pio->write(space, io_port & 3, data); diff --git a/src/mame/drivers/pbaction.cpp b/src/mame/drivers/pbaction.cpp index e327f926ff3..1fa8cc13dc6 100644 --- a/src/mame/drivers/pbaction.cpp +++ b/src/mame/drivers/pbaction.cpp @@ -107,7 +107,7 @@ Stephh's notes (based on the game Z80 code and some tests) : WRITE8_MEMBER(pbaction_state::pbaction_sh_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_soundcommand_timer->adjust(attotime::zero, 0); } @@ -154,7 +154,7 @@ READ8_MEMBER(pbaction_state::sound_data_r) { if (!machine().side_effects_disabled()) m_audiocpu->set_input_line(0, CLEAR_LINE); - return m_soundlatch->read(space, 0); + return m_soundlatch->read(); } WRITE8_MEMBER(pbaction_state::sound_irq_ack_w) @@ -235,23 +235,23 @@ WRITE8_MEMBER(pbaction_tecfri_state::sub8008_w) WRITE8_MEMBER(pbaction_tecfri_state::subtomain_w) { - //m_subtomainlatch->write(space, offset, data); // where does this go if it can't go to maincpu? + //m_subtomainlatch->write(data); // where does this go if it can't go to maincpu? } READ8_MEMBER(pbaction_tecfri_state::maintosub_r) { - return m_maintosublatch->read(space, offset); + return m_maintosublatch->read(); } READ8_MEMBER(pbaction_tecfri_state::subcpu_r) { return 0x00; // other values stop the flippers from working? are there different inputs from the custom cabinet in here somehow? -// return m_subtomainlatch->read(space, offset); +// return m_subtomainlatch->read(); } WRITE8_MEMBER(pbaction_tecfri_state::subcpu_w) { - m_maintosublatch->write(space, offset, data); + m_maintosublatch->write(data); m_subcommand_timer->adjust(attotime::zero, 0); } diff --git a/src/mame/drivers/pc1512.cpp b/src/mame/drivers/pc1512.cpp index 6063960ff70..b2eab2cf561 100644 --- a/src/mame/drivers/pc1512.cpp +++ b/src/mame/drivers/pc1512.cpp @@ -568,7 +568,7 @@ READ8_MEMBER( pc1640_state::io_r ) else if (addr >= 0x3b0 && addr <= 0x3df) { decoded = true; } else if (addr >= 0x3f4 && addr <= 0x3f4) { data = m_fdc->fdc->msr_r(); decoded = true; } else if (addr >= 0x3f5 && addr <= 0x3f5) { data = m_fdc->fdc->fifo_r(); decoded = true; } - else if (addr >= 0x3f8 && addr <= 0x3ff) { data = m_uart->ins8250_r(space, offset & 0x07); decoded = true; } + else if (addr >= 0x3f8 && addr <= 0x3ff) { data = m_uart->ins8250_r(offset & 0x07); decoded = true; } if (decoded) { diff --git a/src/mame/drivers/pcktgal.cpp b/src/mame/drivers/pcktgal.cpp index 5a2c05a40d0..30c34152edd 100644 --- a/src/mame/drivers/pcktgal.cpp +++ b/src/mame/drivers/pcktgal.cpp @@ -43,7 +43,7 @@ WRITE8_MEMBER(pcktgal_state::sound_bank_w) WRITE8_MEMBER(pcktgal_state::sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/pgm.cpp b/src/mame/drivers/pgm.cpp index 2f3ac8a9cf8..bc98846a054 100644 --- a/src/mame/drivers/pgm.cpp +++ b/src/mame/drivers/pgm.cpp @@ -282,7 +282,7 @@ WRITE16_MEMBER(pgm_state::m68k_l1_w) { if (PGMLOGERROR) logerror("SL 1 m68.w %02x (%06x) IRQ\n", data & 0xff, m_maincpu->pc()); - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } } @@ -291,7 +291,7 @@ WRITE8_MEMBER(pgm_state::z80_l3_w) { if (PGMLOGERROR) logerror("SL 3 z80.w %02x (%04x)\n", data, m_soundcpu->pc()); - m_soundlatch3->write(space, 0, data); + m_soundlatch3->write(data); } diff --git a/src/mame/drivers/pktgaldx.cpp b/src/mame/drivers/pktgaldx.cpp index 2bbb8596766..1c757dc4336 100644 --- a/src/mame/drivers/pktgaldx.cpp +++ b/src/mame/drivers/pktgaldx.cpp @@ -360,7 +360,6 @@ void pktgaldx_state::pktgaldx(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_pktgaldx); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/pokechmp.cpp b/src/mame/drivers/pokechmp.cpp index 11662fdc8c7..3d56bb32c3a 100644 --- a/src/mame/drivers/pokechmp.cpp +++ b/src/mame/drivers/pokechmp.cpp @@ -74,7 +74,7 @@ WRITE8_MEMBER(pokechmp_state::pokechmp_sound_bank_w) WRITE8_MEMBER(pokechmp_state::pokechmp_sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/polepos.cpp b/src/mame/drivers/polepos.cpp index 583ca54b1a4..6d4f1b5ca95 100644 --- a/src/mame/drivers/polepos.cpp +++ b/src/mame/drivers/polepos.cpp @@ -951,7 +951,7 @@ void polepos_state::polepos(machine_config &config) WRITE8_MEMBER(polepos_state::bootleg_soundlatch_w) { if (m_soundlatch.found()) // topracern also uses this; no idea what it should do there - m_soundlatch->write(space, 0, data | 0xfc); + m_soundlatch->write(data | 0xfc); } void polepos_state::topracern_io(address_map &map) diff --git a/src/mame/drivers/pong.cpp b/src/mame/drivers/pong.cpp index 787657ba675..515789872e3 100644 --- a/src/mame/drivers/pong.cpp +++ b/src/mame/drivers/pong.cpp @@ -4,6 +4,7 @@ Pong (c) 1972 Atari Pong Doubles (c) 1973 Atari +Rebound (c) 1974 Atari Breakout (c) 1976 Atari driver by Couriersud @@ -27,6 +28,7 @@ driver by Couriersud TM-0?? Dr. Pong/Puppy Pong/Snoopy Pong (1974) A001433? NO 422,TM-029 Superpong (1974) A000423 NO TM-014,029 Pong Doubles/Coupe Davis (1973) A000785 NO + TM-001,023,029,032 Rebound/Spike/Volleyball (1974) A000517,A000846,SPIKE-(A or B) NO TM-058 Breakout/Breakout Cocktail/Consolette (1976) A004533 NO Notes: @@ -41,6 +43,7 @@ TODO: Dr. Pong, Pong In-A-Barrel, Puppy Pong, Snoopy Pong, and Cocktail Pong are be verified. TODO: Superpong is believed to use the Pong (Rev E) PCB with some minor modifications, this needs to be verified. +TODO: Volleyball... ***************************************************************************/ @@ -675,6 +678,7 @@ ROM_START( rebound ) /* dummy to satisfy game entry*/ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END + /* // 100% TTL - NO ROMS ROM_START( pongbarl ) // dummy to satisfy game entry @@ -721,12 +725,14 @@ GAMEL( 1974, rebound, 0, rebound, rebound, rebound_state, empty_init, ROT0 GAMEL( 1976, breakout, 0, breakout, breakout, breakout_state, empty_init, ROT90, "Atari", "Breakout [TTL]", MACHINE_SUPPORTS_SAVE, layout_breakout) // 100% TTL -//GAME( 1973, coupedav, pongd, pongd, pongd, driver_device, empty_init, ROT0, "Atari France", "Coupe Davis [TTL]", MACHINE_SUPPORTS_SAVE) -//GAME( 1973, pongbarl, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Pong In-A-Barrel [TTL]", MACHINE_SUPPORTS_SAVE) -//GAME( 1974, cktpong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari / National Entertainment Co.", "Cocktail Pong [TTL]", MACHINE_SUPPORTS_SAVE) -//GAME( 1974, drpong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Dr. Pong [TTL]", MACHINE_SUPPORTS_SAVE) -//GAME( 1974, pupppong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Puppy Pong [TTL]", MACHINE_SUPPORTS_SAVE) -//GAME( 1974, snoopong, pong, pong, pong, driver_device, empty_init, ROT0, "Atari", "Snoopy Pong [TTL]", MACHINE_SUPPORTS_SAVE) -//GAME( 1974, suprpong, 0, suprpong, pong, driver_device, empty_init, ROT0, "Atari", "Superpong [TTL]", MACHINE_SUPPORTS_SAVE) -//GAMEL( 1976, breakckt, breakout, breakout, breakout, driver_device, empty_init, ROT90, "Atari", "Breakout Cocktail [TTL]", MACHINE_SUPPORTS_SAVE, layout_breakckt) -//GAMEL( 1976, consolet, breakout, breakout, breakout, driver_device, empty_init, ROT90, "Atari Europe", "Consolette [TTL]", MACHINE_SUPPORTS_SAVE, layout_consolet) +//GAMEL(1974, spike, rebound, rebound, rebound, rebound_state, empty_init, ROT0, "Atari/Kee", "Spike [TTL]", MACHINE_IS_SKELETON) +//GAMEL(1974, volleyball, rebound, rebound, rebound, rebound_state, empty_init, ROT0, "Atari", "Volleyball [TTL]", MACHINE_IS_SKELETON) +//GAME( 1973, coupedav, pongd, pongd, pongd, pong_state, empty_init, ROT0, "Atari France", "Coupe Davis [TTL]", MACHINE_SUPPORTS_SAVE) +//GAME( 1973, pongbarl, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Pong In-A-Barrel [TTL]", MACHINE_SUPPORTS_SAVE) +//GAME( 1974, cktpong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari / National Entertainment Co.", "Cocktail Pong [TTL]", MACHINE_SUPPORTS_SAVE) +//GAME( 1974, drpong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Dr. Pong [TTL]", MACHINE_SUPPORTS_SAVE) +//GAME( 1974, pupppong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Puppy Pong [TTL]", MACHINE_SUPPORTS_SAVE) +//GAME( 1974, snoopong, pong, pong, pong, pong_state, empty_init, ROT0, "Atari", "Snoopy Pong [TTL]", MACHINE_SUPPORTS_SAVE) +//GAME( 1974, suprpong, 0, suprpong, pong, pong_state, empty_init, ROT0, "Atari", "Superpong [TTL]", MACHINE_SUPPORTS_SAVE) +//GAMEL( 1976, breakckt, breakout, breakout, breakout, breakout_state, empty_init, ROT90, "Atari", "Breakout Cocktail [TTL]", MACHINE_SUPPORTS_SAVE, layout_breakckt) +//GAMEL( 1976, consolet, breakout, breakout, breakout, breakout_state, empty_init, ROT90, "Atari Europe", "Consolette [TTL]", MACHINE_SUPPORTS_SAVE, layout_consolet) diff --git a/src/mame/drivers/prehisle.cpp b/src/mame/drivers/prehisle.cpp index 15421ccff07..9bed8d3cc2e 100644 --- a/src/mame/drivers/prehisle.cpp +++ b/src/mame/drivers/prehisle.cpp @@ -24,7 +24,7 @@ WRITE16_MEMBER(prehisle_state::soundcmd_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/proconn.cpp b/src/mame/drivers/proconn.cpp index 949c1cc24f4..45f469e39b6 100644 --- a/src/mame/drivers/proconn.cpp +++ b/src/mame/drivers/proconn.cpp @@ -61,9 +61,9 @@ public: private: template <unsigned N> DECLARE_WRITE8_MEMBER( ay_w ) { m_ay->address_data_w(N, data); } - template <unsigned N> DECLARE_WRITE8_MEMBER( ctc_w ) { m_z80ctc->write(space, N, data); } + template <unsigned N> DECLARE_WRITE8_MEMBER( ctc_w ) { m_z80ctc->write(N, data); } - template <unsigned N> DECLARE_WRITE8_MEMBER( sio_w ) { m_z80sio->cd_ba_w(space, N, data); } + template <unsigned N> DECLARE_WRITE8_MEMBER( sio_w ) { m_z80sio->cd_ba_w(N, data); } template <unsigned N> DECLARE_WRITE8_MEMBER( pio1_w ) { m_z80pio[0]->write(space, N, data); } template <unsigned N> DECLARE_WRITE8_MEMBER( pio2_w ) { m_z80pio[1]->write(space, N, data); } @@ -71,9 +71,9 @@ private: template <unsigned N> DECLARE_WRITE8_MEMBER( pio4_w ) { m_z80pio[3]->write(space, N, data); } template <unsigned N> DECLARE_WRITE8_MEMBER( pio5_w ) { m_z80pio[4]->write(space, N, data); } - template <unsigned N> DECLARE_READ8_MEMBER( ctc_r ) { return m_z80ctc->read(space, N); } + template <unsigned N> DECLARE_READ8_MEMBER( ctc_r ) { return m_z80ctc->read(N); } - template <unsigned N> DECLARE_READ8_MEMBER( sio_r ) { return m_z80sio->cd_ba_r(space, N); } + template <unsigned N> DECLARE_READ8_MEMBER( sio_r ) { return m_z80sio->cd_ba_r(N); } template <unsigned N> DECLARE_READ8_MEMBER( pio1_r ) { return m_z80pio[0]->read(space, N); } template <unsigned N> DECLARE_READ8_MEMBER( pio2_r ) { return m_z80pio[1]->read(space, N); } diff --git a/src/mame/drivers/pturn.cpp b/src/mame/drivers/pturn.cpp index 14d50a76a92..41d42fb1870 100644 --- a/src/mame/drivers/pturn.cpp +++ b/src/mame/drivers/pturn.cpp @@ -512,8 +512,7 @@ void pturn_state::machine_start() void pturn_state::machine_reset() { - address_space &space = m_maincpu->space(AS_PROGRAM); - m_soundlatch->clear_w(space,0,0); + m_soundlatch->clear_w(); m_nmi_sub = false; } diff --git a/src/mame/drivers/quasar.cpp b/src/mame/drivers/quasar.cpp index 3edcfd88703..f14c2e4a4ab 100644 --- a/src/mame/drivers/quasar.cpp +++ b/src/mame/drivers/quasar.cpp @@ -95,17 +95,17 @@ WRITE8_MEMBER(quasar_state::quasar_sh_command_w) // lower nibble = command to I8035 // not necessarily like this, but it seems to work better than direct mapping // (although schematics has it as direct - but then the schematics are wrong elsewhere to!) - m_soundlatch->write(space, 0, (data & 8) + ((data >> 1) & 3) + ((data << 2) & 4)); + m_soundlatch->write((data & 8) + ((data >> 1) & 3) + ((data << 2) & 4)); } READ8_MEMBER(quasar_state::quasar_sh_command_r) { - return m_soundlatch->read(space, 0) + (ioport("DSW2")->read() & 0x30); + return m_soundlatch->read() + (ioport("DSW2")->read() & 0x30); } READ_LINE_MEMBER(quasar_state::audio_t1_r) { - return (m_soundlatch->read(machine().dummy_space(), 0) == 0); + return (m_soundlatch->read() == 0); } // memory map taken from the manual diff --git a/src/mame/drivers/quizpun2.cpp b/src/mame/drivers/quizpun2.cpp index 08a258ad216..ef4be0ec9ec 100644 --- a/src/mame/drivers/quizpun2.cpp +++ b/src/mame/drivers/quizpun2.cpp @@ -326,7 +326,7 @@ WRITE8_MEMBER(quizpun2_state::irq_ack) WRITE8_MEMBER(quizpun2_state::soundlatch_w) { - m_soundlatch->write(space, 0, data ^ 0x80); + m_soundlatch->write(data ^ 0x80); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/r2dtank.cpp b/src/mame/drivers/r2dtank.cpp index dff5a7cfa5a..f97d9f48f16 100644 --- a/src/mame/drivers/r2dtank.cpp +++ b/src/mame/drivers/r2dtank.cpp @@ -142,7 +142,7 @@ WRITE_LINE_MEMBER(r2dtank_state::main_cpu_irq) READ8_MEMBER(r2dtank_state::audio_command_r) { - uint8_t ret = m_soundlatch->read(space, 0); + uint8_t ret = m_soundlatch->read(); if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Command Read: %x\n", m_audiocpu->pc(), ret); @@ -152,7 +152,7 @@ if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Command Read: %x\n", m_audiocpu WRITE8_MEMBER(r2dtank_state::audio_command_w) { - m_soundlatch->write(space, 0, ~data); + m_soundlatch->write(~data); m_audiocpu->set_input_line(M6802_IRQ_LINE, HOLD_LINE); if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Command Write: %x\n", m_maincpu->pc(), data^0xff); @@ -161,7 +161,7 @@ if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Command Write: %x\n", m_maincp READ8_MEMBER(r2dtank_state::audio_answer_r) { - uint8_t ret = m_soundlatch2->read(space, 0); + uint8_t ret = m_soundlatch2->read(); if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Answer Read: %x\n", m_maincpu->pc(), ret); return ret; @@ -174,7 +174,7 @@ WRITE8_MEMBER(r2dtank_state::audio_answer_w) if (m_audiocpu->pc() == 0xfb12) data = 0x00; - m_soundlatch2->write(space, 0, data); + m_soundlatch2->write(data); m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Answer Write: %x\n", m_audiocpu->pc(), data); diff --git a/src/mame/drivers/r2dx_v33.cpp b/src/mame/drivers/r2dx_v33.cpp index 09d63385d51..0fa581fbea7 100644 --- a/src/mame/drivers/r2dx_v33.cpp +++ b/src/mame/drivers/r2dx_v33.cpp @@ -376,7 +376,7 @@ WRITE16_MEMBER(r2dx_v33_state::r2dx_paldma_w) { uint16_t palval = space.read_word(src); src += 2; - m_palette->write16(space, i, palval, 0xffff); + m_palette->write16(i, palval); } } diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp index 8a5a415c846..d743b9afad3 100644 --- a/src/mame/drivers/rainbow.cpp +++ b/src/mame/drivers/rainbow.cpp @@ -2756,7 +2756,7 @@ WRITE8_MEMBER(rainbow_state::diagnostic_w) // 8088 (port 0A WRITTEN). Fig.4-28 + // Install 8088 read / write handler once loopback test is over if ( !(data & 32) && (m_diagnostic & 32) ) { - io.install_readwrite_handler(0x40, 0x43, READ8_DEVICE_DELEGATE(m_mpsc, upd7201_new_device,cd_ba_r), WRITE8_DEVICE_DELEGATE(m_mpsc, upd7201_new_device, cd_ba_w) ); + io.install_readwrite_handler(0x40, 0x43, read8sm_delegate(FUNC(upd7201_new_device::cd_ba_r), &*m_mpsc), write8sm_delegate(FUNC(upd7201_new_device::cd_ba_w), &*m_mpsc)); logerror("\n **** COMM HANDLER INSTALLED **** "); //popmessage("Autoboot from drive %c", m_p_nvram[0xab] ? (64 + m_p_nvram[0xab]) : 0x3F ); } diff --git a/src/mame/drivers/rastan.cpp b/src/mame/drivers/rastan.cpp index 93a5a5797ac..66367df97c9 100644 --- a/src/mame/drivers/rastan.cpp +++ b/src/mame/drivers/rastan.cpp @@ -184,7 +184,7 @@ WRITE_LINE_MEMBER(rastan_state::rastan_msm5205_vck) if (m_adpcm_ff) { - m_adpcm_sel->write_ba(m_adpcm_data[m_adpcm_pos]); + m_adpcm_sel->ba_w(m_adpcm_data[m_adpcm_pos]); m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff; } } diff --git a/src/mame/drivers/realbrk.cpp b/src/mame/drivers/realbrk.cpp index c1a07c2cbd8..5bcc5ab632a 100644 --- a/src/mame/drivers/realbrk.cpp +++ b/src/mame/drivers/realbrk.cpp @@ -174,7 +174,6 @@ void realbrk_state::base_mem(address_map &map) map(0x606000, 0x60600f).ram().w(FUNC(realbrk_state::vregs_w)).share("vregs"); // Scroll + Video Regs map(0x800000, 0x800003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0xff00); // YMZ280 map(0xfe0000, 0xfeffff).ram(); // RAM - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } /*realbrk specific memory map*/ @@ -218,7 +217,6 @@ void realbrk_state::dai2kaku_mem(address_map &map) map(0xc00002, 0xc00003).portr("IN1"); // Coins map(0xc00004, 0xc00005).ram().r(FUNC(realbrk_state::realbrk_dsw_r)).share("dsw_select"); // DSW select map(0xff0000, 0xfffbff).ram(); // RAM - map(0xfffd0a, 0xfffd0b).w(FUNC(realbrk_state::dai2kaku_flipscreen_w)); // Hack! Parallel port data register } /*************************************************************************** @@ -764,19 +762,15 @@ WRITE_LINE_MEMBER(realbrk_state::vblank_irq) { /* VBlank is connected to INT1 (external interrupts pin 1) */ if (state) - m_tmp68301->external_interrupt_1(); + m_maincpu->external_interrupt_1(); } void realbrk_state::realbrk(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, XTAL(32'000'000) / 2); /* !! TMP68301 !! */ + TMP68301(config, m_maincpu, XTAL(32'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::realbrk_mem); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - TMP68301(config, m_tmp68301, 0); - m_tmp68301->set_cputag(m_maincpu); - m_tmp68301->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w)); + m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w)); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -809,8 +803,7 @@ void realbrk_state::pkgnsh(machine_config &config) realbrk(config); m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::pkgnsh_mem); - - m_tmp68301->out_parallel_callback().set_nop(); + m_maincpu->out_parallel_callback().set_nop(); } void realbrk_state::pkgnshdx(machine_config &config) @@ -825,6 +818,7 @@ void realbrk_state::dai2kaku(machine_config &config) realbrk(config); m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::dai2kaku_mem); + m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::dai2kaku_flipscreen_w)); m_gfxdecode->set_info(gfx_dai2kaku); m_screen->set_screen_update(FUNC(realbrk_state::screen_update_dai2kaku)); diff --git a/src/mame/drivers/retofinv.cpp b/src/mame/drivers/retofinv.cpp index bb0be85c97b..b951cce01fc 100644 --- a/src/mame/drivers/retofinv.cpp +++ b/src/mame/drivers/retofinv.cpp @@ -132,7 +132,7 @@ READ8_MEMBER(retofinv_state::cpu0_mf800_r) WRITE8_MEMBER(retofinv_state::soundcommand_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/rockrage.cpp b/src/mame/drivers/rockrage.cpp index 803b9859ffa..4d28a96862c 100644 --- a/src/mame/drivers/rockrage.cpp +++ b/src/mame/drivers/rockrage.cpp @@ -81,7 +81,7 @@ WRITE8_MEMBER(rockrage_state::rockrage_bankswitch_w) WRITE8_MEMBER(rockrage_state::rockrage_sh_irqtrigger_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp index da1d4c8d39d..00b983b2e0a 100644 --- a/src/mame/drivers/rohga.cpp +++ b/src/mame/drivers/rohga.cpp @@ -901,7 +901,6 @@ void rohga_state::rohga(machine_config &config) m_decocomn->set_palette_tag(m_palette); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x64); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -917,7 +916,6 @@ void rohga_state::rohga(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -993,7 +991,6 @@ void rohga_state::wizdfire(machine_config &config) m_decocomn->set_palette_tag(m_palette); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1009,7 +1006,6 @@ void rohga_state::wizdfire(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -1090,7 +1086,6 @@ void rohga_state::nitrobal(machine_config &config) m_decocomn->set_palette_tag(m_palette); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_32x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1106,7 +1101,6 @@ void rohga_state::nitrobal(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_32x32); m_deco_tilegen[1]->set_pf2_size(DECO_32x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); @@ -1188,7 +1182,6 @@ void rohga_state::schmeisr(machine_config &config) m_decocomn->set_palette_tag(m_palette); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x64); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -1204,7 +1197,6 @@ void rohga_state::schmeisr(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/ron.cpp b/src/mame/drivers/ron.cpp index a2f6d8d91b2..7b8a5294888 100644 --- a/src/mame/drivers/ron.cpp +++ b/src/mame/drivers/ron.cpp @@ -2,7 +2,7 @@ // copyright-holders:Angelo Salese, AJR /*************************************************************************** - Ron II Mah-Jongg (c) 1981 Sanritsu + Futari Mahjong Ron II (c) 1981 Sanritsu TODO: - colors; @@ -559,4 +559,4 @@ ROM_START( ron2 ) ROM_LOAD( "82s129_4.2m", 0x100, 0x100, CRC(f3c05d59) SHA1(bd48963aa9f2bedaa0c1fd031d7c93089161d1d9) ) ROM_END -GAME( 1981, ron2, 0, ron, ron, ron_state, empty_init, ROT270, "Sanritsu", "Ron II Mah-Jongg", MACHINE_IMPERFECT_SOUND | MACHINE_WRONG_COLORS ) +GAME( 1981, ron2, 0, ron, ron, ron_state, empty_init, ROT270, "Sanritsu", "Futari Mahjong Ron II", MACHINE_IMPERFECT_SOUND | MACHINE_WRONG_COLORS ) diff --git a/src/mame/drivers/roul.cpp b/src/mame/drivers/roul.cpp index 51e23dcbb38..69939afd1f8 100644 --- a/src/mame/drivers/roul.cpp +++ b/src/mame/drivers/roul.cpp @@ -200,7 +200,7 @@ WRITE8_MEMBER(roul_state::blitter_cmd_w) WRITE8_MEMBER(roul_state::sound_latch_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp index e7911dd960b..9e081d51c1a 100644 --- a/src/mame/drivers/royalmah.cpp +++ b/src/mame/drivers/royalmah.cpp @@ -948,7 +948,7 @@ READ8_MEMBER(royalmah_state::jansou_6405_r) WRITE8_MEMBER(royalmah_state::jansou_sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/rt1715.cpp b/src/mame/drivers/rt1715.cpp index 2ac070f25fd..8cc7fbb8309 100644 --- a/src/mame/drivers/rt1715.cpp +++ b/src/mame/drivers/rt1715.cpp @@ -363,11 +363,11 @@ void rt1715_state::rt1715_base_io(address_map &map) map.global_mask(0xff); map(0x08, 0x0b).rw(m_ctc0, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); map(0x0c, 0x0f).rw(m_sio0, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w)); -// map(0x10, 0x13).rw(m_ctc1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); -// map(0x14, 0x17).rw(m_sio1, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w)); +// map(0x10, 0x13).rw(m_ctc1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); +// map(0x14, 0x17).rw(m_sio1, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w)); map(0x18, 0x19).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write)); -// map(0x2c, 0x2f) // LT107CS -- serial DSR? -// map(0x30, 0x33) // LT111CS -- serial SEL? (data rate selector) +// map(0x2c, 0x2f) // LT107CS -- serial DSR? +// map(0x30, 0x33) // LT111CS -- serial SEL? (data rate selector) } void rt1715_state::rt1715_io(address_map &map) @@ -377,9 +377,9 @@ void rt1715_state::rt1715_io(address_map &map) map(0x00, 0x03).rw("a71", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)); // floppy data map(0x04, 0x07).rw("a72", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)); // floppy control/status map(0x20, 0x20).w(FUNC(rt1715_state::rt1715_floppy_enable)); -// map(0x24, 0x27).w(FUNC(rt1715_state::rt1715_rom_enable)); // MEMCS0 +// map(0x24, 0x27).w(FUNC(rt1715_state::rt1715_rom_enable)); // MEMCS0 map(0x28, 0x2b).w(FUNC(rt1715_state::rt1715_rom_disable)); // MEMCS1 -// map(0x34, 0x37) // BWSCS (read: memory start address, write: switch chargen) +// map(0x34, 0x37) // BWSCS (read: memory start address, write: switch chargen) } void rt1715_state::rt1715w_mem(address_map &map) @@ -403,14 +403,14 @@ void rt1715_state::rt1715w_io(address_map &map) map(0x00, 0x00).rw(m_dma, FUNC(z80dma_device::bus_r), FUNC(z80dma_device::bus_w)); // A2 map(0x04, 0x07).rw(m_ctc2, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); // A4 -// map(0x1a, 0x1b) // chargen write protection +// map(0x1a, 0x1b) // chargen write protection map(0x1c, 0x1d).m(m_fdc, FUNC(i8272a_device::map)); map(0x20, 0x23).w(FUNC(rt1715_state::rt1715w_krfd_w)); // KRFD -- FD-Steuerregister (A45) map(0x24, 0x27).w(FUNC(rt1715_state::rt1715w_set_bank)); // BR (A62, A63) map(0x28, 0x2b).w(FUNC(rt1715_state::rt1715w_floppy_motor)); // MOS map(0x34, 0x37).portr("S8"); // KON -- Konfigurations-schalter FD (config switch -- A114, DIP S8) -// map(0x38, 0x3b) // SR (RST1) -- Ru:cksetzen von Flip-Flops im FD -// map(0x3c, 0x3f) // RST (RST2) -- Ru:cksetzen von Flip-Flops in V.24 (Pru:ftechnik) +// map(0x38, 0x3b) // SR (RST1) -- Ru:cksetzen von Flip-Flops im FD +// map(0x3c, 0x3f) // RST (RST2) -- Ru:cksetzen von Flip-Flops in V.24 (Pru:ftechnik) // used via DMA only map(0x40, 0x40).r(m_fdc, FUNC(i8272a_device::msr_r)); map(0x41, 0x41).rw(m_fdc, FUNC(i8272a_device::dma_r), FUNC(i8272a_device::dma_w)); diff --git a/src/mame/drivers/sandscrp.cpp b/src/mame/drivers/sandscrp.cpp index 979af82096b..b7d812576f9 100644 --- a/src/mame/drivers/sandscrp.cpp +++ b/src/mame/drivers/sandscrp.cpp @@ -268,14 +268,14 @@ template<int Latch> READ8_MEMBER(sandscrp_state::soundlatch_r) { m_latch_full[Latch] = 0; - return m_soundlatch[Latch]->read(space,0); + return m_soundlatch[Latch]->read(); } template<int Latch> WRITE8_MEMBER(sandscrp_state::soundlatch_w) { m_latch_full[Latch] = 1; - m_soundlatch[Latch]->write(space,0,data); + m_soundlatch[Latch]->write(data); } void sandscrp_state::sandscrp_mem(address_map &map) diff --git a/src/mame/drivers/sauro.cpp b/src/mame/drivers/sauro.cpp index fa40c602acc..8c6399d45df 100644 --- a/src/mame/drivers/sauro.cpp +++ b/src/mame/drivers/sauro.cpp @@ -141,13 +141,13 @@ void sauro_state::machine_start() WRITE8_MEMBER(sauro_state::sauro_sound_command_w) { data |= 0x80; - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); } READ8_MEMBER(sauro_state::sauro_sound_command_r) { - int ret = m_soundlatch->read(space, offset); - m_soundlatch->clear_w(space, offset, 0); + int ret = m_soundlatch->read(); + m_soundlatch->clear_w(); return ret; } diff --git a/src/mame/drivers/sc2.cpp b/src/mame/drivers/sc2.cpp index e2c170bd01e..a6bacd50ea2 100644 --- a/src/mame/drivers/sc2.cpp +++ b/src/mame/drivers/sc2.cpp @@ -260,5 +260,5 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -COMP( 1981, sc2, 0, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2 (rev. E)", MACHINE_SUPPORTS_SAVE ) -COMP( 1981, sc2a, sc2, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2", MACHINE_SUPPORTS_SAVE ) +COMP( 1981, sc2, 0, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2 (rev. E)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1981, sc2a, sc2, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/scotrsht.cpp b/src/mame/drivers/scotrsht.cpp index b8685aacfac..a8de6f17167 100644 --- a/src/mame/drivers/scotrsht.cpp +++ b/src/mame/drivers/scotrsht.cpp @@ -60,7 +60,7 @@ WRITE_LINE_MEMBER(scotrsht_state::vblank_irq) WRITE8_MEMBER(scotrsht_state::soundlatch_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/scyclone.cpp b/src/mame/drivers/scyclone.cpp index 020e76915c5..81e84ef52f0 100644 --- a/src/mame/drivers/scyclone.cpp +++ b/src/mame/drivers/scyclone.cpp @@ -534,24 +534,24 @@ WRITE8_MEMBER(scyclone_state::snd_3001_w) // need to clear the latch somewhere, the command value is written back here and at 3005 // after acknowledging a command // might actually reset the DACs as there are (at least) 2 of them? - m_soundlatch->clear_w(space, 0, data); + m_soundlatch->clear_w(); } /* WRITE8_MEMBER(scyclone_state::snd_3003_w) { -// m_soundlatch->clear_w(space, 0, data); +// m_soundlatch->clear_w(); } WRITE8_MEMBER(scyclone_state::snd_3004_w) { -// m_soundlatch->clear_w(space, 0, data); +// m_soundlatch->clear_w(); } */ WRITE8_MEMBER(scyclone_state::snd_3005_w) { -// m_soundlatch->clear_w(space, 0, data); +// m_soundlatch->clear_w(); } diff --git a/src/mame/drivers/sega_beena.cpp b/src/mame/drivers/sega_beena.cpp index 10ceb7c14c0..001d50d03b7 100644 --- a/src/mame/drivers/sega_beena.cpp +++ b/src/mame/drivers/sega_beena.cpp @@ -1,36 +1,46 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood +// copyright-holders:R. Belmont /****************************************************************************** Sega Beena - non-video 'book' based learning system, like LeapPad etc. + apbeena.cpp - unknown CPU type (inside Sega custom?) + Skeleton driver for the Sega Advanced Pico BEENA + + H/W is custom Sega SoC with ARM7TDMI core at 81 MHz. + + TODO: + Everything! + Needs the internal BIOS dumped. + Component list / PCB diagram cartridge ROM has 'edinburgh' in the header, maybe a system codename? ROM is also full of OGG files containing the string 'Encoded with Speex speex-1.0.4' as well as .mid files for music - TODO: component list! - *******************************************************************************/ #include "emu.h" #include "bus/generic/slot.h" #include "bus/generic/carts.h" +#include "cpu/arm7/arm7.h" #include "softlist.h" #include "speaker.h" +#include "screen.h" + class sega_beena_state : public driver_device { public: sega_beena_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) + , m_maincpu(*this, "arm7") , m_cart(*this, "cartslot") , m_cart_region(nullptr) + , m_bank(*this, "cartbank") { } void sega_beena(machine_config &config); @@ -39,12 +49,24 @@ private: virtual void machine_start() override; virtual void machine_reset() override; + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart); + void beena_arm7_map(address_map &map); + + required_device<arm7_cpu_device> m_maincpu; required_device<generic_slot_device> m_cart; memory_region *m_cart_region; + optional_memory_bank m_bank; }; +void sega_beena_state::beena_arm7_map(address_map &map) +{ + map(0x00000000, 0x000001ff).rom().bankr("cartbank"); + map(0x80000000, 0x807fffff).rom().bankr("cartbank"); +} + void sega_beena_state::machine_start() { // if there's a cart, override the standard mapping @@ -52,6 +74,9 @@ void sega_beena_state::machine_start() { std::string region_tag; m_cart_region = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); + + m_bank->configure_entries(0, (m_cart_region->bytes() + 0x7fffff) / 0x800000, m_cart_region->base(), 0x800000); + m_bank->set_entry(0); } } @@ -66,6 +91,7 @@ DEVICE_IMAGE_LOAD_MEMBER(sega_beena_state, cart) m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE); m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom"); + return image_init_result::PASS; } @@ -73,11 +99,22 @@ static INPUT_PORTS_START( sega_beena ) INPUT_PORTS_END +uint32_t sega_beena_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + void sega_beena_state::sega_beena(machine_config &config) { - // unknown CPU + ARM7_BE(config, m_maincpu, 81'000'000); + m_maincpu->set_addrmap(AS_PROGRAM, &sega_beena_state::beena_arm7_map); - // no screen + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(640, 480); + screen.set_visarea(0, 640-1, 0, 480-1); + screen.set_screen_update(FUNC(sega_beena_state::screen_update)); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); @@ -85,15 +122,16 @@ void sega_beena_state::sega_beena(machine_config &config) GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "sega_beena_cart"); m_cart->set_width(GENERIC_ROM16_WIDTH); m_cart->set_device_load(device_image_load_delegate(&sega_beena_state::device_image_load_cart, this)); + m_cart->set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("sega_beena_cart"); } ROM_START( beena ) - ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) - // no BIOS or internal to CPU + ROM_REGION32_BE( 0x80000, "bios", 0 ) // SoC internal BIOS + ROM_LOAD16_WORD_SWAP( "beenabios.bin", 0x000000, 0x080000, NO_DUMP ) ROM_END // year, name, parent, compat, machine, input, class, init, company, fullname, flags -CONS( 200?, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Beena", MACHINE_IS_SKELETON ) +CONS( 2009, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Advanced Pico BEENA", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp index 547192894ba..84cc3e77bab 100644 --- a/src/mame/drivers/segahang.cpp +++ b/src/mame/drivers/segahang.cpp @@ -301,7 +301,7 @@ READ8_MEMBER( segahang_state::sound_data_r ) { // assert ACK m_i8255_1->pc6_w(CLEAR_LINE); - return m_soundlatch->read(space, 0); + return m_soundlatch->read(); } diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp index a9f15030879..5f45d7f174e 100644 --- a/src/mame/drivers/segas16a.cpp +++ b/src/mame/drivers/segas16a.cpp @@ -318,7 +318,7 @@ READ8_MEMBER( segas16a_state::sound_data_r ) { // assert ACK m_i8255->pc6_w(CLEAR_LINE); - return m_soundlatch->read(space, 0); + return m_soundlatch->read(); } diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 1b13df462e6..93dfe82841f 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -966,7 +966,7 @@ void segas16b_state::memory_mapper(sega_315_5195_mapper_device &mapper, uint8_t WRITE16_MEMBER( segas16b_state::sound_w16 ) { if (m_soundlatch != nullptr) - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); if (m_soundcpu != nullptr) m_soundcpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/segas18.cpp b/src/mame/drivers/segas18.cpp index 8ab3a2752e8..ad5e6afac73 100644 --- a/src/mame/drivers/segas18.cpp +++ b/src/mame/drivers/segas18.cpp @@ -2749,6 +2749,9 @@ ROM_END Moonwalker, Sega System 18 CPU: FD1094 (317-0158) ROM Board: 171-5873B + Main board: 837-7530-01 + Game BD: 833-7528-01 MOONWALKER + ROM Board: 834-7529-01 */ ROM_START( mwalku ) ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code - custom cpu 317-0158 diff --git a/src/mame/drivers/seicupbl.cpp b/src/mame/drivers/seicupbl.cpp index 37408e10c00..a052a287d03 100644 --- a/src/mame/drivers/seicupbl.cpp +++ b/src/mame/drivers/seicupbl.cpp @@ -11,6 +11,13 @@ - tilemap chip drawings might be merged between this and other Seibu implementations. +OSC: 40MHz, 15MHz & 8MHz + +Measured clocks: + MC68000P12F - 14.99MHz + Z0840006PSC - 3.996MHz + OKI M6295 - 0.999MHz + ***************************************************************************/ @@ -25,8 +32,6 @@ #include "speaker.h" -#define MAIN_CLOCK XTAL(8'000'000) - class seicupbl_state : public driver_device { public: @@ -551,7 +556,7 @@ static GFXDECODE_START( gfx_seicupbl_csb ) GFXDECODE_ENTRY( "char", 0, cupsocsb_8x8_tilelayout, 48*16, 16 ) GFXDECODE_ENTRY( "gfx3", 0, cupsocsb_tilelayout, 0*16, 32 ) GFXDECODE_ENTRY( "gfx4", 0, cupsocsb_tilelayout, 32*16, 16 ) /* unused */ - GFXDECODE_ENTRY( "sprite", 0, cupsocsb_spritelayout, 0*16, 8*16 ) + GFXDECODE_ENTRY( "sprite", 0, cupsocsb_spritelayout, 0*16, 8*16 ) GFXDECODE_ENTRY( "gfx5", 0, cupsocsb_tilelayout, 32*16, 16 ) GFXDECODE_ENTRY( "gfx6", 0, cupsocsb_tilelayout, 16*16, 16 ) GFXDECODE_END @@ -560,14 +565,14 @@ GFXDECODE_END void seicupbl_state::cupsocbl(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, 12000000); + M68000(config, m_maincpu, 15_MHz_XTAL); // 15MHz verified m_maincpu->set_addrmap(AS_PROGRAM, &seicupbl_state::cupsocbl_mem); m_maincpu->set_vblank_int("screen", FUNC(seicupbl_state::irq4_line_hold)); /* VBL */ SEIBU_COP_BOOTLEG(config, "seibucop_boot", m_maincpu); /*Different Sound hardware*/ - Z80(config, m_audiocpu, 14318180/4); + Z80(config, m_audiocpu, 8_MHz_XTAL/2); // 4MHz verified m_audiocpu->set_addrmap(AS_PROGRAM, &seicupbl_state::cupsocbl_sound_mem); //m_audiocpu->set_periodic_int("screen", FUNC(seicupbl_state::nmi_line_pulse)); @@ -597,7 +602,7 @@ void seicupbl_state::cupsocbl(machine_config &config) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); + OKIM6295(config, m_oki, 8_MHz_XTAL/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // 1MHz verified } @@ -621,10 +626,12 @@ Seibu Cup Soccer - Seibu - Bootleg 1 x oki 6295 sc_01 (prg) sc_02 and sc_03 (data) +8MHz & 40MHz OSC (prg) -1 x 68000 +1 x 68000P12 sc_04 and sc_05 +15MHz OSC (gfx) 2 x ti tpc1020 @@ -700,26 +707,31 @@ ROM_START( cupsocsb ) ROM_LOAD16_BYTE( "sc_14.bin", 0x00001, 0x080000, CRC(566086c2) SHA1(b7d09ce978f99ecc0d1975b31330ed49317701d5) ) ROM_END -/* slight changes in the program roms compared to above set, all remaining roms were the same */ +/* slight changes in the program roms compared to above set, all remaining roms were the same + main PCB is marked: "SOCCER 1", "rev.5" and "lc" on component side ("lc" is the Italian for "Lato Componenti" which translates to "Components Side") + main PCB is marked: "SOCCER 1", "rev.5" and "ls" on component side ("ls" is the Italian for "Lato Saldature" which translates to "Solders Side") + ROMs PCB is marked: "CALCIO 2", "rev.3" and "lc" on component side ("CALCIO is the Italian for "SOCCER"; "lc" is the Italian for "Lato Componenti" which translates to "Components Side") + ROMs PCB is marked: "CALCIO 2", "rev.3" and "ls" on component side ("CALCIO is the Italian for "SOCCER"; "ls" is the Italian for "Lato Saldature" which translates to "Solders Side") + main PCB is labelled: "SOCCER" on solder side */ ROM_START( cupsocsb2 ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "4", 0x00001, 0x80000, CRC(83db76f8) SHA1(ffcd0a728de58871b945c15cc27da374b587e170) ) // sldh - ROM_LOAD16_BYTE( "5", 0x00000, 0x80000, CRC(c01e88c6) SHA1(8f90261792343c92ddd877ab8a2480b5aac82961) ) // sldh + ROM_LOAD16_BYTE( "4.27040.u11", 0x00001, 0x80000, CRC(83db76f8) SHA1(ffcd0a728de58871b945c15cc27da374b587e170) ) // actually was a 27c4001 + ROM_LOAD16_BYTE( "5.27040.u17", 0x00000, 0x80000, CRC(c01e88c6) SHA1(8f90261792343c92ddd877ab8a2480b5aac82961) ) // actually was a 27c4001 ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code */ - ROM_LOAD( "sc_01.bin", 0x000000, 0x08000, CRC(cea39d6d) SHA1(f0b79c03ffafdd1e57673d6d4836becbe415110b) ) + ROM_LOAD( "1.27512.u20", 0x000000, 0x08000, CRC(cea39d6d) SHA1(f0b79c03ffafdd1e57673d6d4836becbe415110b) ) // 27c512 ROM_CONTINUE( 0x000000, 0x08000 ) ROM_REGION( 0x200000, "sprite", ROMREGION_INVERT ) /* bootleg sprite gfx */ - ROM_LOAD( "sc_07.bin", 0x000000, 0x080000, CRC(dcb29d01) SHA1(72b4234622605f0ab03f21fdb6a61c6dac36000d) ) - ROM_LOAD( "sc_06.bin", 0x080000, 0x080000, CRC(2dc70e05) SHA1(f1d0beb8428a7e1d7c7818e6719abdc543b2fa80) ) + ROM_LOAD( "7.27040.u86", 0x000000, 0x080000, CRC(dcb29d01) SHA1(72b4234622605f0ab03f21fdb6a61c6dac36000d) ) // actually was a 27c4001 + ROM_LOAD( "6.27040.u87", 0x080000, 0x080000, CRC(2dc70e05) SHA1(f1d0beb8428a7e1d7c7818e6719abdc543b2fa80) ) // actually was a 27c4001 ROM_COPY( "sprite", 0x00000, 0x100000, 0x100000 ) ROM_REGION( 0x200000, "test1", 0 ) /* bootleg tile gfx */ - ROM_LOAD16_BYTE( "sc_09.bin", 0x000000, 0x080000, CRC(695b6342) SHA1(dfccb43789021ba2568b9284ae61e64f7f89b152) ) - ROM_LOAD16_BYTE( "sc_10.bin", 0x000001, 0x080000, CRC(27e172b8) SHA1(ed86db2f42c8061607d46f2407b0130aaf692a02) ) - ROM_LOAD16_BYTE( "sc_08.bin", 0x100000, 0x080000, CRC(637120f3) SHA1(b4b2ad192e46ff80d4cb440d7fb6dac215a353ed) ) - ROM_LOAD16_BYTE( "sc_11.bin", 0x100001, 0x080000, CRC(0cd5ca5e) SHA1(a59665e543e9383355de2576e6693348ec356591) ) + ROM_LOAD16_BYTE( "9.27040.u36", 0x000000, 0x080000, CRC(695b6342) SHA1(dfccb43789021ba2568b9284ae61e64f7f89b152) ) // actually was a 27c4001 + ROM_LOAD16_BYTE( "10.27040.u37", 0x000001, 0x080000, CRC(27e172b8) SHA1(ed86db2f42c8061607d46f2407b0130aaf692a02) ) // actually was a 27c4001 + ROM_LOAD16_BYTE( "8.27040.u38", 0x100000, 0x080000, CRC(637120f3) SHA1(b4b2ad192e46ff80d4cb440d7fb6dac215a353ed) ) // actually was a 27c4001 + ROM_LOAD16_BYTE( "11.27040.u39", 0x100001, 0x080000, CRC(0cd5ca5e) SHA1(a59665e543e9383355de2576e6693348ec356591) ) // actually was a 27c4001 ROM_REGION( 0x020000, "char", ROMREGION_INVERT ) ROM_COPY( "test1", 0x080000, 0x00000, 0x020000 ) @@ -737,9 +749,11 @@ ROM_START( cupsocsb2 ) ROM_REGION( 0x080000, "gfx6", ROMREGION_INVERT ) /* LBK tiles */ ROM_COPY( "gfx5", 0x00000, 0x00000, 0x080000 ) + // A dump of 02.u26 from a second PCB had 3 different bytes: 0x8000 from 0x80 to 0xff; 0x10000 from 0xa4 to 0x4a; 0x18000 from 0x4a to 0xa4. + // However the first dump matches all the other sets and all the other ROMs from the second PCB match the ones from the first. ROM_REGION( 0x100000, "adpcm", ROMREGION_ERASEFF ) /* ADPCM samples */ - ROM_LOAD( "sc_02.bin", 0x000000, 0x020000, CRC(a70d4f03) SHA1(c2482e624c8a828a94206a36d10c1021ad8ca1d0) ) - ROM_LOAD( "sc_03.bin", 0x080000, 0x080000, CRC(6e254d12) SHA1(857779dbd276b688201a8ea3afd5817e38acad2e) ) + ROM_LOAD( "2.27010.u26", 0x000000, 0x020000, CRC(a70d4f03) SHA1(c2482e624c8a828a94206a36d10c1021ad8ca1d0) ) // 27c010a + ROM_LOAD( "3.27040.u25", 0x080000, 0x080000, CRC(6e254d12) SHA1(857779dbd276b688201a8ea3afd5817e38acad2e) ) // actually was a 27c4001 ROM_REGION( 0x200000, "oki", ROMREGION_ERASEFF ) ROM_COPY( "adpcm", 0x00000, 0x000000, 0x20000 ) //bank 0 @@ -756,11 +770,11 @@ ROM_START( cupsocsb2 ) /* these are maths tables, for whatever COP replacement the bootlegs use */ ROM_REGION( 0x500000, "unknown0", 0 ) - ROM_LOAD16_BYTE( "sc_13.bin", 0x00000, 0x010000, CRC(229bddd8) SHA1(0924bf29db9c5a970546f154e7752697fdce6a58) ) - ROM_LOAD16_BYTE( "sc_12.bin", 0x00001, 0x010000, CRC(dabfa826) SHA1(0db587c846755491b169ef7751ba8e7cdc2607e6) ) + ROM_LOAD16_BYTE( "13.bin", 0x00000, 0x010000, CRC(229bddd8) SHA1(0924bf29db9c5a970546f154e7752697fdce6a58) ) // 27c512 + ROM_LOAD16_BYTE( "12.bin", 0x00001, 0x010000, CRC(dabfa826) SHA1(0db587c846755491b169ef7751ba8e7cdc2607e6) ) // 27c512 ROM_REGION( 0x500000, "unknown1", 0 ) - ROM_LOAD16_BYTE( "sc_15.bin", 0x00000, 0x080000, CRC(8fd87e65) SHA1(acc9fd0289fa9ab60bec16d3e642039380e5180a) ) - ROM_LOAD16_BYTE( "sc_14.bin", 0x00001, 0x080000, CRC(566086c2) SHA1(b7d09ce978f99ecc0d1975b31330ed49317701d5) ) + ROM_LOAD16_BYTE( "15.bin", 0x00000, 0x080000, CRC(8fd87e65) SHA1(acc9fd0289fa9ab60bec16d3e642039380e5180a) ) // 27c4001 + ROM_LOAD16_BYTE( "14.bin", 0x00001, 0x080000, CRC(566086c2) SHA1(b7d09ce978f99ecc0d1975b31330ed49317701d5) ) // 27c4001 ROM_END ROM_START( cupsocsb3 ) @@ -825,6 +839,6 @@ ROM_START( cupsocsb3 ) ROM_END -GAME( 1992, cupsocsb, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1992, cupsocsb2,cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 2)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1992, cupsocsb3,cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 3)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) +GAME( 1992, cupsocsb, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) +GAME( 1992, cupsocsb2, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 2)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) +GAME( 1992, cupsocsb3, cupsoc, cupsocbl, cupsoc, seicupbl_state, empty_init, ROT0, "bootleg", "Seibu Cup Soccer :Selection: (bootleg, set 3)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index 5db192687f8..791819745e0 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -1579,11 +1579,11 @@ WRITE16_MEMBER(seta_state::sub_ctrl_w) break; case 4/2: // not sure - if (ACCESSING_BITS_0_7) if(m_soundlatch[0] != nullptr) m_soundlatch[0]->write(space, 0, data & 0xff); + if (ACCESSING_BITS_0_7) if(m_soundlatch[0] != nullptr) m_soundlatch[0]->write(data & 0xff); break; case 6/2: // not sure - if (ACCESSING_BITS_0_7) if(m_soundlatch[1] != nullptr) m_soundlatch[1]->write(space, 0, data & 0xff); + if (ACCESSING_BITS_0_7) if(m_soundlatch[1] != nullptr) m_soundlatch[1]->write(data & 0xff); break; } @@ -2923,7 +2923,6 @@ void kiwame_state::kiwame_map(address_map &map) map(0xc00000, 0xc03fff).rw(m_x1, FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound map(0xd00000, 0xd00009).r(FUNC(kiwame_state::input_r)); // mahjong panel map(0xe00000, 0xe00003).r(FUNC(kiwame_state::seta_dsw_r)); // DSW - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); } @@ -3063,7 +3062,7 @@ void seta_state::umanclub_map(address_map &map) WRITE8_MEMBER(seta_state::utoukond_sound_control_w) { if (!BIT(data, 6)) - m_soundlatch[0]->acknowledge_w(space, 0, 0); + m_soundlatch[0]->acknowledge_w(); // other bits used for banking? (low nibble seems to always be 2) } @@ -3559,7 +3558,7 @@ WRITE8_MEMBER(seta_state::calibr50_sub_bankswitch_w) // Bit 3: NMICLR if (!BIT(data, 3)) - m_soundlatch[0]->acknowledge_w(space, 0, 0); + m_soundlatch[0]->acknowledge_w(); // Bit 2: IRQCLR if (!BIT(data, 2)) @@ -3571,7 +3570,7 @@ WRITE8_MEMBER(seta_state::calibr50_sub_bankswitch_w) WRITE8_MEMBER(seta_state::calibr50_soundlatch2_w) { - m_soundlatch[1]->write(space,0,data); + m_soundlatch[1]->write(data); m_subcpu->spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply } @@ -8039,7 +8038,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(seta_state::calibr50_interrupt) void usclssic_state::machine_start() { - m_buttonmux->write_ab(0xff); + m_buttonmux->ab_w(0xff); } @@ -9275,19 +9274,15 @@ void seta_state::triplfun(machine_config &config) WRITE_LINE_MEMBER(kiwame_state::kiwame_vblank) { if (state) - m_tmp68301->external_interrupt_0(); + m_maincpu->external_interrupt_0(); } void kiwame_state::kiwame(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, 16000000); /* 16 MHz */ + TMP68301(config, m_maincpu, 16000000); /* 16 MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &kiwame_state::kiwame_map); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - tmp68301_device &tmp68301(TMP68301(config, "tmp68301", 0)); - tmp68301.set_cputag(m_maincpu); - tmp68301.out_parallel_callback().set(FUNC(kiwame_state::row_select_w)); + m_maincpu->out_parallel_callback().set(FUNC(kiwame_state::row_select_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp index c91a63dd12c..147a4ecb235 100644 --- a/src/mame/drivers/seta2.cpp +++ b/src/mame/drivers/seta2.cpp @@ -196,7 +196,6 @@ void seta2_state::grdians_map(address_map &map) map(0xc50000, 0xc5ffff).ram(); // cleared map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } /*************************************************************************** @@ -235,7 +234,6 @@ void seta2_state::gundamex_map(address_map &map) map(0xc50000, 0xc5ffff).ram(); // cleared map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -292,7 +290,6 @@ void seta2_state::mj4simai_map(address_map &map) map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -316,7 +313,6 @@ void seta2_state::myangel_map(address_map &map) map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -340,7 +336,6 @@ void seta2_state::myangel2_map(address_map &map) map(0xd00000, 0xd3ffff).ram().share("spriteram"); // Sprites map(0xd40000, 0xd4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette map(0xd60000, 0xd6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -383,7 +378,6 @@ void seta2_state::pzlbowl_map(address_map &map) map(0x840000, 0x84ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -416,7 +410,6 @@ void seta2_state::penbros_map(address_map &map) map(0x500302, 0x500303).portr("DSW2"); map(0x500300, 0x50030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); map(0xb60000, 0xb6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); } void seta2_state::ablastb_map(address_map &map) @@ -482,7 +475,6 @@ void seta2_state::reelquak_map(address_map &map) map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -497,7 +489,6 @@ void seta2_state::namcostr_map(address_map &map) map(0x200000, 0x20ffff).ram(); // RAM map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -540,8 +531,6 @@ void seta2_state::samshoot_map(address_map &map) map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound - - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -635,7 +624,6 @@ void staraudi_state::staraudi_map(address_map &map) map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette map(0xc50000, 0xc5ffff).ram(); // cleared map(0xc60000, 0xc6003f).ram().w(FUNC(staraudi_state::vregs_w)).share("vregs"); // Video Registers - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -694,7 +682,6 @@ void seta2_state::telpacfl_map(address_map &map) map(0xd00006, 0xd00007).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); // AM_RANGE(0xe00000, 0xe00001) AM_WRITE map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks - map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers } @@ -2301,23 +2288,19 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(seta2_state::seta2_interrupt) { /* VBlank is connected to INT0 (external interrupts pin 0) */ - m_tmp68301->external_interrupt_0(); + downcast<tmp68301_device &>(*m_maincpu).external_interrupt_0(); } INTERRUPT_GEN_MEMBER(seta2_state::samshoot_interrupt) { - m_tmp68301->external_interrupt_2(); // to do: hook up x1-10 interrupts + downcast<tmp68301_device &>(*m_maincpu).external_interrupt_2(); // to do: hook up x1-10 interrupts } void seta2_state::seta2(machine_config &config) { - M68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !! + TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !! m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::mj4simai_map); m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt)); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - TMP68301(config, m_tmp68301, 0); - m_tmp68301->set_cputag(m_maincpu); WATCHDOG_TIMER(config, "watchdog"); @@ -2349,8 +2332,8 @@ void seta2_state::gundamex(machine_config &config) seta2(config); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::gundamex_map); - m_tmp68301->in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r)); - m_tmp68301->out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w)); + downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r)); + downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w)); EEPROM_93C46_16BIT(config, "eeprom"); @@ -2414,8 +2397,6 @@ void seta2_state::ablastb(machine_config &config) M68000(config.replace(), m_maincpu, XTAL(16'000'000)); // TMP68HC000P-16 m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::ablastb_map); m_maincpu->set_vblank_int("screen", FUNC(seta2_state::irq2_line_hold)); - - config.device_remove("tmp68301"); } void seta2_state::reelquak(machine_config &config) @@ -2423,7 +2404,7 @@ void seta2_state::reelquak(machine_config &config) seta2(config); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::reelquak_map); - m_tmp68301->out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w)); + downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); TICKET_DISPENSER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); @@ -2438,7 +2419,7 @@ void seta2_state::samshoot(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::samshoot_map); m_maincpu->set_periodic_int(FUNC(seta2_state::samshoot_interrupt), attotime::from_hz(60)); - m_tmp68301->in_parallel_callback().set_ioport("DSW2"); + downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("DSW2"); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2467,7 +2448,7 @@ void seta2_state::telpacfl(machine_config &config) seta2(config); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::telpacfl_map); - m_tmp68301->in_parallel_callback().set_ioport("KNOB"); + downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("KNOB"); EEPROM_93C46_16BIT(config, "eeprom"); // not hooked up, seems unused @@ -2570,13 +2551,10 @@ void funcube_state::funcube3(machine_config &config) void seta2_state::namcostr(machine_config &config) { - M68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !! + TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !! m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::namcostr_map); m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt)); - m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback)); - - TMP68301(config, m_tmp68301, 0); // does this have a ticket dispenser? - m_tmp68301->set_cputag(m_maincpu); + // does this have a ticket dispenser? // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); diff --git a/src/mame/drivers/sf.cpp b/src/mame/drivers/sf.cpp index 4fd07309f70..ae3f4045808 100644 --- a/src/mame/drivers/sf.cpp +++ b/src/mame/drivers/sf.cpp @@ -134,7 +134,7 @@ WRITE8_MEMBER(sf_state::coin_w) WRITE8_MEMBER(sf_state::soundcmd_w) { - m_soundlatch->write(space, offset, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/shootout.cpp b/src/mame/drivers/shootout.cpp index 32193741630..82713d8b766 100644 --- a/src/mame/drivers/shootout.cpp +++ b/src/mame/drivers/shootout.cpp @@ -60,17 +60,17 @@ WRITE8_MEMBER(shootout_state::bankswitch_w) READ8_MEMBER(shootout_state::sound_cpu_command_r) { - m_audiocpu->set_input_line (INPUT_LINE_NMI, CLEAR_LINE); - return (m_soundlatch->read (space, 0)); + m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + return m_soundlatch->read(); } WRITE8_MEMBER(shootout_state::sound_cpu_command_w) { - m_soundlatch->write( space, offset, data ); + m_soundlatch->write(data); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); // Allow the other CPU to reply. This fixes the missing music on the title screen (parent set). - m_maincpu->spin_until_time (attotime :: from_usec (200)); + m_maincpu->spin_until_time(attotime::from_usec(200)); } WRITE8_MEMBER(shootout_state::flipscreen_w) diff --git a/src/mame/drivers/sigmab98.cpp b/src/mame/drivers/sigmab98.cpp index d42c03ae818..5b317cc662f 100644 --- a/src/mame/drivers/sigmab98.cpp +++ b/src/mame/drivers/sigmab98.cpp @@ -1674,7 +1674,7 @@ WRITE8_MEMBER(sigmab98_state::gocowboy_4400_w) } else if ((offset >= 0x2000) && (offset < 0x2200)) { - m_palette->write8(space, offset-0x2000, data); + m_palette->write8(offset-0x2000, data); return; } else if ((offset >= 0x2800) && (offset < 0x2880)) @@ -1765,7 +1765,7 @@ WRITE8_MEMBER(sigmab98_state::gocowboy_dc00_w) return; case 0x64: // (72000) PALETTERAM - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); return; } @@ -1992,7 +1992,7 @@ WRITE8_MEMBER(sigmab98_state::haekaka_b000_w) case 0x67: // PALETTERAM + VTABLE + VREGS if (offset < 0x200) { - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); return; } else if ((offset >= 0x800) && (offset < 0x880)) @@ -2248,7 +2248,7 @@ WRITE8_MEMBER(sigmab98_state::itazuram_nvram_palette_w) { if (m_rambank == 0x64) { - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); } else if (m_rambank == 0x52) { @@ -2265,7 +2265,7 @@ WRITE8_MEMBER(sigmab98_state::itazuram_palette_w) if (m_rombank == 0x6c) { if (offset < 0x200) - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); } else { @@ -2497,7 +2497,7 @@ WRITE8_MEMBER(sigmab98_state::tdoboon_c000_w) case 0x66: // PALETTERAM + VTABLE if (offset < 0x200) { - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); return; } else if ((offset >= 0x800) && (offset < 0x880)) diff --git a/src/mame/drivers/silvmil.cpp b/src/mame/drivers/silvmil.cpp index 6b3ff2be93e..dfd7e380e28 100644 --- a/src/mame/drivers/silvmil.cpp +++ b/src/mame/drivers/silvmil.cpp @@ -53,8 +53,6 @@ public: void puzzlove(machine_config &config); void silvmil(machine_config &config); - void init_silvmil(); - private: /* devices */ required_device<cpu_device> m_maincpu; @@ -63,94 +61,91 @@ private: required_device<generic_latch_8_device> m_soundlatch; /* memory pointers */ - required_shared_ptr<uint16_t> m_bg_videoram; - required_shared_ptr<uint16_t> m_fg_videoram; - required_shared_ptr<uint16_t> m_spriteram; + required_shared_ptr<u16> m_bg_videoram; + required_shared_ptr<u16> m_fg_videoram; + required_shared_ptr<u16> m_spriteram; /* video-related */ tilemap_t *m_bg_layer; tilemap_t *m_fg_layer; - int m_silvmil_tilebank[4]; - int m_whichbank; - - DECLARE_WRITE16_MEMBER(silvmil_tilebank_w) - { - m_silvmil_tilebank[m_whichbank] = (data>>8) & 0x1f; - - // printf("%08x tilebank_w %04x (which = %04x)\n",pc, data, m_whichbank); - m_fg_layer->mark_all_dirty(); - m_bg_layer->mark_all_dirty(); - } - - DECLARE_WRITE16_MEMBER(silvmil_tilebank1_w) - { - m_whichbank = (data>>8)&0x3; - } - - DECLARE_WRITE16_MEMBER(silvmil_fg_scrolly_w) - { - m_fg_layer->set_scrolly(0, data + 8); - } - - DECLARE_WRITE16_MEMBER(silvmil_bg_scrolly_w) - { - m_bg_layer->set_scrolly(0, data + 8); - } - - DECLARE_WRITE16_MEMBER(silvmil_fg_scrollx_w) - { - m_fg_layer->set_scrollx(0, data); - } - - DECLARE_WRITE16_MEMBER(silvmil_bg_scrollx_w) - { - m_bg_layer->set_scrollx(0, data + 4); - } - - - DECLARE_WRITE16_MEMBER(silvmil_fg_videoram_w) - { - COMBINE_DATA(&m_fg_videoram[offset]); - m_fg_layer->mark_tile_dirty(offset); - } - - DECLARE_WRITE16_MEMBER(silvmil_bg_videoram_w) - { - COMBINE_DATA(&m_bg_videoram[offset]); - m_bg_layer->mark_tile_dirty(offset); - } - - DECLARE_WRITE16_MEMBER(silvmil_soundcmd_w) - { - if (ACCESSING_BITS_0_7) - { - m_soundlatch->write(space, 0, data & 0xff); - machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); - - } - } + int m_tilebank[4]; + int m_whichbank; + + void tilebank_w(u16 data); + void tilebank1_w(u16 data); + void fg_scrolly_w(u16 data); + void bg_scrolly_w(u16 data); + void fg_scrollx_w(u16 data); + void bg_scrollx_w(u16 data); + void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void soundcmd_w(u8 data); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); - TILEMAP_MAPPER_MEMBER(deco16_scan_rows); + TILEMAP_MAPPER_MEMBER(scan_rows); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - uint32_t screen_update_silvmil(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void tumblepb_gfx1_rearrange(); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void silvmil_map(address_map &map); - void silvmil_sound_map(address_map &map); + void mem_map(address_map &map); + void sound_map(address_map &map); }; +void silvmil_state::tilebank_w(u16 data) +{ + m_tilebank[m_whichbank] = (data >> 8) & 0x1f; + +// printf("%08x tilebank_w %04x (which = %04x)\n",pc, data, m_whichbank); + m_fg_layer->mark_all_dirty(); + m_bg_layer->mark_all_dirty(); +} + +void silvmil_state::tilebank1_w(u16 data) +{ + m_whichbank = (data >> 8) & 0x3; +} + +void silvmil_state::fg_scrolly_w(u16 data) +{ + m_fg_layer->set_scrolly(0, data + 8); +} + +void silvmil_state::bg_scrolly_w(u16 data) +{ + m_bg_layer->set_scrolly(0, data + 8); +} + +void silvmil_state::fg_scrollx_w(u16 data) +{ + m_fg_layer->set_scrollx(0, data); +} + +void silvmil_state::bg_scrollx_w(u16 data) +{ + m_bg_layer->set_scrollx(0, data + 4); +} + +void silvmil_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_fg_videoram[offset]); + m_fg_layer->mark_tile_dirty(offset); +} + +void silvmil_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_bg_videoram[offset]); + m_bg_layer->mark_tile_dirty(offset); +} TILE_GET_INFO_MEMBER(silvmil_state::get_bg_tile_info) { int data = m_bg_videoram[tile_index]; int tile = data & 0x3ff; int color = (data >> 12) & 0x0f; - int bank = m_silvmil_tilebank[(data&0xc00)>>10]*0x400; + int bank = m_tilebank[(data & 0xc00) >> 10] * 0x400; SET_TILE_INFO_MEMBER(1, tile + bank, color + 0x20, 0); } @@ -160,12 +155,12 @@ TILE_GET_INFO_MEMBER(silvmil_state::get_fg_tile_info) int data = m_fg_videoram[tile_index]; int tile = data & 0x3ff; int color = (data >> 12) & 0x0f; - int bank = m_silvmil_tilebank[(data&0xc00)>>10]*0x400; + int bank = m_tilebank[(data & 0xc00) >> 10] * 0x400; SET_TILE_INFO_MEMBER(1, tile + bank, color + 0x10, 0); } -TILEMAP_MAPPER_MEMBER(silvmil_state::deco16_scan_rows) +TILEMAP_MAPPER_MEMBER(silvmil_state::scan_rows) { /* logical (col,row) -> memory offset */ return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6); @@ -173,13 +168,13 @@ TILEMAP_MAPPER_MEMBER(silvmil_state::deco16_scan_rows) void silvmil_state::video_start() { - m_bg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::deco16_scan_rows),this), 16, 16, 64, 32); - m_fg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::deco16_scan_rows),this), 16, 16, 64, 32); + m_bg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::scan_rows),this), 16, 16, 64, 32); + m_fg_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silvmil_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(silvmil_state::scan_rows),this), 16, 16, 64, 32); m_fg_layer->set_transparent_pen(0); } -uint32_t silvmil_state::screen_update_silvmil(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 silvmil_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_layer->draw(screen, bitmap, cliprect, 0, 0); m_fg_layer->draw(screen, bitmap, cliprect, 0, 0); @@ -188,22 +183,28 @@ uint32_t silvmil_state::screen_update_silvmil(screen_device &screen, bitmap_ind1 } -void silvmil_state::silvmil_map(address_map &map) +void silvmil_state::soundcmd_w(u8 data) +{ + m_soundlatch->write(data & 0xff); + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); +} + +void silvmil_state::mem_map(address_map &map) { map(0x000000, 0x0fffff).rom(); - map(0x100000, 0x100001).w(FUNC(silvmil_state::silvmil_tilebank1_w)); - map(0x100002, 0x100003).w(FUNC(silvmil_state::silvmil_fg_scrollx_w)); - map(0x100004, 0x100005).w(FUNC(silvmil_state::silvmil_fg_scrolly_w)); - map(0x100006, 0x100007).w(FUNC(silvmil_state::silvmil_bg_scrollx_w)); - map(0x100008, 0x100009).w(FUNC(silvmil_state::silvmil_bg_scrolly_w)); - map(0x10000e, 0x10000f).w(FUNC(silvmil_state::silvmil_tilebank_w)); + map(0x100000, 0x100001).w(FUNC(silvmil_state::tilebank1_w)); + map(0x100002, 0x100003).w(FUNC(silvmil_state::fg_scrollx_w)); + map(0x100004, 0x100005).w(FUNC(silvmil_state::fg_scrolly_w)); + map(0x100006, 0x100007).w(FUNC(silvmil_state::bg_scrollx_w)); + map(0x100008, 0x100009).w(FUNC(silvmil_state::bg_scrolly_w)); + map(0x10000e, 0x10000f).w(FUNC(silvmil_state::tilebank_w)); - map(0x120000, 0x120fff).ram().w(FUNC(silvmil_state::silvmil_fg_videoram_w)).share("fg_videoram"); - map(0x122000, 0x122fff).ram().w(FUNC(silvmil_state::silvmil_bg_videoram_w)).share("bg_videoram"); + map(0x120000, 0x120fff).ram().w(FUNC(silvmil_state::fg_videoram_w)).share("fg_videoram"); + map(0x122000, 0x122fff).ram().w(FUNC(silvmil_state::bg_videoram_w)).share("bg_videoram"); map(0x200000, 0x2005ff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0x210000, 0x2107ff).ram().share("spriteram"); - map(0x270000, 0x270001).w(FUNC(silvmil_state::silvmil_soundcmd_w)); + map(0x270001, 0x270001).w(FUNC(silvmil_state::soundcmd_w)); map(0x280000, 0x280001).portr("P1_P2"); map(0x280002, 0x280003).portr("COIN"); map(0x280004, 0x280005).portr("DSW"); @@ -366,44 +367,53 @@ static const gfx_layout tlayout = RGN_FRAC(1,2), 4, { RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 }, - { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, - 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, + { STEP8(8*2*16,1), STEP8(0,1) }, + { STEP16(0,8*2) }, + 64*8 +}; + +static const gfx_layout tlayout_alt = +{ + 16,16, + RGN_FRAC(1,2), + 4, + { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0 }, + { STEP8(0,1), STEP8(8*2*16,1) }, + { STEP16(0,8*2) }, 64*8 }; static GFXDECODE_START( gfx_silvmil ) - GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx1", 0, tlayout, 0, 64 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "gfx1", 0, tlayout_alt, 0, 64 ) /* Tiles 16x16 */ GFXDECODE_END void silvmil_state::machine_start() { - save_item(NAME(m_silvmil_tilebank)); + save_item(NAME(m_tilebank)); save_item(NAME(m_whichbank)); } void silvmil_state::machine_reset() { - m_silvmil_tilebank[0] = 0; - m_silvmil_tilebank[1] = 0; - m_silvmil_tilebank[2] = 0; - m_silvmil_tilebank[3] = 0; + m_tilebank[0] = 0; + m_tilebank[1] = 0; + m_tilebank[2] = 0; + m_tilebank[3] = 0; m_whichbank = 0; } -void silvmil_state::silvmil_sound_map(address_map &map) +void silvmil_state::sound_map(address_map &map) { map(0x0000, 0xbfff).rom(); - map(0xd000, 0xd7ff).ram(); map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); map(0xc002, 0xc002).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)).mirror(1); map(0xc006, 0xc006).r(m_soundlatch, FUNC(generic_latch_8_device::read)); map(0xc00f, 0xc00f).nopw(); // ?? + map(0xd000, 0xd7ff).ram(); } @@ -411,12 +421,11 @@ void silvmil_state::silvmil(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, XTAL(12'000'000)); /* Verified */ - m_maincpu->set_addrmap(AS_PROGRAM, &silvmil_state::silvmil_map); + m_maincpu->set_addrmap(AS_PROGRAM, &silvmil_state::mem_map); m_maincpu->set_vblank_int("screen", FUNC(silvmil_state::irq6_line_hold)); z80_device &audiocpu(Z80(config, "audiocpu", XTAL(4'096'000))); /* Verified */ - audiocpu.set_addrmap(AS_PROGRAM, &silvmil_state::silvmil_sound_map); - + audiocpu.set_addrmap(AS_PROGRAM, &silvmil_state::sound_map); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -424,7 +433,7 @@ void silvmil_state::silvmil(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 64*8); screen.set_visarea(0, 40*8-1, 0, 30*8-1); - screen.set_screen_update(FUNC(silvmil_state::screen_update_silvmil)); + screen.set_screen_update(FUNC(silvmil_state::screen_update)); screen.set_palette("palette"); PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x300); @@ -572,32 +581,7 @@ ROM_START( puzzlovek ) ROM_LOAD16_BYTE( "8.u56", 0x100001, 0x80000, CRC(95b5f049) SHA1(1104dac1fbf6a894b7d8294b3f44a0edbf363157) ) // sldh ROM_END -void silvmil_state::tumblepb_gfx1_rearrange() -{ - uint8_t *rom = memregion("gfx1")->base(); - int len = memregion("gfx1")->bytes(); - int i; - - /* gfx data is in the wrong order */ - for (i = 0; i < len; i++) - { - if ((i & 0x20) == 0) - { - int t = rom[i]; rom[i] = rom[i + 0x20]; rom[i + 0x20] = t; - } - } - /* low/high half are also swapped */ - for (i = 0; i < len / 2; i++) - { - int t = rom[i]; rom[i] = rom[i + len / 2]; rom[i + len / 2] = t; - } -} - -void silvmil_state::init_silvmil() -{ - tumblepb_gfx1_rearrange(); -} -GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil_state, init_silvmil, ROT270, "Para", "Silver Millennium", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, puzzlove, 0, puzzlove, puzzlove, silvmil_state, init_silvmil, ROT0, "Para", "PuzzLove", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, puzzlovek, puzzlove, puzzlovek, puzzlovek, silvmil_state, init_silvmil, ROT0, "Para", "PuzzLove (Korea)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil_state, empty_init, ROT270, "Para", "Silver Millennium", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, puzzlove, 0, puzzlove, puzzlove, silvmil_state, empty_init, ROT0, "Para", "PuzzLove", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, puzzlovek, puzzlove, puzzlovek, puzzlovek, silvmil_state, empty_init, ROT0, "Para", "PuzzLove (Korea)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/simpl156.cpp b/src/mame/drivers/simpl156.cpp index a203d88f76d..afd62eb23c9 100644 --- a/src/mame/drivers/simpl156.cpp +++ b/src/mame/drivers/simpl156.cpp @@ -426,7 +426,6 @@ void simpl156_state::chainrec(machine_config &config) GFXDECODE(config, "gfxdecode", m_palette, gfx_simpl156); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/skyfox.cpp b/src/mame/drivers/skyfox.cpp index 52124948780..93d8938768b 100644 --- a/src/mame/drivers/skyfox.cpp +++ b/src/mame/drivers/skyfox.cpp @@ -42,7 +42,7 @@ WRITE8_MEMBER(skyfox_state::skyfox_vregs_w) break; case 1: - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); break; default: diff --git a/src/mame/drivers/sliver.cpp b/src/mame/drivers/sliver.cpp index 6b40485c904..97a02dc5dc6 100644 --- a/src/mame/drivers/sliver.cpp +++ b/src/mame/drivers/sliver.cpp @@ -351,7 +351,7 @@ WRITE16_MEMBER(sliver_state::io_data_w) WRITE16_MEMBER(sliver_state::sound_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(MCS51_INT0_LINE, HOLD_LINE); } diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp index 20d356abcb0..85309fbb9fd 100644 --- a/src/mame/drivers/snk.cpp +++ b/src/mame/drivers/snk.cpp @@ -363,14 +363,14 @@ TIMER_CALLBACK_MEMBER(snk_state::sgladiat_sndirq_update_callback) WRITE8_MEMBER(snk_state::sgladiat_soundlatch_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT); } READ8_MEMBER(snk_state::sgladiat_soundlatch_r) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), BUSY_CLEAR); - return m_soundlatch->read(space,0); + return m_soundlatch->read(); } READ8_MEMBER(snk_state::sgladiat_sound_nmi_ack_r) @@ -461,7 +461,7 @@ WRITE_LINE_MEMBER(snk_state::ymirq_callback_2) WRITE8_MEMBER(snk_state::snk_soundlatch_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT); } @@ -507,7 +507,7 @@ READ8_MEMBER(snk_state::tnk3_ymirq_ack_r) READ8_MEMBER(snk_state::tnk3_busy_clear_r) { // it's uncertain whether the latch should be cleared here or when it's read - m_soundlatch->clear_w(space, 0, 0); + m_soundlatch->clear_w(); machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), BUSY_CLEAR); return 0xff; } diff --git a/src/mame/drivers/snk68.cpp b/src/mame/drivers/snk68.cpp index 0f7c8e1e3ff..29303aae434 100644 --- a/src/mame/drivers/snk68.cpp +++ b/src/mame/drivers/snk68.cpp @@ -99,7 +99,7 @@ WRITE16_MEMBER(snk68_state::protection_w) WRITE8_MEMBER(snk68_state::sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); // caused by 74123 } diff --git a/src/mame/drivers/solomon.cpp b/src/mame/drivers/solomon.cpp index 39cdefa9b9d..55ce2429728 100644 --- a/src/mame/drivers/solomon.cpp +++ b/src/mame/drivers/solomon.cpp @@ -19,7 +19,7 @@ driver by Mirko Buffoni WRITE8_MEMBER(solomon_state::solomon_sh_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/spec128.cpp b/src/mame/drivers/spec128.cpp index 5e15f436fb1..b005bb8fae9 100644 --- a/src/mame/drivers/spec128.cpp +++ b/src/mame/drivers/spec128.cpp @@ -165,9 +165,18 @@ resulting mess can be seen in the F4 viewer display. /****************************************************************************************************/ /* Spectrum 128 specific functions */ +READ8_MEMBER(spectrum_state::spectrum_128_opcode_fetch_r) +{ + /* this allows expansion devices to act upon opcode fetches from MEM addresses */ + if (BIT(m_port_7ffd_data, 4)) + m_exp->opcode_fetch(offset); + + return m_maincpu->space(AS_PROGRAM).read_byte(offset); +} + WRITE8_MEMBER( spectrum_state::spectrum_128_bank1_w ) { - if (m_exp->romcs()) + if (m_exp->romcs() && BIT(m_port_7ffd_data, 4)) m_exp->mreq_w(offset, data); } @@ -175,7 +184,7 @@ READ8_MEMBER( spectrum_state::spectrum_128_bank1_r ) { uint8_t data; - if (m_exp->romcs()) + if (m_exp->romcs() && BIT(m_port_7ffd_data, 4)) { data = m_exp->mreq_r(offset); } @@ -251,6 +260,11 @@ void spectrum_state::spectrum_128_mem(address_map &map) map(0xc000, 0xffff).bankrw("bank4"); } +void spectrum_state::spectrum_128_fetch(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(spectrum_state::spectrum_128_opcode_fetch_r)); +} + MACHINE_RESET_MEMBER(spectrum_state,spectrum_128) { uint8_t *messram = m_ram->pointer(); @@ -298,7 +312,7 @@ void spectrum_state::spectrum_128(machine_config &config) Z80(config.replace(), m_maincpu, X1_128_SINCLAIR / 5); m_maincpu->set_addrmap(AS_PROGRAM, &spectrum_state::spectrum_128_mem); m_maincpu->set_addrmap(AS_IO, &spectrum_state::spectrum_128_io); - m_maincpu->set_addrmap(AS_OPCODES, &spectrum_state::spectrum_fetch); + m_maincpu->set_addrmap(AS_OPCODES, &spectrum_state::spectrum_128_fetch); m_maincpu->set_vblank_int("screen", FUNC(spectrum_state::spec_interrupt)); config.m_minimum_quantum = attotime::from_hz(60); diff --git a/src/mame/drivers/spectrum.cpp b/src/mame/drivers/spectrum.cpp index bbb41ad9c56..26d8263160f 100644 --- a/src/mame/drivers/spectrum.cpp +++ b/src/mame/drivers/spectrum.cpp @@ -424,7 +424,7 @@ READ8_MEMBER(spectrum_state::spectrum_port_fe_r) /* Issue 2 Spectrums default to having bits 5, 6 & 7 set. Issue 3 Spectrums default to having bits 5 & 7 set and bit 6 reset. */ - if (m_io_config->read() & 0x80) + if ((m_io_config->read() & 0x80) == 0) data ^= (0x40); return data; @@ -443,8 +443,8 @@ void spectrum_state::spectrum_mem(address_map &map) { map(0x0000, 0x3fff).rw(FUNC(spectrum_state::spectrum_rom_r), FUNC(spectrum_state::spectrum_rom_w)); map(0x4000, 0x5aff).ram().share("video_ram"); - // AM_RANGE(0x5b00, 0x7fff) AM_RAM - // AM_RANGE(0x8000, 0xffff) AM_RAM + //map(0x5b00, 0x7fff).ram(); + //map(0x8000, 0xffff).ram(); } void spectrum_state::spectrum_fetch(address_map &map) diff --git a/src/mame/drivers/speedspn.cpp b/src/mame/drivers/speedspn.cpp index 9b77b916489..2310135280a 100644 --- a/src/mame/drivers/speedspn.cpp +++ b/src/mame/drivers/speedspn.cpp @@ -80,7 +80,7 @@ WRITE8_MEMBER(speedspn_state::rombank_w) WRITE8_MEMBER(speedspn_state::sound_w) { - m_soundlatch->write(space, 1, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/spg110.cpp b/src/mame/drivers/spg110.cpp index e75bbe4faaa..27bfebe6475 100644 --- a/src/mame/drivers/spg110.cpp +++ b/src/mame/drivers/spg110.cpp @@ -9,7 +9,7 @@ "SunPlus PA7801" ( known as Sunplus SPG110? ) Classic Arcade Pinball EA Sports (NHL95 + Madden 95) - Spiderman 5-in-1 (original release) + Spiderman 5-in-1 (original release) *******************************************************************************/ @@ -32,6 +32,8 @@ public: void spg110_base(machine_config &config); + DECLARE_CUSTOM_INPUT_MEMBER(plunger_r); + protected: required_device<unsp_device> m_maincpu; @@ -47,14 +49,291 @@ protected: void spg110_game_state::mem_map(address_map &map) { - map(0x004000, 0x0fffff).rom().region("maincpu", 0x8000); + map(0x004000, 0x3fffff).rom().region("maincpu", 0x8000); map(0x000000, 0x003fff).m(m_spg, FUNC(spg110_device::map)); } -static INPUT_PORTS_START( spg110 ) +static INPUT_PORTS_START( jak_capb ) + PORT_START("PA") + PORT_DIPNAME( 0x0001, 0x0000, "PA" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Menu") + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Left Flipper") // there are 2 physical buttons connected to this + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Nudge")// nudge (motion control) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Right Flipper") // there are 2 physical buttons connected to this + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + + PORT_START("PB") + PORT_DIPNAME( 0x0001, 0x0000, "PB" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + + PORT_START("PC") + PORT_DIPNAME( 0x0001, 0x0000, "PC" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + + PORT_START("JOYX") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("JOYY") + PORT_BIT( 0x03ff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, spg110_game_state, plunger_r, nullptr) + + PORT_START("JOYY_REAL") + PORT_BIT(0x00ff, 0x0000, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x00ff) PORT_NAME("Plunger") PORT_CENTERDELTA(255) INPUT_PORTS_END +CUSTOM_INPUT_MEMBER(spg110_game_state::plunger_r) +{ + // this is only needed because our PORT_CENTERDELTA doesn't work if set > 255 (and is limited in the menu to that) such a value that doesn't center quickly enough for the plunger to be effective + return ioport("JOYY_REAL")->read()<<2; +} + + +static INPUT_PORTS_START( jak_spdmo ) + PORT_START("PA") + PORT_BIT( 0x001f, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Menu / Pause") + PORT_BIT( 0x00c0, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON3 ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_NAME("Joypad Right") + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_NAME("Joypad Left") + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_NAME("Joypad Down") + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_NAME("Joypad Up") + + PORT_START("PB") + PORT_DIPNAME( 0x0001, 0x0000, "PB" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + + PORT_START("PC") + PORT_DIPNAME( 0x0001, 0x0000, "PC" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + + PORT_START("JOYX") + + PORT_START("JOYY") + +INPUT_PORTS_END + void spg110_game_state::spg110_base(machine_config &config) { UNSP(config, m_maincpu, XTAL(27'000'000)); @@ -72,11 +351,16 @@ void spg110_game_state::spg110_base(machine_config &config) // m_spg->add_route(ALL_OUTPUTS, "lspeaker", 0.5); // m_spg->add_route(ALL_OUTPUTS, "rspeaker", 0.5); - SPG110(config, m_spg, XTAL(27'000'000), "maincpu"); + SPG110(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen); + m_spg->porta_in().set_ioport("PA"); + m_spg->portb_in().set_ioport("PB"); + m_spg->portc_in().set_ioport("PC"); + m_spg->adc_in<0>().set_ioport("JOYX"); + m_spg->adc_in<1>().set_ioport("JOYY"); } ROM_START( jak_capb ) - ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "classicarcadepinball.bin", 0x000000, 0x200000, CRC(b643dab0) SHA1(f57d546758ba442e28b5f0f48b3819b2fc2eb7f7) ) ROM_END @@ -87,5 +371,5 @@ ROM_START( jak_spdmo ) ROM_END // JAKKS Pacific Inc TV games -CONS( 2004, jak_capb, 0, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Classic Arcade Pinball (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -CONS( 2004, jak_spdmo, jak_spdm, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Spider-Man (JAKKS Pacific TV Game) (older hardare)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // this is the smaller more 'square' style joystick that was originally released before the GameKey slot was added. +CONS( 2004, jak_capb, 0, 0, spg110_base, jak_capb, spg110_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Classic Arcade Pinball (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2004, jak_spdmo, jak_spdm, 0, spg110_base, jak_spdmo, spg110_game_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Spider-Man (JAKKS Pacific TV Game) (older hardare)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // this is the smaller more 'square' style joystick that was originally released before the GameKey slot was added. diff --git a/src/mame/drivers/spinb.cpp b/src/mame/drivers/spinb.cpp index 022c4f13c90..26bf27e48fa 100644 --- a/src/mame/drivers/spinb.cpp +++ b/src/mame/drivers/spinb.cpp @@ -461,17 +461,17 @@ WRITE8_MEMBER( spinb_state::sndbank_m_w ) void spinb_state::update_sound_a() { if (m_sndbank_a != 0xff) - m_ic14a->write_ba(m_p_audio[m_sound_addr_a]); + m_ic14a->ba_w(m_p_audio[m_sound_addr_a]); else - m_ic14a->write_ba(0); + m_ic14a->ba_w(0); } void spinb_state::update_sound_m() { if (m_sndbank_m != 0xff) - m_ic14m->write_ba(m_p_music[m_sound_addr_m]); + m_ic14m->ba_w(m_p_music[m_sound_addr_m]); else - m_ic14m->write_ba(0); + m_ic14m->ba_w(0); } WRITE_LINE_MEMBER( spinb_state::ic5a_w ) diff --git a/src/mame/drivers/spy.cpp b/src/mame/drivers/spy.cpp index 434b002b8ff..d3120763e23 100644 --- a/src/mame/drivers/spy.cpp +++ b/src/mame/drivers/spy.cpp @@ -64,7 +64,7 @@ WRITE8_MEMBER(spy_state::spy_bankedram1_w) { if (m_rambank & 1) { - m_palette->write8(space,offset,data); + m_palette->write8(offset,data); } else if (m_rambank & 2) { diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp index 2643a5ee1b6..587883e1d4a 100644 --- a/src/mame/drivers/srmp6.cpp +++ b/src/mame/drivers/srmp6.cpp @@ -525,7 +525,7 @@ WRITE16_MEMBER(srmp6_state::paletteram_w) { int brg = m_brightness & 0x7f; - m_palette->write16(space, offset, data, mem_mask); + m_palette->write16(offset, data, mem_mask); if (brg & 0x40) { diff --git a/src/mame/drivers/sshangha.cpp b/src/mame/drivers/sshangha.cpp index 1200d740f49..f69005d99a4 100644 --- a/src/mame/drivers/sshangha.cpp +++ b/src/mame/drivers/sshangha.cpp @@ -184,7 +184,7 @@ WRITE16_MEMBER(sshangha_state::palette_w) case 0x600: offset = (offset & 0x1ff) | 0x400; break; } - m_palette->write16(space, offset, data, mem_mask); + m_palette->write16(offset, data, mem_mask); } READ16_MEMBER(sshangha_state::palette_r) @@ -196,7 +196,7 @@ READ16_MEMBER(sshangha_state::palette_r) case 0x400: offset = (offset & 0x1ff) | 0x000; break; case 0x600: offset = (offset & 0x1ff) | 0x400; break; } - return m_palette->read16(space, offset, mem_mask); + return m_palette->read16(offset); } void sshangha_state::sshangha_map(address_map &map) @@ -434,7 +434,6 @@ void sshangha_state::sshangha(machine_config &config) PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 0x4000); DECO16IC(config, m_tilegen, 0); - m_tilegen->set_split(0); m_tilegen->set_pf1_size(DECO_64x32); m_tilegen->set_pf2_size(DECO_64x32); m_tilegen->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/sslam.cpp b/src/mame/drivers/sslam.cpp index 634bfc7eb90..6cb9436f92d 100644 --- a/src/mame/drivers/sslam.cpp +++ b/src/mame/drivers/sslam.cpp @@ -366,7 +366,7 @@ WRITE8_MEMBER(sslam_state::sslam_snd_w) WRITE16_MEMBER(powerbls_state::powerbls_sound_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(MCS51_INT1_LINE, HOLD_LINE); } @@ -426,12 +426,10 @@ READ8_MEMBER(sslam_state::playmark_snd_command_r) { uint8_t data = 0; - if ((m_oki_control & 0x38) == 0x30) { - data = m_soundlatch->read(space,0); - } - else if ((m_oki_control & 0x38) == 0x28) { + if ((m_oki_control & 0x38) == 0x30) + data = m_soundlatch->read(); + else if ((m_oki_control & 0x38) == 0x28) data = (m_oki->read() & 0x0f); - } return data; } diff --git a/src/mame/drivers/statriv2.cpp b/src/mame/drivers/statriv2.cpp index f798427b117..00a9eac52f7 100644 --- a/src/mame/drivers/statriv2.cpp +++ b/src/mame/drivers/statriv2.cpp @@ -65,8 +65,7 @@ PROM use is unknown Issues: * statusbj - very glitchy, bad video, seems to spin * hangman - keys are weird, spinner is busted - * -quaquiz2 - no inputs, needs NVRAM + * quaquiz2 - no inputs, needs NVRAM */ @@ -95,7 +94,9 @@ public: { } void statriv2(machine_config &config); + void statusbj(machine_config &config); void funcsino(machine_config &config); + void tripdraw(machine_config &config); void statriv2v(machine_config &config); void init_addr_xlh(); @@ -112,7 +113,7 @@ private: required_device<tms9927_device> m_tms; required_shared_ptr<uint8_t> m_videoram; tilemap_t *m_tilemap; - required_shared_ptr<uint8_t> m_question_offset; + optional_shared_ptr<uint8_t> m_question_offset; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; uint8_t m_question_offset_low; @@ -129,12 +130,15 @@ private: TILE_GET_INFO_MEMBER(vertical_tile_info); virtual void video_start() override; void statriv2_palette(palette_device &palette) const; + void check_coin_status(); DECLARE_VIDEO_START(vertical); uint32_t screen_update_statriv2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(statriv2_interrupt); + INTERRUPT_GEN_MEMBER(tripdraw_interrupt); - void statriv2_io_map(address_map &map); void statriv2_map(address_map &map); + void statusbj_io_map(address_map &map); + void statriv2_io_map(address_map &map); }; @@ -229,19 +233,30 @@ uint32_t statriv2_state::screen_update_statriv2(screen_device &screen, bitmap_in * *************************************/ -INTERRUPT_GEN_MEMBER(statriv2_state::statriv2_interrupt) +void statriv2_state::check_coin_status() { uint8_t new_coin = ioport("COIN")->read(); /* check the coin inputs once per frame */ m_latched_coin |= new_coin & (new_coin ^ m_last_coin); m_last_coin = new_coin; +} + +INTERRUPT_GEN_MEMBER(statriv2_state::statriv2_interrupt) +{ + check_coin_status(); device.execute().set_input_line(I8085_RST75_LINE, ASSERT_LINE); device.execute().set_input_line(I8085_RST75_LINE, CLEAR_LINE); } +INTERRUPT_GEN_MEMBER(statriv2_state::tripdraw_interrupt) +{ + check_coin_status(); + device.execute().set_input_line(I8085_RST55_LINE, ASSERT_LINE); + device.execute().set_input_line(I8085_RST55_LINE, CLEAR_LINE); +} /************************************* * @@ -255,7 +270,7 @@ READ8_MEMBER(statriv2_state::question_data_r) uint32_t qromsize = memregion("questions")->bytes(); uint32_t address; - if (m_question_offset_high == 0xff) + if (m_question_offset_high == 0xff && !machine().side_effects_disabled()) m_question_offset[m_question_offset_low]++; address = m_question_offset[m_question_offset_low]; @@ -302,15 +317,20 @@ void statriv2_state::statriv2_map(address_map &map) map(0xc800, 0xcfff).ram().w(FUNC(statriv2_state::statriv2_videoram_w)).share("videoram"); } -void statriv2_state::statriv2_io_map(address_map &map) +void statriv2_state::statusbj_io_map(address_map &map) { map(0x20, 0x23).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x28, 0x2b).r(FUNC(statriv2_state::question_data_r)).writeonly().share("question_offset"); map(0xb0, 0xb1).w("aysnd", FUNC(ay8910_device::address_data_w)); map(0xb1, 0xb1).r("aysnd", FUNC(ay8910_device::data_r)); map(0xc0, 0xcf).rw(m_tms, FUNC(tms9927_device::read), FUNC(tms9927_device::write)); } +void statriv2_state::statriv2_io_map(address_map &map) +{ + statusbj_io_map(map); + map(0x28, 0x2b).r(FUNC(statriv2_state::question_data_r)).writeonly().share("question_offset"); +} + /************************************* * @@ -387,6 +407,42 @@ static INPUT_PORTS_START( funcsino ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) INPUT_PORTS_END +static INPUT_PORTS_START( tripdraw ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_BET ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Draw") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Discard 1 / Lo") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Discard 2") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Discard 3 / Double") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Discard 4") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Discard 5 / Hi") + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stand") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, statriv2_state, latched_coin_r, "COIN") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x10, 0x10, "DIP switch? 10" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "DIP switch? 20" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "DIP switch? 40" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "DIP switch? 80" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) +INPUT_PORTS_END + static INPUT_PORTS_START( bigcsino ) // flyer shows 8 buttons on the cabinet PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_NAME("Play") @@ -642,6 +698,12 @@ void statriv2_state::statriv2(machine_config &config) AY8910(config, "aysnd", MASTER_CLOCK/8).add_route(ALL_OUTPUTS, "mono", 1.0); } +void statriv2_state::statusbj(machine_config &config) +{ + statriv2(config); + m_maincpu->set_addrmap(AS_IO, &statriv2_state::statusbj_io_map); // no question data +} + void statriv2_state::statriv2v(machine_config &config) { statriv2(config); @@ -656,13 +718,20 @@ void statriv2_state::statriv2v(machine_config &config) void statriv2_state::funcsino(machine_config &config) { - statriv2(config); + statusbj(config); /* basic machine hardware */ m_maincpu->set_clock(MASTER_CLOCK/2); /* 3 MHz?? seems accurate */ } +void statriv2_state::tripdraw(machine_config &config) +{ + statusbj(config); + + /* basic machine hardware */ + m_maincpu->set_vblank_int("screen", FUNC(statriv2_state::tripdraw_interrupt)); +} /************************************* @@ -1623,11 +1692,11 @@ void statriv2_state::init_laserdisc() * *************************************/ -GAME( 1981, statusbj, 0, statriv2, statusbj, statriv2_state, empty_init, ROT0, "Status Games", "Status Black Jack (V1.0c)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, statusbj, 0, statusbj, statusbj, statriv2_state, empty_init, ROT0, "Status Games", "Status Black Jack (V1.0c)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, funcsino, 0, funcsino, funcsino, statriv2_state, empty_init, ROT0, "Status Games", "Status Fun Casino (V1.3s)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, tripdraw, 0, statriv2, funcsino, statriv2_state, empty_init, ROT0, "Status Games", "Tripple Draw (V3.1 s)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1984, bigcsino, 0, statriv2, bigcsino, statriv2_state, empty_init, ROT0, "Status Games", "Big Casino", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, hangman, 0, statriv2, hangman, statriv2_state, init_addr_lmh, ROT0, "Status Games", "Hangman", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, tripdraw, 0, tripdraw, tripdraw, statriv2_state, empty_init, ROT0, "Status Games", "Tripple Draw (V3.1 s)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, bigcsino, 0, statusbj, bigcsino, statriv2_state, empty_init, ROT0, "Status Games", "Big Casino", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, hangman, 0, statusbj, hangman, statriv2_state, init_addr_lmh, ROT0, "Status Games", "Hangman", MACHINE_SUPPORTS_SAVE ) GAME( 1984, trivquiz, 0, statriv2, statriv2, statriv2_state, init_addr_lhx, ROT0, "Status Games", "Triv Quiz", MACHINE_SUPPORTS_SAVE ) GAME( 1984, statriv2, 0, statriv2, statriv2, statriv2_state, init_addr_xlh, ROT0, "Status Games", "Triv Two", MACHINE_SUPPORTS_SAVE ) GAME( 1985, statriv2v, statriv2, statriv2v, statriv2, statriv2_state, init_addr_xlh, ROT90, "Status Games", "Triv Two (Vertical)", MACHINE_SUPPORTS_SAVE ) @@ -1641,23 +1710,23 @@ GAME( 1986, supertr2, 0, statriv2, supertr2, statriv2_state, init_addr GAME( 1988, supertr3, 0, statriv2, supertr2, statriv2_state, init_addr_lmh, ROT0, "Status Games", "Super Triv III", MACHINE_SUPPORTS_SAVE ) GAME( 1988, nsupertr3, supertr3, statriv2, supertr2, statriv2_state, init_addr_lmh, ROT0, "Status Games", "New Super Triv III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // new questions don't appear correctly, coinage problems // The following Casino Strip sets don't show the version on screen (at least without the laserdisc video). It was taken from the rom labels / from the Dragon's Lair Project archive. -GAME( 1984, cs1_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1984, cs1_spp2, cs1_spp, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs2_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip II (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1992, cs3_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip III (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1985, cs5_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1985, cs5_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs6_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1985, cs6_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1986, cs8_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1985, cs8_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs8_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1992, cs9_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip IX (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1985, cs9_spp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip IX (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs10_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip X (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs11_ssp, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs11_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs11_sps2, cs11_sps, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1988, cs12_sps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1996, cspe_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Private Eyes / All Start (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -GAME( 1993, csv1_qps, 0, statriv2, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Vivid 1 (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1984, cs1_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1984, cs1_spp2, cs1_spp, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip I (Poker version, for Pioneer LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs2_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip II (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1992, cs3_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip III (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1985, cs5_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1985, cs5_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip V (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs6_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1985, cs6_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1986, cs8_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1985, cs8_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs8_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip VIII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1992, cs9_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip IX (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1985, cs9_spp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip IX (Poker version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs10_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip X (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs11_ssp, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Shooting Game version, for Pioneer LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs11_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs11_sps2, cs11_sps, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XI (Poker version, for Sony LD, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1988, cs12_sps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Status Games", "Casino Strip XII (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1996, cspe_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Private Eyes / All Start (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1993, csv1_qps, 0, statusbj, funcsino, statriv2_state, init_laserdisc, ROT0, "Quantum Industries", "Casino Strip Vivid 1 (Poker version, for Sony LD)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/stfight.cpp b/src/mame/drivers/stfight.cpp index 13518046e1a..3d2a73da697 100644 --- a/src/mame/drivers/stfight.cpp +++ b/src/mame/drivers/stfight.cpp @@ -253,6 +253,13 @@ TODO: - Each version of empcity/stfight has a different protection code stored in the MCU (at $1D2) so each 68705 will need to be dumped. We currently use hacked versions of the empcityu MCU for each different set. + Currently, the following protection codes are known: + 06 USA + 08 Japan + 09 Benelux + 0d Italy + 0f Germany + The France version doesn't care for the protection code. *****************************************************************************/ @@ -870,7 +877,7 @@ ROM_START( empcityi ) // very similar to above set ROM_LOAD( "19.7w", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) ) ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */ - ROM_LOAD( "9.7c", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) ) + ROM_LOAD( "9.7c", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) ) ROM_LOAD( "10.8c", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) ) ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */ @@ -899,6 +906,69 @@ ROM_START( empcityi ) // very similar to above set ROM_LOAD( "5j", 0x00000, 0x8000, CRC(1b8d0c07) SHA1(c163ccd2b7ed6c84facc075eb1564ca399f3ba17) ) ROM_END +// This set doesn't seem to check for the protection code in the MCU +ROM_START( empcityfr ) + ROM_REGION( 2*0x18000, "maincpu", 0 ) /* 96k for code + 96k for decrypted opcodes */ + ROM_LOAD( "pr.4t", 0x00000, 0x8000, CRC(aa1f84ac) SHA1(b484b85270091511860f5b4041099c5335ff1204) ) + ROM_LOAD( "pr.2t", 0x10000, 0x8000, CRC(af381247) SHA1(93812d6b6a2dead07670b789597d23f29b8f0c5d) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */ + ROM_LOAD( "092-5c", 0x0000, 0x8000, CRC(6a8cb7a6) SHA1(dc123cc48d3623752b78e7c23dd8d2f5adf84f92) ) + + ROM_REGION( 0x0800, "mcu", 0 ) + ROM_LOAD( "empcityu_68705.3j", 0x0000, 0x0800, BAD_DUMP CRC(182f7616) SHA1(38b4f23a559ae13f8ca1b974407a2a40fc52879f) ) + + ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */ + ROM_LOAD( "17.2n", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) ) + + ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */ + ROM_LOAD( "115.4c", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) ) + ROM_LOAD( "116.5c", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) ) + ROM_LOAD( "113.2c", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) ) + ROM_LOAD( "114.3c", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) ) + + ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */ + ROM_LOAD( "109.4j", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) ) + ROM_LOAD( "110.5j", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) ) + ROM_LOAD( "097.2j", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) ) + ROM_LOAD( "108.3j", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) ) + + ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */ + ROM_LOAD( "095.8w", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) ) + ROM_LOAD( "096.9w", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) ) + ROM_LOAD( "093.6w", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) ) + ROM_LOAD( "094.7w", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) ) + + ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */ + ROM_LOAD( "117.7c", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) ) + ROM_LOAD( "118.8c", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) ) + + ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */ + ROM_LOAD( "111.7j", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) ) + ROM_LOAD( "112.8j", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) ) + + ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 ) + ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */ + + ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 ) + ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */ + ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) ) + + ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 ) + ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */ + ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) ) + + ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 ) + ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */ + ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) ) + + ROM_REGION( 0x0800, "proms", 0 ) + ROM_LOAD( "82s129.015", 0x0700, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) ) /* timing? (not used) */ + + ROM_REGION( 0x08000, "adpcm", 0 ) /* ADPCM voice data */ + ROM_LOAD( "091.5j", 0x00000, 0x8000, CRC(1b8d0c07) SHA1(c163ccd2b7ed6c84facc075eb1564ca399f3ba17) ) +ROM_END + ROM_START( stfightgb ) ROM_REGION( 2*0x18000, "maincpu", 0 ) /* 96k for code + 96k for decrypted opcodes */ ROM_LOAD( "1.4t", 0x00000, 0x8000, CRC(0ce5ca11) SHA1(f753107a0c4ce52fe761ea2edce4c5e96169dfbd) ) @@ -1066,6 +1136,7 @@ GAME( 1986, empcity, 0, stfight, stfight, stfight_state, init_empcity, GAME( 1986, empcityu, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Taito / Romstar license)", "Empire City: 1931 (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // different title logo GAME( 1986, empcityj, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Taito license)", "Empire City: 1931 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1986, empcityi, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Eurobed license)", "Empire City: 1931 (Italy)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, empcityfr, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Norad license)", "Empire City: 1931 (France)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1986, stfight, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Tuning license)", "Street Fight (Germany)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1986, stfighta, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu", "Street Fight (bootleg?)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1986, stfightgb, empcity, stfight, stfight, stfight_state, init_stfight, ROT0, "Seibu Kaihatsu (Tuning license)", "Street Fight (Germany - Benelux)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/stratos.cpp b/src/mame/drivers/stratos.cpp index 8d47399822a..42b7a8364e8 100644 --- a/src/mame/drivers/stratos.cpp +++ b/src/mame/drivers/stratos.cpp @@ -375,5 +375,5 @@ ROM_START( stratos ) ROM_FILL(0x00000, 0x10000, 0xff) ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Stratos Chess Computer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, init_stratos, "SciSys", "Kasparov Chess Computer: Stratos", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/stuntair.cpp b/src/mame/drivers/stuntair.cpp index 3fcf547ecd6..9cce11f085f 100644 --- a/src/mame/drivers/stuntair.cpp +++ b/src/mame/drivers/stuntair.cpp @@ -320,7 +320,7 @@ WRITE8_MEMBER(stuntair_state::stuntair_sound_w) { // each command is written three times: with bit 7 set, then with bit 7 clear, then with bit 7 set again // the 3 highest bits are ignored by the sound program - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(INPUT_LINE_NMI, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE); } diff --git a/src/mame/drivers/suna16.cpp b/src/mame/drivers/suna16.cpp index 6449ad12a1e..fd7d424ab66 100644 --- a/src/mame/drivers/suna16.cpp +++ b/src/mame/drivers/suna16.cpp @@ -49,7 +49,7 @@ WRITE16_MEMBER(suna16_state::soundlatch_w) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space, 0, data & 0xff ); + m_soundlatch->write(data & 0xff); } if (data & ~0xff) logerror("CPU#0 PC %06X - Sound latch unknown bits: %04X\n", m_maincpu->pc(), data); } diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp index b71d7ccef27..9fd70f3ba0c 100644 --- a/src/mame/drivers/suna8.cpp +++ b/src/mame/drivers/suna8.cpp @@ -608,7 +608,7 @@ WRITE8_MEMBER(suna8_state::rranger_bankswitch_w) */ READ8_MEMBER(suna8_state::rranger_soundstatus_r) { - m_soundlatch2->read(space, offset); + m_soundlatch2->read(); return 0x02; } @@ -784,7 +784,7 @@ WRITE8_MEMBER(suna8_state::brickzn_multi_w) */ uint8_t remap = (m_remap_sound ? bitswap<8>(data, 7,6,3,4,5,2,1,0) : data); - m_soundlatch->write(space, 0, remap); + m_soundlatch->write(remap); logerror("CPU #0 - PC %04X: soundlatch = %02X (->%02X)\n",m_maincpu->pc(),data,remap); } @@ -1038,7 +1038,7 @@ WRITE8_MEMBER(suna8_state::starfigh_rombank_latch_w) WRITE8_MEMBER(suna8_state::starfigh_sound_latch_w) { if ( !(m_rombank_latch & 0x20) ) - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); } /* diff --git a/src/mame/drivers/supbtime.cpp b/src/mame/drivers/supbtime.cpp index 11639322f48..261b06aee32 100644 --- a/src/mame/drivers/supbtime.cpp +++ b/src/mame/drivers/supbtime.cpp @@ -357,7 +357,6 @@ void supbtime_state::supbtime(machine_config &config) PALETTE(config, "palette").set_format(palette_device::xBGR_444, 1024); DECO16IC(config, m_deco_tilegen, 0); - m_deco_tilegen->set_split(0); m_deco_tilegen->set_pf1_size(DECO_64x32); m_deco_tilegen->set_pf2_size(DECO_64x32); m_deco_tilegen->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/supduck.cpp b/src/mame/drivers/supduck.cpp index 5a18c908aa1..d90dc44bee5 100644 --- a/src/mame/drivers/supduck.cpp +++ b/src/mame/drivers/supduck.cpp @@ -220,7 +220,7 @@ WRITE16_MEMBER(supduck_state::supduck_4002_w) { data &= mem_mask; - m_soundlatch->write(space, 0, (data>>8)); + m_soundlatch->write((data>>8)); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -442,7 +442,8 @@ void supduck_state::machine_reset() } -MACHINE_CONFIG_START(supduck_state::supduck) +void supduck_state::supduck(machine_config &config) +{ /* basic machine hardware */ M68000(config, m_maincpu, XTAL(8'000'000)); /* Verified on PCB */ m_maincpu->set_addrmap(AS_PROGRAM, &supduck_state::main_map); @@ -467,8 +468,7 @@ MACHINE_CONFIG_START(supduck_state::supduck) TIGEROAD_SPRITE(config, m_spritegen, 0); - MCFG_PALETTE_ADD("palette", 0x800/2) - MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit4) + PALETTE(config, m_palette).set_format(palette_device::xRGBRRRRGGGGBBBB_bit4, 0x800/2); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -478,7 +478,7 @@ MACHINE_CONFIG_START(supduck_state::supduck) okim6295_device &oki(OKIM6295(config, "oki", XTAL(8'000'000)/8, okim6295_device::PIN7_HIGH)); // 1MHz - Verified on PCB, pin 7 not verified oki.add_route(ALL_OUTPUTS, "mono", 1.0); oki.set_addrmap(0, &supduck_state::oki_map); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/suprridr.cpp b/src/mame/drivers/suprridr.cpp index de1c458ea2d..5c401d2e7a7 100644 --- a/src/mame/drivers/suprridr.cpp +++ b/src/mame/drivers/suprridr.cpp @@ -100,7 +100,7 @@ void suprridr_state::machine_start() void suprridr_state::machine_reset() { - m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0); + m_soundlatch->acknowledge_w(); } /************************************* diff --git a/src/mame/drivers/system1.cpp b/src/mame/drivers/system1.cpp index f5deda2c5f1..b21ae6a6fcf 100644 --- a/src/mame/drivers/system1.cpp +++ b/src/mame/drivers/system1.cpp @@ -529,7 +529,7 @@ READ8_MEMBER(system1_state::sound_data_r) { m_ppi8255->pc6_w(0); m_ppi8255->pc6_w(1); - return m_soundlatch->read(space, offset); + return m_soundlatch->read(); } /* if we have a Z80 PIO, get the data from the port and toggle the strobe */ @@ -548,7 +548,7 @@ READ8_MEMBER(system1_state::sound_data_r) WRITE8_MEMBER(system1_state::soundport_w) { /* boost interleave when communicating with the sound CPU */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } @@ -5631,7 +5631,7 @@ GAME( 1985, shtngmste, shtngmst, sys2m, shtngmst, system1_state, i GAME( 1986, gardiab, gardia, sys2_317_0007, gardia, system1_state, init_bank44, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1986, gardiaj, gardia, sys2_317_0006, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (Japan, 317-0006)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1986, wboysys2, wboy, sys2_315_5177, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, tokisens, 0, sys2xb, tokisens, system1_state, init_tokisens, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, tokisensa, tokisens, sys2, tokisensa, system1_state, init_bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (prototype?)", MACHINE_SUPPORTS_SAVE ) // or bootleg? GAME( 1987, wbml, 0, sys2xb, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp index 83b760a1f4a..56846e6c522 100644 --- a/src/mame/drivers/system16.cpp +++ b/src/mame/drivers/system16.cpp @@ -111,7 +111,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_nmi_w) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } } @@ -120,7 +120,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } } @@ -128,7 +128,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w) READ8_MEMBER(segas1x_bootleg_state::sound_command_irq_r) { m_soundcpu->set_input_line(0, CLEAR_LINE); - return m_soundlatch->read(space, 0, 0xff); + return m_soundlatch->read(); } WRITE8_MEMBER(segas1x_bootleg_state::soundbank_msm_w) @@ -4043,7 +4043,7 @@ void segas1x_bootleg_state::init_astormb2() init_sys18bl_oki(); m_maincpu->space(AS_PROGRAM).unmap_write(0xa00006, 0xa00007); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xa00006, 0xa00007, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch), 0x00ff); + m_maincpu->space(AS_PROGRAM).install_write_handler(0xa00006, 0xa00007, write8smo_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch), 0x00ff); } /************************************* diff --git a/src/mame/drivers/tatsumi.cpp b/src/mame/drivers/tatsumi.cpp index 51aa5849fda..431265ca5c0 100644 --- a/src/mame/drivers/tatsumi.cpp +++ b/src/mame/drivers/tatsumi.cpp @@ -175,7 +175,7 @@ WRITE8_MEMBER(cyclwarr_state::cyclwarr_sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } diff --git a/src/mame/drivers/tbowl.cpp b/src/mame/drivers/tbowl.cpp index 9f28339519e..ee03744b36b 100644 --- a/src/mame/drivers/tbowl.cpp +++ b/src/mame/drivers/tbowl.cpp @@ -427,7 +427,7 @@ void tbowl_state::machine_reset() m_adpcm_pos[0] = m_adpcm_pos[1] = 0; m_adpcm_end[0] = m_adpcm_end[1] = 0; m_adpcm_data[0] = m_adpcm_data[1] = -1; - m_soundlatch->acknowledge_w(machine().dummy_space(), 0, 0); + m_soundlatch->acknowledge_w(); } void tbowl_state::tbowl(machine_config &config) diff --git a/src/mame/drivers/tecmo.cpp b/src/mame/drivers/tecmo.cpp index 1bd6b20a1ae..e22740d0f5d 100644 --- a/src/mame/drivers/tecmo.cpp +++ b/src/mame/drivers/tecmo.cpp @@ -1221,6 +1221,39 @@ ROM_END ROM_START( gemini ) ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "4-5s", 0x00000, 0x10000, CRC(ce71e27a) SHA1(5aac0434edd39e444687d9988c7f49e0752a4900) ) /* c000-ffff is not used */ + ROM_LOAD( "5-6s", 0x10000, 0x10000, CRC(216784a9) SHA1(ec74a3753e5b6384b875125ec0db7beea0a6aa6d) ) /* banked at f000-f7ff */ + + ROM_REGION( 0x10000, "soundcpu", 0 ) + ROM_LOAD( "gw03-5h.rom", 0x0000, 0x8000, CRC(9bc79596) SHA1(61de9ddd45140e8ed88173294bd26147e2abfa21) ) + + ROM_REGION( 0x08000, "gfx1", 0 ) + ROM_LOAD( "gw02-3h.rom", 0x00000, 0x08000, CRC(7acc8d35) SHA1(05056e9f077e7571b314390b508c72d56ad0f43b) ) /* characters */ + + ROM_REGION( 0x40000, "gfx2", 0 ) + ROM_LOAD( "gw06-1c.rom", 0x00000, 0x10000, CRC(4ea51631) SHA1(9aee0f1ba210ac953dc193cfc739322966b6de8a) ) /* sprites */ + ROM_LOAD( "gw07-1d.rom", 0x10000, 0x10000, CRC(da42637e) SHA1(9885c52823279f26871092c77bdbe027df08268f) ) /* sprites */ + ROM_LOAD( "gw08-1f.rom", 0x20000, 0x10000, CRC(0b4e8d70) SHA1(55069f3df1c8db83f306d46b8262fd23585e6013) ) /* sprites */ + ROM_LOAD( "gw09-1h.rom", 0x30000, 0x10000, CRC(b65c5e4c) SHA1(699e1a9e72b8d94edae7382ba119fe5da113514d) ) /* sprites */ + + ROM_REGION( 0x40000, "gfx3", 0 ) + ROM_LOAD( "gw10-1n.rom", 0x00000, 0x10000, CRC(5e84cd4f) SHA1(e85320291027a16619c87fc2365448367bda454a) ) /* tiles #1 */ + ROM_LOAD( "gw11-2na.rom", 0x10000, 0x10000, CRC(08b458e1) SHA1(b3426faa57dca51dc053db44fa4968425d8bf3ee) ) /* tiles #1 */ + ROM_LOAD( "gw12-2nb.rom", 0x20000, 0x10000, CRC(229c9714) SHA1(f4f47d6b379c973c22f9ae7d7bec7041cdf3f737) ) /* tiles #1 */ + ROM_LOAD( "gw13-3n.rom", 0x30000, 0x10000, CRC(c5dfaf47) SHA1(c3202ca8c7f3c5c7dc9acdc09c1c894e168ef9fe) ) /* tiles #1 */ + + ROM_REGION( 0x40000, "gfx4", 0 ) + ROM_LOAD( "gw14-1r.rom", 0x00000, 0x10000, CRC(9c10e5b5) SHA1(a81399b85d8f3ddca26883ec3535cb9044c35ada) ) /* tiles #2 */ + ROM_LOAD( "gw15-2ra.rom", 0x10000, 0x10000, CRC(4cd18cfa) SHA1(c197a098a7c1e5220aad039383a40702fe7c4f21) ) /* tiles #2 */ + ROM_LOAD( "gw16-2rb.rom", 0x20000, 0x10000, CRC(f911c7be) SHA1(3f49f6c4734f2b644d93c4a54249aae6ff080e1d) ) /* tiles #2 */ + ROM_LOAD( "gw17-3r.rom", 0x30000, 0x10000, CRC(79a9ce25) SHA1(74e3917b8e7a920ceb2135d7ef8fb2f2c5176b21) ) /* tiles #2 */ + + ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */ + ROM_LOAD( "gw01-6a.rom", 0x0000, 0x8000, CRC(d78afa05) SHA1(b02a739b045f5cddf943ce59226ef234463eeebe) ) +ROM_END + +ROM_START( geminij ) + ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "gw04-5s.rom", 0x00000, 0x10000, CRC(ff9de855) SHA1(34167af8456a081f68b338f10d4319ce1e703fd4) ) /* c000-ffff is not used */ ROM_LOAD( "gw05-6s.rom", 0x10000, 0x10000, CRC(5a6947a9) SHA1(18b7aeb0f0e2c396bc759118dd7c45fd6070b804) ) /* banked at f000-f7ff */ @@ -1320,8 +1353,9 @@ GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, init_rygar, GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen -GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen +GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen +GAME( 1987, geminij, gemini, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen +GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // regional warning screen is blanked (still get a delay) GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen GAME( 1988, silkwormp, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (prototype)", MACHINE_SUPPORTS_SAVE ) // prototype diff --git a/src/mame/drivers/tehkanwc.cpp b/src/mame/drivers/tehkanwc.cpp index 84fcb199fc9..f14ac0b5601 100644 --- a/src/mame/drivers/tehkanwc.cpp +++ b/src/mame/drivers/tehkanwc.cpp @@ -157,7 +157,7 @@ WRITE8_MEMBER(tehkanwc_state::track_1_reset_w) WRITE8_MEMBER(tehkanwc_state::sound_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -175,7 +175,7 @@ void tehkanwc_state::device_timer(emu_timer &timer, device_timer_id id, int para WRITE8_MEMBER(tehkanwc_state::sound_answer_w) { - m_soundlatch2->write(space, 0, data); + m_soundlatch2->write(data); /* in Gridiron, the sound CPU goes in a tight loop after the self test, */ /* probably waiting to be reset by a watchdog */ diff --git a/src/mame/drivers/terracre.cpp b/src/mame/drivers/terracre.cpp index 745c79bf475..1199b72a951 100644 --- a/src/mame/drivers/terracre.cpp +++ b/src/mame/drivers/terracre.cpp @@ -95,12 +95,12 @@ AT-2 WRITE16_MEMBER(terracre_state::amazon_sound_w) { - m_soundlatch->write(space,0,((data & 0x7f) << 1) | 1); + m_soundlatch->write(((data & 0x7f) << 1) | 1); } READ8_MEMBER(terracre_state::soundlatch_clear_r) { - m_soundlatch->clear_w(space,0,0); + m_soundlatch->clear_w(); return 0; } diff --git a/src/mame/drivers/tetrisp2.cpp b/src/mame/drivers/tetrisp2.cpp index 5947f894901..ba2f9a316c8 100644 --- a/src/mame/drivers/tetrisp2.cpp +++ b/src/mame/drivers/tetrisp2.cpp @@ -582,7 +582,7 @@ READ16_MEMBER(stepstag_state::stepstag_pc2main_r) WRITE16_MEMBER(stepstag_state::stepstag_soundlatch_word_w) { - m_soundlatch->write(space, offset, data, mem_mask); + m_soundlatch->write(data); m_subcpu->set_input_line(M68K_IRQ_6, HOLD_LINE); diff --git a/src/mame/drivers/tigeroad.cpp b/src/mame/drivers/tigeroad.cpp index 0b77fcf66e2..581115eb59a 100644 --- a/src/mame/drivers/tigeroad.cpp +++ b/src/mame/drivers/tigeroad.cpp @@ -61,7 +61,7 @@ single plane board. WRITE16_MEMBER(tigeroad_state::tigeroad_soundcmd_w) { if (ACCESSING_BITS_8_15) - m_soundlatch->write(space,offset,data >> 8); + m_soundlatch->write(data >> 8); } @@ -76,7 +76,7 @@ WRITE8_MEMBER(tigeroad_state::msm5205_w) WRITE8_MEMBER(f1dream_state::out1_w) { - m_soundlatch->write(space,2,data); + m_soundlatch->write(data); } WRITE8_MEMBER(f1dream_state::out3_w) diff --git a/src/mame/drivers/tiki100.cpp b/src/mame/drivers/tiki100.cpp index 28c4802139f..11e533f549d 100644 --- a/src/mame/drivers/tiki100.cpp +++ b/src/mame/drivers/tiki100.cpp @@ -98,7 +98,7 @@ READ8_MEMBER( tiki100_state::iorq_r ) break; case 0x01: // SERS - data = m_dart->cd_ba_r(space, offset & 0x03); + data = m_dart->cd_ba_r(offset & 0x03); break; case 0x02: // PARS @@ -119,7 +119,7 @@ READ8_MEMBER( tiki100_state::iorq_r ) break; case 0x06: // TIMS - data = m_ctc->read(space, offset & 0x03); + data = m_ctc->read(offset & 0x03); break; } @@ -137,7 +137,7 @@ WRITE8_MEMBER( tiki100_state::iorq_w ) break; case 0x01: // SERS - m_dart->cd_ba_w(space, offset & 0x03, data); + m_dart->cd_ba_w(offset & 0x03, data); break; case 0x02: // PARS @@ -170,7 +170,7 @@ WRITE8_MEMBER( tiki100_state::iorq_w ) break; case 0x06: // TIMS - m_ctc->write(space, offset & 0x03, data); + m_ctc->write(offset & 0x03, data); break; case 0x07: // SYL diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index b177626bcbe..ca5be1e1769 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -374,7 +374,7 @@ keyboard, VFD display, and use the SC-01 speech chip. --> driver k28.cpp - MCU: TMS1400 MP7324 - TMS51xx: TMS5110A - VSM: 16KB CM62084 - - LCD: unknown 8*16-seg + - LCD: SMOS SMC1112 MCU to 8*14-seg display K28 modules: @@ -394,7 +394,7 @@ K28 modules: TODO: - why doesn't lantutor work? - - identify and emulate k28 LCD + - emulate k28 LCD - emulate other known devices diff --git a/src/mame/drivers/titan_soc.cpp b/src/mame/drivers/titan_soc.cpp new file mode 100644 index 00000000000..5f8852cc892 --- /dev/null +++ b/src/mame/drivers/titan_soc.cpp @@ -0,0 +1,121 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/************************************************************************ + + Titan 1.0C (System on a Chip - ARM based processor) + + used by + + Atari / Colecovision / Intellivision Flashback (not dumped) + TecToy Mega Drive 4 + + + Notes: + + It is possible to connect a debug terminal + Has a USB port for user to plug in a flash drive etc. + 4MB RAM + + Emulators run on the ARM, games don't use some modes 100% correctly compared to original + hardware, only correct for the included emulator. Some games are not emulation based. + +*/ + +#include "emu.h" +#include "cpu/arm7/arm7.h" +#include "cpu/arm7/arm7core.h" +#include "emupal.h" +#include "screen.h" + +class titan_soc_state : public driver_device +{ +public: + titan_soc_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_mainram(*this, "mainram"), + m_maincpu(*this, "maincpu") + { } + + void titan_soc(machine_config &config); + + void init_titan_soc(); + +private: + required_shared_ptr<uint32_t> m_mainram; + required_device<cpu_device> m_maincpu; + + virtual void machine_reset() override; + virtual void video_start() override; + uint32_t screen_update_titan_soc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void map(address_map &map); +}; + + + +void titan_soc_state::map(address_map &map) +{ + map(0x00000000, 0x0007ffff).ram().share("mainram"); +} + +static INPUT_PORTS_START( titan_soc ) + +INPUT_PORTS_END + + +void titan_soc_state::video_start() +{ +} + +uint32_t titan_soc_state::screen_update_titan_soc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void titan_soc_state::machine_reset() +{ +} + +void titan_soc_state::titan_soc(machine_config &config) +{ + /* basic machine hardware */ + ARM920T(config, m_maincpu, 200000000); // type + clock unknown + m_maincpu->set_addrmap(AS_PROGRAM, &titan_soc_state::map); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(320, 256); + screen.set_visarea(0, 320-1, 0, 256-1); + screen.set_screen_update(FUNC(titan_soc_state::screen_update_titan_soc)); + + PALETTE(config, "palette").set_entries(256); +} + + + +ROM_START( megadri4 ) + ROM_REGION( 0x80000, "serial", 0 ) // this was only dumped from one of the PCBS, not sure which one, might not be correct for both + ROM_LOAD( "25l4005a - rom de boot megadrive4.bin", 0x000000, 0x80000, CRC(1b5c3c31) SHA1(97f301ae441ca23d3c52a901319e375654920867) ) + + ROM_REGION( 0x08400000, "flash", 0 ) + ROM_LOAD( "ic9 megadrive4 titan.bin", 0x000000, 0x08400000, CRC(ed92b81a) SHA1(a3d51a2febf670820d6df009660b96ff6407f475) ) +ROM_END + +ROM_START( megadri4a ) + ROM_REGION( 0x80000, "serial", 0 ) // this was only dumped from one of the PCBS, not sure which one, might not be correct for both + ROM_LOAD( "25l4005a - rom de boot megadrive4.bin", 0x000000, 0x80000, CRC(1b5c3c31) SHA1(97f301ae441ca23d3c52a901319e375654920867) ) + + ROM_REGION( 0x08400000, "flash", 0 ) + ROM_LOAD( "ic9 megadrive4 titan segunda placa.bin", 0x000000, 0x08400000, CRC(4b423898) SHA1(293127d2f6169717a7fbfcf18f13e4b1735236f7) ) +ROM_END + + + +void titan_soc_state::init_titan_soc() +{ + // can either run directly from serial ROM, or copies it to RAM on startup + memcpy(m_mainram, memregion("serial")->base(), 0x80000); +} + +CONS( 2009, megadri4, 0, 0, titan_soc, titan_soc, titan_soc_state, init_titan_soc, "Tectoy (licensed from Sega)", "Mega Drive 4 / Guitar Idol (set 1)", MACHINE_IS_SKELETON ) +CONS( 2009, megadri4a, megadri4, 0, titan_soc, titan_soc, titan_soc_state, init_titan_soc, "Tectoy (licensed from Sega)", "Mega Drive 4 / Guitar Idol (set 2)", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/toaplan1.cpp b/src/mame/drivers/toaplan1.cpp index 525d8674285..4aed7c0aac4 100644 --- a/src/mame/drivers/toaplan1.cpp +++ b/src/mame/drivers/toaplan1.cpp @@ -623,43 +623,43 @@ void toaplan1_rallybik_state::rallybik_main_map(address_map &map) map(0x040000, 0x07ffff).rom(); map(0x080000, 0x083fff).ram(); map(0x0c0000, 0x0c0fff).ram().share("spriteram"); - map(0x100000, 0x100001).w(FUNC(toaplan1_rallybik_state::toaplan1_bcu_flipscreen_w)); - map(0x100002, 0x100003).rw(FUNC(toaplan1_rallybik_state::toaplan1_tileram_offs_r), FUNC(toaplan1_rallybik_state::toaplan1_tileram_offs_w)); - map(0x100004, 0x100007).rw(FUNC(toaplan1_rallybik_state::rallybik_tileram16_r), FUNC(toaplan1_rallybik_state::toaplan1_tileram16_w)); - map(0x100010, 0x10001f).rw(FUNC(toaplan1_rallybik_state::toaplan1_scroll_regs_r), FUNC(toaplan1_rallybik_state::toaplan1_scroll_regs_w)); + map(0x100001, 0x100001).w(FUNC(toaplan1_rallybik_state::bcu_flipscreen_w)); + map(0x100002, 0x100003).rw(FUNC(toaplan1_rallybik_state::tileram_offs_r), FUNC(toaplan1_rallybik_state::tileram_offs_w)); + map(0x100004, 0x100007).rw(FUNC(toaplan1_rallybik_state::tileram_r), FUNC(toaplan1_rallybik_state::tileram_w)); + map(0x100010, 0x10001f).rw(FUNC(toaplan1_rallybik_state::scroll_regs_r), FUNC(toaplan1_rallybik_state::scroll_regs_w)); map(0x140000, 0x140001).portr("VBLANK"); -// AM_RANGE(0x140000, 0x140001) AM_WRITE(?? video frame related ??) - map(0x140002, 0x140003).w(FUNC(toaplan1_rallybik_state::toaplan1_intenable_w)); - map(0x140008, 0x14000f).w(FUNC(toaplan1_rallybik_state::toaplan1_bcu_control_w)); - map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_rallybik_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_rallybik_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x180000, 0x180fff).rw(FUNC(toaplan1_rallybik_state::toaplan1_shared_r), FUNC(toaplan1_rallybik_state::toaplan1_shared_w)); - map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_rallybik_state::toaplan1_tile_offsets_w)); - map(0x1c8000, 0x1c8001).w(FUNC(toaplan1_rallybik_state::toaplan1_reset_sound_w)); +// map(0x140000, 0x140001).w(?? video frame related ??) + map(0x140003, 0x140003).w(FUNC(toaplan1_rallybik_state::intenable_w)); + map(0x140008, 0x14000f).w(FUNC(toaplan1_rallybik_state::bcu_control_w)); + map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_rallybik_state::bgpalette_w)).share("bgpalette"); + map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_rallybik_state::fgpalette_w)).share("fgpalette"); + map(0x180000, 0x180fff).rw(FUNC(toaplan1_rallybik_state::shared_r), FUNC(toaplan1_rallybik_state::shared_w)).umask16(0x00ff); + map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_rallybik_state::tile_offsets_w)); + map(0x1c8001, 0x1c8001).w(FUNC(toaplan1_rallybik_state::reset_sound_w)); } void toaplan1_state::truxton_main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x080000, 0x083fff).ram(); - map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); - map(0x100000, 0x100001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x100002, 0x100003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x100004, 0x100007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); + map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::frame_done_r)); + map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w)); + map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w)); + map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w)); + map(0x100001, 0x100001).w(FUNC(toaplan1_state::bcu_flipscreen_w)); + map(0x100002, 0x100003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w)); + map(0x100004, 0x100007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w)); + map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w)); map(0x140000, 0x140001).portr("VBLANK"); -// AM_RANGE(0x140000, 0x140001) AM_WRITE(?? video frame related ??) - map(0x140002, 0x140003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x140008, 0x14000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x180000, 0x180fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); - map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x1c0006, 0x1c0007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); - map(0x1d0000, 0x1d0001).w(FUNC(toaplan1_state::toaplan1_reset_sound_w)); +// map(0x140000, 0x140001).w(?? video frame related ??) + map(0x140003, 0x140003).w(FUNC(toaplan1_state::intenable_w)); + map(0x140008, 0x14000f).w(FUNC(toaplan1_state::bcu_control_w)); + map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette"); + map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette"); + map(0x180000, 0x180fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); + map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_state::tile_offsets_w)); + map(0x1c0006, 0x1c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w)); + map(0x1d0001, 0x1d0001).w(FUNC(toaplan1_state::reset_sound_w)); } void toaplan1_state::hellfire_main_map(address_map &map) @@ -667,23 +667,23 @@ void toaplan1_state::hellfire_main_map(address_map &map) map(0x000000, 0x03ffff).rom(); map(0x040000, 0x047fff).ram(); map(0x080000, 0x080001).portr("VBLANK"); -// AM_RANGE(0x080000, 0x080001) AM_WRITE(?? video frame related ??) - map(0x080002, 0x080003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x080008, 0x08000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x084000, 0x0847ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x086000, 0x0867ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x0c0000, 0x0c0fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); - map(0x100000, 0x100001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x100002, 0x100003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x100004, 0x100007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); - map(0x140000, 0x140001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0x140002, 0x140003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x140004, 0x140005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x140006, 0x140007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); - map(0x180000, 0x180003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x180006, 0x180007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); - map(0x180008, 0x180009).w(FUNC(toaplan1_state::toaplan1_reset_sound_w)); +// map(0x080000, 0x080001).w(?? video frame related ??) + map(0x080003, 0x080003).w(FUNC(toaplan1_state::intenable_w)); + map(0x080008, 0x08000f).w(FUNC(toaplan1_state::bcu_control_w)); + map(0x084000, 0x0847ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette"); + map(0x086000, 0x0867ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette"); + map(0x0c0000, 0x0c0fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); + map(0x100001, 0x100001).w(FUNC(toaplan1_state::bcu_flipscreen_w)); + map(0x100002, 0x100003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w)); + map(0x100004, 0x100007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w)); + map(0x100010, 0x10001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w)); + map(0x140000, 0x140001).r(FUNC(toaplan1_state::frame_done_r)); + map(0x140002, 0x140003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w)); + map(0x140004, 0x140005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w)); + map(0x140006, 0x140007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w)); + map(0x180000, 0x180003).w(FUNC(toaplan1_state::tile_offsets_w)); + map(0x180006, 0x180006).w(FUNC(toaplan1_state::fcu_flipscreen_w)); + map(0x180009, 0x180009).w(FUNC(toaplan1_state::reset_sound_w)); } void toaplan1_state::zerowing_main_map(address_map &map) @@ -691,156 +691,156 @@ void toaplan1_state::zerowing_main_map(address_map &map) map(0x000000, 0x00ffff).rom(); map(0x040000, 0x07ffff).rom(); map(0x080000, 0x087fff).ram(); - map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x0c0006, 0x0c0007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); + map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::tile_offsets_w)); + map(0x0c0006, 0x0c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w)); map(0x400000, 0x400001).portr("VBLANK"); -// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??) - map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); - map(0x480000, 0x480001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x480002, 0x480003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x480004, 0x480007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); - map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); +// map(0x400000, 0x400001).w(?? video frame related ??) + map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w)); + map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w)); + map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette"); + map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette"); + map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); + map(0x480001, 0x480001).w(FUNC(toaplan1_state::bcu_flipscreen_w)); + map(0x480002, 0x480003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w)); + map(0x480004, 0x480007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w)); + map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w)); + map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::frame_done_r)); + map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w)); + map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w)); + map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w)); } -void toaplan1_state::demonwld_main_map(address_map &map) +void toaplan1_demonwld_state::main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x400000, 0x400001).portr("VBLANK"); -// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??) - map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x600000, 0x600fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); - map(0x800000, 0x800001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x800002, 0x800003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x800004, 0x800007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x800010, 0x80001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); - map(0xa00000, 0xa00001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0xa00002, 0xa00003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0xa00004, 0xa00005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0xa00006, 0xa00007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); +// map(0x400000, 0x400001).w(?? video frame related ??) + map(0x400003, 0x400003).w(FUNC(toaplan1_demonwld_state::intenable_w)); + map(0x400008, 0x40000f).w(FUNC(toaplan1_demonwld_state::bcu_control_w)); + map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_demonwld_state::bgpalette_w)).share("bgpalette"); + map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_demonwld_state::fgpalette_w)).share("fgpalette"); + map(0x600000, 0x600fff).rw(FUNC(toaplan1_demonwld_state::shared_r), FUNC(toaplan1_demonwld_state::shared_w)).umask16(0x00ff); + map(0x800001, 0x800001).w(FUNC(toaplan1_demonwld_state::bcu_flipscreen_w)); + map(0x800002, 0x800003).rw(FUNC(toaplan1_demonwld_state::tileram_offs_r), FUNC(toaplan1_demonwld_state::tileram_offs_w)); + map(0x800004, 0x800007).rw(FUNC(toaplan1_demonwld_state::tileram_r), FUNC(toaplan1_demonwld_state::tileram_w)); + map(0x800010, 0x80001f).rw(FUNC(toaplan1_demonwld_state::scroll_regs_r), FUNC(toaplan1_demonwld_state::scroll_regs_w)); + map(0xa00000, 0xa00001).r(FUNC(toaplan1_demonwld_state::frame_done_r)); + map(0xa00002, 0xa00003).rw(FUNC(toaplan1_demonwld_state::spriteram_offs_r), FUNC(toaplan1_demonwld_state::spriteram_offs_w)); + map(0xa00004, 0xa00005).rw(FUNC(toaplan1_demonwld_state::spriteram_r), FUNC(toaplan1_demonwld_state::spriteram_w)); + map(0xa00006, 0xa00007).rw(FUNC(toaplan1_demonwld_state::spritesizeram_r), FUNC(toaplan1_demonwld_state::spritesizeram_w)); map(0xc00000, 0xc03fff).ram(); - map(0xe00000, 0xe00003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0xe00006, 0xe00007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); - map(0xe00008, 0xe00009).w(FUNC(toaplan1_state::toaplan1_reset_sound_w)); - map(0xe0000a, 0xe0000b).w(FUNC(toaplan1_state::demonwld_dsp_ctrl_w)); /* DSP Comms control */ + map(0xe00000, 0xe00003).w(FUNC(toaplan1_demonwld_state::tile_offsets_w)); + map(0xe00006, 0xe00006).w(FUNC(toaplan1_demonwld_state::fcu_flipscreen_w)); + map(0xe00009, 0xe00009).w(FUNC(toaplan1_demonwld_state::reset_sound_w)); + map(0xe0000b, 0xe0000b).w(FUNC(toaplan1_demonwld_state::dsp_ctrl_w)); /* DSP Comms control */ } -void toaplan1_state::samesame_main_map(address_map &map) +void toaplan1_samesame_state::main_map(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x040000, 0x07ffff).rom(); - map(0x080000, 0x080003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x080006, 0x080007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); + map(0x080000, 0x080003).w(FUNC(toaplan1_samesame_state::tile_offsets_w)); + map(0x080006, 0x080006).w(FUNC(toaplan1_samesame_state::fcu_flipscreen_w)); map(0x0c0000, 0x0c3fff).ram(); /* Frame done at $c1ada */ map(0x100000, 0x100001).portr("VBLANK"); -// AM_RANGE(0x100000, 0x100001) AM_WRITE(?? video frame related ??) - map(0x100002, 0x100003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x100008, 0x10000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x104000, 0x1047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x106000, 0x1067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); +// map(0x100000, 0x100001).w(?? video frame related ??) + map(0x100003, 0x100003).w(FUNC(toaplan1_samesame_state::intenable_w)); + map(0x100008, 0x10000f).w(FUNC(toaplan1_samesame_state::bcu_control_w)); + map(0x104000, 0x1047ff).ram().w(FUNC(toaplan1_samesame_state::bgpalette_w)).share("bgpalette"); + map(0x106000, 0x1067ff).ram().w(FUNC(toaplan1_samesame_state::fgpalette_w)).share("fgpalette"); map(0x140000, 0x140001).portr("P1"); map(0x140002, 0x140003).portr("P2"); map(0x140004, 0x140005).portr("DSWA"); map(0x140006, 0x140007).portr("DSWB"); map(0x140008, 0x140009).portr("SYSTEM"); - map(0x14000a, 0x14000b).r(FUNC(toaplan1_state::samesame_port_6_word_r)); /* Territory, and MCU ready */ - map(0x14000c, 0x14000d).w(FUNC(toaplan1_state::samesame_coin_w)); /* Coin counter/lockout */ - map(0x14000e, 0x14000f).w(FUNC(toaplan1_state::samesame_mcu_w)); /* Commands sent to HD647180 */ - map(0x180000, 0x180001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x180002, 0x180003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x180004, 0x180007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x180010, 0x18001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); - map(0x1c0000, 0x1c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); -// AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(?? disable sprite refresh ??) - map(0x1c0002, 0x1c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x1c0004, 0x1c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x1c0006, 0x1c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); + map(0x14000b, 0x14000b).r(FUNC(toaplan1_samesame_state::port_6_word_r)); /* Territory, and MCU ready */ + map(0x14000d, 0x14000d).w(FUNC(toaplan1_samesame_state::coin_w)); /* Coin counter/lockout */ + map(0x14000f, 0x14000f).w(FUNC(toaplan1_samesame_state::mcu_w)); /* Commands sent to HD647180 */ + map(0x180001, 0x180001).w(FUNC(toaplan1_samesame_state::bcu_flipscreen_w)); + map(0x180002, 0x180003).rw(FUNC(toaplan1_samesame_state::tileram_offs_r), FUNC(toaplan1_samesame_state::tileram_offs_w)); + map(0x180004, 0x180007).rw(FUNC(toaplan1_samesame_state::tileram_r), FUNC(toaplan1_samesame_state::tileram_w)); + map(0x180010, 0x18001f).rw(FUNC(toaplan1_samesame_state::scroll_regs_r), FUNC(toaplan1_samesame_state::scroll_regs_w)); + map(0x1c0000, 0x1c0001).r(FUNC(toaplan1_samesame_state::frame_done_r)); +// map(0x1c0000, 0x1c0001).w(?? disable sprite refresh ??) + map(0x1c0002, 0x1c0003).rw(FUNC(toaplan1_samesame_state::spriteram_offs_r), FUNC(toaplan1_samesame_state::spriteram_offs_w)); + map(0x1c0004, 0x1c0005).rw(FUNC(toaplan1_samesame_state::spriteram_r), FUNC(toaplan1_samesame_state::spriteram_w)); + map(0x1c0006, 0x1c0007).rw(FUNC(toaplan1_samesame_state::spritesizeram_r), FUNC(toaplan1_samesame_state::spritesizeram_w)); } void toaplan1_state::outzone_main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); - map(0x100000, 0x100001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0x100002, 0x100003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x100004, 0x100005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x100006, 0x100007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); - map(0x140000, 0x140fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); - map(0x200000, 0x200001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x200002, 0x200003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x200004, 0x200007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x200010, 0x20001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); + map(0x100000, 0x100001).r(FUNC(toaplan1_state::frame_done_r)); + map(0x100002, 0x100003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w)); + map(0x100004, 0x100005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w)); + map(0x100006, 0x100007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w)); + map(0x140000, 0x140fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); + map(0x200001, 0x200001).w(FUNC(toaplan1_state::bcu_flipscreen_w)); + map(0x200002, 0x200003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w)); + map(0x200004, 0x200007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w)); + map(0x200010, 0x20001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w)); map(0x240000, 0x243fff).ram(); map(0x300000, 0x300001).portr("VBLANK"); -// AM_RANGE(0x300000, 0x300001) AM_WRITE(?? video frame related ??) - map(0x300002, 0x300003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x300008, 0x30000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x304000, 0x3047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x306000, 0x3067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x340000, 0x340003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x340006, 0x340007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); +// map(0x300000, 0x300001).w(?? video frame related ??) + map(0x300003, 0x300003).w(FUNC(toaplan1_state::intenable_w)); + map(0x300008, 0x30000f).w(FUNC(toaplan1_state::bcu_control_w)); + map(0x304000, 0x3047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette"); + map(0x306000, 0x3067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette"); + map(0x340000, 0x340003).w(FUNC(toaplan1_state::tile_offsets_w)); + map(0x340006, 0x340006).w(FUNC(toaplan1_state::fcu_flipscreen_w)); } void toaplan1_state::outzonecv_main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); -// AM_RANGE(0x040000, 0x07ffff) AM_ROM +// map(0x040000, 0x07ffff).rom(); map(0x080000, 0x087fff).ram(); - map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x0c0006, 0x0c0007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); + map(0x0c0000, 0x0c0003).w(FUNC(toaplan1_state::tile_offsets_w)); + map(0x0c0006, 0x0c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w)); map(0x400000, 0x400001).portr("VBLANK"); -// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??) - map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); - map(0x480000, 0x480001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x480002, 0x480003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x480004, 0x480007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); - map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); +// map(0x400000, 0x400001).w(?? video frame related ??) + map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w)); + map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w)); + map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette"); + map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette"); + map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); + map(0x480001, 0x480001).w(FUNC(toaplan1_state::bcu_flipscreen_w)); + map(0x480002, 0x480003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w)); + map(0x480004, 0x480007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w)); + map(0x480010, 0x48001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w)); + map(0x4c0000, 0x4c0001).r(FUNC(toaplan1_state::frame_done_r)); + map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w)); + map(0x4c0004, 0x4c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w)); + map(0x4c0006, 0x4c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w)); } void toaplan1_state::vimana_main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); - map(0x080000, 0x080003).w(FUNC(toaplan1_state::toaplan1_tile_offsets_w)); - map(0x080006, 0x080007).w(FUNC(toaplan1_state::toaplan1_fcu_flipscreen_w)); - map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::toaplan1_frame_done_r)); - map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::toaplan1_spriteram_offs_r), FUNC(toaplan1_state::toaplan1_spriteram_offs_w)); - map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::toaplan1_spriteram16_r), FUNC(toaplan1_state::toaplan1_spriteram16_w)); - map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::toaplan1_spritesizeram16_r), FUNC(toaplan1_state::toaplan1_spritesizeram16_w)); + map(0x080000, 0x080003).w(FUNC(toaplan1_state::tile_offsets_w)); + map(0x080006, 0x080006).w(FUNC(toaplan1_state::fcu_flipscreen_w)); + map(0x0c0000, 0x0c0001).r(FUNC(toaplan1_state::frame_done_r)); + map(0x0c0002, 0x0c0003).rw(FUNC(toaplan1_state::spriteram_offs_r), FUNC(toaplan1_state::spriteram_offs_w)); + map(0x0c0004, 0x0c0005).rw(FUNC(toaplan1_state::spriteram_r), FUNC(toaplan1_state::spriteram_w)); + map(0x0c0006, 0x0c0007).rw(FUNC(toaplan1_state::spritesizeram_r), FUNC(toaplan1_state::spritesizeram_w)); map(0x400000, 0x400001).portr("VBLANK"); -// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??) - map(0x400002, 0x400003).w(FUNC(toaplan1_state::toaplan1_intenable_w)); - map(0x400008, 0x40000f).w(FUNC(toaplan1_state::toaplan1_bcu_control_w)); - map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::toaplan1_bgpalette_w)).share("bgpalette"); - map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::toaplan1_fgpalette_w)).share("fgpalette"); - map(0x440000, 0x4407ff).rw(FUNC(toaplan1_state::toaplan1_shared_r), FUNC(toaplan1_state::toaplan1_shared_w)); /* inputs, coins and sound handled by 647180 MCU via this space */ +// map(0x400000, 0x400001).w(?? video frame related ??) + map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w)); + map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w)); + map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette"); + map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette"); + map(0x440000, 0x4407ff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); /* inputs, coins and sound handled by 647180 MCU via this space */ map(0x480000, 0x487fff).ram(); - map(0x4c0000, 0x4c0001).w(FUNC(toaplan1_state::toaplan1_bcu_flipscreen_w)); - map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::toaplan1_tileram_offs_r), FUNC(toaplan1_state::toaplan1_tileram_offs_w)); - map(0x4c0004, 0x4c0007).rw(FUNC(toaplan1_state::toaplan1_tileram16_r), FUNC(toaplan1_state::toaplan1_tileram16_w)); - map(0x4c0010, 0x4c001f).rw(FUNC(toaplan1_state::toaplan1_scroll_regs_r), FUNC(toaplan1_state::toaplan1_scroll_regs_w)); + map(0x4c0001, 0x4c0001).w(FUNC(toaplan1_state::bcu_flipscreen_w)); + map(0x4c0002, 0x4c0003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w)); + map(0x4c0004, 0x4c0007).rw(FUNC(toaplan1_state::tileram_r), FUNC(toaplan1_state::tileram_w)); + map(0x4c0010, 0x4c001f).rw(FUNC(toaplan1_state::scroll_regs_r), FUNC(toaplan1_state::scroll_regs_w)); } /***************************** Z80 Memory Map *******************************/ -void toaplan1_state::toaplan1_sound_map(address_map &map) +void toaplan1_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x87ff).ram().share("sharedram"); @@ -864,7 +864,7 @@ void toaplan1_state::truxton_sound_io_map(address_map &map) map(0x00, 0x00).portr("P1"); map(0x10, 0x10).portr("P2"); map(0x20, 0x20).portr("SYSTEM"); - map(0x30, 0x30).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */ + map(0x30, 0x30).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */ map(0x40, 0x40).portr("DSWA"); map(0x50, 0x50).portr("DSWB"); map(0x60, 0x61).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); @@ -877,7 +877,7 @@ void toaplan1_state::hellfire_sound_io_map(address_map &map) map(0x00, 0x00).portr("DSWA"); map(0x10, 0x10).portr("DSWB"); map(0x20, 0x20).portr("TJUMP"); - map(0x30, 0x30).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */ + map(0x30, 0x30).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */ map(0x40, 0x40).portr("P1"); map(0x50, 0x50).portr("P2"); map(0x60, 0x60).portr("SYSTEM"); @@ -893,16 +893,16 @@ void toaplan1_state::zerowing_sound_io_map(address_map &map) map(0x28, 0x28).portr("DSWB"); map(0x80, 0x80).portr("SYSTEM"); map(0x88, 0x88).portr("TJUMP"); - map(0xa0, 0xa0).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */ + map(0xa0, 0xa0).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */ map(0xa8, 0xa9).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); } -void toaplan1_state::demonwld_sound_io_map(address_map &map) +void toaplan1_demonwld_state::sound_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); map(0x20, 0x20).portr("TJUMP"); - map(0x40, 0x40).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */ + map(0x40, 0x40).w(FUNC(toaplan1_demonwld_state::coin_w)); /* Coin counter/lockout */ map(0x60, 0x60).portr("SYSTEM"); map(0x80, 0x80).portr("P1"); map(0xa0, 0xa0).portr("DSWB"); @@ -914,7 +914,7 @@ void toaplan1_state::outzone_sound_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); - map(0x04, 0x04).w(FUNC(toaplan1_state::toaplan1_coin_w)); /* Coin counter/lockout */ + map(0x04, 0x04).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */ map(0x08, 0x08).portr("DSWA"); map(0x0c, 0x0c).portr("DSWB"); map(0x10, 0x10).portr("SYSTEM"); @@ -926,18 +926,18 @@ void toaplan1_state::outzone_sound_io_map(address_map &map) /***************************** TMS32010 Memory Map **************************/ -void toaplan1_state::dsp_program_map(address_map &map) +void toaplan1_demonwld_state::dsp_program_map(address_map &map) { map(0x000, 0x7ff).rom(); } /* $000 - 08F TMS32010 Internal Data RAM in Data Address Space */ -void toaplan1_state::dsp_io_map(address_map &map) +void toaplan1_demonwld_state::dsp_io_map(address_map &map) { - map(0, 0).w(FUNC(toaplan1_state::demonwld_dsp_addrsel_w)); - map(1, 1).rw(FUNC(toaplan1_state::demonwld_dsp_r), FUNC(toaplan1_state::demonwld_dsp_w)); - map(3, 3).w(FUNC(toaplan1_state::demonwld_dsp_bio_w)); + map(0, 0).w(FUNC(toaplan1_demonwld_state::dsp_addrsel_w)); + map(1, 1).rw(FUNC(toaplan1_demonwld_state::dsp_r), FUNC(toaplan1_demonwld_state::dsp_w)); + map(3, 3).w(FUNC(toaplan1_demonwld_state::dsp_bio_w)); } @@ -976,57 +976,57 @@ void toaplan1_state::vimana_hd647180_io_map(address_map &map) map(0x81, 0x81).portr("P2"); map(0x82, 0x82).portr("DSWA"); map(0x83, 0x83).portr("SYSTEM"); - map(0x84, 0x84).w(FUNC(toaplan1_state::toaplan1_coin_w)); // Coin counter/lockout // needs verify + map(0x84, 0x84).w(FUNC(toaplan1_state::coin_w)); // Coin counter/lockout // needs verify map(0x87, 0x87).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w)); map(0x8f, 0x8f).rw("ymsnd", FUNC(ym3812_device::read_port_r), FUNC(ym3812_device::write_port_w)); } -READ8_MEMBER(toaplan1_state::vimana_dswb_invert_r) +u8 toaplan1_state::vimana_dswb_invert_r() { - return ioport("DSWB")->read() ^ 0xFF; + return m_dswb_io->read() ^ 0xFF; } -READ8_MEMBER(toaplan1_state::vimana_tjump_invert_r) +u8 toaplan1_state::vimana_tjump_invert_r() { - return (ioport("TJUMP")->read() ^ 0xFF)|0xC0; // high 2 bits of port G always read as 1 + return (m_tjump_io->read() ^ 0xFF)|0xC0; // high 2 bits of port G always read as 1 } -WRITE16_MEMBER(toaplan1_state::samesame_mcu_w) +void toaplan1_samesame_state::mcu_w(u8 data) { m_to_mcu = data; m_cmdavailable = 1; }; -READ8_MEMBER(toaplan1_state::samesame_soundlatch_r) +u8 toaplan1_samesame_state::soundlatch_r() { return m_to_mcu; }; -WRITE8_MEMBER(toaplan1_state::samesame_sound_done_w) +void toaplan1_samesame_state::sound_done_w(u8 data) { m_to_mcu = data; m_cmdavailable = 0; } -READ8_MEMBER(toaplan1_state::samesame_cmdavailable_r) +u8 toaplan1_samesame_state::cmdavailable_r() { if (m_cmdavailable) return 0xff; else return 0x00; }; -void toaplan1_state::samesame_hd647180_mem_map(address_map &map) +void toaplan1_samesame_state::hd647180_mem_map(address_map &map) { map(0x00000, 0x03fff).rom(); /* Internal 16k byte ROM */ map(0x0fe00, 0x0ffff).ram(); /* Internal 512 byte RAM */ } -void toaplan1_state::samesame_hd647180_io_map(address_map &map) +void toaplan1_samesame_state::hd647180_io_map(address_map &map) { map.global_mask(0xff); - map(0x63, 0x63).r(FUNC(toaplan1_state::samesame_cmdavailable_r)); - map(0xa0, 0xa0).r(FUNC(toaplan1_state::samesame_soundlatch_r)); - map(0xb0, 0xb0).w(FUNC(toaplan1_state::samesame_sound_done_w)); + map(0x63, 0x63).r(FUNC(toaplan1_samesame_state::cmdavailable_r)); + map(0xa0, 0xa0).r(FUNC(toaplan1_samesame_state::soundlatch_r)); + map(0xb0, 0xb0).w(FUNC(toaplan1_samesame_state::sound_done_w)); map(0x80, 0x80).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w)); map(0x81, 0x81).rw("ymsnd", FUNC(ym3812_device::read_port_r), FUNC(ym3812_device::write_port_w)); @@ -1618,6 +1618,39 @@ static INPUT_PORTS_START( samesame2 ) PORT_BIT( 0xf2, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Mask bit 2 aswell */ INPUT_PORTS_END +static INPUT_PORTS_START( jiaojiao ) + PORT_INCLUDE( fireshrk ) + + PORT_MODIFY("P2") + TOAPLAN1_PLAYER_INPUT( 2, IPT_UNKNOWN ) + + PORT_MODIFY("DSWA") /* DSW A */ + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x01) + PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) PORT_CONDITION("TJUMP", 0x01, EQUALS, 0x00) + + PORT_MODIFY("TJUMP") /* Territory Jumper Block */ + PORT_DIPNAME( 0x01, 0x00, "Coinage Style" ) + PORT_DIPSETTING( 0x01, "Fire Shark" ) + PORT_DIPSETTING( 0x00, "Same! Same! Same!" ) + PORT_BIT( 0xf2, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Mask bit 2 aswell */ +INPUT_PORTS_END + /* verified from M68000 and Z80 code */ static INPUT_PORTS_START( outzone ) PORT_INCLUDE( toaplan1_3b ) @@ -1875,25 +1908,25 @@ static const gfx_layout tilelayout = RGN_FRAC(1,2), /* 16384/32768 tiles */ 4, /* 4 bits per pixel */ { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, + { STEP8(0,1) }, + { STEP8(0,8*2) }, 16*8 /* every tile takes 16 consecutive bytes */ }; static GFXDECODE_START( gfx_toaplan1 ) - GFXDECODE_ENTRY( "gfx1", 0x00000, tilelayout, 0, 64 ) - GFXDECODE_ENTRY( "gfx2", 0x00000, tilelayout, 64*16, 64 ) + GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 64 ) + GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 64*16, 64 ) GFXDECODE_END static GFXDECODE_START( gfx_rallybik ) - GFXDECODE_ENTRY( "gfx1", 0x00000, tilelayout, 0, 64 ) + GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 64 ) GFXDECODE_END -#define PIXEL_CLOCK (XTAL(28'000'000)/4) +#define PIXEL_CLOCK (XTAL(28'000'000) / 4) -// HTOTAL and VTOTAL taken from CRTC registers (toaplan1_bcu_control_w) +// HTOTAL and VTOTAL taken from CRTC registers (bcu_control_w) // rallybik, demonwld and outzone program a larger VTOTAL than the other // games, giving them a lower frame rate @@ -1913,8 +1946,8 @@ void toaplan1_rallybik_state::rallybik(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_rallybik_state::rallybik_main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_rallybik_state::toaplan1_sound_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_rallybik_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_rallybik_state::rallybik_sound_io_map); config.m_minimum_quantum = attotime::from_hz(600); @@ -1925,14 +1958,12 @@ void toaplan1_rallybik_state::rallybik(machine_config &config) coinlatch.q_out_cb<6>().set(FUNC(toaplan1_rallybik_state::coin_lockout_1_w)); coinlatch.q_out_cb<7>().set(FUNC(toaplan1_rallybik_state::coin_lockout_2_w)); - MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND, VBSTART); - m_screen->set_screen_update(FUNC(toaplan1_rallybik_state::screen_update_rallybik)); - m_screen->screen_vblank().set(FUNC(toaplan1_rallybik_state::screen_vblank_rallybik)); + m_screen->set_screen_update(FUNC(toaplan1_rallybik_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_rallybik_state::screen_vblank)); m_screen->set_palette(m_palette); TOAPLAN_SCU(config, m_spritegen, 0); @@ -1942,8 +1973,6 @@ void toaplan1_rallybik_state::rallybik(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_rallybik); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_rallybik_state,rallybik) - /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -1958,31 +1987,27 @@ void toaplan1_state::truxton(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::truxton_main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::truxton_sound_io_map); config.m_minimum_quantum = attotime::from_hz(600); - MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -1993,31 +2018,27 @@ void toaplan1_state::hellfire(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::hellfire_main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::hellfire_sound_io_map); config.m_minimum_quantum = attotime::from_hz(600); - MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -2028,8 +2049,8 @@ void toaplan1_state::zerowing(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::zerowing_main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::zerowing_sound_io_map); config.m_minimum_quantum = attotime::from_hz(600); @@ -2040,94 +2061,86 @@ void toaplan1_state::zerowing(machine_config &config) SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } -void toaplan1_state::demonwld(machine_config &config) +void toaplan1_demonwld_state::demonwld(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, XTAL(10'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::demonwld_main_map); + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_demonwld_state::main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map); - m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::demonwld_sound_io_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_demonwld_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &toaplan1_demonwld_state::sound_io_map); - TMS32010(config, m_dsp, XTAL(28'000'000)/2); - m_dsp->set_addrmap(AS_PROGRAM, &toaplan1_state::dsp_program_map); - m_dsp->set_addrmap(AS_IO, &toaplan1_state::dsp_io_map); - m_dsp->bio().set(FUNC(toaplan1_state::demonwld_bio_r)); + TMS32010(config, m_dsp, XTAL(28'000'000) / 2); + m_dsp->set_addrmap(AS_PROGRAM, &toaplan1_demonwld_state::dsp_program_map); + m_dsp->set_addrmap(AS_IO, &toaplan1_demonwld_state::dsp_io_map); + m_dsp->bio().set(FUNC(toaplan1_demonwld_state::bio_r)); config.m_minimum_quantum = attotime::from_hz(600); - MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,demonwld) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND+16, VBSTART+16); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_demonwld_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_demonwld_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } -void toaplan1_state::samesame(machine_config &config) +void toaplan1_samesame_state::samesame(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, XTAL(10'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::samesame_main_map); + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_samesame_state::main_map); - Z180(config, m_audiocpu, XTAL(28'000'000)/8); /* HD647180XOFS6 CPU */ - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::samesame_hd647180_mem_map); - m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::samesame_hd647180_io_map); + Z180(config, m_audiocpu, XTAL(28'000'000) / 8); /* HD647180XOFS6 CPU */ + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_samesame_state::hd647180_mem_map); + m_audiocpu->set_addrmap(AS_IO, &toaplan1_samesame_state::hd647180_io_map); config.m_perfect_cpu_quantum = subtag("maincpu"); - MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing) + MCFG_MACHINE_RESET_OVERRIDE(toaplan1_samesame_state,zerowing) /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_samesame)); + m_screen->set_screen_update(FUNC(toaplan1_samesame_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_samesame_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -2138,8 +2151,8 @@ void toaplan1_state::outzone(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::outzone_main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::outzone_sound_io_map); config.m_minimum_quantum = attotime::from_hz(600); @@ -2150,19 +2163,17 @@ void toaplan1_state::outzone(machine_config &config) SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND, VBSTART); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -2173,8 +2184,8 @@ void toaplan1_state::outzonecv(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::outzonecv_main_map); - Z80(config, m_audiocpu, XTAL(28'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::toaplan1_sound_map); + Z80(config, m_audiocpu, XTAL(28'000'000) / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::zerowing_sound_io_map); config.m_minimum_quantum = attotime::from_hz(600); @@ -2185,19 +2196,17 @@ void toaplan1_state::outzonecv(machine_config &config) SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -2208,31 +2217,29 @@ void toaplan1_state::vimana(machine_config &config) M68000(config, m_maincpu, XTAL(10'000'000)); /* verified on pcb */ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan1_state::vimana_main_map); - Z180(config, m_audiocpu, XTAL(28'000'000)/8); /* HD647180XOFS6 CPU */ + Z180(config, m_audiocpu, XTAL(28'000'000) / 8); /* HD647180XOFS6 CPU */ m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan1_state::vimana_hd647180_mem_map); m_audiocpu->set_addrmap(AS_IO, &toaplan1_state::vimana_hd647180_io_map); config.m_minimum_quantum = attotime::from_hz(600); - MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,vimana) + MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing) /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); - m_screen->set_screen_update(FUNC(toaplan1_state::screen_update_toaplan1)); - m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank_toaplan1)); + m_screen->set_screen_update(FUNC(toaplan1_state::screen_update)); + m_screen->screen_vblank().set(FUNC(toaplan1_state::screen_vblank)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_toaplan1); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, (64*16)+(64*16)); - MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1) - /* sound hardware */ SPEAKER(config, "mono").front_center(); - YM3812(config, m_ymsnd, XTAL(28'000'000)/8); /* verified on pcb */ + YM3812(config, m_ymsnd, XTAL(28'000'000) / 8); /* verified on pcb */ m_ymsnd->irq_handler().set_inputline(m_audiocpu, 0); m_ymsnd->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -2818,8 +2825,8 @@ ROM_END ROM_START( fireshrkd ) ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */ - ROM_LOAD16_BYTE( "o17_09dyn.8j",0x000000, 0x10000, CRC(e25eee27) SHA1(1ff3f838123180a0b6672c9beee6c0f0092a0f94) ) - ROM_LOAD16_BYTE( "o17_10dyn.8l",0x000001, 0x10000, CRC(c4c58cf6) SHA1(5867ecf66cd6c16cfcc54a581d3f4a8b666fd839) ) + ROM_LOAD16_BYTE( "o17_09dyn.8j",0x000000, 0x10000, CRC(e25eee27) SHA1(1ff3f838123180a0b6672c9beee6c0f0092a0f94) ) /* Identical halves */ + ROM_LOAD16_BYTE( "o17_10dyn.8l",0x000001, 0x10000, CRC(c4c58cf6) SHA1(5867ecf66cd6c16cfcc54a581d3f4a8b666fd839) ) /* Identical halves */ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) ) ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) ) @@ -2845,8 +2852,8 @@ ROM_END ROM_START( fireshrkdh ) ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */ - ROM_LOAD16_BYTE( "o17_09dyh.8j",0x000000, 0x10000, CRC(7b4c14dd) SHA1(d40dcf223f16c0f507aeb282d1524dbf1349c536) ) - ROM_LOAD16_BYTE( "o17_10dyh.8l",0x000001, 0x10000, CRC(a3f159f9) SHA1(afc9630ca38da730f7cf4954d1333954e8d75787) ) + ROM_LOAD16_BYTE( "o17_09dyh.8j",0x000000, 0x10000, CRC(7b4c14dd) SHA1(d40dcf223f16c0f507aeb282d1524dbf1349c536) ) /* Identical halves */ + ROM_LOAD16_BYTE( "o17_10dyh.8l",0x000001, 0x10000, CRC(a3f159f9) SHA1(afc9630ca38da730f7cf4954d1333954e8d75787) ) /* Identical halves */ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) ) ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) ) @@ -3127,57 +3134,42 @@ ROM_START( vimanaj ) ROM_END -void toaplan1_state::init_toaplan1() -{ - toaplan1_driver_savestate(); -} - -void toaplan1_state::init_demonwld() -{ - toaplan1_driver_savestate(); - demonwld_driver_savestate(); -} - - - - - -GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, init_toaplan1, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 ) +GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 ) -GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, init_toaplan1, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 ) +GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 ) -GAME( 1989, hellfire, 0, hellfire, hellfire, toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (2P set)", 0 ) -GAME( 1989, hellfire1, hellfire, hellfire, hellfire1, toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (1P set)", 0 ) -GAME( 1989, hellfire2a, hellfire, hellfire, hellfire2a,toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (2P set, older)", 0 ) -GAME( 1989, hellfire1a, hellfire, hellfire, hellfire1a,toaplan1_state, init_toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (1P set, older)", 0 ) +GAME( 1989, hellfire, 0, hellfire, hellfire, toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (2P set)", 0 ) +GAME( 1989, hellfire1, hellfire, hellfire, hellfire1, toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (1P set)", 0 ) +GAME( 1989, hellfire2a, hellfire, hellfire, hellfire2a,toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (2P set, older)", 0 ) +GAME( 1989, hellfire1a, hellfire, hellfire, hellfire1a,toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (1P set, older)", 0 ) -GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state, init_toaplan1, ROT0, "Toaplan", "Zero Wing (2P set)", 0 ) -GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, init_toaplan1, ROT0, "Toaplan", "Zero Wing (1P set)", 0 ) -GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, init_toaplan1, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 ) +GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state, empty_init, ROT0, "Toaplan", "Zero Wing (2P set)", 0 ) +GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, empty_init, ROT0, "Toaplan", "Zero Wing (1P set)", 0 ) +GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, empty_init, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 ) -GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 ) -GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 ) -GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 ) -GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 ) -GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_state, init_demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 5)", 0 ) +GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 ) +GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 ) +GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 ) +GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 ) +GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 5)", 0 ) -GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Fire Shark", 0 ) -GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Fire Shark (earlier)", 0 ) -GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", 0 ) -GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", 0 ) -GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Same! Same! Same! (1P set)", 0 ) -GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Same! Same! Same! (2P set)", 0 ) -GAME( 1990, samesamecn, fireshrk, samesame, samesame2, toaplan1_state, init_toaplan1, ROT270, "Toaplan (Hong Kong Honest Trading license)", "Jiao! Jiao! Jiao! (China, 2P set)", 0 ) -GAME( 2015, samesamenh, fireshrk, samesame, samesame, toaplan1_state, init_toaplan1, ROT270, "hack (trap15)", "Same! Same! Same! (1P set, NEW VER! hack)", 0 ) +GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark", 0 ) +GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark (earlier)", 0 ) +GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", 0 ) +GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", 0 ) +GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (1P set)", 0 ) +GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (2P set)", 0 ) +GAME( 1990, samesamecn, fireshrk, samesame, jiaojiao, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Hong Kong Honest Trading license)", "Jiao! Jiao! Jiao! (China, 2P set)", 0 ) +GAME( 2015, samesamenh, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "hack (trap15)", "Same! Same! Same! (1P set, NEW VER! hack)", 0 ) -GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone", 0 ) -GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (harder)", 0 ) -GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (old set)", 0 ) -GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (older set)", 0 ) -GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype? -GAME( 1990, outzonecv, outzone, outzonecv,outzone, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Out Zone (Zero Wing TP-015 PCB conversion)", 0 ) +GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone", 0 ) +GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (harder)", 0 ) +GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (old set)", 0 ) +GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (older set)", 0 ) +GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype? +GAME( 1990, outzonecv, outzone, outzonecv,outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (Zero Wing TP-015 PCB conversion)", 0 ) // has various licenses / regions depending on jumpers, including Tecmo -GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Vimana (World, set 1)", 0 ) -GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Vimana (World, set 2)", 0 ) -GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, init_toaplan1, ROT270, "Toaplan", "Vimana (Japan)", 0 ) +GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, empty_init, ROT270, "Toaplan", "Vimana (World, set 1)", 0 ) +GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, empty_init, ROT270, "Toaplan", "Vimana (World, set 2)", 0 ) +GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, empty_init, ROT270, "Toaplan", "Vimana (Japan)", 0 ) diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp index e0294a4002b..d8b92603e19 100644 --- a/src/mame/drivers/toaplan2.cpp +++ b/src/mame/drivers/toaplan2.cpp @@ -771,14 +771,14 @@ READ16_MEMBER(toaplan2_state::batrider_z80rom_r) // these two latches are always written together, via a single move.l instruction WRITE8_MEMBER(toaplan2_state::batrider_soundlatch_w) { - m_soundlatch->write(space, offset, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } WRITE8_MEMBER(toaplan2_state::batrider_soundlatch2_w) { - m_soundlatch2->write(space, offset, data & 0xff); + m_soundlatch2->write(data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } diff --git a/src/mame/drivers/toki.cpp b/src/mame/drivers/toki.cpp index 88bca68e625..20dabd1812b 100644 --- a/src/mame/drivers/toki.cpp +++ b/src/mame/drivers/toki.cpp @@ -105,7 +105,7 @@ Notes: WRITE16_MEMBER(toki_state::tokib_soundcommand_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/tryout.cpp b/src/mame/drivers/tryout.cpp index 5a30afd1faf..99b6ba0e83d 100644 --- a/src/mame/drivers/tryout.cpp +++ b/src/mame/drivers/tryout.cpp @@ -35,7 +35,7 @@ WRITE8_MEMBER(tryout_state::nmi_ack_w) WRITE8_MEMBER(tryout_state::sound_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp index 11816fbd3b6..1b6cde80e5f 100644 --- a/src/mame/drivers/tsamurai.cpp +++ b/src/mame/drivers/tsamurai.cpp @@ -341,7 +341,7 @@ READ8_MEMBER(tsamurai_state::vsgongf_a100_r) WRITE8_MEMBER(tsamurai_state::vsgongf_sound_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -461,6 +461,16 @@ static INPUT_PORTS_START( tsamurai ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( tsamuraih ) + PORT_INCLUDE( tsamurai ) + + PORT_MODIFY("DSW2") + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x03, "254 (Cheat)") +INPUT_PORTS_END static INPUT_PORTS_START( ladymstr ) PORT_INCLUDE( tsamurai ) @@ -1388,22 +1398,22 @@ void tsamurai_state::init_the26thz() m_maincpu->space(AS_PROGRAM).install_read_handler(0xd803, 0xd803, read8_delegate(FUNC(tsamurai_state::tsamurai_unknown_d803_r), this)); } -GAME( 1984, vsgongf, 0, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko", "VS Gong Fight", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) -GAME( 1984, ringfgt, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) -GAME( 1984, ringfgt2, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) +GAME( 1984, vsgongf, 0, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko", "VS Gong Fight", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) +GAME( 1984, ringfgt, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) +GAME( 1984, ringfgt2, vsgongf, vsgongf, vsgongf, tsamurai_state, empty_init, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, tsamurai, 0, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, tsamurai2, tsamurai, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, tsamuraih, tsamurai, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "bootleg", "Samurai Nihon-Ichi (bootleg, harder)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, tsamurai, 0, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, tsamurai2, tsamurai, tsamurai, tsamurai, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Samurai Nihon-Ichi (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, tsamuraih, tsamurai, tsamurai, tsamuraih, tsamurai_state, empty_init, ROT90, "bootleg", "Samurai Nihon-Ichi (bootleg, harder)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, ladymstr, 0, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 1, newer)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, ladymstr2, ladymstr, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 2, older)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nunchaku, ladymstr, tsamurai, nunchaku, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Nunchackun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, ladymstr, 0, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 1, newer)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, ladymstr2, ladymstr, tsamurai, ladymstr, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Lady Master of Kung Fu (set 2, older)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nunchaku, ladymstr, tsamurai, nunchaku, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Nunchackun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) -GAME( 1985, yamagchi, 0, tsamurai, yamagchi, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, yamagchi, 0, tsamurai, yamagchi, tsamurai_state, empty_init, ROT90, "Kaneko / Taito", "Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) -GAME( 1986, m660, 0, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito America Corporation license)", "Mission 660 (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, m660j, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito Corporation license)", "Mission 660 (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, m660b, m660, m660, m660, tsamurai_state, empty_init, ROT90, "bootleg", "Mission 660 (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, alphaxz, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Ed Co. Ltd. (Wood Place Inc. license)", "The Alphax Z (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, the26thz, m660, m660, m660, tsamurai_state, init_the26thz, ROT90, "Ed Co. Ltd. (Taito license)", "The 26th Z (Japan, location test)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, m660, 0, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito America Corporation license)", "Mission 660 (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, m660j, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Wood Place Inc. (Taito Corporation license)", "Mission 660 (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, m660b, m660, m660, m660, tsamurai_state, empty_init, ROT90, "bootleg", "Mission 660 (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, alphaxz, m660, m660, m660, tsamurai_state, empty_init, ROT90, "Ed Co. Ltd. (Wood Place Inc. license)", "The Alphax Z (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, the26thz, m660, m660, m660, tsamurai_state, init_the26thz, ROT90, "Ed Co. Ltd. (Taito license)", "The 26th Z (Japan, location test)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/tumbleb.cpp b/src/mame/drivers/tumbleb.cpp index 0b91a31aacf..44f4cf76f6f 100644 --- a/src/mame/drivers/tumbleb.cpp +++ b/src/mame/drivers/tumbleb.cpp @@ -304,6 +304,7 @@ Stephh's notes (based on the games M68000 code and some tests) : #include "cpu/m68000/m68000.h" #include "cpu/h6280/h6280.h" #include "cpu/mcs51/mcs51.h" // for semicom mcu +#include "cpu/pic16c5x/pic16c5x.h" #include "machine/decocrpt.h" #include "sound/ym2151.h" #include "sound/3812intf.h" @@ -667,7 +668,7 @@ void tumbleb_state::tumblepopba_main_map(address_map &map) map(0x322000, 0x322fff).w(FUNC(tumbleb_state::tumblepb_pf2_data_w)).share("pf2_data"); } -void tumbleb_state::funkyjetb_map(address_map &map) +void tumbleb_pic_state::funkyjetb_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x120000, 0x1207ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); @@ -676,13 +677,19 @@ void tumbleb_state::funkyjetb_map(address_map &map) map(0x1d0382, 0x1d0383).portr("DSW"); map(0x242102, 0x242103).portr("SYSTEM"); map(0x200000, 0x2007ff).ram(); // writes 0x180 - map(0x300000, 0x30000f).w(FUNC(tumbleb_state::tumblepb_control_0_w)); - map(0x320000, 0x320fff).w(FUNC(tumbleb_state::tumblepb_pf1_data_w)).share("pf1_data"); - map(0x322000, 0x322fff).w(FUNC(tumbleb_state::tumblepb_pf2_data_w)).share("pf2_data"); - //map(0x340000, 0x340bff).ram().share("pf1_rowscroll"); + map(0x300000, 0x30000f).w(FUNC(tumbleb_pic_state::tumblepb_control_0_w)); + map(0x320000, 0x320fff).ram().w(FUNC(tumbleb_pic_state::tumblepb_pf1_data_w)).share("pf1_data"); + map(0x322000, 0x322fff).ram().w(FUNC(tumbleb_pic_state::tumblepb_pf2_data_w)).share("pf2_data"); + map(0x340000, 0x340bff).ram().share("pf1_rowscroll"); //map(0x342000, 0x342bff).ram().share("pf2_rowscroll"); } +void tumbleb_pic_state::funkyjetb_oki_map(address_map &map) +{ + map(0x00000, 0x37fff).rom().region("oki", 0); + map(0x38000, 0x3ffff).bankr("okibank"); +} + void tumbleb_state::unico_base_map(address_map &map) { map(0x100000, 0x100003).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff); @@ -750,7 +757,7 @@ void tumbleb_state::htchctch_main_map(address_map &map) WRITE16_MEMBER(tumbleb_state::jumpkids_sound_w) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -786,11 +793,55 @@ void tumbleb_state::pangpang_main_map(address_map &map) /******************************************************************************/ +void tumbleb_pic_state::oki_bank_w(uint8_t data) +{ + m_okibank->set_entry(data & 0x0f); +} + +uint8_t tumbleb_pic_state::pic_data_r() +{ + return m_pic_data; +} + +void tumbleb_pic_state::pic_data_w(uint8_t data) +{ + m_pic_data = data; +} + +void tumbleb_pic_state::pic_ctrl_w(uint8_t data) +{ + if (!BIT(data, 2)) + { + if (!BIT(data, 0)) + m_pic_data = m_oki->read(); + else if (!BIT(data, 1)) + { + logerror("OKI write: %02X\n", m_pic_data); + m_oki->write(m_pic_data); + } + } + + if (!BIT(data, 4)) + m_pic_data = m_soundlatch->read(); + if (!BIT(data, 5)) + m_soundlatch->acknowledge_w(); +} + +void tumbleb_pic_state::driver_start() +{ + m_pic_data = 0xff; + save_item(NAME(m_pic_data)); + + m_okibank->configure_entries(0, 16, memregion("oki")->base(), 0x8000); +} + +/******************************************************************************/ + WRITE16_MEMBER(tumbleb_state::semicom_soundcmd_w) { if (ACCESSING_BITS_0_7) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); // needed for Super Trio which reads the sound with polling // m_maincpu->spin_until_time(attotime::from_usec(100)); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); @@ -2141,12 +2192,24 @@ void tumbleb_state::tumbleb2(machine_config &config) OKIM6295(config, m_oki, 8000000/10, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.70); } -void tumbleb_state::funkyjetb(machine_config &config) +void tumbleb_pic_state::funkyjetb(machine_config &config) { tumbleb2(config); - m_maincpu->set_addrmap(AS_PROGRAM, &tumbleb_state::funkyjetb_map); - m_maincpu->set_vblank_int("screen", FUNC(tumbleb_state::irq6_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &tumbleb_pic_state::funkyjetb_map); + m_maincpu->set_vblank_int("screen", FUNC(tumbleb_pic_state::irq6_line_hold)); + + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->set_separate_acknowledge(true); + + pic16c57_device &pic(PIC16C57(config, "pic", 4'000'000)); // unknown clock + pic.write_a().set(FUNC(tumbleb_pic_state::oki_bank_w)); + pic.read_b().set(FUNC(tumbleb_pic_state::pic_data_r)); + pic.write_b().set(FUNC(tumbleb_pic_state::pic_data_w)); + pic.read_c().set(m_soundlatch, FUNC(generic_latch_8_device::pending_r)).bit(6); + pic.write_c().set(FUNC(tumbleb_pic_state::pic_ctrl_w)); + + m_oki->set_addrmap(0, &tumbleb_pic_state::funkyjetb_oki_map); } void tumbleb_state::jumpkids(machine_config &config) @@ -2549,8 +2612,8 @@ ROM_START( funkyjetb ) ROM_LOAD16_BYTE( "4-27c020.bin", 0x00000, 0x40000, CRC(4e5bfda3) SHA1(b1bcc4ad1343d379de9a143a72a84db9830c8fa0) ) ROM_LOAD16_BYTE( "3-27c020.bin", 0x00001, 0x40000, CRC(e253e20c) SHA1(6fe1704872bf807ed24f500c997f62c880f6c5c1) ) - ROM_REGION( 0x2000, "pic", 0 ) /* Sound CPU */ - ROM_LOAD( "1-pic16c57-xt.bin", 0x00000, 0x2000, NO_DUMP ) // protected + ROM_REGION( 0x1000, "pic", 0 ) /* Sound CPU */ + ROM_LOAD( "1-pic16c57-xt.bin", 0x00000, 0x1000, CRC(653ed006) SHA1(38b7c7b3f40d73e2e7c4361c918eaf4bba2bdc3c) ) // From decap ROM_REGION( 0x080000, "tilegfx", 0 ) ROM_LOAD16_BYTE( "5-27c020.bin", 0x000000, 0x40000, CRC(f75ff923) SHA1(4177e94ba1e3a82861d0277ba5d0abc24482ffe2) ) @@ -3712,7 +3775,7 @@ void tumbleb_state::init_chokchok() init_htchctch(); /* different palette format, closer to tumblep -- is this controlled by a register? the palette was right with the hatch catch trojan */ - m_maincpu->space(AS_PROGRAM).install_write_handler(0x140000, 0x140fff, write16_delegate(FUNC(palette_device::write16), m_palette.target())); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x140000, 0x140fff, write16s_delegate(FUNC(palette_device::write16), m_palette.target())); /* slightly different banking */ m_maincpu->space(AS_PROGRAM).install_write_handler(0x100002, 0x100003, write16_delegate(FUNC(tumbleb_state::chokchok_tilebank_w),this)); @@ -3756,7 +3819,7 @@ GAME( 1991, tumbleb, tumblep, tumblepb, tumblepb, tumbleb_state, init_tumble GAME( 1991, tumbleb2, tumblep, tumbleb2, tumblepb, tumbleb_state, init_tumbleb2, ROT0, "bootleg", "Tumble Pop (bootleg with PIC)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // PIC is protected, sound simulation not 100% GAME( 1991, tumblepba,tumblep, tumblepba, tumblepb, tumbleb_state, init_tumblepba,ROT0, "bootleg (Playmark)", "Tumble Pop (Playmark bootleg)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // Playmark stickers on ROMs, offset pf1_alt tilemap, OKI not hooked up -GAME( 1992, funkyjetb,funkyjet,funkyjetb, tumblepb, tumbleb_state, init_tumblepb, ROT0, "bootleg", "Funky Jet (bootleg)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // wrong palette, inputs not working, undumped PIC driving an OKI +GAME( 1992, funkyjetb,funkyjet,funkyjetb, tumblepb, tumbleb_pic_state, init_tumblepb, ROT0, "bootleg", "Funky Jet (bootleg)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // wrong palette, inputs not working, undumped PIC driving an OKI GAME( 1993, jumpkids, 0, jumpkids, tumblepb, tumbleb_state, init_jumpkids, ROT0, "Comad", "Jump Kids", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/twincobr.cpp b/src/mame/drivers/twincobr.cpp index 8bb8cefa7a3..13260ae4e60 100644 --- a/src/mame/drivers/twincobr.cpp +++ b/src/mame/drivers/twincobr.cpp @@ -413,7 +413,7 @@ void twincobr_state::main_program_map(address_map &map) map(0x078008, 0x078009).portr("VBLANK"); /* V-Blank & FShark Coin/Start */ map(0x07800b, 0x07800b).w(m_coinlatch, FUNC(ls259_device::write_nibble_d0)); /* Flying Shark DSP Comms & coin stuff */ map(0x07800d, 0x07800d).w(m_mainlatch, FUNC(ls259_device::write_nibble_d0)); /* Twin Cobra DSP Comms & system control */ - map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)); /* 16-bit on 68000 side, 8-bit on Z80 side */ + map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)).umask16(0x00ff); /* 16-bit on 68000 side, 8-bit on Z80 side */ map(0x07e000, 0x07e001).rw(FUNC(twincobr_state::twincobr_txram_r), FUNC(twincobr_state::twincobr_txram_w)); /* data for text video RAM */ map(0x07e002, 0x07e003).rw(FUNC(twincobr_state::twincobr_bgram_r), FUNC(twincobr_state::twincobr_bgram_w)); /* data for bg video RAM */ map(0x07e004, 0x07e005).rw(FUNC(twincobr_state::twincobr_fgram_r), FUNC(twincobr_state::twincobr_fgram_w)); /* data for fg video RAM */ @@ -626,8 +626,8 @@ static const gfx_layout charlayout = RGN_FRAC(1,3), /* 2048 characters */ 3, /* 3 bits per pixel */ { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + { STEP8(0,1) }, + { STEP8(0,8) }, 8*8 /* every char takes 8 consecutive bytes */ }; @@ -637,8 +637,8 @@ static const gfx_layout tilelayout = RGN_FRAC(1,4), /* 4096/8192 tiles */ 4, /* 4 bits per pixel */ { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + { STEP8(0,1) }, + { STEP8(0,8) }, 8*8 /* every tile takes 8 consecutive bytes */ }; @@ -667,8 +667,6 @@ void twincobr_state::twincobr(machine_config &config) config.m_minimum_quantum = attotime::from_hz(6000); - MCFG_MACHINE_RESET_OVERRIDE(twincobr_state,twincobr) - LS259(config, m_mainlatch); m_mainlatch->q_out_cb<2>().set(FUNC(twincobr_state::int_enable_w)); m_mainlatch->q_out_cb<3>().set(FUNC(twincobr_state::flipscreen_w)); @@ -698,7 +696,7 @@ void twincobr_state::twincobr(machine_config &config) SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(28_MHz_XTAL/4, 446, 0, 320, 286, 0, 240); - m_screen->set_screen_update(FUNC(twincobr_state::screen_update_toaplan0)); + m_screen->set_screen_update(FUNC(twincobr_state::screen_update)); m_screen->screen_vblank().set(m_spriteram16, FUNC(buffered_spriteram16_device::vblank_copy_rising)); m_screen->screen_vblank().append(FUNC(twincobr_state::twincobr_vblank_irq)); m_screen->set_palette(m_palette); @@ -1296,7 +1294,7 @@ ROM_END void twincobr_state::init_twincobr() { - twincobr_driver_savestate(); + driver_savestate(); } diff --git a/src/mame/drivers/uapce.cpp b/src/mame/drivers/uapce.cpp index 8d0f0f93e16..7c400fd56d2 100644 --- a/src/mame/drivers/uapce.cpp +++ b/src/mame/drivers/uapce.cpp @@ -33,6 +33,24 @@ -x1 Victory Run standardd Hucard -x1 Plexiglass control panel overlay (used) +In the August 1989 issue of Vending Times magazine: +https://archive.org/details/VendingTimesVOL29NO10August1989Clearscan/page/n69 +https://archive.org/details/VendingTimesVOL29NO10August1989Clearscan/page/n99 +there was a list of all of the available UA produced HU-Cards about to be released. +- Legendary Axe +- Victory Run +- Keith Courage in the Alpha Zones +- World Class Baseball +- Power Golf +- Blazing Lazers +- Dungeon Explorer +- Alien Crush +- China Warrior +- Military Madness +- JJ and Jeff +and said that six to ten more new game cards would be available by the end of the year. +It also shows game marquees for Victory Run and Power League. + In the February 1990 issue of Video Games & Computer Entertainment magazine, there was a list of all of the available UA produced Hu-Cards (at the current time of the article was published). The article mentions that the UA Hu-Cards were not compatible with the TG-16 gaming console. diff --git a/src/mame/drivers/unixpc.cpp b/src/mame/drivers/unixpc.cpp index 0f95c0417cf..a85c694d87a 100644 --- a/src/mame/drivers/unixpc.cpp +++ b/src/mame/drivers/unixpc.cpp @@ -266,7 +266,7 @@ WRITE16_MEMBER(unixpc_state::disk_control_w) // TODO: bits 0-2 = head select - m_hdc->drdy_w(BIT(data, 3) && m_hdr0->exists()); + m_hdc->drdy_w(BIT(data, 3) && m_hdr0->exists()); if (!BIT(data, 4)) m_hdc->reset(); diff --git a/src/mame/drivers/unkpoker.cpp b/src/mame/drivers/unkpoker.cpp new file mode 100644 index 00000000000..c5b3462dc42 --- /dev/null +++ b/src/mame/drivers/unkpoker.cpp @@ -0,0 +1,173 @@ +// license:BSD-3-Clause +// copyright-holders: +/**************************************************************************************** + +Unknown Color Poker Game +------------------------------ + +8080A CPU + +Four 2716 eproms + +Six 2102 Rams + +Two 2112 Rams + +Two 5101 Rams (Low Power Versions, one connected to Battery) + +Four position DIP Switch - DIP 1 changes on screen text from +normal to high lighted as seen pics. Other DIPS unknown. + +Sound? + +Date of manufacture unknown. Latest date codes on logic chips is 1980. + +Chaneman 3/20/2019 + + +TODO: everything + +*******************************************************************************************/ + +#include "emu.h" +#include "cpu/i8085/i8085.h" +#include "machine/nvram.h" + +#include "screen.h" +#include "emupal.h" +#include "speaker.h" + +class unkpoker_state : public driver_device +{ +public: + unkpoker_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this,"maincpu"), + m_videoram(*this, "videoram"), + m_chargen(*this, "gfx1") + { } + + void unkpoker(machine_config &config); + +private: + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void mem_map(address_map &map); + void io_map(address_map &map); + + required_device<cpu_device> m_maincpu; + required_shared_ptr<uint8_t> m_videoram; + required_region_ptr<u8> m_chargen; +}; + + +uint32_t unkpoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) // taken from video21.cpp +{ + uint16_t sy = 0, ma = 0; + + for (uint8_t y = 0; y < 28; y++) + { + for (uint8_t ra = 0; ra < 8; ra++) + { + uint16_t *p = &bitmap.pix16(sy++); + + for (uint16_t x = 0; x < 32; x++) + { + uint8_t chr = m_videoram[x + ma] & 0x7f; + uint8_t gfx = m_chargen[(chr << 3) | ra]; + + /* Display a scanline of a character */ + *p++ = BIT(gfx, 7); + *p++ = BIT(gfx, 6); + *p++ = BIT(gfx, 5); + *p++ = BIT(gfx, 4); + *p++ = BIT(gfx, 3); + *p++ = BIT(gfx, 2); + *p++ = BIT(gfx, 1); + *p++ = BIT(gfx, 0); + } + } + ma += 32; + } + return 0; +} + + +void unkpoker_state::mem_map(address_map &map) { + map(0x0000,0x0fff).rom(); + map(0x1000,0x1fff).ram(); + map(0x8000,0x83ff).ram().share("videoram"); +} + +void unkpoker_state::io_map(address_map &map) { + map(0x01,0x01).portr("IN"); + map(0x02,0x02).portr("DSW"); +} + + +static INPUT_PORTS_START( unkpoker ) + PORT_START("IN") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW:4") +INPUT_PORTS_END + + +static const gfx_layout tiles8x8_layout = +{ + 8,8, + RGN_FRAC(1,1), + 1, + { 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 +}; + + +static GFXDECODE_START( gfx_unkpoker ) + GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 1 ) +GFXDECODE_END + + +void unkpoker_state::unkpoker(machine_config &config) +{ + /* basic machine hardware */ + I8080A(config, m_maincpu, 2000000); // guessed + m_maincpu->set_addrmap(AS_PROGRAM, &unkpoker_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &unkpoker_state::io_map); + + //NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + /* video hardware */ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 255, 0, 255); + screen.set_screen_update(FUNC(unkpoker_state::screen_update)); + screen.set_palette("palette"); + + GFXDECODE(config, "gfxdecode", "palette", gfx_unkpoker); + PALETTE(config, "palette", palette_device::RGB_3BIT); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); +} + + +ROM_START( unkpoker ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "cdpat.13b", 0x0000, 0x0800, CRC(c3f3040f) SHA1(ed1916bcd9e1e80502fcff5ddd599c101a226e7c) ) + ROM_LOAD( "cdpat.11b", 0x0800, 0x0800, CRC(16a97398) SHA1(737192dd0e1b3083f1facd327a83d98a0b7f4d66) ) + + ROM_REGION( 0x1000, "gfx1", 0 ) + ROM_LOAD( "cd.3b", 0x0000, 0x0800, CRC(e3997d7d) SHA1(6c595c70afedc7aef024215d153fe31b418adc25) ) + ROM_LOAD( "cd.3c", 0x0800, 0x0800, CRC(b61adb76) SHA1(9805593fc6d9b01e4a63bfc35e5442c4c547c103) ) +ROM_END + +GAME(1980?, unkpoker, 0, unkpoker, unkpoker, unkpoker_state, empty_init, ROT0, "<unknown>", "unknown 1980 poker game", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE) diff --git a/src/mame/drivers/vamphalf.cpp b/src/mame/drivers/vamphalf.cpp index a4366848760..50fde56e844 100644 --- a/src/mame/drivers/vamphalf.cpp +++ b/src/mame/drivers/vamphalf.cpp @@ -495,7 +495,7 @@ WRITE16_MEMBER(vamphalf_state::boonggab_lamps_w) WRITE8_MEMBER( vamphalf_state::qs1000_p3_w ) { if (!BIT(data, 5)) - m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5)); + m_soundlatch->acknowledge_w(); membank("qs1000:data")->set_entry(data & 7); } diff --git a/src/mame/drivers/vaportra.cpp b/src/mame/drivers/vaportra.cpp index 4f7015df8a4..373baa71c97 100644 --- a/src/mame/drivers/vaportra.cpp +++ b/src/mame/drivers/vaportra.cpp @@ -233,7 +233,6 @@ void vaportra_state::vaportra(machine_config &config) PALETTE(config, m_palette).set_entries(1280); DECO16IC(config, m_deco_tilegen[0], 0); - m_deco_tilegen[0]->set_split(0); m_deco_tilegen[0]->set_pf1_size(DECO_64x32); m_deco_tilegen[0]->set_pf2_size(DECO_64x32); m_deco_tilegen[0]->set_pf1_trans_mask(0x0f); @@ -249,7 +248,6 @@ void vaportra_state::vaportra(machine_config &config) m_deco_tilegen[0]->set_gfxdecode_tag("gfxdecode"); DECO16IC(config, m_deco_tilegen[1], 0); - m_deco_tilegen[1]->set_split(0); m_deco_tilegen[1]->set_pf1_size(DECO_64x32); m_deco_tilegen[1]->set_pf2_size(DECO_64x32); m_deco_tilegen[1]->set_pf1_trans_mask(0x0f); diff --git a/src/mame/drivers/vega.cpp b/src/mame/drivers/vega.cpp index fc174a80f47..f4046254162 100644 --- a/src/mame/drivers/vega.cpp +++ b/src/mame/drivers/vega.cpp @@ -139,7 +139,6 @@ private: int m_tmp; int m_t1; - uint8_t m_ins8154_ram[0x80]; uint8_t m_txt_ram[0x400]; vega_obj m_obj[NUM_OBJ]; @@ -204,12 +203,12 @@ WRITE8_MEMBER(vega_state::extern_w) if(m_p2_data&0x40) /* P26 connected to M/IO pin */ { - m_ins8154_ram[offset&0x7f]=data; + m_ins8154->write_ram(offset, data); } else { //register w ? - m_ins8154->ins8154_w(space,offset&0x7f,data); + m_ins8154->write_io(offset & 0x7f, data); } } break; @@ -332,12 +331,12 @@ READ8_MEMBER(vega_state::extern_r) if(m_p2_data&0x40) /* P26 connected to M/IO pin */ { - return m_ins8154_ram[offset&0x7f]; + return m_ins8154->read_ram(offset); } else { //register r ? - return m_ins8154->ins8154_r(space,offset&0x7f); + return m_ins8154->read_io(offset & 0x7f); } } #if 0 diff --git a/src/mame/drivers/vegaeo.cpp b/src/mame/drivers/vegaeo.cpp index 6783050ab0b..d51c1255e12 100644 --- a/src/mame/drivers/vegaeo.cpp +++ b/src/mame/drivers/vegaeo.cpp @@ -75,7 +75,7 @@ WRITE8_MEMBER( vegaeo_state::qs1000_p3_w ) membank("qs1000:bank")->set_entry(data & 0x07); if (!BIT(data, 5)) - m_soundlatch->acknowledge_w(space, 0, !BIT(data, 5)); + m_soundlatch->acknowledge_w(); } WRITE8_MEMBER(vegaeo_state::vram_w) diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp index 98567f1c082..761347e3aea 100644 --- a/src/mame/drivers/vii.cpp +++ b/src/mame/drivers/vii.cpp @@ -9,69 +9,69 @@ die markings show "SunPlus QL8041" ( also known as Sunplus SPG240 & PAC300 ) - (all GameKeyReady units?) - Disney Princess (GKR) - Wheel of Fortune (GKR) - JAKKS WWE (GKR) - Fantastic 4 (GKR) - Justice League (GKR) - Dora the Explorer Nursery Rhyme (GKR) - Dora the Explorer Play Park (GKR) - Spiderman 5-in-1 (GKR) - etc. - - (other non GKR JAKKS games) - X-Men (Wolverine pad) - Avatar: The Last Airbender - - (other games) - Mattel Classic Sports + (all GameKeyReady units?) + Disney Princess (GKR) + Wheel of Fortune (GKR) + JAKKS WWE (GKR) + Fantastic 4 (GKR) + Justice League (GKR) + Dora the Explorer Nursery Rhyme (GKR) + Dora the Explorer Play Park (GKR) + Spiderman 5-in-1 (GKR) + etc. + + (other non GKR JAKKS games) + X-Men (Wolverine pad) + Avatar: The Last Airbender + + (other games) + Mattel Classic Sports "SunPlus QL8041C" ( known as Sunplus SPG2??, seems to be compatible with above, so probably just a chip revision ) - - Clickstart ( see clickstart.cpp instead) - Wheel of Fortune 2nd Edition - Spider-man - Villain Roundup - "SunPlus QU7074-P69A" + Clickstart ( see clickstart.cpp instead) + Wheel of Fortune 2nd Edition + Spider-man - Villain Roundup - The Batman + "SunPlus QU7074-P69A" - --- + The Batman + + --- It is unknown if the following are close to this architecture or not (no dumps yet) "SunPlus QU7073-P69A" - Mortal Kombat - - "Sunplus PU7799-P680?" (difficult to read) + Mortal Kombat + + "Sunplus PU7799-P680?" (difficult to read) - Mission Paintball + Mission Paintball "Sunplus QL8167" - Disney Princess (newer?) - Go Diego Go - Shrek - Over the Hedge (this unit shows a GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB) - Marvel Heroes (Spider-man) - Spiderman 3 (Movie - black) + Disney Princess Magical Adventure + Go Diego Go + Shrek - Over the Hedge (this unit shows a 'GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB) + Marvel Heroes (Spider-man) + Spiderman 3 (Movie - black) - --- + --- - These are definitely different + These are definitely different "SunPlus PA7801" ( known as Sunplus SPG110? ) see spg110.cpp instead - Classic Arcade Pinball - EA Sports (NHL95 + Madden 95) - Spiderman 5-in-1 (original release) + Classic Arcade Pinball + EA Sports (NHL95 + Madden 95) + Spiderman 5-in-1 (original release) - "GCM394" (this is clearly newer, has extra opcodes, different internal map etc.) + "GCM394" (this is clearly newer, has extra opcodes, different internal map etc.) - Smart Fit Park + Smart Fit Park - Status: + Status: Mostly working @@ -89,10 +89,10 @@ jak_pooh: In the 'Light Tag' minigame (select the rock) you can't move left with the DRC (ok with -nodrc) and the game usually softlocks when you find a friend (with or without DRC) - jak_disf: - shows corrupt logo on first boot with no valid nvram (possibly hardware does too, or layer disable?) - jak_nick: - channel chasers (first game) title screen background should be blue, not the current pattern (possible layer disable?) + jak_disf: + shows corrupt logo on first boot with no valid nvram (possibly hardware does too, or layer disable?) + jak_nick: + channel chasers (first game) title screen background should be blue, not the current pattern (possible layer disable?) vii: When loading a cart from file manager, sometimes MAME will crash. @@ -115,11 +115,6 @@ TODO: Work out how to access the hidden TEST menus for all games (most JAKKS games should have one at least) - Also on this hardware: - - name PCB ID ROM width TSOP pads ROM size SEEPROM die markings - Dream Life ? x16 48 not dumped no Sunplus - *******************************************************************************/ #include "emu.h" @@ -338,6 +333,20 @@ private: }; +class dreamlif_state : public spg2xx_game_state +{ +public: + dreamlif_state(const machine_config &mconfig, device_type type, const char *tag) + : spg2xx_game_state(mconfig, type, tag) + { } + + void dreamlif(machine_config &config); + + DECLARE_READ16_MEMBER(portb_r); + DECLARE_WRITE16_MEMBER(portb_w); +}; + + /************************* * Machine Hardware * @@ -1031,6 +1040,24 @@ static INPUT_PORTS_START( rad_crik ) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END +static INPUT_PORTS_START( dreamlif ) + PORT_START("P1") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("A") + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("B") + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("C") + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Yes") + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("No") + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // must be low or the Tiger logo gets skipped, also must be low for service mode (hold pause while booting) to work + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Pause") + PORT_BIT( 0xf000, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + + // there is a speaker volume for the 'guitar' mode, but it's presumably an analog feature, not read by the game. static INPUT_PORTS_START( icanguit ) PORT_START("P1") @@ -1120,7 +1147,7 @@ static INPUT_PORTS_START( icanguit ) PORT_START("P3_1") PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_BIT( 0xfffc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("P3_2") @@ -1130,7 +1157,7 @@ static INPUT_PORTS_START( icanguit ) PORT_START("P3_3") PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Pause") - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_BIT( 0xfffc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("P3_4") @@ -1149,7 +1176,7 @@ INPUT_PORTS_END // this has an entire piano keyboard + extras // there is a volume dial for the internal speakers when used in non-TV mode, but presumably it is not CPU visible // there should be a metronome key, but nothing seems to have that effect, maybe due to incomplete sound emulation? -static INPUT_PORTS_START( icanpian ) +static INPUT_PORTS_START( icanpian ) PORT_START("P1") // uses multiplexed ports instead, see below @@ -1207,7 +1234,7 @@ static INPUT_PORTS_START( icanpian ) PORT_START("P3_0") PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Change Instrument") PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Cycle Hands") - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Display Mode 1") + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Display Mode 1") PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Display Mode 2") PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Display Mode 3") PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Display Mode 4") @@ -1218,9 +1245,9 @@ static INPUT_PORTS_START( icanpian ) PORT_START("P3_1") PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("Tempo Up") PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("Tempo Default") - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Tempo Down") - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Pause") - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Metronome") // is one of these the metronome button? + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Tempo Down") + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Pause") + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Metronome") PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) // will skip intro scenes etc. like other buttons but no more physical buttons on KB to map here PORT_BIT( 0xffc0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) @@ -1390,6 +1417,21 @@ static INPUT_PORTS_START( lexizeus ) // how many buttons does this have? I acci INPUT_PORTS_END +READ16_MEMBER(dreamlif_state::portb_r) +{ + // some kind of EEPROM device? + logerror("%s: portb_r\n", machine().describe_context()); + return 0x0000; +} + +WRITE16_MEMBER(dreamlif_state::portb_w) +{ + // some kind of EEPROM device? + logerror("%s: portb_w (%04x)\n", machine().describe_context(), data); +} + + + READ16_MEMBER(icanguit_state::porta_r) { //logerror("%s: porta_r\n", machine().describe_context()); @@ -1916,6 +1958,17 @@ void spg2xx_game_state::rad_skat(machine_config &config) NVRAM(config, m_nvram, nvram_device::DEFAULT_ALL_1); } +void dreamlif_state::dreamlif(machine_config &config) +{ + SPG24X(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen); + spg2xx_base(config); + + m_spg->porta_in().set_ioport("P1"); + m_spg->portb_in().set(FUNC(dreamlif_state::portb_r)); + m_spg->portb_out().set(FUNC(dreamlif_state::portb_w)); + +} + void spg2xx_game_state::rad_skatp(machine_config &config) { rad_skat(config); @@ -2352,10 +2405,9 @@ CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, ini CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND ) // Hasbro games -CONS( 2007, dreamlif, 0, 0, rad_skat, rad_crik, spg2xx_game_state, empty_init, "Hasbro", "Dream Life", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) - - +CONS( 2005, dreamlif, 0, 0, dreamlif, dreamlif, dreamlif_state, empty_init, "Hasbro", "Dream Life (Version 1.0, Feb 07 2005)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +// Fisher-Price games CONS( 2007, icanguit, 0, 0, icanguit, icanguit, icanguit_state, empty_init, "Fisher-Price", "I Can Play Guitar", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) CONS( 2006, icanpian, 0, 0, icanpian, icanpian, icanguit_state, empty_init, "Fisher-Price", "I Can Play Piano", MACHINE_IMPERFECT_SOUND ) // 2006 date from Manual diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp index 3d3549a77db..b31c3326608 100644 --- a/src/mame/drivers/vt100.cpp +++ b/src/mame/drivers/vt100.cpp @@ -214,12 +214,12 @@ void vt100_state::vt100_io(address_map &map) u8 vt100_state::printer_r(offs_t offset) { - return m_printer_uart->ins8250_r(machine().dummy_space(), offset >> 2); + return m_printer_uart->ins8250_r(offset >> 2); } void vt100_state::printer_w(offs_t offset, u8 data) { - m_printer_uart->ins8250_w(machine().dummy_space(), offset >> 2, data); + m_printer_uart->ins8250_w(offset >> 2, data); } void vt100_state::vt102_io(address_map &map) diff --git a/src/mame/drivers/wardner.cpp b/src/mame/drivers/wardner.cpp index a89ab9a1b35..9665ae01fa9 100644 --- a/src/mame/drivers/wardner.cpp +++ b/src/mame/drivers/wardner.cpp @@ -181,14 +181,14 @@ void wardner_state::main_program_map(address_map &map) { map(0x0000, 0x6fff).rom(); map(0x7000, 0x7fff).ram(); - map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // AM_SHARE("spriteram8") - map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // AM_SHARE("palette") + map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // .share("spriteram8") + map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // .share("palette") map(0xc000, 0xc7ff).writeonly().share("sharedram"); map(0x8000, 0xffff).r(m_membank, FUNC(address_map_bank_device::read8)); } // Overlapped RAM/Banked ROM -// Can't use AM_RANGE(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow +// Can't use map(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow void wardner_state::main_bank_map(address_map &map) { map(0x00000, 0x00fff).r(FUNC(wardner_state::wardner_sprite_r)).share("spriteram8"); @@ -338,24 +338,24 @@ INPUT_PORTS_END static const gfx_layout charlayout = { - 8,8, /* 8*8 characters */ - 2048, /* 2048 characters */ - 3, /* 3 bits per pixel */ - { 0*2048*8*8, 1*2048*8*8, 2*2048*8*8 }, /* the bitplanes are separated */ - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every char takes 8 consecutive bytes */ + 8,8, /* 8*8 characters */ + RGN_FRAC(1,3), /* 2048 characters */ + 3, /* 3 bits per pixel */ + { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, /* the bitplanes are separated */ + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 /* every char takes 8 consecutive bytes */ }; static const gfx_layout tilelayout = { - 8,8, /* 8*8 tiles */ - 4096, /* 4096 tiles */ - 4, /* 4 bits per pixel */ - { 0*4096*8*8, 1*4096*8*8, 2*4096*8*8, 3*4096*8*8 }, /* the bitplanes are separated */ - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every tile takes 8 consecutive bytes */ + 8,8, /* 8*8 tiles */ + RGN_FRAC(1,4), /* 4096 tiles */ + 4, /* 4 bits per pixel */ + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, /* the bitplanes are separated */ + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 /* every tile takes 8 consecutive bytes */ }; @@ -369,12 +369,12 @@ GFXDECODE_END void wardner_state::driver_start() { /* Save-State stuff in src/machine/twincobr.cpp */ - twincobr_driver_savestate(); + driver_savestate(); } void wardner_state::machine_reset() { - MACHINE_RESET_CALL_MEMBER(twincobr); + twincobr_state::machine_reset(); m_membank->set_bank(0); } @@ -429,7 +429,7 @@ void wardner_state::wardner(machine_config &config) SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_raw(14_MHz_XTAL/2, 446, 0, 320, 286, 0, 240); - m_screen->set_screen_update(FUNC(wardner_state::screen_update_toaplan0)); + m_screen->set_screen_update(FUNC(wardner_state::screen_update)); m_screen->screen_vblank().set(m_spriteram8, FUNC(buffered_spriteram8_device::vblank_copy_rising)); m_screen->screen_vblank().append(FUNC(wardner_state::wardner_vblank_irq)); m_screen->set_palette(m_palette); diff --git a/src/mame/drivers/wc90b.cpp b/src/mame/drivers/wc90b.cpp index 8a92726da2d..b658ebe7a41 100644 --- a/src/mame/drivers/wc90b.cpp +++ b/src/mame/drivers/wc90b.cpp @@ -113,7 +113,7 @@ WRITE8_MEMBER(wc90b_state::bankswitch1_w) WRITE8_MEMBER(wc90b_state::sound_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/drivers/witch.cpp b/src/mame/drivers/witch.cpp index 79b6dad6827..ba620398e0e 100644 --- a/src/mame/drivers/witch.cpp +++ b/src/mame/drivers/witch.cpp @@ -1002,7 +1002,7 @@ void keirinou_state::keirinou(machine_config &config) PALETTE(config.replace(), m_palette).set_entries(0x200+0x80); m_gfxdecode->set_info(gfx_keirinou); -// MCFG_PALETTE_FORMAT(IIBBGGRR) +// m_palette->set_format(palette_device::IIBBGGRR, 0x200+0x80); // Keirin Ou does have two individual PPIs (NEC D8255AC-2) m_ppi[0]->out_pc_callback().set(FUNC(keirinou_state::write_keirinou_a002)); diff --git a/src/mame/drivers/wpc_dcs.cpp b/src/mame/drivers/wpc_dcs.cpp index 710d5995733..3c14a1f7fe4 100644 --- a/src/mame/drivers/wpc_dcs.cpp +++ b/src/mame/drivers/wpc_dcs.cpp @@ -860,6 +860,19 @@ ROM_START(sttng_l3) ROM_LOAD16_BYTE("ng_u8_s.l1", 0xc00000, 0x080000, CRC(c9fb065e) SHA1(c148178ee0ea787acc88078db01d17073e75fdc7)) ROM_END +ROM_START(sttng_l5) + ROM_REGION(0x80000, "maincpu", 0) + ROM_LOAD("trek_lx5.rom", 0x00000, 0x80000, CRC(e004f3a7) SHA1(c724641106115e3f14bbe3998771823d0ac12d69)) + ROM_REGION16_LE(0x1000000, "dcs",0) + ROM_LOAD16_BYTE("ng_u2_s.l1", 0x000000, 0x080000, CRC(c3bd7bf5) SHA1(2476ff90232a52d667a407fac81ee4db028b94e5)) + ROM_LOAD16_BYTE("ng_u3_s.l1", 0x200000, 0x080000, CRC(9456cac7) SHA1(83e415e0f21bb5418f3677dbc13433e056c523ab)) + ROM_LOAD16_BYTE("ng_u4_s.l1", 0x400000, 0x080000, CRC(179d22a4) SHA1(456b7189e23d4e2bd7e2a6249fa2a73bf0e12194)) + ROM_LOAD16_BYTE("ng_u5_s.l1", 0x600000, 0x080000, CRC(231a3e72) SHA1(081b1a042e62ccb723788059d6c1e00b9b32c778)) + ROM_LOAD16_BYTE("ng_u6_s.l1", 0x800000, 0x080000, CRC(bb21377d) SHA1(229fb42a1f8b22727a809e5d63f26f045a2adda5)) + ROM_LOAD16_BYTE("ng_u7_s.l1", 0xa00000, 0x080000, CRC(d81b39f0) SHA1(3443e7327c755b85a5b390f7fcd0e9923890425a)) + ROM_LOAD16_BYTE("ng_u8_s.l1", 0xc00000, 0x080000, CRC(c9fb065e) SHA1(c148178ee0ea787acc88078db01d17073e75fdc7)) +ROM_END + /*------------- / Addams Family Values (Coin Dropper) @@ -893,6 +906,7 @@ GAME(1994, pop_lx5, 0, wpc_dcs, wpc_dcs, wpc_dcs_state, init_pop GAME(1994, pop_la4, pop_lx5, wpc_dcs, wpc_dcs, wpc_dcs_state, init_pop, ROT0, "Bally", "Popeye Saves The Earth (LA-4)", MACHINE_MECHANICAL) GAME(1994, pop_pa3, pop_lx5, wpc_dcs, wpc_dcs, wpc_dcs_state, init_pop, ROT0, "Bally", "Popeye Saves The Earth (PA-3)", MACHINE_MECHANICAL) GAME(1994, sttng_l7, 0, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (LX-7)", MACHINE_MECHANICAL) +GAME(1994, sttng_l5, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (LX-5)", MACHINE_MECHANICAL) GAME(1994, sttng_x7, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (LX-7 Special)", MACHINE_MECHANICAL) GAME(1993, sttng_p8, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (P-8)", MACHINE_MECHANICAL) GAME(1993, sttng_p5, sttng_l7, wpc_dcs, wpc_dcs, wpc_dcs_state, init_sttng, ROT0, "Williams", "Star Trek: The Next Generation (P-5)", MACHINE_MECHANICAL) diff --git a/src/mame/drivers/wyvernf0.cpp b/src/mame/drivers/wyvernf0.cpp index 932feb70810..f7162038ce4 100644 --- a/src/mame/drivers/wyvernf0.cpp +++ b/src/mame/drivers/wyvernf0.cpp @@ -373,7 +373,7 @@ TIMER_CALLBACK_MEMBER(wyvernf0_state::nmi_callback) WRITE8_MEMBER(wyvernf0_state::sound_command_w) { - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(wyvernf0_state::nmi_callback),this), data); } diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp index e5f3630d937..f0f9f8b4570 100644 --- a/src/mame/drivers/xavix.cpp +++ b/src/mame/drivers/xavix.cpp @@ -371,18 +371,18 @@ void xavix_state::xavix_lowbus_map(address_map &map) map(0x7a80, 0x7a80).rw(FUNC(xavix_state::ioevent_enable_r), FUNC(xavix_state::ioevent_enable_w)); map(0x7a81, 0x7a81).rw(FUNC(xavix_state::ioevent_irqstate_r), FUNC(xavix_state::ioevent_irqack_w)); - // Mouse? - map(0x7b00, 0x7b00).rw(FUNC(xavix_state::mouse_7b00_r), FUNC(xavix_state::mouse_7b00_w)); - map(0x7b01, 0x7b01).rw(FUNC(xavix_state::mouse_7b01_r), FUNC(xavix_state::mouse_7b01_w)); - map(0x7b10, 0x7b10).rw(FUNC(xavix_state::mouse_7b10_r), FUNC(xavix_state::mouse_7b10_w)); - map(0x7b11, 0x7b11).rw(FUNC(xavix_state::mouse_7b11_r), FUNC(xavix_state::mouse_7b11_w)); + // Mouse / Trackball? + map(0x7b00, 0x7b00).rw("anport", FUNC(xavix_anport_device::mouse_7b00_r), FUNC(xavix_anport_device::mouse_7b00_w)); + map(0x7b01, 0x7b01).rw("anport", FUNC(xavix_anport_device::mouse_7b01_r), FUNC(xavix_anport_device::mouse_7b01_w)); + map(0x7b10, 0x7b10).rw("anport", FUNC(xavix_anport_device::mouse_7b10_r), FUNC(xavix_anport_device::mouse_7b10_w)); + map(0x7b11, 0x7b11).rw("anport", FUNC(xavix_anport_device::mouse_7b11_r), FUNC(xavix_anport_device::mouse_7b11_w)); // Lightgun / pen 2 control //map(0x7b18, 0x7b1b) // ADC registers - map(0x7b80, 0x7b80).rw(FUNC(xavix_state::adc_7b80_r), FUNC(xavix_state::adc_7b80_w)); // rad_snow (not often) - map(0x7b81, 0x7b81).rw(FUNC(xavix_state::adc_7b81_r), FUNC(xavix_state::adc_7b81_w)); // written (often, m_trck, analog related?) + map(0x7b80, 0x7b80).rw("adc", FUNC(xavix_adc_device::adc_7b80_r), FUNC(xavix_adc_device::adc_7b80_w)); // rad_snow (not often) + map(0x7b81, 0x7b81).rw("adc", FUNC(xavix_adc_device::adc_7b81_r), FUNC(xavix_adc_device::adc_7b81_w)); // written (often, m_trck, analog related?) // Sleep control //map(0x7b82, 0x7b83) @@ -394,11 +394,11 @@ void xavix_state::xavix_lowbus_map(address_map &map) map(0x7c03, 0x7c03).r(FUNC(xavix_state::timer_curval_r)); // Barrel Shifter registers - map(0x7ff0, 0x7ff1).rw(FUNC(xavix_state::barrel_r), FUNC(xavix_state::barrel_w)); + map(0x7ff0, 0x7ff1).rw("math", FUNC(xavix_math_device::barrel_r), FUNC(xavix_math_device::barrel_w)); // Multiply / Divide registers - map(0x7ff2, 0x7ff4).rw(FUNC(xavix_state::mult_param_r), FUNC(xavix_state::mult_param_w)); - map(0x7ff5, 0x7ff6).rw(FUNC(xavix_state::mult_r), FUNC(xavix_state::mult_w)); + map(0x7ff2, 0x7ff4).rw("math", FUNC(xavix_math_device::mult_param_r), FUNC(xavix_math_device::mult_param_w)); + map(0x7ff5, 0x7ff6).rw("math", FUNC(xavix_math_device::mult_r), FUNC(xavix_math_device::mult_w)); // CPU Vector registers map(0x7ff9, 0x7ff9).w(FUNC(xavix_state::vector_enable_w)); // enables / disables the custom vectors @@ -889,202 +889,12 @@ static INPUT_PORTS_START( popira2 ) // player 2 buttons have heavy latency, prob PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off. PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_MODIFY("AN0") // 00 - PORT_DIPNAME( 0x0001, 0x0001, "AN0" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // buttons respond in a strange way if these are high - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Pad 1") PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Pad 2") PORT_PLAYER(2) - - PORT_MODIFY("AN1") // 01 - PORT_DIPNAME( 0x0001, 0x0001, "AN1" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // buttons respond in a strange way if these are high - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Pad 3") PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Pad 4") PORT_PLAYER(2) - - PORT_MODIFY("AN2") // 02 - PORT_DIPNAME( 0x0001, 0x0001, "AN2" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - - PORT_MODIFY("AN3") // 03 - PORT_DIPNAME( 0x0001, 0x0001, "AN3" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - - - PORT_MODIFY("AN4") // 10 - PORT_DIPNAME( 0x0001, 0x0001, "AN4" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - - PORT_MODIFY("AN5") // 11 - PORT_DIPNAME( 0x0001, 0x0001, "AN5" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - PORT_MODIFY("AN6") // 12 - PORT_DIPNAME( 0x0001, 0x0001, "AN6" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - - PORT_MODIFY("AN7") // 13 - PORT_DIPNAME( 0x0001, 0x0001, "AN7" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + // main input processing code is at 028059, which ends with setting a timer (028079) to read analog ports and get these buttons that way. main timer handler is at 00eb77, which reads ports via the ADC. $c3 where ports are stored is also checked at 00e6f4 + PORT_START("P2") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Pad 1") PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Pad 2") PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Pad 3") PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Pad 4") PORT_PLAYER(2) INPUT_PORTS_END @@ -1235,8 +1045,12 @@ static INPUT_PORTS_START( ttv_mx ) PORT_MODIFY("IN0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Accel PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // Brake - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Pause") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Motion Up") // you tilt the device, but actual inputs are digital + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Motion Down") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("Motion Left") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("Motion Right") INPUT_PORTS_END @@ -1286,6 +1100,47 @@ static INPUT_PORTS_START( epo_epp ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) INPUT_PORTS_END +// there is also a rumble output, likely mapped to one of the port bits +static INPUT_PORTS_START( epo_guru ) + PORT_INCLUDE(xavix) + + PORT_MODIFY("IN0") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) // used in the 'from behind' game at least + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + + PORT_MODIFY("MOUSE1X") +// PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(6) PORT_KEYDELTA(16) PORT_PLAYER(1) PORT_MINMAX(0x44,0xbc) + PORT_BIT( 0x1f, 0x10, IPT_AD_STICK_X ) PORT_SENSITIVITY(6) PORT_KEYDELTA(16) PORT_PLAYER(1) // PORT_MINMAX(0x44,0xbc) + + /* + (0x20 is subtracted from value returned in read handler) + + main game + 00 still + 01 - 3c right + 3d - 78 left - 78 is a nice slow left but invalid for the sub game + 79 - 7f right + 80 - 87 left + 88 - c3 right + c4 - ff left + + sub game (break-out) + 00 still + 01 - 3f right + 40 - 7f left + 80 still + 81 - bf right + c0 - ff left + + so valid range seems to be c4-ff (left), 00 (still), 01-3c (right) even if this means the slowest speed going left is faster than the slowest speed going right + maybe actual range is 5 bits either way? + 4 bits either way seems to work best in practice + + */ +INPUT_PORTS_END + static INPUT_PORTS_START( epo_efdx ) PORT_INCLUDE(xavix_i2c) @@ -1387,6 +1242,24 @@ void xavix_state::xavix(machine_config &config) ADDRESS_MAP_BANK(config, "lowbus").set_map(&xavix_state::xavix_lowbus_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000); + XAVIX_ADC(config, m_adc, 0); + m_adc->read_0_callback().set(FUNC(xavix_state::adc0_r)); + m_adc->read_1_callback().set(FUNC(xavix_state::adc1_r)); + m_adc->read_2_callback().set(FUNC(xavix_state::adc2_r)); + m_adc->read_3_callback().set(FUNC(xavix_state::adc3_r)); + m_adc->read_4_callback().set(FUNC(xavix_state::adc4_r)); + m_adc->read_5_callback().set(FUNC(xavix_state::adc5_r)); + m_adc->read_6_callback().set(FUNC(xavix_state::adc6_r)); + m_adc->read_7_callback().set(FUNC(xavix_state::adc7_r)); + + XAVIX_ANPORT(config, m_anport, 0); + m_anport->read_0_callback().set(FUNC(xavix_state::anport0_r)); + m_anport->read_1_callback().set(FUNC(xavix_state::anport1_r)); + m_anport->read_2_callback().set(FUNC(xavix_state::anport2_r)); + m_anport->read_3_callback().set(FUNC(xavix_state::anport3_r)); + + XAVIX_MATH(config, m_math, 0); + /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); @@ -1415,6 +1288,14 @@ void xavix_state::xavix(machine_config &config) m_sound->add_route(1, "rspeaker", 1.0); } +void xavix_guru_state::xavix_guru(machine_config &config) +{ + xavix_nv(config); + + m_anport->read_2_callback().set(FUNC(xavix_guru_state::guru_anport2_r)); +} + + void xavix_i2c_state::xavix_i2c_24lc02(machine_config &config) { xavix(config); @@ -1438,6 +1319,16 @@ void xavix_i2c_state::xavix_i2c_24lc04(machine_config &config) I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24LC04 on Nostalgia games, 24C04 on others } +void xavix_i2c_ltv_tam_state::xavix_i2c_24lc04_tam(machine_config &config) +{ + xavix_i2c_24lc04(config); + + m_anport->read_0_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport0_r)); + m_anport->read_1_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport1_r)); + m_anport->read_2_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport2_r)); + m_anport->read_3_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport3_r)); +} + void xavix_i2c_state::xavix_i2c_24c08(machine_config &config) { xavix(config); @@ -1521,6 +1412,16 @@ void xavix_state::xavix2000_nv(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); } +void xavix_2000_nv_sdb_state::xavix2000_nv_sdb(machine_config &config) +{ + xavix2000_nv(config); + + m_anport->read_0_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport0_r)); + m_anport->read_1_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport1_r)); + m_anport->read_2_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport2_r)); + m_anport->read_3_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport3_r)); +} + void xavix_i2c_state::xavix2000_i2c_24c04(machine_config &config) { xavix2000(config); @@ -1624,6 +1525,43 @@ void xavix_cart_state::xavix_cart_popira(machine_config &config) SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp"); } +// see code at 028060, using table from 00eb6d for conversion +READ8_MEMBER(xavix_popira2_cart_state::popira2_adc0_r) +{ + uint8_t p2 = m_p2->read() & 0x03; + switch (p2) + { + case 0x00: return 0xa0; + case 0x01: return 0x60; + case 0x02: return 0x10; + case 0x03: return 0x00; + } + + return 0x00; +} + +READ8_MEMBER(xavix_popira2_cart_state::popira2_adc1_r) +{ + uint8_t p2 = (m_p2->read() >> 2) & 0x03; + switch (p2) + { + case 0x00: return 0xa0; + case 0x01: return 0x60; + case 0x02: return 0x10; + case 0x03: return 0x00; + } + + return 0x00; +} + +void xavix_popira2_cart_state::xavix_cart_popira2(machine_config &config) +{ + xavix_cart_popira(config); + + m_adc->read_0_callback().set(FUNC(xavix_popira2_cart_state::popira2_adc0_r)); + m_adc->read_1_callback().set(FUNC(xavix_popira2_cart_state::popira2_adc1_r)); +} + void xavix_cart_state::xavix_cart_ddrfammt(machine_config &config) { xavix_cart(config); @@ -2007,7 +1945,7 @@ CONS( 2006, epo_epp3, 0, 0, xavix, epo_epp, xavix_state, CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, epo_efdx, xavix_i2c_state, init_epo_efdx, "Epoch / SSD Company LTD", "Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) -CONS( 2005, epo_guru, 0, 0, xavix, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Gururin World (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 2005, epo_guru, 0, 0, xavix_guru, epo_guru, xavix_guru_state, init_xavix, "Epoch / SSD Company LTD", "Gururin World (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Doraemon Wakuwaku Kuukihou (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // full / proper title? @@ -2037,7 +1975,7 @@ CONS( 2001, ddrfammt, 0, 0, xavix_cart_ddrfammt,ddrfammt, xavix_cart_ CONS( 2000, popira, 0, 0, xavix_cart_popira,popira, xavix_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // The original Popira is a single yellow unit -CONS( 2002, popira2, 0, 0, xavix_cart_popira,popira2, xavix_popira2_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira 2 (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // Popira 2 is a set of 2 blue & green linked units (2nd unit is just a controller, no CPU or TV out) +CONS( 2002, popira2, 0, 0, xavix_cart_popira2,popira2, xavix_popira2_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira 2 (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // Popira 2 is a set of 2 blue & green linked units (2nd unit is just a controller, no CPU or TV out) CONS( 2003, taikodp, 0, 0, xavix_i2c_taiko, taikodp, xavix_i2c_cart_state, init_xavix, "Takara / SSD Company LTD", "Taiko De Popira (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? are the drums analog? @@ -2048,7 +1986,7 @@ CONS( 2003, evio, 0, 0, xavix_nv, evio, xavix_state, // Let’s!TVプレイ è¶…ã«ã‚“ãスãƒãƒƒãƒˆ!ã“ã‚ãŒã—ã»ãƒ¼ã ã„ ãŸã¾ã”ã£ã¡ã‚Šãžãƒ¼ã¨ (Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort) (only on the Japanese list? http://test.shinsedai.co.jp/english/products/Applied/list.html ) This also allows you to use an IR reciever to import a Tamagotchi from compatible games -CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04, ltv_tam,xavix_i2c_ltv_tam_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04_tam, ltv_tam,xavix_i2c_ltv_tam_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) /* SuperXaviX(?) (XaviX 2000 type CPU) hardware titles (2nd XaviX generation?) @@ -2056,7 +1994,7 @@ CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04, ltv_tam,xavix_i2c_ltv_ these use the SSD 2000 NEC 85605-621 type CPU XavixPort Golf is "SSD 2003 SuperXaviX MXIC 2003 3009" (not dumped yet, but actually marked as SuperXaviX unlike the others!) - + This CPU type adds extra opcodes that don't appear to be present in the 97/98 types It does not appear to support the bitmap modes or 16-bit ROMs found in the 2002 type */ @@ -2098,7 +2036,7 @@ ROM_START( ban_onep ) ROM_END CONS( 2002, epo_ebox, 0, 0, xavix2000_nv, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Boxing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // doesn't use XaviX2000 extra opcodes, but had that type of CPU -CONS( 2004, epo_sdb, 0, 0, xavix2000_nv, epo_sdb, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND ) +CONS( 2004, epo_sdb, 0, 0, xavix2000_nv_sdb, epo_sdb, xavix_2000_nv_sdb_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND ) CONS( 2005, ttv_sw, 0, 0, xavix2000_i2c_24c02, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Star Wars Saga Edition - Lightsaber Battle Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) CONS( 2005, ttv_lotr, 0, 0, xavix2000_i2c_24c02, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Lord Of The Rings - Warrior of Middle-Earth", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/drivers/xbox.cpp b/src/mame/drivers/xbox.cpp index 1452d3ce5c3..d711932aa4f 100644 --- a/src/mame/drivers/xbox.cpp +++ b/src/mame/drivers/xbox.cpp @@ -170,26 +170,24 @@ void xbox_ata_devices(device_slot_interface &device) device.option_add("cdrom", ATAPI_CDROM); } -MACHINE_CONFIG_START(xbox_state::xbox) +void xbox_state::xbox(machine_config &config) +{ xbox_base(config); m_maincpu->set_addrmap(AS_PROGRAM, &xbox_state::xbox_map); m_maincpu->set_addrmap(AS_IO, &xbox_state::xbox_map_io); - MCFG_DEVICE_MODIFY(":pci:09.0:ide:0") - MCFG_DEVICE_SLOT_INTERFACE(xbox_ata_devices, "hdd", true) - MCFG_DEVICE_MODIFY(":pci:09.0:ide:1") - MCFG_DEVICE_SLOT_INTERFACE(xbox_ata_devices, "cdrom", true) + subdevice<ide_controller_32_device>(":pci:09.0:ide")->options(xbox_ata_devices, "hdd", "cdrom", true); OHCI_USB_CONNECTOR(config, ":pci:02.0:port1", usb_xbox, nullptr, false); OHCI_USB_CONNECTOR(config, ":pci:02.0:port2", usb_xbox, nullptr, false); OHCI_USB_CONNECTOR(config, ":pci:02.0:port3", usb_xbox, "xbox_controller", false); OHCI_USB_CONNECTOR(config, ":pci:02.0:port4", usb_xbox, nullptr, false); -/* sound hardware */ + /* sound hardware */ SPEAKER(config, "mono").front_center(); OHCI_GAME_CONTROLLER(config, "ohci_gamepad", 0); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/ymmu100.cpp b/src/mame/drivers/ymmu100.cpp index c363f3c33ce..86a2de6af84 100644 --- a/src/mame/drivers/ymmu100.cpp +++ b/src/mame/drivers/ymmu100.cpp @@ -132,9 +132,11 @@ #include "bus/midi/midiinport.h" #include "bus/midi/midioutport.h" #include "cpu/h8/h83002.h" +#include "cpu/h8/h83003.h" #include "cpu/h8/h8s2655.h" #include "video/hd44780.h" #include "sound/swp30.h" +#include "sound/meg.h" #include "debugger.h" #include "screen.h" @@ -163,6 +165,32 @@ static INPUT_PORTS_START( mu100 ) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) INPUT_PORTS_END +static INPUT_PORTS_START( vl70 ) + PORT_START("B0") + PORT_BIT(0x83, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Play") PORT_CODE(KEYCODE_A) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Effect") PORT_CODE(KEYCODE_F) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Midi/WX") PORT_CODE(KEYCODE_X) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Exit") PORT_CODE(KEYCODE_BACKSPACE) + + PORT_START("B1") + PORT_BIT(0x83, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Edit") PORT_CODE(KEYCODE_E) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mode") PORT_CODE(KEYCODE_M) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Part -") PORT_CODE(KEYCODE_OPENBRACE) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Select <") PORT_CODE(KEYCODE_COMMA) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Part +") PORT_CODE(KEYCODE_CLOSEBRACE) + + PORT_START("B2") + PORT_BIT(0x83, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Util") PORT_CODE(KEYCODE_U) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Breath") PORT_CODE(KEYCODE_B) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Value -") PORT_CODE(KEYCODE_MINUS) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Select >") PORT_CODE(KEYCODE_STOP) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Value +") PORT_CODE(KEYCODE_EQUALS) +INPUT_PORTS_END + class mu100_state : public driver_device { public: @@ -170,12 +198,19 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_mu80cpu(*this, "mu80cpu") + , m_vl70cpu(*this, "vl70cpu") , m_swp30(*this, "swp30") + , m_meg(*this, "meg") , m_lcd(*this, "lcd") , m_ioport_p7(*this, "P7") , m_ioport_p8(*this, "P8") + , m_ioport_b0(*this, "B0") + , m_ioport_b1(*this, "B1") + , m_ioport_b2(*this, "B2") { } + void vl70(machine_config &config); + void mu50(machine_config &config); void mu80(machine_config &config); void mu100(machine_config &config); @@ -259,7 +294,7 @@ public: } protected: - virtual u16 adc7_r(); + virtual u16 adc_type_r(); private: enum { @@ -269,6 +304,12 @@ private: }; enum { + P6_LCD_RS = 0x04, + P6_LCD_RW = 0x02, + P6_LCD_ENABLE = 0x01 + }; + + enum { PA_LCD_RS = 0x02, PA_LCD_ENABLE = 0x20, PA_LCD_RW = 0x40 @@ -276,19 +317,26 @@ private: optional_device<h8s2655_device> m_maincpu; optional_device<h83002_device> m_mu80cpu; - required_device<swp30_device> m_swp30; + optional_device<h83003_device> m_vl70cpu; + optional_device<swp30_device> m_swp30; + optional_device<meg_device> m_meg; required_device<hd44780_device> m_lcd; - required_ioport m_ioport_p7; - required_ioport m_ioport_p8; - - u8 cur_p1, cur_p2, cur_p3, cur_p5, cur_p6, cur_pa, cur_pb, cur_pf, cur_pg; - u8 cur_ic32; + optional_ioport m_ioport_p7; + optional_ioport m_ioport_p8; + optional_ioport m_ioport_b0; + optional_ioport m_ioport_b1; + optional_ioport m_ioport_b2; + + u8 cur_p1, cur_p2, cur_p3, cur_p5, cur_p6, cur_pa, cur_pb, cur_pc, cur_pf, cur_pg; + u8 cur_ic32, cur_leds; float contrast; - u16 adc0_r(); - u16 adc2_r(); - u16 adc4_r(); - u16 adc6_r(); + u16 adc_zero_r(); + u16 adc_ar_r(); + u16 adc_al_r(); + u16 adc_midisw_r(); + u16 adc_battery_r(); + u16 adc_breath_r(); void p1_w(u16 data); u16 p1_r(); @@ -301,12 +349,27 @@ private: u16 pa_r(); void pb_w(u16 data); u16 pb_r(); + void p6_w_mu80(u16 data); + u16 p6_r_mu80(); void pa_w_mu80(u16 data); u16 pa_r_mu80(); void pb_w_mu80(u16 data); u16 pb_r_mu80(); + void p6_w_vl70(u16 data); + u16 p6_r_vl70(); + void pa_w_vl70(u16 data); + u16 pa_r_vl70(); + void pb_w_vl70(u16 data); + void pc_w_vl70(u16 data); + u16 pc_r_vl70(); void pf_w(u16 data); void pg_w(u16 data); + void p6_w_mu50(u16 data); + u16 p6_r_mu50(); + void pa_w_mu50(u16 data); + u16 pa_r_mu50(); + u16 pb_r_mu50(); + void pb_w_mu50(u16 data); float lightlevel(const u8 *src, const u8 *render); u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -315,6 +378,9 @@ private: void mu100_map(address_map &map); void mu80_iomap(address_map &map); void mu80_map(address_map &map); + void mu50_iomap(address_map &map); + void vl70_iomap(address_map &map); + void vl70_map(address_map &map); void swp30_map(address_map &map); }; @@ -325,7 +391,7 @@ public: { } private: - virtual u16 adc7_r() override; + virtual u16 adc_type_r() override; }; void mu100_state::prg_write_tap(offs_t address, u16 data, u16 mem_mask) @@ -488,7 +554,8 @@ void mu100_state::chan_write_tap(offs_t address, u16 data, u16 mem_mask) void mu100_state::machine_start() { - cur_p1 = cur_p2 = cur_p3 = cur_p5 = cur_p6 = cur_pa = cur_pf = cur_pg = cur_ic32 = 0xff; + cur_p1 = cur_p2 = cur_p3 = cur_p5 = cur_p6 = cur_pa = cur_pc = cur_pf = cur_pg = cur_ic32 = 0xff; + cur_leds = 0x00; contrast = 1.0; } @@ -526,7 +593,7 @@ u32 mu100_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, cons } for(int i=0; i<6; i++) - if(cur_ic32 & (1 << (i == 5 ? 7 : i))) { + if(cur_leds & (1 << i)) { int x = 830 + 40*(i & 1); int y = 55 + 65*(i >> 1); for(int yy=-9; yy <= 9; yy++) { @@ -543,6 +610,14 @@ void mu100_state::mu80_map(address_map &map) { map(0x000000, 0x07ffff).rom().region("mu80cpu", 0); map(0x200000, 0x20ffff).ram(); // 64K work RAM + map(0x440000, 0x44001f).m(m_meg, FUNC(meg_device::map)); +} + +void mu100_state::vl70_map(address_map &map) +{ + map(0x000000, 0x1fffff).rom().region("vl70cpu", 0); + map(0x200000, 0x20ffff).ram(); // 64K work RAM + map(0x600000, 0x60001f).m(m_meg, FUNC(meg_device::map)); } void mu100_state::mu100_map(address_map &map) @@ -552,38 +627,49 @@ void mu100_state::mu100_map(address_map &map) map(0x400000, 0x401fff).m(m_swp30, FUNC(swp30_device::map)); } -u16 mu100_state::adc0_r() +// Grounded adc input +u16 mu100_state::adc_zero_r() { - // logerror("adc0_r\n"); return 0; } -u16 mu100_state::adc2_r() +// Analog input right (also sent to the swp) +u16 mu100_state::adc_ar_r() +{ + return 0; +} + +// Analog input left (also sent to the swp) +u16 mu100_state::adc_al_r() { - logerror("adc2_r\n"); return 0; } // Put the host switch to pure midi -u16 mu100_state::adc4_r() +u16 mu100_state::adc_midisw_r() { return 0; } // Battery level -u16 mu100_state::adc6_r() +u16 mu100_state::adc_battery_r() { - logerror("adc6_r\n"); - return 0x3ff; + return 0x200; +} + +// Breath controller +u16 mu100_state::adc_breath_r() +{ + return 0x000; } // model detect. pulled to GND (0) on MU100, to 0.5Vcc on the card version, to Vcc on MU100R -u16 mu100_state::adc7_r() +u16 mu100_state::adc_type_r() { return 0; } -u16 mu100r_state::adc7_r() +u16 mu100r_state::adc_type_r() { return 0x3ff; } @@ -670,8 +756,10 @@ u16 mu100_state::pa_r() void mu100_state::pf_w(u16 data) { - if(!(cur_pf & 0x01) && (data & 0x01)) + if(!(cur_pf & 0x01) && (data & 0x01)) { cur_ic32 = cur_p1; + cur_leds = (cur_p1 & 0x1f) | ((cur_p1 & 0x80) >> 2); + } cur_pf = data; } @@ -696,19 +784,31 @@ u16 mu100_state::pb_r_mu80() else return m_lcd->control_read(); } else + { + if(!(cur_pa & 0x10)) { + u8 val = 0xff; + if(!(cur_ic32 & 0x20)) + val &= m_ioport_p7->read(); + if(!(cur_ic32 & 0x40)) + val &= m_ioport_p8->read(); + return val; + } + return 0x00; + } } - if(!(cur_pa & 0x10)) { - u8 val = 0xff; - if(!(cur_ic32 & 0x20)) - val &= m_ioport_p7->read(); - if(!(cur_ic32 & 0x40)) - val &= m_ioport_p8->read(); - return val; - } + return cur_pb; +} - return cur_pa; +void mu100_state::p6_w_mu80(u16 data) +{ + cur_p6 = data; +} + +u16 mu100_state::p6_r_mu80() +{ + return cur_p6; } void mu100_state::pa_w_mu80(u16 data) @@ -724,7 +824,9 @@ void mu100_state::pa_w_mu80(u16 data) } if(!(cur_pa & 0x08) && (data & 0x08)) + { cur_ic32 = cur_pb; + } cur_pa = data; } @@ -733,15 +835,166 @@ u16 mu100_state::pa_r_mu80() { return cur_pa; } + +void mu100_state::p6_w_vl70(u16 data) +{ + if(!(cur_p6 & P6_LCD_ENABLE) && (data & P6_LCD_ENABLE)) { + if(!(cur_p6 & P6_LCD_RW)) { + if(cur_p6 & P6_LCD_RS) + m_lcd->data_write(cur_pa); + else + m_lcd->control_write(cur_pa); + } + } + + cur_p6 = data; +} + +void mu100_state::pb_w_vl70(u16 data) +{ + cur_leds = bitswap<6>((data >> 2) ^ 0x3f, 5, 3, 1, 4, 2, 0); +} + +void mu100_state::pc_w_vl70(u16 data) +{ + cur_pc = data; +} + +u16 mu100_state::pc_r_vl70() +{ + u8 r = 0xff; + if(!(cur_pc & 0x01)) + r &= m_ioport_b0->read(); + if(!(cur_pc & 0x02)) + r &= m_ioport_b1->read(); + if(!(cur_pc & 0x80)) + r &= m_ioport_b2->read(); + return r; +} + +u16 mu100_state::p6_r_vl70() +{ + return cur_p6; +} + +void mu100_state::pa_w_vl70(u16 data) +{ + cur_pa = data; +} + +u16 mu100_state::pa_r_vl70() +{ + if((cur_p6 & P6_LCD_ENABLE)) { + if(cur_p6 & P6_LCD_RW) + { + if(cur_p6 & P6_LCD_RS) + return m_lcd->data_read(); + else + return m_lcd->control_read(); + } else + return 0x00; + } + + return cur_pa; +} + +void mu100_state::p6_w_mu50(u16 data) +{ + data ^= P6_LCD_ENABLE; + if(!(cur_p6 & P6_LCD_ENABLE) && (data & P6_LCD_ENABLE)) { + if(!(cur_p6 & P6_LCD_RW)) { + if(cur_p6 & P6_LCD_RS) + m_lcd->data_write(cur_pa); + else + m_lcd->control_write(cur_pa); + } + } + +// if(!(cur_pa9 & 0x08) && (data & 0x08)) +// cur_ic32 = cur_pa; + + cur_p6 = data; +} + +u16 mu100_state::p6_r_mu50() +{ + return cur_p6; +} + +u16 mu100_state::pb_r_mu50() +{ + return cur_pb; +} + +void mu100_state::pb_w_mu50(u16 data) +{ + cur_pb = data; +} + +void mu100_state::pa_w_mu50(u16 data) +{ + cur_pa = data; +} + +u16 mu100_state::pa_r_mu50() +{ + if((cur_p6 & P6_LCD_ENABLE)) { + if(cur_p6 & P6_LCD_RW) + { + if(cur_p6 & P6_LCD_RS) + return m_lcd->data_read(); + else + return m_lcd->control_read(); + } else + return 0x00; + } + return cur_pa; +} + void mu100_state::mu80_iomap(address_map &map) { + map(h8_device::PORT_6, h8_device::PORT_6).rw(FUNC(mu100_state::p6_r_mu80), FUNC(mu100_state::p6_w_mu80)); map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r_mu80), FUNC(mu100_state::pa_w_mu80)); map(h8_device::PORT_B, h8_device::PORT_B).rw(FUNC(mu100_state::pb_r_mu80), FUNC(mu100_state::pb_w_mu80)); - map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc0_r)); - map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc2_r)); - map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc4_r)); - map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc6_r)); - map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc7_r)); + map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_ar_r)); + map(h8_device::ADC_1, h8_device::ADC_1).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_al_r)); + map(h8_device::ADC_3, h8_device::ADC_3).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_midisw_r)); + map(h8_device::ADC_5, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_battery_r)); + map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_zero_r)); // inputmod from the gate array +} + +void mu100_state::mu50_iomap(address_map &map) +{ + map(h8_device::PORT_6, h8_device::PORT_6).rw(FUNC(mu100_state::p6_r_mu50), FUNC(mu100_state::p6_w_mu50)); + map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r_mu50), FUNC(mu100_state::pa_w_mu50)); + map(h8_device::PORT_B, h8_device::PORT_B).rw(FUNC(mu100_state::pb_r_mu50), FUNC(mu100_state::pb_w_mu50)); + map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_ar_r)); + map(h8_device::ADC_1, h8_device::ADC_1).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_al_r)); + map(h8_device::ADC_3, h8_device::ADC_3).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_midisw_r)); + map(h8_device::ADC_5, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_battery_r)); + map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_zero_r)); // inputmod from the gate array +} + +void mu100_state::vl70_iomap(address_map &map) +{ + map(h8_device::PORT_6, h8_device::PORT_6).rw(FUNC(mu100_state::p6_r_vl70), FUNC(mu100_state::p6_w_vl70)); + map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r_vl70), FUNC(mu100_state::pa_w_vl70)); + map(h8_device::PORT_B, h8_device::PORT_B).w(FUNC(mu100_state::pb_w_vl70)); + map(h8_device::PORT_C, h8_device::PORT_C).rw(FUNC(mu100_state::pc_r_vl70), FUNC(mu100_state::pc_w_vl70)); + map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_breath_r)); + map(h8_device::ADC_1, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_midisw_r)); + map(h8_device::ADC_3, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_battery_r)); + map(h8_device::ADC_5, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_zero_r)); } void mu100_state::mu100_iomap(address_map &map) @@ -754,11 +1007,14 @@ void mu100_state::mu100_iomap(address_map &map) map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(mu100_state::pa_r), FUNC(mu100_state::pa_w)); map(h8_device::PORT_F, h8_device::PORT_F).w(FUNC(mu100_state::pf_w)); map(h8_device::PORT_G, h8_device::PORT_G).w(FUNC(mu100_state::pg_w)); - map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc0_r)); - map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc2_r)); - map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc4_r)); - map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc6_r)); - map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc7_r)); + map(h8_device::ADC_0, h8_device::ADC_0).r(FUNC(mu100_state::adc_ar_r)); + map(h8_device::ADC_1, h8_device::ADC_1).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_2, h8_device::ADC_2).r(FUNC(mu100_state::adc_al_r)); + map(h8_device::ADC_1, h8_device::ADC_3).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_4, h8_device::ADC_4).r(FUNC(mu100_state::adc_midisw_r)); + map(h8_device::ADC_5, h8_device::ADC_5).r(FUNC(mu100_state::adc_zero_r)); + map(h8_device::ADC_6, h8_device::ADC_6).r(FUNC(mu100_state::adc_battery_r)); + map(h8_device::ADC_7, h8_device::ADC_7).r(FUNC(mu100_state::adc_type_r)); } void mu100_state::swp30_map(address_map &map) @@ -824,11 +1080,54 @@ void mu100_state::mu80(machine_config &config) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); + // In truth, dual swp-20 + SWP30(config, m_swp30); + m_swp30->set_addrmap(0, &mu100_state::swp30_map); + m_swp30->add_route(0, "lspeaker", 1.0); + m_swp30->add_route(1, "rspeaker", 1.0); + + MEG(config, m_meg); + + auto &mdin_a(MIDI_PORT(config, "mdin_a")); + midiin_slot(mdin_a); + mdin_a.rxd_handler().set("mu80cpu:sci1", FUNC(h8_sci_device::rx_w)); + + auto &mdin_b(MIDI_PORT(config, "mdin_b")); + midiin_slot(mdin_b); + mdin_b.rxd_handler().set("mu80cpu:sci0", FUNC(h8_sci_device::rx_w)); + + auto &mdout(MIDI_PORT(config, "mdout")); + midiout_slot(mdout); + m_mu80cpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd)); +} + +void mu100_state::mu50(machine_config &config) +{ + H83002(config, m_mu80cpu, 16_MHz_XTAL); + m_mu80cpu->set_addrmap(AS_PROGRAM, &mu100_state::mu80_map); + m_mu80cpu->set_addrmap(AS_IO, &mu100_state::mu50_iomap); + + HD44780(config, m_lcd); + m_lcd->set_lcd_size(4, 20); + + auto &screen = SCREEN(config, "screen", SCREEN_TYPE_LCD); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate, asynchronous updating anyway */ + screen.set_screen_update(FUNC(mu100_state::screen_update)); + screen.set_size(900, 241); + screen.set_visarea(0, 899, 0, 240); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + // In truth, dual swp-20 SWP30(config, m_swp30); m_swp30->set_addrmap(0, &mu100_state::swp30_map); m_swp30->add_route(0, "lspeaker", 1.0); m_swp30->add_route(1, "rspeaker", 1.0); + MEG(config, m_meg); + auto &mdin_a(MIDI_PORT(config, "mdin_a")); midiin_slot(mdin_a); mdin_a.rxd_handler().set("mu80cpu:sci1", FUNC(h8_sci_device::rx_w)); @@ -842,6 +1141,40 @@ void mu100_state::mu80(machine_config &config) m_mu80cpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd)); } +void mu100_state::vl70(machine_config &config) +{ + H83003(config, m_vl70cpu, 10_MHz_XTAL); + m_vl70cpu->set_addrmap(AS_PROGRAM, &mu100_state::vl70_map); + m_vl70cpu->set_addrmap(AS_IO, &mu100_state::vl70_iomap); + + HD44780(config, m_lcd); + m_lcd->set_lcd_size(4, 20); + + auto &screen = SCREEN(config, "screen", SCREEN_TYPE_LCD); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate, asynchronous updating anyway */ + screen.set_screen_update(FUNC(mu100_state::screen_update)); + screen.set_size(900, 241); + screen.set_visarea(0, 899, 0, 240); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + MEG(config, m_meg); + + auto &mdin_a(MIDI_PORT(config, "mdin_a")); + midiin_slot(mdin_a); + mdin_a.rxd_handler().set("vl70cpu:sci1", FUNC(h8_sci_device::rx_w)); + + auto &mdin_b(MIDI_PORT(config, "mdin_b")); + midiin_slot(mdin_b); + mdin_b.rxd_handler().set("vl70cpu:sci0", FUNC(h8_sci_device::rx_w)); + + auto &mdout(MIDI_PORT(config, "mdout")); + midiout_slot(mdout); + m_vl70cpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd)); +} + #define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \ ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(bios)) @@ -897,7 +1230,28 @@ ROM_START( mu80 ) ROM_LOAD( "mu100-font.bin", 0x0000, 0x1000, BAD_DUMP CRC(a7d6c1d6) SHA1(9f0398d678bdf607cb34d83ee535f3b7fcc97c41) ) ROM_END +ROM_START( mu50 ) + ROM_REGION( 0x80000, "mu80cpu", 0 ) + ROM_LOAD16_WORD_SWAP( "yamaha_mu50.bin", 0x000000, 0x080000, CRC(507168ad) SHA1(58c41f10d292cac35ef0e8f93029fbc4685df586) ) + + ROM_REGION( 0x1800000, "swp30", ROMREGION_ERASE00 ) + + ROM_REGION( 0x1000, "lcd", 0) + // Hand made, 3 characters unused + ROM_LOAD( "mu100-font.bin", 0x0000, 0x1000, BAD_DUMP CRC(a7d6c1d6) SHA1(9f0398d678bdf607cb34d83ee535f3b7fcc97c41) ) +ROM_END + +ROM_START( vl70 ) + ROM_REGION( 0x200000, "vl70cpu", 0 ) + ROM_LOAD16_WORD_SWAP( "vl70m_v111_27c160.bin", 0x000000, 0x200000, CRC(efdba9f0) SHA1(cfa9fb7d2a991e4752393c9677e4ddcbe10866c7) ) + + ROM_REGION( 0x1000, "lcd", 0) + // Hand made, 3 characters unused + ROM_LOAD( "mu100-font.bin", 0x0000, 0x1000, BAD_DUMP CRC(a7d6c1d6) SHA1(9f0398d678bdf607cb34d83ee535f3b7fcc97c41) ) +ROM_END + CONS( 1997, mu100, 0, 0, mu100, mu100, mu100_state, empty_init, "Yamaha", "MU100", MACHINE_NOT_WORKING ) CONS( 1997, mu100r, mu100, 0, mu100, mu100, mu100r_state, empty_init, "Yamaha", "MU100 Rackable version", MACHINE_NOT_WORKING ) CONS( 1994, mu80, mu100, 0, mu80, mu100, mu100_state, empty_init, "Yamaha", "MU80", MACHINE_NOT_WORKING ) - +CONS( 1996, vl70, mu100, 0, vl70, vl70, mu100_state, empty_init, "Yamaha", "VL70-m", MACHINE_NOT_WORKING ) +CONS( 1995, mu50, mu100, 0, mu50, mu100, mu100_state, empty_init, "Yamaha", "MU50", MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/yunsun16.cpp b/src/mame/drivers/yunsun16.cpp index 6d89fc31b09..3ee2f5391a3 100644 --- a/src/mame/drivers/yunsun16.cpp +++ b/src/mame/drivers/yunsun16.cpp @@ -159,7 +159,7 @@ WRITE8_MEMBER(magicbub_state::magicbub_sound_command_w) // HACK: the game continuously sends this. It'll play the oki sample number 0 on each voice. That sample is 00000-00000. if ((data & 0xff) != 0x3a) { - m_soundlatch->write(space, 0, data & 0xff); + m_soundlatch->write(data & 0xff); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } } diff --git a/src/mame/drivers/zerozone.cpp b/src/mame/drivers/zerozone.cpp index bf6df337d4c..ce2c7c71a35 100644 --- a/src/mame/drivers/zerozone.cpp +++ b/src/mame/drivers/zerozone.cpp @@ -44,7 +44,7 @@ WRITE16_MEMBER( zerozone_state::sound_w ) { if (ACCESSING_BITS_8_15) { - m_soundlatch->write(space, offset, data >> 8); + m_soundlatch->write(data >> 8); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } } diff --git a/src/mame/drivers/zodiack.cpp b/src/mame/drivers/zodiack.cpp index 705d99273af..b8d34577f7f 100644 --- a/src/mame/drivers/zodiack.cpp +++ b/src/mame/drivers/zodiack.cpp @@ -129,7 +129,7 @@ INTERRUPT_GEN_MEMBER(zodiack_state::zodiack_sound_nmi_gen) WRITE8_MEMBER( zodiack_state::master_soundlatch_w ) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h index a0be6cfa14a..de0ff49865e 100644 --- a/src/mame/includes/apollo.h +++ b/src/mame/includes/apollo.h @@ -90,11 +90,6 @@ uint8_t apollo_get_ram_config_byte(void); //apollo_get_node_id - get the node id uint32_t apollo_get_node_id(void); -#if 0 - // should be called by the CPU core before executing each instruction -int apollo_instruction_hook(m68000_base_device *device, offs_t curpc); -#endif - void apollo_set_cache_status_register(device_t *device,uint8_t mask, uint8_t data); /*----------- machine/apollo.cpp -----------*/ @@ -265,7 +260,6 @@ public: void select_dma_channel(int channel, bool state); DECLARE_WRITE_LINE_MEMBER(apollo_reset_instr_callback); - DECLARE_READ32_MEMBER(apollo_instruction_hook); void common(machine_config &config); void apollo(machine_config &config); @@ -687,14 +681,14 @@ public: private: // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; // serial overrides - virtual void rcv_complete(); // Rx completed receiving byte - virtual void tra_complete(); // Tx completed sending byte - virtual void tra_callback(); // Tx send bit + virtual void rcv_complete() override; // Rx completed receiving byte + virtual void tra_complete() override; // Tx completed sending byte + virtual void tra_callback() override; // Tx send bit TIMER_CALLBACK_MEMBER( poll_timer ); void xmit_char(uint8_t data); diff --git a/src/mame/includes/astrocde.h b/src/mame/includes/astrocde.h index 9d5d437d627..9b1301b3897 100644 --- a/src/mame/includes/astrocde.h +++ b/src/mame/includes/astrocde.h @@ -129,6 +129,7 @@ public: DECLARE_READ8_MEMBER(profpac_videoram_r); DECLARE_WRITE8_MEMBER(profpac_videoram_w); DECLARE_INPUT_CHANGED_MEMBER(spacezap_monitor); + DECLARE_WRITE_LINE_MEMBER(lightpen_trigger_w); void init_profpac(); void init_spacezap(); void init_robby(); diff --git a/src/mame/includes/canyon.h b/src/mame/includes/canyon.h index 09553046039..8fc9ce9f167 100644 --- a/src/mame/includes/canyon.h +++ b/src/mame/includes/canyon.h @@ -63,7 +63,7 @@ private: required_shared_ptr<uint8_t> m_videoram; required_device<f9334_device> m_outlatch; - required_device<discrete_device> m_discrete; + required_device<discrete_sound_device> m_discrete; /* video-related */ tilemap_t *m_bg_tilemap; diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h index 7c7113d5d65..c0a07a7999e 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -64,6 +64,7 @@ public: void init_cninjabl2(); DECLARE_MACHINE_START(robocop2); DECLARE_MACHINE_RESET(robocop2); + DECLARE_VIDEO_START(cninja); DECLARE_VIDEO_START(stoneage); DECLARE_VIDEO_START(mutantf); uint32_t screen_update_cninja(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/crospang.h b/src/mame/includes/crospang.h index 45fe72ef674..c470eeaaab7 100644 --- a/src/mame/includes/crospang.h +++ b/src/mame/includes/crospang.h @@ -27,16 +27,27 @@ public: , m_soundlatch(*this, "soundlatch") { } + void crospang(machine_config &config); + void bestri(machine_config &config); + void bestria(machine_config &config); + void pitapat(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: /* memory pointers */ - required_shared_ptr<uint16_t> m_fg_videoram; - required_shared_ptr<uint16_t> m_bg_videoram; - required_shared_ptr<uint16_t> m_spriteram; + required_shared_ptr<u16> m_fg_videoram; + required_shared_ptr<u16> m_bg_videoram; + required_shared_ptr<u16> m_spriteram; /* video-related */ tilemap_t *m_bg_layer; tilemap_t *m_fg_layer; - uint8_t m_bestri_tilebank[4]; - uint8_t m_bestri_tilebankselect; + u8 m_tilebank[4]; + u8 m_tilebankselect; /* devices */ required_device<cpu_device> m_maincpu; @@ -44,37 +55,28 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<generic_latch_8_device> m_soundlatch; - DECLARE_WRITE16_MEMBER(bestri_tilebank_data_w); - DECLARE_WRITE16_MEMBER(bestri_tilebank_select_w); - DECLARE_WRITE16_MEMBER(bestri_bg_scrolly_w); - DECLARE_WRITE16_MEMBER(bestri_fg_scrolly_w); - DECLARE_WRITE16_MEMBER(bestri_fg_scrollx_w); - DECLARE_WRITE16_MEMBER(bestri_bg_scrollx_w); - DECLARE_WRITE16_MEMBER(crospang_fg_scrolly_w); - DECLARE_WRITE16_MEMBER(crospang_bg_scrolly_w); - DECLARE_WRITE16_MEMBER(crospang_fg_scrollx_w); - DECLARE_WRITE16_MEMBER(crospang_bg_scrollx_w); - DECLARE_WRITE16_MEMBER(crospang_fg_videoram_w); - DECLARE_WRITE16_MEMBER(crospang_bg_videoram_w); - void init_crospang(); + void tilebank_data_w(u16 data); + void tilebank_select_w(u16 data); + void bestri_bg_scrolly_w(u16 data); + void bestri_fg_scrolly_w(u16 data); + void bestri_fg_scrollx_w(u16 data); + void bestri_bg_scrollx_w(u16 data); + void fg_scrolly_w(u16 data); + void bg_scrolly_w(u16 data); + void fg_scrollx_w(u16 data); + void bg_scrollx_w(u16 data); + void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_crospang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void tumblepb_gfx1_rearrange(); - void crospang(machine_config &config); - void bestri(machine_config &config); - void bestria(machine_config &config); - void pitapat(machine_config &config); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void base_map(address_map &map); void bestri_map(address_map &map); void bestria_map(address_map &map); - void pitapat_map(address_map &map); - void crospang_base_map(address_map &map); void crospang_map(address_map &map); - void crospang_sound_io_map(address_map &map); - void crospang_sound_map(address_map &map); + void pitapat_map(address_map &map); + void sound_io_map(address_map &map); + void sound_map(address_map &map); }; #endif // MAME_INCLUDES_CROSPANG_H diff --git a/src/mame/includes/ddragon.h b/src/mame/includes/ddragon.h index 8b6e164597f..db4a5313ee2 100644 --- a/src/mame/includes/ddragon.h +++ b/src/mame/includes/ddragon.h @@ -123,7 +123,7 @@ private: optional_region_ptr_array<uint8_t, 2> m_adpcm_rom; - void ddragon_interrupt_ack(address_space &space, offs_t offset, uint8_t data); + void ddragon_interrupt_ack(offs_t offset, uint8_t data); void dd_adpcm_int(int chip); /* video/ddragon.c */ diff --git a/src/mame/includes/dec0.h b/src/mame/includes/dec0.h index da3d10686dc..d3ccfe67c48 100644 --- a/src/mame/includes/dec0.h +++ b/src/mame/includes/dec0.h @@ -5,7 +5,6 @@ #pragma once -#include "machine/74157.h" #include "cpu/h6280/h6280.h" #include "cpu/mcs51/mcs51.h" #include "machine/74157.h" diff --git a/src/mame/includes/dragrace.h b/src/mame/includes/dragrace.h index 459d36ad141..5ee3b611cfb 100644 --- a/src/mame/includes/dragrace.h +++ b/src/mame/includes/dragrace.h @@ -77,7 +77,7 @@ private: int m_gear[2]; /* devices */ - required_device<discrete_device> m_discrete; + required_device<discrete_sound_device> m_discrete; required_device<cpu_device> m_maincpu; required_device<watchdog_timer_device> m_watchdog; required_device<gfxdecode_device> m_gfxdecode; diff --git a/src/mame/includes/esd16.h b/src/mame/includes/esd16.h index 126880dcda9..62682d3f280 100644 --- a/src/mame/includes/esd16.h +++ b/src/mame/includes/esd16.h @@ -19,14 +19,14 @@ class esd16_state : public driver_device public: esd16_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_vram_0(*this, "vram_0"), - m_vram_1(*this, "vram_1"), - m_scroll_0(*this, "scroll_0"), - m_scroll_1(*this, "scroll_1"), + m_vram(*this, "vram_%u", 0U), + m_scroll(*this, "scroll_%u", 0U), m_spriteram(*this, "spriteram"), m_head_layersize(*this, "head_layersize"), m_headpanic_platform_x(*this, "platform_x"), m_headpanic_platform_y(*this, "platform_y"), + m_audiobank(*this, "audiobank"), + m_io_eepromout(*this, "EEPROMOUT"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), @@ -49,22 +49,20 @@ protected: private: /* memory pointers */ - required_shared_ptr<uint16_t> m_vram_0; - required_shared_ptr<uint16_t> m_vram_1; - required_shared_ptr<uint16_t> m_scroll_0; - required_shared_ptr<uint16_t> m_scroll_1; - required_shared_ptr<uint16_t> m_spriteram; - required_shared_ptr<uint16_t> m_head_layersize; - required_shared_ptr<uint16_t> m_headpanic_platform_x; - required_shared_ptr<uint16_t> m_headpanic_platform_y; + required_shared_ptr_array<u16, 2> m_vram; + required_shared_ptr_array<u16, 2> m_scroll; + required_shared_ptr<u16> m_spriteram; + required_shared_ptr<u16> m_head_layersize; + required_shared_ptr<u16> m_headpanic_platform_x; + required_shared_ptr<u16> m_headpanic_platform_y; + + optional_memory_bank m_audiobank; + optional_ioport m_io_eepromout; /* video-related */ - tilemap_t *m_tilemap_0_16x16; - tilemap_t *m_tilemap_1_16x16; - tilemap_t *m_tilemap_0; - tilemap_t *m_tilemap_1; - int m_tilemap0_color; - int m_tilemap1_color; + tilemap_t *m_tilemap_16x16[2]; + tilemap_t *m_tilemap[2]; + int m_tilemap_color[2]; /* devices */ required_device<cpu_device> m_maincpu; @@ -74,36 +72,32 @@ private: optional_device<eeprom_serial_93cxx_device> m_eeprom; required_device<generic_latch_8_device> m_soundlatch; - DECLARE_WRITE16_MEMBER(esd16_sound_command_w); - DECLARE_WRITE16_MEMBER(hedpanic_platform_w); - DECLARE_READ16_MEMBER(esd_eeprom_r); - DECLARE_WRITE16_MEMBER(esd_eeprom_w); - DECLARE_WRITE8_MEMBER(esd16_sound_rombank_w); - DECLARE_READ8_MEMBER(esd16_sound_command_r); - DECLARE_WRITE16_MEMBER(esd16_vram_0_w); - DECLARE_WRITE16_MEMBER(esd16_vram_1_w); - DECLARE_WRITE16_MEMBER(esd16_tilemap0_color_w); - DECLARE_WRITE16_MEMBER(esd16_tilemap0_color_jumppop_w); - TILE_GET_INFO_MEMBER(get_tile_info_0); - TILE_GET_INFO_MEMBER(get_tile_info_0_16x16); - TILE_GET_INFO_MEMBER(get_tile_info_1); - TILE_GET_INFO_MEMBER(get_tile_info_1_16x16); - uint32_t screen_update_hedpanic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECOSPR_PRIORITY_CB_MEMBER(hedpanic_pri_callback); + void sound_command_w(u8 data); + void hedpanic_platform_w(u16 data); + u8 eeprom_r(); + void eeprom_w(u8 data); + void sound_rombank_w(u8 data); + template<unsigned Layer> void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void tilemap0_color_w(u16 data); + void tilemap0_color_jumppop_w(u16 data); + template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info); + template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info_16x16); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECOSPR_PRIORITY_CB_MEMBER(pri_callback); void hedpanic_map(address_map &map); void jumppop_map(address_map &map); void mchampdx_map(address_map &map); void multchmp_map(address_map &map); - void multchmp_sound_io_map(address_map &map); - void multchmp_sound_map(address_map &map); + void sound_io_map(address_map &map); + void sound_map(address_map &map); void tangtang_map(address_map &map); - void esd16_io_area_dsw(address_map &map, u32 base); - void esd16_io_area_eeprom(address_map &map, u32 base); - void esd16_vid_attr_area(address_map &map, u32 base); - void esd16_palette_area(address_map &map, u32 base); - void esd16_sprite_area(address_map &map, u32 base); - void esd16_vram_area(address_map &map, u32 base); + void io_area_dsw(address_map &map, u32 base); + void io_area_eeprom(address_map &map, u32 base); + void palette_area(address_map &map, u32 base); + void sprite_area(address_map &map, u32 base); + void vid_attr_area(address_map &map, u32 base); + void vram_area(address_map &map, u32 base); }; #endif // MAME_INCLUDES_ESD16_H diff --git a/src/mame/includes/fidelbase.h b/src/mame/includes/fidelbase.h index 1a232d9bab5..938c01cb1df 100644 --- a/src/mame/includes/fidelbase.h +++ b/src/mame/includes/fidelbase.h @@ -31,7 +31,6 @@ public: m_irq_on(*this, "irq_on"), m_rombank(*this, "rombank"), m_mainmap(*this, "mainmap"), - m_div_config(*this, "div_config"), m_speech(*this, "speech"), m_speech_rom(*this, "speech"), m_language(*this, "language"), @@ -42,13 +41,14 @@ public: // in case reset button is directly tied to maincpu reset pin virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); } + DECLARE_INPUT_CHANGED_MEMBER(div_changed) { div_refresh(newval); } + protected: // devices/pointers required_device<cpu_device> m_maincpu; optional_device<timer_device> m_irq_on; optional_memory_bank m_rombank; optional_device<address_map_bank_device> m_mainmap; - optional_ioport m_div_config; optional_device<s14001a_device> m_speech; optional_region_ptr<u8> m_speech_rom; optional_region_ptr<u8> m_language; @@ -71,7 +71,10 @@ protected: u8 div_trampoline_r(offs_t offset); void div_set_cpu_freq(offs_t offset); void div_trampoline(address_map &map); + void div_refresh(ioport_value val = 0xff); u16 m_div_status; + ioport_value m_div_config; + emu_timer *m_div_timer; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/funworld.h b/src/mame/includes/funworld.h index 34859d8d5e8..69666f020e8 100644 --- a/src/mame/includes/funworld.h +++ b/src/mame/includes/funworld.h @@ -6,6 +6,7 @@ #pragma once #include "emupal.h" +#include "machine/i2cmem.h" class funworld_state : public driver_device { @@ -17,6 +18,7 @@ public: m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_palette(*this, "palette"), + m_i2cmem(*this, "i2cmem"), m_lamps(*this, "lamp%u", 0U) { } @@ -33,8 +35,6 @@ public: void fw_brick_2(machine_config &config); void init_saloon(); - void init_royalcdc(); - void init_multiwin(); void init_mongolnw(); void init_soccernw(); void init_tabblue(); @@ -69,7 +69,7 @@ private: void cuoreuno_map(address_map &map); void funquiz_map(address_map &map); void funworld_map(address_map &map); - void fw_a7_11_map(address_map &map); + void fw_brick_map(address_map &map); void intergames_map(address_map &map); void saloon_map(address_map &map); void witchryl_map(address_map &map); @@ -77,6 +77,7 @@ private: required_shared_ptr<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_colorram; required_device<palette_device> m_palette; + optional_device<i2cmem_device> m_i2cmem; output_finder<8> m_lamps; }; @@ -132,4 +133,4 @@ private: void chinatow_map(address_map &map); }; -#endif // MAME_INCLUDES_FUNWORLD_H +#endif // MAME_INCLUDES_FUNWORLD_H
\ No newline at end of file diff --git a/src/mame/includes/gaelco2.h b/src/mame/includes/gaelco2.h index e92b2329471..ccacfef6737 100644 --- a/src/mame/includes/gaelco2.h +++ b/src/mame/includes/gaelco2.h @@ -10,18 +10,18 @@ class gaelco2_state : public driver_device { public: - gaelco2_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this,"maincpu"), + gaelco2_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), m_mainlatch(*this, "mainlatch"), - m_spriteram(*this,"spriteram"), + m_spriteram(*this, "spriteram"), m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_global_spritexoff(0), m_vregs(*this, "vregs"), m_snowboar_protection(*this, "snowboar_prot"), - m_generic_paletteram_16(*this, "paletteram"), + m_paletteram(*this, "paletteram"), m_shareram(*this, "shareram") { } @@ -38,6 +38,7 @@ public: void init_touchgo(); void init_snowboar(); + void init_snowboara(); void init_alighunt(); void init_wrally2(); void init_play2000(); @@ -48,9 +49,9 @@ public: DECLARE_VIDEO_START(gaelco2); DECLARE_VIDEO_START(gaelco2_dual); - uint32_t screen_update_gaelco2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_gaelco2_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_gaelco2_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); protected: required_device<m68000_device> m_maincpu; @@ -60,28 +61,27 @@ protected: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; - DECLARE_WRITE16_MEMBER(gaelco2_vram_w); - DECLARE_WRITE16_MEMBER(gaelco2_palette_w); + void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void vregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void palette_w(offs_t offset, u16 data, u16 mem_mask = ~0); - DECLARE_WRITE16_MEMBER(wrally2_latch_w); + void wrally2_latch_w(offs_t offset, u16 data); void mcu_hostmem_map(address_map &map); private: - DECLARE_WRITE8_MEMBER(shareram_w); - DECLARE_READ8_MEMBER(shareram_r); - DECLARE_WRITE16_MEMBER(alighunt_coin_w); + void shareram_w(offs_t offset, u8 data); + u8 shareram_r(offs_t offset); + void alighunt_coin_w(u16 data); DECLARE_WRITE_LINE_MEMBER(coin3_counter_w); DECLARE_WRITE_LINE_MEMBER(coin4_counter_w); - DECLARE_READ16_MEMBER(snowboar_protection_r); - DECLARE_WRITE16_MEMBER(snowboar_protection_w); - TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen0); - TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen1); - TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen0_dual); - TILE_GET_INFO_MEMBER(get_tile_info_gaelco2_screen1_dual); + u16 snowboar_protection_r(); + void snowboar_protection_w(offs_t offset, u16 data, u16 mem_mask = ~0); + template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info); + template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info_dual); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int mask); - uint32_t dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index); - void gaelco2_ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2); + u32 dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index); + void ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2); void alighunt_map(address_map &map); void maniacsq_map(address_map &map); @@ -90,17 +90,17 @@ private: void touchgo_map(address_map &map); void saltcrdi_map(address_map &map); - uint32_t snowboard_latch; + u32 m_snowboard_latch; - uint16_t *m_videoram; + u16 *m_videoram; tilemap_t *m_pant[2]; int m_dual_monitor; int m_global_spritexoff; - required_shared_ptr<uint16_t> m_vregs; - optional_shared_ptr<uint16_t> m_snowboar_protection; - required_shared_ptr<uint16_t> m_generic_paletteram_16; - optional_shared_ptr<uint16_t> m_shareram; + required_shared_ptr<u16> m_vregs; + optional_shared_ptr<u16> m_snowboar_protection; + required_shared_ptr<u16> m_paletteram; + optional_shared_ptr<u16> m_shareram; }; @@ -127,11 +127,11 @@ private: int m_clr_gun_int; - DECLARE_READ16_MEMBER(p1_gun_x); - DECLARE_READ16_MEMBER(p1_gun_y); - DECLARE_READ16_MEMBER(p2_gun_x); - DECLARE_READ16_MEMBER(p2_gun_y); - DECLARE_WRITE16_MEMBER(bang_clr_gun_int_w); + u16 p1_gun_x(); + u16 p1_gun_y(); + u16 p2_gun_x(); + u16 p2_gun_y(); + void bang_clr_gun_int_w(u16 data); TIMER_DEVICE_CALLBACK_MEMBER(bang_irq); void bang_map(address_map &map); }; diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index 651c145ce1a..a6b7bdef871 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -239,7 +239,7 @@ public: void tenspot_set_game_bank(int bank, int from_game); uint32_t screen_update_galaxian(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_interrupt_w); - DECLARE_WRITE_LINE_MEMBER(tenspot_interrupt_w); + DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake); TIMER_DEVICE_CALLBACK_MEMBER(checkmaj_irq0_gen); TIMER_DEVICE_CALLBACK_MEMBER(scramble_stars_blink_timer); TIMER_DEVICE_CALLBACK_MEMBER(timefgtr_scanline); diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h index 234a2f9b4be..c595772468b 100644 --- a/src/mame/includes/hh_tms1k.h +++ b/src/mame/includes/hh_tms1k.h @@ -62,6 +62,10 @@ public: virtual DECLARE_WRITE_LINE_MEMBER(auto_power_off); virtual void power_off(); + void switch_change(int sel, u32 mask, bool next); + template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_next) { if (newval) switch_change(Sel, (u32)(uintptr_t)param, true); } + template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_prev) { if (newval) switch_change(Sel, (u32)(uintptr_t)param, false); } + // display common int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) int m_display_maxy; // display matrix number of rows diff --git a/src/mame/includes/m72.h b/src/mame/includes/m72.h index a3af6dab5a0..50dc9fbbdf7 100644 --- a/src/mame/includes/m72.h +++ b/src/mame/includes/m72.h @@ -78,6 +78,7 @@ public: void rtype2(machine_config &config); void m82(machine_config &config); void rtype(machine_config &config); + void imgfightb(machine_config &config); void init_dkgenm72(); void init_bchopper(); @@ -92,7 +93,7 @@ public: private: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; - optional_device<i8751_device> m_mcu; + optional_device<cpu_device> m_mcu; optional_device<mb8421_mb8431_16_device> m_dpram; optional_device<dac_byte_interface> m_dac; optional_device<m72_audio_device> m_audio; @@ -238,6 +239,7 @@ private: void m84_cpu1_common_map(address_map &map); void m84_portmap(address_map &map); void m84_v33_portmap(address_map &map); + void i80c31_mem_map(address_map &map); void mcu_io_map(address_map &map); void poundfor_portmap(address_map &map); void poundfor_sound_portmap(address_map &map); diff --git a/src/mame/includes/mikromik.h b/src/mame/includes/mikromik.h index 07f5e65b582..46c7dfa33c6 100644 --- a/src/mame/includes/mikromik.h +++ b/src/mame/includes/mikromik.h @@ -10,6 +10,7 @@ #include "formats/mm_dsk.h" #include "imagedev/floppy.h" #include "machine/am9517a.h" +#include "machine/bankdev.h" #include "machine/i8212.h" #include "machine/mm1kb.h" #include "machine/pit8253.h" @@ -40,6 +41,7 @@ public: mm1_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, I8085A_TAG), + m_io(*this, "io"), m_iop(*this, I8212_TAG), m_dmac(*this, I8237_TAG), m_pit(*this, I8253_TAG), @@ -76,6 +78,7 @@ protected: private: required_device<i8085a_cpu_device> m_maincpu; + required_device<address_map_bank_device> m_io; required_device<i8212_device> m_iop; required_device<am9517a_device> m_dmac; required_device<pit8253_device> m_pit; @@ -116,7 +119,14 @@ private: DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); - DECLARE_WRITE8_MEMBER( ls259_w ); + DECLARE_WRITE_LINE_MEMBER( a8_w ); + DECLARE_WRITE_LINE_MEMBER( recall_w ); + DECLARE_WRITE_LINE_MEMBER( rx21_w ); + DECLARE_WRITE_LINE_MEMBER( tx21_w ); + DECLARE_WRITE_LINE_MEMBER( rcl_w ); + DECLARE_WRITE_LINE_MEMBER( intc_w ); + DECLARE_WRITE_LINE_MEMBER( llen_w ); + DECLARE_WRITE_LINE_MEMBER( motor_on_w ); DECLARE_WRITE_LINE_MEMBER( dma_hrq_w ); DECLARE_READ8_MEMBER( mpsc_dack_r ); DECLARE_WRITE8_MEMBER( mpsc_dack_w ); @@ -136,6 +146,7 @@ private: UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels ); void mm1_palette(palette_device &palette) const; void mm1_map(address_map &map); + void mmu_io_map(address_map &map); void mm1_upd7220_map(address_map &map); }; diff --git a/src/mame/includes/ms32.h b/src/mame/includes/ms32.h index acdece07691..2a11409fedb 100644 --- a/src/mame/includes/ms32.h +++ b/src/mame/includes/ms32.h @@ -17,9 +17,9 @@ public: driver_device(mconfig, type, tag), m_palette(*this, "palette"), m_gfxdecode(*this, "gfxdecode"), + m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_soundlatch(*this, "soundlatch"), - m_maincpu(*this, "maincpu"), m_screen(*this, "screen"), m_mainram(*this, "mainram"), m_roz_ctrl(*this, "roz_ctrl"), @@ -71,12 +71,12 @@ protected: int m_reverse_sprite_order; int m_flipscreen; + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; optional_device<generic_latch_8_device> m_soundlatch; private: - required_device<cpu_device> m_maincpu; optional_device<screen_device> m_screen; optional_shared_ptr<uint32_t> m_mainram; optional_shared_ptr<uint32_t> m_roz_ctrl; diff --git a/src/mame/includes/namcos1.h b/src/mame/includes/namcos1.h index 13be3197c3e..3b8f0604e29 100644 --- a/src/mame/includes/namcos1.h +++ b/src/mame/includes/namcos1.h @@ -33,6 +33,9 @@ public: m_rom(*this, "user1"), m_soundbank(*this, "soundbank"), m_mcubank(*this, "mcubank"), + m_io_in(*this, "IN%u", 0U), + m_io_control(*this, "CONTROL%u", 0U), + m_io_paddle(*this, "PADDLE%u", 0U), m_io_dipsw(*this, "DIPSW"), m_dsw_sel(*this, "dsw_sel") { } @@ -63,6 +66,12 @@ public: void init_dspirit(); void init_pistoldm(); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + void driver_init() override; + private: required_device<mc6809e_device> m_maincpu; required_device<mc6809e_device> m_subcpu; @@ -74,13 +83,16 @@ private: required_device_array<dac_8bit_r2r_device, 2> m_dac; required_device<gfxdecode_device> m_gfxdecode; - required_shared_ptr<uint8_t> m_spriteram; - required_shared_ptr<uint8_t> m_triram; - required_region_ptr<uint8_t> m_rom; + required_shared_ptr<u8> m_spriteram; + required_shared_ptr<u8> m_triram; + required_region_ptr<u8> m_rom; required_memory_bank m_soundbank; required_memory_bank m_mcubank; + optional_ioport_array<4> m_io_in; + optional_ioport_array<2> m_io_control; + optional_ioport_array<2> m_io_paddle; required_ioport m_io_dipsw; required_device<ls157_device> m_dsw_sel; @@ -91,51 +103,50 @@ private: int m_key_swap4; int m_key_bottom4; int m_key_top4; - unsigned int m_key_quotient; - unsigned int m_key_reminder; - unsigned int m_key_numerator_high_word; - uint8_t m_key[8]; + u32 m_key_quotient; + u32 m_key_reminder; + u32 m_key_numerator_high_word; + u8 m_key[8]; int m_mcu_patch_data; int m_reset; int m_input_count; int m_strobe; int m_strobe_count; int m_stored_input[2]; - int m_copy_sprites; - uint8_t m_drawmode_table[16]; + bool m_copy_sprites; + u8 m_drawmode_table[16]; DECLARE_WRITE_LINE_MEMBER(subres_w); - DECLARE_WRITE8_MEMBER(audiocpu_irq_ack_w); - DECLARE_WRITE8_MEMBER(mcu_irq_ack_w); + void audiocpu_irq_ack_w(u8 data); + void mcu_irq_ack_w(u8 data); DECLARE_READ8_MEMBER(dsw_r); - DECLARE_WRITE8_MEMBER(coin_w); - DECLARE_WRITE8_MEMBER(dac_gain_w); - DECLARE_WRITE8_MEMBER(sound_bankswitch_w); - DECLARE_WRITE8_MEMBER(mcu_bankswitch_w); - DECLARE_WRITE8_MEMBER(mcu_patch_w); - DECLARE_READ8_MEMBER(quester_paddle_r); - DECLARE_READ8_MEMBER(berabohm_buttons_r); - DECLARE_READ8_MEMBER(faceoff_inputs_r); - DECLARE_WRITE8_MEMBER(spriteram_w); - DECLARE_WRITE8_MEMBER(_3dcs_w); - DECLARE_READ8_MEMBER(no_key_r); - DECLARE_WRITE8_MEMBER(no_key_w); - DECLARE_READ8_MEMBER(key_type1_r); - DECLARE_WRITE8_MEMBER(key_type1_w); - DECLARE_READ8_MEMBER(key_type2_r); - DECLARE_WRITE8_MEMBER(key_type2_w); - DECLARE_READ8_MEMBER(key_type3_r); - DECLARE_WRITE8_MEMBER(key_type3_w); - - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - void driver_init() override; - - void TilemapCB(uint16_t code, int *tile, int *mask); + void coin_w(u8 data); + void dac_gain_w(u8 data); + void sound_bankswitch_w(u8 data); + void mcu_bankswitch_w(u8 data); + void mcu_patch_w(u8 data); + u8 quester_paddle_r(offs_t offset); + u8 berabohm_buttons_r(offs_t offset); + u8 faceoff_inputs_r(offs_t offset); + void spriteram_w(offs_t offset, u8 data); + void _3dcs_w(offs_t offset, u8 data); + u8 no_key_r(offs_t offset); + void no_key_w(offs_t offset, u8 data); + u8 key_type1_r(offs_t offset); + void key_type1_w(offs_t offset, u8 data); + u8 key_type2_r(offs_t offset); + void key_type2_w(offs_t offset, u8 data); + u8 key_type3_r(offs_t offset); + void key_type3_w(offs_t offset, u8 data); + + void key_type_1_init(int key_id); + void key_type_2_init(int key_id); + void key_type_3_init(int key_id, int reg, int rng, int swap4_arg, int swap4, int bottom4, int top4); + + void TilemapCB(u16 code, int *tile, int *mask); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank); void main_map(address_map &map); diff --git a/src/mame/includes/niyanpai.h b/src/mame/includes/niyanpai.h index edf272a87ef..3f3a73be2ba 100644 --- a/src/mame/includes/niyanpai.h +++ b/src/mame/includes/niyanpai.h @@ -15,7 +15,6 @@ public: niyanpai_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu"), - m_tmp68301(*this, "tmp68301"), m_screen(*this, "screen"), m_palette(*this, "palette") { } @@ -34,8 +33,7 @@ private: TIMER_BLITTER }; - required_device<cpu_device> m_maincpu; - required_device<tmp68301_device> m_tmp68301; + required_device<tmp68301_device> m_maincpu; required_device<screen_device> m_screen; required_device<palette_device> m_palette; diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h index 0b4b92ea079..6865d96b6c2 100644 --- a/src/mame/includes/nmk16.h +++ b/src/mame/includes/nmk16.h @@ -83,6 +83,8 @@ public: void init_ssmissin(); void init_hachamf_prot(); void init_redhawk(); + void init_redhawkg(); + void init_redhawki(); void init_tdragon_prot(); void init_bubl2000(); void init_banked_audiocpu(); diff --git a/src/mame/includes/oneshot.h b/src/mame/includes/oneshot.h index aaa3fd9dcff..b38e88fbbbd 100644 --- a/src/mame/includes/oneshot.h +++ b/src/mame/includes/oneshot.h @@ -13,11 +13,14 @@ class oneshot_state : public driver_device public: oneshot_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_sprites(*this, "sprites"), + m_spriteram(*this, "spriteram"), m_bg_videoram(*this, "bg_videoram"), m_mid_videoram(*this, "mid_videoram"), m_fg_videoram(*this, "fg_videoram"), m_scroll(*this, "scroll"), + m_io_dsw1(*this, "DSW1"), + m_io_lightgun_x(*this, "LIGHT%u_X", 0U), + m_io_lightgun_y(*this, "LIGHT%u_Y", 0U), m_maincpu(*this, "maincpu"), m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), @@ -25,6 +28,7 @@ public: { } void maddonna(machine_config &config); + void komocomo(machine_config &config); void oneshot(machine_config &config); protected: @@ -34,11 +38,15 @@ protected: private: /* memory pointers */ - required_shared_ptr<uint16_t> m_sprites; - required_shared_ptr<uint16_t> m_bg_videoram; - required_shared_ptr<uint16_t> m_mid_videoram; - required_shared_ptr<uint16_t> m_fg_videoram; - required_shared_ptr<uint16_t> m_scroll; + required_shared_ptr<u16> m_spriteram; + required_shared_ptr<u16> m_bg_videoram; + required_shared_ptr<u16> m_mid_videoram; + required_shared_ptr<u16> m_fg_videoram; + required_shared_ptr<u16> m_scroll; + + optional_ioport m_io_dsw1; + optional_ioport_array<2> m_io_lightgun_x; + optional_ioport_array<2> m_io_lightgun_y; /* video-related */ tilemap_t *m_bg_tilemap; @@ -60,24 +68,25 @@ private: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; - DECLARE_READ16_MEMBER(oneshot_in0_word_r); - DECLARE_READ16_MEMBER(oneshot_gun_x_p1_r); - DECLARE_READ16_MEMBER(oneshot_gun_y_p1_r); - DECLARE_READ16_MEMBER(oneshot_gun_x_p2_r); - DECLARE_READ16_MEMBER(oneshot_gun_y_p2_r); - DECLARE_WRITE16_MEMBER(oneshot_bg_videoram_w); - DECLARE_WRITE16_MEMBER(oneshot_mid_videoram_w); - DECLARE_WRITE16_MEMBER(oneshot_fg_videoram_w); - DECLARE_WRITE16_MEMBER(soundbank_w); - TILE_GET_INFO_MEMBER(get_oneshot_bg_tile_info); - TILE_GET_INFO_MEMBER(get_oneshot_mid_tile_info); - TILE_GET_INFO_MEMBER(get_oneshot_fg_tile_info); - uint32_t screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &cliprect ); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - void oneshot_map(address_map &map); - void oneshot_sound_map(address_map &map); + u16 oneshot_in0_word_r(); + u16 oneshot_gun_x_p1_r(); + u16 oneshot_gun_y_p1_r(); + u16 oneshot_gun_x_p2_r(); + u16 oneshot_gun_y_p2_r(); + void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void mid_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void soundbank_w(u8 data); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_mid_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); + u32 screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_komocomo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_crosshairs(); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void mem_map(address_map &map); + void sound_map(address_map &map); }; #endif // MAME_INCLUDES_ONESHOT_H diff --git a/src/mame/includes/realbrk.h b/src/mame/includes/realbrk.h index 14a548366eb..179674e17a0 100644 --- a/src/mame/includes/realbrk.h +++ b/src/mame/includes/realbrk.h @@ -15,7 +15,6 @@ public: realbrk_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_tmp68301(*this, "tmp68301"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), @@ -37,8 +36,7 @@ public: void pkgnshdx(machine_config &config); private: - required_device<cpu_device> m_maincpu; - required_device<tmp68301_device> m_tmp68301; + required_device<tmp68301_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h index 41c0352f772..387f4591674 100644 --- a/src/mame/includes/seta.h +++ b/src/mame/includes/seta.h @@ -364,7 +364,7 @@ class kiwame_state : public seta_state public: kiwame_state(const machine_config &mconfig, device_type type, const char *tag) : seta_state(mconfig, type, tag), - m_tmp68301(*this, "tmp68301"), + m_maincpu(*this, "maincpu"), m_key(*this, "KEY%u", 0U) { } @@ -377,7 +377,7 @@ private: void kiwame_map(address_map &map); - required_device<tmp68301_device> m_tmp68301; + required_device<tmp68301_device> m_maincpu; required_ioport_array<5> m_key; uint16_t m_kiwame_row_select; diff --git a/src/mame/includes/seta2.h b/src/mame/includes/seta2.h index a40e22c4cbc..61fc336788e 100644 --- a/src/mame/includes/seta2.h +++ b/src/mame/includes/seta2.h @@ -28,7 +28,6 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette"), - m_tmp68301(*this, "tmp68301"), m_oki(*this, "oki"), m_eeprom(*this, "eeprom"), m_flash(*this, "flash"), @@ -119,7 +118,6 @@ protected: required_device<screen_device> m_screen; required_device<palette_device> m_palette; - optional_device<tmp68301_device> m_tmp68301; optional_device<okim9810_device> m_oki; optional_device<eeprom_serial_93cxx_device> m_eeprom; optional_device<intelfsh16_device> m_flash; diff --git a/src/mame/includes/spectrum.h b/src/mame/includes/spectrum.h index 083080a6617..a239808c7e9 100644 --- a/src/mame/includes/spectrum.h +++ b/src/mame/includes/spectrum.h @@ -158,6 +158,7 @@ protected: DECLARE_READ8_MEMBER(spectrum_port_fe_r); DECLARE_READ8_MEMBER(spectrum_port_ula_r); + DECLARE_READ8_MEMBER(spectrum_128_opcode_fetch_r); DECLARE_WRITE8_MEMBER(spectrum_128_bank1_w); DECLARE_READ8_MEMBER(spectrum_128_bank1_r); DECLARE_WRITE8_MEMBER(spectrum_128_port_7ffd_w); @@ -216,6 +217,7 @@ protected: void spectrum_128_io(address_map &map); void spectrum_128_mem(address_map &map); + void spectrum_128_fetch(address_map &map); void spectrum_io(address_map &map); void spectrum_mem(address_map &map); void spectrum_fetch(address_map &map); diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h index b687bd71173..b884f1ca4f4 100644 --- a/src/mame/includes/toaplan1.h +++ b/src/mame/includes/toaplan1.h @@ -24,18 +24,17 @@ public: m_bgpaletteram(*this, "bgpalette"), m_fgpaletteram(*this, "fgpalette"), m_sharedram(*this, "sharedram"), + m_dswb_io(*this, "DSWB"), + m_tjump_io(*this, "TJUMP"), m_spriteram(*this, "spriteram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_ymsnd(*this, "ymsnd"), - m_dsp(*this, "dsp"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette") { } - void demonwld(machine_config &config); - void samesame(machine_config &config); void truxton(machine_config &config); void outzone(machine_config &config); void vimana(machine_config &config); @@ -43,161 +42,112 @@ public: void hellfire(machine_config &config); void zerowing(machine_config &config); - void init_toaplan1(); - void init_demonwld(); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; - DECLARE_MACHINE_RESET(toaplan1); + required_shared_ptr<u16> m_bgpaletteram; + required_shared_ptr<u16> m_fgpaletteram; -protected: - required_shared_ptr<uint16_t> m_bgpaletteram; - required_shared_ptr<uint16_t> m_fgpaletteram; + optional_shared_ptr<u8> m_sharedram; - optional_shared_ptr<uint8_t> m_sharedram; + optional_ioport m_dswb_io; + optional_ioport m_tjump_io; int m_intenable; - /* Demon world */ - int m_dsp_on; - int m_dsp_bio; - int m_dsp_execute; - uint32_t m_dsp_addr_w; - uint32_t m_main_ram_seg; - - std::unique_ptr<uint16_t[]> m_pf4_tilevram16; /* || Drawn in this order */ - std::unique_ptr<uint16_t[]> m_pf3_tilevram16; /* || */ - std::unique_ptr<uint16_t[]> m_pf2_tilevram16; /* \||/ */ - std::unique_ptr<uint16_t[]> m_pf1_tilevram16; /* \/ */ - - optional_shared_ptr<uint16_t> m_spriteram; - std::unique_ptr<uint16_t[]> m_buffered_spriteram; - std::unique_ptr<uint16_t[]> m_spritesizeram16; - std::unique_ptr<uint16_t[]> m_buffered_spritesizeram16; - - int32_t m_bcu_flipscreen; /* Tile controller flip flag */ - int32_t m_fcu_flipscreen; /* Sprite controller flip flag */ - - int32_t m_pf_voffs; - int32_t m_spriteram_offs; - - int32_t m_pf1_scrollx; - int32_t m_pf1_scrolly; - int32_t m_pf2_scrollx; - int32_t m_pf2_scrolly; - int32_t m_pf3_scrollx; - int32_t m_pf3_scrolly; - int32_t m_pf4_scrollx; - int32_t m_pf4_scrolly; + std::unique_ptr<u16[]> m_tilevram[4]; + /* + std::unique_ptr<u16[]> m_tilevram[3]; // || Drawn in this order + std::unique_ptr<u16[]> m_tilevram[2]; // || + std::unique_ptr<u16[]> m_tilevram[1]; // \||/ + std::unique_ptr<u16[]> m_tilevram[0]; // \/ + */ + + optional_shared_ptr<u16> m_spriteram; + std::unique_ptr<u16[]> m_buffered_spriteram; + std::unique_ptr<u16[]> m_spritesizeram; + std::unique_ptr<u16[]> m_buffered_spritesizeram; + + s32 m_bcu_flipscreen; /* Tile controller flip flag */ + s32 m_fcu_flipscreen; /* Sprite controller flip flag */ + + s32 m_pf_voffs; + s32 m_spriteram_offs; + + s32 m_scrollx[4]; + s32 m_scrolly[4]; #ifdef MAME_DEBUG - int m_display_pf1; - int m_display_pf2; - int m_display_pf3; - int m_display_pf4; + int m_display_pf[4]; int m_displog; #endif - int32_t m_tiles_offsetx; - int32_t m_tiles_offsety; - - tilemap_t *m_pf1_tilemap; - tilemap_t *m_pf2_tilemap; - tilemap_t *m_pf3_tilemap; - tilemap_t *m_pf4_tilemap; - - DECLARE_WRITE16_MEMBER(toaplan1_intenable_w); - DECLARE_WRITE16_MEMBER(demonwld_dsp_addrsel_w); - DECLARE_READ16_MEMBER(demonwld_dsp_r); - DECLARE_WRITE16_MEMBER(demonwld_dsp_w); - DECLARE_WRITE16_MEMBER(demonwld_dsp_bio_w); - DECLARE_READ_LINE_MEMBER(demonwld_bio_r); - DECLARE_WRITE16_MEMBER(demonwld_dsp_ctrl_w); - DECLARE_READ16_MEMBER(samesame_port_6_word_r); - DECLARE_READ16_MEMBER(toaplan1_shared_r); - DECLARE_WRITE16_MEMBER(toaplan1_shared_w); - DECLARE_WRITE16_MEMBER(toaplan1_reset_sound_w); - DECLARE_WRITE8_MEMBER(toaplan1_coin_w); - DECLARE_WRITE16_MEMBER(samesame_coin_w); - - DECLARE_READ16_MEMBER(toaplan1_frame_done_r); - DECLARE_WRITE16_MEMBER(toaplan1_tile_offsets_w); - DECLARE_WRITE16_MEMBER(toaplan1_bcu_flipscreen_w); - DECLARE_WRITE16_MEMBER(toaplan1_fcu_flipscreen_w); - DECLARE_READ16_MEMBER(toaplan1_spriteram_offs_r); - DECLARE_WRITE16_MEMBER(toaplan1_spriteram_offs_w); - DECLARE_WRITE16_MEMBER(toaplan1_bgpalette_w); - DECLARE_WRITE16_MEMBER(toaplan1_fgpalette_w); - DECLARE_READ16_MEMBER(toaplan1_spriteram16_r); - DECLARE_WRITE16_MEMBER(toaplan1_spriteram16_w); - DECLARE_READ16_MEMBER(toaplan1_spritesizeram16_r); - DECLARE_WRITE16_MEMBER(toaplan1_spritesizeram16_w); - DECLARE_WRITE16_MEMBER(toaplan1_bcu_control_w); - DECLARE_READ16_MEMBER(toaplan1_tileram_offs_r); - DECLARE_WRITE16_MEMBER(toaplan1_tileram_offs_w); - DECLARE_READ16_MEMBER(toaplan1_tileram16_r); - DECLARE_WRITE16_MEMBER(toaplan1_tileram16_w); - DECLARE_READ16_MEMBER(toaplan1_scroll_regs_r); - DECLARE_WRITE16_MEMBER(toaplan1_scroll_regs_w); + s32 m_tiles_offsetx; + s32 m_tiles_offsety; + + tilemap_t *m_tilemap[4]; + + void intenable_w(u8 data); + u8 shared_r(offs_t offset); + void shared_w(offs_t offset, u8 data); + void reset_sound_w(u8 data); + void coin_w(u8 data); + + u16 frame_done_r(); + DECLARE_WRITE16_MEMBER(tile_offsets_w); + void bcu_flipscreen_w(u8 data); + void fcu_flipscreen_w(u8 data); + u16 spriteram_offs_r(); + void spriteram_offs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void bgpalette_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void fgpalette_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 spriteram_r(); + void spriteram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 spritesizeram_r(); + void spritesizeram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void bcu_control_w(offs_t offset, u16 data); + u16 tileram_offs_r(); + void tileram_offs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 tileram_r(offs_t offset); + void tileram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 scroll_regs_r(offs_t offset); + void scroll_regs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + + u8 vimana_dswb_invert_r(); + u8 vimana_tjump_invert_r(); + + template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info); - // Fire Shark sound - uint8_t m_to_mcu; - uint8_t m_cmdavailable; - - DECLARE_READ8_MEMBER(vimana_dswb_invert_r); - DECLARE_READ8_MEMBER(vimana_tjump_invert_r); - DECLARE_WRITE16_MEMBER(samesame_mcu_w); - DECLARE_READ8_MEMBER(samesame_soundlatch_r); - DECLARE_WRITE8_MEMBER(samesame_sound_done_w); - DECLARE_READ8_MEMBER(samesame_cmdavailable_r); - - TILE_GET_INFO_MEMBER(get_pf1_tile_info); - TILE_GET_INFO_MEMBER(get_pf2_tile_info); - TILE_GET_INFO_MEMBER(get_pf3_tile_info); - TILE_GET_INFO_MEMBER(get_pf4_tile_info); - - DECLARE_VIDEO_START(toaplan1); DECLARE_MACHINE_RESET(zerowing); - DECLARE_MACHINE_RESET(demonwld); - DECLARE_MACHINE_RESET(vimana); - uint32_t screen_update_toaplan1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - - DECLARE_WRITE_LINE_MEMBER(screen_vblank_toaplan1); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_samesame); - void toaplan1_interrupt(); - - void demonwld_restore_dsp(); - void toaplan1_create_tilemaps(); - void toaplan1_vram_alloc(); - void toaplan1_spritevram_alloc(); - void toaplan1_set_scrolls(); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + void interrupt(); + + void create_tilemaps(); + void vram_alloc(); + void spritevram_alloc(); + void set_scrolls(); void register_common(); - void toaplan1_log_vram(); + void log_vram(); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); - void demonwld_dsp(int enable); - void toaplan1_reset_sound(); - void toaplan1_driver_savestate(); - void demonwld_driver_savestate(); - DECLARE_WRITE_LINE_MEMBER(toaplan1_reset_callback); + void reset_sound(); + DECLARE_WRITE_LINE_MEMBER(reset_callback); required_device<m68000_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<ym3812_device> m_ymsnd; - optional_device<tms32010_device> m_dsp; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; - void dsp_io_map(address_map &map); - void dsp_program_map(address_map &map); - void demonwld_main_map(address_map &map); - void demonwld_sound_io_map(address_map &map); void hellfire_main_map(address_map &map); void hellfire_sound_io_map(address_map &map); void outzone_main_map(address_map &map); void outzone_sound_io_map(address_map &map); void outzonecv_main_map(address_map &map); - void samesame_hd647180_io_map(address_map &map); - void samesame_hd647180_mem_map(address_map &map); - void samesame_main_map(address_map &map); - void toaplan1_sound_map(address_map &map); + void sound_map(address_map &map); void truxton_main_map(address_map &map); void truxton_sound_io_map(address_map &map); void vimana_hd647180_io_map(address_map &map); @@ -218,19 +168,91 @@ public: void rallybik(machine_config &config); +protected: + virtual void video_start() override; + private: DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w); - DECLARE_READ16_MEMBER(rallybik_tileram16_r); - DECLARE_VIDEO_START(rallybik); - uint32_t screen_update_rallybik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_rallybik); + u16 tileram_r(offs_t offset); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(screen_vblank); required_device<toaplan_scu_device> m_spritegen; void rallybik_main_map(address_map &map); void rallybik_sound_io_map(address_map &map); }; +class toaplan1_demonwld_state : public toaplan1_state +{ +public: + toaplan1_demonwld_state(const machine_config &mconfig, device_type type, const char *tag) : + toaplan1_state(mconfig, type, tag), + m_dsp(*this, "dsp") + { + } + + void demonwld(machine_config &config); + +protected: + virtual void device_post_load() override; + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + /* Demon world */ + int m_dsp_on; + int m_dsp_bio; + int m_dsp_execute; + u32 m_dsp_addr_w; + u32 m_main_ram_seg; + + void dsp_addrsel_w(u16 data); + u16 dsp_r(); + void dsp_w(u16 data); + void dsp_bio_w(u16 data); + DECLARE_READ_LINE_MEMBER(bio_r); + void dsp_ctrl_w(u8 data); + void dsp_int_w(int enable); + + required_device<tms32010_device> m_dsp; + void dsp_io_map(address_map &map); + void dsp_program_map(address_map &map); + void main_map(address_map &map); + void sound_io_map(address_map &map); +}; + +class toaplan1_samesame_state : public toaplan1_state +{ +public: + toaplan1_samesame_state(const machine_config &mconfig, device_type type, const char *tag) : + toaplan1_state(mconfig, type, tag) + { + } + + void samesame(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + // Fire Shark sound + u8 m_to_mcu; + u8 m_cmdavailable; + + void mcu_w(u8 data); + u8 soundlatch_r(); + void sound_done_w(u8 data); + u8 cmdavailable_r(); + u8 port_6_word_r(); + + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + + void hd647180_io_map(address_map &map); + void hd647180_mem_map(address_map &map); + void main_map(address_map &map); +}; + #endif // MAME_INCLUDES_TOAPLAN1_H diff --git a/src/mame/includes/tumbleb.h b/src/mame/includes/tumbleb.h index 54263124dae..cc4f15aee52 100644 --- a/src/mame/includes/tumbleb.h +++ b/src/mame/includes/tumbleb.h @@ -47,7 +47,6 @@ public: void chokchok(machine_config &config); void cookbib_mcu(machine_config &config); void jumpkids(machine_config &config); - void funkyjetb(machine_config &config); void init_dquizgo(); void init_jumpkids(); @@ -64,7 +63,7 @@ public: void init_magipur(); void init_carket(); -private: +protected: /* memory pointers */ optional_shared_ptr<uint16_t> m_mainram; required_shared_ptr<uint16_t> m_spriteram; @@ -177,7 +176,33 @@ private: void suprtrio_sound_map(address_map &map); void tumblepopb_main_map(address_map &map); void tumblepopba_main_map(address_map &map); +}; + +class tumbleb_pic_state : public tumbleb_state +{ +public: + tumbleb_pic_state(const machine_config &mconfig, device_type type, const char *tag) : + tumbleb_state(mconfig, type, tag), + m_okibank(*this, "okibank") + { } + + void funkyjetb(machine_config &config); + +protected: + virtual void driver_start() override; + +private: + void oki_bank_w(uint8_t data); + uint8_t pic_data_r(); + void pic_data_w(uint8_t data); + void pic_ctrl_w(uint8_t data); + void funkyjetb_map(address_map &map); + void funkyjetb_oki_map(address_map &map); + + required_memory_bank m_okibank; + + uint8_t m_pic_data; }; #endif // MAME_INCLUDES_TUMBLEB_H diff --git a/src/mame/includes/twincobr.h b/src/mame/includes/twincobr.h index 5bcda60c5bc..e212a0fe71c 100644 --- a/src/mame/includes/twincobr.h +++ b/src/mame/includes/twincobr.h @@ -43,50 +43,52 @@ public: void init_twincobr(); protected: + virtual void device_post_load() override; + virtual void machine_reset() override; virtual void video_start() override; - optional_shared_ptr<uint8_t> m_sharedram; + optional_shared_ptr<u8> m_sharedram; optional_device<buffered_spriteram8_device> m_spriteram8; optional_device<buffered_spriteram16_device> m_spriteram16; - int32_t m_fg_rom_bank; - int32_t m_bg_ram_bank; + u32 m_fg_rom_bank; + u32 m_bg_ram_bank; int m_intenable; int m_dsp_on; int m_dsp_bio; int m_fsharkbt_8741; int m_dsp_execute; - uint32_t m_dsp_addr_w; - uint32_t m_main_ram_seg; - std::unique_ptr<uint16_t[]> m_bgvideoram16; - std::unique_ptr<uint16_t[]> m_fgvideoram16; - std::unique_ptr<uint16_t[]> m_txvideoram16; + u32 m_dsp_addr_w; + u32 m_main_ram_seg; + std::unique_ptr<u16[]> m_bgvideoram16; + std::unique_ptr<u16[]> m_fgvideoram16; + std::unique_ptr<u16[]> m_txvideoram16; size_t m_bgvideoram_size; size_t m_fgvideoram_size; size_t m_txvideoram_size; - int32_t m_txscrollx; - int32_t m_txscrolly; - int32_t m_fgscrollx; - int32_t m_fgscrolly; - int32_t m_bgscrollx; - int32_t m_bgscrolly; - int32_t m_txoffs; - int32_t m_fgoffs; - int32_t m_bgoffs; - int32_t m_display_on; + s32 m_txscrollx; + s32 m_txscrolly; + s32 m_fgscrollx; + s32 m_fgscrolly; + s32 m_bgscrollx; + s32 m_bgscrolly; + s32 m_txoffs; + s32 m_fgoffs; + s32 m_bgoffs; + s32 m_display_on; tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; tilemap_t *m_tx_tilemap; - DECLARE_WRITE16_MEMBER(twincobr_dsp_addrsel_w); - DECLARE_READ16_MEMBER(twincobr_dsp_r); - DECLARE_WRITE16_MEMBER(twincobr_dsp_w); - DECLARE_WRITE16_MEMBER(wardner_dsp_addrsel_w); - DECLARE_READ16_MEMBER(wardner_dsp_r); - DECLARE_WRITE16_MEMBER(wardner_dsp_w); - DECLARE_WRITE16_MEMBER(twincobr_dsp_bio_w); - DECLARE_READ16_MEMBER(fsharkbt_dsp_r); - DECLARE_WRITE16_MEMBER(fsharkbt_dsp_w); + void twincobr_dsp_addrsel_w(u16 data); + u16 twincobr_dsp_r(); + void twincobr_dsp_w(u16 data); + void wardner_dsp_addrsel_w(u16 data); + u16 wardner_dsp_r(); + void wardner_dsp_w(u16 data); + void twincobr_dsp_bio_w(u16 data); + u16 fsharkbt_dsp_r(); + void fsharkbt_dsp_w(u16 data); DECLARE_READ_LINE_MEMBER(twincobr_bio_r); DECLARE_WRITE_LINE_MEMBER(int_enable_w); DECLARE_WRITE_LINE_MEMBER(dsp_int_w); @@ -94,47 +96,45 @@ protected: DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w); - DECLARE_READ16_MEMBER(twincobr_sharedram_r); - DECLARE_WRITE16_MEMBER(twincobr_sharedram_w); - DECLARE_WRITE16_MEMBER(twincobr_txoffs_w); - DECLARE_READ16_MEMBER(twincobr_txram_r); - DECLARE_WRITE16_MEMBER(twincobr_txram_w); - DECLARE_WRITE16_MEMBER(twincobr_bgoffs_w); - DECLARE_READ16_MEMBER(twincobr_bgram_r); - DECLARE_WRITE16_MEMBER(twincobr_bgram_w); - DECLARE_WRITE16_MEMBER(twincobr_fgoffs_w); - DECLARE_READ16_MEMBER(twincobr_fgram_r); - DECLARE_WRITE16_MEMBER(twincobr_fgram_w); - DECLARE_WRITE16_MEMBER(twincobr_txscroll_w); - DECLARE_WRITE16_MEMBER(twincobr_bgscroll_w); - DECLARE_WRITE16_MEMBER(twincobr_fgscroll_w); - DECLARE_WRITE16_MEMBER(twincobr_exscroll_w); - DECLARE_WRITE8_MEMBER(wardner_txlayer_w); - DECLARE_WRITE8_MEMBER(wardner_bglayer_w); - DECLARE_WRITE8_MEMBER(wardner_fglayer_w); - DECLARE_WRITE8_MEMBER(wardner_txscroll_w); - DECLARE_WRITE8_MEMBER(wardner_bgscroll_w); - DECLARE_WRITE8_MEMBER(wardner_fgscroll_w); - DECLARE_WRITE8_MEMBER(wardner_exscroll_w); - DECLARE_READ8_MEMBER(wardner_videoram_r); - DECLARE_WRITE8_MEMBER(wardner_videoram_w); - DECLARE_READ8_MEMBER(wardner_sprite_r); - DECLARE_WRITE8_MEMBER(wardner_sprite_w); + u8 twincobr_sharedram_r(offs_t offset); + void twincobr_sharedram_w(offs_t offset, u8 data); + void twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 twincobr_txram_r(); + void twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 twincobr_bgram_r(); + void twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 twincobr_fgram_r(); + void twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void twincobr_exscroll_w(offs_t offset, u16 data); + void wardner_txlayer_w(offs_t offset, u8 data); + void wardner_bglayer_w(offs_t offset, u8 data); + void wardner_fglayer_w(offs_t offset, u8 data); + void wardner_txscroll_w(offs_t offset, u8 data); + void wardner_bgscroll_w(offs_t offset, u8 data); + void wardner_fgscroll_w(offs_t offset, u8 data); + void wardner_exscroll_w(offs_t offset, u8 data); + u8 wardner_videoram_r(offs_t offset); + void wardner_videoram_w(offs_t offset, u8 data); + u8 wardner_sprite_r(offs_t offset); + void wardner_sprite_w(offs_t offset, u8 data); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info); - DECLARE_MACHINE_RESET(twincobr); - uint32_t screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(twincobr_vblank_irq); DECLARE_WRITE_LINE_MEMBER(wardner_vblank_irq); - void twincobr_restore_dsp(); void twincobr_create_tilemaps(); DECLARE_WRITE_LINE_MEMBER(display_on_w); DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE_LINE_MEMBER(bg_ram_bank_w); DECLARE_WRITE_LINE_MEMBER(fg_rom_bank_w); - void twincobr_log_vram(); - void twincobr_driver_savestate(); + void log_vram(); + void driver_savestate(); required_device<cpu_device> m_maincpu; required_device<tms32010_device> m_dsp; required_device<toaplan_scu_device> m_spritegen; diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h index 9bcd83ac4cc..3f60c7ce8b7 100644 --- a/src/mame/includes/xavix.h +++ b/src/mame/includes/xavix.h @@ -20,6 +20,9 @@ #include "machine/xavix_madfb_ball.h" #include "machine/xavix2002_io.h" #include "machine/xavix_io.h" +#include "machine/xavix_adc.h" +#include "machine/xavix_anport.h" +#include "machine/xavix_math.h" class xavix_sound_device : public device_t, public device_sound_interface { @@ -101,6 +104,9 @@ public: m_region(*this, "REGION"), m_gfxdecode(*this, "gfxdecode"), m_sound(*this, "xavix_sound"), + m_adc(*this, "adc"), + m_anport(*this, "anport"), + m_math(*this, "math"), m_xavix2002io(*this, "xavix2002io") { } @@ -275,24 +281,6 @@ private: uint8_t m_ioevent_active; void process_ioevent(uint8_t bits); - DECLARE_READ8_MEMBER(mouse_7b00_r); - DECLARE_READ8_MEMBER(mouse_7b01_r); - DECLARE_READ8_MEMBER(mouse_7b10_r); - DECLARE_READ8_MEMBER(mouse_7b11_r); - - DECLARE_WRITE8_MEMBER(mouse_7b00_w); - DECLARE_WRITE8_MEMBER(mouse_7b01_w); - DECLARE_WRITE8_MEMBER(mouse_7b10_w); - DECLARE_WRITE8_MEMBER(mouse_7b11_w); - - DECLARE_READ8_MEMBER(adc_7b80_r); - DECLARE_WRITE8_MEMBER(adc_7b80_w); - DECLARE_READ8_MEMBER(adc_7b81_r); - DECLARE_WRITE8_MEMBER(adc_7b81_w); - TIMER_CALLBACK_MEMBER(adc_timer_done); - emu_timer *m_adc_timer; - uint8_t m_adc_control; - DECLARE_WRITE8_MEMBER(slotreg_7810_w); DECLARE_WRITE8_MEMBER(rom_dmatrg_w); @@ -323,8 +311,6 @@ private: uint8_t m_io0_direction; uint8_t m_io1_direction; - uint8_t m_adc_inlatch; - DECLARE_READ8_MEMBER(nmi_vector_lo_r); DECLARE_READ8_MEMBER(nmi_vector_hi_r); DECLARE_READ8_MEMBER(irq_vector_lo_r); @@ -466,16 +452,20 @@ private: return 0xff; } - DECLARE_READ8_MEMBER(mult_r); - DECLARE_WRITE8_MEMBER(mult_w); - DECLARE_READ8_MEMBER(mult_param_r); - DECLARE_WRITE8_MEMBER(mult_param_w); - - uint8_t m_barrel_params[2]; - DECLARE_READ8_MEMBER(barrel_r); - DECLARE_WRITE8_MEMBER(barrel_w); + DECLARE_READ8_MEMBER(adc0_r) { return m_an_in[0]->read(); }; + DECLARE_READ8_MEMBER(adc1_r) { return m_an_in[1]->read(); }; + DECLARE_READ8_MEMBER(adc2_r) { return m_an_in[2]->read(); }; + DECLARE_READ8_MEMBER(adc3_r) { return m_an_in[3]->read(); }; + DECLARE_READ8_MEMBER(adc4_r) { return m_an_in[4]->read(); }; + DECLARE_READ8_MEMBER(adc5_r) { return m_an_in[5]->read(); }; + DECLARE_READ8_MEMBER(adc6_r) { return m_an_in[6]->read(); }; + DECLARE_READ8_MEMBER(adc7_r) { return m_an_in[7]->read(); }; + DECLARE_READ8_MEMBER(anport0_r) { logerror("%s: unhandled anport0_r\n", machine().describe_context()); return 0xff; }; + DECLARE_READ8_MEMBER(anport1_r) { logerror("%s: unhandled anport1_r\n", machine().describe_context()); return 0xff; }; + DECLARE_READ8_MEMBER(anport2_r) { logerror("%s: unhandled anport2_r\n", machine().describe_context()); return 0xff; }; + DECLARE_READ8_MEMBER(anport3_r) { logerror("%s: unhandled anport3_r\n", machine().describe_context()); return 0xff; }; void update_irqs(); uint8_t m_irqsource; @@ -486,9 +476,6 @@ private: uint8_t m_irq_vector_lo_data; uint8_t m_irq_vector_hi_data; - uint8_t m_multparams[3]; - uint8_t m_multresults[2]; - uint8_t m_spritefragment_dmaparam1[2]; uint8_t m_spritefragment_dmaparam2[2]; @@ -575,6 +562,9 @@ private: DECLARE_READ8_MEMBER(sound_regram_read_cb); protected: + required_device<xavix_adc_device> m_adc; + required_device<xavix_anport_device> m_anport; + required_device<xavix_math_device> m_math; optional_device<xavix2002_io_device> m_xavix2002io; uint8_t m_extbusctrl[3]; @@ -590,6 +580,42 @@ protected: DECLARE_WRITE8_MEMBER(extended_extbus_reg2_w); }; +class xavix_guru_state : public xavix_state +{ +public: + xavix_guru_state(const machine_config &mconfig, device_type type, const char *tag) + : xavix_state(mconfig, type, tag) + { } + + void xavix_guru(machine_config &config); + +protected: + +private: + DECLARE_READ8_MEMBER(guru_anport2_r) { uint8_t ret = m_mouse1x->read()-0x10; return ret; } +}; + + +class xavix_2000_nv_sdb_state : public xavix_state +{ +public: + xavix_2000_nv_sdb_state(const machine_config &mconfig, device_type type, const char *tag) + : xavix_state(mconfig, type, tag) + { } + + void xavix2000_nv_sdb(machine_config &config); + +protected: + +private: + DECLARE_READ8_MEMBER(sdb_anport0_r) { return m_mouse0x->read()^0x7f; } + DECLARE_READ8_MEMBER(sdb_anport1_r) { return m_mouse0y->read()^0x7f; } + DECLARE_READ8_MEMBER(sdb_anport2_r) { return m_mouse1x->read()^0x7f; } + DECLARE_READ8_MEMBER(sdb_anport3_r) { return m_mouse1y->read()^0x7f; } + +}; + + class xavix_i2c_state : public xavix_state { public: @@ -636,8 +662,16 @@ public: : xavix_i2c_state(mconfig, type, tag) { } + void xavix_i2c_24lc04_tam(machine_config &config); + private: virtual void write_io1(uint8_t data, uint8_t direction) override; + +private: + DECLARE_READ8_MEMBER(tam_anport0_r) { return m_mouse0x->read()^0x7f; } + DECLARE_READ8_MEMBER(tam_anport1_r) { return m_mouse0y->read()^0x7f; } + DECLARE_READ8_MEMBER(tam_anport2_r) { return m_mouse1x->read()^0x7f; } + DECLARE_READ8_MEMBER(tam_anport3_r) { return m_mouse1y->read()^0x7f; } }; @@ -917,14 +951,22 @@ class xavix_popira2_cart_state : public xavix_cart_state { public: xavix_popira2_cart_state(const machine_config &mconfig, device_type type, const char *tag) - : xavix_cart_state(mconfig,type,tag) + : xavix_cart_state(mconfig,type,tag), + m_p2(*this, "P2") { } + void xavix_cart_popira2(machine_config &config); + DECLARE_CUSTOM_INPUT_MEMBER(i2c_r); protected: virtual void write_io1(uint8_t data, uint8_t direction) override; +private: + DECLARE_READ8_MEMBER(popira2_adc0_r); + DECLARE_READ8_MEMBER(popira2_adc1_r); + + required_ioport m_p2; }; diff --git a/src/mame/layout/aci_boris.lay b/src/mame/layout/aci_boris.lay index 4314ab83d86..d96e325c0b9 100644 --- a/src/mame/layout/aci_boris.lay +++ b/src/mame/layout/aci_boris.lay @@ -5,6 +5,7 @@ <element name="black"><rect><color red="0.16" green="0.16" blue="0.16" /></rect></element> <element name="disk_white"><disk><color red="0.8" green="0.8" blue="0.8" /></disk></element> + <element name="disk_white2"><disk><color red="0.73" green="0.73" blue="0.73" /></disk></element> <element name="button" defstate="0"> <rect state="0"><color red="0.55" green="0.55" blue="0.55" /></rect> @@ -35,11 +36,11 @@ <element name="digitq" defstate="28536"><led16seg><color red="0.8" green="0.35" blue="0.05" /></led16seg></element> <element name="digitk" defstate="28668"><led16seg><color red="0.8" green="0.35" blue="0.05" /></led16seg></element> - <element name="text_u1"><text string="from" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> - <element name="text_u2"><text string="to" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> - <element name="text_u3"><text string="hrs" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> - <element name="text_u4"><text string="min" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> - <element name="text_u5"><text string="sec" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> + <element name="text_u1"><text string="from" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element> + <element name="text_u2"><text string="to" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element> + <element name="text_u3"><text string="hrs" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element> + <element name="text_u4"><text string="min" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element> + <element name="text_u5"><text string="sec" align="1"><color red="0.72" green="0.72" blue="0.72" /></text></element> <element name="text_l01a"><text string="G" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> <element name="text_l01b"><text string="7" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element> @@ -88,14 +89,14 @@ <bezel name="digit1" element="digit"><bounds x="16.50" y="18.3" width="2.75" height="4.125" /></bezel> <bezel name="digit0" element="digit"><bounds x="19.25" y="18.3" width="2.75" height="4.125" /></bezel> - <bezel element="disk_white"><bounds x="1.125" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="3.875" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="6.625" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="9.375" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="12.125" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="14.875" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="17.625" y="23" width="0.5" height="0.5" /></bezel> - <bezel element="disk_white"><bounds x="20.375" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="1.125" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="3.875" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="6.625" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="9.375" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="12.125" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="14.875" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="17.625" y="23" width="0.5" height="0.5" /></bezel> + <bezel element="disk_white2"><bounds x="20.375" y="23" width="0.5" height="0.5" /></bezel> <bezel element="text_u1"><bounds x="1.125" y="15.8" width="6" height="1.8" /></bezel> <bezel element="text_u2"><bounds x="9.375" y="15.8" width="6" height="1.8" /></bezel> diff --git a/src/mame/layout/alphie.lay b/src/mame/layout/alphie.lay index 259af608f92..6d417825279 100644 --- a/src/mame/layout/alphie.lay +++ b/src/mame/layout/alphie.lay @@ -10,19 +10,34 @@ <disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk> </element> + <element name="nothing" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + </element> + + <element name="switch_qa" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <text state="0x01" string="1"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x02" string="2"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x04" string="3"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x08" string="4"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x10" string="5"><color red="0.95" green="0.95" blue="0.95" /></text> + </element> + <element name="switch_act" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <text state="0x01" string="S"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x02" string="*"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x04" string="X"><color red="0.95" green="0.95" blue="0.95" /></text> + <text state="0x08" string="♪"><color red="0.95" green="0.95" blue="0.95" /></text> <!-- music note --> + </element> + <element name="text_1"><text string="1"><color red="0.75" green="0.75" blue="0.75" /></text></element> <element name="text_2"><text string="2"><color red="0.75" green="0.75" blue="0.75" /></text></element> <element name="text_3"><text string="3"><color red="0.75" green="0.75" blue="0.75" /></text></element> <element name="text_4"><text string="4"><color red="0.75" green="0.75" blue="0.75" /></text></element> <element name="text_5"><text string="5"><color red="0.75" green="0.75" blue="0.75" /></text></element> <element name="text_q"><text string="Question:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element> - <element name="text_a"><text string="Answer:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element> - - <element name="counter" defstate="1"> - <simplecounter maxstate="9" digits="1"> - <color red="0.95" green="0.95" blue="0.95" /> - </simplecounter> - </element> + <element name="text_ans"><text string="Answer:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element> + <element name="text_act"><text string="Activity:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element> <!-- build screen --> @@ -45,9 +60,12 @@ <bezel element="static_gray"><bounds x="6" y="0.5" width="0.2" height="13" /></bezel> <bezel element="text_q"><bounds x="8" y="0" width="10" height="2" /></bezel> - <bezel element="text_a"><bounds x="8" y="3" width="10" height="2" /></bezel> - <bezel name="q_pos" element="counter"><bounds x="15" y="0" width="2" height="2" /></bezel> - <bezel name="a_pos" element="counter"><bounds x="15" y="3" width="2" height="2" /></bezel> + <bezel element="text_ans"><bounds x="8" y="3" width="10" height="2" /></bezel> + <bezel element="text_act"><bounds x="8" y="6" width="10" height="2" /></bezel> + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="14" y="-1" width="4" height="10" /></bezel> + <bezel element="switch_qa" inputtag="IN.1" inputmask="0x1f" inputraw="1"><bounds x="15" y="0" width="2" height="2" /></bezel> + <bezel element="switch_qa" inputtag="IN.2" inputmask="0x1f" inputraw="1"><bounds x="15" y="3" width="2" height="2" /></bezel> + <bezel element="switch_act" inputtag="IN.3" inputmask="0x0f" inputraw="1"><bounds x="15" y="6" width="2" height="2" /></bezel> </view> </mamelayout> diff --git a/src/mame/layout/ave_arb.lay b/src/mame/layout/ave_arb.lay index 6a3c9a4c502..99c5e158b96 100644 --- a/src/mame/layout/ave_arb.lay +++ b/src/mame/layout/ave_arb.lay @@ -120,12 +120,12 @@ <element name="text_s3"><text string="Take Back" align="1"><color red="0.55" green="0.55" blue="0.55" /></text></element> <element name="text_s4"><text string="Clear" align="1"><color red="0.55" green="0.55" blue="0.55" /></text></element> - <element name="text_r11"><text string="♙"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r21"><text string="♘"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r31"><text string="♗"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r41"><text string="♖"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r51"><text string="♕"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r61"><text string="♔"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r11"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r21"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r31"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r41"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r51"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r61"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r71"><text string="W"><color red="0.81" green="0.8" blue="0.79" /></text></element> <!-- White --> <element name="text_r81"><text string="B"><color red="0.81" green="0.8" blue="0.79" /></text></element> <!-- Black --> @@ -368,44 +368,44 @@ <!-- right side --> - <bezel element="text_l0"><bounds x="88.6" y="22.75" width="2.5" height="1.5" /></bezel> - <bezel element="text_l1"><bounds x="88.6" y="25.75" width="2.5" height="1.5" /></bezel> - <bezel element="text_l2"><bounds x="88.6" y="28.75" width="2.5" height="1.5" /></bezel> - <bezel element="text_l3"><bounds x="88.6" y="31.75" width="2.5" height="1.5" /></bezel> - <bezel element="text_l4"><bounds x="88.6" y="34.75" width="2.5" height="1.5" /></bezel> - <bezel element="text_l5"><bounds x="88.6" y="37.75" width="2.5" height="1.5" /></bezel> - <bezel element="text_l6"><bounds x="88.6" y="43.25" width="2.5" height="1.5" /></bezel> - - <bezel element="text_r11"><bounds x="92.5" y="22.2" width="3" height="2.5" /></bezel> - <bezel element="text_r21"><bounds x="92.5" y="25.2" width="3" height="2.5" /></bezel> - <bezel element="text_r31"><bounds x="92.5" y="28.2" width="3" height="2.5" /></bezel> - <bezel element="text_r41"><bounds x="92.5" y="31.2" width="3" height="2.5" /></bezel> - <bezel element="text_r51"><bounds x="92.5" y="34.2" width="3" height="2.5" /></bezel> - <bezel element="text_r61"><bounds x="92.5" y="37.2" width="3" height="2.5" /></bezel> - <bezel element="text_r71"><bounds x="92.5" y="43.25" width="3" height="1.5" /></bezel> - <bezel element="text_r81"><bounds x="92.5" y="46.25" width="3" height="1.5" /></bezel> - - <bezel element="text_s1"><bounds x="97.8" y="21.25" width="10" height="1.5" /></bezel> - <bezel element="text_s2"><bounds x="97.8" y="33.25" width="10" height="1.5" /></bezel> - <bezel element="text_s3"><bounds x="97.8" y="36.25" width="10" height="1.5" /></bezel> - <bezel element="text_s4"><bounds x="97.8" y="41.75" width="10" height="1.5" /></bezel> - - <bezel element="text_r12"><bounds x="87.5" y="13.25" width="7" height="1.5" /></bezel> - <bezel element="text_r22"><bounds x="87.5" y="17.25" width="7" height="1.5" /></bezel> - - <bezel element="text_r32"><bounds x="97.8" y="22.75" width="10" height="1.5" /></bezel> - <bezel element="text_r42"><bounds x="97.8" y="25.75" width="10" height="1.5" /></bezel> - <bezel element="text_r52"><bounds x="97.8" y="28.75" width="10" height="1.5" /></bezel> - <bezel element="text_r62"><bounds x="97.8" y="31.75" width="10" height="1.5" /></bezel> - <bezel element="text_r72"><bounds x="97.8" y="34.75" width="10" height="1.5" /></bezel> - <bezel element="text_r82"><bounds x="97.8" y="37.75" width="10" height="1.5" /></bezel> - <bezel element="text_r92"><bounds x="97.8" y="43.25" width="10" height="1.5" /></bezel> - <bezel element="text_ra2"><bounds x="97.8" y="46.25" width="10" height="1.5" /></bezel> - - <bezel element="text_r13"><bounds x="93.5" y="51.75" width="10" height="1.5" /></bezel> - <bezel element="text_r23"><bounds x="93.5" y="54.75" width="10" height="1.5" /></bezel> - <bezel element="text_r33"><bounds x="93.5" y="60.25" width="10" height="1.5" /></bezel> - <bezel element="text_r43"><bounds x="93.5" y="63.25" width="10" height="1.5" /></bezel> + <bezel element="text_l0"><bounds x="88.6" y="22.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_l1"><bounds x="88.6" y="25.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_l2"><bounds x="88.6" y="28.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_l3"><bounds x="88.6" y="31.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_l4"><bounds x="88.6" y="34.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_l5"><bounds x="88.6" y="37.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_l6"><bounds x="88.6" y="43.15" width="2.5" height="1.5" /></bezel> + + <bezel element="text_r11"><bounds x="92.25" y="22.65" width="3.5" height="1.5" /></bezel> + <bezel element="text_r21"><bounds x="92.25" y="25.65" width="3.5" height="1.5" /></bezel> + <bezel element="text_r31"><bounds x="92.25" y="28.65" width="3.5" height="1.5" /></bezel> + <bezel element="text_r41"><bounds x="92.25" y="31.65" width="3.5" height="1.5" /></bezel> + <bezel element="text_r51"><bounds x="92.25" y="34.65" width="3.5" height="1.5" /></bezel> + <bezel element="text_r61"><bounds x="92.25" y="37.65" width="3.5" height="1.5" /></bezel> + <bezel element="text_r71"><bounds x="92.5" y="43.15" width="3" height="1.5" /></bezel> + <bezel element="text_r81"><bounds x="92.5" y="46.15" width="3" height="1.5" /></bezel> + + <bezel element="text_s1"><bounds x="97.8" y="21.15" width="10" height="1.5" /></bezel> + <bezel element="text_s2"><bounds x="97.8" y="33.15" width="10" height="1.5" /></bezel> + <bezel element="text_s3"><bounds x="97.8" y="36.15" width="10" height="1.5" /></bezel> + <bezel element="text_s4"><bounds x="97.8" y="41.65" width="10" height="1.5" /></bezel> + + <bezel element="text_r12"><bounds x="87.5" y="13.15" width="7" height="1.5" /></bezel> + <bezel element="text_r22"><bounds x="87.5" y="17.15" width="7" height="1.5" /></bezel> + + <bezel element="text_r32"><bounds x="97.8" y="22.65" width="10" height="1.5" /></bezel> + <bezel element="text_r42"><bounds x="97.8" y="25.65" width="10" height="1.5" /></bezel> + <bezel element="text_r52"><bounds x="97.8" y="28.65" width="10" height="1.5" /></bezel> + <bezel element="text_r62"><bounds x="97.8" y="31.65" width="10" height="1.5" /></bezel> + <bezel element="text_r72"><bounds x="97.8" y="34.65" width="10" height="1.5" /></bezel> + <bezel element="text_r82"><bounds x="97.8" y="37.65" width="10" height="1.5" /></bezel> + <bezel element="text_r92"><bounds x="97.8" y="43.15" width="10" height="1.5" /></bezel> + <bezel element="text_ra2"><bounds x="97.8" y="46.15" width="10" height="1.5" /></bezel> + + <bezel element="text_r13"><bounds x="93.5" y="51.65" width="10" height="1.5" /></bezel> + <bezel element="text_r23"><bounds x="93.5" y="54.65" width="10" height="1.5" /></bezel> + <bezel element="text_r33"><bounds x="93.5" y="60.15" width="10" height="1.5" /></bezel> + <bezel element="text_r43"><bounds x="93.5" y="63.15" width="10" height="1.5" /></bezel> <bezel name="8.7" element="led2"><bounds x="91" y="22.75" width="1.5" height="1.5" /></bezel> <bezel name="8.6" element="led2"><bounds x="91" y="25.75" width="1.5" height="1.5" /></bezel> diff --git a/src/mame/layout/breakout.lay b/src/mame/layout/breakout.lay index 1677851b6b0..1d656beb018 100644 --- a/src/mame/layout/breakout.lay +++ b/src/mame/layout/breakout.lay @@ -22,15 +22,15 @@ <color red="1" green="1" blue="0.25" /> </rect> <rect> - <bounds left="0" top="88" right="192" bottom="236" /> + <bounds left="0" top="88" right="192" bottom="231" /> <color red="1" green="1" blue="1" /> </rect> <rect> - <bounds left="0" top="236" right="192" bottom="244" /> + <bounds left="0" top="231" right="192" bottom="238" /> <color red="0.125" green="0.125" blue="1" /> </rect> <rect> - <bounds left="0" top="244" right="192" bottom="258" /> + <bounds left="0" top="238" right="192" bottom="244" /> <color red="1" green="1" blue="1" /> </rect> </element> diff --git a/src/mame/layout/cc40.lay b/src/mame/layout/cc40.lay index 2f97e22b6de..266029af2de 100644 --- a/src/mame/layout/cc40.lay +++ b/src/mame/layout/cc40.lay @@ -9,20 +9,20 @@ <element name="ind_left" defstate="0"> <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect> - <text string="◀" align="1" state="0"> + <text string="◄" align="1" state="0"> <color red="0.515" green="0.537" blue="0.548" /> </text> - <text string="◀" align="1" state="1"> + <text string="◄" align="1" state="1"> <color red="0.361" green="0.326" blue="0.346" /> </text> </element> <element name="ind_right" defstate="0"> <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect> - <text string="▶" align="2" state="0"> + <text string="►" align="2" state="0"> <color red="0.515" green="0.537" blue="0.548" /> </text> - <text string="▶" align="2" state="1"> + <text string="►" align="2" state="1"> <color red="0.361" green="0.326" blue="0.346" /> </text> </element> @@ -162,11 +162,11 @@ <!-- draw top row of lcd indicators --> <bezel name="lamp10" element="ind_left"> - <bounds x="1.5" y="2" width="20" height="7" /> + <bounds x="1.5" y="2.5" width="20" height="5.5" /> </bezel> <bezel name="lamp4" element="ind_right"> - <bounds x="167.5" y="2" width="20" height="7" /> + <bounds x="167.5" y="2.5" width="20" height="5.5" /> </bezel> <bezel name="lamp11" element="ind_shift"> diff --git a/src/mame/layout/chessmst.lay b/src/mame/layout/chessmst.lay index 6fb7883b80b..77c04215faa 100644 --- a/src/mame/layout/chessmst.lay +++ b/src/mame/layout/chessmst.lay @@ -194,12 +194,12 @@ <element name="text_hint"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_white"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_black"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_king" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♔" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_queen" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♕" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_rook" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♖" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_bishop" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♗" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_knight" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♘" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_pawn" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♙" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_king" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[K]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_queen" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[Q]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_rook" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[R]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_bishop" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[B]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_knight" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[N]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_pawn" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="[P]" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_change"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_halt"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_reset"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -208,19 +208,19 @@ <element name="text_cms"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="piece" defstate="0"> - <text string="♚" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♛" state="2"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♜" state="3"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♝" state="4"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♞" state="5"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♟" state="6"><color red="0.27" green="0.25" blue="0.25" /></text> - - <text string="♚" state="7"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♛" state="8"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♜" state="9"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♝" state="10"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♞" state="11"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♟" state="12"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[K]" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[Q]" state="2"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[R]" state="3"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[B]" state="4"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[N]" state="5"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[P]" state="6"><color red="0.27" green="0.25" blue="0.25" /></text> + + <text string="[K]" state="7"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[Q]" state="8"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[R]" state="9"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[B]" state="10"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[N]" state="11"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[P]" state="12"><color red="0.71" green="0.7" blue="0.69" /></text> <!-- selected pieces --> <disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk> @@ -236,19 +236,19 @@ <disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk> <disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk> - <text string="♚" state="17"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♛" state="18"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♜" state="19"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♝" state="20"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♞" state="21"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♟" state="22"><color red="0.27" green="0.25" blue="0.25" /></text> - - <text string="♚" state="23"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♛" state="24"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♜" state="25"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♝" state="26"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♞" state="27"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♟" state="28"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[K]" state="17"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[Q]" state="18"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[R]" state="19"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[B]" state="20"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[N]" state="21"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[P]" state="22"><color red="0.27" green="0.25" blue="0.25" /></text> + + <text string="[K]" state="23"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[Q]" state="24"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[R]" state="25"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[B]" state="26"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[N]" state="27"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[P]" state="28"><color red="0.71" green="0.7" blue="0.69" /></text> </element> <!-- build screen --> @@ -558,12 +558,12 @@ <bezel element="text_reset"> <bounds x="92.5" y="82" width="10" height="2" /></bezel> <bezel element="text_halt"> <bounds x="107.5" y="82" width="8" height="2" /></bezel> - <bezel element="text_pawn"> <bounds x="95" y="18" width="4" height="4" /></bezel> - <bezel element="text_knight"> <bounds x="95" y="25" width="4" height="4" /></bezel> - <bezel element="text_bishop"> <bounds x="95" y="32" width="4" height="4" /></bezel> - <bezel element="text_rook"> <bounds x="95" y="39" width="4" height="4" /></bezel> - <bezel element="text_queen"> <bounds x="95" y="46" width="4" height="4" /></bezel> - <bezel element="text_king"> <bounds x="95" y="53" width="4" height="4" /></bezel> + <bezel element="text_pawn"> <bounds x="95" y="18.5" width="4" height="2.6" /></bezel> + <bezel element="text_knight"> <bounds x="95" y="25.5" width="4" height="2.6" /></bezel> + <bezel element="text_bishop"> <bounds x="95" y="32.5" width="4" height="2.6" /></bezel> + <bezel element="text_rook"> <bounds x="95" y="39.5" width="4" height="2.6" /></bezel> + <bezel element="text_queen"> <bounds x="95" y="46.5" width="4" height="2.6" /></bezel> + <bezel element="text_king"> <bounds x="95" y="53.5" width="4" height="2.6" /></bezel> <bezel element="text_white"> <bounds x="90" y="61" width="9" height="1.8" /></bezel> <bezel element="text_black"> <bounds x="90" y="68" width="9" height="1.8" /></bezel> diff --git a/src/mame/layout/chessmstdm.lay b/src/mame/layout/chessmstdm.lay index 82ea39b96e5..1a8bb373c8a 100644 --- a/src/mame/layout/chessmstdm.lay +++ b/src/mame/layout/chessmstdm.lay @@ -205,19 +205,19 @@ <element name="text_move_back"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="piece" defstate="0"> - <text string="♚" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♛" state="2"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♜" state="3"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♝" state="4"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♞" state="5"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♟" state="6"><color red="0.27" green="0.25" blue="0.25" /></text> - - <text string="♚" state="7"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♛" state="8"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♜" state="9"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♝" state="10"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♞" state="11"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♟" state="12"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[K]" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[Q]" state="2"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[R]" state="3"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[B]" state="4"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[N]" state="5"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[P]" state="6"><color red="0.27" green="0.25" blue="0.25" /></text> + + <text string="[K]" state="7"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[Q]" state="8"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[R]" state="9"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[B]" state="10"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[N]" state="11"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[P]" state="12"><color red="0.71" green="0.7" blue="0.69" /></text> <!-- selected pieces --> <disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk> @@ -233,19 +233,19 @@ <disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk> <disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk> - <text string="♚" state="17"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♛" state="18"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♜" state="19"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♝" state="20"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♞" state="21"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♟" state="22"><color red="0.27" green="0.25" blue="0.25" /></text> - - <text string="♚" state="23"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♛" state="24"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♜" state="25"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♝" state="26"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♞" state="27"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♟" state="28"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[K]" state="17"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[Q]" state="18"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[R]" state="19"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[B]" state="20"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[N]" state="21"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[P]" state="22"><color red="0.27" green="0.25" blue="0.25" /></text> + + <text string="[K]" state="23"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[Q]" state="24"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[R]" state="25"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[B]" state="26"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[N]" state="27"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[P]" state="28"><color red="0.71" green="0.7" blue="0.69" /></text> </element> <!-- build screen --> diff --git a/src/mame/layout/ck_master.lay b/src/mame/layout/ck_master.lay index 1b16de82f8a..0801c5a1f9b 100644 --- a/src/mame/layout/ck_master.lay +++ b/src/mame/layout/ck_master.lay @@ -67,27 +67,27 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♔"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♕"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♖"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♗"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♘"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♙"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -284,12 +284,12 @@ <bezel element="text_l14"><bounds x="91.4" y="74.250" width="12.5" height="1.5" /></bezel> <bezel element="text_l15"><bounds x="91.4" y="79.583" width="12.5" height="1.5" /></bezel> - <bezel element="text_king"><bounds x="91.4" y="24.500" width="12.5" height="5" /></bezel> - <bezel element="text_queen"><bounds x="91.4" y="29.833" width="12.5" height="5" /></bezel> - <bezel element="text_rook"><bounds x="91.4" y="35.166" width="12.5" height="5" /></bezel> - <bezel element="text_bishop"><bounds x="91.4" y="40.500" width="12.5" height="5" /></bezel> - <bezel element="text_knight"><bounds x="91.4" y="45.833" width="12.5" height="5" /></bezel> - <bezel element="text_pawn"><bounds x="91.4" y="51.166" width="12.5" height="5" /></bezel> + <bezel element="text_king"><bounds x="91.4" y="25.200" width="12.5" height="3" /></bezel> + <bezel element="text_queen"><bounds x="91.4" y="30.533" width="12.5" height="3" /></bezel> + <bezel element="text_rook"><bounds x="91.4" y="35.866" width="12.5" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="91.4" y="41.200" width="12.5" height="3" /></bezel> + <bezel element="text_knight"><bounds x="91.4" y="46.533" width="12.5" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="91.4" y="51.866" width="12.5" height="3" /></bezel> <bezel element="black"><bounds x="96.25" y="57.75" width="2.5" height="2.5" /></bezel> <bezel element="white"><bounds x="96.5" y="58" width="2.0" height="2.0" /></bezel> diff --git a/src/mame/layout/copycat.lay b/src/mame/layout/copycat.lay index da61dd4d5a6..418915877b9 100644 --- a/src/mame/layout/copycat.lay +++ b/src/mame/layout/copycat.lay @@ -9,28 +9,57 @@ <element name="static_green"><rect><color red="0.3" green="0.9" blue="0.3" /></rect></element> <element name="static_yellow"><rect><color red="0.9" green="0.9" blue="0.3" /></rect></element> <element name="static_orange"><rect><color red="0.9" green="0.6" blue="0.3" /></rect></element> + <element name="disk_red"><disk><color red="0.9" green="0.3" blue="0.3" /></disk></element> + <element name="disk_green"><disk><color red="0.3" green="0.9" blue="0.3" /></disk></element> + <element name="disk_yellow"><disk><color red="0.9" green="0.9" blue="0.3" /></disk></element> + <element name="disk_orange"><disk><color red="0.9" green="0.6" blue="0.3" /></disk></element> <element name="text_b1"><text string="REPLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element> <element name="text_b2"><text string="PLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element> <element name="text_b3"><text string="BEST PLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element> + <element name="text_s1"><text string="SKILL:" align="1"><color red="0.9" green="0.89" blue="0.8" /></text></element> + <element name="text_s2"><text string="GAME:" align="1"><color red="0.9" green="0.89" blue="0.8" /></text></element> + + <element name="nothing"><text string=" "></text></element> + + <element name="switch" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <text state="0x01" string="1" align="1"><color red="0.9" green="0.89" blue="0.8" /></text> + <text state="0x02" string="2" align="1"><color red="0.9" green="0.89" blue="0.8" /></text> + <text state="0x04" string="3" align="1"><color red="0.9" green="0.89" blue="0.8" /></text> + <text state="0x08" string="4" align="1"><color red="0.9" green="0.89" blue="0.8" /></text> + </element> + + <element name="text_rg"> + <disk><color red="0.9" green="0.89" blue="0.8" /></disk> + <text string="►"> + <color red="0.3" green="0.9" blue="0.3" /> + </text> + </element> + <element name="text_ro"> + <disk><color red="0.9" green="0.89" blue="0.8" /></disk> + <text string="►"> + <color red="0.8" green="0.6" blue="0.3" /> + </text> + </element> <element name="hlh" defstate="0"> <text string=" "> - <bounds x="0.0" y="0.0" width="2.0" height="1.0" /> + <bounds x="0.0" y="0.0" width="3.0" height="1.0" /> <color red="0.0" green="0.0" blue="0.0" /> </text> <disk state="1"> - <bounds x="0.57" y="0.07" width="0.86" height="0.86" /> + <bounds x="1.07" y="0.07" width="0.86" height="0.86" /> <color red="0.0" green="0.0" blue="0.0" /> </disk> </element> <element name="hlv" defstate="0"> <text string=" "> - <bounds x="0.0" y="0.0" width="1.0" height="2.0" /> + <bounds x="0.0" y="0.0" width="1.0" height="3.0" /> <color red="0.0" green="0.0" blue="0.0" /> </text> <disk state="1"> - <bounds x="0.07" y="0.57" width="0.86" height="0.86" /> + <bounds x="0.07" y="1.07" width="0.86" height="0.86" /> <color red="0.0" green="0.0" blue="0.0" /> </disk> </element> @@ -83,21 +112,44 @@ <bezel element="hlb" inputtag="IN.3" inputmask="0x02"><bounds x="5.625" y="5.875" width="0.75" height="0.75" /><color alpha="0.25" /></bezel> <bezel element="hlb" inputtag="IN.3" inputmask="0x01"><bounds x="6.9375" y="6" width="0.5" height="0.5" /><color alpha="0.25" /></bezel> - <bezel element="text_b1"><bounds x="4.0625" y="6.75" width="1.5" height="0.25" /></bezel> - <bezel element="text_b2"><bounds x="5.125" y="6.75" width="1.75" height="0.25" /></bezel> - <bezel element="text_b3"><bounds x="6.2375" y="6.75" width="1.9" height="0.25" /></bezel> + <bezel element="text_b1"><bounds x="4.0625" y="6.7" width="1.5" height="0.25" /></bezel> + <bezel element="text_b2"><bounds x="5.125" y="6.7" width="1.75" height="0.25" /></bezel> + <bezel element="text_b3"><bounds x="6.2375" y="6.7" width="1.9" height="0.25" /></bezel> + + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="6.25" y="4.9" width="1.2" height="0.5" /></bezel> + <bezel element="switch" inputtag="IN.1" inputmask="0x0f" inputraw="1"><bounds x="6.3" y="4.925" width="1" height="0.25" /></bezel> + <bezel element="text_s1"><bounds x="5.15" y="4.925" width="1.5" height="0.25" /></bezel> + <bezel element="text_ro"><bounds x="5.825" y="4.875" width="0.35" height="0.35" /></bezel> + <bezel element="nothing" inputtag="IN.1" inputmask="0x0f" inputraw="1"><bounds x="5.8" y="4.85" width="0.4" height="0.4" /></bezel> + + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="6.25" y="7.2" width="1.2" height="0.5" /></bezel> + <bezel element="switch" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="6.3" y="7.275" width="1" height="0.25" /></bezel> + <bezel element="text_s2"><bounds x="5.15" y="7.275" width="1.5" height="0.25" /></bezel> + <bezel element="text_rg"><bounds x="5.825" y="7.225" width="0.35" height="0.35" /></bezel> + <bezel element="nothing" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="5.8" y="7.2" width="0.4" height="0.4" /></bezel> <!-- main buttons and leds --> + <bezel element="disk_red"><bounds x="1" y="3" width="2" height="2" /></bezel> + <bezel element="disk_red"><bounds x="1" y="7" width="2" height="2" /></bezel> <bezel element="static_red"><bounds x="1" y="4" width="2" height="4" /></bezel> + + <bezel element="disk_yellow"><bounds x="3" y="1" width="2" height="2" /></bezel> + <bezel element="disk_yellow"><bounds x="7" y="1" width="2" height="2" /></bezel> <bezel element="static_yellow"><bounds x="4" y="1" width="4" height="2" /></bezel> + + <bezel element="disk_orange"><bounds x="9" y="3" width="2" height="2" /></bezel> + <bezel element="disk_orange"><bounds x="9" y="7" width="2" height="2" /></bezel> <bezel element="static_orange"><bounds x="9" y="4" width="2" height="4" /></bezel> + + <bezel element="disk_green"><bounds x="3" y="9" width="2" height="2" /></bezel> + <bezel element="disk_green"><bounds x="7" y="9" width="2" height="2" /></bezel> <bezel element="static_green"><bounds x="4" y="9" width="4" height="2" /></bezel> - <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="4" width="2" height="4" /><color alpha="0.15" /></bezel> - <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="4" y="1" width="4" height="2" /><color alpha="0.15" /></bezel> - <bezel element="hlv" inputtag="IN.0" inputmask="0x04"><bounds x="9" y="4" width="2" height="4" /><color alpha="0.15" /></bezel> - <bezel element="hlh" inputtag="IN.0" inputmask="0x01"><bounds x="4" y="9" width="4" height="2" /><color alpha="0.15" /></bezel> + <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="3" width="2" height="6" /><color alpha="0.15" /></bezel> + <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="1" width="6" height="2" /><color alpha="0.15" /></bezel> + <bezel element="hlv" inputtag="IN.0" inputmask="0x04"><bounds x="9" y="3" width="2" height="6" /><color alpha="0.15" /></bezel> + <bezel element="hlh" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="9" width="6" height="2" /><color alpha="0.15" /></bezel> <bezel name="0.0" element="ledg"><bounds x="5.75" y="8.25" width="0.5" height="0.5" /></bezel> <bezel name="0.1" element="ledr"><bounds x="3.25" y="5.75" width="0.5" height="0.5" /></bezel> diff --git a/src/mame/layout/copycatm2.lay b/src/mame/layout/copycatm2.lay index 832fa9e339c..4c515df4c9e 100644 --- a/src/mame/layout/copycatm2.lay +++ b/src/mame/layout/copycatm2.lay @@ -9,6 +9,10 @@ <element name="static_green"><rect><color red="0.3" green="0.9" blue="0.3" /></rect></element> <element name="static_yellow"><rect><color red="0.9" green="0.9" blue="0.3" /></rect></element> <element name="static_orange"><rect><color red="0.9" green="0.6" blue="0.3" /></rect></element> + <element name="disk_red"><disk><color red="0.9" green="0.3" blue="0.3" /></disk></element> + <element name="disk_green"><disk><color red="0.3" green="0.9" blue="0.3" /></disk></element> + <element name="disk_yellow"><disk><color red="0.9" green="0.9" blue="0.3" /></disk></element> + <element name="disk_orange"><disk><color red="0.9" green="0.6" blue="0.3" /></disk></element> <element name="text_u"><text string="REPLAY"><color red="0.9" green="0.89" blue="0.8" /></text></element> <element name="text_d"><text string="Same Game Again"><color red="0.9" green="0.89" blue="0.8" /></text></element> @@ -17,21 +21,21 @@ <element name="hlh" defstate="0"> <text string=" "> - <bounds x="0.0" y="0.0" width="2.0" height="1.0" /> + <bounds x="0.0" y="0.0" width="3.0" height="1.0" /> <color red="0.0" green="0.0" blue="0.0" /> </text> <disk state="1"> - <bounds x="0.57" y="0.07" width="0.86" height="0.86" /> + <bounds x="1.07" y="0.07" width="0.86" height="0.86" /> <color red="0.0" green="0.0" blue="0.0" /> </disk> </element> <element name="hlv" defstate="0"> <text string=" "> - <bounds x="0.0" y="0.0" width="1.0" height="2.0" /> + <bounds x="0.0" y="0.0" width="1.0" height="3.0" /> <color red="0.0" green="0.0" blue="0.0" /> </text> <disk state="1"> - <bounds x="0.07" y="0.57" width="0.86" height="0.86" /> + <bounds x="0.07" y="1.07" width="0.86" height="0.86" /> <color red="0.0" green="0.0" blue="0.0" /> </disk> </element> @@ -73,15 +77,26 @@ <!-- main buttons and leds --> + <bezel element="disk_red"><bounds x="1" y="3" width="2" height="2" /></bezel> + <bezel element="disk_red"><bounds x="1" y="7" width="2" height="2" /></bezel> <bezel element="static_red"><bounds x="1" y="4" width="2" height="4" /></bezel> + + <bezel element="disk_yellow"><bounds x="3" y="1" width="2" height="2" /></bezel> + <bezel element="disk_yellow"><bounds x="7" y="1" width="2" height="2" /></bezel> <bezel element="static_yellow"><bounds x="4" y="1" width="4" height="2" /></bezel> + + <bezel element="disk_orange"><bounds x="9" y="3" width="2" height="2" /></bezel> + <bezel element="disk_orange"><bounds x="9" y="7" width="2" height="2" /></bezel> <bezel element="static_orange"><bounds x="9" y="4" width="2" height="4" /></bezel> + + <bezel element="disk_green"><bounds x="3" y="9" width="2" height="2" /></bezel> + <bezel element="disk_green"><bounds x="7" y="9" width="2" height="2" /></bezel> <bezel element="static_green"><bounds x="4" y="9" width="4" height="2" /></bezel> - <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="4" width="2" height="4" /><color alpha="0.15" /></bezel> - <bezel element="hlh" inputtag="IN.0" inputmask="0x04"><bounds x="4" y="1" width="4" height="2" /><color alpha="0.15" /></bezel> - <bezel element="hlv" inputtag="IN.0" inputmask="0x01"><bounds x="9" y="4" width="2" height="4" /><color alpha="0.15" /></bezel> - <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="4" y="9" width="4" height="2" /><color alpha="0.15" /></bezel> + <bezel element="hlv" inputtag="IN.0" inputmask="0x02"><bounds x="1" y="3" width="2" height="6" /><color alpha="0.15" /></bezel> + <bezel element="hlh" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="1" width="6" height="2" /><color alpha="0.15" /></bezel> + <bezel element="hlv" inputtag="IN.0" inputmask="0x01"><bounds x="9" y="3" width="2" height="6" /><color alpha="0.15" /></bezel> + <bezel element="hlh" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="9" width="6" height="2" /><color alpha="0.15" /></bezel> <bezel name="0.3" element="ledg"><bounds x="5.75" y="8.25" width="0.5" height="0.5" /></bezel> <bezel name="0.1" element="ledr"><bounds x="3.25" y="5.75" width="0.5" height="0.5" /></bezel> diff --git a/src/mame/layout/ctstein.lay b/src/mame/layout/ctstein.lay index d86f5caa719..a38d1f9bcfe 100644 --- a/src/mame/layout/ctstein.lay +++ b/src/mame/layout/ctstein.lay @@ -3,6 +3,7 @@ <!-- 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.73" blue="0.7" /></rect></element> <element name="static_white2"><rect><color red="0.6" green="0.59" blue="0.57" /></rect></element> @@ -22,6 +23,43 @@ <rect><color red="0.6" green="0.59" blue="0.57" /></rect> <text string="GAME"><color red="0.0" green="0.0" blue="0.0" /></text> </element> + <element name="text_dif"> + <rect><color red="0.6" green="0.59" blue="0.57" /></rect> + <text string="DIFFICULTY"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_1"> + <rect><color red="0.6" green="0.59" blue="0.57" /></rect> + <text string="1"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_2"> + <rect><color red="0.6" green="0.59" blue="0.57" /></rect> + <text string="2"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_3"> + <rect><color red="0.6" green="0.59" blue="0.57" /></rect> + <text string="3"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_4"> + <rect><color red="0.6" green="0.59" blue="0.57" /></rect> + <text string="4"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + + <element name="switch1" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x0e"><color red="0.4" green="0.4" blue="0.4" /></disk> + </element> + <element name="switch2" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x0d"><color red="0.4" green="0.4" blue="0.4" /></disk> + </element> + <element name="switch3" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x0b"><color red="0.4" green="0.4" blue="0.4" /></disk> + </element> + <element name="switch4" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x07"><color red="0.4" green="0.4" blue="0.4" /></disk> + </element> <element name="lamp_r" defstate="0"> <rect state="0"><color red="0.5" green="0.15" blue="0.1" /></rect> @@ -95,5 +133,16 @@ <bezel element="text_game"><bounds x="25.8" y="18.5" width="3" height="0.75" /></bezel> <bezel element="button_r" inputtag="IN.1" inputmask="0x01"><bounds x="24" y="18" width="2" height="2" /></bezel> + <bezel element="text_dif"><bounds x="21.2" y="6.6" width="7.6" height="0.75" /></bezel> + <bezel element="static_black"><bounds x="23.5" y="7.5" width="3.0" height="0.7" /></bezel> + <bezel element="switch1" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="23.4" y="7.4" width="0.9" height="0.9" /></bezel> + <bezel element="switch2" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="24.166" y="7.4" width="0.9" height="0.9" /></bezel> + <bezel element="switch3" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="24.933" y="7.4" width="0.9" height="0.9" /></bezel> + <bezel element="switch4" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="25.7" y="7.4" width="0.9" height="0.9" /></bezel> + <bezel element="text_1"><bounds x="23.4" y="8.3" width="0.9" height="0.75" /></bezel> + <bezel element="text_2"><bounds x="24.166" y="8.3" width="0.9" height="0.75" /></bezel> + <bezel element="text_3"><bounds x="24.933" y="8.3" width="0.9" height="0.75" /></bezel> + <bezel element="text_4"><bounds x="25.7" y="8.3" width="0.9" height="0.75" /></bezel> + </view> </mamelayout> diff --git a/src/mame/layout/cxg_ch2001.lay b/src/mame/layout/cxg_ch2001.lay index d2bdb0dcb52..d1767a91f7a 100644 --- a/src/mame/layout/cxg_ch2001.lay +++ b/src/mame/layout/cxg_ch2001.lay @@ -115,27 +115,27 @@ <element name="text_p1"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="[K]"><color red="0.01" green="0.01" blue="0.01" /></text> </element> <element name="text_p2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="[Q]"><color red="0.01" green="0.01" blue="0.01" /></text> </element> <element name="text_p3"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="[R]"><color red="0.01" green="0.01" blue="0.01" /></text> </element> <element name="text_p4"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="[B]"><color red="0.01" green="0.01" blue="0.01" /></text> </element> <element name="text_p5"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="[N]"><color red="0.01" green="0.01" blue="0.01" /></text> </element> <element name="text_p6"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="[P]"><color red="0.01" green="0.01" blue="0.01" /></text> </element> <element name="text_b1"><text string="Set up"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -379,37 +379,43 @@ <bezel element="white"><bounds x="20.2" y="89.2" width="7.6" height="9" /></bezel> <bezel element="static_black"><bounds x="20.5" y="89.5" width="7" height="8.4" /></bezel> <bezel name="8.1" element="led2"><bounds x="23.25" y="90" width="1.5" height="1.5" /></bezel> - <bezel element="text_p1"><bounds x="21" y="91.8" width="6" height="2" /></bezel> + <bezel element="white"><bounds x="21" y="91.8" width="6" height="2" /></bezel> + <bezel element="text_p1"><bounds x="21" y="91.9" width="6" height="1.5" /></bezel> <bezel element="butr" inputtag="IN.8" inputmask="0x02"><bounds x="21" y="94.3" width="6" height="2" /></bezel> <bezel element="white"><bounds x="28.2" y="89.2" width="7.6" height="9" /></bezel> <bezel element="static_black"><bounds x="28.5" y="89.5" width="7" height="8.4" /></bezel> <bezel name="8.2" element="led2"><bounds x="31.25" y="90" width="1.5" height="1.5" /></bezel> - <bezel element="text_p2"><bounds x="29" y="91.8" width="6" height="2" /></bezel> + <bezel element="white"><bounds x="29" y="91.8" width="6" height="2" /></bezel> + <bezel element="text_p2"><bounds x="29" y="91.9" width="6" height="1.5" /></bezel> <bezel element="butr" inputtag="IN.8" inputmask="0x04"><bounds x="29" y="94.3" width="6" height="2" /></bezel> <bezel element="white"><bounds x="36.2" y="89.2" width="7.6" height="9" /></bezel> <bezel element="static_black"><bounds x="36.5" y="89.5" width="7" height="8.4" /></bezel> <bezel name="8.3" element="led2"><bounds x="39.25" y="90" width="1.5" height="1.5" /></bezel> - <bezel element="text_p3"><bounds x="37" y="91.8" width="6" height="2" /></bezel> + <bezel element="white"><bounds x="37" y="91.8" width="6" height="2" /></bezel> + <bezel element="text_p3"><bounds x="37" y="91.9" width="6" height="1.5" /></bezel> <bezel element="butr" inputtag="IN.8" inputmask="0x08"><bounds x="37" y="94.3" width="6" height="2" /></bezel> <bezel element="white"><bounds x="20.2" y="98.7" width="7.6" height="9" /></bezel> <bezel element="static_black"><bounds x="20.5" y="99" width="7" height="8.4" /></bezel> <bezel name="8.4" element="led2"><bounds x="23.25" y="99.5" width="1.5" height="1.5" /></bezel> - <bezel element="text_p4"><bounds x="21" y="101.3" width="6" height="2" /></bezel> + <bezel element="white"><bounds x="21" y="101.3" width="6" height="2" /></bezel> + <bezel element="text_p4"><bounds x="21" y="101.4" width="6" height="1.5" /></bezel> <bezel element="butr" inputtag="IN.8" inputmask="0x10"><bounds x="21" y="103.8" width="6" height="2" /></bezel> <bezel element="white"><bounds x="28.2" y="98.7" width="7.6" height="9" /></bezel> <bezel element="static_black"><bounds x="28.5" y="99" width="7" height="8.4" /></bezel> <bezel name="8.5" element="led2"><bounds x="31.25" y="99.5" width="1.5" height="1.5" /></bezel> - <bezel element="text_p5"><bounds x="29" y="101.3" width="6" height="2" /></bezel> + <bezel element="white"><bounds x="29" y="101.3" width="6" height="2" /></bezel> + <bezel element="text_p5"><bounds x="29" y="101.4" width="6" height="1.5" /></bezel> <bezel element="butr" inputtag="IN.8" inputmask="0x20"><bounds x="29" y="103.8" width="6" height="2" /></bezel> <bezel element="white"><bounds x="36.2" y="98.7" width="7.6" height="9" /></bezel> <bezel element="static_black"><bounds x="36.5" y="99" width="7" height="8.4" /></bezel> <bezel name="8.6" element="led2"><bounds x="39.25" y="99.5" width="1.5" height="1.5" /></bezel> - <bezel element="text_p6"><bounds x="37" y="101.3" width="6" height="2" /></bezel> + <bezel element="white"><bounds x="37" y="101.3" width="6" height="2" /></bezel> + <bezel element="text_p6"><bounds x="37" y="101.4" width="6" height="1.5" /></bezel> <bezel element="butr" inputtag="IN.8" inputmask="0x40"><bounds x="37" y="103.8" width="6" height="2" /></bezel> <bezel element="white"><bounds x="46.5" y="89.2" width="7" height="9" /></bezel> diff --git a/src/mame/layout/fidel_acr.lay b/src/mame/layout/fidel_acr.lay index 9c448b2ab6d..9deb9b09222 100644 --- a/src/mame/layout/fidel_acr.lay +++ b/src/mame/layout/fidel_acr.lay @@ -118,56 +118,56 @@ <!-- button panel --> - <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3" /></bezel> - <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3" /></bezel> - - <bezel element="text_b1"><bounds x="0.1" y="20.5" width="3.8" height="2" /></bezel> - <bezel element="text_b2"><bounds x="4.6" y="20.5" width="3.8" height="2" /></bezel> - <bezel element="text_b3"><bounds x="9.1" y="20.5" width="3.8" height="2" /></bezel> - <bezel element="text_b4"><bounds x="13.6" y="20.5" width="3.8" height="2" /></bezel> - <bezel element="text_b5"><bounds x="0.1" y="24.5" width="3.8" height="2" /></bezel> - <bezel element="text_b6"><bounds x="4.6" y="24.5" width="3.8" height="2" /></bezel> - <bezel element="text_b7"><bounds x="9.1" y="24.5" width="3.8" height="2" /></bezel> - <bezel element="text_b8"><bounds x="13.6" y="24.5" width="3.8" height="2" /></bezel> - <bezel element="text_b9"><bounds x="0.1" y="28.5" width="3.8" height="2" /></bezel> - <bezel element="text_b10"><bounds x="4.6" y="28.5" width="3.8" height="2" /></bezel> - <bezel element="text_b11"><bounds x="9.1" y="28.5" width="3.8" height="2" /></bezel> - <bezel element="text_b12"><bounds x="13.6" y="28.5" width="3.8" height="2" /></bezel> - <bezel element="text_b13"><bounds x="0.1" y="32.5" width="3.8" height="2" /></bezel> - <bezel element="text_b14"><bounds x="4.6" y="32.5" width="3.8" height="2" /></bezel> - <bezel element="text_b15"><bounds x="9.1" y="32.5" width="3.8" height="2" /></bezel> - <bezel element="text_b16"><bounds x="13.6" y="32.5" width="3.8" height="2" /></bezel> - - <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3" /><color alpha="0.2" /></bezel> - <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel> + <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3.5" /></bezel> + + <bezel element="text_b1"><bounds x="0.1" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b2"><bounds x="4.6" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b3"><bounds x="9.1" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b4"><bounds x="13.6" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b5"><bounds x="0.1" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b6"><bounds x="4.6" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b7"><bounds x="9.1" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b8"><bounds x="13.6" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b9"><bounds x="0.1" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b10"><bounds x="4.6" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b11"><bounds x="9.1" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b12"><bounds x="13.6" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b13"><bounds x="0.1" y="32.75" width="3.8" height="2" /></bezel> + <bezel element="text_b14"><bounds x="4.6" y="32.75" width="3.8" height="2" /></bezel> + <bezel element="text_b15"><bounds x="9.1" y="32.75" width="3.8" height="2" /></bezel> + <bezel element="text_b16"><bounds x="13.6" y="32.75" width="3.8" height="2" /></bezel> + + <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3.5" /><color alpha="0.2" /></bezel> </view> </mamelayout> diff --git a/src/mame/layout/fidel_as12.lay b/src/mame/layout/fidel_as12.lay index 4dc77023405..09bb2259205 100644 --- a/src/mame/layout/fidel_as12.lay +++ b/src/mame/layout/fidel_as12.lay @@ -96,12 +96,12 @@ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element> - <element name="text_l3"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l4"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l5"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l6"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l7"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l8"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l3"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l4"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l5"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l6"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l7"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l8"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r1"><text string="RE"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r2"><text string="CL"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -339,12 +339,12 @@ <!-- right side --> - <bezel element="text_l3"><bounds x="90.8" y="31.25" width="4" height="4" /></bezel> - <bezel element="text_l4"><bounds x="90.8" y="37.75" width="4" height="4" /></bezel> - <bezel element="text_l5"><bounds x="90.8" y="44.25" width="4" height="4" /></bezel> - <bezel element="text_l6"><bounds x="90.8" y="50.75" width="4" height="4" /></bezel> - <bezel element="text_l7"><bounds x="90.8" y="57.25" width="4" height="4" /></bezel> - <bezel element="text_l8"><bounds x="90.8" y="63.75" width="4" height="4" /></bezel> + <bezel element="text_l3"><bounds x="90.6" y="32.4" width="4" height="2" /></bezel> + <bezel element="text_l4"><bounds x="90.6" y="38.9" width="4" height="2" /></bezel> + <bezel element="text_l5"><bounds x="90.6" y="45.4" width="4" height="2" /></bezel> + <bezel element="text_l6"><bounds x="90.6" y="51.9" width="4" height="2" /></bezel> + <bezel element="text_l7"><bounds x="90.6" y="58.4" width="4" height="2" /></bezel> + <bezel element="text_l8"><bounds x="90.6" y="64.9" width="4" height="2" /></bezel> <bezel element="text_r1"><bounds x="93.25" y="19.0" width="4" height="2" /></bezel> <bezel element="text_r2"><bounds x="93.25" y="25.5" width="4" height="2" /></bezel> diff --git a/src/mame/layout/fidel_cc1.lay b/src/mame/layout/fidel_cc1.lay new file mode 100644 index 00000000000..718cbd3da8a --- /dev/null +++ b/src/mame/layout/fidel_cc1.lay @@ -0,0 +1,145 @@ +<?xml version="1.0"?> +<mamelayout version="2"> + +<!-- define elements --> + + <element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element> + + <element name="digit" defstate="0"> + <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg> + </element> + + <element name="led" defstate="0"> + <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> + <rect state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </rect> + </element> + + <element name="text_check"><text string="CHECK"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_lose"><text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_from"><text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_to"><text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text></element> + + <element name="text_b1"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="RE"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b2"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="DM"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b3"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="CL"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b4"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="EN"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b5"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="1A"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b6"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="2b"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b7"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="3C"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b8"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="4d"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b9"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="5E"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b10"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="6F"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b11"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="7g"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b12"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="8H"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + + +<!-- build screen --> + + <view name="Internal Layout"> + <bounds left="-0.5" right="18" top="7.7" bottom="32" /> + + <!-- 7segs/leds --> + + <bezel element="text_check"><bounds x="1" y="8.2" width="8" height="2" /></bezel> + <bezel element="text_lose"><bounds x="10.5" y="8.2" width="8" height="2" /></bezel> + <bezel name="4.a" element="led"><bounds x="0" y="8.5" width="1.5" height="1.5" /></bezel> + <bezel name="5.a" element="led"><bounds x="9.5" y="8.5" width="1.5" height="1.5" /></bezel> + + <bezel element="text_from"><bounds x="0" y="17.2" width="8" height="2" /></bezel> + <bezel element="text_to"><bounds x="9.5" y="17.2" width="8" height="2" /></bezel> + + <bezel name="digit0" element="digit"><bounds x="0" y="11" width="4" height="6" /></bezel> + <bezel name="digit1" element="digit"><bounds x="4" y="11" width="4" height="6" /></bezel> + <bezel name="digit2" element="digit"><bounds x="9.5" y="11" width="4" height="6" /></bezel> + <bezel name="digit3" element="digit"><bounds x="13.5" y="11" width="4" height="6" /></bezel> + + <!-- button panel --> + + <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3.5" /></bezel> + <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3.5" /></bezel> + + <bezel element="text_b1"><bounds x="0.1" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b2"><bounds x="4.6" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b3"><bounds x="9.1" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b4"><bounds x="13.6" y="20.75" width="3.8" height="2" /></bezel> + <bezel element="text_b5"><bounds x="0.1" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b6"><bounds x="4.6" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b7"><bounds x="9.1" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b8"><bounds x="13.6" y="24.75" width="3.8" height="2" /></bezel> + <bezel element="text_b9"><bounds x="0.1" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b10"><bounds x="4.6" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b11"><bounds x="9.1" y="28.75" width="3.8" height="2" /></bezel> + <bezel element="text_b12"><bounds x="13.6" y="28.75" width="3.8" height="2" /></bezel> + + <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="9" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="0" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="9" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="13.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="0" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="4.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="9" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="13.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></bezel> + + </view> +</mamelayout> diff --git a/src/mame/layout/fidel_chesster.lay b/src/mame/layout/fidel_chesster.lay index 1927d9d7e6a..28489afddd9 100644 --- a/src/mame/layout/fidel_chesster.lay +++ b/src/mame/layout/fidel_chesster.lay @@ -179,36 +179,36 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <!-- build screen --> <view name="Internal Layout"> - <bounds left="-7" right="93" top="-2" bottom="103" /> + <bounds left="-7" right="93" top="-2" bottom="102.5" /> - <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel> + <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel> <!-- chessboard coords --> @@ -388,12 +388,12 @@ <bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel> <bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel> - <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel> - <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel> - <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel> - <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel> + <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel> <bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel> <bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel> diff --git a/src/mame/layout/fidel_csc.lay b/src/mame/layout/fidel_csc.lay index cf28d647df5..31fa291eaa4 100644 --- a/src/mame/layout/fidel_csc.lay +++ b/src/mame/layout/fidel_csc.lay @@ -126,27 +126,27 @@ </element> <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tm"> @@ -419,12 +419,12 @@ <bezel element="text_re"><bounds x="88.2" y="15.2" width="5" height="3" /></bezel> <bezel element="text_cl"><bounds x="88.2" y="24" width="5" height="3" /></bezel> - <bezel element="text_king"><bounds x="88.2" y="32.1" width="5" height="4" /></bezel> - <bezel element="text_queen"><bounds x="88.2" y="40.9" width="5" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="88.2" y="49.7" width="5" height="4" /></bezel> - <bezel element="text_knight"><bounds x="88.2" y="58.5" width="5" height="4" /></bezel> - <bezel element="text_rook"><bounds x="88.2" y="67.3" width="5" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="88.2" y="76.1" width="5" height="4" /></bezel> + <bezel element="text_king"><bounds x="88.2" y="32.8" width="5" height="3" /></bezel> + <bezel element="text_queen"><bounds x="88.2" y="41.6" width="5" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="88.2" y="50.4" width="5" height="3" /></bezel> + <bezel element="text_knight"><bounds x="88.2" y="59.2" width="5" height="3" /></bezel> + <bezel element="text_rook"><bounds x="88.2" y="68" width="5" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="88.2" y="76.8" width="5" height="3" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> diff --git a/src/mame/layout/fidel_des.lay b/src/mame/layout/fidel_des.lay index 238b0b5562d..1fbe3d751d2 100644 --- a/src/mame/layout/fidel_des.lay +++ b/src/mame/layout/fidel_des.lay @@ -189,27 +189,27 @@ <element name="text_tl7"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tl6"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tl5"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tl4"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tl3"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tl2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -407,12 +407,12 @@ <bezel element="white"><bounds x="87.3" y="64.3" width="7.4" height="3.4" /></bezel> <bezel element="white"><bounds x="87.3" y="73.3" width="7.4" height="3.4" /></bezel> - <bezel element="text_tl7"><bounds x="87" y="11.6" width="6" height="3.5" /></bezel> - <bezel element="text_tl6"><bounds x="87" y="21.6" width="6" height="3.5" /></bezel> - <bezel element="text_tl5"><bounds x="87" y="31.6" width="6" height="3.5" /></bezel> - <bezel element="text_tl4"><bounds x="87" y="41.6" width="6" height="3.5" /></bezel> - <bezel element="text_tl3"><bounds x="87" y="51.6" width="6" height="3.5" /></bezel> - <bezel element="text_tl2"><bounds x="87" y="61.6" width="6" height="3.5" /></bezel> + <bezel element="text_tl7"><bounds x="87" y="12" width="6" height="2.5" /></bezel> + <bezel element="text_tl6"><bounds x="87" y="22" width="6" height="2.5" /></bezel> + <bezel element="text_tl5"><bounds x="87" y="32" width="6" height="2.5" /></bezel> + <bezel element="text_tl4"><bounds x="87" y="42" width="6" height="2.5" /></bezel> + <bezel element="text_tl3"><bounds x="87" y="52" width="6" height="2.5" /></bezel> + <bezel element="text_tl2"><bounds x="87" y="62" width="6" height="2.5" /></bezel> <bezel element="disk_black"><bounds x="87" y="5" width="6" height="6" /></bezel> <bezel element="disk_black"><bounds x="87" y="15" width="6" height="6" /></bezel> diff --git a/src/mame/layout/fidel_desdis.lay b/src/mame/layout/fidel_desdis.lay index 84b93b034fc..3ebeaaea932 100644 --- a/src/mame/layout/fidel_desdis.lay +++ b/src/mame/layout/fidel_desdis.lay @@ -191,36 +191,36 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <!-- build screen --> <view name="Internal Layout"> - <bounds left="-7" right="93" top="-2" bottom="103" /> + <bounds left="-7" right="93" top="-2" bottom="102.5" /> - <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel> + <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel> <!-- chessboard coords --> @@ -400,12 +400,12 @@ <bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel> <bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel> - <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel> - <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel> - <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel> - <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel> + <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel> <bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel> <bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel> diff --git a/src/mame/layout/fidel_desdis_68kg.lay b/src/mame/layout/fidel_desdis_68kg.lay index e3f2d8cdc9b..8929b48c261 100644 --- a/src/mame/layout/fidel_desdis_68kg.lay +++ b/src/mame/layout/fidel_desdis_68kg.lay @@ -195,36 +195,36 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <!-- build screen --> <view name="Internal Layout"> - <bounds left="-7" right="93" top="-2" bottom="103" /> + <bounds left="-7" right="93" top="-2" bottom="102.5" /> - <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel> + <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel> <!-- chessboard coords --> @@ -404,12 +404,12 @@ <bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel> <bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel> - <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel> - <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel> - <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel> - <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel> + <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel> <bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel> <bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel> diff --git a/src/mame/layout/fidel_desdis_68kr.lay b/src/mame/layout/fidel_desdis_68kr.lay index d07f864435a..7d1a93d8b0e 100644 --- a/src/mame/layout/fidel_desdis_68kr.lay +++ b/src/mame/layout/fidel_desdis_68kr.lay @@ -190,36 +190,36 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <!-- build screen --> <view name="Internal Layout"> - <bounds left="-7" right="93" top="-2" bottom="103" /> + <bounds left="-7" right="93" top="-2" bottom="102.5" /> - <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel> + <bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="105.5" /></bezel> <!-- chessboard coords --> @@ -399,12 +399,12 @@ <bezel element="text_u5"><bounds x="64" y="96.3" width="10" height="1.8" /></bezel> <bezel element="text_u6"><bounds x="73" y="96.3" width="10" height="1.8" /></bezel> - <bezel element="text_king"><bounds x="3" y="98" width="10" height="4" /></bezel> - <bezel element="text_queen"><bounds x="12" y="98" width="10" height="4" /></bezel> - <bezel element="text_rook"><bounds x="21" y="98" width="10" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="55" y="98" width="10" height="4" /></bezel> - <bezel element="text_knight"><bounds x="64" y="98" width="10" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="73" y="98" width="10" height="4" /></bezel> + <bezel element="text_king"><bounds x="3" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_queen"><bounds x="12" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_rook"><bounds x="21" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_bishop"><bounds x="55" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_knight"><bounds x="64" y="98.5" width="10" height="2.65" /></bezel> + <bezel element="text_pawn"><bounds x="73" y="98.5" width="10" height="2.65" /></bezel> <bezel element="disk_black"><bounds x="6" y="92" width="4" height="4" /></bezel> <bezel element="disk_black"><bounds x="15" y="92" width="4" height="4" /></bezel> diff --git a/src/mame/layout/fidel_eag.lay b/src/mame/layout/fidel_eag.lay index 1ed8c3879c8..7583ea36c32 100644 --- a/src/mame/layout/fidel_eag.lay +++ b/src/mame/layout/fidel_eag.lay @@ -111,12 +111,12 @@ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element> - <element name="text_r11"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r21"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r31"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r41"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r51"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r61"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r11"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r21"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r31"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r41"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r51"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r61"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r12"><text string="PB" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r22"><text string="PV" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -375,21 +375,21 @@ <!-- right side --> - <bezel element="text_r11"><bounds x="91.5" y="29.3" width="2.5" height="2" /></bezel> - <bezel element="text_r21"><bounds x="91.5" y="31.8" width="2.5" height="2" /></bezel> - <bezel element="text_r31"><bounds x="91.5" y="34.3" width="2.5" height="2" /></bezel> - <bezel element="text_r41"><bounds x="91.5" y="36.8" width="2.5" height="2" /></bezel> - <bezel element="text_r51"><bounds x="91.5" y="39.3" width="2.5" height="2" /></bezel> - <bezel element="text_r61"><bounds x="91.5" y="41.8" width="2.5" height="2" /></bezel> - - <bezel element="text_r12"><bounds x="96.8" y="29.75" width="10" height="1.5" /></bezel> - <bezel element="text_r22"><bounds x="96.8" y="32.25" width="10" height="1.5" /></bezel> - <bezel element="text_r32"><bounds x="96.8" y="34.75" width="10" height="1.5" /></bezel> - <bezel element="text_r42"><bounds x="96.8" y="37.25" width="10" height="1.5" /></bezel> - <bezel element="text_r52"><bounds x="96.8" y="39.75" width="10" height="1.5" /></bezel> - <bezel element="text_r62"><bounds x="96.8" y="42.25" width="10" height="1.5" /></bezel> - <bezel element="text_r72"><bounds x="96.8" y="44.75" width="10" height="1.5" /></bezel> - <bezel element="text_r82"><bounds x="96.8" y="47.25" width="10" height="1.5" /></bezel> + <bezel element="text_r11"><bounds x="91.6" y="29.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_r21"><bounds x="91.6" y="32.15" width="2.5" height="1.5" /></bezel> + <bezel element="text_r31"><bounds x="91.6" y="34.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_r41"><bounds x="91.6" y="37.15" width="2.5" height="1.5" /></bezel> + <bezel element="text_r51"><bounds x="91.6" y="39.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_r61"><bounds x="91.6" y="42.15" width="2.5" height="1.5" /></bezel> + + <bezel element="text_r12"><bounds x="96.8" y="29.65" width="10" height="1.5" /></bezel> + <bezel element="text_r22"><bounds x="96.8" y="32.15" width="10" height="1.5" /></bezel> + <bezel element="text_r32"><bounds x="96.8" y="34.65" width="10" height="1.5" /></bezel> + <bezel element="text_r42"><bounds x="96.8" y="37.15" width="10" height="1.5" /></bezel> + <bezel element="text_r52"><bounds x="96.8" y="39.65" width="10" height="1.5" /></bezel> + <bezel element="text_r62"><bounds x="96.8" y="42.15" width="10" height="1.5" /></bezel> + <bezel element="text_r72"><bounds x="96.8" y="44.65" width="10" height="1.5" /></bezel> + <bezel element="text_r82"><bounds x="96.8" y="47.15" width="10" height="1.5" /></bezel> <bezel element="text_r92"><bounds x="96.8" y="49.5" width="10" height="1.5" /></bezel> <bezel element="text_r93"><bounds x="96.8" y="51" width="10" height="1.5" /></bezel> @@ -411,8 +411,8 @@ <bezel element="bt" inputtag="IN.8" inputmask="0x01"><bounds x="94" y="47" width="2" height="2" /></bezel> <bezel element="bt" inputtag="IN.2" inputmask="0x100"><bounds x="94" y="49.5" width="2" height="2" /></bezel> - <bezel element="text_rx2"><bounds x="96.8" y="79.75" width="10" height="1.5" /></bezel> - <bezel element="text_ry2"><bounds x="96.8" y="82.25" width="10" height="1.5" /></bezel> + <bezel element="text_rx2"><bounds x="96.8" y="79.65" width="10" height="1.5" /></bezel> + <bezel element="text_ry2"><bounds x="96.8" y="82.15" width="10" height="1.5" /></bezel> <bezel element="text_rx1"><bounds x="88" y="78.75" width="6" height="1" /></bezel> <bezel element="text_ry1"><bounds x="88" y="81.25" width="5.5" height="1" /></bezel> diff --git a/src/mame/layout/fidel_eag_68k.lay b/src/mame/layout/fidel_eag_68k.lay index 938daaa40f4..6e3555b4e1a 100644 --- a/src/mame/layout/fidel_eag_68k.lay +++ b/src/mame/layout/fidel_eag_68k.lay @@ -111,12 +111,12 @@ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element> - <element name="text_r11"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r21"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r31"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r41"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r51"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r61"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r11"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r21"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r31"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r41"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r51"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r61"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r12"><text string="PB" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r22"><text string="PV" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -375,21 +375,21 @@ <!-- right side --> - <bezel element="text_r11"><bounds x="91.5" y="29.3" width="2.5" height="2" /></bezel> - <bezel element="text_r21"><bounds x="91.5" y="31.8" width="2.5" height="2" /></bezel> - <bezel element="text_r31"><bounds x="91.5" y="34.3" width="2.5" height="2" /></bezel> - <bezel element="text_r41"><bounds x="91.5" y="36.8" width="2.5" height="2" /></bezel> - <bezel element="text_r51"><bounds x="91.5" y="39.3" width="2.5" height="2" /></bezel> - <bezel element="text_r61"><bounds x="91.5" y="41.8" width="2.5" height="2" /></bezel> - - <bezel element="text_r12"><bounds x="96.8" y="29.75" width="10" height="1.5" /></bezel> - <bezel element="text_r22"><bounds x="96.8" y="32.25" width="10" height="1.5" /></bezel> - <bezel element="text_r32"><bounds x="96.8" y="34.75" width="10" height="1.5" /></bezel> - <bezel element="text_r42"><bounds x="96.8" y="37.25" width="10" height="1.5" /></bezel> - <bezel element="text_r52"><bounds x="96.8" y="39.75" width="10" height="1.5" /></bezel> - <bezel element="text_r62"><bounds x="96.8" y="42.25" width="10" height="1.5" /></bezel> - <bezel element="text_r72"><bounds x="96.8" y="44.75" width="10" height="1.5" /></bezel> - <bezel element="text_r82"><bounds x="96.8" y="47.25" width="10" height="1.5" /></bezel> + <bezel element="text_r11"><bounds x="91.6" y="29.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_r21"><bounds x="91.6" y="32.15" width="2.5" height="1.5" /></bezel> + <bezel element="text_r31"><bounds x="91.6" y="34.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_r41"><bounds x="91.6" y="37.15" width="2.5" height="1.5" /></bezel> + <bezel element="text_r51"><bounds x="91.6" y="39.65" width="2.5" height="1.5" /></bezel> + <bezel element="text_r61"><bounds x="91.6" y="42.15" width="2.5" height="1.5" /></bezel> + + <bezel element="text_r12"><bounds x="96.8" y="29.65" width="10" height="1.5" /></bezel> + <bezel element="text_r22"><bounds x="96.8" y="32.15" width="10" height="1.5" /></bezel> + <bezel element="text_r32"><bounds x="96.8" y="34.65" width="10" height="1.5" /></bezel> + <bezel element="text_r42"><bounds x="96.8" y="37.15" width="10" height="1.5" /></bezel> + <bezel element="text_r52"><bounds x="96.8" y="39.65" width="10" height="1.5" /></bezel> + <bezel element="text_r62"><bounds x="96.8" y="42.15" width="10" height="1.5" /></bezel> + <bezel element="text_r72"><bounds x="96.8" y="44.65" width="10" height="1.5" /></bezel> + <bezel element="text_r82"><bounds x="96.8" y="47.15" width="10" height="1.5" /></bezel> <bezel element="text_r92"><bounds x="96.8" y="49.5" width="10" height="1.5" /></bezel> <bezel element="text_r93"><bounds x="96.8" y="51" width="10" height="1.5" /></bezel> @@ -411,8 +411,8 @@ <bezel element="bt" inputtag="IN.8" inputmask="0x80"><bounds x="94" y="47" width="2" height="2" /></bezel> <bezel element="bt" inputtag="IN.2" inputmask="0x100"><bounds x="94" y="49.5" width="2" height="2" /></bezel> - <bezel element="text_rx2"><bounds x="96.8" y="79.75" width="10" height="1.5" /></bezel> - <bezel element="text_ry2"><bounds x="96.8" y="82.25" width="10" height="1.5" /></bezel> + <bezel element="text_rx2"><bounds x="96.8" y="79.65" width="10" height="1.5" /></bezel> + <bezel element="text_ry2"><bounds x="96.8" y="82.15" width="10" height="1.5" /></bezel> <bezel element="text_rx1"><bounds x="88" y="78.75" width="6" height="1" /></bezel> <bezel element="text_ry1"><bounds x="88" y="81.25" width="5.5" height="1" /></bezel> diff --git a/src/mame/layout/fidel_eas.lay b/src/mame/layout/fidel_eas.lay index 57bc6dc6f89..ed98c3a7675 100644 --- a/src/mame/layout/fidel_eas.lay +++ b/src/mame/layout/fidel_eas.lay @@ -102,12 +102,12 @@ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element> - <element name="text_p1"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p2"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p3"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p4"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p5"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p6"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p1"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p2"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p3"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p4"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p5"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p6"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_b1"><text string="GAME"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_b1a"><text string="CONTROL"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -373,12 +373,12 @@ <bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="65.1" y="94" width="1.5" height="1.5" /></bezel> <bezel element="but" inputtag="IN.2" inputmask="0x100"><bounds x="68.1" y="94" width="1.5" height="1.5" /></bezel> - <bezel element="text_p1"><bounds x="41" y="91.3" width="3.5" height="2.6" /></bezel> - <bezel element="text_p2"><bounds x="44" y="91.3" width="3.5" height="2.6" /></bezel> - <bezel element="text_p3"><bounds x="47" y="91.3" width="3.5" height="2.6" /></bezel> - <bezel element="text_p4"><bounds x="50" y="91.3" width="3.5" height="2.6" /></bezel> - <bezel element="text_p5"><bounds x="53" y="91.3" width="3.5" height="2.6" /></bezel> - <bezel element="text_p6"><bounds x="56" y="91.3" width="3.5" height="2.6" /></bezel> + <bezel element="text_p1"><bounds x="41" y="92.1" width="3.5" height="1.5" /></bezel> + <bezel element="text_p2"><bounds x="44" y="92.1" width="3.5" height="1.5" /></bezel> + <bezel element="text_p3"><bounds x="47" y="92.1" width="3.5" height="1.5" /></bezel> + <bezel element="text_p4"><bounds x="50" y="92.1" width="3.5" height="1.5" /></bezel> + <bezel element="text_p5"><bounds x="53" y="92.1" width="3.5" height="1.5" /></bezel> + <bezel element="text_p6"><bounds x="56" y="92.1" width="3.5" height="1.5" /></bezel> <bezel element="text_b1"><bounds x="30.9" y="95.8" width="7.5" height="1.5" /></bezel> <bezel element="text_b1a"><bounds x="30.9" y="97.3" width="7.5" height="1.5" /></bezel> diff --git a/src/mame/layout/fidel_eas_priv.lay b/src/mame/layout/fidel_eas_priv.lay index bef26febedf..7d67442371f 100644 --- a/src/mame/layout/fidel_eas_priv.lay +++ b/src/mame/layout/fidel_eas_priv.lay @@ -55,12 +55,12 @@ <element name="text_g"><text string="G"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_h"><text string="H"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p1"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p2"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p3"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p4"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p5"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_p6"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p1"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p2"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p3"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p4"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p5"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_p6"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_b1"><text string="GAME"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_b1a"><text string="CONTROL"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -388,16 +388,16 @@ <bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="122.1" y="66.7" width="1.5" height="1.5" /></bezel> <bezel element="but" inputtag="IN.2" inputmask="0x100"><bounds x="125.1" y="66.7" width="1.5" height="1.5" /></bezel> - <bezel element="text_p1"><bounds x="100.1" y="64" width="3.5" height="2.6" /></bezel> - <bezel element="text_p2"><bounds x="103.1" y="64" width="3.5" height="2.6" /></bezel> - <bezel element="text_p3"><bounds x="106.1" y="64" width="3.5" height="2.6" /></bezel> - <bezel element="text_p4"><bounds x="109.1" y="64" width="3.5" height="2.6" /></bezel> - <bezel element="text_p5"><bounds x="112.1" y="64" width="3.5" height="2.6" /></bezel> - <bezel element="text_p6"><bounds x="115.1" y="64" width="3.5" height="2.6" /></bezel> + <bezel element="text_p1"><bounds x="100.1" y="64.5" width="3.5" height="1.5" /></bezel> + <bezel element="text_p2"><bounds x="103.1" y="64.5" width="3.5" height="1.5" /></bezel> + <bezel element="text_p3"><bounds x="106.1" y="64.5" width="3.5" height="1.5" /></bezel> + <bezel element="text_p4"><bounds x="109.1" y="64.5" width="3.5" height="1.5" /></bezel> + <bezel element="text_p5"><bounds x="112.1" y="64.5" width="3.5" height="1.5" /></bezel> + <bezel element="text_p6"><bounds x="115.1" y="64.5" width="3.5" height="1.5" /></bezel> <bezel element="text_b1"><bounds x="90" y="68.5" width="7.5" height="1.5" /></bezel> <bezel element="text_b1a"><bounds x="90" y="70" width="7.5" height="1.5" /></bezel> - <bezel element="text_b2"><bounds x="93" y="65" width="7.5" height="1.5" /></bezel> + <bezel element="text_b2"><bounds x="93" y="64.6" width="7.5" height="1.5" /></bezel> <bezel element="text_b3"><bounds x="100.1" y="68.5" width="3.5" height="1.5" /></bezel> <bezel element="text_b4"><bounds x="103.1" y="68.5" width="3.5" height="1.5" /></bezel> diff --git a/src/mame/layout/fidel_ex.lay b/src/mame/layout/fidel_ex.lay index db62eda88ba..53ed6b53cee 100644 --- a/src/mame/layout/fidel_ex.lay +++ b/src/mame/layout/fidel_ex.lay @@ -192,27 +192,27 @@ <element name="text_tl7"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♚"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[K]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl6"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♛"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[Q]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl5"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♜"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[R]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl4"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♝"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[B]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl3"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♞"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[N]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl2"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♟"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[P]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> @@ -403,12 +403,12 @@ <bezel element="black"><bounds x="86" y="2" width="10" height="82" /></bezel> - <bezel element="text_tl7"><bounds x="87" y="16" width="8" height="3" /></bezel> - <bezel element="text_tl6"><bounds x="87" y="25" width="8" height="3" /></bezel> - <bezel element="text_tl5"><bounds x="87" y="34" width="8" height="3" /></bezel> - <bezel element="text_tl4"><bounds x="87" y="43" width="8" height="3" /></bezel> - <bezel element="text_tl3"><bounds x="87" y="52" width="8" height="3" /></bezel> - <bezel element="text_tl2"><bounds x="87" y="61" width="8" height="3" /></bezel> + <bezel element="text_tl7"><bounds x="87" y="16.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl6"><bounds x="87" y="25.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl5"><bounds x="87" y="34.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl4"><bounds x="87" y="43.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl3"><bounds x="87" y="52.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl2"><bounds x="87" y="61.2" width="8" height="2.5" /></bezel> <bezel element="redb"><bounds x="87" y="9" width="8" height="4" /></bezel> <bezel element="redb"><bounds x="87" y="19" width="8" height="4" /></bezel> diff --git a/src/mame/layout/fidel_ex_68k.lay b/src/mame/layout/fidel_ex_68k.lay index 5429357f828..741ee8e6912 100644 --- a/src/mame/layout/fidel_ex_68k.lay +++ b/src/mame/layout/fidel_ex_68k.lay @@ -192,27 +192,27 @@ <element name="text_tl7"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♚"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[K]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl6"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♛"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[Q]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl5"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♜"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[R]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl4"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♝"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[B]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl3"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♞"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[N]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl2"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♟"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[P]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> @@ -479,12 +479,12 @@ <bezel element="black"><bounds x="86" y="2" width="10" height="82" /></bezel> - <bezel element="text_tl7"><bounds x="87" y="16" width="8" height="3" /></bezel> - <bezel element="text_tl6"><bounds x="87" y="25" width="8" height="3" /></bezel> - <bezel element="text_tl5"><bounds x="87" y="34" width="8" height="3" /></bezel> - <bezel element="text_tl4"><bounds x="87" y="43" width="8" height="3" /></bezel> - <bezel element="text_tl3"><bounds x="87" y="52" width="8" height="3" /></bezel> - <bezel element="text_tl2"><bounds x="87" y="61" width="8" height="3" /></bezel> + <bezel element="text_tl7"><bounds x="87" y="16.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl6"><bounds x="87" y="25.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl5"><bounds x="87" y="34.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl4"><bounds x="87" y="43.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl3"><bounds x="87" y="52.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl2"><bounds x="87" y="61.2" width="8" height="2.5" /></bezel> <bezel element="redb"><bounds x="87" y="9" width="8" height="4" /></bezel> <bezel element="redb"><bounds x="87" y="19" width="8" height="4" /></bezel> diff --git a/src/mame/layout/fidel_exd.lay b/src/mame/layout/fidel_exd.lay index e72cf5b9490..88b7dede003 100644 --- a/src/mame/layout/fidel_exd.lay +++ b/src/mame/layout/fidel_exd.lay @@ -196,27 +196,27 @@ <element name="text_tl7"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♚"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[K]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl6"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♛"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[Q]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl5"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♜"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[R]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl4"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♝"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[B]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl3"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♞"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[N]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> <element name="text_tl2"> <rect><color red="0.17" green="0.15" blue="0.15" /></rect> - <text string="♟"><color red="0.65" green="0.15" blue="0.14" /></text> + <text string="[P]"><color red="0.65" green="0.15" blue="0.14" /></text> </element> @@ -429,12 +429,12 @@ <bezel element="black"><bounds x="86" y="2" width="10" height="82" /></bezel> - <bezel element="text_tl7"><bounds x="87" y="16" width="8" height="3" /></bezel> - <bezel element="text_tl6"><bounds x="87" y="25" width="8" height="3" /></bezel> - <bezel element="text_tl5"><bounds x="87" y="34" width="8" height="3" /></bezel> - <bezel element="text_tl4"><bounds x="87" y="43" width="8" height="3" /></bezel> - <bezel element="text_tl3"><bounds x="87" y="52" width="8" height="3" /></bezel> - <bezel element="text_tl2"><bounds x="87" y="61" width="8" height="3" /></bezel> + <bezel element="text_tl7"><bounds x="87" y="16.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl6"><bounds x="87" y="25.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl5"><bounds x="87" y="34.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl4"><bounds x="87" y="43.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl3"><bounds x="87" y="52.2" width="8" height="2.5" /></bezel> + <bezel element="text_tl2"><bounds x="87" y="61.2" width="8" height="2.5" /></bezel> <bezel element="redb"><bounds x="87" y="9" width="8" height="4" /></bezel> <bezel element="redb"><bounds x="87" y="19" width="8" height="4" /></bezel> diff --git a/src/mame/layout/fidel_pc.lay b/src/mame/layout/fidel_pc.lay index 5750625e5c2..aab54f67632 100644 --- a/src/mame/layout/fidel_pc.lay +++ b/src/mame/layout/fidel_pc.lay @@ -107,12 +107,12 @@ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element> - <element name="text_r11"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r21"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r31"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r41"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r51"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_r61"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r11"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r21"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r31"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r41"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r51"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_r61"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r12"><text string="RESET" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r22"><text string="spk" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -362,27 +362,27 @@ <!-- right side --> - <bezel element="text_r11"><bounds x="91.5" y="15.6" width="3" height="2.5" /></bezel> - <bezel element="text_r21"><bounds x="91.5" y="18.6" width="3" height="2.5" /></bezel> - <bezel element="text_r31"><bounds x="91.5" y="21.6" width="3" height="2.5" /></bezel> - <bezel element="text_r41"><bounds x="91.5" y="24.6" width="3" height="2.5" /></bezel> - <bezel element="text_r51"><bounds x="91.5" y="27.6" width="3" height="2.5" /></bezel> - <bezel element="text_r61"><bounds x="91.5" y="30.6" width="3" height="2.5" /></bezel> - - <bezel element="text_r12"><bounds x="96.8" y="8.25" width="10" height="1.5" /></bezel> - <bezel element="text_r22"><bounds x="96.8" y="11.25" width="10" height="1.5" /></bezel> - <bezel element="text_r32"><bounds x="96.8" y="16.25" width="10" height="1.5" /></bezel> - <bezel element="text_r42"><bounds x="96.8" y="19.25" width="10" height="1.5" /></bezel> - <bezel element="text_r52"><bounds x="96.8" y="22.25" width="10" height="1.5" /></bezel> - <bezel element="text_r62"><bounds x="96.8" y="25.25" width="10" height="1.5" /></bezel> - <bezel element="text_r72"><bounds x="96.8" y="28.25" width="10" height="1.5" /></bezel> - <bezel element="text_r82"><bounds x="96.8" y="31.25" width="10" height="1.5" /></bezel> - <bezel element="text_r92"><bounds x="96.8" y="36.25" width="10" height="1.5" /></bezel> - <bezel element="text_ra2"><bounds x="96.8" y="39.25" width="10" height="1.5" /></bezel> - <bezel element="text_rb2"><bounds x="96.8" y="42.25" width="10" height="1.5" /></bezel> - - <bezel element="text_r13"><bounds x="92.5" y="47.25" width="10" height="1.5" /></bezel> - <bezel element="text_r23"><bounds x="92.5" y="50.25" width="10" height="1.5" /></bezel> + <bezel element="text_r11"><bounds x="91.5" y="16.15" width="3" height="1.5" /></bezel> + <bezel element="text_r21"><bounds x="91.5" y="19.15" width="3" height="1.5" /></bezel> + <bezel element="text_r31"><bounds x="91.5" y="22.15" width="3" height="1.5" /></bezel> + <bezel element="text_r41"><bounds x="91.5" y="25.15" width="3" height="1.5" /></bezel> + <bezel element="text_r51"><bounds x="91.5" y="28.15" width="3" height="1.5" /></bezel> + <bezel element="text_r61"><bounds x="91.5" y="31.15" width="3" height="1.5" /></bezel> + + <bezel element="text_r12"><bounds x="96.8" y="8.15" width="10" height="1.5" /></bezel> + <bezel element="text_r22"><bounds x="96.8" y="11.15" width="10" height="1.5" /></bezel> + <bezel element="text_r32"><bounds x="96.8" y="16.15" width="10" height="1.5" /></bezel> + <bezel element="text_r42"><bounds x="96.8" y="19.15" width="10" height="1.5" /></bezel> + <bezel element="text_r52"><bounds x="96.8" y="22.15" width="10" height="1.5" /></bezel> + <bezel element="text_r62"><bounds x="96.8" y="25.15" width="10" height="1.5" /></bezel> + <bezel element="text_r72"><bounds x="96.8" y="28.15" width="10" height="1.5" /></bezel> + <bezel element="text_r82"><bounds x="96.8" y="31.15" width="10" height="1.5" /></bezel> + <bezel element="text_r92"><bounds x="96.8" y="36.15" width="10" height="1.5" /></bezel> + <bezel element="text_ra2"><bounds x="96.8" y="39.15" width="10" height="1.5" /></bezel> + <bezel element="text_rb2"><bounds x="96.8" y="42.15" width="10" height="1.5" /></bezel> + + <bezel element="text_r13"><bounds x="92.5" y="47.15" width="10" height="1.5" /></bezel> + <bezel element="text_r23"><bounds x="92.5" y="50.15" width="10" height="1.5" /></bezel> <bezel name="8.8" element="led2"><bounds x="90" y="16.25" width="1.5" height="1.5" /></bezel> <bezel name="8.9" element="led2"><bounds x="90" y="19.25" width="1.5" height="1.5" /></bezel> diff --git a/src/mame/layout/fidel_playmatic.lay b/src/mame/layout/fidel_playmatic.lay index 9834870d937..907a4dbab03 100644 --- a/src/mame/layout/fidel_playmatic.lay +++ b/src/mame/layout/fidel_playmatic.lay @@ -96,12 +96,12 @@ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element> - <element name="text_l3"><text string="♔"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l4"><text string="♕"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l5"><text string="♖"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l6"><text string="♗"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l7"><text string="♘"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_l8"><text string="♙"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l3"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l4"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l5"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l6"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l7"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_l8"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r1"><text string="RE"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_r2"><text string="CL"><color red="0.81" green="0.8" blue="0.79" /></text></element> @@ -337,12 +337,12 @@ <!-- not included here: 2 on/off switches for power and module enable, each with green led when on --> - <bezel element="text_l3"><bounds x="88.25" y="39.75" width="4" height="4" /></bezel> - <bezel element="text_l4"><bounds x="88.25" y="43.75" width="4" height="4" /></bezel> - <bezel element="text_l5"><bounds x="88.25" y="47.75" width="4" height="4" /></bezel> - <bezel element="text_l6"><bounds x="88.25" y="51.75" width="4" height="4" /></bezel> - <bezel element="text_l7"><bounds x="88.25" y="55.75" width="4" height="4" /></bezel> - <bezel element="text_l8"><bounds x="88.25" y="59.75" width="4" height="4" /></bezel> + <bezel element="text_l3"><bounds x="88" y="41" width="4" height="2" /></bezel> + <bezel element="text_l4"><bounds x="88" y="45" width="4" height="2" /></bezel> + <bezel element="text_l5"><bounds x="88" y="49" width="4" height="2" /></bezel> + <bezel element="text_l6"><bounds x="88" y="53" width="4" height="2" /></bezel> + <bezel element="text_l7"><bounds x="88" y="57" width="4" height="2" /></bezel> + <bezel element="text_l8"><bounds x="88" y="61" width="4" height="2" /></bezel> <bezel element="text_r1"><bounds x="93.25" y="33" width="4" height="2" /></bezel> <bezel element="text_r2"><bounds x="93.25" y="37" width="4" height="2" /></bezel> diff --git a/src/mame/layout/fidel_sc12.lay b/src/mame/layout/fidel_sc12.lay index 69fc90284a5..80631d7d880 100644 --- a/src/mame/layout/fidel_sc12.lay +++ b/src/mame/layout/fidel_sc12.lay @@ -233,27 +233,27 @@ <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♔"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♕"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♖"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♗"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♘"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♙"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -479,12 +479,12 @@ <!-- right side --> - <bezel element="text_king"><bounds x="87.7" y="20.6" width="4.6" height="4" /></bezel> - <bezel element="text_queen"><bounds x="87.7" y="29.9" width="4.6" height="4" /></bezel> - <bezel element="text_rook"><bounds x="87.7" y="39.2" width="4.6" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="87.7" y="48.5" width="4.6" height="4" /></bezel> - <bezel element="text_knight"><bounds x="87.7" y="57.8" width="4.6" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="87.7" y="67.1" width="4.6" height="4" /></bezel> + <bezel element="text_king"><bounds x="87.7" y="21.4" width="4.6" height="2.5" /></bezel> + <bezel element="text_queen"><bounds x="87.7" y="30.7" width="4.6" height="2.5" /></bezel> + <bezel element="text_rook"><bounds x="87.7" y="40.0" width="4.6" height="2.5" /></bezel> + <bezel element="text_bishop"><bounds x="87.7" y="49.3" width="4.6" height="2.5" /></bezel> + <bezel element="text_knight"><bounds x="87.7" y="58.6" width="4.6" height="2.5" /></bezel> + <bezel element="text_pawn"><bounds x="87.7" y="67.9" width="4.6" height="2.5" /></bezel> <bezel element="disk_black"><bounds x="87" y="3.1" width="6" height="6" /></bezel> <bezel element="disk_black"><bounds x="87" y="12.4" width="6" height="6" /></bezel> diff --git a/src/mame/layout/fidel_sc6.lay b/src/mame/layout/fidel_sc6.lay index f3cbcd49389..d64dce25d7c 100644 --- a/src/mame/layout/fidel_sc6.lay +++ b/src/mame/layout/fidel_sc6.lay @@ -134,27 +134,27 @@ <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♔"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♕"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♖"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♗"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♘"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♙"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -306,12 +306,12 @@ <!-- right side --> - <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel> - <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel> - <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel> - <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel> - <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel> - <bezel element="text_pawn"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel> + <bezel element="text_king"><bounds x="84.01" y="32.8" width="5.5" height="3" /></bezel> + <bezel element="text_queen"><bounds x="84.01" y="41.6" width="5.5" height="3" /></bezel> + <bezel element="text_rook"><bounds x="84.01" y="50.4" width="5.5" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="84.01" y="59.2" width="5.5" height="3" /></bezel> + <bezel element="text_knight"><bounds x="84.01" y="68" width="5.5" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="84.01" y="76.8" width="5.5" height="3" /></bezel> <bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel> <bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel> diff --git a/src/mame/layout/fidel_sc8.lay b/src/mame/layout/fidel_sc8.lay index bb624815da6..a7ba743dbc4 100644 --- a/src/mame/layout/fidel_sc8.lay +++ b/src/mame/layout/fidel_sc8.lay @@ -110,27 +110,27 @@ </element> <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -378,12 +378,12 @@ <bezel element="text_re"><bounds x="88.2" y="15.2" width="5" height="3" /></bezel> <bezel element="text_cl"><bounds x="88.2" y="24" width="5" height="3" /></bezel> - <bezel element="text_king"><bounds x="88.2" y="32.1" width="5" height="4" /></bezel> - <bezel element="text_queen"><bounds x="88.2" y="40.9" width="5" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="88.2" y="49.7" width="5" height="4" /></bezel> - <bezel element="text_knight"><bounds x="88.2" y="58.5" width="5" height="4" /></bezel> - <bezel element="text_rook"><bounds x="88.2" y="67.3" width="5" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="88.2" y="76.1" width="5" height="4" /></bezel> + <bezel element="text_king"><bounds x="88.2" y="32.8" width="5" height="3" /></bezel> + <bezel element="text_queen"><bounds x="88.2" y="41.6" width="5" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="88.2" y="50.4" width="5" height="3" /></bezel> + <bezel element="text_knight"><bounds x="88.2" y="59.2" width="5" height="3" /></bezel> + <bezel element="text_rook"><bounds x="88.2" y="68" width="5" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="88.2" y="76.8" width="5" height="3" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> diff --git a/src/mame/layout/fidel_sc9.lay b/src/mame/layout/fidel_sc9.lay index b3685ea7e91..fef85f4013c 100644 --- a/src/mame/layout/fidel_sc9.lay +++ b/src/mame/layout/fidel_sc9.lay @@ -137,27 +137,27 @@ <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♔"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♕"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♖"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♗"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♘"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♙"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> @@ -385,12 +385,12 @@ <bezel name="8.7" element="led"><bounds x="91.95" y="7.25" width="1.5" height="1.5" /></bezel> - <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel> - <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel> - <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel> - <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel> - <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel> - <bezel element="text_pawn"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel> + <bezel element="text_king"><bounds x="84.01" y="32.8" width="5.7" height="3" /></bezel> + <bezel element="text_queen"><bounds x="84.01" y="41.6" width="5.7" height="3" /></bezel> + <bezel element="text_rook"><bounds x="84.01" y="50.4" width="5.7" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="84.01" y="59.2" width="5.7" height="3" /></bezel> + <bezel element="text_knight"><bounds x="84.01" y="68" width="5.7" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="84.01" y="76.8" width="5.7" height="3" /></bezel> <bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel> <bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel> diff --git a/src/mame/layout/fidel_su9.lay b/src/mame/layout/fidel_su9.lay index 043cdf1f704..e722afc8d17 100644 --- a/src/mame/layout/fidel_su9.lay +++ b/src/mame/layout/fidel_su9.lay @@ -151,27 +151,27 @@ <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♔"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♕"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♖"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♗"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♘"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♙"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tmp"> @@ -424,12 +424,12 @@ <bezel name="0.7" element="led"><bounds x="91.95" y="7.25" width="1.5" height="1.5" /></bezel> - <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel> - <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel> - <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel> - <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel> - <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel> - <bezel element="text_pawn"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel> + <bezel element="text_king"><bounds x="84.01" y="32.8" width="5.7" height="3" /></bezel> + <bezel element="text_queen"><bounds x="84.01" y="41.6" width="5.7" height="3" /></bezel> + <bezel element="text_rook"><bounds x="84.01" y="50.4" width="5.7" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="84.01" y="59.2" width="5.7" height="3" /></bezel> + <bezel element="text_knight"><bounds x="84.01" y="68" width="5.7" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="84.01" y="76.8" width="5.7" height="3" /></bezel> <bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel> <bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel> diff --git a/src/mame/layout/fidel_vsc.lay b/src/mame/layout/fidel_vsc.lay index cc112db62f3..24ad2352d88 100644 --- a/src/mame/layout/fidel_vsc.lay +++ b/src/mame/layout/fidel_vsc.lay @@ -124,27 +124,27 @@ </element> <element name="text_king"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♚"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[K]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_queen"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♛"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[Q]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_rook"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♜"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[R]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_bishop"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♝"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[B]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_knight"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♞"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[N]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_pawn"> <disk><color red="0.81" green="0.8" blue="0.79" /></disk> - <text string="♟"><color red="0.17" green="0.15" blue="0.15" /></text> + <text string="[P]"><color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_tm"> @@ -417,12 +417,12 @@ <bezel element="text_re"><bounds x="88.2" y="15.2" width="5" height="3" /></bezel> <bezel element="text_cl"><bounds x="88.2" y="24" width="5" height="3" /></bezel> - <bezel element="text_king"><bounds x="88.2" y="32.1" width="5" height="4" /></bezel> - <bezel element="text_queen"><bounds x="88.2" y="40.9" width="5" height="4" /></bezel> - <bezel element="text_bishop"><bounds x="88.2" y="49.7" width="5" height="4" /></bezel> - <bezel element="text_knight"><bounds x="88.2" y="58.5" width="5" height="4" /></bezel> - <bezel element="text_rook"><bounds x="88.2" y="67.3" width="5" height="4" /></bezel> - <bezel element="text_pawn"><bounds x="88.2" y="76.1" width="5" height="4" /></bezel> + <bezel element="text_king"><bounds x="88.2" y="32.8" width="5" height="3" /></bezel> + <bezel element="text_queen"><bounds x="88.2" y="41.6" width="5" height="3" /></bezel> + <bezel element="text_bishop"><bounds x="88.2" y="50.4" width="5" height="3" /></bezel> + <bezel element="text_knight"><bounds x="88.2" y="59.2" width="5" height="3" /></bezel> + <bezel element="text_rook"><bounds x="88.2" y="68" width="5" height="3" /></bezel> + <bezel element="text_pawn"><bounds x="88.2" y="76.8" width="5" height="3" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> diff --git a/src/mame/layout/ltcasinn.lay b/src/mame/layout/ltcasinn.lay new file mode 100644 index 00000000000..1312ce35425 --- /dev/null +++ b/src/mame/layout/ltcasinn.lay @@ -0,0 +1,43 @@ +<?xml version="1.0"?> + +<!-- +license: CC0 +copyright-holders: Dirk Best +Simple layout for Little Casino (color) and clones +--> + +<mamelayout version="2"> + <element name="background"> + </element> + <element name="button" defstate="0"> + <rect state="0"> + <color red="0.2" green="0.2" blue="0.2" /> + </rect> + <rect state="1"> + <color red="0.8" green="0.8" blue="0.8" /> + </rect> + </element> + <view name="Buttons"> + <backdrop element="background"> + <bounds x="0" y="0" width="640" height="580" /> + </backdrop> + <screen index="0"> + <bounds left="0" top="0" right="640" bottom="480" /> + </screen> + <cpanel name="button_0" element="button" inputtag="Q" inputmask="0x01"> + <bounds x="80" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_1" element="button" inputtag="Q" inputmask="0x02"> + <bounds x="180" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_2" element="button" inputtag="Q" inputmask="0x04"> + <bounds x="280" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_3" element="button" inputtag="Q" inputmask="0x08"> + <bounds x="380" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_4" element="button" inputtag="Q" inputmask="0x10"> + <bounds x="480" y="505" width="70" height="35" /> + </cpanel> + </view> +</mamelayout> diff --git a/src/mame/layout/ltcasino.lay b/src/mame/layout/ltcasino.lay new file mode 100644 index 00000000000..6e0c12e72c8 --- /dev/null +++ b/src/mame/layout/ltcasino.lay @@ -0,0 +1,64 @@ +<?xml version="1.0"?> + +<!-- +license: CC0 +copyright-holders: Dirk Best +Simple layout for Little Casino (monochrome) +--> + +<mamelayout version="2"> + <element name="background"> + </element> + <element name="overlay"> + <rect> + <bounds left="0" top="0" right="640" bottom="70" /> + <color red="0.18" green="0.85" blue="0.33" /> + </rect> + <rect> + <bounds left="0" top="75" right="640" bottom="240" /> + <color red="0.10" green="0.44" blue="0.72" /> + </rect> + <rect> + <bounds left="0" top="240" right="640" bottom="410" /> + <color red="0.77" green="0.14" blue="0.14" /> + </rect> + <rect> + <bounds left="0" top="415" right="640" bottom="480" /> + <color red="0.18" green="0.85" blue="0.33" /> + </rect> + </element> + <element name="button" defstate="0"> + <rect state="0"> + <color red="0.2" green="0.2" blue="0.2" /> + </rect> + <rect state="1"> + <color red="0.8" green="0.8" blue="0.8" /> + </rect> + </element> + <view name="Buttons"> + <backdrop element="background"> + <bounds x="0" y="0" width="640" height="580" /> + </backdrop> + <screen index="0"> + <bounds left="0" top="0" right="640" bottom="480" /> + </screen> + <overlay name="overlay" element="overlay"> + <bounds x="0" y="0" width="640" height="480" /> + </overlay> + <cpanel name="button_0" element="button" inputtag="Q" inputmask="0x01"> + <bounds x="80" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_1" element="button" inputtag="Q" inputmask="0x02"> + <bounds x="180" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_2" element="button" inputtag="Q" inputmask="0x04"> + <bounds x="280" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_3" element="button" inputtag="Q" inputmask="0x08"> + <bounds x="380" y="505" width="70" height="35" /> + </cpanel> + <cpanel name="button_4" element="button" inputtag="Q" inputmask="0x10"> + <bounds x="480" y="505" width="70" height="35" /> + </cpanel> + </view> +</mamelayout> diff --git a/src/mame/layout/matchme.lay b/src/mame/layout/matchme.lay index e420abefe7e..143045eee1f 100644 --- a/src/mame/layout/matchme.lay +++ b/src/mame/layout/matchme.lay @@ -6,7 +6,7 @@ <element name="disk_grey"><disk><color red="0.6" green="0.6" blue="0.6" /></disk></element> <element name="mask" defstate="0"><disk state="0"><color red="0" green="0" blue="0" /></disk></element> - <element name="dummy"><text string=" "></text></element> + <element name="nothing"><text string=" "></text></element> <element name="disk_1"><disk><color red="0.9" green="0.3" blue="1.0" /></disk></element> <element name="disk_2"><disk><color red="1.0" green="0.4" blue="0.4" /></disk></element> @@ -29,50 +29,103 @@ </disk> </element> + <element name="switch_music" defstate="0"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text state="0x01" string="MAN" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + <text state="0x00" string="AUTO" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="switch_speed" defstate="0"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text state="0x00" string="LO" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + <text state="0x01" string="HI" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="switch_skill" defstate="0"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text state="0x01" string="AM" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + <text state="0x00" string="PRO" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="switch_game" defstate="0"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text state="0x07" string="1" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + <text state="0x06" string="2" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + <text state="0x05" string="3" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + <text state="0x03" string="4" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + + <element name="text_ry"> + <disk><color red="0.0" green="0.0" blue="0.0" /></disk> + <text string="►"> + <color red="0.8" green="0.77" blue="0.1" /> + </text> + </element> + <element name="text_ro"> + <disk><color red="0.0" green="0.0" blue="0.0" /></disk> + <text string="►"> + <color red="0.8" green="0.5" blue="0.1" /> + </text> + </element> + + <element name="text_music"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="MUSIC:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="text_speed"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="SPEED:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="text_skill"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="SKILL:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="text_game"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="GAME:" align="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="text_last"> <rect><color red="0.6" green="0.6" blue="0.6" /></rect> - <text string="LAST"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="LAST"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_start"> <rect><color red="0.6" green="0.6" blue="0.6" /></rect> - <text string="START"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="START"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_long"> <rect><color red="0.6" green="0.6" blue="0.6" /></rect> - <text string="LONG"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="LONG"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_1"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="1"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_2"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="2"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_3"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="3"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_4"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="4"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_5"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="5"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_6"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="6"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_7"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="7"><color red="0.02" green="0.02" blue="0.02" /></text> </element> <element name="text_8"> <disk><color red="0.6" green="0.6" blue="0.6" /></disk> - <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> + <text string="8"><color red="0.02" green="0.02" blue="0.02" /></text> </element> @@ -94,6 +147,26 @@ <bezel element="text_7"><bounds x="12.3369" y="10.8215" width="0.5" height="0.5" /></bezel> <bezel element="text_8"><bounds x="10.8215" y="12.3369" width="0.5" height="0.5" /></bezel> + <bezel element="text_music"><bounds x="9" y="8.8" width="2" height="0.29" /></bezel> + <bezel element="text_speed"><bounds x="9" y="9.2" width="2" height="0.29" /></bezel> + <bezel element="text_skill"><bounds x="9" y="9.6" width="2" height="0.29" /></bezel> + <bezel element="text_game"><bounds x="9" y="10.0" width="2" height="0.29" /></bezel> + + <bezel element="text_ry"><bounds x="9.825" y="8.77" width="0.35" height="0.35" /></bezel> + <bezel element="text_ry"><bounds x="9.825" y="9.17" width="0.35" height="0.35" /></bezel> + <bezel element="text_ro"><bounds x="9.825" y="9.57" width="0.35" height="0.35" /></bezel> + <bezel element="text_ro"><bounds x="9.825" y="9.97" width="0.35" height="0.35" /></bezel> + <bezel element="nothing" inputtag="FAKE" inputmask="0x02" inputraw="1"><bounds x="9.805" y="8.75" width="0.39" height="0.39" /></bezel> + <bezel element="nothing" inputtag="IN.4" inputmask="0x01" inputraw="1"><bounds x="9.805" y="9.15" width="0.39" height="0.39" /></bezel> + <bezel element="nothing" inputtag="IN.3" inputmask="0x08" inputraw="1"><bounds x="9.805" y="9.55" width="0.39" height="0.39" /></bezel> + <bezel element="nothing" inputtag="IN.3" inputmask="0x07" inputraw="1"><bounds x="9.805" y="9.95" width="0.39" height="0.39" /></bezel> + + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="10.2" y="8.7" width="1.1" height="1.8" /></bezel> + <bezel element="switch_music" inputtag="FAKE" inputmask="0x02" inputraw="1"><bounds x="10.25" y="8.8" width="1" height="0.29" /></bezel> + <bezel element="switch_speed" inputtag="IN.4" inputmask="0x01" inputraw="1"><bounds x="10.25" y="9.2" width="1" height="0.29" /></bezel> + <bezel element="switch_skill" inputtag="IN.3" inputmask="0x08" inputraw="1"><bounds x="10.25" y="9.6" width="1" height="0.29" /></bezel> + <bezel element="switch_game" inputtag="IN.3" inputmask="0x07" inputraw="1"><bounds x="10.25" y="10.0" width="1" height="0.29" /></bezel> + <bezel element="button" inputtag="FAKE" inputmask="0x01"><bounds x="8.0" y="11" width="0.5" height="0.5" /></bezel> <bezel element="button" inputtag="IN.2" inputmask="0x01"><bounds x="9.75" y="11.9" width="0.5" height="0.5" /></bezel> <bezel element="button" inputtag="IN.2" inputmask="0x04"><bounds x="11.5" y="11" width="0.5" height="0.5" /></bezel> @@ -113,23 +186,23 @@ <bezel element="disk_7"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /></bezel> <bezel element="disk_8"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.0" inputmask="0x01"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.0" inputmask="0x02"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.0" inputmask="0x04"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.0" inputmask="0x08"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.1" inputmask="0x01"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.1" inputmask="0x02"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.1" inputmask="0x04"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /></bezel> - <bezel element="dummy" inputtag="IN.1" inputmask="0x08"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /></bezel> - - <bezel name="0.0" element="mask"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.1" element="mask"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.2" element="mask"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.3" element="mask"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.4" element="mask"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.5" element="mask"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.6" element="mask"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> - <bezel name="0.7" element="mask"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /><color alpha="0.4" /></bezel> + <bezel element="nothing" inputtag="IN.0" inputmask="0x01"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.0" inputmask="0x02"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.0" inputmask="0x04"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.0" inputmask="0x08"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.1" inputmask="0x01"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.1" inputmask="0x02"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.1" inputmask="0x04"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /></bezel> + <bezel element="nothing" inputtag="IN.1" inputmask="0x08"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /></bezel> + + <bezel name="0.0" element="mask"><bounds x="6.8366" y="13.3694" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.1" element="mask"><bounds x="4.1306" y="10.6634" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.2" element="mask"><bounds x="4.1306" y="6.8366" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.3" element="mask"><bounds x="6.8366" y="4.1306" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.4" element="mask"><bounds x="10.6634" y="4.1306" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.5" element="mask"><bounds x="13.3694" y="6.8366" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.6" element="mask"><bounds x="13.3694" y="10.6634" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> + <bezel name="0.7" element="mask"><bounds x="10.6634" y="13.3694" width="2.5" height="2.5" /><color alpha="0.5" /></bezel> </view> </mamelayout> diff --git a/src/mame/layout/matchnum.lay b/src/mame/layout/matchnum.lay index 60cca2e7dd0..438d12f0c8e 100644 --- a/src/mame/layout/matchnum.lay +++ b/src/mame/layout/matchnum.lay @@ -19,6 +19,11 @@ </disk> </element> + <element name="buttonb" defstate="0"> + <rect state="0"><color red="0.2" green="0.2" blue="0.2" /></rect> + <rect state="1"><color red="0.35" green="0.35" blue="0.35" /></rect> + </element> + <element name="digit" defstate="0"> <led7seg><color red="1.0" green="0.2" blue="0.22" /></led7seg> </element> @@ -28,9 +33,26 @@ <disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk> </element> + <element name="switch1" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="0x01"><color red="0.55" green="0.55" blue="0.55" /></rect> + </element> + <element name="switch2" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="0x00"><color red="0.55" green="0.55" blue="0.55" /></rect> + </element> + + <element name="text_1p"> + <rect><color red="0.9" green="0.9" blue="0.9" /></rect> + <text string="1 PL."><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_2p"> + <rect><color red="0.9" green="0.9" blue="0.9" /></rect> + <text string="2 PL."><color red="0.1" green="0.1" blue="0.1" /></text> + </element> <element name="text_change"> <rect><color red="0.9" green="0.9" blue="0.9" /></rect> - <text string="CHANGE"><color red="0.15" green="0.15" blue="0.15" /></text> + <text string="CHANGE"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_q"> <rect><color red="0.9" green="0.9" blue="0.9" /></rect> @@ -46,7 +68,7 @@ <!-- build screen --> <view name="Internal Layout"> - <bounds left="0" right="41" top="17" bottom="103" /> + <bounds left="0" right="41" top="17" bottom="105" /> <!-- top part --> @@ -119,11 +141,21 @@ <!-- bottom part --> - <bezel element="static_white"><bounds x="-1" y="92" width="43" height="12" /></bezel> - <bezel element="text_change"><bounds x="33" y="93" width="8" height="2" /></bezel> + <bezel element="static_white"><bounds x="-1" y="92" width="43" height="13.5" /></bezel> - <bezel element="static_black2"><bounds x="34" y="96" width="6" height="6" /></bezel> - <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="34" y="96" width="6" height="6" /><color alpha="0.25" /></bezel> + <bezel element="text_1p"><bounds x="1" y="93" width="4" height="2" /></bezel> + <bezel element="text_2p"><bounds x="1" y="102.1" width="4" height="2" /></bezel> + + <bezel element="static_black2"><bounds x="1" y="95.6" width="4" height="6" /></bezel> + <bezel element="switch1" inputtag="IN.2" inputmask="0x08" inputraw="1"><bounds x="0.8" y="95.4" width="4.4" height="3.4" /></bezel> + <bezel element="switch2" inputtag="IN.2" inputmask="0x08" inputraw="1"><bounds x="0.8" y="98.4" width="4.4" height="3.4" /></bezel> + <repeat count="12"> + <param name="y" start="95.75" increment="0.5" /> + <bezel element="static_black2"><bounds x="1.01" y="~y~" width="3.98" height="0.2" /></bezel> + </repeat> + + <bezel element="text_change"><bounds x="33" y="93" width="8" height="2" /></bezel> + <bezel element="buttonb" inputtag="IN.2" inputmask="0x04"><bounds x="34" y="95.6" width="6" height="6" /></bezel> </view> </mamelayout> diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay index 917dcb459a0..c67fe49c0ae 100644 --- a/src/mame/layout/mephisto_academy.lay +++ b/src/mame/layout/mephisto_academy.lay @@ -61,12 +61,12 @@ <element name="text_ent"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="ENT"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_cl"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="CL"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_newgame"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="NEW GAME"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♚"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♛"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♜"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♝"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♞"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♟"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[K]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[Q]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[R]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[B]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[N]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[P]"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_lcd"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="MULTI INFO LCD"><color red="1" green="1" blue="1" /></text> </element> <!-- build screen --> @@ -96,12 +96,12 @@ <bezel element="text_ent"> <bounds x="64.25" y="2" width="5" height="1.5" /> </bezel> <bezel element="text_cl"> <bounds x="71.25" y="2" width="3" height="1.5" /> </bezel> - <bezel element="text_p6"> <bounds x="27.25" y="6.5" width="5" height="2" /> </bezel> - <bezel element="text_p5"> <bounds x="33.25" y="6.5" width="5" height="2" /> </bezel> - <bezel element="text_p4"> <bounds x="39.25" y="6.5" width="5" height="2" /> </bezel> - <bezel element="text_p3"> <bounds x="45.25" y="6.5" width="5" height="2" /> </bezel> - <bezel element="text_p2"> <bounds x="52.25" y="6.5" width="5" height="2" /> </bezel> - <bezel element="text_p1"> <bounds x="58.25" y="6.5" width="5" height="2" /> </bezel> + <bezel element="text_p6"> <bounds x="27.25" y="6.5" width="5" height="1.5" /> </bezel> + <bezel element="text_p5"> <bounds x="33.25" y="6.5" width="5" height="1.5" /> </bezel> + <bezel element="text_p4"> <bounds x="39.25" y="6.5" width="5" height="1.5" /> </bezel> + <bezel element="text_p3"> <bounds x="45.25" y="6.5" width="5" height="1.5" /> </bezel> + <bezel element="text_p2"> <bounds x="52.25" y="6.5" width="5" height="1.5" /> </bezel> + <bezel element="text_p1"> <bounds x="58.25" y="6.5" width="5" height="1.5" /> </bezel> <bezel element="text_newgame"> <bounds x="65.25" y="6.70" width="9" height="1.5" /> </bezel> <bezel element="text_black"> <bounds x="64" y="0" width="2" height="1.3" /> </bezel> <bezel element="text_white"> <bounds x="70" y="0" width="2" height="1.3" /> </bezel> diff --git a/src/mame/layout/mephisto_lcd.lay b/src/mame/layout/mephisto_lcd.lay index b8e2a0ec110..0aee33c571f 100644 --- a/src/mame/layout/mephisto_lcd.lay +++ b/src/mame/layout/mephisto_lcd.lay @@ -58,12 +58,12 @@ <element name="text_fct"> <rect><color red="0" green="0" blue="0" /></rect> <text string="FCT"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> <element name="text_ent"> <rect><color red="0" green="0" blue="0" /></rect> <text string="ENT"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> <element name="text_cl"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CL"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> - <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♚"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> - <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♛"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> - <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♜"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> - <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♝"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> - <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♞"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> - <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♟"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> + <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> + <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> + <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> + <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> + <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> + <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P]"> <color red="0.76" green="0.74" blue="0.41" /></text> </element> <element name="text_lcd"> <rect><color red="0" green="0" blue="0" /></rect> <text string="16/32 BIT DISPLAY MODUL"><color red="0.76" green="0.74" blue="0.41" /></text> </element> <!-- build screen --> @@ -87,12 +87,12 @@ <bezel element="text_ent"> <bounds x="47.5" y="7" width="3.5" height="1.2" /> </bezel> <bezel element="text_cl"> <bounds x="52.5" y="7" width="3.5" height="1.3" /> </bezel> - <bezel element="text_p6"> <bounds x="27.5" y="4.5" width="3.5" height="2" /> </bezel> - <bezel element="text_p5"> <bounds x="32.5" y="4.5" width="3.5" height="2" /> </bezel> - <bezel element="text_p4"> <bounds x="37.5" y="4.5" width="3.5" height="2" /> </bezel> - <bezel element="text_p3"> <bounds x="42.5" y="4.5" width="3.5" height="2" /> </bezel> - <bezel element="text_p2"> <bounds x="47.5" y="4.5" width="3.5" height="2" /> </bezel> - <bezel element="text_p1"> <bounds x="52.5" y="4.5" width="3.5" height="2" /> </bezel> + <bezel element="text_p6"> <bounds x="27.5" y="4.5" width="4" height="1.7" /></bezel> + <bezel element="text_p5"> <bounds x="32.5" y="4.5" width="4" height="1.7" /></bezel> + <bezel element="text_p4"> <bounds x="37.5" y="4.5" width="4" height="1.7" /></bezel> + <bezel element="text_p3"> <bounds x="42.5" y="4.5" width="4" height="1.7" /></bezel> + <bezel element="text_p2"> <bounds x="47.5" y="4.5" width="4" height="1.7" /></bezel> + <bezel element="text_p1"> <bounds x="52.5" y="4.5" width="4" height="1.7" /></bezel> <bezel element="hlb" inputtag="KEY" inputmask="0x01"> <bounds x="27.5" y="2" width="3.5" height="2.5" /> </bezel> <bezel element="hlb" inputtag="KEY" inputmask="0x02"> <bounds x="32.5" y="2" width="3.5" height="2.5" /> </bezel> diff --git a/src/mame/layout/mephisto_megaiv.lay b/src/mame/layout/mephisto_megaiv.lay index de70b364aee..b90656a2fc9 100644 --- a/src/mame/layout/mephisto_megaiv.lay +++ b/src/mame/layout/mephisto_megaiv.lay @@ -65,14 +65,14 @@ <element name="text_lev"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="LEV"> <color red="0" green="0" blue="0" /></text> </element> <element name="text_black"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="■"> <color red="0" green="0" blue="0" /></text> </element> <element name="text_white"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="□"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b1"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="♟ 1"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b2"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="♞ 2"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b3"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="♝ 3"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b4"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="♜ 4"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b5"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="♛ 5"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b6"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="♚ 6"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b7"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="■ 7 ◀"> <color red="0" green="0" blue="0" /></text> </element> - <element name="text_b8"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="□ 8 ▶"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b1"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[P] 1"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b2"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[N] 2"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b3"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[B] 3"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b4"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[R] 4"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b5"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[Q] 5"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b6"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="[K] 6"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b7"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="■ 7 ◄"> <color red="0" green="0" blue="0" /></text> </element> + <element name="text_b8"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="□ 8 ►"> <color red="0" green="0" blue="0" /></text> </element> <element name="text_book9"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="BOOK 9"> <color red="0" green="0" blue="0" /></text> </element> <element name="text_pos0"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="POS 0"> <color red="0" green="0" blue="0" /></text> </element> <element name="text_cl"> <rect><color red="0.90" green="0.91" blue="0.89" /></rect> <text string="CL"> <color red="0" green="0" blue="0" /></text> </element> diff --git a/src/mame/layout/mephisto_milano.lay b/src/mame/layout/mephisto_milano.lay index 2f1f14c3bd6..080dcb47fef 100644 --- a/src/mame/layout/mephisto_milano.lay +++ b/src/mame/layout/mephisto_milano.lay @@ -59,12 +59,12 @@ <element name="text_enter"> <rect><color red="0" green="0" blue="0" /></rect> <text string="ENTER"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_clear"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CLEAR"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_newgame"> <rect><color red="0" green="0" blue="0" /></rect> <text string="NEW GAME"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♚"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♛"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♜"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♝"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♞"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♟"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P]"> <color red="1" green="1" blue="1" /></text> </element> <!-- build screen --> @@ -88,12 +88,12 @@ <bezel element="text_function"> <bounds x="6.5" y="18" width="5" height="1.2" /> </bezel> <bezel element="text_enter"> <bounds x="12.5" y="18" width="5" height="1.2" /> </bezel> <bezel element="text_clear"> <bounds x="18.5" y="18" width="5" height="1.2" /> </bezel> - <bezel element="text_p6"> <bounds x="0.5" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p5"> <bounds x="6.5" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p4"> <bounds x="12.5" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p3"> <bounds x="18.5" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p2"> <bounds x="0.5" y="21" width="5" height="2.5" /> </bezel> - <bezel element="text_p1"> <bounds x="6.5" y="21" width="5" height="2.5" /> </bezel> + <bezel element="text_p6"> <bounds x="0.5" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p5"> <bounds x="6.5" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p4"> <bounds x="12.5" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p3"> <bounds x="18.5" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p2"> <bounds x="0.5" y="21" width="5" height="1.7" /> </bezel> + <bezel element="text_p1"> <bounds x="6.5" y="21" width="5" height="1.7" /> </bezel> <bezel element="text_newgame"> <bounds x="12.5" y="22" width="11" height="1.4" /> </bezel> <bezel name="led100" element="led"> <bounds x="2.5" y="7" width="1.2" height="1.2" /> </bezel> diff --git a/src/mame/layout/mephisto_modena.lay b/src/mame/layout/mephisto_modena.lay index 0b238c55ddd..2908d489b04 100644 --- a/src/mame/layout/mephisto_modena.lay +++ b/src/mame/layout/mephisto_modena.lay @@ -64,12 +64,12 @@ <element name="text_enter"> <rect><color red="0" green="0" blue="0" /></rect> <text string="ENTER"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_clear"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CLEAR"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_newgame"> <rect><color red="0" green="0" blue="0" /></rect> <text string="NEW GAME"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♚"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♛"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♜"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♝"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♞"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♟"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N]"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_p6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P]"> <color red="1" green="1" blue="1" /></text> </element> <!-- build screen --> <group name="panel"> @@ -96,12 +96,12 @@ <bezel element="text_enter"> <bounds x="12" y="18" width="5" height="1.2" /> </bezel> <bezel element="text_clear"> <bounds x="18" y="18" width="5" height="1.2" /> </bezel> - <bezel element="text_p6"> <bounds x="0" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p5"> <bounds x="6" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p4"> <bounds x="12" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p3"> <bounds x="18" y="12" width="5" height="2.5" /> </bezel> - <bezel element="text_p2"> <bounds x="0" y="21" width="5" height="2.5" /> </bezel> - <bezel element="text_p1"> <bounds x="6" y="21" width="5" height="2.5" /> </bezel> + <bezel element="text_p6"> <bounds x="0" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p5"> <bounds x="6" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p4"> <bounds x="12" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p3"> <bounds x="18" y="12" width="5" height="1.7" /> </bezel> + <bezel element="text_p2"> <bounds x="0" y="21" width="5" height="1.7" /> </bezel> + <bezel element="text_p1"> <bounds x="6" y="21" width="5" height="1.7" /> </bezel> <bezel element="text_newgame"> <bounds x="12" y="22" width="11" height="1.4" /> </bezel> <bezel name="led100" element="led"> <bounds x="1.75" y="7" width="1.2" height="1.2" /> </bezel> diff --git a/src/mame/layout/mephisto_mondial2.lay b/src/mame/layout/mephisto_mondial2.lay index acdf037fca2..0122999b804 100644 --- a/src/mame/layout/mephisto_mondial2.lay +++ b/src/mame/layout/mephisto_mondial2.lay @@ -68,12 +68,12 @@ <element name="text_plus"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="+"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> <element name="text_black"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="□"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> <element name="text_white"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="■"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> - <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="♟ 1"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> - <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="♞ 2"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> - <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="♝ 3"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> - <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="♜ 4"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> - <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="♛ 5"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> - <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="♚ 6"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> + <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[P] 1"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> + <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[N] 2"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> + <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[B] 3"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> + <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[R] 4"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> + <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[Q] 5"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> + <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="[K] 6"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> <element name="text_b7"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="□ 7"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> <element name="text_b8"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="■ 8"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> <element name="text_play"> <rect><color red="0" green="0" blue="0" /></rect> <text align="1" string="PLAY"> <color red="0.90" green="0.91" blue="0.89" /></text> </element> diff --git a/src/mame/layout/mephisto_montec.lay b/src/mame/layout/mephisto_montec.lay index f2afb906c98..5e6aa5c2cf8 100644 --- a/src/mame/layout/mephisto_montec.lay +++ b/src/mame/layout/mephisto_montec.lay @@ -65,14 +65,14 @@ <element name="text_lev"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="LEV"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_black"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="□"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_white"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="■"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♟ 1"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♞ 2"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♝ 3"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♜ 4"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♛ 5"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="♚ 6"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b7"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="□ 7 ◀"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b8"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="■ 8 ▶"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b1"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[P] 1"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b2"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[N] 2"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b3"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[B] 3"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b4"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[R] 4"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b5"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[Q] 5"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="[K] 6"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b7"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="□ 7 ◄"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b8"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="■ 8 ►"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_book9"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="BOOK 9"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_pos0"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="POS 0"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_cl"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="CL"> <color red="1" green="1" blue="1" /></text> </element> diff --git a/src/mame/layout/mephisto_smondial2.lay b/src/mame/layout/mephisto_smondial2.lay index 025cd47614a..1294e648ca4 100644 --- a/src/mame/layout/mephisto_smondial2.lay +++ b/src/mame/layout/mephisto_smondial2.lay @@ -68,14 +68,14 @@ <element name="text_pos"> <rect><color red="0" green="0" blue="0" /></rect> <text string="POS"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_mem"> <rect><color red="0" green="0" blue="0" /></rect> <text string="MEM"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_lev"> <rect><color red="0" green="0" blue="0" /></rect> <text string="LEV"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♟ 1"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♞ 2"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♝ 3"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♜ 4"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♛ 5"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="♚ 6"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b7"> <rect><color red="0" green="0" blue="0" /></rect> <text string="□ 7 ◀"> <color red="1" green="1" blue="1" /></text> </element> - <element name="text_b8"> <rect><color red="0" green="0" blue="0" /></rect> <text string="■ 8 ▶"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b1"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[P] 1"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b2"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[N] 2"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b3"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[B] 3"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b4"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[R] 4"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b5"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[Q] 5"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b6"> <rect><color red="0" green="0" blue="0" /></rect> <text string="[K] 6"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b7"> <rect><color red="0" green="0" blue="0" /></rect> <text string="□ 7 ◄"> <color red="1" green="1" blue="1" /></text> </element> + <element name="text_b8"> <rect><color red="0" green="0" blue="0" /></rect> <text string="■ 8 ►"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_help9"> <rect><color red="0.8" green="0" blue="0" /></rect> <text string="HELP 9"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_info0"> <rect><color red="0" green="0" blue="0" /></rect> <text string="INFO 0"> <color red="1" green="1" blue="1" /></text> </element> <element name="text_cl"> <rect><color red="0" green="0" blue="0" /></rect> <text string="CL"> <color red="1" green="1" blue="1" /></text> </element> diff --git a/src/mame/layout/novag_cforte.lay b/src/mame/layout/novag_cforte.lay index 57926b35213..ec82af339dd 100644 --- a/src/mame/layout/novag_cforte.lay +++ b/src/mame/layout/novag_cforte.lay @@ -99,11 +99,11 @@ </element> <element name="text_m8x"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="<-"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="←"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_r8x"> <rect><color red="0.7" green="0.13" blue="0.12" /></rect> - <text string="->"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="→"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_m1a"><text string="Player/Player"><color red="0.51" green="0.5" blue="0.49" /></text></element> @@ -142,27 +142,27 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> @@ -372,12 +372,12 @@ <bezel element="white"><bounds x="101.25" y="70.29" width="6" height="4" /></bezel> <bezel element="static_red"><bounds x="101.25" y="78.00" width="6" height="4" /></bezel> - <bezel element="text_king"><bounds x="93.13" y="24.50" width="3" height="3" /></bezel> - <bezel element="text_queen"><bounds x="93.13" y="32.21" width="3" height="3" /></bezel> - <bezel element="text_bishop"><bounds x="93.13" y="39.93" width="3" height="3" /></bezel> - <bezel element="text_knight"><bounds x="93.13" y="47.64" width="3" height="3" /></bezel> - <bezel element="text_rook"><bounds x="93.13" y="55.36" width="3" height="3" /></bezel> - <bezel element="text_pawn"><bounds x="93.13" y="63.07" width="3" height="3" /></bezel> + <bezel element="text_king"><bounds x="93.13" y="24.70" width="3" height="2.2" /></bezel> + <bezel element="text_queen"><bounds x="93.13" y="32.41" width="3" height="2.2" /></bezel> + <bezel element="text_bishop"><bounds x="93.13" y="40.13" width="3" height="2.2" /></bezel> + <bezel element="text_knight"><bounds x="93.13" y="47.84" width="3" height="2.2" /></bezel> + <bezel element="text_rook"><bounds x="93.13" y="55.56" width="3" height="2.2" /></bezel> + <bezel element="text_pawn"><bounds x="93.13" y="63.27" width="3" height="2.2" /></bezel> <bezel element="text_r2x"><bounds x="101.26" y="33.01" width="5.98" height="1.4" /></bezel> <bezel element="text_r3x"><bounds x="101.26" y="40.73" width="5.98" height="1.4" /></bezel> @@ -385,8 +385,8 @@ <bezel element="text_r5x"><bounds x="101.26" y="56.16" width="5.98" height="1.4" /></bezel> <bezel element="text_r6x"><bounds x="101.26" y="63.87" width="5.98" height="1.4" /></bezel> <bezel element="text_r7x"><bounds x="101.26" y="71.59" width="5.98" height="1.4" /></bezel> - <bezel element="text_r8x"><bounds x="101.26" y="78.50" width="5.98" height="3" /></bezel> - <bezel element="text_m8x"><bounds x="91.64" y="78.50" width="5.98" height="3" /></bezel> + <bezel element="text_r8x"><bounds x="101.26" y="78.30" width="5.98" height="3" /></bezel> + <bezel element="text_m8x"><bounds x="91.64" y="78.30" width="5.98" height="3" /></bezel> <bezel element="hlb" inputtag="IN.0" inputmask="0x200"><bounds x="91.63" y="24.00" width="6" height="4" /><color alpha="0.4" /></bezel> <bezel element="hlb" inputtag="IN.1" inputmask="0x200"><bounds x="91.63" y="31.71" width="6" height="4" /><color alpha="0.4" /></bezel> diff --git a/src/mame/layout/novag_delta1.lay b/src/mame/layout/novag_delta1.lay index 68ea1072544..43268e1da9c 100644 --- a/src/mame/layout/novag_delta1.lay +++ b/src/mame/layout/novag_delta1.lay @@ -3,20 +3,293 @@ <!-- define elements --> + <element name="black"><rect><color red="0.16" green="0.16" blue="0.16" /></rect></element> + <element name="black2"><rect><color red="0.1" green="0.1" blue="0.1" /></rect></element> + <element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element> + <element name="white2"><rect><color red="0.96" green="0.96" blue="0.96" /></rect></element> + <element name="brown"><rect><color red="0.55" green="0.48" blue="0.4" /></rect></element> + + <element name="led"><disk><color red="1.0" green="0.1" blue="0.15" /></disk></element> + <element name="digit" defstate="0"> <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg> </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> + <rect state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </rect> + </element> + + <element name="text_b01a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="A" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b01b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="1" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b01c"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="[K]"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b02a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="B" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b02b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="2" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b02c"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="[Q]"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b03a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="C" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b03b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="3" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b03c"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="[R]"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b04a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="D" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b04b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="4" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b05a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="E" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b05b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="5" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b05c"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="[B]"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b06a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="F" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b06b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="6" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b06c"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="[N]"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b07a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="G" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b07b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="7" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b07c"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="[P]"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b08a"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="H" align="1"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b08b"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="8" align="2"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b09"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="CE"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + <element name="text_b18"> + <rect><color red="0.55" green="0.48" blue="0.4" /></rect> + <text string="ENTER"><color red="0.87" green="0.87" blue="0.87" /></text> + </element> + + <element name="text_b10b"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="9" align="2"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b10c"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b11b"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="0" align="2"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b11c"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b12a"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="T" align="1"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b12c"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b13a"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="→" align="1"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b13b"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="T" align="2"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b14a"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="FP" align="1"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b14c"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b15a"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="EP" align="1"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b15c"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b16c"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + <element name="text_b17"> + <rect><color red="0.8" green="0.8" blue="0.8" /></rect> + <text string="CB"><color red="0.1" green="0.1" blue="0.1" /></text> + </element> + + <element name="text_d1"><text string="TIME DISPLAY"><color red="0.9" green="0.9" blue="0.9" /></text></element> + <element name="text_d2"><text string="TIME SET"><color red="0.9" green="0.9" blue="0.9" /></text></element> + <element name="text_d3"><text string="CHANGE COLOR"><color red="0.9" green="0.9" blue="0.9" /></text></element> <!-- this label isn't on the real device --> + <element name="text_d4"><text string="NEW GAME"><color red="0.9" green="0.9" blue="0.9" /></text></element> + <!-- build screen --> <view name="Internal Layout"> - <bounds left="0" right="40" top="0" bottom="15" /> + <bounds left="-1.5" right="88.5" top="4" bottom="39" /> + + <bezel element="black"><bounds x="-1.5" y="17.5" width="90" height="1" /></bezel> + <bezel element="led"><bounds x="4.5" y="13.5" width="2.5" height="2.5" /></bezel> <!-- power led, always on --> + + <bezel name="digit3" element="digit"><bounds x="10" y="5.5" width="7" height="10.5" /></bezel> + <bezel name="digit2" element="digit"><bounds x="17" y="5.5" width="7" height="10.5" /></bezel> + <bezel name="digit1" element="digit"><bounds x="24" y="5.5" width="7" height="10.5" /></bezel> + <bezel name="digit0" element="digit"><bounds x="31" y="5.5" width="7" height="10.5" /></bezel> + + <!-- button panel --> + + <bezel element="text_d1"><bounds x="17" y="37.2" width="13" height="1.5" /></bezel> + <bezel element="text_d2"><bounds x="27" y="37.2" width="13" height="1.5" /></bezel> + <bezel element="text_d3"><bounds x="57" y="37.2" width="13" height="1.5" /></bezel> + <bezel element="text_d4"><bounds x="67" y="37.2" width="13" height="1.5" /></bezel> + + <bezel element="brown"><bounds x="0" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="10" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="20" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="30" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="40" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="50" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="60" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="70" y="20" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="80" y="20" width="7" height="7" /></bezel> + + <bezel element="white"><bounds x="0" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="10" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="20" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="30" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="40" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="50" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="60" y="30" width="7" height="7" /></bezel> + <bezel element="white"><bounds x="70" y="30" width="7" height="7" /></bezel> + <bezel element="brown"><bounds x="80" y="30" width="7" height="7" /></bezel> + + <bezel element="white2"><bounds x="60.8" y="30.8" width="2" height="2" /></bezel> + <bezel element="black2"><bounds x="64.2" y="30.8" width="2" height="2" /></bezel> + <bezel element="black2"><bounds x="70.5" y="30.5" width="6" height="6" /></bezel> + <bezel element="white"><bounds x="70.7" y="30.7" width="5.6" height="5.6" /></bezel> + + <bezel element="text_b01c"><bounds x="0.5" y="23.0" width="6" height="3" /></bezel> + <bezel element="text_b01a"><bounds x="0.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b01b"><bounds x="3.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b02c"><bounds x="10.5" y="23.0" width="6" height="3" /></bezel> + <bezel element="text_b02a"><bounds x="10.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b02b"><bounds x="13.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b03c"><bounds x="20.5" y="23.0" width="6" height="3" /></bezel> + <bezel element="text_b03a"><bounds x="20.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b03b"><bounds x="23.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b04a"><bounds x="30.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b04b"><bounds x="33.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b05c"><bounds x="40.5" y="23.0" width="6" height="3" /></bezel> + <bezel element="text_b05a"><bounds x="40.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b05b"><bounds x="43.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b06c"><bounds x="50.5" y="23.0" width="6" height="3" /></bezel> + <bezel element="text_b06a"><bounds x="50.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b06b"><bounds x="53.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b07c"><bounds x="60.5" y="23.0" width="6" height="3" /></bezel> + <bezel element="text_b07a"><bounds x="60.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b07b"><bounds x="63.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b08a"><bounds x="70.9" y="20.5" width="5" height="2.5" /></bezel> + <bezel element="text_b08b"><bounds x="73.5" y="20.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b09"><bounds x="80.5" y="21.75" width="6" height="3.5" /></bezel> + + <bezel element="text_b10c"><bounds x="0.5" y="33.0" width="6" height="3" /></bezel> + <bezel element="text_b10b"><bounds x="3.5" y="30.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b11c"><bounds x="10.5" y="33.0" width="6" height="3" /></bezel> + <bezel element="text_b11b"><bounds x="13.5" y="30.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b12c"><bounds x="20.5" y="33.0" width="6" height="3" /></bezel> + <bezel element="text_b12a"><bounds x="20.9" y="30.5" width="5" height="2.5" /></bezel> + <bezel element="text_b13a"><bounds x="30.9" y="30.5" width="5" height="2.5" /></bezel> + <bezel element="text_b13b"><bounds x="33.5" y="30.5" width="2.5" height="2.5" /></bezel> + <bezel element="text_b14c"><bounds x="40.5" y="33.0" width="6" height="3" /></bezel> + <bezel element="text_b14a"><bounds x="40.9" y="30.5" width="5" height="2.5" /></bezel> + <bezel element="text_b15c"><bounds x="50.5" y="33.0" width="6" height="3" /></bezel> + <bezel element="text_b15a"><bounds x="50.9" y="30.5" width="5" height="2.5" /></bezel> + <bezel element="text_b16c"><bounds x="60.5" y="33.0" width="6" height="3" /></bezel> + <bezel element="text_b17"><bounds x="71.5" y="32.3" width="4" height="2.4" /></bezel> + <bezel element="text_b18"><bounds x="80.1" y="32.3" width="6.8" height="2.4" /></bezel> + + <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="0" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="10" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="20" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="30" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="40" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="50" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="60" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="70" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="80" y="20" width="7" height="7" /><color alpha="0.25" /></bezel> - <bezel name="digit3" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel> - <bezel name="digit2" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel> - <bezel name="digit1" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel> - <bezel name="digit0" element="digit"><bounds x="30" y="0" width="10" height="15" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="0" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="10" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="20" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="30" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="40" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="50" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="60" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="70" y="30" width="7" height="7" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="80" y="30" width="7" height="7" /><color alpha="0.25" /></bezel> </view> </mamelayout> diff --git a/src/mame/layout/novag_diablo68k.lay b/src/mame/layout/novag_diablo68k.lay index 4a3080648c7..2eddf42b940 100644 --- a/src/mame/layout/novag_diablo68k.lay +++ b/src/mame/layout/novag_diablo68k.lay @@ -102,12 +102,12 @@ <element name="text_r8a"><text string="Go"><color red="0.51" green="0.5" blue="0.49" /></text></element> <element name="text_r8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element> - <element name="text_king"><text string="♚"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_queen"><text string="♛"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_rook"><text string="♜"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_bishop"><text string="♝"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_knight"><text string="♞"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_pawn"><text string="♟"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_king"><text string="[K]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_queen"><text string="[Q]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_rook"><text string="[R]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_bishop"><text string="[B]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_knight"><text string="[N]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_pawn"><text string="[P]"><color red="0.61" green="0.6" blue="0.59" /></text></element> <!-- build screen --> @@ -368,12 +368,12 @@ <bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="107.00" y="70.29" width="2.5" height="2.5" /></bezel> <bezel element="but" inputtag="IN.0" inputmask="0x100"><bounds x="107.00" y="78.00" width="2.5" height="2.5" /></bezel> - <bezel element="text_king"><bounds x="100.38" y="23.50" width="3" height="3" /></bezel> - <bezel element="text_queen"><bounds x="100.38" y="31.21" width="3" height="3" /></bezel> - <bezel element="text_bishop"><bounds x="100.38" y="38.93" width="3" height="3" /></bezel> - <bezel element="text_knight"><bounds x="100.38" y="46.64" width="3" height="3" /></bezel> - <bezel element="text_rook"><bounds x="100.38" y="54.36" width="3" height="3" /></bezel> - <bezel element="text_pawn"><bounds x="100.38" y="62.07" width="3" height="3" /></bezel> + <bezel element="text_king"><bounds x="99.6" y="24.20" width="4" height="1.8" /></bezel> + <bezel element="text_queen"><bounds x="99.6" y="31.91" width="4" height="1.8" /></bezel> + <bezel element="text_bishop"><bounds x="99.6" y="39.63" width="4" height="1.8" /></bezel> + <bezel element="text_knight"><bounds x="99.6" y="47.34" width="4" height="1.8" /></bezel> + <bezel element="text_rook"><bounds x="99.6" y="54.86" width="4" height="1.8" /></bezel> + <bezel element="text_pawn"><bounds x="99.6" y="62.77" width="4" height="1.8" /></bezel> <bezel element="text_l1a"><bounds x="82" y="22.35" width="14" height="1.4" /></bezel> <bezel element="text_l1b"><bounds x="82" y="26.70" width="14" height="1.4" /></bezel> diff --git a/src/mame/layout/novag_presto.lay b/src/mame/layout/novag_presto.lay index 3bf1afb89f9..1c176ddf37b 100644 --- a/src/mame/layout/novag_presto.lay +++ b/src/mame/layout/novag_presto.lay @@ -88,27 +88,27 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> @@ -315,12 +315,12 @@ <bezel element="white"><bounds x="86" y="66" width="6" height="4" /></bezel> <bezel element="white"><bounds x="89" y="76" width="3" height="4" /></bezel> - <bezel element="text_king"><bounds x="86" y="16.1" width="6" height="3.5" /></bezel> - <bezel element="text_queen"><bounds x="86" y="26.1" width="6" height="3.5" /></bezel> - <bezel element="text_bishop"><bounds x="86" y="36.1" width="6" height="3.5" /></bezel> - <bezel element="text_knight"><bounds x="86" y="46.1" width="6" height="3.5" /></bezel> - <bezel element="text_rook"><bounds x="86" y="56.1" width="6" height="3.5" /></bezel> - <bezel element="text_pawn"><bounds x="86" y="66.1" width="6" height="3.5" /></bezel> + <bezel element="text_king"><bounds x="86" y="16.6" width="6" height="2.4" /></bezel> + <bezel element="text_queen"><bounds x="86" y="26.6" width="6" height="2.4" /></bezel> + <bezel element="text_bishop"><bounds x="86" y="36.6" width="6" height="2.4" /></bezel> + <bezel element="text_knight"><bounds x="86" y="46.6" width="6" height="2.4" /></bezel> + <bezel element="text_rook"><bounds x="86" y="56.6" width="6" height="2.4" /></bezel> + <bezel element="text_pawn"><bounds x="86" y="66.6" width="6" height="2.4" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="86" y="6" width="6" height="4" /><color alpha="0.25" /></bezel> <bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="86" y="16" width="6" height="4" /><color alpha="0.4" /></bezel> diff --git a/src/mame/layout/novag_scorpio68k.lay b/src/mame/layout/novag_scorpio68k.lay index 24a82948e43..be2ffa5875a 100644 --- a/src/mame/layout/novag_scorpio68k.lay +++ b/src/mame/layout/novag_scorpio68k.lay @@ -103,12 +103,12 @@ <element name="text_r8a"><text string="Go"><color red="0.3" green="0.7" blue="0.7" /></text></element> <element name="text_r8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element> - <element name="text_king"><text string="♚"><color red="0.3" green="0.7" blue="0.7" /></text></element> - <element name="text_queen"><text string="♛"><color red="0.3" green="0.7" blue="0.7" /></text></element> - <element name="text_rook"><text string="♜"><color red="0.3" green="0.7" blue="0.7" /></text></element> - <element name="text_bishop"><text string="♝"><color red="0.3" green="0.7" blue="0.7" /></text></element> - <element name="text_knight"><text string="♞"><color red="0.3" green="0.7" blue="0.7" /></text></element> - <element name="text_pawn"><text string="♟"><color red="0.3" green="0.7" blue="0.7" /></text></element> + <element name="text_king"><text string="[K]"><color red="0.3" green="0.7" blue="0.7" /></text></element> + <element name="text_queen"><text string="[Q]"><color red="0.3" green="0.7" blue="0.7" /></text></element> + <element name="text_rook"><text string="[R]"><color red="0.3" green="0.7" blue="0.7" /></text></element> + <element name="text_bishop"><text string="[B]"><color red="0.3" green="0.7" blue="0.7" /></text></element> + <element name="text_knight"><text string="[N]"><color red="0.3" green="0.7" blue="0.7" /></text></element> + <element name="text_pawn"><text string="[P]"><color red="0.3" green="0.7" blue="0.7" /></text></element> <!-- build screen --> @@ -315,12 +315,12 @@ <bezel element="black"><bounds x="105.25" y="60.29" width="6" height="4" /></bezel> <bezel element="black"><bounds x="105.25" y="68.00" width="6" height="4" /></bezel> - <bezel element="text_king"><bounds x="95" y="17.5" width="2.5" height="2.5" /></bezel> - <bezel element="text_queen"><bounds x="95" y="25.21" width="3" height="3" /></bezel> - <bezel element="text_bishop"><bounds x="95" y="32.93" width="3" height="3" /></bezel> - <bezel element="text_knight"><bounds x="95" y="40.64" width="3" height="3" /></bezel> - <bezel element="text_rook"><bounds x="95" y="48.36" width="3" height="3" /></bezel> - <bezel element="text_pawn"><bounds x="95" y="56.07" width="3" height="3" /></bezel> + <bezel element="text_king"><bounds x="95" y="18.20" width="2.5" height="1.4" /></bezel> + <bezel element="text_queen"><bounds x="95" y="25.91" width="3" height="1.4" /></bezel> + <bezel element="text_bishop"><bounds x="95" y="33.63" width="3" height="1.4" /></bezel> + <bezel element="text_knight"><bounds x="95" y="41.34" width="3" height="1.4" /></bezel> + <bezel element="text_rook"><bounds x="95" y="49.06" width="3" height="1.4" /></bezel> + <bezel element="text_pawn"><bounds x="95" y="56.77" width="3" height="1.4" /></bezel> <bezel element="hlb" inputtag="IN.7" inputmask="0x400"><bounds x="86" y="14.00" width="6" height="4" /><color alpha="0.12" /></bezel> <bezel element="hlb" inputtag="IN.6" inputmask="0x400"><bounds x="86" y="21.71" width="6" height="4" /><color alpha="0.12" /></bezel> diff --git a/src/mame/layout/novag_sexpert.lay b/src/mame/layout/novag_sexpert.lay index 4a3080648c7..2eddf42b940 100644 --- a/src/mame/layout/novag_sexpert.lay +++ b/src/mame/layout/novag_sexpert.lay @@ -102,12 +102,12 @@ <element name="text_r8a"><text string="Go"><color red="0.51" green="0.5" blue="0.49" /></text></element> <element name="text_r8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element> - <element name="text_king"><text string="♚"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_queen"><text string="♛"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_rook"><text string="♜"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_bishop"><text string="♝"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_knight"><text string="♞"><color red="0.61" green="0.6" blue="0.59" /></text></element> - <element name="text_pawn"><text string="♟"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_king"><text string="[K]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_queen"><text string="[Q]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_rook"><text string="[R]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_bishop"><text string="[B]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_knight"><text string="[N]"><color red="0.61" green="0.6" blue="0.59" /></text></element> + <element name="text_pawn"><text string="[P]"><color red="0.61" green="0.6" blue="0.59" /></text></element> <!-- build screen --> @@ -368,12 +368,12 @@ <bezel element="but" inputtag="IN.1" inputmask="0x100"><bounds x="107.00" y="70.29" width="2.5" height="2.5" /></bezel> <bezel element="but" inputtag="IN.0" inputmask="0x100"><bounds x="107.00" y="78.00" width="2.5" height="2.5" /></bezel> - <bezel element="text_king"><bounds x="100.38" y="23.50" width="3" height="3" /></bezel> - <bezel element="text_queen"><bounds x="100.38" y="31.21" width="3" height="3" /></bezel> - <bezel element="text_bishop"><bounds x="100.38" y="38.93" width="3" height="3" /></bezel> - <bezel element="text_knight"><bounds x="100.38" y="46.64" width="3" height="3" /></bezel> - <bezel element="text_rook"><bounds x="100.38" y="54.36" width="3" height="3" /></bezel> - <bezel element="text_pawn"><bounds x="100.38" y="62.07" width="3" height="3" /></bezel> + <bezel element="text_king"><bounds x="99.6" y="24.20" width="4" height="1.8" /></bezel> + <bezel element="text_queen"><bounds x="99.6" y="31.91" width="4" height="1.8" /></bezel> + <bezel element="text_bishop"><bounds x="99.6" y="39.63" width="4" height="1.8" /></bezel> + <bezel element="text_knight"><bounds x="99.6" y="47.34" width="4" height="1.8" /></bezel> + <bezel element="text_rook"><bounds x="99.6" y="54.86" width="4" height="1.8" /></bezel> + <bezel element="text_pawn"><bounds x="99.6" y="62.77" width="4" height="1.8" /></bezel> <bezel element="text_l1a"><bounds x="82" y="22.35" width="14" height="1.4" /></bezel> <bezel element="text_l1b"><bounds x="82" y="26.70" width="14" height="1.4" /></bezel> diff --git a/src/mame/layout/novag_sforte.lay b/src/mame/layout/novag_sforte.lay index bbaf5e249c0..f8f3f97275e 100644 --- a/src/mame/layout/novag_sforte.lay +++ b/src/mame/layout/novag_sforte.lay @@ -67,11 +67,11 @@ <element name="text_l6b"><text string="Start of Game"><color red="0.51" green="0.5" blue="0.49" /></text></element> <element name="text_l7"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="<-"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="←"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_l8"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="->"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="→"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_m1a"><text string="Player/Player"><color red="0.51" green="0.5" blue="0.49" /></text></element> @@ -110,27 +110,27 @@ <element name="text_king"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_queen"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_rook"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_bishop"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_knight"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_pawn"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> @@ -338,15 +338,15 @@ <bezel element="white"><bounds x="105.25" y="70.29" width="6" height="4" /></bezel> <bezel element="static_red"><bounds x="105.25" y="78.00" width="6" height="4" /></bezel> - <bezel element="text_l7"><bounds x="87.5" y="70.79" width="3" height="3" /></bezel> - <bezel element="text_l8"><bounds x="87.5" y="78.50" width="3" height="3" /></bezel> + <bezel element="text_l7"><bounds x="87.5" y="70.59" width="3" height="3" /></bezel> + <bezel element="text_l8"><bounds x="87.5" y="78.30" width="3" height="3" /></bezel> - <bezel element="text_king"><bounds x="97.13" y="24.50" width="3" height="3" /></bezel> - <bezel element="text_queen"><bounds x="97.13" y="32.21" width="3" height="3" /></bezel> - <bezel element="text_bishop"><bounds x="97.13" y="39.93" width="3" height="3" /></bezel> - <bezel element="text_knight"><bounds x="97.13" y="47.64" width="3" height="3" /></bezel> - <bezel element="text_rook"><bounds x="97.13" y="55.36" width="3" height="3" /></bezel> - <bezel element="text_pawn"><bounds x="97.13" y="63.07" width="3" height="3" /></bezel> + <bezel element="text_king"><bounds x="97.13" y="24.70" width="3" height="2.2" /></bezel> + <bezel element="text_queen"><bounds x="97.13" y="32.41" width="3" height="2.2" /></bezel> + <bezel element="text_bishop"><bounds x="97.13" y="40.13" width="3" height="2.2" /></bezel> + <bezel element="text_knight"><bounds x="97.13" y="47.84" width="3" height="2.2" /></bezel> + <bezel element="text_rook"><bounds x="97.13" y="55.56" width="3" height="2.2" /></bezel> + <bezel element="text_pawn"><bounds x="97.13" y="63.27" width="3" height="2.2" /></bezel> <bezel element="hlb" inputtag="IN.7" inputmask="0x400"><bounds x="86" y="24.00" width="6" height="4" /><color alpha="0.4" /></bezel> <bezel element="hlb" inputtag="IN.6" inputmask="0x400"><bounds x="86" y="31.71" width="6" height="4" /><color alpha="0.4" /></bezel> diff --git a/src/mame/layout/novag_supercon.lay b/src/mame/layout/novag_supercon.lay index 5c45e200599..09cedc163ad 100644 --- a/src/mame/layout/novag_supercon.lay +++ b/src/mame/layout/novag_supercon.lay @@ -87,36 +87,36 @@ <element name="text_rg6"><text string="Black"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_rg7"><text string="White"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_king1"><text string="♚"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_queen1"><text string="♛"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_rook1"><text string="♜"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_bishop1"><text string="♝"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_knight1"><text string="♞"><color red="0.81" green="0.8" blue="0.79" /></text></element> - <element name="text_pawn1"><text string="♟"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_king1"><text string="[K]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_queen1"><text string="[Q]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_rook1"><text string="[R]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_bishop1"><text string="[B]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_knight1"><text string="[N]"><color red="0.81" green="0.8" blue="0.79" /></text></element> + <element name="text_pawn1"><text string="[P]"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_king2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♚"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[K]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_queen2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♛"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[Q]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_rook2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♜"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[R]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_bishop2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♝"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[B]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_knight2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♞"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[N]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_pawn2"> <rect><color red="0.81" green="0.8" blue="0.79" /></rect> - <text string="♟"><color red="0.1" green="0.1" blue="0.1" /></text> + <text string="[P]"><color red="0.1" green="0.1" blue="0.1" /></text> </element> <element name="text_rb00"><text string="Multi Move"><color red="0.51" green="0.5" blue="0.49" /></text></element> @@ -379,12 +379,12 @@ <bezel element="white"><bounds x="88" y="66" width="6" height="4" /></bezel> <bezel element="white"><bounds x="88" y="76" width="6" height="4" /></bezel> - <bezel element="text_king2"><bounds x="88" y="6.1" width="6" height="3.5" /></bezel> - <bezel element="text_queen2"><bounds x="88" y="16.1" width="6" height="3.5" /></bezel> - <bezel element="text_bishop2"><bounds x="88" y="26.1" width="6" height="3.5" /></bezel> - <bezel element="text_knight2"><bounds x="88" y="36.1" width="6" height="3.5" /></bezel> - <bezel element="text_rook2"><bounds x="88" y="46.1" width="6" height="3.5" /></bezel> - <bezel element="text_pawn2"><bounds x="88" y="56.1" width="6" height="3.5" /></bezel> + <bezel element="text_king2"><bounds x="88" y="6.7" width="6" height="2.2" /></bezel> + <bezel element="text_queen2"><bounds x="88" y="16.7" width="6" height="2.2" /></bezel> + <bezel element="text_bishop2"><bounds x="88" y="26.7" width="6" height="2.2" /></bezel> + <bezel element="text_knight2"><bounds x="88" y="36.7" width="6" height="2.2" /></bezel> + <bezel element="text_rook2"><bounds x="88" y="46.7" width="6" height="2.2" /></bezel> + <bezel element="text_pawn2"><bounds x="88" y="56.7" width="6" height="2.2" /></bezel> <bezel element="hlb" inputtag="IN.0" inputmask="0x200"><bounds x="88" y="6" width="6" height="4" /><color alpha="0.4" /></bezel> <bezel element="hlb" inputtag="IN.1" inputmask="0x200"><bounds x="88" y="16" width="6" height="4" /><color alpha="0.4" /></bezel> @@ -426,12 +426,12 @@ <bezel element="text_rg6"><bounds x="108" y="65.7" width="10" height="1.5" /></bezel> <bezel element="text_rg7"><bounds x="108" y="75.7" width="10" height="1.5" /></bezel> - <bezel element="text_king1"><bounds x="108.2" y="8.6" width="10" height="2" /></bezel> - <bezel element="text_queen1"><bounds x="108.2" y="18.6" width="10" height="2" /></bezel> - <bezel element="text_bishop1"><bounds x="108.2" y="28.6" width="10" height="2" /></bezel> - <bezel element="text_knight1"><bounds x="108.2" y="38.6" width="10" height="2" /></bezel> - <bezel element="text_rook1"><bounds x="108.2" y="48.6" width="10" height="2" /></bezel> - <bezel element="text_pawn1"><bounds x="108.2" y="58.6" width="10" height="2" /></bezel> + <bezel element="text_king1"><bounds x="108.2" y="8.7" width="10" height="1.5" /></bezel> + <bezel element="text_queen1"><bounds x="108.2" y="18.7" width="10" height="1.5" /></bezel> + <bezel element="text_bishop1"><bounds x="108.2" y="28.7" width="10" height="1.5" /></bezel> + <bezel element="text_knight1"><bounds x="108.2" y="38.7" width="10" height="1.5" /></bezel> + <bezel element="text_rook1"><bounds x="108.2" y="48.7" width="10" height="1.5" /></bezel> + <bezel element="text_pawn1"><bounds x="108.2" y="58.7" width="10" height="1.5" /></bezel> <bezel name="0.0" element="ledg"><bounds x="112" y="7.5" width="2" height="1" /></bezel> <bezel name="0.1" element="ledg"><bounds x="112" y="17.5" width="2" height="1" /></bezel> diff --git a/src/mame/layout/risc2500.lay b/src/mame/layout/risc2500.lay index 4adb6418077..64718c4b15b 100644 --- a/src/mame/layout/risc2500.lay +++ b/src/mame/layout/risc2500.lay @@ -181,21 +181,21 @@ <element name="text_up"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="↑" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_down"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="↓" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="text_enter"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_p1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♚" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_p2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♛" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_p3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♜" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_p4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♝" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_p5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♞" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> - <element name="text_p6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♟" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_p1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[K]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_p2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[Q]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_p3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[R]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_p4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[B]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_p5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[N]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> + <element name="text_p6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="[P]" > <color red="0.17" green="0.15" blue="0.15" /></text> </element> <element name="sym_colon"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element> <element name="sym_left"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="←" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> <element name="sym_right"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="→" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> - <element name="sym_p1"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="♚" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> - <element name="sym_p2"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="♛" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> - <element name="sym_p3"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="♜" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> - <element name="sym_p4"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="♝" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> - <element name="sym_p5"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="♞" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> - <element name="sym_p6"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="♟" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> + <element name="sym_p1"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[K]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> + <element name="sym_p2"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[Q]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> + <element name="sym_p3"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[R]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> + <element name="sym_p4"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[B]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> + <element name="sym_p5"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[N]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> + <element name="sym_p6"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="[P]" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> <element name="sym_white"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="○" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> <element name="sym_black"> <text string="●" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element> <element name="white"><rect><color red="1" green="1" blue="1" /></rect></element> @@ -203,19 +203,19 @@ <element name="background"><rect><color red="0.63" green="0.63" blue="0.63" /></rect></element> <element name="piece" defstate="0"> - <text string="♚" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♛" state="2"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♜" state="3"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♝" state="4"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♞" state="5"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♟" state="6"><color red="0.27" green="0.25" blue="0.25" /></text> - - <text string="♚" state="7"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♛" state="8"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♜" state="9"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♝" state="10"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♞" state="11"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♟" state="12"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[K]" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[Q]" state="2"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[R]" state="3"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[B]" state="4"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[N]" state="5"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[P]" state="6"><color red="0.27" green="0.25" blue="0.25" /></text> + + <text string="[K]" state="7"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[Q]" state="8"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[R]" state="9"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[B]" state="10"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[N]" state="11"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[P]" state="12"><color red="0.71" green="0.7" blue="0.69" /></text> <!-- selected pieces --> <disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk> @@ -231,19 +231,19 @@ <disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk> <disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk> - <text string="♚" state="17"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♛" state="18"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♜" state="19"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♝" state="20"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♞" state="21"><color red="0.27" green="0.25" blue="0.25" /></text> - <text string="♟" state="22"><color red="0.27" green="0.25" blue="0.25" /></text> - - <text string="♚" state="23"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♛" state="24"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♜" state="25"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♝" state="26"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♞" state="27"><color red="0.71" green="0.7" blue="0.69" /></text> - <text string="♟" state="28"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[K]" state="17"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[Q]" state="18"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[R]" state="19"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[B]" state="20"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[N]" state="21"><color red="0.27" green="0.25" blue="0.25" /></text> + <text string="[P]" state="22"><color red="0.27" green="0.25" blue="0.25" /></text> + + <text string="[K]" state="23"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[Q]" state="24"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[R]" state="25"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[B]" state="26"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[N]" state="27"><color red="0.71" green="0.7" blue="0.69" /></text> + <text string="[P]" state="28"><color red="0.71" green="0.7" blue="0.69" /></text> </element> <!-- build screen --> @@ -479,12 +479,12 @@ <bezel name="digit0" element="digit" ><bounds x="122.85" y="9" width="1.6" height="3" /></bezel> <bezel name="sym1" element="sym_right" > <bounds x="121.60" y="12.7" width="3" height="3" /></bezel> - <bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.5" width="5" height="3" /></bezel> - <bezel name="sym3" element="sym_p5" > <bounds x="113.75" y="12.5" width="4" height="3" /></bezel> - <bezel name="sym4" element="sym_p4" > <bounds x="110.88" y="12.5" width="4" height="3" /></bezel> - <bezel name="sym6" element="sym_p3" > <bounds x="108.00" y="12.5" width="4" height="3" /></bezel> - <bezel name="sym7" element="sym_p2" > <bounds x="105.13" y="12.5" width="4" height="3" /></bezel> - <bezel name="sym8" element="sym_p1" > <bounds x="102.25" y="12.5" width="4" height="3" /></bezel> + <bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.7" width="3.5" height="2.2" /></bezel> + <bezel name="sym3" element="sym_p5" > <bounds x="113.75" y="12.7" width="3.5" height="2.2" /></bezel> + <bezel name="sym4" element="sym_p4" > <bounds x="110.88" y="12.7" width="3.5" height="2.2" /></bezel> + <bezel name="sym6" element="sym_p3" > <bounds x="108.00" y="12.7" width="3.5" height="2.2" /></bezel> + <bezel name="sym7" element="sym_p2" > <bounds x="105.13" y="12.7" width="3.5" height="2.2" /></bezel> + <bezel name="sym8" element="sym_p1" > <bounds x="102.25" y="12.7" width="3.5" height="2.2" /></bezel> <bezel name="sym9" element="sym_white" > <bounds x="99.00" y="12.5" width="4" height="3" /></bezel> <bezel name="sym10" element="sym_black" > <bounds x="99.90" y="13.0" width="2.2" height="2.2" /></bezel> <bezel name="sym11" element="sym_left" > <bounds x="95.40" y="12.7" width="3" height="3" /></bezel> @@ -504,12 +504,12 @@ <bezel element="text_down" ><bounds x="132" y="51" width="7" height="3" /></bezel> <bezel element="text_enter" ><bounds x="141" y="52" width="7" height="2" /></bezel> - <bezel element="text_p1" ><bounds x="96" y="65" width="7" height="5" /></bezel> - <bezel element="text_p2" ><bounds x="105" y="65" width="7" height="5" /></bezel> - <bezel element="text_p3" ><bounds x="114" y="65" width="7" height="5" /></bezel> - <bezel element="text_p4" ><bounds x="123" y="65" width="7" height="5" /></bezel> - <bezel element="text_p5" ><bounds x="132" y="65" width="7" height="5" /></bezel> - <bezel element="text_p6" ><bounds x="141" y="65" width="7" height="5" /></bezel> + <bezel element="text_p1" ><bounds x="96" y="66" width="7" height="3" /></bezel> + <bezel element="text_p2" ><bounds x="105" y="66" width="7" height="3" /></bezel> + <bezel element="text_p3" ><bounds x="114" y="66" width="7" height="3" /></bezel> + <bezel element="text_p4" ><bounds x="123" y="66" width="7" height="3" /></bezel> + <bezel element="text_p5" ><bounds x="132" y="66" width="7" height="3" /></bezel> + <bezel element="text_p6" ><bounds x="141" y="66" width="7" height="3" /></bezel> <bezel element="button" inputtag="RESET" inputmask="0x00000001"><bounds x="96" y="40" width="8" height="2" /></bezel> <bezel element="button" inputtag="P7" inputmask="0x80000000"><bounds x="107" y="40" width="8" height="2" /></bezel> diff --git a/src/mame/layout/sc2.lay b/src/mame/layout/sc2.lay index 1c3db18b2ba..8ca6bdcf911 100644 --- a/src/mame/layout/sc2.lay +++ b/src/mame/layout/sc2.lay @@ -3,33 +3,201 @@ <!-- define elements --> + <element name="black"><rect><color red="0.22" green="0.22" blue="0.22" /></rect></element> + <element name="white"><rect><color red="0.72" green="0.72" blue="0.72" /></rect></element> + <element name="digit" defstate="0"> <led7seg><color red="0.25" green="0.9" blue="0.1" /></led7seg> </element> <element name="led" defstate="0"> <disk state="1"><color red="1.0" green="0.0" blue="0.0" /></disk> - <disk state="0"><color red="0.15" green="0.0" blue="0.0" /> </disk> + <disk state="0"><color red="0.15" green="0.0" blue="0.0" /></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> + <rect state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </rect> </element> <element name="text_schach"><text string="SCHACH" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element> <element name="text_matt"><text string="MATT" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element> + <element name="text_b01"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="R"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + <element name="text_b02"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="K"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + <element name="text_b03"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="W"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + <element name="text_b04"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="P"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + <element name="text_b05"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="T"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + <element name="text_b06"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="L"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + <element name="text_b07"> + <rect><color red="0.22" green="0.22" blue="0.22" /></rect> + <text string="Q"><color red="0.82" green="0.82" blue="0.82" /></text> + </element> + + <element name="text_b08a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="A"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b08b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="1"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b09a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="B"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b09b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="2"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b10a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="C"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b10b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="3"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b11a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="D"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b11b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="4"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b12a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="E"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b12b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="5"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b13a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="F"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b13b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="6"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b14a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="G"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b14b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="7"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b15a"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="H"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <element name="text_b15b"> + <rect><color red="0.72" green="0.72" blue="0.72" /></rect> + <text string="8"><color red="0.08" green="0.08" blue="0.08" /></text> + </element> + <!-- build screen --> <view name="Internal Layout"> - <bounds left="5" right="265" top="5" bottom="160" /> + <bounds left="0" right="270" top="0" bottom="395" /> <bezel name="digit0" element="digit"><bounds x="10" y="10" width="50" height="80" /></bezel> <bezel name="digit1" element="digit"><bounds x="70" y="10" width="50" height="80" /></bezel> <bezel name="digit2" element="digit"><bounds x="150" y="10" width="50" height="80" /></bezel> <bezel name="digit3" element="digit"><bounds x="210" y="10" width="50" height="80" /></bezel> - <bezel name="led0" element="led"><bounds x="10" y="135" width="20" height="20" /></bezel> - <bezel name="led1" element="led"><bounds x="240" y="135" width="20" height="20" /></bezel> + <bezel name="led0" element="led"><bounds x="12.5" y="152.5" width="20" height="20" /></bezel> + <bezel name="led1" element="led"><bounds x="237.5" y="152.5" width="20" height="20" /></bezel> + + <bezel element="text_schach"><bounds x="5" y="110" width="100" height="20" /></bezel> + <bezel element="text_matt"><bounds x="165" y="110" width="100" height="20" /></bezel> + + <!-- button panel --> + + <bezel element="black"><bounds x="42.5" y="135" width="55" height="55" /></bezel> + <bezel element="black"><bounds x="107.5" y="135" width="55" height="55" /></bezel> + <bezel element="black"><bounds x="172.5" y="135" width="55" height="55" /></bezel> + <bezel element="black"><bounds x="10" y="200" width="55" height="55" /></bezel> + <bezel element="black"><bounds x="75" y="200" width="55" height="55" /></bezel> + <bezel element="black"><bounds x="140" y="200" width="55" height="55" /></bezel> + <bezel element="black"><bounds x="205" y="200" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="10" y="265" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="75" y="265" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="140" y="265" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="205" y="265" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="10" y="330" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="75" y="330" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="140" y="330" width="55" height="55" /></bezel> + <bezel element="white"><bounds x="205" y="330" width="55" height="55" /></bezel> + + <bezel element="text_b01"><bounds x="45" y="145" width="50" height="33" /></bezel> + <bezel element="text_b02"><bounds x="110" y="145" width="50" height="33" /></bezel> + <bezel element="text_b03"><bounds x="175" y="145" width="50" height="33" /></bezel> + <bezel element="text_b04"><bounds x="12.5" y="210" width="50" height="33" /></bezel> + <bezel element="text_b05"><bounds x="77.5" y="210" width="50" height="33" /></bezel> + <bezel element="text_b06"><bounds x="142.5" y="210" width="50" height="33" /></bezel> + <bezel element="text_b07"><bounds x="207.5" y="210" width="50" height="33" /></bezel> + + <bezel element="text_b08a"><bounds x="12.5" y="267.5" width="50" height="25" /></bezel> + <bezel element="text_b08b"><bounds x="12.5" y="292.5" width="50" height="25" /></bezel> + <bezel element="text_b09a"><bounds x="77.5" y="267.5" width="50" height="25" /></bezel> + <bezel element="text_b09b"><bounds x="77.5" y="292.5" width="50" height="25" /></bezel> + <bezel element="text_b10a"><bounds x="142.5" y="267.5" width="50" height="25" /></bezel> + <bezel element="text_b10b"><bounds x="142.5" y="292.5" width="50" height="25" /></bezel> + <bezel element="text_b11a"><bounds x="207.5" y="267.5" width="50" height="25" /></bezel> + <bezel element="text_b11b"><bounds x="207.5" y="292.5" width="50" height="25" /></bezel> + <bezel element="text_b12a"><bounds x="12.5" y="332.5" width="50" height="25" /></bezel> + <bezel element="text_b12b"><bounds x="12.5" y="357.5" width="50" height="25" /></bezel> + <bezel element="text_b13a"><bounds x="77.5" y="332.5" width="50" height="25" /></bezel> + <bezel element="text_b13b"><bounds x="77.5" y="357.5" width="50" height="25" /></bezel> + <bezel element="text_b14a"><bounds x="142.5" y="332.5" width="50" height="25" /></bezel> + <bezel element="text_b14b"><bounds x="142.5" y="357.5" width="50" height="25" /></bezel> + <bezel element="text_b15a"><bounds x="207.5" y="332.5" width="50" height="25" /></bezel> + <bezel element="text_b15b"><bounds x="207.5" y="357.5" width="50" height="25" /></bezel> + + <bezel element="hl" inputtag="LINE4" inputmask="0x40"><bounds x="42.5" y="135" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE4" inputmask="0x10"><bounds x="107.5" y="135" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE4" inputmask="0x20"><bounds x="172.5" y="135" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE4" inputmask="0x80"><bounds x="10" y="200" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE1" inputmask="0x20"><bounds x="75" y="200" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE1" inputmask="0x40"><bounds x="140" y="200" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE1" inputmask="0x80"><bounds x="205" y="200" width="55" height="55" /><color alpha="0.22" /></bezel> + <bezel element="hl" inputtag="LINE2" inputmask="0x10"><bounds x="10" y="265" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE2" inputmask="0x20"><bounds x="75" y="265" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE2" inputmask="0x40"><bounds x="140" y="265" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE2" inputmask="0x80"><bounds x="205" y="265" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE3" inputmask="0x10"><bounds x="10" y="330" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE3" inputmask="0x20"><bounds x="75" y="330" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE3" inputmask="0x40"><bounds x="140" y="330" width="55" height="55" /><color alpha="0.25" /></bezel> + <bezel element="hl" inputtag="LINE3" inputmask="0x80"><bounds x="205" y="330" width="55" height="55" /><color alpha="0.25" /></bezel> - <bezel element="text_schach"><bounds x="10" y="110" width="100" height="20" /></bezel> - <bezel element="text_matt"><bounds x="160" y="110" width="100" height="20" /></bezel> </view> </mamelayout> diff --git a/src/mame/layout/simon.lay b/src/mame/layout/simon.lay index c268c37ec88..98129551cfb 100644 --- a/src/mame/layout/simon.lay +++ b/src/mame/layout/simon.lay @@ -7,16 +7,15 @@ <element name="disk_black"><disk><color red="0.0" green="0.0" blue="0.0" /></disk></element> <element name="disk_grey"><disk><color red="0.6" green="0.6" blue="0.6" /></disk></element> -<!-- TODO: add these, maybe --> <element name="text_game"> <rect><color red="0.6" green="0.6" blue="0.6" /></rect> - <text string="GAME"> + <text string="GAME (1-3)" align="1"> <color red="0.0" green="0.0" blue="0.0" /> </text> </element> <element name="text_skill"> <rect><color red="0.6" green="0.6" blue="0.6" /></rect> - <text string="SKILL LEVEL"> + <text string="SKILL LEVEL (1-4)" align="1"> <color red="0.0" green="0.0" blue="0.0" /> </text> </element> @@ -40,6 +39,49 @@ </text> </element> + <element name="text_lb"> + <disk><color red="0.0" green="0.0" blue="0.0" /></disk> + <text string="◄"> + <color red="0.3" green="0.4" blue="0.85" /> + </text> + </element> + <element name="text_rb"> + <disk><color red="0.0" green="0.0" blue="0.0" /></disk> + <text string="►"> + <color red="0.3" green="0.4" blue="0.85" /> + </text> + </element> + <element name="text_lg"> + <disk><color red="0.0" green="0.0" blue="0.0" /></disk> + <text string="◄"> + <color red="0.33" green="0.8" blue="0.25" /> + </text> + </element> + <element name="text_rg"> + <disk><color red="0.0" green="0.0" blue="0.0" /></disk> + <text string="►"> + <color red="0.33" green="0.8" blue="0.25" /> + </text> + </element> + + <element name="switch_game" defstate="0"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text state="0x02" string="1"><color red="0.0" green="0.0" blue="0.0" /></text> + <text state="0x01" string="2"><color red="0.0" green="0.0" blue="0.0" /></text> + <text state="0x04" string="3"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="switch_skill" defstate="0"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text state="0x02" string="1"><color red="0.0" green="0.0" blue="0.0" /></text> + <text state="0x04" string="2"><color red="0.0" green="0.0" blue="0.0" /></text> + <text state="0x08" string="3"><color red="0.0" green="0.0" blue="0.0" /></text> + <text state="0x01" string="4"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + + <element name="nothing" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + </element> + <element name="button_r" defstate="0"> <disk><color red="0.0" green="0.0" blue="0.0" /></disk> <disk state="0"> @@ -131,7 +173,6 @@ <bounds x="140" y="140" width="20" height="20" /> </bezel> - <bezel element="static_black"> <bounds x="0" y="90" width="200" height="20" /> </bezel> @@ -149,6 +190,51 @@ <bounds x="52" y="90" width="96" height="1" /> </bezel> + <!-- switches --> + + <bezel element="text_game"> + <bounds x="68" y="93" width="20" height="4" /> + </bezel> + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"> + <bounds x="73.9" y="97.9" width="3.2" height="4.2" /> + </bezel> + <bezel element="switch_game" inputtag="IN.0" inputmask="0x07" inputraw="1"> + <bounds x="74" y="98" width="3" height="4" /> + </bezel> + <bezel element="text_lg"> + <bounds x="66.5" y="97" width="6" height="6" /> + </bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x01"> + <bounds x="65.5" y="96" width="8" height="8" /> + </bezel> + <bezel element="text_rg"> + <bounds x="78" y="97" width="6" height="6" /> + </bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x02"> + <bounds x="77" y="96" width="8" height="8" /> + </bezel> + + <bezel element="text_skill"> + <bounds x="112" y="93" width="30" height="4" /> + </bezel> + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"> + <bounds x="122.9" y="97.9" width="3.2" height="4.2" /> + </bezel> + <bezel element="switch_skill" inputtag="IN.3" inputmask="0x0f" inputraw="1"> + <bounds x="123" y="98" width="3" height="4" /> + </bezel> + <bezel element="text_lb"> + <bounds x="115.5" y="97" width="6" height="6" /> + </bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x04"> + <bounds x="114.5" y="96" width="8" height="8" /> + </bezel> + <bezel element="text_rb"> + <bounds x="127" y="97" width="6" height="6" /> + </bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x08"> + <bounds x="126" y="96" width="8" height="8" /> + </bezel> <!-- other controls --> diff --git a/src/mame/layout/ssimon.lay b/src/mame/layout/ssimon.lay index 50f9b1f0cc0..9be8cca7a43 100644 --- a/src/mame/layout/ssimon.lay +++ b/src/mame/layout/ssimon.lay @@ -4,8 +4,13 @@ <!-- define elements --> <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element> + <element name="static_black2"><rect><color red="0.25" green="0.25" blue="0.25" /></rect></element> <element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element> + <element name="nothing" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + </element> + <element name="text_tie"> <rect><color red="0.6" green="0.6" blue="0.6" /></rect> <text string="TIE"><color red="0.0" green="0.0" blue="0.0" /></text> @@ -19,23 +24,75 @@ <text string="LOSE"><color red="0.0" green="0.0" blue="0.0" /></text> </element> - <element name="text_decision"> - <rect><color red="0.0" green="0.0" blue="0.0" /></rect> - <text string="DECISION"><color red="0.6" green="0.6" blue="0.6" /></text> + <element name="text_1"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="1"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_2"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="2"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_3"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="3"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_4"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="4"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_5"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="5"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_hh"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="HEAD-HEAD" align="2"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_s1"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="SIMPLE" align="1"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_s2"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="NORMAL" align="1"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + <element name="text_s3"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="SUPER" align="1"><color red="0.0" green="0.0" blue="0.0" /></text> + </element> + + <element name="text_speed"><text string="SPEED"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_game"><text string="GAME"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_skill"><text string="SKILL LV."><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_decision"><text string="DECISION"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_longest"><text string="LONGEST"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_last"><text string="LAST"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_start"><text string="START"><color red="0.6" green="0.6" blue="0.6" /></text></element> + + <element name="switch0" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="0"><color red="0.6" green="0.6" blue="0.6" /></rect> + </element> + <element name="switch1" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="1"><color red="0.6" green="0.6" blue="0.6" /></rect> </element> - <element name="text_longest"> - <rect><color red="0.0" green="0.0" blue="0.0" /></rect> - <text string="LONGEST"><color red="0.6" green="0.6" blue="0.6" /></text> + <element name="switch2" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="2"><color red="0.6" green="0.6" blue="0.6" /></rect> </element> - <element name="text_last"> - <rect><color red="0.0" green="0.0" blue="0.0" /></rect> - <text string="LAST"><color red="0.6" green="0.6" blue="0.6" /></text> + <element name="switch4" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="4"><color red="0.6" green="0.6" blue="0.6" /></rect> </element> - <element name="text_start"> - <rect><color red="0.0" green="0.0" blue="0.0" /></rect> - <text string="START"><color red="0.6" green="0.6" blue="0.6" /></text> + <element name="switch8" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <rect state="8"><color red="0.6" green="0.6" blue="0.6" /></rect> </element> + <element name="text_up"><text string="▲"><color red="0.6" green="0.6" blue="0.1" /></text></element> + <element name="text_down"><text string="▼"><color red="0.6" green="0.6" blue="0.1" /></text></element> + <element name="button" defstate="0"> <rect> <color red="0.0" green="0.0" blue="0.0" /> @@ -72,10 +129,7 @@ <!-- build screen --> <view name="Internal Layout"> - <bounds left="0" right="47" top="0" bottom="53" /> - <bezel element="static_black"> - <bounds left="0" right="47" top="0" bottom="53" /> - </bezel> + <bounds left="-8" right="55" top="0" bottom="53" /> <!-- lamps --> @@ -109,15 +163,15 @@ <bezel element="static_grey"><bounds x="1" y="22" width="45" height="9" /></bezel> - <bezel element="text_tie"><bounds x="1" y="22.2" width="10" height="0.6" /></bezel> - <bezel element="text_lose"><bounds x="12" y="22.2" width="10" height="0.6" /></bezel> - <bezel element="text_win"><bounds x="25" y="22.2" width="10" height="0.6" /></bezel> - <bezel element="text_lose"><bounds x="36" y="22.2" width="10" height="0.6" /></bezel> + <bezel element="text_tie"><bounds x="1" y="22.2" width="10" height="0.9" /></bezel> + <bezel element="text_lose"><bounds x="12" y="22.2" width="10" height="0.9" /></bezel> + <bezel element="text_win"><bounds x="25" y="22.2" width="10" height="0.9" /></bezel> + <bezel element="text_lose"><bounds x="36" y="22.2" width="10" height="0.9" /></bezel> - <bezel element="text_tie"><bounds x="1" y="30.2" width="10" height="0.6" /></bezel> - <bezel element="text_win"><bounds x="12" y="30.2" width="10" height="0.6" /></bezel> - <bezel element="text_lose"><bounds x="25" y="30.2" width="10" height="0.6" /></bezel> - <bezel element="text_lose"><bounds x="36" y="30.2" width="10" height="0.6" /></bezel> + <bezel element="text_tie"><bounds x="1" y="29.9" width="10" height="0.9" /></bezel> + <bezel element="text_win"><bounds x="12" y="29.9" width="10" height="0.9" /></bezel> + <bezel element="text_lose"><bounds x="25" y="29.9" width="10" height="0.9" /></bezel> + <bezel element="text_lose"><bounds x="36" y="29.9" width="10" height="0.9" /></bezel> <bezel element="static_black"><bounds x="2" y="24" width="7" height="2" /></bezel> <bezel element="text_decision"><bounds x="2" y="24.3" width="7" height="1.4" /></bezel> @@ -143,5 +197,87 @@ <bounds x="34.3" y="27" width="3.2" height="2" /> </bezel> + <!-- side switches --> + + <bezel element="static_grey"><bounds x="-5" y="16" width="5" height="21" /></bezel> + <bezel element="static_black"><bounds x="-4.5" y="24" width="4" height="2" /></bezel> + <bezel element="static_black"><bounds x="-4.5" y="27" width="4" height="2" /></bezel> + <bezel element="text_speed"><bounds x="-4.5" y="27.6" width="4" height="0.9" /></bezel> + + <bezel element="text_s1"><bounds x="-3.9" y="29.65" width="3.5" height="0.9" /></bezel> + <bezel element="text_s2"><bounds x="-3.9" y="30.90" width="3.5" height="0.9" /></bezel> + <bezel element="text_s3"><bounds x="-3.9" y="32.15" width="3.5" height="0.9" /></bezel> + + <bezel element="static_black2"><bounds x="-6.5" y="29.125" width="0.5" height="4.5" /></bezel> + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="-7.25" y="29.125" width="2" height="4.5" /></bezel> + <bezel element="switch0" inputtag="IN.6" inputmask="0x03" inputraw="1"><bounds x="-7" y="29.625" width="1.5" height="1" /></bezel> + <bezel element="switch1" inputtag="IN.6" inputmask="0x03" inputraw="1"><bounds x="-7" y="30.875" width="1.5" height="1" /></bezel> + <bezel element="switch2" inputtag="IN.6" inputmask="0x03" inputraw="1"><bounds x="-7" y="32.125" width="1.5" height="1" /></bezel> + + <bezel element="static_black"><bounds x="-6.25" y="30.00" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="-6.25" y="31.25" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="-6.25" y="32.50" width="2" height="0.25" /></bezel> + + <bezel element="text_up"><bounds x="-7.7" y="27.25" width="3" height="1.6" /></bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x10"><bounds x="-7.2" y="27.15" width="2" height="1.8" /></bezel> + <bezel element="text_down"><bounds x="-7.7" y="33.75" width="3" height="1.6" /></bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x20"><bounds x="-7.2" y="33.65" width="2" height="1.8" /></bezel> + + <bezel element="static_grey"><bounds x="47" y="16" width="5" height="21" /></bezel> + <bezel element="static_black"><bounds x="47.5" y="24" width="4" height="2" /></bezel> + <bezel element="static_black"><bounds x="47.5" y="27" width="4" height="2" /></bezel> + <bezel element="text_game"><bounds x="47.5" y="24.6" width="4" height="0.9" /></bezel> + <bezel element="text_skill"><bounds x="47.5" y="27.6" width="4" height="0.9" /></bezel> + + <bezel element="text_5"><bounds x="50.25" y="17.40" width="1" height="0.9" /></bezel> + <bezel element="text_4"><bounds x="50.25" y="18.65" width="1" height="0.9" /></bezel> + <bezel element="text_3"><bounds x="50.25" y="19.90" width="1" height="0.9" /></bezel> + <bezel element="text_2"><bounds x="50.25" y="21.15" width="1" height="0.9" /></bezel> + <bezel element="text_1"><bounds x="50.25" y="22.40" width="1" height="0.9" /></bezel> + + <bezel element="text_hh"><bounds x="47.25" y="29.65" width="4" height="0.9" /></bezel> + <bezel element="text_1"><bounds x="50.25" y="30.90" width="1" height="0.9" /></bezel> + <bezel element="text_2"><bounds x="50.25" y="32.15" width="1" height="0.9" /></bezel> + <bezel element="text_3"><bounds x="50.25" y="33.40" width="1" height="0.9" /></bezel> + <bezel element="text_4"><bounds x="50.25" y="34.65" width="1" height="0.9" /></bezel> + + <bezel element="static_black2"><bounds x="53" y="16.875" width="0.5" height="7" /></bezel> + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="52.25" y="16.875" width="2" height="7" /></bezel> + <bezel element="switch0" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="17.375" width="1.5" height="1" /></bezel> + <bezel element="switch8" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="18.625" width="1.5" height="1" /></bezel> + <bezel element="switch4" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="19.875" width="1.5" height="1" /></bezel> + <bezel element="switch2" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="21.125" width="1.5" height="1" /></bezel> + <bezel element="switch1" inputtag="IN.0" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="22.375" width="1.5" height="1" /></bezel> + + <bezel element="static_black2"><bounds x="53" y="29.125" width="0.5" height="7" /></bezel> + <bezel element="nothing" inputtag="DUMMY" inputmask="0x01"><bounds x="52.25" y="29.125" width="2" height="7" /></bezel> + <bezel element="switch0" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="29.625" width="1.5" height="1" /></bezel> + <bezel element="switch2" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="30.875" width="1.5" height="1" /></bezel> + <bezel element="switch4" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="32.125" width="1.5" height="1" /></bezel> + <bezel element="switch8" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="33.375" width="1.5" height="1" /></bezel> + <bezel element="switch1" inputtag="IN.4" inputmask="0x0f" inputraw="1"><bounds x="52.5" y="34.625" width="1.5" height="1" /></bezel> + + <bezel element="static_black"><bounds x="51.25" y="17.75" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="19.00" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="20.25" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="21.50" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="22.75" width="2" height="0.25" /></bezel> + + <bezel element="static_black"><bounds x="51.25" y="30.00" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="31.25" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="32.50" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="33.75" width="2" height="0.25" /></bezel> + <bezel element="static_black"><bounds x="51.25" y="35.00" width="2" height="0.25" /></bezel> + + <bezel element="text_up"><bounds x="51.8" y="15" width="3" height="1.6" /></bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x02"><bounds x="52.3" y="14.9" width="2" height="1.8" /></bezel> + <bezel element="text_down"><bounds x="51.8" y="24" width="3" height="1.6" /></bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x01"><bounds x="52.3" y="23.9" width="2" height="1.8" /></bezel> + + <bezel element="text_up"><bounds x="51.8" y="27.25" width="3" height="1.6" /></bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x04"><bounds x="52.3" y="27.15" width="2" height="1.8" /></bezel> + <bezel element="text_down"><bounds x="51.8" y="36.25" width="3" height="1.6" /></bezel> + <bezel element="nothing" inputtag="SWITCH" inputmask="0x08"><bounds x="52.3" y="36.15" width="2" height="1.8" /></bezel> + </view> </mamelayout> diff --git a/src/mame/layout/ti74.lay b/src/mame/layout/ti74.lay index 24563b7dc8c..b8df75728a9 100644 --- a/src/mame/layout/ti74.lay +++ b/src/mame/layout/ti74.lay @@ -9,20 +9,20 @@ <element name="ind_left" defstate="0"> <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect> - <text string="◀" align="1" state="0"> + <text string="◄" align="1" state="0"> <color red="0.515" green="0.537" blue="0.548" /> </text> - <text string="◀" align="1" state="1"> + <text string="◄" align="1" state="1"> <color red="0.361" green="0.326" blue="0.346" /> </text> </element> <element name="ind_right" defstate="0"> <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect> - <text string="▶" align="2" state="0"> + <text string="►" align="2" state="0"> <color red="0.515" green="0.537" blue="0.548" /> </text> - <text string="▶" align="2" state="1"> + <text string="►" align="2" state="1"> <color red="0.361" green="0.326" blue="0.346" /> </text> </element> @@ -172,11 +172,11 @@ <!-- draw top row of lcd indicators --> <bezel name="lamp10" element="ind_left"> - <bounds x="1.5" y="0" width="20" height="7" /> + <bounds x="1.5" y="0.5" width="20" height="5.5" /> </bezel> <bezel name="lamp4" element="ind_right"> - <bounds x="167.5" y="0" width="20" height="7" /> + <bounds x="167.5" y="0.5" width="20" height="5.5" /> </bezel> <bezel name="lamp11" element="ind_shift"> diff --git a/src/mame/layout/ti95.lay b/src/mame/layout/ti95.lay index 7c70bda1e05..ea118cee66b 100644 --- a/src/mame/layout/ti95.lay +++ b/src/mame/layout/ti95.lay @@ -39,10 +39,10 @@ <element name="ind_left" defstate="0"> <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect> - <text string="◀" align="1" state="0"> + <text string="◄" align="1" state="0"> <color red="0.515" green="0.537" blue="0.548" /> </text> - <text string="◀" align="1" state="1"> + <text string="◄" align="1" state="1"> <color red="0.361" green="0.326" blue="0.346" /> </text> </element> @@ -259,7 +259,7 @@ <bounds x="1" y="9" width="5" height="5" /> </bezel> <bezel name="lamp71" element="ind_left"> - <bounds x="8" y="8" width="5" height="7" /> + <bounds x="7.5" y="8" width="4" height="6" /> </bezel> <!-- right: run, sys --> diff --git a/src/mame/layout/touchme.lay b/src/mame/layout/touchme.lay index 00745eaa252..7d514b91729 100644 --- a/src/mame/layout/touchme.lay +++ b/src/mame/layout/touchme.lay @@ -34,6 +34,31 @@ <rect><color red="0.7" green="0.72" blue="0.75" /></rect> <text string="SKILL"><color red="0.02" green="0.02" blue="0.02" /></text> </element> + <element name="text_s1"> + <rect><color red="0.7" green="0.72" blue="0.75" /></rect> + <text string="1"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="text_s2"> + <rect><color red="0.7" green="0.72" blue="0.75" /></rect> + <text string="2"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + <element name="text_s3"> + <rect><color red="0.7" green="0.72" blue="0.75" /></rect> + <text string="3"><color red="0.02" green="0.02" blue="0.02" /></text> + </element> + + <element name="switch1" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x06"><color red="0.45" green="0.45" blue="0.45" /></disk> + </element> + <element name="switch2" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x05"><color red="0.45" green="0.45" blue="0.45" /></disk> + </element> + <element name="switch3" defstate="0"> + <text string=" "><color red="0" green="0" blue="0" /></text> + <disk state="0x03"><color red="0.45" green="0.45" blue="0.45" /></disk> + </element> <element name="hl" defstate="0"> <text string=" "><color red="0.0" green="0.0" blue="0.0" /></text> @@ -53,14 +78,14 @@ <!-- build screen --> <view name="Internal Layout"> - <bounds left="1.41" right="10.89" top="5" bottom="19.3" /> + <bounds left="1.41" right="10.89" top="5" bottom="20" /> <bezel name="digit0" element="digit"><bounds x="5.15" y="5.6" width="1" height="1.5" /></bezel> <bezel name="digit1" element="digit"><bounds x="6.15" y="5.6" width="1" height="1.5" /></bezel> <!-- bezel (also allow clicking it) --> - <bezel element="static_gray"><bounds x="1.4" y="7.7" width="9.5" height="12" /></bezel> + <bezel element="static_gray"><bounds x="1.4" y="7.7" width="9.5" height="12.4" /></bezel> <bezel element="static_black"><bounds x="1.7" y="9.7" width="8.9" height="8.9" /></bezel> <bezel element="static_blue"><bounds x="2" y="10" width="4" height="4" /></bezel> @@ -75,37 +100,45 @@ <!-- smooth edges --> - <bezel element="static_gray"><bounds x="1.5" y="9.5" width="1.3" height="1.3" /></bezel> - <bezel element="disk_black"><bounds x="1.7" y="9.7" width="2" height="2" /></bezel> - <bezel element="disk_blue"><bounds x="2" y="10" width="2" height="2" /></bezel> - <bezel element="disk_blue"><bounds x="2.15" y="10" width="2" height="2" /></bezel> - <bezel element="disk_blue"><bounds x="2.3" y="10" width="2" height="2" /></bezel> - <bezel element="disk_blue"><bounds x="2" y="10.15" width="2" height="2" /></bezel> - <bezel element="disk_blue"><bounds x="2" y="10.3" width="2" height="2" /></bezel> - - <bezel element="static_gray"><bounds x="9.5" y="9.5" width="1.3" height="1.3" /></bezel> - <bezel element="disk_black"><bounds x="8.6" y="9.7" width="2" height="2" /></bezel> - <bezel element="disk_yellow"><bounds x="8.3" y="10" width="2" height="2" /></bezel> - <bezel element="disk_yellow"><bounds x="8.15" y="10" width="2" height="2" /></bezel> - <bezel element="disk_yellow"><bounds x="8.0" y="10" width="2" height="2" /></bezel> - <bezel element="disk_yellow"><bounds x="8.3" y="10.15" width="2" height="2" /></bezel> - <bezel element="disk_yellow"><bounds x="8.3" y="10.3" width="2" height="2" /></bezel> - - <bezel element="static_gray"><bounds x="1.5" y="17.5" width="1.3" height="1.3" /></bezel> - <bezel element="disk_black"><bounds x="1.7" y="16.6" width="2" height="2" /></bezel> - <bezel element="disk_red"><bounds x="2" y="16.3" width="2" height="2" /></bezel> - <bezel element="disk_red"><bounds x="2.15" y="16.3" width="2" height="2" /></bezel> - <bezel element="disk_red"><bounds x="2.3" y="16.3" width="2" height="2" /></bezel> - <bezel element="disk_red"><bounds x="2" y="16.15" width="2" height="2" /></bezel> - <bezel element="disk_red"><bounds x="2" y="16.0" width="2" height="2" /></bezel> - - <bezel element="static_gray"><bounds x="9.5" y="17.5" width="1.3" height="1.3" /></bezel> - <bezel element="disk_black"><bounds x="8.6" y="16.6" width="2" height="2" /></bezel> - <bezel element="disk_green"><bounds x="8.3" y="16.3" width="2" height="2" /></bezel> - <bezel element="disk_green"><bounds x="8.15" y="16.3" width="2" height="2" /></bezel> - <bezel element="disk_green"><bounds x="8.0" y="16.3" width="2" height="2" /></bezel> - <bezel element="disk_green"><bounds x="8.3" y="16.15" width="2" height="2" /></bezel> - <bezel element="disk_green"><bounds x="8.3" y="16.0" width="2" height="2" /></bezel> + <bezel element="static_gray"><bounds x="1.5" y="9.3" width="1.55" height="1.55" /></bezel> + <bezel element="disk_black"><bounds x="1.7" y="9.7" width="2.6" height="2.6" /></bezel> + <repeat count="10"> + <param name="x" start="2.0" increment="0.1" /> + <param name="y" start="10.0" increment="0.1" /> + <bezel element="disk_blue"><bounds x="2.0" y="~y~" width="2" height="2" /></bezel> + <bezel element="disk_blue"><bounds x="~x~" y="10.0" width="2" height="2" /></bezel> + <bezel element="disk_blue"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel> + </repeat> + + <bezel element="static_gray"><bounds x="9.25" y="9.3" width="1.55" height="1.55" /></bezel> + <bezel element="disk_black"><bounds x="8.0" y="9.7" width="2.6" height="2.6" /></bezel> + <repeat count="10"> + <param name="x" start="8.31" increment="-0.1" /> + <param name="y" start="10.0" increment="0.1" /> + <bezel element="disk_yellow"><bounds x="8.31" y="~y~" width="2" height="2" /></bezel> + <bezel element="disk_yellow"><bounds x="~x~" y="10.0" width="2" height="2" /></bezel> + <bezel element="disk_yellow"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel> + </repeat> + + <bezel element="static_gray"><bounds x="1.5" y="17.25" width="1.55" height="1.55" /></bezel> + <bezel element="disk_black"><bounds x="1.7" y="16.0" width="2.6" height="2.6" /></bezel> + <repeat count="10"> + <param name="x" start="2.0" increment="0.1" /> + <param name="y" start="16.31" increment="-0.1" /> + <bezel element="disk_red"><bounds x="2.0" y="~y~" width="2" height="2" /></bezel> + <bezel element="disk_red"><bounds x="~x~" y="16.31" width="2" height="2" /></bezel> + <bezel element="disk_red"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel> + </repeat> + + <bezel element="static_gray"><bounds x="9.25" y="17.25" width="1.55" height="1.55" /></bezel> + <bezel element="disk_black"><bounds x="8.0" y="16.0" width="2.6" height="2.6" /></bezel> + <repeat count="10"> + <param name="x" start="8.31" increment="-0.1" /> + <param name="y" start="16.31" increment="-0.1" /> + <bezel element="disk_green"><bounds x="8.31" y="~y~" width="2" height="2" /></bezel> + <bezel element="disk_green"><bounds x="~x~" y="16.31" width="2" height="2" /></bezel> + <bezel element="disk_green"><bounds x="~x~" y="~y~" width="2" height="2" /></bezel> + </repeat> <!-- middle buttons, leds --> @@ -151,5 +184,21 @@ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="6.6" y="8.4" width="1.5" height="1" /><color alpha="0.25" /></bezel> <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="9.0" y="8.4" width="1.5" height="1" /><color alpha="0.25" /></bezel> + <!-- bottom switch --> + + <bezel element="text_s1"><bounds x="7.55" y="19.45" width="0.6" height="0.5" /></bezel> + <bezel element="text_s2"><bounds x="8.00" y="19.45" width="0.6" height="0.5" /></bezel> + <bezel element="text_s3"><bounds x="8.45" y="19.45" width="0.6" height="0.5" /></bezel> + <bezel element="disk_black"><bounds x="8.00" y="19.67" width="0.1" height="0.1" /></bezel> + <bezel element="disk_black"><bounds x="8.45" y="19.67" width="0.1" height="0.1" /></bezel> + + <bezel element="disk_black"><bounds x="7.6" y="18.9" width="0.5" height="0.5" /></bezel> + <bezel element="disk_black"><bounds x="8.5" y="18.9" width="0.5" height="0.5" /></bezel> + <bezel element="static_black"><bounds x="7.8" y="18.9" width="1.0" height="0.5" /></bezel> + + <bezel element="switch1" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="7.55" y="18.85" width="0.6" height="0.6" /></bezel> + <bezel element="switch2" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="8.00" y="18.85" width="0.6" height="0.6" /></bezel> + <bezel element="switch3" inputtag="IN.2" inputmask="0x07" inputraw="1"><bounds x="8.45" y="18.85" width="0.6" height="0.6" /></bezel> + </view> </mamelayout> diff --git a/src/mame/layout/zodiac.lay b/src/mame/layout/zodiac.lay index 2b2597bfbca..cf04cc1d466 100644 --- a/src/mame/layout/zodiac.lay +++ b/src/mame/layout/zodiac.lay @@ -3,40 +3,131 @@ <!-- define elements --> - <element name="static_black"><rect><color red="0" green="0" blue="0" /></rect></element> + <element name="static_white"><rect><color red="0.77" green="0.77" blue="0.77" /></rect></element> <element name="disk_black"><disk><color red="0" green="0" blue="0" /></disk></element> - <element name="disk_red"><disk><color red="0.2" green="0.02" blue="0.05" /></disk></element> + <element name="disk_red"><disk><color red="0.16" green="0.02" blue="0.05" /></disk></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="0"><color red="0.15" green="0.02" blue="0.01" /></disk> + <disk state="1"><color red="1.0" green="0.15" blue="0.08" /></disk> </element> <element name="digit" defstate="0"> <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg> </element> - <element name="text_z1"><text string="Aries" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♈ "♈" --> - <element name="text_z2"><text string="Taurus" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♉ "♉" --> - <element name="text_z3"><text string="Gemini" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♊ "♊" --> - <element name="text_z4"><text string="Cancer" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♋ "♋" --> - <element name="text_z5"><text string="Leo" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♌ "♌" --> - <element name="text_z6"><text string="Virgo" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- â™ "♍" --> - <element name="text_z7"><text string="Libra" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♎ "♎" --> - <element name="text_z8"><text string="Scorpio" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- â™ "♏" --> - <element name="text_z9"><text string="Sagittarius" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- â™ "♐" --> - <element name="text_z10"><text string="Capricorn" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- ♑ "♑" --> - <element name="text_z11"><text string="Aquarius" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></element> <!-- â™’ "♒" --> - <element name="text_z12"><text string="Pisces" align="1"><color red="0.7" green="0.7" blue="0.7" /></text></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> + <rect state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </rect> + </element> + + <element name="switch_mode" defstate="0"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text state="0x01" string="H"><color red="0.07" green="0.07" blue="0.07" /></text> + <text state="0x02" string="P"><color red="0.07" green="0.07" blue="0.07" /></text> + <text state="0x00" string="A"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + + <element name="text_b1"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="1"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b2"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="2"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b3"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="3"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b4"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="4"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b5"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="5"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b6"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="6"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b7"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="7"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b8"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="8"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b9"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="9"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_b0"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="0"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_bent"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="ENT"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_bclr"> + <rect><color red="0.77" green="0.77" blue="0.77" /></rect> + <text string="CLR"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + + <element name="text_bp"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text string="P"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_bl"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text string="L"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_bj"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text string="J"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_ba"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text string="A"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_bd"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text string="D"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + <element name="text_be"> + <disk><color red="0.77" green="0.77" blue="0.77" /></disk> + <text string="E"><color red="0.07" green="0.07" blue="0.07" /></text> + </element> + + <element name="text_z1"><text string="Aries" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♈ "♈" --> + <element name="text_z2"><text string="Taurus" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♉ "♉" --> + <element name="text_z3"><text string="Gemini" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♊ "♊" --> + <element name="text_z4"><text string="Cancer" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♋ "♋" --> + <element name="text_z5"><text string="Leo" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♌ "♌" --> + <element name="text_z6"><text string="Virgo" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- â™ "♍" --> + <element name="text_z7"><text string="Libra" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♎ "♎" --> + <element name="text_z8"><text string="Scorpio" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- â™ "♏" --> + <element name="text_z9"><text string="Sagittarius" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- â™ "♐" --> + <element name="text_z10"><text string="Capricorn" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♑ "♑" --> + <element name="text_z11"><text string="Aquarius" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- â™’ "♒" --> + <element name="text_z12"><text string="Pisces" align="1"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- ♓ "♓" --> + + <element name="text_mode"><text string="Mode (H-P-A)"><color red="0.77" green="0.77" blue="0.77" /></text></element> <!-- build screen --> <view name="Internal Layout"> <bounds left="-35" right="158" top="5" bottom="198" /> - <bezel element="static_black"> - <bounds left="-35" right="158" top="5" bottom="198" /> - </bezel> <bezel element="disk_red"><bounds x="-40" y="0" width="203" height="203" /></bezel> <bezel element="disk_black"><bounds x="-15" y="25" width="153" height="153" /></bezel> @@ -50,6 +141,8 @@ <bezel name="digit1" element="digit"><bounds x="80" y="70" width="10" height="15" /></bezel> <bezel name="digit0" element="digit"><bounds x="90" y="70" width="10" height="15" /></bezel> + <!-- edgy leds --> + <bezel name="9.7" element="led"><bounds x="15" y="145" width="3" height="3" /></bezel> <bezel name="9.2" element="led"><bounds x="40" y="160" width="3" height="3" /></bezel> <bezel name="9.4" element="led"><bounds x="80" y="160" width="3" height="3" /></bezel> @@ -78,5 +171,52 @@ <bezel element="text_z11"><bounds x="4" y="79" width="20" height="4" /></bezel> <bezel element="text_z12"><bounds x="4" y="119" width="20" height="4" /></bezel> + <!-- buttons --> + + <bezel element="text_b1"><bounds x="46.5" y="93" width="7" height="7" /></bezel> + <bezel element="text_b4"><bounds x="46.5" y="103" width="7" height="7" /></bezel> + <bezel element="text_b7"><bounds x="46.5" y="113" width="7" height="7" /></bezel> + <bezel element="text_b0"><bounds x="46.5" y="123" width="7" height="7" /></bezel> + <bezel element="text_b2"><bounds x="56.5" y="93" width="7" height="7" /></bezel> + <bezel element="text_b5"><bounds x="56.5" y="103" width="7" height="7" /></bezel> + <bezel element="text_b8"><bounds x="56.5" y="113" width="7" height="7" /></bezel> + <bezel element="static_white"><bounds x="56.5" y="123" width="7" height="7" /></bezel> + <bezel element="text_bent"><bounds x="56.6" y="124.3" width="6.8" height="4.1" /></bezel> + <bezel element="text_b3"><bounds x="66.5" y="93" width="7" height="7" /></bezel> + <bezel element="text_b6"><bounds x="66.5" y="103" width="7" height="7" /></bezel> + <bezel element="text_b9"><bounds x="66.5" y="113" width="7" height="7" /></bezel> + <bezel element="static_white"><bounds x="66.5" y="123" width="7" height="7" /></bezel> + <bezel element="text_bclr"><bounds x="66.6" y="124.3" width="6.8" height="4.1" /></bezel> + + <bezel element="text_bp"><bounds x="26.5" y="89.5" width="7" height="7" /></bezel> + <bezel element="text_bl"><bounds x="19.5" y="106.25" width="7" height="7" /></bezel> + <bezel element="text_bj"><bounds x="26.5" y="123" width="7" height="7" /></bezel> + <bezel element="text_ba"><bounds x="86.5" y="89.5" width="7" height="7" /></bezel> + <bezel element="text_bd"><bounds x="93.5" y="106.25" width="7" height="7" /></bezel> + <bezel element="text_be"><bounds x="86.5" y="123" width="7" height="7" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="46.5" y="93" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="46.5" y="103" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="46.5" y="113" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="46.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="56.5" y="93" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="56.5" y="103" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="56.5" y="113" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="56.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="66.5" y="93" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="66.5" y="103" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="66.5" y="113" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="66.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="26.5" y="89.5" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="19.5" y="106.25" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="26.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="86.5" y="89.5" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="93.5" y="106.25" width="7" height="7" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="86.5" y="123" width="7" height="7" /><color alpha="0.2" /></bezel> + + <bezel element="switch_mode" inputtag="IN.5" inputmask="0x03" inputraw="1"><bounds x="56.5" y="140" width="7" height="7" /></bezel> + <bezel element="text_mode"><bounds x="45" y="148" width="30" height="4" /></bezel> + </view> </mamelayout> diff --git a/src/mame/machine/ajax.cpp b/src/mame/machine/ajax.cpp index 6ac648670e2..0b0db87970e 100644 --- a/src/mame/machine/ajax.cpp +++ b/src/mame/machine/ajax.cpp @@ -150,7 +150,7 @@ WRITE8_MEMBER(ajax_state::ls138_f10_w) m_audiocpu->set_input_line(0, HOLD_LINE); break; case 0x02: /* Sound command number */ - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); break; case 0x03: /* Bankswitch + coin counters + priority*/ bankswitch_w(space, 0, data); diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp index a28cd843c4d..2cdbd251a08 100644 --- a/src/mame/machine/apollo.cpp +++ b/src/mame/machine/apollo.cpp @@ -106,7 +106,7 @@ INPUT_PORTS_START( apollo_config ) // PORT_CONFNAME(APOLLO_CONF_IDLE_SLEEP, 0x00, "Idle Sleep") // PORT_CONFSETTING(0x00, DEF_STR ( Off ) ) // PORT_CONFSETTING(APOLLO_CONF_IDLE_SLEEP, DEF_STR ( On ) ) - +#ifdef APOLLO_XXL PORT_CONFNAME(APOLLO_CONF_TRAP_TRACE, 0x00, "Trap Trace") PORT_CONFSETTING(0x00, DEF_STR ( Off ) ) PORT_CONFSETTING(APOLLO_CONF_TRAP_TRACE, DEF_STR ( On ) ) @@ -114,7 +114,7 @@ INPUT_PORTS_START( apollo_config ) PORT_CONFNAME(APOLLO_CONF_FPU_TRACE, 0x00, "FPU Trace") PORT_CONFSETTING(0x00, DEF_STR ( Off ) ) PORT_CONFSETTING(APOLLO_CONF_FPU_TRACE, DEF_STR ( On ) ) -#ifdef APOLLO_XXL + PORT_CONFNAME(APOLLO_CONF_DISK_TRACE, 0x00, "Disk Trace") PORT_CONFSETTING(0x00, DEF_STR ( Off ) ) PORT_CONFSETTING(APOLLO_CONF_DISK_TRACE, DEF_STR ( On ) ) @@ -256,11 +256,11 @@ WRITE16_MEMBER(apollo_state::apollo_csr_control_register_w) // disable FPU (i.e. FPU opcodes in CPU) apollo_set_cpu_has_fpu(m_maincpu, 0); - if (!apollo_is_dn3000()) + if (!apollo_is_dn3000() && !m_maincpu->get_pmmu_enable()) { // hack: set APOLLO_CSR_SR_FP_TRAP in cpu status register for /sau7/self_test // APOLLO_CSR_SR_FP_TRAP in status register should be set by next fmove instruction - // cpu_status_register |= APOLLO_CSR_SR_FP_TRAP; + cpu_status_register |= APOLLO_CSR_SR_FP_TRAP; } } diff --git a/src/mame/machine/apollo_kbd.cpp b/src/mame/machine/apollo_kbd.cpp index a3d99e7ce2e..54302827fea 100644 --- a/src/mame/machine/apollo_kbd.cpp +++ b/src/mame/machine/apollo_kbd.cpp @@ -381,15 +381,10 @@ void apollo_kbd_device::mouse::read_mouse() } else { - int b = m_device->m_io_mouse[0]->read(); - int x = m_device->m_io_mouse[1]->read(); - int y = m_device->m_io_mouse[2]->read(); - - /* sign extend values < 0 */ - if (x & 0x80) - x |= 0xffffff00; - if (y & 0x80) - y |= 0xffffff00; + char b = m_device->m_io_mouse[0]->read(); + char x = m_device->m_io_mouse[1]->read(); + char y = m_device->m_io_mouse[2]->read(); + y = -y; if (m_last_b < 0) @@ -436,9 +431,9 @@ void apollo_kbd_device::mouse::read_mouse() // mouse data submitted; update current mouse state m_last_b = b; - m_last_x += dx; - m_last_y += dy; - m_tx_pending = 100; // mouse data packet will take 40 ms + m_last_x = x; + m_last_y = y; + m_tx_pending = 50; // mouse data packet will take 40 ms } } } diff --git a/src/mame/machine/apple3.cpp b/src/mame/machine/apple3.cpp index 6be7745c565..8e7f0091f0b 100644 --- a/src/mame/machine/apple3.cpp +++ b/src/mame/machine/apple3.cpp @@ -47,8 +47,8 @@ #include "emu.h" #include "includes/apple3.h" -#define LOG_MEMORY 1 -#define LOG_INDXADDR 1 +#define LOG_MEMORY 0 +#define LOG_INDXADDR 0 #define ENV_SLOWSPEED (0x80) #define ENV_IOENABLE (0x40) diff --git a/src/mame/machine/bublbobl.cpp b/src/mame/machine/bublbobl.cpp index 55ecc04b88f..5f2ae51ad1a 100644 --- a/src/mame/machine/bublbobl.cpp +++ b/src/mame/machine/bublbobl.cpp @@ -22,7 +22,7 @@ void bublbobl_state::common_sreset(int state) if (m_ym2203 != nullptr) m_ym2203->reset(); // ym2203, if present, is reset if (m_ym3526 != nullptr) m_ym3526->reset(); // ym3526, if present, is reset m_audiocpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); // if a sound irq is active, it is cleared. is this necessary? if the above two devices de-assert /IRQ on reset (as a device_line write) properly, it shouldn't be... - m_sound_to_main->acknowledge_w(m_audiocpu->space(AS_PROGRAM), 0, 0x00, 0xFF); // sound->main semaphore is cleared + m_sound_to_main->acknowledge_w(); // sound->main semaphore is cleared m_soundnmi->in_w<0>(0); // sound nmi enable is unset } m_audiocpu->set_input_line(INPUT_LINE_RESET, state); // soundcpu is reset diff --git a/src/mame/machine/decocass.cpp b/src/mame/machine/decocass.cpp index 140e928e2bd..53c42a8559c 100644 --- a/src/mame/machine/decocass.cpp +++ b/src/mame/machine/decocass.cpp @@ -57,7 +57,7 @@ READ8_MEMBER( decocass_state::decocass_sound_command_main_r) WRITE8_MEMBER(decocass_state::decocass_sound_command_w) { LOG(2,("CPU %s sound command -> $%02x\n", m_maincpu->tag(), data)); - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_sound_ack |= 0x80; /* remove snd cpu data ack bit. i don't see it in the schems, but... */ m_sound_ack &= ~0x40; @@ -66,7 +66,7 @@ WRITE8_MEMBER(decocass_state::decocass_sound_command_w) READ8_MEMBER(decocass_state::decocass_sound_data_r) { - uint8_t data = m_soundlatch2->read(space, 0); + uint8_t data = m_soundlatch2->read(); LOG(2,("CPU %s sound data <- $%02x\n", m_maincpu->tag(), data)); return data; } @@ -81,13 +81,13 @@ READ8_MEMBER(decocass_state::decocass_sound_ack_r) WRITE8_MEMBER(decocass_state::decocass_sound_data_w) { LOG(2,("CPU %s sound data -> $%02x\n", m_audiocpu->tag(), data)); - m_soundlatch2->write(space, 0, data); + m_soundlatch2->write(data); m_sound_ack |= 0x40; } READ8_MEMBER(decocass_state::decocass_sound_command_r) { - uint8_t data = m_soundlatch->read(space, 0); + uint8_t data = m_soundlatch->read(); LOG(4,("CPU %s sound command <- $%02x\n", m_audiocpu->tag(), data)); m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); m_sound_ack &= ~0x80; diff --git a/src/mame/machine/fidelbase.cpp b/src/mame/machine/fidelbase.cpp index 0d638879140..2195dae45f0 100644 --- a/src/mame/machine/fidelbase.cpp +++ b/src/mame/machine/fidelbase.cpp @@ -55,13 +55,18 @@ void fidelbase_state::machine_start() save_item(NAME(m_speech_data)); save_item(NAME(m_speech_bank)); save_item(NAME(m_div_status)); + save_item(NAME(m_div_config)); + + // dummy timer for cpu divider + m_div_timer = machine().scheduler().timer_alloc(timer_expired_delegate(), this); } void fidelbase_state::machine_reset() { chessbase_state::machine_reset(); - m_div_status = ~0; + // init cpu divider (optional) + div_refresh(); } @@ -101,30 +106,28 @@ READ8_MEMBER(fidelbase_state::cartridge_r) void fidelbase_state::div_set_cpu_freq(offs_t offset) { - static const u16 mask = 0x6000; - u16 status = (offset & mask) | m_div_config->read(); - - if (status != m_div_status && status & 2) + if (offset != m_div_status) { // when a13/a14 is high, XTAL goes through divider(s) // (depending on factory-set jumper, either one or two 7474) - float div = (status & 1) ? 0.25 : 0.5; - m_maincpu->set_clock_scale((offset & mask) ? div : 1.0); - } + m_maincpu->set_clock_scale(offset ? ((m_div_config & 1) ? 0.25 : 0.5) : 1.0); - m_div_status = status; + m_div_status = offset; + } } void fidelbase_state::div_trampoline_w(offs_t offset, u8 data) { - div_set_cpu_freq(offset); + if (m_div_config) + div_set_cpu_freq(offset & 0x6000); + m_mainmap->write8(offset, data); } u8 fidelbase_state::div_trampoline_r(offs_t offset) { - if (!machine().side_effects_disabled()) - div_set_cpu_freq(offset); + if (m_div_config && !machine().side_effects_disabled()) + div_set_cpu_freq(offset & 0x6000); return m_mainmap->read8(offset); } @@ -134,9 +137,30 @@ void fidelbase_state::div_trampoline(address_map &map) map(0x0000, 0xffff).rw(FUNC(fidelbase_state::div_trampoline_r), FUNC(fidelbase_state::div_trampoline_w)); } +void fidelbase_state::div_refresh(ioport_value val) +{ + if (val == 0xff) + { + // bail out if there is no cpu divider + ioport_port *inp = ioport("div_config"); + if (inp == nullptr) + return; + + val = inp->read(); + } + + m_maincpu->set_clock_scale(1.0); + m_div_status = ~0; + m_div_config = val; + + // stop high frequency background timer if cpu divider is disabled + attotime period = (val) ? attotime::from_hz(m_maincpu->clock()) : attotime::never; + m_div_timer->adjust(period, 0, period); +} + INPUT_PORTS_START( fidel_cpu_div_2 ) PORT_START("div_config") // hardwired, default to /2 - PORT_CONFNAME( 0x03, 0x02, "CPU Divider" ) + PORT_CONFNAME( 0x03, 0x02, "CPU Divider" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidelbase_state, div_changed, nullptr) PORT_CONFSETTING( 0x00, "Disabled" ) PORT_CONFSETTING( 0x02, "2" ) PORT_CONFSETTING( 0x03, "4" ) @@ -144,7 +168,7 @@ INPUT_PORTS_END INPUT_PORTS_START( fidel_cpu_div_4 ) PORT_START("div_config") // hardwired, default to /4 - PORT_CONFNAME( 0x03, 0x03, "CPU Divider" ) + PORT_CONFNAME( 0x03, 0x03, "CPU Divider" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidelbase_state, div_changed, nullptr) PORT_CONFSETTING( 0x00, "Disabled" ) PORT_CONFSETTING( 0x02, "2" ) PORT_CONFSETTING( 0x03, "4" ) diff --git a/src/mame/machine/gaelco2.cpp b/src/mame/machine/gaelco2.cpp index 8c186326c3c..672afa9d51e 100644 --- a/src/mame/machine/gaelco2.cpp +++ b/src/mame/machine/gaelco2.cpp @@ -22,7 +22,7 @@ ***************************************************************************/ -void gaelco2_state::gaelco2_ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2) +void gaelco2_state::ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2) { int i; @@ -67,16 +67,16 @@ void gaelco2_state::init_alighunt() */ /* split ROM u48 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000); + ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000); /* split ROM u47 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000); + ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000); /* split ROM u50 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000); + ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000); /* split ROM u49 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0c00000, 0x0400000, 0x0a00000, 0x0e00000); + ROM16_split_gfx("gfx2", "gfx1", 0x0c00000, 0x0400000, 0x0a00000, 0x0e00000); } @@ -98,17 +98,17 @@ void gaelco2_state::init_touchgo() */ /* split ROM ic65 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000); + ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000); /* split ROM ic66 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0200000, 0x0600000); + ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0200000, 0x0600000); /* split ROM ic67 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000); + ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000); } -void gaelco2_state::init_snowboar() +void gaelco2_state::init_snowboara() { /* For "gfx2" we have this memory map: @@ -126,13 +126,14 @@ void gaelco2_state::init_snowboar() */ /* split ROM sb44 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000); + ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0400000); /* split ROM sb45 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000); + ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0400000, 0x0200000, 0x0600000); /* split ROM sb46 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000); + ROM16_split_gfx("gfx2", "gfx1", 0x0800000, 0x0400000, 0x0800000, 0x0c00000); + init_snowboar(); } @@ -151,10 +152,10 @@ void gaelco2_state::init_wrally2() */ /* split ROM wr2_ic69.ic69 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0200000); + ROM16_split_gfx("gfx2", "gfx1", 0x0000000, 0x0400000, 0x0000000, 0x0200000); /* split ROM wr2_ic70.ic70 */ - gaelco2_ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0400000, 0x0600000); + ROM16_split_gfx("gfx2", "gfx1", 0x0400000, 0x0200000, 0x0400000, 0x0600000); } @@ -164,13 +165,13 @@ void gaelco2_state::init_wrally2() ***************************************************************************/ -WRITE8_MEMBER(gaelco2_state::shareram_w) +void gaelco2_state::shareram_w(offs_t offset, u8 data) { // why isn't there an AM_SOMETHING macro for this? reinterpret_cast<u8 *>(m_shareram.target())[BYTE_XOR_BE(offset)] = data; } -READ8_MEMBER(gaelco2_state::shareram_r) +u8 gaelco2_state::shareram_r(offs_t offset) { // why isn't there an AM_SOMETHING macro for this? return reinterpret_cast<u8 const *>(m_shareram.target())[BYTE_XOR_BE(offset)]; @@ -183,7 +184,7 @@ READ8_MEMBER(gaelco2_state::shareram_r) ***************************************************************************/ -WRITE16_MEMBER(gaelco2_state::wrally2_latch_w) +void gaelco2_state::wrally2_latch_w(offs_t offset, u16 data) { m_mainlatch->write_bit(offset >> 2, BIT(data, 0)); } @@ -208,7 +209,7 @@ WRITE_LINE_MEMBER(gaelco2_state::coin4_counter_w) machine().bookkeeping().coin_counter_w(3, state); } -WRITE16_MEMBER(gaelco2_state::alighunt_coin_w) +void gaelco2_state::alighunt_coin_w(u16 data) { /* Coin Lockouts */ machine().bookkeeping().coin_lockout_w(0, ~data & 0x01); @@ -231,7 +232,7 @@ void bang_state::init_bang() m_clr_gun_int = 0; } -WRITE16_MEMBER(bang_state::bang_clr_gun_int_w) +void bang_state::bang_clr_gun_int_w(u16 data) { m_clr_gun_int = 1; } @@ -300,12 +301,17 @@ WRITE_LINE_MEMBER(wrally2_state::wrally2_adc_cs) ***************************************************************************/ -static uint32_t rol(uint32_t x, unsigned int c) +void gaelco2_state::init_snowboar() +{ + save_item(NAME(m_snowboard_latch)); +} + +static u32 rol(u32 x, u8 c) { return (x << c) | (x >> (32 - c)); } -static uint16_t get_lo(uint32_t x) +static u16 get_lo(u32 x) { return ((x & 0x00000010) << 1) | ((x & 0x00000800) << 3) | @@ -322,7 +328,7 @@ static uint16_t get_lo(uint32_t x) ((x & 0x00000020) >> 1); } -static uint16_t get_hi(uint32_t x) +static u16 get_hi(u32 x) { return ((x & 0x00001400) >> 0) | ((x & 0x10000000) >> 26) | @@ -341,7 +347,7 @@ static uint16_t get_hi(uint32_t x) ((x & 0x00000100) >> 1); } -static uint16_t get_out(uint16_t x) +static u16 get_out(u16 x) { return ((x & 0xc840) << 0) | ((x & 0x0080) << 2) | @@ -357,27 +363,25 @@ static uint16_t get_out(uint16_t x) ((x & 0x0020) >> 2); } -uint16_t mangle(uint32_t x) +u16 mangle(u32 x) { - uint16_t a = get_lo(x); - uint16_t b = get_hi(x); + u16 a = get_lo(x); + u16 b = get_hi(x); return get_out(((a ^ 0x0010) - (b ^ 0x0024)) ^ 0x5496); } -READ16_MEMBER(gaelco2_state::snowboar_protection_r) +u16 gaelco2_state::snowboar_protection_r() { - uint16_t ret = mangle(snowboard_latch); + u16 ret = mangle(m_snowboard_latch); ret = ((ret & 0xff00) >> 8) | ((ret & 0x00ff) << 8); return ret; - } -WRITE16_MEMBER(gaelco2_state::snowboar_protection_w) +void gaelco2_state::snowboar_protection_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_snowboar_protection[offset]); - snowboard_latch = (snowboard_latch << 16) | data; + m_snowboard_latch = (m_snowboard_latch << 16) | data; logerror("%06x: protection write %04x to %04x\n", m_maincpu->pc(), data, offset*2); - } diff --git a/src/mame/machine/gdrom.cpp b/src/mame/machine/gdrom.cpp index 1a8829e6dd0..a25cc5d5373 100644 --- a/src/mame/machine/gdrom.cpp +++ b/src/mame/machine/gdrom.cpp @@ -55,7 +55,7 @@ Dreamcast BIOS code verify only 1st result byte, if it's 5th bit (0x10) == 1. Naomi DIMM firmware verify if result byte equal to 0x1f. - + SYS_CHG_COMD (72h) ??? Authentication for next command ? Parameters: 1byte, probably key/password, in retail Dreamcast - 5th byte of unit SN# (located in flash ROM at 1A05Ah), 0 in Dev.box checker BIOS. Result: none diff --git a/src/mame/machine/leland.cpp b/src/mame/machine/leland.cpp index 46c871dd30e..6069d59528c 100644 --- a/src/mame/machine/leland.cpp +++ b/src/mame/machine/leland.cpp @@ -1236,7 +1236,7 @@ WRITE8_MEMBER(ataxx_state::ataxx_master_output_w) WRITE8_MEMBER(leland_state::leland_gated_paletteram_w) { if (m_wcol_enable) - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); } @@ -1251,7 +1251,7 @@ READ8_MEMBER(leland_state::leland_gated_paletteram_r) WRITE8_MEMBER(ataxx_state::ataxx_paletteram_and_misc_w) { if (m_wcol_enable) - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); else if (offset == 0x7f8 || offset == 0x7f9) leland_master_video_addr_w(space, offset - 0x7f8, data); else if (offset == 0x7fc) diff --git a/src/mame/machine/midyunit.cpp b/src/mame/machine/midyunit.cpp index a959e493516..c40aae938d3 100644 --- a/src/mame/machine/midyunit.cpp +++ b/src/mame/machine/midyunit.cpp @@ -592,7 +592,7 @@ WRITE16_MEMBER(midyunit_state::midyunit_sound_w) break; case SOUND_YAWDIM: - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); break; } diff --git a/src/mame/machine/namcos1.cpp b/src/mame/machine/namcos1.cpp index 627e2a8222c..02dc8fedb50 100644 --- a/src/mame/machine/namcos1.cpp +++ b/src/mame/machine/namcos1.cpp @@ -10,20 +10,20 @@ * * *******************************************************************************/ -WRITE8_MEMBER( namcos1_state::_3dcs_w ) +void namcos1_state::_3dcs_w(offs_t offset, u8 data) { if (offset & 1) popmessage("LEFT"); else popmessage("RIGHT"); } -READ8_MEMBER( namcos1_state::no_key_r ) +u8 namcos1_state::no_key_r(offs_t offset) { popmessage("%s: keychip read %04x\n", m_mcu->tag(), m_mcu->pc(), offset); return 0; } -WRITE8_MEMBER( namcos1_state::no_key_w ) +void namcos1_state::no_key_w(offs_t offset, u8 data) { popmessage("%s: keychip write %04x=%02x\n", m_mcu->tag(), m_mcu->pc(), offset, data); } @@ -128,7 +128,7 @@ puzlclub: CPU #0 PC e017: keychip write 0003=35 [they probably used RAM instead of a key chip for this prototype] CPU #0 PC e3d4: keychip read 0003 [AND #$37 = key no.] */ -READ8_MEMBER( namcos1_state::key_type1_r ) +u8 namcos1_state::key_type1_r(offs_t offset) { // logerror("%s: keychip read %04x\n", machine().describe_context(), offset); @@ -159,7 +159,7 @@ READ8_MEMBER( namcos1_state::key_type1_r ) return 0; } -WRITE8_MEMBER( namcos1_state::key_type1_w ) +void namcos1_state::key_type1_w(offs_t offset, u8 data) { // logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); @@ -311,7 +311,7 @@ CPU #0 PC e574: keychip read 0001 */ -READ8_MEMBER( namcos1_state::key_type2_r ) +u8 namcos1_state::key_type2_r(offs_t offset) { // logerror("%s: keychip read %04x\n", machine().describe_context(), offset); @@ -330,7 +330,7 @@ READ8_MEMBER( namcos1_state::key_type2_r ) return 0; } -WRITE8_MEMBER( namcos1_state::key_type2_w ) +void namcos1_state::key_type2_w(offs_t offset, u8 data) { // logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); @@ -340,8 +340,8 @@ WRITE8_MEMBER( namcos1_state::key_type2_w ) if (offset == 3) { - unsigned int d = (m_key[0] << 8) | m_key[1]; - unsigned int n = (m_key_numerator_high_word << 16) | (m_key[2] << 8) | m_key[3]; + u32 d = (m_key[0] << 8) | m_key[1]; + u32 n = (m_key_numerator_high_word << 16) | (m_key[2] << 8) | m_key[3]; if (d) { @@ -437,7 +437,7 @@ CPU #0 PC ca96: keychip read 0043 [0x30 | (ARG & 0x0f)] CPU #0 PC e45a: keychip read 0030 [discarded] */ -READ8_MEMBER( namcos1_state::key_type3_r ) +u8 namcos1_state::key_type3_r(offs_t offset) { // logerror("%s: keychip read %04x\n", machine().describe_context(), offset); @@ -447,7 +447,7 @@ READ8_MEMBER( namcos1_state::key_type3_r ) The schematics don't show A11 being used, so I go for this handling. */ - int op = (offset & 0x70) >> 4; + const int op = (offset & 0x70) >> 4; if (op == m_key_reg) return m_key_id; if (op == m_key_rng) return machine().rand(); @@ -461,7 +461,7 @@ READ8_MEMBER( namcos1_state::key_type3_r ) return 0; } -WRITE8_MEMBER( namcos1_state::key_type3_w ) +void namcos1_state::key_type3_w(offs_t offset, u8 data) { // logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); @@ -476,7 +476,7 @@ WRITE8_MEMBER( namcos1_state::key_type3_w ) * * *******************************************************************************/ -WRITE8_MEMBER(namcos1_state::sound_bankswitch_w) +void namcos1_state::sound_bankswitch_w(u8 data) { m_soundbank->set_entry((data & 0x70) >> 4); } @@ -545,7 +545,7 @@ void namcos1_state::machine_reset() *******************************************************************************/ /* mcu banked rom area select */ -WRITE8_MEMBER(namcos1_state::mcu_bankswitch_w) +void namcos1_state::mcu_bankswitch_w(u8 data) { int bank; @@ -581,7 +581,7 @@ WRITE8_MEMBER(namcos1_state::mcu_bankswitch_w) /* I found set $A6 only initialize in MCU */ /* This patch kill write this data by MCU case $A6 to xx(clear) */ -WRITE8_MEMBER(namcos1_state::mcu_patch_w) +void namcos1_state::mcu_patch_w(u8 data) { //logerror("mcu C000 write %s data=%02x\n",machine().describe_context(),data); if (m_mcu_patch_data == 0xa6) return; @@ -603,14 +603,14 @@ void namcos1_state::driver_init() { if ((i & 0x010000) == 0) { - uint8_t t = m_rom[i]; + u8 t = m_rom[i]; m_rom[i] = m_rom[i + 0x010000]; m_rom[i + 0x010000] = t; } } // kludge! see notes - m_mcu->space(AS_PROGRAM).install_write_handler(0xc000, 0xc000, write8_delegate(FUNC(namcos1_state::mcu_patch_w), this)); + m_mcu->space(AS_PROGRAM).install_write_handler(0xc000, 0xc000, write8smo_delegate(FUNC(namcos1_state::mcu_patch_w), this)); // these are overridden as needed in the specific DRIVER_INIT_MEMBERs m_key_id = 0; @@ -622,6 +622,38 @@ void namcos1_state::driver_init() m_key_top4 = 0; } +void namcos1_state::key_type_1_init(int key_id) +{ + m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, + read8sm_delegate(FUNC(namcos1_state::key_type1_r),this), + write8sm_delegate(FUNC(namcos1_state::key_type1_w),this)); + m_key_id = key_id; +} + +void namcos1_state::key_type_2_init(int key_id) +{ + m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, + read8sm_delegate(FUNC(namcos1_state::key_type2_r),this), + write8sm_delegate(FUNC(namcos1_state::key_type2_w),this)); + m_key_id = key_id; + save_item(NAME(m_key_quotient)); + save_item(NAME(m_key_reminder)); + save_item(NAME(m_key_numerator_high_word)); +} + +void namcos1_state::key_type_3_init(int key_id, int reg, int rng, int swap4_arg, int swap4, int bottom4, int top4) +{ + m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, + read8sm_delegate(FUNC(namcos1_state::key_type3_r),this), + write8sm_delegate(FUNC(namcos1_state::key_type3_w),this)); + m_key_id = key_id; + m_key_reg = reg; + m_key_rng = rng; + m_key_swap4_arg = swap4_arg; + m_key_swap4 = swap4; + m_key_bottom4 = bottom4; + m_key_top4 = top4; +} /******************************************************************************* * Shadowland / Youkai Douchuuki specific * @@ -637,10 +669,7 @@ void namcos1_state::init_shadowld() void namcos1_state::init_dspirit() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x36; + key_type_1_init(0x36); } /******************************************************************************* @@ -649,10 +678,7 @@ void namcos1_state::init_dspirit() void namcos1_state::init_wldcourt() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x35; + key_type_1_init(0x35); } /******************************************************************************* @@ -661,10 +687,7 @@ void namcos1_state::init_wldcourt() void namcos1_state::init_blazer() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x13; + key_type_1_init(0x13); } /******************************************************************************* @@ -673,10 +696,7 @@ void namcos1_state::init_blazer() void namcos1_state::init_puzlclub() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x35; + key_type_1_init(0x35); } /******************************************************************************* @@ -685,13 +705,7 @@ void namcos1_state::init_puzlclub() void namcos1_state::init_pacmania() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x12; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x12); } /******************************************************************************* @@ -700,13 +714,7 @@ void namcos1_state::init_pacmania() void namcos1_state::init_alice() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x25; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x25); } /******************************************************************************* @@ -715,13 +723,7 @@ void namcos1_state::init_alice() void namcos1_state::init_galaga88() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x31; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x31); } /******************************************************************************* @@ -730,13 +732,7 @@ void namcos1_state::init_galaga88() void namcos1_state::init_ws() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x07; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x07); } /******************************************************************************* @@ -745,13 +741,7 @@ void namcos1_state::init_ws() void namcos1_state::init_bakutotu() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x22; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x22); } /******************************************************************************* @@ -760,16 +750,7 @@ void namcos1_state::init_bakutotu() void namcos1_state::init_splatter() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 181; - m_key_reg = 3; - m_key_rng = 4; - m_key_swap4_arg = -1; - m_key_swap4 = -1; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(181, 3, 4, -1, -1, -1, -1); } /******************************************************************************* @@ -778,16 +759,7 @@ void namcos1_state::init_splatter() void namcos1_state::init_rompers() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 182; - m_key_reg = 7; - m_key_rng = -1; - m_key_swap4_arg = -1; - m_key_swap4 = -1; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(182, 7, -1, -1, -1, -1, -1); } /******************************************************************************* @@ -796,16 +768,7 @@ void namcos1_state::init_rompers() void namcos1_state::init_blastoff() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 183; - m_key_reg = 0; - m_key_rng = 7; - m_key_swap4_arg = 3; - m_key_swap4 = 5; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(183, 0, 7, 3, 5, -1, -1); } /******************************************************************************* @@ -814,16 +777,7 @@ void namcos1_state::init_blastoff() void namcos1_state::init_ws89() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 184; - m_key_reg = 2; - m_key_rng = -1; - m_key_swap4_arg = -1; - m_key_swap4 = -1; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(184, 2, -1, -1, -1, -1, -1); } /******************************************************************************* @@ -832,16 +786,7 @@ void namcos1_state::init_ws89() void namcos1_state::init_tankfrce() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 185; - m_key_reg = 5; - m_key_rng = -1; - m_key_swap4_arg = 1; - m_key_swap4 = -1; - m_key_bottom4 = 2; - m_key_top4 = -1; + key_type_3_init(185, 5, -1, 1, -1, 2, -1); } void namcos1_state::init_tankfrc4() @@ -853,7 +798,7 @@ void namcos1_state::init_tankfrc4() m_stored_input[0] = 0; m_stored_input[1] = 0; - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); save_item(NAME(m_input_count)); save_item(NAME(m_stored_input)); } @@ -864,16 +809,7 @@ void namcos1_state::init_tankfrc4() void namcos1_state::init_dangseed() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 308; - m_key_reg = 6; - m_key_rng = -1; - m_key_swap4_arg = 5; - m_key_swap4 = -1; - m_key_bottom4 = 0; - m_key_top4 = 4; + key_type_3_init(308, 6, -1, 5, -1, 0, 4); } /******************************************************************************* @@ -882,16 +818,7 @@ void namcos1_state::init_dangseed() void namcos1_state::init_pistoldm() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 309; - m_key_reg = 1; - m_key_rng = 2; - m_key_swap4_arg = 0; - m_key_swap4 = -1; - m_key_bottom4 = 4; - m_key_top4 = -1; + key_type_3_init(309, 1, 2, 0, -1, 4, -1); } /******************************************************************************* @@ -900,16 +827,7 @@ void namcos1_state::init_pistoldm() void namcos1_state::init_ws90() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 310; - m_key_reg = 4; - m_key_rng = -1; - m_key_swap4_arg = 7; - m_key_swap4 = -1; - m_key_bottom4 = 3; - m_key_top4 = -1; + key_type_3_init(310, 4, -1, 7, -1, 3, -1); } /******************************************************************************* @@ -918,16 +836,7 @@ void namcos1_state::init_ws90() void namcos1_state::init_soukobdx() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 311; - m_key_reg = 2; - m_key_rng = 3; /*?*/ - m_key_swap4_arg = 0; - m_key_swap4 = -1; - m_key_bottom4 = 4; - m_key_top4 = -1; + key_type_3_init(311, 2, 3 /*?*/, 0, -1, 4, -1); } @@ -935,16 +844,16 @@ void namcos1_state::init_soukobdx() /******************************************************************************* * Quester specific * *******************************************************************************/ -READ8_MEMBER( namcos1_state::quester_paddle_r ) +u8 namcos1_state::quester_paddle_r(offs_t offset) { if (offset == 0) { int ret; if (!(m_strobe & 0x20)) - ret = (ioport("CONTROL0")->read()&0x90) | (m_strobe & 0x40) | (ioport("PADDLE0")->read()&0x0f); + ret = (m_io_control[0]->read()&0x90) | (m_strobe & 0x40) | (m_io_paddle[0]->read()&0x0f); else - ret = (ioport("CONTROL0")->read()&0x90) | (m_strobe & 0x40) | (ioport("PADDLE1")->read()&0x0f); + ret = (m_io_control[0]->read()&0x90) | (m_strobe & 0x40) | (m_io_paddle[1]->read()&0x0f); m_strobe ^= 0x40; @@ -955,9 +864,9 @@ READ8_MEMBER( namcos1_state::quester_paddle_r ) int ret; if (!(m_strobe & 0x20)) - ret = (ioport("CONTROL1")->read()&0x90) | 0x00 | (ioport("PADDLE0")->read()>>4); + ret = (m_io_control[1]->read()&0x90) | 0x00 | (m_io_paddle[0]->read()>>4); else - ret = (ioport("CONTROL1")->read()&0x90) | 0x20 | (ioport("PADDLE1")->read()>>4); + ret = (m_io_control[1]->read()&0x90) | 0x20 | (m_io_paddle[1]->read()>>4); if (!(m_strobe & 0x40)) m_strobe ^= 0x20; @@ -969,7 +878,7 @@ void namcos1_state::init_quester() { m_strobe = 0; driver_init(); - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::quester_paddle_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::quester_paddle_r), this)); save_item(NAME(m_strobe)); } @@ -979,7 +888,7 @@ void namcos1_state::init_quester() * Beraboh Man specific * *******************************************************************************/ -READ8_MEMBER( namcos1_state::berabohm_buttons_r ) +u8 namcos1_state::berabohm_buttons_r(offs_t offset) { int res; @@ -987,16 +896,13 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r ) { int inp = m_input_count; - if (inp == 4) res = ioport("CONTROL0")->read(); + if (inp == 4) res = m_io_control[0]->read(); else { - char portname[40]; - #ifdef PRESSURE_SENSITIVE static int counter[4]; - sprintf(portname,"IN%d",inp); /* IN0-IN3 */ - res = ioport(portname)->read(); + res = m_io_in[inp]->read(); /* IN0-IN3 */ if (res & 0x80) { if (counter[inp] >= 0) @@ -1019,8 +925,7 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r ) else counter[inp] = -1; #else - sprintf(portname,"IN%d",inp); /* IN0-IN3 */ - res = ioport(portname)->read(); + res = m_io_in[inp]->read(); /* IN0-IN3 */ if (res & 1) res = 0x7f; /* weak */ else if (res & 2) res = 0x48; /* medium */ else if (res & 4) res = 0x40; /* strong */ @@ -1031,7 +936,7 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r ) } else { - res = ioport("CONTROL1")->read() & 0x8f; + res = m_io_control[1]->read() & 0x8f; /* the strobe cannot happen too often, otherwise the MCU will waste too much time reading the inputs and won't have enough cycles to play two @@ -1059,7 +964,7 @@ void namcos1_state::init_berabohm() m_strobe = 0; m_strobe_count = 0; driver_init(); - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::berabohm_buttons_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::berabohm_buttons_r), this)); save_item(NAME(m_input_count)); save_item(NAME(m_strobe)); save_item(NAME(m_strobe_count)); @@ -1073,19 +978,19 @@ void namcos1_state::init_berabohm() // used by faceoff and tankforce 4 player (input multiplex) -READ8_MEMBER( namcos1_state::faceoff_inputs_r ) +u8 namcos1_state::faceoff_inputs_r(offs_t offset) { int res; if (offset == 0) { - res = (ioport("CONTROL0")->read() & 0x80) | m_stored_input[0]; + res = (m_io_control[0]->read() & 0x80) | m_stored_input[0]; return res; } else { - res = ioport("CONTROL1")->read() & 0x80; + res = m_io_control[1]->read() & 0x80; /* the strobe cannot happen too often, otherwise the MCU will waste too much time reading the inputs and won't have enough cycles to play two @@ -1100,17 +1005,17 @@ READ8_MEMBER( namcos1_state::faceoff_inputs_r ) switch (m_input_count) { case 0: - m_stored_input[0] = ioport("IN0")->read() & 0x1f; - m_stored_input[1] = (ioport("IN3")->read() & 0x07) << 3; + m_stored_input[0] = m_io_in[0]->read() & 0x1f; + m_stored_input[1] = (m_io_in[3]->read() & 0x07) << 3; break; case 3: - m_stored_input[0] = ioport("IN2")->read() & 0x1f; + m_stored_input[0] = m_io_in[2]->read() & 0x1f; break; case 4: - m_stored_input[0] = ioport("IN1")->read() & 0x1f; - m_stored_input[1] = ioport("IN3")->read() & 0x18; + m_stored_input[0] = m_io_in[1]->read() & 0x1f; + m_stored_input[1] = m_io_in[3]->read() & 0x18; break; default: @@ -1138,7 +1043,7 @@ void namcos1_state::init_faceoff() m_stored_input[1] = 0; driver_init(); - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); save_item(NAME(m_input_count)); save_item(NAME(m_stored_input)); } diff --git a/src/mame/machine/nl_breakout.cpp b/src/mame/machine/nl_breakout.cpp index 94bd228723a..1a19b119b61 100644 --- a/src/mame/machine/nl_breakout.cpp +++ b/src/mame/machine/nl_breakout.cpp @@ -181,9 +181,11 @@ CIRCUIT_LAYOUT( breakout ) DIODE(CR5, "1N914") DIODE(CR7, "1N914") - QBJT_EB(Q1, "2N3644") - QBJT_EB(Q2, "2N3643") - QBJT_EB(Q3, "2N3643") + // No need to model capacitance + QBJT_EB(Q1, "2N3644(CJC=0 CJE=0)") + QBJT_EB(Q2, "2N3643(CJC=0 CJE=0)") + QBJT_EB(Q3, "2N3643(CJC=0 CJE=0)") + CAP(C19, CAP_U(0.1)) CAP(C16, CAP_U(0.1)) diff --git a/src/mame/machine/nl_rebound.cpp b/src/mame/machine/nl_rebound.cpp index b01422e9b7e..66da37a9a26 100644 --- a/src/mame/machine/nl_rebound.cpp +++ b/src/mame/machine/nl_rebound.cpp @@ -4,7 +4,7 @@ * The work herein is based on the "Rebound computer service manual" * available on archive.org: * - * https://archive.org/details/ArcadeGameManualRebound + * https://archive.org/details/ArcadeGameManualRebound * * Changelog: * @@ -19,7 +19,7 @@ * - Documented PCB connector (Couriersud) * * TODO: - * - Add switch to pull Connector 3 (CON3) to GND + * - Add switch to pull Connector 3 (CON3) to GND * * The MAME team has asked for and received written confirmation from the * author of DICE to use, modify and redistribute code under: diff --git a/src/mame/machine/segacrp2_device.cpp b/src/mame/machine/segacrp2_device.cpp index b07f735445d..16f3ec0daa7 100644 --- a/src/mame/machine/segacrp2_device.cpp +++ b/src/mame/machine/segacrp2_device.cpp @@ -27,7 +27,7 @@ 315-5162 4D Warriors & used I'm Sorry for k.p.a. Rafflesia & Wonder Boy (set 4) - 315-5176 Wonder Boy (system 2 hardware, set 2) NOT DECRYPTED + 315-5176 Wonder Boy (system 2 hardware, set 2) 315-5177 Astro Flash & Wonder Boy (set 1) 315-5178 Wonder Boy (set 2) unencrypted version available @@ -166,8 +166,45 @@ sega_315_5176_device::sega_315_5176_device(const machine_config &mconfig, const void sega_315_5176_device::decrypt() { - // 315-5176 - // TODO! + static const uint8_t xor_table[128] = + { + 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, + 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, + 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, + 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, + 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, + 0x41, 0x05, 0x55, 0x10, + + 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, + 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, + 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, 0x44, 0x01, 0x51, 0x15, + 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, 0x41, 0x05, 0x55, 0x10, + 0x44, 0x01, 0x51, 0x15, 0x40, 0x04, 0x54, 0x11, 0x45, 0x00, 0x50, 0x14, + 0x41, 0x05, 0x55, 0x10, + }; + + static const int swap_table[128] = + { + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, + + 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, + 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, + 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, + 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, + }; + + decode(memregion(tag())->base(), m_decrypted, xor_table, swap_table); } diff --git a/src/mame/machine/seibucop/seibucop_dma.hxx b/src/mame/machine/seibucop/seibucop_dma.hxx index b4bdfb160e7..98b76b26c7f 100644 --- a/src/mame/machine/seibucop/seibucop_dma.hxx +++ b/src/mame/machine/seibucop/seibucop_dma.hxx @@ -22,7 +22,7 @@ void raiden2cop_device::dma_palette_buffer() { uint16_t palval = m_host_space->read_word(src); src += 2; - m_paletteramout_cb(i, palval, 0xffff); + m_paletteramout_cb(i, palval); //m_palette->set_pen_color(i, pal5bit(palval >> 0), pal5bit(palval >> 5), pal5bit(palval >> 10)); } } diff --git a/src/mame/machine/thomflop.cpp b/src/mame/machine/thomflop.cpp index 2f935851f88..d5f8f5713f2 100644 --- a/src/mame/machine/thomflop.cpp +++ b/src/mame/machine/thomflop.cpp @@ -412,12 +412,11 @@ void thomson_state::to7_5p14_index_pulse_callback( int state ) void thomson_state::to7_5p14sd_reset() { - int i; LOG(( "to7_5p14sd_reset: CD 90-015 controller\n" )); - for ( i = 0; i < floppy_get_count( machine() ); i++ ) + for (auto &img : m_floppy_image) { - legacy_floppy_image_device * img = floppy_get_device( machine(), i ); - if (img) { + if (img.found()) + { img->floppy_drive_set_ready_state( FLOPPY_DRIVE_READY, 0 ); img->floppy_drive_set_rpm( 300. ); img->floppy_drive_seek( - img->floppy_drive_get_current_track() ); @@ -521,7 +520,7 @@ void thomson_state::to7_qdd_index_pulse_cb( int state ) legacy_floppy_image_device * thomson_state::to7_qdd_image() { - return floppy_get_device( machine(), 0 ); + return m_floppy_image[0].target(); } @@ -807,13 +806,12 @@ WRITE8_MEMBER( thomson_state::to7_qdd_w ) void thomson_state::to7_qdd_reset() { - int i; LOG(( "to7_qdd_reset: CQ 90-028 controller\n" )); - for ( i = 0; i < floppy_get_count( machine() ); i++ ) + for (auto &img : m_floppy_image) { - legacy_floppy_image_device * img = floppy_get_device( machine(), i ); - if (img) { + if (img.found()) + { img->floppy_drive_set_ready_state( FLOPPY_DRIVE_READY, 0 ); motor_on = CLEAR_LINE; @@ -916,7 +914,7 @@ static emu_timer* thmfc_floppy_cmd; legacy_floppy_image_device * thomson_state::thmfc_floppy_image() { - return floppy_get_device( machine(), thmfc1->drive ); + return m_floppy_image[thmfc1->drive].target(); } @@ -1498,13 +1496,12 @@ WRITE8_MEMBER( thomson_state::thmfc_floppy_w ) void thomson_state::thmfc_floppy_reset() { - int i; LOG(( "thmfc_floppy_reset: THMFC1 controller\n" )); - for ( i = 0; i < floppy_get_count( machine() ); i++ ) + for (auto &img : m_floppy_image) { - legacy_floppy_image_device * img = floppy_get_device( machine(), i ); - if (img) { + if (img.found()) + { img->floppy_drive_set_ready_state( FLOPPY_DRIVE_READY, 0 ); img->floppy_drive_seek( - img->floppy_drive_get_current_track() ); } diff --git a/src/mame/machine/tnzs.cpp b/src/mame/machine/tnzs.cpp index c6b88fcf275..f55bb847e5c 100644 --- a/src/mame/machine/tnzs.cpp +++ b/src/mame/machine/tnzs.cpp @@ -485,7 +485,7 @@ WRITE8_MEMBER(jpopnics_state::subbankswitch_w) WRITE8_MEMBER(tnzsb_state::sound_command_w) { - m_soundlatch->write(space, offset, data); + m_soundlatch->write(data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } diff --git a/src/mame/machine/toaplan1.cpp b/src/mame/machine/toaplan1.cpp index 7f0df70d4b3..3e10d414f97 100644 --- a/src/mame/machine/toaplan1.cpp +++ b/src/mame/machine/toaplan1.cpp @@ -12,22 +12,19 @@ #include "includes/toaplan1.h" -void toaplan1_state::toaplan1_interrupt() +void toaplan1_state::interrupt() { if (m_intenable) m_maincpu->set_input_line(4, HOLD_LINE); } -WRITE16_MEMBER(toaplan1_state::toaplan1_intenable_w) +void toaplan1_state::intenable_w(u8 data) { - if (ACCESSING_BITS_0_7) - { - m_intenable = data & 0xff; - } + m_intenable = data; } -WRITE16_MEMBER(toaplan1_state::demonwld_dsp_addrsel_w) +void toaplan1_demonwld_state::dsp_addrsel_w(u16 data) { /* This sets the main CPU RAM address the DSP should */ /* read/write, via the DSP IO port 0 */ @@ -42,13 +39,14 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_addrsel_w) logerror("DSP PC:%04x IO write %04x (%08x) at port 0\n", m_dsp->pcbase(), data, m_main_ram_seg + m_dsp_addr_w); } -READ16_MEMBER(toaplan1_state::demonwld_dsp_r) +u16 toaplan1_demonwld_state::dsp_r() { /* DSP can read data from main CPU RAM via DSP IO port 1 */ - uint16_t input_data = 0; + u16 input_data = 0; - switch (m_main_ram_seg) { + switch (m_main_ram_seg) + { case 0xc00000: {address_space &mainspace = m_maincpu->space(AS_PROGRAM); input_data = mainspace.read_word(m_main_ram_seg + m_dsp_addr_w); break;} @@ -58,11 +56,12 @@ READ16_MEMBER(toaplan1_state::demonwld_dsp_r) return input_data; } -WRITE16_MEMBER(toaplan1_state::demonwld_dsp_w) +void toaplan1_demonwld_state::dsp_w(u16 data) { /* Data written to main CPU RAM via DSP IO port 1 */ m_dsp_execute = 0; - switch (m_main_ram_seg) { + switch (m_main_ram_seg) + { case 0xc00000: {if ((m_dsp_addr_w < 3) && (data == 0)) m_dsp_execute = 1; address_space &mainspace = m_maincpu->space(AS_PROGRAM); mainspace.write_word(m_main_ram_seg + m_dsp_addr_w, data); @@ -72,7 +71,7 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_w) logerror("DSP PC:%04x IO write %04x at %08x (port 1)\n", m_dsp->pcbase(), data, m_main_ram_seg + m_dsp_addr_w); } -WRITE16_MEMBER(toaplan1_state::demonwld_dsp_bio_w) +void toaplan1_demonwld_state::dsp_bio_w(u16 data) { /* data 0xffff means inhibit BIO line to DSP and enable */ /* communication to main processor */ @@ -82,11 +81,13 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_bio_w) logerror("DSP PC:%04x IO write %04x at port 3\n", m_dsp->pcbase(), data); - if (data & 0x8000) { + if (data & 0x8000) m_dsp_bio = CLEAR_LINE; - } - if (data == 0) { - if (m_dsp_execute) { + + if (data == 0) + { + if (m_dsp_execute) + { logerror("Turning 68000 on\n"); m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); m_dsp_execute = 0; @@ -95,13 +96,13 @@ WRITE16_MEMBER(toaplan1_state::demonwld_dsp_bio_w) } } -READ_LINE_MEMBER(toaplan1_state::demonwld_bio_r) +READ_LINE_MEMBER(toaplan1_demonwld_state::bio_r) { return m_dsp_bio; } -void toaplan1_state::demonwld_dsp(int enable) +void toaplan1_demonwld_state::dsp_int_w(int enable) { m_dsp_on = enable; if (enable) @@ -119,55 +120,45 @@ void toaplan1_state::demonwld_dsp(int enable) } } -void toaplan1_state::demonwld_restore_dsp() +void toaplan1_demonwld_state::device_post_load() { - demonwld_dsp(m_dsp_on); + dsp_int_w(m_dsp_on); } -WRITE16_MEMBER(toaplan1_state::demonwld_dsp_ctrl_w) +void toaplan1_demonwld_state::dsp_ctrl_w(u8 data) { #if 0 - logerror("68000:%08x Writing %08x to %08x.\n",m_maincpu->pc() ,data ,0xe0000a + offset); + logerror("68000:%08x Writing %02x to $e0000b.\n",m_maincpu->pc() ,data); #endif - if (ACCESSING_BITS_0_7) + switch (data) { - switch (data) - { - case 0x00: demonwld_dsp(1); break; /* Enable the INT line to the DSP */ - case 0x01: demonwld_dsp(0); break; /* Inhibit the INT line to the DSP */ - default: logerror("68000:%04x Writing unknown command %08x to %08x\n",m_maincpu->pcbase() ,data ,0xe0000a + offset); break; - } - } - else - { - logerror("68000:%04x Writing unknown command %08x to %08x\n",m_maincpu->pcbase() ,data ,0xe0000a + offset); + case 0x00: dsp_int_w(1); break; /* Enable the INT line to the DSP */ + case 0x01: dsp_int_w(0); break; /* Inhibit the INT line to the DSP */ + default: logerror("68000:%08x Writing unknown command %02x to $e0000b\n",m_maincpu->pcbase() ,data); break; } } -READ16_MEMBER(toaplan1_state::samesame_port_6_word_r) +u8 toaplan1_samesame_state::port_6_word_r() { /* Bit 0x80 is secondary CPU (HD647180) ready signal */ - logerror("PC:%04x Warning !!! IO reading from $14000a\n",m_maincpu->pcbase()); - return (0x80 | ioport("TJUMP")->read()) & 0xff; + logerror("PC:%08x Warning !!! IO reading from $14000b\n",m_maincpu->pcbase()); + return (0x80 | m_tjump_io->read()) & 0xff; } -READ16_MEMBER(toaplan1_state::toaplan1_shared_r) +u8 toaplan1_state::shared_r(offs_t offset) { - return m_sharedram[offset] & 0xff; + return m_sharedram[offset]; } -WRITE16_MEMBER(toaplan1_state::toaplan1_shared_w) +void toaplan1_state::shared_w(offs_t offset, u8 data) { - if (ACCESSING_BITS_0_7) - { - m_sharedram[offset] = data & 0xff; - } + m_sharedram[offset] = data; } -void toaplan1_state::toaplan1_reset_sound() +void toaplan1_state::reset_sound() { /* Reset the secondary CPU and sound chip */ /* rallybik, truxton, hellfire, demonwld write to a port to cause a reset */ @@ -176,9 +167,9 @@ void toaplan1_state::toaplan1_reset_sound() m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); } -WRITE16_MEMBER(toaplan1_state::toaplan1_reset_sound_w) +void toaplan1_state::reset_sound_w(u8 data) { - if (ACCESSING_BITS_0_7 && (data == 0)) toaplan1_reset_sound(); + if (data == 0) reset_sound(); } @@ -203,14 +194,15 @@ WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_lockout_2_w) } -WRITE8_MEMBER(toaplan1_state::toaplan1_coin_w) +void toaplan1_state::coin_w(u8 data) { logerror("Z80 writing %02x to coin control\n",data); /* This still isnt too clear yet. */ /* Coin C has no coin lock ? */ /* Are some outputs for lights ? (no space on JAMMA for it though) */ - switch (data) { + switch (data) + { case 0xee: machine().bookkeeping().coin_counter_w(1,1); machine().bookkeeping().coin_counter_w(1,0); break; /* Count slot B */ case 0xed: machine().bookkeeping().coin_counter_w(0,1); machine().bookkeeping().coin_counter_w(0,0); break; /* Count slot A */ /* The following are coin counts after coin-lock active (faulty coin-lock ?) */ @@ -233,24 +225,12 @@ WRITE8_MEMBER(toaplan1_state::toaplan1_coin_w) } } -WRITE16_MEMBER(toaplan1_state::samesame_coin_w) -{ - if (ACCESSING_BITS_0_7) - { - toaplan1_coin_w(space, offset, data & 0xff); - } - if (ACCESSING_BITS_8_15 && (data&0xff00)) - { - logerror("PC:%04x Writing unknown MSB data (%04x) to coin count/lockout port\n",m_maincpu->pcbase(),data); - } -} - -WRITE_LINE_MEMBER(toaplan1_state::toaplan1_reset_callback) +WRITE_LINE_MEMBER(toaplan1_state::reset_callback) { - toaplan1_reset_sound(); + reset_sound(); } -MACHINE_RESET_MEMBER(toaplan1_state,toaplan1) +void toaplan1_state::machine_reset() { m_intenable = 0; machine().bookkeeping().coin_lockout_global_w(0); @@ -259,37 +239,37 @@ MACHINE_RESET_MEMBER(toaplan1_state,toaplan1) /* zerowing, fireshrk, outzone */ MACHINE_RESET_MEMBER(toaplan1_state,zerowing) { - MACHINE_RESET_CALL_MEMBER(toaplan1); - m_maincpu->set_reset_callback(write_line_delegate(FUNC(toaplan1_state::toaplan1_reset_callback),this)); + machine_reset(); + m_maincpu->set_reset_callback(write_line_delegate(FUNC(toaplan1_state::reset_callback),this)); } -MACHINE_RESET_MEMBER(toaplan1_state,demonwld) +void toaplan1_demonwld_state::machine_reset() { - MACHINE_RESET_CALL_MEMBER(toaplan1); + toaplan1_state::machine_reset(); m_dsp_addr_w = 0; m_main_ram_seg = 0; m_dsp_execute = 0; } -MACHINE_RESET_MEMBER(toaplan1_state,vimana) -{ - MACHINE_RESET_CALL_MEMBER(toaplan1); - m_maincpu->set_reset_callback(write_line_delegate(FUNC(toaplan1_state::toaplan1_reset_callback),this)); -} - -void toaplan1_state::toaplan1_driver_savestate() +void toaplan1_state::machine_start() { save_item(NAME(m_intenable)); } -void toaplan1_state::demonwld_driver_savestate() +void toaplan1_demonwld_state::machine_start() { + toaplan1_state::machine_start(); save_item(NAME(m_dsp_on)); save_item(NAME(m_dsp_addr_w)); save_item(NAME(m_main_ram_seg)); save_item(NAME(m_dsp_bio)); save_item(NAME(m_dsp_execute)); - machine().save().register_postload(save_prepost_delegate(FUNC(toaplan1_state::demonwld_restore_dsp), this)); } +void toaplan1_samesame_state::machine_start() +{ + toaplan1_state::machine_start(); + save_item(NAME(m_to_mcu)); + save_item(NAME(m_cmdavailable)); +} diff --git a/src/mame/machine/twincobr.cpp b/src/mame/machine/twincobr.cpp index 5fa63ece69a..2bfdbbf9f79 100644 --- a/src/mame/machine/twincobr.cpp +++ b/src/mame/machine/twincobr.cpp @@ -34,7 +34,7 @@ WRITE_LINE_MEMBER(twincobr_state::wardner_vblank_irq) } -WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w) +void twincobr_state::twincobr_dsp_addrsel_w(u16 data) { /* This sets the main CPU RAM address the DSP should */ /* read/write, via the DSP IO port 0 */ @@ -50,11 +50,11 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w) LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w)); } -READ16_MEMBER(twincobr_state::twincobr_dsp_r) +u16 twincobr_state::twincobr_dsp_r() { /* DSP can read data from main CPU RAM via DSP IO port 1 */ - uint16_t input_data = 0; + u16 input_data = 0; switch (m_main_ram_seg) { case 0x30000: @@ -68,7 +68,7 @@ READ16_MEMBER(twincobr_state::twincobr_dsp_r) return input_data; } -WRITE16_MEMBER(twincobr_state::twincobr_dsp_w) +void twincobr_state::twincobr_dsp_w(u16 data) { /* Data written to main CPU RAM via DSP IO port 1 */ m_dsp_execute = 0; @@ -84,7 +84,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_w) LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w)); } -WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w) +void twincobr_state::wardner_dsp_addrsel_w(u16 data) { /* This sets the main CPU RAM address the DSP should */ /* read/write, via the DSP IO port 0 */ @@ -99,11 +99,11 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w) LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w)); } -READ16_MEMBER(twincobr_state::wardner_dsp_r) +u16 twincobr_state::wardner_dsp_r() { /* DSP can read data from main CPU RAM via DSP IO port 1 */ - uint16_t input_data = 0; + u16 input_data = 0; switch (m_main_ram_seg) { case 0x7000: @@ -118,7 +118,7 @@ READ16_MEMBER(twincobr_state::wardner_dsp_r) return input_data; } -WRITE16_MEMBER(twincobr_state::wardner_dsp_w) +void twincobr_state::wardner_dsp_w(u16 data) { /* Data written to main CPU RAM via DSP IO port 1 */ m_dsp_execute = 0; @@ -135,7 +135,7 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_w) LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w)); } -WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w) +void twincobr_state::twincobr_dsp_bio_w(u16 data) { /* data 0xffff means inhibit BIO line to DSP and enable */ /* communication to main processor */ @@ -159,7 +159,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w) } } -READ16_MEMBER(twincobr_state::fsharkbt_dsp_r) +u16 twincobr_state::fsharkbt_dsp_r() { /* IO Port 2 used by Flying Shark bootleg */ /* DSP reads data from an extra MCU (8741) at IO port 2 */ @@ -170,7 +170,7 @@ READ16_MEMBER(twincobr_state::fsharkbt_dsp_r) return (m_fsharkbt_8741 & 1); } -WRITE16_MEMBER(twincobr_state::fsharkbt_dsp_w) +void twincobr_state::fsharkbt_dsp_w(u16 data) { /* Flying Shark bootleg DSP writes data to an extra MCU (8741) at IO port 2 */ #if 0 @@ -209,7 +209,7 @@ WRITE_LINE_MEMBER(twincobr_state::dsp_int_w) } } -void twincobr_state::twincobr_restore_dsp() +void twincobr_state::device_post_load() { dsp_int_w(m_dsp_on); } @@ -236,21 +236,18 @@ WRITE_LINE_MEMBER(twincobr_state::coin_lockout_2_w) } -READ16_MEMBER(twincobr_state::twincobr_sharedram_r) +u8 twincobr_state::twincobr_sharedram_r(offs_t offset) { return m_sharedram[offset]; } -WRITE16_MEMBER(twincobr_state::twincobr_sharedram_w) +void twincobr_state::twincobr_sharedram_w(offs_t offset, u8 data) { - if (ACCESSING_BITS_0_7) - { - m_sharedram[offset] = data & 0xff; - } + m_sharedram[offset] = data; } -MACHINE_RESET_MEMBER(twincobr_state,twincobr) +void twincobr_state::machine_reset() { m_dsp_addr_w = 0; m_main_ram_seg = 0; @@ -259,7 +256,7 @@ MACHINE_RESET_MEMBER(twincobr_state,twincobr) m_fsharkbt_8741 = -1; } -void twincobr_state::twincobr_driver_savestate() +void twincobr_state::driver_savestate() { save_item(NAME(m_intenable)); save_item(NAME(m_dsp_on)); @@ -268,6 +265,4 @@ void twincobr_state::twincobr_driver_savestate() save_item(NAME(m_dsp_bio)); save_item(NAME(m_dsp_execute)); save_item(NAME(m_fsharkbt_8741)); - - machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_dsp), this)); } diff --git a/src/mame/machine/xavix.cpp b/src/mame/machine/xavix.cpp index 2745b98b078..480e5155cfd 100644 --- a/src/mame/machine/xavix.cpp +++ b/src/mame/machine/xavix.cpp @@ -245,116 +245,6 @@ WRITE8_MEMBER(xavix_state::ioevent_irqack_w) update_irqs(); } -READ8_MEMBER(xavix_state::mouse_7b00_r) -{ - if (m_mouse0x) - { - uint8_t retval = m_mouse0x->read(); - return retval ^ 0x7f; - } - - return 0x00; -} - -READ8_MEMBER(xavix_state::mouse_7b01_r) -{ - if (m_mouse0y) - { - uint8_t retval = m_mouse0y->read(); - return retval ^ 0x7f; - } - return 0x00; -} - -READ8_MEMBER(xavix_state::mouse_7b10_r) -{ - if (m_mouse1x) - { - uint8_t retval = m_mouse1x->read(); - return retval ^ 0x7f; - } - - return 0x00; -} - -READ8_MEMBER(xavix_state::mouse_7b11_r) -{ - if (m_mouse1y) - { - uint8_t retval = m_mouse1y->read(); - return retval ^ 0x7f; - } - - return 0x00; -} - -WRITE8_MEMBER(xavix_state::mouse_7b00_w) -{ - LOG("%s: mouse_7b00_w %02x\n", machine().describe_context(), data); -} - -WRITE8_MEMBER(xavix_state::mouse_7b01_w) -{ - LOG("%s: mouse_7b01_w %02x\n", machine().describe_context(), data); -} - -WRITE8_MEMBER(xavix_state::mouse_7b10_w) -{ - LOG("%s: mouse_7b10_w %02x\n", machine().describe_context(), data); -} - -WRITE8_MEMBER(xavix_state::mouse_7b11_w) -{ - LOG("%s: mouse_7b11_w %02x\n", machine().describe_context(), data); -} - - - -READ8_MEMBER(xavix_state::adc_7b80_r) -{ - LOG("%s: adc_7b80_r\n", machine().describe_context()); - return m_adc_inlatch; -} - -WRITE8_MEMBER(xavix_state::adc_7b80_w) -{ - // is the latch writeable? - LOG("%s: adc_7b80_w %02x\n", machine().describe_context(), data); -} - -WRITE8_MEMBER(xavix_state::adc_7b81_w) -{ -// m_irqsource &= ~0x04; -// update_irqs(); - - LOG("%s: adc_7b81_w %02x\n", machine().describe_context(), data); - m_adc_control = data; - - // bit 0x40 = run? or IRQ? (doesn't seem to be any obvious way to clear IRQs tho, ADC handling is usually done in timer IRQ?) - // should probably set latch after a timer has expired not instantly? - // bits 0x0c are not port select? - // bit 0x80 is some kind of ack? / done flag? - switch (m_adc_control & 0x13) - { - case 0x00: m_adc_inlatch = m_an_in[0]->read(); break; - case 0x01: m_adc_inlatch = m_an_in[1]->read(); break; - case 0x02: m_adc_inlatch = m_an_in[2]->read(); break; - case 0x03: m_adc_inlatch = m_an_in[3]->read(); break; - case 0x10: m_adc_inlatch = m_an_in[4]->read(); break; - case 0x11: m_adc_inlatch = m_an_in[5]->read(); break; - case 0x12: m_adc_inlatch = m_an_in[6]->read(); break; - case 0x13: m_adc_inlatch = m_an_in[7]->read(); break; - } - -// m_adc_timer->adjust(attotime::from_usec(200)); -} - -READ8_MEMBER(xavix_state::adc_7b81_r) -{ -// has_wamg polls this if interrupt is enabled - return machine().rand(); -} - WRITE8_MEMBER(xavix_state::slotreg_7810_w) @@ -547,7 +437,7 @@ CUSTOM_INPUT_MEMBER(xavix_ekara_state::ekara_multi1_r) uint8_t xavix_state::read_io0(uint8_t direction) { -// LOG("%s: read_io0\n", machine().describe_context()); +// LOG("%s: read_io0\n", machine().describe_context()); // no special handling return m_in0->read(); @@ -555,7 +445,7 @@ uint8_t xavix_state::read_io0(uint8_t direction) uint8_t xavix_state::read_io1(uint8_t direction) { -// LOG("%s: read_io1\n", machine().describe_context()); +// LOG("%s: read_io1\n", machine().describe_context()); // no special handling return m_in1->read(); @@ -915,122 +805,6 @@ TIMER_CALLBACK_MEMBER(xavix_state::freq_timer_done) //m_freq_timer->adjust(attotime::from_usec(50000)); } -TIMER_CALLBACK_MEMBER(xavix_state::adc_timer_done) -{ - //m_irqsource |= 0x04; - //update_irqs(); -} - -// epo_guru uses this for ground movement in 3d stages (and other places) -READ8_MEMBER(xavix_state::barrel_r) -{ - if (offset == 0) - { - // or upper bits of result? - logerror("%s: reading shift trigger?!\n", machine().describe_context()); - return 0x00; - } - else - { - uint8_t retdata = m_barrel_params[1]; - logerror("%s: reading shift results/data %02x\n", machine().describe_context(), retdata); - return retdata; - } -} - -WRITE8_MEMBER(xavix_state::barrel_w) -{ - m_barrel_params[offset] = data; - - if (offset == 0) - { - int shift_data = m_barrel_params[1]; - int shift_amount = data & 0x0f; - int shift_param = (data & 0xf0)>>4; - - // this can't be right, shift amount would allow us to shift 16 places this way, this is an 8-bit register, uneless it can shift in and out of a private register? - - if (shift_param & 0x8) - { - m_barrel_params[1] = shift_data >> shift_amount; - } - else - { - m_barrel_params[1] = shift_data << shift_amount; - } - - // offset 0 = trigger - logerror("%s: shifting value %02x by %01x with params %01x\n", machine().describe_context(), shift_data, shift_amount, shift_param); - } -} - - - -READ8_MEMBER(xavix_state::mult_r) -{ - return m_multresults[offset]; -} - -WRITE8_MEMBER(xavix_state::mult_w) -{ - // rad_madf writes here to set the base value which the multiplication result gets added to - m_multresults[offset] = data; -} - -READ8_MEMBER(xavix_state::mult_param_r) -{ - return m_multparams[offset]; -} - -WRITE8_MEMBER(xavix_state::mult_param_w) -{ - COMBINE_DATA(&m_multparams[offset]); - // there are NOPs after one of the writes, so presumably the operation is write triggerd and not intstant - // see test code at 0184a4 in monster truck - - // offset0 is control - - // mm-- --Ss - // mm = mode, S = sign for param1, s = sign for param2 - // modes 00 = multiply (regular?) 11 = add to previous 01 / 10 unknown (maybe subtract?) - - if (offset == 2) - { - // assume 0 is upper bits, might be 'mode' instead, check - - - int signmode = (m_multparams[0] & 0x3f); - - uint16_t result = 0; - - // rad_madf uses this mode (add to previous result) - if ((m_multparams[0] & 0xc0) == 0xc0) - { - const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1]; - const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2]; - - result = param1 * param2; - - uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0]; - result = oldresult + result; - } - else if ((m_multparams[0] & 0xc0) == 0x00) - { - const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1]; - const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2]; - - result = param1 * param2; - } - else - { - popmessage("unknown multiplier mode %02x", m_multparams[0] & 0xc0); - } - - m_multresults[1] = (result >> 8) & 0xff; - m_multresults[0] = result & 0xff; - } -} - READ8_MEMBER(xavix_state::irq_source_r) { @@ -1073,7 +847,6 @@ void xavix_state::machine_start() m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_state::interrupt_gen), this)); m_freq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_state::freq_timer_done), this)); - m_adc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_state::adc_timer_done), this)); for (int i = 0; i < 4; i++) { @@ -1091,7 +864,6 @@ void xavix_state::machine_start() save_item(NAME(m_io1_data)); save_item(NAME(m_io0_direction)); save_item(NAME(m_io1_direction)); - save_item(NAME(m_adc_control)); save_item(NAME(m_sound_irqstatus)); save_item(NAME(m_soundreg16_0)); save_item(NAME(m_soundreg16_1)); @@ -1105,8 +877,6 @@ void xavix_state::machine_start() save_item(NAME(m_nmi_vector_hi_data)); save_item(NAME(m_irq_vector_lo_data)); save_item(NAME(m_irq_vector_hi_data)); - save_item(NAME(m_multparams)); - save_item(NAME(m_multresults)); save_item(NAME(m_spritefragment_dmaparam1)); save_item(NAME(m_spritefragment_dmaparam2)); save_item(NAME(m_tmap1_regs)); @@ -1123,7 +893,6 @@ void xavix_state::machine_start() save_item(NAME(m_sndtimer)); save_item(NAME(m_timer_baseval)); save_item(NAME(m_spritereg)); - save_item(NAME(m_barrel_params)); save_item(NAME(m_sx_extended_extbus)); } @@ -1164,8 +933,6 @@ void xavix_state::machine_reset() m_sndtimer[i] = 0x00; } - std::fill(std::begin(m_multparams), std::end(m_multparams), 0x00); - std::fill(std::begin(m_multresults), std::end(m_multresults), 0x00); std::fill(std::begin(m_spritefragment_dmaparam1), std::end(m_spritefragment_dmaparam1), 0x00); std::fill(std::begin(m_tmap1_regs), std::end(m_tmap1_regs), 0x00); std::fill(std::begin(m_tmap2_regs), std::end(m_tmap2_regs), 0x00); @@ -1191,7 +958,6 @@ void xavix_state::machine_reset() m_sound_regbase = 0x02; // rad_bb doesn't initialize this and expects it here. It is possible the default is 0x00, but since 0x00 and 0x01 are special (zero page and stack) those values would also use bank 0x02 - m_adc_control = 0x00; m_sprite_xhigh_ignore_hack = true; @@ -1201,8 +967,6 @@ void xavix_state::machine_reset() m_extbusctrl[1] = 0x00; m_extbusctrl[2] = 0x00; - m_barrel_params[0] = 0x00; - m_barrel_params[1] = 0x00; // SuperXaviX diff --git a/src/mame/machine/xavix_adc.cpp b/src/mame/machine/xavix_adc.cpp new file mode 100644 index 00000000000..6d171c8018d --- /dev/null +++ b/src/mame/machine/xavix_adc.cpp @@ -0,0 +1,100 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#include "emu.h" +#include "xavix_adc.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(XAVIX_ADC, xavix_adc_device, "xavix_adc", "XaviX ADC") + +xavix_adc_device::xavix_adc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, XAVIX_ADC, tag, owner, clock) + , m_in0_cb(*this) + , m_in1_cb(*this) + , m_in2_cb(*this) + , m_in3_cb(*this) + , m_in4_cb(*this) + , m_in5_cb(*this) + , m_in6_cb(*this) + , m_in7_cb(*this) +{ +} + +void xavix_adc_device::device_start() +{ + m_in0_cb.resolve_safe(0xff); + m_in1_cb.resolve_safe(0xff); + m_in2_cb.resolve_safe(0xff); + m_in3_cb.resolve_safe(0xff); + m_in4_cb.resolve_safe(0xff); + m_in5_cb.resolve_safe(0xff); + m_in6_cb.resolve_safe(0xff); + m_in7_cb.resolve_safe(0xff); + + m_adc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix_adc_device::adc_timer_done), this)); + + save_item(NAME(m_adc_control)); + save_item(NAME(m_adc_inlatch)); +} + +TIMER_CALLBACK_MEMBER(xavix_adc_device::adc_timer_done) +{ + //m_irqsource |= 0x04; + //update_irqs(); +} + +void xavix_adc_device::device_reset() +{ + m_adc_control = 0x00; + m_adc_inlatch = 0xff; +} + + +READ8_MEMBER(xavix_adc_device::adc_7b80_r) +{ + LOG("%s: adc_7b80_r\n", machine().describe_context()); + return m_adc_inlatch; +} + +WRITE8_MEMBER(xavix_adc_device::adc_7b80_w) +{ + // is the latch writeable? + LOG("%s: adc_7b80_w %02x\n", machine().describe_context(), data); +} + +WRITE8_MEMBER(xavix_adc_device::adc_7b81_w) +{ +// m_irqsource &= ~0x04; +// update_irqs(); + + LOG("%s: adc_7b81_w %02x\n", machine().describe_context(), data); + m_adc_control = data; + + // bit 0x40 = run? or IRQ? (doesn't seem to be any obvious way to clear IRQs tho, ADC handling is usually done in timer IRQ?) + // should probably set latch after a timer has expired not instantly? + // bits 0x0c are not port select? + // bit 0x80 is some kind of ack? / done flag? + switch (m_adc_control & 0x13) + { + case 0x00: m_adc_inlatch = m_in0_cb(); break; + case 0x01: m_adc_inlatch = m_in1_cb(); break; + case 0x02: m_adc_inlatch = m_in2_cb(); break; + case 0x03: m_adc_inlatch = m_in3_cb(); break; + case 0x10: m_adc_inlatch = m_in4_cb(); break; + case 0x11: m_adc_inlatch = m_in5_cb(); break; + case 0x12: m_adc_inlatch = m_in6_cb(); break; + case 0x13: m_adc_inlatch = m_in7_cb(); break; + } + +// m_adc_timer->adjust(attotime::from_usec(200)); +} + +READ8_MEMBER(xavix_adc_device::adc_7b81_r) +{ +// has_wamg polls this if interrupt is enabled + return machine().rand(); +} + + diff --git a/src/mame/machine/xavix_adc.h b/src/mame/machine/xavix_adc.h new file mode 100644 index 00000000000..5bf524eb9d8 --- /dev/null +++ b/src/mame/machine/xavix_adc.h @@ -0,0 +1,50 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#ifndef MAME_MACHINE_XAVIX_ADC_H +#define MAME_MACHINE_XAVIX_ADC_H + +class xavix_adc_device : public device_t +{ +public: + xavix_adc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + auto read_0_callback() { return m_in0_cb.bind(); } + auto read_1_callback() { return m_in1_cb.bind(); } + auto read_2_callback() { return m_in2_cb.bind(); } + auto read_3_callback() { return m_in3_cb.bind(); } + auto read_4_callback() { return m_in4_cb.bind(); } + auto read_5_callback() { return m_in5_cb.bind(); } + auto read_6_callback() { return m_in6_cb.bind(); } + auto read_7_callback() { return m_in7_cb.bind(); } + + DECLARE_READ8_MEMBER(adc_7b80_r); + DECLARE_WRITE8_MEMBER(adc_7b80_w); + DECLARE_READ8_MEMBER(adc_7b81_r); + DECLARE_WRITE8_MEMBER(adc_7b81_w); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + +private: + devcb_read8 m_in0_cb; + devcb_read8 m_in1_cb; + devcb_read8 m_in2_cb; + devcb_read8 m_in3_cb; + devcb_read8 m_in4_cb; + devcb_read8 m_in5_cb; + devcb_read8 m_in6_cb; + devcb_read8 m_in7_cb; + + uint8_t m_adc_inlatch; + uint8_t m_adc_control; + emu_timer *m_adc_timer; + + TIMER_CALLBACK_MEMBER(adc_timer_done); +}; + +DECLARE_DEVICE_TYPE(XAVIX_ADC, xavix_adc_device) + +#endif // MAME_MACHINE_XAVIX_ADC_H diff --git a/src/mame/machine/xavix_anport.cpp b/src/mame/machine/xavix_anport.cpp new file mode 100644 index 00000000000..502dfc6adee --- /dev/null +++ b/src/mame/machine/xavix_anport.cpp @@ -0,0 +1,81 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +// are these still part of the ADC? if so merge into xavix_adc.cpp + +#include "emu.h" +#include "xavix_anport.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(XAVIX_ANPORT, xavix_anport_device, "xavix_anport", "XaviX Analog ports") + +xavix_anport_device::xavix_anport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, XAVIX_ANPORT, tag, owner, clock) + , m_in0_cb(*this) + , m_in1_cb(*this) + , m_in2_cb(*this) + , m_in3_cb(*this) +{ +} + +void xavix_anport_device::device_start() +{ + m_in0_cb.resolve_safe(0xff); + m_in1_cb.resolve_safe(0xff); + m_in2_cb.resolve_safe(0xff); + m_in3_cb.resolve_safe(0xff); +} + +void xavix_anport_device::device_reset() +{ +} + + +READ8_MEMBER(xavix_anport_device::mouse_7b00_r) +{ + LOG("%s: mouse_7b00_r\n", machine().describe_context()); + return m_in0_cb(); + +} + +READ8_MEMBER(xavix_anport_device::mouse_7b01_r) +{ + LOG("%s: mouse_7b01_r\n", machine().describe_context()); + return m_in1_cb(); +} + +READ8_MEMBER(xavix_anport_device::mouse_7b10_r) +{ + LOG("%s: mouse_7b10_r\n", machine().describe_context()); + return m_in2_cb(); +} + +READ8_MEMBER(xavix_anport_device::mouse_7b11_r) +{ + LOG("%s: mouse_7b11_r\n", machine().describe_context()); + return m_in3_cb(); +} + +WRITE8_MEMBER(xavix_anport_device::mouse_7b00_w) +{ + LOG("%s: mouse_7b00_w %02x\n", machine().describe_context(), data); +} + +WRITE8_MEMBER(xavix_anport_device::mouse_7b01_w) +{ + LOG("%s: mouse_7b01_w %02x\n", machine().describe_context(), data); +} + +WRITE8_MEMBER(xavix_anport_device::mouse_7b10_w) +{ + LOG("%s: mouse_7b10_w %02x\n", machine().describe_context(), data); +} + +WRITE8_MEMBER(xavix_anport_device::mouse_7b11_w) +{ + LOG("%s: mouse_7b11_w %02x\n", machine().describe_context(), data); +} + + diff --git a/src/mame/machine/xavix_anport.h b/src/mame/machine/xavix_anport.h new file mode 100644 index 00000000000..b826d718d2f --- /dev/null +++ b/src/mame/machine/xavix_anport.h @@ -0,0 +1,41 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#ifndef MAME_MACHINE_XAVIX_ANPORT_H +#define MAME_MACHINE_XAVIX_ANPORT_H + +class xavix_anport_device : public device_t +{ +public: + xavix_anport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + auto read_0_callback() { return m_in0_cb.bind(); } + auto read_1_callback() { return m_in1_cb.bind(); } + auto read_2_callback() { return m_in2_cb.bind(); } + auto read_3_callback() { return m_in3_cb.bind(); } + + DECLARE_READ8_MEMBER(mouse_7b00_r); + DECLARE_READ8_MEMBER(mouse_7b01_r); + DECLARE_READ8_MEMBER(mouse_7b10_r); + DECLARE_READ8_MEMBER(mouse_7b11_r); + + DECLARE_WRITE8_MEMBER(mouse_7b00_w); + DECLARE_WRITE8_MEMBER(mouse_7b01_w); + DECLARE_WRITE8_MEMBER(mouse_7b10_w); + DECLARE_WRITE8_MEMBER(mouse_7b11_w); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + +private: + devcb_read8 m_in0_cb; + devcb_read8 m_in1_cb; + devcb_read8 m_in2_cb; + devcb_read8 m_in3_cb; +}; + +DECLARE_DEVICE_TYPE(XAVIX_ANPORT, xavix_anport_device) + +#endif // MAME_MACHINE_XAVIX_ANPORT_H diff --git a/src/mame/machine/xavix_math.cpp b/src/mame/machine/xavix_math.cpp new file mode 100644 index 00000000000..3e180e4d4e2 --- /dev/null +++ b/src/mame/machine/xavix_math.cpp @@ -0,0 +1,171 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#include "emu.h" +#include "xavix_math.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(XAVIX_MATH, xavix_math_device, "xavix_math", "XaviX Math Unit") + +xavix_math_device::xavix_math_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, XAVIX_MATH, tag, owner, clock) +{ +} + +void xavix_math_device::device_start() +{ + save_item(NAME(m_barrel_params)); + save_item(NAME(m_multparams)); + save_item(NAME(m_multresults)); +} + +void xavix_math_device::device_reset() +{ + m_barrel_params[0] = 0x00; + m_barrel_params[1] = 0x00; + + std::fill(std::begin(m_multparams), std::end(m_multparams), 0x00); + std::fill(std::begin(m_multresults), std::end(m_multresults), 0x00); +} + + +// epo_guru uses this for ground movement in 3d stages (and other places) +READ8_MEMBER(xavix_math_device::barrel_r) +{ + if (offset == 0) + { + // or upper bits of result? + LOG("%s: reading shift trigger?!\n", machine().describe_context()); + return 0x00; + } + else + { + uint8_t retdata = m_barrel_params[1]; + LOG("%s: reading shift results/data %02x\n", machine().describe_context(), retdata); + return retdata; + } +} + +// epo_guru 3d stages still flicker a lot with this, but it seems unrelated to the calculations here, possibly a raster timing issue +// the pickup animations however don't seem to play, which indicates this could still be wrong. +WRITE8_MEMBER(xavix_math_device::barrel_w) +{ + LOG("%s: barrel_w %02x\n", machine().describe_context(), data); + + m_barrel_params[offset] = data; + + // offset 0 = trigger + if (offset == 0) + { + int shift_data = m_barrel_params[1]; + int shift_amount = data & 0x0f; + int shift_param = (data & 0xf0) >> 4; + + if (shift_param == 0x00) // just a shift? (definitely right for 'hammer throw' + { + // used in epo_guru for 'hammer throw', 'pre-title screen', 'mini game select', '3d chase game (floor scroll, pickups, misc)', 'toilet roll mini game (when you make an error)' + + if (shift_amount & 0x08) + { + m_barrel_params[1] = (shift_data >> (shift_amount & 0x7)); + } + else + { + m_barrel_params[1] = (shift_data << (shift_amount & 0x7)); + } + } + else if (shift_param == 0x8) // rotate? (should it rotate through a carry bit of some kind?) + { + // used in epo_guru for '3d chase game' (unsure of actual purpose in it) + switch (shift_amount) + { + case 0x0: m_barrel_params[1] = shift_data; break; + case 0x1: m_barrel_params[1] = (shift_data << 1) | ((shift_data >> 7) & 0x01); break; + case 0x2: m_barrel_params[1] = (shift_data << 2) | ((shift_data >> 6) & 0x03); break; + case 0x3: m_barrel_params[1] = (shift_data << 3) | ((shift_data >> 5) & 0x07); break; + case 0x4: m_barrel_params[1] = (shift_data << 4) | ((shift_data >> 4) & 0x0f); break; + case 0x5: m_barrel_params[1] = (shift_data << 5) | ((shift_data >> 3) & 0x1f); break; + case 0x6: m_barrel_params[1] = (shift_data << 6) | ((shift_data >> 2) & 0x2f); break; + case 0x7: m_barrel_params[1] = (shift_data << 7) | ((shift_data >> 1) & 0x3f); break; + case 0x8: m_barrel_params[1] = shift_data; break; + case 0x9: m_barrel_params[1] = (shift_data >> 1) | ((shift_data & 0x01) << 7); break; + case 0xa: m_barrel_params[1] = (shift_data >> 2) | ((shift_data & 0x03) << 6); break; + case 0xb: m_barrel_params[1] = (shift_data >> 3) | ((shift_data & 0x07) << 5); break; + case 0xc: m_barrel_params[1] = (shift_data >> 4) | ((shift_data & 0x0f) << 4); break; + case 0xd: m_barrel_params[1] = (shift_data >> 5) | ((shift_data & 0x1f) << 3); break; + case 0xe: m_barrel_params[1] = (shift_data >> 6) | ((shift_data & 0x2f) << 2); break; + case 0xf: m_barrel_params[1] = (shift_data >> 7) | ((shift_data & 0x3f) << 1); break; + } + } + } +} + + + +READ8_MEMBER(xavix_math_device::mult_r) +{ + return m_multresults[offset]; +} + +WRITE8_MEMBER(xavix_math_device::mult_w) +{ + // rad_madf writes here to set the base value which the multiplication result gets added to + m_multresults[offset] = data; +} + +READ8_MEMBER(xavix_math_device::mult_param_r) +{ + return m_multparams[offset]; +} + +WRITE8_MEMBER(xavix_math_device::mult_param_w) +{ + COMBINE_DATA(&m_multparams[offset]); + // there are NOPs after one of the writes, so presumably the operation is write triggerd and not intstant + // see test code at 0184a4 in monster truck + + // offset0 is control + + // mm-- --Ss + // mm = mode, S = sign for param1, s = sign for param2 + // modes 00 = multiply (regular?) 11 = add to previous 01 / 10 unknown (maybe subtract?) + + if (offset == 2) + { + // assume 0 is upper bits, might be 'mode' instead, check + + + int signmode = (m_multparams[0] & 0x3f); + + uint16_t result = 0; + + // rad_madf uses this mode (add to previous result) + if ((m_multparams[0] & 0xc0) == 0xc0) + { + const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1]; + const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2]; + + result = param1 * param2; + + uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0]; + result = oldresult + result; + } + else if ((m_multparams[0] & 0xc0) == 0x00) + { + const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1]; + const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2]; + + result = param1 * param2; + } + else + { + popmessage("unknown multiplier mode %02x", m_multparams[0] & 0xc0); + } + + m_multresults[1] = (result >> 8) & 0xff; + m_multresults[0] = result & 0xff; + } +} + diff --git a/src/mame/machine/xavix_math.h b/src/mame/machine/xavix_math.h new file mode 100644 index 00000000000..d0bdeb6bf1f --- /dev/null +++ b/src/mame/machine/xavix_math.h @@ -0,0 +1,34 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +#ifndef MAME_MACHINE_XAVIX_MATH_H +#define MAME_MACHINE_XAVIX_MATH_H + +class xavix_math_device : public device_t +{ +public: + xavix_math_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + DECLARE_READ8_MEMBER(mult_r); + DECLARE_WRITE8_MEMBER(mult_w); + DECLARE_READ8_MEMBER(mult_param_r); + DECLARE_WRITE8_MEMBER(mult_param_w); + + DECLARE_READ8_MEMBER(barrel_r); + DECLARE_WRITE8_MEMBER(barrel_w); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + +private: + + uint8_t m_barrel_params[2]; + uint8_t m_multparams[3]; + uint8_t m_multresults[2]; +}; + +DECLARE_DEVICE_TYPE(XAVIX_MATH, xavix_math_device) + +#endif // MAME_MACHINE_XAVIX_MATH_H diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp index 7d4d30d9289..01dcb4631a5 100644 --- a/src/mame/machine/xbox.cpp +++ b/src/mame/machine/xbox.cpp @@ -787,7 +787,7 @@ void xbox_base_state::machine_start() using namespace std::placeholders; machine().debugger().console().register_command("xbox", CMDFLAG_NONE, 0, 1, 4, std::bind(&xbox_base_state::xbox_debug_commands, this, _1, _2)); } - subdevice<xbox_eeprom_device>("pci:01.1:54")->hack_eeprom = + subdevice<xbox_eeprom_device>("pci:01.1:154")->hack_eeprom = [&](void) { hack_eeprom(); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 31e4a7f4207..51f57adf8fb 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -916,6 +916,9 @@ adm23 // @source:adm31.cpp adm31 // +@source:adm36.cpp +adm36 // + @source:adp.cpp fashiong // (c) 1997 fashiong2 // (c) 1997 @@ -1292,9 +1295,6 @@ spcpostn // (c) 1986 Sega / Nasco" @source:anzterm.cpp anzterm // Burroughs EF315-I220 -@source:apbeena.cpp -apb_frpc - @source:apc.cpp apc // @@ -2723,6 +2723,7 @@ catchp // 008837 prototype 1977/?? [6502] @source:ave_arb.cpp arb // +arbv2 // @source:avigo.cpp avigo // 1997 Avigo @@ -12874,6 +12875,9 @@ bridgeca // gincribc // vbrc // +@source:fidel_cc1.cpp +cc1 // + @source:fidel_cc10.cpp cc10 // checkc4 // @@ -12881,6 +12885,7 @@ checkc4 // @source:fidel_cc7.cpp backgamc // cc7 // +cc7o // @source:fidel_chesster.cpp chesster // @@ -12907,7 +12912,7 @@ fdes2325 // feagv10 // feagv11 // feagv2 // -feagv2a // +feagv3 // feagv5 // feagv7 // feagv7a // @@ -12968,6 +12973,7 @@ vsc // @source:finalizr.cpp finalizr // GX523 (c) 1985 +finalizra // GX523 (c) 1985 finalizrb // bootleg @source:fireball.cpp @@ -13098,6 +13104,7 @@ fp6000 // @source:freekick.cpp omega // (c) 1986 Nihon System +omegaa // (c) 1986 Nihon System countrun // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1988.3 countrunb // (c) 1988 bootleg countrunb2 // (c) 1988 bootleg @@ -13217,6 +13224,7 @@ magicrd2c // (c) 1996 Impera megacard // (c) 1993 Fun World mongolnw // 199? bootleg multiwin // (c) 1992 Fun World +nevadafw // 199? unknown novoplay // (c) 1986 Novomatic pool10 // (c) 1996 C.M.C. pool10b // (c) 1996 C.M.C. @@ -15078,6 +15086,7 @@ uspbball // US Games @source:hh_sm510.cpp exospace // Elektronika +gnw_bfight // Nintendo gnw_bjack // Nintendo gnw_boxing // Nintendo gnw_climber // Nintendo @@ -15097,6 +15106,7 @@ gnw_mickdon // Nintendo gnw_octopus // Nintendo gnw_opanic // Nintendo gnw_pchute // Nintendo +gnw_popeye // Nintendo gnw_rshower // Nintendo gnw_smb // Nintendo gnw_squish // Nintendo @@ -17752,6 +17762,8 @@ karatevs // (c) 1984 Data East Corporation (Japan) kchamp // (c) 1984 Data East USA (US) kchampvs // (c) 1984 Data East USA (US) kchampvs2 // (c) 1984 Data East USA (US) +kchampvs3 // (c) 1984 Data East USA (US) +kchampvs4 // (c) 1984 Data East USA (US) @source:kdt6.cpp psi98 // (c) 1984 Kontron @@ -18596,6 +18608,7 @@ gallop // (c) 1991 (Japan) hharry // (c) 1990 (World) hharryu // (c) 1990 Irem America (US) imgfight // (c) 1988 (World) +imgfightb // bootleg imgfightj // (c) 1988 (Japan) kengo // (c) 1991 (Japan) kengoa // (c) 1991 (Japan) @@ -30857,7 +30870,8 @@ ondrav // @source:oneshot.cpp maddonna // (c) 1995 Tuning -maddonnb // (c) 1995 Tuning +komocomo // +maddonnab // (c) 1995 Tuning oneshot // no copyright notice @source:onetwo.cpp @@ -36226,6 +36240,7 @@ st_vulkn // @source:stfight.cpp cshootert // (c) 1987 Taito empcity // (c) 1986 Seibu Kaihatsu (bootleg?) +empcityfr // (c) 1986 Seibu Kaihatsu (Norad license) empcityi // (c) 1986 Seibu Kaihatsu (Eurobed license) empcityj // (c) 1986 Taito Corporation (Japan) empcityu // (c) 1986 Taito (Romstar License) @@ -37344,6 +37359,7 @@ spcteam // backfirt // bootleg [(c) 1988 Tecmo] gemini // (c) 1987 Tecmo geminib // bootleg +geminij // (c) 1987 Tecmo rygar // 6002 - (c) 1986 Tecmo rygar2 // 6002 - (c) 1986 Tecmo rygar3 // 6002 - (c) 1986 Tecmo @@ -37686,6 +37702,10 @@ timepltc // GX393 (c) 1982 + Centuri license timetrv // (c) 1991.10 Virtual Image Productions timetrv2 // (c) 1991.10 Virtual Image Productions +@source:titan_soc.cpp +megadri4 +megadri4a + @source:timex.cpp tc2048 // 198? TC2048 ts2068 // 1983 TS2068 @@ -38431,6 +38451,9 @@ uts20 // @source:unkhorse.cpp unkhorse // +@source:unkpoker.cpp +unkpoker // + @source:upscope.cpp upscope // (c) 1986 Grand products @@ -39689,6 +39712,7 @@ sttng_g7 // sttng_l1 // sttng_l2 // sttng_l3 // +sttng_l5 // sttng_l7 // sttng_p4 // sttng_p5 // @@ -40050,9 +40074,11 @@ yiear // GX407 (c) 1985 yiear2 // GX407 (c) 1985 @source:ymmu100.cpp +mu50 // 1995 MU-50 mu80 // 1994 MU-80 mu100 // 1997 MU-100 mu100r // 1997 MU-100 Rackable version +vl70 // 1996 VL70-m @source:yunsun16.cpp bombkick // (c) 1998 Yun Sung diff --git a/src/mame/mess.flt b/src/mame/mess.flt index a3264c32cb2..675f1b05dc3 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -24,6 +24,7 @@ acvirus.cpp adam.cpp adm23.cpp adm31.cpp +adm36.cpp advision.cpp agat.cpp aim65.cpp @@ -52,7 +53,6 @@ amstr_pc.cpp amstrad.cpp amust.cpp anzterm.cpp -apbeena.cpp apc.cpp apexc.cpp apf.cpp @@ -245,6 +245,7 @@ fccpu20.cpp fccpu30.cpp fidel_as12.cpp fidel_card.cpp +fidel_cc1.cpp fidel_cc10.cpp fidel_cc7.cpp fidel_chesster.cpp @@ -786,6 +787,7 @@ ti990_10.cpp ti990_4.cpp ticalc1x.cpp tiki100.cpp +titan_soc.cpp tim011.cpp tim100.cpp timex.cpp diff --git a/src/mame/video/astrocde.cpp b/src/mame/video/astrocde.cpp index 63e35e6184c..781cee11b18 100644 --- a/src/mame/video/astrocde.cpp +++ b/src/mame/video/astrocde.cpp @@ -395,6 +395,14 @@ void astrocde_state::device_timer(emu_timer &timer, device_timer_id id, int para } } +WRITE_LINE_MEMBER(astrocde_state::lightpen_trigger_w) +{ + if (state) + { + uint8_t res_shift = 1 - m_video_mode; + astrocade_trigger_lightpen(mame_vpos_to_astrocade_vpos(m_screen->vpos()) & ~res_shift, (m_screen->hpos() >> res_shift) + 12); + } +} void astrocde_state::astrocade_trigger_lightpen(uint8_t vfeedback, uint8_t hfeedback) { diff --git a/src/mame/video/cischeat.cpp b/src/mame/video/cischeat.cpp index 91ecd99365d..750ecf21fae 100644 --- a/src/mame/video/cischeat.cpp +++ b/src/mame/video/cischeat.cpp @@ -224,7 +224,7 @@ READ16_MEMBER(cischeat_state::cischeat_ip_select_r) WRITE16_MEMBER(cischeat_state::cischeat_soundlatch_w) { /* Sound CPU: reads latch during int 4, and stores command */ - m_soundlatch->write(space, 0, data, mem_mask); + m_soundlatch->write(data); m_soundcpu->set_input_line(4, HOLD_LINE); } diff --git a/src/mame/video/cninja.cpp b/src/mame/video/cninja.cpp index aede19bd9c0..cfb7e30fe03 100644 --- a/src/mame/video/cninja.cpp +++ b/src/mame/video/cninja.cpp @@ -11,6 +11,11 @@ /******************************************************************************/ +VIDEO_START_MEMBER(cninja_state,cninja) +{ + m_deco_tilegen[0]->set_transmask(1, 0, 0x00ff, 0xff01); +} + VIDEO_START_MEMBER(cninja_state,stoneage) { /* The bootleg has broken scroll registers */ @@ -208,14 +213,14 @@ uint32_t cninja_state::screen_update_robocop2(screen_device &screen, bitmap_ind1 /* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */ if (priority & 4) { - m_deco_tilegen[0]->set_tilemap_colour_mask(2, 0); - m_deco_tilegen[0]->set_tilemap_colour_mask(3, 0); + m_deco_tilegen[1]->set_tilemap_colour_mask(0, 0); + m_deco_tilegen[1]->set_tilemap_colour_mask(1, 0); m_deco_tilegen[1]->pf12_set_gfxbank(0, 4); } else { - m_deco_tilegen[0]->set_tilemap_colour_mask(2, 0xf); - m_deco_tilegen[0]->set_tilemap_colour_mask(3, 0xf); + m_deco_tilegen[1]->set_tilemap_colour_mask(0, 0xf); + m_deco_tilegen[1]->set_tilemap_colour_mask(1, 0xf); m_deco_tilegen[1]->pf12_set_gfxbank(0, 2); } diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp index 34723a3fb1a..d378aac4871 100644 --- a/src/mame/video/cps1.cpp +++ b/src/mame/video/cps1.cpp @@ -1810,10 +1810,12 @@ READ16_MEMBER(cps_state::cps1_cps_b_r) return (m_cps_b_regs[m_game_config->mult_factor1 / 2] * m_cps_b_regs[m_game_config->mult_factor2 / 2]) >> 16; - if (offset == m_game_config->in2_addr / 2) /* Extra input ports (on C-board) */ + /* Extra input ports (on C-board) */ + if (m_game_config->in2_addr != 0 && offset == m_game_config->in2_addr / 2) return ioport("IN2")->read(); - if (offset == m_game_config->in3_addr / 2) /* Player 4 controls (on C-board) ("Captain Commando") */ + /* Player 4 controls (on C-board) ("Captain Commando") */ + if (m_game_config->in3_addr != 0 && offset == m_game_config->in3_addr / 2) return ioport("IN3")->read(); if (m_cps_version == 2) @@ -1859,7 +1861,7 @@ WRITE16_MEMBER(cps_state::cps1_cps_b_w) // additional outputs on C-board - if (offset == m_game_config->out2_addr / 2) + if (m_game_config->out2_addr != 0 && offset == m_game_config->out2_addr / 2) { if (ACCESSING_BITS_0_7) { diff --git a/src/mame/video/crospang.cpp b/src/mame/video/crospang.cpp index adef54bea52..5e83d448063 100644 --- a/src/mame/video/crospang.cpp +++ b/src/mame/video/crospang.cpp @@ -15,19 +15,19 @@ #include "includes/crospang.h" -WRITE16_MEMBER(crospang_state::bestri_tilebank_select_w) +void crospang_state::tilebank_select_w(u16 data) { - logerror("bestri_tilebank_select_w %04x\n", data & mem_mask); + logerror("tilebank_select_w %04x\n", data); - m_bestri_tilebankselect = (data >> 8) & 3; + m_tilebankselect = (data >> 8) & 3; } -WRITE16_MEMBER(crospang_state::bestri_tilebank_data_w) +void crospang_state::tilebank_data_w(u16 data) { - logerror("bestri_tilebank_data_w %04x\n", data & mem_mask); + logerror("tilebank_data_w %04x\n", data); - m_bestri_tilebank[m_bestri_tilebankselect] = data >> 8; + m_tilebank[m_tilebankselect] = data >> 8; m_fg_layer->mark_all_dirty(); m_bg_layer->mark_all_dirty(); @@ -35,7 +35,7 @@ WRITE16_MEMBER(crospang_state::bestri_tilebank_data_w) // Bestri performs some unusual operations on the scroll values before writing them -WRITE16_MEMBER(crospang_state::bestri_bg_scrolly_w) +void crospang_state::bestri_bg_scrolly_w(u16 data) { // addi.w #$1f8, D0 // eori.w #$154, D0 @@ -43,7 +43,7 @@ WRITE16_MEMBER(crospang_state::bestri_bg_scrolly_w) m_bg_layer->set_scrolly(0, -scroll + 7); } -WRITE16_MEMBER(crospang_state::bestri_fg_scrolly_w) +void crospang_state::bestri_fg_scrolly_w(u16 data) { // addi.w #$1f8, D0 // eori.w #$aa, D0 @@ -51,7 +51,7 @@ WRITE16_MEMBER(crospang_state::bestri_fg_scrolly_w) m_fg_layer->set_scrolly(0, -scroll + 7); } -WRITE16_MEMBER(crospang_state::bestri_fg_scrollx_w) +void crospang_state::bestri_fg_scrollx_w(u16 data) { // addi.w #$400, D1 // eori.w #$1e0, D1 @@ -59,7 +59,7 @@ WRITE16_MEMBER(crospang_state::bestri_fg_scrollx_w) m_fg_layer->set_scrollx(0, scroll - 1); } -WRITE16_MEMBER(crospang_state::bestri_bg_scrollx_w) +void crospang_state::bestri_bg_scrollx_w(u16 data) { // addi.w #$3fc, D1 // eori.w #$3c0, D1 @@ -68,34 +68,34 @@ WRITE16_MEMBER(crospang_state::bestri_bg_scrollx_w) } -WRITE16_MEMBER(crospang_state::crospang_fg_scrolly_w) +void crospang_state::fg_scrolly_w(u16 data) { m_fg_layer->set_scrolly(0, data + 8); } -WRITE16_MEMBER(crospang_state::crospang_bg_scrolly_w) +void crospang_state::bg_scrolly_w(u16 data) { m_bg_layer->set_scrolly(0, data + 8); } -WRITE16_MEMBER(crospang_state::crospang_fg_scrollx_w) +void crospang_state::fg_scrollx_w(u16 data) { m_fg_layer->set_scrollx(0, data); } -WRITE16_MEMBER(crospang_state::crospang_bg_scrollx_w) +void crospang_state::bg_scrollx_w(u16 data) { m_bg_layer->set_scrollx(0, data + 4); } -WRITE16_MEMBER(crospang_state::crospang_fg_videoram_w) +void crospang_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_fg_videoram[offset]); m_fg_layer->mark_tile_dirty(offset); } -WRITE16_MEMBER(crospang_state::crospang_bg_videoram_w) +void crospang_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_bg_videoram[offset]); m_bg_layer->mark_tile_dirty(offset); @@ -106,7 +106,7 @@ TILE_GET_INFO_MEMBER(crospang_state::get_bg_tile_info) int data = m_bg_videoram[tile_index]; int tile = data & 0x03ff; int tilebank = (data & 0x0c00) >> 10; - tile = tile + (m_bestri_tilebank[tilebank] << 10); + tile = tile + (m_tilebank[tilebank] << 10); int color = (data >> 12) & 0x0f; SET_TILE_INFO_MEMBER(1, tile, color + 0x20, 0); @@ -117,7 +117,7 @@ TILE_GET_INFO_MEMBER(crospang_state::get_fg_tile_info) int data = m_fg_videoram[tile_index]; int tile = data & 0x03ff; int tilebank = (data & 0x0c00) >> 10; - tile = tile + (m_bestri_tilebank[tilebank] << 10); + tile = tile + (m_tilebank[tilebank] << 10); int color = (data >> 12) & 0x0f; SET_TILE_INFO_MEMBER(1, tile, color + 0x10, 0); @@ -132,7 +132,7 @@ void crospang_state::video_start() m_fg_layer->set_transparent_pen(0); } -uint32_t crospang_state::screen_update_crospang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 crospang_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_layer->draw(screen, bitmap, cliprect, 0, 0); m_fg_layer->draw(screen, bitmap, cliprect, 0, 0); diff --git a/src/mame/video/decbac06.cpp b/src/mame/video/decbac06.cpp index e70e626935f..e89d24f957d 100644 --- a/src/mame/video/decbac06.cpp +++ b/src/mame/video/decbac06.cpp @@ -63,7 +63,7 @@ Priority word (Midres): Bit 2 Bit 3 set = ... - Note that priority mixing is handled outside of the BAC-06 chip. + Note that priority mixing is handled outside of the BAC-06 chip. */ @@ -146,7 +146,7 @@ TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_scan) { if ((m_pf_control_0[0]&2)==0) { - int col_mask = num_cols - 1; + int col_mask = num_cols - 1; return (row & 0xf) + ((col_mask - (col & col_mask)) << 4); } return (col & 0xf) + ((row & 0xf) << 4) + ((col & 0x1f0) << 4); @@ -155,35 +155,35 @@ TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_scan) TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_scan) { //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (row & 0xf) + ((col & 0x1f) << 4) + ((col & 0xf0) << 5); + // return (row & 0xf) + ((col & 0x1f) << 4) + ((col & 0xf0) << 5); return (col & 0xf) + ((row & 0x1f) << 4) + ((col & 0xf0) << 5); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_scan) { //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (col & 0xf) + ((row & 0x3f) << 4) + ((row & 0x70) << 6); + // return (col & 0xf) + ((row & 0x3f) << 4) + ((row & 0x70) << 6); return (col & 0xf) + ((row & 0x3f) << 4) + ((col & 0x70) << 6); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_8x8_scan) { //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x60) << 5); + // return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x60) << 5); return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x60) << 5); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_8x8_scan) { //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (row & 0x1f) + ((col & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6); + // return (row & 0x1f) + ((col & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6); return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x20) << 5) + ((col & 0x20) << 6); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_8x8_scan) { //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (row & 0x1f) + ((col & 0x7f) << 5); + // return (row & 0x1f) + ((col & 0x7f) << 5); return (col & 0x1f) + ((row & 0x7f) << 5); } diff --git a/src/mame/video/deco16ic.cpp b/src/mame/video/deco16ic.cpp index 0943f16d649..a52cac73971 100644 --- a/src/mame/video/deco16ic.cpp +++ b/src/mame/video/deco16ic.cpp @@ -191,7 +191,6 @@ deco16ic_device::deco16ic_device(const machine_config &mconfig, const char *tag, m_pf12_last_small(0), m_pf12_last_big(0), m_pf1_8bpp_mode(0), - m_split(0), m_pf1_size(0), m_pf2_size(0), m_pf1_trans_mask(0xf), @@ -248,9 +247,6 @@ void deco16ic_device::device_start() m_pf1_tilemap_16x16->set_transparent_pen(0); m_pf2_tilemap_16x16->set_transparent_pen(0); - if (m_split) /* Caveman Ninja only */ - m_pf2_tilemap_16x16->set_transmask(0, 0x00ff, 0xff01); - m_pf1_8bpp_mode = 0; m_pf1_data = make_unique_clear<uint16_t[]>(0x2000 / 2); @@ -519,6 +515,21 @@ void deco16ic_device::custom_tilemap_draw( /******************************************************************************/ +void deco16ic_device::set_transmask(int tmap, int group, u32 fgmask, u32 bgmask) +{ + switch (tmap) + { + case 0: + m_pf1_tilemap_16x16->set_transmask(group, fgmask, bgmask); + m_pf1_tilemap_8x8->set_transmask(group, fgmask, bgmask); + break; + case 1: + m_pf2_tilemap_16x16->set_transmask(group, fgmask, bgmask); + m_pf2_tilemap_8x8->set_transmask(group, fgmask, bgmask); + break; + } +} + /* captain america seems to have a similar 8bpp feature to robocop2, investigate merging */ void deco16ic_device::set_pf1_8bpp_mode(int mode) { diff --git a/src/mame/video/deco16ic.h b/src/mame/video/deco16ic.h index 8c19d469571..2c5fa213e03 100644 --- a/src/mame/video/deco16ic.h +++ b/src/mame/video/deco16ic.h @@ -37,7 +37,6 @@ public: // void set_palette_tag(const char *tag); template <typename... T> void set_bank1_callback(T &&... args) { m_bank1_cb = deco16_bank_cb_delegate(std::forward<T>(args)...); } template <typename... T> void set_bank2_callback(T &&... args) { m_bank2_cb = deco16_bank_cb_delegate(std::forward<T>(args)...); } - void set_split(int split) { m_split = split; } void set_pf1_size(int size) { m_pf1_size = size; } void set_pf2_size(int size) { m_pf2_size = size; } void set_pf1_trans_mask(int mask) { m_pf1_trans_mask = mask; } @@ -94,6 +93,9 @@ public: /* used by captaven */ void set_pf1_8bpp_mode(int mode); + /* used by cninja */ + void set_transmask(int tmap, int group, u32 fgmask, u32 bgmask); + /* used by stoneage */ void set_scrolldx(int tmap, int size, int dx, int dx_if_flipped); @@ -146,7 +148,6 @@ private: int m_pf12_last_small, m_pf12_last_big; int m_pf1_8bpp_mode; - int m_split; int m_pf1_size; int m_pf2_size; int m_pf1_trans_mask, m_pf2_trans_mask; diff --git a/src/mame/video/esd16.cpp b/src/mame/video/esd16.cpp index c36ee9ca06f..589aadecf64 100644 --- a/src/mame/video/esd16.cpp +++ b/src/mame/video/esd16.cpp @@ -53,73 +53,43 @@ Note: if MAME_DEBUG is defined, pressing Z with: ***************************************************************************/ -TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_0) +template<unsigned Layer> +TILE_GET_INFO_MEMBER(esd16_state::get_tile_info) { - uint16_t code = m_vram_0[tile_index]; + const u16 code = m_vram[Layer][tile_index]; SET_TILE_INFO_MEMBER(1, code, - m_tilemap0_color, + m_tilemap_color[Layer], 0); } -TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_0_16x16) +template<unsigned Layer> +TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_16x16) { - uint16_t code = m_vram_0[tile_index]; + const u16 code = m_vram[Layer][tile_index]; SET_TILE_INFO_MEMBER(2, code, - m_tilemap0_color, + m_tilemap_color[Layer], 0); } -TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_1) +void esd16_state::tilemap0_color_w(u16 data) { - uint16_t code = m_vram_1[tile_index]; - SET_TILE_INFO_MEMBER(1, - code, - m_tilemap1_color, - 0); -} - -TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_1_16x16) -{ - uint16_t code = m_vram_1[tile_index]; - SET_TILE_INFO_MEMBER(2, - code, - m_tilemap1_color, - 0); -} - -WRITE16_MEMBER(esd16_state::esd16_vram_0_w) -{ - COMBINE_DATA(&m_vram_0[offset]); - m_tilemap_0->mark_tile_dirty(offset); - m_tilemap_0_16x16->mark_tile_dirty(offset); -} - -WRITE16_MEMBER(esd16_state::esd16_vram_1_w) -{ - COMBINE_DATA(&m_vram_1[offset]); - m_tilemap_1->mark_tile_dirty(offset); - m_tilemap_1_16x16->mark_tile_dirty(offset); -} - -WRITE16_MEMBER(esd16_state::esd16_tilemap0_color_w) -{ - m_tilemap0_color = data & 0x03; - m_tilemap_0->mark_all_dirty(); - m_tilemap_0_16x16->mark_all_dirty(); + m_tilemap_color[0] = data & 0x03; + m_tilemap[0]->mark_all_dirty(); + m_tilemap_16x16[0]->mark_all_dirty(); bool flip = BIT(data, 7); flip_screen_set(flip); m_sprgen->set_flip_screen(flip); } -WRITE16_MEMBER(esd16_state::esd16_tilemap0_color_jumppop_w) +void esd16_state::tilemap0_color_jumppop_w(u16 data) { // todo - m_tilemap0_color = 2; - m_tilemap1_color = 1; + m_tilemap_color[0] = 2; + m_tilemap_color[1] = 1; bool flip = BIT(data, 7); flip_screen_set(flip); @@ -138,22 +108,22 @@ WRITE16_MEMBER(esd16_state::esd16_tilemap0_color_jumppop_w) void esd16_state::video_start() { - m_tilemap_0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); - m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info<0>),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info<1>),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); /* swatpolc changes tilemap 0 to 16x16 at various times */ - m_tilemap_0_16x16 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_0_16x16),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); + m_tilemap_16x16[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_16x16<0>),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); /* hedpanic changes tilemap 1 to 16x16 at various times */ - m_tilemap_1_16x16 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_1_16x16),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); + m_tilemap_16x16[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(esd16_state::get_tile_info_16x16<1>),this), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); - m_tilemap_0->set_scrolldx(-0x60 + 2, -0x60); - m_tilemap_1->set_scrolldx(-0x60, -0x60 + 2); - m_tilemap_0_16x16->set_scrolldx(-0x60 + 2, -0x60); - m_tilemap_1_16x16->set_scrolldx(-0x60, -0x60 + 2); + m_tilemap[0]->set_scrolldx(-0x60 + 2, -0x60); + m_tilemap[1]->set_scrolldx(-0x60, -0x60 + 2); + m_tilemap_16x16[0]->set_scrolldx(-0x60 + 2, -0x60); + m_tilemap_16x16[1]->set_scrolldx(-0x60, -0x60 + 2); - m_tilemap_1->set_transparent_pen(0x00); - m_tilemap_1_16x16->set_transparent_pen(0x00); + m_tilemap[1]->set_transparent_pen(0x00); + m_tilemap_16x16[1]->set_transparent_pen(0x00); } @@ -165,7 +135,7 @@ void esd16_state::video_start() ***************************************************************************/ -uint32_t esd16_state::screen_update_hedpanic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 esd16_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int layers_ctrl = -1; @@ -186,15 +156,15 @@ if (machine().input().code_pressed(KEYCODE_Z)) { if (m_head_layersize[0] & 0x0001) { - m_tilemap_0_16x16->set_scrollx(0, m_scroll_0[0]); - m_tilemap_0_16x16->set_scrolly(0, m_scroll_0[1]); - m_tilemap_0_16x16->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap_16x16[0]->set_scrollx(0, m_scroll[0][0]); + m_tilemap_16x16[0]->set_scrolly(0, m_scroll[0][1]); + m_tilemap_16x16[0]->draw(screen, bitmap, cliprect, 0, 0); } else { - m_tilemap_0->set_scrollx(0, m_scroll_0[0]); - m_tilemap_0->set_scrolly(0, m_scroll_0[1]); - m_tilemap_0->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[0]->set_scrollx(0, m_scroll[0][0]); + m_tilemap[0]->set_scrolly(0, m_scroll[0][1]); + m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); } } else @@ -207,15 +177,15 @@ if (machine().input().code_pressed(KEYCODE_Z)) { if (m_head_layersize[0] & 0x0002) { - m_tilemap_1_16x16->set_scrollx(0, m_scroll_1[0]); - m_tilemap_1_16x16->set_scrolly(0, m_scroll_1[1]); - m_tilemap_1_16x16->draw(screen, bitmap, cliprect, 0, 1); + m_tilemap_16x16[1]->set_scrollx(0, m_scroll[1][0]); + m_tilemap_16x16[1]->set_scrolly(0, m_scroll[1][1]); + m_tilemap_16x16[1]->draw(screen, bitmap, cliprect, 0, 1); } else { - m_tilemap_1->set_scrollx(0, m_scroll_1[0]); - m_tilemap_1->set_scrolly(0, m_scroll_1[1]); - m_tilemap_1->draw(screen, bitmap, cliprect, 0, 1); + m_tilemap[1]->set_scrollx(0, m_scroll[1][0]); + m_tilemap[1]->set_scrolly(0, m_scroll[1][1]); + m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 1); } } diff --git a/src/mame/video/flstory.cpp b/src/mame/video/flstory.cpp index be695acd92a..8f0f811f8f5 100644 --- a/src/mame/video/flstory.cpp +++ b/src/mame/video/flstory.cpp @@ -110,9 +110,9 @@ WRITE8_MEMBER(flstory_state::flstory_videoram_w) WRITE8_MEMBER(flstory_state::flstory_palette_w) { if (offset & 0x100) - m_palette->write8_ext(space, (offset & 0xff) + (m_palette_bank << 8), data); + m_palette->write8_ext((offset & 0xff) + (m_palette_bank << 8), data); else - m_palette->write8(space, (offset & 0xff) + (m_palette_bank << 8), data); + m_palette->write8((offset & 0xff) + (m_palette_bank << 8), data); } READ8_MEMBER(flstory_state::flstory_palette_r) diff --git a/src/mame/video/gaelco2.cpp b/src/mame/video/gaelco2.cpp index a315d5103e3..3c6e5403da8 100644 --- a/src/mame/video/gaelco2.cpp +++ b/src/mame/video/gaelco2.cpp @@ -104,20 +104,12 @@ Multi monitor notes: ***************************************************************************/ -TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen0) +template<unsigned Layer> +TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info) { - int data = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)]; - int data2 = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)]; - int code = ((data & 0x07) << 16) | (data2 & 0xffff); - - SET_TILE_INFO_MEMBER(0, code, ((data >> 9) & 0x7f), TILE_FLIPXY((data >> 6) & 0x03)); -} - -TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1) -{ - int data = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)]; - int data2 = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)]; - int code = ((data & 0x07) << 16) | (data2 & 0xffff); + const u16 data = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + (tile_index << 1)]; + const u16 data2 = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + ((tile_index << 1) + 1)]; + const u32 code = ((data & 0x07) << 16) | (data2 & 0xffff); SET_TILE_INFO_MEMBER(0, code, ((data >> 9) & 0x7f), TILE_FLIPXY((data >> 6) & 0x03)); } @@ -145,22 +137,14 @@ TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1) ***************************************************************************/ -TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen0_dual) -{ - int data = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)]; - int data2 = m_videoram[(((m_vregs[0] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)]; - int code = ((data & 0x07) << 16) | (data2 & 0xffff); - - SET_TILE_INFO_MEMBER(0, code, ((data >> 9) & 0x3f), TILE_FLIPXY((data >> 6) & 0x03)); -} - -TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1_dual) +template<unsigned Layer> +TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_dual) { - int data = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + (tile_index << 1)]; - int data2 = m_videoram[(((m_vregs[1] >> 9) & 0x07)*0x2000/2) + ((tile_index << 1) + 1)]; - int code = ((data & 0x07) << 16) | (data2 & 0xffff); + const u16 data = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + (tile_index << 1)]; + const u16 data2 = m_videoram[(((m_vregs[Layer] >> 9) & 0x07) * 0x2000 / 2) + ((tile_index << 1) + 1)]; + const u32 code = ((data & 0x07) << 16) | (data2 & 0xffff); - SET_TILE_INFO_MEMBER(0, code, 0x40 + ((data >> 9) & 0x3f), TILE_FLIPXY((data >> 6) & 0x03)); + SET_TILE_INFO_MEMBER(0, code, (Layer * 0x40) + ((data >> 9) & 0x3f), TILE_FLIPXY((data >> 6) & 0x03)); } @@ -170,23 +154,38 @@ TILE_GET_INFO_MEMBER(gaelco2_state::get_tile_info_gaelco2_screen1_dual) ***************************************************************************/ -WRITE16_MEMBER(gaelco2_state::gaelco2_vram_w) +void gaelco2_state::vram_w(offs_t offset, u16 data, u16 mem_mask) { - int pant0_start = ((m_vregs[0] >> 9) & 0x07)*0x1000; - int pant0_end = pant0_start + 0x1000; - int pant1_start = ((m_vregs[1] >> 9) & 0x07)*0x1000; - int pant1_end = pant1_start + 0x1000; + const u32 pant0_start = ((m_vregs[0] >> 9) & 0x07) * 0x1000; + const u32 pant0_end = pant0_start + 0x1000; + const u32 pant1_start = ((m_vregs[1] >> 9) & 0x07) * 0x1000; + const u32 pant1_end = pant1_start + 0x1000; COMBINE_DATA(&m_videoram[offset]); /* tilemap 0 writes */ - if ((offset >= pant0_start) && (offset < pant0_end)){ + if ((offset >= pant0_start) && (offset < pant0_end)) m_pant[0]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2); - } /* tilemap 1 writes */ - if ((offset >= pant1_start) && (offset < pant1_end)){ + if ((offset >= pant1_start) && (offset < pant1_end)) m_pant[1]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2); + +} + +void gaelco2_state::vregs_w(offs_t offset, u16 data, u16 mem_mask) +{ + u16 old = m_vregs[offset]; + data = COMBINE_DATA(&m_vregs[offset]); + switch (offset) + { + case 0: + case 1: + if (((old ^ data) >> 9) & 7) // tilemap ram offset + { + m_pant[offset]->mark_all_dirty(); + } + break; } } @@ -210,44 +209,39 @@ WRITE16_MEMBER(gaelco2_state::gaelco2_vram_w) ***************************************************************************/ -#define RGB_CHG 0x08 -#define ADJUST_COLOR(c) ((c < 0) ? 0 : ((c > 255) ? 255 : c)) +static constexpr u8 RGB_CHG = 0x08; +static inline const u8 ADJUST_COLOR(s16 c) { return (c < 0) ? 0 : ((c > 255) ? 255 : c); } /* table used for color adjustment */ -static const int pen_color_adjust[16] = { - +RGB_CHG*0, -RGB_CHG*1, -RGB_CHG*2, -RGB_CHG*3, -RGB_CHG*4, -RGB_CHG*5, -RGB_CHG*6, -RGB_CHG*7, - +RGB_CHG*8, +RGB_CHG*7, +RGB_CHG*6, +RGB_CHG*5, +RGB_CHG*4, +RGB_CHG*3, +RGB_CHG*2, +RGB_CHG*1 +static const s8 pen_color_adjust[16] = { + +RGB_CHG * 0, -RGB_CHG * 1, -RGB_CHG * 2, -RGB_CHG * 3, -RGB_CHG * 4, -RGB_CHG * 5, -RGB_CHG * 6, -RGB_CHG * 7, + +RGB_CHG * 8, +RGB_CHG * 7, +RGB_CHG * 6, +RGB_CHG * 5, +RGB_CHG * 4, +RGB_CHG * 3, +RGB_CHG * 2, +RGB_CHG * 1 }; -WRITE16_MEMBER(gaelco2_state::gaelco2_palette_w) +void gaelco2_state::palette_w(offs_t offset, u16 data, u16 mem_mask) { - int i, color, r, g, b, auxr, auxg, auxb; - - COMBINE_DATA(&m_generic_paletteram_16[offset]); - color = m_generic_paletteram_16[offset]; + COMBINE_DATA(&m_paletteram[offset]); + const u16 color = m_paletteram[offset]; /* extract RGB components */ - r = (color >> 10) & 0x1f; - g = (color >> 5) & 0x1f; - b = (color >> 0) & 0x1f; - - r = pal5bit(r); - g = pal5bit(g); - b = pal5bit(b); + const u8 r = pal5bit(color >> 10); + const u8 g = pal5bit(color >> 5); + const u8 b = pal5bit(color & 0x1f); /* update game palette */ m_palette->set_pen_color(4096*0 + offset, rgb_t(r, g, b)); - /* update shadow/highligh palettes */ - for (i = 1; i < 16; i++){ + /* update shadow/highlight palettes */ + for (int i = 1; i < 16; i++) + { /* because the last palette entry is reserved for shadows and highlights, we don't use it and that way we save some colors so the UI looks fine ;-) */ if ((offset >= 0xff0) && (offset <= 0xfff)) return; - auxr = ADJUST_COLOR(r + pen_color_adjust[i]); - auxg = ADJUST_COLOR(g + pen_color_adjust[i]); - auxb = ADJUST_COLOR(b + pen_color_adjust[i]); + const u8 auxr = ADJUST_COLOR(r + pen_color_adjust[i]); + const u8 auxg = ADJUST_COLOR(g + pen_color_adjust[i]); + const u8 auxb = ADJUST_COLOR(b + pen_color_adjust[i]); m_palette->set_pen_color(4096*i + offset, rgb_t(auxr, auxg, auxb)); } @@ -264,8 +258,8 @@ VIDEO_START_MEMBER(gaelco2_state,gaelco2) m_videoram = m_spriteram->live(); /* create tilemaps */ - m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen0),this),TILEMAP_SCAN_ROWS,16,16,64,32); - m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen1),this),TILEMAP_SCAN_ROWS,16,16,64,32); + m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info<0>),this),TILEMAP_SCAN_ROWS,16,16,64,32); + m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info<1>),this),TILEMAP_SCAN_ROWS,16,16,64,32); /* set tilemap properties */ m_pant[0]->set_transparent_pen(0); @@ -284,8 +278,8 @@ VIDEO_START_MEMBER(gaelco2_state,gaelco2_dual) m_videoram = m_spriteram->live(); /* create tilemaps */ - m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen0_dual),this),TILEMAP_SCAN_ROWS,16,16,64,32); - m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_gaelco2_screen1_dual),this),TILEMAP_SCAN_ROWS,16,16,64,32); + m_pant[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_dual<0>),this),TILEMAP_SCAN_ROWS,16,16,64,32); + m_pant[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gaelco2_state::get_tile_info_dual<1>),this),TILEMAP_SCAN_ROWS,16,16,64,32); /* set tilemap properties */ m_pant[0]->set_transparent_pen(0); @@ -337,78 +331,85 @@ VIDEO_START_MEMBER(gaelco2_state,gaelco2_dual) void gaelco2_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int mask) { - uint16_t *buffered_spriteram16 = m_spriteram->buffer(); - int j, x, y, ex, ey, px, py; + u16 *buffered_spriteram16 = m_spriteram->buffer(); gfx_element *gfx = m_gfxdecode->gfx(0); /* get sprite ram start and end offsets */ - int start_offset = (m_vregs[1] & 0x10)*0x100; - int end_offset = start_offset + 0x1000; + const u32 start_offset = (m_vregs[1] & 0x10) * 0x100; + const u32 end_offset = start_offset + 0x1000; /* sprite offset is based on the visible area - this seems very kludgy */ - int spr_x_adjust = (screen.visible_area().max_x - 320 + 1) - (511 - 320 - 1) - ((m_vregs[0] >> 4) & 0x01) + m_global_spritexoff; + const int spr_x_adjust = (screen.visible_area().max_x - 320 + 1) - (511 - 320 - 1) - ((m_vregs[0] >> 4) & 0x01) + m_global_spritexoff; - for (j = start_offset; j < end_offset; j += 8){ - int data = buffered_spriteram16[(j/2) + 0]; - int data2 = buffered_spriteram16[(j/2) + 1]; - int data3 = buffered_spriteram16[(j/2) + 2]; - int data4 = buffered_spriteram16[(j/2) + 3]; + for (int j = start_offset; j < end_offset; j += 8) + { + const u16 data = buffered_spriteram16[(j / 2) + 0]; + const u16 data2 = buffered_spriteram16[(j / 2) + 1]; + const u16 data3 = buffered_spriteram16[(j / 2) + 2]; + const u16 data4 = buffered_spriteram16[(j / 2) + 3]; - int sx = data3 & 0x3ff; - int sy = data2 & 0x1ff; + const int sx = data3 & 0x3ff; + const int sy = data2 & 0x1ff; - int xflip = data2 & 0x800; - int yflip = data2 & 0x400; + const bool xflip = data2 & 0x800; + const bool yflip = data2 & 0x400; - int xsize = ((data3 >> 12) & 0x0f) + 1; - int ysize = ((data2 >> 12) & 0x0f) + 1; + const int xsize = ((data3 >> 12) & 0x0f) + 1; + const int ysize = ((data2 >> 12) & 0x0f) + 1; if (m_dual_monitor && ((data & 0x8000) != mask)) continue; /* if it's enabled, draw it */ - if ((data2 & 0x0200) != 0){ - for (y = 0; y < ysize; y++){ - for (x = 0; x < xsize; x++){ + if ((data2 & 0x0200) != 0) + { + for (int y = 0; y < ysize; y++) + { + for (int x = 0; x < xsize; x++) + { /* for each x,y of the sprite, fetch the sprite data */ - int data5 = buffered_spriteram16[((data4/2) + (y*xsize + x)) & 0x7fff]; - int number = ((data & 0x1ff) << 10) + (data5 & 0x0fff); - int color = ((data >> 9) & 0x7f) + ((data5 >> 12) & 0x0f); - int color_effect = m_dual_monitor ? ((color & 0x3f) == 0x3f) : (color == 0x7f); + const u16 data5 = buffered_spriteram16[((data4 / 2) + (y*xsize + x)) & 0x7fff]; + const u32 number = ((data & 0x1ff) << 10) + (data5 & 0x0fff); + const u32 color = ((data >> 9) & 0x7f) + ((data5 >> 12) & 0x0f); + const bool color_effect = m_dual_monitor ? ((color & 0x3f) == 0x3f) : (color == 0x7f); - ex = xflip ? (xsize - 1 - x) : x; - ey = yflip ? (ysize - 1 - y) : y; + const int ex = xflip ? (xsize - 1 - x) : x; + const int ey = yflip ? (ysize - 1 - y) : y; /* normal sprite, pen 0 transparent */ - if (color_effect == 0){ + if (!color_effect) + { gfx->transpen(bitmap,cliprect, number, color, xflip, yflip, - ((sx + ex*16) & 0x3ff) + spr_x_adjust, - ((sy + ey*16) & 0x1ff), 0); - - } else { /* last palette entry is reserved for shadows and highlights */ + ((sx + ex * 16) & 0x3ff) + spr_x_adjust, + ((sy + ey * 16) & 0x1ff), 0); + } + else + { /* last palette entry is reserved for shadows and highlights */ /* get a pointer to the current sprite's gfx data */ const uint8_t *gfx_src = gfx->get_data(number % gfx->elements()); - for (py = 0; py < gfx->height(); py++){ + for (int py = 0; py < gfx->height(); py++) + { /* get a pointer to the current line in the screen bitmap */ - int ypos = ((sy + ey*16 + py) & 0x1ff); - uint16_t *srcy = &bitmap.pix16(ypos); + const int ypos = ((sy + ey * 16 + py) & 0x1ff); + u16 *srcy = &bitmap.pix16(ypos); - int gfx_py = yflip ? (gfx->height() - 1 - py) : py; + const int gfx_py = yflip ? (gfx->height() - 1 - py) : py; if ((ypos < cliprect.min_y) || (ypos > cliprect.max_y)) continue; - for (px = 0; px < gfx->width(); px++){ + for (int px = 0; px < gfx->width(); px++) + { /* get current pixel */ - int xpos = (((sx + ex*16 + px) & 0x3ff) + spr_x_adjust) & 0x3ff; - uint16_t *pixel = srcy + xpos; - int src_color = *pixel; + const int xpos = (((sx + ex * 16 + px) & 0x3ff) + spr_x_adjust) & 0x3ff; + u16 *pixel = srcy + xpos; + const u16 src_color = *pixel; - int gfx_px = xflip ? (gfx->width() - 1 - px) : px; + const int gfx_px = xflip ? (gfx->width() - 1 - px) : px; /* get asociated pen for the current sprite pixel */ - int gfx_pen = gfx_src[gfx->rowbytes()*gfx_py + gfx_px]; + const u8 gfx_pen = gfx_src[gfx->rowbytes() * gfx_py + gfx_px]; if ((gfx_pen == 0) || (gfx_pen >= 16)) continue; @@ -431,29 +432,28 @@ void gaelco2_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co ***************************************************************************/ -uint32_t gaelco2_state::screen_update_gaelco2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 gaelco2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int i; - int xoff0 = 0x14; int xoff1 = xoff0 - 4; int yoff0 = 0x01; int yoff1 = 0x01; /* read scroll values */ - int scroll0x = m_videoram[0x2802/2] + xoff0; - int scroll1x = m_videoram[0x2806/2] + xoff1; - int scroll0y = m_videoram[0x2800/2] + yoff0; - int scroll1y = m_videoram[0x2804/2] + yoff1; + int scroll0x = m_videoram[0x2802 / 2] + xoff0; + int scroll1x = m_videoram[0x2806 / 2] + xoff1; + int scroll0y = m_videoram[0x2800 / 2] + yoff0; + int scroll1y = m_videoram[0x2804 / 2] + yoff1; /* set y scroll registers */ m_pant[0]->set_scrolly(0, scroll0y & 0x1ff); m_pant[1]->set_scrolly(0, scroll1y & 0x1ff); /* set x linescroll registers */ - for (i = 0; i < 512; i++){ - m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000/2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff); - m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400/2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff); + for (int i = 0; i < 512; i++) + { + m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000 / 2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff); + m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400 / 2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff); } /* draw screen */ @@ -465,20 +465,18 @@ uint32_t gaelco2_state::screen_update_gaelco2(screen_device &screen, bitmap_ind1 return 0; } -uint32_t gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index) +u32 gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index) { - int i; - int xoff0 = 0x14; // intro scenes align better with 0x13, but test screen is definitely 0x14 int xoff1 = xoff0 - 4; int yoff0 = 0x01; int yoff1 = 0x01; /* read scroll values */ - int scroll0x = m_videoram[0x2802/2] + xoff0; - int scroll1x = m_videoram[0x2806/2] + xoff1; - int scroll0y = m_videoram[0x2800/2] + yoff0; - int scroll1y = m_videoram[0x2804/2] + yoff1; + int scroll0x = m_videoram[0x2802 / 2] + xoff0; + int scroll1x = m_videoram[0x2806 / 2] + xoff1; + int scroll0y = m_videoram[0x2800 / 2] + yoff0; + int scroll1y = m_videoram[0x2804 / 2] + yoff1; // if linescroll is enabled y-scroll handling changes too? // touchgo uses 0x1f0 / 0x1ef between game and intro screens but actual scroll position needs to be different @@ -498,13 +496,12 @@ uint32_t gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap, m_pant[1]->set_scrolly(0, scroll1y & 0x1ff); /* set x linescroll registers */ - for (i = 0; i < 512; i++){ - m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000/2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff); - m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400/2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff); + for (int i = 0; i < 512; i++) + { + m_pant[0]->set_scrollx(i & 0x1ff, (m_vregs[0] & 0x8000) ? (m_videoram[(0x2000 / 2) + i] + xoff0) & 0x3ff : scroll0x & 0x3ff); + m_pant[1]->set_scrollx(i & 0x1ff, (m_vregs[1] & 0x8000) ? (m_videoram[(0x2400 / 2) + i] + xoff1) & 0x3ff : scroll1x & 0x3ff); } - - /* draw screen */ bitmap.fill(0, cliprect); @@ -514,5 +511,5 @@ uint32_t gaelco2_state::dual_update(screen_device &screen, bitmap_ind16 &bitmap, return 0; } -uint32_t gaelco2_state::screen_update_gaelco2_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 0); } -uint32_t gaelco2_state::screen_update_gaelco2_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 1); } +u32 gaelco2_state::screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 0); } +u32 gaelco2_state::screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect){ return dual_update(screen, bitmap, cliprect, 1); } diff --git a/src/mame/video/ginganin.cpp b/src/mame/video/ginganin.cpp index b6bdb2de6eb..a477c41b80b 100644 --- a/src/mame/video/ginganin.cpp +++ b/src/mame/video/ginganin.cpp @@ -172,7 +172,7 @@ WRITE16_MEMBER(ginganin_state::ginganin_vregs16_w) machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); break; case 7: - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); break; default: diff --git a/src/mame/video/itech32.cpp b/src/mame/video/itech32.cpp index 8a43b4baf28..a86923847d2 100644 --- a/src/mame/video/itech32.cpp +++ b/src/mame/video/itech32.cpp @@ -319,7 +319,7 @@ WRITE16_MEMBER(itech32_state::bloodstm_paletteram_w) mem_mask >>= 8; } - m_palette->write16(space, offset, data, mem_mask); + m_palette->write16(offset, data, mem_mask); } diff --git a/src/mame/video/ladyfrog.cpp b/src/mame/video/ladyfrog.cpp index d36c5e72408..f0991b0e39e 100644 --- a/src/mame/video/ladyfrog.cpp +++ b/src/mame/video/ladyfrog.cpp @@ -45,9 +45,9 @@ READ8_MEMBER(ladyfrog_state::ladyfrog_videoram_r) WRITE8_MEMBER(ladyfrog_state::ladyfrog_palette_w) { if (offset & 0x100) - m_palette->write8_ext(space, (offset & 0xff) + (m_palette_bank << 8), data); + m_palette->write8_ext((offset & 0xff) + (m_palette_bank << 8), data); else - m_palette->write8(space, (offset & 0xff) + (m_palette_bank << 8), data); + m_palette->write8((offset & 0xff) + (m_palette_bank << 8), data); } READ8_MEMBER(ladyfrog_state::ladyfrog_palette_r) diff --git a/src/mame/video/liberate.cpp b/src/mame/video/liberate.cpp index 35b1fbf6f57..4bd3e8d580b 100644 --- a/src/mame/video/liberate.cpp +++ b/src/mame/video/liberate.cpp @@ -126,7 +126,7 @@ WRITE8_MEMBER(liberate_state::deco16_io_w) m_maincpu->set_input_line(DECO16_IRQ_LINE, CLEAR_LINE); break; case 9: /* Sound */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); break; } @@ -154,7 +154,7 @@ WRITE8_MEMBER(liberate_state::prosoccr_io_w) m_maincpu->set_input_line(DECO16_IRQ_LINE, CLEAR_LINE); break; case 9: /* Sound */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); break; } @@ -173,7 +173,7 @@ WRITE8_MEMBER(liberate_state::prosport_io_w) m_back_tilemap->mark_all_dirty(); break; case 2: /* Sound */ - m_soundlatch->write(space, 0, data); + m_soundlatch->write(data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); break; case 4: /* Irq ack */ diff --git a/src/mame/video/m92.cpp b/src/mame/video/m92.cpp index cd650228b24..3e4c6475ef8 100644 --- a/src/mame/video/m92.cpp +++ b/src/mame/video/m92.cpp @@ -140,7 +140,7 @@ READ16_MEMBER(m92_state::paletteram_r) WRITE16_MEMBER(m92_state::paletteram_w) { - m_palette->write16(space, offset | (m_palette_bank << 10), data, mem_mask); + m_palette->write16(offset | (m_palette_bank << 10), data, mem_mask); } /*****************************************************************************/ diff --git a/src/mame/video/megasys1.cpp b/src/mame/video/megasys1.cpp index ace59ad82cd..18868e4a545 100644 --- a/src/mame/video/megasys1.cpp +++ b/src/mame/video/megasys1.cpp @@ -271,20 +271,20 @@ WRITE16_MEMBER(megasys1_state::screen_flag_w) WRITE16_MEMBER(megasys1_state::soundlatch_w) { - m_soundlatch[0]->write(space, 0, data, mem_mask); + m_soundlatch[0]->write(data); m_audiocpu->set_input_line(4, HOLD_LINE); } WRITE16_MEMBER(megasys1_state::soundlatch_z_w) { - m_soundlatch[0]->write(space, 0, data & 0xff); + m_soundlatch[0]->write(data & 0xff); m_audiocpu->set_input_line(5, HOLD_LINE); } WRITE16_MEMBER(megasys1_state::soundlatch_c_w) { // Cybattler reads sound latch on irq 2 - m_soundlatch[0]->write(space, 0, data, mem_mask); + m_soundlatch[0]->write(data); m_audiocpu->set_input_line(2, HOLD_LINE); } diff --git a/src/mame/video/midtunit.cpp b/src/mame/video/midtunit.cpp index 6fcafa2f232..303e374f5fe 100644 --- a/src/mame/video/midtunit.cpp +++ b/src/mame/video/midtunit.cpp @@ -280,13 +280,13 @@ READ16_MEMBER(midwunit_video_device::midwunit_control_r) WRITE16_MEMBER(midxunit_video_device::midxunit_paletteram_w) { if (!(offset & 1)) - m_palette->write16(space, offset / 2, data, mem_mask); + m_palette->write16(offset / 2, data, mem_mask); } READ16_MEMBER(midxunit_video_device::midxunit_paletteram_r) { - return m_palette->read16(space, offset / 2, mem_mask); + return m_palette->read16(offset / 2); } diff --git a/src/mame/video/midtview.ipp b/src/mame/video/midtview.ipp index 02da31bf928..046a193e8d3 100644 --- a/src/mame/video/midtview.ipp +++ b/src/mame/video/midtview.ipp @@ -45,7 +45,7 @@ void midtunit_video_device::device_add_mconfig(machine_config &config) debugscreen.set_raw(8000000 * 2, 506, 100, 500, 289, 20, 274); debugscreen.set_screen_update(FUNC(midtunit_video_device::debug_screen_update)); - PALETTE(config, m_debug_palette, 32768).set_format(PALETTE_FORMAT_xRRRRRGGGGGBBBBB); + PALETTE(config, m_debug_palette).set_format(palette_device::xRGB_555, 32768); } void midwunit_video_device::device_add_mconfig(machine_config &config) @@ -54,7 +54,7 @@ void midwunit_video_device::device_add_mconfig(machine_config &config) debugscreen.set_raw(8000000, 506, 101, 501, 289, 20, 274); debugscreen.set_screen_update(FUNC(midwunit_video_device::debug_screen_update)); - PALETTE(config, m_debug_palette, 32768).set_format(PALETTE_FORMAT_xRRRRRGGGGGBBBBB); + PALETTE(config, m_debug_palette).set_format(palette_device::xRGB_555, 32768); } void midtunit_video_device::do_debug_blit() diff --git a/src/mame/video/mitchell.cpp b/src/mame/video/mitchell.cpp index b92a66dd096..92c95ecc91f 100644 --- a/src/mame/video/mitchell.cpp +++ b/src/mame/video/mitchell.cpp @@ -241,7 +241,7 @@ logerror("PC %04x: pang_gfxctrl_w %02x\n",m_maincpu->pc(),data); WRITE8_MEMBER(mitchell_state::pang_paletteram_w) { - m_palette->write8(space, offset + (m_paletteram_bank ? 0x800 : 0x000), data); + m_palette->write8(offset + (m_paletteram_bank ? 0x800 : 0x000), data); } READ8_MEMBER(mitchell_state::pang_paletteram_r) diff --git a/src/mame/video/namcos1.cpp b/src/mame/video/namcos1.cpp index af5c91be3a1..ccabf3c0ca9 100644 --- a/src/mame/video/namcos1.cpp +++ b/src/mame/video/namcos1.cpp @@ -53,7 +53,7 @@ Namco System 1 Video Hardware ***************************************************************************/ -void namcos1_state::TilemapCB(uint16_t code, int *tile, int *mask) +void namcos1_state::TilemapCB(u16 code, int *tile, int *mask) { code &= 0x3fff; *tile = code; @@ -82,7 +82,7 @@ void namcos1_state::video_start() for (i = 0x0800;i < 0x1000;i++) m_c116->shadow_table()[i] = i + 0x0800; - m_copy_sprites = 0; + m_copy_sprites = false; save_item(NAME(m_copy_sprites)); } @@ -95,7 +95,7 @@ void namcos1_state::video_start() ***************************************************************************/ -WRITE8_MEMBER( namcos1_state::spriteram_w ) +void namcos1_state::spriteram_w(offs_t offset, u8 data) { /* 0000-07ff work ram */ /* 0800-0fff sprite ram */ @@ -103,7 +103,7 @@ WRITE8_MEMBER( namcos1_state::spriteram_w ) /* a write to this offset tells the sprite chip to buffer the sprite list */ if (offset == 0x0ff2) - m_copy_sprites = 1; + m_copy_sprites = true; } @@ -136,32 +136,32 @@ sprite format: void namcos1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t *spriteram = m_spriteram + 0x800; - const uint8_t *source = &spriteram[0x800-0x20]; /* the last is NOT a sprite */ - const uint8_t *finish = &spriteram[0]; + u8 *spriteram = m_spriteram + 0x800; + const u8 *source = &spriteram[0x800-0x20]; /* the last is NOT a sprite */ + const u8 *finish = &spriteram[0]; gfx_element *gfx = m_gfxdecode->gfx(0); - int sprite_xoffs = spriteram[0x07f5] + ((spriteram[0x07f4] & 1) << 8); - int sprite_yoffs = spriteram[0x07f7]; + const int sprite_xoffs = spriteram[0x07f5] + ((spriteram[0x07f4] & 1) << 8); + const int sprite_yoffs = spriteram[0x07f7]; while (source >= finish) { static const int sprite_size[4] = { 16, 8, 32, 4 }; - int attr1 = source[10]; - int attr2 = source[14]; - int color = source[12]; + const u8 attr1 = source[10]; + const u8 attr2 = source[14]; + u32 color = source[12]; int flipx = (attr1 & 0x20) >> 5; int flipy = (attr2 & 0x01); - int sizex = sprite_size[(attr1 & 0xc0) >> 6]; - int sizey = sprite_size[(attr2 & 0x06) >> 1]; - int tx = (attr1 & 0x18) & (~(sizex-1)); - int ty = (attr2 & 0x18) & (~(sizey-1)); + const u16 sizex = sprite_size[(attr1 & 0xc0) >> 6]; + const u16 sizey = sprite_size[(attr2 & 0x06) >> 1]; + const u16 tx = (attr1 & 0x18) & (~(sizex - 1)); + const u16 ty = (attr2 & 0x18) & (~(sizey - 1)); int sx = source[13] + ((color & 0x01) << 8); int sy = -source[15] - sizey; - int sprite = source[11]; - int sprite_bank = attr1 & 7; - int priority = (source[14] & 0xe0) >> 5; - int pri_mask = (0xff << (priority + 1)) & 0xff; + u32 sprite = source[11]; + const u32 sprite_bank = attr1 & 7; + const int priority = (source[14] & 0xe0) >> 5; + const u8 pri_mask = (0xff << (priority + 1)) & 0xff; sprite += sprite_bank * 256; color = color >> 1; @@ -205,7 +205,7 @@ void namcos1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co -uint32_t namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int i; rectangle new_clip = cliprect; @@ -252,16 +252,15 @@ WRITE_LINE_MEMBER(namcos1_state::screen_vblank) { if (m_copy_sprites) { - uint8_t *spriteram = m_spriteram + 0x800; - int i,j; + u8 *spriteram = m_spriteram + 0x800; - for (i = 0;i < 0x800;i += 16) + for (int i = 0; i < 0x800; i += 16) { - for (j = 10;j < 16;j++) - spriteram[i+j] = spriteram[i+j - 6]; + for (int j = 10; j < 16; j++) + spriteram[i + j] = spriteram[i + j - 6]; } - m_copy_sprites = 0; + m_copy_sprites = false; } m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); diff --git a/src/mame/video/nova2001.cpp b/src/mame/video/nova2001.cpp index 748dff44a36..4345133c3e4 100644 --- a/src/mame/video/nova2001.cpp +++ b/src/mame/video/nova2001.cpp @@ -47,18 +47,18 @@ rgb_t nova2001_state::BBGGRRII(u32 raw) WRITE8_MEMBER(nova2001_state::paletteram_w) { - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); // expand the sprite palette to full length if (offset < 16) { - m_palette->write8(space, 0x200 + offset * 16 + 1, data); + m_palette->write8(0x200 + offset * 16 + 1, data); if (offset != 1) { for (int i = 0; i < 16; i++) { - m_palette->write8(space, 0x200 + offset + i * 16, data); + m_palette->write8(0x200 + offset + i * 16, data); } } } diff --git a/src/mame/video/nycaptor.cpp b/src/mame/video/nycaptor.cpp index 5ac593f439c..ae519916d0f 100644 --- a/src/mame/video/nycaptor.cpp +++ b/src/mame/video/nycaptor.cpp @@ -86,9 +86,9 @@ WRITE8_MEMBER(nycaptor_state::nycaptor_videoram_w) WRITE8_MEMBER(nycaptor_state::nycaptor_palette_w) { if (offset & 0x100) - m_palette->write8_ext(space, (offset & 0xff) + (m_palette_bank << 8), data); + m_palette->write8_ext((offset & 0xff) + (m_palette_bank << 8), data); else - m_palette->write8(space, (offset & 0xff) + (m_palette_bank << 8), data); + m_palette->write8((offset & 0xff) + (m_palette_bank << 8), data); } READ8_MEMBER(nycaptor_state::nycaptor_palette_r) diff --git a/src/mame/video/oneshot.cpp b/src/mame/video/oneshot.cpp index b1a0a7f212a..76646953b82 100644 --- a/src/mame/video/oneshot.cpp +++ b/src/mame/video/oneshot.cpp @@ -7,28 +7,28 @@ /* bg tilemap */ -TILE_GET_INFO_MEMBER(oneshot_state::get_oneshot_bg_tile_info) +TILE_GET_INFO_MEMBER(oneshot_state::get_bg_tile_info) { - int tileno = m_bg_videoram[tile_index * 2 + 1]; + const u32 tileno = m_bg_videoram[tile_index * 2 + 1]; SET_TILE_INFO_MEMBER(0, tileno, 0, 0); } -WRITE16_MEMBER(oneshot_state::oneshot_bg_videoram_w) +void oneshot_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_bg_videoram[offset]); m_bg_tilemap->mark_tile_dirty(offset / 2); } /* mid tilemap */ -TILE_GET_INFO_MEMBER(oneshot_state::get_oneshot_mid_tile_info) +TILE_GET_INFO_MEMBER(oneshot_state::get_mid_tile_info) { - int tileno = m_mid_videoram[tile_index * 2 + 1]; + const u32 tileno = m_mid_videoram[tile_index * 2 + 1]; SET_TILE_INFO_MEMBER(0, tileno, 2, 0); } -WRITE16_MEMBER(oneshot_state::oneshot_mid_videoram_w) +void oneshot_state::mid_videoram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_mid_videoram[offset]); m_mid_tilemap->mark_tile_dirty(offset / 2); @@ -36,14 +36,14 @@ WRITE16_MEMBER(oneshot_state::oneshot_mid_videoram_w) /* fg tilemap */ -TILE_GET_INFO_MEMBER(oneshot_state::get_oneshot_fg_tile_info) +TILE_GET_INFO_MEMBER(oneshot_state::get_fg_tile_info) { - int tileno = m_fg_videoram[tile_index * 2 + 1]; + const u32 tileno = m_fg_videoram[tile_index * 2 + 1]; SET_TILE_INFO_MEMBER(0, tileno, 3, 0); } -WRITE16_MEMBER(oneshot_state::oneshot_fg_videoram_w) +void oneshot_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_fg_videoram[offset]); m_fg_tilemap->mark_tile_dirty(offset / 2); @@ -51,22 +51,22 @@ WRITE16_MEMBER(oneshot_state::oneshot_fg_videoram_w) void oneshot_state::video_start() { - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_oneshot_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); - m_mid_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_oneshot_mid_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_oneshot_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_mid_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_mid_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(oneshot_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_bg_tilemap->set_transparent_pen(0); m_mid_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0); } -void oneshot_state::draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &cliprect ) +void oneshot_state::draw_crosshairs() { //int xpos,ypos; /* get gun raw coordinates (player 1) */ - m_gun_x_p1 = (ioport("LIGHT0_X")->read() & 0xff) * 320 / 256; - m_gun_y_p1 = (ioport("LIGHT0_Y")->read() & 0xff) * 240 / 256; + m_gun_x_p1 = (m_io_lightgun_x[0]->read() & 0xff) * 320 / 256; + m_gun_y_p1 = (m_io_lightgun_y[0]->read() & 0xff) * 240 / 256; /* compute the coordinates for drawing (from routine at 0x009ab0) */ //xpos = m_gun_x_p1; @@ -80,8 +80,8 @@ void oneshot_state::draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &clip /* get gun raw coordinates (player 2) */ - m_gun_x_p2 = (ioport("LIGHT1_X")->read() & 0xff) * 320 / 256; - m_gun_y_p2 = (ioport("LIGHT1_Y")->read() & 0xff) * 240 / 256; + m_gun_x_p2 = (m_io_lightgun_x[1]->read() & 0xff) * 320 / 256; + m_gun_y_p2 = (m_io_lightgun_y[1]->read() & 0xff) * 240 / 256; /* compute the coordinates for drawing (from routine at 0x009b6e) */ //xpos = m_gun_x_p2; @@ -92,37 +92,41 @@ void oneshot_state::draw_crosshairs( bitmap_ind16 &bitmap, const rectangle &clip m_gun_x_p2 = 0; } -void oneshot_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) +void oneshot_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) { - const uint16_t *source = m_sprites; - const uint16_t *finish = source + (0x1000 / 2); + const u16 *source = m_spriteram; + const u16 *finish = source + (0x1000 / 2); gfx_element *gfx = m_gfxdecode->gfx(1); - int xpos, ypos; - while (source < finish) { - int blockx, blocky; - int num = source[1] & 0xffff; - int xsize = (source[2] & 0x000f) + 1; - int ysize = (source[3] & 0x000f) + 1; + const u16 attr = source[0]; - ypos = source[3] & 0xff80; - xpos = source[2] & 0xff80; + if (attr & 0x0001) // end of sprites + break; - ypos = ypos >> 7; - xpos = xpos >> 7; + if (!(attr & 0x8000)) // visible bit + { + source += 0x4; + continue; + } + const u32 num = source[1] & 0xffff; + const int xsize = (source[2] & 0x000f) + 1; + const int ysize = (source[3] & 0x000f) + 1; - if (source[0] == 0x0001) - break; + int ypos = source[3] & 0xff80; + int xpos = source[2] & 0xff80; + + ypos = ypos >> 7; + xpos = xpos >> 7; xpos -= 8; ypos -= 6; - for (blockx = 0; blockx < xsize; blockx++) + for (int blockx = 0; blockx < xsize; blockx++) { - for (blocky = 0; blocky < ysize; blocky++) + for (int blocky = 0; blocky < ysize; blocky++) { gfx->transpen( bitmap, @@ -132,7 +136,6 @@ void oneshot_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec 0,0, xpos + blockx * 8, ypos + blocky * 8, 0); - gfx->transpen( bitmap, cliprect, @@ -144,10 +147,9 @@ void oneshot_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec } source += 0x4; } - } -uint32_t oneshot_state::screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 oneshot_state::screen_update_oneshot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->black_pen(), cliprect); @@ -158,11 +160,11 @@ uint32_t oneshot_state::screen_update_oneshot(screen_device &screen, bitmap_ind1 m_mid_tilemap->draw(screen, bitmap, cliprect, 0, 0); draw_sprites(bitmap, cliprect); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - draw_crosshairs(bitmap, cliprect); + draw_crosshairs(); return 0; } -uint32_t oneshot_state::screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 oneshot_state::screen_update_maddonna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->black_pen(), cliprect); @@ -176,3 +178,19 @@ uint32_t oneshot_state::screen_update_maddonna(screen_device &screen, bitmap_ind // popmessage ("%04x %04x %04x %04x %04x %04x %04x %04x", m_scroll[0], m_scroll[1], m_scroll[2], m_scroll[3], m_scroll[4], m_scroll[5], m_scroll[6], m_scroll[7]); return 0; } + +// why are the layers in a different order? +u32 oneshot_state::screen_update_komocomo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(m_palette->black_pen(), cliprect); + + m_mid_tilemap->set_scrolly(0, m_scroll[1]); // other registers aren't used so we don't know which layers they relate to + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_mid_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + +// popmessage ("%04x %04x %04x %04x %04x %04x %04x %04x", m_scroll[0], m_scroll[1], m_scroll[2], m_scroll[3], m_scroll[4], m_scroll[5], m_scroll[6], m_scroll[7]); + return 0; +} diff --git a/src/mame/video/psikyosh.cpp b/src/mame/video/psikyosh.cpp index 7c8d5d39636..a0f87ca5676 100644 --- a/src/mame/video/psikyosh.cpp +++ b/src/mame/video/psikyosh.cpp @@ -2,7 +2,7 @@ // copyright-holders:David Haywood, Paul Priest /* Psikyo PS6406B (PS3v1/PS5/PS5v2): -See src/drivers/psikyosh.c for more info +See src/mame/drivers/psikyosh.cpp for more info Hardware is extremely flexible (and luckily underused, although we now have a relatively complete implementation :). Many effects are subtle (e.g. fades, scanline effects). diff --git a/src/mame/video/seta2.cpp b/src/mame/video/seta2.cpp index 8114ec08b43..d1aaef6758b 100644 --- a/src/mame/video/seta2.cpp +++ b/src/mame/video/seta2.cpp @@ -621,11 +621,12 @@ void seta2_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) TIMER_CALLBACK_MEMBER(seta2_state::raster_timer_done) { - if (m_tmp68301) + auto *tmp68301 = dynamic_cast<tmp68301_device *>(m_maincpu.target()); + if (tmp68301) { if (m_rasterenabled & 1) { - m_tmp68301->external_interrupt_1(); + tmp68301->external_interrupt_1(); logerror("external int (vpos is %d)\n", m_screen->vpos()); m_screen->update_partial(m_screen->vpos() - 1); } diff --git a/src/mame/video/system1.cpp b/src/mame/video/system1.cpp index d6c3e0a3bdc..745bd7148da 100644 --- a/src/mame/video/system1.cpp +++ b/src/mame/video/system1.cpp @@ -340,7 +340,7 @@ WRITE8_MEMBER(system1_state::system1_paletteram_w) } else { - m_palette->write8(space, offset, data); + m_palette->write8(offset, data); } } diff --git a/src/mame/video/toaplan1.cpp b/src/mame/video/toaplan1.cpp index 4ef0d39aed4..7a1e58c029d 100644 --- a/src/mame/video/toaplan1.cpp +++ b/src/mame/video/toaplan1.cpp @@ -137,67 +137,20 @@ Abnormalities: ***************************************************************************/ -TILE_GET_INFO_MEMBER(toaplan1_state::get_pf1_tile_info) +template<unsigned Layer> +TILE_GET_INFO_MEMBER(toaplan1_state::get_tile_info) { int color, tile_number, attrib; - tile_number = m_pf1_tilevram16[2*tile_index+1] & 0x7fff; - attrib = m_pf1_tilevram16[2*tile_index]; + tile_number = m_tilevram[Layer][2 * tile_index + 1] & 0x7fff; + attrib = m_tilevram[Layer][2 * tile_index]; color = attrib & 0x3f; SET_TILE_INFO_MEMBER(0, tile_number, color, 0); // "disabled" tiles are behind everything else - if (m_pf1_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16; - else tileinfo.category = (attrib & 0xf000) >> 12; -} - -TILE_GET_INFO_MEMBER(toaplan1_state::get_pf2_tile_info) -{ - int color, tile_number, attrib; - - tile_number = m_pf2_tilevram16[2*tile_index+1] & 0x7fff; - attrib = m_pf2_tilevram16[2*tile_index]; - color = attrib & 0x3f; - SET_TILE_INFO_MEMBER(0, - tile_number, - color, - 0); - // "disabled" tiles are behind everything else - if (m_pf2_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16; - else tileinfo.category = (attrib & 0xf000) >> 12; -} - -TILE_GET_INFO_MEMBER(toaplan1_state::get_pf3_tile_info) -{ - int color, tile_number, attrib; - - tile_number = m_pf3_tilevram16[2*tile_index+1] & 0x7fff; - attrib = m_pf3_tilevram16[2*tile_index]; - color = attrib & 0x3f; - SET_TILE_INFO_MEMBER(0, - tile_number, - color, - 0); - // "disabled" tiles are behind everything else - if (m_pf3_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16; - else tileinfo.category = (attrib & 0xf000) >> 12; -} - -TILE_GET_INFO_MEMBER(toaplan1_state::get_pf4_tile_info) -{ - int color, tile_number, attrib; - - tile_number = m_pf4_tilevram16[2*tile_index+1] & 0x7fff; - attrib = m_pf4_tilevram16[2*tile_index]; - color = attrib & 0x3f; - SET_TILE_INFO_MEMBER(0, - tile_number, - color, - 0); - // "disabled" tiles are behind everything else - if (m_pf4_tilevram16[2*tile_index+1] & 0x8000) tileinfo.category = 16; + if (m_tilevram[Layer][2 * tile_index + 1] & 0x8000) tileinfo.category = 16; else tileinfo.category = (attrib & 0xf000) >> 12; } @@ -207,62 +160,55 @@ TILE_GET_INFO_MEMBER(toaplan1_state::get_pf4_tile_info) ***************************************************************************/ -void toaplan1_state::toaplan1_create_tilemaps() +void toaplan1_state::create_tilemaps() { - m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf1_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - m_pf2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf2_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - m_pf3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf3_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - m_pf4_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_pf4_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<0>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<1>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); + m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<2>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); + m_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(toaplan1_state::get_tile_info<3>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - m_pf1_tilemap->set_transparent_pen(0); - m_pf2_tilemap->set_transparent_pen(0); - m_pf3_tilemap->set_transparent_pen(0); - m_pf4_tilemap->set_transparent_pen(0); + m_tilemap[0]->set_transparent_pen(0); + m_tilemap[1]->set_transparent_pen(0); + m_tilemap[2]->set_transparent_pen(0); + m_tilemap[3]->set_transparent_pen(0); } -void toaplan1_state::toaplan1_vram_alloc() +void toaplan1_state::vram_alloc() { - m_pf1_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2); - m_pf2_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2); - m_pf3_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2); - m_pf4_tilevram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_TILEVRAM_SIZE/2); - - save_pointer(NAME(m_pf1_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2); - save_pointer(NAME(m_pf2_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2); - save_pointer(NAME(m_pf3_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2); - save_pointer(NAME(m_pf4_tilevram16), TOAPLAN1_TILEVRAM_SIZE/2); + for (int i = 0; i < 4; i++) + { + m_tilevram[i] = make_unique_clear<u16[]>(TOAPLAN1_TILEVRAM_SIZE / 2); + save_pointer(NAME(m_tilevram[i]), TOAPLAN1_TILEVRAM_SIZE / 2, i); + } #ifdef MAME_DEBUG - m_display_pf1 = 1; - m_display_pf2 = 1; - m_display_pf3 = 1; - m_display_pf4 = 1; + m_display_pf[0] = 1; + m_display_pf[1] = 1; + m_display_pf[2] = 1; + m_display_pf[3] = 1; m_displog = 0; #endif } -void toaplan1_state::toaplan1_spritevram_alloc() +void toaplan1_state::spritevram_alloc() { - m_spriteram.allocate(TOAPLAN1_SPRITERAM_SIZE/2); - m_buffered_spriteram = make_unique_clear<uint16_t[]>(TOAPLAN1_SPRITERAM_SIZE/2); - m_spritesizeram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_SPRITESIZERAM_SIZE/2); - m_buffered_spritesizeram16 = make_unique_clear<uint16_t[]>(TOAPLAN1_SPRITESIZERAM_SIZE/2); + m_spriteram.allocate(TOAPLAN1_SPRITERAM_SIZE / 2); + m_buffered_spriteram = make_unique_clear<u16[]>(TOAPLAN1_SPRITERAM_SIZE / 2); + m_spritesizeram = make_unique_clear<u16[]>(TOAPLAN1_SPRITESIZERAM_SIZE / 2); + m_buffered_spritesizeram = make_unique_clear<u16[]>(TOAPLAN1_SPRITESIZERAM_SIZE / 2); - save_pointer(NAME(m_buffered_spriteram), TOAPLAN1_SPRITERAM_SIZE/2); - save_pointer(NAME(m_spritesizeram16), TOAPLAN1_SPRITESIZERAM_SIZE/2); - save_pointer(NAME(m_buffered_spritesizeram16), TOAPLAN1_SPRITESIZERAM_SIZE/2); + save_pointer(NAME(m_buffered_spriteram), TOAPLAN1_SPRITERAM_SIZE / 2); + save_pointer(NAME(m_spritesizeram), TOAPLAN1_SPRITESIZERAM_SIZE / 2); + save_pointer(NAME(m_buffered_spritesizeram), TOAPLAN1_SPRITESIZERAM_SIZE / 2); } -void toaplan1_state::toaplan1_set_scrolls() +void toaplan1_state::set_scrolls() { - m_pf1_tilemap->set_scrollx(0, (m_pf1_scrollx >> 7) - m_tiles_offsetx); - m_pf2_tilemap->set_scrollx(0, (m_pf2_scrollx >> 7) - m_tiles_offsetx); - m_pf3_tilemap->set_scrollx(0, (m_pf3_scrollx >> 7) - m_tiles_offsetx); - m_pf4_tilemap->set_scrollx(0, (m_pf4_scrollx >> 7) - m_tiles_offsetx); - m_pf1_tilemap->set_scrolly(0, (m_pf1_scrolly >> 7) - m_tiles_offsety); - m_pf2_tilemap->set_scrolly(0, (m_pf2_scrolly >> 7) - m_tiles_offsety); - m_pf3_tilemap->set_scrolly(0, (m_pf3_scrolly >> 7) - m_tiles_offsety); - m_pf4_tilemap->set_scrolly(0, (m_pf4_scrolly >> 7) - m_tiles_offsety); + for (int i = 0; i < 4; i++) + { + m_tilemap[i]->set_scrollx(0, (m_scrollx[i] >> 7) - m_tiles_offsetx); + m_tilemap[i]->set_scrolly(0, (m_scrolly[i] >> 7) - m_tiles_offsety); + } } void toaplan1_state::register_common() @@ -270,14 +216,8 @@ void toaplan1_state::register_common() save_item(NAME(m_bcu_flipscreen)); save_item(NAME(m_fcu_flipscreen)); - save_item(NAME(m_pf1_scrollx)); - save_item(NAME(m_pf1_scrolly)); - save_item(NAME(m_pf2_scrollx)); - save_item(NAME(m_pf2_scrolly)); - save_item(NAME(m_pf3_scrollx)); - save_item(NAME(m_pf3_scrolly)); - save_item(NAME(m_pf4_scrollx)); - save_item(NAME(m_pf4_scrolly)); + save_item(NAME(m_scrollx)); + save_item(NAME(m_scrolly)); save_item(NAME(m_tiles_offsetx)); save_item(NAME(m_tiles_offsety)); @@ -286,25 +226,25 @@ void toaplan1_state::register_common() } -VIDEO_START_MEMBER(toaplan1_rallybik_state,rallybik) +void toaplan1_rallybik_state::video_start() { m_spritegen->alloc_sprite_bitmap(*m_screen); m_spritegen->gfx(0)->set_colorbase(64*16); - toaplan1_create_tilemaps(); - toaplan1_vram_alloc(); + create_tilemaps(); + vram_alloc(); - m_buffered_spriteram = make_unique_clear<uint16_t[]>(m_spriteram.bytes()/2); - save_pointer(NAME(m_buffered_spriteram), m_spriteram.bytes()/2); + m_buffered_spriteram = make_unique_clear<u16[]>(m_spriteram.bytes() / 2); + save_pointer(NAME(m_buffered_spriteram), m_spriteram.bytes() / 2); - m_pf1_tilemap->set_scrolldx(-0x00d-6, -0x80+6); - m_pf2_tilemap->set_scrolldx(-0x00d-4, -0x80+4); - m_pf3_tilemap->set_scrolldx(-0x00d-2, -0x80+2); - m_pf4_tilemap->set_scrolldx(-0x00d-0, -0x80+0); - m_pf1_tilemap->set_scrolldy(-0x111, 0x8); - m_pf2_tilemap->set_scrolldy(-0x111, 0x8); - m_pf3_tilemap->set_scrolldy(-0x111, 0x8); - m_pf4_tilemap->set_scrolldy(-0x111, 0x8); + m_tilemap[0]->set_scrolldx(-0x00d - 6, -0x80 + 6); + m_tilemap[1]->set_scrolldx(-0x00d - 4, -0x80 + 4); + m_tilemap[2]->set_scrolldx(-0x00d - 2, -0x80 + 2); + m_tilemap[3]->set_scrolldx(-0x00d - 0, -0x80 + 0); + m_tilemap[0]->set_scrolldy(-0x111, 0x8); + m_tilemap[1]->set_scrolldy(-0x111, 0x8); + m_tilemap[2]->set_scrolldy(-0x111, 0x8); + m_tilemap[3]->set_scrolldy(-0x111, 0x8); m_bcu_flipscreen = -1; m_fcu_flipscreen = 0; @@ -312,20 +252,20 @@ VIDEO_START_MEMBER(toaplan1_rallybik_state,rallybik) register_common(); } -VIDEO_START_MEMBER(toaplan1_state,toaplan1) +void toaplan1_state::video_start() { - toaplan1_create_tilemaps(); - toaplan1_vram_alloc(); - toaplan1_spritevram_alloc(); + create_tilemaps(); + vram_alloc(); + spritevram_alloc(); - m_pf1_tilemap->set_scrolldx(-0x1ef-6, -0x11+6); - m_pf2_tilemap->set_scrolldx(-0x1ef-4, -0x11+4); - m_pf3_tilemap->set_scrolldx(-0x1ef-2, -0x11+2); - m_pf4_tilemap->set_scrolldx(-0x1ef-0, -0x11+0); - m_pf1_tilemap->set_scrolldy(-0x101, -0xff); - m_pf2_tilemap->set_scrolldy(-0x101, -0xff); - m_pf3_tilemap->set_scrolldy(-0x101, -0xff); - m_pf4_tilemap->set_scrolldy(-0x101, -0xff); + m_tilemap[0]->set_scrolldx(-0x1ef - 6, -0x11 + 6); + m_tilemap[1]->set_scrolldx(-0x1ef - 4, -0x11 + 4); + m_tilemap[2]->set_scrolldx(-0x1ef - 2, -0x11 + 2); + m_tilemap[3]->set_scrolldx(-0x1ef - 0, -0x11 + 0); + m_tilemap[0]->set_scrolldy(-0x101, -0xff); + m_tilemap[1]->set_scrolldy(-0x101, -0xff); + m_tilemap[2]->set_scrolldy(-0x101, -0xff); + m_tilemap[3]->set_scrolldy(-0x101, -0xff); m_bcu_flipscreen = -1; m_fcu_flipscreen = 0; @@ -340,14 +280,14 @@ VIDEO_START_MEMBER(toaplan1_state,toaplan1) ***************************************************************************/ -READ16_MEMBER(toaplan1_state::toaplan1_frame_done_r) +u16 toaplan1_state::frame_done_r() { return m_screen->vblank(); } -WRITE16_MEMBER(toaplan1_state::toaplan1_tile_offsets_w) +WRITE16_MEMBER(toaplan1_state::tile_offsets_w) { - if ( offset == 0 ) + if (offset == 0) { COMBINE_DATA(&m_tiles_offsetx); logerror("Tiles_offsetx now = %08x\n", m_tiles_offsetx); @@ -357,49 +297,46 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_tile_offsets_w) COMBINE_DATA(&m_tiles_offsety); logerror("Tiles_offsety now = %08x\n", m_tiles_offsety); } - toaplan1_set_scrolls(); + set_scrolls(); } -WRITE16_MEMBER(toaplan1_state::toaplan1_bcu_flipscreen_w) +void toaplan1_state::bcu_flipscreen_w(u8 data) { - if (ACCESSING_BITS_0_7 && (data != m_bcu_flipscreen)) + if (data != m_bcu_flipscreen) { - logerror("Setting BCU controller flipscreen port to %04x\n",data); + logerror("Setting BCU controller flipscreen port to %02x\n",data); m_bcu_flipscreen = data & 0x01; /* 0x0001 = flip, 0x0000 = no flip */ machine().tilemap().set_flip_all((data ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0)); - toaplan1_set_scrolls(); + set_scrolls(); } } -WRITE16_MEMBER(toaplan1_state::toaplan1_fcu_flipscreen_w) +void toaplan1_state::fcu_flipscreen_w(u8 data) { - if (ACCESSING_BITS_8_15) - { - logerror("Setting FCU controller flipscreen port to %04x\n",data); - m_fcu_flipscreen = data & 0x8000; /* 0x8000 = flip, 0x0000 = no flip */ - } + logerror("Setting FCU controller flipscreen port to %02x\n",data); + m_fcu_flipscreen = data & 0x80; /* 0x80 = flip, 0x00 = no flip */ } -READ16_MEMBER(toaplan1_state::toaplan1_spriteram_offs_r)/// this aint really needed ? +u16 toaplan1_state::spriteram_offs_r() // this aint really needed ? { return m_spriteram_offs; } -WRITE16_MEMBER(toaplan1_state::toaplan1_spriteram_offs_w) +void toaplan1_state::spriteram_offs_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_spriteram_offs); } -WRITE16_MEMBER(toaplan1_state::toaplan1_bgpalette_w) +void toaplan1_state::bgpalette_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_bgpaletteram[offset]); data = m_bgpaletteram[offset]; m_palette->set_pen_color(offset, pal5bit(data>>0), pal5bit(data>>5), pal5bit(data>>10)); } -WRITE16_MEMBER(toaplan1_state::toaplan1_fgpalette_w) +void toaplan1_state::fgpalette_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_fgpaletteram[offset]); data = m_fgpaletteram[offset]; @@ -407,17 +344,17 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_fgpalette_w) } -READ16_MEMBER(toaplan1_state::toaplan1_spriteram16_r) +u16 toaplan1_state::spriteram_r() { - return m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE/2)-1)]; + return m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2)-1)]; } -WRITE16_MEMBER(toaplan1_state::toaplan1_spriteram16_w) +void toaplan1_state::spriteram_w(offs_t offset, u16 data, u16 mem_mask) { - COMBINE_DATA(&m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE/2)-1)]); + COMBINE_DATA(&m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2)-1)]); #ifdef MAME_DEBUG - if (m_spriteram_offs >= (TOAPLAN1_SPRITERAM_SIZE/2)) + if (m_spriteram_offs >= (TOAPLAN1_SPRITERAM_SIZE / 2)) { logerror("Sprite_RAM_word_w, %08x out of range !\n", m_spriteram_offs); return; @@ -427,17 +364,17 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_spriteram16_w) m_spriteram_offs++; } -READ16_MEMBER(toaplan1_state::toaplan1_spritesizeram16_r) +u16 toaplan1_state::spritesizeram_r() { - return m_spritesizeram16[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE/2)-1)]; + return m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2)-1)]; } -WRITE16_MEMBER(toaplan1_state::toaplan1_spritesizeram16_w) +void toaplan1_state::spritesizeram_w(offs_t offset, u16 data, u16 mem_mask) { - COMBINE_DATA(&m_spritesizeram16[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE/2)-1)]); + COMBINE_DATA(&m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2)-1)]); #ifdef MAME_DEBUG - if (m_spriteram_offs >= (TOAPLAN1_SPRITESIZERAM_SIZE/2)) + if (m_spriteram_offs >= (TOAPLAN1_SPRITESIZERAM_SIZE / 2)) { logerror("Sprite_Size_RAM_word_w, %08x out of range !\n", m_spriteram_offs); return; @@ -449,17 +386,17 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_spritesizeram16_w) -WRITE16_MEMBER(toaplan1_state::toaplan1_bcu_control_w) +void toaplan1_state::bcu_control_w(offs_t offset, u16 data) { logerror("BCU tile controller register:%02x now = %04x\n",offset,data); } -READ16_MEMBER(toaplan1_state::toaplan1_tileram_offs_r) +u16 toaplan1_state::tileram_offs_r() { return m_pf_voffs; } -WRITE16_MEMBER(toaplan1_state::toaplan1_tileram_offs_w) +void toaplan1_state::tileram_offs_w(offs_t offset, u16 data, u16 mem_mask) { if (data >= 0x4000) logerror("Hmmm, unknown video layer being selected (%08x)\n",data); @@ -467,28 +404,21 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_tileram_offs_w) } -READ16_MEMBER(toaplan1_state::toaplan1_tileram16_r) +u16 toaplan1_state::tileram_r(offs_t offset) { + const int layer = m_pf_voffs >> 12; + const int offs = m_pf_voffs & 0xfff; offs_t vram_offset; - uint16_t video_data = 0; + u16 video_data = 0; - switch (m_pf_voffs & 0xf000) /* Locate Layer (PlayField) */ + switch (layer) /* Locate Layer (PlayField) */ { - case 0x0000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - video_data = m_pf1_tilevram16[vram_offset]; - break; - case 0x1000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - video_data = m_pf2_tilevram16[vram_offset]; - break; - case 0x2000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - video_data = m_pf3_tilevram16[vram_offset]; - break; - case 0x3000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - video_data = m_pf4_tilevram16[vram_offset]; + case 0x0: + case 0x1: + case 0x2: + case 0x3: + vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2)-1); + video_data = m_tilevram[layer][vram_offset]; break; default: logerror("Hmmm, reading %04x from unknown playfield layer address %06x Offset:%01x !!!\n", video_data, m_pf_voffs, offset); @@ -498,9 +428,9 @@ READ16_MEMBER(toaplan1_state::toaplan1_tileram16_r) return video_data; } -READ16_MEMBER(toaplan1_rallybik_state::rallybik_tileram16_r) +u16 toaplan1_rallybik_state::tileram_r(offs_t offset) { - uint16_t data = toaplan1_tileram16_r(space, offset, mem_mask); + u16 data = toaplan1_state::tileram_r(offset); if (offset == 0) /* some bit lines may be stuck to others */ { @@ -510,31 +440,21 @@ READ16_MEMBER(toaplan1_rallybik_state::rallybik_tileram16_r) return data; } -WRITE16_MEMBER(toaplan1_state::toaplan1_tileram16_w) +void toaplan1_state::tileram_w(offs_t offset, u16 data, u16 mem_mask) { + const int layer = m_pf_voffs >> 12; + const int offs = m_pf_voffs & 0xfff; offs_t vram_offset; - switch (m_pf_voffs & 0xf000) /* Locate Layer (PlayField) */ + switch (layer) /* Locate Layer (PlayField) */ { - case 0x0000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - COMBINE_DATA(&m_pf1_tilevram16[vram_offset]); - m_pf1_tilemap->mark_tile_dirty(vram_offset/2); - break; - case 0x1000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - COMBINE_DATA(&m_pf2_tilevram16[vram_offset]); - m_pf2_tilemap->mark_tile_dirty(vram_offset/2); - break; - case 0x2000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - COMBINE_DATA(&m_pf3_tilevram16[vram_offset]); - m_pf3_tilemap->mark_tile_dirty(vram_offset/2); - break; - case 0x3000: - vram_offset = ((m_pf_voffs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE/2)-1); - COMBINE_DATA(&m_pf4_tilevram16[vram_offset]); - m_pf4_tilemap->mark_tile_dirty(vram_offset/2); + case 0x0: + case 0x1: + case 0x2: + case 0x3: + vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2)-1); + COMBINE_DATA(&m_tilevram[layer][vram_offset]); + m_tilemap[layer]->mark_tile_dirty(vram_offset / 2); break; default: logerror("Hmmm, writing %04x to unknown playfield layer address %06x Offset:%01x\n", data, m_pf_voffs, offset); @@ -544,56 +464,48 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_tileram16_w) -READ16_MEMBER(toaplan1_state::toaplan1_scroll_regs_r) +u16 toaplan1_state::scroll_regs_r(offs_t offset) { - uint16_t scroll = 0; + const int layer = (offset >> 1); + u16 scroll = 0; - switch(offset) + switch (offset) { - case 00: scroll = m_pf1_scrollx; break; - case 01: scroll = m_pf1_scrolly; break; - case 02: scroll = m_pf2_scrollx; break; - case 03: scroll = m_pf2_scrolly; break; - case 04: scroll = m_pf3_scrollx; break; - case 05: scroll = m_pf3_scrolly; break; - case 06: scroll = m_pf4_scrollx; break; - case 07: scroll = m_pf4_scrolly; break; - default: logerror("Hmmm, reading unknown video scroll register (%08x) !!!\n",offset); + case 00: + case 02: + case 04: + case 06: scroll = m_scrollx[layer]; break; + case 01: + case 03: + case 05: + case 07: scroll = m_scrolly[layer]; break; + default: logerror("Hmmm, reading unknown video scroll register (%02x) !!!\n",offset); break; } return scroll; } -WRITE16_MEMBER(toaplan1_state::toaplan1_scroll_regs_w) +void toaplan1_state::scroll_regs_w(offs_t offset, u16 data, u16 mem_mask) { - switch(offset) + const int layer = (offset >> 1); + switch (offset) { - case 00: COMBINE_DATA(&m_pf1_scrollx); /* 1D3h */ - m_pf1_tilemap->set_scrollx(0, (m_pf1_scrollx >> 7) - m_tiles_offsetx); - break; - case 01: COMBINE_DATA(&m_pf1_scrolly); /* 1EBh */ - m_pf1_tilemap->set_scrolly(0, (m_pf1_scrolly >> 7) - m_tiles_offsety); - break; - case 02: COMBINE_DATA(&m_pf2_scrollx); /* 1D5h */ - m_pf2_tilemap->set_scrollx(0, (m_pf2_scrollx >> 7) - m_tiles_offsetx); + case 00: /* 1D3h */ + case 02: /* 1D5h */ + case 04: /* 1D7h */ + case 06: /* 1D9h */ + COMBINE_DATA(&m_scrollx[layer]); + m_tilemap[layer]->set_scrollx(0, (m_scrollx[layer] >> 7) - m_tiles_offsetx); break; - case 03: COMBINE_DATA(&m_pf2_scrolly); /* 1EBh */ - m_pf2_tilemap->set_scrolly(0, (m_pf2_scrolly >> 7) - m_tiles_offsety); + case 01: /* 1EBh */ + case 03: /* 1EBh */ + case 05: /* 1EBh */ + case 07: /* 1EBh */ + COMBINE_DATA(&m_scrolly[layer]); + m_tilemap[layer]->set_scrolly(0, (m_scrolly[layer] >> 7) - m_tiles_offsety); break; - case 04: COMBINE_DATA(&m_pf3_scrollx); /* 1D7h */ - m_pf3_tilemap->set_scrollx(0, (m_pf3_scrollx >> 7) - m_tiles_offsetx); - break; - case 05: COMBINE_DATA(&m_pf3_scrolly); /* 1EBh */ - m_pf3_tilemap->set_scrolly(0, (m_pf3_scrolly >> 7) - m_tiles_offsety); - break; - case 06: COMBINE_DATA(&m_pf4_scrollx); /* 1D9h */ - m_pf4_tilemap->set_scrollx(0, (m_pf4_scrollx >> 7) - m_tiles_offsetx); - break; - case 07: COMBINE_DATA(&m_pf4_scrolly); /* 1EBh */ - m_pf4_tilemap->set_scrolly(0, (m_pf4_scrolly >> 7) - m_tiles_offsety); - break; - default: logerror("Hmmm, writing %08x to unknown video scroll register (%08x) !!!\n",data ,offset); + default: logerror("Hmmm, writing %04x to unknown video scroll register (%02x) !!!\n",data ,offset); break; } } @@ -601,37 +513,37 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_scroll_regs_w) -void toaplan1_state::toaplan1_log_vram() +void toaplan1_state::log_vram() { #ifdef MAME_DEBUG - if ( machine().input().code_pressed(KEYCODE_M) ) + if (machine().input().code_pressed(KEYCODE_M)) { - uint16_t *spriteram16 = m_spriteram; - uint16_t *buffered_spriteram16 = m_buffered_spriteram.get(); + u16 *spriteram = m_spriteram; + u16 *buffered_spriteram = m_buffered_spriteram.get(); offs_t sprite_voffs; while (machine().input().code_pressed(KEYCODE_M)) ; - if (m_spritesizeram16) /* FCU controller */ + if (m_spritesizeram) /* FCU controller */ { int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos; - uint16_t *size = (uint16_t *)(m_spritesizeram16.get()); - uint16_t *bsize = (uint16_t *)(m_buffered_spritesizeram16.get()); + u16 *size = (u16 *)(m_spritesizeram.get()); + u16 *bsize = (u16 *)(m_buffered_spritesizeram.get()); logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", - m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly); - for ( sprite_voffs = 0; sprite_voffs < m_spriteram.bytes()/2; sprite_voffs += 4 ) + m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]); + for (sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4) { - bschar = buffered_spriteram16[sprite_voffs]; - bsattr = buffered_spriteram16[sprite_voffs + 1]; - bsxpos = buffered_spriteram16[sprite_voffs + 2]; - bsypos = buffered_spriteram16[sprite_voffs + 3]; - schar = spriteram16[sprite_voffs]; - sattr = spriteram16[sprite_voffs + 1]; - sxpos = spriteram16[sprite_voffs + 2]; - sypos = spriteram16[sprite_voffs + 3]; + bschar = buffered_spriteram[sprite_voffs]; + bsattr = buffered_spriteram[sprite_voffs + 1]; + bsxpos = buffered_spriteram[sprite_voffs + 2]; + bsypos = buffered_spriteram[sprite_voffs + 3]; + schar = spriteram[sprite_voffs]; + sattr = spriteram[sprite_voffs + 1]; + sxpos = spriteram[sprite_voffs + 2]; + sypos = spriteram[sprite_voffs + 3]; logerror("$(%04x) Tile-Attr-Xpos-Ypos Now:%04x %04x %04x.%01x %04x.%01x nxt:%04x %04x %04x.%01x %04x.%01x\n", sprite_voffs, - schar, sattr, sxpos, size[( sattr>>6)&0x3f]&0xf, sypos,( size[( sattr>>6)&0x3f]>>4)&0xf, - bschar,bsattr,bsxpos,bsize[(bsattr>>6)&0x3f]&0xf,bsypos,(bsize[(bsattr>>6)&0x3f]>>4)&0xf); + schar, sattr, sxpos, size[( sattr >> 6) & 0x3f] & 0xf, sypos,( size[( sattr >> 6) & 0x3f] >> 4) & 0xf, + bschar,bsattr,bsxpos,bsize[(bsattr >> 6) & 0x3f] & 0xf,bsypos,(bsize[(bsattr >> 6) & 0x3f] >> 4) & 0xf); } } else /* SCU controller */ @@ -639,17 +551,17 @@ void toaplan1_state::toaplan1_log_vram() int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos; logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", - m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly); - for ( sprite_voffs = 0; sprite_voffs < m_spriteram.bytes()/2; sprite_voffs += 4 ) + m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]); + for (sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4) { - bschar = buffered_spriteram16[sprite_voffs]; - bsattr = buffered_spriteram16[sprite_voffs + 1]; - bsypos = buffered_spriteram16[sprite_voffs + 2]; - bsxpos = buffered_spriteram16[sprite_voffs + 3]; - schar = spriteram16[sprite_voffs]; - sattr = spriteram16[sprite_voffs + 1]; - sypos = spriteram16[sprite_voffs + 2]; - sxpos = spriteram16[sprite_voffs + 3]; + bschar = buffered_spriteram[sprite_voffs]; + bsattr = buffered_spriteram[sprite_voffs + 1]; + bsypos = buffered_spriteram[sprite_voffs + 2]; + bsxpos = buffered_spriteram[sprite_voffs + 3]; + schar = spriteram[sprite_voffs]; + sattr = spriteram[sprite_voffs + 1]; + sypos = spriteram[sprite_voffs + 2]; + sxpos = spriteram[sprite_voffs + 3]; logerror("$(%04x) Tile-Attr-Xpos-Ypos Now:%04x %04x %04x %04x nxt:%04x %04x %04x %04x\n", sprite_voffs, schar, sattr, sxpos, sypos, bschar,bsattr,bsxpos, bsypos); @@ -657,59 +569,59 @@ void toaplan1_state::toaplan1_log_vram() } } - if ( machine().input().code_pressed(KEYCODE_SLASH) ) + if (machine().input().code_pressed(KEYCODE_SLASH)) { - uint16_t *size = (uint16_t *)(m_spritesizeram16.get()); - uint16_t *bsize = (uint16_t *)(m_buffered_spritesizeram16.get()); + u16 *size = (u16 *)(m_spritesizeram.get()); + u16 *bsize = (u16 *)(m_buffered_spritesizeram.get()); offs_t offs; while (machine().input().code_pressed(KEYCODE_SLASH)) ; - if (m_spritesizeram16) /* FCU controller */ + if (m_spritesizeram) /* FCU controller */ { logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", - m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly); - for ( offs = 0; offs < (TOAPLAN1_SPRITESIZERAM_SIZE/2); offs +=4 ) + m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]); + for (offs = 0; offs < (TOAPLAN1_SPRITESIZERAM_SIZE / 2); offs += 4) { logerror("SizeOffs:%04x now:%04x %04x %04x %04x next: %04x %04x %04x %04x\n", offs, - bsize[offs+0], bsize[offs+1], - bsize[offs+2], bsize[offs+3], - size[offs+0], size[offs+1], - size[offs+2], size[offs+3]); + bsize[offs + 0], bsize[offs + 1], + bsize[offs + 2], bsize[offs + 3], + size[offs + 0], size[offs + 1], + size[offs + 2], size[offs + 3]); } } } - if ( machine().input().code_pressed(KEYCODE_N) ) + if (machine().input().code_pressed(KEYCODE_N)) { offs_t tile_voffs; - int tchar[5], tattr[5]; + int tchar[4], tattr[4]; while (machine().input().code_pressed(KEYCODE_N)) ; /* BCU controller */ logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", - m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly); - for ( tile_voffs = 0; tile_voffs < (TOAPLAN1_TILEVRAM_SIZE/2); tile_voffs += 2 ) + m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]); + for (tile_voffs = 0; tile_voffs < (TOAPLAN1_TILEVRAM_SIZE / 2); tile_voffs += 2) { - tchar[1] = m_pf1_tilevram16[tile_voffs + 1]; - tattr[1] = m_pf1_tilevram16[tile_voffs]; - tchar[2] = m_pf2_tilevram16[tile_voffs + 1]; - tattr[2] = m_pf2_tilevram16[tile_voffs]; - tchar[3] = m_pf3_tilevram16[tile_voffs + 1]; - tattr[3] = m_pf3_tilevram16[tile_voffs]; - tchar[4] = m_pf4_tilevram16[tile_voffs + 1]; - tattr[4] = m_pf4_tilevram16[tile_voffs]; + tchar[0] = m_tilevram[0][tile_voffs + 1]; + tattr[0] = m_tilevram[0][tile_voffs]; + tchar[1] = m_tilevram[1][tile_voffs + 1]; + tattr[1] = m_tilevram[1][tile_voffs]; + tchar[2] = m_tilevram[2][tile_voffs + 1]; + tattr[2] = m_tilevram[2][tile_voffs]; + tchar[3] = m_tilevram[3][tile_voffs + 1]; + tattr[3] = m_tilevram[3][tile_voffs]; // logerror("PF3 offs:%04x Tile:%04x Attr:%04x\n", tile_voffs, tchar, tattr); logerror("$(%04x) Attr-Tile PF1:%04x-%04x PF2:%04x-%04x PF3:%04x-%04x PF4:%04x-%04x\n", tile_voffs, - tattr[1], tchar[1], tattr[2], tchar[2], - tattr[3], tchar[3], tattr[4], tchar[4]); + tattr[0], tchar[0], tattr[1], tchar[1], + tattr[2], tchar[2], tattr[3], tchar[3]); } } - if ( machine().input().code_pressed(KEYCODE_W) ) + if (machine().input().code_pressed(KEYCODE_W)) { while (machine().input().code_pressed(KEYCODE_W)) ; logerror("Mark here\n"); } - if ( machine().input().code_pressed(KEYCODE_E) ) + if (machine().input().code_pressed(KEYCODE_E)) { while (machine().input().code_pressed(KEYCODE_E)) ; m_displog += 1; @@ -719,35 +631,35 @@ void toaplan1_state::toaplan1_log_vram() { logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", - m_pf1_scrollx, m_pf1_scrolly, m_pf2_scrollx, m_pf2_scrolly, m_pf3_scrollx, m_pf3_scrolly, m_pf4_scrollx, m_pf4_scrolly); + m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]); } - if ( machine().input().code_pressed(KEYCODE_L) ) /* Turn Playfield 4 on/off */ + if (machine().input().code_pressed(KEYCODE_L)) /* Turn Playfield 4 on/off */ { while (machine().input().code_pressed(KEYCODE_L)) ; - m_display_pf4 += 1; - m_display_pf4 &= 1; - m_pf4_tilemap->enable(m_display_pf4); + m_display_pf[3] += 1; + m_display_pf[3] &= 1; + m_tilemap[3]->enable(m_display_pf[3]); } - if ( machine().input().code_pressed(KEYCODE_K) ) /* Turn Playfield 3 on/off */ + if (machine().input().code_pressed(KEYCODE_K)) /* Turn Playfield 3 on/off */ { while (machine().input().code_pressed(KEYCODE_K)) ; - m_display_pf3 += 1; - m_display_pf3 &= 1; - m_pf3_tilemap->enable(m_display_pf3); + m_display_pf[2] += 1; + m_display_pf[2] &= 1; + m_tilemap[2]->enable(m_display_pf[2]); } - if ( machine().input().code_pressed(KEYCODE_J) ) /* Turn Playfield 2 on/off */ + if (machine().input().code_pressed(KEYCODE_J)) /* Turn Playfield 2 on/off */ { while (machine().input().code_pressed(KEYCODE_J)) ; - m_display_pf2 += 1; - m_display_pf2 &= 1; - m_pf2_tilemap->enable(m_display_pf2); + m_display_pf[1] += 1; + m_display_pf[1] &= 1; + m_tilemap[1]->enable(m_display_pf[1]); } - if ( machine().input().code_pressed(KEYCODE_H) ) /* Turn Playfield 1 on/off */ + if (machine().input().code_pressed(KEYCODE_H)) /* Turn Playfield 1 on/off */ { while (machine().input().code_pressed(KEYCODE_H)) ; - m_display_pf1 += 1; - m_display_pf1 &= 1; - m_pf1_tilemap->enable(m_display_pf1); + m_display_pf[0] += 1; + m_display_pf[0] &= 1; + m_tilemap[0]->enable(m_display_pf[0]); } #endif } @@ -759,31 +671,31 @@ void toaplan1_state::toaplan1_log_vram() ***************************************************************************/ // custom function to draw a single sprite. needed to keep correct sprites - sprites and sprites - tilemaps priorities -static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &dest_bmp,const rectangle &clip,gfx_element *gfx, - uint32_t code,uint32_t color,int flipx,int flipy,int sx,int sy, +static void draw_sprite_custom(screen_device &screen, bitmap_ind16 &dest_bmp, const rectangle &clip, gfx_element *gfx, + u32 code, u32 color, int flipx, int flipy, int sx, int sy, int priority) { - int pal_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors()); - const uint8_t *source_base = gfx->get_data(code % gfx->elements()); + const u32 pal_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors()); + const u8 *source_base = gfx->get_data(code % gfx->elements()); bitmap_ind8 &priority_bitmap = screen.priority(); - int sprite_screen_height = ((1<<16)*gfx->height()+0x8000)>>16; - int sprite_screen_width = ((1<<16)*gfx->width()+0x8000)>>16; + const int sprite_screen_height = ((1 << 16) * gfx->height() + 0x8000) >> 16; + const int sprite_screen_width = ((1 << 16) * gfx->width() + 0x8000) >> 16; if (sprite_screen_width && sprite_screen_height) { /* compute sprite increment per screen pixel */ - int dx = (gfx->width()<<16)/sprite_screen_width; - int dy = (gfx->height()<<16)/sprite_screen_height; + int dx = (gfx->width() << 16) / sprite_screen_width; + int dy = (gfx->height() << 16) / sprite_screen_height; - int ex = sx+sprite_screen_width; - int ey = sy+sprite_screen_height; + int ex = sx + sprite_screen_width; + int ey = sy + sprite_screen_height; int x_index_base; int y_index; - if( flipx ) + if (flipx) { - x_index_base = (sprite_screen_width-1)*dx; + x_index_base = (sprite_screen_width - 1) * dx; dx = -dx; } else @@ -791,9 +703,9 @@ static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &des x_index_base = 0; } - if( flipy ) + if (flipy) { - y_index = (sprite_screen_height-1)*dy; + y_index = (sprite_screen_height - 1) * dy; dy = -dy; } else @@ -801,48 +713,46 @@ static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &des y_index = 0; } - if( sx < clip.min_x) + if (sx < clip.min_x) { /* clip left */ - int pixels = clip.min_x-sx; + int pixels = clip.min_x - sx; sx += pixels; - x_index_base += pixels*dx; + x_index_base += pixels * dx; } - if( sy < clip.min_y ) + if (sy < clip.min_y) { /* clip top */ - int pixels = clip.min_y-sy; + int pixels = clip.min_y - sy; sy += pixels; - y_index += pixels*dy; + y_index += pixels * dy; } /* NS 980211 - fixed incorrect clipping */ - if( ex > clip.max_x+1 ) + if (ex > clip.max_x + 1) { /* clip right */ - int pixels = ex-clip.max_x-1; + int pixels = ex-clip.max_x - 1; ex -= pixels; } - if( ey > clip.max_y+1 ) + if (ey > clip.max_y + 1) { /* clip bottom */ - int pixels = ey-clip.max_y-1; + int pixels = ey-clip.max_y - 1; ey -= pixels; } - if( ex>sx ) + if (ex > sx) { /* skip if inner loop doesn't draw anything */ - int y; - - for( y=sy; y<ey; y++ ) + for (int y = sy; y < ey; y++) { - const uint8_t *source = source_base + (y_index>>16) * gfx->rowbytes(); - uint16_t *dest = &dest_bmp.pix16(y); - uint8_t *pri = &priority_bitmap.pix8(y); + const u8 *source = source_base + (y_index >> 16) * gfx->rowbytes(); + u16 *dest = &dest_bmp.pix16(y); + u8 *pri = &priority_bitmap.pix8(y); - int x, x_index = x_index_base; - for( x=sx; x<ex; x++ ) + int x_index = x_index_base; + for (int x = sx; x < ex; x++) { - int c = source[x_index>>16]; - if( c != 0 ) + const u8 c = source[x_index >> 16]; + if (c != 0) { if (pri[x] < priority) - dest[x] = pal_base+c; + dest[x] = pal_base + c; pri[x] = 0xff; // mark it "already drawn" } x_index += dx; @@ -855,35 +765,32 @@ static void toaplan1_draw_sprite_custom(screen_device &screen, bitmap_ind16 &des } -void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) +void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint16_t *source = (uint16_t *)m_buffered_spriteram.get(); - uint16_t *size = (uint16_t *)m_buffered_spritesizeram16.get(); + u16 *source = (u16 *)m_buffered_spriteram.get(); + u16 *size = (u16 *)m_buffered_spritesizeram.get(); int fcu_flipscreen = m_fcu_flipscreen; - int offs; - for (offs = m_spriteram.bytes()/2 - 4; offs >= 0; offs -= 4) + for (int offs = m_spriteram.bytes() / 2 - 4; offs >= 0; offs -= 4) { if (!(source[offs] & 0x8000)) { - int attrib, sprite, color, priority, sx, sy; - int sprite_sizex, sprite_sizey, dim_x, dim_y, sx_base, sy_base; - int sizeram_ptr; + int sx, sy; - attrib = source[offs+1]; - priority = (attrib & 0xf000) >> 12; + const u16 attrib = source[offs + 1]; + const u8 priority = (attrib & 0xf000) >> 12; - sprite = source[offs] & 0x7fff; - color = attrib & 0x3f; + u32 sprite = source[offs] & 0x7fff; + u32 color = attrib & 0x3f; /****** find sprite dimension ******/ - sizeram_ptr = (attrib >> 6) & 0x3f; - sprite_sizex = ( size[sizeram_ptr] & 0x0f) * 8; - sprite_sizey = ((size[sizeram_ptr] >> 4) & 0x0f) * 8; + const u32 sizeram_ptr = (attrib >> 6) & 0x3f; + const u32 sprite_sizex = ( size[sizeram_ptr] & 0x0f) * 8; + const u32 sprite_sizey = ((size[sizeram_ptr] >> 4) & 0x0f) * 8; /****** find position to display sprite ******/ - sx_base = (source[offs + 2] >> 7) & 0x1ff; - sy_base = (source[offs + 3] >> 7) & 0x1ff; + int sx_base = (source[offs + 2] >> 7) & 0x1ff; + int sy_base = (source[offs + 3] >> 7) & 0x1ff; if (sx_base >= 0x180) sx_base -= 0x200; if (sy_base >= 0x180) sy_base -= 0x200; @@ -895,26 +802,26 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c sx_base = visarea.width() - (sx_base + 8); /* visarea.x = 320 */ sy_base = visarea.height() - (sy_base + 8); /* visarea.y = 240 */ - sy_base += ((visarea.max_y + 1) - visarea.height()) * 2; /* Horizontal games are offset so adjust by +0x20 */ + sy_base += ((visarea.max_y + 1) - visarea.height()) * 2; /* Horizontal games are offset so adjust by + 0x20 */ } - for (dim_y = 0; dim_y < sprite_sizey; dim_y += 8) + for (int dim_y = 0; dim_y < sprite_sizey; dim_y += 8) { if (fcu_flipscreen) sy = sy_base - dim_y; else sy = sy_base + dim_y; - for (dim_x = 0; dim_x < sprite_sizex; dim_x += 8) + for (int dim_x = 0; dim_x < sprite_sizex; dim_x += 8) { if (fcu_flipscreen) sx = sx_base - dim_x; else sx = sx_base + dim_x; - toaplan1_draw_sprite_custom(screen,bitmap,cliprect,m_gfxdecode->gfx(1), + draw_sprite_custom(screen,bitmap,cliprect,m_gfxdecode->gfx(1), sprite,color, fcu_flipscreen,fcu_flipscreen, sx,sy, priority); - sprite++ ; + sprite++; } } } @@ -928,24 +835,22 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c Draw the game screen in the given bitmap_ind16. ***************************************************************************/ -uint32_t toaplan1_rallybik_state::screen_update_rallybik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 toaplan1_rallybik_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int priority; - - toaplan1_log_vram(); + log_vram(); m_spritegen->draw_sprites_to_tempbitmap(cliprect, m_buffered_spriteram.get(), m_spriteram.bytes()); // first draw everything, including "disabled" tiles and priority 0 - m_pf1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0); + m_tilemap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0); // then draw the higher priority layers in order - for (priority = 1; priority < 16; priority++) + for (int priority = 1; priority < 16; priority++) { - m_pf4_tilemap->draw(screen, bitmap, cliprect, priority, 0); - m_pf3_tilemap->draw(screen, bitmap, cliprect, priority, 0); - m_pf2_tilemap->draw(screen, bitmap, cliprect, priority, 0); - m_pf1_tilemap->draw(screen, bitmap, cliprect, priority, 0); + m_tilemap[3]->draw(screen, bitmap, cliprect, priority, 0); + m_tilemap[2]->draw(screen, bitmap, cliprect, priority, 0); + m_tilemap[1]->draw(screen, bitmap, cliprect, priority, 0); + m_tilemap[0]->draw(screen, bitmap, cliprect, priority, 0); //if (pririoty==0x00) m_spritegen->copy_sprites_from_tempbitmap(bitmap,cliprect,0); if (priority==0x04) m_spritegen->copy_sprites_from_tempbitmap(bitmap,cliprect,1); @@ -957,24 +862,22 @@ uint32_t toaplan1_rallybik_state::screen_update_rallybik(screen_device &screen, return 0; } -uint32_t toaplan1_state::screen_update_toaplan1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 toaplan1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int priority; - - toaplan1_log_vram(); + log_vram(); screen.priority().fill(0, cliprect); // first draw everything, including "disabled" tiles and priority 0 - m_pf1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0); + m_tilemap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0); // then draw the higher priority layers in order - for (priority = 1; priority < 16; priority++) + for (int priority = 1; priority < 16; priority++) { - m_pf4_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0); - m_pf3_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0); - m_pf2_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0); - m_pf1_tilemap->draw(screen, bitmap, cliprect, priority, priority, 0); + m_tilemap[3]->draw(screen, bitmap, cliprect, priority, priority, 0); + m_tilemap[2]->draw(screen, bitmap, cliprect, priority, priority, 0); + m_tilemap[1]->draw(screen, bitmap, cliprect, priority, priority, 0); + m_tilemap[0]->draw(screen, bitmap, cliprect, priority, priority, 0); } draw_sprites(screen, bitmap, cliprect); @@ -987,35 +890,35 @@ uint32_t toaplan1_state::screen_update_toaplan1(screen_device &screen, bitmap_in assume it happens automatically every frame, at the end of vblank ****************************************************************************/ -WRITE_LINE_MEMBER(toaplan1_rallybik_state::screen_vblank_rallybik) +WRITE_LINE_MEMBER(toaplan1_rallybik_state::screen_vblank) { // rising edge if (state) { memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes()); - toaplan1_interrupt(); + interrupt(); } } -WRITE_LINE_MEMBER(toaplan1_state::screen_vblank_toaplan1) +WRITE_LINE_MEMBER(toaplan1_state::screen_vblank) { // rising edge if (state) { memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes()); - memcpy(m_buffered_spritesizeram16.get(), m_spritesizeram16.get(), TOAPLAN1_SPRITESIZERAM_SIZE); - toaplan1_interrupt(); + memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE); + interrupt(); } } -WRITE_LINE_MEMBER(toaplan1_state::screen_vblank_samesame) +WRITE_LINE_MEMBER(toaplan1_samesame_state::screen_vblank) { // rising edge if (state) { memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes()); - memcpy(m_buffered_spritesizeram16.get(), m_spritesizeram16.get(), TOAPLAN1_SPRITESIZERAM_SIZE); - toaplan1_interrupt(); + memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE); + interrupt(); m_maincpu->set_input_line(M68K_IRQ_2, HOLD_LINE); /* Frame done */ } } diff --git a/src/mame/video/toaplan_scu.cpp b/src/mame/video/toaplan_scu.cpp index cb75a21e237..b1edb459d1c 100644 --- a/src/mame/video/toaplan_scu.cpp +++ b/src/mame/video/toaplan_scu.cpp @@ -29,7 +29,7 @@ GFXDECODE_MEMBER( toaplan_scu_device::gfxinfo ) GFXDECODE_END -toaplan_scu_device::toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +toaplan_scu_device::toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, TOAPLAN_SCU, tag, owner, clock) , device_gfx_interface(mconfig, *this, gfxinfo) { @@ -52,38 +52,35 @@ void toaplan_scu_device::alloc_sprite_bitmap(screen_device &screen) Sprite Handlers ***************************************************************************/ -void toaplan_scu_device::draw_sprites_to_tempbitmap(const rectangle &cliprect, uint16_t* spriteram, uint32_t bytes ) +void toaplan_scu_device::draw_sprites_to_tempbitmap(const rectangle &cliprect, u16* spriteram, u32 bytes) { - int offs; - m_temp_spritebitmap.fill(0,cliprect); + m_temp_spritebitmap.fill(0, cliprect); - for (offs = 0;offs < bytes/2;offs += 4) + for (int offs = 0; offs < bytes / 2; offs += 4) { - int attribute,sx,sy,flipx,flipy; - int sprite, color; - - attribute = spriteram[offs + 1]; - int priority = (attribute & 0x0c00)>>10; + const u16 attribute = spriteram[offs + 1]; + const int priority = (attribute & 0x0c00) >> 10; // are 0 priority really skipped, or can they still mask? if (!priority) continue; - sy = spriteram[offs + 3] >> 7; - if (sy != 0x0100) { /* sx = 0x01a0 or 0x0040*/ - sprite = spriteram[offs] & 0x7ff; - color = attribute & 0x3f; + const int sy = spriteram[offs + 3] >> 7; + if (sy != 0x0100) /* sx = 0x01a0 or 0x0040*/ + { + const u32 sprite = spriteram[offs] & 0x7ff; + u32 color = attribute & 0x3f; color |= priority << 6; // encode colour - sx = spriteram[offs + 2] >> 7; - flipx = attribute & 0x100; - if (flipx) sx -= m_xoffs_flipped; + int sx = spriteram[offs + 2] >> 7; + const int flipx = attribute & 0x100; + if (flipx) sx -= m_xoffs_flipped; - flipy = attribute & 0x200; - gfx(0)->transpen_raw(m_temp_spritebitmap,cliprect, + const int flipy = attribute & 0x200; + gfx(0)->transpen_raw(m_temp_spritebitmap, cliprect, sprite, color << 4 /* << 4 because using _raw */ , - flipx,flipy, - sx-m_xoffs,sy-16,0); + flipx, flipy, + sx - m_xoffs, sy - 16, 0); } } @@ -96,23 +93,22 @@ void toaplan_scu_device::draw_sprites_to_tempbitmap(const rectangle &cliprect, u void toaplan_scu_device::copy_sprites_from_tempbitmap(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) { - int y, x; - int colourbase = gfx(0)->colorbase(); + const int colourbase = gfx(0)->colorbase(); - for (y=cliprect.min_y;y<=cliprect.max_y;y++) + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - uint16_t* srcline = &m_temp_spritebitmap.pix16(y); - uint16_t* dstline = &bitmap.pix16(y); + u16* srcline = &m_temp_spritebitmap.pix16(y); + u16* dstline = &bitmap.pix16(y); - for (x=cliprect.min_x;x<=cliprect.max_x;x++) + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { - uint16_t pix = srcline[x]; + const u16 pix = srcline[x]; - if ( (pix>>(4+6)) == priority ) + if ((pix >> (4 + 6)) == priority) { - if (pix&0xf) + if (pix & 0xf) { - dstline[x] = (pix & 0x3ff)+colourbase; + dstline[x] = (pix & 0x3ff) + colourbase; } } } diff --git a/src/mame/video/toaplan_scu.h b/src/mame/video/toaplan_scu.h index bafceb28953..c07bcaa74df 100644 --- a/src/mame/video/toaplan_scu.h +++ b/src/mame/video/toaplan_scu.h @@ -10,7 +10,7 @@ class toaplan_scu_device : public device_t, public device_gfx_interface { public: - toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + toaplan_scu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); // configuration void set_xoffsets(int xoffs, int xoffs_flipped) @@ -19,7 +19,7 @@ public: m_xoffs_flipped = xoffs_flipped; } - void draw_sprites_to_tempbitmap(const rectangle &cliprect, uint16_t* spriteram, uint32_t bytes ); + void draw_sprites_to_tempbitmap(const rectangle &cliprect, u16* spriteram, u32 bytes); void copy_sprites_from_tempbitmap(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority); void alloc_sprite_bitmap(screen_device &screen); diff --git a/src/mame/video/twincobr.cpp b/src/mame/video/twincobr.cpp index 61951369a1b..ed15675d03d 100644 --- a/src/mame/video/twincobr.cpp +++ b/src/mame/video/twincobr.cpp @@ -24,11 +24,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info) { - int code, tile_number, color; - - code = m_bgvideoram16[tile_index+m_bg_ram_bank]; - tile_number = code & 0x0fff; - color = (code & 0xf000) >> 12; + const u16 code = m_bgvideoram16[tile_index+m_bg_ram_bank]; + const u32 tile_number = code & 0x0fff; + const u32 color = (code & 0xf000) >> 12; SET_TILE_INFO_MEMBER(2, tile_number, color, @@ -37,11 +35,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info) { - int code, tile_number, color; - - code = m_fgvideoram16[tile_index]; - tile_number = (code & 0x0fff) | m_fg_rom_bank; - color = (code & 0xf000) >> 12; + const u16 code = m_fgvideoram16[tile_index]; + const u32 tile_number = (code & 0x0fff) | m_fg_rom_bank; + const u32 color = (code & 0xf000) >> 12; SET_TILE_INFO_MEMBER(1, tile_number, color, @@ -50,11 +46,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(twincobr_state::get_tx_tile_info) { - int code, tile_number, color; - - code = m_txvideoram16[tile_index]; - tile_number = code & 0x07ff; - color = (code & 0xf800) >> 11; + const u16 code = m_txvideoram16[tile_index]; + const u32 tile_number = code & 0x07ff; + const u32 color = (code & 0xf800) >> 11; SET_TILE_INFO_MEMBER(0, tile_number, color, @@ -93,9 +87,9 @@ void twincobr_state::video_start() twincobr_create_tilemaps(); - m_txvideoram16 = make_unique_clear<uint16_t[]>(m_txvideoram_size); - m_fgvideoram16 = make_unique_clear<uint16_t[]>(m_fgvideoram_size); - m_bgvideoram16 = make_unique_clear<uint16_t[]>(m_bgvideoram_size); + m_txvideoram16 = make_unique_clear<u16[]>(m_txvideoram_size); + m_fgvideoram16 = make_unique_clear<u16[]>(m_fgvideoram_size); + m_bgvideoram16 = make_unique_clear<u16[]>(m_bgvideoram_size); m_display_on = 0; @@ -135,140 +129,148 @@ WRITE_LINE_MEMBER(twincobr_state::flipscreen_w) WRITE_LINE_MEMBER(twincobr_state::bg_ram_bank_w) { m_bg_ram_bank = state ? 0x1000 : 0x0000; + m_bg_tilemap->mark_all_dirty(); } WRITE_LINE_MEMBER(twincobr_state::fg_rom_bank_w) { m_fg_rom_bank = state ? 0x1000 : 0x0000; + m_fg_tilemap->mark_all_dirty(); } -WRITE16_MEMBER(twincobr_state::twincobr_txoffs_w) +void twincobr_state::twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_txoffs); m_txoffs %= m_txvideoram_size; } -READ16_MEMBER(twincobr_state::twincobr_txram_r) +u16 twincobr_state::twincobr_txram_r() { return m_txvideoram16[m_txoffs]; } -WRITE16_MEMBER(twincobr_state::twincobr_txram_w) +void twincobr_state::twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_txvideoram16[m_txoffs]); m_tx_tilemap->mark_tile_dirty(m_txoffs); } -WRITE16_MEMBER(twincobr_state::twincobr_bgoffs_w) +void twincobr_state::twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_bgoffs); m_bgoffs %= (m_bgvideoram_size >> 1); } -READ16_MEMBER(twincobr_state::twincobr_bgram_r) +u16 twincobr_state::twincobr_bgram_r() { return m_bgvideoram16[m_bgoffs+m_bg_ram_bank]; } -WRITE16_MEMBER(twincobr_state::twincobr_bgram_w) +void twincobr_state::twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_bgvideoram16[m_bgoffs+m_bg_ram_bank]); m_bg_tilemap->mark_tile_dirty((m_bgoffs+m_bg_ram_bank)); } -WRITE16_MEMBER(twincobr_state::twincobr_fgoffs_w) +void twincobr_state::twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_fgoffs); m_fgoffs %= m_fgvideoram_size; } -READ16_MEMBER(twincobr_state::twincobr_fgram_r) +u16 twincobr_state::twincobr_fgram_r() { return m_fgvideoram16[m_fgoffs]; } -WRITE16_MEMBER(twincobr_state::twincobr_fgram_w) +void twincobr_state::twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_fgvideoram16[m_fgoffs]); m_fg_tilemap->mark_tile_dirty(m_fgoffs); } -WRITE16_MEMBER(twincobr_state::twincobr_txscroll_w) +void twincobr_state::twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask) { - if (offset == 0) { + if (offset == 0) + { COMBINE_DATA(&m_txscrollx); m_tx_tilemap->set_scrollx(0, m_txscrollx); } - else { + else + { COMBINE_DATA(&m_txscrolly); m_tx_tilemap->set_scrolly(0, m_txscrolly); } } -WRITE16_MEMBER(twincobr_state::twincobr_bgscroll_w) +void twincobr_state::twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask) { - if (offset == 0) { + if (offset == 0) + { COMBINE_DATA(&m_bgscrollx); m_bg_tilemap->set_scrollx(0, m_bgscrollx); } - else { + else + { COMBINE_DATA(&m_bgscrolly); m_bg_tilemap->set_scrolly(0, m_bgscrolly); } } -WRITE16_MEMBER(twincobr_state::twincobr_fgscroll_w) +void twincobr_state::twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask) { - if (offset == 0) { + if (offset == 0) + { COMBINE_DATA(&m_fgscrollx); m_fg_tilemap->set_scrollx(0, m_fgscrollx); } - else { + else + { COMBINE_DATA(&m_fgscrolly); m_fg_tilemap->set_scrolly(0, m_fgscrolly); } } -WRITE16_MEMBER(twincobr_state::twincobr_exscroll_w)/* Extra unused video layer */ +void twincobr_state::twincobr_exscroll_w(offs_t offset, u16 data)/* Extra unused video layer */ { if (offset == 0) logerror("PC - write %04x to unknown video scroll Y register\n",data); else logerror("PC - write %04x to unknown video scroll X register\n",data); } /******************** Wardner interface to this hardware ********************/ -WRITE8_MEMBER(twincobr_state::wardner_txlayer_w) +void twincobr_state::wardner_txlayer_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - twincobr_txoffs_w(space, offset / 2, data << shift, 0xff << shift); + twincobr_txoffs_w(offset / 2, data << shift, 0xff << shift); } -WRITE8_MEMBER(twincobr_state::wardner_bglayer_w) +void twincobr_state::wardner_bglayer_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - twincobr_bgoffs_w(space, offset / 2, data << shift, 0xff << shift); + twincobr_bgoffs_w(offset / 2, data << shift, 0xff << shift); } -WRITE8_MEMBER(twincobr_state::wardner_fglayer_w) +void twincobr_state::wardner_fglayer_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - twincobr_fgoffs_w(space, offset / 2, data << shift, 0xff << shift); + twincobr_fgoffs_w(offset / 2, data << shift, 0xff << shift); } -WRITE8_MEMBER(twincobr_state::wardner_txscroll_w) +void twincobr_state::wardner_txscroll_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - twincobr_txscroll_w(space, offset / 2, data << shift, 0xff << shift); + twincobr_txscroll_w(offset / 2, data << shift, 0xff << shift); } -WRITE8_MEMBER(twincobr_state::wardner_bgscroll_w) +void twincobr_state::wardner_bgscroll_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - twincobr_bgscroll_w(space, offset / 2, data << shift, 0xff << shift); + twincobr_bgscroll_w(offset / 2, data << shift, 0xff << shift); } -WRITE8_MEMBER(twincobr_state::wardner_fgscroll_w) +void twincobr_state::wardner_fgscroll_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - twincobr_fgscroll_w(space, offset / 2, data << shift, 0xff << shift); + twincobr_fgscroll_w(offset / 2, data << shift, 0xff << shift); } -WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */ +void twincobr_state::wardner_exscroll_w(offs_t offset, u8 data)/* Extra unused video layer */ { switch (offset) { @@ -279,37 +281,39 @@ WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */ } } -READ8_MEMBER(twincobr_state::wardner_videoram_r) +u8 twincobr_state::wardner_videoram_r(offs_t offset) { int shift = 8 * (offset & 1); - switch (offset/2) { - case 0: return twincobr_txram_r(space,0,0xffff) >> shift; - case 1: return twincobr_bgram_r(space,0,0xffff) >> shift; - case 2: return twincobr_fgram_r(space,0,0xffff) >> shift; + switch (offset / 2) + { + case 0: return twincobr_txram_r() >> shift; + case 1: return twincobr_bgram_r() >> shift; + case 2: return twincobr_fgram_r() >> shift; } return 0; } -WRITE8_MEMBER(twincobr_state::wardner_videoram_w) +void twincobr_state::wardner_videoram_w(offs_t offset, u8 data) { int shift = 8 * (offset & 1); - switch (offset/2) { - case 0: twincobr_txram_w(space,0,data << shift, 0xff << shift); break; - case 1: twincobr_bgram_w(space,0,data << shift, 0xff << shift); break; - case 2: twincobr_fgram_w(space,0,data << shift, 0xff << shift); break; + switch (offset / 2) + { + case 0: twincobr_txram_w(0,data << shift, 0xff << shift); break; + case 1: twincobr_bgram_w(0,data << shift, 0xff << shift); break; + case 2: twincobr_fgram_w(0,data << shift, 0xff << shift); break; } } -READ8_MEMBER(twincobr_state::wardner_sprite_r) +u8 twincobr_state::wardner_sprite_r(offs_t offset) { - uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live()); + u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live()); int shift = (offset & 1) * 8; return spriteram16[offset/2] >> shift; } -WRITE8_MEMBER(twincobr_state::wardner_sprite_w) +void twincobr_state::wardner_sprite_w(offs_t offset, u8 data) { - uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live()); + u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live()); if (offset & 1) spriteram16[offset/2] = (spriteram16[offset/2] & 0x00ff) | (data << 8); else @@ -320,7 +324,7 @@ WRITE8_MEMBER(twincobr_state::wardner_sprite_w) -void twincobr_state::twincobr_log_vram() +void twincobr_state::log_vram() { #ifdef MAME_DEBUG @@ -360,12 +364,12 @@ void twincobr_state::twincobr_log_vram() } -uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 twincobr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - twincobr_log_vram(); + log_vram(); - uint16_t *buffered_spriteram16; - uint32_t bytes; + u16 *buffered_spriteram16; + u32 bytes; if (m_spriteram16 != nullptr) { buffered_spriteram16 = m_spriteram16->buffer(); @@ -373,7 +377,7 @@ uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_in } else { - buffered_spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->buffer()); + buffered_spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->buffer()); bytes = m_spriteram8->bytes(); } diff --git a/src/osd/modules/debugger/osx/disassemblyviewer.mm b/src/osd/modules/debugger/osx/disassemblyviewer.mm index 55dceb92729..5c9c1c8aa23 100644 --- a/src/osd/modules/debugger/osx/disassemblyviewer.mm +++ b/src/osd/modules/debugger/osx/disassemblyviewer.mm @@ -241,6 +241,7 @@ [super restoreConfigurationFromNode:node]; int const region = node->get_attribute_int("cpu", [dasmView selectedSubviewIndex]); [dasmView selectSubviewAtIndex:region]; + [window setTitle:[NSString stringWithFormat:@"Disassembly: %@", [dasmView selectedSubviewName]]]; [subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[dasmView selectedSubviewIndex]]]; [dasmView restoreConfigurationFromNode:node]; } diff --git a/src/osd/modules/debugger/osx/memoryviewer.mm b/src/osd/modules/debugger/osx/memoryviewer.mm index 0248cc87dbe..80d5434a826 100644 --- a/src/osd/modules/debugger/osx/memoryviewer.mm +++ b/src/osd/modules/debugger/osx/memoryviewer.mm @@ -188,6 +188,7 @@ [super restoreConfigurationFromNode:node]; int const region = node->get_attribute_int("memoryregion", [memoryView selectedSubviewIndex]); [memoryView selectSubviewAtIndex:region]; + [window setTitle:[NSString stringWithFormat:@"Memory: %@", [memoryView selectedSubviewName]]]; [subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[memoryView selectedSubviewIndex]]]; [memoryView restoreConfigurationFromNode:node]; } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc index 8d65128f8fc..554c222db47 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/fs_xbr-lv3-noblend.sc @@ -166,11 +166,11 @@ void main() // It uses CORNER_C if none of the others are defined. #ifdef CORNER_A vec4 interp_restriction_lv1 = interp_restriction_lv0; -#elif CORNER_B +#elif defined(CORNER_B) vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c))); -#elif CORNER_D +#elif defined(CORNER_D) vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c)) * (vec4(notEqual(f,f4)) * vec4(notEqual(f,i)) + vec4(notEqual(h,h5)) * vec4(notEqual(h,i)) + vec4(notEqual(h,g)) + vec4(notEqual(f,c)) + eq(b,c1) * eq(d,g0))); -#elif CORNER_C +#elif defined(CORNER_C) vec4 interp_restriction_lv1 = (interp_restriction_lv0 * (neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c))); #endif diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp index 98db62fdf1f..95345878cfd 100644 --- a/src/osd/modules/render/drawogl.cpp +++ b/src/osd/modules/render/drawogl.cpp @@ -2056,8 +2056,9 @@ static inline void copyline_palette16(uint32_t *dst, const uint16_t *src, int wi for (x = 0; x < width; x++) { int srcpix = *src++; + uint32_t dstval = 0xff000000 | palette[srcpix]; for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = 0xff000000 | palette[srcpix]; + *dst++ = dstval; } if (xborderpix) *dst++ = 0xff000000 | palette[*--src]; @@ -2079,8 +2080,9 @@ static inline void copyline_palettea16(uint32_t *dst, const uint16_t *src, int w for (x = 0; x < width; x++) { int srcpix = *src++; + uint32_t dstval = palette[srcpix]; for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = palette[srcpix]; + *dst++ = dstval; } if (xborderpix) *dst++ = palette[*--src]; @@ -2109,10 +2111,9 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width, for (x = 0; x < width; x++) { rgb_t srcpix = *src++; + uint32_t dstval = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; for (int x2 = 0; x2 < xprescale; x2++) - { - *dst++ = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; - } + *dst++ = dstval; } if (xborderpix) { @@ -2129,11 +2130,9 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width, for (x = 0; x < width; x++) { rgb_t srcpix = *src++; - + uint32_t dstval = 0xff000000 | srcpix; for (int x2 = 0; x2 < xprescale; x2++) - { - *dst++ = 0xff000000 | srcpix; - } + *dst++ = dstval; } if (xborderpix) *dst++ = 0xff000000 | *--src; @@ -2161,8 +2160,9 @@ static inline void copyline_argb32(uint32_t *dst, const uint32_t *src, int width for (x = 0; x < width; x++) { rgb_t srcpix = *src++; + uint32_t dstval = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; + *dst++ = dstval; } if (xborderpix) { @@ -2257,10 +2257,12 @@ static inline void copyline_yuy16_to_argb(uint32_t *dst, const uint16_t *src, in uint16_t srcpix1 = *src++; uint8_t cb = srcpix0 & 0xff; uint8_t cr = srcpix1 & 0xff; + uint32_t dstval0 = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr); + uint32_t dstval1 = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr); for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr); + *dst++ = dstval0; for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr); + *dst++ = dstval1; } if (xborderpix) { @@ -2291,10 +2293,12 @@ static inline void copyline_yuy16_to_argb(uint32_t *dst, const uint16_t *src, in uint16_t srcpix1 = *src++; uint8_t cb = srcpix0 & 0xff; uint8_t cr = srcpix1 & 0xff; + uint32_t dstval0 = ycc_to_rgb(srcpix0 >> 8, cb, cr); + uint32_t dstval1 = ycc_to_rgb(srcpix1 >> 8, cb, cr); for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = ycc_to_rgb(srcpix0 >> 8, cb, cr); + *dst++ = dstval0; for (int x2 = 0; x2 < xprescale; x2++) - *dst++ = ycc_to_rgb(srcpix1 >> 8, cb, cr); + *dst++ = dstval1; } if (xborderpix) { diff --git a/src/tools/imgtool/filtbas.cpp b/src/tools/imgtool/filtbas.cpp index c626fb25b86..10da0694844 100644 --- a/src/tools/imgtool/filtbas.cpp +++ b/src/tools/imgtool/filtbas.cpp @@ -116,6 +116,8 @@ static imgtoolerr_t basic_readfile(const basictokens *tokens, destf.printf("%u ", (unsigned) line_number); shift = 0x00; + in_string = false; // in case the last line didn't terminate a string + while((mem_stream->read(&b, 1) > 0) && (b != 0x00)) { if (b == 0x22) diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index 81b9f448140..c668fcba82d 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -99,6 +99,7 @@ using util::BIT; #include "cpu/mn10200/mn102dis.h" #include "cpu/nanoprocessor/nanoprocessor_dasm.h" #include "cpu/nec/necdasm.h" +#include "cpu/ns32000/ns32000dasm.h" #include "cpu/nuon/nuondasm.h" #include "cpu/patinhofeio/patinho_feio_dasm.h" #include "cpu/pdp1/pdp1dasm.h" @@ -420,6 +421,7 @@ static const dasm_table_entry dasm_table[] = { "mn10200", le, 0, []() -> util::disasm_interface * { return new mn10200_disassembler; } }, { "nanoprocessor", le, 0, []() -> util::disasm_interface * { return new hp_nanoprocessor_disassembler; } }, { "nec", le, 0, []() -> util::disasm_interface * { return new nec_disassembler; } }, + { "ns32000", le, 0, []() -> util::disasm_interface * { return new ns32000_disassembler; } }, { "nuon", be, 0, []() -> util::disasm_interface * { return new nuon_disassembler; } }, { "nsc8105", be, 0, []() -> util::disasm_interface * { return new m680x_disassembler(8105); } }, { "patinho_feio", le, 0, []() -> util::disasm_interface * { return new patinho_feio_disassembler; } }, |