diff --git a/src/emu/audio/generic.c b/src/emu/audio/generic.c index a40474d9da2..ca7d81772b4 100644 --- a/src/emu/audio/generic.c +++ b/src/emu/audio/generic.c @@ -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" diff --git a/src/emu/machine.c b/src/emu/machine.c index ada2b48e5f1..ce4a2ea9e19 100644 --- a/src/emu/machine.c +++ b/src/emu/machine.c @@ -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)); } diff --git a/src/emu/machine.h b/src/emu/machine.h index 04b65b410ac..31e42867b94 100644 --- a/src/emu/machine.h +++ b/src/emu/machine.h @@ -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 m_generic_paletteram; + optional_shared_ptr m_generic_paletteram16; + optional_shared_ptr m_generic_paletteram2; }; diff --git a/src/emu/machine/generic.c b/src/emu/machine/generic.c index 3543c5e4bb2..3cac27e18f9 100644 --- a/src/emu/machine/generic.c +++ b/src/emu/machine/generic.c @@ -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(); } + /*************************************************************************** diff --git a/src/emu/video/generic.c b/src/emu/video/generic.c index f0d3425738b..6d74df2e0c2 100644 --- a/src/emu/video/generic.c +++ b/src/emu/video/generic.c @@ -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)); +} diff --git a/src/mame/drivers/zerozone.c b/src/mame/drivers/zerozone.c index d171932e09e..28b15ac7d6c 100644 --- a/src/mame/drivers/zerozone.c +++ b/src/mame/drivers/zerozone.c @@ -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 diff --git a/src/mame/drivers/zodiack.c b/src/mame/drivers/zodiack.c index 9d27708705b..a38f032257d 100644 --- a/src/mame/drivers/zodiack.c +++ b/src/mame/drivers/zodiack.c @@ -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 ) diff --git a/src/mame/includes/zerozone.h b/src/mame/includes/zerozone.h index aa1e1cef806..7b2d43cdcff 100644 --- a/src/mame/includes/zerozone.h +++ b/src/mame/includes/zerozone.h @@ -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); diff --git a/src/mame/includes/zodiack.h b/src/mame/includes/zodiack.h index caf211354ec..622b7c58428 100644 --- a/src/mame/includes/zodiack.h +++ b/src/mame/includes/zodiack.h @@ -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);