diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs index 69c6b78a7e..bd8029baa1 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs @@ -58,7 +58,13 @@ namespace BizHawk.Emulation.Cores.Components.Z80A Flag3 = Regs[dest].Bit(3); } - public void TR_Func(ushort dest, ushort src) + public void IN_A_N_Func(ushort dest, ushort src_l, ushort src_h) + { + Regs[dest] = ReadHardware((ushort)(Regs[src_l] | (Regs[src_h]) << 8)); + Regs[DB] = Regs[dest]; + } + + public void TR_Func(ushort dest, ushort src) { Regs[dest] = Regs[src]; } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs index d5a2e8c3a2..f1f45ebd8c 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs @@ -609,7 +609,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A IDLE, WAIT, WAIT, - IN, A, Z, W, + IN_A_N, A, Z, W, INC16, Z, W, WAIT, OP_F, diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs index 242b21dbac..1295bc0296 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs @@ -80,6 +80,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A public const ushort RST = 65; public const ushort REP_OP_I = 66; public const ushort REP_OP_O = 67; + public const ushort IN_A_N = 68; // non-state variables public ushort Ztemp1, Ztemp2, Ztemp3, Ztemp4; @@ -478,6 +479,9 @@ namespace BizHawk.Emulation.Cores.Components.Z80A case IN: IN_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case IN_A_N: + IN_A_N_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case NEG: NEG_8_Func(cur_instr[instr_pntr++]); break;