mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
fix cybrcycc dspram error
(the video/namcos22.c change is just code relocating)
This commit is contained in:
parent
66a8328a1f
commit
57bc88f02c
@ -1558,7 +1558,7 @@ WRITE32_MEMBER(namcos22_state::namcos22s_nvmem_w)
|
|||||||
|
|
||||||
READ32_MEMBER(namcos22_state::namcos22_dspram_r)
|
READ32_MEMBER(namcos22_state::namcos22_dspram_r)
|
||||||
{
|
{
|
||||||
return signed24(m_polygonram[offset]); // only d0-23 are connected
|
return m_polygonram[offset] | 0xff000000; // only d0-23 are connected
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(namcos22_state::namcos22_dspram_w)
|
WRITE32_MEMBER(namcos22_state::namcos22_dspram_w)
|
||||||
|
@ -1436,91 +1436,6 @@ void namcos22_state::draw_polygons(bitmap_rgb32 &bitmap)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************************************/
|
|
||||||
|
|
||||||
WRITE32_MEMBER(namcos22_state::namcos22s_czram_w)
|
|
||||||
{
|
|
||||||
int bank = nthword(m_czattr, 0xa/2) & 3;
|
|
||||||
UINT32 prev = (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1];
|
|
||||||
UINT32 temp = prev;
|
|
||||||
COMBINE_DATA(&temp);
|
|
||||||
data = temp;
|
|
||||||
m_banked_czram[bank][offset * 2] = data >> 16;
|
|
||||||
m_banked_czram[bank][offset * 2 + 1] = data & 0xffff;
|
|
||||||
m_cz_was_written[bank] |= (prev ^ data);
|
|
||||||
}
|
|
||||||
|
|
||||||
READ32_MEMBER(namcos22_state::namcos22s_czram_r)
|
|
||||||
{
|
|
||||||
int bank = nthword(m_czattr, 0xa/2) & 3;
|
|
||||||
return (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
void namcos22_state::recalc_czram()
|
|
||||||
{
|
|
||||||
for (int table = 0; table < 4; table++)
|
|
||||||
{
|
|
||||||
// as documented above, ss22 czram is 'just' a big compare table
|
|
||||||
// this is very slow when emulating, so let's recalculate it to a simpler lookup table
|
|
||||||
if (m_cz_was_written[table])
|
|
||||||
{
|
|
||||||
int small_val = 0x2000;
|
|
||||||
int small_offset = 0;
|
|
||||||
int large_val = 0;
|
|
||||||
int large_offset = 0;
|
|
||||||
int prev = 0x2000;
|
|
||||||
|
|
||||||
for (int i = 0; i < 0x100; i++)
|
|
||||||
{
|
|
||||||
int val = m_banked_czram[table][i];
|
|
||||||
|
|
||||||
// discard if larger than 1fff
|
|
||||||
if (val > 0x1fff) val = prev;
|
|
||||||
if (prev > 0x1fff)
|
|
||||||
{
|
|
||||||
prev = val;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int start = prev;
|
|
||||||
int end = val;
|
|
||||||
if (start > end)
|
|
||||||
{
|
|
||||||
start = val;
|
|
||||||
end = prev;
|
|
||||||
}
|
|
||||||
prev = val;
|
|
||||||
|
|
||||||
// fill range
|
|
||||||
for (int j = start; j < end; j++)
|
|
||||||
m_recalc_czram[table][j] = i;
|
|
||||||
|
|
||||||
// remember largest/smallest for later
|
|
||||||
if (val < small_val)
|
|
||||||
{
|
|
||||||
small_val = val;
|
|
||||||
small_offset = i;
|
|
||||||
}
|
|
||||||
if (val > large_val)
|
|
||||||
{
|
|
||||||
large_val = val;
|
|
||||||
large_offset = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// fill possible leftover ranges
|
|
||||||
for (int j = 0; j < small_val; j++)
|
|
||||||
m_recalc_czram[table][j] = small_offset;
|
|
||||||
for (int j = large_val; j < 0x2000; j++)
|
|
||||||
m_recalc_czram[table][j] = large_offset;
|
|
||||||
|
|
||||||
m_cz_was_written[table] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
void namcos22_state::draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT32 *src, const UINT32 *attr, int num_sprites, int deltax, int deltay, int y_lowres)
|
void namcos22_state::draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT32 *src, const UINT32 *attr, int num_sprites, int deltax, int deltay, int y_lowres)
|
||||||
@ -2137,6 +2052,88 @@ void namcos22_state::update_palette()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE32_MEMBER(namcos22_state::namcos22s_czram_w)
|
||||||
|
{
|
||||||
|
int bank = nthword(m_czattr, 0xa/2) & 3;
|
||||||
|
UINT32 prev = (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1];
|
||||||
|
UINT32 temp = prev;
|
||||||
|
COMBINE_DATA(&temp);
|
||||||
|
data = temp;
|
||||||
|
m_banked_czram[bank][offset * 2] = data >> 16;
|
||||||
|
m_banked_czram[bank][offset * 2 + 1] = data & 0xffff;
|
||||||
|
m_cz_was_written[bank] |= (prev ^ data);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ32_MEMBER(namcos22_state::namcos22s_czram_r)
|
||||||
|
{
|
||||||
|
int bank = nthword(m_czattr, 0xa/2) & 3;
|
||||||
|
return (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
void namcos22_state::recalc_czram()
|
||||||
|
{
|
||||||
|
for (int table = 0; table < 4; table++)
|
||||||
|
{
|
||||||
|
// as documented above, ss22 czram is 'just' a big compare table
|
||||||
|
// this is very slow when emulating, so let's recalculate it to a simpler lookup table
|
||||||
|
if (m_cz_was_written[table])
|
||||||
|
{
|
||||||
|
int small_val = 0x2000;
|
||||||
|
int small_offset = 0;
|
||||||
|
int large_val = 0;
|
||||||
|
int large_offset = 0;
|
||||||
|
int prev = 0x2000;
|
||||||
|
|
||||||
|
for (int i = 0; i < 0x100; i++)
|
||||||
|
{
|
||||||
|
int val = m_banked_czram[table][i];
|
||||||
|
|
||||||
|
// discard if larger than 1fff
|
||||||
|
if (val > 0x1fff) val = prev;
|
||||||
|
if (prev > 0x1fff)
|
||||||
|
{
|
||||||
|
prev = val;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int start = prev;
|
||||||
|
int end = val;
|
||||||
|
if (start > end)
|
||||||
|
{
|
||||||
|
start = val;
|
||||||
|
end = prev;
|
||||||
|
}
|
||||||
|
prev = val;
|
||||||
|
|
||||||
|
// fill range
|
||||||
|
for (int j = start; j < end; j++)
|
||||||
|
m_recalc_czram[table][j] = i;
|
||||||
|
|
||||||
|
// remember largest/smallest for later
|
||||||
|
if (val < small_val)
|
||||||
|
{
|
||||||
|
small_val = val;
|
||||||
|
small_offset = i;
|
||||||
|
}
|
||||||
|
if (val > large_val)
|
||||||
|
{
|
||||||
|
large_val = val;
|
||||||
|
large_offset = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fill possible leftover ranges
|
||||||
|
for (int j = 0; j < small_val; j++)
|
||||||
|
m_recalc_czram[table][j] = small_offset;
|
||||||
|
for (int j = large_val; j < 0x2000; j++)
|
||||||
|
m_recalc_czram[table][j] = large_offset;
|
||||||
|
|
||||||
|
m_cz_was_written[table] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void namcos22_state::update_mixer()
|
void namcos22_state::update_mixer()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -2268,6 +2265,9 @@ void namcos22_state::update_mixer()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************************************/
|
||||||
|
|
||||||
UINT32 namcos22_state::screen_update_namcos22s(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
UINT32 namcos22_state::screen_update_namcos22s(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
update_mixer();
|
update_mixer();
|
||||||
|
Loading…
Reference in New Issue
Block a user