Intellivision implement System Bus memory domain

This commit is contained in:
alyosha-tas 2017-02-09 12:53:55 -05:00 committed by GitHub
parent fbfe28ed76
commit a36b7093e3
3 changed files with 35 additions and 35 deletions
BizHawk.Emulation.Cores/CPUs/CP1610

View File

@ -11,7 +11,7 @@
ushort addr, offset;
int decle2, decle3, cond, ext;
string result = "";
int opcode = ReadMemory(pc) & 0x3FF;
int opcode = ReadMemory(pc, false) & 0x3FF;
switch (opcode)
{
case 0x000:
@ -24,8 +24,8 @@
return "DIS";
case 0x004:
// 0000:0000:0000:0100 0000:00rr:aaaa:aaff 0000:00aa:aaaa:aaaa
decle2 = ReadMemory((ushort)(pc + 1));
decle3 = ReadMemory((ushort)(pc + 2));
decle2 = ReadMemory((ushort)(pc + 1), false);
decle3 = ReadMemory((ushort)(pc + 2), false);
// rr indicates the register into which to store the return address
dest = (byte)(((decle2 >> 8) & 0x3) + 4);
// aaaaaaaaaaaaaaaa indicates the address to where the CP1610 should Jump
@ -733,7 +733,7 @@
case 0x23D:
case 0x23E:
case 0x23F:
offset = ReadMemory((ushort)(pc + 1));
offset = ReadMemory((ushort)(pc + 1), false);
cond = opcode & 0xF;
ext = opcode & 0x10;
if (ext != 0)
@ -818,7 +818,7 @@
case 0x246:
case 0x247:
src = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("MVO R{0:d}, ${1:X4}", src, addr);
case 0x248:
@ -889,7 +889,7 @@
case 0x286:
case 0x287:
dest = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("MVI R{0:d}, ${1:X4}", dest, addr);
case 0x288:
@ -960,7 +960,7 @@
case 0x2C6:
case 0x2C7:
dest = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("ADD R{0:d}, ${1:X4}", dest, addr);
case 0x2C8:
@ -1031,7 +1031,7 @@
case 0x306:
case 0x307:
mem = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("SUB R{0:d}, ${1:X4}", mem, addr);
case 0x308:
@ -1102,7 +1102,7 @@
case 0x346:
case 0x347:
mem = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("CMP R{0:d}, ${1:X4}", mem, addr);
case 0x348:
@ -1173,7 +1173,7 @@
case 0x386:
case 0x387:
mem = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("AND R{0:d}, ${1:X4}", mem, addr);
case 0x388:
@ -1244,7 +1244,7 @@
case 0x3C6:
case 0x3C7:
mem = (byte)(opcode & 0x7);
addr = ReadMemory((ushort)(pc + 1));
addr = ReadMemory((ushort)(pc + 1), false);
addrToAdvance = 2;
return string.Format("XOR R{0:d}, ${1:X4}", mem, addr);
case 0x3C8:

View File

@ -88,15 +88,15 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
}
if (!FlagD)
{
value = ReadMemory(Register[mem]);
value = ReadMemory(Register[mem], false);
}
else
{
// Double Byte Data.
value = (ushort)(ReadMemory(Register[mem]) & 0xFF);
value = (ushort)(ReadMemory(Register[mem], false) & 0xFF);
if (mem >= 4)
Register[mem]++;
value |= (ushort)(ReadMemory(Register[mem]) << 8);
value |= (ushort)(ReadMemory(Register[mem], false) << 8);
}
// Auto-increment the memory register if it does so on write.
if (mem >= 0x4 && mem != 0x6)
@ -128,7 +128,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
public void Indirect_Set(byte mem, byte src)
{
WriteMemory(Register[mem], Register[src]);
WriteMemory(Register[mem], Register[src], false);
// Auto-increment the memory register if it does so on read.
if (mem >= 0x4)
{
@ -184,7 +184,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
//int ones, carry;
bool branch = false;
bool FlagD_prev = FlagD;
opcode = ReadMemory(RegisterPC++) & 0x3FF;
opcode = ReadMemory(RegisterPC++, false) & 0x3FF;
if (TraceCallback != null)
TraceCallback(CP1610State());
@ -209,8 +209,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
break;
case 0x004: // J, JE, JD, JSR, JSRE, JSRD
// 0000:0000:0000:0100 0000:00rr:aaaa:aaff 0000:00aa:aaaa:aaaa
decle2 = ReadMemory(RegisterPC++);
decle3 = ReadMemory(RegisterPC++);
decle2 = ReadMemory(RegisterPC++, false);
decle3 = ReadMemory(RegisterPC++, false);
// rr indicates the register into which to store the return address
dest = (byte)(((decle2 >> 8) & 0x3) + 4);
// aaaaaaaaaaaaaaaa indicates the address to where the CP1610 should Jump
@ -1159,7 +1159,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x23D:
case 0x23E:
case 0x23F:
offset = ReadMemory(RegisterPC++);
offset = ReadMemory(RegisterPC++, false);
cond = opcode & 0xF;
ext = opcode & 0x10;
// BEXT
@ -1261,8 +1261,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x246:
case 0x247:
src = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
WriteMemory(addr, Register[src]);
addr = ReadMemory(RegisterPC++, false);
WriteMemory(addr, Register[src], false);
cycles = 11;
Interruptible = false;
break;
@ -1339,8 +1339,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x286:
case 0x287:
dest = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
Register[dest] = ReadMemory(addr);
addr = ReadMemory(RegisterPC++, false);
Register[dest] = ReadMemory(addr, false);
cycles = 10;
Interruptible = true;
break;
@ -1417,9 +1417,9 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x2C6:
case 0x2C7:
dest = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
addr = ReadMemory(RegisterPC++, false);
dest_value = Register[dest];
addr_read = ReadMemory(addr);
addr_read = ReadMemory(addr, false);
result = dest_value + addr_read;
Calc_FlagC(result);
Calc_FlagO_Add(dest_value, addr_read, result);
@ -1511,9 +1511,9 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x306:
case 0x307:
dest = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
addr = ReadMemory(RegisterPC++, false);
dest_value = Register[dest];
addr_read = ReadMemory(addr);
addr_read = ReadMemory(addr, false);
twos = (0xFFFF ^ addr_read) + 1;
result = dest_value + twos;
Calc_FlagC(result);
@ -1607,9 +1607,9 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x346:
case 0x347:
dest = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
addr = ReadMemory(RegisterPC++, false);
dest_value = Register[dest];
addr_read = ReadMemory(addr);
addr_read = ReadMemory(addr, false);
twos = (0xFFFF ^ addr_read) + 1;
result = dest_value + twos;
Calc_FlagC(result);
@ -1701,9 +1701,9 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x386:
case 0x387:
dest = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
addr = ReadMemory(RegisterPC++, false);
dest_value = Register[dest];
addr_read = ReadMemory(addr);
addr_read = ReadMemory(addr, false);
result = dest_value & addr_read;
Calc_FlagS(result);
Calc_FlagZ(result);
@ -1788,9 +1788,9 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
case 0x3C6:
case 0x3C7:
dest = (byte)(opcode & 0x7);
addr = ReadMemory(RegisterPC++);
addr = ReadMemory(RegisterPC++, false);
dest_value = Register[dest];
addr_read = ReadMemory(addr);
addr_read = ReadMemory(addr, false);
result = dest_value ^ addr_read;
Calc_FlagS(result);
Calc_FlagZ(result);

View File

@ -29,8 +29,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
public int TotalExecutedCycles;
public int PendingCycles;
public Func<ushort, ushort> ReadMemory;
public Func<ushort, ushort, bool> WriteMemory;
public Func<ushort, bool, ushort> ReadMemory;
public Func<ushort, ushort, bool, bool> WriteMemory;
private static bool Logging = false;
private static readonly StreamWriter Log;