diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec.cs index 3a91ab2f..a67a8311 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec.cs @@ -130,10 +130,10 @@ namespace cpu.nec public Action WriteIOByte; public Func ReadIOWord; public Action WriteIOWord; - public delegate void nec_delegate(); - public nec_delegate[] nec_instruction; - public delegate int getea_delegate(); - public getea_delegate[] GetEA; + //public delegate void nec_delegate(); + //public nec_delegate[] nec_instruction; + //public delegate int getea_delegate(); + //public getea_delegate[] GetEA; public Nec() { nec_init(); @@ -483,7 +483,8 @@ namespace cpu.nec } else { - EA = GetEA[ModRM](); + //EA = GetEA[ModRM](); + EA = DoNecGetEAOpCode(ModRM); tmp = ReadByte(EA); } } @@ -496,7 +497,8 @@ namespace cpu.nec } else { - EA = GetEA[ModRM](); + //EA = GetEA[ModRM](); + EA = DoNecGetEAOpCode(ModRM); tmp = ReadWord(EA); } } @@ -801,6 +803,8 @@ namespace cpu.nec mod_RM.regb = new int[256]; mod_RM.RMw = new int[256]; mod_RM.RMb = new int[256]; + //更换调度方式,不再依赖Delegate委托 + /* nec_instruction = new nec_delegate[]{ i_add_br8, i_add_wr16, @@ -1059,6 +1063,9 @@ namespace cpu.nec i_fepre, i_ffpre }; + */ + + /* GetEA = new getea_delegate[192]{ EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, @@ -1087,17 +1094,26 @@ namespace cpu.nec EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207 }; + */ } public override void Reset() { nec_reset(); } + + static int[] nec_reset_reg_name = new int[8] { 0, 2, 4, 6, 1, 3, 5, 7 }; public void nec_reset() { //const nec_config *config; uint i, j, c; //BREGS[] reg_name = new BREGS[8] { BREGS.AL, BREGS.CL, BREGS.DL, BREGS.BL, BREGS.AH, BREGS.CH, BREGS.DH, BREGS.BH }; - int[] reg_name = new int[8] { 0, 2, 4, 6, 1, 3, 5, 7 }; + + + //静态化减少GC + //int[] reg_name = new int[8] { 0, 2, 4, 6, 1, 3, 5, 7 }; + + + //int (*save_irqcallback)(int); //memory_interface save_mem; //save_irqcallback = I.irq_callback; @@ -1145,13 +1161,13 @@ namespace cpu.nec I.MF = true; for (i = 0; i < 256; i++) { - mod_RM.regb[i] = reg_name[(i & 0x38) >> 3]; + mod_RM.regb[i] = nec_reset_reg_name[(i & 0x38) >> 3]; mod_RM.regw[i] = (int)((i & 0x38) >> 3); } for (i = 0xc0; i < 0x100; i++) { mod_RM.RMw[i] = (int)(i & 7); - mod_RM.RMb[i] = reg_name[i & 7]; + mod_RM.RMb[i] = nec_reset_reg_name[i & 7]; } I.poll_state = true; } @@ -1180,7 +1196,8 @@ namespace cpu.nec } public void nec_trap() { - nec_instruction[fetchop()](); + //nec_instruction[fetchop()](); + DoInstructionOpCode(fetchop()); nec_interrupt(1, false); } public void external_int() @@ -1289,7 +1306,8 @@ namespace cpu.nec I.no_interrupt--; } iNOP = fetchop(); - nec_instruction[iNOP](); + //nec_instruction[iNOP](); + DoInstructionOpCode(iNOP); int delta = prevCycles - pendingCycles; totalExecutedCycles += (ulong)delta; } @@ -1329,7 +1347,8 @@ namespace cpu.nec I.no_interrupt--; } iNOP = fetchop(); - nec_instruction[iNOP](); + //nec_instruction[iNOP](); + DoInstructionOpCode(iNOP); int delta = prevCycles - pendingCycles; totalExecutedCycles += (ulong)delta; } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecInstr.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecInstr.cs index fe093627..9bd4318a 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecInstr.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecInstr.cs @@ -372,7 +372,8 @@ seg_prefix = 1; prefix_base = I.sregs[0] << 4; CLK(2); - nec_instruction[fetchop()](); + //nec_instruction[fetchop()](); + DoInstructionOpCode(fetchop()); seg_prefix = 0; } void i_daa() @@ -441,7 +442,8 @@ seg_prefix = 1; prefix_base = I.sregs[1] << 4; CLK(2); - nec_instruction[fetchop()](); + //nec_instruction[fetchop()](); + DoInstructionOpCode(fetchop()); seg_prefix = 0; } void i_das() @@ -510,7 +512,8 @@ seg_prefix = 1; prefix_base = I.sregs[2] << 4; CLK(2); - nec_instruction[fetchop()](); + //nec_instruction[fetchop()](); + DoInstructionOpCode(fetchop()); seg_prefix = 0; } void i_aaa() @@ -569,7 +572,8 @@ seg_prefix = 1; prefix_base = I.sregs[3] << 4; CLK(2); - nec_instruction[fetchop()](); + //nec_instruction[fetchop()](); + DoInstructionOpCode(fetchop()); seg_prefix = 0; } void i_aas() @@ -839,7 +843,10 @@ case 0xad: CLK(2); if (c != 0) do { i_lodsw(); c--; } while (c > 0 && !CF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xae: CLK(2); if (c != 0) do { i_scasb(); c--; } while (c > 0 && !CF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xaf: CLK(2); if (c != 0) do { i_scasw(); c--; } while (c > 0 && !CF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; - default: nec_instruction[next](); break; + default: + //nec_instruction[next](); + DoInstructionOpCode(next); + break; } seg_prefix = 0; } @@ -870,7 +877,10 @@ case 0xad: CLK(2); if (c != 0) do { i_lodsw(); c--; } while (c > 0 && CF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xae: CLK(2); if (c != 0) do { i_scasb(); c--; } while (c > 0 && CF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xaf: CLK(2); if (c != 0) do { i_scasw(); c--; } while (c > 0 && CF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; - default: nec_instruction[next](); break; + default: + //nec_instruction[next](); + DoInstructionOpCode(next); + break; } seg_prefix = 0; } @@ -1315,7 +1325,10 @@ void i_lea() { int ModRM = FETCH(); - GetEA[ModRM](); + //GetEA[ModRM](); + DoNecGetEAOpCode(ModRM); + + //I.regs.w[mod_RM.regw[ModRM]] = EO; I.regs.b[mod_RM.regw[ModRM] * 2] = (byte)(EO % 0x100); I.regs.b[mod_RM.regw[ModRM] * 2 + 1] = (byte)(EO / 0x100); @@ -2203,7 +2216,10 @@ case 0xad: CLK(2); if (c != 0) do { i_lodsw(); c--; } while (c > 0); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xae: CLK(2); if (c != 0) do { i_scasb(); c--; } while (c > 0 && ZF() == false); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xaf: CLK(2); if (c != 0) do { i_scasw(); c--; } while (c > 0 && ZF() == false); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; - default: nec_instruction[next](); break; + default: + //nec_instruction[next](); + DoInstructionOpCode(next); + break; } seg_prefix = 0; } @@ -2234,7 +2250,10 @@ case 0xad: CLK(2); if (c != 0) do { i_lodsw(); c--; } while (c > 0); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xae: CLK(2); if (c != 0) do { i_scasb(); c--; } while (c > 0 && ZF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; case 0xaf: CLK(2); if (c != 0) do { i_scasw(); c--; } while (c > 0 && ZF()); I.regs.b[2] = (byte)(c % 0x100); I.regs.b[3] = (byte)(c / 0x100); break; - default: nec_instruction[next](); break; + default: + //nec_instruction[next](); + DoInstructionOpCode(next); + break; } seg_prefix = 0; } @@ -2419,8 +2438,21 @@ tmp = GetRMByte(ModRM); switch (ModRM & 0x38) { - case 0x00: tmp1 = (byte)(tmp + 1); I.OverVal = (uint)((tmp == 0x7f) ? 1 : 0); SetAF(tmp1, tmp, 1); SetSZPF_Byte(tmp1); PutbackRMByte(ModRM, (byte)tmp1); CLKM(ModRM, 2, 2, 2, 16, 16, 7); break; - case 0x08: tmp1 = (byte)(tmp - 1); I.OverVal = (uint)((tmp == 0x80) ? 1 : 0); SetAF(tmp1, tmp, 1); SetSZPF_Byte(tmp1); PutbackRMByte(ModRM, (byte)tmp1); CLKM(ModRM, 2, 2, 2, 16, 16, 7); break; + case 0x00: + tmp1 = (byte)(tmp + 1); + I.OverVal = (uint)((tmp == 0x7f) ? 1 : 0); + SetAF(tmp1, tmp, 1); + SetSZPF_Byte(tmp1); + PutbackRMByte(ModRM, (byte)tmp1); + CLKM(ModRM, 2, 2, 2, 16, 16, 7); + break; + case 0x08: + tmp1 = (byte)(tmp - 1); + I.OverVal = (uint)((tmp == 0x80) ? 1 : 0); + SetAF(tmp1, tmp, 1); SetSZPF_Byte(tmp1); + PutbackRMByte(ModRM, (byte)tmp1); + CLKM(ModRM, 2, 2, 2, 16, 16, 7); + break; default: break; } } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecModrm.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecModrm.cs index 4f4eb6e5..010c423b 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecModrm.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/NecModrm.cs @@ -12,7 +12,11 @@ } ushort GetRMWord(int ModRM) { - return (ushort)(ModRM >= 0xc0 ? I.regs.b[mod_RM.RMw[ModRM] * 2] + I.regs.b[mod_RM.RMw[ModRM] * 2 + 1] * 0x100 : ReadWord(GetEA[ModRM]())); + return (ushort)(ModRM >= 0xc0 ? I.regs.b[mod_RM.RMw[ModRM] * 2] + I.regs.b[mod_RM.RMw[ModRM] * 2 + 1] * 0x100 : + ReadWord( + //GetEA[ModRM]() + DoNecGetEAOpCode(ModRM) + )); } void PutbackRMWord(int ModRM, ushort val) { @@ -41,7 +45,10 @@ } else { - WriteWord(GetEA[ModRM](), val); + WriteWord( + //GetEA[ModRM]() + DoNecGetEAOpCode(ModRM) + , val); } } void PutImmRMWord(int ModRM) @@ -56,14 +63,18 @@ } else { - EA = GetEA[ModRM](); + //EA = GetEA[ModRM](); + EA = DoNecGetEAOpCode(ModRM); val = FETCHWORD(); WriteWord(EA, val); } } byte GetRMByte(int ModRM) { - return ((ModRM) >= 0xc0 ? I.regs.b[mod_RM.RMb[ModRM]] : ReadByte(GetEA[ModRM]())); + return ((ModRM) >= 0xc0 ? I.regs.b[mod_RM.RMb[ModRM]] : ReadByte( + //GetEA[ModRM]() + DoNecGetEAOpCode(ModRM) + )); } void PutRMByte(int ModRM, byte val) { @@ -73,7 +84,10 @@ } else { - WriteByte(GetEA[ModRM](), val); + WriteByte( + //GetEA[ModRM]() + DoNecGetEAOpCode(ModRM) + , val); } } void PutImmRMByte(int ModRM) @@ -84,7 +98,8 @@ } else { - EA = GetEA[ModRM](); + //EA = GetEA[ModRM](); + EA = DoNecGetEAOpCode(ModRM); WriteByte(EA, FETCH()); } } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Do.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Do.cs new file mode 100644 index 00000000..010873a7 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Do.cs @@ -0,0 +1,44 @@ +namespace cpu.nec +{ + public partial class Nec + { + + /// + /// 重写的Nec GetEAOpCode指令调度 + /// + /// + public int DoNecGetEAOpCode(int op) + { + NecGetEAOpCode opType = NecGetEAOpCodeArr[op]; + switch (opType) + { + case NecGetEAOpCode.EA_000: return EA_000(); + case NecGetEAOpCode.EA_001: return EA_001(); + case NecGetEAOpCode.EA_002: return EA_002(); + case NecGetEAOpCode.EA_003: return EA_003(); + case NecGetEAOpCode.EA_004: return EA_004(); + case NecGetEAOpCode.EA_005: return EA_005(); + case NecGetEAOpCode.EA_006: return EA_006(); + case NecGetEAOpCode.EA_007: return EA_007(); + case NecGetEAOpCode.EA_100: return EA_100(); + case NecGetEAOpCode.EA_101: return EA_101(); + case NecGetEAOpCode.EA_102: return EA_102(); + case NecGetEAOpCode.EA_103: return EA_103(); + case NecGetEAOpCode.EA_104: return EA_104(); + case NecGetEAOpCode.EA_105: return EA_105(); + case NecGetEAOpCode.EA_106: return EA_106(); + case NecGetEAOpCode.EA_107: return EA_107(); + case NecGetEAOpCode.EA_200: return EA_200(); + case NecGetEAOpCode.EA_201: return EA_201(); + case NecGetEAOpCode.EA_202: return EA_202(); + case NecGetEAOpCode.EA_203: return EA_203(); + case NecGetEAOpCode.EA_204: return EA_204(); + case NecGetEAOpCode.EA_205: return EA_205(); + case NecGetEAOpCode.EA_206: return EA_206(); + case NecGetEAOpCode.EA_207: return EA_207(); + default: + throw new System.Exception("NecGetEAOpCode Err"); + } + } + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Do.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Do.cs.meta new file mode 100644 index 00000000..60bc79c2 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Do.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 595009a52b5a796458afde459dc08caa \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Enum.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Enum.cs new file mode 100644 index 00000000..50b26469 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Enum.cs @@ -0,0 +1,233 @@ +namespace cpu.nec +{ + partial class Nec + { + /// + /// 自定义Nec GetEA 指令集枚举 + /// + public enum NecGetEAOpCode : byte + { + EA_000, + EA_001, + EA_002, + EA_003, + EA_004, + EA_005, + EA_006, + EA_007, + EA_100, + EA_101, + EA_102, + EA_103, + EA_104, + EA_105, + EA_106, + EA_107, + EA_200, + EA_201, + EA_202, + EA_203, + EA_204, + EA_205, + EA_206, + EA_207 + } + + + static readonly NecGetEAOpCode[] NecGetEAOpCodeArr = new NecGetEAOpCode[] + { + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_000, + NecGetEAOpCode.EA_001, + NecGetEAOpCode.EA_002, + NecGetEAOpCode.EA_003, + NecGetEAOpCode.EA_004, + NecGetEAOpCode.EA_005, + NecGetEAOpCode.EA_006, + NecGetEAOpCode.EA_007, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_100, + NecGetEAOpCode.EA_101, + NecGetEAOpCode.EA_102, + NecGetEAOpCode.EA_103, + NecGetEAOpCode.EA_104, + NecGetEAOpCode.EA_105, + NecGetEAOpCode.EA_106, + NecGetEAOpCode.EA_107, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207, + NecGetEAOpCode.EA_200, + NecGetEAOpCode.EA_201, + NecGetEAOpCode.EA_202, + NecGetEAOpCode.EA_203, + NecGetEAOpCode.EA_204, + NecGetEAOpCode.EA_205, + NecGetEAOpCode.EA_206, + NecGetEAOpCode.EA_207 + }; + }; +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Enum.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Enum.cs.meta new file mode 100644 index 00000000..7c2d17dc --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_GetEA.OpCode.Enum.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 161d73b6e60175c40ad7b8a82e5def6a \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Do.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Do.cs new file mode 100644 index 00000000..bba52641 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Do.cs @@ -0,0 +1,265 @@ +namespace cpu.nec +{ + public partial class Nec + { + + /// + /// 重写的Nec Instruction指令调度 + /// + /// + public void DoInstructionOpCode(int op) + { + NecInstructionOpCode opType = NecInstructionOpCodeArr[op]; + switch (opType) + { + case NecInstructionOpCode.i_add_br8: i_add_br8(); return; + case NecInstructionOpCode.i_add_wr16: i_add_wr16(); return; + case NecInstructionOpCode.i_add_r8b: i_add_r8b(); return; + case NecInstructionOpCode.i_add_r16w: i_add_r16w(); return; + case NecInstructionOpCode.i_add_ald8: i_add_ald8(); return; + case NecInstructionOpCode.i_add_axd16: i_add_axd16(); return; + case NecInstructionOpCode.i_push_es: i_push_es(); return; + case NecInstructionOpCode.i_pop_es: i_pop_es(); return; + case NecInstructionOpCode.i_or_br8: i_or_br8(); return; + case NecInstructionOpCode.i_or_wr16: i_or_wr16(); return; + case NecInstructionOpCode.i_or_r8b: i_or_r8b(); return; + case NecInstructionOpCode.i_or_r16w: i_or_r16w(); return; + case NecInstructionOpCode.i_or_ald8: i_or_ald8(); return; + case NecInstructionOpCode.i_or_axd16: i_or_axd16(); return; + case NecInstructionOpCode.i_push_cs: i_push_cs(); return; + case NecInstructionOpCode.i_pre_nec: i_pre_nec(); return; + case NecInstructionOpCode.i_adc_br8: i_adc_br8(); return; + case NecInstructionOpCode.i_adc_wr16: i_adc_wr16(); return; + case NecInstructionOpCode.i_adc_r8b: i_adc_r8b(); return; + case NecInstructionOpCode.i_adc_r16w: i_adc_r16w(); return; + case NecInstructionOpCode.i_adc_ald8: i_adc_ald8(); return; + case NecInstructionOpCode.i_adc_axd16: i_adc_axd16(); return; + case NecInstructionOpCode.i_push_ss: i_push_ss(); return; + case NecInstructionOpCode.i_pop_ss: i_pop_ss(); return; + case NecInstructionOpCode.i_sbb_br8: i_sbb_br8(); return; + case NecInstructionOpCode.i_sbb_wr16: i_sbb_wr16(); return; + case NecInstructionOpCode.i_sbb_r8b: i_sbb_r8b(); return; + case NecInstructionOpCode.i_sbb_r16w: i_sbb_r16w(); return; + case NecInstructionOpCode.i_sbb_ald8: i_sbb_ald8(); return; + case NecInstructionOpCode.i_sbb_axd16: i_sbb_axd16(); return; + case NecInstructionOpCode.i_push_ds: i_push_ds(); return; + case NecInstructionOpCode.i_pop_ds: i_pop_ds(); return; + case NecInstructionOpCode.i_and_br8: i_and_br8(); return; + case NecInstructionOpCode.i_and_wr16: i_and_wr16(); return; + case NecInstructionOpCode.i_and_r8b: i_and_r8b(); return; + case NecInstructionOpCode.i_and_r16w: i_and_r16w(); return; + case NecInstructionOpCode.i_and_ald8: i_and_ald8(); return; + case NecInstructionOpCode.i_and_axd16: i_and_axd16(); return; + case NecInstructionOpCode.i_es: i_es(); return; + case NecInstructionOpCode.i_daa: i_daa(); return; + case NecInstructionOpCode.i_sub_br8: i_sub_br8(); return; + case NecInstructionOpCode.i_sub_wr16: i_sub_wr16(); return; + case NecInstructionOpCode.i_sub_r8b: i_sub_r8b(); return; + case NecInstructionOpCode.i_sub_r16w: i_sub_r16w(); return; + case NecInstructionOpCode.i_sub_ald8: i_sub_ald8(); return; + case NecInstructionOpCode.i_sub_axd16: i_sub_axd16(); return; + case NecInstructionOpCode.i_cs: i_cs(); return; + case NecInstructionOpCode.i_das: i_das(); return; + case NecInstructionOpCode.i_xor_br8: i_xor_br8(); return; + case NecInstructionOpCode.i_xor_wr16: i_xor_wr16(); return; + case NecInstructionOpCode.i_xor_r8b: i_xor_r8b(); return; + case NecInstructionOpCode.i_xor_r16w: i_xor_r16w(); return; + case NecInstructionOpCode.i_xor_ald8: i_xor_ald8(); return; + case NecInstructionOpCode.i_xor_axd16: i_xor_axd16(); return; + case NecInstructionOpCode.i_ss: i_ss(); return; + case NecInstructionOpCode.i_aaa: i_aaa(); return; + case NecInstructionOpCode.i_cmp_br8: i_cmp_br8(); return; + case NecInstructionOpCode.i_cmp_wr16: i_cmp_wr16(); return; + case NecInstructionOpCode.i_cmp_r8b: i_cmp_r8b(); return; + case NecInstructionOpCode.i_cmp_r16w: i_cmp_r16w(); return; + case NecInstructionOpCode.i_cmp_ald8: i_cmp_ald8(); return; + case NecInstructionOpCode.i_cmp_axd16: i_cmp_axd16(); return; + case NecInstructionOpCode.i_ds: i_ds(); return; + case NecInstructionOpCode.i_aas: i_aas(); return; + case NecInstructionOpCode.i_inc_ax: i_inc_ax(); return; + case NecInstructionOpCode.i_inc_cx: i_inc_cx(); return; + case NecInstructionOpCode.i_inc_dx: i_inc_dx(); return; + case NecInstructionOpCode.i_inc_bx: i_inc_bx(); return; + case NecInstructionOpCode.i_inc_sp: i_inc_sp(); return; + case NecInstructionOpCode.i_inc_bp: i_inc_bp(); return; + case NecInstructionOpCode.i_inc_si: i_inc_si(); return; + case NecInstructionOpCode.i_inc_di: i_inc_di(); return; + case NecInstructionOpCode.i_dec_ax: i_dec_ax(); return; + case NecInstructionOpCode.i_dec_cx: i_dec_cx(); return; + case NecInstructionOpCode.i_dec_dx: i_dec_dx(); return; + case NecInstructionOpCode.i_dec_bx: i_dec_bx(); return; + case NecInstructionOpCode.i_dec_sp: i_dec_sp(); return; + case NecInstructionOpCode.i_dec_bp: i_dec_bp(); return; + case NecInstructionOpCode.i_dec_si: i_dec_si(); return; + case NecInstructionOpCode.i_dec_di: i_dec_di(); return; + case NecInstructionOpCode.i_push_ax: i_push_ax(); return; + case NecInstructionOpCode.i_push_cx: i_push_cx(); return; + case NecInstructionOpCode.i_push_dx: i_push_dx(); return; + case NecInstructionOpCode.i_push_bx: i_push_bx(); return; + case NecInstructionOpCode.i_push_sp: i_push_sp(); return; + case NecInstructionOpCode.i_push_bp: i_push_bp(); return; + case NecInstructionOpCode.i_push_si: i_push_si(); return; + case NecInstructionOpCode.i_push_di: i_push_di(); return; + case NecInstructionOpCode.i_pop_ax: i_pop_ax(); return; + case NecInstructionOpCode.i_pop_cx: i_pop_cx(); return; + case NecInstructionOpCode.i_pop_dx: i_pop_dx(); return; + case NecInstructionOpCode.i_pop_bx: i_pop_bx(); return; + case NecInstructionOpCode.i_pop_sp: i_pop_sp(); return; + case NecInstructionOpCode.i_pop_bp: i_pop_bp(); return; + case NecInstructionOpCode.i_pop_si: i_pop_si(); return; + case NecInstructionOpCode.i_pop_di: i_pop_di(); return; + case NecInstructionOpCode.i_pusha: i_pusha(); return; + case NecInstructionOpCode.i_popa: i_popa(); return; + case NecInstructionOpCode.i_chkind: i_chkind(); return; + case NecInstructionOpCode.i_brkn: i_brkn(); return; + case NecInstructionOpCode.i_repnc: i_repnc(); return; + case NecInstructionOpCode.i_repc: i_repc(); return; + case NecInstructionOpCode.i_invalid: i_invalid(); return; + case NecInstructionOpCode.i_push_d16: i_push_d16(); return; + case NecInstructionOpCode.i_imul_d16: i_imul_d16(); return; + case NecInstructionOpCode.i_push_d8: i_push_d8(); return; + case NecInstructionOpCode.i_imul_d8: i_imul_d8(); return; + case NecInstructionOpCode.i_insb: i_insb(); return; + case NecInstructionOpCode.i_insw: i_insw(); return; + case NecInstructionOpCode.i_outsb: i_outsb(); return; + case NecInstructionOpCode.i_outsw: i_outsw(); return; + case NecInstructionOpCode.i_jo: i_jo(); return; + case NecInstructionOpCode.i_jno: i_jno(); return; + case NecInstructionOpCode.i_jc: i_jc(); return; + case NecInstructionOpCode.i_jnc: i_jnc(); return; + case NecInstructionOpCode.i_jz: i_jz(); return; + case NecInstructionOpCode.i_jnz: i_jnz(); return; + case NecInstructionOpCode.i_jce: i_jce(); return; + case NecInstructionOpCode.i_jnce: i_jnce(); return; + case NecInstructionOpCode.i_js: i_js(); return; + case NecInstructionOpCode.i_jns: i_jns(); return; + case NecInstructionOpCode.i_jp: i_jp(); return; + case NecInstructionOpCode.i_jnp: i_jnp(); return; + case NecInstructionOpCode.i_jl: i_jl(); return; + case NecInstructionOpCode.i_jnl: i_jnl(); return; + case NecInstructionOpCode.i_jle: i_jle(); return; + case NecInstructionOpCode.i_jnle: i_jnle(); return; + case NecInstructionOpCode.i_80pre: i_80pre(); return; + case NecInstructionOpCode.i_81pre: i_81pre(); return; + case NecInstructionOpCode.i_82pre: i_82pre(); return; + case NecInstructionOpCode.i_83pre: i_83pre(); return; + case NecInstructionOpCode.i_test_br8: i_test_br8(); return; + case NecInstructionOpCode.i_test_wr16: i_test_wr16(); return; + case NecInstructionOpCode.i_xchg_br8: i_xchg_br8(); return; + case NecInstructionOpCode.i_xchg_wr16: i_xchg_wr16(); return; + case NecInstructionOpCode.i_mov_br8: i_mov_br8(); return; + case NecInstructionOpCode.i_mov_wr16: i_mov_wr16(); return; + case NecInstructionOpCode.i_mov_r8b: i_mov_r8b(); return; + case NecInstructionOpCode.i_mov_r16w: i_mov_r16w(); return; + case NecInstructionOpCode.i_mov_wsreg: i_mov_wsreg(); return; + case NecInstructionOpCode.i_lea: i_lea(); return; + case NecInstructionOpCode.i_mov_sregw: i_mov_sregw(); return; + case NecInstructionOpCode.i_popw: i_popw(); return; + case NecInstructionOpCode.i_nop: i_nop(); return; + case NecInstructionOpCode.i_xchg_axcx: i_xchg_axcx(); return; + case NecInstructionOpCode.i_xchg_axdx: i_xchg_axdx(); return; + case NecInstructionOpCode.i_xchg_axbx: i_xchg_axbx(); return; + case NecInstructionOpCode.i_xchg_axsp: i_xchg_axsp(); return; + case NecInstructionOpCode.i_xchg_axbp: i_xchg_axbp(); return; + case NecInstructionOpCode.i_xchg_axsi: i_xchg_axsi(); return; + case NecInstructionOpCode.i_xchg_axdi: i_xchg_axdi(); return; + case NecInstructionOpCode.i_cbw: i_cbw(); return; + case NecInstructionOpCode.i_cwd: i_cwd(); return; + case NecInstructionOpCode.i_call_far: i_call_far(); return; + case NecInstructionOpCode.i_wait: i_wait(); return; + case NecInstructionOpCode.i_pushf: i_pushf(); return; + case NecInstructionOpCode.i_popf: i_popf(); return; + case NecInstructionOpCode.i_sahf: i_sahf(); return; + case NecInstructionOpCode.i_lahf: i_lahf(); return; + case NecInstructionOpCode.i_mov_aldisp: i_mov_aldisp(); return; + case NecInstructionOpCode.i_mov_axdisp: i_mov_axdisp(); return; + case NecInstructionOpCode.i_mov_dispal: i_mov_dispal(); return; + case NecInstructionOpCode.i_mov_dispax: i_mov_dispax(); return; + case NecInstructionOpCode.i_movsb: i_movsb(); return; + case NecInstructionOpCode.i_movsw: i_movsw(); return; + case NecInstructionOpCode.i_cmpsb: i_cmpsb(); return; + case NecInstructionOpCode.i_cmpsw: i_cmpsw(); return; + case NecInstructionOpCode.i_test_ald8: i_test_ald8(); return; + case NecInstructionOpCode.i_test_axd16: i_test_axd16(); return; + case NecInstructionOpCode.i_stosb: i_stosb(); return; + case NecInstructionOpCode.i_stosw: i_stosw(); return; + case NecInstructionOpCode.i_lodsb: i_lodsb(); return; + case NecInstructionOpCode.i_lodsw: i_lodsw(); return; + case NecInstructionOpCode.i_scasb: i_scasb(); return; + case NecInstructionOpCode.i_scasw: i_scasw(); return; + case NecInstructionOpCode.i_mov_ald8: i_mov_ald8(); return; + case NecInstructionOpCode.i_mov_cld8: i_mov_cld8(); return; + case NecInstructionOpCode.i_mov_dld8: i_mov_dld8(); return; + case NecInstructionOpCode.i_mov_bld8: i_mov_bld8(); return; + case NecInstructionOpCode.i_mov_ahd8: i_mov_ahd8(); return; + case NecInstructionOpCode.i_mov_chd8: i_mov_chd8(); return; + case NecInstructionOpCode.i_mov_dhd8: i_mov_dhd8(); return; + case NecInstructionOpCode.i_mov_bhd8: i_mov_bhd8(); return; + case NecInstructionOpCode.i_mov_axd16: i_mov_axd16(); return; + case NecInstructionOpCode.i_mov_cxd16: i_mov_cxd16(); return; + case NecInstructionOpCode.i_mov_dxd16: i_mov_dxd16(); return; + case NecInstructionOpCode.i_mov_bxd16: i_mov_bxd16(); return; + case NecInstructionOpCode.i_mov_spd16: i_mov_spd16(); return; + case NecInstructionOpCode.i_mov_bpd16: i_mov_bpd16(); return; + case NecInstructionOpCode.i_mov_sid16: i_mov_sid16(); return; + case NecInstructionOpCode.i_mov_did16: i_mov_did16(); return; + case NecInstructionOpCode.i_rotshft_bd8: i_rotshft_bd8(); return; + case NecInstructionOpCode.i_rotshft_wd8: i_rotshft_wd8(); return; + case NecInstructionOpCode.i_ret_d16: i_ret_d16(); return; + case NecInstructionOpCode.i_ret: i_ret(); return; + case NecInstructionOpCode.i_les_dw: i_les_dw(); return; + case NecInstructionOpCode.i_lds_dw: i_lds_dw(); return; + case NecInstructionOpCode.i_mov_bd8: i_mov_bd8(); return; + case NecInstructionOpCode.i_mov_wd16: i_mov_wd16(); return; + case NecInstructionOpCode.i_enter: i_enter(); return; + case NecInstructionOpCode.i_leave: i_leave(); return; + case NecInstructionOpCode.i_retf_d16: i_retf_d16(); return; + case NecInstructionOpCode.i_retf: i_retf(); return; + case NecInstructionOpCode.i_int3: i_int3(); return; + case NecInstructionOpCode.i_int: i_int(); return; + case NecInstructionOpCode.i_into: i_into(); return; + case NecInstructionOpCode.i_iret: i_iret(); return; + case NecInstructionOpCode.i_rotshft_b: i_rotshft_b(); return; + case NecInstructionOpCode.i_rotshft_w: i_rotshft_w(); return; + case NecInstructionOpCode.i_rotshft_bcl: i_rotshft_bcl(); return; + case NecInstructionOpCode.i_rotshft_wcl: i_rotshft_wcl(); return; + case NecInstructionOpCode.i_aam: i_aam(); return; + case NecInstructionOpCode.i_aad: i_aad(); return; + case NecInstructionOpCode.i_setalc: i_setalc(); return; + case NecInstructionOpCode.i_trans: i_trans(); return; + case NecInstructionOpCode.i_fpo: i_fpo(); return; + case NecInstructionOpCode.i_loopne: i_loopne(); return; + case NecInstructionOpCode.i_loope: i_loope(); return; + case NecInstructionOpCode.i_loop: i_loop(); return; + case NecInstructionOpCode.i_jcxz: i_jcxz(); return; + case NecInstructionOpCode.i_inal: i_inal(); return; + case NecInstructionOpCode.i_inax: i_inax(); return; + case NecInstructionOpCode.i_outal: i_outal(); return; + case NecInstructionOpCode.i_outax: i_outax(); return; + case NecInstructionOpCode.i_call_d16: i_call_d16(); return; + case NecInstructionOpCode.i_jmp_d16: i_jmp_d16(); return; + case NecInstructionOpCode.i_jmp_far: i_jmp_far(); return; + case NecInstructionOpCode.i_jmp_d8: i_jmp_d8(); return; + case NecInstructionOpCode.i_inaldx: i_inaldx(); return; + case NecInstructionOpCode.i_inaxdx: i_inaxdx(); return; + case NecInstructionOpCode.i_outdxal: i_outdxal(); return; + case NecInstructionOpCode.i_outdxax: i_outdxax(); return; + case NecInstructionOpCode.i_lock: i_lock(); return; + case NecInstructionOpCode.i_repne: i_repne(); return; + case NecInstructionOpCode.i_repe: i_repe(); return; + case NecInstructionOpCode.i_hlt: i_hlt(); return; + case NecInstructionOpCode.i_cmc: i_cmc(); return; + case NecInstructionOpCode.i_f6pre: i_f6pre(); return; + case NecInstructionOpCode.i_f7pre: i_f7pre(); return; + case NecInstructionOpCode.i_clc: i_clc(); return; + case NecInstructionOpCode.i_stc: i_stc(); return; + case NecInstructionOpCode.i_di: i_di(); return; + case NecInstructionOpCode.i_ei: i_ei(); return; + case NecInstructionOpCode.i_cld: i_cld(); return; + case NecInstructionOpCode.i_std: i_std(); return; + case NecInstructionOpCode.i_fepre: i_fepre(); return; + case NecInstructionOpCode.i_ffpre: i_ffpre(); return; + } + } + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Do.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Do.cs.meta new file mode 100644 index 00000000..a422dae0 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Do.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f50a2c17a484f2942a22fca915892b5e \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Enum.cs b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Enum.cs new file mode 100644 index 00000000..b0507efb --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Enum.cs @@ -0,0 +1,520 @@ +namespace cpu.nec +{ + partial class Nec + { + /// + /// 自定义Nec指令集枚举 + /// + public enum NecInstructionOpCode : byte + { + i_add_br8, + i_add_wr16, + i_add_r8b, + i_add_r16w, + i_add_ald8, + i_add_axd16, + i_push_es, + i_pop_es, + i_or_br8, + i_or_wr16, + i_or_r8b, + i_or_r16w, + i_or_ald8, + i_or_axd16, + i_push_cs, + i_pre_nec, + i_adc_br8, + i_adc_wr16, + i_adc_r8b, + i_adc_r16w, + i_adc_ald8, + i_adc_axd16, + i_push_ss, + i_pop_ss, + i_sbb_br8, + i_sbb_wr16, + i_sbb_r8b, + i_sbb_r16w, + i_sbb_ald8, + i_sbb_axd16, + i_push_ds, + i_pop_ds, + i_and_br8, + i_and_wr16, + i_and_r8b, + i_and_r16w, + i_and_ald8, + i_and_axd16, + i_es, + i_daa, + i_sub_br8, + i_sub_wr16, + i_sub_r8b, + i_sub_r16w, + i_sub_ald8, + i_sub_axd16, + i_cs, + i_das, + i_xor_br8, + i_xor_wr16, + i_xor_r8b, + i_xor_r16w, + i_xor_ald8, + i_xor_axd16, + i_ss, + i_aaa, + i_cmp_br8, + i_cmp_wr16, + i_cmp_r8b, + i_cmp_r16w, + i_cmp_ald8, + i_cmp_axd16, + i_ds, + i_aas, + i_inc_ax, + i_inc_cx, + i_inc_dx, + i_inc_bx, + i_inc_sp, + i_inc_bp, + i_inc_si, + i_inc_di, + i_dec_ax, + i_dec_cx, + i_dec_dx, + i_dec_bx, + i_dec_sp, + i_dec_bp, + i_dec_si, + i_dec_di, + i_push_ax, + i_push_cx, + i_push_dx, + i_push_bx, + i_push_sp, + i_push_bp, + i_push_si, + i_push_di, + i_pop_ax, + i_pop_cx, + i_pop_dx, + i_pop_bx, + i_pop_sp, + i_pop_bp, + i_pop_si, + i_pop_di, + i_pusha, + i_popa, + i_chkind, + i_brkn, + i_repnc, + i_repc, + i_invalid, + i_push_d16, + i_imul_d16, + i_push_d8, + i_imul_d8, + i_insb, + i_insw, + i_outsb, + i_outsw, + i_jo, + i_jno, + i_jc, + i_jnc, + i_jz, + i_jnz, + i_jce, + i_jnce, + i_js, + i_jns, + i_jp, + i_jnp, + i_jl, + i_jnl, + i_jle, + i_jnle, + i_80pre, + i_81pre, + i_82pre, + i_83pre, + i_test_br8, + i_test_wr16, + i_xchg_br8, + i_xchg_wr16, + i_mov_br8, + i_mov_wr16, + i_mov_r8b, + i_mov_r16w, + i_mov_wsreg, + i_lea, + i_mov_sregw, + i_popw, + i_nop, + i_xchg_axcx, + i_xchg_axdx, + i_xchg_axbx, + i_xchg_axsp, + i_xchg_axbp, + i_xchg_axsi, + i_xchg_axdi, + i_cbw, + i_cwd, + i_call_far, + i_wait, + i_pushf, + i_popf, + i_sahf, + i_lahf, + i_mov_aldisp, + i_mov_axdisp, + i_mov_dispal, + i_mov_dispax, + i_movsb, + i_movsw, + i_cmpsb, + i_cmpsw, + i_test_ald8, + i_test_axd16, + i_stosb, + i_stosw, + i_lodsb, + i_lodsw, + i_scasb, + i_scasw, + i_mov_ald8, + i_mov_cld8, + i_mov_dld8, + i_mov_bld8, + i_mov_ahd8, + i_mov_chd8, + i_mov_dhd8, + i_mov_bhd8, + i_mov_axd16, + i_mov_cxd16, + i_mov_dxd16, + i_mov_bxd16, + i_mov_spd16, + i_mov_bpd16, + i_mov_sid16, + i_mov_did16, + i_rotshft_bd8, + i_rotshft_wd8, + i_ret_d16, + i_ret, + i_les_dw, + i_lds_dw, + i_mov_bd8, + i_mov_wd16, + i_enter, + i_leave, + i_retf_d16, + i_retf, + i_int3, + i_int, + i_into, + i_iret, + i_rotshft_b, + i_rotshft_w, + i_rotshft_bcl, + i_rotshft_wcl, + i_aam, + i_aad, + i_setalc, + i_trans, + i_fpo, + i_loopne, + i_loope, + i_loop, + i_jcxz, + i_inal, + i_inax, + i_outal, + i_outax, + i_call_d16, + i_jmp_d16, + i_jmp_far, + i_jmp_d8, + i_inaldx, + i_inaxdx, + i_outdxal, + i_outdxax, + i_lock, + i_repne, + i_repe, + i_hlt, + i_cmc, + i_f6pre, + i_f7pre, + i_clc, + i_stc, + i_di, + i_ei, + i_cld, + i_std, + i_fepre, + i_ffpre + } + + + static readonly NecInstructionOpCode[] NecInstructionOpCodeArr = new NecInstructionOpCode[] + { + NecInstructionOpCode.i_add_br8, + NecInstructionOpCode.i_add_wr16, + NecInstructionOpCode.i_add_r8b, + NecInstructionOpCode.i_add_r16w, + NecInstructionOpCode.i_add_ald8, + NecInstructionOpCode.i_add_axd16, + NecInstructionOpCode.i_push_es, + NecInstructionOpCode.i_pop_es, + NecInstructionOpCode.i_or_br8, + NecInstructionOpCode.i_or_wr16, + NecInstructionOpCode.i_or_r8b, + NecInstructionOpCode.i_or_r16w, + NecInstructionOpCode.i_or_ald8, + NecInstructionOpCode.i_or_axd16, + NecInstructionOpCode.i_push_cs, + NecInstructionOpCode.i_pre_nec, + NecInstructionOpCode.i_adc_br8, + NecInstructionOpCode.i_adc_wr16, + NecInstructionOpCode.i_adc_r8b, + NecInstructionOpCode.i_adc_r16w, + NecInstructionOpCode.i_adc_ald8, + NecInstructionOpCode.i_adc_axd16, + NecInstructionOpCode.i_push_ss, + NecInstructionOpCode.i_pop_ss, + NecInstructionOpCode.i_sbb_br8, + NecInstructionOpCode.i_sbb_wr16, + NecInstructionOpCode.i_sbb_r8b, + NecInstructionOpCode.i_sbb_r16w, + NecInstructionOpCode.i_sbb_ald8, + NecInstructionOpCode.i_sbb_axd16, + NecInstructionOpCode.i_push_ds, + NecInstructionOpCode.i_pop_ds, + NecInstructionOpCode.i_and_br8, + NecInstructionOpCode.i_and_wr16, + NecInstructionOpCode.i_and_r8b, + NecInstructionOpCode.i_and_r16w, + NecInstructionOpCode.i_and_ald8, + NecInstructionOpCode.i_and_axd16, + NecInstructionOpCode.i_es, + NecInstructionOpCode.i_daa, + NecInstructionOpCode.i_sub_br8, + NecInstructionOpCode.i_sub_wr16, + NecInstructionOpCode.i_sub_r8b, + NecInstructionOpCode.i_sub_r16w, + NecInstructionOpCode.i_sub_ald8, + NecInstructionOpCode.i_sub_axd16, + NecInstructionOpCode.i_cs, + NecInstructionOpCode.i_das, + NecInstructionOpCode.i_xor_br8, + NecInstructionOpCode.i_xor_wr16, + NecInstructionOpCode.i_xor_r8b, + NecInstructionOpCode.i_xor_r16w, + NecInstructionOpCode.i_xor_ald8, + NecInstructionOpCode.i_xor_axd16, + NecInstructionOpCode.i_ss, + NecInstructionOpCode.i_aaa, + NecInstructionOpCode.i_cmp_br8, + NecInstructionOpCode.i_cmp_wr16, + NecInstructionOpCode.i_cmp_r8b, + NecInstructionOpCode.i_cmp_r16w, + NecInstructionOpCode.i_cmp_ald8, + NecInstructionOpCode.i_cmp_axd16, + NecInstructionOpCode.i_ds, + NecInstructionOpCode.i_aas, + NecInstructionOpCode.i_inc_ax, + NecInstructionOpCode.i_inc_cx, + NecInstructionOpCode.i_inc_dx, + NecInstructionOpCode.i_inc_bx, + NecInstructionOpCode.i_inc_sp, + NecInstructionOpCode.i_inc_bp, + NecInstructionOpCode.i_inc_si, + NecInstructionOpCode.i_inc_di, + NecInstructionOpCode.i_dec_ax, + NecInstructionOpCode.i_dec_cx, + NecInstructionOpCode.i_dec_dx, + NecInstructionOpCode.i_dec_bx, + NecInstructionOpCode.i_dec_sp, + NecInstructionOpCode.i_dec_bp, + NecInstructionOpCode.i_dec_si, + NecInstructionOpCode.i_dec_di, + NecInstructionOpCode.i_push_ax, + NecInstructionOpCode.i_push_cx, + NecInstructionOpCode.i_push_dx, + NecInstructionOpCode.i_push_bx, + NecInstructionOpCode.i_push_sp, + NecInstructionOpCode.i_push_bp, + NecInstructionOpCode.i_push_si, + NecInstructionOpCode.i_push_di, + NecInstructionOpCode.i_pop_ax, + NecInstructionOpCode.i_pop_cx, + NecInstructionOpCode.i_pop_dx, + NecInstructionOpCode.i_pop_bx, + NecInstructionOpCode.i_pop_sp, + NecInstructionOpCode.i_pop_bp, + NecInstructionOpCode.i_pop_si, + NecInstructionOpCode.i_pop_di, + NecInstructionOpCode.i_pusha, + NecInstructionOpCode.i_popa, + NecInstructionOpCode.i_chkind, + NecInstructionOpCode.i_brkn, + NecInstructionOpCode.i_repnc, + NecInstructionOpCode.i_repc, + NecInstructionOpCode.i_invalid, + NecInstructionOpCode.i_invalid, + NecInstructionOpCode.i_push_d16, + NecInstructionOpCode.i_imul_d16, + NecInstructionOpCode.i_push_d8, + NecInstructionOpCode.i_imul_d8, + NecInstructionOpCode.i_insb, + NecInstructionOpCode.i_insw, + NecInstructionOpCode.i_outsb, + NecInstructionOpCode.i_outsw, + NecInstructionOpCode.i_jo, + NecInstructionOpCode.i_jno, + NecInstructionOpCode.i_jc, + NecInstructionOpCode.i_jnc, + NecInstructionOpCode.i_jz, + NecInstructionOpCode.i_jnz, + NecInstructionOpCode.i_jce, + NecInstructionOpCode.i_jnce, + NecInstructionOpCode.i_js, + NecInstructionOpCode.i_jns, + NecInstructionOpCode.i_jp, + NecInstructionOpCode.i_jnp, + NecInstructionOpCode.i_jl, + NecInstructionOpCode.i_jnl, + NecInstructionOpCode.i_jle, + NecInstructionOpCode.i_jnle, + NecInstructionOpCode.i_80pre, + NecInstructionOpCode.i_81pre, + NecInstructionOpCode.i_82pre, + NecInstructionOpCode.i_83pre, + NecInstructionOpCode.i_test_br8, + NecInstructionOpCode.i_test_wr16, + NecInstructionOpCode.i_xchg_br8, + NecInstructionOpCode.i_xchg_wr16, + NecInstructionOpCode.i_mov_br8, + NecInstructionOpCode.i_mov_wr16, + NecInstructionOpCode.i_mov_r8b, + NecInstructionOpCode.i_mov_r16w, + NecInstructionOpCode.i_mov_wsreg, + NecInstructionOpCode.i_lea, + NecInstructionOpCode.i_mov_sregw, + NecInstructionOpCode.i_popw, + NecInstructionOpCode.i_nop, + NecInstructionOpCode.i_xchg_axcx, + NecInstructionOpCode.i_xchg_axdx, + NecInstructionOpCode.i_xchg_axbx, + NecInstructionOpCode.i_xchg_axsp, + NecInstructionOpCode.i_xchg_axbp, + NecInstructionOpCode.i_xchg_axsi, + NecInstructionOpCode.i_xchg_axdi, + NecInstructionOpCode.i_cbw, + NecInstructionOpCode.i_cwd, + NecInstructionOpCode.i_call_far, + NecInstructionOpCode.i_wait, + NecInstructionOpCode.i_pushf, + NecInstructionOpCode.i_popf, + NecInstructionOpCode.i_sahf, + NecInstructionOpCode.i_lahf, + NecInstructionOpCode.i_mov_aldisp, + NecInstructionOpCode.i_mov_axdisp, + NecInstructionOpCode.i_mov_dispal, + NecInstructionOpCode.i_mov_dispax, + NecInstructionOpCode.i_movsb, + NecInstructionOpCode.i_movsw, + NecInstructionOpCode.i_cmpsb, + NecInstructionOpCode.i_cmpsw, + NecInstructionOpCode.i_test_ald8, + NecInstructionOpCode.i_test_axd16, + NecInstructionOpCode.i_stosb, + NecInstructionOpCode.i_stosw, + NecInstructionOpCode.i_lodsb, + NecInstructionOpCode.i_lodsw, + NecInstructionOpCode.i_scasb, + NecInstructionOpCode.i_scasw, + NecInstructionOpCode.i_mov_ald8, + NecInstructionOpCode.i_mov_cld8, + NecInstructionOpCode.i_mov_dld8, + NecInstructionOpCode.i_mov_bld8, + NecInstructionOpCode.i_mov_ahd8, + NecInstructionOpCode.i_mov_chd8, + NecInstructionOpCode.i_mov_dhd8, + NecInstructionOpCode.i_mov_bhd8, + NecInstructionOpCode.i_mov_axd16, + NecInstructionOpCode.i_mov_cxd16, + NecInstructionOpCode.i_mov_dxd16, + NecInstructionOpCode.i_mov_bxd16, + NecInstructionOpCode.i_mov_spd16, + NecInstructionOpCode.i_mov_bpd16, + NecInstructionOpCode.i_mov_sid16, + NecInstructionOpCode.i_mov_did16, + NecInstructionOpCode.i_rotshft_bd8, + NecInstructionOpCode.i_rotshft_wd8, + NecInstructionOpCode.i_ret_d16, + NecInstructionOpCode.i_ret, + NecInstructionOpCode.i_les_dw, + NecInstructionOpCode.i_lds_dw, + NecInstructionOpCode.i_mov_bd8, + NecInstructionOpCode.i_mov_wd16, + NecInstructionOpCode.i_enter, + NecInstructionOpCode.i_leave, + NecInstructionOpCode.i_retf_d16, + NecInstructionOpCode.i_retf, + NecInstructionOpCode.i_int3, + NecInstructionOpCode.i_int, + NecInstructionOpCode.i_into, + NecInstructionOpCode.i_iret, + NecInstructionOpCode.i_rotshft_b, + NecInstructionOpCode.i_rotshft_w, + NecInstructionOpCode.i_rotshft_bcl, + NecInstructionOpCode.i_rotshft_wcl, + NecInstructionOpCode.i_aam, + NecInstructionOpCode.i_aad, + NecInstructionOpCode.i_setalc, + NecInstructionOpCode.i_trans, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_fpo, + NecInstructionOpCode.i_loopne, + NecInstructionOpCode.i_loope, + NecInstructionOpCode.i_loop, + NecInstructionOpCode.i_jcxz, + NecInstructionOpCode.i_inal, + NecInstructionOpCode.i_inax, + NecInstructionOpCode.i_outal, + NecInstructionOpCode.i_outax, + NecInstructionOpCode.i_call_d16, + NecInstructionOpCode.i_jmp_d16, + NecInstructionOpCode.i_jmp_far, + NecInstructionOpCode.i_jmp_d8, + NecInstructionOpCode.i_inaldx, + NecInstructionOpCode.i_inaxdx, + NecInstructionOpCode.i_outdxal, + NecInstructionOpCode.i_outdxax, + NecInstructionOpCode.i_lock, + NecInstructionOpCode.i_invalid, + NecInstructionOpCode.i_repne, + NecInstructionOpCode.i_repe, + NecInstructionOpCode.i_hlt, + NecInstructionOpCode.i_cmc, + NecInstructionOpCode.i_f6pre, + NecInstructionOpCode.i_f7pre, + NecInstructionOpCode.i_clc, + NecInstructionOpCode.i_stc, + NecInstructionOpCode.i_di, + NecInstructionOpCode.i_ei, + NecInstructionOpCode.i_cld, + NecInstructionOpCode.i_std, + NecInstructionOpCode.i_fepre, + NecInstructionOpCode.i_ffpre + }; + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Enum.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Enum.cs.meta new file mode 100644 index 00000000..e118b4f5 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/cpu/nec/Nec_instruction.OpCode.Enum.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f41d610c1d67cd745b61dcb36c8b7214 \ No newline at end of file