Fixed crash of sf2m1 in debug build (memory array overrun)

This commit is contained in:
Robbbert 2013-04-11 11:58:34 +00:00
parent d9bbaad820
commit 66a9dc7676

View File

@ -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);
} }
} }