projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
CLOCKSの型を修正
[YACASL2.git]
/
include
/
struct.h
diff --git
a/include/struct.h
b/include/struct.h
index
88ceb16
..
e862786
100644
(file)
--- a/
include/struct.h
+++ b/
include/struct.h
@@
-1,6
+1,7
@@
#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"
/**
@@
-39,7
+40,7
@@
typedef struct {
CPU *cpu; /**<CPU */
WORD *memory; /**<メモリ */
int memsize; /**<メモリサイズ */
CPU *cpu; /**<CPU */
WORD *memory; /**<メモリ */
int memsize; /**<メモリサイズ */
-
int clocks;
/**<クロック周波数 */
+
clock_t clocks;
/**<クロック周波数 */
} SYSTEM;
extern SYSTEM *sys;
} SYSTEM;
extern SYSTEM *sys;
@@
-50,57
+51,64
@@
extern SYSTEM *sys;
*/
typedef enum {
/**
*/
typedef enum {
/**
- * オペランド数2または3
+ * オペランド数2または3
。命令語長2
* 第1オペランド: 汎用レジスタ
* 第2オペランド: アドレス
* 第3オペランド: 指標レジスタ
*/
R_ADR_X = 010,
/**
* 第1オペランド: 汎用レジスタ
* 第2オペランド: アドレス
* 第3オペランド: 指標レジスタ
*/
R_ADR_X = 010,
/**
- * オペランド数2または3
+ * オペランド数2または3
。。命令語長2
* 第1オペランド: 汎用レジスタ
* 第2オペランド: アドレスに格納されている内容
* 第3オペランド: 指標レジスタ
*/
* 第1オペランド: 汎用レジスタ
* 第2オペランド: アドレスに格納されている内容
* 第3オペランド: 指標レジスタ
*/
- R_ADR_X_ = 011,
- /**
- * オペランド数2
- * 第1オペランド: 汎用レジスタ
- * 第2オペランド: 汎用レジスタ
- */
R1_R2 = 020,
/**
R1_R2 = 020,
/**
- * オペランド数1または2
+ * オペランド数1または2
。命令語長1
* 第1オペランド: アドレス
* 第2オペランド: 指標レジスタ
*/
ADR_X = 030,
/**
* 第1オペランド: アドレス
* 第2オペランド: 指標レジスタ
*/
ADR_X = 030,
/**
- * オペランド数1
+ * オペランド数1
。命令語長1
* 第1オペランド: 汎用レジスタ
*/
R_ = 040,
/**
* 第1オペランド: 汎用レジスタ
*/
R_ = 040,
/**
- * オペランドなし
+ * オペランドなし
。命令語長1
*/
NONE = 0,
*/
NONE = 0,
+ /**
+ * COMET II命令以外
+ */
+ NOTCMD = 077,
} 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; /**<命令コード */
-} CMD;
+ const void (*ptr); /**<命令の関数ポインタ */
+} COMET2CMD;
/**
* 命令コードのハッシュ表
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
/**
* 命令コードのハッシュ表
*/
typedef struct _CMDTAB {
struct _CMDTAB *next; /**<リスト次項目へのポインタ */
- C
MD *cmd;
/**<命令コード表の項目 */
+ C
OMET2CMD *cmd;
/**<命令コード表の項目 */
} CMDTAB;
/**
} CMDTAB;
/**
@@
-109,6
+117,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;
@@
-145,10
+154,9
@@
void free_cmdtype_code();
bool create_code_type();
/**
bool create_code_type();
/**
- * 命令コードから命令タイプを返す
- * 無効な場合はNONEを返す
+ * 命令コードから命令の関数ポインタを返す
*/
*/
-
CMDTYPE getcmdtype(WORD code
);
+
const void (*getcmdptr(WORD code)
);
/**
* コードがキーの命令ハッシュ表を解放する
/**
* コードがキーの命令ハッシュ表を解放する