1 #ifndef YACASL2_CASL2_INCLUDED
2 #define YACASL2_CASL2_INCLUDED
18 #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
23 CMDSIZE = 4, /* 命令の最大文字数 */
24 GRSIZE = 8, /* 汎用レジスタの数。COMET II規格で、7 */
25 DEFAULT_MEMSIZE = 512, /* デフォルトのメモリ容量。COMET II規格では、65536語 */
26 DEFAULT_CLOCKS = 5000000, /* デフォルトのクロック周波数。COMET II規格では、未定義 */
29 /* COMET II フラグのマスク値 */
31 OF = 0x4, /* Overflow Flag */
32 SF = 0x2, /* Sign Flag */
33 ZF = 0x1, /* Zero Flag */
38 WORD gr[GRSIZE]; /* 汎用レジスタ */
39 WORD sp; /* スタックポインタ */
40 WORD pr; /* プログラムレジスタ */
41 WORD fr; /* フラグレジスタ */
44 /* COMET IIの仮装実行マシンシステム */
47 WORD *memory; /* メモリ */
48 int memsize; /* メモリサイズ */
49 int clocks; /* クロック周波数 */
55 /* 命令タイプは、オペランドにより6種類に分類 */
64 /* 第2オペランド: アドレスに格納されている内容 */
90 extern int comet2cmdsize;
93 typedef struct _CMDTAB {
98 extern CMDTAB **cmdtype_code;
99 extern CMDTAB **code_type;
100 extern int cmdtabsize;
102 /* CASL2プログラムのプロパティ */
104 WORD start; /* プログラムの開始番地 */
105 WORD end; /* プログラムの終了番地 */
108 extern PROGPROP *prog;
110 /* COMET II仮想マシンのリセット */
111 void reset(int memsize, int clocks);
113 /* COMET II仮想マシンのシャットダウン */
116 /* 命令と命令タイプがキーのハッシュ表を作成する */
117 bool create_cmdtype_code();
119 /* 命令と命令タイプから、命令コードを取得する */
120 /* 無効な場合は0xFFFFを返す */
121 WORD getcmdcode(const char *cmd, CMDTYPE type);
123 /* 命令と命令タイプがキーのハッシュ表を表示する */
124 void print_cmdtype_code();
126 /* 命令と命令タイプがキーのハッシュ表を解放する */
127 void free_cmdtype_code();
129 /* 命令コードがキーのハッシュ表を作成する */
130 bool create_code_type();
132 /* 命令コードから命令タイプを取得する */
134 CMDTYPE getcmdtype(WORD code);
136 /* 命令コードがキーのハッシュ表を表示する */
137 void print_code_type();
139 /* 命令コードがキーのハッシュ表を解放する */
140 void free_code_type();
142 /* 指定されたファイルにアセンブル結果を書込 */
143 void outassemble(const char *file);
145 #endif /* YACASL2_CASL2_INCLUDEDの終端 */