持续优化
This commit is contained in:
parent
a806deed55
commit
bb32fd3736
@ -1186,6 +1186,54 @@ namespace cpu.m68000
|
||||
}
|
||||
|
||||
|
||||
//void CMP()
|
||||
//{
|
||||
// int dReg = (op >> 9) & 7;
|
||||
// int size = (op >> 6) & 3;
|
||||
// int mode = (op >> 3) & 7;
|
||||
// int reg = (op >> 0) & 7;
|
||||
|
||||
// switch (size)
|
||||
// {
|
||||
// case 0: // byte
|
||||
// {
|
||||
// sbyte a = D[dReg].s8;
|
||||
// sbyte b = ReadValueB(mode, reg);
|
||||
// int result = a - b;
|
||||
// N = (result & 0x80) != 0;
|
||||
// Z = result == 0;
|
||||
// V = result > sbyte.MaxValue || result < sbyte.MinValue;
|
||||
// C = ((a < b) ^ ((a ^ b) >= 0) == false);
|
||||
// pendingCycles -= 4 + EACyclesBW[mode, reg];
|
||||
// return;
|
||||
// }
|
||||
// case 1: // word
|
||||
// {
|
||||
// short a = D[dReg].s16;
|
||||
// short b = ReadValueW(mode, reg);
|
||||
// int result = a - b;
|
||||
// N = (result & 0x8000) != 0;
|
||||
// Z = result == 0;
|
||||
// V = result > short.MaxValue || result < short.MinValue;
|
||||
// C = ((a < b) ^ ((a ^ b) >= 0) == false);
|
||||
// pendingCycles -= 4 + EACyclesBW[mode, reg];
|
||||
// return;
|
||||
// }
|
||||
// case 2: // long
|
||||
// {
|
||||
// int a = D[dReg].s32;
|
||||
// int b = ReadValueL(mode, reg);
|
||||
// long result = (long)a - (long)b;
|
||||
// N = (result & 0x80000000) != 0;
|
||||
// Z = (uint)result == 0;
|
||||
// V = result > int.MaxValue || result < int.MinValue;
|
||||
// C = ((a < b) ^ ((a ^ b) >= 0) == false);
|
||||
// pendingCycles -= 6 + EACyclesL[mode, reg];
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
void CMP()
|
||||
{
|
||||
int dReg = (op >> 9) & 7;
|
||||
@ -1197,7 +1245,7 @@ namespace cpu.m68000
|
||||
{
|
||||
case 0: // byte
|
||||
{
|
||||
sbyte a = D[dReg].s8;
|
||||
sbyte a = (D + dReg)->s8;
|
||||
sbyte b = ReadValueB(mode, reg);
|
||||
int result = a - b;
|
||||
N = (result & 0x80) != 0;
|
||||
@ -1209,7 +1257,7 @@ namespace cpu.m68000
|
||||
}
|
||||
case 1: // word
|
||||
{
|
||||
short a = D[dReg].s16;
|
||||
short a = (D+ dReg)->s16;
|
||||
short b = ReadValueW(mode, reg);
|
||||
int result = a - b;
|
||||
N = (result & 0x8000) != 0;
|
||||
@ -1221,7 +1269,7 @@ namespace cpu.m68000
|
||||
}
|
||||
case 2: // long
|
||||
{
|
||||
int a = D[dReg].s32;
|
||||
int a = (D + dReg)->s32;
|
||||
int b = ReadValueL(mode, reg);
|
||||
long result = (long)a - (long)b;
|
||||
N = (result & 0x80000000) != 0;
|
||||
|
||||
@ -223,7 +223,8 @@ namespace MAME.Core
|
||||
address &= 0xffffff;
|
||||
if (address >= 0x000000 && address + 1 <= 0x00007f)
|
||||
{
|
||||
byte* ptr = &Memory.mainrom[address];
|
||||
byte* ptr_0 = &Memory.mainrom[0];
|
||||
byte* ptr = ptr_0 + (address);
|
||||
if (main_cpu_vector_table_source == 0)
|
||||
{
|
||||
return (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
@ -236,7 +237,8 @@ namespace MAME.Core
|
||||
}
|
||||
else if (address >= 0x000080 && address + 1 <= 0x0fffff)
|
||||
{
|
||||
byte* ptr = &Memory.mainrom[address];
|
||||
byte* ptr_0 = &Memory.mainrom[0];
|
||||
byte* ptr = ptr_0 + (address);
|
||||
//if (address >= 0x142B9 && address <= 0x142C9)
|
||||
//{
|
||||
// //m68000Form.iStatus = 1;
|
||||
@ -245,19 +247,22 @@ namespace MAME.Core
|
||||
}
|
||||
else if (address >= 0x100000 && address + 1 <= 0x1fffff)
|
||||
{
|
||||
byte* Memory_mainrom_address_and_0xffff = &Memory.mainrom[address & 0xffff];
|
||||
byte* ptr_0 = &Memory.mainram[0];
|
||||
byte* ptr = ptr_0 + (address & 0xffff);
|
||||
//result = (short)(Memory.mainram[address & 0xffff] * 0x100 + Memory.mainram[(address & 0xffff) + 1]);
|
||||
return (short)(*Memory_mainrom_address_and_0xffff * 0x100 + *(Memory_mainrom_address_and_0xffff + 1));
|
||||
return (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else if (address >= 0x200000 && address + 1 <= 0x2fffff)
|
||||
{
|
||||
byte* ptr = &Memory.mainrom[main_cpu_bank_address + (address & 0xfffff)];
|
||||
byte* ptr_0 = &Memory.mainram[0];
|
||||
byte* ptr = ptr_0 + (main_cpu_bank_address + (address & 0xfffff));
|
||||
//result = (short)(Memory.mainrom[main_cpu_bank_address + (address & 0xfffff)] * 0x100 + Memory.mainrom[main_cpu_bank_address + (address & 0xfffff) + 1]);
|
||||
return (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else if (address >= 0xc00000 && address + 1 <= 0xcfffff)
|
||||
{
|
||||
byte* ptr = &mainbiosrom[address & 0x1ffff];
|
||||
byte* ptr_0 = &mainbiosrom[0];
|
||||
byte* ptr = ptr_0 + (address & 0x1ffff);
|
||||
return (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else
|
||||
@ -265,97 +270,6 @@ namespace MAME.Core
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
public static short MReadWord(int address)
|
||||
{
|
||||
address &= 0xffffff;
|
||||
short result = 0;
|
||||
if (address >= 0x000000 && address + 1 <= 0x00007f)
|
||||
{
|
||||
if (main_cpu_vector_table_source == 0)
|
||||
{
|
||||
result = (short)(mainbiosrom[address] * 0x100 + mainbiosrom[address + 1]);
|
||||
}
|
||||
else if (main_cpu_vector_table_source == 1)
|
||||
{
|
||||
result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
}
|
||||
}
|
||||
else if (address >= 0x000080 && address + 1 <= 0x0fffff)
|
||||
{
|
||||
if (address >= 0x142B9 && address <= 0x142C9)
|
||||
{
|
||||
//m68000Form.iStatus = 1;
|
||||
}
|
||||
result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
}
|
||||
else if (address >= 0x100000 && address + 1 <= 0x1fffff)
|
||||
{
|
||||
if (address == 0x101410)
|
||||
{
|
||||
int i1 = 1;
|
||||
}
|
||||
result = (short)(Memory.mainram[address & 0xffff] * 0x100 + Memory.mainram[(address & 0xffff) + 1]);
|
||||
}
|
||||
else if (address >= 0x200000 && address <= 0x2fffff)
|
||||
{
|
||||
result = (short)(Memory.mainrom[main_cpu_bank_address + (address & 0xfffff)] * 0x100 + Memory.mainrom[main_cpu_bank_address + (address & 0xfffff) + 1]);
|
||||
}
|
||||
/*else if (address >= 0x300000 && address <= 0x300001)
|
||||
{
|
||||
result = (short)((ushort)short0 | dsw);
|
||||
}
|
||||
else if (address >= 0x300080 && address <= 0x300081)
|
||||
{
|
||||
result = short4;
|
||||
}*/
|
||||
else if (address >= 0x300000 && address <= 0x31ffff)
|
||||
{
|
||||
int add = address & 0x81;
|
||||
if (add >= 0x00 && add + 1 <= 0x01)
|
||||
{
|
||||
result = (short)((ushort)short0 | dsw);
|
||||
}
|
||||
else if (add >= 0x80 && add + 1 <= 0x81)
|
||||
{
|
||||
result = short4;
|
||||
}
|
||||
}
|
||||
else if (address >= 0x320000 && address <= 0x33ffff)
|
||||
{
|
||||
result = (short)((ushort)short3 | (ushort)((get_calendar_status() & 0x03) << 6) | (get_audio_result() << 8));
|
||||
}
|
||||
else if (address >= 0x340000 && address <= 0x35ffff)
|
||||
{
|
||||
result = short1;
|
||||
}
|
||||
else if (address >= 0x380000 && address <= 0x39ffff)
|
||||
{
|
||||
result = short2;
|
||||
}
|
||||
else if (address >= 0x3c0000 && address + 1 <= 0x3dffff)
|
||||
{
|
||||
result = (short)neogeo_video_register_r((address & 0x07) >> 1);
|
||||
}
|
||||
else if (address >= 0x400000 && address + 1 <= 0x7fffff)
|
||||
{
|
||||
result = (short)palettes[palette_bank, (address & 0x1fff) >> 1];
|
||||
}
|
||||
else if (address >= 0xc00000 && address + 1 <= 0xcfffff)
|
||||
{
|
||||
result = (short)(mainbiosrom[address & 0x1ffff] * 0x100 + mainbiosrom[(address & 0x1ffff) + 1]);
|
||||
}
|
||||
else if (address >= 0xd00000 && address + 1 <= 0xdfffff)
|
||||
{
|
||||
result = (short)(mainram2[address & 0xffff] * 0x100 + mainram2[(address & 0xffff) + 1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
int i1 = 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//public static short MReadWord(int address)
|
||||
//{
|
||||
// address &= 0xffffff;
|
||||
@ -364,49 +278,32 @@ namespace MAME.Core
|
||||
// {
|
||||
// if (main_cpu_vector_table_source == 0)
|
||||
// {
|
||||
// byte* ptr_0 = &mainbiosrom[0];
|
||||
// byte* ptr = ptr_0 + address;
|
||||
// //result = (short)(mainbiosrom[address] * 0x100 + mainbiosrom[address + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// result = (short)(mainbiosrom[address] * 0x100 + mainbiosrom[address + 1]);
|
||||
// }
|
||||
// else if (main_cpu_vector_table_source == 1)
|
||||
// {
|
||||
// byte* ptr_0 = &Memory.mainrom[0];
|
||||
// byte* ptr = ptr_0 + address;
|
||||
// //result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
// }
|
||||
// }
|
||||
// else if (address >= 0x000080 && address + 1 <= 0x0fffff)
|
||||
// {
|
||||
// //if (address >= 0x142B9 && address <= 0x142C9)
|
||||
// //{
|
||||
// // //m68000Form.iStatus = 1;
|
||||
// //}
|
||||
|
||||
// byte* ptr_0 = &Memory.mainrom[0];
|
||||
// byte* ptr = ptr_0 + address;
|
||||
// //result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// if (address >= 0x142B9 && address <= 0x142C9)
|
||||
// {
|
||||
// //m68000Form.iStatus = 1;
|
||||
// }
|
||||
// result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
// }
|
||||
// else if (address >= 0x100000 && address + 1 <= 0x1fffff)
|
||||
// {
|
||||
// //if (address == 0x101410)
|
||||
// //{
|
||||
// // int i1 = 1;
|
||||
// //}
|
||||
|
||||
// byte* ptr_0 = &Memory.mainrom[0];
|
||||
// byte* ptr = ptr_0 + (address & 0xffff);
|
||||
// //result = (short)(Memory.mainram[address & 0xffff] * 0x100 + Memory.mainram[(address & 0xffff) + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// if (address == 0x101410)
|
||||
// {
|
||||
// int i1 = 1;
|
||||
// }
|
||||
// result = (short)(Memory.mainram[address & 0xffff] * 0x100 + Memory.mainram[(address & 0xffff) + 1]);
|
||||
// }
|
||||
// else if (address >= 0x200000 && address <= 0x2fffff)
|
||||
// {
|
||||
// byte* ptr_0 = &Memory.mainrom[0];
|
||||
// byte* ptr = ptr_0 + (main_cpu_bank_address + (address & 0xfffff));
|
||||
// //result = (short)(Memory.mainrom[main_cpu_bank_address + (address & 0xfffff)] * 0x100 + Memory.mainrom[main_cpu_bank_address + (address & 0xfffff) + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// result = (short)(Memory.mainrom[main_cpu_bank_address + (address & 0xfffff)] * 0x100 + Memory.mainrom[main_cpu_bank_address + (address & 0xfffff) + 1]);
|
||||
// }
|
||||
// /*else if (address >= 0x300000 && address <= 0x300001)
|
||||
// {
|
||||
@ -450,24 +347,132 @@ namespace MAME.Core
|
||||
// }
|
||||
// else if (address >= 0xc00000 && address + 1 <= 0xcfffff)
|
||||
// {
|
||||
// byte* ptr_0 = &Memory.mainrom[0];
|
||||
// byte* ptr = ptr_0 + (address & 0x1ffff);
|
||||
// //result = (short)(mainbiosrom[address & 0x1ffff] * 0x100 + mainbiosrom[(address & 0x1ffff) + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// result = (short)(mainbiosrom[address & 0x1ffff] * 0x100 + mainbiosrom[(address & 0x1ffff) + 1]);
|
||||
// }
|
||||
// else if (address >= 0xd00000 && address + 1 <= 0xdfffff)
|
||||
// {
|
||||
// byte* ptr_0 = &Memory.mainrom[0];
|
||||
// byte* ptr = ptr_0 + (address & 0xffff);
|
||||
// //result = (short)(mainram2[address & 0xffff] * 0x100 + mainram2[(address & 0xffff) + 1]);
|
||||
// result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
// result = (short)(mainram2[address & 0xffff] * 0x100 + mainram2[(address & 0xffff) + 1]);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// int i1 = 1;
|
||||
// }
|
||||
// //else
|
||||
// //{
|
||||
// // int i1 = 1;
|
||||
// //}
|
||||
// return result;
|
||||
//}
|
||||
|
||||
|
||||
public static short MReadWord(int address)
|
||||
{
|
||||
address &= 0xffffff;
|
||||
short result = 0;
|
||||
if (address >= 0x000000 && address + 1 <= 0x00007f)
|
||||
{
|
||||
if (main_cpu_vector_table_source == 0)
|
||||
{
|
||||
byte* ptr_0 = &mainbiosrom[0];
|
||||
byte* ptr = ptr_0 + address;
|
||||
//result = (short)(mainbiosrom[address] * 0x100 + mainbiosrom[address + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else if (main_cpu_vector_table_source == 1)
|
||||
{
|
||||
byte* ptr_0 = &Memory.mainrom[0];
|
||||
byte* ptr = ptr_0 + address;
|
||||
//result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
}
|
||||
else if (address >= 0x000080 && address + 1 <= 0x0fffff)
|
||||
{
|
||||
//if (address >= 0x142B9 && address <= 0x142C9)
|
||||
//{
|
||||
// //m68000Form.iStatus = 1;
|
||||
//}
|
||||
|
||||
byte* ptr_0 = &Memory.mainrom[0];
|
||||
byte* ptr = ptr_0 + address;
|
||||
//result = (short)(Memory.mainrom[address] * 0x100 + Memory.mainrom[address + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else if (address >= 0x100000 && address + 1 <= 0x1fffff)
|
||||
{
|
||||
//if (address == 0x101410)
|
||||
//{
|
||||
// int i1 = 1;
|
||||
//}
|
||||
|
||||
byte* ptr_0 = &Memory.mainram[0];
|
||||
byte* ptr = ptr_0 + (address & 0xffff);
|
||||
//result = (short)(Memory.mainram[address & 0xffff] * 0x100 + Memory.mainram[(address & 0xffff) + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else if (address >= 0x200000 && address <= 0x2fffff)
|
||||
{
|
||||
byte* ptr_0 = &Memory.mainrom[0];
|
||||
byte* ptr = ptr_0 + (main_cpu_bank_address + (address & 0xfffff));
|
||||
//result = (short)(Memory.mainrom[main_cpu_bank_address + (address & 0xfffff)] * 0x100 + Memory.mainrom[main_cpu_bank_address + (address & 0xfffff) + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
/*else if (address >= 0x300000 && address <= 0x300001)
|
||||
{
|
||||
result = (short)((ushort)short0 | dsw);
|
||||
}
|
||||
else if (address >= 0x300080 && address <= 0x300081)
|
||||
{
|
||||
result = short4;
|
||||
}*/
|
||||
else if (address >= 0x300000 && address <= 0x31ffff)
|
||||
{
|
||||
int add = address & 0x81;
|
||||
if (add >= 0x00 && add + 1 <= 0x01)
|
||||
{
|
||||
result = (short)((ushort)short0 | dsw);
|
||||
}
|
||||
else if (add >= 0x80 && add + 1 <= 0x81)
|
||||
{
|
||||
result = short4;
|
||||
}
|
||||
}
|
||||
else if (address >= 0x320000 && address <= 0x33ffff)
|
||||
{
|
||||
result = (short)((ushort)short3 | (ushort)((get_calendar_status() & 0x03) << 6) | (get_audio_result() << 8));
|
||||
}
|
||||
else if (address >= 0x340000 && address <= 0x35ffff)
|
||||
{
|
||||
result = short1;
|
||||
}
|
||||
else if (address >= 0x380000 && address <= 0x39ffff)
|
||||
{
|
||||
result = short2;
|
||||
}
|
||||
else if (address >= 0x3c0000 && address + 1 <= 0x3dffff)
|
||||
{
|
||||
result = (short)neogeo_video_register_r((address & 0x07) >> 1);
|
||||
}
|
||||
else if (address >= 0x400000 && address + 1 <= 0x7fffff)
|
||||
{
|
||||
result = (short)palettes[palette_bank, (address & 0x1fff) >> 1];
|
||||
}
|
||||
else if (address >= 0xc00000 && address + 1 <= 0xcfffff)
|
||||
{
|
||||
byte* ptr_0 = &mainbiosrom[0];
|
||||
byte* ptr = ptr_0 + (address & 0x1ffff);
|
||||
//result = (short)(mainbiosrom[address & 0x1ffff] * 0x100 + mainbiosrom[(address & 0x1ffff) + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
else if (address >= 0xd00000 && address + 1 <= 0xdfffff)
|
||||
{
|
||||
byte* ptr_0 = &mainram2[0];
|
||||
byte* ptr = ptr_0 + (address & 0xffff);
|
||||
//result = (short)(mainram2[address & 0xffff] * 0x100 + mainram2[(address & 0xffff) + 1]);
|
||||
result = (short)(*ptr * 0x100 + *(ptr + 1));
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// int i1 = 1;
|
||||
//}
|
||||
return result;
|
||||
}
|
||||
public static int MReadOpLong(int address)
|
||||
{
|
||||
address &= 0xffffff;
|
||||
|
||||
@ -82,6 +82,8 @@ namespace MAME.Core
|
||||
{
|
||||
return 0x9a37;
|
||||
}
|
||||
//public const sbyte prot_9a37_r_sbyte = 0x37;
|
||||
//public const short prot_9a37_r_short = -25929;
|
||||
public static ushort sma_random_r()
|
||||
{
|
||||
ushort old = neogeo_rng;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user