mirror of
https://github.com/holub/mame
synced 2025-04-29 11:30:28 +03:00
fm77av: greatly simplified ALU line drawing. Might even be a bit faster, too. (no whatsnew)
This commit is contained in:
parent
98eac17316
commit
19e5e53a28
@ -517,110 +517,42 @@ void fm7_state::fm77av_line_draw()
|
||||
int x2 = m_alu.x1;
|
||||
int y1 = m_alu.y0;
|
||||
int y2 = m_alu.y1;
|
||||
int horiz,vert;
|
||||
int dirx,diry;
|
||||
int rep;
|
||||
|
||||
int dx = abs(x2 - x1);
|
||||
int dy = abs(y2 - y1);
|
||||
int stepx, stepy;
|
||||
int err,err2;
|
||||
int byte_count = 0;
|
||||
UINT16 old_addr = 0xffff;
|
||||
UINT16 addr;
|
||||
|
||||
m_alu.busy = 1;
|
||||
|
||||
horiz = x2 - x1;
|
||||
vert = y2 - y1;
|
||||
|
||||
if(horiz < 0)
|
||||
{
|
||||
dirx = -1;
|
||||
horiz = -horiz;
|
||||
}
|
||||
if(x1 < x2)
|
||||
stepx = 1;
|
||||
else
|
||||
dirx = 1;
|
||||
if(vert < 0)
|
||||
{
|
||||
diry = -1;
|
||||
vert = -vert;
|
||||
}
|
||||
stepx = -1;
|
||||
if(y1 < y2)
|
||||
stepy = 1;
|
||||
else
|
||||
diry = 1;
|
||||
stepy = -1;
|
||||
|
||||
if(horiz == 0 && vert == 0)
|
||||
err = dx - dy;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
fm7_line_set_pixel(x1, y1);
|
||||
byte_count = 1;
|
||||
}
|
||||
else if(horiz == 0)
|
||||
{
|
||||
for(;;)
|
||||
{
|
||||
addr = fm7_line_set_pixel(x1, y1);
|
||||
if(addr != old_addr)
|
||||
{
|
||||
byte_count++;
|
||||
old_addr = addr;
|
||||
}
|
||||
if(y1 == y2)
|
||||
|
||||
if(x1 == x2 && y1 == y2)
|
||||
break;
|
||||
y1 += diry;
|
||||
}
|
||||
}
|
||||
else if(vert == 0)
|
||||
|
||||
err2 = 2*err;
|
||||
if(err2 > -dy)
|
||||
{
|
||||
for(;;)
|
||||
{
|
||||
addr = fm7_line_set_pixel(x1, y1);
|
||||
if(addr != old_addr)
|
||||
{
|
||||
byte_count++;
|
||||
old_addr = addr;
|
||||
err -= dy;
|
||||
x1 += stepx;
|
||||
}
|
||||
if(x1 == x2)
|
||||
break;
|
||||
x1 += dirx;
|
||||
}
|
||||
}
|
||||
else if(horiz >= vert)
|
||||
if(err2 < dx)
|
||||
{
|
||||
rep = horiz >> 1;
|
||||
for(;;)
|
||||
{
|
||||
addr = fm7_line_set_pixel(x1, y1);
|
||||
if(addr != old_addr)
|
||||
{
|
||||
byte_count++;
|
||||
old_addr = addr;
|
||||
}
|
||||
if(x1 == x2)
|
||||
break;
|
||||
x1 += dirx;
|
||||
rep -= vert;
|
||||
if(rep < 0)
|
||||
{
|
||||
rep += horiz;
|
||||
y1 += diry;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rep = vert >> 1;
|
||||
for(;;)
|
||||
{
|
||||
addr = fm7_line_set_pixel(x1, y1);
|
||||
if(addr != old_addr)
|
||||
{
|
||||
byte_count++;
|
||||
old_addr = addr;
|
||||
}
|
||||
if(y1 == y2)
|
||||
break;
|
||||
y1 += diry;
|
||||
rep -= horiz;
|
||||
if(rep < 0)
|
||||
{
|
||||
rep += vert;
|
||||
x1 += dirx;
|
||||
}
|
||||
err += dx;
|
||||
y1 += stepy;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user