mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
argus.cpp: Separate state classes; simplify handlers; eliminate legacy overrides (nw)
This commit is contained in:
parent
997edbcaf5
commit
c185a04029
@ -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 )
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user