X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=include%2Fcasl2.h;h=038f3dd8a70bf2d5538c04c0f2ba8aab89beb93e;hp=c269710a9eda9319cd5048a3fdb2c67f13f20c41;hb=755c5127855b776d1a4260f05afc95640045f29d;hpb=e07b6371cc8a59c6793a895e968ff2c6cf28181b diff --git a/include/casl2.h b/include/casl2.h index c269710..038f3dd 100644 --- a/include/casl2.h +++ b/include/casl2.h @@ -2,7 +2,7 @@ #define YACASL2_CASL2_INCLUDED #include -#include +#include #include #include #include @@ -38,30 +38,6 @@ enum { ZF = 0x1, /* Zero Flag */ }; -/* レジストリの内容を表示する場合はTRUE */ -extern bool tracemode; - -/* レジストリの内容を論理値(0〜65535)で表示する場合はTRUE */ -extern bool logicalmode; - -/* メモリの内容を表示する場合はTRUE */ -extern bool dumpmode; - -/* ソースを表示する場合はTRUE */ -extern bool srcmode; - -/* ラベル表を表示する場合はTRUE */ -extern bool labelmode; - -/* ラベル表を表示して終了する場合はTRUE */ -extern bool onlylabelmode; - -/* アセンブラ詳細結果を表示するならTRUE */ -extern bool asdetailmode; - -/* アセンブルだけを行う場合はTRUE */ -extern bool onlyassemblemode; - /* メモリーサイズ */ extern int memsize; @@ -74,47 +50,67 @@ extern WORD startptr; /* 実行終了番地 */ extern WORD endptr; -/* COMET II 命令 - 命令タイプは、オペランドにより6つに分類 - R_ADR_X = 010: オペランド数2または3。 - 第1オペランドは汎用レジスタ、第2オペランドはアドレス、第3オペランドは指標レジスタ - R_ADR_X_ = 011: 同上。ただし、実効アドレスに格納されている内容を示す - R1_R2 = 020: オペランド数2。第1オペランド、第2オペランドともに汎用レジスタ - ADR_X = 030: オペランド数1または2。第1オペランドはアドレス、第2オペランドは指標レジスタ - R_ = 040: オペランド数1。第1オペランドはGR - NONE = 0: オペランドなし -*/ +/* COMET II 命令 */ +/* 命令タイプは、オペランドにより6種類に分類 */ typedef enum { + /* オペランド数2または3 */ + /* 第1オペランド: 汎用レジスタ */ + /* 第2オペランド: アドレス */ + /* 第3オペランド: 指標レジスタ */ R_ADR_X = 010, + /* オペランド数2または3 */ + /* 第1オペランド: 汎用レジスタ、*/ + /* 第2オペランド: アドレスに格納されている内容 */ + /* 第3オペランド: 指標レジスタ */ R_ADR_X_ = 011, + /* オペランド数2 */ + /* 第1オペランド: 汎用レジスタ */ + /* 第2オペランド: 汎用レジスタ */ R1_R2 = 020, + /* オペランド数1または2 */ + /* 第1オペランド: アドレス */ + /* 第2オペランド: 指標レジスタ */ ADR_X = 030, + /* オペランド数1 */ + /* 第1オペランド: 汎用レジスタ */ R_ = 040, + /* オペランドなし */ NONE = 0, } CMDTYPE; +/* 命令コード配列 */ typedef struct { char *cmd; CMDTYPE type; WORD code; } CMDCODEARRAY; +/* 命令コード配列のサイズ */ +extern int cmdcodesize; + /* 命令コードのハッシュ表 */ typedef struct _CMDCODETAB { struct _CMDCODETAB *next; CMDCODEARRAY *cca; } CMDCODETAB; +extern CMDCODETAB **cmdtype_code; +extern CMDCODETAB **code_type; +extern int cmdtabsize; + +/* COMET II仮想マシンのリセット */ +void reset(); + +/* COMET II仮想マシンのシャットダウン */ +void shutdown(); + /* 命令と命令タイプがキーのハッシュ表を作成する */ bool create_cmdtype_code(); -/* 命令と命令タイプから、命令コードを取得する。 - 無効な場合は0xFFFFを返す */ +/* 命令と命令タイプから、命令コードを取得する */ +/* 無効な場合は0xFFFFを返す */ WORD getcmdcode(const char *cmd, CMDTYPE type); -/* 命令と命令タイプからハッシュ値を生成する */ -unsigned hash_cmdtype(const char *cmd, CMDTYPE type); - /* 命令と命令タイプがキーのハッシュ表を表示する */ void print_cmdtype_code(); @@ -124,11 +120,8 @@ void free_cmdtype_code(); /* 命令コードがキーのハッシュ表を作成する */ bool create_code_type(); -/* 命令コードからハッシュ値を生成する */ -unsigned hash_code(WORD code); - -/* 命令コードから命令タイプを取得する。 - 無効な場合はNONEを返す */ +/* 命令コードから命令タイプを取得する */ +/* 無効な場合はNONEを返す */ CMDTYPE getcmdtype(WORD code); /* 命令コードがキーのハッシュ表を表示する */ @@ -138,6 +131,6 @@ void print_code_type(); void free_code_type(); /* 指定されたファイルにアセンブル結果を書込 */ -void outassemble(char *file); +void outassemble(const char *file); -#endif +#endif /* YACASL2_CASL2_INCLUDEDの終端 */