mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
315_5124.cpp : Fix color related to hardware measured value (#5828)
* 315_5124.cpp : Fix color related to hardware measured value * 315_5124.cpp : Add notes * 315_5124.cpp : Add notes
This commit is contained in:
parent
26f3f0f0c6
commit
0e2de758b1
@ -117,39 +117,72 @@ DEFINE_DEVICE_TYPE(SEGA315_5124, sega315_5124_device, "sega315_5124", "Sega 315-
|
|||||||
DEFINE_DEVICE_TYPE(SEGA315_5246, sega315_5246_device, "sega315_5246", "Sega 315-5246 SMS2 VDP")
|
DEFINE_DEVICE_TYPE(SEGA315_5246, sega315_5246_device, "sega315_5246", "Sega 315-5246 SMS2 VDP")
|
||||||
DEFINE_DEVICE_TYPE(SEGA315_5377, sega315_5377_device, "sega315_5377", "Sega 315-5377 Gamegear VDP")
|
DEFINE_DEVICE_TYPE(SEGA315_5377, sega315_5377_device, "sega315_5377", "Sega 315-5377 Gamegear VDP")
|
||||||
|
|
||||||
|
// (reference for VDP colors : http://www.sega-16.com/forum/showthread.php?30530-SMS-VDP-output-levels)
|
||||||
void sega315_5124_device::sega315_5124_palette(palette_device &palette) const
|
void sega315_5124_device::sega315_5124_palette(palette_device &palette) const
|
||||||
{
|
{
|
||||||
|
static const u8 level[4] = {0,90,173,255};
|
||||||
for (int i = 0; i < 64; i++)
|
for (int i = 0; i < 64; i++)
|
||||||
{
|
{
|
||||||
const u8 r = i & 0x03;
|
const u8 r = i & 0x03;
|
||||||
const u8 g = (i & 0x0c) >> 2;
|
const u8 g = (i & 0x0c) >> 2;
|
||||||
const u8 b = (i & 0x30) >> 4;
|
const u8 b = (i & 0x30) >> 4;
|
||||||
palette.set_pen_color(i, pal2bit(r), pal2bit(g), pal2bit(b));
|
palette.set_pen_color(i, level[r], level[g], level[b]);
|
||||||
}
|
}
|
||||||
// sms and sg1000-mark3 uses a different palette for modes 0 to 3 - see http://www.smspower.org/Development/Palette
|
// sms and sg1000-mark3 uses a different palette for modes 0 to 3 - see http://www.smspower.org/Development/Palette
|
||||||
// TMS9918 palette
|
// TMS9918 palette
|
||||||
palette.set_pen_color(64+ 0, 0, 0, 0); // palette.set_pen_color(64+ 0, 0, 0, 0);
|
palette.set_pen_color(64+ 0, level[0], level[0], level[0]); // palette.set_pen_color(64+ 0, 0, 0, 0);
|
||||||
palette.set_pen_color(64+ 1, 0, 0, 0); // palette.set_pen_color(64+ 1, 0, 0, 0);
|
palette.set_pen_color(64+ 1, level[0], level[0], level[0]); // palette.set_pen_color(64+ 1, 0, 0, 0);
|
||||||
palette.set_pen_color(64+ 2, 0, 170, 0); // palette.set_pen_color(64+ 2, 33, 200, 66);
|
palette.set_pen_color(64+ 2, level[0], level[2], level[0]); // palette.set_pen_color(64+ 2, 33, 200, 66);
|
||||||
palette.set_pen_color(64+ 3, 0, 255, 0); // palette.set_pen_color(64+ 3, 94, 220, 120);
|
palette.set_pen_color(64+ 3, level[0], level[3], level[0]); // palette.set_pen_color(64+ 3, 94, 220, 120);
|
||||||
palette.set_pen_color(64+ 4, 0, 0, 85); // palette.set_pen_color(64+ 4, 84, 85, 237);
|
palette.set_pen_color(64+ 4, level[0], level[0], level[1]); // palette.set_pen_color(64+ 4, 84, 85, 237);
|
||||||
palette.set_pen_color(64+ 5, 0, 0, 255); // palette.set_pen_color(64+ 5, 125, 118, 252);
|
palette.set_pen_color(64+ 5, level[0], level[0], level[3]); // palette.set_pen_color(64+ 5, 125, 118, 252);
|
||||||
palette.set_pen_color(64+ 6, 85, 0, 0); // palette.set_pen_color(64+ 6, 212, 82, 77);
|
palette.set_pen_color(64+ 6, level[1], level[0], level[0]); // palette.set_pen_color(64+ 6, 212, 82, 77);
|
||||||
palette.set_pen_color(64+ 7, 0, 255, 255); // palette.set_pen_color(64+ 7, 66, 235, 245);
|
palette.set_pen_color(64+ 7, level[0], level[3], level[3]); // palette.set_pen_color(64+ 7, 66, 235, 245);
|
||||||
palette.set_pen_color(64+ 8, 170, 0, 0); // palette.set_pen_color(64+ 8, 252, 85, 84);
|
palette.set_pen_color(64+ 8, level[2], level[0], level[0]); // palette.set_pen_color(64+ 8, 252, 85, 84);
|
||||||
palette.set_pen_color(64+ 9, 255, 0, 0); // palette.set_pen_color(64+ 9, 255, 121, 120);
|
palette.set_pen_color(64+ 9, level[3], level[0], level[0]); // palette.set_pen_color(64+ 9, 255, 121, 120);
|
||||||
palette.set_pen_color(64+10, 85, 85, 0); // palette.set_pen_color(64+10, 212, 193, 84);
|
palette.set_pen_color(64+10, level[1], level[1], level[0]); // palette.set_pen_color(64+10, 212, 193, 84);
|
||||||
palette.set_pen_color(64+11, 255, 255, 0); // palette.set_pen_color(64+11, 230, 206, 128);
|
palette.set_pen_color(64+11, level[3], level[3], level[0]); // palette.set_pen_color(64+11, 230, 206, 128);
|
||||||
palette.set_pen_color(64+12, 0, 85, 0); // palette.set_pen_color(64+12, 33, 176, 59);
|
palette.set_pen_color(64+12, level[0], level[1], level[0]); // palette.set_pen_color(64+12, 33, 176, 59);
|
||||||
palette.set_pen_color(64+13, 255, 0, 255); // palette.set_pen_color(64+13, 201, 91, 186);
|
palette.set_pen_color(64+13, level[3], level[0], level[3]); // palette.set_pen_color(64+13, 201, 91, 186);
|
||||||
palette.set_pen_color(64+14, 85, 85, 85); // palette.set_pen_color(64+14, 204, 204, 204);
|
palette.set_pen_color(64+14, level[1], level[1], level[1]); // palette.set_pen_color(64+14, 204, 204, 204);
|
||||||
palette.set_pen_color(64+15, 255, 255, 255); // palette.set_pen_color(64+15, 255, 255, 255);
|
palette.set_pen_color(64+15, level[3], level[3], level[3]); // palette.set_pen_color(64+15, 255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sega315_5246_device::sega315_5246_palette(palette_device &palette) const
|
||||||
|
{
|
||||||
|
// bit different output level compare to 315_5124
|
||||||
|
static const u8 level[4] = {0,89,174,255};
|
||||||
|
for (int i = 0; i < 64; i++)
|
||||||
|
{
|
||||||
|
const u8 r = i & 0x03;
|
||||||
|
const u8 g = (i & 0x0c) >> 2;
|
||||||
|
const u8 b = (i & 0x30) >> 4;
|
||||||
|
palette.set_pen_color(i, level[r], level[g], level[b]);
|
||||||
|
}
|
||||||
|
// TMS9918 palette (see sega315_5124_palette)
|
||||||
|
palette.set_pen_color(64+ 0, level[0], level[0], level[0]); // palette.set_pen_color(64+ 0, 0, 0, 0);
|
||||||
|
palette.set_pen_color(64+ 1, level[0], level[0], level[0]); // palette.set_pen_color(64+ 1, 0, 0, 0);
|
||||||
|
palette.set_pen_color(64+ 2, level[0], level[2], level[0]); // palette.set_pen_color(64+ 2, 33, 200, 66);
|
||||||
|
palette.set_pen_color(64+ 3, level[0], level[3], level[0]); // palette.set_pen_color(64+ 3, 94, 220, 120);
|
||||||
|
palette.set_pen_color(64+ 4, level[0], level[0], level[1]); // palette.set_pen_color(64+ 4, 84, 85, 237);
|
||||||
|
palette.set_pen_color(64+ 5, level[0], level[0], level[3]); // palette.set_pen_color(64+ 5, 125, 118, 252);
|
||||||
|
palette.set_pen_color(64+ 6, level[1], level[0], level[0]); // palette.set_pen_color(64+ 6, 212, 82, 77);
|
||||||
|
palette.set_pen_color(64+ 7, level[0], level[3], level[3]); // palette.set_pen_color(64+ 7, 66, 235, 245);
|
||||||
|
palette.set_pen_color(64+ 8, level[2], level[0], level[0]); // palette.set_pen_color(64+ 8, 252, 85, 84);
|
||||||
|
palette.set_pen_color(64+ 9, level[3], level[0], level[0]); // palette.set_pen_color(64+ 9, 255, 121, 120);
|
||||||
|
palette.set_pen_color(64+10, level[1], level[1], level[0]); // palette.set_pen_color(64+10, 212, 193, 84);
|
||||||
|
palette.set_pen_color(64+11, level[3], level[3], level[0]); // palette.set_pen_color(64+11, 230, 206, 128);
|
||||||
|
palette.set_pen_color(64+12, level[0], level[1], level[0]); // palette.set_pen_color(64+12, 33, 176, 59);
|
||||||
|
palette.set_pen_color(64+13, level[3], level[0], level[3]); // palette.set_pen_color(64+13, 201, 91, 186);
|
||||||
|
palette.set_pen_color(64+14, level[1], level[1], level[1]); // palette.set_pen_color(64+14, 204, 204, 204);
|
||||||
|
palette.set_pen_color(64+15, level[3], level[3], level[3]); // palette.set_pen_color(64+15, 255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void sega315_5377_device::sega315_5377_palette(palette_device &palette) const
|
void sega315_5377_device::sega315_5377_palette(palette_device &palette) const
|
||||||
{
|
{
|
||||||
|
// TODO : linear? measure this
|
||||||
for (int i = 0; i < 4096; i++)
|
for (int i = 0; i < 4096; i++)
|
||||||
{
|
{
|
||||||
const u8 r = i & 0x000f;
|
const u8 r = i & 0x000f;
|
||||||
@ -173,7 +206,7 @@ void sega315_5313_mode4_device::sega315_5313_palette(palette_device &palette) co
|
|||||||
palette.set_pen_color(i + (512 * 1), level[r], level[g], level[b]); // shadow
|
palette.set_pen_color(i + (512 * 1), level[r], level[g], level[b]); // shadow
|
||||||
palette.set_pen_color(i + (512 * 2), level[7 + r], level[7 + g], level[7 + b]); // hilight
|
palette.set_pen_color(i + (512 * 2), level[7 + r], level[7 + g], level[7 + b]); // hilight
|
||||||
}
|
}
|
||||||
// seperated SMS compatible mode color (reference : http://www.sega-16.com/forum/showthread.php?30530-SMS-VDP-output-levels)
|
// seperated SMS compatible mode color
|
||||||
static const u8 sms_level[4] = {0,99,162,255};
|
static const u8 sms_level[4] = {0,99,162,255};
|
||||||
for (int i = 0; i < 64; i++)
|
for (int i = 0; i < 64; i++)
|
||||||
{
|
{
|
||||||
@ -2019,6 +2052,12 @@ void sega315_5124_device::device_add_mconfig(machine_config &config)
|
|||||||
SEGAPSG(config, m_snsnd, DERIVED_CLOCK(1, 3)).add_route(ALL_OUTPUTS, *this, 1.0, AUTO_ALLOC_INPUT, 0);
|
SEGAPSG(config, m_snsnd, DERIVED_CLOCK(1, 3)).add_route(ALL_OUTPUTS, *this, 1.0, AUTO_ALLOC_INPUT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sega315_5246_device::device_add_mconfig(machine_config &config)
|
||||||
|
{
|
||||||
|
sega315_5124_device::device_add_mconfig(config);
|
||||||
|
m_palette_lut->set_init(FUNC(sega315_5246_device::sega315_5246_palette));
|
||||||
|
}
|
||||||
|
|
||||||
void sega315_5377_device::device_reset()
|
void sega315_5377_device::device_reset()
|
||||||
{
|
{
|
||||||
sega315_5124_device::device_reset();
|
sega315_5124_device::device_reset();
|
||||||
|
@ -217,10 +217,15 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
sega315_5246_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 cram_size, u8 palette_offset, u8 reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const u8 *line_timing);
|
sega315_5246_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 cram_size, u8 palette_offset, u8 reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const u8 *line_timing);
|
||||||
|
|
||||||
|
virtual void device_add_mconfig(machine_config &config) override;
|
||||||
|
|
||||||
virtual u16 name_table_row_mode4(int row) override;
|
virtual u16 name_table_row_mode4(int row) override;
|
||||||
virtual u16 sprite_attributes_addr_mode4(u16 base) override;
|
virtual u16 sprite_attributes_addr_mode4(u16 base) override;
|
||||||
virtual u8 sprite_tile_mask_mode4(u8 tile_number) override;
|
virtual u8 sprite_tile_mask_mode4(u8 tile_number) override;
|
||||||
virtual void select_extended_res_mode4(bool M1, bool M2, bool M3) override;
|
virtual void select_extended_res_mode4(bool M1, bool M2, bool M3) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void sega315_5246_palette(palette_device &palette) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user