mirror of
https://github.com/holub/mame
synced 2025-04-21 16:01:56 +03:00
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:
parent
ef5b933bf5
commit
c0c4cd42f7
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user