games/md: copy updated cpu.c from blit
This commit is contained in:
parent
8d3bbf373c
commit
66c22f3908
1 changed files with 14 additions and 11 deletions
|
@ -458,12 +458,11 @@ trap(int n, u32int pcv)
|
||||||
|
|
||||||
sr = rS;
|
sr = rS;
|
||||||
if(n < 0){
|
if(n < 0){
|
||||||
for(l = 7; l >= ((rS >> 8) & 7); l--)
|
for(l = 7; l > ((rS >> 8) & 7); l--)
|
||||||
if((irql[l] & irq) != 0)
|
if((irql[l] & irq) != 0)
|
||||||
break;
|
break;
|
||||||
v = intack(l);
|
v = intack(l);
|
||||||
rS = rS & ~0x700 | l << 8;
|
rS = rS & ~0x700 | l << 8;
|
||||||
irq = 0;
|
|
||||||
tim += 44;
|
tim += 44;
|
||||||
}else{
|
}else{
|
||||||
switch(n){
|
switch(n){
|
||||||
|
@ -496,8 +495,10 @@ cpureset(void)
|
||||||
ra[7] = memread(0) << 16 | memread(2);
|
ra[7] = memread(0) << 16 | memread(2);
|
||||||
pc = memread(4) << 16 | memread(6);
|
pc = memread(4) << 16 | memread(6);
|
||||||
rS = 0x2700;
|
rS = 0x2700;
|
||||||
for(i = 7, v = 0; i >= 0; i--)
|
for(i = 7, v = 0; i >= 0; i--){
|
||||||
irqla[i] = v |= irql[i];
|
irqla[i] = v;
|
||||||
|
v |= irql[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -509,7 +510,7 @@ step(void)
|
||||||
int n, m, d;
|
int n, m, d;
|
||||||
static int cnt;
|
static int cnt;
|
||||||
|
|
||||||
if(0 && pc == 0x59500){
|
if(0 && pc == 0x4118c){
|
||||||
trace++;
|
trace++;
|
||||||
print("%x\n", curpc);
|
print("%x\n", curpc);
|
||||||
}
|
}
|
||||||
|
@ -523,7 +524,7 @@ step(void)
|
||||||
return 1;
|
return 1;
|
||||||
op = fetch16();
|
op = fetch16();
|
||||||
if(trace)
|
if(trace)
|
||||||
print("%.6ux %.6uo %.4ux %.8ux | %.8ux %.8ux %.8ux %.8ux | %.8ux %.8ux %.8ux\n", curpc, op, rS, memread(ra[7])<<16|memread(ra[7]+2), r[0], r[1], r[2], r[3], ra[0], ra[1], ra[7]);
|
print("%.6ux %.6uo %.4ux %.8ux | %.8ux %.8ux %.8ux %.8ux | %.8ux %.8ux %.8ux\n", curpc, op, rS, memread(ra[7])<<16|memread(ra[7]+2), r[0], r[1], r[2], r[3], ra[0], ra[6], ra[7]);
|
||||||
s = op >> 6 & 3;
|
s = op >> 6 & 3;
|
||||||
n = op >> 9 & 7;
|
n = op >> 9 & 7;
|
||||||
switch(op >> 12){
|
switch(op >> 12){
|
||||||
|
@ -729,7 +730,7 @@ step(void)
|
||||||
a = amode(op >> 3, op, s);
|
a = amode(op >> 3, op, s);
|
||||||
m = (rS & FLAGX) != 0;
|
m = (rS & FLAGX) != 0;
|
||||||
d = 1<<(8<<s)-1;
|
d = 1<<(8<<s)-1;
|
||||||
v = -rmode(a, s);
|
v = rmode(a, s);
|
||||||
w = -(v+m) & (d << 1) - 1;
|
w = -(v+m) & (d << 1) - 1;
|
||||||
rS &= ~(FLAGC|FLAGX|FLAGN|FLAGV);
|
rS &= ~(FLAGC|FLAGX|FLAGN|FLAGV);
|
||||||
if((w & d) != 0)
|
if((w & d) != 0)
|
||||||
|
@ -740,7 +741,7 @@ step(void)
|
||||||
rS |= FLAGC|FLAGX;
|
rS |= FLAGC|FLAGX;
|
||||||
rS &= ~FLAGZ;
|
rS &= ~FLAGZ;
|
||||||
}
|
}
|
||||||
wmode(a, s, v);
|
wmode(a, s, w);
|
||||||
stime(a < 0, s);
|
stime(a < 0, s);
|
||||||
break;
|
break;
|
||||||
case 2: /* CLR */
|
case 2: /* CLR */
|
||||||
|
@ -758,6 +759,7 @@ step(void)
|
||||||
a = amode(op >> 3, op, s);
|
a = amode(op >> 3, op, s);
|
||||||
v = -rmode(a, s);
|
v = -rmode(a, s);
|
||||||
nz(v, s);
|
nz(v, s);
|
||||||
|
rS = rS & ~FLAGX | ~rS << 2 & FLAGX | ~rS >> 2 & FLAGC;
|
||||||
wmode(a, s, v);
|
wmode(a, s, v);
|
||||||
stime(a < 0, s);
|
stime(a < 0, s);
|
||||||
break;
|
break;
|
||||||
|
@ -943,6 +945,7 @@ step(void)
|
||||||
v = add(v, n, 0, s);
|
v = add(v, n, 0, s);
|
||||||
else
|
else
|
||||||
v = sub(v, n, 0, s);
|
v = sub(v, n, 0, s);
|
||||||
|
rS = rS & ~FLAGX | rS << 4 & FLAGX;
|
||||||
if(a < 0)
|
if(a < 0)
|
||||||
tim += s == 2 || (op & 0x130) == 0x110 ? 8 : 4;
|
tim += s == 2 || (op & 0x130) == 0x110 ? 8 : 4;
|
||||||
else
|
else
|
||||||
|
@ -1134,7 +1137,7 @@ step(void)
|
||||||
else
|
else
|
||||||
v = sub(v, w, (rS & FLAGX) != 0, s);
|
v = sub(v, w, (rS & FLAGX) != 0, s);
|
||||||
wmode(a, s, v);
|
wmode(a, s, v);
|
||||||
rS = rS & ~FLAGX | rS & FLAGC << 4;
|
rS = rS & ~FLAGX | rS << 4 & FLAGX;
|
||||||
break;
|
break;
|
||||||
} /* ADD, SUB */
|
} /* ADD, SUB */
|
||||||
a = amode(op >> 3, op, s);
|
a = amode(op >> 3, op, s);
|
||||||
|
@ -1145,7 +1148,7 @@ step(void)
|
||||||
v = add(v, r[n], 0, s);
|
v = add(v, r[n], 0, s);
|
||||||
else
|
else
|
||||||
v = sub(d ? r[n] : v, d ? v : r[n], 0, s);
|
v = sub(d ? r[n] : v, d ? v : r[n], 0, s);
|
||||||
rS = rS & ~FLAGX | rS & FLAGC << 4;
|
rS = rS & ~FLAGX | rS << 4 & FLAGX;
|
||||||
if(d)
|
if(d)
|
||||||
a = ~n;
|
a = ~n;
|
||||||
wmode(a, s, v);
|
wmode(a, s, v);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue