Added generic helper read/write members to the driver_device base class.

Updated zodiack/zerozone to use them, removing the trampolines.
This commit is contained in:
Aaron Giles 2011-11-22 00:57:52 +00:00
parent b4a1e04703
commit c66acff675
9 changed files with 449 additions and 25 deletions

View File

@ -128,6 +128,15 @@ WRITE16_HANDLER( soundlatch3_word_w ) { latch_w(space, 2, data); }
WRITE8_HANDLER( soundlatch4_w ) { latch_w(space, 3, data); }
WRITE16_HANDLER( soundlatch4_word_w ) { latch_w(space, 3, data); }
WRITE8_MEMBER( driver_device::soundlatch_w ) { latch_w(&space, 0, data); }
WRITE16_MEMBER( driver_device::soundlatch_word_w ) { latch_w(&space, 0, data); }
WRITE8_MEMBER( driver_device::soundlatch2_w ) { latch_w(&space, 1, data); }
WRITE16_MEMBER( driver_device::soundlatch2_word_w ) { latch_w(&space, 1, data); }
WRITE8_MEMBER( driver_device::soundlatch3_w ) { latch_w(&space, 2, data); }
WRITE16_MEMBER( driver_device::soundlatch3_word_w ) { latch_w(&space, 2, data); }
WRITE8_MEMBER( driver_device::soundlatch4_w ) { latch_w(&space, 3, data); }
WRITE16_MEMBER( driver_device::soundlatch4_word_w ) { latch_w(&space, 3, data); }
/*-------------------------------------------------
soundlatch_r - global read handlers for
@ -143,6 +152,15 @@ READ16_HANDLER( soundlatch3_word_r ) { return latch_r(space, 2); }
READ8_HANDLER( soundlatch4_r ) { return latch_r(space, 3); }
READ16_HANDLER( soundlatch4_word_r ) { return latch_r(space, 3); }
READ8_MEMBER( driver_device::soundlatch_r ) { return latch_r(&space, 0); }
READ16_MEMBER( driver_device::soundlatch_word_r ) { return latch_r(&space, 0); }
READ8_MEMBER( driver_device::soundlatch2_r ) { return latch_r(&space, 1); }
READ16_MEMBER( driver_device::soundlatch2_word_r ) { return latch_r(&space, 1); }
READ8_MEMBER( driver_device::soundlatch3_r ) { return latch_r(&space, 2); }
READ16_MEMBER( driver_device::soundlatch3_word_r ) { return latch_r(&space, 2); }
READ8_MEMBER( driver_device::soundlatch4_r ) { return latch_r(&space, 3); }
READ16_MEMBER( driver_device::soundlatch4_word_r ) { return latch_r(&space, 3); }
/*-------------------------------------------------
soundlatch_clear_w - global write handlers
@ -154,6 +172,11 @@ WRITE8_HANDLER( soundlatch2_clear_w ) { latch_clear(space, 1); }
WRITE8_HANDLER( soundlatch3_clear_w ) { latch_clear(space, 2); }
WRITE8_HANDLER( soundlatch4_clear_w ) { latch_clear(space, 3); }
WRITE8_MEMBER( driver_device::soundlatch_clear_w ) { latch_clear(&space, 0); }
WRITE8_MEMBER( driver_device::soundlatch2_clear_w ) { latch_clear(&space, 1); }
WRITE8_MEMBER( driver_device::soundlatch3_clear_w ) { latch_clear(&space, 2); }
WRITE8_MEMBER( driver_device::soundlatch4_clear_w ) { latch_clear(&space, 3); }
/*-------------------------------------------------
soundlatch_setclearedvalue - set the "clear"

View File

@ -952,7 +952,10 @@ running_machine::logerror_callback_item::logerror_callback_item(logerror_callbac
driver_device::driver_device(const machine_config &mconfig, device_type type, const char *tag)
: device_t(mconfig, type, "Driver Device", tag, NULL, 0),
m_system(NULL),
m_palette_init(NULL)
m_palette_init(NULL),
m_generic_paletteram(*this, "paletteram"),
m_generic_paletteram16(*this, "paletteram"),
m_generic_paletteram2(*this, "paletteram2")
{
memset(m_callbacks, 0, sizeof(m_callbacks));
}

View File

@ -563,6 +563,106 @@ public:
virtual bool screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
virtual void screen_eof();
// generic helpers
// watchdog read/write handlers
DECLARE_WRITE8_MEMBER( watchdog_reset_w );
DECLARE_READ8_MEMBER( watchdog_reset_r );
DECLARE_WRITE16_MEMBER( watchdog_reset16_w );
DECLARE_READ16_MEMBER( watchdog_reset16_r );
DECLARE_WRITE32_MEMBER( watchdog_reset32_w );
DECLARE_READ32_MEMBER( watchdog_reset32_r );
// sound latch readers
DECLARE_READ8_MEMBER( soundlatch_r );
DECLARE_READ8_MEMBER( soundlatch2_r );
DECLARE_READ8_MEMBER( soundlatch3_r );
DECLARE_READ8_MEMBER( soundlatch4_r );
DECLARE_READ16_MEMBER( soundlatch_word_r );
DECLARE_READ16_MEMBER( soundlatch2_word_r );
DECLARE_READ16_MEMBER( soundlatch3_word_r );
DECLARE_READ16_MEMBER( soundlatch4_word_r );
// sound latch writers
DECLARE_WRITE8_MEMBER( soundlatch_w );
DECLARE_WRITE8_MEMBER( soundlatch2_w );
DECLARE_WRITE8_MEMBER( soundlatch3_w );
DECLARE_WRITE8_MEMBER( soundlatch4_w );
DECLARE_WRITE16_MEMBER( soundlatch_word_w );
DECLARE_WRITE16_MEMBER( soundlatch2_word_w );
DECLARE_WRITE16_MEMBER( soundlatch3_word_w );
DECLARE_WRITE16_MEMBER( soundlatch4_word_w );
// sound latch clearers
DECLARE_WRITE8_MEMBER( soundlatch_clear_w );
DECLARE_WRITE8_MEMBER( soundlatch2_clear_w );
DECLARE_WRITE8_MEMBER( soundlatch3_clear_w );
DECLARE_WRITE8_MEMBER( soundlatch4_clear_w );
// 3-3-2 RGB palette write handlers
DECLARE_WRITE8_MEMBER( paletteram_BBGGGRRR_w );
DECLARE_WRITE8_MEMBER( paletteram_RRRGGGBB_w );
DECLARE_WRITE8_MEMBER( paletteram_BBGGRRII_w );
DECLARE_WRITE8_MEMBER( paletteram_IIBBGGRR_w );
// 4-4-4 RGB palette write handlers
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBGGGGRRRR_le_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBGGGGRRRR_be_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBGGGGRRRR_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBGGGGRRRR_split2_w ); // uses paletteram2
DECLARE_WRITE16_MEMBER( paletteram16_xxxxBBBBGGGGRRRR_word_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBRRRRGGGG_le_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBRRRRGGGG_be_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBRRRRGGGG_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_xxxxBBBBRRRRGGGG_split2_w ); // uses paletteram2
DECLARE_WRITE16_MEMBER( paletteram16_xxxxBBBBRRRRGGGG_word_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxRRRRBBBBGGGG_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_xxxxRRRRBBBBGGGG_split2_w ); // uses paletteram2
DECLARE_WRITE8_MEMBER( paletteram_xxxxRRRRGGGGBBBB_le_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxRRRRGGGGBBBB_be_w );
DECLARE_WRITE8_MEMBER( paletteram_xxxxRRRRGGGGBBBB_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_xxxxRRRRGGGGBBBB_split2_w ); // uses paletteram2
DECLARE_WRITE16_MEMBER( paletteram16_xxxxRRRRGGGGBBBB_word_w );
DECLARE_WRITE8_MEMBER( paletteram_RRRRGGGGBBBBxxxx_be_w );
DECLARE_WRITE8_MEMBER( paletteram_RRRRGGGGBBBBxxxx_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_RRRRGGGGBBBBxxxx_split2_w ); // uses paletteram2
DECLARE_WRITE16_MEMBER( paletteram16_RRRRGGGGBBBBxxxx_word_w );
// 4-4-4-4 IRGB palette write handlers
DECLARE_WRITE16_MEMBER( paletteram16_IIIIRRRRGGGGBBBB_word_w );
DECLARE_WRITE16_MEMBER( paletteram16_RRRRGGGGBBBBIIII_word_w );
// 5-5-5 RGB palette write handlers
DECLARE_WRITE8_MEMBER( paletteram_xBBBBBGGGGGRRRRR_le_w );
DECLARE_WRITE8_MEMBER( paletteram_xBBBBBGGGGGRRRRR_be_w );
DECLARE_WRITE8_MEMBER( paletteram_xBBBBBGGGGGRRRRR_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_xBBBBBGGGGGRRRRR_split2_w ); // uses paletteram2
DECLARE_WRITE16_MEMBER( paletteram16_xBBBBBGGGGGRRRRR_word_w );
DECLARE_WRITE8_MEMBER( paletteram_xBBBBBRRRRRGGGGG_split1_w ); // uses paletteram
DECLARE_WRITE8_MEMBER( paletteram_xBBBBBRRRRRGGGGG_split2_w ); // uses paletteram2
DECLARE_WRITE8_MEMBER( paletteram_xRRRRRGGGGGBBBBB_le_w );
DECLARE_WRITE8_MEMBER( paletteram_xRRRRRGGGGGBBBBB_be_w );
DECLARE_WRITE8_MEMBER( paletteram_xRRRRRGGGGGBBBBB_split1_w );
DECLARE_WRITE8_MEMBER( paletteram_xRRRRRGGGGGBBBBB_split2_w );
DECLARE_WRITE16_MEMBER( paletteram16_xRRRRRGGGGGBBBBB_word_w );
DECLARE_WRITE16_MEMBER( paletteram16_xGGGGGRRRRRBBBBB_word_w );
DECLARE_WRITE16_MEMBER( paletteram16_xGGGGGBBBBBRRRRR_word_w );
DECLARE_WRITE16_MEMBER( paletteram16_RRRRRGGGGGBBBBBx_word_w );
DECLARE_WRITE16_MEMBER( paletteram16_GGGGGRRRRRBBBBBx_word_w );
DECLARE_WRITE16_MEMBER( paletteram16_RRRRGGGGBBBBRGBx_word_w );
// 8-8-8 RGB palette write handlers
DECLARE_WRITE16_MEMBER( paletteram16_xrgb_word_be_w );
DECLARE_WRITE16_MEMBER( paletteram16_xbgr_word_be_w );
protected:
// helpers called at startup
virtual void driver_start();
@ -581,12 +681,23 @@ protected:
virtual ioport_constructor device_input_ports() const;
virtual void device_start();
virtual void device_reset();
// internal helpers
inline UINT16 paletteram16_le(offs_t offset) const { return m_generic_paletteram[offset & ~1] | (m_generic_paletteram[offset | 1] << 8); }
inline UINT16 paletteram16_be(offs_t offset) const { return m_generic_paletteram[offset | 1] | (m_generic_paletteram[offset & ~1] << 8); }
inline UINT16 paletteram16_split(offs_t offset) const { return m_generic_paletteram[offset] | (m_generic_paletteram2[offset] << 8); }
inline UINT32 paletteram32_be(offs_t offset) const { return m_generic_paletteram16[offset | 1] | (m_generic_paletteram16[offset & ~1] << 16); }
// internal state
const game_driver * m_system; // pointer to the game driver
legacy_callback_func m_callbacks[CB_COUNT]; // generic legacy callbacks
palette_init_func m_palette_init; // one-time palette init callback
// generic pointers
optional_shared_ptr<UINT8> m_generic_paletteram;
optional_shared_ptr<UINT16> m_generic_paletteram16;
optional_shared_ptr<UINT8> m_generic_paletteram2;
};

View File

@ -760,6 +760,9 @@ INTERRUPT_GEN( irq7_line_assert ) { if (interrupt_enabled(device)) device_set_in
WRITE8_HANDLER( watchdog_reset_w ) { watchdog_reset(space->machine()); }
READ8_HANDLER( watchdog_reset_r ) { watchdog_reset(space->machine()); return space->unmap(); }
WRITE8_MEMBER( driver_device::watchdog_reset_w ) { watchdog_reset(machine()); }
READ8_MEMBER( driver_device::watchdog_reset_r ) { watchdog_reset(machine()); return space.unmap(); }
/*-------------------------------------------------
16-bit reset read/write handlers
@ -768,6 +771,9 @@ READ8_HANDLER( watchdog_reset_r ) { watchdog_reset(space->machine()); return spa
WRITE16_HANDLER( watchdog_reset16_w ) { watchdog_reset(space->machine()); }
READ16_HANDLER( watchdog_reset16_r ) { watchdog_reset(space->machine()); return space->unmap(); }
WRITE16_MEMBER( driver_device::watchdog_reset16_w ) { watchdog_reset(machine()); }
READ16_MEMBER( driver_device::watchdog_reset16_r ) { watchdog_reset(machine()); return space.unmap(); }
/*-------------------------------------------------
32-bit reset read/write handlers
@ -776,6 +782,9 @@ READ16_HANDLER( watchdog_reset16_r ) { watchdog_reset(space->machine()); return
WRITE32_HANDLER( watchdog_reset32_w ) { watchdog_reset(space->machine()); }
READ32_HANDLER( watchdog_reset32_r ) { watchdog_reset(space->machine()); return space->unmap(); }
WRITE32_MEMBER( driver_device::watchdog_reset32_w ) { watchdog_reset(machine()); }
READ32_MEMBER( driver_device::watchdog_reset32_r ) { watchdog_reset(machine()); return space.unmap(); }
/***************************************************************************

View File

@ -118,7 +118,7 @@ const gfx_layout gfx_16x16x4_planar =
palette RAM referenced by offset
-------------------------------------------------*/
INLINE UINT16 paletteram16_le(running_machine &machine, offs_t offset)
inline UINT16 paletteram16_le(running_machine &machine, offs_t offset)
{
return machine.generic.paletteram.u8[offset & ~1] | (machine.generic.paletteram.u8[offset | 1] << 8);
}
@ -130,7 +130,7 @@ INLINE UINT16 paletteram16_le(running_machine &machine, offs_t offset)
palette RAM referenced by offset
-------------------------------------------------*/
INLINE UINT16 paletteram16_be(running_machine &machine, offs_t offset)
inline UINT16 paletteram16_be(running_machine &machine, offs_t offset)
{
return machine.generic.paletteram.u8[offset | 1] | (machine.generic.paletteram.u8[offset & ~1] << 8);
}
@ -142,7 +142,7 @@ INLINE UINT16 paletteram16_be(running_machine &machine, offs_t offset)
RAM referenced by offset
-------------------------------------------------*/
INLINE UINT16 paletteram16_split(running_machine &machine, offs_t offset)
inline UINT16 paletteram16_split(running_machine &machine, offs_t offset)
{
return machine.generic.paletteram.u8[offset] | (machine.generic.paletteram2.u8[offset] << 8);
}
@ -154,7 +154,7 @@ INLINE UINT16 paletteram16_split(running_machine &machine, offs_t offset)
palette RAM referenced by offset
-------------------------------------------------*/
INLINE UINT32 paletteram32_be(running_machine &machine, offs_t offset)
inline UINT32 paletteram32_be(running_machine &machine, offs_t offset)
{
return machine.generic.paletteram.u16[offset | 1] | (machine.generic.paletteram.u16[offset & ~1] << 16);
}
@ -166,7 +166,7 @@ INLINE UINT32 paletteram32_be(running_machine &machine, offs_t offset)
shift values
-------------------------------------------------*/
INLINE void set_color_444(running_machine &machine, pen_t color, int rshift, int gshift, int bshift, UINT16 data)
inline void set_color_444(running_machine &machine, pen_t color, int rshift, int gshift, int bshift, UINT16 data)
{
palette_set_color_rgb(machine, color, pal4bit(data >> rshift), pal4bit(data >> gshift), pal4bit(data >> bshift));
}
@ -178,7 +178,7 @@ INLINE void set_color_444(running_machine &machine, pen_t color, int rshift, int
shift values
-------------------------------------------------*/
INLINE void set_color_4444(running_machine &machine, pen_t color, int ishift, int rshift, int gshift, int bshift, UINT16 data)
inline void set_color_4444(running_machine &machine, pen_t color, int ishift, int rshift, int gshift, int bshift, UINT16 data)
{
static const UINT8 ztable[16] =
{ 0x0, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11 };
@ -199,7 +199,7 @@ INLINE void set_color_4444(running_machine &machine, pen_t color, int ishift, in
shift values
-------------------------------------------------*/
INLINE void set_color_555(running_machine &machine, pen_t color, int rshift, int gshift, int bshift, UINT16 data)
inline void set_color_555(running_machine &machine, pen_t color, int rshift, int gshift, int bshift, UINT16 data)
{
palette_set_color_rgb(machine, color, pal5bit(data >> rshift), pal5bit(data >> gshift), pal5bit(data >> bshift));
}
@ -211,7 +211,7 @@ INLINE void set_color_555(running_machine &machine, pen_t color, int rshift, int
shift values
-------------------------------------------------*/
INLINE void set_color_888(running_machine &machine, pen_t color, int rshift, int gshift, int bshift, UINT32 data)
inline void set_color_888(running_machine &machine, pen_t color, int rshift, int gshift, int bshift, UINT32 data)
{
palette_set_color_rgb(machine, color, (data >> rshift) & 0xff, (data >> gshift) & 0xff, (data >> bshift) & 0xff);
}
@ -692,6 +692,12 @@ WRITE8_HANDLER( paletteram_RRRGGGBB_w )
palette_set_color_rgb(space->machine(), offset, pal3bit(data >> 5), pal3bit(data >> 2), pal2bit(data >> 0));
}
WRITE8_MEMBER( driver_device::paletteram_RRRGGGBB_w )
{
m_generic_paletteram[offset] = data;
palette_set_color_rgb(machine(), offset, pal3bit(data >> 5), pal3bit(data >> 2), pal2bit(data >> 0));
}
/*-------------------------------------------------
BB-GGG-RR writes
@ -703,6 +709,12 @@ WRITE8_HANDLER( paletteram_BBGGGRRR_w )
palette_set_color_rgb(space->machine(), offset, pal3bit(data >> 0), pal3bit(data >> 3), pal2bit(data >> 6));
}
WRITE8_MEMBER( driver_device::paletteram_BBGGGRRR_w )
{
m_generic_paletteram[offset] = data;
palette_set_color_rgb(machine(), offset, pal3bit(data >> 0), pal3bit(data >> 3), pal2bit(data >> 6));
}
/*-------------------------------------------------
BB-GG-RR-II writes
@ -718,6 +730,16 @@ WRITE8_HANDLER( paletteram_BBGGRRII_w )
pal4bit(((data >> 4) & 0x0c) | i));
}
WRITE8_MEMBER( driver_device::paletteram_BBGGRRII_w )
{
int i = (data >> 0) & 3;
m_generic_paletteram[offset] = data;
palette_set_color_rgb(machine(), offset, pal4bit(((data >> 0) & 0x0c) | i),
pal4bit(((data >> 2) & 0x0c) | i),
pal4bit(((data >> 4) & 0x0c) | i));
}
/*-------------------------------------------------
II-BB-GG-RR writes
-------------------------------------------------*/
@ -732,6 +754,16 @@ WRITE8_HANDLER( paletteram_IIBBGGRR_w )
pal4bit(((data >> 2) & 0x0c) | i));
}
WRITE8_MEMBER( driver_device::paletteram_IIBBGGRR_w )
{
int i = (data >> 6) & 3;
m_generic_paletteram[offset] = data;
palette_set_color_rgb(machine(), offset, pal4bit(((data << 2) & 0x0c) | i),
pal4bit(((data >> 0) & 0x0c) | i),
pal4bit(((data >> 2) & 0x0c) | i));
}
/***************************************************************************
@ -772,6 +804,36 @@ WRITE16_HANDLER( paletteram16_xxxxBBBBGGGGRRRR_word_w )
set_color_444(space->machine(), offset, 0, 4, 8, space->machine().generic.paletteram.u16[offset]);
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBGGGGRRRR_le_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 0, 4, 8, paletteram16_le(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBGGGGRRRR_be_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 0, 4, 8, paletteram16_be(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBGGGGRRRR_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset, 0, 4, 8, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBGGGGRRRR_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_444(machine(), offset, 0, 4, 8, paletteram16_split(offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xxxxBBBBGGGGRRRR_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_444(machine(), offset, 0, 4, 8, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
xxxx-BBBB-RRRR-GGGG writes
@ -807,6 +869,36 @@ WRITE16_HANDLER( paletteram16_xxxxBBBBRRRRGGGG_word_w )
set_color_444(space->machine(), offset, 4, 0, 8, space->machine().generic.paletteram.u16[offset]);
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBRRRRGGGG_le_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 4, 0, 8, paletteram16_le(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBRRRRGGGG_be_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 4, 0, 8, paletteram16_be(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBRRRRGGGG_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset, 4, 0, 8, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxBBBBRRRRGGGG_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_444(machine(), offset, 4, 0, 8, paletteram16_split(offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xxxxBBBBRRRRGGGG_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_444(machine(), offset, 4, 0, 8, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
xxxx-RRRR-BBBB-GGGG writes
@ -824,6 +916,18 @@ WRITE8_HANDLER( paletteram_xxxxRRRRBBBBGGGG_split2_w )
set_color_444(space->machine(), offset, 8, 0, 4, paletteram16_split(space->machine(), offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxRRRRBBBBGGGG_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset, 8, 0, 4, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxRRRRBBBBGGGG_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_444(machine(), offset, 8, 0, 4, paletteram16_split(offset));
}
/*-------------------------------------------------
xxxx-RRRR-GGGG-BBBB writes
@ -859,6 +963,36 @@ WRITE16_HANDLER( paletteram16_xxxxRRRRGGGGBBBB_word_w )
set_color_444(space->machine(), offset, 8, 4, 0, space->machine().generic.paletteram.u16[offset]);
}
WRITE8_MEMBER( driver_device::paletteram_xxxxRRRRGGGGBBBB_le_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 8, 4, 0, paletteram16_le(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxRRRRGGGGBBBB_be_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 8, 4, 0, paletteram16_be(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxRRRRGGGGBBBB_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset, 8, 4, 0, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xxxxRRRRGGGGBBBB_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_444(machine(), offset, 8, 4, 0, paletteram16_split(offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xxxxRRRRGGGGBBBB_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_444(machine(), offset, 8, 4, 0, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
RRRR-GGGG-BBBB-xxxx writes
@ -888,6 +1022,30 @@ WRITE16_HANDLER( paletteram16_RRRRGGGGBBBBxxxx_word_w )
set_color_444(space->machine(), offset, 12, 8, 4, space->machine().generic.paletteram.u16[offset]);
}
WRITE8_MEMBER( driver_device::paletteram_RRRRGGGGBBBBxxxx_be_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset / 2, 12, 8, 4, paletteram16_be(offset));
}
WRITE8_MEMBER( driver_device::paletteram_RRRRGGGGBBBBxxxx_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_444(machine(), offset, 12, 8, 4, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_RRRRGGGGBBBBxxxx_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_444(machine(), offset, 12, 8, 4, paletteram16_split(offset));
}
WRITE16_MEMBER( driver_device::paletteram16_RRRRGGGGBBBBxxxx_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_444(machine(), offset, 12, 8, 4, m_generic_paletteram16[offset]);
}
/***************************************************************************
@ -928,6 +1086,36 @@ WRITE16_HANDLER( paletteram16_xBBBBBGGGGGRRRRR_word_w )
set_color_555(space->machine(), offset, 0, 5, 10, space->machine().generic.paletteram.u16[offset]);
}
WRITE8_MEMBER( driver_device::paletteram_xBBBBBGGGGGRRRRR_le_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset / 2, 0, 5, 10, paletteram16_le(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xBBBBBGGGGGRRRRR_be_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset / 2, 0, 5, 10, paletteram16_be(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xBBBBBGGGGGRRRRR_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset, 0, 5, 10, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xBBBBBGGGGGRRRRR_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_555(machine(), offset, 0, 5, 10, paletteram16_split(offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xBBBBBGGGGGRRRRR_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_555(machine(), offset, 0, 5, 10, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
x-BBBBB-RRRRR-GGGGG writes
@ -945,6 +1133,18 @@ WRITE8_HANDLER( paletteram_xBBBBBRRRRRGGGGG_split2_w )
set_color_555(space->machine(), offset, 5, 0, 10, paletteram16_split(space->machine(), offset));
}
WRITE8_MEMBER( driver_device::paletteram_xBBBBBRRRRRGGGGG_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset, 5, 0, 10, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xBBBBBRRRRRGGGGG_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_555(machine(), offset, 5, 0, 10, paletteram16_split(offset));
}
/*-------------------------------------------------
x-RRRRR-GGGGG-BBBBB writes
@ -980,6 +1180,36 @@ WRITE16_HANDLER( paletteram16_xRRRRRGGGGGBBBBB_word_w )
set_color_555(space->machine(), offset, 10, 5, 0, space->machine().generic.paletteram.u16[offset]);
}
WRITE8_MEMBER( driver_device::paletteram_xRRRRRGGGGGBBBBB_le_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset / 2, 10, 5, 0, paletteram16_le(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xRRRRRGGGGGBBBBB_be_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset / 2, 10, 5, 0, paletteram16_be(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xRRRRRGGGGGBBBBB_split1_w )
{
m_generic_paletteram[offset] = data;
set_color_555(machine(), offset, 10, 5, 0, paletteram16_split(offset));
}
WRITE8_MEMBER( driver_device::paletteram_xRRRRRGGGGGBBBBB_split2_w )
{
m_generic_paletteram2[offset] = data;
set_color_555(machine(), offset, 10, 5, 0, paletteram16_split(offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xRRRRRGGGGGBBBBB_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_555(machine(), offset, 10, 5, 0, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
x-GGGGG-RRRRR-BBBBB writes
@ -991,6 +1221,12 @@ WRITE16_HANDLER( paletteram16_xGGGGGRRRRRBBBBB_word_w )
set_color_555(space->machine(), offset, 5, 10, 0, space->machine().generic.paletteram.u16[offset]);
}
WRITE16_MEMBER( driver_device::paletteram16_xGGGGGRRRRRBBBBB_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_555(machine(), offset, 5, 10, 0, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
x-GGGGG-BBBBB-RRRRR writes
@ -1002,6 +1238,12 @@ WRITE16_HANDLER( paletteram16_xGGGGGBBBBBRRRRR_word_w )
set_color_555(space->machine(), offset, 0, 10, 5, space->machine().generic.paletteram.u16[offset]);
}
WRITE16_MEMBER( driver_device::paletteram16_xGGGGGBBBBBRRRRR_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_555(machine(), offset, 0, 10, 5, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
GGGGG-RRRRR-BBBBB-x writes
@ -1013,6 +1255,12 @@ WRITE16_HANDLER( paletteram16_GGGGGRRRRRBBBBBx_word_w )
set_color_555(space->machine(), offset, 6, 11, 1, space->machine().generic.paletteram.u16[offset]);
}
WRITE16_MEMBER( driver_device::paletteram16_GGGGGRRRRRBBBBBx_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_555(machine(), offset, 6, 11, 1, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
RRRRR-GGGGG-BBBBB-x writes
-------------------------------------------------*/
@ -1023,6 +1271,12 @@ WRITE16_HANDLER( paletteram16_RRRRRGGGGGBBBBBx_word_w )
set_color_555(space->machine(), offset, 11, 6, 1, space->machine().generic.paletteram.u16[offset]);
}
WRITE16_MEMBER( driver_device::paletteram16_RRRRRGGGGGBBBBBx_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_555(machine(), offset, 11, 6, 1, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
RRRR-GGGG-BBBB-RGBx writes
@ -1037,6 +1291,15 @@ WRITE16_HANDLER( paletteram16_RRRRGGGGBBBBRGBx_word_w )
pal5bit(((data >> 3) & 0x1e) | ((data >> 1) & 0x01)));
}
WRITE16_MEMBER( driver_device::paletteram16_RRRRGGGGBBBBRGBx_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
data = m_generic_paletteram16[offset];
palette_set_color_rgb(machine(), offset, pal5bit(((data >> 11) & 0x1e) | ((data >> 3) & 0x01)),
pal5bit(((data >> 7) & 0x1e) | ((data >> 2) & 0x01)),
pal5bit(((data >> 3) & 0x1e) | ((data >> 1) & 0x01)));
}
/***************************************************************************
@ -1053,6 +1316,12 @@ WRITE16_HANDLER( paletteram16_IIIIRRRRGGGGBBBB_word_w )
set_color_4444(space->machine(), offset, 12, 8, 4, 0, space->machine().generic.paletteram.u16[offset]);
}
WRITE16_MEMBER( driver_device::paletteram16_IIIIRRRRGGGGBBBB_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_4444(machine(), offset, 12, 8, 4, 0, m_generic_paletteram16[offset]);
}
/*-------------------------------------------------
RRRR-GGGG-BBBB-IIII writes
@ -1064,6 +1333,12 @@ WRITE16_HANDLER( paletteram16_RRRRGGGGBBBBIIII_word_w )
set_color_4444(space->machine(), offset, 0, 12, 8, 4, space->machine().generic.paletteram.u16[offset]);
}
WRITE16_MEMBER( driver_device::paletteram16_RRRRGGGGBBBBIIII_word_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_4444(machine(), offset, 0, 12, 8, 4, m_generic_paletteram16[offset]);
}
/***************************************************************************
@ -1080,6 +1355,12 @@ WRITE16_HANDLER( paletteram16_xrgb_word_be_w )
set_color_888(space->machine(), offset / 2, 16, 8, 0, paletteram32_be(space->machine(), offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xrgb_word_be_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_888(machine(), offset / 2, 16, 8, 0, paletteram32_be(offset));
}
/*-------------------------------------------------
xxxxxxxx-BBBBBBBB-GGGGGGGG-RRRRRRRR writes
@ -1090,3 +1371,9 @@ WRITE16_HANDLER( paletteram16_xbgr_word_be_w )
COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
set_color_888(space->machine(), offset / 2, 0, 8, 16, paletteram32_be(space->machine(), offset));
}
WRITE16_MEMBER( driver_device::paletteram16_xbgr_word_be_w )
{
COMBINE_DATA(&m_generic_paletteram16[offset]);
set_color_888(machine(), offset / 2, 0, 8, 16, paletteram32_be(offset));
}

View File

@ -40,7 +40,7 @@ WRITE16_MEMBER( zerozone_state::sound_w )
{
if (ACCESSING_BITS_8_15)
{
slatch_w(space, offset, data >> 8);
soundlatch_w(space, offset, data >> 8);
device_set_input_line_and_vector(m_audiocpu, 0, HOLD_LINE, 0xff);
}
}
@ -53,7 +53,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, zerozone_state )
AM_RANGE(0x080008, 0x080009) AM_READ_PORT("DSWB")
AM_RANGE(0x08000a, 0x08000b) AM_READ_PORT("DSWA")
AM_RANGE(0x084000, 0x084001) AM_WRITE(sound_w)
AM_RANGE(0x088000, 0x0881ff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x088000, 0x0881ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_SHARE("paletteram")
AM_RANGE(0x098000, 0x098001) AM_RAM /* Watchdog? */
AM_RANGE(0x09ce00, 0x09ffff) AM_RAM_WRITE(tilemap_w) AM_SHARE("videoram")
AM_RANGE(0x0b4000, 0x0b4001) AM_WRITE(tilebank_w)
@ -65,7 +65,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, zerozone_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xa000, 0xa000) AM_READ(slatch_r)
AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r)
ADDRESS_MAP_END

View File

@ -127,7 +127,7 @@ static INTERRUPT_GEN( zodiack_sound_nmi_gen )
WRITE8_MEMBER( zodiack_state::master_soundlatch_w )
{
soundlatch_w(&space, offset, data);
soundlatch_w(space, offset, data);
device_set_input_line(m_audiocpu, 0, HOLD_LINE);
}
@ -147,8 +147,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zodiack_state )
AM_RANGE(0x6082, 0x6082) AM_READ_PORT("DSW1")
AM_RANGE(0x6083, 0x6083) AM_READ_PORT("IN0")
AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN1")
AM_RANGE(0x6090, 0x6090) AM_READWRITE(slatch_r, master_soundlatch_w)
AM_RANGE(0x7000, 0x7000) AM_READNOP AM_WRITE(watchdog_w) /* NOP??? */
AM_RANGE(0x6090, 0x6090) AM_READWRITE(soundlatch_r, master_soundlatch_w)
AM_RANGE(0x7000, 0x7000) AM_READNOP AM_WRITE(watchdog_reset_w) /* NOP??? */
AM_RANGE(0x7100, 0x7100) AM_WRITE(nmi_mask_w)
AM_RANGE(0x7200, 0x7200) AM_WRITE(flipscreen_w)
AM_RANGE(0x9000, 0x903f) AM_RAM_WRITE(attributes_w) AM_SHARE("attributeram")
@ -164,7 +164,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, zodiack_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
AM_RANGE(0x4000, 0x4000) AM_WRITE(sound_nmi_enable_w)
AM_RANGE(0x6000, 0x6000) AM_READWRITE(slatch_r, slatch_w)
AM_RANGE(0x6000, 0x6000) AM_READWRITE(soundlatch_r, soundlatch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map, AS_IO, 8, zodiack_state )

View File

@ -21,11 +21,6 @@ public:
// in drivers/zerozone.c
DECLARE_WRITE16_MEMBER(sound_w);
// temp workaround for missing generic 'modern' functions
DECLARE_READ8_MEMBER(slatch_r) { return soundlatch_r(&space, offset); };
DECLARE_WRITE8_MEMBER(slatch_w) { soundlatch_w(&space, offset, data); };
DECLARE_WRITE16_MEMBER(paletteram_w) { paletteram16_RRRRGGGGBBBBRGBx_word_w(&space, offset, data, mem_mask); };
// in video/zerozone.c
DECLARE_WRITE16_MEMBER(tilemap_w);
DECLARE_WRITE16_MEMBER(tilebank_w);

View File

@ -24,10 +24,6 @@ public:
DECLARE_WRITE8_MEMBER(sound_nmi_enable_w);
DECLARE_WRITE8_MEMBER(master_soundlatch_w);
DECLARE_WRITE8_MEMBER(control_w);
// temp workaround for missing generic 'modern' functions
DECLARE_READ8_MEMBER(slatch_r) { return soundlatch_r(&space, offset); };
DECLARE_WRITE8_MEMBER(slatch_w) { soundlatch_w(&space, offset, data); };
DECLARE_WRITE8_MEMBER(watchdog_w) { watchdog_reset_w(&space, offset, data); };
// in video/zodiack.c
DECLARE_WRITE8_MEMBER(videoram_w);