summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit0e11db86b487c5858d7f4d5f2a55cd3b31fceaac (patch)
treef9623d60f462e129e733a4d534604c7496fb43df
parent8e062e927f535d4d817f48bb26ac52e5f494ba6a (diff)
parent3c25ffd2f4da1b4059cba3a1099f3890dd50f34b (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.cpp43
-rw-r--r--src/mame/includes/deniam.h40
-rw-r--r--src/mame/video/deniam.cpp67
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);