summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/igs011.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/igs011.cpp')
-rw-r--r--src/mame/drivers/igs011.cpp89
1 files changed, 31 insertions, 58 deletions
diff --git a/src/mame/drivers/igs011.cpp b/src/mame/drivers/igs011.cpp
index 3a4924ea89f..f218aac94a9 100644
--- a/src/mame/drivers/igs011.cpp
+++ b/src/mame/drivers/igs011.cpp
@@ -89,9 +89,8 @@ public:
, m_ics(*this, "ics")
, m_priority_ram(*this, "priority_ram")
, m_vbowl_trackball(*this, "vbowl_trackball")
- , m_generic_paletteram_16(*this, "paletteram")
- , m_gfx_region(*this, "blitter")
- , m_gfx2_region(*this, "blitter_hi")
+ , m_gfx(*this, "blitter")
+ , m_gfx2(*this, "blitter_hi")
{
}
@@ -143,11 +142,10 @@ private:
/* memory pointers */
required_shared_ptr<uint16_t> m_priority_ram;
optional_shared_ptr<uint16_t> m_vbowl_trackball;
- required_shared_ptr<uint16_t> m_generic_paletteram_16;
/* memory regions */
- required_memory_region m_gfx_region;
- optional_memory_region m_gfx2_region;
+ required_region_ptr<uint8_t> m_gfx;
+ optional_region_ptr<uint8_t> m_gfx2;
std::unique_ptr<uint8_t[]> m_layer[8];
uint16_t m_priority;
@@ -186,7 +184,6 @@ private:
DECLARE_WRITE16_MEMBER(igs011_priority_w);
DECLARE_READ16_MEMBER(igs011_layers_r);
DECLARE_WRITE16_MEMBER(igs011_layers_w);
- DECLARE_WRITE16_MEMBER(igs011_palette);
DECLARE_WRITE16_MEMBER(igs011_blit_x_w);
DECLARE_WRITE16_MEMBER(igs011_blit_y_w);
DECLARE_WRITE16_MEMBER(igs011_blit_gfx_lo_w);
@@ -451,25 +448,6 @@ WRITE16_MEMBER(igs011_state::igs011_layers_w)
/***************************************************************************
- Palette (r5g5b5)
-
- offset + 0x000: xRRRRRGG
- offset + 0x800: GGGBBBBB
-
-***************************************************************************/
-
-WRITE16_MEMBER(igs011_state::igs011_palette)
-{
- int rgb;
-
- COMBINE_DATA(&m_generic_paletteram_16[offset]);
-
- rgb = (m_generic_paletteram_16[offset & 0x7ff] & 0xff) | ((m_generic_paletteram_16[offset | 0x800] & 0xff) << 8);
- m_palette->set_pen_color(offset & 0x7ff,pal5bit(rgb >> 0),pal5bit(rgb >> 5),pal5bit(rgb >> 10));
-}
-
-/***************************************************************************
-
Blitter
***************************************************************************/
@@ -533,12 +511,6 @@ WRITE16_MEMBER(igs011_state::igs011_blit_flags_w)
uint8_t trans_pen, clear_pen, pen_hi, *dest;
uint8_t pen = 0;
- uint8_t *gfx = m_gfx_region->base();
- int gfx_size = m_gfx_region->bytes();
-
- uint8_t *gfx2 = (m_gfx2_region != nullptr) ? m_gfx2_region->base() : nullptr;
- int gfx2_size = (m_gfx2_region != nullptr) ? m_gfx2_region->bytes() : 0;
-
const rectangle &clip = m_screen->visible_area();
COMBINE_DATA(&blitter.flags);
@@ -570,14 +542,14 @@ WRITE16_MEMBER(igs011_state::igs011_blit_flags_w)
if (depth4)
{
z *= 2;
- if (gfx2 && (blitter.gfx_hi & 0x80)) trans_pen = 0x1f; // lhb2
+ if (m_gfx2 && (blitter.gfx_hi & 0x80)) trans_pen = 0x1f; // lhb2
else trans_pen = 0x0f;
clear_pen = blitter.pen | 0xf0;
}
else
{
- if (gfx2) trans_pen = 0x1f; // vbowl
+ if (m_gfx2) trans_pen = 0x1f; // vbowl
else trans_pen = 0xff;
clear_pen = blitter.pen;
@@ -599,13 +571,13 @@ WRITE16_MEMBER(igs011_state::igs011_blit_flags_w)
// fetch the pixel
if (!clear)
{
- if (depth4) pen = (gfx[(z/2)%gfx_size] >> ((z&1)?4:0)) & 0x0f;
- else pen = gfx[z%gfx_size];
+ if (depth4) pen = (m_gfx[(z/2)%m_gfx.length()] >> ((z&1)?4:0)) & 0x0f;
+ else pen = m_gfx[z%m_gfx.length()];
- if ( gfx2 )
+ if ( m_gfx2 )
{
pen &= 0x0f;
- if ( gfx2[(z/8)%gfx2_size] & (1 << (z & 7)) )
+ if ( m_gfx2[(z/8)%m_gfx2.length()] & (1 << (z & 7)) )
pen |= 0x10;
}
}
@@ -2584,7 +2556,8 @@ void igs011_state::drgnwrld(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x103fff).ram().share("nvram");
map(0x200000, 0x200fff).ram().share("priority_ram");
- map(0x400000, 0x401fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x400000, 0x400fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x401000, 0x401fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x500000, 0x500001).portr("COIN");
map(0x600001, 0x600001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x700000, 0x700003).w("ymsnd", FUNC(ym3812_device::write)).umask16(0x00ff);
@@ -2672,7 +2645,8 @@ void igs011_state::lhb(address_map &map)
map(0x100000, 0x103fff).ram().share("nvram");
map(0x200000, 0x200fff).ram().share("priority_ram");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
- map(0x400000, 0x401fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x400000, 0x400fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x401000, 0x401fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x600001, 0x600001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x700000, 0x700001).portr("COIN");
map(0x700002, 0x700005).r(FUNC(igs011_state::lhb_inputs_r));
@@ -2715,7 +2689,8 @@ void igs011_state::xymg(address_map &map)
map(0x1f0000, 0x1f3fff).ram().share("nvram"); // extra ram
map(0x200000, 0x200fff).ram().share("priority_ram");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
- map(0x400000, 0x401fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x400000, 0x400fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x401000, 0x401fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x600001, 0x600001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x700000, 0x700003).w(FUNC(igs011_state::xymg_igs003_w));
map(0x700002, 0x700003).r(FUNC(igs011_state::xymg_igs003_r));
@@ -2752,7 +2727,8 @@ void igs011_state::wlcc(address_map &map)
map(0x100000, 0x103fff).ram().share("nvram");
map(0x200000, 0x200fff).ram().share("priority_ram");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
- map(0x400000, 0x401fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x400000, 0x400fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x401000, 0x401fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x520000, 0x520001).portr("COIN");
map(0x600001, 0x600001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x800000, 0x800003).w(FUNC(igs011_state::wlcc_igs003_w));
@@ -2796,7 +2772,8 @@ void igs011_state::lhb2(address_map &map)
map(0x208000, 0x208003).w(FUNC(igs011_state::lhb2_igs003_w));
map(0x208002, 0x208003).r(FUNC(igs011_state::lhb2_igs003_r));
map(0x20c000, 0x20cfff).ram().share("priority_ram");
- map(0x210000, 0x211fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x210000, 0x210fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x211000, 0x211fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x214000, 0x214001).portr("COIN");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
map(0xa20000, 0xa20001).w(FUNC(igs011_state::igs011_priority_w));
@@ -2839,7 +2816,8 @@ void igs011_state::nkishusp(address_map &map)
map(0x208000, 0x208003).w(FUNC(igs011_state::lhb2_igs003_w));
map(0x208002, 0x208003).r(FUNC(igs011_state::lhb2_igs003_r));
map(0x20c000, 0x20cfff).ram().share("priority_ram");
- map(0x210000, 0x211fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x210000, 0x210fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x211000, 0x211fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x214000, 0x214001).portr("COIN");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
map(0xa20000, 0xa20001).w(FUNC(igs011_state::igs011_priority_w));
@@ -2956,7 +2934,8 @@ void igs011_state::vbowl(address_map &map)
map(0x100000, 0x103fff).ram().share("nvram");
map(0x200000, 0x200fff).ram().share("priority_ram");
map(0x300000, 0x3fffff).rw(FUNC(igs011_state::igs011_layers_r), FUNC(igs011_state::igs011_layers_w));
- map(0x400000, 0x401fff).ram().w(FUNC(igs011_state::igs011_palette)).share("paletteram");
+ map(0x400000, 0x400fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
+ map(0x401000, 0x401fff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).umask16(0x00ff).share("palette_ext");
map(0x520000, 0x520001).portr("COIN");
map(0x600000, 0x600007).rw(FUNC(igs011_state::ics2115_word_r), FUNC(igs011_state::ics2115_word_w));
map(0x700000, 0x700003).ram().share("vbowl_trackball");
@@ -4195,9 +4174,10 @@ MACHINE_CONFIG_START(igs011_state::igs011_base)
MCFG_SCREEN_UPDATE_DRIVER(igs011_state, screen_update_igs011)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD("palette", 0x800)
-// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_igs011)
-
+ PALETTE(config, m_palette, 0x2000/4);
+ m_palette->set_format(PALETTE_FORMAT_xBBBBBGGGGGRRRRR);
+ m_palette->set_membits(8);
+// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, m_palette, gfx_igs011)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4229,7 +4209,6 @@ MACHINE_CONFIG_START(igs011_state::drgnwrld_igs012)
MACHINE_CONFIG_END
-
INTERRUPT_GEN_MEMBER(igs011_state::lhb_vblank_irq)
{
if (!m_lhb_irq_enable)
@@ -4256,13 +4235,11 @@ MACHINE_CONFIG_START(igs011_state::lhb)
MACHINE_CONFIG_END
-
TIMER_DEVICE_CALLBACK_MEMBER( igs011_state::lev3_timer_irq_cb )
{
m_maincpu->set_input_line(3, HOLD_LINE);
}
-
MACHINE_CONFIG_START(igs011_state::wlcc)
igs011_base(config);
MCFG_DEVICE_MODIFY("maincpu")
@@ -4272,7 +4249,6 @@ MACHINE_CONFIG_START(igs011_state::wlcc)
MACHINE_CONFIG_END
-
MACHINE_CONFIG_START(igs011_state::xymg)
igs011_base(config);
MCFG_DEVICE_MODIFY("maincpu")
@@ -4282,7 +4258,6 @@ MACHINE_CONFIG_START(igs011_state::xymg)
MACHINE_CONFIG_END
-
MACHINE_CONFIG_START(igs011_state::lhb2)
igs011_base(config);
MCFG_DEVICE_MODIFY("maincpu")
@@ -4290,14 +4265,13 @@ MACHINE_CONFIG_START(igs011_state::lhb2)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", igs011_state, irq6_line_hold)
MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_irq", igs011_state, lev5_timer_irq_cb, attotime::from_hz(240)) // lev5 frequency drives the music tempo
-// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_igs011_hi)
+// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, m_palette, gfx_igs011_hi)
MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0)
MACHINE_CONFIG_END
-
MACHINE_CONFIG_START(igs011_state::nkishusp)
igs011_base(config);
MCFG_DEVICE_MODIFY("maincpu")
@@ -4307,14 +4281,13 @@ MACHINE_CONFIG_START(igs011_state::nkishusp)
// VSync 60.0052Hz, HSync 15.620kHz
-// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_igs011_hi)
+// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, m_palette, gfx_igs011_hi)
MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(3'579'545))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0)
MACHINE_CONFIG_END
-
WRITE_LINE_MEMBER(igs011_state::sound_irq)
{
// m_maincpu->set_input_line(3, state);
@@ -4331,7 +4304,7 @@ MACHINE_CONFIG_START(igs011_state::vbowl)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, igs011_state, screen_vblank_vbowl))
-// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_igs011_hi)
+// MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, m_palette, gfx_igs011_hi)
MCFG_DEVICE_REMOVE("oki")
MCFG_ICS2115_ADD("ics", 0)