mirror of
https://github.com/holub/mame
synced 2025-05-31 10:01:51 +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)
|
||||
: 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;
|
||||
|
@ -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];
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user