mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
sslam,drtomy: fix spriteram oob access
This commit is contained in:
parent
e8de74ea05
commit
d9af94b4de
@ -99,19 +99,19 @@ TILE_GET_INFO_MEMBER(drtomy_state::get_tile_info_bg)
|
||||
|
||||
void drtomy_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
int i, x, y, ex, ey;
|
||||
gfx_element *gfx = m_gfxdecode->gfx(0);
|
||||
|
||||
static const int x_offset[2] = {0x0, 0x2};
|
||||
static const int y_offset[2] = {0x0, 0x1};
|
||||
|
||||
for (i = 3; i < 0x1000 / 2; i += 4)
|
||||
for (int i = 3; i < m_spriteram.length() - 3; i += 4)
|
||||
{
|
||||
int sx = m_spriteram[i + 2] & 0x01ff;
|
||||
int sy = (240 - (m_spriteram[i] & 0x00ff)) & 0x00ff;
|
||||
int number = m_spriteram[i + 3];
|
||||
int color = (m_spriteram[i + 2] & 0x1e00) >> 9;
|
||||
int attr = (m_spriteram[i] & 0xfe00) >> 9;
|
||||
const uint16_t *src = &m_spriteram[i];
|
||||
int sx = src[2] & 0x01ff;
|
||||
int sy = (240 - (src[0] & 0x00ff)) & 0x00ff;
|
||||
int number = src[3];
|
||||
int color = (src[2] & 0x1e00) >> 9;
|
||||
int attr = (src[0] & 0xfe00) >> 9;
|
||||
|
||||
int xflip = attr & 0x20;
|
||||
int yflip = attr & 0x40;
|
||||
@ -122,15 +122,15 @@ void drtomy_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
else
|
||||
{
|
||||
spr_size = 2;
|
||||
number &= (~3);
|
||||
number &= ~3;
|
||||
}
|
||||
|
||||
for (y = 0; y < spr_size; y++)
|
||||
for (int y = 0; y < spr_size; y++)
|
||||
{
|
||||
for (x = 0; x < spr_size; x++)
|
||||
for (int x = 0; x < spr_size; x++)
|
||||
{
|
||||
ex = xflip ? (spr_size - 1 - x) : x;
|
||||
ey = yflip ? (spr_size - 1 - y) : y;
|
||||
int ex = xflip ? (spr_size - 1 - x) : x;
|
||||
int ey = yflip ? (spr_size - 1 - y) : y;
|
||||
|
||||
gfx->transpen(bitmap,cliprect,number + x_offset[ex] + y_offset[ey],
|
||||
color,xflip,yflip,
|
||||
|
@ -9,23 +9,18 @@
|
||||
void sslam_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
gfx_element *gfx = m_gfxdecode->gfx(0);
|
||||
uint16_t *source = m_spriteram;
|
||||
uint16_t *finish = source + 0x1000/2;
|
||||
|
||||
source += 3; // strange
|
||||
|
||||
while( source<finish )
|
||||
for (int i = 3; i < m_spriteram.length() - 3; i += 4)
|
||||
{
|
||||
int xpos, ypos, number, flipx, colr, eightbyeight;
|
||||
const uint16_t *src = &m_spriteram[i];
|
||||
if (src[0] & 0x2000) break;
|
||||
|
||||
if (source[0] & 0x2000) break;
|
||||
|
||||
xpos = source[2] & 0x1ff;
|
||||
ypos = source[0] & 0x01ff;
|
||||
colr = (source[2] & 0xf000) >> 12;
|
||||
eightbyeight = source[0] & 0x1000;
|
||||
flipx = source[0] & 0x4000;
|
||||
number = source[3];
|
||||
int xpos = src[2] & 0x1ff;
|
||||
int ypos = src[0] & 0x01ff;
|
||||
int colr = (src[2] & 0xf000) >> 12;
|
||||
int eightbyeight = src[0] & 0x1000;
|
||||
int flipx = src[0] & 0x4000;
|
||||
int number = src[3];
|
||||
|
||||
xpos -=16; xpos -=7; xpos += m_sprites_x_offset;
|
||||
ypos = 0xff - ypos;
|
||||
@ -65,10 +60,7 @@ void sslam_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
gfx->transpen(bitmap,cliprect,number,colr,0,0,xpos,ypos,0);
|
||||
}
|
||||
}
|
||||
|
||||
source += 4;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user