diff --git a/src/mame/drivers/xain.cpp b/src/mame/drivers/xain.cpp index 6ae925b7064..2175e47ab1d 100644 --- a/src/mame/drivers/xain.cpp +++ b/src/mame/drivers/xain.cpp @@ -147,10 +147,10 @@ Updates by Bryan McPhail, 12/12/2004: #include "speaker.h" -#define MASTER_CLOCK XTAL(12'000'000) -#define CPU_CLOCK MASTER_CLOCK / 8 -#define MCU_CLOCK MASTER_CLOCK / 4 -#define PIXEL_CLOCK MASTER_CLOCK / 2 +static constexpr XTAL MASTER_CLOCK(12_MHz_XTAL); +static constexpr XTAL CPU_CLOCK(MASTER_CLOCK / 8); +static constexpr XTAL MCU_CLOCK(MASTER_CLOCK / 4); +static constexpr XTAL PIXEL_CLOCK(MASTER_CLOCK / 2); /* @@ -170,7 +170,7 @@ Updates by Bryan McPhail, 12/12/2004: inline int xain_state::scanline_to_vcount(int scanline) { - int vcount = scanline + 8; + int const vcount = scanline + 8; if (vcount < 0x100) return vcount; else @@ -179,49 +179,41 @@ inline int xain_state::scanline_to_vcount(int scanline) TIMER_DEVICE_CALLBACK_MEMBER(xain_state::scanline) { - int scanline = param; - int screen_height = m_screen->height(); - int vcount_old = scanline_to_vcount((scanline == 0) ? screen_height - 1 : scanline - 1); - int vcount = scanline_to_vcount(scanline); + int const scanline = param; + int const screen_height = m_screen->height(); + int const vcount_old = scanline_to_vcount((scanline == 0) ? screen_height - 1 : scanline - 1); + int const vcount = scanline_to_vcount(scanline); - /* update to the current point */ + // update to the current point if (scanline > 0) { m_screen->update_partial(scanline - 1); } - /* FIRQ (IMS) fires every on every 8th scanline (except 0) */ + // FIRQ (IMS) fires every on every 8th scanline (except 0) if (!(vcount_old & 8) && (vcount & 8)) - { m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); - } - /* NMI fires on scanline 248 (VBL) and is latched */ + // NMI fires on scanline 248 (VBL) and is latched if (vcount == 0xf8) - { m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); - } - /* VBLANK input bit is held high from scanlines 248-255 */ + // VBLANK input bit is held high from scanlines 248-255 if (vcount >= 248-1) // -1 is a hack - see notes above - { m_vblank = 1; - } else - { m_vblank = 0; - } } WRITE8_MEMBER(xain_state::cpuA_bankswitch_w) { m_pri = data & 0x7; - membank("bank1")->set_entry((data >> 3) & 1); + m_rom_banks[0]->set_entry((data >> 3) & 1); } WRITE8_MEMBER(xain_state::cpuB_bankswitch_w) { - membank("bank2")->set_entry(data & 1); + m_rom_banks[1]->set_entry(data & 1); } WRITE8_MEMBER(xain_state::main_irq_w) @@ -284,29 +276,54 @@ READ8_MEMBER(xain_state::mcu_comm_reset_r) } +/*************************************************************************** + + Memory handlers + +***************************************************************************/ + +template WRITE8_MEMBER(xain_state::bgram_w) +{ + m_bgram[N][offset] = data; + m_bg_tilemaps[N]->mark_tile_dirty(offset & 0x3ff); +} + +template WRITE8_MEMBER(xain_state::scrollx_w) +{ + m_scrollx[N][offset] = data; + m_bg_tilemaps[N]->set_scrollx(0, m_scrollx[N][0] | (m_scrollx[N][1] << 8)); +} + +template WRITE8_MEMBER(xain_state::scrolly_w) +{ + m_scrolly[N][offset] = data; + m_bg_tilemaps[N]->set_scrolly(0, m_scrolly[N][0] | (m_scrolly[N][1] << 8)); +} + + void xain_state::bootleg_map(address_map &map) { map(0x0000, 0x1fff).ram().share("share1"); - map(0x2000, 0x27ff).ram().w(this, FUNC(xain_state::charram_w)).share("charram"); - map(0x2800, 0x2fff).ram().w(this, FUNC(xain_state::bgram1_w)).share("bgram1"); - map(0x3000, 0x37ff).ram().w(this, FUNC(xain_state::bgram0_w)).share("bgram0"); - map(0x3800, 0x397f).ram().share("spriteram"); + map(0x2000, 0x27ff).ram().w(this, FUNC(xain_state::charram_w)).share(m_charram); + map(0x2800, 0x2fff).ram().w(this, FUNC(xain_state::bgram_w<1>)).share(m_bgram[1]); + map(0x3000, 0x37ff).ram().w(this, FUNC(xain_state::bgram_w<0>)).share(m_bgram[0]); + map(0x3800, 0x397f).ram().share(m_spriteram); map(0x3a00, 0x3a00).portr("P1"); - map(0x3a00, 0x3a01).w(this, FUNC(xain_state::scrollxP1_w)); + map(0x3a00, 0x3a01).w(this, FUNC(xain_state::scrollx_w<1>)); map(0x3a01, 0x3a01).portr("P2"); map(0x3a02, 0x3a02).portr("DSW0"); - map(0x3a02, 0x3a03).w(this, FUNC(xain_state::scrollyP1_w)); + map(0x3a02, 0x3a03).w(this, FUNC(xain_state::scrolly_w<1>)); map(0x3a03, 0x3a03).portr("DSW1"); - map(0x3a04, 0x3a05).w(this, FUNC(xain_state::scrollxP0_w)); + map(0x3a04, 0x3a05).w(this, FUNC(xain_state::scrollx_w<0>)); map(0x3a05, 0x3a05).portr("VBLANK"); - map(0x3a06, 0x3a07).w(this, FUNC(xain_state::scrollyP0_w)); + map(0x3a06, 0x3a07).w(this, FUNC(xain_state::scrolly_w<0>)); map(0x3a08, 0x3a08).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x3a09, 0x3a0c).w(this, FUNC(xain_state::main_irq_w)); map(0x3a0d, 0x3a0d).w(this, FUNC(xain_state::flipscreen_w)); map(0x3a0f, 0x3a0f).w(this, FUNC(xain_state::cpuA_bankswitch_w)); map(0x3c00, 0x3dff).w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0x3e00, 0x3fff).w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); - map(0x4000, 0x7fff).bankr("bank1"); + map(0x4000, 0x7fff).bankr(m_rom_banks[0]); map(0x8000, 0xffff).rom(); } @@ -324,7 +341,7 @@ void xain_state::cpu_map_B(address_map &map) map(0x2000, 0x2000).w(this, FUNC(xain_state::irqA_assert_w)); map(0x2800, 0x2800).w(this, FUNC(xain_state::irqB_clear_w)); map(0x3000, 0x3000).w(this, FUNC(xain_state::cpuB_bankswitch_w)); - map(0x4000, 0x7fff).bankr("bank2"); + map(0x4000, 0x7fff).bankr(m_rom_banks[1]); map(0x8000, 0xffff).rom(); } @@ -446,49 +463,49 @@ GFXDECODE_END void xain_state::machine_start() { - membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0xc000); - membank("bank2")->configure_entries(0, 2, memregion("sub")->base() + 0x4000, 0xc000); - membank("bank1")->set_entry(0); - membank("bank2")->set_entry(0); + m_rom_banks[0]->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0xc000); + m_rom_banks[1]->configure_entries(0, 2, memregion("sub")->base() + 0x4000, 0xc000); + m_rom_banks[0]->set_entry(0); + m_rom_banks[1]->set_entry(0); save_item(NAME(m_vblank)); } MACHINE_CONFIG_START(xain_state::xsleena) - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", MC6809E, CPU_CLOCK) // 68B09E + // basic machine hardware + MCFG_DEVICE_ADD(m_maincpu, MC6809E, CPU_CLOCK) // 68B09E MCFG_DEVICE_PROGRAM_MAP(main_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", xain_state, scanline, "screen", 0, 1) - MCFG_DEVICE_ADD("sub", MC6809E, CPU_CLOCK) // 68B09E + MCFG_DEVICE_ADD(m_subcpu, MC6809E, CPU_CLOCK) // 68B09E MCFG_DEVICE_PROGRAM_MAP(cpu_map_B) - MCFG_DEVICE_ADD("audiocpu", MC6809, PIXEL_CLOCK) // 68A09 + MCFG_DEVICE_ADD(m_audiocpu, MC6809, PIXEL_CLOCK) // 68A09 MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_ADD("mcu", TAITO68705_MCU, MCU_CLOCK) + MCFG_DEVICE_ADD(m_mcu, TAITO68705_MCU, MCU_CLOCK) MCFG_QUANTUM_PERFECT_CPU("maincpu") - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248) /* based on ddragon driver */ + // video hardware + MCFG_SCREEN_ADD(m_screen, RASTER) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248) // based on ddragon driver MCFG_SCREEN_UPDATE_DRIVER(xain_state, screen_update) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_xain) + MCFG_DEVICE_ADD(m_gfxdecode, GFXDECODE, "palette", gfx_xain) MCFG_PALETTE_ADD("palette", 512) MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", M6809_IRQ_LINE)) + MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, M6809_IRQ_LINE)) MCFG_DEVICE_ADD("ym1", YM2203, MCU_CLOCK) - MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE(m_audiocpu, M6809_FIRQ_LINE)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 0.50) MCFG_SOUND_ROUTE(2, "mono", 0.50) diff --git a/src/mame/includes/xain.h b/src/mame/includes/xain.h index be472b819f0..14c1e49b2e7 100644 --- a/src/mame/includes/xain.h +++ b/src/mame/includes/xain.h @@ -1,5 +1,9 @@ // license:BSD-3-Clause // copyright-holders:Carlos A. Lozano, Rob Rosenbrock, Phil Stroffolino +#ifndef MAME_INCLUDES_XAIN_H +#define MAME_INCLUDES_XAIN_H + +#pragma once #include "machine/taito68705interface.h" @@ -21,49 +25,46 @@ public: , m_palette(*this, "palette") , m_soundlatch(*this, "soundlatch") , m_charram(*this, "charram") - , m_bgram0(*this, "bgram0") - , m_bgram1(*this, "bgram1") + , m_bgram(*this, "bgram%u", 0U) , m_spriteram(*this, "spriteram") + , m_rom_banks(*this, { "mainbank", "subbank" }) , m_char_tilemap(nullptr) - , m_bgram0_tilemap(nullptr) - , m_bgram1_tilemap(nullptr) + , m_bg_tilemaps{ nullptr, nullptr } { } + DECLARE_CUSTOM_INPUT_MEMBER(vblank_r); + DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r); + + void xsleena(machine_config &config); + void xsleenab(machine_config &config); + +protected: DECLARE_WRITE8_MEMBER(cpuA_bankswitch_w); DECLARE_WRITE8_MEMBER(cpuB_bankswitch_w); DECLARE_WRITE8_MEMBER(main_irq_w); DECLARE_WRITE8_MEMBER(irqA_assert_w); DECLARE_WRITE8_MEMBER(irqB_clear_w); DECLARE_READ8_MEMBER(mcu_comm_reset_r); - DECLARE_WRITE8_MEMBER(bgram0_w); - DECLARE_WRITE8_MEMBER(bgram1_w); + template DECLARE_WRITE8_MEMBER(bgram_w); DECLARE_WRITE8_MEMBER(charram_w); - DECLARE_WRITE8_MEMBER(scrollxP0_w); - DECLARE_WRITE8_MEMBER(scrollyP0_w); - DECLARE_WRITE8_MEMBER(scrollxP1_w); - DECLARE_WRITE8_MEMBER(scrollyP1_w); + template DECLARE_WRITE8_MEMBER(scrollx_w); + template DECLARE_WRITE8_MEMBER(scrolly_w); DECLARE_WRITE8_MEMBER(flipscreen_w); - DECLARE_CUSTOM_INPUT_MEMBER(vblank_r); - DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r); - TILEMAP_MAPPER_MEMBER(back_scan); - TILE_GET_INFO_MEMBER(get_bgram0_tile_info); - TILE_GET_INFO_MEMBER(get_bgram1_tile_info); + template TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_char_tile_info); TIMER_DEVICE_CALLBACK_MEMBER(scanline); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void xsleenab(machine_config &config); - void xsleena(machine_config &config); void bootleg_map(address_map &map); - void cpu_map_B(address_map &map); void main_map(address_map &map); + void cpu_map_B(address_map &map); void sound_map(address_map &map); -protected: + virtual void machine_start() override; virtual void video_start() override; @@ -81,19 +82,19 @@ protected: required_device m_soundlatch; required_shared_ptr m_charram; - required_shared_ptr m_bgram0; - required_shared_ptr m_bgram1; + required_shared_ptr_array m_bgram; required_shared_ptr m_spriteram; + required_memory_bank_array<2> m_rom_banks; + tilemap_t *m_char_tilemap; - tilemap_t *m_bgram0_tilemap; - tilemap_t *m_bgram1_tilemap; + tilemap_t *m_bg_tilemaps[2]; int m_vblank; u8 m_pri; - u8 m_scrollxP0[2]; - u8 m_scrollyP0[2]; - u8 m_scrollxP1[2]; - u8 m_scrollyP1[2]; + u8 m_scrollx[2][2]; + u8 m_scrolly[2][2]; }; + +#endif // MAME_INCLUDES_XAIN_H diff --git a/src/mame/video/xain.cpp b/src/mame/video/xain.cpp index cc82e1fa500..e400dee7cf8 100644 --- a/src/mame/video/xain.cpp +++ b/src/mame/video/xain.cpp @@ -48,20 +48,11 @@ TILEMAP_MAPPER_MEMBER(xain_state::back_scan) return (col & 0x0f) + ((row & 0x0f) << 4) + ((col & 0x10) << 4) + ((row & 0x10) << 5); } -TILE_GET_INFO_MEMBER(xain_state::get_bgram0_tile_info) +template TILE_GET_INFO_MEMBER(xain_state::get_bg_tile_info) { - int attr = m_bgram0[tile_index | 0x400]; - SET_TILE_INFO_MEMBER(2, - m_bgram0[tile_index] | ((attr & 7) << 8), - (attr & 0x70) >> 4, - (attr & 0x80) ? TILE_FLIPX : 0); -} - -TILE_GET_INFO_MEMBER(xain_state::get_bgram1_tile_info) -{ - int attr = m_bgram1[tile_index | 0x400]; - SET_TILE_INFO_MEMBER(1, - m_bgram1[tile_index] | ((attr & 7) << 8), + int const attr = m_bgram[N][tile_index | 0x400]; + SET_TILE_INFO_MEMBER(2 - N, + m_bgram[N][tile_index] | ((attr & 7) << 8), (attr & 0x70) >> 4, (attr & 0x80) ? TILE_FLIPX : 0); } @@ -84,19 +75,19 @@ TILE_GET_INFO_MEMBER(xain_state::get_char_tile_info) void xain_state::video_start() { - m_bgram0_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(xain_state::get_bgram0_tile_info),this),tilemap_mapper_delegate(FUNC(xain_state::back_scan),this),16,16,32,32); - m_bgram1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(xain_state::get_bgram1_tile_info),this),tilemap_mapper_delegate(FUNC(xain_state::back_scan),this),16,16,32,32); - m_char_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(xain_state::get_char_tile_info),this),TILEMAP_SCAN_ROWS, 8, 8,32,32); + m_bg_tilemaps[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(xain_state::get_bg_tile_info<0>), this), tilemap_mapper_delegate(FUNC(xain_state::back_scan), this), 16,16,32,32); + m_bg_tilemaps[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(xain_state::get_bg_tile_info<1>), this), tilemap_mapper_delegate(FUNC(xain_state::back_scan), this), 16,16,32,32); + m_char_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(xain_state::get_char_tile_info), this), TILEMAP_SCAN_ROWS, 8,8,32,32); - m_bgram0_tilemap->set_transparent_pen(0); - m_bgram1_tilemap->set_transparent_pen(0); + m_bg_tilemaps[0]->set_transparent_pen(0); + m_bg_tilemaps[1]->set_transparent_pen(0); m_char_tilemap->set_transparent_pen(0); save_item(NAME(m_pri)); - save_item(NAME(m_scrollxP0)); - save_item(NAME(m_scrollyP0)); - save_item(NAME(m_scrollxP1)); - save_item(NAME(m_scrollyP1)); + save_item(NAME(m_scrollx[0])); + save_item(NAME(m_scrolly[0])); + save_item(NAME(m_scrollx[1])); + save_item(NAME(m_scrolly[1])); } @@ -107,48 +98,12 @@ void xain_state::video_start() ***************************************************************************/ -WRITE8_MEMBER(xain_state::bgram0_w) -{ - m_bgram0[offset] = data; - m_bgram0_tilemap->mark_tile_dirty(offset & 0x3ff); -} - -WRITE8_MEMBER(xain_state::bgram1_w) -{ - m_bgram1[offset] = data; - m_bgram1_tilemap->mark_tile_dirty(offset & 0x3ff); -} - WRITE8_MEMBER(xain_state::charram_w) { m_charram[offset] = data; m_char_tilemap->mark_tile_dirty(offset & 0x3ff); } -WRITE8_MEMBER(xain_state::scrollxP0_w) -{ - m_scrollxP0[offset] = data; - m_bgram0_tilemap->set_scrollx(0, m_scrollxP0[0]|(m_scrollxP0[1]<<8)); -} - -WRITE8_MEMBER(xain_state::scrollyP0_w) -{ - m_scrollyP0[offset] = data; - m_bgram0_tilemap->set_scrolly(0, m_scrollyP0[0]|(m_scrollyP0[1]<<8)); -} - -WRITE8_MEMBER(xain_state::scrollxP1_w) -{ - m_scrollxP1[offset] = data; - m_bgram1_tilemap->set_scrollx(0, m_scrollxP1[0]|(m_scrollxP1[1]<<8)); -} - -WRITE8_MEMBER(xain_state::scrollyP1_w) -{ - m_scrollyP1[offset] = data; - m_bgram1_tilemap->set_scrolly(0, m_scrollyP1[0]|(m_scrollyP1[1]<<8)); -} - WRITE8_MEMBER(xain_state::flipscreen_w) { @@ -214,51 +169,51 @@ uint32_t xain_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, switch (m_pri&0x7) { case 0: - m_bgram0_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); - m_bgram1_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); m_char_tilemap->draw(screen, bitmap, cliprect, 0,0); break; case 1: - m_bgram1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); - m_bgram0_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); m_char_tilemap->draw(screen, bitmap, cliprect, 0,0); break; case 2: - m_char_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); - m_bgram0_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_char_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); - m_bgram1_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, 0,0); break; case 3: - m_char_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); - m_bgram1_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_char_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); - m_bgram0_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, 0,0); break; case 4: - m_bgram0_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); m_char_tilemap->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); - m_bgram1_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, 0,0); break; case 5: - m_bgram1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); m_char_tilemap->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); - m_bgram0_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, 0,0); break; case 6: - m_bgram0_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); draw_sprites(bitmap,cliprect); - m_bgram1_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, 0,0); m_char_tilemap->draw(screen, bitmap, cliprect, 0,0); break; case 7: - m_bgram1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); + m_bg_tilemaps[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); draw_sprites(bitmap,cliprect); - m_bgram0_tilemap->draw(screen, bitmap, cliprect, 0,0); + m_bg_tilemaps[0]->draw(screen, bitmap, cliprect, 0,0); m_char_tilemap->draw(screen, bitmap, cliprect, 0,0); break; }