diff options
author | R. Belmont <rb6502@users.noreply.github.com> | 2019-04-05 16:45:39 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-05 16:45:39 -0400 |
commit | 0e11db86b487c5858d7f4d5f2a55cd3b31fceaac (patch) | |
tree | f9623d60f462e129e733a4d534604c7496fb43df | |
parent | 8e062e927f535d4d817f48bb26ac52e5f494ba6a (diff) | |
parent | 3c25ffd2f4da1b4059cba3a1099f3890dd50f34b (diff) |
deniam.cpp : Updates (#4857)
Simplify handlers, Fix freezing screen behavior, Reduce runtime tag lookups, Use shorter type values, Reduce unnecessary lines
-rw-r--r-- | src/mame/drivers/deniam.cpp | 43 | ||||
-rw-r--r-- | src/mame/includes/deniam.h | 40 | ||||
-rw-r--r-- | src/mame/video/deniam.cpp | 67 |
3 files changed, 73 insertions, 77 deletions
diff --git a/src/mame/drivers/deniam.cpp b/src/mame/drivers/deniam.cpp index 1747059a45c..a957bbeeb8d 100644 --- a/src/mame/drivers/deniam.cpp +++ b/src/mame/drivers/deniam.cpp @@ -54,21 +54,18 @@ Notes: #include "speaker.h" -WRITE8_MEMBER(deniam_state::deniam16b_oki_rom_bank_w) +void deniam_state::deniam16b_oki_rom_bank_w(u8 data) { m_oki->set_rom_bank((data >> 6) & 1); } -WRITE16_MEMBER(deniam_state::deniam16c_oki_rom_bank_w) +void deniam_state::deniam16c_oki_rom_bank_w(u8 data) { - if (ACCESSING_BITS_0_7) - { - if ((data&0xFE) != 0) popmessage("OKI bank was not 0 or 1! contact MAMEDEV!"); - m_oki->set_rom_bank(data & 0x01); - } + if ((data&0xFE) != 0) popmessage("OKI bank was not 0 or 1! contact MAMEDEV!"); + m_oki->set_rom_bank(data & 0x01); } -WRITE16_MEMBER(deniam_state::deniam_irq_ack_w) +void deniam_state::irq_ack_w(u16 data) { m_maincpu->set_input_line(4, CLEAR_LINE); } @@ -76,13 +73,13 @@ WRITE16_MEMBER(deniam_state::deniam_irq_ack_w) void deniam_state::deniam16b_map(address_map &map) { map(0x000000, 0x0fffff).rom(); - map(0x400000, 0x40ffff).ram().w(FUNC(deniam_state::deniam_videoram_w)).share("videoram"); - map(0x410000, 0x410fff).ram().w(FUNC(deniam_state::deniam_textram_w)).share("textram"); + map(0x400000, 0x40ffff).ram().w(FUNC(deniam_state::videoram_w)).share("videoram"); + map(0x410000, 0x410fff).ram().w(FUNC(deniam_state::textram_w)).share("textram"); map(0x440000, 0x4407ff).writeonly().share("spriteram"); map(0x840000, 0x840fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xc40000, 0xc40000).w(m_soundlatch, FUNC(generic_latch_8_device::write)); - map(0xc40002, 0xc40003).rw(FUNC(deniam_state::deniam_coinctrl_r), FUNC(deniam_state::deniam_coinctrl_w)); - map(0xc40004, 0xc40005).w(FUNC(deniam_state::deniam_irq_ack_w)); + map(0xc40002, 0xc40003).rw(FUNC(deniam_state::coinctrl_r), FUNC(deniam_state::coinctrl_w)); + map(0xc40004, 0xc40005).w(FUNC(deniam_state::irq_ack_w)); map(0xc44000, 0xc44001).portr("SYSTEM"); map(0xc44002, 0xc44003).portr("P1"); map(0xc44004, 0xc44005).portr("P2").nopw(); @@ -110,14 +107,14 @@ void deniam_state::sound_io_map(address_map &map) void deniam_state::deniam16c_map(address_map &map) { map(0x000000, 0x0fffff).rom(); - map(0x400000, 0x40ffff).ram().w(FUNC(deniam_state::deniam_videoram_w)).share("videoram"); - map(0x410000, 0x410fff).ram().w(FUNC(deniam_state::deniam_textram_w)).share("textram"); + map(0x400000, 0x40ffff).ram().w(FUNC(deniam_state::videoram_w)).share("videoram"); + map(0x410000, 0x410fff).ram().w(FUNC(deniam_state::textram_w)).share("textram"); map(0x440000, 0x4407ff).writeonly().share("spriteram"); map(0x840000, 0x840fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xc40001, 0xc40001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0xc40002, 0xc40003).rw(FUNC(deniam_state::deniam_coinctrl_r), FUNC(deniam_state::deniam_coinctrl_w)); - map(0xc40004, 0xc40005).w(FUNC(deniam_state::deniam_irq_ack_w)); - map(0xc40006, 0xc40007).w(FUNC(deniam_state::deniam16c_oki_rom_bank_w)); + map(0xc40002, 0xc40003).rw(FUNC(deniam_state::coinctrl_r), FUNC(deniam_state::coinctrl_w)); + map(0xc40004, 0xc40005).w(FUNC(deniam_state::irq_ack_w)); + map(0xc40007, 0xc40007).w(FUNC(deniam_state::deniam16c_oki_rom_bank_w)); map(0xc44000, 0xc44001).portr("SYSTEM"); map(0xc44002, 0xc44003).portr("P1"); map(0xc44004, 0xc44005).portr("P2"); @@ -268,7 +265,7 @@ void deniam_state::deniam16b(machine_config &config) screen.set_size(512, 256); //screen.set_visarea(24*8, 64*8-1, 0*8, 28*8-1); // looks better but doesn't match hardware screen.set_visarea(24*8-4, 64*8-5, 0*8, 28*8-1); - screen.set_screen_update(FUNC(deniam_state::screen_update_deniam)); + screen.set_screen_update(FUNC(deniam_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_deniam); @@ -302,7 +299,7 @@ void deniam_state::deniam16c(machine_config &config) screen.set_size(512, 256); //screen.set_visarea(24*8, 64*8-1, 0*8, 28*8-1); // looks better but doesn't match hardware screen.set_visarea(24*8-4, 64*8-5, 0*8, 28*8-1); - screen.set_screen_update(FUNC(deniam_state::screen_update_deniam)); + screen.set_screen_update(FUNC(deniam_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_deniam); @@ -339,7 +336,7 @@ ROM_START( logicpro ) ROM_LOAD( "logicpro.r6", 0x080000, 0x080000, CRC(3ecbd1c2) SHA1(dd6afacd58eaaa2562e007a92b6667ecc968377d) ) ROM_LOAD( "logicpro.r7", 0x100000, 0x080000, CRC(47135521) SHA1(ee6a93332190fc966f8e820430d652942f030b00) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* sprites, used at run time */ + ROM_REGION( 0x400000, "spritegfx", 0 ) /* sprites, used at run time */ ROM_LOAD16_BYTE( "logicpro.r9", 0x000000, 0x080000, CRC(a98bc1d2) SHA1(f4aed07cccca892f3d3a91546b3a98fbe3e66d9c) ) ROM_LOAD16_BYTE( "logicpro.r8", 0x000001, 0x080000, CRC(1de46298) SHA1(3385a2956d9a427c85554f39c8d85922bbeb1ce1) ) @@ -360,7 +357,7 @@ ROM_START( croquis ) ROM_LOAD( "logicpro.r6", 0x080000, 0x080000, CRC(3ecbd1c2) SHA1(dd6afacd58eaaa2562e007a92b6667ecc968377d) ) ROM_LOAD( "logicpro.r7", 0x100000, 0x080000, CRC(47135521) SHA1(ee6a93332190fc966f8e820430d652942f030b00) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* sprites, used at run time */ + ROM_REGION( 0x400000, "spritegfx", 0 ) /* sprites, used at run time */ ROM_LOAD16_BYTE( "logicpro.r9", 0x000000, 0x080000, CRC(a98bc1d2) SHA1(f4aed07cccca892f3d3a91546b3a98fbe3e66d9c) ) ROM_LOAD16_BYTE( "logicpro.r8", 0x000001, 0x080000, CRC(1de46298) SHA1(3385a2956d9a427c85554f39c8d85922bbeb1ce1) ) @@ -381,7 +378,7 @@ ROM_START( karianx ) ROM_LOAD( "bkg2", 0x080000, 0x080000, CRC(95ff297c) SHA1(28f6c005e73e1680bd8be7ce355fa0d404827105) ) ROM_LOAD( "bkg3", 0x100000, 0x080000, CRC(6c81f1b2) SHA1(14ef907a9c381b7ef45441d480bb4ccb015e474b) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* sprites, used at run time */ + ROM_REGION( 0x400000, "spritegfx", 0 ) /* sprites, used at run time */ ROM_LOAD16_BYTE( "obj4", 0x000000, 0x080000, CRC(5f8d75a9) SHA1(0552d046742aeb2fee176887156e73480c75a1bd) ) ROM_LOAD16_BYTE( "obj1", 0x000001, 0x080000, CRC(967ee97d) SHA1(689f2da67eab86653b846fada39139792cd4aee2) ) ROM_LOAD16_BYTE( "obj5", 0x100000, 0x080000, CRC(e9fc22f9) SHA1(a1f7f779520346406949500e3224c0c42cbbe026) ) @@ -403,7 +400,7 @@ ROM_START( logicpr2 ) ROM_LOAD( "log2-b02", 0x080000, 0x080000, CRC(1e0c51cd) SHA1(c25b3259a173e77785dcee1407ddf191c3efad79) ) ROM_LOAD( "log2-b03", 0x100000, 0x080000, CRC(916f2928) SHA1(8c73408664dcd3de42cb27fac0d22b87b540bf52) ) - ROM_REGION( 0x400000, "gfx2", 0 ) /* sprites, used at run time */ + ROM_REGION( 0x400000, "spritegfx", 0 ) /* sprites, used at run time */ ROM_LOAD16_WORD_SWAP( "obj", 0x000000, 0x400000, CRC(f221f305) SHA1(aa1d3d86d13e009bfb44cbc6ff4401b811b19f97) ) ROM_REGION( 0x100000, "oki", 0 ) /* OKIM6295 samples */ diff --git a/src/mame/includes/deniam.h b/src/mame/includes/deniam.h index 6a36f0345c1..1f8e2dbb696 100644 --- a/src/mame/includes/deniam.h +++ b/src/mame/includes/deniam.h @@ -14,17 +14,19 @@ class deniam_state : public driver_device { public: - deniam_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + deniam_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_textram(*this, "textram"), m_spriteram(*this, "spriteram"), + m_spritegfx(*this, "spritegfx"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") { } + m_soundlatch(*this, "soundlatch") + { } void deniam16c(machine_config &config); void deniam16b(machine_config &config); @@ -34,14 +36,16 @@ public: private: /* memory pointers */ - required_shared_ptr<uint16_t> m_videoram; - required_shared_ptr<uint16_t> m_textram; - required_shared_ptr<uint16_t> m_spriteram; + required_shared_ptr<u16> m_videoram; + required_shared_ptr<u16> m_textram; + required_shared_ptr<u16> m_spriteram; + + required_memory_region m_spritegfx; /* video-related */ - tilemap_t *m_fg_tilemap; - tilemap_t *m_bg_tilemap; - tilemap_t *m_tx_tilemap; + tilemap_t *m_fg_tilemap; + tilemap_t *m_bg_tilemap; + tilemap_t *m_tx_tilemap; int m_display_enable; int m_bg_scrollx_offs; int m_bg_scrolly_offs; @@ -55,16 +59,16 @@ private: int m_fg_page_reg; int m_bg_page[4]; int m_fg_page[4]; - uint16_t m_coinctrl; + u16 m_coinctrl; /* devices */ - DECLARE_WRITE16_MEMBER(deniam_irq_ack_w); - DECLARE_WRITE16_MEMBER(deniam_videoram_w); - DECLARE_WRITE16_MEMBER(deniam_textram_w); - DECLARE_READ16_MEMBER(deniam_coinctrl_r); - DECLARE_WRITE16_MEMBER(deniam_coinctrl_w); - DECLARE_WRITE8_MEMBER(deniam16b_oki_rom_bank_w); - DECLARE_WRITE16_MEMBER(deniam16c_oki_rom_bank_w); + void irq_ack_w(u16 data); + void videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void textram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 coinctrl_r(); + void coinctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void deniam16b_oki_rom_bank_w(u8 data); + void deniam16c_oki_rom_bank_w(u8 data); TILEMAP_MAPPER_MEMBER(scan_pages); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); @@ -72,7 +76,7 @@ private: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - uint32_t screen_update_deniam(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void deniam_common_init( ); void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); void set_bg_page( int page, int value ); diff --git a/src/mame/video/deniam.cpp b/src/mame/video/deniam.cpp index 8cf4d069d71..a4ddb3223dd 100644 --- a/src/mame/video/deniam.cpp +++ b/src/mame/video/deniam.cpp @@ -60,8 +60,8 @@ TILEMAP_MAPPER_MEMBER(deniam_state::scan_pages) TILE_GET_INFO_MEMBER(deniam_state::get_bg_tile_info) { - int page = tile_index >> 11; - uint16_t attr = m_videoram[m_bg_page[page] * 0x0800 + (tile_index & 0x7ff)]; + const int page = tile_index >> 11; + u16 attr = m_videoram[m_bg_page[page] * 0x0800 + (tile_index & 0x7ff)]; SET_TILE_INFO_MEMBER(0, attr, (attr & 0x1fc0) >> 6, @@ -70,8 +70,8 @@ TILE_GET_INFO_MEMBER(deniam_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(deniam_state::get_fg_tile_info) { - int page = tile_index >> 11; - uint16_t attr = m_videoram[m_fg_page[page] * 0x0800 + (tile_index & 0x7ff)]; + const int page = tile_index >> 11; + u16 attr = m_videoram[m_fg_page[page] * 0x0800 + (tile_index & 0x7ff)]; SET_TILE_INFO_MEMBER(0, attr, (attr & 0x1fc0) >> 6, @@ -80,7 +80,7 @@ TILE_GET_INFO_MEMBER(deniam_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(deniam_state::get_tx_tile_info) { - uint16_t attr = m_textram[tile_index]; + u16 attr = m_textram[tile_index]; SET_TILE_INFO_MEMBER(0, attr & 0xf1ff, (attr & 0x0e00) >> 9, @@ -113,7 +113,7 @@ void deniam_state::video_start() ***************************************************************************/ -WRITE16_MEMBER(deniam_state::deniam_videoram_w) +void deniam_state::videoram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_videoram[offset]); @@ -128,19 +128,19 @@ WRITE16_MEMBER(deniam_state::deniam_videoram_w) } -WRITE16_MEMBER(deniam_state::deniam_textram_w) +void deniam_state::textram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_textram[offset]); m_tx_tilemap->mark_tile_dirty(offset); } -READ16_MEMBER(deniam_state::deniam_coinctrl_r) +u16 deniam_state::coinctrl_r() { return m_coinctrl; } -WRITE16_MEMBER(deniam_state::deniam_coinctrl_w) +void deniam_state::coinctrl_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_coinctrl); @@ -187,22 +187,20 @@ WRITE16_MEMBER(deniam_state::deniam_coinctrl_w) */ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) { - uint8_t *gfx = memregion("gfx2")->base(); - for (int offs = m_spriteram.bytes() / 2 - 8; offs >= 0; offs -= 8) { - uint8_t *rom = gfx; + u8 *rom = m_spritegfx->base(); int sx = (m_spriteram[offs + 1] & 0x01ff) + 16 * 8 - 1; if (sx >= 512) sx -= 512; - int starty = m_spriteram[offs + 0] & 0xff; - int endy = m_spriteram[offs + 0] >> 8; + const int starty = m_spriteram[offs + 0] & 0xff; + const int endy = m_spriteram[offs + 0] >> 8; - int width = m_spriteram[offs + 2] & 0x007f; - int flipx = m_spriteram[offs + 2] & 0x0100; + const int width = m_spriteram[offs + 2] & 0x007f; + bool flipx = m_spriteram[offs + 2] & 0x0100; if (flipx) sx++; - int color = 0x40 + (m_spriteram[offs + 4] & 0x3f); + const u32 color = 0x40 + (m_spriteram[offs + 4] & 0x3f); int primask = 8; switch (m_spriteram[offs + 4] & 0xc0) @@ -213,13 +211,12 @@ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co case 0xc0: break; /* above everything */ } - - int start = m_spriteram[offs + 3] + ((m_spriteram[offs + 4] & 0x1f00) << 8); + const int start = m_spriteram[offs + 3] + ((m_spriteram[offs + 4] & 0x1f00) << 8); rom += 2 * start; for (int y = starty + 1; y <= endy; y++) { - int drawing = 0; + bool drawing = false; int i = 0; rom += 2 * width; /* note that the first line is skipped */ @@ -230,7 +227,7 @@ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co { if ((rom[i] & 0x0f) == 0x0f) { - if (!drawing) drawing = 1; + if (!drawing) drawing = true; else break; } else @@ -249,7 +246,7 @@ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co if ((rom[i] & 0xf0) == 0xf0) { - if (!drawing) drawing = 1; + if (!drawing) drawing = true; else break; } else @@ -272,7 +269,7 @@ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co { if ((rom[i] & 0xf0) == 0xf0) { - if (!drawing) drawing = 1; + if (!drawing) drawing = true; else break; } else @@ -291,7 +288,7 @@ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co if ((rom[i] & 0x0f) == 0x0f) { - if (!drawing) drawing = 1; + if (!drawing) drawing = true; else break; } else @@ -317,46 +314,44 @@ void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co void deniam_state::set_bg_page( int page, int value ) { - int tile_index; - if (m_bg_page[page] != value) { m_bg_page[page] = value; - for (tile_index = page * 0x800; tile_index < (page + 1) * 0x800; tile_index++) + for (int tile_index = page * 0x800; tile_index < (page + 1) * 0x800; tile_index++) m_bg_tilemap->mark_tile_dirty(tile_index); } } void deniam_state::set_fg_page( int page, int value ) { - int tile_index; - if (m_fg_page[page] != value) { m_fg_page[page] = value; - for (tile_index = page * 0x800; tile_index < (page + 1) * 0x800; tile_index++) + for (int tile_index = page * 0x800; tile_index < (page + 1) * 0x800; tile_index++) m_fg_tilemap->mark_tile_dirty(tile_index); } } -uint32_t deniam_state::screen_update_deniam(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 deniam_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int bg_scrollx, bg_scrolly, fg_scrollx, fg_scrolly; int page; if (!m_display_enable) + { + bitmap.fill(m_palette->black_pen(), cliprect); return 0; /* don't update (freeze display) */ + } - bg_scrollx = m_textram[m_bg_scrollx_reg] - m_bg_scrollx_offs; - bg_scrolly = (m_textram[m_bg_scrolly_reg] & 0xff) - m_bg_scrolly_offs; + int bg_scrollx = m_textram[m_bg_scrollx_reg] - m_bg_scrollx_offs; + int bg_scrolly = (m_textram[m_bg_scrolly_reg] & 0xff) - m_bg_scrolly_offs; page = m_textram[m_bg_page_reg]; set_bg_page(3, (page >>12) & 0x0f); set_bg_page(2, (page >> 8) & 0x0f); set_bg_page(1, (page >> 4) & 0x0f); set_bg_page(0, (page >> 0) & 0x0f); - fg_scrollx = m_textram[m_fg_scrollx_reg] - m_fg_scrollx_offs; - fg_scrolly = (m_textram[m_fg_scrolly_reg] & 0xff) - m_fg_scrolly_offs; + int fg_scrollx = m_textram[m_fg_scrollx_reg] - m_fg_scrollx_offs; + int fg_scrolly = (m_textram[m_fg_scrolly_reg] & 0xff) - m_fg_scrolly_offs; page = m_textram[m_fg_page_reg]; set_fg_page(3, (page >>12) & 0x0f); set_fg_page(2, (page >> 8) & 0x0f); |