tlc34076: Convert implementation to use device_palette_interface (nw)

This commit is contained in:
AJR 2018-05-13 17:46:27 -04:00
parent 00f85467d9
commit 7db49620b2
10 changed files with 47 additions and 38 deletions

View File

@ -43,6 +43,7 @@ DEFINE_DEVICE_TYPE(TLC34076, tlc34076_device, "tlc34076", "TI TLC34076 VIP")
//-------------------------------------------------
tlc34076_device::tlc34076_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, TLC34076, tag, owner, clock)
, device_palette_interface(mconfig, *this)
, m_dacbits(6)
{
}
@ -82,6 +83,9 @@ void tlc34076_device::device_reset()
m_regs[PALETTE_PAGE] = 0x00;
m_regs[TEST_REGISTER] = 0x00;
m_regs[RESET_STATE] = 0x00;
for (int i = 0; i < 0x100; i++)
update_pen(i);
}
@ -90,41 +94,34 @@ void tlc34076_device::device_reset()
//**************************************************************************
//-------------------------------------------------
// get_pens - retrieve current palette
// update_pen - update color in current palette
//-------------------------------------------------
const rgb_t *tlc34076_device::get_pens()
void tlc34076_device::update_pen(uint8_t i)
{
offs_t i;
int r, g, b;
for (i = 0; i < 0x100; i++)
if ((i & m_regs[PIXEL_READ_MASK]) == i)
{
int r, g, b;
r = m_local_paletteram[0][i];
g = m_local_paletteram[1][i];
b = m_local_paletteram[2][i];
if ((i & m_regs[PIXEL_READ_MASK]) == i)
if (m_dacbits == 6)
{
r = m_local_paletteram[0][i];
g = m_local_paletteram[1][i];
b = m_local_paletteram[2][i];
if (m_dacbits == 6)
{
r = pal6bit(r);
g = pal6bit(g);
b = pal6bit(b);
}
r = pal6bit(r);
g = pal6bit(g);
b = pal6bit(b);
}
else
{
r = 0;
g = 0;
b = 0;
}
m_pens[i] = rgb_t(r, g, b);
}
else
{
r = 0;
g = 0;
b = 0;
}
return m_pens.get();
set_pen_color(i, rgb_t(r, g, b));
}
@ -189,11 +186,18 @@ WRITE8_MEMBER( tlc34076_device::write )
for (int i = 0; i < 3; i++)
m_local_paletteram[i][m_regs[PALETTE_WRITE_ADDR]] = m_palettedata[i];
update_pen(m_regs[PALETTE_WRITE_ADDR]);
m_writeindex = 0;
m_regs[PALETTE_WRITE_ADDR]++;
}
break;
case PIXEL_READ_MASK:
for (int i = 0; i < 0x100; i++)
update_pen(i);
break;
case PALETTE_READ_ADDR:
m_readindex = 0;
break;

View File

@ -19,7 +19,7 @@
TYPE DEFINITIONS
***************************************************************************/
class tlc34076_device : public device_t
class tlc34076_device : public device_t, public device_palette_interface
{
public:
enum tlc34076_bits
@ -35,7 +35,6 @@ public:
void set_bits(tlc34076_bits bits) { m_dacbits = bits; }
// public interface
const rgb_t *get_pens();
DECLARE_READ8_MEMBER(read);
DECLARE_WRITE8_MEMBER(write);
@ -44,7 +43,13 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
// device_palette_interface overrides
virtual uint32_t palette_entries() const override { return 0x100; }
private:
// internal helpers
void update_pen(uint8_t i);
// internal state
std::unique_ptr<uint8_t[]> m_local_paletteram[3];
uint8_t m_regs[0x10];

View File

@ -90,7 +90,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(coolpool_state::coolpool_scanline)
{
uint16_t *vram = &m_vram_base[(params->rowaddr << 8) & 0x1ff00];
uint32_t *dest = &bitmap.pix32(scanline);
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
int coladdr = params->coladdr;
int x;

View File

@ -90,7 +90,7 @@ void skeetsht_state::video_start()
TMS340X0_SCANLINE_RGB32_CB_MEMBER(skeetsht_state::scanline_update)
{
const rgb_t *const pens = m_tlc34076->get_pens();
const pen_t *const pens = m_tlc34076->pens();
uint16_t *vram = &m_tms_vram[(params->rowaddr << 8) & 0x3ff00];
uint32_t *dest = &bitmap.pix32(scanline);
int coladdr = params->coladdr;

View File

@ -220,7 +220,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_state::scanline_update)
{
uint16_t *src = &m_vram[(params->rowaddr << 8) & 0x3ff00];
uint32_t *dest = &bitmap.pix32(scanline);
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
int coladdr = params->coladdr << 1;
int x;
@ -245,7 +245,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_state::rapidfir_scanline_update)
{
uint16_t *src = &m_vram[(params->rowaddr << 8) & 0x3ff00];
uint32_t *dest = &bitmap.pix32(scanline);
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
int coladdr = params->coladdr << 1;
int x;

View File

@ -149,7 +149,7 @@ public:
uint32_t vcombat_state::update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
{
int y;
const rgb_t *const pens = m_tlc34076->get_pens();
const pen_t *const pens = m_tlc34076->pens();
uint16_t *m68k_buf = m_m68k_framebuffer[(*m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
uint16_t *i860_buf = m_i860_framebuffer[index][0].get();

View File

@ -77,7 +77,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(xtheball_state::scanline_update)
{
uint16_t *srcbg = &m_vram_bg[(params->rowaddr << 8) & 0xff00];
uint32_t *dest = &bitmap.pix32(scanline);
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
int coladdr = params->coladdr;
int x;

View File

@ -339,7 +339,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(artmagic_state::scanline)
offs_t offset = (params->rowaddr << 12) & 0x7ff000;
uint16_t *vram = address_to_vram(&offset);
uint32_t *dest = &bitmap.pix32(scanline);
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
int coladdr = params->coladdr << 1;
int x;

View File

@ -327,7 +327,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(btoads_state::scanline_update)
uint16_t *bg1_base = &m_vram_bg1[(fulladdr + (m_yscroll1 << 10)) & 0x3fc00];
uint8_t *spr_base = &m_vram_fg_display[fulladdr & 0x3fc00];
uint32_t *dst = &bitmap.pix32(scanline);
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
int coladdr = fulladdr & 0x3ff;
int x;

View File

@ -579,7 +579,7 @@ uint32_t itech8_state::screen_update_2layer(screen_device &screen, bitmap_rgb32
{
uint32_t page_offset;
int x, y;
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
/* first get the current display state */
m_tms34061->get_display_state();
@ -662,7 +662,7 @@ uint32_t itech8_state::screen_update_2page(screen_device &screen, bitmap_rgb32 &
{
uint32_t page_offset;
int x, y;
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
/* first get the current display state */
m_tms34061->get_display_state();
@ -693,7 +693,7 @@ uint32_t itech8_state::screen_update_2page_large(screen_device &screen, bitmap_r
{
uint32_t page_offset;
int x, y;
const rgb_t *pens = m_tlc34076->get_pens();
const pen_t *pens = m_tlc34076->pens();
/* first get the current display state */
m_tms34061->get_display_state();