68000: flags were not calculated in EXT
This commit is contained in:
parent
7ae6dfb534
commit
b4793ec43c
|
@ -43,13 +43,12 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void MOVE_Disasm(DisassemblyInfo info)
|
void MOVE_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
int size = ((op >> 12) & 0x03);
|
int pc = info.PC + 2;
|
||||||
|
int size = ((op >> 12) & 0x03);
|
||||||
int dstMode = ((op >> 6) & 0x07);
|
int dstMode = ((op >> 6) & 0x07);
|
||||||
int dstReg = ((op >> 9) & 0x07);
|
int dstReg = ((op >> 9) & 0x07);
|
||||||
int srcMode = ((op >> 3) & 0x07);
|
int srcMode = ((op >> 3) & 0x07);
|
||||||
int srcReg = (op & 0x07);
|
int srcReg = (op & 0x07);
|
||||||
|
|
||||||
int pc = info.PC + 2;
|
|
||||||
|
|
||||||
switch (size)
|
switch (size)
|
||||||
{
|
{
|
||||||
|
@ -75,10 +74,10 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void MOVEA()
|
void MOVEA()
|
||||||
{
|
{
|
||||||
int size = ((op >> 12) & 0x03);
|
int size = ((op >> 12) & 0x03);
|
||||||
int dstReg = ((op >> 9) & 0x07);
|
int dstReg = ((op >> 9) & 0x07);
|
||||||
int srcMode = ((op >> 3) & 0x07);
|
int srcMode = ((op >> 3) & 0x07);
|
||||||
int srcReg = (op & 0x07);
|
int srcReg = (op & 0x07);
|
||||||
|
|
||||||
if (size == 3) // Word
|
if (size == 3) // Word
|
||||||
{
|
{
|
||||||
|
@ -132,11 +131,11 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void MOVEA_Disasm(DisassemblyInfo info)
|
void MOVEA_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
int size = ((op >> 12) & 0x03);
|
int pc = info.PC + 2;
|
||||||
int dstReg = ((op >> 9) & 0x07);
|
int size = ((op >> 12) & 0x03);
|
||||||
|
int dstReg = ((op >> 9) & 0x07);
|
||||||
int srcMode = ((op >> 3) & 0x07);
|
int srcMode = ((op >> 3) & 0x07);
|
||||||
int srcReg = (op & 0x07);
|
int srcReg = (op & 0x07);
|
||||||
int pc = info.PC + 2;
|
|
||||||
|
|
||||||
if (size == 3)
|
if (size == 3)
|
||||||
{
|
{
|
||||||
|
@ -298,9 +297,9 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
void MOVEM1()
|
void MOVEM1()
|
||||||
{
|
{
|
||||||
// Move memory to register
|
// Move memory to register
|
||||||
int size = (op >> 6) & 1;
|
int size = (op >> 6) & 1;
|
||||||
int srcMode = (op >> 3) & 7;
|
int srcMode = (op >> 3) & 7;
|
||||||
int srcReg = (op >> 0) & 7;
|
int srcReg = (op >> 0) & 7;
|
||||||
|
|
||||||
ushort registers = (ushort)ReadWord(PC); PC += 2;
|
ushort registers = (ushort)ReadWord(PC); PC += 2;
|
||||||
int address = ReadAddress(srcMode, srcReg);
|
int address = ReadAddress(srcMode, srcReg);
|
||||||
|
@ -434,11 +433,11 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void MOVEM0_Disasm(DisassemblyInfo info)
|
void MOVEM0_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
|
int pc = info.PC + 2;
|
||||||
int size = (op >> 6) & 1;
|
int size = (op >> 6) & 1;
|
||||||
int mode = (op >> 3) & 7;
|
int mode = (op >> 3) & 7;
|
||||||
int reg = (op >> 0) & 7;
|
int reg = (op >> 0) & 7;
|
||||||
int pc = info.PC + 2;
|
|
||||||
|
|
||||||
ushort registers = (ushort)ReadWord(pc); pc += 2;
|
ushort registers = (ushort)ReadWord(pc); pc += 2;
|
||||||
string address = DisassembleAddress(mode, reg, ref pc);
|
string address = DisassembleAddress(mode, reg, ref pc);
|
||||||
|
|
||||||
|
@ -449,10 +448,10 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void MOVEM1_Disasm(DisassemblyInfo info)
|
void MOVEM1_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
|
int pc = info.PC + 2;
|
||||||
int size = (op >> 6) & 1;
|
int size = (op >> 6) & 1;
|
||||||
int mode = (op >> 3) & 7;
|
int mode = (op >> 3) & 7;
|
||||||
int reg = (op >> 0) & 7;
|
int reg = (op >> 0) & 7;
|
||||||
int pc = info.PC + 2;
|
|
||||||
|
|
||||||
ushort registers = (ushort)ReadWord(pc); pc += 2;
|
ushort registers = (ushort)ReadWord(pc); pc += 2;
|
||||||
string address = DisassembleAddress(mode, reg, ref pc);
|
string address = DisassembleAddress(mode, reg, ref pc);
|
||||||
|
@ -488,8 +487,7 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void LEA_Disasm(DisassemblyInfo info)
|
void LEA_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
int pc = info.PC + 2;
|
int pc = info.PC + 2;
|
||||||
|
|
||||||
int mode = (op >> 3) & 7;
|
int mode = (op >> 3) & 7;
|
||||||
int sReg = (op >> 0) & 7;
|
int sReg = (op >> 0) & 7;
|
||||||
int dReg = (op >> 9) & 7;
|
int dReg = (op >> 9) & 7;
|
||||||
|
@ -520,7 +518,7 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void CLR_Disasm(DisassemblyInfo info)
|
void CLR_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
int pc = info.PC + 2;
|
int pc = info.PC + 2;
|
||||||
int size = (op >> 6) & 3;
|
int size = (op >> 6) & 3;
|
||||||
int mode = (op >> 3) & 7;
|
int mode = (op >> 3) & 7;
|
||||||
int reg = (op >> 0) & 7;
|
int reg = (op >> 0) & 7;
|
||||||
|
@ -537,33 +535,45 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
void EXT()
|
void EXT()
|
||||||
{
|
{
|
||||||
int size = (op >> 6) & 1;
|
int size = (op >> 6) & 1;
|
||||||
int reg = op & 7;
|
int reg = op & 7;
|
||||||
|
|
||||||
switch (size)
|
switch (size)
|
||||||
{
|
{
|
||||||
case 0: D[reg].s16 = D[reg].s8; break;
|
case 0: // ext.w
|
||||||
case 1: D[reg].s32 = D[reg].s16; break;
|
D[reg].s16 = D[reg].s8;
|
||||||
|
N = (D[reg].s16 & 0x8000) != 0;
|
||||||
|
Z = (D[reg].s16 == 0);
|
||||||
|
break;
|
||||||
|
case 1: // ext.l
|
||||||
|
D[reg].s32 = D[reg].s16;
|
||||||
|
N = (D[reg].s32 & 0x80000000) != 0;
|
||||||
|
Z = (D[reg].s32 == 0);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
V = false;
|
||||||
|
C = false;
|
||||||
PendingCycles -= 4;
|
PendingCycles -= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EXT_Disasm(DisassemblyInfo info)
|
void EXT_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
int pc = info.PC;
|
|
||||||
int size = (op >> 6) & 1;
|
int size = (op >> 6) & 1;
|
||||||
int reg = op & 7;
|
int reg = op & 7;
|
||||||
|
|
||||||
switch (size)
|
switch (size)
|
||||||
{
|
{
|
||||||
case 0: info.Mnemonic = "ext.w"; info.Args = "D" + reg; break;
|
case 0: info.Mnemonic = "ext.w"; info.Args = "D" + reg; break;
|
||||||
case 1: info.Mnemonic = "ext.l"; info.Args = "D" + reg; break;
|
case 1: info.Mnemonic = "ext.l"; info.Args = "D" + reg; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PEA()
|
void PEA()
|
||||||
{
|
{
|
||||||
int mode = (op >> 3) & 7;
|
int mode = (op >> 3) & 7;
|
||||||
int reg = (op >> 0) & 7;
|
int reg = (op >> 0) & 7;
|
||||||
int ea = ReadAddress(mode, reg);
|
int ea = ReadAddress(mode, reg);
|
||||||
|
|
||||||
A[7].s32 -= 4;
|
A[7].s32 -= 4;
|
||||||
WriteLong(A[7].s32, ea);
|
WriteLong(A[7].s32, ea);
|
||||||
|
|
||||||
|
@ -586,9 +596,9 @@ namespace BizHawk.Emulation.CPUs.M68000
|
||||||
|
|
||||||
void PEA_Disasm(DisassemblyInfo info)
|
void PEA_Disasm(DisassemblyInfo info)
|
||||||
{
|
{
|
||||||
int pc = info.PC + 2;
|
int pc = info.PC + 2;
|
||||||
int mode = (op >> 3) & 7;
|
int mode = (op >> 3) & 7;
|
||||||
int reg = (op >> 0) & 7;
|
int reg = (op >> 0) & 7;
|
||||||
|
|
||||||
info.Mnemonic = "pea";
|
info.Mnemonic = "pea";
|
||||||
info.Args = DisassembleAddress(mode, reg, ref pc);
|
info.Args = DisassembleAddress(mode, reg, ref pc);
|
||||||
|
|
Loading…
Reference in New Issue