add BBR, BBS, PLY, PHY, and PLX 65C02 instructions
This commit is contained in:
parent
1d8f0e0564
commit
734900c314
75
cpu6502.h
75
cpu6502.h
|
@ -1621,6 +1621,49 @@ struct CPU6502
|
|||
#if SUPPORT_65C02
|
||||
// 65C02 instructions
|
||||
|
||||
case 0x0F: case 0x1F: case 0x2F: case 0x3F:
|
||||
case 0x4F: case 0x5F: case 0x6F: case 0x7F: { // BBRn zpg, rel, 65C02
|
||||
int whichbit = (inst >> 4) & 0x7;
|
||||
uint8_t zpg = read_pc_inc();
|
||||
uint8_t m = bus.read(zpg);
|
||||
if(!(m & (1 << whichbit))) {
|
||||
int32_t rel = (read_pc_inc() + 128) % 256 - 128;
|
||||
// if((pc + rel) / 256 != pc / 256)
|
||||
// clk.add_cpu_cycles(1); // XXX ???
|
||||
pc += rel;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x8F: case 0x9F: case 0xAF: case 0xBF:
|
||||
case 0xCF: case 0xDF: case 0xEF: case 0xFF: { // BBSn zpg, rel, 65C02
|
||||
int whichbit = (inst >> 4) & 0x7;
|
||||
uint8_t zpg = read_pc_inc();
|
||||
uint8_t m = bus.read(zpg);
|
||||
if(m & (1 << whichbit)) {
|
||||
int32_t rel = (read_pc_inc() + 128) % 256 - 128;
|
||||
// if((pc + rel) / 256 != pc / 256)
|
||||
// clk.add_cpu_cycles(1); // XXX ???
|
||||
pc += rel;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x5A: { // PHY, 65C02
|
||||
stack_push(y);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x7A: { // PLY, 65C02
|
||||
set_flags(N | Z, y = stack_pull());
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xFA: { // PLX, 65C02
|
||||
set_flags(N | Z, x = stack_pull());
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x80: { // BRA imm, 65C02
|
||||
int32_t rel = (read_pc_inc() + 128) % 256 - 128;
|
||||
if((pc + rel) / 256 != pc / 256)
|
||||
|
@ -1751,22 +1794,22 @@ struct CPU6502
|
|||
template<class CLK, class BUS>
|
||||
const int32_t CPU6502<CLK, BUS>::cycles[256] =
|
||||
{
|
||||
/* 0x0- */ 7, 6, -1, -1, -1, 3, 5, -1, 3, 2, 2, -1, -1, 4, 6, -1,
|
||||
/* 0x1- */ 2, 5, 5, -1, -1, 4, 6, -1, 2, 4, 2, -1, -1, 4, 7, -1,
|
||||
/* 0x2- */ 6, 6, -1, -1, 3, 3, 5, -1, 4, 2, 2, -1, 4, 4, 6, -1,
|
||||
/* 0x3- */ 2, 5, -1, -1, -1, 4, 6, -1, 2, 4, 2, -1, -1, 4, 7, -1,
|
||||
/* 0x4- */ 6, 6, -1, -1, -1, 3, 5, -1, 3, 2, 2, -1, 3, 4, 6, -1,
|
||||
/* 0x5- */ 2, 5, -1, -1, -1, 4, 6, -1, 2, 4, -1, -1, -1, 4, 7, -1,
|
||||
/* 0x6- */ 6, 6, -1, -1, 3, 3, 5, -1, 4, 2, 2, -1, 5, 4, 6, -1,
|
||||
/* 0x7- */ 2, 5, 5, -1, -1, 4, 6, -1, 2, 4, -1, -1, -1, 4, 7, -1,
|
||||
/* 0x8- */ 2, 6, -1, -1, 3, 3, 3, -1, 2, -1, 2, -1, 4, 4, 4, -1,
|
||||
/* 0x9- */ 2, 6, 5, -1, 4, 4, 4, -1, 2, 5, 2, -1, 4, 5, -1, -1,
|
||||
/* 0xA- */ 2, 6, 2, -1, 3, 3, 3, -1, 2, 2, 2, -1, 4, 4, 4, -1,
|
||||
/* 0xB- */ 2, 5, 5, -1, 4, 4, 4, -1, 2, 4, 2, -1, 4, 4, 4, -1,
|
||||
/* 0xC- */ 2, 6, -1, -1, 3, 3, 5, -1, 2, 2, 2, -1, 4, 4, 3, -1,
|
||||
/* 0xD- */ 2, 5, 5, -1, -1, 4, 6, -1, 2, 4, 3, -1, -1, 4, 7, -1,
|
||||
/* 0xE- */ 2, 6, -1, -1, 3, 3, 5, -1, 2, 2, 2, -1, 4, 4, 6, -1,
|
||||
/* 0xF- */ 2, 5, -1, -1, -1, 4, 6, -1, 2, 4, -1, -1, -1, 4, 7, -1,
|
||||
/* 0x0- */ 7, 6, -1, -1, -1, 3, 5, -1, 3, 2, 2, -1, -1, 4, 6, 5,
|
||||
/* 0x1- */ 2, 5, 5, -1, -1, 4, 6, -1, 2, 4, 2, -1, -1, 4, 7, 5,
|
||||
/* 0x2- */ 6, 6, -1, -1, 3, 3, 5, -1, 4, 2, 2, -1, 4, 4, 6, 5,
|
||||
/* 0x3- */ 2, 5, -1, -1, -1, 4, 6, -1, 2, 4, 2, -1, -1, 4, 7, 5,
|
||||
/* 0x4- */ 6, 6, -1, -1, -1, 3, 5, -1, 3, 2, 2, -1, 3, 4, 6, 5,
|
||||
/* 0x5- */ 2, 5, -1, -1, -1, 4, 6, -1, 2, 4, 3, -1, -1, 4, 7, 5,
|
||||
/* 0x6- */ 6, 6, -1, -1, 3, 3, 5, -1, 4, 2, 2, -1, 5, 4, 6, 5,
|
||||
/* 0x7- */ 2, 5, 5, -1, -1, 4, 6, -1, 2, 4, 4, -1, -1, 4, 7, 5,
|
||||
/* 0x8- */ 2, 6, -1, -1, 3, 3, 3, -1, 2, -1, 2, -1, 4, 4, 4, 5,
|
||||
/* 0x9- */ 2, 6, 5, -1, 4, 4, 4, -1, 2, 5, 2, -1, 4, 5, -1, 5,
|
||||
/* 0xA- */ 2, 6, 2, -1, 3, 3, 3, -1, 2, 2, 2, -1, 4, 4, 4, 5,
|
||||
/* 0xB- */ 2, 5, 5, -1, 4, 4, 4, -1, 2, 4, 2, -1, 4, 4, 4, 5,
|
||||
/* 0xC- */ 2, 6, -1, -1, 3, 3, 5, -1, 2, 2, 2, -1, 4, 4, 3, 5,
|
||||
/* 0xD- */ 2, 5, 5, -1, -1, 4, 6, -1, 2, 4, 3, -1, -1, 4, 7, 5,
|
||||
/* 0xE- */ 2, 6, -1, -1, 3, 3, 5, -1, 2, 2, 2, -1, 4, 4, 6, 5,
|
||||
/* 0xF- */ 2, 5, -1, -1, -1, 4, 6, -1, 2, 4, 4, -1, -1, 4, 7, 5,
|
||||
};
|
||||
|
||||
#endif // CPU6502_H
|
||||
|
|
Loading…
Reference in New Issue