1 #ifndef YACASL2_STRUCT_INCLUDED
2 #define YACASL2_STRUCT_INCLUDED
17 CMDSIZE = 4, /**<命令の最大文字数 */
18 GRSIZE = 8, /**<汎用レジスタの数。COMET II規格では、8(0から7) */
19 DEFAULT_MEMSIZE = 512, /**<デフォルトのメモリ容量。COMET II規格では、65535語(word) */
20 DEFAULT_CLOCKS = 5000000, /**<デフォルトのクロック周波数。COMET II規格では、未定義 */
24 * @brief COMET II フラグのマスク値
27 OF = 0x4, /**<Overflow Flag */
28 SF = 0x2, /**<Sign Flag */
29 ZF = 0x1, /**<Zero Flag */
33 * @brief COMET IIのCPUを表すデータ型
36 WORD gr[GRSIZE]; /**<汎用レジスタ */
37 WORD sp; /**<スタックポインタ */
38 WORD pr; /**<プログラムレジスタ */
39 WORD fr; /**<フラグレジスタ */
43 * @brief COMET IIの仮想実行マシンシステムを表すデータ型
47 WORD *memory; /**<メモリ */
48 int memsize; /**<メモリサイズ */
49 clock_t clocks; /**<クロック周波数 */
53 * @brief COMET IIの仮想実行マシンシステム
68 * 命令タイプは、オペランドにより5種類に分類
73 * - 第1オペランド: 汎用レジスタ。必須
75 * - 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意
80 * - 第1オペランド: 汎用レジスタ。必須
81 * - 第2オペランド: 汎用レジスタ。必須
87 * - 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意
92 * - 第1オペランド: 汎用レジスタ。必須
105 char *name; /**<命令名 */
106 const void (*ptr); /**<命令の関数ポインタ */
113 char *name; /**<命令名 */
114 CMDTYPE type; /**<命令タイプ */
115 WORD code; /**<命令コード */
116 const void (*ptr); /**<命令の関数ポインタ */
122 typedef struct _CMDTAB {
123 struct _CMDTAB *next; /**<リスト次項目へのポインタ */
124 const COMET2CMD *cmd; /**<命令コード表の項目 */
128 * プログラム実行時の開始と終了のアドレス
131 WORD start; /**<開始アドレス */
132 WORD end; /**<終了アドレス */
133 bool stop; /**<終了フラグ */
136 extern EXECPTR *execptr;
139 * @brief 実行モードを表すデータ型
142 bool trace; /**<レジストリの内容をステップごとに表示する場合はtrue */
143 bool logical; /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */
144 bool dump; /**<メモリの内容をステップごとに表示する場合はtrue */
145 int dump_start; /**<メモリの内容をステップごとに表示する場合の開始アドレス */
146 int dump_end; /**<メモリの内容をステップごとに表示する場合の終了アドレス */
147 bool monitor; /**<モニターモードの場合はtrue */
148 bool step; /**<ステップ実行の場合はtrue */
152 * @brief 実行モード: trace, logical, dump, monitor, step
154 extern EXECMODE execmode;
157 * @brief 汎用レジスタの番号からレジスタを表す文字列を返す
159 * @return 汎用レジスタを表す文字列。「GR0」「GR1」・・・「GR7」のいずれか
161 * @param word レジスタ番号[0-7]を表すWORD値
163 char *grstr(WORD word);
168 void reset(int memsize, int clocks);
171 * COMET II仮想マシンのシャットダウン
176 * @brief 命令ハッシュ表を作成する
182 bool create_cmdtable(CMDTAB_HASH hash);
187 void free_cmdtable(CMDTAB_HASH hash);
190 * 命令の名前とタイプから、命令コードを返す
193 WORD getcmdcode(const char *cmd, CMDTYPE type);
196 * 命令コードから命令の関数ポインタを返す
198 const void (*getcmdptr(WORD code));
203 CMDTYPE getcmdtype(WORD code);
208 char *getcmdname(WORD code);