diff options
-rw-r--r-- | hash/ibm5150.xml | 23 | ||||
-rw-r--r-- | hash/ibm5170.xml | 58 | ||||
-rw-r--r-- | src/mame/drivers/radicasi.cpp | 433 | ||||
-rw-r--r-- | src/mame/drivers/snowbros.cpp | 30 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 |
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 |