mirror of
https://github.com/holub/mame
synced 2025-04-30 03:47:13 +03:00
Moved palette setting into method to avoid undefined rgb_t instances;
included log control flags. (nw)
This commit is contained in:
parent
2215b98973
commit
95a5d8cdcd
@ -34,6 +34,16 @@ const device_type TMS9929 = &device_creator<tms9929_device>;
|
|||||||
const device_type TMS9929A = &device_creator<tms9929a_device>;
|
const device_type TMS9929A = &device_creator<tms9929a_device>;
|
||||||
const device_type TMS9129 = &device_creator<tms9129_device>;
|
const device_type TMS9129 = &device_creator<tms9129_device>;
|
||||||
|
|
||||||
|
// ======= Debugging =========
|
||||||
|
|
||||||
|
// Log register accesses
|
||||||
|
#define TRACE_REG 0
|
||||||
|
|
||||||
|
// Log mode settings
|
||||||
|
#define TRACE_MODE 0
|
||||||
|
|
||||||
|
// ===========================
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The TMS9928 has an own address space.
|
The TMS9928 has an own address space.
|
||||||
*/
|
*/
|
||||||
@ -42,54 +52,6 @@ static ADDRESS_MAP_START(memmap, AS_DATA, 8, tms9928a_device)
|
|||||||
AM_RANGE(0x0000, 0x3fff) AM_RAM
|
AM_RANGE(0x0000, 0x3fff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
/*
|
|
||||||
New palette (R. Nabet).
|
|
||||||
|
|
||||||
First 3 columns from TI datasheet (in volts).
|
|
||||||
Next 3 columns based on formula :
|
|
||||||
Y = .299*R + .587*G + .114*B (NTSC)
|
|
||||||
(the coefficients are likely to be slightly different with PAL, but who cares ?)
|
|
||||||
I assumed the "zero" for R-Y and B-Y was 0.47V.
|
|
||||||
Last 3 coeffs are the 8-bit values.
|
|
||||||
|
|
||||||
Color Y R-Y B-Y R G B R G B
|
|
||||||
0 Transparent
|
|
||||||
1 Black 0.00 0.47 0.47 0.00 0.00 0.00 0 0 0
|
|
||||||
2 Medium green 0.53 0.07 0.20 0.13 0.79 0.26 33 200 66
|
|
||||||
3 Light green 0.67 0.17 0.27 0.37 0.86 0.47 94 220 120
|
|
||||||
4 Dark blue 0.40 0.40 1.00 0.33 0.33 0.93 84 85 237
|
|
||||||
5 Light blue 0.53 0.43 0.93 0.49 0.46 0.99 125 118 252
|
|
||||||
6 Dark red 0.47 0.83 0.30 0.83 0.32 0.30 212 82 77
|
|
||||||
7 Cyan 0.73 0.00 0.70 0.26 0.92 0.96 66 235 245
|
|
||||||
8 Medium red 0.53 0.93 0.27 0.99 0.33 0.33 252 85 84
|
|
||||||
9 Light red 0.67 0.93 0.27 1.13(!) 0.47 0.47 255 121 120
|
|
||||||
A Dark yellow 0.73 0.57 0.07 0.83 0.76 0.33 212 193 84
|
|
||||||
B Light yellow 0.80 0.57 0.17 0.90 0.81 0.50 230 206 128
|
|
||||||
C Dark green 0.47 0.13 0.23 0.13 0.69 0.23 33 176 59
|
|
||||||
D Magenta 0.53 0.73 0.67 0.79 0.36 0.73 201 91 186
|
|
||||||
E Gray 0.80 0.47 0.47 0.80 0.80 0.80 204 204 204
|
|
||||||
F White 1.00 0.47 0.47 1.00 1.00 1.00 255 255 255
|
|
||||||
*/
|
|
||||||
static const rgb_t tms9928a_palette[TMS9928A_PALETTE_SIZE] =
|
|
||||||
{
|
|
||||||
rgb_t::black,
|
|
||||||
rgb_t::black,
|
|
||||||
rgb_t(33, 200, 66),
|
|
||||||
rgb_t(94, 220, 120),
|
|
||||||
rgb_t(84, 85, 237),
|
|
||||||
rgb_t(125, 118, 252),
|
|
||||||
rgb_t(212, 82, 77),
|
|
||||||
rgb_t(66, 235, 245),
|
|
||||||
rgb_t(252, 85, 84),
|
|
||||||
rgb_t(255, 121, 120),
|
|
||||||
rgb_t(212, 193, 84),
|
|
||||||
rgb_t(230, 206, 128),
|
|
||||||
rgb_t(33, 176, 59),
|
|
||||||
rgb_t(201, 91, 186),
|
|
||||||
rgb_t(204, 204, 204),
|
|
||||||
rgb_t::white
|
|
||||||
};
|
|
||||||
|
|
||||||
tms9928a_device::tms9928a_device( const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, bool is_50hz, bool is_reva, bool is_99, const char *shortname, const char *source)
|
tms9928a_device::tms9928a_device( const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, bool is_50hz, bool is_reva, bool is_99, const char *shortname, const char *source)
|
||||||
: device_t( mconfig, type, name, tag, owner, clock, shortname, source),
|
: device_t( mconfig, type, name, tag, owner, clock, shortname, source),
|
||||||
device_memory_interface(mconfig, *this),
|
device_memory_interface(mconfig, *this),
|
||||||
@ -205,7 +167,7 @@ void tms9928a_device::change_register(UINT8 reg, UINT8 val)
|
|||||||
val &= Mask[reg];
|
val &= Mask[reg];
|
||||||
m_Regs[reg] = val;
|
m_Regs[reg] = val;
|
||||||
|
|
||||||
logerror("TMS9928A('%s'): Reg %d = %02xh\n", tag(), reg, (int)val);
|
if (TRACE_REG) logerror("TMS9928A('%s'): Reg %d = %02xh\n", tag(), reg, (int)val);
|
||||||
|
|
||||||
switch (reg)
|
switch (reg)
|
||||||
{
|
{
|
||||||
@ -225,12 +187,12 @@ void tms9928a_device::change_register(UINT8 reg, UINT8 val)
|
|||||||
m_mode = ( (m_reva ? (m_Regs[0] & 2) : 0) | ((m_Regs[1] & 0x10)>>4) | ((m_Regs[1] & 8)>>1));
|
m_mode = ( (m_reva ? (m_Regs[0] & 2) : 0) | ((m_Regs[1] & 0x10)>>4) | ((m_Regs[1] & 8)>>1));
|
||||||
if ((val ^ prev) & 1)
|
if ((val ^ prev) & 1)
|
||||||
update_backdrop();
|
update_backdrop();
|
||||||
logerror("TMS9928A('%s'): %s\n", tag(), modes[m_mode]);
|
if (TRACE_MODE) logerror("TMS9928A('%s'): %s\n", tag(), modes[m_mode]);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
check_interrupt();
|
check_interrupt();
|
||||||
m_mode = ( (m_reva ? (m_Regs[0] & 2) : 0) | ((m_Regs[1] & 0x10)>>4) | ((m_Regs[1] & 8)>>1));
|
m_mode = ( (m_reva ? (m_Regs[0] & 2) : 0) | ((m_Regs[1] & 0x10)>>4) | ((m_Regs[1] & 8)>>1));
|
||||||
logerror("TMS9928A('%s'): %s\n", tag(), modes[m_mode]);
|
if (TRACE_MODE) logerror("TMS9928A('%s'): %s\n", tag(), modes[m_mode]);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
m_nametbl = (val * 1024) & (m_vram_size - 1);
|
m_nametbl = (val * 1024) & (m_vram_size - 1);
|
||||||
@ -627,6 +589,62 @@ void tms9928a_device::device_config_complete()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tms9928a_device::set_palette()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
New palette (R. Nabet).
|
||||||
|
|
||||||
|
First 3 columns from TI datasheet (in volts).
|
||||||
|
Next 3 columns based on formula :
|
||||||
|
Y = .299*R + .587*G + .114*B (NTSC)
|
||||||
|
(the coefficients are likely to be slightly different with PAL, but who cares ?)
|
||||||
|
I assumed the "zero" for R-Y and B-Y was 0.47V.
|
||||||
|
Last 3 coeffs are the 8-bit values.
|
||||||
|
|
||||||
|
Color Y R-Y B-Y R G B R G B
|
||||||
|
0 Transparent
|
||||||
|
1 Black 0.00 0.47 0.47 0.00 0.00 0.00 0 0 0
|
||||||
|
2 Medium green 0.53 0.07 0.20 0.13 0.79 0.26 33 200 66
|
||||||
|
3 Light green 0.67 0.17 0.27 0.37 0.86 0.47 94 220 120
|
||||||
|
4 Dark blue 0.40 0.40 1.00 0.33 0.33 0.93 84 85 237
|
||||||
|
5 Light blue 0.53 0.43 0.93 0.49 0.46 0.99 125 118 252
|
||||||
|
6 Dark red 0.47 0.83 0.30 0.83 0.32 0.30 212 82 77
|
||||||
|
7 Cyan 0.73 0.00 0.70 0.26 0.92 0.96 66 235 245
|
||||||
|
8 Medium red 0.53 0.93 0.27 0.99 0.33 0.33 252 85 84
|
||||||
|
9 Light red 0.67 0.93 0.27 1.13(!) 0.47 0.47 255 121 120
|
||||||
|
A Dark yellow 0.73 0.57 0.07 0.83 0.76 0.33 212 193 84
|
||||||
|
B Light yellow 0.80 0.57 0.17 0.90 0.81 0.50 230 206 128
|
||||||
|
C Dark green 0.47 0.13 0.23 0.13 0.69 0.23 33 176 59
|
||||||
|
D Magenta 0.53 0.73 0.67 0.79 0.36 0.73 201 91 186
|
||||||
|
E Gray 0.80 0.47 0.47 0.80 0.80 0.80 204 204 204
|
||||||
|
F White 1.00 0.47 0.47 1.00 1.00 1.00 255 255 255
|
||||||
|
*/
|
||||||
|
static const rgb_t tms9928a_palette[TMS9928A_PALETTE_SIZE] =
|
||||||
|
{
|
||||||
|
rgb_t::black,
|
||||||
|
rgb_t::black,
|
||||||
|
rgb_t(33, 200, 66),
|
||||||
|
rgb_t(94, 220, 120),
|
||||||
|
rgb_t(84, 85, 237),
|
||||||
|
rgb_t(125, 118, 252),
|
||||||
|
rgb_t(212, 82, 77),
|
||||||
|
rgb_t(66, 235, 245),
|
||||||
|
rgb_t(252, 85, 84),
|
||||||
|
rgb_t(255, 121, 120),
|
||||||
|
rgb_t(212, 193, 84),
|
||||||
|
rgb_t(230, 206, 128),
|
||||||
|
rgb_t(33, 176, 59),
|
||||||
|
rgb_t(201, 91, 186),
|
||||||
|
rgb_t(204, 204, 204),
|
||||||
|
rgb_t::white
|
||||||
|
};
|
||||||
|
|
||||||
|
/* copy default palette into working palette */
|
||||||
|
for (int i = 0; i < TMS9928A_PALETTE_SIZE; i++)
|
||||||
|
{
|
||||||
|
m_palette[i] = tms9928a_palette[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void tms9928a_device::device_start()
|
void tms9928a_device::device_start()
|
||||||
{
|
{
|
||||||
@ -645,11 +663,7 @@ void tms9928a_device::device_start()
|
|||||||
|
|
||||||
m_line_timer = timer_alloc(TIMER_LINE);
|
m_line_timer = timer_alloc(TIMER_LINE);
|
||||||
|
|
||||||
/* copy default palette into working palette */
|
set_palette();
|
||||||
for (int i = 0; i < TMS9928A_PALETTE_SIZE; i++)
|
|
||||||
{
|
|
||||||
m_palette[i] = tms9928a_palette[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
save_item(NAME(m_Regs[0]));
|
save_item(NAME(m_Regs[0]));
|
||||||
save_item(NAME(m_Regs[1]));
|
save_item(NAME(m_Regs[1]));
|
||||||
|
@ -118,6 +118,7 @@ private:
|
|||||||
void check_interrupt();
|
void check_interrupt();
|
||||||
void update_backdrop();
|
void update_backdrop();
|
||||||
void update_table_masks();
|
void update_table_masks();
|
||||||
|
void set_palette();
|
||||||
|
|
||||||
static const device_timer_id TIMER_LINE = 0;
|
static const device_timer_id TIMER_LINE = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user