snes9x/apu/bapu/smp/core.cpp

82 lines
1.5 KiB
C++
Raw Normal View History

2011-06-12 06:25:22 +00:00
void SMP::tick() {
timer0.tick();
timer1.tick();
timer2.tick();
2011-06-22 11:03:29 +00:00
clock++;
2011-06-27 20:41:17 +00:00
dsp.clock++;
2011-06-12 06:25:22 +00:00
}
void SMP::tick(unsigned clocks) {
timer0.tick(clocks);
timer1.tick(clocks);
timer2.tick(clocks);
clock += clocks;
dsp.clock += clocks;
}
2011-06-12 06:25:22 +00:00
void SMP::op_io() {
tick();
}
void SMP::op_io(unsigned clocks) {
tick(clocks);
}
2011-06-12 06:25:22 +00:00
uint8 SMP::op_read(uint16 addr) {
tick();
if((addr & 0xfff0) == 0x00f0) return mmio_read(addr);
return apuram[addr];
}
void SMP::op_write(uint16 addr, uint8 data) {
tick();
2019-02-21 19:40:33 +00:00
if((addr & 0xfff0) == 0x00f0 || addr >= 0xffc0)
mmio_write(addr, data);
else
apuram[addr] = data;
2011-06-12 06:25:22 +00:00
}
2019-02-21 18:42:27 +00:00
uint8 SMP::op_readpc() {
tick();
return apuram[regs.pc++];
}
uint8 SMP::op_readstack() {
tick();
return apuram[0x0100 | ++regs.sp];
}
void SMP::op_writestack(uint8 data) {
tick();
apuram[0x0100 | regs.sp--] = data;
}
2011-06-12 06:25:22 +00:00
void SMP::op_step() {
#define op_readdp(addr) op_read((regs.p.p << 8) + ((addr) & 0xff))
#define op_writedp(addr, data) op_write((regs.p.p << 8) + ((addr) & 0xff), data)
2011-06-12 06:25:22 +00:00
#define op_readaddr(addr) op_read(addr)
#define op_writeaddr(addr, data) op_write(addr, data)
if(opcode_cycle == 0)
2018-05-16 22:46:28 +00:00
{
#ifdef DEBUGGER
if (Settings.TraceSMP)
{
disassemble_opcode(tmp, regs.pc);
S9xTraceMessage (tmp);
}
#endif
2011-06-12 06:25:22 +00:00
opcode_number = op_readpc();
2018-05-16 22:46:28 +00:00
}
switch(opcode_number) {
#include "core/oppseudo_misc.cpp"
#include "core/oppseudo_mov.cpp"
#include "core/oppseudo_pc.cpp"
#include "core/oppseudo_read.cpp"
#include "core/oppseudo_rmw.cpp"
}
2011-06-12 06:25:22 +00:00
}