• 検索結果がありません。

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

デバッグ用ログファイルのファイルポインタを保持