#ifndef YACASL2_CASL2_INCLUDED
#define YACASL2_CASL2_INCLUDED
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
#include <time.h>
#include "word.h"
+#include "cmem.h"
+#include "hash.h"
/**
* @brief COMET IIの規格値
*/
extern SYSTEM *sys;
+/**
+ * 命令ハッシュ表のハッシュの種類
+ */
+typedef enum {
+ HASH_CMDTYPE,
+ HASH_CODE,
+ HASH_MAX,
+} CMDTAB_HASH;
+
/**
* COMET II 命令
* 命令タイプは、オペランドにより5種類に分類
/**
* オペランドなし
*/
- NONE = 00,
+ NONE = 0,
} CMDTYPE;
/**
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
- COMET2CMD *cmd; /**<命令コード表の項目 */
+ const COMET2CMD *cmd; /**<命令コード表の項目 */
} CMDTAB;
/**
extern EXECPTR *execptr;
+/**
+ * @brief 汎用レジスタの番号からレジスタを表す文字列を返す
+ *
+ * @return 汎用レジスタを表す文字列。「GR0」「GR1」・・・「GR7」のいずれか
+ *
+ * @param word レジスタ番号[0-7]を表すWORD値
+ */
+char *grstr(WORD word);
+
/**
* COMET II仮想マシンのリセット
*/
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);
/**
- * 名前とタイプがキーの命令ハッシュ表を解放する
- */
-void free_cmdtype_code();
-
-/**
- * コードがキーの命令ハッシュ表を作成する
+ * 命令の名前とタイプから、命令コードを返す
+ * 無効な場合は0xFFFFを返す
*/
-bool create_code_cmdtype();
+WORD getcmdcode(const char *cmd, CMDTYPE type);
/**
* 命令コードから命令の関数ポインタを返す
*/
char *getcmdname(WORD code);
-/**
- * コードがキーの命令ハッシュ表を解放する
- */
-void free_code_cmdtype();
-
#endif /* YACASL2_CASL2_INCLUDEDの終端 */