From b4793ec43cd0b9b143bbf77340f8d960f464e3e7 Mon Sep 17 00:00:00 2001 From: beirich Date: Thu, 27 Oct 2011 04:15:16 +0000 Subject: [PATCH] 68000: flags were not calculated in EXT --- .../CPUs/68000/Instructions/DataMovement.cs | 72 +++++++++++-------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/BizHawk.Emulation/CPUs/68000/Instructions/DataMovement.cs b/BizHawk.Emulation/CPUs/68000/Instructions/DataMovement.cs index 02c0cd976d..6264070c7c 100644 --- a/BizHawk.Emulation/CPUs/68000/Instructions/DataMovement.cs +++ b/BizHawk.Emulation/CPUs/68000/Instructions/DataMovement.cs @@ -43,13 +43,12 @@ namespace BizHawk.Emulation.CPUs.M68000 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 dstReg = ((op >> 9) & 0x07); + int dstReg = ((op >> 9) & 0x07); int srcMode = ((op >> 3) & 0x07); - int srcReg = (op & 0x07); - - int pc = info.PC + 2; + int srcReg = (op & 0x07); switch (size) { @@ -75,10 +74,10 @@ namespace BizHawk.Emulation.CPUs.M68000 void MOVEA() { - int size = ((op >> 12) & 0x03); - int dstReg = ((op >> 9) & 0x07); + int size = ((op >> 12) & 0x03); + int dstReg = ((op >> 9) & 0x07); int srcMode = ((op >> 3) & 0x07); - int srcReg = (op & 0x07); + int srcReg = (op & 0x07); if (size == 3) // Word { @@ -132,11 +131,11 @@ namespace BizHawk.Emulation.CPUs.M68000 void MOVEA_Disasm(DisassemblyInfo info) { - int size = ((op >> 12) & 0x03); - int dstReg = ((op >> 9) & 0x07); + int pc = info.PC + 2; + int size = ((op >> 12) & 0x03); + int dstReg = ((op >> 9) & 0x07); int srcMode = ((op >> 3) & 0x07); - int srcReg = (op & 0x07); - int pc = info.PC + 2; + int srcReg = (op & 0x07); if (size == 3) { @@ -298,9 +297,9 @@ namespace BizHawk.Emulation.CPUs.M68000 void MOVEM1() { // Move memory to register - int size = (op >> 6) & 1; + int size = (op >> 6) & 1; int srcMode = (op >> 3) & 7; - int srcReg = (op >> 0) & 7; + int srcReg = (op >> 0) & 7; ushort registers = (ushort)ReadWord(PC); PC += 2; int address = ReadAddress(srcMode, srcReg); @@ -434,11 +433,11 @@ namespace BizHawk.Emulation.CPUs.M68000 void MOVEM0_Disasm(DisassemblyInfo info) { + int pc = info.PC + 2; int size = (op >> 6) & 1; int mode = (op >> 3) & 7; int reg = (op >> 0) & 7; - int pc = info.PC + 2; - + ushort registers = (ushort)ReadWord(pc); pc += 2; string address = DisassembleAddress(mode, reg, ref pc); @@ -449,10 +448,10 @@ namespace BizHawk.Emulation.CPUs.M68000 void MOVEM1_Disasm(DisassemblyInfo info) { + int pc = info.PC + 2; int size = (op >> 6) & 1; int mode = (op >> 3) & 7; - int reg = (op >> 0) & 7; - int pc = info.PC + 2; + int reg = (op >> 0) & 7; ushort registers = (ushort)ReadWord(pc); pc += 2; string address = DisassembleAddress(mode, reg, ref pc); @@ -488,8 +487,7 @@ namespace BizHawk.Emulation.CPUs.M68000 void LEA_Disasm(DisassemblyInfo info) { - int pc = info.PC + 2; - + int pc = info.PC + 2; int mode = (op >> 3) & 7; int sReg = (op >> 0) & 7; int dReg = (op >> 9) & 7; @@ -520,7 +518,7 @@ namespace BizHawk.Emulation.CPUs.M68000 void CLR_Disasm(DisassemblyInfo info) { - int pc = info.PC + 2; + int pc = info.PC + 2; int size = (op >> 6) & 3; int mode = (op >> 3) & 7; int reg = (op >> 0) & 7; @@ -537,33 +535,45 @@ namespace BizHawk.Emulation.CPUs.M68000 void EXT() { int size = (op >> 6) & 1; - int reg = op & 7; + int reg = op & 7; + switch (size) { - case 0: D[reg].s16 = D[reg].s8; break; - case 1: D[reg].s32 = D[reg].s16; break; + case 0: // ext.w + 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; } void EXT_Disasm(DisassemblyInfo info) { - int pc = info.PC; int size = (op >> 6) & 1; - int reg = op & 7; + int reg = op & 7; + switch (size) { case 0: info.Mnemonic = "ext.w"; info.Args = "D" + reg; break; case 1: info.Mnemonic = "ext.l"; info.Args = "D" + reg; break; } - } void PEA() { int mode = (op >> 3) & 7; - int reg = (op >> 0) & 7; - int ea = ReadAddress(mode, reg); + int reg = (op >> 0) & 7; + int ea = ReadAddress(mode, reg); + A[7].s32 -= 4; WriteLong(A[7].s32, ea); @@ -586,9 +596,9 @@ namespace BizHawk.Emulation.CPUs.M68000 void PEA_Disasm(DisassemblyInfo info) { - int pc = info.PC + 2; + int pc = info.PC + 2; int mode = (op >> 3) & 7; - int reg = (op >> 0) & 7; + int reg = (op >> 0) & 7; info.Mnemonic = "pea"; info.Args = DisassembleAddress(mode, reg, ref pc);