summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2018-01-13 16:07:07 -0500
committer arbee <rb6502@users.noreply.github.com>2018-01-13 16:07:07 -0500
commit583db889a4613e80c8d9f59e6cedcd14dc05c535 (patch)
tree95bc3c8d41cd4ca8b4101862cdb17865bd00ab14
parent70eef438bb382697ad24b06fe3a4e358bc9d6fd1 (diff)
parentc94f2a6f479cbc60ac05e0b42b39c9bd2b5e3cc1 (diff)
Merge branch 'master' of https://github.com/mamedev/mame
-rw-r--r--hash/ibm5150.xml23
-rw-r--r--hash/ibm5170.xml58
-rw-r--r--src/mame/drivers/radicasi.cpp433
-rw-r--r--src/mame/drivers/snowbros.cpp30
-rw-r--r--src/mame/mame.lst1
5 files changed, 427 insertions, 118 deletions
diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml
index 3ea8d94ecea..8df6113fe54 100644
--- a/hash/ibm5150.xml
+++ b/hash/ibm5150.xml
@@ -9139,17 +9139,17 @@ has been replaced with an all-zero block. -->
</software>
<software name="spdball2">
- <description>Speedball II - Brutal Deluxe</description>
+ <description>Speedball 2 - Brutal Deluxe</description>
<year>1990</year>
<publisher>Imageworks</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size = "368640">
- <rom name="Speedball II - Brutal Deluxe (1990)(Imageworks)(Disk 1 of 2).dsk" size="368640" crc="7076b522" sha1="80e4d60ebe4c948f13897fb74c403b22a2acfceb" offset="0"/>
+ <rom name="Speedball 2 - Brutal Deluxe (1990)(Imageworks)(Disk 1 of 2).dsk" size="368640" crc="7076b522" sha1="80e4d60ebe4c948f13897fb74c403b22a2acfceb" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<dataarea name="flop" size = "368640">
- <rom name="Speedball II - Brutal Deluxe (1990)(Imageworks)(Disk 2 of 2).dsk" size="368640" crc="09fc221a" sha1="a71468919cb0d32706de00dae2cc14ca0b471a62" offset="0"/>
+ <rom name="Speedball 2 - Brutal Deluxe (1990)(Imageworks)(Disk 2 of 2).dsk" size="368640" crc="09fc221a" sha1="a71468919cb0d32706de00dae2cc14ca0b471a62" offset="0"/>
</dataarea>
</part>
</software>
@@ -9208,6 +9208,23 @@ has been replaced with an all-zero block. -->
</part>
</software>
+ <software name="stellar7">
+ <description>Stellar 7</description>
+ <year>1990</year>
+ <publisher>Dynamix</publisher>
+ <info name="developer" value="Dynamix" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Stellar 7 [Dynamix] [1990] [3.5DD] [Disk 1 of 2].img" size="737280" crc="9b0db70d" sha1="0a7264e6fb359e171166c21a761aa37764a298b1" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Stellar 7 [Dynamix] [1990] [3.5DD] [Disk 2 of 2].img" size="737280" crc="c828a588" sha1="f27f78e79d5a9cc0a26d3b0fa26ebb671db40765" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="strkforc">
<description>Strike Force</description>
<!-- compilation of Striker, Flightmare, The Red Baron, and Kamikazi Alien -->
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index fd8f18a41b1..7c140fb0704 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -7142,6 +7142,42 @@
</part>
</software>
+ <software name="bstone">
+ <description>Blake Stone: Aliens of Gold (v3.0)</description>
+ <year>1994</year>
+ <publisher>Apogee Software</publisher>
+ <info name="developer" value="JAM Productions" />
+ <info name="version" value="3.0" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Blake Stone - Aliens of Gold (3.0) [Apogee Software] [1994] [3.5HD] [Disk 1 of 2].img" size="1474560" crc="1f60fad0" sha1="74af4ff89c839a4dca219160bdb1fdc76a654ce7" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Blake Stone - Aliens of Gold (3.0) [Apogee Software] [1994] [3.5HD] [Disk 2 of 2].img" size="1474560" crc="f0789329" sha1="c7851394eba175afd084ac5ee5910044bb2e7f6c" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bstonea" cloneof="bstone">
+ <description>Blake Stone: Aliens of Gold (v2.1)</description>
+ <year>1994</year>
+ <publisher>Apogee Software</publisher>
+ <info name="developer" value="JAM Productions" />
+ <info name="version" value="2.1" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Blake Stone - Aliens of Gold (2.1) [Apogee Software] [1994] [3.5HD] [Disk 1 of 2].img" size="1474560" crc="f3207ca6" sha1="d7a19072c14aed709ab84c94589acac9d811d6c1" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Blake Stone - Aliens of Gold (2.1) [Apogee Software] [1994] [3.5HD] [Disk 2 of 2].img" size="1474560" crc="c241071f" sha1="6579c53898a6ced800caa18a3059b2468e259073" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="bodyblow">
<description>Body Blows</description>
<year>1993</year>
@@ -9473,6 +9509,28 @@
</part>
</software>
+ <software name="simonsrc">
+ <description>Simon the Sorcerer</description>
+ <year>1993</year>
+ <publisher>Infocom</publisher>
+ <info name="developer" value="Adventuresoft" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Simon The Sorcerer [Infocom] [1993] [3.5HD] [Disk 1 of 3].img" size="1474560" crc="1539a70a" sha1="c877dfb10479eb39ff0676a9d0d6a66976f631b5" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Simon The Sorcerer [Infocom] [1993] [3.5HD] [Disk 2 of 3].img" size="1474560" crc="f8021446" sha1="031580bd049edb0c94efae69809c37f7bc64f7ee" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Simon The Sorcerer [Infocom] [1993] [3.5HD] [Disk 3 of 3].img" size="1474560" crc="a6dccd4c" sha1="6cf2d9689176fda1a69b29b3bb9e82bc8073f256" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="sq5">
<description>Space Quest V: The Next Mutation (3.5", v1.04)</description>
<year>1993</year>
diff --git a/src/mame/drivers/radicasi.cpp b/src/mame/drivers/radicasi.cpp
index cb17a2613de..39551c662c5 100644
--- a/src/mame/drivers/radicasi.cpp
+++ b/src/mame/drivers/radicasi.cpp
@@ -77,18 +77,36 @@ public:
DECLARE_READ8_MEMBER(radicasi_sprite_gfxbase_hi_r);
// unknown rom bases
- DECLARE_WRITE8_MEMBER(radicasi_unkreg1_hi_w);
- DECLARE_READ8_MEMBER(radicasi_unkreg1_hi_r);
- DECLARE_WRITE8_MEMBER(radicasi_unkreg2_hi_w);
- DECLARE_READ8_MEMBER(radicasi_unkreg2_hi_r);
- DECLARE_WRITE8_MEMBER(radicasi_unkreg3_hi_w);
- DECLARE_READ8_MEMBER(radicasi_unkreg3_hi_r);
- DECLARE_WRITE8_MEMBER(radicasi_unkreg4_hi_w);
- DECLARE_READ8_MEMBER(radicasi_unkreg4_hi_r);
- DECLARE_WRITE8_MEMBER(radicasi_unkreg5_hi_w);
- DECLARE_READ8_MEMBER(radicasi_unkreg5_hi_r);
- DECLARE_WRITE8_MEMBER(radicasi_unkreg6_hi_w);
- DECLARE_READ8_MEMBER(radicasi_unkreg6_hi_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_0_0_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_0_0_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_0_1_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_0_1_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_0_2_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_0_2_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_0_3_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_0_3_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_0_4_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_0_4_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_0_5_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_0_5_r);
+
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_1_0_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_1_0_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_1_1_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_1_1_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_1_2_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_1_2_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_1_3_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_1_3_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_1_4_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_1_4_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_1_5_w);
+ DECLARE_READ8_MEMBER(radicasi_unkregs_1_5_r);
+
+ DECLARE_READ8_MEMBER(radicasi_unkregs_trigger_r);
+ DECLARE_WRITE8_MEMBER(radicasi_unkregs_trigger_w);
+
+ DECLARE_WRITE8_MEMBER(radicasi_5027_w);
DECLARE_READ8_MEMBER(radicasi_500b_r);
DECLARE_READ8_MEMBER(radicasi_500d_r);
@@ -109,6 +127,7 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
uint8_t m_500d_data;
+ uint8_t m_5027_data;
uint8_t m_palbase_lo_data;
uint8_t m_palbase_hi_data;
@@ -119,13 +138,21 @@ private:
uint8_t m_sprite_gfxbase_lo_data;
uint8_t m_sprite_gfxbase_hi_data;
- uint8_t m_unkreg1_hi_data;
- uint8_t m_unkreg2_hi_data;
- uint8_t m_unkreg3_hi_data;
- uint8_t m_unkreg4_hi_data;
- uint8_t m_unkreg5_hi_data;
- uint8_t m_unkreg6_hi_data;
+ uint16_t m_unkregs_0_address[6];
+ uint8_t m_unkregs_0_unk[6];
+ uint8_t m_unkregs_1_unk0[6];
+ uint8_t m_unkregs_1_unk1[6];
+ uint8_t m_unkregs_1_unk2[6];
+
+ uint8_t m_unkregs_trigger;
+
+ void handle_trigger(int which);
+
+ void handle_unkregs_0_w(int which, int offset, uint8_t data);
+ uint8_t handle_unkregs_0_r(int which, int offset);
+ void handle_unkregs_1_w(int which, int offset, uint8_t data);
+ uint8_t handle_unkregs_1_r(int which, int offset);
int m_hackmode;
};
@@ -148,7 +175,7 @@ uint32_t radica_6502_state::screen_update(screen_device &screen, bitmap_ind16 &b
if (machine().input().code_pressed_once(KEYCODE_Q))
{
m_hackmode++;
- if (m_hackmode == 3) m_hackmode = 0;
+ if (m_hackmode == 2) m_hackmode = 0;
}
// it is unclear if the tilemap is an internal structure or something actually used by the video rendering
@@ -157,70 +184,72 @@ uint32_t radica_6502_state::screen_update(screen_device &screen, bitmap_ind16 &b
// we draw the tiles as 8x1 strips as that's how they're stored in ROM
// it might be they're format shifted at some point tho as I doubt it draws direct from ROM
- // is the data at 0x000 in ROM the palette? can't work out the format if so.
- if (m_hackmode == 0) // 16x16 tiles 4bpp (menu)
+ if (m_hackmode == 0)
{
- for (int y = 0; y < 16; y++)
+ if (m_5027_data & 0x40) // 16x16 tiles
{
- for (int x = 0; x < 16; x++)
+ for (int y = 0; y < 16; y++)
{
- gfx_element *gfx = m_gfxdecode->gfx(0);
-
- int tile = m_ram[offs] + (m_ram[offs + 1] << 8);
- int attr = (m_ram[offs + 3]); // set to 0x07 on the radica logo, 0x00 on the game select screen
-
- if (attr == 0)
- {
- /* this logic allows us to see the Taito logo and menu screen */
- gfx = m_gfxdecode->gfx(0); // 4bpp
- tile = (tile & 0xf) + ((tile & ~0xf) * 16);
- tile += ((m_tile_gfxbase_lo_data | m_tile_gfxbase_hi_data << 8) << 5);
- tile <<= 1; // due to 16 pixel wide
- }
- else
+ for (int x = 0; x < 16; x++)
{
- gfx = m_gfxdecode->gfx(2); // 8bpp
- tile = (tile & 0xf) + ((tile & ~0xf) * 16);
- tile <<= 1; // due to 16 pixel wide
-
- // why after the shift in this case?
- tile += ((m_tile_gfxbase_lo_data | m_tile_gfxbase_hi_data << 8) << 5);
+ gfx_element *gfx = m_gfxdecode->gfx(0);
+
+ int tile = m_ram[offs] + (m_ram[offs + 1] << 8);
+ //int attr = (m_ram[offs + 3]); // set to 0x07 on the radica logo, 0x00 on the game select screen
+
+ if (m_5027_data & 0x20) // 4bpp mode
+ {
+ /* this logic allows us to see the Taito logo and menu screen */
+ gfx = m_gfxdecode->gfx(0); // 4bpp
+ tile = (tile & 0xf) + ((tile & ~0xf) * 16);
+ tile += ((m_tile_gfxbase_lo_data | m_tile_gfxbase_hi_data << 8) << 5);
+ tile <<= 1; // due to 16 pixel wide
+ }
+ else
+ {
+ gfx = m_gfxdecode->gfx(2); // 8bpp
+ tile = (tile & 0xf) + ((tile & ~0xf) * 16);
+ tile <<= 1; // due to 16 pixel wide
+
+ // why after the shift in this case?
+ tile += ((m_tile_gfxbase_lo_data | m_tile_gfxbase_hi_data << 8) << 5);
+ }
+
+ for (int i = 0; i < 16; i++)
+ {
+ gfx->transpen(bitmap, cliprect, tile + i * 32, 0, 0, 0, x * 16, (y * 16) + i, 0);
+ gfx->transpen(bitmap, cliprect, (tile + i * 32) + 1, 0, 0, 0, (x * 16) + 8, (y * 16) + i, 0);
+ }
+
+ offs += 4;
}
-
- for (int i = 0; i < 16; i++)
- {
- gfx->transpen(bitmap, cliprect, tile + i * 32, 0, 0, 0, x * 16, (y * 16) + i, 0);
- gfx->transpen(bitmap, cliprect, (tile + i * 32) + 1, 0, 0, 0, (x * 16) + 8, (y * 16) + i, 0);
- }
-
- offs += 4;
}
}
- }
- else if (m_hackmode == 1) // 8x8 tiles (games)
- {
- gfx_element *gfx = m_gfxdecode->gfx(2);
-
- for (int y = 0; y < 32; y++)
+ else // 8x8 tiles
{
- for (int x = 0; x < 32; x++)
+ gfx_element *gfx = m_gfxdecode->gfx(2);
+
+ for (int y = 0; y < 32; y++)
{
- int tile = m_ram[offs] + (m_ram[offs + 1] << 8);
+ for (int x = 0; x < 32; x++)
+ {
+ int tile = m_ram[offs] + (m_ram[offs + 1] << 8);
- tile = (tile & 0x1f) + ((tile & ~0x1f) * 8);
- tile += ((m_tile_gfxbase_lo_data | m_tile_gfxbase_hi_data << 8) << 5);
+ tile = (tile & 0x1f) + ((tile & ~0x1f) * 8);
+ tile += ((m_tile_gfxbase_lo_data | m_tile_gfxbase_hi_data << 8) << 5);
- for (int i = 0; i < 8; i++)
- {
- gfx->transpen(bitmap, cliprect, tile + i * 32, 0, 0, 0, x * 8, (y * 8) + i, 0);
+ for (int i = 0; i < 8; i++)
+ {
+ gfx->transpen(bitmap, cliprect, tile + i * 32, 0, 0, 0, x * 8, (y * 8) + i, 0);
+ }
+ offs += 4;
}
- offs += 4;
}
}
}
- else if (m_hackmode == 2) // qix
+ else if (m_hackmode == 1) // qix
{
for (int y = 0; y < 224; y++)
{
@@ -347,81 +376,239 @@ READ8_MEMBER(radica_6502_state::radicasi_palbase_hi_r)
}
// unknown regs that seem to also be pointers
+// seem to get set to sound data?
+
+void radica_6502_state::handle_unkregs_0_w(int which, int offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 0x00:
+ m_unkregs_0_unk[which] = data;
+ logerror("%s: unkregs_0 (%d) write to unknown param %02x\n", machine().describe_context().c_str(), which, data);
+ break;
+
+ case 0x01:
+ m_unkregs_0_address[which] = (m_unkregs_0_address[which] & 0xff00) | data;
+ logerror("%s: unkregs_0 (%d) write lo address %02x (real address is now %08x)\n", machine().describe_context().c_str(), which, data, m_unkregs_0_address[which]*0x100);
+ break;
+
+ case 0x02:
+ m_unkregs_0_address[which] = (m_unkregs_0_address[which] & 0x00ff) | (data<<8);
+ logerror("%s: unkregs_0 (%d) write hi address %02x (real address is now %08x)\n", machine().describe_context().c_str(), which, data, m_unkregs_0_address[which]*0x100);
+ break;
+ }
+}
+
+uint8_t radica_6502_state::handle_unkregs_0_r(int which, int offset)
+{
+ switch (offset)
+ {
+ case 0x00:
+ logerror("%s: unkregs_0 (%d) read from unknown param\n", machine().describe_context().c_str(), which);
+ return m_unkregs_0_unk[which];
+
+ case 0x01:
+ logerror("%s: unkregs_0 (%d) read lo address\n", machine().describe_context().c_str(), which);
+ return m_unkregs_0_address[which] & 0x00ff;
+
+ case 0x02:
+ logerror("%s: unkregs_0 (%d) read hi address\n", machine().describe_context().c_str(), which);
+ return (m_unkregs_0_address[which]>>8) & 0x00ff;
+ }
+
+ return 0x00;
+}
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_0_0_w)
+{
+ handle_unkregs_0_w(0,offset,data);
+}
+
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_0_0_r)
+{
+ return handle_unkregs_0_r(0,offset);
+}
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_0_1_w)
+{
+ handle_unkregs_0_w(1,offset,data);
+}
+
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_0_1_r)
+{
+ return handle_unkregs_0_r(1,offset);
+}
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_0_2_w)
+{
+ handle_unkregs_0_w(2,offset,data);
+}
+
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_0_2_r)
+{
+ return handle_unkregs_0_r(2,offset);
+}
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_0_3_w)
+{
+ handle_unkregs_0_w(3,offset,data);
+}
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_0_3_r)
+{
+ return handle_unkregs_0_r(3,offset);
+}
-WRITE8_MEMBER(radica_6502_state::radicasi_unkreg1_hi_w)
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_0_4_w)
{
- logerror("%s: radicasi_unkreg1_hi_w (unknown register 1 base upper) %02x\n", machine().describe_context().c_str(), data);
- m_unkreg1_hi_data = data;
+ handle_unkregs_0_w(4,offset,data);
}
-READ8_MEMBER(radica_6502_state::radicasi_unkreg1_hi_r)
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_0_4_r)
{
- logerror("%s: radicasi_unkreg1_hi_r (unknown register 1 base upper)\n", machine().describe_context().c_str());
- return m_unkreg1_hi_data;
+ return handle_unkregs_0_r(4,offset);
}
-WRITE8_MEMBER(radica_6502_state::radicasi_unkreg2_hi_w)
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_0_5_w)
{
- logerror("%s: radicasi_unkreg2_hi_w (unknown register 2 base upper) %02x\n", machine().describe_context().c_str(), data);
- m_unkreg2_hi_data = data;
+ handle_unkregs_0_w(5,offset,data);
}
-READ8_MEMBER(radica_6502_state::radicasi_unkreg2_hi_r)
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_0_5_r)
{
- logerror("%s: radicasi_unkreg2_hi_r (unknown register 2 base upper)\n", machine().describe_context().c_str());
- return m_unkreg2_hi_data;
+ return handle_unkregs_0_r(5,offset);
}
-WRITE8_MEMBER(radica_6502_state::radicasi_unkreg3_hi_w)
+void radica_6502_state::handle_unkregs_1_w(int which, int offset, uint8_t data)
{
- logerror("%s: radicasi_unkreg3_hi_w (unknown register 3 base upper) %02x\n", machine().describe_context().c_str(), data);
- m_unkreg3_hi_data = data;
+ switch (offset)
+ {
+ case 0x00:
+ m_unkregs_1_unk0[which] = data;
+ logerror("%s: unkregs_1 (%d) write to unknown param 0 %02x\n", machine().describe_context().c_str(), which, data);
+ break;
+
+ case 0x01:
+ m_unkregs_1_unk1[which] = data;
+ logerror("%s: unkregs_1 (%d) write to unknown param 1 %02x\n", machine().describe_context().c_str(), which, data);
+ break;
+
+ case 0x02:
+ m_unkregs_1_unk2[which] = data;
+ logerror("%s: unkregs_1 (%d) write to unknown param 2 %02x\n", machine().describe_context().c_str(), which, data);
+ break;
+ }
}
-READ8_MEMBER(radica_6502_state::radicasi_unkreg3_hi_r)
+uint8_t radica_6502_state::handle_unkregs_1_r(int which, int offset)
{
- logerror("%s: radicasi_unkreg3_hi_r (unknown register 3 base upper)\n", machine().describe_context().c_str());
- return m_unkreg3_hi_data;
+ switch (offset)
+ {
+ case 0x00:
+ logerror("%s: unkregs_1 (%d) read from unknown param 0\n", machine().describe_context().c_str(), which);
+ return m_unkregs_1_unk0[which];
+
+ case 0x01:
+ logerror("%s: unkregs_1 (%d) read from unknown param 1\n", machine().describe_context().c_str(), which);
+ return m_unkregs_1_unk1[which];
+
+ case 0x02:
+ logerror("%s: unkregs_1 (%d) read from unknown param 2\n", machine().describe_context().c_str(), which);
+ return m_unkregs_1_unk2[which];
+ }
+
+ return 0x00;
}
-WRITE8_MEMBER(radica_6502_state::radicasi_unkreg4_hi_w)
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_1_0_w)
{
- logerror("%s: radicasi_unkreg4_hi_w (unknown register 4 base upper) %02x\n", machine().describe_context().c_str(), data);
- m_unkreg4_hi_data = data;
+ handle_unkregs_1_w(0,offset,data);
}
-READ8_MEMBER(radica_6502_state::radicasi_unkreg4_hi_r)
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_1_0_r)
{
- logerror("%s: radicasi_unkreg4_hi_r (unknown register 4 base upper)\n", machine().describe_context().c_str());
- return m_unkreg4_hi_data;
+ return handle_unkregs_1_r(0,offset);
}
-WRITE8_MEMBER(radica_6502_state::radicasi_unkreg5_hi_w)
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_1_1_w)
{
- logerror("%s: radicasi_unkreg5_hi_w (unknown register 5 base upper) %02x\n", machine().describe_context().c_str(), data);
- m_unkreg5_hi_data = data;
+ handle_unkregs_1_w(1,offset,data);
}
-READ8_MEMBER(radica_6502_state::radicasi_unkreg5_hi_r)
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_1_1_r)
{
- logerror("%s: radicasi_unkreg5_hi_r (unknown register 5 base upper)\n", machine().describe_context().c_str());
- return m_unkreg5_hi_data;
+ return handle_unkregs_1_r(1,offset);
}
-WRITE8_MEMBER(radica_6502_state::radicasi_unkreg6_hi_w)
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_1_2_w)
{
- logerror("%s: radicasi_unkreg6_hi_w (unknown register 6 base upper) %02x\n", machine().describe_context().c_str(), data);
- m_unkreg6_hi_data = data;
+ handle_unkregs_1_w(2,offset,data);
}
-READ8_MEMBER(radica_6502_state::radicasi_unkreg6_hi_r)
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_1_2_r)
{
- logerror("%s: radicasi_unkreg6_hi_r (unknown register 6 base upper)\n", machine().describe_context().c_str());
- return m_unkreg6_hi_data;
+ return handle_unkregs_1_r(2,offset);
}
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_1_3_w)
+{
+ handle_unkregs_1_w(3,offset,data);
+}
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_1_3_r)
+{
+ return handle_unkregs_1_r(3,offset);
+}
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_1_4_w)
+{
+ handle_unkregs_1_w(4,offset,data);
+}
+
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_1_4_r)
+{
+ return handle_unkregs_1_r(4,offset);
+}
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_1_5_w)
+{
+ handle_unkregs_1_w(5,offset,data);
+}
+
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_1_5_r)
+{
+ return handle_unkregs_1_r(5,offset);
+}
+
+// do something with the above..
+READ8_MEMBER(radica_6502_state::radicasi_unkregs_trigger_r)
+{
+ logerror("%s: unkregs read from trigger?\n", machine().describe_context().c_str());
+ return m_unkregs_trigger;
+}
+
+
+WRITE8_MEMBER(radica_6502_state::radicasi_unkregs_trigger_w)
+{
+ logerror("%s: unkregs write to trigger? %02x\n", machine().describe_context().c_str(), data);
+ m_unkregs_trigger= data;
+
+ for (int i = 0; i < 6; i++)
+ {
+ int bit = (data >> i)&1;
+
+ if (bit)
+ handle_trigger(i);
+ }
+
+ if (data & 0xc0)
+ logerror(" UNEXPECTED BITS SET");
+}
+
+void radica_6502_state::handle_trigger(int which)
+{
+ logerror("Triggering operation on channel (%d) with params %02x %06x %02x %02x %02x\n", which, m_unkregs_0_unk[which], m_unkregs_0_address[which] * 0x100, m_unkregs_1_unk0[which], m_unkregs_1_unk1[which], m_unkregs_1_unk2[which]);
+}
READ8_MEMBER(radica_6502_state::radicasi_50a8_r)
@@ -430,6 +617,18 @@ READ8_MEMBER(radica_6502_state::radicasi_50a8_r)
return 0x3f;
}
+WRITE8_MEMBER(radica_6502_state::radicasi_5027_w)
+{
+ logerror("%s: radicasi_5027_w %02x (video control?)\n", machine().describe_context().c_str(), data);
+ /*
+ c3 8bpp 16x16 1100 0011
+ e3 4bpp 16x16 1110 0011
+ 83 8bpp 8x8 1000 0011
+ 02 8bpp 8x8 (phoenix) 0000 0010
+ */
+ m_5027_data = data;
+}
+
static ADDRESS_MAP_START( radicasi_map, AS_PROGRAM, 8, radica_6502_state )
AM_RANGE(0x0000, 0x3fff) AM_RAM AM_SHARE("ram") // ends up copying code to ram, but could be due to banking issues
AM_RANGE(0x4800, 0x49ff) AM_RAM
@@ -441,27 +640,33 @@ static ADDRESS_MAP_START( radicasi_map, AS_PROGRAM, 8, radica_6502_state )
AM_RANGE(0x5010, 0x5010) AM_READWRITE(radicasi_palbase_lo_r, radicasi_palbase_lo_w) // palettebase
AM_RANGE(0x5011, 0x5011) AM_READWRITE(radicasi_palbase_hi_r, radicasi_palbase_hi_w) // palettebase
+ AM_RANGE(0x5027, 0x5027) AM_WRITE(radicasi_5027_w)
+
AM_RANGE(0x5029, 0x5029) AM_READWRITE(radicasi_tile_gfxbase_lo_r, radicasi_tile_gfxbase_lo_w) // tilebase
AM_RANGE(0x502a, 0x502a) AM_READWRITE(radicasi_tile_gfxbase_hi_r, radicasi_tile_gfxbase_hi_w) // tilebase
AM_RANGE(0x502b, 0x502b) AM_READWRITE(radicasi_sprite_gfxbase_lo_r, radicasi_sprite_gfxbase_lo_w) // tilebase (spr?)
AM_RANGE(0x502c, 0x502c) AM_READWRITE(radicasi_sprite_gfxbase_hi_r, radicasi_sprite_gfxbase_hi_w) // tilebase (spr?)
- AM_RANGE(0x5041, 0x5041) AM_READ_PORT("IN0") // AM_READ(radicasi_5041_r)
+ AM_RANGE(0x5041, 0x5041) AM_READ_PORT("IN0")
// These might be sound / DMA channels?
- AM_RANGE(0x5082, 0x5082) AM_READWRITE(radicasi_unkreg1_hi_r, radicasi_unkreg1_hi_w) // set to 0x33, so probably another 'high' address bits reg
-
- AM_RANGE(0x5085, 0x5085) AM_READWRITE(radicasi_unkreg2_hi_r, radicasi_unkreg2_hi_w) // set to 0x33, so probably another 'high' address bits reg
-
- AM_RANGE(0x5088, 0x5088) AM_READWRITE(radicasi_unkreg3_hi_r, radicasi_unkreg3_hi_w) // set to 0x33, so probably another 'high' address bits reg
-
- AM_RANGE(0x508b, 0x508b) AM_READWRITE(radicasi_unkreg4_hi_r, radicasi_unkreg4_hi_w) // set to 0x33, so probably another 'high' address bits reg
-
- AM_RANGE(0x508e, 0x508e) AM_READWRITE(radicasi_unkreg5_hi_r, radicasi_unkreg5_hi_w) // set to 0x33, so probably another 'high' address bits reg
-
- AM_RANGE(0x5091, 0x5091) AM_READWRITE(radicasi_unkreg6_hi_r, radicasi_unkreg6_hi_w) // set to 0x33, so probably another 'high' address bits reg
+ AM_RANGE(0x5080, 0x5082) AM_READWRITE(radicasi_unkregs_0_0_r, radicasi_unkregs_0_0_w) // 5082 set to 0x33, so probably another 'high' address bits reg
+ AM_RANGE(0x5083, 0x5085) AM_READWRITE(radicasi_unkregs_0_1_r, radicasi_unkregs_0_1_w) // 5085 set to 0x33, so probably another 'high' address bits reg
+ AM_RANGE(0x5086, 0x5088) AM_READWRITE(radicasi_unkregs_0_2_r, radicasi_unkregs_0_2_w) // 5088 set to 0x33, so probably another 'high' address bits reg
+ AM_RANGE(0x5089, 0x508b) AM_READWRITE(radicasi_unkregs_0_3_r, radicasi_unkregs_0_3_w) // 508b set to 0x33, so probably another 'high' address bits reg
+ AM_RANGE(0x508c, 0x508e) AM_READWRITE(radicasi_unkregs_0_4_r, radicasi_unkregs_0_4_w) // 508e set to 0x33, so probably another 'high' address bits reg
+ AM_RANGE(0x508f, 0x5091) AM_READWRITE(radicasi_unkregs_0_5_r, radicasi_unkregs_0_5_w) // 5091 set to 0x33, so probably another 'high' address bits reg
+ // these are set at the same time as the above, so probably additional params 0x5092 is used with 0x5080 etc.
+ AM_RANGE(0x5092, 0x5094) AM_READWRITE(radicasi_unkregs_1_0_r, radicasi_unkregs_1_0_w)
+ AM_RANGE(0x5095, 0x5097) AM_READWRITE(radicasi_unkregs_1_1_r, radicasi_unkregs_1_1_w)
+ AM_RANGE(0x5098, 0x509a) AM_READWRITE(radicasi_unkregs_1_2_r, radicasi_unkregs_1_2_w)
+ AM_RANGE(0x509b, 0x509d) AM_READWRITE(radicasi_unkregs_1_3_r, radicasi_unkregs_1_3_w)
+ AM_RANGE(0x509e, 0x50a0) AM_READWRITE(radicasi_unkregs_1_4_r, radicasi_unkregs_1_4_w)
+ AM_RANGE(0x50a1, 0x50a3) AM_READWRITE(radicasi_unkregs_1_5_r, radicasi_unkregs_1_5_w)
+
+ AM_RANGE(0x50a5, 0x50a5) AM_READWRITE(radicasi_unkregs_trigger_r, radicasi_unkregs_trigger_w)
AM_RANGE(0x50a8, 0x50a8) AM_READ(radicasi_50a8_r)
diff --git a/src/mame/drivers/snowbros.cpp b/src/mame/drivers/snowbros.cpp
index a7f4050b11e..284273284a4 100644
--- a/src/mame/drivers/snowbros.cpp
+++ b/src/mame/drivers/snowbros.cpp
@@ -2587,6 +2587,33 @@ ROM_START( cookbib2 )
ROM_LOAD( "cookbib2.03", 0x100000, 0x40000, CRC(e1604821) SHA1(bede6bdd8331128b9f2b229d718133470bf407c9) )
ROM_END
+ROM_START( cookbib2a )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "uh12.020", 0x00001, 0x40000, CRC(a44ec1f8) SHA1(0c741bf38f5cf667586cd1925417b6e17dbb8916) )
+ ROM_LOAD16_BYTE( "ui12.020", 0x00000, 0x40000, CRC(bdbcd0d1) SHA1(9a6a85a492c21f6dd5daef964071a8a1c62f73c8) )
+
+ ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
+ ROM_LOAD( "u1.512", 0x00000, 0x10000 , CRC(f59f1c9a) SHA1(2830261fd55249e015514fcb4cf8392e83b7fd0d) )
+
+ ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
+ ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
+
+ ROM_REGION( 0x200, "user1", 0 ) /* Data from Shared RAM */
+ /* this is not a real rom but instead the data extracted from
+ shared ram, the MCU puts it there
+
+ this one is hacked from the cookbib2 one, absolute code jump needed to be changed at least */
+ ROM_LOAD16_WORD_SWAP( "protdata_alt.bin", 0x00000, 0x200, BAD_DUMP CRC(bc136ead) SHA1(96459c2ccf7f95880421ba082c2414fa1040f3ed) )
+
+ ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
+ ROM_LOAD( "uj15.010", 0x00000, 0x20000, CRC(5e6f76b8) SHA1(725800143dfeaa6093ed5fcc5b9f15678ae9e547) )
+
+ ROM_REGION( 0x180000, "gfx1", 0 ) /* Sprites */
+ ROM_LOAD( "ua4.040", 0x000000, 0x80000, CRC(f458d52e) SHA1(f6a145aaa57c64557479e63bb95732a98a7b8b85) )
+ ROM_LOAD( "ua6.040", 0x080000, 0x80000, CRC(249e89b4) SHA1(2100eea2c3cee84a046ba7ff6cec1027966b895c) )
+ ROM_LOAD( "ua8.040", 0x100000, 0x80000, CRC(caa25138) SHA1(784111255777f5774abf4d34c0a95b5e23a14c9f) )
+ROM_END
+
ROM_START( cookbib3 )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "u52.bin", 0x00001, 0x40000, CRC(65134893) SHA1(b1f26794d1a85893aedf55adb2195ad244f90132) )
@@ -2913,7 +2940,8 @@ GAME( 1996, toto, 0, snowbros, snowbros, snowbros_state, toto, R
GAME( 1993, finalttr, 0, finalttr, finalttr, snowbros_state, 0, ROT0, "Jeil Computer System", "Final Tetris", MACHINE_SUPPORTS_SAVE )
GAME( 1995, hyperpac, 0, semicom_mcu, hyperpac, snowbros_state, hyperpac, ROT0, "SemiCom", "Hyper Pacman", MACHINE_SUPPORTS_SAVE )
GAME( 1995, hyperpacb, hyperpac, semicom, hyperpac, snowbros_state, 0, ROT0, "bootleg", "Hyper Pacman (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, cookbib2, 0, semiprot, cookbib2, snowbros_state, cookbib2, ROT0, "SemiCom", "Cookie & Bibi 2", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, cookbib2, 0, semiprot, cookbib2, snowbros_state, cookbib2, ROT0, "SemiCom", "Cookie & Bibi 2 (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, cookbib2a, cookbib2, semiprot, cookbib2, snowbros_state, cookbib2, ROT0, "SemiCom", "Cookie & Bibi 2 (set 2)", MACHINE_SUPPORTS_SAVE ) // older? test mode looks even worse on this, but neither shows the correct dip info anyway
GAME( 1996, toppyrap, 0, semiprot, toppyrap, snowbros_state, 0, ROT0, "SemiCom", "Toppy & Rappy", MACHINE_SUPPORTS_SAVE )
GAME( 1997, cookbib3, 0, semiprot, cookbib3, snowbros_state, cookbib3, ROT0, "SemiCom", "Cookie & Bibi 3", MACHINE_SUPPORTS_SAVE )
GAME( 1997, pzlbreak, 0, semiprot, pzlbreak, snowbros_state, pzlbreak, ROT0, "SemiCom / Tirano", "Puzzle Break", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index ddb46312977..01ef42cdf0a 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -34867,6 +34867,7 @@ crystalca // 1998 JCD srl
4in1boot // (c) 2002 KISoft (includes hacks of Semicom games + Snowbros)
ballboy // bootleg
cookbib2 // (c) 1996 SemiCom
+cookbib2a
cookbib3 // (c) 1997 SemiCom
finalttr // (c) 1993 Jeil Computer System
honeydol // (c) 1995 Barko Corp