projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
バージョンアップ
[YACASL2.git]
/
include
/
struct.h
diff --git
a/include/struct.h
b/include/struct.h
index
e862786
..
ffc448e
100644
(file)
--- a/
include/struct.h
+++ b/
include/struct.h
@@
-1,11
+1,16
@@
#ifndef YACASL2_CASL2_INCLUDED
#define YACASL2_CASL2_INCLUDED
#ifndef YACASL2_CASL2_INCLUDED
#define YACASL2_CASL2_INCLUDED
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
#include <time.h>
#include "word.h"
#include <time.h>
#include "word.h"
+#include "cmem.h"
+#include "hash.h"
/**
/**
- *
COMET IIの規格
+ *
@brief COMET IIの規格値
*/
enum {
CMDSIZE = 4, /**<命令の最大文字数 */
*/
enum {
CMDSIZE = 4, /**<命令の最大文字数 */
@@
-15,7
+20,7
@@
enum {
};
/**
};
/**
- * COMET II フラグのマスク値
+ *
@brief
COMET II フラグのマスク値
*/
enum {
OF = 0x4, /**<Overflow Flag */
*/
enum {
OF = 0x4, /**<Overflow Flag */
@@
-24,7
+29,7
@@
enum {
};
/**
};
/**
- *
COMET IIのCPU
+ *
@brief COMET IIのCPUを表すデータ型
*/
typedef struct {
WORD gr[GRSIZE]; /**<汎用レジスタ */
*/
typedef struct {
WORD gr[GRSIZE]; /**<汎用レジスタ */
@@
-34,7
+39,7
@@
typedef struct {
} CPU;
/**
} CPU;
/**
- *
COMET IIの仮想実行マシンシステム
+ *
@brief COMET IIの仮想実行マシンシステムを表すデータ型
*/
typedef struct {
CPU *cpu; /**<CPU */
*/
typedef struct {
CPU *cpu; /**<CPU */
@@
-43,46
+48,53
@@
typedef struct {
clock_t clocks; /**<クロック周波数 */
} SYSTEM;
clock_t clocks; /**<クロック周波数 */
} SYSTEM;
+/**
+ * @brief COMET IIの仮想実行マシンシステム
+ */
extern SYSTEM *sys;
extern SYSTEM *sys;
+/**
+ * 命令ハッシュ表のハッシュの種類
+ */
+typedef enum {
+ HASH_CMDTYPE,
+ HASH_CODE,
+ HASH_MAX,
+} CMDTAB_HASH;
+
/**
* COMET II 命令
/**
* COMET II 命令
- * 命令タイプは、オペランドにより
6
種類に分類
+ * 命令タイプは、オペランドにより
5
種類に分類
*/
typedef enum {
/**
*/
typedef enum {
/**
- * オペランド数2または3
。命令語長2
- *
第1オペランド: 汎用レジスタ
- *
第2オペランド: アドレス
- *
第3オペランド: 指標レジスタ
+ * オペランド数2または3
+ *
- 第1オペランド: 汎用レジスタ。必須
+ *
- 第2オペランド: アドレス。必須
+ *
- 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意
*/
*/
- R_ADR_X = 01
0
,
+ R_ADR_X = 01,
/**
/**
- * オペランド数2または3。。命令語長2
- * 第1オペランド: 汎用レジスタ
- * 第2オペランド: アドレスに格納されている内容
- * 第3オペランド: 指標レジスタ
+ * オペランド数2
+ * - 第1オペランド: 汎用レジスタ。必須
+ * - 第2オペランド: 汎用レジスタ。必須
*/
*/
- R1_R2 = 02
0
,
+ R1_R2 = 02,
/**
/**
- * オペランド数1または2
。命令語長1
- *
第1オペランド: アドレス
- *
第2オペランド: 指標レジスタ
+ * オペランド数1または2
+ *
- 第1オペランド: アドレス。必須
+ *
- 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意
*/
*/
- ADR_X = 03
0
,
+ ADR_X = 03,
/**
/**
- *
オペランド数1。命令語長
1
- *
第1オペランド: 汎用レジスタ
+ *
オペランド数
1
+ *
- 第1オペランド: 汎用レジスタ。必須
*/
*/
- R_ = 04
0
,
+ R_ = 04,
/**
/**
- *
オペランドなし。命令語長1
+ *
オペランドなし
*/
NONE = 0,
*/
NONE = 0,
- /**
- * COMET II命令以外
- */
- NOTCMD = 077,
} CMDTYPE;
/**
} CMDTYPE;
/**
@@
-108,7
+120,7
@@
typedef struct {
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
-
COMET2CMD *cmd;
/**<命令コード表の項目 */
+
const COMET2CMD *cmd;
/**<命令コード表の項目 */
} CMDTAB;
/**
} CMDTAB;
/**
@@
-122,6
+134,15
@@
typedef struct {
extern EXECPTR *execptr;
extern EXECPTR *execptr;
+/**
+ * @brief 汎用レジスタの番号からレジスタを表す文字列を返す
+ *
+ * @return 汎用レジスタを表す文字列。「GR0」「GR1」・・・「GR7」のいずれか
+ *
+ * @param word レジスタ番号[0-7]を表すWORD値
+ */
+char *grstr(WORD word);
+
/**
* COMET II仮想マシンのリセット
*/
/**
* COMET II仮想マシンのリセット
*/
@@
-133,34
+154,38
@@
void reset(int memsize, int clocks);
void shutdown();
/**
void shutdown();
/**
- * 名前とタイプがキーの命令ハッシュ表を作成する
+ * @brief 命令ハッシュ表を作成する
+ *
+ * @return なし
+ *
+ * @param hash ハッシュ値
*/
*/
-bool create_cmdt
ype_code(
);
+bool create_cmdt
able(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の終端 */
#endif /* YACASL2_CASL2_INCLUDEDの終端 */