mirror of
https://github.com/Michael-Prince-Sharpe/bsnes-classic.git
synced 2025-04-02 10:21:42 -04:00
Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
|
8b547f1c5d | ||
|
e93c847785 |
1 changed files with 12 additions and 13 deletions
|
@ -100,6 +100,7 @@ void NECDSP::exec_op(uint24 opcode) {
|
||||||
|
|
||||||
flag.s0 = (r & 0x8000);
|
flag.s0 = (r & 0x8000);
|
||||||
flag.z = (r == 0);
|
flag.z = (r == 0);
|
||||||
|
if (!flag.ov1) flag.s1 = flag.s0;
|
||||||
|
|
||||||
switch(alu) {
|
switch(alu) {
|
||||||
case 1: case 2: case 3: case 10: case 13: case 14: case 15: {
|
case 1: case 2: case 3: case 10: case 13: case 14: case 15: {
|
||||||
|
@ -111,17 +112,14 @@ void NECDSP::exec_op(uint24 opcode) {
|
||||||
case 4: case 5: case 6: case 7: case 8: case 9: {
|
case 4: case 5: case 6: case 7: case 8: case 9: {
|
||||||
if(alu & 1) {
|
if(alu & 1) {
|
||||||
//addition
|
//addition
|
||||||
flag.ov0 = (q ^ r) & ~(q ^ p) & 0x8000;
|
flag.ov0 = (q ^ r) & (p ^ r) & 0x8000;
|
||||||
flag.c = (r < q);
|
flag.c = (r < q);
|
||||||
} else {
|
} else {
|
||||||
//subtraction
|
//subtraction
|
||||||
flag.ov0 = (q ^ r) & (q ^ p) & 0x8000;
|
flag.ov0 = (q ^ r) & (q ^ p) & 0x8000;
|
||||||
flag.c = (r > q);
|
flag.c = (r > q);
|
||||||
}
|
}
|
||||||
if(flag.ov0) {
|
flag.ov1 = (flag.ov0 & flag.ov1) ? (flag.s1 == flag.s0) : (flag.ov0 | flag.ov1);
|
||||||
flag.s1 = flag.ov1 ^ !(r & 0x8000);
|
|
||||||
flag.ov1 = !flag.ov1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 11: {
|
case 11: {
|
||||||
|
@ -146,15 +144,16 @@ void NECDSP::exec_op(uint24 opcode) {
|
||||||
|
|
||||||
exec_ld((idb << 6) + dst);
|
exec_ld((idb << 6) + dst);
|
||||||
|
|
||||||
|
if (dst != 4) {
|
||||||
switch(dpl) {
|
switch(dpl) {
|
||||||
case 1: regs.dp = (regs.dp & 0xf0) + ((regs.dp + 1) & 0x0f); break; //DPINC
|
case 1: regs.dp = (regs.dp & 0xf0) + ((regs.dp + 1) & 0x0f); break; //DPINC
|
||||||
case 2: regs.dp = (regs.dp & 0xf0) + ((regs.dp - 1) & 0x0f); break; //DPDEC
|
case 2: regs.dp = (regs.dp & 0xf0) + ((regs.dp - 1) & 0x0f); break; //DPDEC
|
||||||
case 3: regs.dp = (regs.dp & 0xf0); break; //DPCLR
|
case 3: regs.dp = (regs.dp & 0xf0); break; //DPCLR
|
||||||
}
|
}
|
||||||
|
|
||||||
regs.dp ^= dphm << 4;
|
regs.dp ^= dphm << 4;
|
||||||
|
}
|
||||||
|
|
||||||
if(rpdcr) regs.rp--;
|
if(rpdcr && dst != 5) regs.rp--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NECDSP::exec_rt(uint24 opcode) {
|
void NECDSP::exec_rt(uint24 opcode) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue