mirror of
https://github.com/holub/mame
synced 2025-06-05 12:26:35 +03:00
tlc34076: Convert implementation to use device_palette_interface (nw)
This commit is contained in:
parent
00f85467d9
commit
7db49620b2
@ -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)
|
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_t(mconfig, TLC34076, tag, owner, clock)
|
||||||
|
, device_palette_interface(mconfig, *this)
|
||||||
, m_dacbits(6)
|
, m_dacbits(6)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -82,6 +83,9 @@ void tlc34076_device::device_reset()
|
|||||||
m_regs[PALETTE_PAGE] = 0x00;
|
m_regs[PALETTE_PAGE] = 0x00;
|
||||||
m_regs[TEST_REGISTER] = 0x00;
|
m_regs[TEST_REGISTER] = 0x00;
|
||||||
m_regs[RESET_STATE] = 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];
|
r = pal6bit(r);
|
||||||
g = m_local_paletteram[1][i];
|
g = pal6bit(g);
|
||||||
b = m_local_paletteram[2][i];
|
b = pal6bit(b);
|
||||||
|
|
||||||
if (m_dacbits == 6)
|
|
||||||
{
|
|
||||||
r = pal6bit(r);
|
|
||||||
g = pal6bit(g);
|
|
||||||
b = pal6bit(b);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
r = 0;
|
{
|
||||||
g = 0;
|
r = 0;
|
||||||
b = 0;
|
g = 0;
|
||||||
}
|
b = 0;
|
||||||
|
|
||||||
m_pens[i] = rgb_t(r, g, b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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++)
|
for (int i = 0; i < 3; i++)
|
||||||
m_local_paletteram[i][m_regs[PALETTE_WRITE_ADDR]] = m_palettedata[i];
|
m_local_paletteram[i][m_regs[PALETTE_WRITE_ADDR]] = m_palettedata[i];
|
||||||
|
|
||||||
|
update_pen(m_regs[PALETTE_WRITE_ADDR]);
|
||||||
|
|
||||||
m_writeindex = 0;
|
m_writeindex = 0;
|
||||||
m_regs[PALETTE_WRITE_ADDR]++;
|
m_regs[PALETTE_WRITE_ADDR]++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PIXEL_READ_MASK:
|
||||||
|
for (int i = 0; i < 0x100; i++)
|
||||||
|
update_pen(i);
|
||||||
|
break;
|
||||||
|
|
||||||
case PALETTE_READ_ADDR:
|
case PALETTE_READ_ADDR:
|
||||||
m_readindex = 0;
|
m_readindex = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
TYPE DEFINITIONS
|
TYPE DEFINITIONS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
class tlc34076_device : public device_t
|
class tlc34076_device : public device_t, public device_palette_interface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum tlc34076_bits
|
enum tlc34076_bits
|
||||||
@ -35,7 +35,6 @@ public:
|
|||||||
void set_bits(tlc34076_bits bits) { m_dacbits = bits; }
|
void set_bits(tlc34076_bits bits) { m_dacbits = bits; }
|
||||||
|
|
||||||
// public interface
|
// public interface
|
||||||
const rgb_t *get_pens();
|
|
||||||
DECLARE_READ8_MEMBER(read);
|
DECLARE_READ8_MEMBER(read);
|
||||||
DECLARE_WRITE8_MEMBER(write);
|
DECLARE_WRITE8_MEMBER(write);
|
||||||
|
|
||||||
@ -44,7 +43,13 @@ protected:
|
|||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
virtual void device_reset() override;
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// device_palette_interface overrides
|
||||||
|
virtual uint32_t palette_entries() const override { return 0x100; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// internal helpers
|
||||||
|
void update_pen(uint8_t i);
|
||||||
|
|
||||||
// internal state
|
// internal state
|
||||||
std::unique_ptr<uint8_t[]> m_local_paletteram[3];
|
std::unique_ptr<uint8_t[]> m_local_paletteram[3];
|
||||||
uint8_t m_regs[0x10];
|
uint8_t m_regs[0x10];
|
||||||
|
@ -90,7 +90,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(coolpool_state::coolpool_scanline)
|
|||||||
{
|
{
|
||||||
uint16_t *vram = &m_vram_base[(params->rowaddr << 8) & 0x1ff00];
|
uint16_t *vram = &m_vram_base[(params->rowaddr << 8) & 0x1ff00];
|
||||||
uint32_t *dest = &bitmap.pix32(scanline);
|
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 coladdr = params->coladdr;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ void skeetsht_state::video_start()
|
|||||||
|
|
||||||
TMS340X0_SCANLINE_RGB32_CB_MEMBER(skeetsht_state::scanline_update)
|
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];
|
uint16_t *vram = &m_tms_vram[(params->rowaddr << 8) & 0x3ff00];
|
||||||
uint32_t *dest = &bitmap.pix32(scanline);
|
uint32_t *dest = &bitmap.pix32(scanline);
|
||||||
int coladdr = params->coladdr;
|
int coladdr = params->coladdr;
|
||||||
|
@ -220,7 +220,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_state::scanline_update)
|
|||||||
{
|
{
|
||||||
uint16_t *src = &m_vram[(params->rowaddr << 8) & 0x3ff00];
|
uint16_t *src = &m_vram[(params->rowaddr << 8) & 0x3ff00];
|
||||||
uint32_t *dest = &bitmap.pix32(scanline);
|
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 coladdr = params->coladdr << 1;
|
||||||
int x;
|
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];
|
uint16_t *src = &m_vram[(params->rowaddr << 8) & 0x3ff00];
|
||||||
uint32_t *dest = &bitmap.pix32(scanline);
|
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 coladdr = params->coladdr << 1;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ public:
|
|||||||
uint32_t vcombat_state::update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
|
uint32_t vcombat_state::update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
|
||||||
{
|
{
|
||||||
int y;
|
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 *m68k_buf = m_m68k_framebuffer[(*m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
|
||||||
uint16_t *i860_buf = m_i860_framebuffer[index][0].get();
|
uint16_t *i860_buf = m_i860_framebuffer[index][0].get();
|
||||||
|
@ -77,7 +77,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(xtheball_state::scanline_update)
|
|||||||
{
|
{
|
||||||
uint16_t *srcbg = &m_vram_bg[(params->rowaddr << 8) & 0xff00];
|
uint16_t *srcbg = &m_vram_bg[(params->rowaddr << 8) & 0xff00];
|
||||||
uint32_t *dest = &bitmap.pix32(scanline);
|
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 coladdr = params->coladdr;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -339,7 +339,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(artmagic_state::scanline)
|
|||||||
offs_t offset = (params->rowaddr << 12) & 0x7ff000;
|
offs_t offset = (params->rowaddr << 12) & 0x7ff000;
|
||||||
uint16_t *vram = address_to_vram(&offset);
|
uint16_t *vram = address_to_vram(&offset);
|
||||||
uint32_t *dest = &bitmap.pix32(scanline);
|
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 coladdr = params->coladdr << 1;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -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];
|
uint16_t *bg1_base = &m_vram_bg1[(fulladdr + (m_yscroll1 << 10)) & 0x3fc00];
|
||||||
uint8_t *spr_base = &m_vram_fg_display[fulladdr & 0x3fc00];
|
uint8_t *spr_base = &m_vram_fg_display[fulladdr & 0x3fc00];
|
||||||
uint32_t *dst = &bitmap.pix32(scanline);
|
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 coladdr = fulladdr & 0x3ff;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -579,7 +579,7 @@ uint32_t itech8_state::screen_update_2layer(screen_device &screen, bitmap_rgb32
|
|||||||
{
|
{
|
||||||
uint32_t page_offset;
|
uint32_t page_offset;
|
||||||
int x, y;
|
int x, y;
|
||||||
const rgb_t *pens = m_tlc34076->get_pens();
|
const pen_t *pens = m_tlc34076->pens();
|
||||||
|
|
||||||
/* first get the current display state */
|
/* first get the current display state */
|
||||||
m_tms34061->get_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;
|
uint32_t page_offset;
|
||||||
int x, y;
|
int x, y;
|
||||||
const rgb_t *pens = m_tlc34076->get_pens();
|
const pen_t *pens = m_tlc34076->pens();
|
||||||
|
|
||||||
/* first get the current display state */
|
/* first get the current display state */
|
||||||
m_tms34061->get_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;
|
uint32_t page_offset;
|
||||||
int x, y;
|
int x, y;
|
||||||
const rgb_t *pens = m_tlc34076->get_pens();
|
const pen_t *pens = m_tlc34076->pens();
|
||||||
|
|
||||||
/* first get the current display state */
|
/* first get the current display state */
|
||||||
m_tms34061->get_display_state();
|
m_tms34061->get_display_state();
|
||||||
|
Loading…
Reference in New Issue
Block a user