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が呼ばれたとき、バッファ内容を更新)