mirror of
https://github.com/holub/mame
synced 2025-05-19 20:29:09 +03:00
Fixed crash of sf2m1 in debug build (memory array overrun)
This commit is contained in:
parent
d9bbaad820
commit
66a9dc7676
@ -499,11 +499,7 @@ void cps_state::fcrash_render_sprites( bitmap_ind16 &bitmap, const rectangle &cl
|
|||||||
int num_sprites = machine().gfx[2]->elements();
|
int num_sprites = machine().gfx[2]->elements();
|
||||||
int last_sprite_offset = 0x1ffc;
|
int last_sprite_offset = 0x1ffc;
|
||||||
UINT16 *sprite_ram = m_gfxram;
|
UINT16 *sprite_ram = m_gfxram;
|
||||||
|
UINT16 tileno,flipx,flipy,colour,xpos,ypos;
|
||||||
// sprite base registers need hooking up properly.. on fcrash it is NOT cps1_cps_a_regs[0]
|
|
||||||
// on kodb, it might still be, unless that's just a leftover and it writes somewhere else too
|
|
||||||
// if (m_cps_a_regs[0] & 0x00ff) base = 0x10c8/2;
|
|
||||||
// printf("cps1_cps_a_regs %04x\n", m_cps_a_regs[0]);
|
|
||||||
|
|
||||||
/* if we have separate sprite ram, use it */
|
/* if we have separate sprite ram, use it */
|
||||||
if (m_bootleg_sprite_ram) sprite_ram = m_bootleg_sprite_ram;
|
if (m_bootleg_sprite_ram) sprite_ram = m_bootleg_sprite_ram;
|
||||||
@ -512,25 +508,23 @@ void cps_state::fcrash_render_sprites( bitmap_ind16 &bitmap, const rectangle &cl
|
|||||||
for (pos = 0x1ffc - base; pos >= 0x0000; pos -= 4)
|
for (pos = 0x1ffc - base; pos >= 0x0000; pos -= 4)
|
||||||
if (sprite_ram[base + pos - 1] == m_sprite_list_end_marker) last_sprite_offset = pos;
|
if (sprite_ram[base + pos - 1] == m_sprite_list_end_marker) last_sprite_offset = pos;
|
||||||
|
|
||||||
for (pos = last_sprite_offset; pos >= 0x0000; pos -= 4)
|
/* If we are using bootleg sprite ram, the index must be less than 0x2000 */
|
||||||
|
if (((base + last_sprite_offset) < 0x2000) || (!m_bootleg_sprite_ram))
|
||||||
{
|
{
|
||||||
int tileno;
|
for (pos = last_sprite_offset; pos >= 0x0000; pos -= 4)
|
||||||
int xpos;
|
{
|
||||||
int ypos;
|
tileno = sprite_ram[base + pos];
|
||||||
int flipx, flipy;
|
if (tileno >= num_sprites) continue; /* don't render anything outside our tiles */
|
||||||
int colour;
|
xpos = sprite_ram[base + pos + 2] & 0x1ff;
|
||||||
|
ypos = sprite_ram[base + pos - 1] & 0x1ff;
|
||||||
|
flipx = sprite_ram[base + pos + 1] & 0x20;
|
||||||
|
flipy = sprite_ram[base + pos + 1] & 0x40;
|
||||||
|
colour = sprite_ram[base + pos + 1] & 0x1f;
|
||||||
|
ypos = 256 - ypos - 16;
|
||||||
|
xpos = xpos + m_sprite_x_offset + 49;
|
||||||
|
|
||||||
tileno = sprite_ram[base + pos];
|
pdrawgfx_transpen(bitmap, cliprect, machine().gfx[2], tileno, colour, flipx, flipy, xpos, ypos, machine().priority_bitmap, 0x02, 15);
|
||||||
if (tileno >= num_sprites) continue; /* don't render anything outside our tiles */
|
}
|
||||||
xpos = sprite_ram[base + pos + 2] & 0x1ff;
|
|
||||||
ypos = sprite_ram[base + pos - 1] & 0x1ff;
|
|
||||||
flipx = sprite_ram[base + pos + 1] & 0x20;
|
|
||||||
flipy = sprite_ram[base + pos + 1] & 0x40;
|
|
||||||
colour = sprite_ram[base + pos + 1] & 0x1f;
|
|
||||||
ypos = 256 - ypos;
|
|
||||||
xpos += m_sprite_x_offset;
|
|
||||||
|
|
||||||
pdrawgfx_transpen(bitmap, cliprect, machine().gfx[2], tileno, colour, flipx, flipy, xpos + 49, ypos - 16, machine().priority_bitmap, 0x02, 15);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user