A.2 PIC 16F648A のエミュレータの実装
A.2.2 pic16f648 t 構造体
プロセッサインスタンスを保持するデータ構造としてpic16f648 t構造体を定義 した.
typedef struct { union {
uint8_t m[0x0200];
struct {
uint8_t bank0[0x80];
uint8_t bank1[0x80];
uint8_t bank2[0x80];
uint8_t bank3[0x80];
};
} reg;
uint16_t memory[0x1000];
uint8_t eeprom[0x0100];
uint16_t pc;
uint16_t stack[8];
uint32_t sp;
uint16_t config;
uint8_t accumulator;
uint8_t WDT;
uint8_t presc0;
uint8_t presc1;
uint8_t presc2;
uint8_t pstsc2;
uint32_t tick;
uint64_t next;
int extracycle;
int loaded;
int running;
int intr;
pthread_mutex_t lock;
pthread_t thread;
uint64_t m_freq;
uint64_t m_sttm;
uint64_t m_crtm;
uint64_t m_step;
uint64_t m_int0;
uint64_t m_int1;
uint64_t m_int2;
FILE *logfd;
} pic16f648_t;
この構造体内には以下の挙げた通り,全てのプロセッサステートを保持するた めの情報が定義されている.
• union reg
データメモリ領域
– uint8 t m[0x0200]
フラットアクセス用領域
– struct{
バンクアクセス用無名構造体
∗ uint8 t bank0[0x0080]
バンクアクセス用領域(Bank0)
∗ uint8 t bank1[0x0080]
バンクアクセス用領域(Bank1)
∗ uint8 t bank2[0x0080]
バンクアクセス用領域(Bank2)
∗ uint8 t bank3[0x0080]
バンクアクセス用領域(Bank3)
– };
• uint16 t memory
プログラムメモリ領域(14ビットワード×4,096)
• uint8 t eeprom
E2PROM領域(8ビットワード×256)
• uint16 t pc
プログラムカウンタ
• uint16 t stack[8]
スタック(14ビットワード×8のFILO)
• uint32 t sp スタックポインタ
• uint16 t config
コンフィグレーションワード
• uint8 t accumulator ワーキングレジスタW
• uint8 t WDT
ウォッチドッグカウンタ
• uint8 t presc0 タイマ0プリスケーラ
• uint8 t presc1 タイマ1プリスケーラ
• uint8 t presc2 タイマ2プリスケーラ
• uint8 t pstsc2
タイマ2ポストスケーラ
また,これらのプロセッサ内部の状態の他,以下の実行制御用の変数も定義さ れている.
• uint32 t tick
エミュレートされたプロセッサの1サイクルに相当するホストPCのクロッ ク数を保持
• uint64 t next
エミュレートされたプロセッサの次のサイクルが開始される時刻におけるホ ストPCのクロックカウンタ値を保持
• int extracycle
現在エミュレートされている命令の実行サイクル数を保持
• int loaded
該当するプロセッサインスタンスにバイナリコードがロードされていること を示すフラグ
• int running
該当するプロセッサインスタンスのエミュレーションが実行中であることを 示すフラグ
• int intr
該当するプロセッサインスタンスのエミュレーションが割り込みコンテキス トを実行中であることを示すフラグ
• pthread mutex t lock
プロセッサインスタンスの内部データへのアクセスに対する排他制御を行う ためのミューテックス
• pthread t thread
プロセッサインスタンスの実行スレッドを保持するスレッド構造体
• uint64 t m freq
エミュレーションを行っているホストPCのプロセッサの動作周波数を保持
• uint64 t m sttm
エミュレートされたプロセッサの実行開始時刻におけるホストPCのクロッ クカウンタ値を保持
• uint64 t m crtm
エミュレートされたプロセッサの現在時刻におけるホストPCのクロックカ ウンタ値を保持
• uint64 t m step
エミュレートされたプロセッサの実行開始時からの実行サイクル数
• uint64 t m int0
実行開始時からタイマ0割り込み発生回数
• uint64 t m int1
実行開始時からタイマ1割り込み発生回数
• uint64 t m int2
実行開始時からタイマ2割り込み発生回数
• FILE *logfd
デバッグ用ログファイルのファイルポインタを保持