mirror of
https://github.com/holub/mame
synced 2025-05-11 00:28:49 +03:00
fix CLR and CPY operations when the copy direction is from right to left -> this fix some gfx bugs in kothello
This commit is contained in:
parent
ef65c9cce7
commit
6c3fe42bae
@ -195,7 +195,7 @@ static void docpy(int opcode,int src,int *dst,INT16 _ax,INT16 _ay)
|
|||||||
if (opcode & 0x0800)
|
if (opcode & 0x0800)
|
||||||
{
|
{
|
||||||
if (ay == 0) break;
|
if (ay == 0) break;
|
||||||
else if (ay > 0)
|
if (_ay > 0)
|
||||||
{
|
{
|
||||||
src = (src - 384) & (HD63484_RAM_SIZE-1);
|
src = (src - 384) & (HD63484_RAM_SIZE-1);
|
||||||
*dst = (*dst + dstep1) & (HD63484_RAM_SIZE-1);
|
*dst = (*dst + dstep1) & (HD63484_RAM_SIZE-1);
|
||||||
@ -325,8 +325,9 @@ static void HD63484_command_w(UINT16 cmd)
|
|||||||
logerror("%04x ",fifo[i]);
|
logerror("%04x ",fifo[i]);
|
||||||
logerror("\n");
|
logerror("\n");
|
||||||
|
|
||||||
if (fifo[0] == 0x0400) /* ORG */
|
if (fifo[0] == 0x0400) { /* ORG */
|
||||||
org = ((fifo[1] & 0x00ff) << 12) | ((fifo[2] & 0xfff0) >> 4);
|
org = ((fifo[1] & 0x00ff) << 12) | ((fifo[2] & 0xfff0) >> 4);
|
||||||
|
}
|
||||||
else if ((fifo[0] & 0xffe0) == 0x0800) /* WPR */
|
else if ((fifo[0] & 0xffe0) == 0x0800) /* WPR */
|
||||||
{
|
{
|
||||||
if (fifo[0] == 0x0800)
|
if (fifo[0] == 0x0800)
|
||||||
@ -359,33 +360,91 @@ logerror("unsupported register\n");
|
|||||||
}
|
}
|
||||||
else if (fifo[0] == 0x5800) /* CLR */
|
else if (fifo[0] == 0x5800) /* CLR */
|
||||||
{
|
{
|
||||||
rwp *= 2;
|
int ax = 2*fifo[2];
|
||||||
doclr(fifo[0],fifo[1],&rwp,2*fifo[2]+1,fifo[3]);
|
|
||||||
rwp /= 2;
|
rwp *= 2;
|
||||||
|
if (fifo[2] & 0x8000) { rwp += 1; ax -= 1; } else { ax += 1; }
|
||||||
|
|
||||||
|
doclr(fifo[0],fifo[1],&rwp,ax,fifo[3]);
|
||||||
|
|
||||||
|
if (fifo[2] & 0x8000) rwp -= 1;
|
||||||
|
rwp /= 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
int fifo2 = (int)fifo[2],fifo3 = (int)fifo[3];
|
||||||
|
if (fifo2<0) fifo2 *= -1;
|
||||||
|
if (fifo3<0) fifo3 *= -1;
|
||||||
|
rwp += ((fifo2+1)*(fifo3+1));
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else if ((fifo[0] & 0xfffc) == 0x5c00) /* SCLR */
|
else if ((fifo[0] & 0xfffc) == 0x5c00) /* SCLR */
|
||||||
{
|
{
|
||||||
rwp *= 2;
|
int ax = 2*fifo[2];
|
||||||
doclr(fifo[0],fifo[1],&rwp,2*fifo[2]+1,fifo[3]);
|
|
||||||
rwp /= 2;
|
rwp *= 2;
|
||||||
|
if (fifo[2] & 0x8000) { rwp += 1; ax -= 1; } else { ax += 1; }
|
||||||
|
|
||||||
|
doclr(fifo[0],fifo[1],&rwp,ax,fifo[3]);
|
||||||
|
|
||||||
|
if (fifo[2] & 0x8000) rwp -= 1;
|
||||||
|
rwp /= 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
int fifo2 = (int)fifo[2],fifo3 = (int)fifo[3];
|
||||||
|
if (fifo2<0) fifo2 *= -1;
|
||||||
|
if (fifo3<0) fifo3 *= -1;
|
||||||
|
rwp += ((fifo2+1)*(fifo3+1));
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else if ((fifo[0] & 0xf0ff) == 0x6000) /* CPY */
|
else if ((fifo[0] & 0xf0ff) == 0x6000) /* CPY */
|
||||||
{
|
{
|
||||||
int src;
|
int src,ax;
|
||||||
|
|
||||||
src = ((fifo[1] & 0x00ff) << 12) | ((fifo[2] & 0xfff0) >> 4);
|
ax = 2*fifo[3];
|
||||||
rwp *= 2;
|
src = (((fifo[1] & 0x00ff) << 12) | ((fifo[2] & 0xfff0) >> 4))*2;
|
||||||
docpy(fifo[0],2*src,&rwp,2*fifo[3]+1,fifo[4]);
|
rwp *= 2;
|
||||||
rwp /= 2;
|
if (fifo[3] & 0x8000) { rwp += 1; src += 1; ax -= 1; } else { ax += 1; }
|
||||||
|
|
||||||
|
docpy(fifo[0],src,&rwp,ax,fifo[4]);
|
||||||
|
|
||||||
|
if (fifo[3] & 0x8000) rwp -= 1;
|
||||||
|
rwp /= 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
int fifo2 = (int)fifo[2],fifo3 = (int)fifo[3];
|
||||||
|
if (fifo2<0) fifo2 *= -1;
|
||||||
|
if (fifo3<0) fifo3 *= -1;
|
||||||
|
rwp += ((fifo2+1)*(fifo3+1));
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else if ((fifo[0] & 0xf0fc) == 0x7000) /* SCPY */
|
else if ((fifo[0] & 0xf0fc) == 0x7000) /* SCPY */
|
||||||
{
|
{
|
||||||
int src;
|
int src,ax;
|
||||||
|
|
||||||
src = ((fifo[1] & 0x00ff) << 12) | ((fifo[2] & 0xfff0) >> 4);
|
ax = 2*fifo[3];
|
||||||
rwp *= 2;
|
src = (((fifo[1] & 0x00ff) << 12) | ((fifo[2] & 0xfff0) >> 4))*2;
|
||||||
docpy(fifo[0],2*src,&rwp,2*fifo[3]+1,fifo[4]);
|
rwp *= 2;
|
||||||
rwp /= 2;
|
if (fifo[3] & 0x8000) { rwp += 1; src += 1; ax -= 1; } else { ax += 1; }
|
||||||
|
|
||||||
|
docpy(fifo[0],src,&rwp,ax,fifo[4]);
|
||||||
|
|
||||||
|
if (fifo[3] & 0x8000) rwp -= 1;
|
||||||
|
rwp /= 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
int fifo2 = (int)fifo[2],fifo3 = (int)fifo[3];
|
||||||
|
if (fifo2<0) fifo2 *= -1;
|
||||||
|
if (fifo3<0) fifo3 *= -1;
|
||||||
|
rwp += ((fifo2+1)*(fifo3+1));
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else if (fifo[0] == 0x8000) /* AMOVE */
|
else if (fifo[0] == 0x8000) /* AMOVE */
|
||||||
{
|
{
|
||||||
@ -595,6 +654,7 @@ rwp /= 2;
|
|||||||
|
|
||||||
pcx = fifo[1];
|
pcx = fifo[1];
|
||||||
pcy = fifo[2];
|
pcy = fifo[2];
|
||||||
|
|
||||||
src = (2*org + pcx - pcy * 384) & (HD63484_RAM_SIZE-1);
|
src = (2*org + pcx - pcy * 384) & (HD63484_RAM_SIZE-1);
|
||||||
dst = (2*org + cpx - cpy * 384) & (HD63484_RAM_SIZE-1);
|
dst = (2*org + cpx - cpy * 384) & (HD63484_RAM_SIZE-1);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user