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 x2 = m_alu.x1;
|
||||||
int y1 = m_alu.y0;
|
int y1 = m_alu.y0;
|
||||||
int y2 = m_alu.y1;
|
int y2 = m_alu.y1;
|
||||||
int horiz,vert;
|
|
||||||
int dirx,diry;
|
int dx = abs(x2 - x1);
|
||||||
int rep;
|
int dy = abs(y2 - y1);
|
||||||
|
int stepx, stepy;
|
||||||
|
int err,err2;
|
||||||
int byte_count = 0;
|
int byte_count = 0;
|
||||||
UINT16 old_addr = 0xffff;
|
|
||||||
UINT16 addr;
|
|
||||||
|
|
||||||
m_alu.busy = 1;
|
if(x1 < x2)
|
||||||
|
stepx = 1;
|
||||||
horiz = x2 - x1;
|
|
||||||
vert = y2 - y1;
|
|
||||||
|
|
||||||
if(horiz < 0)
|
|
||||||
{
|
|
||||||
dirx = -1;
|
|
||||||
horiz = -horiz;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
dirx = 1;
|
stepx = -1;
|
||||||
if(vert < 0)
|
if(y1 < y2)
|
||||||
{
|
stepy = 1;
|
||||||
diry = -1;
|
|
||||||
vert = -vert;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
diry = 1;
|
stepy = -1;
|
||||||
|
|
||||||
if(horiz == 0 && vert == 0)
|
err = dx - dy;
|
||||||
|
|
||||||
|
for(;;)
|
||||||
{
|
{
|
||||||
fm7_line_set_pixel(x1, y1);
|
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++;
|
byte_count++;
|
||||||
old_addr = addr;
|
|
||||||
}
|
if(x1 == x2 && y1 == y2)
|
||||||
if(y1 == y2)
|
|
||||||
break;
|
break;
|
||||||
y1 += diry;
|
|
||||||
}
|
err2 = 2*err;
|
||||||
}
|
if(err2 > -dy)
|
||||||
else if(vert == 0)
|
|
||||||
{
|
{
|
||||||
for(;;)
|
err -= dy;
|
||||||
{
|
x1 += stepx;
|
||||||
addr = fm7_line_set_pixel(x1, y1);
|
|
||||||
if(addr != old_addr)
|
|
||||||
{
|
|
||||||
byte_count++;
|
|
||||||
old_addr = addr;
|
|
||||||
}
|
}
|
||||||
if(x1 == x2)
|
if(err2 < dx)
|
||||||
break;
|
|
||||||
x1 += dirx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(horiz >= vert)
|
|
||||||
{
|
{
|
||||||
rep = horiz >> 1;
|
err += dx;
|
||||||
for(;;)
|
y1 += stepy;
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user