1 #ifndef YACASL2_CASL2_INCLUDED
2 #define YACASL2_CASL2_INCLUDED
10 CMDSIZE = 4, /**<命令の最大文字数 */
11 GRSIZE = 8, /**<汎用レジスタの数。COMET II規格では、8(0から7) */
12 DEFAULT_MEMSIZE = 512, /**<デフォルトのメモリ容量。COMET II規格では、65535語(word) */
13 DEFAULT_CLOCKS = 5000000, /**<デフォルトのクロック周波数。COMET II規格では、未定義 */
20 OF = 0x4, /**<Overflow Flag */
21 SF = 0x2, /**<Sign Flag */
22 ZF = 0x1, /**<Zero Flag */
29 WORD gr[GRSIZE]; /**<汎用レジスタ */
30 WORD sp; /**<スタックポインタ */
31 WORD pr; /**<プログラムレジスタ */
32 WORD fr; /**<フラグレジスタ */
36 * COMET IIの仮想実行マシンシステム
40 WORD *memory; /**<メモリ */
41 int memsize; /**<メモリサイズ */
42 unsigned clocks; /**<クロック周波数 */
49 * 命令タイプは、オペランドにより6種類に分類
62 * 第2オペランド: アドレスに格納されている内容
91 char *name; /**<命令名 */
92 const void (*ptr); /**<命令の関数ポインタ */
99 char *name; /**<命令名 */
100 CMDTYPE type; /**<命令タイプ */
101 WORD code; /**<命令コード */
102 const void (*ptr); /**<命令の関数ポインタ */
108 typedef struct _CMDTAB {
109 struct _CMDTAB *next; /**<リスト次項目へのポインタ */
110 COMET2CMD *cmd; /**<命令コード表の項目 */
114 * プログラム実行時の開始と終了のアドレス
117 WORD start; /**<開始アドレス */
118 WORD end; /**<終了アドレス */
119 bool stop; /**<終了フラグ */
122 extern EXECPTR *execptr;
127 void reset(int memsize, int clocks);
130 * COMET II仮想マシンのシャットダウン
135 * 名前とタイプがキーの命令ハッシュ表を作成する
137 bool create_cmdtype_code();
140 * 命令の名前とタイプから、命令コードを返す
143 WORD getcmdcode(const char *cmd, CMDTYPE type);
146 * 名前とタイプがキーの命令ハッシュ表を解放する
148 void free_cmdtype_code();
151 * コードがキーの命令ハッシュ表を作成する
153 bool create_code_type();
156 * 命令コードから命令の関数ポインタを返す
158 const void (*getcmdptr(WORD code));
161 * コードがキーの命令ハッシュ表を解放する
163 void free_code_type();
165 #endif /* YACASL2_CASL2_INCLUDEDの終端 */