argus.cpp: Separate state classes; simplify handlers; eliminate legacy overrides (nw)

This commit is contained in:
AJR 2019-10-22 20:22:51 -04:00
parent 997edbcaf5
commit c185a04029
3 changed files with 255 additions and 240 deletions

View File

@ -144,7 +144,7 @@ Known issues :
#include "speaker.h"
void argus_state::machine_start()
void argus_common_state::machine_start()
{
membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000);
}
@ -155,7 +155,7 @@ void argus_state::machine_start()
***************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(argus_state::scanline)
TIMER_DEVICE_CALLBACK_MEMBER(argus_common_state::scanline)
{
int scanline = param;
@ -166,7 +166,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(argus_state::scanline)
m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xcf); /* Z80 - RST 08h */
}
TIMER_DEVICE_CALLBACK_MEMBER(argus_state::butasan_scanline)
TIMER_DEVICE_CALLBACK_MEMBER(butasan_state::scanline)
{
int scanline = param;
@ -184,7 +184,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(argus_state::butasan_scanline)
***************************************************************************/
WRITE8_MEMBER(argus_state::bankselect_w)
void argus_common_state::bankselect_w(u8 data)
{
membank("mainbank")->set_entry(data & 7); /* Select 8 banks of 16k */
}
@ -212,8 +212,8 @@ void argus_state::argus_map(address_map &map)
map(0xc302, 0xc303).ram().share("bg0_scrolly");
map(0xc308, 0xc309).ram().share("bg1_scrollx");
map(0xc30a, 0xc30b).ram().share("bg1_scrolly");
map(0xc30c, 0xc30c).w(FUNC(argus_state::argus_bg_status_w));
map(0xc400, 0xcfff).ram().w(FUNC(argus_state::argus_paletteram_w)).share("paletteram");
map(0xc30c, 0xc30c).w(FUNC(argus_state::bg_status_w));
map(0xc400, 0xcfff).ram().w(FUNC(argus_state::paletteram_w)).share("paletteram");
map(0xd000, 0xd7ff).ram().w(FUNC(argus_state::txram_w)).share("txram");
map(0xd800, 0xdfff).ram().w(FUNC(argus_state::bg1ram_w)).share("bg1ram");
map(0xe000, 0xf1ff).ram();
@ -221,7 +221,7 @@ void argus_state::argus_map(address_map &map)
map(0xf800, 0xffff).ram();
}
void argus_state::valtric_map(address_map &map)
void valtric_state::valtric_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("mainbank");
@ -231,22 +231,22 @@ void argus_state::valtric_map(address_map &map)
map(0xc003, 0xc003).portr("DSW1");
map(0xc004, 0xc004).portr("DSW2");
map(0xc200, 0xc200).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0xc201, 0xc201).w(FUNC(argus_state::flipscreen_w));
map(0xc202, 0xc202).w(FUNC(argus_state::bankselect_w));
map(0xc300, 0xc300).w(FUNC(argus_state::valtric_unknown_w));
map(0xc201, 0xc201).w(FUNC(valtric_state::flipscreen_w));
map(0xc202, 0xc202).w(FUNC(valtric_state::bankselect_w));
map(0xc300, 0xc300).w(FUNC(valtric_state::unknown_w));
map(0xc308, 0xc309).ram().share("bg1_scrollx");
map(0xc30a, 0xc30b).ram().share("bg1_scrolly");
map(0xc30c, 0xc30c).w(FUNC(argus_state::valtric_bg_status_w));
map(0xc30d, 0xc30d).w(FUNC(argus_state::valtric_mosaic_w));
map(0xc400, 0xcfff).ram().w(FUNC(argus_state::valtric_paletteram_w)).share("paletteram");
map(0xd000, 0xd7ff).ram().w(FUNC(argus_state::txram_w)).share("txram");
map(0xd800, 0xdfff).ram().w(FUNC(argus_state::bg1ram_w)).share("bg1ram");
map(0xc30c, 0xc30c).w(FUNC(valtric_state::bg_status_w));
map(0xc30d, 0xc30d).w(FUNC(valtric_state::mosaic_w));
map(0xc400, 0xcfff).ram().w(FUNC(valtric_state::paletteram_w)).share("paletteram");
map(0xd000, 0xd7ff).ram().w(FUNC(valtric_state::txram_w)).share("txram");
map(0xd800, 0xdfff).ram().w(FUNC(valtric_state::bg1ram_w)).share("bg1ram");
map(0xe000, 0xf1ff).ram();
map(0xf200, 0xf7ff).ram().share("spriteram");
map(0xf800, 0xffff).ram();
}
void argus_state::butasan_map(address_map &map)
void butasan_state::butasan_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("mainbank");
@ -255,47 +255,47 @@ void argus_state::butasan_map(address_map &map)
map(0xc002, 0xc002).portr("P2");
map(0xc003, 0xc003).portr("DSW1");
map(0xc004, 0xc004).portr("DSW2");
map(0xc100, 0xc100).w(FUNC(argus_state::butasan_unknown_w));
map(0xc100, 0xc100).w(FUNC(butasan_state::unknown_w));
map(0xc200, 0xc200).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0xc201, 0xc201).w(FUNC(argus_state::flipscreen_w));
map(0xc202, 0xc202).w(FUNC(argus_state::bankselect_w));
map(0xc203, 0xc203).w(FUNC(argus_state::butasan_pageselect_w));
map(0xc201, 0xc201).w(FUNC(butasan_state::flipscreen_w));
map(0xc202, 0xc202).w(FUNC(butasan_state::bankselect_w));
map(0xc203, 0xc203).w(FUNC(butasan_state::pageselect_w));
map(0xc300, 0xc301).ram().share("bg0_scrollx");
map(0xc302, 0xc303).ram().share("bg0_scrolly");
map(0xc304, 0xc304).w(FUNC(argus_state::butasan_bg0_status_w));
map(0xc304, 0xc304).w(FUNC(butasan_state::bg0_status_w));
map(0xc308, 0xc309).ram().share("bg1_scrollx");
map(0xc30a, 0xc30b).ram().share("bg1_scrolly");
map(0xc30c, 0xc30c).w(FUNC(argus_state::butasan_bg1_status_w));
map(0xc400, 0xc7ff).ram().w(FUNC(argus_state::butasan_bg1ram_w)).share("butasan_bg1ram");
map(0xc800, 0xcfff).ram().w(FUNC(argus_state::butasan_paletteram_w)).share("paletteram");
map(0xd000, 0xdfff).rw(FUNC(argus_state::butasan_pagedram_r), FUNC(argus_state::butasan_pagedram_w));
map(0xc30c, 0xc30c).w(FUNC(butasan_state::bg1_status_w));
map(0xc400, 0xc7ff).ram().w(FUNC(butasan_state::bg1ram_w)).share("butasan_bg1ram");
map(0xc800, 0xcfff).ram().w(FUNC(butasan_state::paletteram_w)).share("paletteram");
map(0xd000, 0xdfff).rw(FUNC(butasan_state::pagedram_r), FUNC(butasan_state::pagedram_w));
map(0xe000, 0xefff).ram();
map(0xf000, 0xf67f).ram().share("spriteram");
map(0xf680, 0xffff).ram();
}
void argus_state::sound_map_a(address_map &map)
void argus_common_state::sound_map_a(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0xc000, 0xc000).r("soundlatch", FUNC(generic_latch_8_device::read));
}
void argus_state::sound_map_b(address_map &map)
void argus_common_state::sound_map_b(address_map &map)
{
map(0x0000, 0xbfff).rom();
map(0xc000, 0xc7ff).ram();
map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read));
}
void argus_state::sound_portmap_1(address_map &map)
void argus_common_state::sound_portmap_1(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0x80, 0x81).noprw(); // second ym2203 is not implemented on argus but still writes here
}
void argus_state::sound_portmap_2(address_map &map)
void argus_common_state::sound_portmap_2(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
@ -495,16 +495,13 @@ void argus_state::argus(machine_config &config)
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); /* This value is referred to psychic5 driver */
m_screen->set_size(32*16, 32*16);
m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
m_screen->set_screen_update(FUNC(argus_state::screen_update_argus));
m_screen->set_screen_update(FUNC(argus_state::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_argus);
PALETTE(config, m_palette).set_entries(896);
JALECO_BLEND(config, m_blend, 0);
MCFG_VIDEO_START_OVERRIDE(argus_state,argus)
MCFG_VIDEO_RESET_OVERRIDE(argus_state,argus)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -518,16 +515,16 @@ void argus_state::argus(machine_config &config)
ym1.add_route(3, "mono", 0.50);
}
void argus_state::valtric(machine_config &config)
void valtric_state::valtric(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 5000000); /* 5 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &argus_state::valtric_map);
TIMER(config, "scantimer").configure_scanline(FUNC(argus_state::scanline), "screen", 0, 1);
m_maincpu->set_addrmap(AS_PROGRAM, &valtric_state::valtric_map);
TIMER(config, "scantimer").configure_scanline(FUNC(valtric_state::scanline), "screen", 0, 1);
Z80(config, m_audiocpu, 5000000);
m_audiocpu->set_addrmap(AS_PROGRAM, &argus_state::sound_map_a);
m_audiocpu->set_addrmap(AS_IO, &argus_state::sound_portmap_2);
m_audiocpu->set_addrmap(AS_PROGRAM, &valtric_state::sound_map_a);
m_audiocpu->set_addrmap(AS_IO, &valtric_state::sound_portmap_2);
config.m_minimum_quantum = attotime::from_hz(600);
@ -537,16 +534,13 @@ void argus_state::valtric(machine_config &config)
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); /* This value is referred to psychic5 driver */
m_screen->set_size(32*16, 32*16);
m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
m_screen->set_screen_update(FUNC(argus_state::screen_update_valtric));
m_screen->set_screen_update(FUNC(valtric_state::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_valtric);
PALETTE(config, m_palette).set_entries(768);
JALECO_BLEND(config, m_blend, 0);
MCFG_VIDEO_START_OVERRIDE(argus_state,valtric)
MCFG_VIDEO_RESET_OVERRIDE(argus_state,valtric)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -566,16 +560,16 @@ void argus_state::valtric(machine_config &config)
ym2.add_route(3, "mono", 0.50);
}
void argus_state::butasan(machine_config &config)
void butasan_state::butasan(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 5000000); /* 5 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &argus_state::butasan_map);
TIMER(config, "scantimer").configure_scanline(FUNC(argus_state::butasan_scanline), "screen", 0, 1);
m_maincpu->set_addrmap(AS_PROGRAM, &butasan_state::butasan_map);
TIMER(config, "scantimer").configure_scanline(FUNC(butasan_state::scanline), "screen", 0, 1);
Z80(config, m_audiocpu, 5000000);
m_audiocpu->set_addrmap(AS_PROGRAM, &argus_state::sound_map_b);
m_audiocpu->set_addrmap(AS_IO, &argus_state::sound_portmap_2);
m_audiocpu->set_addrmap(AS_PROGRAM, &butasan_state::sound_map_b);
m_audiocpu->set_addrmap(AS_IO, &butasan_state::sound_portmap_2);
config.m_minimum_quantum = attotime::from_hz(600);
@ -585,16 +579,13 @@ void argus_state::butasan(machine_config &config)
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); /* This value is taken from psychic5 driver */
m_screen->set_size(32*16, 32*16);
m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
m_screen->set_screen_update(FUNC(argus_state::screen_update_butasan));
m_screen->set_screen_update(FUNC(butasan_state::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_butasan);
PALETTE(config, m_palette).set_entries(768);
JALECO_BLEND(config, m_blend, 0);
MCFG_VIDEO_START_OVERRIDE(argus_state,butasan)
MCFG_VIDEO_RESET_OVERRIDE(argus_state,butasan)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -751,8 +742,8 @@ ROM_START( butasanj )
ROM_END
/* ( YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME ) */
GAME( 1986, argus, 0, argus, argus, argus_state, empty_init, ROT270, "NMK (Jaleco license)", "Argus", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1986, valtric, 0, valtric, valtric, argus_state, empty_init, ROT270, "NMK (Jaleco license)", "Valtric", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1987, butasan, 0, butasan, butasan, argus_state, empty_init, ROT0, "NMK (Jaleco license)", "Butasan - Pig's & Bomber's (Japan, English)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1987, butasanj, butasan, butasan, butasan, argus_state, empty_init, ROT0, "NMK (Jaleco license)", "Butasan (Japan, Japanese)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
/* ( YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME ) */
GAME( 1986, argus, 0, argus, argus, argus_state, empty_init, ROT270, "NMK (Jaleco license)", "Argus", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1986, valtric, 0, valtric, valtric, valtric_state, empty_init, ROT270, "NMK (Jaleco license)", "Valtric", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1987, butasan, 0, butasan, butasan, butasan_state, empty_init, ROT0, "NMK (Jaleco license)", "Butasan - Pig's & Bomber's (Japan, English)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1987, butasanj, butasan, butasan, butasan, butasan_state, empty_init, ROT0, "NMK (Jaleco license)", "Butasan (Japan, Japanese)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -7,10 +7,10 @@
#include "screen.h"
#include "tilemap.h"
class argus_state : public driver_device
class argus_common_state : public driver_device
{
public:
argus_state(const machine_config &mconfig, device_type type, const char *tag)
protected:
argus_common_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
@ -24,7 +24,6 @@ public:
, m_txram(*this, "txram")
, m_bg1ram(*this, "bg1ram")
, m_spriteram(*this, "spriteram")
, m_butasan_bg1ram(*this, "butasan_bg1ram")
, m_vrom(*this, "vrom%u", 1U)
{ }
@ -35,116 +34,153 @@ public:
required_device<palette_device> m_palette;
required_device<jaleco_blend_device> m_blend;
optional_shared_ptr_array<uint8_t, 2> m_bg_scrollx;
optional_shared_ptr_array<uint8_t, 2> m_bg_scrolly;
required_shared_ptr<uint8_t> m_paletteram;
optional_shared_ptr<uint8_t> m_txram;
optional_shared_ptr<uint8_t> m_bg1ram;
required_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint8_t> m_butasan_bg1ram;
optional_region_ptr_array<uint8_t, 2> m_vrom;
optional_shared_ptr_array<u8, 2> m_bg_scrollx;
optional_shared_ptr_array<u8, 2> m_bg_scrolly;
required_shared_ptr<u8> m_paletteram;
optional_shared_ptr<u8> m_txram;
optional_shared_ptr<u8> m_bg1ram;
required_shared_ptr<u8> m_spriteram;
optional_region_ptr_array<u8, 2> m_vrom;
// common
uint8_t m_bg_status;
uint8_t m_flipscreen;
uint16_t m_palette_intensity;
u8 m_bg_status;
u8 m_flipscreen;
u16 m_palette_intensity;
// argus specific
uint8_t m_vrom_offset;
// butasan specific
uint8_t *m_butasan_txram;
uint8_t *m_butasan_bg0ram;
uint8_t *m_butasan_bg0backram;
uint8_t *m_butasan_txbackram;
std::unique_ptr<uint8_t[]> m_butasan_pagedram[2];
uint8_t m_butasan_page_latch;
uint8_t m_butasan_bg1_status;
uint8_t m_butasan_unknown;
// valtric specific
uint8_t m_valtric_mosaic;
bitmap_rgb32 m_mosaicbitmap;
uint8_t m_valtric_unknown;
int m_mosaic;
u8 m_vrom_offset;
tilemap_t *m_tx_tilemap;
tilemap_t *m_bg_tilemap[2];
// common
DECLARE_WRITE8_MEMBER(bankselect_w);
DECLARE_WRITE8_MEMBER(valtric_mosaic_w);
DECLARE_WRITE8_MEMBER(txram_w);
DECLARE_WRITE8_MEMBER(bg1ram_w);
DECLARE_WRITE8_MEMBER(flipscreen_w);
// argus specific
DECLARE_WRITE8_MEMBER(argus_bg_status_w);
DECLARE_WRITE8_MEMBER(argus_paletteram_w);
// butasan specific
DECLARE_WRITE8_MEMBER(butasan_bg0_status_w);
DECLARE_WRITE8_MEMBER(butasan_bg1_status_w);
DECLARE_WRITE8_MEMBER(butasan_paletteram_w);
DECLARE_WRITE8_MEMBER(butasan_bg1ram_w);
DECLARE_WRITE8_MEMBER(butasan_pageselect_w);
DECLARE_READ8_MEMBER(butasan_pagedram_r);
DECLARE_WRITE8_MEMBER(butasan_pagedram_w);
DECLARE_WRITE8_MEMBER(butasan_unknown_w);
// valtric specific
DECLARE_WRITE8_MEMBER(valtric_bg_status_w);
DECLARE_WRITE8_MEMBER(valtric_paletteram_w);
DECLARE_WRITE8_MEMBER(valtric_unknown_w);
void bankselect_w(u8 data);
void txram_w(offs_t offset, u8 data);
void bg1ram_w(offs_t offset, u8 data);
void flipscreen_w(u8 data);
template<int Gfx> TILE_GET_INFO_MEMBER(get_tx_tile_info);
TILE_GET_INFO_MEMBER(argus_get_bg0_tile_info);
TILE_GET_INFO_MEMBER(argus_get_bg1_tile_info);
TILE_GET_INFO_MEMBER(valtric_get_bg_tile_info);
TILE_GET_INFO_MEMBER(butasan_get_tx_tile_info);
TILE_GET_INFO_MEMBER(butasan_get_bg0_tile_info);
TILE_GET_INFO_MEMBER(butasan_get_bg1_tile_info);
TILEMAP_MAPPER_MEMBER(butasan_bg_scan);
TILEMAP_MAPPER_MEMBER(butasan_tx_scan);
virtual void machine_start() override;
DECLARE_VIDEO_START(argus);
DECLARE_VIDEO_RESET(argus);
DECLARE_VIDEO_START(valtric);
DECLARE_VIDEO_RESET(valtric);
DECLARE_VIDEO_START(butasan);
DECLARE_VIDEO_RESET(butasan);
uint32_t screen_update_argus(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_valtric(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_butasan(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
TIMER_DEVICE_CALLBACK_MEMBER(butasan_scanline);
void reset_common();
void change_palette(int color, int lo_offs, int hi_offs);
void change_bg_palette(int color, int lo_offs, int hi_offs);
void bg_setting();
// argus specific
void argus_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority);
// butasan specific
void butasan_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void butasan_log_vram();
// valtric specific
void valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void valtric_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void valtric(machine_config &config);
void argus(machine_config &config);
void butasan(machine_config &config);
void argus_map(address_map &map);
void butasan_map(address_map &map);
void sound_map_a(address_map &map);
void sound_map_b(address_map &map);
void sound_portmap_1(address_map &map);
void sound_portmap_2(address_map &map);
void valtric_map(address_map &map);
};
class argus_state : public argus_common_state
{
public:
argus_state(const machine_config &mconfig, device_type type, const char *tag)
: argus_common_state(mconfig, type, tag)
{ }
void argus(machine_config &config);
protected:
virtual void video_start() override;
virtual void video_reset() override;
private:
void bg_status_w(u8 data);
void paletteram_w(offs_t offset, u8 data);
TILE_GET_INFO_MEMBER(get_bg0_tile_info);
TILE_GET_INFO_MEMBER(get_bg1_tile_info);
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void argus_map(address_map &map);
};
class valtric_state : public argus_common_state
{
public:
valtric_state(const machine_config &mconfig, device_type type, const char *tag)
: argus_common_state(mconfig, type, tag)
{ }
void valtric(machine_config &config);
protected:
virtual void video_start() override;
virtual void video_reset() override;
private:
void mosaic_w(u8 data);
void bg_status_w(u8 data);
void paletteram_w(offs_t offset, u8 data);
void unknown_w(u8 data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
void draw_mosaic(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void valtric_map(address_map &map);
u8 m_valtric_mosaic;
bitmap_rgb32 m_mosaicbitmap;
u8 m_valtric_unknown;
int m_mosaic;
};
class butasan_state : public argus_common_state
{
public:
butasan_state(const machine_config &mconfig, device_type type, const char *tag)
: argus_common_state(mconfig, type, tag)
, m_butasan_bg1ram(*this, "butasan_bg1ram")
{ }
void butasan(machine_config &config);
protected:
virtual void video_start() override;
virtual void video_reset() override;
private:
void bg0_status_w(u8 data);
void bg1_status_w(u8 data);
void paletteram_w(offs_t offset, u8 data);
void bg1ram_w(offs_t offset, u8 data);
void pageselect_w(u8 data);
u8 pagedram_r(offs_t offset);
void pagedram_w(offs_t offset, u8 data);
void unknown_w(u8 data);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
TILE_GET_INFO_MEMBER(get_bg0_tile_info);
TILE_GET_INFO_MEMBER(get_bg1_tile_info);
TILEMAP_MAPPER_MEMBER(bg_scan);
TILEMAP_MAPPER_MEMBER(tx_scan);
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void log_vram();
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
void butasan_map(address_map &map);
required_shared_ptr<u8> m_butasan_bg1ram;
u8 *m_butasan_txram;
u8 *m_butasan_bg0ram;
u8 *m_butasan_bg0backram;
u8 *m_butasan_txbackram;
std::unique_ptr<u8[]> m_butasan_pagedram[2];
u8 m_butasan_page_latch;
u8 m_butasan_bg1_status;
u8 m_butasan_unknown;
};

View File

@ -124,14 +124,12 @@ BG0 palette intensity ( $C47F, $C4FF )
***************************************************************************/
template<int Gfx>
TILE_GET_INFO_MEMBER(argus_state::get_tx_tile_info)
TILE_GET_INFO_MEMBER(argus_common_state::get_tx_tile_info)
{
uint8_t hi, lo;
tile_index <<= 1;
lo = m_txram[tile_index];
hi = m_txram[tile_index + 1];
u8 lo = m_txram[tile_index];
u8 hi = m_txram[tile_index + 1];
SET_TILE_INFO_MEMBER(Gfx,
((hi & 0xc0) << 2) | lo,
@ -139,18 +137,16 @@ TILE_GET_INFO_MEMBER(argus_state::get_tx_tile_info)
TILE_FLIPYX((hi & 0x30) >> 4));
}
TILE_GET_INFO_MEMBER(argus_state::argus_get_bg0_tile_info)
TILE_GET_INFO_MEMBER(argus_state::get_bg0_tile_info)
{
uint8_t hi, lo;
// logical width is 65536(4096*16) but we load only 1024 pixel each
// for reduce RAM usage
tile_index = (((m_vrom_offset << 9) + tile_index) & 0x1ffff) << 1;
int vrom_offset = (tile_index >> 3);
tile_index = (m_vrom[0][vrom_offset & ~1] << 4) | ((m_vrom[0][vrom_offset | 1] & 0x7) << 12) | (tile_index & 0xf);
lo = m_vrom[1][tile_index];
hi = m_vrom[1][tile_index | 1];
u8 lo = m_vrom[1][tile_index];
u8 hi = m_vrom[1][tile_index | 1];
SET_TILE_INFO_MEMBER(1,
((hi & 0xc0) << 2) | lo,
@ -158,14 +154,12 @@ TILE_GET_INFO_MEMBER(argus_state::argus_get_bg0_tile_info)
TILE_FLIPYX((hi & 0x30) >> 4));
}
TILE_GET_INFO_MEMBER(argus_state::argus_get_bg1_tile_info)
TILE_GET_INFO_MEMBER(argus_state::get_bg1_tile_info)
{
uint8_t hi, lo;
tile_index <<= 1;
lo = m_bg1ram[tile_index];
hi = m_bg1ram[tile_index + 1];
u8 lo = m_bg1ram[tile_index];
u8 hi = m_bg1ram[tile_index + 1];
SET_TILE_INFO_MEMBER(2,
lo,
@ -173,14 +167,12 @@ TILE_GET_INFO_MEMBER(argus_state::argus_get_bg1_tile_info)
TILE_FLIPYX((hi & 0x30) >> 4));
}
TILE_GET_INFO_MEMBER(argus_state::valtric_get_bg_tile_info)
TILE_GET_INFO_MEMBER(valtric_state::get_bg_tile_info)
{
uint8_t hi, lo;
tile_index <<= 1;
lo = m_bg1ram[tile_index];
hi = m_bg1ram[tile_index + 1];
u8 lo = m_bg1ram[tile_index];
u8 hi = m_bg1ram[tile_index + 1];
SET_TILE_INFO_MEMBER(1,
((hi & 0xc0) << 2) | ((hi & 0x20) << 5) | lo,
@ -188,14 +180,12 @@ TILE_GET_INFO_MEMBER(argus_state::valtric_get_bg_tile_info)
0);
}
TILE_GET_INFO_MEMBER(argus_state::butasan_get_tx_tile_info)
TILE_GET_INFO_MEMBER(butasan_state::get_tx_tile_info)
{
uint8_t hi, lo;
tile_index <<= 1;
lo = m_butasan_txram[tile_index];
hi = m_butasan_txram[tile_index + 1];
u8 lo = m_butasan_txram[tile_index];
u8 hi = m_butasan_txram[tile_index + 1];
SET_TILE_INFO_MEMBER(3,
((hi & 0xc0) << 2) | lo,
@ -203,14 +193,12 @@ TILE_GET_INFO_MEMBER(argus_state::butasan_get_tx_tile_info)
TILE_FLIPYX((hi & 0x30) >> 4));
}
TILE_GET_INFO_MEMBER(argus_state::butasan_get_bg0_tile_info)
TILE_GET_INFO_MEMBER(butasan_state::get_bg0_tile_info)
{
uint8_t hi, lo;
tile_index <<= 1;
lo = m_butasan_bg0ram[tile_index];
hi = m_butasan_bg0ram[tile_index + 1];
u8 lo = m_butasan_bg0ram[tile_index];
u8 hi = m_butasan_bg0ram[tile_index + 1];
SET_TILE_INFO_MEMBER(1,
((hi & 0xc0) << 2) | lo,
@ -218,7 +206,7 @@ TILE_GET_INFO_MEMBER(argus_state::butasan_get_bg0_tile_info)
TILE_FLIPYX((hi & 0x30) >> 4));
}
TILE_GET_INFO_MEMBER(argus_state::butasan_get_bg1_tile_info)
TILE_GET_INFO_MEMBER(butasan_state::get_bg1_tile_info)
{
int const tile = m_butasan_bg1ram[tile_index] | ((m_butasan_bg1_status & 2) << 7);
@ -228,13 +216,13 @@ TILE_GET_INFO_MEMBER(argus_state::butasan_get_bg1_tile_info)
0);
}
TILEMAP_MAPPER_MEMBER(argus_state::butasan_bg_scan)
TILEMAP_MAPPER_MEMBER(butasan_state::bg_scan)
{
/* logical (col,row) -> memory offset */
return (col & 0x0f) | ((row ^ 0x0f) << 4) | ((col & 0x10) << 5);
}
TILEMAP_MAPPER_MEMBER(argus_state::butasan_tx_scan)
TILEMAP_MAPPER_MEMBER(butasan_state::tx_scan)
{
/* logical (col,row) -> memory offset */
return (col & 0x1f) | ((row ^ 0x1f) << 5);
@ -244,20 +232,20 @@ TILEMAP_MAPPER_MEMBER(argus_state::butasan_tx_scan)
Initialize and destroy video hardware emulation
***************************************************************************/
void argus_state::reset_common()
void argus_common_state::reset_common()
{
m_bg_status = 0x01;
m_flipscreen = 0;
m_palette_intensity = 0;
}
VIDEO_START_MEMBER(argus_state,argus)
void argus_state::video_start()
{
/* info offset w h col row */
// m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::argus_get_bg0_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 4096, 32); // full 65536 width tilemap
m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::argus_get_bg0_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 1024/16, 32);
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::argus_get_bg1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::get_tx_tile_info<3>),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
// m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::get_bg0_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 4096, 32); // full 65536 width tilemap
m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::get_bg0_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 1024/16, 32);
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::get_bg1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::get_tx_tile_info<3>),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_bg_tilemap[1]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15);
@ -267,18 +255,18 @@ VIDEO_START_MEMBER(argus_state,argus)
save_item(NAME(m_palette_intensity));
}
VIDEO_RESET_MEMBER(argus_state,argus)
void argus_state::video_reset()
{
m_bg_scrollx[0][0] = 0;
m_bg_scrollx[0][1] = 0;
reset_common();
}
VIDEO_START_MEMBER(argus_state,valtric)
void valtric_state::video_start()
{
/* info offset w h col row */
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::valtric_get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::get_tx_tile_info<2>),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(valtric_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(valtric_state::get_tx_tile_info<2>),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_tx_tilemap->set_transparent_pen(15);
@ -292,24 +280,24 @@ VIDEO_START_MEMBER(argus_state,valtric)
save_item(NAME(m_mosaic));
}
VIDEO_RESET_MEMBER(argus_state,valtric)
void valtric_state::video_reset()
{
m_valtric_mosaic = 0x0f;
reset_common();
}
VIDEO_START_MEMBER(argus_state,butasan)
void butasan_state::video_start()
{
/* info offset w h col row */
m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(argus_state::butasan_bg_scan),this), 16, 16, 32, 32);
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(argus_state::butasan_bg_scan),this), 16, 16, 32, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_tx_tile_info),this), tilemap_mapper_delegate(FUNC(argus_state::butasan_tx_scan),this), 8, 8, 32, 32);
m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(butasan_state::get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(butasan_state::bg_scan),this), 16, 16, 32, 32);
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(butasan_state::get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(butasan_state::bg_scan),this), 16, 16, 32, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(butasan_state::get_tx_tile_info),this), tilemap_mapper_delegate(FUNC(butasan_state::tx_scan),this), 8, 8, 32, 32);
m_bg_tilemap[1]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15);
m_butasan_pagedram[0] = std::make_unique<uint8_t[]>(0x1000);
m_butasan_pagedram[1] = std::make_unique<uint8_t[]>(0x1000);
m_butasan_pagedram[0] = std::make_unique<u8[]>(0x1000);
m_butasan_pagedram[1] = std::make_unique<u8[]>(0x1000);
m_butasan_bg0ram = &m_butasan_pagedram[0][0x000];
m_butasan_bg0backram = &m_butasan_pagedram[0][0x800];
@ -326,7 +314,7 @@ VIDEO_START_MEMBER(argus_state,butasan)
save_item(NAME(m_butasan_unknown));
}
VIDEO_RESET_MEMBER(argus_state,butasan)
void butasan_state::video_reset()
{
m_butasan_page_latch = 0;
m_butasan_bg1_status = 0x01;
@ -340,16 +328,16 @@ VIDEO_RESET_MEMBER(argus_state,butasan)
Functions for handler of MAP roms in Argus and palette color
***************************************************************************/
void argus_state::change_palette(int color, int lo_offs, int hi_offs)
void argus_common_state::change_palette(int color, int lo_offs, int hi_offs)
{
uint8_t lo = m_paletteram[lo_offs];
uint8_t hi = m_paletteram[hi_offs];
u8 lo = m_paletteram[lo_offs];
u8 hi = m_paletteram[hi_offs];
m_palette->set_pen_color(color, rgb_t(hi & 0x0f, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4)));
}
void argus_state::change_bg_palette(int color, int lo_offs, int hi_offs)
void argus_common_state::change_bg_palette(int color, int lo_offs, int hi_offs)
{
uint8_t r,g,b,lo,hi,ir,ig,ib,ix;
u8 r,g,b,lo,hi,ir,ig,ib,ix;
rgb_t rgb,irgb;
/* red,green,blue intensities */
@ -371,7 +359,7 @@ void argus_state::change_bg_palette(int color, int lo_offs, int hi_offs)
/* Grey background enable */
if (m_bg_status & 2)
{
uint8_t val = (r + g + b) / 3;
u8 val = (r + g + b) / 3;
rgb = rgb_t(val,val,val);
}
else
@ -389,24 +377,24 @@ void argus_state::change_bg_palette(int color, int lo_offs, int hi_offs)
Memory handler
***************************************************************************/
WRITE8_MEMBER(argus_state::valtric_mosaic_w)
void valtric_state::mosaic_w(u8 data)
{
m_valtric_mosaic = data;
}
WRITE8_MEMBER(argus_state::txram_w)
void argus_common_state::txram_w(offs_t offset, u8 data)
{
m_txram[offset] = data;
m_tx_tilemap->mark_tile_dirty(offset >> 1);
}
WRITE8_MEMBER(argus_state::bg1ram_w)
void argus_common_state::bg1ram_w(offs_t offset, u8 data)
{
m_bg1ram[offset] = data;
m_bg_tilemap[1]->mark_tile_dirty(offset >> 1);
}
WRITE8_MEMBER(argus_state::argus_bg_status_w)
void argus_state::bg_status_w(u8 data)
{
if (m_bg_status != data)
{
@ -425,7 +413,7 @@ WRITE8_MEMBER(argus_state::argus_bg_status_w)
}
}
WRITE8_MEMBER(argus_state::valtric_bg_status_w)
void valtric_state::bg_status_w(u8 data)
{
if (m_bg_status != data)
{
@ -444,12 +432,12 @@ WRITE8_MEMBER(argus_state::valtric_bg_status_w)
}
}
WRITE8_MEMBER(argus_state::butasan_bg0_status_w)
void butasan_state::bg0_status_w(u8 data)
{
m_bg_status = data;
}
WRITE8_MEMBER(argus_state::butasan_bg1_status_w)
void butasan_state::bg1_status_w(u8 data)
{
if (m_butasan_bg1_status != data)
{
@ -460,12 +448,12 @@ WRITE8_MEMBER(argus_state::butasan_bg1_status_w)
}
}
WRITE8_MEMBER(argus_state::flipscreen_w)
void argus_common_state::flipscreen_w(u8 data)
{
m_flipscreen = data & 0x80;
}
WRITE8_MEMBER(argus_state::argus_paletteram_w)
void argus_state::paletteram_w(offs_t offset, u8 data)
{
int offs;
@ -511,7 +499,7 @@ WRITE8_MEMBER(argus_state::argus_paletteram_w)
}
}
WRITE8_MEMBER(argus_state::valtric_paletteram_w)
void valtric_state::paletteram_w(offs_t offset, u8 data)
{
m_paletteram[offset] = data;
@ -539,7 +527,7 @@ WRITE8_MEMBER(argus_state::valtric_paletteram_w)
}
}
WRITE8_MEMBER(argus_state::butasan_paletteram_w)
void butasan_state::paletteram_w(offs_t offset, u8 data)
{
m_paletteram[offset] = data;
@ -572,18 +560,18 @@ WRITE8_MEMBER(argus_state::butasan_paletteram_w)
change_palette(((offset & 0x1f) >> 1) + 0xf0, offset & ~1, offset | 1);
}
WRITE8_MEMBER(argus_state::butasan_bg1ram_w)
void butasan_state::bg1ram_w(offs_t offset, u8 data)
{
m_butasan_bg1ram[offset] = data;
m_bg_tilemap[1]->mark_tile_dirty(offset);
}
WRITE8_MEMBER(argus_state::butasan_pageselect_w)
void butasan_state::pageselect_w(u8 data)
{
m_butasan_page_latch = data & 1;
}
READ8_MEMBER(argus_state::butasan_pagedram_r)
u8 butasan_state::pagedram_r(offs_t offset)
{
if (offset <= 0x07ff)
return m_butasan_pagedram[m_butasan_page_latch][offset];
@ -591,7 +579,7 @@ READ8_MEMBER(argus_state::butasan_pagedram_r)
return m_butasan_pagedram[0][offset];
}
WRITE8_MEMBER(argus_state::butasan_pagedram_w)
void butasan_state::pagedram_w(offs_t offset, u8 data)
{
m_butasan_pagedram[m_butasan_page_latch][offset] = data;
@ -607,12 +595,12 @@ WRITE8_MEMBER(argus_state::butasan_pagedram_w)
}
}
WRITE8_MEMBER(argus_state::valtric_unknown_w)
void valtric_state::unknown_w(u8 data)
{
m_valtric_unknown = data;
}
WRITE8_MEMBER(argus_state::butasan_unknown_w)
void butasan_state::unknown_w(u8 data)
{
m_butasan_unknown = data;
}
@ -625,7 +613,7 @@ WRITE8_MEMBER(argus_state::butasan_unknown_w)
#define bg_scrollx(layer) (m_bg_scrollx[layer][0] | (m_bg_scrollx[layer][1] << 8))
#define bg_scrolly(layer) (m_bg_scrolly[layer][0] | (m_bg_scrolly[layer][1] << 8))
void argus_state::bg_setting()
void argus_common_state::bg_setting()
{
machine().tilemap().set_flip_all(m_flipscreen ? TILEMAP_FLIPY|TILEMAP_FLIPX : 0);
@ -677,7 +665,7 @@ void argus_state::bg_setting()
}
}
void argus_state::argus_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority)
void argus_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority)
{
/* Draw the sprites */
for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
@ -717,7 +705,7 @@ void argus_state::argus_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &clip
}
#if 1
void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
void valtric_state::draw_mosaic(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
if (m_valtric_mosaic!=0x80)
{
@ -733,7 +721,7 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
m_bg_tilemap[1]->draw(screen, m_mosaicbitmap, cliprect, 0, 0);
{
int step=m_mosaic;
uint32_t *dest;
u32 *dest;
int x,y,xx,yy,c=0;
int width = screen.width();
int height = screen.height();
@ -764,7 +752,7 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
}
}
#else
void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
void valtric_state::draw_mosaic(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int step = 0x10 - (m_valtric_mosaic & 0x0f);
@ -774,7 +762,7 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
{
m_bg_tilemap[1]->draw(screen, m_mosaicbitmap, cliprect, 0, 0);
{
uint32_t *dest;
u32 *dest;
int x,y,xx,yy,c=0;
int width = screen.width();
int height = screen.height();
@ -804,7 +792,7 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
}
#endif
void argus_state::valtric_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
void valtric_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
/* Draw the sprites */
for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
@ -840,7 +828,7 @@ void argus_state::valtric_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cl
}
}
void argus_state::butasan_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
void butasan_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
/* Draw the sprites */
for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
@ -947,14 +935,14 @@ void argus_state::butasan_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cl
}
void argus_state::butasan_log_vram()
void butasan_state::log_vram()
{
#ifdef MAME_DEBUG
int offs;
if (machine().input().code_pressed(KEYCODE_M))
{
uint8_t *spriteram = m_spriteram;
u8 *spriteram = &m_spriteram[0];
int i;
logerror("\nSprite RAM\n");
logerror("---------------------------------------\n");
@ -1000,33 +988,33 @@ void argus_state::butasan_log_vram()
#endif
}
uint32_t argus_state::screen_update_argus(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
u32 argus_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bg_setting();
m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
argus_draw_sprites(bitmap, cliprect, 0);
draw_sprites(bitmap, cliprect, 0);
if (m_bg_status & 1) /* Backgound enable */
m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
argus_draw_sprites(bitmap, cliprect, 1);
draw_sprites(bitmap, cliprect, 1);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
uint32_t argus_state::screen_update_valtric(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
u32 valtric_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bg_setting();
if (m_bg_status & 1) /* Backgound enable */
valtric_draw_mosaic(screen, bitmap, cliprect);
draw_mosaic(screen, bitmap, cliprect);
else
bitmap.fill(m_palette->black_pen(), cliprect);
valtric_draw_sprites(bitmap, cliprect);
draw_sprites(bitmap, cliprect);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
uint32_t argus_state::screen_update_butasan(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
u32 butasan_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bg_setting();
@ -1035,9 +1023,9 @@ uint32_t argus_state::screen_update_butasan(screen_device &screen, bitmap_rgb32
else
bitmap.fill(m_palette->black_pen(), cliprect);
if (m_butasan_bg1_status & 1) m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
butasan_draw_sprites(bitmap, cliprect);
draw_sprites(bitmap, cliprect);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
butasan_log_vram();
log_vram();
return 0;
}