X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=include%2Fstruct.h;h=de1aa4ba17ae1846625397566e59c1849824fb48;hb=8b7bcce576862335c8bfeb6d937fe16463523c1d;hp=dd69d212424d9e813795546f48f0fc35dcd2536f;hpb=d1f82970bf7d41db2fea11b08cd8e308f6cb8138;p=YACASL2.git diff --git a/include/struct.h b/include/struct.h index dd69d21..de1aa4b 100644 --- a/include/struct.h +++ b/include/struct.h @@ -8,7 +8,7 @@ */ enum { CMDSIZE = 4, /**<命令の最大文字数 */ - GRSIZE = 8, /**<汎用レジスタの数。COMET II規格により0から7までの8つ */ + GRSIZE = 8, /**<汎用レジスタの数。COMET II規格では、8(0から7) */ DEFAULT_MEMSIZE = 512, /**<デフォルトのメモリ容量。COMET II規格では、65535語(word) */ DEFAULT_CLOCKS = 5000000, /**<デフォルトのクロック周波数。COMET II規格では、未定義 */ }; @@ -58,7 +58,7 @@ typedef enum { R_ADR_X = 010, /** * オペランド数2または3 - * 第1オペランド: 汎用レジスタ、 + * 第1オペランド: 汎用レジスタ * 第2オペランド: アドレスに格納されている内容 * 第3オペランド: 指標レジスタ */ @@ -84,34 +84,39 @@ typedef enum { * オペランドなし */ NONE = 0, + /** + * COMET II命令以外 + */ + NOTCMD = 077, } CMDTYPE; /** - * 命令コード配列 + * 命令コード表の項目 */ typedef struct { - char *name; - CMDTYPE type; - WORD code; + char *name; /**<命令名 */ + CMDTYPE type; /**<命令タイプ */ + WORD code; /**<命令コード */ + const void (*ptr); /**<命令の関数ポインタ */ } CMD; /** * 命令コードのハッシュ表 */ typedef struct _CMDTAB { - struct _CMDTAB *next; - CMD *cmd; + struct _CMDTAB *next; /**<リスト次項目へのポインタ */ + CMD *cmd; /**<命令コード表の項目 */ } CMDTAB; /** - * CASL2プログラムのプロパティ + * プログラム実行時の開始と終了のアドレス */ typedef struct { - WORD start; /**<プログラムの開始番地 */ - WORD end; /**<プログラムの終了番地 */ -} PROGPROP; + WORD start; /**<開始アドレス */ + WORD end; /**<終了アドレス */ +} EXECPTR; -extern PROGPROP *prog; +extern EXECPTR *execptr; /** * COMET II仮想マシンのリセット @@ -150,6 +155,11 @@ bool create_code_type(); */ CMDTYPE getcmdtype(WORD code); +/** + * 命令コードから命令の関数ポインタを返す + */ +const void (*getcmdptr(WORD code)); + /** * コードがキーの命令ハッシュ表を解放する */