z80: Fix some more contention stuff

This commit is contained in:
alyosha-tas 2018-06-07 18:41:50 -04:00
parent f4c47dc80a
commit 6ae8f01872
4 changed files with 28 additions and 18 deletions

View File

@ -58,7 +58,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
public const ushort WIO4 = 108; public const ushort WIO4 = 108;
public bool FlagI; public bool FlagI;/*, FlagI1, FlagI2, FlagI3, FlagI4, FlagI5, FlagI6;*/
public bool FlagW; // wait flag, when set to true reads / writes will be delayed public bool FlagW; // wait flag, when set to true reads / writes will be delayed

View File

@ -552,9 +552,9 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
private void OUT_REG_(ushort dest, ushort src) private void OUT_REG_(ushort dest, ushort src)
{ {
cur_instr = new ushort[] cur_instr = new ushort[]
{IDLE, {TR16, Z, W, C, B,
IDLE,
IDLE, IDLE,
TR16, Z, W, C, B,
OUT, Z, W, src, OUT, Z, W, src,
INC16, Z, W, INC16, Z, W,
WAIT, WAIT,

View File

@ -17,17 +17,17 @@
OP_F, OP_F,
OP }; OP };
BUSRQ = new ushort[] { src_h, 0, 0, src_h, 0, 0, 0, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { src_h, 0, 0, src_h, src_h, 0, 0, PCh, 0, 0, 0 };
} }
private void BIT_OP_IND(ushort operation, ushort bit, ushort src_l, ushort src_h) private void BIT_OP_IND(ushort operation, ushort bit, ushort src_l, ushort src_h)
{ {
cur_instr = new ushort[] cur_instr = new ushort[]
{IDLE, {IDLE,
IDLE,
WAIT, WAIT,
RD, ALU, src_l, src_h, RD, ALU, src_l, src_h,
operation, bit, ALU, operation, bit, ALU,
IDLE,
WAIT, WAIT,
WR, src_l, src_h, ALU, WR, src_l, src_h, ALU,
IDLE, IDLE,
@ -35,7 +35,7 @@
OP_F, OP_F,
OP }; OP };
BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { src_h, 0, 0, src_h, src_h, 0, 0, PCh, 0, 0, 0 };
} }
// Note that this operation uses I_BIT, same as indexed BIT. // Note that this operation uses I_BIT, same as indexed BIT.
@ -46,15 +46,15 @@
{ {
cur_instr = new ushort[] cur_instr = new ushort[]
{IDLE, {IDLE,
IDLE,
WAIT, WAIT,
RD, ALU, src_l, src_h, RD, ALU, src_l, src_h,
IDLE,
I_BIT, bit, ALU, I_BIT, bit, ALU,
WAIT, WAIT,
OP_F, OP_F,
OP }; OP };
BUSRQ = new ushort[] { 0, src_h, 0, 0, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { src_h, 0, 0, src_h, PCh, 0, 0, 0 };
} }
private void REG_OP_IND_INC(ushort operation, ushort dest, ushort src_l, ushort src_h) private void REG_OP_IND_INC(ushort operation, ushort dest, ushort src_l, ushort src_h)
@ -267,10 +267,10 @@
{ {
cur_instr = new ushort[] cur_instr = new ushort[]
{IDLE, {IDLE,
IDLE,
WAIT, WAIT,
RD, ALU, src_l, src_h, RD, ALU, src_l, src_h,
INC8, ALU, INC8, ALU,
IDLE,
WAIT, WAIT,
WR, src_l, src_h, ALU, WR, src_l, src_h, ALU,
IDLE, IDLE,
@ -278,17 +278,17 @@
OP_F, OP_F,
OP }; OP };
BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { src_h, 0, 0, src_h, src_h, 0, 0, PCh, 0, 0, 0 };
} }
private void DEC_8_IND(ushort src_l, ushort src_h) private void DEC_8_IND(ushort src_l, ushort src_h)
{ {
cur_instr = new ushort[] cur_instr = new ushort[]
{IDLE, {IDLE,
IDLE,
WAIT, WAIT,
RD, ALU, src_l, src_h, RD, ALU, src_l, src_h,
DEC8, ALU, DEC8, ALU,
IDLE,
WAIT, WAIT,
WR, src_l, src_h, ALU, WR, src_l, src_h, ALU,
IDLE, IDLE,
@ -296,7 +296,7 @@
OP_F, OP_F,
OP }; OP };
BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { src_h, 0, 0, src_h, src_h, 0, 0, PCh, 0, 0, 0 };
} }
// NOTE: WZ implied for the wollowing 3 functions // NOTE: WZ implied for the wollowing 3 functions
@ -304,10 +304,10 @@
{ {
cur_instr = new ushort[] cur_instr = new ushort[]
{IDLE, {IDLE,
IDLE,
WAIT, WAIT,
RD, ALU, Z, W, RD, ALU, Z, W,
operation, ALU, operation, ALU,
IDLE,
WAIT, WAIT,
WR, Z, W, ALU, WR, Z, W, ALU,
TR, dest, ALU, TR, dest, ALU,
@ -315,7 +315,7 @@
OP_F, OP_F,
OP }; OP };
BUSRQ = new ushort[] { 0, W, 0, 0, W, 0, 0, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { W, 0, 0, W, W, 0, 0, PCh, 0, 0, 0 };
} }
private void I_BIT_OP(ushort operation, ushort bit, ushort dest) private void I_BIT_OP(ushort operation, ushort bit, ushort dest)

View File

@ -159,6 +159,13 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
// Execute instructions // Execute instructions
public void ExecuteOne() public void ExecuteOne()
{ {
/*FlagI6 = FlagI;
FlagI5 = FlagI4;
FlagI4 = FlagI3;
FlagI3 = FlagI2;
FlagI2 = FlagI1;
FlagI1 = FlagI;
*/
bus_pntr++; bus_pntr++;
switch (cur_instr[instr_pntr++]) switch (cur_instr[instr_pntr++])
{ {
@ -663,11 +670,14 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
DEC16, PCl, PCh, DEC16, PCl, PCh,
DEC16, PCl, PCh, DEC16, PCl, PCh,
IDLE, IDLE,
IDLE, DEC16, B, ALU,
WAIT, WAIT,
OP_F, OP_F,
OP}; OP};
Regs[B] = (ushort)((Regs[B] + 1) & 0xFF);
BUSRQ = new ushort[] { B, B, B, B, B, PCh, 0, 0, 0 }; BUSRQ = new ushort[] { B, B, B, B, B, PCh, 0, 0, 0 };
} }
else else