From 21f48e8f14d5875d34bcc08d93259878630ef7ab Mon Sep 17 00:00:00 2001 From: Phil Bennett Date: Sun, 27 Jan 2013 15:55:07 +0000 Subject: [PATCH] Fully modernised the TLC34076 device [Phil Bennett] --- src/emu/video/tlc34076.c | 268 ++++++++++++++--------------------- src/emu/video/tlc34076.h | 61 ++++---- src/mame/drivers/artmagic.c | 6 +- src/mame/drivers/btoads.c | 2 +- src/mame/drivers/coolpool.c | 8 +- src/mame/drivers/itech8.c | 2 +- src/mame/drivers/skeetsht.c | 13 +- src/mame/drivers/tickee.c | 20 +-- src/mame/drivers/vcombat.c | 10 +- src/mame/drivers/xtheball.c | 13 +- src/mame/includes/artmagic.h | 4 +- src/mame/includes/coolpool.h | 2 + src/mame/includes/itech8.h | 4 + src/mame/video/artmagic.c | 2 +- src/mame/video/btoads.c | 6 +- src/mame/video/itech8.c | 8 +- 16 files changed, 201 insertions(+), 228 deletions(-) diff --git a/src/emu/video/tlc34076.c b/src/emu/video/tlc34076.c index 7ac4937b26f..03ec2214460 100644 --- a/src/emu/video/tlc34076.c +++ b/src/emu/video/tlc34076.c @@ -10,6 +10,11 @@ #include "emu.h" #include "tlc34076.h" + +//************************************************************************** +// MACROS +//************************************************************************** + #define PALETTE_WRITE_ADDR 0x00 #define PALETTE_DATA 0x01 #define PIXEL_READ_MASK 0x02 @@ -22,60 +27,89 @@ #define TEST_REGISTER 0x0e #define RESET_STATE 0x0f -struct tlc34076_state + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +// device type definition +const device_type TLC34076 = &device_creator; + + +//------------------------------------------------- +// tlc34076_device - constructor +//------------------------------------------------- +tlc34076_device::tlc34076_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, TLC34076, "TLC34076", tag, owner, clock), + m_dacbits(6) { - UINT8 local_paletteram[0x300]; - UINT8 regs[0x10]; - UINT8 palettedata[3]; - UINT8 writeindex; - UINT8 readindex; - UINT8 dacbits; - - rgb_t pens[0x100]; -}; - -const tlc34076_config tlc34076_6_bit_intf = -{ - TLC34076_6_BIT -}; - - -/************************************* - * - * Inline functions - * - *************************************/ - -INLINE tlc34076_state *get_safe_token( device_t *device ) -{ - assert(device != NULL); - assert(device->type() == TLC34076); - - return (tlc34076_state *)downcast(device)->token(); } -/************************************* - * - * Retrieve Current Palette - * - *************************************/ -const pen_t *tlc34076_get_pens(device_t *device) +//------------------------------------------------- +// static_set_bits - set DAC resolution +//------------------------------------------------- +void tlc34076_device::static_set_bits(device_t &device, tlc34076_bits bits) +{ + tlc34076_device &tlc = downcast(device); + tlc.m_dacbits = bits; +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- +void tlc34076_device::device_start() +{ + save_item(NAME(m_local_paletteram)); + save_item(NAME(m_regs)); + save_item(NAME(m_pens)); + + save_item(NAME(m_writeindex)); + save_item(NAME(m_readindex)); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void tlc34076_device::device_reset() +{ + m_regs[PIXEL_READ_MASK] = 0xff; + m_regs[GENERAL_CONTROL] = 0x03; + m_regs[INPUT_CLOCK_SEL] = 0x00; + m_regs[OUTPUT_CLOCK_SEL] = 0x3f; + m_regs[MUX_CONTROL] = 0x2d; + m_regs[PALETTE_PAGE] = 0x00; + m_regs[TEST_REGISTER] = 0x00; + m_regs[RESET_STATE] = 0x00; +} + + +//************************************************************************** +// PUBLIC INTERFACE +//************************************************************************** + +//------------------------------------------------- +// get_pens - retrieve current palette +//------------------------------------------------- + +const pen_t *tlc34076_device::get_pens() { - tlc34076_state *state = get_safe_token(device); offs_t i; for (i = 0; i < 0x100; i++) { int r, g, b; - if ((i & state->regs[PIXEL_READ_MASK]) == i) + if ((i & m_regs[PIXEL_READ_MASK]) == i) { - r = state->local_paletteram[3 * i + 0]; - g = state->local_paletteram[3 * i + 1]; - b = state->local_paletteram[3 * i + 2]; + r = m_local_paletteram[3 * i + 0]; + g = m_local_paletteram[3 * i + 1]; + b = m_local_paletteram[3 * i + 2]; - if (state->dacbits == 6) + if (m_dacbits == 6) { r = pal6bit(r); g = pal6bit(g); @@ -89,66 +123,40 @@ const pen_t *tlc34076_get_pens(device_t *device) b = 0; } - state->pens[i] = MAKE_RGB(r, g, b); + m_pens[i] = MAKE_RGB(r, g, b); } - return state->pens; + return m_pens; } +//------------------------------------------------- +// read - read access +//------------------------------------------------- -/************************************* - * - * State reset - * - *************************************/ - -static DEVICE_RESET( tlc34076 ) +READ8_MEMBER( tlc34076_device::read ) { - tlc34076_state *state = get_safe_token(device); - - /* reset the registers */ - state->regs[PIXEL_READ_MASK] = 0xff; - state->regs[GENERAL_CONTROL] = 0x03; - state->regs[INPUT_CLOCK_SEL] = 0x00; - state->regs[OUTPUT_CLOCK_SEL] = 0x3f; - state->regs[MUX_CONTROL] = 0x2d; - state->regs[PALETTE_PAGE] = 0x00; - state->regs[TEST_REGISTER] = 0x00; - state->regs[RESET_STATE] = 0x00; -} - - -/************************************* - * - * Read access - * - *************************************/ - -READ8_DEVICE_HANDLER( tlc34076_r ) -{ - tlc34076_state *state = get_safe_token(device); UINT8 result; /* keep in range */ offset &= 0x0f; - result = state->regs[offset]; + result = m_regs[offset]; /* switch off the offset */ switch (offset) { case PALETTE_DATA: - if (state->readindex == 0) + if (m_readindex == 0) { - state->palettedata[0] = state->local_paletteram[3 * state->regs[PALETTE_READ_ADDR] + 0]; - state->palettedata[1] = state->local_paletteram[3 * state->regs[PALETTE_READ_ADDR] + 1]; - state->palettedata[2] = state->local_paletteram[3 * state->regs[PALETTE_READ_ADDR] + 2]; + m_palettedata[0] = m_local_paletteram[3 * m_regs[PALETTE_READ_ADDR] + 0]; + m_palettedata[1] = m_local_paletteram[3 * m_regs[PALETTE_READ_ADDR] + 1]; + m_palettedata[2] = m_local_paletteram[3 * m_regs[PALETTE_READ_ADDR] + 2]; } - result = state->palettedata[state->readindex++]; - if (state->readindex == 3) + result = m_palettedata[m_readindex++]; + if (m_readindex == 3) { - state->readindex = 0; - state->regs[PALETTE_READ_ADDR]++; + m_readindex = 0; + m_regs[PALETTE_READ_ADDR]++; } break; } @@ -157,44 +165,40 @@ READ8_DEVICE_HANDLER( tlc34076_r ) } +//------------------------------------------------- +// write - write access +//------------------------------------------------- -/************************************* - * - * Write access - * - *************************************/ - -WRITE8_DEVICE_HANDLER( tlc34076_w ) +WRITE8_MEMBER( tlc34076_device::write ) { - tlc34076_state *state = get_safe_token(device); // UINT8 oldval; /* keep in range */ offset &= 0x0f; -// oldval = state->regs[offset]; - state->regs[offset] = data; +// oldval = m_regs[offset]; + m_regs[offset] = data; /* switch off the offset */ switch (offset) { case PALETTE_WRITE_ADDR: - state->writeindex = 0; + m_writeindex = 0; break; case PALETTE_DATA: - state->palettedata[state->writeindex++] = data; - if (state->writeindex == 3) + m_palettedata[m_writeindex++] = data; + if (m_writeindex == 3) { - state->local_paletteram[3 * state->regs[PALETTE_WRITE_ADDR] + 0] = state->palettedata[0]; - state->local_paletteram[3 * state->regs[PALETTE_WRITE_ADDR] + 1] = state->palettedata[1]; - state->local_paletteram[3 * state->regs[PALETTE_WRITE_ADDR] + 2] = state->palettedata[2]; - state->writeindex = 0; - state->regs[PALETTE_WRITE_ADDR]++; + m_local_paletteram[3 * m_regs[PALETTE_WRITE_ADDR] + 0] = m_palettedata[0]; + m_local_paletteram[3 * m_regs[PALETTE_WRITE_ADDR] + 1] = m_palettedata[1]; + m_local_paletteram[3 * m_regs[PALETTE_WRITE_ADDR] + 2] = m_palettedata[2]; + m_writeindex = 0; + m_regs[PALETTE_WRITE_ADDR]++; } break; case PALETTE_READ_ADDR: - state->readindex = 0; + m_readindex = 0; break; case GENERAL_CONTROL: @@ -251,67 +255,7 @@ WRITE8_DEVICE_HANDLER( tlc34076_w ) break; case RESET_STATE: - DEVICE_RESET_CALL(tlc34076); + device_reset(); break; } } - - - -/************************************* - * - * Device interface - * - *************************************/ - -static DEVICE_START( tlc34076 ) -{ - tlc34076_config *config = (tlc34076_config *)device->static_config(); - tlc34076_state *state = get_safe_token(device); - - state->dacbits = config->res_sel ? 8 : 6; - - state_save_register_global_array(device->machine(), state->local_paletteram); - state_save_register_global_array(device->machine(), state->regs); - state_save_register_global_array(device->machine(), state->pens); - - state_save_register_global(device->machine(), state->writeindex); - state_save_register_global(device->machine(), state->readindex); - state_save_register_global(device->machine(), state->dacbits); -} - -const device_type TLC34076 = &device_creator; - -tlc34076_device::tlc34076_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, TLC34076, "TLC34076", tag, owner, clock) -{ - m_token = global_alloc_clear(tlc34076_state); -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void tlc34076_device::device_config_complete() -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void tlc34076_device::device_start() -{ - DEVICE_START_NAME( tlc34076 )(this); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void tlc34076_device::device_reset() -{ - DEVICE_RESET_NAME( tlc34076 )(this); -} diff --git a/src/emu/video/tlc34076.h b/src/emu/video/tlc34076.h index b811a550981..d73967d0a9f 100644 --- a/src/emu/video/tlc34076.h +++ b/src/emu/video/tlc34076.h @@ -7,57 +7,68 @@ ***************************************************************************/ -#define TLC34076_6_BIT 0 -#define TLC34076_8_BIT 1 +#pragma once -const pen_t *tlc34076_get_pens(device_t *device); +#ifndef __TLC34076_H__ +#define __TLC34076_H__ + + +/*************************************************************************** + CONSTANTS +***************************************************************************/ + +enum tlc34076_bits +{ + TLC34076_6_BIT = 6, + TLC34076_8_BIT = 8 +}; /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ -struct tlc34076_config -{ - int res_sel; -}; - -extern const tlc34076_config tlc34076_6_bit_intf; - class tlc34076_device : public device_t { public: + // construction/destruction tlc34076_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~tlc34076_device() { global_free(m_token); } - // access to legacy token - void *token() const { assert(m_token != NULL); return m_token; } + // static configuration helpers + static void static_set_bits(device_t &device, tlc34076_bits bits); + + // public interface + const pen_t *get_pens(); + DECLARE_READ8_MEMBER(read); + DECLARE_WRITE8_MEMBER(write); + protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); + private: // internal state - void *m_token; + UINT8 m_local_paletteram[0x300]; + UINT8 m_regs[0x10]; + UINT8 m_palettedata[3]; + UINT8 m_writeindex; + UINT8 m_readindex; + UINT8 m_dacbits; + rgb_t m_pens[0x100]; }; -extern const device_type TLC34076; - - /*************************************************************************** DEVICE CONFIGURATION MACROS ***************************************************************************/ -#define MCFG_TLC34076_ADD(_tag, _config) \ +#define MCFG_TLC34076_ADD(_tag, _bits) \ MCFG_DEVICE_ADD(_tag, TLC34076, 0) \ - MCFG_DEVICE_CONFIG(_config) + tlc34076_device::static_set_bits(*device, _bits); -/*************************************************************************** - DEVICE I/O FUNCTIONS -***************************************************************************/ +extern const device_type TLC34076; -DECLARE_WRITE8_DEVICE_HANDLER( tlc34076_w ); -DECLARE_READ8_DEVICE_HANDLER( tlc34076_r ); + +#endif /* __TLC34076_H__ */ diff --git a/src/mame/drivers/artmagic.c b/src/mame/drivers/artmagic.c index 0a3d376f9c9..8f46f947ed9 100644 --- a/src/mame/drivers/artmagic.c +++ b/src/mame/drivers/artmagic.c @@ -503,7 +503,7 @@ static ADDRESS_MAP_START( tms_map, AS_PROGRAM, 16, artmagic_state ) AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("vram0") AM_RANGE(0x00400000, 0x005fffff) AM_RAM AM_SHARE("vram1") AM_RANGE(0x00800000, 0x0080007f) AM_READWRITE(artmagic_blitter_r, artmagic_blitter_w) - AM_RANGE(0x00c00000, 0x00c000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x00c00000, 0x00c000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w) AM_RANGE(0xffe00000, 0xffffffff) AM_RAM ADDRESS_MAP_END @@ -513,7 +513,7 @@ static ADDRESS_MAP_START( stonebal_tms_map, AS_PROGRAM, 16, artmagic_state ) AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("vram0") AM_RANGE(0x00400000, 0x005fffff) AM_RAM AM_SHARE("vram1") AM_RANGE(0x00800000, 0x0080007f) AM_READWRITE(artmagic_blitter_r, artmagic_blitter_w) - AM_RANGE(0x00c00000, 0x00c000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x00c00000, 0x00c000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w) AM_RANGE(0xffc00000, 0xffffffff) AM_RAM ADDRESS_MAP_END @@ -844,7 +844,7 @@ static MACHINE_CONFIG_START( artmagic, artmagic_state ) MCFG_NVRAM_ADD_1FILL("nvram") /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/btoads.c b/src/mame/drivers/btoads.c index 204716e683c..d063283e40d 100644 --- a/src/mame/drivers/btoads.c +++ b/src/mame/drivers/btoads.c @@ -332,7 +332,7 @@ static MACHINE_CONFIG_START( btoads, btoads_state ) MCFG_NVRAM_ADD_1FILL("nvram") /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK/2, 640, 0, 512, 257, 0, 224) diff --git a/src/mame/drivers/coolpool.c b/src/mame/drivers/coolpool.c index 5c9558901cf..fc2950cb0f9 100644 --- a/src/mame/drivers/coolpool.c +++ b/src/mame/drivers/coolpool.c @@ -89,7 +89,7 @@ static void coolpool_scanline(screen_device &screen, bitmap_rgb32 &bitmap, int s UINT16 *vram = &state->m_vram_base[(params->rowaddr << 8) & 0x1ff00]; UINT32 *dest = &bitmap.pix32(scanline); - const rgb_t *pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *pens = state->m_tlc34076->get_pens(); int coladdr = params->coladdr; int x; @@ -632,7 +632,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( coolpool_map, AS_PROGRAM, 16, coolpool_state ) AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("vram_base") - AM_RANGE(0x01000000, 0x010000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) // IMSG176P-40 + AM_RANGE(0x01000000, 0x010000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) // IMSG176P-40 AM_RANGE(0x02000000, 0x020000ff) AM_READWRITE(coolpool_iop_r, coolpool_iop_w) AM_RANGE(0x03000000, 0x0300000f) AM_WRITE(coolpool_misc_w) AM_RANGE(0x03000000, 0x03ffffff) AM_ROM AM_REGION("gfx1", 0) @@ -646,7 +646,7 @@ static ADDRESS_MAP_START( nballsht_map, AS_PROGRAM, 16, coolpool_state ) AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("vram_base") AM_RANGE(0x02000000, 0x020000ff) AM_READWRITE(coolpool_iop_r, coolpool_iop_w) AM_RANGE(0x03000000, 0x0300000f) AM_WRITE(coolpool_misc_w) - AM_RANGE(0x04000000, 0x040000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) // IMSG176P-40 + AM_RANGE(0x04000000, 0x040000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) // IMSG176P-40 AM_RANGE(0x06000000, 0x0601ffff) AM_MIRROR(0x00020000) AM_RAM_WRITE(nvram_thrash_data_w) AM_SHARE("nvram") AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w) AM_RANGE(0xff000000, 0xff7fffff) AM_ROM AM_REGION("gfx1", 0) @@ -879,7 +879,7 @@ static MACHINE_CONFIG_START( coolpool, coolpool_state ) MCFG_TIMER_DRIVER_ADD("nvram_timer", coolpool_state, nvram_write_timeout) /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_40MHz/6, 424, 0, 320, 262, 0, 240) diff --git a/src/mame/drivers/itech8.c b/src/mame/drivers/itech8.c index 34a910435ef..cc7c81db317 100644 --- a/src/mame/drivers/itech8.c +++ b/src/mame/drivers/itech8.c @@ -1691,7 +1691,7 @@ static MACHINE_CONFIG_START( itech8_core_lo, itech8_state ) MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) diff --git a/src/mame/drivers/skeetsht.c b/src/mame/drivers/skeetsht.c index db996eada86..483cfa8cd25 100644 --- a/src/mame/drivers/skeetsht.c +++ b/src/mame/drivers/skeetsht.c @@ -2,7 +2,8 @@ Dynamo Skeet Shot -Notes: Pop Shot is a prototype sequal (or upgrade) to Skeet Shot + Notes: + Pop Shot is a prototype sequal (or upgrade) to Skeet Shot ***************************************************************************/ @@ -24,8 +25,10 @@ class skeetsht_state : public driver_device public: skeetsht_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , + m_tlc34076(*this, "tlc34076"), m_tms_vram(*this, "tms_vram"){ } + required_device m_tlc34076; required_shared_ptr m_tms_vram; UINT8 m_porta_latch; UINT8 m_ay_sel; @@ -71,7 +74,7 @@ void skeetsht_state::video_start() static void skeetsht_scanline_update(screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const tms34010_display_params *params) { skeetsht_state *state = screen.machine().driver_data(); - const rgb_t *const pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *const pens = state->m_tlc34076->get_pens(); UINT16 *vram = &state->m_tms_vram[(params->rowaddr << 8) & 0x3ff00]; UINT32 *dest = &bitmap.pix32(scanline); int coladdr = params->coladdr; @@ -92,7 +95,7 @@ READ16_MEMBER(skeetsht_state::ramdac_r) if (offset & 8) offset = (offset & ~8) | 4; - return tlc34076_r(machine().device("tlc34076"), space, offset); + return m_tlc34076->read(space, offset); } WRITE16_MEMBER(skeetsht_state::ramdac_w) @@ -102,7 +105,7 @@ WRITE16_MEMBER(skeetsht_state::ramdac_w) if (offset & 8) offset = (offset & ~8) | 4; - tlc34076_w(machine().device("tlc34076"), space, offset, data); + m_tlc34076->write(space, offset, data); } @@ -259,7 +262,7 @@ static MACHINE_CONFIG_START( skeetsht, skeetsht_state ) MCFG_CPU_PROGRAM_MAP(tms_program_map) - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(48000000 / 8, 156*4, 0, 100*4, 328, 0, 300) // FIXME diff --git a/src/mame/drivers/tickee.c b/src/mame/drivers/tickee.c index cc6e0764107..7d2c7798c61 100644 --- a/src/mame/drivers/tickee.c +++ b/src/mame/drivers/tickee.c @@ -33,9 +33,11 @@ class tickee_state : public driver_device public: tickee_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , + m_tlc34076(*this, "tlc34076"), m_vram(*this, "vram"), m_control(*this, "control"){ } + required_device m_tlc34076; required_shared_ptr m_vram; optional_shared_ptr m_control; emu_timer *m_setup_gun_timer; @@ -160,7 +162,7 @@ static void scanline_update(screen_device &screen, bitmap_rgb32 &bitmap, int sca tickee_state *state = screen.machine().driver_data(); UINT16 *src = &state->m_vram[(params->rowaddr << 8) & 0x3ff00]; UINT32 *dest = &bitmap.pix32(scanline); - const rgb_t *pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *pens = state->m_tlc34076->get_pens(); int coladdr = params->coladdr << 1; int x; @@ -186,7 +188,7 @@ static void rapidfir_scanline_update(screen_device &screen, bitmap_rgb32 &bitmap tickee_state *state = screen.machine().driver_data(); UINT16 *src = &state->m_vram[(params->rowaddr << 8) & 0x3ff00]; UINT32 *dest = &bitmap.pix32(scanline); - const rgb_t *pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *pens = state->m_tlc34076->get_pens(); int coladdr = params->coladdr << 1; int x; @@ -388,7 +390,7 @@ static ADDRESS_MAP_START( tickee_map, AS_PROGRAM, 16, tickee_state ) AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("vram") AM_RANGE(0x02000000, 0x02ffffff) AM_ROM AM_REGION("user1", 0) AM_RANGE(0x04000000, 0x04003fff) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x04100000, 0x041000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x04100000, 0x041000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0x04200000, 0x0420000f) AM_DEVREAD8_LEGACY("ym1", ay8910_r, 0x00ff) AM_RANGE(0x04200000, 0x0420001f) AM_DEVWRITE8_LEGACY("ym1", ay8910_address_data_w, 0x00ff) AM_RANGE(0x04200100, 0x0420010f) AM_DEVREAD8_LEGACY("ym2", ay8910_r, 0x00ff) @@ -406,7 +408,7 @@ static ADDRESS_MAP_START( ghoshunt_map, AS_PROGRAM, 16, tickee_state ) AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("vram") AM_RANGE(0x02000000, 0x02ffffff) AM_ROM AM_REGION("user1", 0) AM_RANGE(0x04100000, 0x04103fff) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x04200000, 0x042000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x04200000, 0x042000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0x04300000, 0x0430000f) AM_DEVREAD8_LEGACY("ym1", ay8910_r, 0x00ff) AM_RANGE(0x04300000, 0x0430001f) AM_DEVWRITE8_LEGACY("ym1", ay8910_address_data_w, 0x00ff) AM_RANGE(0x04300100, 0x0430010f) AM_DEVREAD8_LEGACY("ym2", ay8910_r, 0x00ff) @@ -422,7 +424,7 @@ static ADDRESS_MAP_START( mouseatk_map, AS_PROGRAM, 16, tickee_state ) AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("vram") AM_RANGE(0x02000000, 0x02ffffff) AM_ROM AM_REGION("user1", 0) AM_RANGE(0x04000000, 0x04003fff) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x04100000, 0x041000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x04100000, 0x041000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0x04200000, 0x0420000f) AM_DEVREAD8_LEGACY("ym", ay8910_r, 0x00ff) AM_RANGE(0x04200000, 0x0420000f) AM_DEVWRITE8_LEGACY("ym", ay8910_address_data_w, 0x00ff) AM_RANGE(0x04200100, 0x0420010f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) @@ -451,7 +453,7 @@ static ADDRESS_MAP_START( rapidfir_map, AS_PROGRAM, 16, tickee_state ) AM_RANGE(0xfc000b00, 0xfc000b0f) AM_READ_PORT("DSW0") AM_RANGE(0xfc000c00, 0xfc000c1f) AM_READ_PORT("DSW1") AM_RANGE(0xfc000e00, 0xfc000e1f) AM_READ(watchdog_reset16_r) - AM_RANGE(0xfc100000, 0xfc1000ff) AM_MIRROR(0x80000) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0xfc100000, 0xfc1000ff) AM_MIRROR(0x80000) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0xfc200000, 0xfc207fff) AM_RAM AM_SHARE("nvram") AM_RANGE(0xfc300000, 0xfc30000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) AM_RANGE(0xfc400010, 0xfc40001f) AM_READWRITE(ff7f_r, ff7f_w) @@ -775,7 +777,7 @@ static MACHINE_CONFIG_START( tickee, tickee_state ) MCFG_TICKET_DISPENSER_ADD("ticket2", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_VIDEO_START_OVERRIDE(tickee_state,tickee) @@ -815,7 +817,7 @@ static MACHINE_CONFIG_START( rapidfir, tickee_state ) MCFG_NVRAM_ADD_1FILL("nvram") /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_VIDEO_START_OVERRIDE(tickee_state,tickee) @@ -845,7 +847,7 @@ static MACHINE_CONFIG_START( mouseatk, tickee_state ) MCFG_TICKET_DISPENSER_ADD("ticket2", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK/2, 444, 0, 320, 233, 0, 200) diff --git a/src/mame/drivers/vcombat.c b/src/mame/drivers/vcombat.c index c1cc619beb4..1c926526f7a 100644 --- a/src/mame/drivers/vcombat.c +++ b/src/mame/drivers/vcombat.c @@ -95,12 +95,14 @@ class vcombat_state : public driver_device public: vcombat_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , + m_tlc34076(*this, "tlc34076"), m_vid_0_shared_ram(*this, "vid_0_ram"), m_vid_1_shared_ram(*this, "vid_1_ram"), m_framebuffer_ctrl(*this, "fb_control"){ } UINT16* m_m68k_framebuffer[2]; UINT16* m_i860_framebuffer[2][2]; + required_device m_tlc34076; required_shared_ptr m_vid_0_shared_ram; required_shared_ptr m_vid_1_shared_ram; required_shared_ptr m_framebuffer_ctrl; @@ -132,7 +134,7 @@ static UINT32 update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const r { vcombat_state *state = screen.machine().driver_data(); int y; - const rgb_t *const pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *const pens = state->m_tlc34076->get_pens(); UINT16 *m68k_buf = state->m_m68k_framebuffer[(*state->m_framebuffer_ctrl & 0x20) ? 1 : 0]; UINT16 *i860_buf = state->m_i860_framebuffer[index][0]; @@ -368,7 +370,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, vcombat_state ) //AM_RANGE(0x703000, 0x703001) /* Headset rotation axis? */ //AM_RANGE(0x704000, 0x704001) /* Headset rotation axis? */ - AM_RANGE(0x706000, 0x70601f) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x706000, 0x70601f) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) ADDRESS_MAP_END @@ -607,7 +609,7 @@ static MACHINE_CONFIG_START( vcombat, vcombat_state ) MCFG_QUANTUM_PERFECT_CPU("maincpu") #endif - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) /* Disabled for now as it can't handle multiple screens */ // MCFG_MC6845_ADD("crtc", MC6845, 6000000 / 16, mc6845_intf) @@ -644,7 +646,7 @@ static MACHINE_CONFIG_START( shadfgtr, vcombat_state ) MCFG_NVRAM_ADD_0FILL("nvram") MCFG_MACHINE_RESET_OVERRIDE(vcombat_state,shadfgtr) - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_MC6845_ADD("crtc", MC6845, XTAL_20MHz / 4 / 16, mc6845_intf) diff --git a/src/mame/drivers/xtheball.c b/src/mame/drivers/xtheball.c index 27292712cc3..28c75f4e9e4 100644 --- a/src/mame/drivers/xtheball.c +++ b/src/mame/drivers/xtheball.c @@ -19,9 +19,12 @@ class xtheball_state : public driver_device public: xtheball_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , - m_vram_bg(*this, "vrabg"), - m_vram_fg(*this, "vrafg"){ } + m_tlc34076(*this, "tlc34076"), + m_vram_bg(*this, "vrabg"), + m_vram_fg(*this, "vrafg") + { } + required_device m_tlc34076; required_shared_ptr m_vram_bg; required_shared_ptr m_vram_fg; UINT8 m_bitvals[32]; @@ -44,7 +47,7 @@ static void xtheball_scanline_update(screen_device &screen, bitmap_rgb32 &bitmap xtheball_state *state = screen.machine().driver_data(); UINT16 *srcbg = &state->m_vram_bg[(params->rowaddr << 8) & 0xff00]; UINT32 *dest = &bitmap.pix32(scanline); - const rgb_t *pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *pens = state->m_tlc34076->get_pens(); int coladdr = params->coladdr; int x; @@ -214,7 +217,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, xtheball_state ) AM_RANGE(0x00000000, 0x0001ffff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x01000000, 0x010fffff) AM_RAM AM_SHARE("vrabg") AM_RANGE(0x02000000, 0x020fffff) AM_RAM AM_SHARE("vrafg") - AM_RANGE(0x03000000, 0x030000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff) + AM_RANGE(0x03000000, 0x030000ff) AM_DEVREADWRITE8("tlc34076", tlc34076_device, read, write, 0x00ff) AM_RANGE(0x03040000, 0x030401ff) AM_WRITE(bit_controls_w) AM_RANGE(0x03040080, 0x0304008f) AM_READ_PORT("DSW") AM_RANGE(0x03040100, 0x0304010f) AM_READ(analogx_r) @@ -345,7 +348,7 @@ static MACHINE_CONFIG_START( xtheball, xtheball_state ) MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ - MCFG_TLC34076_ADD("tlc34076", tlc34076_6_bit_intf) + MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(10000000, 640, 114, 626, 257, 24, 248) diff --git a/src/mame/includes/artmagic.h b/src/mame/includes/artmagic.h index 41ecd4ed919..75c8c9a83fc 100644 --- a/src/mame/includes/artmagic.h +++ b/src/mame/includes/artmagic.h @@ -8,11 +8,13 @@ class artmagic_state : public driver_device { public: artmagic_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) , + : driver_device(mconfig, type, tag), + m_tlc34076(*this, "tlc34076"), m_control(*this, "control"), m_vram0(*this, "vram0"), m_vram1(*this, "vram1"){ } + required_device m_tlc34076; required_shared_ptr m_control; UINT8 m_tms_irq; UINT8 m_hack_irq; diff --git a/src/mame/includes/coolpool.h b/src/mame/includes/coolpool.h index 9d8a6aa0a14..a8bea8fe898 100644 --- a/src/mame/includes/coolpool.h +++ b/src/mame/includes/coolpool.h @@ -5,9 +5,11 @@ class coolpool_state : public driver_device public: coolpool_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , + m_tlc34076(*this, "tlc34076"), m_vram_base(*this, "vram_base"), m_nvram(*this, "nvram"){ } + optional_device m_tlc34076; required_shared_ptr m_vram_base; required_shared_ptr m_nvram; diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h index da477d18979..bf49760e022 100644 --- a/src/mame/includes/itech8.h +++ b/src/mame/includes/itech8.h @@ -5,6 +5,7 @@ **************************************************************************/ +#include "video/tlc34076.h" #include "video/tms34061.h" #define YBUFFER_COUNT 15 @@ -14,8 +15,11 @@ class itech8_state : public driver_device public: itech8_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_tlc34076(*this, "tlc34076"), m_visarea(0, 0, 0, 0){ } + required_device m_tlc34076; + rectangle m_visarea; UINT8 m_grom_bank; diff --git a/src/mame/video/artmagic.c b/src/mame/video/artmagic.c index f382eca3183..b51d2ae7485 100644 --- a/src/mame/video/artmagic.c +++ b/src/mame/video/artmagic.c @@ -341,7 +341,7 @@ void artmagic_scanline(screen_device &screen, bitmap_rgb32 &bitmap, int scanline offs_t offset = (params->rowaddr << 12) & 0x7ff000; UINT16 *vram = address_to_vram(state, &offset); UINT32 *dest = &bitmap.pix32(scanline); - const rgb_t *pens = tlc34076_get_pens(screen.machine().device("tlc34076")); + const rgb_t *pens = state->m_tlc34076->get_pens(); int coladdr = params->coladdr << 1; int x; diff --git a/src/mame/video/btoads.c b/src/mame/video/btoads.c index 465fb5580d5..b5b2613482d 100644 --- a/src/mame/video/btoads.c +++ b/src/mame/video/btoads.c @@ -123,13 +123,13 @@ WRITE16_MEMBER( btoads_state::scroll1_w ) WRITE16_MEMBER( btoads_state::paletteram_w ) { - tlc34076_w(m_tlc34076, space, offset/2, data); + m_tlc34076->write(space, offset/2, data); } READ16_MEMBER( btoads_state::paletteram_r ) { - return tlc34076_r(m_tlc34076, space, offset/2); + return m_tlc34076->read(space, offset/2); } @@ -323,7 +323,7 @@ void btoads_state::scanline_update(screen_device &screen, bitmap_rgb32 &bitmap, UINT16 *bg1_base = &m_vram_bg1[(fulladdr + (m_yscroll1 << 10)) & 0x3fc00]; UINT8 *spr_base = &m_vram_fg_display[fulladdr & 0x3fc00]; UINT32 *dst = &bitmap.pix32(scanline); - const rgb_t *pens = tlc34076_get_pens(m_tlc34076); + const rgb_t *pens = m_tlc34076->get_pens(); int coladdr = fulladdr & 0x3ff; int x; diff --git a/src/mame/video/itech8.c b/src/mame/video/itech8.c index 4cce333a298..2bf8be7c8fa 100644 --- a/src/mame/video/itech8.c +++ b/src/mame/video/itech8.c @@ -188,7 +188,7 @@ void itech8_state::video_start() WRITE8_MEMBER(itech8_state::itech8_palette_w) { - tlc34076_w(machine().device("tlc34076"), space, offset/2, data); + m_tlc34076->write(space, offset/2, data); } @@ -605,7 +605,7 @@ UINT32 itech8_state::screen_update_itech8_2layer(screen_device &screen, bitmap_r struct tms34061_display &tms_state = m_tms_state; UINT32 page_offset; int x, y; - const rgb_t *pens = tlc34076_get_pens(machine().device("tlc34076")); + const rgb_t *pens = m_tlc34076->get_pens(); /* first get the current display state */ tms34061_get_display_state(&tms_state); @@ -690,7 +690,7 @@ UINT32 itech8_state::screen_update_itech8_2page(screen_device &screen, bitmap_rg struct tms34061_display &tms_state = m_tms_state; UINT32 page_offset; int x, y; - const rgb_t *pens = tlc34076_get_pens(machine().device("tlc34076")); + const rgb_t *pens = m_tlc34076->get_pens(); /* first get the current display state */ tms34061_get_display_state(&tms_state); @@ -722,7 +722,7 @@ UINT32 itech8_state::screen_update_itech8_2page_large(screen_device &screen, bit struct tms34061_display &tms_state = m_tms_state; UINT32 page_offset; int x, y; - const rgb_t *pens = tlc34076_get_pens(machine().device("tlc34076")); + const rgb_t *pens = m_tlc34076->get_pens(); /* first get the current display state */ tms34061_get_display_state(&tms_state);