1 #ifndef YACASL2_CASL2_INCLUDED
2 #define YACASL2_CASL2_INCLUDED
16 CMDSIZE = 4, /**<命令の最大文字数 */
17 GRSIZE = 8, /**<汎用レジスタの数。COMET II規格では、8(0から7) */
18 DEFAULT_MEMSIZE = 512, /**<デフォルトのメモリ容量。COMET II規格では、65535語(word) */
19 DEFAULT_CLOCKS = 5000000, /**<デフォルトのクロック周波数。COMET II規格では、未定義 */
23 * @brief COMET II フラグのマスク値
26 OF = 0x4, /**<Overflow Flag */
27 SF = 0x2, /**<Sign Flag */
28 ZF = 0x1, /**<Zero Flag */
32 * @brief COMET IIのCPUを表すデータ型
35 WORD gr[GRSIZE]; /**<汎用レジスタ */
36 WORD sp; /**<スタックポインタ */
37 WORD pr; /**<プログラムレジスタ */
38 WORD fr; /**<フラグレジスタ */
42 * @brief COMET IIの仮想実行マシンシステムを表すデータ型
46 WORD *memory; /**<メモリ */
47 int memsize; /**<メモリサイズ */
48 clock_t clocks; /**<クロック周波数 */
52 * @brief COMET IIの仮想実行マシンシステム
58 * 命令タイプは、オペランドにより5種類に分類
63 * - 第1オペランド: 汎用レジスタ。必須
65 * - 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意
70 * - 第1オペランド: 汎用レジスタ。必須
71 * - 第2オペランド: 汎用レジスタ。必須
77 * - 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意
82 * - 第1オペランド: 汎用レジスタ。必須
95 char *name; /**<命令名 */
96 const void (*ptr); /**<命令の関数ポインタ */
103 char *name; /**<命令名 */
104 CMDTYPE type; /**<命令タイプ */
105 WORD code; /**<命令コード */
106 const void (*ptr); /**<命令の関数ポインタ */
112 typedef struct _CMDTAB {
113 struct _CMDTAB *next; /**<リスト次項目へのポインタ */
114 COMET2CMD *cmd; /**<命令コード表の項目 */
118 * プログラム実行時の開始と終了のアドレス
121 WORD start; /**<開始アドレス */
122 WORD end; /**<終了アドレス */
123 bool stop; /**<終了フラグ */
126 extern EXECPTR *execptr;
129 * @brief 汎用レジスタの番号からレジスタを表す文字列を返す
131 * @return 汎用レジスタを表す文字列。「GR0」「GR1」・・・「GR7」のいずれか
133 * @param word レジスタ番号[0-7]を表すWORD値
135 char *grstr(WORD word);
140 void reset(int memsize, int clocks);
143 * COMET II仮想マシンのシャットダウン
148 * 名前とタイプがキーの命令ハッシュ表を作成する
150 bool create_cmdtype_code();
153 * 命令の名前とタイプから、命令コードを返す
156 WORD getcmdcode(const char *cmd, CMDTYPE type);
159 * 名前とタイプがキーの命令ハッシュ表を解放する
161 void free_cmdtype_code();
164 * コードがキーの命令ハッシュ表を作成する
166 bool create_code_cmdtype();
169 * 命令コードから命令の関数ポインタを返す
171 const void (*getcmdptr(WORD code));
176 CMDTYPE getcmdtype(WORD code);
181 char *getcmdname(WORD code);
184 * コードがキーの命令ハッシュ表を解放する
186 void free_code_cmdtype();
188 #endif /* YACASL2_CASL2_INCLUDEDの終端 */