cbuster : Cleanup duplicates, Move spriteram buffer functions to buff… (#3223)

* cbuster : Cleanup duplicates, Move spriteram buffer functions to buffered_spriteram16_device, Remove unneeded rambank/shared ptr

* cbuster : Minor fix
This commit is contained in:
cam900 2018-02-18 01:25:47 +09:00 committed by Vas Crabb
parent ef5b933bf5
commit c0c4cd42f7
3 changed files with 40 additions and 56 deletions

View File

@ -57,15 +57,15 @@ WRITE16_MEMBER(cbuster_state::twocrude_control_w)
switch (offset << 1)
{
case 0: /* DMA flag */
memcpy(m_spriteram16_buffer, m_spriteram16, 0x800);
m_spriteram->copy();
return;
case 6: /* IRQ ack */
m_maincpu->set_input_line(4, CLEAR_LINE);
return;
case 2: /* Sound CPU write */
m_soundlatch->write(space, 0, data & 0xff);
m_audiocpu->set_input_line(0, HOLD_LINE);
return;
case 4: /* Protection, maybe this is a PAL on the board?
@ -128,7 +128,7 @@ READ16_MEMBER(cbuster_state::twocrude_control_r)
ADDRESS_MAP_START(cbuster_state::twocrude_map)
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x080000, 0x083fff) AM_RAM AM_SHARE("ram")
AM_RANGE(0x080000, 0x083fff) AM_RAM
AM_RANGE(0x0a0000, 0x0a1fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_r, pf1_data_w)
AM_RANGE(0x0a2000, 0x0a2fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf2_data_r, pf2_data_w)
@ -140,7 +140,7 @@ ADDRESS_MAP_START(cbuster_state::twocrude_map)
AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_SHARE("pf3_rowscroll")
AM_RANGE(0x0ae000, 0x0ae7ff) AM_RAM AM_SHARE("pf4_rowscroll")
AM_RANGE(0x0b0000, 0x0b07ff) AM_RAM AM_SHARE("spriteram16")
AM_RANGE(0x0b0000, 0x0b07ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP
AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("tilegen1", deco16ic_device, pf_control_w)
AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("tilegen2", deco16ic_device, pf_control_w)
@ -150,7 +150,6 @@ ADDRESS_MAP_START(cbuster_state::twocrude_map)
ADDRESS_MAP_END
/******************************************************************************/
ADDRESS_MAP_START(cbuster_state::sound_map)
@ -160,7 +159,7 @@ ADDRESS_MAP_START(cbuster_state::sound_map)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAM
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
ADDRESS_MAP_END
@ -280,9 +279,9 @@ static const gfx_layout spritelayout =
};
static GFXDECODE_START( cbuster )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 0x500 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 0x500 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 0x500 ) /* Tiles 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, spritelayout, 0x100, 80 ) /* Sprites 16x16 */
GFXDECODE_END
@ -310,12 +309,11 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL(24'000'000)/2) /* Custom chip 59 @ 12MHz Verified */
MCFG_CPU_PROGRAM_MAP(twocrude_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cbuster_state, irq4_line_hold)/* VBL */
MCFG_CPU_VBLANK_INT_DRIVER("screen", cbuster_state, irq4_line_assert)/* VBL */
MCFG_CPU_ADD("audiocpu", H6280, XTAL(24'000'000)/4) /* Custom chip 45, 6MHz Verified */
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(58)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529))
@ -327,6 +325,7 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(XBGR)
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
@ -368,6 +367,7 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
// YM2203_PITCH_HACK - Pitch is too low at 1.3425MHz (see also stfight.cpp)
MCFG_SOUND_ADD("ym1", YM2203, XTAL(32'220'000)/24 * 3) /* 1.3425MHz Verified */
@ -375,8 +375,7 @@ MACHINE_CONFIG_START(cbuster_state::twocrude)
MCFG_YM2151_ADD("ym2", XTAL(32'220'000)/9) /* 3.58MHz Verified */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ2 */
MCFG_SOUND_ROUTE(0, "mono", 0.45)
MCFG_SOUND_ROUTE(1, "mono", 0.45)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45)
MCFG_OKIM6295_ADD("oki1", XTAL(32'220'000)/32, PIN7_HIGH) /* 1.0068MHz Verified */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)

View File

@ -7,6 +7,7 @@
*************************************************************************/
#include "machine/gen_latch.h"
#include "video/bufsprite.h"
#include "video/decospr.h"
#include "video/deco16ic.h"
@ -15,48 +16,36 @@ class cbuster_state : public driver_device
public:
cbuster_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_ram(*this, "ram"),
m_pf1_rowscroll(*this, "pf1_rowscroll"),
m_pf2_rowscroll(*this, "pf2_rowscroll"),
m_pf3_rowscroll(*this, "pf3_rowscroll"),
m_pf4_rowscroll(*this, "pf4_rowscroll"),
m_spriteram16(*this, "spriteram16"),
m_paletteram(*this, "palette"),
m_paletteram_ext(*this, "palette_ext"),
m_sprgen(*this, "spritegen"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_deco_tilegen1(*this, "tilegen1"),
m_deco_tilegen2(*this, "tilegen2"),
m_deco_tilegen(*this, "tilegen%u", 1),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch")
m_spriteram(*this, "spriteram"),
m_soundlatch(*this, "soundlatch"),
m_sprgen(*this, "spritegen"),
m_pf_rowscroll(*this, "pf%u_rowscroll", 1),
m_paletteram(*this, "palette"),
m_paletteram_ext(*this, "palette_ext")
{ }
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device_array<deco16ic_device, 2> m_deco_tilegen;
required_device<palette_device> m_palette;
required_device<buffered_spriteram16_device> m_spriteram;
required_device<generic_latch_8_device> m_soundlatch;
required_device<decospr_device> m_sprgen;
/* memory pointers */
required_shared_ptr<uint16_t> m_ram;
required_shared_ptr<uint16_t> m_pf1_rowscroll;
required_shared_ptr<uint16_t> m_pf2_rowscroll;
required_shared_ptr<uint16_t> m_pf3_rowscroll;
required_shared_ptr<uint16_t> m_pf4_rowscroll;
required_shared_ptr<uint16_t> m_spriteram16;
required_shared_ptr_array<uint16_t, 4> m_pf_rowscroll;
required_shared_ptr<uint16_t> m_paletteram;
required_shared_ptr<uint16_t> m_paletteram_ext;
optional_device<decospr_device> m_sprgen;
uint16_t m_spriteram16_buffer[0x400];
/* misc */
uint16_t m_prot;
int m_pri;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<deco16ic_device> m_deco_tilegen1;
required_device<deco16ic_device> m_deco_tilegen2;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
DECLARE_WRITE16_MEMBER(twocrude_control_w);
DECLARE_READ16_MEMBER(twocrude_control_r);
DECLARE_DRIVER_INIT(twocrude);

View File

@ -11,10 +11,6 @@
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
void cbuster_state::video_start()
@ -66,35 +62,35 @@ WRITE16_MEMBER(cbuster_state::cbuster_palette_ext_w)
uint32_t cbuster_state::screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
address_space &space = machine().dummy_space();
uint16_t flip = m_deco_tilegen1->pf_control_r(space, 0, 0xffff);
uint16_t flip = m_deco_tilegen[0]->pf_control_r(space, 0, 0xffff);
flip_screen_set(!BIT(flip, 7));
m_sprgen->set_flip_screen(!BIT(flip, 7));
m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram16_buffer, 0x400);
m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram->buffer(), 0x400);
m_deco_tilegen1->pf_update(m_pf1_rowscroll, m_pf2_rowscroll);
m_deco_tilegen2->pf_update(m_pf3_rowscroll, m_pf4_rowscroll);
m_deco_tilegen[0]->pf_update(m_pf_rowscroll[0], m_pf_rowscroll[1]);
m_deco_tilegen[1]->pf_update(m_pf_rowscroll[2], m_pf_rowscroll[3]);
/* Draw playfields & sprites */
m_deco_tilegen2->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0800, 0x0900, 0x100, 0x0ff);
m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0900, 0x0900, 0x500, 0x0ff);
if (m_pri)
{
m_deco_tilegen1->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen2->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
}
else
{
m_deco_tilegen2->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen1->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
}
m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0000, 0x0900, 0x100, 0x0ff);
m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0100, 0x0900, 0x500, 0x0ff);
m_deco_tilegen1->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
m_deco_tilegen[0]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
return 0;
}