Z80Emulator : CZ80

◎概要

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レジスタ値の設定

メモリ・I/O操作

ReadMemory メモリから読み出し
WriteMemory メモリへ書き込み
ReadMemoryM1 メモリから読み出し(M1サイクル)
ReadIO I/Oポートから入力
WriteIO I/Oポートへ出力

実行

ExecuteOneOpCode 1命令実行
ExecuteMultiOpCode 複数命令実行
AddExecClock 実行クロックを加算
GetProgressClock 実行中クロックを取得(複数命令実行時)

割り込み

IsEnableInterrupt 割り込みが許可されているか判定
DoInterrupt 割り込み処理
DoNMInterrupt 割り込み処理

HALT

IsHalting HALT中か判定
ProcessHALT HALT処理

逆アセンブル

DisAssemble 逆アセンブル
GetMnemonic ニーモニックを取得

◎クラスメンバ詳細

CZ80

public:
CZ80();

クラスのコンストラクタです。

~CZ80

public:
virtual ~CZ80();

クラスのデストラクタです。

Initialize

public:
virtual void Initialize();

CPU内部情報を初期化します。
(実行前に必ず1回呼ぶ必要あり)

Reset

public:
virtual void Reset();

CPUをリセットします。

RegAF

public:
URegisterPair& RegAF();

AFレジスタを参照します。

RegA

public:
CRegister& RegA();

Aレジスタを参照します。

RegF

public:
CRegister& RegF();

Fレジスタを参照します。

RegAF2

public:
URegisterPair& RegAF2();

AF'レジスタ(裏AFレジスタ)を参照します。

RegBC

public:
URegisterPair& RegBC();

BCレジスタを参照します。

RegB

public:
CRegister& RegB();

Bレジスタを参照します。

RegC

public:
CRegister& RegC();

Cレジスタを参照します。

RegBC2

public:
URegisterPair& RegBC2();

BC'レジスタ(裏BCレジスタ)を参照します。

RegDE

public:
URegisterPair& RegDE();

DEレジスタを参照します。

RegD

public:
CRegister& RegD();

Dレジスタを参照します。

RegE

public:
CRegister& RegE();

Eレジスタを参照します。

RegDE2

public:
URegisterPair& RegDE2();

DE'レジスタ(裏DEレジスタ)を参照します。

RegHL

public:
URegisterPair& RegHL();

HLレジスタを参照します。

RegH

public:
CRegister& RegH();

Hレジスタを参照します。

RegL

public:
CRegister& RegL();

Lレジスタを参照します。

RegHL2

public:
URegisterPair& RegHL2();

HL'レジスタ(裏HLレジスタ)を参照します。

RegIX

public:
URegisterPair& RegIX();

IXレジスタを参照します。

RegIXH

public:
CRegister& RegIXH();

IXHレジスタ(IXレジスタ上位バイト)を参照します。

RegIXL

public:
CRegister& RegIXL();

IXLレジスタ(IXレジスタ下位バイト)を参照します。

RegIY

public:
URegisterPair& RegIY();

IYレジスタを参照します。

RegIYH

public:
CRegister& RegIYH();

IYHレジスタ(IYレジスタ上位バイト)を参照します。

RegIYL

public:
CRegister& RegIYL();

IYLレジスタ(IYレジスタ下位バイト)を参照します。

RegSP

public:
URegisterPair& RegSP();

SPレジスタ(スタックポインタ)を参照します。

RegPC

public:
URegisterPair& RegPC();

PCレジスタ(プログラムカウンタ)を参照します。

GetRegI

public:
uint8_t GetRegI();

Iレジスタ(割り込みレジスタ)値を取得します。

SetRegI

public:
void SetRegI(uint8_t btData);

Iレジスタ(割り込みレジスタ)値を設定します。

GetRegR

public:
uint8_t GetRegR();

Rレジスタ(リフレッシュレジスタ)値を取得します。

SetRegR

public:
void SetRegR(uint8_t btData);

Rレジスタ(リフレッシュレジスタ)値を設定します。

ReadMemory

public:
virtual uint8_t ReadMemory(int nAddress) = 0;

メモリの指定したアドレスからデータを読み出す際に呼ばれます。
(サブクラスでの実装が必要)

WriteMemory

public:
virtual void WriteMemory(int nAddress, uint8_t btData) = 0;

メモリの指定したアドレスへデータを書き込む際に呼ばれます。
(サブクラスでの実装が必要)

ReadMemoryM1

public:
virtual uint8_t ReadMemoryM1(int nAddress) = 0;

メモリの指定したアドレスからデータを読み出す際に呼ばれます。
(M1サイクル版。サブクラスでの実装が必要)

ReadIO

public:
virtual uint8_t ReadIO(int nAddress) = 0;

指定したI/Oポートから入力する際に呼ばれます。
(サブクラスでの実装が必要)

WriteIO

public:
virtual void WriteIO(int nAddress, uint8_t btData) = 0;

指定したI/Oポートへ出力する際に呼ばれます。
(サブクラスでの実装が必要)

ExecuteOneOpCode

public:
int ExecuteOneOpCode();

Z80CPUを1命令実行します。
実行に要したクロックが返ります。

ExecuteMultiOpCode

public:
int ExecuteMultiOpCode(int nOpCodeCount);

Z80CPUをnOpCodeCountで指定した命令数実行します。
実行に要したクロックが返ります。

AddExecClock

public:
void AddExecClock(int nExecClock);

ReadMemory/WriteMemory等の処理中、ウェイトを入れる必要がある場合に呼び出します。

GetProgressClock

public:
int GetProgressClock();

複数命令実行中、ExecuteMultiOpCodeが呼び出されたときから何クロックが経過したかを取得します。

IsEnableInterrupt

public:
bool IsEnableInterrupt();

割り込みが許可されているか判定します。
(EI/DI命令)

DoInterrupt

public:
virtual int DoInterrupt(uint8_t btIntVect);

割り込みが発生したときに呼び出されます。
実行に要したクロックを返します。
※オーバーライド時は必ずCZ80::DoInterruptを呼び出してください。

DoNMInterrupt

public:
virtual int DoNMInterrupt();

NMI割り込みが発生したときに呼び出されます。
実行に要したクロックを返します。
※オーバーライド時は必ずCZ80::DoNMInterruptを呼び出してください。

IsHalting

public:
bool IsHalting();

CPUがHALT命令により停止中か判定します。
※HALTは割り込みにより解除されます。

ProcessHALT

public:
virtual void ProcessHALT();

HALT命令が実行されたときに呼び出されます。

DisAssemble

public:
int DisAssemble();

逆アセンブルを実行します。
(結果はニーモニックバッファに格納)
実行に要するクロック数が返されます。
逆アセンブル後、プログラムカウンタは命令バイト数分インクリメントされます。(分岐命令は無視)

GetMnemonic

public:
const char* GetMnemonic();

逆アセンブル結果を格納するバッファを返します。
(DisAssembleが呼ばれたとき、バッファ内容を更新)

1