argus.cpp : Fix argus sound writes(second ym2203 has not implemented), Cleanup duplicates, Runtime tag lookups

This commit is contained in:
cam900 2018-05-10 02:44:24 +09:00 committed by Vas Crabb
parent 185c61161d
commit 70a47a3998
3 changed files with 91 additions and 159 deletions

View File

@ -272,13 +272,12 @@ void argus_state::sound_map_b(address_map &map)
map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read)); map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read));
} }
#if 0
void argus_state::sound_portmap_1(address_map &map) void argus_state::sound_portmap_1(address_map &map)
{ {
map.global_mask(0xff); map.global_mask(0xff);
map(0x00, 0x01).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); 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
} }
#endif
void argus_state::sound_portmap_2(address_map &map) void argus_state::sound_portmap_2(address_map &map)
{ {
@ -443,97 +442,43 @@ INPUT_PORTS_END
static const gfx_layout charlayout = static const gfx_layout charlayout =
{ {
8,8, /* 8x8 characters */ 8,8, /* 8x8 characters */
1024, /* 1024 characters */ RGN_FRAC(1,1), /* number of characters */
4, /* 4 bits per pixel */ 4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, { STEP4(0,1) },
{ 0, 4, 8, 12, 16, 20, 24, 28 }, { STEP8(0,4) },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8 }, { STEP8(0,4*8) },
32*8 32*8
}; };
static const gfx_layout tilelayout_256 = static const gfx_layout tilelayout =
{ {
16,16, /* 16x16 characters */ 16,16, /* 16x16 characters */
256, /* 256 characters */ RGN_FRAC(1,1), /* number of characters */
4, /* 4 bits per pixel */ 4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, { STEP4(0,1) },
{ 0, 4, 8, 12, 16, 20, 24, 28, { STEP8(0,4), STEP8(4*8*16, 4) },
64*8, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 }, { STEP16(0,4*8) },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8,
32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8 },
128*8
};
static const gfx_layout tilelayout_512 =
{
16,16, /* 16x16 characters */
512, /* 512 characters */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 },
{ 0, 4, 8, 12, 16, 20, 24, 28,
64*8, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8,
32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8 },
128*8
};
static const gfx_layout tilelayout_1024 =
{
16,16, /* 16x16 characters */
1024, /* 1024 characters */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 },
{ 0, 4, 8, 12, 16, 20, 24, 28,
64*8, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8,
32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8 },
128*8
};
static const gfx_layout tilelayout_2048 =
{
16,16, /* 16x16 characters */
2048, /* 2048 characters */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 },
{ 0, 4, 8, 12, 16, 20, 24, 28,
64*8, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8,
32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8 },
128*8
};
static const gfx_layout tilelayout_4096 =
{
16,16, /* 16x16 characters */
4096, /* 4096 characters */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 },
{ 0, 4, 8, 12, 16, 20, 24, 28,
64*8, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8,
32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8 },
128*8 128*8
}; };
static GFXDECODE_START( argus ) static GFXDECODE_START( argus )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout_1024, 0*16, 8 ) GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0*16, 8 )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout_1024, 8*16, 16 ) GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 8*16, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout_256, 24*16, 16 ) GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 24*16, 16 )
GFXDECODE_ENTRY( "gfx4", 0, charlayout, 40*16, 16 ) GFXDECODE_ENTRY( "gfx4", 0, charlayout, 40*16, 16 )
GFXDECODE_END GFXDECODE_END
static GFXDECODE_START( valtric ) static GFXDECODE_START( valtric )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout_1024, 0*16, 16 ) GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0*16, 16 )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout_2048, 16*16, 16 ) GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16*16, 16 )
GFXDECODE_ENTRY( "gfx3", 0, charlayout, 32*16, 16 ) GFXDECODE_ENTRY( "gfx3", 0, charlayout, 32*16, 16 )
GFXDECODE_END GFXDECODE_END
static GFXDECODE_START( butasan ) static GFXDECODE_START( butasan )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout_4096, 0*16, 16 ) GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0*16, 16 )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout_1024, 16*16, 16 ) GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16*16, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout_512, 12*16, 16 ) GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 12*16, 16 )
GFXDECODE_ENTRY( "gfx4", 0, charlayout, 32*16, 16 ) GFXDECODE_ENTRY( "gfx4", 0, charlayout, 32*16, 16 )
GFXDECODE_END GFXDECODE_END
@ -546,7 +491,7 @@ MACHINE_CONFIG_START(argus_state::argus)
MCFG_DEVICE_ADD("audiocpu", Z80, 5000000) MCFG_DEVICE_ADD("audiocpu", Z80, 5000000)
MCFG_DEVICE_PROGRAM_MAP(sound_map_a) MCFG_DEVICE_PROGRAM_MAP(sound_map_a)
MCFG_DEVICE_IO_MAP(sound_portmap_2) MCFG_DEVICE_IO_MAP(sound_portmap_1)
MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_QUANTUM_TIME(attotime::from_hz(600))
@ -577,12 +522,6 @@ MACHINE_CONFIG_START(argus_state::argus)
MCFG_SOUND_ROUTE(1, "mono", 0.15) MCFG_SOUND_ROUTE(1, "mono", 0.15)
MCFG_SOUND_ROUTE(2, "mono", 0.15) MCFG_SOUND_ROUTE(2, "mono", 0.15)
MCFG_SOUND_ROUTE(3, "mono", 0.50) MCFG_SOUND_ROUTE(3, "mono", 0.50)
MCFG_DEVICE_ADD("ym2", YM2203, 6000000 / 4)
MCFG_SOUND_ROUTE(0, "mono", 0.15)
MCFG_SOUND_ROUTE(1, "mono", 0.15)
MCFG_SOUND_ROUTE(2, "mono", 0.15)
MCFG_SOUND_ROUTE(3, "mono", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
MACHINE_CONFIG_START(argus_state::valtric) MACHINE_CONFIG_START(argus_state::valtric)
@ -716,10 +655,10 @@ ROM_START( argus )
ROM_REGION( 0x08000, "gfx4", 0 ) /* Text */ ROM_REGION( 0x08000, "gfx4", 0 ) /* Text */
ROM_LOAD( "ag_10.bin", 0x00000, 0x04000, CRC(2de696c4) SHA1(1ad0f1cde127a1618c2ea74a53e522963a79e5ce) ) ROM_LOAD( "ag_10.bin", 0x00000, 0x04000, CRC(2de696c4) SHA1(1ad0f1cde127a1618c2ea74a53e522963a79e5ce) )
ROM_REGION( 0x08000, "user1", 0 ) /* Map */ ROM_REGION( 0x08000, "vrom1", 0 ) /* Map */
ROM_LOAD( "ag_15.bin", 0x00000, 0x08000, CRC(99834c1b) SHA1(330f271771b158493b28bb178c8cda98efd1d90c) ) ROM_LOAD( "ag_15.bin", 0x00000, 0x08000, CRC(99834c1b) SHA1(330f271771b158493b28bb178c8cda98efd1d90c) )
ROM_REGION( 0x08000, "user2", 0 ) /* Pattern */ ROM_REGION( 0x08000, "vrom2", 0 ) /* Pattern */
ROM_LOAD( "ag_16.bin", 0x00000, 0x08000, CRC(39a51714) SHA1(ad89a630f1352eb4d8beeeebf909d5e2b5d7cc12) ) ROM_LOAD( "ag_16.bin", 0x00000, 0x08000, CRC(39a51714) SHA1(ad89a630f1352eb4d8beeeebf909d5e2b5d7cc12) )
ROM_END ROM_END

View File

@ -9,22 +9,22 @@ class argus_state : public driver_device
{ {
public: public:
argus_state(const machine_config &mconfig, device_type type, const char *tag) argus_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag)
m_maincpu(*this, "maincpu"), , m_maincpu(*this, "maincpu")
m_audiocpu(*this, "audiocpu"), , m_audiocpu(*this, "audiocpu")
m_gfxdecode(*this, "gfxdecode"), , m_gfxdecode(*this, "gfxdecode")
m_screen(*this, "screen"), , m_screen(*this, "screen")
m_palette(*this, "palette"), , m_palette(*this, "palette")
m_blend(*this, "blend"), , m_blend(*this, "blend")
m_bg0_scrollx(*this, "bg0_scrollx"), , m_bg_scrollx(*this, "bg%u_scrollx", 0U)
m_bg0_scrolly(*this, "bg0_scrolly"), , m_bg_scrolly(*this, "bg%u_scrolly", 0U)
m_bg1_scrollx(*this, "bg1_scrollx"), , m_paletteram(*this, "paletteram")
m_bg1_scrolly(*this, "bg1_scrolly"), , m_txram(*this, "txram")
m_paletteram(*this, "paletteram"), , m_bg1ram(*this, "bg1ram")
m_txram(*this, "txram"), , m_spriteram(*this, "spriteram")
m_bg1ram(*this, "bg1ram"), , m_butasan_bg1ram(*this, "butasan_bg1ram")
m_spriteram(*this, "spriteram"), , m_vrom(*this, "vrom%u", 1U)
m_butasan_bg1ram(*this, "butasan_bg1ram") { } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
@ -33,15 +33,14 @@ public:
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<jaleco_blend_device> m_blend; required_device<jaleco_blend_device> m_blend;
optional_shared_ptr<uint8_t> m_bg0_scrollx; optional_shared_ptr_array<uint8_t, 2> m_bg_scrollx;
optional_shared_ptr<uint8_t> m_bg0_scrolly; optional_shared_ptr_array<uint8_t, 2> m_bg_scrolly;
required_shared_ptr<uint8_t> m_bg1_scrollx;
required_shared_ptr<uint8_t> m_bg1_scrolly;
required_shared_ptr<uint8_t> m_paletteram; required_shared_ptr<uint8_t> m_paletteram;
optional_shared_ptr<uint8_t> m_txram; optional_shared_ptr<uint8_t> m_txram;
optional_shared_ptr<uint8_t> m_bg1ram; optional_shared_ptr<uint8_t> m_bg1ram;
required_shared_ptr<uint8_t> m_spriteram; required_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint8_t> m_butasan_bg1ram; optional_shared_ptr<uint8_t> m_butasan_bg1ram;
optional_region_ptr_array<uint8_t, 2> m_vrom;
// common // common
uint8_t m_bg_status; uint8_t m_bg_status;
@ -70,8 +69,7 @@ public:
int m_mosaic; int m_mosaic;
tilemap_t *m_tx_tilemap; tilemap_t *m_tx_tilemap;
tilemap_t *m_bg0_tilemap; tilemap_t *m_bg_tilemap[2];
tilemap_t *m_bg1_tilemap;
// common // common
DECLARE_WRITE8_MEMBER(bankselect_w); DECLARE_WRITE8_MEMBER(bankselect_w);

View File

@ -262,11 +262,11 @@ void argus_state::reset_common()
VIDEO_START_MEMBER(argus_state,argus) VIDEO_START_MEMBER(argus_state,argus)
{ {
/* info offset w h col row */ /* info offset w h col row */
m_bg0_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::argus_get_bg0_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32); 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, 32, 32);
m_bg1_tilemap = &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_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::argus_get_tx_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32); m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::argus_get_tx_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_bg1_tilemap->set_transparent_pen(15); m_bg_tilemap[1]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15); m_tx_tilemap->set_transparent_pen(15);
/* dummy RAM for back ground */ /* dummy RAM for back ground */
@ -284,8 +284,8 @@ VIDEO_RESET_MEMBER(argus_state,argus)
{ {
m_lowbitscroll = 0; m_lowbitscroll = 0;
m_prvscrollx = 0; m_prvscrollx = 0;
m_bg0_scrollx[0] = 0; m_bg_scrollx[0][0] = 0;
m_bg0_scrollx[1] = 0; m_bg_scrollx[0][1] = 0;
memset(m_dummy_bg0ram.get(), 0, 0x800); memset(m_dummy_bg0ram.get(), 0, 0x800);
reset_common(); reset_common();
} }
@ -293,7 +293,7 @@ VIDEO_RESET_MEMBER(argus_state,argus)
VIDEO_START_MEMBER(argus_state,valtric) VIDEO_START_MEMBER(argus_state,valtric)
{ {
/* info offset w h col row */ /* info offset w h col row */
m_bg1_tilemap = &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_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::valtric_get_tx_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32); m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::valtric_get_tx_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_tx_tilemap->set_transparent_pen(15); m_tx_tilemap->set_transparent_pen(15);
@ -317,11 +317,11 @@ VIDEO_RESET_MEMBER(argus_state,valtric)
VIDEO_START_MEMBER(argus_state,butasan) VIDEO_START_MEMBER(argus_state,butasan)
{ {
/* info offset w h col row */ /* info offset w h col row */
m_bg0_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_bg0_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_bg0_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_bg1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_bg1_tile_info),this), TILEMAP_SCAN_ROWS, 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_SCAN_ROWS, 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_SCAN_ROWS, 8, 8, 32, 32); m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(argus_state::butasan_get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_bg1_tilemap->set_transparent_pen(15); m_bg_tilemap[1]->set_transparent_pen(15);
m_tx_tilemap->set_transparent_pen(15); m_tx_tilemap->set_transparent_pen(15);
m_butasan_pagedram[0] = std::make_unique<uint8_t[]>(0x1000); m_butasan_pagedram[0] = std::make_unique<uint8_t[]>(0x1000);
@ -363,19 +363,16 @@ void argus_state::argus_write_dummy_rams(int dramoffs, int vromoffs)
int voffs; int voffs;
int offs; int offs;
uint8_t *VROM1 = memregion("user1")->base(); /* "ag_15.bin" */
uint8_t *VROM2 = memregion("user2")->base(); /* "ag_16.bin" */
/* offset in pattern data */ /* offset in pattern data */
offs = VROM1[vromoffs] | (VROM1[vromoffs + 1] << 8); offs = m_vrom[0][vromoffs] | (m_vrom[0][vromoffs + 1] << 8);
offs &= 0x7ff; offs &= 0x7ff;
voffs = offs * 16; voffs = offs * 16;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
m_dummy_bg0ram[dramoffs] = VROM2[voffs]; m_dummy_bg0ram[dramoffs] = m_vrom[1][voffs];
m_dummy_bg0ram[dramoffs + 1] = VROM2[voffs + 1]; m_dummy_bg0ram[dramoffs + 1] = m_vrom[1][voffs + 1];
m_bg0_tilemap->mark_tile_dirty(dramoffs >> 1); m_bg_tilemap[0]->mark_tile_dirty(dramoffs >> 1);
dramoffs += 2; dramoffs += 2;
voffs += 2; voffs += 2;
} }
@ -445,7 +442,7 @@ WRITE8_MEMBER(argus_state::txram_w)
WRITE8_MEMBER(argus_state::bg1ram_w) WRITE8_MEMBER(argus_state::bg1ram_w)
{ {
m_bg1ram[offset] = data; m_bg1ram[offset] = data;
m_bg1_tilemap->mark_tile_dirty(offset >> 1); m_bg_tilemap[1]->mark_tile_dirty(offset >> 1);
} }
WRITE8_MEMBER(argus_state::argus_bg_status_w) WRITE8_MEMBER(argus_state::argus_bg_status_w)
@ -498,7 +495,7 @@ WRITE8_MEMBER(argus_state::butasan_bg1_status_w)
m_butasan_bg1_status = data; m_butasan_bg1_status = data;
/* Bank changed */ /* Bank changed */
m_bg1_tilemap->mark_all_dirty(); m_bg_tilemap[1]->mark_all_dirty();
} }
} }
@ -623,7 +620,7 @@ WRITE8_MEMBER(argus_state::butasan_bg1ram_w)
idx = (offset & 0x00f) | ((offset & 0x200) >> 5) | ((offset & 0x1f0) << 1); idx = (offset & 0x00f) | ((offset & 0x200) >> 5) | ((offset & 0x1f0) << 1);
idx ^= 0x0f0; idx ^= 0x0f0;
m_bg1_tilemap->mark_tile_dirty(idx); m_bg_tilemap[1]->mark_tile_dirty(idx);
} }
WRITE8_MEMBER(argus_state::butasan_pageselect_w) WRITE8_MEMBER(argus_state::butasan_pageselect_w)
@ -650,7 +647,7 @@ WRITE8_MEMBER(argus_state::butasan_pagedram_w)
int idx; int idx;
idx = ((offset & 0x01e) >> 1) | ((offset & 0x400) >> 6) | (offset & 0x3e0); idx = ((offset & 0x01e) >> 1) | ((offset & 0x400) >> 6) | (offset & 0x3e0);
idx ^= 0x1e0; idx ^= 0x1e0;
m_bg0_tilemap->mark_tile_dirty(idx); m_bg_tilemap[0]->mark_tile_dirty(idx);
} }
} }
else else
@ -675,10 +672,8 @@ WRITE8_MEMBER(argus_state::butasan_unknown_w)
Screen refresh Screen refresh
***************************************************************************/ ***************************************************************************/
#define bg0_scrollx (m_bg0_scrollx[0] | (m_bg0_scrollx[1] << 8)) #define bg_scrollx(layer) (m_bg_scrollx[layer][0] | (m_bg_scrollx[layer][1] << 8))
#define bg0_scrolly (m_bg0_scrolly[0] | (m_bg0_scrolly[1] << 8)) #define bg_scrolly(layer) (m_bg_scrolly[layer][0] | (m_bg_scrolly[layer][1] << 8))
#define bg1_scrollx (m_bg1_scrollx[0] | (m_bg1_scrollx[1] << 8))
#define bg1_scrolly (m_bg1_scrolly[0] | (m_bg1_scrolly[1] << 8))
void argus_state::bg_setting() void argus_state::bg_setting()
{ {
@ -686,23 +681,23 @@ void argus_state::bg_setting()
if (!m_flipscreen) if (!m_flipscreen)
{ {
if (m_bg0_tilemap != nullptr) if (m_bg_tilemap[0] != nullptr)
{ {
m_bg0_tilemap->set_scrollx(0, bg0_scrollx & 0x1ff); m_bg_tilemap[0]->set_scrollx(0, bg_scrollx(0) & 0x1ff);
m_bg0_tilemap->set_scrolly(0, bg0_scrolly & 0x1ff); m_bg_tilemap[0]->set_scrolly(0, bg_scrolly(0) & 0x1ff);
} }
m_bg1_tilemap->set_scrollx(0, bg1_scrollx & 0x1ff); m_bg_tilemap[1]->set_scrollx(0, bg_scrollx(1) & 0x1ff);
m_bg1_tilemap->set_scrolly(0, bg1_scrolly & 0x1ff); m_bg_tilemap[1]->set_scrolly(0, bg_scrolly(1) & 0x1ff);
} }
else else
{ {
if (m_bg0_tilemap != nullptr) if (m_bg_tilemap[0] != nullptr)
{ {
m_bg0_tilemap->set_scrollx(0, (bg0_scrollx + 256) & 0x1ff); m_bg_tilemap[0]->set_scrollx(0, (bg_scrollx(0) + 256) & 0x1ff);
m_bg0_tilemap->set_scrolly(0, (bg0_scrolly + 256) & 0x1ff); m_bg_tilemap[0]->set_scrolly(0, (bg_scrolly(0) + 256) & 0x1ff);
} }
m_bg1_tilemap->set_scrollx(0, (bg1_scrollx + 256) & 0x1ff); m_bg_tilemap[1]->set_scrollx(0, (bg_scrollx(1) + 256) & 0x1ff);
m_bg1_tilemap->set_scrolly(0, (bg1_scrolly + 256) & 0x1ff); m_bg_tilemap[1]->set_scrolly(0, (bg_scrolly(1) + 256) & 0x1ff);
} }
} }
@ -712,16 +707,16 @@ void argus_state::argus_bg0_scroll_handle()
int dcolumn; int dcolumn;
/* Deficit between previous and current scroll value */ /* Deficit between previous and current scroll value */
delta = bg0_scrollx - m_prvscrollx; delta = bg_scrollx(0) - m_prvscrollx;
m_prvscrollx = bg0_scrollx; m_prvscrollx = bg_scrollx(0);
if (delta == 0) if (delta == 0)
return; return;
if (delta > 0) if (delta > 0)
{ {
m_lowbitscroll += delta % 16; m_lowbitscroll += delta & 0xf;
dcolumn = delta / 16; dcolumn = delta >> 4;
if (m_lowbitscroll >= 16) if (m_lowbitscroll >= 16)
{ {
@ -734,9 +729,9 @@ void argus_state::argus_bg0_scroll_handle()
int i, j; int i, j;
int col, woffs, roffs; int col, woffs, roffs;
col = ((bg0_scrollx / 16) + 16) % 32; col = ((bg_scrollx(0) >> 4) + 16) & 0x1f;
woffs = 32 * 2 * col; woffs = 32 * 2 * col;
roffs = (((bg0_scrollx / 16) + 16) * 8) % 0x8000; roffs = (((bg_scrollx(0) >> 4) + 16) * 8) & 0x7fff;
if (dcolumn >= 18) if (dcolumn >= 18)
dcolumn = 18; dcolumn = 18;
@ -760,8 +755,8 @@ void argus_state::argus_bg0_scroll_handle()
} }
else else
{ {
m_lowbitscroll += (delta % 16); m_lowbitscroll += (delta & 0xf);
dcolumn = -(delta / 16); dcolumn = -(delta >> 4);
if (m_lowbitscroll <= 0) if (m_lowbitscroll <= 0)
{ {
@ -774,9 +769,9 @@ void argus_state::argus_bg0_scroll_handle()
int i, j; int i, j;
int col, woffs, roffs; int col, woffs, roffs;
col = ((bg0_scrollx / 16) + 31) % 32; col = ((bg_scrollx(0) >> 4) + 31) & 0x1f;
woffs = 32 * 2 * col; woffs = 32 * 2 * col;
roffs = ((bg0_scrollx / 16) - 1) * 8; roffs = ((bg_scrollx(0) >> 4) - 1) * 8;
if (roffs < 0) if (roffs < 0)
roffs += 0x08000; roffs += 0x08000;
@ -850,10 +845,10 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
} }
if (m_mosaic==0) if (m_mosaic==0)
m_bg1_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
else else
{ {
m_bg1_tilemap->draw(screen, m_mosaicbitmap, cliprect, 0, 0); m_bg_tilemap[1]->draw(screen, m_mosaicbitmap, cliprect, 0, 0);
{ {
int step=m_mosaic; int step=m_mosaic;
uint32_t *dest; uint32_t *dest;
@ -892,10 +887,10 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
int step = 0x10 - (m_valtric_mosaic & 0x0f); int step = 0x10 - (m_valtric_mosaic & 0x0f);
if (step == 1) if (step == 1)
m_bg1_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
else else
{ {
m_bg1_tilemap->draw(screen, m_mosaicbitmap, cliprect, 0, 0); m_bg_tilemap[1]->draw(screen, m_mosaicbitmap, cliprect, 0, 0);
{ {
uint32_t *dest; uint32_t *dest;
int x,y,xx,yy,c=0; int x,y,xx,yy,c=0;
@ -1130,10 +1125,10 @@ uint32_t argus_state::screen_update_argus(screen_device &screen, bitmap_rgb32 &b
/* scroll BG0 and render tile at proper position */ /* scroll BG0 and render tile at proper position */
argus_bg0_scroll_handle(); argus_bg0_scroll_handle();
m_bg0_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
argus_draw_sprites(bitmap, cliprect, 0); argus_draw_sprites(bitmap, cliprect, 0);
if (m_bg_status & 1) /* Backgound enable */ if (m_bg_status & 1) /* Backgound enable */
m_bg1_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
argus_draw_sprites(bitmap, cliprect, 1); argus_draw_sprites(bitmap, cliprect, 1);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0; return 0;
@ -1157,10 +1152,10 @@ uint32_t argus_state::screen_update_butasan(screen_device &screen, bitmap_rgb32
bg_setting(); bg_setting();
if (m_bg_status & 1) /* Backgound enable */ if (m_bg_status & 1) /* Backgound enable */
m_bg0_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
else else
bitmap.fill(m_palette->black_pen(), cliprect); bitmap.fill(m_palette->black_pen(), cliprect);
if (m_butasan_bg1_status & 1) m_bg1_tilemap->draw(screen, bitmap, cliprect, 0, 0); if (m_butasan_bg1_status & 1) m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
butasan_draw_sprites(bitmap, cliprect); butasan_draw_sprites(bitmap, cliprect);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);