megadriv.xml: compatibility field cleanups, apply minor fixes (#9732) [Angelo Salese, 0kmg]

- megadriv.xml: fix booger ROM loading;
- megadriv.xml: fix wboy5 and turmamon EEPROM saving;
- megadriv.xml: add SRAM to shijie, fixes roster names;
- megadriv.xml: allow nba2k and nba2k5 to boot;
- megacd.cpp: remove gross hack, allow megacdj & megacd2j to boot again;
- jcart.cpp: fix P3 and P4 labels;
- megadriv.xml: add SRAM to fengshen;
- megadriv_acbl.cpp: make sonic3mb to boot, add basic protection sim;
This commit is contained in:
Angelo Salese 2022-05-23 15:53:17 +02:00 committed by GitHub
parent 0c98b7e1d2
commit 641c55693b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1376 additions and 366 deletions

View File

@ -827,7 +827,7 @@ license:CC0
</part>
</software>
<software name="roadaven">
<software name="roadaven" supported="no">
<!-- source redump.org
<rom name="Road Avenger (Europe).cue" size="442" crc="c852ae6d" />
<rom name="Road Avenger (Europe) (Track 1).bin" size="317816352" crc="c15fde6f" />
@ -838,6 +838,9 @@ license:CC0
<description>Road Avenger (Euro)</description>
<year>1993</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Black screen, requires sub CPU to be overclocked by 1.5x
]]></notes>
<info name="serial" value="4603"/>
<info name="ring_code" value="MK-4603P-00053-R1M V"/>
<part name="cdrom" interface="scd_cdrom">
@ -2434,7 +2437,7 @@ license:CC0
</part>
</software>
<software name="ntrap32" cloneof="ntrap">
<software name="ntrap32" cloneof="ntrap" supported="no">
<!-- source toseciso
<rom name="Night Trap (1995)(Digital Pictures)(PAL)(Disc 1 of 2)[!][32X].cue" size="319" crc="57fec2f6" />
<rom name="Night Trap (1995)(Digital Pictures)(PAL)(Disc 1 of 2)(Track 1 of 2)[!][32X].iso" size="537303040" crc="12027282" />
@ -2447,6 +2450,11 @@ license:CC0
<description>Night Trap (Euro, 32X)</description>
<year>1995</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
Requires [disc swap]
]]></notes>
<info name="serial" value="T-16202F-50"/>
<part name="cdrom1" interface="scd_cdrom">
<diskarea name="cdrom">
@ -2940,7 +2948,7 @@ license:CC0
</part>
</software>
<software name="slamcity32" cloneof="slamcity">
<software name="slamcity32" cloneof="slamcity" supported="no">
<!-- source toseciso
<rom name="Slam City with Scottie Pippen (1994)(Digital Pictures)(PAL)(Disc 1 of 4)[!][Fingers][32X].cue" size="375" crc="d6b57cf0" />
<rom name="Slam City with Scottie Pippen (1994)(Digital Pictures)(PAL)(Disc 1 of 4)(Track 1 of 2)[!][Fingers][32X].iso" size="529147904" crc="56a8ad9c" />
@ -2961,6 +2969,11 @@ license:CC0
<description>Slam City with Scottie Pippen (Euro, 32X)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
Requires [disc swap]
]]></notes>
<info name="serial" value="T-16204F-50"/>
<part name="cdrom1" interface="scd_cdrom">
<diskarea name="cdrom">
@ -3148,7 +3161,7 @@ license:CC0
</part>
</software>
<software name="supremew32" cloneof="supremew">
<software name="supremew32" cloneof="supremew" supported="no">
<!-- source toseciso
<rom name="Supreme Warrior - Ying Heung (1995)(Digital Pictures)(PAL)(en-zh)(Disc 1 of 2)[!][Fire & Earth][32X].cue" size="397" crc="e1c77730" />
<rom name="Supreme Warrior - Ying Heung (1995)(Digital Pictures)(PAL)(en-zh)(Disc 1 of 2)(Track 1 of 2)[!][Fire & Earth][32X].iso" size="459593728" crc="d8c88078" />
@ -3161,6 +3174,11 @@ license:CC0
<description>Supreme Warrior - Ying Heung (Euro, 32X)</description>
<year>1995</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
Requires [disc swap]
]]></notes>
<info name="serial" value="T-16203F-50"/>
<part name="cdrom1" interface="scd_cdrom">
<diskarea name="cdrom">

View File

@ -1309,7 +1309,7 @@ license:CC0
</part>
</software>
<software name="ntrap">
<software name="ntrap" supported="no">
<!-- source redump.org
<rom name="Night Trap (Japan) (Disc 1).cue" size="224" crc="f3527896" />
<rom name="Night Trap (Japan) (Disc 1) (Track 1).bin" size="615875904" crc="17744c64" />
@ -1322,6 +1322,9 @@ license:CC0
<description>Night Trap (Jpn)</description>
<year>1993</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="G-6025"/>
<info name="disk_ring" value="G-6025P-00148 1 (Disc 1), G-6025P-00149 1 (Disc 2)"/>
<info name="release" value="19931119"/>
@ -2344,7 +2347,7 @@ license:CC0
</part>
</software>
<software name="timegal">
<software name="timegal" supported="no">
<!-- source redump.org
<rom name="Time Gal (Japan).cue" size="202" crc="a50da29e" />
<rom name="Time Gal (Japan) (Track 1).bin" size="304652208" crc="1a756c12" />
@ -2353,6 +2356,9 @@ license:CC0
<description>Time Gal (Jpn)</description>
<year>1992</year>
<publisher>Wolf Team</publisher>
<notes><![CDATA[
Black screen, requires sub CPU to be overclocked by 1.5x
]]></notes>
<info name="serial" value="T-32114"/>
<info name="disk_ring" value="T-32114P-00031-R1M V"/>
<info name="release" value="19921113"/>
@ -2832,7 +2838,7 @@ license:CC0
</part>
</software>
<software name="anettfut">
<software name="anettfut" supported="no">
<!-- source toseciso
<rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)[!].cue" size="4562" crc="e29146cb" />
<rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 01 of 31)[!].iso" size="31488000" crc="ed405f82" />
@ -2870,6 +2876,9 @@ license:CC0
<description>Anett Futatabi (Jpn)</description>
<year>1993</year>
<publisher>Wolf Team</publisher>
<notes><![CDATA[
Black screen, requires sub CPU to be overclocked by 1.5x
]]></notes>
<info name="serial" value="T-32104"/>
<info name="release" value="19930330"/>
<info name="alt_title" value="アネット再び"/>
@ -4389,7 +4398,7 @@ license:CC0
</part>
</software>
<software name="prizefig">
<software name="prizefig" supported="no">
<!-- source toseciso
<rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 1 of 2)[!].cue" size="301" crc="6caf1452" />
<rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 1 of 2)[!].iso" size="346562560" crc="3c4783bc" />
@ -4402,6 +4411,9 @@ license:CC0
<description>Prize Fighter (Jpn)</description>
<year>1995</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="G-6037"/>
<info name="release" value="19950324"/>
<info name="alt_title" value="プライズファイター"/>
@ -4585,7 +4597,7 @@ license:CC0
</part>
</software>
<software name="rbfx">
<software name="rbfx" supported="no">
<!-- source toseciso
<rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)[!].cue" size="589" crc="78b59c82" />
<rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 1 of 4)[!].iso" size="276729856" crc="0cd3a154" />
@ -4596,6 +4608,9 @@ license:CC0
<description>Road Blaster FX (Jpn)</description>
<year>1992</year>
<publisher>Wolf Team</publisher>
<notes><![CDATA[
Black screen, requires sub CPU to be overclocked by 1.5x
]]></notes>
<info name="serial" value="T-32124"/>
<info name="release" value="19921218"/>
<info name="alt_title" value="ロードブラスターFX"/>

File diff suppressed because it is too large Load Diff

View File

@ -736,8 +736,7 @@ See: http://rawdump.net/
</part>
</software>
<!-- Requires 32x add-on! -->
<software name="corpse32" cloneof="corpse">
<software name="corpse32" cloneof="corpse" supported="no">
<!-- Source: redump.org - http://redump.org/disc/2965/
<rom name="Corpse Killer (USA) (32X).cue" size="220" crc="5d439045" />
<rom name="Corpse Killer (USA) (32X) (Track 1).bin" size="624898176" crc="acd1f057" />
@ -746,9 +745,14 @@ See: http://rawdump.net/
<description>Corpse Killer (USA, 32X)</description>
<year>1995</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
]]></notes>
<info name="serial" value="T-16201F"/>
<info name="ring_code" value="GW 02361 RE-1 SRCR##03"/>
<sharedfeat name="requirement" value="32x"/>
<!-- <sharedfeat name="requirement" value="32x"/> -->
<info name="usage" value="Requires to be run with 32x_scd"/>
<part name="cdrom" interface="scd_cdrom">
<diskarea name="cdrom">
<disk name="corpse killer (usa, 32x)" sha1="68a6c75bc730025e90fa413c107090e7f4e377e0"/>
@ -802,7 +806,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="dracunl">
<software name="dracunl" supported="no">
<!-- Source: redump.org - http://redump.org/disc/21040/ http://redump.org/disc/21041/
<rom name="Dracula Unleashed (USA) (Disc 1).cue" size="257" crc="93ade26e" md5="fa725eb12ee7eb683144986261c33bf1" sha1="fdb6ad28c7fc21f99e35684502bcd32dfc1abb1b"/>
<rom name="Dracula Unleashed (USA) (Disc 1) (Track 1).bin" size="544372752" crc="0e728a6c" md5="282a9be8157a6167a389c7fff475ed3a" sha1="927b6d0525010265059ab1ee4d23c6a0598b7fb8"/>
@ -815,6 +819,9 @@ See: http://rawdump.net/
<description>Dracula Unleashed (USA)</description>
<year>1993</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="4420"/>
<info name="ring_code" value="CDAC-053000 14 (Disc 1) / CDAC-053100 4 (Disc 2)"/>
<part name="cdrom1" interface="scd_cdrom">
@ -1156,7 +1163,8 @@ See: http://rawdump.net/
</software>
<!-- This game came in a bundle with both a Sega CD compatible disc and one which takes advantage of the 32X expansion. -->
<software name="fahrenhe">
<!-- TODO: where to load disc 2? Does it detects 32x automatically and just then prompt user? -->
<software name="fahrenhe" supported="partial">
<!-- Source: redump.org - http://redump.org/disc/29440/ http://redump.org/disc/29441/
<rom name="Fahrenheit (USA) (Disc 1) (Key Disc) (Sega CD).cue" size="262" crc="8982108b" md5="0b0a464fd029c7df830ad19ed1bfe099" sha1="825a83edb4966e0d9beaafc2d94233a2a0bc30f0"/>
<rom name="Fahrenheit (USA) (Disc 1) (Key Disc) (Sega CD) (Track 1).bin" size="593710656" crc="e22ff784" md5="f96fdb4fc2f8a6308c46d8af793d5c21" sha1="436141455a4726ce065d37db8e39f540c303de0a"/>
@ -1169,6 +1177,9 @@ See: http://rawdump.net/
<description>Fahrenheit (USA, Sega CD &amp; 32X CD)</description>
<year>1995</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Has optional unemulated [32X] mode, which in turn needs [disc swap]
]]></notes>
<info name="release" value="199503xx" />
<info name="serial" value="4438"/>
<info name="ring_code" value="CDAC-088300 1 (Disc 1) / CDAC-088400 1 (Disc 2)"/>
@ -1344,7 +1355,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="gztexas">
<software name="gztexas" supported="no">
<!-- Source: redump.org - http://redump.org/disc/19472/ http://redump.org/disc/19473/
<rom name="Ground Zero Texas (USA) (Disc 1).cue" size="257" crc="d0c584c7" md5="113dd7490af1f86d08f70448d443ed93" sha1="2041c4c954bb0b19ede6dbef1190836c9f2c72b7"/>
<rom name="Ground Zero Texas (USA) (Disc 1) (Track 1).bin" size="629355216" crc="20b937a8" md5="27eac38ea6f5deee11367f0062f55608" sha1="d151430da0d6e25af45ecd0a9133dea9a1d1d285"/>
@ -1357,6 +1368,9 @@ See: http://rawdump.net/
<description>Ground Zero Texas (USA)</description>
<year>1993</year>
<publisher>Sony Imagesoft</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="ring_code" value="CDAC-053200 2, CDAC-053200 4 (Disc 1) / CDAC-053300 1 (Disc 2)"/>
<info name="serial" value="T-93145"/>
<part name="cdrom1" interface="scd_cdrom">
@ -2233,7 +2247,6 @@ See: http://rawdump.net/
</part>
</software>
<!-- Requires 32x add-on! -->
<software name="ntrap32" cloneof="ntrap">
<!-- Source: redump.org - http://redump.org/disc/17550/ http://redump.org/disc/17551/
<rom name="Night Trap (USA) (Disc 1) (32X).cue" size="232" crc="40b701ce" />
@ -2247,9 +2260,15 @@ See: http://rawdump.net/
<description>Night Trap (USA, 32X)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
Requires [disc swap]
]]></notes>
<info name="serial" value="T-16202F"/>
<info name="ring_code" value="GW 00161.1 RE-1 SRCR##02 (Disc 1) / GW 00161.2 RE-1 SRCR##02 (Disc 2)"/>
<sharedfeat name="requirement" value="32x"/>
<!--<sharedfeat name="requirement" value="32x"/>-->
<info name="usage" value="Requires to be run with 32x_scd"/>
<part name="cdrom1" interface="scd_cdrom">
<feature name="part_id" value="Disc 1" />
<diskarea name="cdrom">
@ -2266,7 +2285,7 @@ See: http://rawdump.net/
</software>
<!-- This is a dump from the original edition. Investigate if the re-release is different. -->
<software name="ntrapa" cloneof="ntrap">
<software name="ntrapa" cloneof="ntrap" supported="no">
<!-- Source: redump.org - http://redump.org/disc/17158/ http://redump.org/disc/17159/
<rom name="Night Trap (USA) (Disc 1).cue" size="91" crc="b5fae72b" />
<rom name="Night Trap (USA) (Disc 1).bin" size="616997808" crc="900cf0aa" />
@ -2277,6 +2296,9 @@ See: http://rawdump.net/
<description>Night Trap (USA)</description>
<year>1992</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Required [disc swap]
]]></notes>
<info name="serial" value="4903"/>
<info name="release" value="199211xx" />
<info name="ring_code" value="CDRM-1027400 5 (Disc 1) / CDRM-1027410 2, CDRM-1027410 1 (Disc 2)"/>
@ -2296,7 +2318,7 @@ See: http://rawdump.net/
</software>
<!-- Only the first disk is different from the parent. -->
<software name="ntrapb" cloneof="ntrap">
<software name="ntrapb" cloneof="ntrap" supported="no">
<!-- Source: redump.org - http://redump.org/disc/20867/ http://redump.org/disc/17159/
<rom name="Night Trap (USA) (Disc 1) (Alt).cue" size="97" crc="f2950016" md5="c9261a74b06972b2e1fbf7addc5fb5a0" sha1="2456d059254e74ebaf8b8f17fc665222fa47c323"/>
<rom name="Night Trap (USA) (Disc 1) (Alt).bin" size="616645008" crc="133b76ce" md5="6bfe493a225713115096d730edf77afe" sha1="9cd08d3718e17134a013cae92a52a2ac0b226b77"/>
@ -2307,6 +2329,9 @@ See: http://rawdump.net/
<description>Night Trap (USA, alt)</description>
<year>1992</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="4903"/>
<info name="release" value="199211xx" />
<info name="ring_code" value="CDRM-1027400 3 (Disc 1) / CDRM-1027410 2, CDRM-1027410 1 (Disc 2)"/>
@ -2331,7 +2356,7 @@ See: http://rawdump.net/
Mega Drive/Genesis while playing the game, the music and sound effects will
be improved. As such, this disc is not really a game in it's own right.
-->
<software name="psgaesd">
<software name="psgaesd" supported="no">
<!-- Source: redump.org - http://redump.org/disc/19787/
<rom name="Pier Solar and the Great Architects Enhanced Soundtrack Disc (USA).cue" size="622" crc="6d317fa8" md5="f0e03431664704058746f511e21c0958" sha1="ef30161fe9b6737346530bd74644996b3dc58041"/>
<rom name="Pier Solar and the Great Architects Enhanced Soundtrack Disc (USA) (Track 1).bin" size="511769328" crc="59200094" md5="5861f8067b1a3b8f1f6567e844a58dd3" sha1="649ca22c941afb50613167a942fd82b0c0b93384"/>
@ -2342,10 +2367,14 @@ See: http://rawdump.net/
<description>Pier Solar and the Great Architects Enhanced Soundtrack Disc (World)</description>
<year>2010</year>
<publisher>WaterMelon</publisher>
<notes><![CDATA[
No support for Mega CD cart slots
]]></notes>
<info name="serial" value="T-574013, T-574016, T-574016-50"/>
<info name="release" value="20101214" />
<info name="ring_code" value="Enhanced Soundtrack Disc WM WM 2234612235072235144* Enhanced Soundtrack Disc WM B"/>
<sharedfeat name="requirement" value="megadriv -psolar"/>
<!--<sharedfeat name="requirement" value="megadriv -psolar"/>-->
<info name="usage" value="Requires to be run with megadriv psolar cart"/>
<part name="cdrom" interface="scd_cdrom">
<diskarea name="cdrom">
<disk name="pier solar and the great architects enhanced soundtrack disc (world)" sha1="1f26cce723ef044f449d87cdb624a2937f40f5d9"/>
@ -2608,7 +2637,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="roadaven">
<software name="roadaven" supported="no">
<!-- Source: redump.org - http://redump.org/disc/29313/
<rom name="Road Avenger (USA).cue" size="453" crc="9e7d5e08" md5="840ebb398cce8d27cf3a5d253d8b575d" sha1="cd2b55540b911786886f43aae99e228d9f85efc5"/>
<rom name="Road Avenger (USA) (Track 1).bin" size="317816352" crc="cf3bd177" md5="71e1578e091e0d5df4b07f4f26e4d2c9" sha1="9cf7095ab8f7a5aa5df046d0b665263f4f506f19"/>
@ -2619,6 +2648,9 @@ See: http://rawdump.net/
<description>Road Avenger (USA)</description>
<year>1993</year>
<publisher>Renovation</publisher>
<notes><![CDATA[
Black screen, requires sub CPU to be overclocked by 1.5x
]]></notes>
<info name="serial" value="T-6207"/>
<info name="release" value="199303xx" />
<info name="ring_code" value="SEGA6207 R1D MFD BY JVC"/>
@ -2819,7 +2851,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="holmes2">
<software name="holmes2" supported="no">
<!-- Source: redump.org - http://redump.org/disc/17162/ http://redump.org/disc/17163/
<rom name="Sherlock Holmes - Consulting Detective Vol. II (USA) (Disc 1).cue" size="292" crc="a33aa103" />
<rom name="Sherlock Holmes - Consulting Detective Vol. II (USA) (Disc 1) (Track 1).bin" size="529374048" crc="94a913b7" />
@ -2832,6 +2864,9 @@ See: http://rawdump.net/
<description>Sherlock Holmes - Consulting Detective Vol. II (USA)</description>
<year>1993</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="4653"/>
<info name="release" value="199305xx" />
<info name="ring_code" value="CDAC-041000 1 (Disc 1), CDAC-041100 2 (Disc 2)"/>
@ -2976,7 +3011,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="slamcity">
<software name="slamcity" supported="no">
<!-- Source: redump.org - http://redump.org/disc/28031/ http://redump.org/disc/28032/ http://redump.org/disc/28033/ http://redump.org/disc/28034/
<rom name="Slam City with Scottie Pippen (USA) (Disc 1) (Fingers).cue" size="301" crc="3f50c8bc" md5="35ca36913af0a3df72cf8c3492eceec1" sha1="e3511c717bb78966f75e0dd4a2190b5d390faefe"/>
<rom name="Slam City with Scottie Pippen (USA) (Disc 1) (Fingers) (Track 1).bin" size="587070960" crc="becd1484" md5="99a012c46ec31fec5f9538eaa510bd5a" sha1="f32cf26f6fa4acf12807e7f1064e9e202d11cff3"/>
@ -2997,6 +3032,9 @@ See: http://rawdump.net/
<description>Slam City with Scottie Pippen (USA, rev. A)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="T-162035"/>
<info name="release" value="199411xx" />
<info name="ring_code" value="GW 02711.1 RE-1 SRCR##01 (Disc 1) / GW 02711.2 RE-1 SRCR**01 (Disc 2) / GW 02711.3 RE-1 SRCR##01 (Disc 3) / GW 02711.4 RE-1 SRCR##01 (Disc 4)"/>
@ -4251,7 +4289,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="gztexasa" cloneof="gztexas">
<software name="gztexasa" cloneof="gztexas" supported="no">
<!-- Source: TOSEC-ISO
<rom name="Ground Zero Texas (1993)(Sony Imagesoft)(NTSC)(US)(Disc 1 of 2)[!].cue" size="329" crc="b82ac042" />
<rom name="Ground Zero Texas (1993)(Sony Imagesoft)(NTSC)(US)(Disc 1 of 2)(Track 1 of 2)[!].iso" size="548009984" crc="e397fe2d" />
@ -4264,6 +4302,9 @@ See: http://rawdump.net/
<description>Ground Zero Texas (USA, alt)</description>
<year>1993</year>
<publisher>Sony Imagesoft</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="T-93145"/>
<info name="ring_code" value="CDAC-053300 2 (Disc 2)"/>
<part name="cdrom1" interface="scd_cdrom">
@ -4581,7 +4622,7 @@ See: http://rawdump.net/
</software>
<!-- Only the first disc is dumped to redump.org standard. The second disc is a TOSEC-ISO dump. -->
<software name="prizefig">
<software name="prizefig" supported="no">
<!-- Source: TOSEC-ISO & redump.org - http://redump.org/disc/28629/
<rom name="Prize Fighter (USA) (Disc 1).cue" size="226" crc="008693c6" md5="5d9afab480f10aff98863b7bb6e35eb2" sha1="88788d86717177eca87075169ee40d0fdc683286"/>
<rom name="Prize Fighter (USA) (Disc 1) (Track 1).bin" size="410527488" crc="7d3f2a3c" md5="f8c2e9f9adc690908bd753c5c5ad1511" sha1="a310fc47ee68ba2f6c860b24b11be76ac4f08d86"/>
@ -4594,6 +4635,9 @@ See: http://rawdump.net/
<description>Prize Fighter (USA)</description>
<year>1994</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="MK-4206"/>
<info name="ring_code" value="CDAC-052700 2 (Disc 1)"/>
<part name="cdrom1" interface="scd_cdrom">
@ -4729,7 +4773,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="slamcitya" cloneof="slamcity">
<software name="slamcitya" cloneof="slamcity" supported="no">
<!-- Source: TOSEC-ISO
<rom name="Slam City with Scottie Pippen (1994)(Digital Pictures)(NTSC)(US)(Disc 1 of 4)[!][Fingers][GW 02711.1].cue" size="399" crc="59d841d8" />
<rom name="Slam City with Scottie Pippen (1994)(Digital Pictures)(NTSC)(US)(Disc 1 of 4)(Track 1 of 2)[!][Fingers][GW 02711.1].iso" size="511191040" crc="6747b14f" />
@ -4750,6 +4794,9 @@ See: http://rawdump.net/
<description>Slam City with Scottie Pippen (USA)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="T-162035"/>
<info name="release" value="199411xx" />
<info name="ring_code" value="GW 02711.1 (Disc 1) / GW 02711.2 (Disc 2) / GW 02711.3 (Disc 3) / GW 02711.4 (Disc 4)"/>
@ -4782,8 +4829,7 @@ See: http://rawdump.net/
</part>
</software>
<!-- Requires 32x add-on! -->
<software name="slamcity32" cloneof="slamcity">
<software name="slamcity32" cloneof="slamcity" supported="no">
<!-- Source: TOSEC-ISO
<rom name="Slam City with Scottie Pippen (1994)(Digital Pictures)(NTSC)(US)(Disc 1 of 4)[!][Fingers][32X].cue" size="385" crc="55a0b768" />
<rom name="Slam City with Scottie Pippen (1994)(Digital Pictures)(NTSC)(US)(Disc 1 of 4)(Track 1 of 2)[!][Fingers][32X].iso" size="529147904" crc="1c6665b1" />
@ -4804,8 +4850,14 @@ See: http://rawdump.net/
<description>Slam City with Scottie Pippen (USA, 32X)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
Requires [disc swap]
]]></notes>
<info name="serial" value="T16204F"/>
<sharedfeat name="requirement" value="32x"/>
<!-- <sharedfeat name="requirement" value="32x"/> -->
<info name="usage" value="Requires to be run with 32x_scd"/>
<part name="cdrom1" interface="scd_cdrom">
<feature name="part_id" value="Disc 1 - Fingers" />
<diskarea name="cdrom">
@ -4872,7 +4924,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="supremew">
<software name="supremew" supported="no">
<!-- Source: TOSEC-ISO
<rom name="Supreme Warrior - Ying Heung (1994)(Digital Pictures)(NTSC)(US)(Disc 1 of 2)[!][Fire & Earth][GW 02411.1 RE-1].cue" size="417" crc="503b570d" />
<rom name="Supreme Warrior - Ying Heung (1994)(Digital Pictures)(NTSC)(US)(Disc 1 of 2)(Track 1 of 2)[!][Fire & Earth][GW 02411.1 RE-1].iso" size="427319296" crc="c12c22aa" />
@ -4885,6 +4937,9 @@ See: http://rawdump.net/
<description>Supreme Warrior (USA)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="T-162045"/>
<info name="alt_title" value="Supreme Warrior - Ying Heung (Box)" />
<info name="ring_code" value="GW 02411.1 RE-1 (Disc 1), GW 02411.2 RE-1 (Disc 2)"/>
@ -4902,8 +4957,7 @@ See: http://rawdump.net/
</part>
</software>
<!-- Requires 32x add-on! -->
<software name="supremew32" cloneof="supremew">
<software name="supremew32" cloneof="supremew" supported="no">
<!-- Source: TOSEC-ISO
<rom name="Supreme Warrior - Ying Heung (1994)(Digital Pictures)(NTSC)(US)(en-zh)(Disc 1 of 2)[!][Fire & Earth][32X].cue" size="407" crc="6c4630fc" />
<rom name="Supreme Warrior - Ying Heung (1994)(Digital Pictures)(NTSC)(US)(en-zh)(Disc 1 of 2)(Track 1 of 2)[!][Fire & Earth][32X].iso" size="459593728" crc="a65565f4" />
@ -4916,9 +4970,15 @@ See: http://rawdump.net/
<description>Supreme Warrior (USA, 32X)</description>
<year>1994</year>
<publisher>Digital Pictures</publisher>
<notes><![CDATA[
Hangs on BIOS logo
Requires [32X] add-on
Requires [disc swap]
]]></notes>
<info name="serial" value="T-16203F"/>
<info name="alt_title" value="Supreme Warrior - Ying Heung (Box)" />
<sharedfeat name="requirement" value="32x"/>
<!-- <sharedfeat name="requirement" value="32x"/> -->
<info name="usage" value="Requires to be run with 32x_scd"/>
<part name="cdrom1" interface="scd_cdrom">
<feature name="part_id" value="Disc 1 - Fire and Earth" />
<diskarea name="cdrom">
@ -5470,10 +5530,13 @@ See: http://rawdump.net/
<!-- Sourced from the hiddenpalace forums - http://hiddenpalace.org/forums/viewtopic.php?t=2880 -->
<!-- Marked as bad dump as it's an MP3-based dump, but probably it's also a broken dump. -->
<software name="johnnymn">
<software name="johnnymn" supported="no">
<description>Johnny Mnemonic (USA, prototype)</description>
<year>1995?</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<part name="cdrom1" interface="scd_cdrom">
<feature name="part_id" value="Disc 1" />
<diskarea name="cdrom1">
@ -5607,7 +5670,7 @@ See: http://rawdump.net/
</part>
</software>
<software name="ntrap">
<software name="ntrap" supported="no">
<!-- Source: TruRip
<rom name="Media (CD-ROM)\Night Trap (Rerelease) (1994)(Digital Pictures)(US) - (Disc 1 of 2).ccd" size="934" crc="a9d84328" md5="2d6273e67c6602ac5756c3dedabe23ca" sha1="7534eaccfd1977956f36e7492516e0252a111e79"/>
<rom name="Media (CD-ROM)\Night Trap (Rerelease) (1994)(Digital Pictures)(US) - (Disc 1 of 2).img" size="619613232" crc="7cb50000" md5="6061e5642a6070ca6e46269386f4cf06" sha1="53693355efedd1b5afdb24aca323697c860ffd46"/>
@ -5620,6 +5683,9 @@ See: http://rawdump.net/
<description>Night Trap (USA, Re-Release)</description>
<year>1995</year>
<publisher>Sega</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<info name="serial" value="T-162105"/>
<part name="cdrom1" interface="scd_cdrom">
<feature name="part_id" value="Disc 1" />
@ -5654,11 +5720,14 @@ See: http://rawdump.net/
</software>
<!-- Marked as bad dump as it's an MP3-based dump. -->
<software name="pennsmok">
<software name="pennsmok" supported="no">
<!-- Unknown source -->
<description>Penn &amp; Teller's Smoke and Mirrors (USA, prototype)</description>
<year>1995?</year>
<publisher>Absolute Entertainment</publisher>
<notes><![CDATA[
Requires [disc swap]
]]></notes>
<part name="cdrom1" interface="scd_cdrom">
<feature name="part_id" value="Disc 1" />
<diskarea name="cdrom">
@ -5766,7 +5835,7 @@ See: http://rawdump.net/
</software>
<!--
<software name="surgical32x" cloneof="surgical">
<software name="surgical32" cloneof="surgical">
<description>Surgical Strike (Bra, 32X)</description>
<year>1996</year>
<publisher>Sega</publisher>

View File

@ -5333,10 +5333,11 @@ license:CC0
<description>Phantasy Star (Jpn, MD / Saturn Collection CD)</description>
<year>1994</year>
<publisher>Sega</publisher>
<info name="serial" value="G-4534"/>
<part name="cart" interface="sms_cart">
<feature name="battery" value="yes" />
<dataarea name="rom" size="524288">
<rom name="phantasy star (j) (from saturn collection cd).bin" size="524288" crc="07301f83" sha1="b3ae447dc739256616b44cbd77cb903c9f19e980" offset="000000" />
<rom name="phantasy star (j) (from saturn collection cd).bin" size="524288" crc="07301f83" sha1="b3ae447dc739256616b44cbd77cb903c9f19e980" offset="000000" status="baddump"/>
</dataarea>
<dataarea name="ram" size="8192">
</dataarea>

View File

@ -90,25 +90,24 @@ void md_seprom_mm96_device::device_add_mconfig(machine_config &config)
static INPUT_PORTS_START( jcart_ipt )
PORT_START("JCART3") /* Joypad 3 on J-Cart (3 button + start) */
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 B")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 C")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 A")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(3)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("%p Up")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("%p Down")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("%p Left")
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("%p Right")
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("%p B")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("%p C")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("%p A")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(1) PORT_NAME("%p Start")
PORT_START("JCART4") /* Joypad 4 on J-Cart (3 button + start) */
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 B")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 C")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 A")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(4)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("%p Up")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("%p Down")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("%p Left")
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("%p Right")
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("%p B")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("%p C")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("%p A")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) PORT_NAME("%p Start")
INPUT_PORTS_END
ioport_constructor md_jcart_device::device_input_ports() const

View File

@ -3,12 +3,12 @@
/*
Sega 315-5313 VDP emulation, used by Mega Drive/Genesis
TODO:
- Video, DMA timing and HV counter seem incorrect,
they need verification on real hardware.
- Support 128KB VRAM configuration, did any hardware use it?
- Is border area displayable?
- 32X overlay with H32 mode, did all known software use this?
TODO:
- Video, DMA timing and HV counter are incorrect,
they need verification on real hardware.
- Support 128KB VRAM configuration, did any hardware use it?
- Is border area displayable?
- 32X overlay with H32 mode, did all known software use this?
*/
#include "emu.h"
@ -168,7 +168,8 @@ static const unsigned hres_mul[4] = { 5, 5, 4, 4 };
inline u8 sega315_5313_device::get_hres() { return (MEGADRIVE_REG0C_RS0 | (MEGADRIVE_REG0C_RS1 << 1)) & 3; }
int sega315_5313_device::screen_hpos() { return screen().hpos() / (m_lcm_scaling ? hres_mul[get_hres()] : 1); }
#define MAX_HPOSITION 480 // TODO: 342(H32) or 427.5(H40), each scanline used 3420 cycle
// TODO: 342(H32) or 427.5(H40), each scanline used 3420 cycle
#define MAX_HPOSITION 480
DEFINE_DEVICE_TYPE(SEGA315_5313, sega315_5313_device, "sega315_5313", "Sega 315-5313 Megadrive VDP")
@ -577,6 +578,9 @@ void sega315_5313_device::vdp_set_register(int regnum, u8 value)
{
m_regs[regnum] = value;
// if (regnum == 1)
// printf("%02x %02x (%lld %d %d)\n", regnum, value, screen().frame_number(), screen().hpos(), screen().vpos());
/* We need special handling for the IRQ enable registers, some games turn
off the irqs before they are taken, delaying them until the IRQ is turned
back on */
@ -585,6 +589,12 @@ void sega315_5313_device::vdp_set_register(int regnum, u8 value)
{
//osd_printf_debug("setting reg 0, irq enable is now %d\n", MEGADRIVE_REG0_IRQ4_ENABLE);
// fatalrew and sesame are very fussy about pending interrupts.
// Former in particular will quickly enable both after the EA logo (cfr. killshow at PC=0x2267a),
// and irq 6 will jump to illegal addresses because the correlated routine isn't set in stack
// but delayed a bit.
// Note that irq 6 is masked for about 5 frames, leaving the assumption that it mustn't
// be left on during all this time.
if (m_irq4_pending)
{
if (MEGADRIVE_REG0_IRQ4_ENABLE)
@ -592,12 +602,6 @@ void sega315_5313_device::vdp_set_register(int regnum, u8 value)
else
m_lv4irqline_callback(false);
}
/* ??? Fatal Rewind needs this but I'm not sure it's accurate behavior
it causes flickering in roadrash */
// m_irq6_pending = 0;
// m_irq4_pending = 0;
}
if (regnum == 0x01)
@ -608,13 +612,7 @@ void sega315_5313_device::vdp_set_register(int regnum, u8 value)
m_lv6irqline_callback(true);
else
m_lv6irqline_callback(false);
}
/* ??? */
// m_irq6_pending = 0;
// m_irq4_pending = 0;
}
// if (regnum == 0x0a)
@ -648,7 +646,8 @@ inline u16 sega315_5313_device::vdp_get_word_from_68k_mem(u32 source)
return m_space68k->read_word(source);
else
{
printf("DMA Read unmapped %06x\n", source);
// klaxp
logerror("DMA Read unmapped %06x\n", source);
return machine().rand();
}
}
@ -1469,7 +1468,8 @@ void sega315_5313_device::render_spriteline_to_spritebuffer(int scanline)
if (pri == 1) pri = 0x80;
else pri = 0x40;
/* todo: fix me, I'm sure this isn't right but sprite 0 + other sprite seem to do something..
// FIXME: Checkout this portion
/* I'm sure this isn't right but sprite 0 + other sprite seem to do something..
maybe spritemask |= 2 should be set for anything < 0x40 ?*/
if (xpos == 0x00) spritemask |= 1;
@ -2252,6 +2252,7 @@ void sega315_5313_device::vdp_handle_scanline_callback(int scanline)
{
if (!m_use_alt_timing) m_scanline_counter++;
// osd_printf_debug("scanline %d\n", get_scanline_counter());
// TODO: arbitrary timing
m_render_timer->adjust(attotime::from_usec(1));
if (get_scanline_counter() == m_irq6_scanline)
@ -2266,11 +2267,11 @@ void sega315_5313_device::vdp_handle_scanline_callback(int scanline)
// if (get_scanline_counter() == 0) m_irq4counter = MEGADRIVE_REG0A_HINT_VALUE;
// m_irq4counter = MEGADRIVE_REG0A_HINT_VALUE;
if (get_scanline_counter()<=224)
if (get_scanline_counter() <= 224)
{
m_irq4counter--;
if (m_irq4counter== - 1)
if (m_irq4counter == -1)
{
if (m_imode == 3) m_irq4counter = MEGADRIVE_REG0A_HINT_VALUE * 2;
else m_irq4counter = MEGADRIVE_REG0A_HINT_VALUE;
@ -2279,9 +2280,12 @@ void sega315_5313_device::vdp_handle_scanline_callback(int scanline)
if (MEGADRIVE_REG0_IRQ4_ENABLE)
{
// TODO: arbitrary timing
m_irq4_on_timer->adjust(attotime::from_usec(1));
//osd_printf_debug("irq4 on scanline %d reload %d\n", get_scanline_counter(), MEGADRIVE_REG0A_HINT_VALUE);
}
else
m_irq4_on_timer->adjust(attotime::never);
}
}
else
@ -2319,7 +2323,8 @@ void sega315_5313_device::vdp_handle_eof()
int scr_mul = 1;
m_vblank_flag = 0;
//m_irq6_pending = 0; /* NO! (breaks warlock) */
// Not here, breaks warlock
//m_irq6_pending = 0;
/* Set it to -1 here, so it becomes 0 when the first timer kicks in */
if (!m_use_alt_timing) m_scanline_counter = -1;

View File

@ -367,13 +367,38 @@ uint16_t md_boot_state::barek2mb_r()
return 0x0000;
}
uint16_t md_boot_state::sonic3mb_r()
void md_sonic3bl_state::prot_w(u8 data)
{
if (m_maincpu->pc() == 0x1688) return 0x0300; // TODO: should work but doesn't? debug: just put 0x0300 at 0xfffffc during the first startup check to succesfully boot. Coins are stored in the same location
m_prot_cmd = data;
}
// logerror("sonic3mb_r : %06x\n", m_maincpu->pc());
// PIC simulation, it just handles coinage and DSWs
uint16_t md_sonic3bl_state::prot_r()
{
u16 res = 0;
switch (m_prot_cmd)
{
// POST, upper 8-bits part is fixed and needed for booting game,
// lower is DSW, cfr. PC=0x16c0/0x16c6 subroutines, lower 4 bits not actually handled by 68k side
case 0x33: res = 0x0300 | (m_in_mcu->read() & 0xff); break;
case 0x00:
// TODO: coinage
// lower 8-bits is adder for coins (i.e. with 0x202 will add 2 credits to the counter),
// bit 9 is coin state, active high
res = m_in_coin->read() & 0x88 ? 0x201 : 0;
break;
case 0x66:
// handshake or coin status after reading from commands 0x33 or 0x00,
// if bit 0 is high will tight loop until it's low
// we currently go the coin status route to not bother handling coin off manually.
res = m_in_coin->read() ? 1 : 0;
break;
default:
logerror("Unhandled %04x prot command\n", m_prot_cmd);
break;
}
return 0x0000;
return res;
}
uint16_t md_boot_state::dsw_r(offs_t offset)
@ -721,6 +746,26 @@ INPUT_PORTS_START( twinktmb )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( sonic3mb )
PORT_INCLUDE( twinktmb )
PORT_MODIFY("MCU")
// TODO: actual diplocations
// lower 4 bits is for coinage? Not read by 68k
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_DIPNAME( 0x30, 0x10, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x30, "1" )
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x10, "3" )
PORT_DIPSETTING( 0x00, "4" )
PORT_DIPNAME( 0xc0, 0x00, "Time Limit" )
PORT_DIPSETTING( 0xc0, "1:00" )
PORT_DIPSETTING( 0x80, "2:00" )
PORT_DIPSETTING( 0x40, "3:00" )
PORT_DIPSETTING( 0x00, "4:00" )
INPUT_PORTS_END
// Verified from M68000 code
INPUT_PORTS_START( srmdb )
PORT_INCLUDE( md_common )
@ -1331,10 +1376,10 @@ void md_boot_state::init_sonic2mb()
init_megadrij();
}
void md_boot_state::init_sonic3mb()
void md_sonic3bl_state::init_sonic3mb()
{
// m_maincpu->space(AS_PROGRAM).install_write_handler(0x200000, 0x200001, write16smo_delegate(*this, FUNC(md_boot_state::sonic3mb_w))); // seems to write to PIC from here
m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16smo_delegate(*this, FUNC(md_boot_state::sonic3mb_r))); // reads from PIC from here
m_maincpu->space(AS_PROGRAM).install_write_handler(0x200000, 0x200000, write8smo_delegate(*this, FUNC(md_sonic3bl_state::prot_w)));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16smo_delegate(*this, FUNC(md_sonic3bl_state::prot_r)));
init_megadrij();
}
@ -1541,7 +1586,7 @@ GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, R
GAME( 1995, topshoot, 0, md_bootleg, topshoot, md_boot_state, init_topshoot, ROT0, "Sun Mixing", "Top Shooter", 0 )
GAME( 1996, sbubsm, 0, md_bootleg, sbubsm, md_boot_state, init_sbubsm, ROT0, "Sun Mixing", "Super Bubble Bobble (Sun Mixing, Mega Drive clone hardware)", 0 )
GAME( 1993, sonic2mb, 0, md_bootleg, sonic2mb, md_boot_state, init_sonic2mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 2 (bootleg of Mega Drive version)", 0 ) // Flying wires going through the empty PIC space aren't completely understood
GAME( 1993, sonic3mb, 0, md_bootleg, twinktmb, md_boot_state, init_sonic3mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 3 (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC
GAME( 1993, sonic3mb, 0, md_bootleg, sonic3mb, md_sonic3bl_state, init_sonic3mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 3 (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC
GAME( 1994, barek2mb, 0, md_bootleg, barek2, md_boot_state, init_barek2, ROT0, "bootleg / Sega", "Bare Knuckle II (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC hook up
GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (bootleg of Mega Drive version)", 0 )
GAME( 1994, bk3ssrmb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_bk3ssrmb, ROT0, "bootleg / Sega", "Bare Knuckle III / Sunset Riders (bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // Currently boots as Bare Knuckle III, mechanism to switch game not found yet

View File

@ -8,7 +8,7 @@ class md_boot_state : public md_base_state
{
public:
md_boot_state(const machine_config &mconfig, device_type type, const char *tag)
: md_base_state(mconfig, type, tag) { m_protcount = 0;}
: md_base_state(mconfig, type, tag) { m_protcount = 0; }
void megadrvb(machine_config &config);
void md_bootleg(machine_config &config);
@ -28,7 +28,6 @@ public:
void init_barekch();
void init_bk3ssrmb();
void init_sonic2mb();
void init_sonic3mb();
void init_twinktmb();
void init_jparkmb();
void init_sbubsm();
@ -40,7 +39,6 @@ private:
uint16_t aladmdb_r();
uint16_t barek2mb_r();
uint16_t jparkmb_r();
uint16_t sonic3mb_r();
uint16_t twinktmb_r();
uint16_t dsw_r(offs_t offset);
uint16_t topshoot_200051_r();
@ -60,6 +58,27 @@ private:
int m_protcount;
};
class md_sonic3bl_state : public md_boot_state
{
public:
md_sonic3bl_state(const machine_config &mconfig, device_type type, const char *tag)
: md_boot_state(mconfig, type, tag)
, m_in_coin(*this, "COIN")
, m_in_mcu(*this, "MCU")
{ }
void init_sonic3mb();
private:
required_ioport m_in_coin;
required_ioport m_in_mcu;
void prot_w(u8 data);
uint16_t prot_r();
u8 m_prot_cmd = 0;
};
class md_boot_6button_state : public md_boot_state
{
public:

View File

@ -16,26 +16,6 @@
#define DMA_PRG (0x0500)
#define DMA_WRAM (0x0700)
// irq3 timer
#define CHECK_SCD_LV3_INTERRUPT \
if (m_lc89510_temp->get_segacd_irq_mask() & 0x08) \
{ \
m_scdcpu->set_input_line(3, HOLD_LINE); \
}
// from master
#define CHECK_SCD_LV2_INTERRUPT \
if (m_lc89510_temp->get_segacd_irq_mask() & 0x04) \
{ \
m_scdcpu->set_input_line(2, HOLD_LINE); \
}
// gfx convert
#define CHECK_SCD_LV1_INTERRUPT \
if (m_lc89510_temp->get_segacd_irq_mask() & 0x02) \
{ \
m_scdcpu->set_input_line(1, HOLD_LINE); \
}
#define SEGACD_IRQ3_TIMER_SPEED (attotime::from_nsec(m_irq3_timer_reg*30720))
@ -60,16 +40,19 @@ IRQ_CALLBACK_MEMBER(sega_segacd_device::segacd_sub_int_callback)
TIMER_DEVICE_CALLBACK_MEMBER( sega_segacd_device::irq3_timer_callback )
{
CHECK_SCD_LV3_INTERRUPT
if (m_lc89510_temp->get_segacd_irq_mask() & 0x08)
m_scdcpu->set_input_line(3, HOLD_LINE);
m_irq3_timer->adjust(SEGACD_IRQ3_TIMER_SPEED);
}
// GFX conversion
TIMER_DEVICE_CALLBACK_MEMBER( sega_segacd_device::stamp_timer_callback )
{
//printf("stamp_timer_callback\n");
CHECK_SCD_LV1_INTERRUPT
if (m_lc89510_temp->get_segacd_irq_mask() & 0x02)
m_scdcpu->set_input_line(1, HOLD_LINE);
segacd_conversion_active = 0;
@ -513,10 +496,9 @@ void sega_segacd_device::scd_a12000_halt_reset_w(offs_t offset, uint16_t data, u
if (ACCESSING_BITS_8_15)
{
if (m_a12000_halt_reset_reg & 0x0100)
{
CHECK_SCD_LV2_INTERRUPT
}
// from master CPU
if (m_a12000_halt_reset_reg & 0x0100 && m_lc89510_temp->get_segacd_irq_mask() & 0x04)
m_scdcpu->set_input_line(2, HOLD_LINE);
if (m_a12000_halt_reset_reg & 0x8000)
{
@ -1802,13 +1784,13 @@ void sega_segacd_device::device_reset()
m_total_scanlines = 262;
// HACK!!!! timegal, anettfut, roadaven end up with the SubCPU waiting in a loop for *something*
// HACK!!!! timegal, anettfut, roadaven/rbfx end up with the SubCPU waiting in a loop for *something*
// overclocking the CPU, even at the point where the game is hung, allows them to continue and boot
// I'm not sure what the source of this timing problem is, it's not using IRQ3 or StopWatch at the
// time. Changing the CDHock timer to 50hz from 75hz also stops the hang, but then the video is
// too slow and has bad sound. -- Investigate!
m_scdcpu->set_clock_scale(1.5000f);
// Update: removed, otherwise megacdj and megacd2j will black screen with no cdrom inserted.
//m_scdcpu->set_clock_scale(1.5000f);
// initialize some stuff on reset

View File

@ -27,22 +27,40 @@ Known Non-Issues (confirmed on Real Genesis)
#include "includes/megadriv.h"
#include "speaker.h"
#define LOG_AUDIOBANK (1U << 1) // z80 to 68k space window access at $8000-$ffff
#define LOG_AUDIOBUS (1U << 2) // z80 bus grants
#define LOG_AUDIORESET (1U << 3) // z80 reset line
#define VERBOSE (0)
#include "logmacro.h"
#define LOGAUDIOBANK(...) LOGMASKED(LOG_AUDIOBANK, __VA_ARGS__)
#define LOGAUDIOBUS(...) LOGMASKED(LOG_AUDIOBUS, __VA_ARGS__)
#define LOGAUDIORESET(...) LOGMASKED(LOG_AUDIORESET, __VA_ARGS__)
void md_base_state::megadriv_z80_bank_w(uint16_t data)
{
// TODO: menghu crashes here
// Tries to setup a bank of 0xff0000 from z80 side (PC=1131) after you talk with the cashier twice.
// Without a guard over it game will trash 68k memory causing a crash, works on real HW with everdrive
// so not coming from a cart copy protection.
// Update: it breaks cfodder BGM on character select at least, therefore we current don't guard against it
// Apparently reading 68k RAM from z80 is not recommended by Sega, so *writing* isn't possible lacking bus grant?
m_genz80.z80_bank_addr = ((m_genz80.z80_bank_addr >> 1) | (data << 23)) & 0xff8000;
}
void md_base_state::megadriv_68k_z80_bank_write(uint16_t data)
{
//logerror("%06x: 68k writing bit to bank register %01x\n", m_maincpu->pc(),data&0x01);
megadriv_z80_bank_w(data & 0x01);
}
void md_base_state::megadriv_z80_z80_bank_w(uint8_t data)
{
//logerror("%04x: z80 writing bit to bank register %01x\n", m_maincpu->pc(),data&0x01);
LOGAUDIOBANK("%s: port $6000 write 0x%02x ", machine().describe_context(), data);
megadriv_z80_bank_w(data & 0x01);
LOGAUDIOBANK("Current bank %08x\n", m_genz80.z80_bank_addr);
}
uint8_t md_base_state::megadriv_68k_YM2612_read(offs_t offset, uint8_t mem_mask)
@ -54,7 +72,7 @@ uint8_t md_base_state::megadriv_68k_YM2612_read(offs_t offset, uint8_t mem_mask)
}
else
{
logerror("%s: 68000 attempting to access YM2612 (read) without bus\n", machine().describe_context());
LOG("%s: 68000 attempting to access YM2612 (read) without bus\n", machine().describe_context());
return 0;
}
@ -72,7 +90,7 @@ void md_base_state::megadriv_68k_YM2612_write(offs_t offset, uint8_t data, uint8
}
else
{
logerror("%s: 68000 attempting to access YM2612 (write) without bus\n", machine().describe_context());
LOG("%s: 68000 attempting to access YM2612 (write) without bus\n", machine().describe_context());
}
}
@ -309,8 +327,10 @@ uint16_t md_base_state::megadriv_68k_io_read(offs_t offset)
switch (offset)
{
case 0:
logerror("%06x read version register\n", m_maincpu->pc());
retdata = m_version_hi_nibble | 0x01; // Version number contained in bits 3-0
LOG("%06x read version register\n", m_maincpu->pc());
// Version number contained in bits 3-0
// TODO: non-TMSS BIOSes must return 0 here
retdata = m_version_hi_nibble | 0x01;
break;
/* Joystick Port Registers */
@ -486,15 +506,13 @@ uint16_t md_base_state::megadriv_68k_read_z80_ram(offs_t offset, uint16_t mem_ma
}
else
{
logerror("%06x: 68000 attempting to access Z80 (read) address space without bus\n", m_maincpu->pc());
LOG("%06x: 68000 attempting to access Z80 (read) address space without bus\n", m_maincpu->pc());
return machine().rand();
}
}
void md_base_state::megadriv_68k_write_z80_ram(offs_t offset, uint16_t data, uint16_t mem_mask)
{
//logerror("write z80 ram\n");
if ((m_genz80.z80_has_bus == 0) && (m_genz80.z80_is_reset == 0))
{
if (!ACCESSING_BITS_0_7) // byte (MSB) access
@ -505,30 +523,33 @@ void md_base_state::megadriv_68k_write_z80_ram(offs_t offset, uint16_t data, uin
{
m_genz80.z80_prgram[(offset<<1)^1] = (data & 0x00ff);
}
else // for WORD access only the MSB is used, LSB is ignored
else
{
// for WORD access only the MSB is used, LSB is ignored
m_genz80.z80_prgram[(offset<<1)] = (data & 0xff00) >> 8;
}
}
else
{
logerror("%06x: 68000 attempting to access Z80 (write) address space without bus\n", m_maincpu->pc());
LOG("%06x: 68000 attempting to access Z80 (write) address space without bus\n", m_maincpu->pc());
}
}
/*
* ddragon, beast, superoff, and timekill have buggy sound programs.
* They request the bus, then have a loop which waits for the bus
* to be unavailable, checking for a 0 value due to bad coding. The real hardware
* appears to return bits of the next instruction in the unused bits, thus meaning
* the value is never zero. Time Killers is the most fussy, and doesn't like the
* read_next_instruction function from system16, so I just return a random value
* in the unused bits
*/
uint16_t md_base_state::megadriv_68k_check_z80_bus(offs_t offset, uint16_t mem_mask)
{
uint16_t retvalue;
/* Double Dragon, Shadow of the Beast, Super Off Road, and Time Killers have buggy
sound programs. They request the bus, then have a loop which waits for the bus
to be unavailable, checking for a 0 value due to bad coding. The real hardware
appears to return bits of the next instruction in the unused bits, thus meaning
the value is never zero. Time Killers is the most fussy, and doesn't like the
read_next_instruction function from system16, so I just return a random value
in the unused bits */
uint16_t nextvalue = machine().rand();//read_next_instruction(space)&0xff00;
uint16_t nextvalue = machine().rand(); //read_next_instruction(space)&0xff00;
/* Check if the 68k has the z80 bus */
@ -537,13 +558,13 @@ uint16_t md_base_state::megadriv_68k_check_z80_bus(offs_t offset, uint16_t mem_m
if (m_genz80.z80_has_bus || m_genz80.z80_is_reset) retvalue = nextvalue | 0x0100;
else retvalue = (nextvalue & 0xfeff);
//logerror("%06x: 68000 check z80 Bus (byte MSB access) returning %04x mask %04x\n", m_maincpu->pc(),retvalue, mem_mask);
LOGAUDIOBUS("%06x: 68000 check z80 Bus (byte MSB access) returning %04x mask %04x\n", m_maincpu->pc(),retvalue, mem_mask);
return retvalue;
}
else if (!ACCESSING_BITS_8_15) // is this valid?
{
//logerror("%06x: 68000 check z80 Bus (byte LSB access) %04x\n", m_maincpu->pc(),mem_mask);
LOGAUDIOBUS("%06x: 68000 check z80 Bus (byte LSB access) %04x\n", m_maincpu->pc(), mem_mask);
if (m_genz80.z80_has_bus || m_genz80.z80_is_reset) retvalue = 0x0001;
else retvalue = 0x0000;
@ -551,7 +572,7 @@ uint16_t md_base_state::megadriv_68k_check_z80_bus(offs_t offset, uint16_t mem_m
}
else
{
//logerror("%06x: 68000 check z80 Bus (word access) %04x\n", m_maincpu->pc(),mem_mask);
LOGAUDIOBUS("%06x: 68000 check z80 Bus (word access) %04x\n", m_maincpu->pc(),mem_mask);
if (m_genz80.z80_has_bus || m_genz80.z80_is_reset) retvalue = nextvalue | 0x0100;
else retvalue = (nextvalue & 0xfeff);
@ -564,6 +585,7 @@ uint16_t md_base_state::megadriv_68k_check_z80_bus(offs_t offset, uint16_t mem_m
TIMER_CALLBACK_MEMBER(md_base_state::megadriv_z80_run_state)
{
/* Is the z80 RESET line pulled? */
// TODO: Z80 /RESET
if (m_genz80.z80_is_reset)
{
m_z80snd->reset();
@ -573,6 +595,7 @@ TIMER_CALLBACK_MEMBER(md_base_state::megadriv_z80_run_state)
else
{
/* Check if z80 has the bus */
// TODO: Z80 /BUSREQ
if (m_genz80.z80_has_bus)
m_z80snd->resume(SUSPEND_REASON_HALT);
else
@ -588,12 +611,12 @@ void md_base_state::megadriv_68k_req_z80_bus(offs_t offset, uint16_t data, uint1
{
if (data & 0x0100)
{
//logerror("%06x: 68000 request z80 Bus (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIOBUS("%06x: 68000 request z80 Bus (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_has_bus = 0;
}
else
{
//logerror("%06x: 68000 return z80 Bus (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIOBUS("%06x: 68000 return z80 Bus (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_has_bus = 1;
}
}
@ -601,12 +624,12 @@ void md_base_state::megadriv_68k_req_z80_bus(offs_t offset, uint16_t data, uint1
{
if (data & 0x0001)
{
//logerror("%06x: 68000 request z80 Bus (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIOBUS("%06x: 68000 request z80 Bus (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_has_bus = 0;
}
else
{
//logerror("%06x: 68000 return z80 Bus (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIOBUS("%06x: 68000 return z80 Bus (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_has_bus = 1;
}
}
@ -614,12 +637,12 @@ void md_base_state::megadriv_68k_req_z80_bus(offs_t offset, uint16_t data, uint1
{
if (data & 0x0100)
{
//logerror("%06x: 68000 request z80 Bus (word access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIOBUS("%06x: 68000 request z80 Bus (word access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_has_bus = 0;
}
else
{
//logerror("%06x: 68000 return z80 Bus (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIOBUS("%06x: 68000 return z80 Bus (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_has_bus = 1;
}
}
@ -635,12 +658,12 @@ void md_base_state::megadriv_68k_req_z80_reset(offs_t offset, uint16_t data, uin
{
if (data & 0x0100)
{
//logerror("%06x: 68000 clear z80 reset (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIORESET("%06x: 68000 clear z80 reset (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_is_reset = 0;
}
else
{
//logerror("%06x: 68000 start z80 reset (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIORESET("%06x: 68000 start z80 reset (byte MSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_is_reset = 1;
}
}
@ -648,12 +671,12 @@ void md_base_state::megadriv_68k_req_z80_reset(offs_t offset, uint16_t data, uin
{
if (data & 0x0001)
{
//logerror("%06x: 68000 clear z80 reset (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIORESET("%06x: 68000 clear z80 reset (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_is_reset = 0;
}
else
{
//logerror("%06x: 68000 start z80 reset (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIORESET("%06x: 68000 start z80 reset (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_is_reset = 1;
}
}
@ -661,12 +684,12 @@ void md_base_state::megadriv_68k_req_z80_reset(offs_t offset, uint16_t data, uin
{
if (data & 0x0100)
{
//logerror("%06x: 68000 clear z80 reset (word access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIORESET("%06x: 68000 clear z80 reset (word access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_is_reset = 0;
}
else
{
//logerror("%06x: 68000 start z80 reset (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
LOGAUDIORESET("%06x: 68000 start z80 reset (byte LSB access) %04x %04x\n", m_maincpu->pc(),data,mem_mask);
m_genz80.z80_is_reset = 1;
}
}
@ -756,7 +779,7 @@ void md_base_state::megadriv_z80_map(address_map &map)
void md_base_state::megadriv_z80_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x0000, 0xff).noprw();
map(0x00, 0xff).noprw();
}
uint32_t md_base_state::screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)