mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
spg renderer / gpl16250 - remove some palette bank hacks (nw)
This commit is contained in:
parent
3708071150
commit
2eea8ac568
@ -333,6 +333,12 @@ uint32_t gcm394_base_video_device::screen_update(screen_device &screen, bitmap_r
|
||||
|
||||
// jak_s500 briely sets pen 0 of the layer to magenta, but then ends up erasing it
|
||||
|
||||
const uint32_t page0_addr = (m_page0_addr_msb << 16) | m_page0_addr_lsb;
|
||||
const uint32_t page1_addr = (m_page1_addr_msb << 16) | m_page1_addr_lsb;
|
||||
const uint32_t page2_addr = (m_page2_addr_msb << 16) | m_page2_addr_lsb;
|
||||
const uint32_t page3_addr = (m_page3_addr_msb << 16) | m_page3_addr_lsb;
|
||||
|
||||
|
||||
if (0)
|
||||
{
|
||||
uint16_t attr0 = m_tmap0_regs[0];
|
||||
@ -345,24 +351,24 @@ uint32_t gcm394_base_video_device::screen_update(screen_device &screen, bitmap_r
|
||||
uint16_t ctrl3 = m_tmap3_regs[1];
|
||||
|
||||
popmessage(
|
||||
"p0ctrl u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d\n"
|
||||
"p1ctrl u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d\n"
|
||||
"p2ctrl u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d\n"
|
||||
"p3ctrl u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d\n"
|
||||
"p0ct u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d gfxadr: %08x\n"
|
||||
"p1ct u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d gfxadr: %08x\n"
|
||||
"p2ct u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d gfxadr: %08x\n"
|
||||
"p3ct u:%02x Bl:%d HC:%d Ycmp:%d Hcmp:%d RS:%d E:%d WP:%d Rg:%d Bm:%d gfxadr: %08x\n"
|
||||
"p0attr u:%01x Z:%d P:%d V:%d H:%d FY:%d FX:%d D:%d\n"
|
||||
"p1attr u:%01x Z:%d P:%d V:%d H:%d FY:%d FX:%d D:%d\n"
|
||||
"p2attr u:%01x Z:%d P:%d V:%d H:%d FY:%d FX:%d D:%d\n"
|
||||
"p3attr u:%01x Z:%d P:%d V:%d H:%d FY:%d FX:%d D:%d\n"
|
||||
"palbank %04x 707e: %04x 707f: %04x\n",
|
||||
(ctrl0 & 0xfe00) >> 9, BIT(ctrl0, 8), BIT(ctrl0, 7), BIT(ctrl0, 6), BIT(ctrl0, 5), BIT(ctrl0, 4), BIT(ctrl0, 3), BIT(ctrl0, 2), BIT(ctrl0, 1), BIT(ctrl0, 0),
|
||||
(ctrl1 & 0xfe00) >> 9, BIT(ctrl1, 8), BIT(ctrl1, 7), BIT(ctrl1, 6), BIT(ctrl1, 5), BIT(ctrl1, 4), BIT(ctrl1, 3), BIT(ctrl1, 2), BIT(ctrl1, 1), BIT(ctrl1, 0),
|
||||
(ctrl2 & 0xfe00) >> 9, BIT(ctrl2, 8), BIT(ctrl2, 7), BIT(ctrl2, 6), BIT(ctrl2, 5), BIT(ctrl2, 4), BIT(ctrl2, 3), BIT(ctrl2, 2), BIT(ctrl2, 1), BIT(ctrl2, 0),
|
||||
(ctrl3 & 0xfe00) >> 9, BIT(ctrl3, 8), BIT(ctrl3, 7), BIT(ctrl3, 6), BIT(ctrl3, 5), BIT(ctrl3, 4), BIT(ctrl3, 3), BIT(ctrl3, 2), BIT(ctrl3, 1), BIT(ctrl3, 0),
|
||||
"palbank %04x 707e: %04x 707f: %04x tvc703c: %04x spr7042: %04x\n",
|
||||
(ctrl0 & 0xfe00) >> 9, BIT(ctrl0, 8), BIT(ctrl0, 7), BIT(ctrl0, 6), BIT(ctrl0, 5), BIT(ctrl0, 4), BIT(ctrl0, 3), BIT(ctrl0, 2), BIT(ctrl0, 1), BIT(ctrl0, 0), page0_addr,
|
||||
(ctrl1 & 0xfe00) >> 9, BIT(ctrl1, 8), BIT(ctrl1, 7), BIT(ctrl1, 6), BIT(ctrl1, 5), BIT(ctrl1, 4), BIT(ctrl1, 3), BIT(ctrl1, 2), BIT(ctrl1, 1), BIT(ctrl1, 0), page1_addr,
|
||||
(ctrl2 & 0xfe00) >> 9, BIT(ctrl2, 8), BIT(ctrl2, 7), BIT(ctrl2, 6), BIT(ctrl2, 5), BIT(ctrl2, 4), BIT(ctrl2, 3), BIT(ctrl2, 2), BIT(ctrl2, 1), BIT(ctrl2, 0), page2_addr,
|
||||
(ctrl3 & 0xfe00) >> 9, BIT(ctrl3, 8), BIT(ctrl3, 7), BIT(ctrl3, 6), BIT(ctrl3, 5), BIT(ctrl3, 4), BIT(ctrl3, 3), BIT(ctrl3, 2), BIT(ctrl3, 1), BIT(ctrl3, 0), page3_addr,
|
||||
(attr0 & 0xc000) >> 14, (attr0 >> 12) & 3, (attr0 >> 8) & 15, 8 << ((attr0 >> 6) & 3), 8 << ((attr0 >> 4) & 3), BIT(attr0, 3), BIT(attr0, 2), 2 * ((attr0 & 3) + 1),
|
||||
(attr1 & 0xc000) >> 14, (attr1 >> 12) & 3, (attr1 >> 8) & 15, 8 << ((attr1 >> 6) & 3), 8 << ((attr1 >> 4) & 3), BIT(attr1, 3), BIT(attr1, 2), 2 * ((attr1 & 3) + 1),
|
||||
(attr2 & 0xc000) >> 14, (attr2 >> 12) & 3, (attr2 >> 8) & 15, 8 << ((attr2 >> 6) & 3), 8 << ((attr2 >> 4) & 3), BIT(attr2, 3), BIT(attr2, 2), 2 * ((attr2 & 3) + 1),
|
||||
(attr3 & 0xc000) >> 14, (attr3 >> 12) & 3, (attr3 >> 8) & 15, 8 << ((attr3 >> 6) & 3), 8 << ((attr3 >> 4) & 3), BIT(attr3, 3), BIT(attr3, 2), 2 * ((attr3 & 3) + 1),
|
||||
m_703a_palettebank, m_707e_spritebank, m_707f
|
||||
m_703a_palettebank, m_707e_spritebank, m_707f, m_703c_tvcontrol1, m_7042_sprite
|
||||
);
|
||||
}
|
||||
|
||||
@ -382,10 +388,6 @@ uint32_t gcm394_base_video_device::screen_update(screen_device &screen, bitmap_r
|
||||
|
||||
address_space &mem = m_cpu->space(AS_PROGRAM);
|
||||
|
||||
const uint32_t page0_addr = (m_page0_addr_msb << 16) | m_page0_addr_lsb;
|
||||
const uint32_t page1_addr = (m_page1_addr_msb << 16) | m_page1_addr_lsb;
|
||||
const uint32_t page2_addr = (m_page2_addr_msb << 16) | m_page2_addr_lsb;
|
||||
const uint32_t page3_addr = (m_page3_addr_msb << 16) | m_page3_addr_lsb;
|
||||
|
||||
const uint32_t sprites_addr = (m_sprite_702d_gfxbase_msb << 16) | m_sprite_7022_gfxbase_lsb;
|
||||
|
||||
|
@ -179,6 +179,12 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang
|
||||
|
||||
linebase = linebase | (palette << 16);
|
||||
|
||||
int upperpalselect = 0;
|
||||
if (has_extended_tilemaps && (tilegfxdata_addr & 0x80000000))
|
||||
upperpalselect = 1;
|
||||
|
||||
tilegfxdata_addr &= 0x7ffffff;
|
||||
|
||||
// this logic works for jak_s500 and the test modes to get the correct base, doesn't seem to work for jak_car2 ingame, maybe data is copied to wrong place?
|
||||
int gfxbase = (tilegfxdata_addr&0x7ffffff) + (linebase&0x7ffffff);
|
||||
|
||||
@ -205,6 +211,9 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang
|
||||
|
||||
pal = (pix & 0xff) | 0x100;
|
||||
|
||||
if (upperpalselect)
|
||||
pal |= 0x200;
|
||||
|
||||
if (xx >= 0 && xx <= cliprect.max_x)
|
||||
{
|
||||
uint16_t rgb = paletteram[pal];
|
||||
@ -216,7 +225,10 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang
|
||||
}
|
||||
|
||||
xx = (i * 2)+1;
|
||||
pal = (pix >> 8) + 0x100;
|
||||
pal = (pix >> 8) | 0x100;
|
||||
|
||||
if (upperpalselect)
|
||||
pal |= 0x200;
|
||||
|
||||
if (xx >= 0 && xx <= cliprect.max_x)
|
||||
{
|
||||
@ -465,6 +477,13 @@ void spg_renderer_device::draw_page(bool read_from_csspace, bool has_extended_ti
|
||||
|
||||
const int upperscrollbits = (realxscroll >> (tile_width + 3));
|
||||
const int endpos = (screenwidth + tile_w) / tile_w;
|
||||
|
||||
int upperpalselect = 0;
|
||||
if (has_extended_tilemaps && (tilegfxdata_addr & 0x80000000))
|
||||
upperpalselect = 1;
|
||||
|
||||
tilegfxdata_addr &= 0x7ffffff;
|
||||
|
||||
for (uint32_t x0 = 0; x0 < endpos; x0++)
|
||||
{
|
||||
spg_renderer_device::blend_enable_t blend;
|
||||
@ -525,46 +544,8 @@ void spg_renderer_device::draw_page(bool read_from_csspace, bool has_extended_ti
|
||||
palette_offset = (tileattr & 0x0f00) >> 4;
|
||||
// got tile info
|
||||
|
||||
if (1)
|
||||
{
|
||||
// HACKS
|
||||
// There must be a select bit for the tilemap palettes somewhere, but where?!
|
||||
// the different games in paccon also expect a variety of different configs here, maybe a good place to look
|
||||
if (palbank & 1) // this actually seems to be the sprite palette bank enable, but for myac220 / tkmag220 (where everything is from a single palette) it gives us an easy way to ignore the logic below
|
||||
{
|
||||
if (which == 0) // tilemap 0
|
||||
{
|
||||
if (ctrl & 0x0002) // RegSet:1
|
||||
{
|
||||
// smartfp has a conflict between the bootlogos and the first screen, it's in regset mode, no obvious difference in registers but needs palette from different places?
|
||||
// not even m_video_regs_7f changes here, which makes the m_video_regs_7f case specific hacks for jak_s500 below very unlikely to actually be related
|
||||
if ((bpp + 1) * 2 == 4)
|
||||
if (use_alt_tile_addressing == true)
|
||||
palette_offset |= 0x200;
|
||||
}
|
||||
}
|
||||
|
||||
if (which == 1)
|
||||
{
|
||||
// can't do this for jak_s500 logos
|
||||
// jak_s500 also uses this tilemap in both 4 and 6bpp modes expecting the same palette base, so the hack used for smartfp on tilemap 0 is not applicable here
|
||||
|
||||
// m_video_regs_7f != 0x2d3 for jak_S500 main menu
|
||||
if ((m_video_regs_7f != 0x53) && (m_video_regs_7f != 0x63) && (m_video_regs_7f != 0x2d3))
|
||||
palette_offset |= 0x200;
|
||||
}
|
||||
|
||||
// jak_car2 screen transitions use layers 2 and 3 the same way, alternating each frame
|
||||
if (which == 2)
|
||||
{
|
||||
// jak_s500 title screen + loading screen before race
|
||||
if ((m_video_regs_7f == 0x2d3) || (m_video_regs_7f == 0x2db))
|
||||
palette_offset |= 0x200;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (upperpalselect)
|
||||
palette_offset |= 0x200;
|
||||
|
||||
palette_offset >>= nc_bpp;
|
||||
palette_offset <<= nc_bpp;
|
||||
|
Loading…
Reference in New Issue
Block a user