1 #ifndef YACASL2_CASL2_INCLUDED
2 #define YACASL2_CASL2_INCLUDED
19 CMDSIZE = 4, /* 命令の最大文字数 */
20 GRSIZE = 8, /* 汎用レジスタの数。COMET II規格で、7 */
21 DEFAULT_MEMSIZE = 512, /* デフォルトのメモリ容量。COMET II規格では、65536語 */
22 DEFAULT_CLOCKS = 5000000, /* デフォルトのクロック周波数。COMET II規格では、未定義 */
25 /* COMET II フラグのマスク値 */
27 OF = 0x4, /* Overflow Flag */
28 SF = 0x2, /* Sign Flag */
29 ZF = 0x1, /* Zero Flag */
34 WORD gr[GRSIZE]; /* 汎用レジスタ */
35 WORD sp; /* スタックポインタ */
36 WORD pr; /* プログラムレジスタ */
37 WORD fr; /* フラグレジスタ */
40 /* COMET IIの仮装実行マシンシステム */
43 WORD *memory; /* メモリ */
44 int memsize; /* メモリサイズ */
45 int clocks; /* クロック周波数 */
51 /* 命令タイプは、オペランドにより6種類に分類 */
60 /* 第2オペランド: アドレスに格納されている内容 */
86 extern int comet2cmdsize;
89 typedef struct _CMDTAB {
94 extern CMDTAB **cmdtype_code;
95 extern CMDTAB **code_type;
96 extern int cmdtabsize;
98 /* CASL2プログラムのプロパティ */
100 WORD start; /* プログラムの開始番地 */
101 WORD end; /* プログラムの終了番地 */
104 extern PROGPROP *prog;
106 /* COMET II仮想マシンのリセット */
107 void reset(int memsize, int clocks);
109 /* COMET II仮想マシンのシャットダウン */
112 /* 命令と命令タイプがキーのハッシュ表を作成する */
113 bool create_cmdtype_code();
115 /* 命令と命令タイプから、命令コードを取得する */
116 /* 無効な場合は0xFFFFを返す */
117 WORD getcmdcode(const char *cmd, CMDTYPE type);
119 /* 命令と命令タイプがキーのハッシュ表を表示する */
120 void print_cmdtype_code();
122 /* 命令と命令タイプがキーのハッシュ表を解放する */
123 void free_cmdtype_code();
125 /* 命令コードがキーのハッシュ表を作成する */
126 bool create_code_type();
128 /* 命令コードから命令タイプを取得する */
130 CMDTYPE getcmdtype(WORD code);
132 /* 命令コードがキーのハッシュ表を表示する */
133 void print_code_type();
135 /* 命令コードがキーのハッシュ表を解放する */
136 void free_code_type();
138 /* 指定されたファイルにアセンブル結果を書込 */
139 void outassemble(const char *file);
141 #endif /* YACASL2_CASL2_INCLUDEDの終端 */