CZ80はZ80CPUをエミュレーションするクラスです。
(非テンプレートモードのみ)
CZ80 | コンストラクタ |
~CZ80 | デストラクタ |
Initialize | 初期化処理 |
Reset | リセット処理 |
RegAF | AFレジスタの参照 |
RegA | Aレジスタの参照 |
RegF | Fレジスタの参照 |
RegAF2 | AF'レジスタの参照 |
RegBC | BCレジスタの参照 |
RegB | Bレジスタの参照 |
RegC | Cレジスタの参照 |
RegBC2 | BC'レジスタの参照 |
RegDE | DEレジスタの参照 |
RegD | Dレジスタの参照 |
RegE | Eレジスタの参照 |
RegDE2 | DE'レジスタの参照 |
RegHL | HLレジスタの参照 |
RegH | Hレジスタの参照 |
RegL | Lレジスタの参照 |
RegHL2 | HL'レジスタの参照 |
RegIX | IXレジスタの参照 |
RegIXH | IXHレジスタの参照 |
RegIXL | IXLレジスタの参照 |
RegIY | IYレジスタの参照 |
RegIYH | IYHレジスタの参照 |
RegIYL | IYLレジスタの参照 |
RegSP | SPレジスタの参照 |
RegPC | PCレジスタの参照 |
GetRegI | Iレジスタ値の取得 |
SetRegI | Iレジスタ値の設定 |
GetRegR | Rレジスタ値の取得 |
SetRegR | Rレジスタ値の設定 |
ReadMemory | メモリから読み出し |
WriteMemory | メモリへ書き込み |
ReadMemoryM1 | メモリから読み出し(M1サイクル) |
ReadIO | I/Oポートから入力 |
WriteIO | I/Oポートへ出力 |
ExecuteOneOpCode | 1命令実行 |
ExecuteMultiOpCode | 複数命令実行 |
AddExecClock | 実行クロックを加算 |
GetProgressClock | 実行中クロックを取得(複数命令実行時) |
IsEnableInterrupt | 割り込みが許可されているか判定 |
DoInterrupt | 割り込み処理 |
DoNMInterrupt | 割り込み処理 |
IsHalting | HALT中か判定 |
ProcessHALT | HALT処理 |
DisAssemble | 逆アセンブル |
GetMnemonic | ニーモニックを取得 |
public:
CZ80();
クラスのコンストラクタです。
public:
virtual ~CZ80();
クラスのデストラクタです。
public:
virtual void Initialize();
CPU内部情報を初期化します。
(実行前に必ず1回呼ぶ必要あり)
public:
virtual void Reset();
CPUをリセットします。
public:
URegisterPair& RegAF();
AFレジスタを参照します。
public:
CRegister& RegA();
Aレジスタを参照します。
public:
CRegister& RegF();
Fレジスタを参照します。
public:
URegisterPair& RegAF2();
AF'レジスタ(裏AFレジスタ)を参照します。
public:
URegisterPair& RegBC();
BCレジスタを参照します。
public:
CRegister& RegB();
Bレジスタを参照します。
public:
CRegister& RegC();
Cレジスタを参照します。
public:
URegisterPair& RegBC2();
BC'レジスタ(裏BCレジスタ)を参照します。
public:
URegisterPair& RegDE();
DEレジスタを参照します。
public:
CRegister& RegD();
Dレジスタを参照します。
public:
CRegister& RegE();
Eレジスタを参照します。
public:
URegisterPair& RegDE2();
DE'レジスタ(裏DEレジスタ)を参照します。
public:
URegisterPair& RegHL();
HLレジスタを参照します。
public:
CRegister& RegH();
Hレジスタを参照します。
public:
CRegister& RegL();
Lレジスタを参照します。
public:
URegisterPair& RegHL2();
HL'レジスタ(裏HLレジスタ)を参照します。
public:
URegisterPair& RegIX();
IXレジスタを参照します。
public:
CRegister& RegIXH();
IXHレジスタ(IXレジスタ上位バイト)を参照します。
public:
CRegister& RegIXL();
IXLレジスタ(IXレジスタ下位バイト)を参照します。
public:
URegisterPair& RegIY();
IYレジスタを参照します。
public:
CRegister& RegIYH();
IYHレジスタ(IYレジスタ上位バイト)を参照します。
public:
CRegister& RegIYL();
IYLレジスタ(IYレジスタ下位バイト)を参照します。
public:
URegisterPair& RegSP();
SPレジスタ(スタックポインタ)を参照します。
public:
URegisterPair& RegPC();
PCレジスタ(プログラムカウンタ)を参照します。
public:
uint8_t GetRegI();
Iレジスタ(割り込みレジスタ)値を取得します。
public:
void SetRegI(uint8_t btData);
Iレジスタ(割り込みレジスタ)値を設定します。
public:
uint8_t GetRegR();
Rレジスタ(リフレッシュレジスタ)値を取得します。
public:
void SetRegR(uint8_t btData);
Rレジスタ(リフレッシュレジスタ)値を設定します。
public:
virtual uint8_t ReadMemory(int nAddress) = 0;
メモリの指定したアドレスからデータを読み出す際に呼ばれます。
(サブクラスでの実装が必要)
public:
virtual void WriteMemory(int nAddress, uint8_t btData) = 0;
メモリの指定したアドレスへデータを書き込む際に呼ばれます。
(サブクラスでの実装が必要)
public:
virtual uint8_t ReadMemoryM1(int nAddress) = 0;
メモリの指定したアドレスからデータを読み出す際に呼ばれます。
(M1サイクル版。サブクラスでの実装が必要)
public:
virtual uint8_t ReadIO(int nAddress) = 0;
指定したI/Oポートから入力する際に呼ばれます。
(サブクラスでの実装が必要)
public:
virtual void WriteIO(int nAddress, uint8_t btData) = 0;
指定したI/Oポートへ出力する際に呼ばれます。
(サブクラスでの実装が必要)
public:
int ExecuteOneOpCode();
Z80CPUを1命令実行します。
実行に要したクロックが返ります。
public:
int ExecuteMultiOpCode(int nOpCodeCount);
Z80CPUをnOpCodeCountで指定した命令数実行します。
実行に要したクロックが返ります。
public:
void AddExecClock(int nExecClock);
ReadMemory/WriteMemory等の処理中、ウェイトを入れる必要がある場合に呼び出します。
public:
int GetProgressClock();
複数命令実行中、ExecuteMultiOpCodeが呼び出されたときから何クロックが経過したかを取得します。
public:
bool IsEnableInterrupt();
割り込みが許可されているか判定します。
(EI/DI命令)
public:
virtual int DoInterrupt(uint8_t btIntVect);
割り込みが発生したときに呼び出されます。
実行に要したクロックを返します。
※オーバーライド時は必ずCZ80::DoInterruptを呼び出してください。
public:
virtual int DoNMInterrupt();
NMI割り込みが発生したときに呼び出されます。
実行に要したクロックを返します。
※オーバーライド時は必ずCZ80::DoNMInterruptを呼び出してください。
public:
bool IsHalting();
CPUがHALT命令により停止中か判定します。
※HALTは割り込みにより解除されます。
public:
virtual void ProcessHALT();
HALT命令が実行されたときに呼び出されます。
public:
int DisAssemble();
逆アセンブルを実行します。
(結果はニーモニックバッファに格納)
実行に要するクロック数が返されます。
逆アセンブル後、プログラムカウンタは命令バイト数分インクリメントされます。(分岐命令は無視)
public:
const char* GetMnemonic();
逆アセンブル結果を格納するバッファを返します。
(DisAssembleが呼ばれたとき、バッファ内容を更新)