From 595512e60e43ee0b8997ab2e037d28d0039c313b Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 3 Jul 2018 03:11:47 +0900 Subject: drgnmst.cpp : Cleanups, Reduce duplicates (#3705) Add PALETTE_DECODER for palette --- src/mame/drivers/drgnmst.cpp | 127 ++++++++++++++++++++----------------------- src/mame/includes/drgnmst.h | 61 ++++++++++----------- src/mame/video/drgnmst.cpp | 45 ++++++++------- 3 files changed, 111 insertions(+), 122 deletions(-) diff --git a/src/mame/drivers/drgnmst.cpp b/src/mame/drivers/drgnmst.cpp index f8b015513c4..c14ae41d527 100644 --- a/src/mame/drivers/drgnmst.cpp +++ b/src/mame/drivers/drgnmst.cpp @@ -46,27 +46,23 @@ Notes: #include "speaker.h" -WRITE16_MEMBER(drgnmst_state::drgnmst_coin_w) +WRITE16_MEMBER(drgnmst_state::coin_w) { machine().bookkeeping().coin_counter_w(0, data & 0x100); machine().bookkeeping().coin_lockout_w(0, ~data & 0x400); machine().bookkeeping().coin_lockout_w(1, ~data & 0x800); } -WRITE16_MEMBER(drgnmst_state::drgnmst_snd_command_w) +WRITE8_MEMBER(drgnmst_state::snd_command_w) { - if (ACCESSING_BITS_0_7) - { - m_snd_command = (data & 0xff); - m_maincpu->yield(); - } + m_snd_command = (data & 0xff); + m_maincpu->yield(); } -WRITE16_MEMBER(drgnmst_state::drgnmst_snd_flag_w) +WRITE8_MEMBER(drgnmst_state::snd_flag_w) { /* Enables the following 68K write operation to latch through to the PIC */ - if (ACCESSING_BITS_0_7) - m_snd_flag = 1; + m_snd_flag = 1; } @@ -75,14 +71,14 @@ READ8_MEMBER(drgnmst_state::pic16c5x_port0_r) return m_pic16c5x_port0; } -READ8_MEMBER(drgnmst_state::drgnmst_snd_command_r) +READ8_MEMBER(drgnmst_state::snd_command_r) { - int data = 0; + uint8_t data = 0; switch (m_oki_control & 0x1f) { - case 0x12: data = (m_oki_2->read(space, 0) & 0x0f); break; - case 0x16: data = (m_oki_1->read(space, 0) & 0x0f); break; + case 0x12: data = (m_oki[1]->read(space, 0) & 0x0f); break; + case 0x16: data = (m_oki[0]->read(space, 0) & 0x0f); break; case 0x0b: case 0x0f: data = m_snd_command; break; default: break; @@ -91,7 +87,7 @@ READ8_MEMBER(drgnmst_state::drgnmst_snd_command_r) return data; } -READ8_MEMBER(drgnmst_state::drgnmst_snd_flag_r) +READ8_MEMBER(drgnmst_state::snd_flag_r) { if (m_snd_flag) { @@ -102,22 +98,22 @@ READ8_MEMBER(drgnmst_state::drgnmst_snd_flag_r) return 0x00; } -WRITE8_MEMBER(drgnmst_state::drgnmst_pcm_banksel_w) +WRITE8_MEMBER(drgnmst_state::pcm_banksel_w) { /* This is a 4 bit port. Each pair of bits is used in part of the OKI PCM ROM bank selectors. - See the Port 2 write handler below (drgnmst_snd_control_w) for details. + See the Port 2 write handler below (snd_control_w) for details. */ m_pic16c5x_port0 = data; } -WRITE8_MEMBER(drgnmst_state::drgnmst_oki_w) +WRITE8_MEMBER(drgnmst_state::oki_w) { m_oki_command = data; } -WRITE8_MEMBER(drgnmst_state::drgnmst_snd_control_w) +WRITE8_MEMBER(drgnmst_state::snd_control_w) { /* This port controls communications to and from the 68K, both OKI devices, and part of the OKI PCM ROM bank selection. @@ -147,32 +143,32 @@ WRITE8_MEMBER(drgnmst_state::drgnmst_snd_control_w) oki_new_bank = ((m_pic16c5x_port0 & 0xc) >> 2) | ((m_oki_control & 0x80) >> 5); - if (oki_new_bank != m_oki0_bank) + if (oki_new_bank != m_oki_bank[0]) { - m_oki0_bank = oki_new_bank; - if (m_oki0_bank) + m_oki_bank[0] = oki_new_bank; + if (m_oki_bank[0]) oki_new_bank--; - m_oki_1->set_rom_bank(oki_new_bank); + m_oki1bank->set_entry(oki_new_bank); } oki_new_bank = ((m_pic16c5x_port0 & 0x3) >> 0) | ((m_oki_control & 0x20) >> 3); - if (oki_new_bank != m_oki1_bank) + if (oki_new_bank != m_oki_bank[1]) { - m_oki1_bank = oki_new_bank; - m_oki_2->set_rom_bank(oki_new_bank); + m_oki_bank[1] = oki_new_bank; + m_oki[1]->set_rom_bank(oki_new_bank); } switch (m_oki_control & 0x1f) { case 0x11: // logerror("Writing %02x to OKI1", m_oki_command); -// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki0_bank, m_oki1_bank); - m_oki_2->write(space, 0, m_oki_command); +// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki_bank[0], m_oki_bank[1]); + m_oki[1]->write(space, 0, m_oki_command); break; case 0x15: // logerror("Writing %02x to OKI0", m_oki_command); -// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki0_bank, m_oki1_bank); - m_oki_1->write(space, 0, m_oki_command); +// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki_bank[0], m_oki_bank[1]); + m_oki[0]->write(space, 0, m_oki_command); break; default: break; } @@ -188,24 +184,30 @@ void drgnmst_state::drgnmst_main_map(address_map &map) map(0x800018, 0x800019).portr("SYSTEM"); map(0x80001a, 0x80001b).portr("DSW1"); map(0x80001c, 0x80001d).portr("DSW2"); - map(0x800030, 0x800031).w(FUNC(drgnmst_state::drgnmst_coin_w)); + map(0x800030, 0x800031).w(FUNC(drgnmst_state::coin_w)); map(0x800100, 0x80011f).writeonly().share("vidregs"); map(0x800120, 0x800121).nopw(); map(0x80014a, 0x80014b).nopw(); map(0x800154, 0x800155).writeonly().share("vidregs2"); // seems to be priority control map(0x800176, 0x800177).portr("EXTRA"); - map(0x800180, 0x800181).w(FUNC(drgnmst_state::drgnmst_snd_command_w)); - map(0x800188, 0x800189).w(FUNC(drgnmst_state::drgnmst_snd_flag_w)); + map(0x800181, 0x800181).w(FUNC(drgnmst_state::snd_command_w)); + map(0x800189, 0x800189).w(FUNC(drgnmst_state::snd_flag_w)); map(0x8001e0, 0x8001e1).nopw(); - map(0x900000, 0x903fff).ram().w(FUNC(drgnmst_state::drgnmst_paletteram_w)).share("paletteram"); - map(0x904000, 0x907fff).ram().w(FUNC(drgnmst_state::drgnmst_md_videoram_w)).share("md_videoram"); - map(0x908000, 0x90bfff).ram().w(FUNC(drgnmst_state::drgnmst_bg_videoram_w)).share("bg_videoram"); - map(0x90c000, 0x90ffff).ram().w(FUNC(drgnmst_state::drgnmst_fg_videoram_w)).share("fg_videoram"); + map(0x900000, 0x903fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); + map(0x904000, 0x907fff).ram().w(FUNC(drgnmst_state::md_videoram_w)).share("md_videoram"); + map(0x908000, 0x90bfff).ram().w(FUNC(drgnmst_state::bg_videoram_w)).share("bg_videoram"); + map(0x90c000, 0x90ffff).ram().w(FUNC(drgnmst_state::fg_videoram_w)).share("fg_videoram"); map(0x920000, 0x923fff).ram().share("rowscrollram"); // rowscroll ram map(0x930000, 0x9307ff).ram().share("spriteram"); // Sprites map(0xff0000, 0xffffff).ram(); } +void drgnmst_state::drgnmst_oki1_map(address_map &map) +{ + map(0x00000, 0x1ffff).rom(); + map(0x20000, 0x3ffff).bankr("oki1bank"); +} + static INPUT_PORTS_START( drgnmst ) PORT_START("P1_P2") @@ -298,7 +300,7 @@ static INPUT_PORTS_START( drgnmst ) INPUT_PORTS_END -static const gfx_layout drgnmst_char8x8_layout = +static const gfx_layout char8x8_layout = { 8,8, RGN_FRAC(1,1), @@ -310,7 +312,7 @@ static const gfx_layout drgnmst_char8x8_layout = }; -static const gfx_layout drgnmst_char16x16_layout = +static const gfx_layout char16x16_layout = { 16,16, RGN_FRAC(1,2), @@ -325,7 +327,7 @@ static const gfx_layout drgnmst_char16x16_layout = -static const gfx_layout drgnmst_char32x32_layout = +static const gfx_layout char32x32_layout = { 32,32, RGN_FRAC(1,2), @@ -345,33 +347,30 @@ static const gfx_layout drgnmst_char32x32_layout = static GFXDECODE_START( gfx_drgnmst ) - GFXDECODE_ENTRY( "gfx1", 0, drgnmst_char16x16_layout, 0, 0x200 ) /* sprite tiles */ - GFXDECODE_ENTRY( "gfx2", 0, drgnmst_char8x8_layout, 0x200, 0x200 ) /* fg tiles */ - GFXDECODE_ENTRY( "gfx2", 0, drgnmst_char16x16_layout, 0x0400, 0x200 ) /* md tiles */ - GFXDECODE_ENTRY( "gfx2", 0, drgnmst_char32x32_layout, 0x0600, 0x200 ) /* bg tiles */ + GFXDECODE_ENTRY( "gfx1", 0, char16x16_layout, 0, 0x20 ) /* sprite tiles */ + GFXDECODE_ENTRY( "gfx2", 0, char8x8_layout, 0x200, 0x20 ) /* fg tiles */ + GFXDECODE_ENTRY( "gfx2", 0, char16x16_layout, 0x400, 0x20 ) /* md tiles */ + GFXDECODE_ENTRY( "gfx2", 0, char32x32_layout, 0x600, 0x20 ) /* bg tiles */ GFXDECODE_END void drgnmst_state::machine_start() { save_item(NAME(m_snd_flag)); - save_item(NAME(m_snd_command)); save_item(NAME(m_oki_control)); save_item(NAME(m_oki_command)); save_item(NAME(m_pic16c5x_port0)); - save_item(NAME(m_oki1_bank)); - save_item(NAME(m_oki0_bank)); + save_item(NAME(m_oki_bank)); } void drgnmst_state::machine_reset() { m_snd_flag = 0; - m_snd_command = 0; m_oki_control = 0; m_oki_command = 0; m_pic16c5x_port0 = 0; - m_oki1_bank = 0; - m_oki0_bank = 0; + m_oki_bank[1] = 0; + m_oki_bank[0] = 0; } MACHINE_CONFIG_START(drgnmst_state::drgnmst) @@ -382,11 +381,11 @@ MACHINE_CONFIG_START(drgnmst_state::drgnmst) MCFG_DEVICE_ADD("audiocpu", PIC16C55, 32000000/8) /* Confirmed */ MCFG_PIC16C5x_READ_A_CB(READ8(*this, drgnmst_state, pic16c5x_port0_r)) - MCFG_PIC16C5x_WRITE_A_CB(WRITE8(*this, drgnmst_state, drgnmst_pcm_banksel_w)) - MCFG_PIC16C5x_READ_B_CB(READ8(*this, drgnmst_state, drgnmst_snd_command_r)) - MCFG_PIC16C5x_WRITE_B_CB(WRITE8(*this, drgnmst_state, drgnmst_oki_w)) - MCFG_PIC16C5x_READ_C_CB(READ8(*this, drgnmst_state, drgnmst_snd_flag_r)) - MCFG_PIC16C5x_WRITE_C_CB(WRITE8(*this, drgnmst_state, drgnmst_snd_control_w)) + MCFG_PIC16C5x_WRITE_A_CB(WRITE8(*this, drgnmst_state, pcm_banksel_w)) + MCFG_PIC16C5x_READ_B_CB(READ8(*this, drgnmst_state, snd_command_r)) + MCFG_PIC16C5x_WRITE_B_CB(WRITE8(*this, drgnmst_state, oki_w)) + MCFG_PIC16C5x_READ_C_CB(READ8(*this, drgnmst_state, snd_flag_r)) + MCFG_PIC16C5x_WRITE_C_CB(WRITE8(*this, drgnmst_state, snd_control_w)) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_drgnmst) @@ -395,15 +394,17 @@ MACHINE_CONFIG_START(drgnmst_state::drgnmst) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(8*8, 56*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(drgnmst_state, screen_update_drgnmst) + MCFG_SCREEN_UPDATE_DRIVER(drgnmst_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 0x2000) + MCFG_PALETTE_FORMAT_CLASS(2, drgnmst_state, drgnmst_IIIIRRRRGGGGBBBB) /* sound hardware */ SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD("oki1", OKIM6295, 32000000/32, okim6295_device::PIN7_HIGH) + MCFG_DEVICE_ADDRESS_MAP(0, drgnmst_oki1_map) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MCFG_DEVICE_ADD("oki2", OKIM6295, 32000000/32, okim6295_device::PIN7_HIGH) @@ -465,7 +466,6 @@ void drgnmst_state::init_drgnmst() { uint8_t *drgnmst_PICROM_HEX = memregion("user1")->base(); uint16_t *drgnmst_PICROM = (uint16_t *)memregion("audiocpu")->base(); - uint8_t *drgnmst_PCM = memregion("oki1")->base(); uint16_t src_pos = 0; uint16_t dst_pos = 0; @@ -473,17 +473,8 @@ void drgnmst_state::init_drgnmst() /* $00000-1ffff is the same through all banks */ /* $20000-3ffff in each bank is actually the switched area */ - for (int32_t offs = 0x1ffff; offs >= 0; offs--) - { - drgnmst_PCM[0x120000 + offs] = drgnmst_PCM[0xa0000 + offs]; - drgnmst_PCM[0x100000 + offs] = drgnmst_PCM[0x00000 + offs]; - drgnmst_PCM[0x0e0000 + offs] = drgnmst_PCM[0x80000 + offs]; - drgnmst_PCM[0x0c0000 + offs] = drgnmst_PCM[0x00000 + offs]; - drgnmst_PCM[0x0a0000 + offs] = drgnmst_PCM[0x60000 + offs]; - drgnmst_PCM[0x080000 + offs] = drgnmst_PCM[0x00000 + offs]; - drgnmst_PCM[0x060000 + offs] = drgnmst_PCM[0x40000 + offs]; - drgnmst_PCM[0x040000 + offs] = drgnmst_PCM[0x00000 + offs]; - } + m_oki1bank->configure_entries(0, 8, memregion("oki1")->base() + 0x20000, 0x20000); + //m_oki1bank->configure_entries(0, 8, memregion("oki1")->base(), 0x20000); // TODO : Correct? /**** Convert the PIC16C55 ASCII HEX dump to pure HEX ****/ do diff --git a/src/mame/includes/drgnmst.h b/src/mame/includes/drgnmst.h index 640454eedc6..1aaa25532c0 100644 --- a/src/mame/includes/drgnmst.h +++ b/src/mame/includes/drgnmst.h @@ -1,15 +1,15 @@ // license:BSD-3-Clause // copyright-holders:David Haywood -#include "sound/okim6295.h" #include "cpu/pic16c5x/pic16c5x.h" +#include "sound/okim6295.h" #include "emupal.h" class drgnmst_state : public driver_device { public: - drgnmst_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + drgnmst_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_vidregs(*this, "vidregs"), m_fg_videoram(*this, "fg_videoram"), m_bg_videoram(*this, "bg_videoram"), @@ -17,9 +17,8 @@ public: m_rowscrollram(*this, "rowscrollram"), m_vidregs2(*this, "vidregs2"), m_spriteram(*this, "spriteram"), - m_generic_paletteram_16(*this, "paletteram"), - m_oki_1(*this, "oki1"), - m_oki_2(*this, "oki2") , + m_oki1bank(*this, "oki1bank"), + m_oki(*this, "oki%u", 1U), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), @@ -38,7 +37,8 @@ private: required_shared_ptr m_rowscrollram; required_shared_ptr m_vidregs2; required_shared_ptr m_spriteram; - required_shared_ptr m_generic_paletteram_16; + + required_memory_bank m_oki1bank; /* video-related */ tilemap_t *m_bg_tilemap; @@ -46,40 +46,38 @@ private: tilemap_t *m_md_tilemap; /* misc */ - uint16_t m_snd_command; + uint8_t m_snd_command; uint16_t m_snd_flag; uint8_t m_oki_control; uint8_t m_oki_command; uint8_t m_pic16c5x_port0; - uint8_t m_oki0_bank; - uint8_t m_oki1_bank; + uint8_t m_oki_bank[2]; /* devices */ - required_device m_oki_1; - required_device m_oki_2; - DECLARE_WRITE16_MEMBER(drgnmst_coin_w); - DECLARE_WRITE16_MEMBER(drgnmst_snd_command_w); - DECLARE_WRITE16_MEMBER(drgnmst_snd_flag_w); + required_device_array m_oki; + DECLARE_WRITE16_MEMBER(coin_w); + DECLARE_WRITE8_MEMBER(snd_command_w); + DECLARE_WRITE8_MEMBER(snd_flag_w); DECLARE_READ8_MEMBER(pic16c5x_port0_r); - DECLARE_READ8_MEMBER(drgnmst_snd_command_r); - DECLARE_READ8_MEMBER(drgnmst_snd_flag_r); - DECLARE_WRITE8_MEMBER(drgnmst_pcm_banksel_w); - DECLARE_WRITE8_MEMBER(drgnmst_oki_w); - DECLARE_WRITE8_MEMBER(drgnmst_snd_control_w); - DECLARE_WRITE16_MEMBER(drgnmst_paletteram_w); - DECLARE_WRITE16_MEMBER(drgnmst_fg_videoram_w); - DECLARE_WRITE16_MEMBER(drgnmst_bg_videoram_w); - DECLARE_WRITE16_MEMBER(drgnmst_md_videoram_w); - TILE_GET_INFO_MEMBER(get_drgnmst_fg_tile_info); - TILE_GET_INFO_MEMBER(get_drgnmst_bg_tile_info); - TILE_GET_INFO_MEMBER(get_drgnmst_md_tile_info); - TILEMAP_MAPPER_MEMBER(drgnmst_fg_tilemap_scan_cols); - TILEMAP_MAPPER_MEMBER(drgnmst_md_tilemap_scan_cols); - TILEMAP_MAPPER_MEMBER(drgnmst_bg_tilemap_scan_cols); + DECLARE_READ8_MEMBER(snd_command_r); + DECLARE_READ8_MEMBER(snd_flag_r); + DECLARE_WRITE8_MEMBER(pcm_banksel_w); + DECLARE_WRITE8_MEMBER(oki_w); + DECLARE_WRITE8_MEMBER(snd_control_w); + DECLARE_WRITE16_MEMBER(fg_videoram_w); + DECLARE_WRITE16_MEMBER(bg_videoram_w); + DECLARE_WRITE16_MEMBER(md_videoram_w); + TILE_GET_INFO_MEMBER(get_fg_tile_info); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_md_tile_info); + TILEMAP_MAPPER_MEMBER(fg_tilemap_scan_cols); + TILEMAP_MAPPER_MEMBER(md_tilemap_scan_cols); + TILEMAP_MAPPER_MEMBER(bg_tilemap_scan_cols); + DECLARE_PALETTE_DECODER(drgnmst_IIIIRRRRGGGGBBBB); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - uint32_t screen_update_drgnmst(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect ); uint8_t drgnmst_asciitohex( uint8_t data ); required_device m_maincpu; @@ -87,4 +85,5 @@ private: required_device m_gfxdecode; required_device m_palette; void drgnmst_main_map(address_map &map); + void drgnmst_oki1_map(address_map &map); }; diff --git a/src/mame/video/drgnmst.cpp b/src/mame/video/drgnmst.cpp index 2dbe92ed6ce..6eddcc747fa 100644 --- a/src/mame/video/drgnmst.cpp +++ b/src/mame/video/drgnmst.cpp @@ -8,13 +8,12 @@ #include "includes/drgnmst.h" -WRITE16_MEMBER(drgnmst_state::drgnmst_paletteram_w) +PALETTE_DECODER_MEMBER(drgnmst_state, drgnmst_IIIIRRRRGGGGBBBB) { - COMBINE_DATA(&m_generic_paletteram_16[offset]); - int bright = 0x5 + ((data >> 12) & 0xf); // TODO : verify brightness value from real pcb - int r = (pal4bit((data >> 8) & 0x0f) * bright) / 0x14; - int g = (pal4bit((data >> 4) & 0x0f) * bright) / 0x14; - int b = (pal4bit((data >> 0) & 0x0f) * bright) / 0x14; + int const bright = 0x5 + ((raw >> 12) & 0xf); // TODO : verify brightness value from real pcb + int r = (pal4bit((raw >> 8) & 0x0f) * bright) / 0x14; + int g = (pal4bit((raw >> 4) & 0x0f) * bright) / 0x14; + int b = (pal4bit((raw >> 0) & 0x0f) * bright) / 0x14; if (r < 0) r = 0; if (r > 0xff) r = 0xff; @@ -22,10 +21,10 @@ WRITE16_MEMBER(drgnmst_state::drgnmst_paletteram_w) if (g > 0xff) g = 0xff; if (b < 0) b = 0; if (b > 0xff) b = 0xff; - m_palette->set_pen_color(offset, rgb_t(r, g, b)); + return rgb_t(r, g, b); } -TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_fg_tile_info) +TILE_GET_INFO_MEMBER(drgnmst_state::get_fg_tile_info) { int tileno, colour, flipyx; tileno = m_fg_videoram[tile_index * 2] & 0xfff; @@ -35,13 +34,13 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_fg_tile_info) SET_TILE_INFO_MEMBER(1, tileno, colour, TILE_FLIPYX(flipyx)); } -WRITE16_MEMBER(drgnmst_state::drgnmst_fg_videoram_w) +WRITE16_MEMBER(drgnmst_state::fg_videoram_w) { COMBINE_DATA(&m_fg_videoram[offset]); m_fg_tilemap->mark_tile_dirty(offset / 2); } -TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_bg_tile_info) +TILE_GET_INFO_MEMBER(drgnmst_state::get_bg_tile_info) { int tileno, colour, flipyx; tileno = (m_bg_videoram[tile_index * 2]& 0x1fff) + 0x800; @@ -51,13 +50,13 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_bg_tile_info) SET_TILE_INFO_MEMBER(3, tileno, colour, TILE_FLIPYX(flipyx)); } -WRITE16_MEMBER(drgnmst_state::drgnmst_bg_videoram_w) +WRITE16_MEMBER(drgnmst_state::bg_videoram_w) { COMBINE_DATA(&m_bg_videoram[offset]); m_bg_tilemap->mark_tile_dirty(offset / 2); } -TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_md_tile_info) +TILE_GET_INFO_MEMBER(drgnmst_state::get_md_tile_info) { int tileno, colour, flipyx; tileno = (m_md_videoram[tile_index * 2] & 0x7fff) - 0x2000; @@ -67,7 +66,7 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_md_tile_info) SET_TILE_INFO_MEMBER(2, tileno, colour, TILE_FLIPYX(flipyx)); } -WRITE16_MEMBER(drgnmst_state::drgnmst_md_videoram_w) +WRITE16_MEMBER(drgnmst_state::md_videoram_w) { COMBINE_DATA(&m_md_videoram[offset]); m_md_tilemap->mark_tile_dirty(offset / 2); @@ -120,37 +119,37 @@ void drgnmst_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect } -TILEMAP_MAPPER_MEMBER(drgnmst_state::drgnmst_fg_tilemap_scan_cols) +TILEMAP_MAPPER_MEMBER(drgnmst_state::fg_tilemap_scan_cols) { - return (col * 32) + (row & 0x1f) + ((row & 0xe0) >> 5) * 2048; + return ((col & 0x3f) << 5) | (row & 0x1f) | ((row & 0x20) << 6); } -TILEMAP_MAPPER_MEMBER(drgnmst_state::drgnmst_md_tilemap_scan_cols) +TILEMAP_MAPPER_MEMBER(drgnmst_state::md_tilemap_scan_cols) { - return (col * 16) + (row & 0x0f) + ((row & 0xf0) >> 4) * 1024; + return ((col & 0x3f) << 4) | (row & 0x0f) | ((row & 0x30) << 6); } -TILEMAP_MAPPER_MEMBER(drgnmst_state::drgnmst_bg_tilemap_scan_cols) +TILEMAP_MAPPER_MEMBER(drgnmst_state::bg_tilemap_scan_cols) { - return (col * 8) + (row & 0x07) + ((row & 0xf8) >> 3) * 512; + return ((col & 0x3f) << 3) | (row & 0x07) | ((row & 0x38) << 6); } void drgnmst_state::video_start() { - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_drgnmst_fg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::drgnmst_fg_tilemap_scan_cols),this), 8, 8, 64,64); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::fg_tilemap_scan_cols),this), 8, 8, 64,64); m_fg_tilemap->set_transparent_pen(15); - m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_drgnmst_md_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::drgnmst_md_tilemap_scan_cols),this), 16, 16, 64,64); + m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_md_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::md_tilemap_scan_cols),this), 16, 16, 64,64); m_md_tilemap->set_transparent_pen(15); - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_drgnmst_bg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::drgnmst_bg_tilemap_scan_cols),this), 32, 32, 64,64); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::bg_tilemap_scan_cols),this), 32, 32, 64,64); m_bg_tilemap->set_transparent_pen(15); // do the other tilemaps have rowscroll too? probably not .. m_md_tilemap->set_scroll_rows(1024); } -uint32_t drgnmst_state::screen_update_drgnmst(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t drgnmst_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int y, rowscroll_bank; -- cgit v1.2.3