-Reversed the double byte data bytes. It now works properly.

-Set the D flag to clear one instruction after it's set; SDBD is a prefix instruction.
This commit is contained in:
brandman211 2012-07-29 00:02:06 +00:00
parent c555e1df40
commit b1db1b7a69
2 changed files with 21 additions and 20 deletions

View File

@ -14,8 +14,7 @@ namespace BizHawk.Emulation.CPUs.CP1610
addrToAdvance = 1;
byte dest, src, mem;
ushort addr, offset;
int decle2, decle3;
int cond, ext;
int decle2, decle3, cond, ext;
string result = "";
int opcode = ReadMemory(pc) & 0x3FF;
switch (opcode)

View File

@ -35,20 +35,20 @@ namespace BizHawk.Emulation.CPUs.CP1610
public void Execute(int cycles)
{
byte dest, src, mem;
ushort dest_value, src_value, mem_read, addr, addr_read, offset;
int decle2, decle3, result = 0;
int ones, carry, status_word, lower, sign, cond, ext;
bool branch = false;
PendingCycles += cycles;
while (PendingCycles > 0)
{
int addrToAdvance;
if (logging)
{
int addrToAdvance;
log.WriteLine(Disassemble(RegisterPC, out addrToAdvance));
log.Flush();
}
byte dest, src, mem;
ushort dest_value, src_value, mem_read, addr, addr_read, offset;
int decle2, decle3, result = 0, ones, carry, status_word, lower, sign, cond, ext;
bool branch = false;
bool prev_FlagD = FlagD;
int opcode = ReadMemory(RegisterPC++) & 0x3FF;
switch (opcode)
{
@ -1271,8 +1271,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
else
{
// Double Byte Data.
Register[dest] = (ushort)(ReadMemory(Register[mem]++) << 8);
Register[dest] |= (ushort)(ReadMemory(Register[mem]) & 0xFF);
Register[dest] = (ushort)(ReadMemory(Register[mem]++) & 0xFF);
Register[dest] |= (ushort)(ReadMemory(Register[mem]) << 8);
PendingCycles -= 10; TotalExecutedCycles += 10;
}
// Auto-increment the memory register if it does so on write.
@ -1379,8 +1379,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
else
{
// Double Byte Data.
mem_read = (ushort)(ReadMemory(Register[mem]++) << 8);
mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF);
mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF);
mem_read |= (ushort)(ReadMemory(Register[mem]) << 8);
PendingCycles -= 10; TotalExecutedCycles += 10;
}
// Auto-increment the memory register if it does so on write.
@ -1496,8 +1496,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
else
{
// Double Byte Data.
mem_read = (ushort)(ReadMemory(Register[mem]++) << 8);
mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF);
mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF);
mem_read |= (ushort)(ReadMemory(Register[mem]) << 8);
PendingCycles -= 10; TotalExecutedCycles += 10;
}
// Auto-increment the memory register if it does so on write.
@ -1611,8 +1611,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
else
{
// Double Byte Data.
mem_read = (ushort)(ReadMemory(Register[mem]++) << 8);
mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF);
mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF);
mem_read |= (ushort)(ReadMemory(Register[mem]) << 8);
PendingCycles -= 10; TotalExecutedCycles += 10;
}
// Auto-increment the memory register if it does so on write.
@ -1723,8 +1723,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
else
{
// Double Byte Data.
mem_read = (ushort)(ReadMemory(Register[mem]++) << 8);
mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF);
mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF);
mem_read |= (ushort)(ReadMemory(Register[mem]) << 8);
PendingCycles -= 10; TotalExecutedCycles += 10;
}
// Auto-increment the memory register if it does so on write.
@ -1833,8 +1833,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
else
{
// Double Byte Data.
mem_read = (ushort)(ReadMemory(Register[mem]++) << 8);
mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF);
mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF);
mem_read |= (ushort)(ReadMemory(Register[mem]) << 8);
PendingCycles -= 10; TotalExecutedCycles += 10;
}
// Auto-increment the memory register if it does so on write.
@ -1846,6 +1846,8 @@ namespace BizHawk.Emulation.CPUs.CP1610
Register[dest] = (ushort)result;
break;
}
if (FlagD == prev_FlagD)
FlagD = false;
LogData();
}
}