40 lines
831 B
C++
Executable File
40 lines
831 B
C++
Executable File
#ifdef SA1_CPP
|
|
|
|
//==========================
|
|
//SA-1 opcode core functions
|
|
//==========================
|
|
|
|
void SA1::op_io() {
|
|
tick();
|
|
if(regs.wai) scheduler.sync_copcpu();
|
|
}
|
|
|
|
//ROM, I-RAM and MMIO registers are accessed at ~10.74MHz (2 clock ticks)
|
|
//BW-RAM is accessed at ~5.37MHz (4 clock ticks)
|
|
//tick() == 2 clock ticks
|
|
//note: bus conflict delays are not emulated at this time
|
|
|
|
#define is_bwram(addr) (\
|
|
((addr & 0x40e000) == 0x006000) \
|
|
|| ((addr & 0xf00000) == 0x400000) \
|
|
|| ((addr & 0xf00000) == 0x600000) \
|
|
)
|
|
|
|
uint8_t SA1::op_read(unsigned addr) {
|
|
tick();
|
|
if(is_bwram(addr)) tick();
|
|
scheduler.sync_copcpu();
|
|
return sa1bus.read(addr);
|
|
}
|
|
|
|
void SA1::op_write(unsigned addr, uint8_t data) {
|
|
tick();
|
|
if(is_bwram(addr)) tick();
|
|
scheduler.sync_copcpu();
|
|
sa1bus.write(addr, data);
|
|
}
|
|
|
|
#undef is_bwram
|
|
|
|
#endif
|