openMSX
|
#include <CPUCore.hh>
Public Member Functions | |
CPUCore (MSXMotherBoard &motherboard, const std::string &name, const BooleanSetting &traceSetting, TclCallback &diHaltCallback, EmuTime::param time) | |
void | setInterface (MSXCPUInterface *interface_) |
void | doReset (EmuTime::param time) |
Reset the CPU. | |
void | execute (bool fastForward) |
void | exitCPULoopSync () |
Request to exit the main CPU emulation loop. | |
void | exitCPULoopAsync () |
Similar to exitCPULoopSync(), but this method may be called from any thread. | |
void | warp (EmuTime::param time) |
EmuTime::param | getCurrentTime () const |
void | wait (EmuTime::param time) |
EmuTime | waitCycles (EmuTime::param time, unsigned cycles) |
void | setNextSyncPoint (EmuTime::param time) |
CacheLines | getCacheLines () |
bool | isM1Cycle (unsigned address) const |
void | raiseIRQ () |
Raises the maskable interrupt count. | |
void | lowerIRQ () |
Lowers the maskable interrupt count. | |
void | raiseNMI () |
Raises the non-maskable interrupt count. | |
void | lowerNMI () |
Lowers the non-maskable interrupt count. | |
void | setFreq (unsigned freq) |
Change the clock freq. | |
BooleanSetting & | getFreqLockedSetting () |
IntegerSetting & | getFreqValueSetting () |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
template<bool PRE_PB, bool POST_PB> | |
NEVER_INLINE byte | RDMEMslow (unsigned address, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE byte | RDMEM_impl2 (unsigned address, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE byte | RDMEM_impl (unsigned address, unsigned cc) |
template<unsigned PC_OFFSET> | |
ALWAYS_INLINE byte | RDMEM_OPCODE (unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
NEVER_INLINE word | RD_WORD_slow (unsigned address, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE word | RD_WORD_impl2 (unsigned address, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE word | RD_WORD_impl (unsigned address, unsigned cc) |
template<unsigned PC_OFFSET> | |
ALWAYS_INLINE word | RD_WORD_PC (unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
NEVER_INLINE void | WRMEMslow (unsigned address, byte value, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE void | WRMEM_impl2 (unsigned address, byte value, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE void | WRMEM_impl (unsigned address, byte value, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
NEVER_INLINE void | WR_WORD_rev_slow (unsigned address, word value, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE void | WR_WORD_rev2 (unsigned address, word value, unsigned cc) |
template<bool PRE_PB, bool POST_PB> | |
ALWAYS_INLINE void | WR_WORD_rev (unsigned address, word value, unsigned cc) |
template<Reg8 R8> | |
ALWAYS_INLINE byte | get8 () const |
template<Reg16 R16> | |
ALWAYS_INLINE word | get16 () const |
template<Reg8 R8> | |
ALWAYS_INLINE void | set8 (byte x) |
template<Reg16 R16> | |
ALWAYS_INLINE void | set16 (word x) |
Public Member Functions inherited from openmsx::CPURegs | |
CPURegs (bool r800) | |
byte | getA () const |
byte | getF () const |
byte | getB () const |
byte | getC () const |
byte | getD () const |
byte | getE () const |
byte | getH () const |
byte | getL () const |
byte | getA2 () const |
byte | getF2 () const |
byte | getB2 () const |
byte | getC2 () const |
byte | getD2 () const |
byte | getE2 () const |
byte | getH2 () const |
byte | getL2 () const |
byte | getIXh () const |
byte | getIXl () const |
byte | getIYh () const |
byte | getIYl () const |
byte | getPCh () const |
byte | getPCl () const |
byte | getSPh () const |
byte | getSPl () const |
word | getAF () const |
word | getBC () const |
word | getDE () const |
word | getHL () const |
word | getAF2 () const |
word | getBC2 () const |
word | getDE2 () const |
word | getHL2 () const |
word | getIX () const |
word | getIY () const |
word | getPC () const |
word | getSP () const |
byte | getIM () const |
byte | getI () const |
byte | getR () const |
bool | getIFF1 () const |
bool | getIFF2 () const |
byte | getHALT () const |
void | setA (byte x) |
void | setF (byte x) |
void | setB (byte x) |
void | setC (byte x) |
void | setD (byte x) |
void | setE (byte x) |
void | setH (byte x) |
void | setL (byte x) |
void | setA2 (byte x) |
void | setF2 (byte x) |
void | setB2 (byte x) |
void | setC2 (byte x) |
void | setD2 (byte x) |
void | setE2 (byte x) |
void | setH2 (byte x) |
void | setL2 (byte x) |
void | setIXh (byte x) |
void | setIXl (byte x) |
void | setIYh (byte x) |
void | setIYl (byte x) |
void | setPCh (byte x) |
void | setPCl (byte x) |
void | setSPh (byte x) |
void | setSPl (byte x) |
void | setAF (word x) |
void | setBC (word x) |
void | setDE (word x) |
void | setHL (word x) |
void | setAF2 (word x) |
void | setBC2 (word x) |
void | setDE2 (word x) |
void | setHL2 (word x) |
void | setIX (word x) |
void | setIY (word x) |
void | setPC (word x) |
void | setSP (word x) |
void | setIM (byte x) |
void | setI (byte x) |
void | setR (byte x) |
void | setIFF1 (bool x) |
void | setIFF2 (bool x) |
void | setHALT (bool x) |
void | setExtHALT (bool x) |
void | incR (byte x) |
void | setCurrentEI () |
void | setCurrentLDAI () |
void | setCurrentCall () |
void | setCurrentPopRet () |
bool | prevWasEI () const |
bool | prevWasLDAI () const |
bool | prev2WasCall () const |
bool | prevWasPopRet () const |
void | endInstruction () |
void | clearPrevious () |
void | checkNoCurrentFlags () const |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
Friends | |
class | MSXCPU |
class | Z80TYPE |
class | R800TYPE |
Definition at line 54 of file CPUCore.hh.
openmsx::CPUCore< T >::CPUCore | ( | MSXMotherBoard & | motherboard, |
const std::string & | name, | ||
const BooleanSetting & | traceSetting, | ||
TclCallback & | diHaltCallback, | ||
EmuTime::param | time | ||
) |
Definition at line 296 of file CPUCore.cc.
References openmsx::CPUCore< CPU_POLICY >::doReset().
void openmsx::CPUCore< T >::doReset | ( | EmuTime::param | time | ) |
Reset the CPU.
Definition at line 343 of file CPUCore.cc.
Referenced by openmsx::CPUCore< CPU_POLICY >::CPUCore().
void openmsx::CPUCore< T >::execute | ( | bool | fastForward | ) |
Definition at line 2539 of file CPUCore.cc.
void openmsx::CPUCore< T >::exitCPULoopAsync | ( | ) |
Similar to exitCPULoopSync(), but this method may be called from any thread.
Although now the loop will only be exited 'soon'.
Definition at line 406 of file CPUCore.cc.
void openmsx::CPUCore< T >::exitCPULoopSync | ( | ) |
Request to exit the main CPU emulation loop.
This method may only be called from the main thread. The CPU loop will immediately be exited (current instruction will be finished, but no new instruction will be executed).
Definition at line 411 of file CPUCore.cc.
References openmsx::Thread::isMainThread().
ALWAYS_INLINE word openmsx::CPUCore< CPU_POLICY >::get16 | ( | ) | const |
Definition at line 2663 of file CPUCore.cc.
References openmsx::AF, openmsx::BC, openmsx::DE, openmsx::HL, openmsx::IX, openmsx::IY, openmsx::SP, and UNREACHABLE.
ALWAYS_INLINE byte openmsx::CPUCore< CPU_POLICY >::get8 | ( | ) | const |
Definition at line 2645 of file CPUCore.cc.
References openmsx::B, openmsx::C, openmsx::D, openmsx::DUMMY, openmsx::E, openmsx::F, openmsx::H, openmsx::IXH, openmsx::IXL, openmsx::IYH, openmsx::IYL, openmsx::L, openmsx::REG_I, openmsx::REG_R, and UNREACHABLE.
|
inline |
Definition at line 87 of file CPUCore.hh.
EmuTime::param openmsx::CPUCore< T >::getCurrentTime | ( | ) | const |
Definition at line 338 of file CPUCore.cc.
|
inline |
Definition at line 121 of file CPUCore.hh.
|
inline |
Definition at line 122 of file CPUCore.hh.
bool openmsx::CPUCore< T >::isM1Cycle | ( | unsigned | address | ) | const |
Definition at line 472 of file CPUCore.cc.
void openmsx::CPUCore< T >::lowerIRQ | ( | ) |
Lowers the maskable interrupt count.
Devices should call MSXCPU::lowerIRQ instead, or use the IRQHelper class.
Definition at line 450 of file CPUCore.cc.
void openmsx::CPUCore< T >::lowerNMI | ( | ) |
Lowers the non-maskable interrupt count.
Devices should call MSXCPU::lowerNMI instead, or use the IRQHelper class.
Definition at line 466 of file CPUCore.cc.
void openmsx::CPUCore< T >::raiseIRQ | ( | ) |
Raises the maskable interrupt count.
Devices should call MSXCPU::raiseIRQ instead, or use the IRQHelper class.
Definition at line 441 of file CPUCore.cc.
void openmsx::CPUCore< T >::raiseNMI | ( | ) |
Raises the non-maskable interrupt count.
Devices should call MSXCPU::raiseNMI instead, or use the IRQHelper class.
Definition at line 456 of file CPUCore.cc.
ALWAYS_INLINE word openmsx::CPUCore< CPU_POLICY >::RD_WORD_impl | ( | unsigned | address, |
unsigned | cc | ||
) |
Definition at line 644 of file CPUCore.cc.
ALWAYS_INLINE word openmsx::CPUCore< CPU_POLICY >::RD_WORD_impl2 | ( | unsigned | address, |
unsigned | cc | ||
) |
Definition at line 630 of file CPUCore.cc.
References openmsx::CacheLine::BITS, openmsx::CacheLine::LOW, and Endian::read_UA_L16().
ALWAYS_INLINE word openmsx::CPUCore< CPU_POLICY >::RD_WORD_PC | ( | unsigned | cc | ) |
Definition at line 650 of file CPUCore.cc.
NEVER_INLINE word openmsx::CPUCore< CPU_POLICY >::RD_WORD_slow | ( | unsigned | address, |
unsigned | cc | ||
) |
Definition at line 623 of file CPUCore.cc.
ALWAYS_INLINE byte openmsx::CPUCore< CPU_POLICY >::RDMEM_impl | ( | unsigned | address, |
unsigned | cc | ||
) |
Definition at line 597 of file CPUCore.cc.
ALWAYS_INLINE byte openmsx::CPUCore< CPU_POLICY >::RDMEM_impl2 | ( | unsigned | address, |
unsigned | cc | ||
) |
Definition at line 584 of file CPUCore.cc.
References openmsx::CacheLine::BITS.
ALWAYS_INLINE byte openmsx::CPUCore< CPU_POLICY >::RDMEM_OPCODE | ( | unsigned | cc | ) |
Definition at line 603 of file CPUCore.cc.
NEVER_INLINE byte openmsx::CPUCore< CPU_POLICY >::RDMEMslow | ( | unsigned | address, |
unsigned | cc | ||
) |
Definition at line 558 of file CPUCore.cc.
References openmsx::CacheLine::BITS, openmsx::CacheLine::HIGH, and openmsx::NonCachedRead.
void openmsx::CPUCore< T >::serialize | ( | Archive & | ar, |
unsigned | version | ||
) |
Definition at line 4398 of file CPUCore.cc.
ALWAYS_INLINE void openmsx::CPUCore< CPU_POLICY >::set16 | ( | word | x | ) |
Definition at line 2691 of file CPUCore.cc.
References openmsx::AF, openmsx::BC, openmsx::DE, openmsx::HL, openmsx::IX, openmsx::IY, openmsx::SP, and UNREACHABLE.
ALWAYS_INLINE void openmsx::CPUCore< CPU_POLICY >::set8 | ( | byte | x | ) |
Definition at line 2673 of file CPUCore.cc.
References openmsx::B, openmsx::C, openmsx::D, openmsx::DUMMY, openmsx::E, openmsx::F, openmsx::H, openmsx::IXH, openmsx::IXL, openmsx::IYH, openmsx::IYL, openmsx::L, openmsx::REG_I, openmsx::REG_R, and UNREACHABLE.
void openmsx::CPUCore< T >::setFreq | ( | unsigned | freq | ) |
Change the clock freq.
Definition at line 522 of file CPUCore.cc.
|
inline |
Definition at line 61 of file CPUCore.hh.
void openmsx::CPUCore< T >::setNextSyncPoint | ( | EmuTime::param | time | ) |
Definition at line 505 of file CPUCore.cc.
void openmsx::CPUCore< T >::wait | ( | EmuTime::param | time | ) |
Definition at line 488 of file CPUCore.cc.
EmuTime openmsx::CPUCore< T >::waitCycles | ( | EmuTime::param | time, |
unsigned | cycles | ||
) |
Definition at line 495 of file CPUCore.cc.
void openmsx::CPUCore< T >::warp | ( | EmuTime::param | time | ) |
Definition at line 332 of file CPUCore.cc.
ALWAYS_INLINE void openmsx::CPUCore< CPU_POLICY >::WR_WORD_rev | ( | unsigned | address, |
word | value, | ||
unsigned | cc | ||
) |
Definition at line 760 of file CPUCore.cc.
ALWAYS_INLINE void openmsx::CPUCore< CPU_POLICY >::WR_WORD_rev2 | ( | unsigned | address, |
word | value, | ||
unsigned | cc | ||
) |
Definition at line 745 of file CPUCore.cc.
References openmsx::CacheLine::BITS, openmsx::CacheLine::LOW, and Endian::write_UA_L16().
NEVER_INLINE void openmsx::CPUCore< CPU_POLICY >::WR_WORD_rev_slow | ( | unsigned | address, |
word | value, | ||
unsigned | cc | ||
) |
Definition at line 738 of file CPUCore.cc.
ALWAYS_INLINE void openmsx::CPUCore< CPU_POLICY >::WRMEM_impl | ( | unsigned | address, |
byte | value, | ||
unsigned | cc | ||
) |
Definition at line 702 of file CPUCore.cc.
ALWAYS_INLINE void openmsx::CPUCore< CPU_POLICY >::WRMEM_impl2 | ( | unsigned | address, |
byte | value, | ||
unsigned | cc | ||
) |
Definition at line 688 of file CPUCore.cc.
References openmsx::CacheLine::BITS.
NEVER_INLINE void openmsx::CPUCore< CPU_POLICY >::WRMEMslow | ( | unsigned | address, |
byte | value, | ||
unsigned | cc | ||
) |
Definition at line 662 of file CPUCore.cc.
References openmsx::CacheLine::BITS, openmsx::CacheLine::HIGH, and openmsx::NonCachedWrite.
|
friend |
Definition at line 481 of file CPUCore.hh.
|
friend |
Definition at line 483 of file CPUCore.hh.
|
friend |
Definition at line 482 of file CPUCore.hh.