+ }
+
+ // mpys?
+ case 0x1b:
+ if (!(op&0x100)) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: no b bit @ %04x", GET_PPC_OFFS());
+ read_P(); // update P
+ rA32 -= ssp->gr[SSP_P].v; // maybe only upper word?
+ UPD_ACC_ZN // there checking flags after this
+ rX = ptr1_read_(op&3, 0, (op<<1)&0x18); // ri (maybe rj?)
+ rY = ptr1_read_((op>>4)&3, 4, (op>>3)&0x18); // rj
+ break;
+
+ // mpya (rj), (ri), b
+ case 0x4b:
+ if (!(op&0x100)) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: no b bit @ %04x", GET_PPC_OFFS());
+ read_P(); // update P
+ rA32 += ssp->gr[SSP_P].v; // confirmed to be 32bit
+ UPD_ACC_ZN // ?
+ rX = ptr1_read_(op&3, 0, (op<<1)&0x18); // ri (maybe rj?)
+ rY = ptr1_read_((op>>4)&3, 4, (op>>3)&0x18); // rj
+ break;
+
+ // mld (rj), (ri), b
+ case 0x5b:
+ if (!(op&0x100)) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: no b bit @ %04x", GET_PPC_OFFS());
+ rA32 = 0;
+ rST &= 0x0fff; // ?
+ rX = ptr1_read_(op&3, 0, (op<<1)&0x18); // ri (maybe rj?)
+ rY = ptr1_read_((op>>4)&3, 4, (op>>3)&0x18); // rj
+ break;
+
+ // OP a, s
+ case 0x10: OP_CHECK32(OP_SUBA32); tmpv = REG_READ(op & 0x0f); OP_SUBA(tmpv); break;
+ case 0x30: OP_CHECK32(OP_CMPA32); tmpv = REG_READ(op & 0x0f); OP_CMPA(tmpv); break;
+ case 0x40: OP_CHECK32(OP_ADDA32); tmpv = REG_READ(op & 0x0f); OP_ADDA(tmpv); break;
+ case 0x50: OP_CHECK32(OP_ANDA32); tmpv = REG_READ(op & 0x0f); OP_ANDA(tmpv); break;
+ case 0x60: OP_CHECK32(OP_ORA32 ); tmpv = REG_READ(op & 0x0f); OP_ORA (tmpv); break;
+ case 0x70: OP_CHECK32(OP_EORA32); tmpv = REG_READ(op & 0x0f); OP_EORA(tmpv); break;
+
+ // OP a, (ri)
+ case 0x11: tmpv = ptr1_read(op); OP_SUBA(tmpv); break;
+ case 0x31: tmpv = ptr1_read(op); OP_CMPA(tmpv); break;
+ case 0x41: tmpv = ptr1_read(op); OP_ADDA(tmpv); break;
+ case 0x51: tmpv = ptr1_read(op); OP_ANDA(tmpv); break;
+ case 0x61: tmpv = ptr1_read(op); OP_ORA (tmpv); break;
+ case 0x71: tmpv = ptr1_read(op); OP_EORA(tmpv); break;
+
+ // OP a, adr
+ case 0x03: tmpv = ssp->RAM[op & 0x1ff]; OP_LDA (tmpv); break;
+ case 0x13: tmpv = ssp->RAM[op & 0x1ff]; OP_SUBA(tmpv); break;
+ case 0x33: tmpv = ssp->RAM[op & 0x1ff]; OP_CMPA(tmpv); break;
+ case 0x43: tmpv = ssp->RAM[op & 0x1ff]; OP_ADDA(tmpv); break;
+ case 0x53: tmpv = ssp->RAM[op & 0x1ff]; OP_ANDA(tmpv); break;
+ case 0x63: tmpv = ssp->RAM[op & 0x1ff]; OP_ORA (tmpv); break;
+ case 0x73: tmpv = ssp->RAM[op & 0x1ff]; OP_EORA(tmpv); break;
+
+ // OP a, imm
+ case 0x14: tmpv = *PC++; OP_SUBA(tmpv); break;
+ case 0x34: tmpv = *PC++; OP_CMPA(tmpv); break;
+ case 0x44: tmpv = *PC++; OP_ADDA(tmpv); break;
+ case 0x54: tmpv = *PC++; OP_ANDA(tmpv); break;
+ case 0x64: tmpv = *PC++; OP_ORA (tmpv); break;
+ case 0x74: tmpv = *PC++; OP_EORA(tmpv); break;
+
+ // OP a, ((ri))
+ case 0x15: tmpv = ptr2_read(op); OP_SUBA(tmpv); break;
+ case 0x35: tmpv = ptr2_read(op); OP_CMPA(tmpv); break;
+ case 0x45: tmpv = ptr2_read(op); OP_ADDA(tmpv); break;
+ case 0x55: tmpv = ptr2_read(op); OP_ANDA(tmpv); break;
+ case 0x65: tmpv = ptr2_read(op); OP_ORA (tmpv); break;
+ case 0x75: tmpv = ptr2_read(op); OP_EORA(tmpv); break;
+
+ // OP a, ri
+ case 0x19: tmpv = rIJ[IJind]; OP_SUBA(tmpv); break;
+ case 0x39: tmpv = rIJ[IJind]; OP_CMPA(tmpv); break;
+ case 0x49: tmpv = rIJ[IJind]; OP_ADDA(tmpv); break;
+ case 0x59: tmpv = rIJ[IJind]; OP_ANDA(tmpv); break;
+ case 0x69: tmpv = rIJ[IJind]; OP_ORA (tmpv); break;
+ case 0x79: tmpv = rIJ[IJind]; OP_EORA(tmpv); break;
+
+ // OP simm
+ case 0x1c: OP_SUBA(op & 0xff); if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); break;
+ case 0x3c: OP_CMPA(op & 0xff); if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); break;
+ case 0x4c: OP_ADDA(op & 0xff); if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); break;
+ // MAME code only does LSB of top word, but this looks wrong to me.
+ case 0x5c: OP_ANDA(op & 0xff); if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); break;
+ case 0x6c: OP_ORA (op & 0xff); if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); break;
+ case 0x7c: OP_EORA(op & 0xff); if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); break;