X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=include%2Fcasl2.h;h=aee7f1e39a408f1440525d1ba442a810dd982e37;hp=96363ea5ce2e2b219ba9020ab829b5f5c113bbe7;hb=555c5e8b851becc08ba661a9cb19f617d5a00c12;hpb=00d4ba02d732a0ff14c402bddc14c713c9b392d8 diff --git a/include/casl2.h b/include/casl2.h index 96363ea..aee7f1e 100644 --- a/include/casl2.h +++ b/include/casl2.h @@ -11,6 +11,7 @@ #include "word.h" #include "hash.h" +#include "cmem.h" #include "cerr.h" #ifndef ARRAYSIZE @@ -19,18 +20,12 @@ /* COMET IIの規格 */ enum { - CMDSIZE = 4, /* 命令の最大文字数 */ - REGSIZE = 8, /* 汎用レジスタの数 */ + CMDSIZE = 4, /* 命令の最大文字数 */ + GRSIZE = 8, /* 汎用レジスタの数。COMET II規格で、7 */ DEFAULT_MEMSIZE = 512, /* デフォルトのメモリ容量。COMET II規格では、65536語 */ DEFAULT_CLOCKS = 5000000, /* デフォルトのクロック周波数。COMET II規格では、未定義 */ }; -/* COMET IIのメモリ */ -extern WORD *memory; - -/* COMET IIのCPUレジスタ */ -extern WORD GR[REGSIZE], SP, PR, FR; - /* COMET II フラグのマスク値 */ enum { OF = 0x4, /* Overflow Flag */ @@ -38,17 +33,23 @@ enum { ZF = 0x1, /* Zero Flag */ }; -/* メモリーサイズ */ -extern int memsize; - -/* クロック周波数 */ -extern int clocks; +/* COMET IIのCPU */ +typedef struct { + WORD gr[GRSIZE]; /* 汎用レジスタ */ + WORD sp; /* スタックポインタ */ + WORD pr; /* プログラムレジスタ */ + WORD fr; /* フラグレジスタ */ +} CPU; -/* 実行開始番地 */ -extern WORD startptr; +/* COMET IIの仮装実行マシンシステム */ +typedef struct { + CPU *cpu; /* CPU */ + WORD *memory; /* メモリ */ + int memsize; /* メモリサイズ */ + int clocks; /* クロック周波数 */ +} SYSTEM; -/* 実行終了番地 */ -extern WORD endptr; +extern SYSTEM *sys; /* COMET II 命令 */ /* 命令タイプは、オペランドにより6種類に分類 */ @@ -78,23 +79,39 @@ typedef enum { NONE = 0, } CMDTYPE; -extern int cmdcodesize; - -/* 命令コードの配列 */ +/* 命令コード配列 */ typedef struct { - char *cmd; + char *name; CMDTYPE type; WORD code; -} CMDCODEARRAY; +} CMD; + +/* 命令コード配列のサイズ */ +extern int comet2cmdsize; /* 命令コードのハッシュ表 */ -typedef struct _CMDCODETAB { - struct _CMDCODETAB *next; - CMDCODEARRAY *cca; -} CMDCODETAB; +typedef struct _CMDTAB { + struct _CMDTAB *next; + CMD *cmd; +} CMDTAB; + +extern CMDTAB **cmdtype_code; +extern CMDTAB **code_type; +extern int cmdtabsize; + +/* CASL2プログラムのプロパティ */ +typedef struct { + WORD start; /* プログラムの開始番地 */ + WORD end; /* プログラムの終了番地 */ +} PROGPROP; + +extern PROGPROP *prog; + +/* COMET II仮想マシンのリセット */ +void reset(int memsize, int clocks); -extern CMDCODETAB *cmdtype_code[]; -extern CMDCODETAB *code_type[]; +/* COMET II仮想マシンのシャットダウン */ +void shutdown(); /* 命令と命令タイプがキーのハッシュ表を作成する */ bool create_cmdtype_code();