X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=include%2Fstruct.h;h=dce1ddf02b2a6040f308b6965f3b52a52c6c2c08;hp=c806e5785be23b3a7353d2c4e2a6bf338c658ea7;hb=b57939e6166b26126802b129a3f367b972bb453f;hpb=1708c99d4b6263863304d48ebca3b3473d6a0112 diff --git a/include/struct.h b/include/struct.h index c806e57..dce1ddf 100644 --- a/include/struct.h +++ b/include/struct.h @@ -1,8 +1,13 @@ #ifndef YACASL2_CASL2_INCLUDED #define YACASL2_CASL2_INCLUDED +#include +#include +#include #include #include "word.h" +#include "cmem.h" +#include "hash.h" /** * @brief COMET IIの規格値 @@ -48,6 +53,15 @@ typedef struct { */ extern SYSTEM *sys; +/** + * 命令ハッシュ表のハッシュの種類 + */ +typedef enum { + HASH_CMDTYPE, + HASH_CODE, + HASH_MAX, +} CMDTAB_HASH; + /** * COMET II 命令 * 命令タイプは、オペランドにより5種類に分類 @@ -80,7 +94,7 @@ typedef enum { /** * オペランドなし */ - NONE = 00, + NONE = 0, } CMDTYPE; /** @@ -106,7 +120,7 @@ typedef struct { */ typedef struct _CMDTAB { struct _CMDTAB *next; /**<リスト次項目へのポインタ */ - COMET2CMD *cmd; /**<命令コード表の項目 */ + const COMET2CMD *cmd; /**<命令コード表の項目 */ } CMDTAB; /** @@ -120,6 +134,33 @@ typedef struct { extern EXECPTR *execptr; +/** + * @brief 実行モードを表すデータ型 + */ +typedef struct { + bool trace; /**<レジストリの内容をステップごとに表示する場合はtrue */ + bool logical; /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */ + bool dump; /**<メモリの内容をステップごとに表示する場合はtrue */ + int dump_start; /**<メモリの内容をステップごとに表示する場合の開始アドレス */ + int dump_end; /**<メモリの内容をステップごとに表示する場合の終了アドレス */ + bool monitor; /**<モニターモードの場合はtrue */ + bool step; /**<ステップ実行の場合はtrue */ +} EXECMODE; + +/** + * @brief 実行モード: trace, logical, dump, monitor, step + */ +extern EXECMODE execmode; + +/** + * @brief 汎用レジスタの番号からレジスタを表す文字列を返す + * + * @return 汎用レジスタを表す文字列。「GR0」「GR1」・・・「GR7」のいずれか + * + * @param word レジスタ番号[0-7]を表すWORD値 + */ +char *grstr(WORD word); + /** * COMET II仮想マシンのリセット */ @@ -131,34 +172,38 @@ void reset(int memsize, int clocks); void shutdown(); /** - * 名前とタイプがキーの命令ハッシュ表を作成する + * @brief 命令ハッシュ表を作成する + * + * @return なし + * + * @param hash ハッシュ値 */ -bool create_cmdtype_code(); +bool create_cmdtable(CMDTAB_HASH hash); /** - * 命令の名前とタイプから、命令コードを返す - * 無効な場合は0xFFFFを返す + * 命令ハッシュ表を解放する */ -WORD getcmdcode(const char *cmd, CMDTYPE type); +void free_cmdtable(CMDTAB_HASH hash); /** - * 名前とタイプがキーの命令ハッシュ表を解放する + * 命令の名前とタイプから、命令コードを返す + * 無効な場合は0xFFFFを返す */ -void free_cmdtype_code(); +WORD getcmdcode(const char *cmd, CMDTYPE type); /** - * コードがキーの命令ハッシュ表を作成する + * 命令コードから命令の関数ポインタを返す */ -bool create_code_type(); +const void (*getcmdptr(WORD code)); /** - * 命令コードから命令の関数ポインタを返す + * 命令コードから命令のタイプを返す */ -const void (*getcmdptr(WORD code)); +CMDTYPE getcmdtype(WORD code); /** - * コードがキーの命令ハッシュ表を解放する + * 命令コードから命令の名前を返す */ -void free_code_type(); +char *getcmdname(WORD code); #endif /* YACASL2_CASL2_INCLUDEDの終端 */