1 #ifndef YACASL2_CASL2_INCLUDED
2 #define YACASL2_CASL2_INCLUDED
17 #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
22 CMDSIZE = 4, /* 命令の最大文字数 */
23 REGSIZE = 8, /* 汎用レジスタの数 */
24 DEFAULT_MEMSIZE = 512, /* デフォルトのメモリ容量。COMET II規格では、65536語 */
25 DEFAULT_CLOCKS = 5000000, /* デフォルトのクロック周波数。COMET II規格では、未定義 */
31 /* COMET IIのCPUレジスタ */
32 extern WORD GR[REGSIZE], SP, PR, FR;
34 /* COMET II フラグのマスク値 */
36 OF = 0x4, /* Overflow Flag */
37 SF = 0x2, /* Sign Flag */
38 ZF = 0x1, /* Zero Flag */
41 /* レジストリの内容を表示する場合はTRUE */
42 extern bool tracemode;
44 /* レジストリの内容を論理値(0〜65535)で表示する場合はTRUE */
45 extern bool logicalmode;
47 /* メモリの内容を表示する場合はTRUE */
53 /* ラベル表を表示する場合はTRUE */
54 extern bool labelmode;
56 /* ラベル表を表示して終了する場合はTRUE */
57 extern bool onlylabelmode;
59 /* アセンブラ詳細結果を表示するならTRUE */
60 extern bool asdetailmode;
62 /* アセンブルだけを行う場合はTRUE */
63 extern bool onlyassemblemode;
79 R_ADR_X = 010: オペランド数2または3。
80 第1オペランドは汎用レジスタ、第2オペランドはアドレス、第3オペランドは指標レジスタ
81 R_ADR_X_ = 011: 同上。ただし、実効アドレスに格納されている内容を示す
82 R1_R2 = 020: オペランド数2。第1オペランド、第2オペランドともに汎用レジスタ
83 ADR_X = 030: オペランド数1または2。第1オペランドはアドレス、第2オペランドは指標レジスタ
84 R_ = 040: オペランド数1。第1オペランドはGR
103 typedef struct _CMDCODETAB {
104 struct _CMDCODETAB *next;
108 /* 命令と命令タイプがキーのハッシュ表を作成する */
109 bool create_cmdtype_code();
111 /* 命令と命令タイプから、命令コードを取得する。
113 WORD getcmdcode(const char *cmd, CMDTYPE type);
115 /* 命令と命令タイプからハッシュ値を生成する */
116 unsigned hash_cmdtype(const char *cmd, CMDTYPE type);
118 /* 命令と命令タイプがキーのハッシュ表を表示する */
119 void print_cmdtype_code();
121 /* 命令と命令タイプがキーのハッシュ表を解放する */
122 void free_cmdtype_code();
124 /* 命令コードがキーのハッシュ表を作成する */
125 bool create_code_type();
127 /* 命令コードからハッシュ値を生成する */
128 unsigned hash_code(WORD code);
130 /* 命令コードから命令タイプを取得する。
132 CMDTYPE getcmdtype(WORD code);
134 /* 命令コードがキーのハッシュ表を表示する */
135 void print_code_type();
137 /* 命令コードがキーのハッシュ表を解放する */
138 void free_code_type();
140 /* 指定されたファイルにアセンブル結果を書込 */
141 void outassemble(char *file);