Fully modernised the TLC34076 device [Phil Bennett]

This commit is contained in:
Phil Bennett 2013-01-27 15:55:07 +00:00
parent 2b27972b79
commit 21f48e8f14
16 changed files with 201 additions and 228 deletions

View File

@ -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>;
//-------------------------------------------------
// 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<tlc34076_device *>(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<tlc34076_device &>(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::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);
}

View File

@ -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__ */

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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<tlc34076_device> m_tlc34076;
required_shared_ptr<UINT16> 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<skeetsht_state>();
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

View File

@ -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<tlc34076_device> m_tlc34076;
required_shared_ptr<UINT16> m_vram;
optional_shared_ptr<UINT16> 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<tickee_state>();
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<tickee_state>();
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)

View File

@ -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<tlc34076_device> m_tlc34076;
required_shared_ptr<UINT16> m_vid_0_shared_ram;
required_shared_ptr<UINT16> m_vid_1_shared_ram;
required_shared_ptr<UINT16> 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<vcombat_state>();
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)

View File

@ -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<tlc34076_device> m_tlc34076;
required_shared_ptr<UINT16> m_vram_bg;
required_shared_ptr<UINT16> 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<xtheball_state>();
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)

View File

@ -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<tlc34076_device> m_tlc34076;
required_shared_ptr<UINT16> m_control;
UINT8 m_tms_irq;
UINT8 m_hack_irq;

View File

@ -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<tlc34076_device> m_tlc34076;
required_shared_ptr<UINT16> m_vram_base;
required_shared_ptr<UINT16> m_nvram;

View File

@ -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<tlc34076_device> m_tlc34076;
rectangle m_visarea;
UINT8 m_grom_bank;

View File

@ -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;

View File

@ -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;

View File

@ -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);