projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
casl2libとtestを整理
[YACASL2.git]
/
include
/
struct.h
diff --git
a/include/struct.h
b/include/struct.h
index
de1aa4b
..
c806e57
100644
(file)
--- a/
include/struct.h
+++ b/
include/struct.h
@@
-1,10
+1,11
@@
#ifndef YACASL2_CASL2_INCLUDED
#define YACASL2_CASL2_INCLUDED
#ifndef YACASL2_CASL2_INCLUDED
#define YACASL2_CASL2_INCLUDED
+#include <time.h>
#include "word.h"
/**
#include "word.h"
/**
- *
COMET IIの規格
+ *
@brief COMET IIの規格値
*/
enum {
CMDSIZE = 4, /**<命令の最大文字数 */
*/
enum {
CMDSIZE = 4, /**<命令の最大文字数 */
@@
-14,7
+15,7
@@
enum {
};
/**
};
/**
- * COMET II フラグのマスク値
+ *
@brief
COMET II フラグのマスク値
*/
enum {
OF = 0x4, /**<Overflow Flag */
*/
enum {
OF = 0x4, /**<Overflow Flag */
@@
-23,7
+24,7
@@
enum {
};
/**
};
/**
- *
COMET IIのCPU
+ *
@brief COMET IIのCPUを表すデータ型
*/
typedef struct {
WORD gr[GRSIZE]; /**<汎用レジスタ */
*/
typedef struct {
WORD gr[GRSIZE]; /**<汎用レジスタ */
@@
-33,79
+34,79
@@
typedef struct {
} CPU;
/**
} CPU;
/**
- *
COMET IIの仮想実行マシンシステム
+ *
@brief COMET IIの仮想実行マシンシステムを表すデータ型
*/
typedef struct {
CPU *cpu; /**<CPU */
WORD *memory; /**<メモリ */
int memsize; /**<メモリサイズ */
*/
typedef struct {
CPU *cpu; /**<CPU */
WORD *memory; /**<メモリ */
int memsize; /**<メモリサイズ */
-
int clocks;
/**<クロック周波数 */
+
clock_t clocks;
/**<クロック周波数 */
} SYSTEM;
} SYSTEM;
+/**
+ * @brief COMET IIの仮想実行マシンシステム
+ */
extern SYSTEM *sys;
/**
* COMET II 命令
extern SYSTEM *sys;
/**
* COMET II 命令
- * 命令タイプは、オペランドにより
6
種類に分類
+ * 命令タイプは、オペランドにより
5
種類に分類
*/
typedef enum {
/**
* オペランド数2または3
*/
typedef enum {
/**
* オペランド数2または3
- * 第1オペランド: 汎用レジスタ
- * 第2オペランド: アドレス
- * 第3オペランド: 指標レジスタ
- */
- R_ADR_X = 010,
- /**
- * オペランド数2または3
- * 第1オペランド: 汎用レジスタ
- * 第2オペランド: アドレスに格納されている内容
- * 第3オペランド: 指標レジスタ
+ * - 第1オペランド: 汎用レジスタ。必須
+ * - 第2オペランド: アドレス。必須
+ * - 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意
*/
*/
- R_ADR_X
_ = 01
1,
+ R_ADR_X
= 0
1,
/**
* オペランド数2
/**
* オペランド数2
- *
第1オペランド: 汎用レジスタ
- *
第2オペランド: 汎用レジスタ
+ *
- 第1オペランド: 汎用レジスタ。必須
+ *
- 第2オペランド: 汎用レジスタ。必須
*/
*/
- R1_R2 = 02
0
,
+ R1_R2 = 02,
/**
* オペランド数1または2
/**
* オペランド数1または2
- *
第1オペランド: アドレス
- *
第2オペランド: 指標レジスタ
+ *
- 第1オペランド: アドレス。必須
+ *
- 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意
*/
*/
- ADR_X = 03
0
,
+ ADR_X = 03,
/**
/**
- *
オペランド数1
- *
第1オペランド: 汎用レジスタ
+ * オペランド数1
+ *
- 第1オペランド: 汎用レジスタ。必須
*/
*/
- R_ = 04
0
,
+ R_ = 04,
/**
/**
- *
オペランドなし
+ * オペランドなし
*/
*/
- NONE = 0,
- /**
- * COMET II命令以外
- */
- NOTCMD = 077,
+ NONE = 00,
} CMDTYPE;
/**
* 命令コード表の項目
*/
} CMDTYPE;
/**
* 命令コード表の項目
*/
+typedef struct {
+ char *name; /**<命令名 */
+ const void (*ptr); /**<命令の関数ポインタ */
+} CMD;
+
+/**
+ * COMET II命令コード表の項目
+ */
typedef struct {
char *name; /**<命令名 */
CMDTYPE type; /**<命令タイプ */
WORD code; /**<命令コード */
typedef struct {
char *name; /**<命令名 */
CMDTYPE type; /**<命令タイプ */
WORD code; /**<命令コード */
- const void (*ptr);
/**<命令の関数ポインタ */
-} CMD;
+ const void (*ptr); /**<命令の関数ポインタ */
+} C
OMET2C
MD;
/**
* 命令コードのハッシュ表
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
/**
* 命令コードのハッシュ表
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
- C
MD *cmd;
/**<命令コード表の項目 */
+ C
OMET2CMD *cmd;
/**<命令コード表の項目 */
} CMDTAB;
/**
} CMDTAB;
/**
@@
-114,6
+115,7
@@
typedef struct _CMDTAB {
typedef struct {
WORD start; /**<開始アドレス */
WORD end; /**<終了アドレス */
typedef struct {
WORD start; /**<開始アドレス */
WORD end; /**<終了アドレス */
+ bool stop; /**<終了フラグ */
} EXECPTR;
extern EXECPTR *execptr;
} EXECPTR;
extern EXECPTR *execptr;
@@
-149,12
+151,6
@@
void free_cmdtype_code();
*/
bool create_code_type();
*/
bool create_code_type();
-/**
- * 命令コードから命令タイプを返す
- * 無効な場合はNONEを返す
- */
-CMDTYPE getcmdtype(WORD code);
-
/**
* 命令コードから命令の関数ポインタを返す
*/
/**
* 命令コードから命令の関数ポインタを返す
*/