diff --git a/src/mame/drivers/cbuster.cpp b/src/mame/drivers/cbuster.cpp index 87e1bed2fb9..9fbe272553a 100644 --- a/src/mame/drivers/cbuster.cpp +++ b/src/mame/drivers/cbuster.cpp @@ -49,104 +49,75 @@ #include "speaker.h" -WRITE16_MEMBER(cbuster_state::twocrude_control_w) +void cbuster_state::prot_w(offs_t offset, u16 data, u16 mem_mask) { data &= mem_mask; - switch (offset << 1) - { - case 0: /* DMA flag */ - m_spriteram->copy(); - return; + /* Protection, maybe this is a PAL on the board? - case 6: /* IRQ ack */ - m_maincpu->set_input_line(4, CLEAR_LINE); - return; + 80046 is level number + stop at stage and enter. + see also 8216.. - case 2: /* Sound CPU write */ - m_soundlatch->write(data & 0xff); - return; + 9a 00 = pf4 over pf3 (normal) (level 0) + 9a f1 = (level 1 - water), pf3 over ALL sprites + pf4 + 9a 80 = pf3 over pf4 (Level 2 - copter) + 9a 40 = pf3 over ALL sprites + pf4 (snow) level 3 + 9a c0 = doesn't matter? + 9a ff = pf 3 over pf4 - case 4: /* Protection, maybe this is a PAL on the board? + I can't find a priority register, I assume it's tied to the + protection?! - 80046 is level number - stop at stage and enter. - see also 8216.. - - 9a 00 = pf4 over pf3 (normal) (level 0) - 9a f1 = (level 1 - water), pf3 over ALL sprites + pf4 - 9a 80 = pf3 over pf4 (Level 2 - copter) - 9a 40 = pf3 over ALL sprites + pf4 (snow) level 3 - 9a c0 = doesn't matter? - 9a ff = pf 3 over pf4 - - I can't find a priority register, I assume it's tied to the - protection?! - - */ - if ((data & 0xffff) == 0x9a00) m_prot = 0; - if ((data & 0xffff) == 0xaa) m_prot = 0x74; - if ((data & 0xffff) == 0x0200) m_prot = 0x63 << 8; - if ((data & 0xffff) == 0x9a) m_prot = 0xe; - if ((data & 0xffff) == 0x55) m_prot = 0x1e; - if ((data & 0xffff) == 0x0e) {m_prot = 0x0e; m_pri = 0;} /* start */ - if ((data & 0xffff) == 0x00) {m_prot = 0x0e; m_pri = 0;} /* level 0 */ - if ((data & 0xffff) == 0xf1) {m_prot = 0x36; m_pri = 1;} /* level 1 */ - if ((data & 0xffff) == 0x80) {m_prot = 0x2e; m_pri = 1;} /* level 2 */ - if ((data & 0xffff) == 0x40) {m_prot = 0x1e; m_pri = 1;} /* level 3 */ - if ((data & 0xffff) == 0xc0) {m_prot = 0x3e; m_pri = 0;} /* level 4 */ - if ((data & 0xffff) == 0xff) {m_prot = 0x76; m_pri = 1;} /* level 5 */ - - break; - } - logerror("Warning %04x- %02x written to control %02x\n", m_maincpu->pc(), data, offset); + */ + if ((data & 0xffff) == 0x9a00) m_prot = 0; + if ((data & 0xffff) == 0xaa) m_prot = 0x74; + if ((data & 0xffff) == 0x0200) m_prot = 0x63 << 8; + if ((data & 0xffff) == 0x9a) m_prot = 0xe; + if ((data & 0xffff) == 0x55) m_prot = 0x1e; + if ((data & 0xffff) == 0x0e) {m_prot = 0x0e; m_pri = 0;} /* start */ + if ((data & 0xffff) == 0x00) {m_prot = 0x0e; m_pri = 0;} /* level 0 */ + if ((data & 0xffff) == 0xf1) {m_prot = 0x36; m_pri = 1;} /* level 1 */ + if ((data & 0xffff) == 0x80) {m_prot = 0x2e; m_pri = 1;} /* level 2 */ + if ((data & 0xffff) == 0x40) {m_prot = 0x1e; m_pri = 1;} /* level 3 */ + if ((data & 0xffff) == 0xc0) {m_prot = 0x3e; m_pri = 0;} /* level 4 */ + if ((data & 0xffff) == 0xff) {m_prot = 0x76; m_pri = 1;} /* level 5 */ } -READ16_MEMBER(cbuster_state::twocrude_control_r) +u16 cbuster_state::prot_r() { - switch (offset << 1) - { - case 0: /* Player 1 & Player 2 joysticks & fire buttons */ - return ioport("P1_P2")->read(); - - case 2: /* Dip Switches */ - return ioport("DSW")->read(); - - case 4: /* Protection */ - logerror("%04x : protection control read at 30c000 %d\n", m_maincpu->pc(), offset); - return m_prot; - - case 6: /* Credits, VBL in byte 7 */ - return ioport("COINS")->read(); - } - - return ~0; + logerror("%04x : protection control read at 0bc004\n", m_maincpu->pc()); + return m_prot; } /******************************************************************************/ -void cbuster_state::twocrude_map(address_map &map) +void cbuster_state::main_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x080000, 0x083fff).ram(); - map(0x0a0000, 0x0a1fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); - map(0x0a2000, 0x0a2fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); + map(0x0a0000, 0x0a1fff).rw(m_deco_tilegen[0], FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); + map(0x0a2000, 0x0a2fff).rw(m_deco_tilegen[0], FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); map(0x0a4000, 0x0a47ff).ram().share("pf1_rowscroll"); map(0x0a6000, 0x0a67ff).ram().share("pf2_rowscroll"); - map(0x0a8000, 0x0a8fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); - map(0x0aa000, 0x0aafff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); + map(0x0a8000, 0x0a8fff).rw(m_deco_tilegen[1], FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); + map(0x0aa000, 0x0aafff).rw(m_deco_tilegen[1], FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); map(0x0ac000, 0x0ac7ff).ram().share("pf3_rowscroll"); map(0x0ae000, 0x0ae7ff).ram().share("pf4_rowscroll"); map(0x0b0000, 0x0b07ff).ram().share("spriteram"); map(0x0b4000, 0x0b4001).nopw(); - map(0x0b5000, 0x0b500f).w("tilegen1", FUNC(deco16ic_device::pf_control_w)); - map(0x0b6000, 0x0b600f).w("tilegen2", FUNC(deco16ic_device::pf_control_w)); - map(0x0b8000, 0x0b8fff).ram().w(FUNC(cbuster_state::palette_w)).share("palette"); - map(0x0b9000, 0x0b9fff).ram().w(FUNC(cbuster_state::palette_ext_w)).share("palette_ext"); - map(0x0bc000, 0x0bc00f).rw(FUNC(cbuster_state::twocrude_control_r), FUNC(cbuster_state::twocrude_control_w)); + map(0x0b5000, 0x0b500f).w(m_deco_tilegen[0], FUNC(deco16ic_device::pf_control_w)); + map(0x0b6000, 0x0b600f).w(m_deco_tilegen[1], FUNC(deco16ic_device::pf_control_w)); + map(0x0b8000, 0x0b8fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); + map(0x0b9000, 0x0b9fff).ram().w(m_palette, FUNC(palette_device::write16_ext)).share("palette_ext"); + map(0x0bc000, 0x0bc001).portr("P1_P2").w(m_spriteram, FUNC(buffered_spriteram16_device::write)); + map(0x0bc002, 0x0bc003).portr("DSW"); + map(0x0bc002, 0x0bc003).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff).cswidth(16); + map(0x0bc004, 0x0bc005).rw(FUNC(cbuster_state::prot_r), FUNC(cbuster_state::prot_w)); + map(0x0bc006, 0x0bc007).portr("COINS").lw16("irq_ack_w", [this](u16 data) { m_maincpu->set_input_line(4, CLEAR_LINE); }); } @@ -245,7 +216,7 @@ static const gfx_layout charlayout = 8,8, RGN_FRAC(1,1), 4, - { 24,16,8,0 }, + { STEP4(8*3,-8) }, { STEP8(0,1) }, { STEP8(0,8*4) }, 8*32 @@ -256,28 +227,17 @@ static const gfx_layout tilelayout = 16,16, RGN_FRAC(1,1), 4, - { 24, 16, 8, 0 }, + { STEP4(8*3,-8) }, { STEP8(16*8*4,1), STEP8(0,1) }, { STEP16(0,8*4) }, 128*8 }; -static const gfx_layout spritelayout = -{ - 16,16, - (4096*2)+2048, /* Main bank + 4 extra roms */ - 4, - { 0xa0000*8+8, 0xa0000*8, 8, 0 }, - { STEP8(16*8*2,1), STEP8(0,1) }, - { STEP16(0,8*2) }, - 64*8 -}; - static GFXDECODE_START( gfx_cbuster ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */ - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x100, 80 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */ + GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0x100, 80 ) /* Sprites 16x16 */ GFXDECODE_END /******************************************************************************/ @@ -303,7 +263,7 @@ void cbuster_state::twocrude(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 @ 12MHz Verified */ - m_maincpu->set_addrmap(AS_PROGRAM, &cbuster_state::twocrude_map); + m_maincpu->set_addrmap(AS_PROGRAM, &cbuster_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(cbuster_state::irq4_line_assert)); /* VBL */ H6280(config, m_audiocpu, XTAL(24'000'000)/4); /* Custom chip 45, 6MHz Verified */ @@ -315,10 +275,10 @@ void cbuster_state::twocrude(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(529)); screen.set_size(32*8, 32*8); screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - screen.set_screen_update(FUNC(cbuster_state::screen_update_twocrude)); + screen.set_screen_update(FUNC(cbuster_state::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_cbuster); - PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048); + PALETTE(config, m_palette).set_format(4, &cbuster_state::cbuster_XBGR_888, 2048); BUFFERED_SPRITERAM16(config, m_spriteram); @@ -391,19 +351,17 @@ ROM_START( cbuster ) ROM_LOAD16_BYTE( "fu05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) /* Chars */ ROM_LOAD16_BYTE( "fu06-.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_REGION( 0x080000, "gfx2", 0 ) ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ - ROM_REGION( 0x180000,"gfx3", 0 ) - ROM_LOAD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ - ROM_LOAD( "mab-03.11a", 0x0a0000, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) + ROM_REGION( 0x140000, "gfx3", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - /* Space for extra sprites to be copied to (0x20000) */ - - ROM_LOAD( "fu07-.4a", 0x140000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) /* Extra sprites */ - ROM_LOAD( "fu08-.5a", 0x150000, 0x10000, CRC(c6afc5c8) SHA1(feddd546f09884c51e4d1802477de4e152a51082) ) - ROM_LOAD( "fu09-.7a", 0x160000, 0x10000, CRC(526809ca) SHA1(2cb9e7417211c1eb23d32e3fee71c5254d34a3ff) ) - ROM_LOAD( "fu10-.8a", 0x170000, 0x10000, CRC(6be6d50e) SHA1(b944db4b3a7c76190f6b40f71f033e16e7964f6a) ) + ROM_LOAD32_BYTE( "fu07-.4a", 0x100000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "fu08-.5a", 0x100001, 0x10000, CRC(c6afc5c8) SHA1(feddd546f09884c51e4d1802477de4e152a51082) ) + ROM_LOAD32_BYTE( "fu09-.7a", 0x100002, 0x10000, CRC(526809ca) SHA1(2cb9e7417211c1eb23d32e3fee71c5254d34a3ff) ) + ROM_LOAD32_BYTE( "fu10-.8a", 0x100003, 0x10000, CRC(6be6d50e) SHA1(b944db4b3a7c76190f6b40f71f033e16e7964f6a) ) ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ ROM_LOAD( "fu12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) @@ -430,19 +388,17 @@ ROM_START( cbusterw ) ROM_LOAD16_BYTE( "fu05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) /* Chars */ ROM_LOAD16_BYTE( "fu06-.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_REGION( 0x080000, "gfx2", 0 ) ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ - ROM_REGION( 0x180000,"gfx3", 0 ) - ROM_LOAD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ - ROM_LOAD( "mab-03.11a", 0x0a0000, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) + ROM_REGION( 0x140000, "gfx3", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - /* Space for extra sprites to be copied to (0x20000) */ - - ROM_LOAD( "fu07-.4a", 0x140000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) /* Extra sprites */ - ROM_LOAD( "fu08-.5a", 0x150000, 0x10000, CRC(c6afc5c8) SHA1(feddd546f09884c51e4d1802477de4e152a51082) ) - ROM_LOAD( "fu09-.7a", 0x160000, 0x10000, CRC(526809ca) SHA1(2cb9e7417211c1eb23d32e3fee71c5254d34a3ff) ) - ROM_LOAD( "fu10-.8a", 0x170000, 0x10000, CRC(6be6d50e) SHA1(b944db4b3a7c76190f6b40f71f033e16e7964f6a) ) + ROM_LOAD32_BYTE( "fu07-.4a", 0x100000, 0x10000, CRC(ca8d0bb3) SHA1(9262d6003cf0cb8c33d0f6c1d0ef35490b29f9b4) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "fu08-.5a", 0x100001, 0x10000, CRC(c6afc5c8) SHA1(feddd546f09884c51e4d1802477de4e152a51082) ) + ROM_LOAD32_BYTE( "fu09-.7a", 0x100002, 0x10000, CRC(526809ca) SHA1(2cb9e7417211c1eb23d32e3fee71c5254d34a3ff) ) + ROM_LOAD32_BYTE( "fu10-.8a", 0x100003, 0x10000, CRC(6be6d50e) SHA1(b944db4b3a7c76190f6b40f71f033e16e7964f6a) ) ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ ROM_LOAD( "fu12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) @@ -470,20 +426,17 @@ ROM_START( cbusterj ) ROM_LOAD16_BYTE( "fr05-1.6c", 0x80000, 0x10000, CRC(b1f0d910) SHA1(a2a2ee3a99db52e77e9c108dacffb0387da131a9) ) /* Chars */ ROM_LOAD16_BYTE( "fr06-1.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_REGION( 0x080000, "gfx2", 0 ) ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ - ROM_REGION( 0x180000,"gfx3", 0 ) - ROM_LOAD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ - ROM_LOAD( "mab-03.11a", 0x0a0000, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) + ROM_REGION( 0x140000, "gfx3", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - /* Space for extra sprites to be copied to (0x20000) */ - - ROM_LOAD( "fr07.4a", 0x140000, 0x10000, CRC(52c85318) SHA1(74032dac7cb7e7d3028aab4c5f5b0a4e2a7caa03) ) /* Extra sprites */ - ROM_LOAD( "fr08.5a", 0x150000, 0x10000, CRC(ea25fbac) SHA1(d00dce24e94ffc212ab3880c00fcadb7b2116f01) ) - ROM_LOAD( "fr09.7a", 0x160000, 0x10000, CRC(f8363424) SHA1(6a6b143a3474965ef89f75e9d7b15946ae26d0d4) ) - ROM_LOAD( "fr10.8a", 0x170000, 0x10000, CRC(241d5760) SHA1(cd216ecf7e88939b91a6e0f02a23c8b875ac24dc) ) + ROM_LOAD32_BYTE( "fr07.4a", 0x100000, 0x10000, CRC(52c85318) SHA1(74032dac7cb7e7d3028aab4c5f5b0a4e2a7caa03) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "fr08.5a", 0x100001, 0x10000, CRC(ea25fbac) SHA1(d00dce24e94ffc212ab3880c00fcadb7b2116f01) ) + ROM_LOAD32_BYTE( "fr09.7a", 0x100002, 0x10000, CRC(f8363424) SHA1(6a6b143a3474965ef89f75e9d7b15946ae26d0d4) ) + ROM_LOAD32_BYTE( "fr10.8a", 0x100003, 0x10000, CRC(241d5760) SHA1(cd216ecf7e88939b91a6e0f02a23c8b875ac24dc) ) ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ ROM_LOAD( "fu12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) @@ -511,19 +464,17 @@ ROM_START( twocrude ) ROM_LOAD16_BYTE( "ft05-1.6c", 0x80000, 0x10000, CRC(b1f0d910) SHA1(a2a2ee3a99db52e77e9c108dacffb0387da131a9) ) /* Chars */ ROM_LOAD16_BYTE( "ft06-1.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_REGION( 0x080000, "gfx2", 0 ) ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ - ROM_REGION( 0x180000,"gfx3", 0 ) - ROM_LOAD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ - ROM_LOAD( "mab-03.11a", 0x0a0000, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) + ROM_REGION( 0x140000, "gfx3", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - /* Space for extra sprites to be copied to (0x20000) */ - - ROM_LOAD( "ft07-.4a", 0x140000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) /* Extra sprites */ - ROM_LOAD( "ft08-.5a", 0x150000, 0x10000, CRC(c7f1d565) SHA1(d5dc55cf879f7feaff166a6708d60ef0bf31ddf5) ) - ROM_LOAD( "ft09-.7a", 0x160000, 0x10000, CRC(6e3657b9) SHA1(7e6a140e33f9bc18e35c255680eebe152a5d8858) ) - ROM_LOAD( "ft10-.8a", 0x170000, 0x10000, CRC(cdb83560) SHA1(8b258c4436ccea5a74edff1b6219ab7a5eac0328) ) + ROM_LOAD32_BYTE( "ft07-.4a", 0x100000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "ft08-.5a", 0x100001, 0x10000, CRC(c7f1d565) SHA1(d5dc55cf879f7feaff166a6708d60ef0bf31ddf5) ) + ROM_LOAD32_BYTE( "ft09-.7a", 0x100002, 0x10000, CRC(6e3657b9) SHA1(7e6a140e33f9bc18e35c255680eebe152a5d8858) ) + ROM_LOAD32_BYTE( "ft10-.8a", 0x100003, 0x10000, CRC(cdb83560) SHA1(8b258c4436ccea5a74edff1b6219ab7a5eac0328) ) ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ ROM_LOAD( "ft12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) @@ -550,19 +501,17 @@ ROM_START( twocrudea ) ROM_LOAD16_BYTE( "ft05-.6c", 0x80000, 0x10000, CRC(8134d412) SHA1(9c70ff6f9f24ec89c0bb4645afdf2a5ca27e9a0c) ) /* Chars */ ROM_LOAD16_BYTE( "ft06-.7c", 0x80001, 0x10000, CRC(2f914a45) SHA1(bb44ba4779e45ee77ef0006363df91aac1f4559a) ) - ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_REGION( 0x080000, "gfx2", 0 ) ROM_LOAD( "mab-01.19a", 0x00000, 0x80000, CRC(1080d619) SHA1(68f33a1580d33e4dd0858248c12a0a10ac117249) ) /* Tiles */ - ROM_REGION( 0x180000,"gfx3", 0 ) - ROM_LOAD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ - ROM_LOAD( "mab-03.11a", 0x0a0000, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) + ROM_REGION( 0x140000, "gfx3", 0 ) + ROM_LOAD32_WORD( "mab-02.10a", 0x000000, 0x80000, CRC(58b7231d) SHA1(5b51a2fa42c67f23648be205295184a1fddc00f5) ) /* Sprites */ + ROM_LOAD32_WORD( "mab-03.11a", 0x000002, 0x80000, CRC(76053b9d) SHA1(093cd01a13509701ec9dd1a806132600a5bd1915) ) - /* Space for extra sprites to be copied to (0x20000) */ - - ROM_LOAD( "ft07-.4a", 0x140000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) /* Extra sprites */ - ROM_LOAD( "ft08-.5a", 0x150000, 0x10000, CRC(c7f1d565) SHA1(d5dc55cf879f7feaff166a6708d60ef0bf31ddf5) ) - ROM_LOAD( "ft09-.7a", 0x160000, 0x10000, CRC(6e3657b9) SHA1(7e6a140e33f9bc18e35c255680eebe152a5d8858) ) - ROM_LOAD( "ft10-.8a", 0x170000, 0x10000, CRC(cdb83560) SHA1(8b258c4436ccea5a74edff1b6219ab7a5eac0328) ) + ROM_LOAD32_BYTE( "ft07-.4a", 0x100000, 0x10000, CRC(e3465c25) SHA1(5369a87847e6f881efc8460e6e8efcf8ff46e87f) ) /* Extra sprites */ + ROM_LOAD32_BYTE( "ft08-.5a", 0x100001, 0x10000, CRC(c7f1d565) SHA1(d5dc55cf879f7feaff166a6708d60ef0bf31ddf5) ) + ROM_LOAD32_BYTE( "ft09-.7a", 0x100002, 0x10000, CRC(6e3657b9) SHA1(7e6a140e33f9bc18e35c255680eebe152a5d8858) ) + ROM_LOAD32_BYTE( "ft10-.8a", 0x100003, 0x10000, CRC(cdb83560) SHA1(8b258c4436ccea5a74edff1b6219ab7a5eac0328) ) ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */ ROM_LOAD( "ft12-.16k", 0x00000, 0x20000, CRC(2d1d65f2) SHA1(be3d57b9976ddf7ee6d20ee9e78fe826ee411d79) ) @@ -578,7 +527,7 @@ ROM_END void cbuster_state::init_twocrude() { - uint8_t *RAM = memregion("maincpu")->base(); + u8 *RAM = memregion("maincpu")->base(); /* Main cpu decrypt */ for (int i = 0x00000; i < 0x80000; i += 2) @@ -591,28 +540,6 @@ void cbuster_state::init_twocrude() RAM[l] = (RAM[l] & 0xbd) | ((RAM[l] & 0x2) << 5) | ((RAM[l] & 0x40) >> 5); RAM[l] = (RAM[l] & 0xf5) | ((RAM[l] & 0x2) << 2) | ((RAM[l] & 0x8) >> 2); } - - /* Rearrange the 'extra' sprite bank to be in the same format as main sprites */ - RAM = memregion("gfx3")->base() + 0x080000; - uint8_t *PTR = memregion("gfx3")->base() + 0x140000; - for (int i = 0; i < 0x20000; i += 64) - { - for (int j = 0; j < 16; j += 1) - { /* Copy 16 lines down */ - RAM[i + 0 + j * 2] = PTR[i / 2 + 0 + j]; /* Pixels 0-7 for each plane */ - RAM[i + 1 + j * 2] = PTR[i / 2 + 0x10000 + j]; - RAM[i + 0xa0000 + j * 2] = PTR[i / 2 + 0x20000 + j]; - RAM[i + 0xa0001 + j * 2] = PTR[i / 2 + 0x30000 + j]; - } - - for (int j = 0; j < 16; j += 1) - { /* Copy 16 lines down */ - RAM[i + 0x20 + j * 2] = PTR[i / 2 + 0x10 + j]; /* Pixels 8-15 for each plane */ - RAM[i + 0x21 + j * 2] = PTR[i / 2 + 0x10010 + j]; - RAM[i + 0xa0020 + j * 2] = PTR[i / 2 + 0x20010 + j]; - RAM[i + 0xa0021 + j * 2] = PTR[i / 2 + 0x30010 + j]; - } - } } /******************************************************************************/ diff --git a/src/mame/includes/cbuster.h b/src/mame/includes/cbuster.h index a48725a787e..660028ce6f7 100644 --- a/src/mame/includes/cbuster.h +++ b/src/mame/includes/cbuster.h @@ -30,10 +30,18 @@ public: , m_soundlatch(*this, "soundlatch") , m_sprgen(*this, "spritegen") , m_pf_rowscroll(*this, "pf%u_rowscroll", 1U) - , m_paletteram(*this, "palette") - , m_paletteram_ext(*this, "palette_ext") { } + void init_twocrude(); + + void twocrude(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: /* devices */ required_device m_maincpu; required_device m_audiocpu; @@ -44,28 +52,19 @@ public: required_device m_sprgen; /* memory pointers */ - required_shared_ptr_array m_pf_rowscroll; - required_shared_ptr m_paletteram; - required_shared_ptr m_paletteram_ext; + required_shared_ptr_array m_pf_rowscroll; /* misc */ - uint16_t m_prot; - int m_pri; + u16 m_prot; + int m_pri; - DECLARE_WRITE16_MEMBER(twocrude_control_w); - DECLARE_READ16_MEMBER(twocrude_control_r); - void init_twocrude(); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void prot_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 prot_r(); + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECO16IC_BANK_CB_MEMBER(bank_callback); - DECLARE_WRITE16_MEMBER(palette_w); - DECLARE_WRITE16_MEMBER(palette_ext_w); - void update_palette(int offset); - void twocrude(machine_config &config); + static rgb_t cbuster_XBGR_888(u32 raw); + void main_map(address_map &map); void sound_map(address_map &map); - void twocrude_map(address_map &map); }; #endif // MAME_INCLUDES_CBUSTER_H diff --git a/src/mame/video/cbuster.cpp b/src/mame/video/cbuster.cpp index 599378adbef..a7da299739e 100644 --- a/src/mame/video/cbuster.cpp +++ b/src/mame/video/cbuster.cpp @@ -29,39 +29,26 @@ void cbuster_state::video_start() I suspect this setup is actually software compensating for a hardware design problem. */ - -void cbuster_state::update_palette(int offset) +rgb_t cbuster_state::cbuster_XBGR_888(u32 raw) { - int r = m_paletteram[offset]&0xff; - int g = m_paletteram[offset]>>8; - int b = m_paletteram_ext[offset]&0xff; + int r = (raw >> 0) & 0xff; + int g = (raw >> 8) & 0xff; + int b = (raw >> 16) & 0xff; - if (r>0x8e) r=0x8e; - if (g>0x8e) g=0x8e; - if (b>0x8e) b=0x8e; + if (r > 0x8e) r = 0x8e; + if (g > 0x8e) g = 0x8e; + if (b > 0x8e) b = 0x8e; r = (r * 255) / 0x8e; g = (g * 255) / 0x8e; b = (b * 255) / 0x8e; - m_palette->set_pen_color(offset,rgb_t(r,g,b)); + return rgb_t(r, g, b); } -WRITE16_MEMBER(cbuster_state::palette_w) +u32 cbuster_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - COMBINE_DATA(&m_paletteram[offset]); - update_palette(offset); -} - -WRITE16_MEMBER(cbuster_state::palette_ext_w) -{ - COMBINE_DATA(&m_paletteram_ext[offset]); - update_palette(offset); -} - -uint32_t cbuster_state::screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - uint16_t flip = m_deco_tilegen[0]->pf_control_r(0); + const u16 flip = m_deco_tilegen[0]->pf_control_r(0); flip_screen_set(!BIT(flip, 7)); m_sprgen->set_flip_screen(!BIT(flip, 7));