コンパイル時のオプションとしてWextraを追加し、警告を修正
[YACASL2.git] / include / struct.h
index dd69d21..61fc03b 100644 (file)
@@ -8,7 +8,7 @@
  */
 enum {
     CMDSIZE = 4,              /**<命令の最大文字数 */
-    GRSIZE = 8,               /**<æ±\8eç\94¨ã\83¬ã\82¸ã\82¹ã\82¿ã\81®æ\95°ã\80\82COMET IIè¦\8fæ ¼ã\81«ã\82\88ã\82\8a\81\8bã\82\89\81¾ã\81§ã\81®8ã\81¤ */
+    GRSIZE = 8,               /**<æ±\8eç\94¨ã\83¬ã\82¸ã\82¹ã\82¿ã\81®æ\95°ã\80\82COMET IIè¦\8fæ ¼ã\81§ã\81¯ã\80\818ï¼\88\81\8bã\82\897ï¼\89 */
     DEFAULT_MEMSIZE = 512,    /**<デフォルトのメモリ容量。COMET II規格では、65535語(word) */
     DEFAULT_CLOCKS = 5000000, /**<デフォルトのクロック周波数。COMET II規格では、未定義 */
 };
@@ -39,7 +39,7 @@ typedef struct {
     CPU *cpu;        /**<CPU */
     WORD *memory;    /**<メモリ */
     int memsize;     /**<メモリサイズ */
-    int clocks;      /**<クロック周波数 */
+    unsigned clocks;      /**<クロック周波数 */
 } SYSTEM;
 
 extern SYSTEM *sys;
@@ -50,68 +50,68 @@ extern SYSTEM *sys;
  */
 typedef enum {
     /**
-     *  オペランド数2または3
+     *  オペランド数2または3。命令語長2
      *     第1オペランド: 汎用レジスタ
      *     第2オペランド: アドレス
      *     第3オペランド: 指標レジスタ
      */
     R_ADR_X = 010,
     /**
-     *  オペランド数2または3
-     *     第1オペランド: 汎用レジスタ
+     *  オペランド数2または3。。命令語長2
+     *     第1オペランド: 汎用レジスタ
      *     第2オペランド: アドレスに格納されている内容
      *     第3オペランド: 指標レジスタ
      */
-    R_ADR_X_ = 011,
-    /**
-     *  オペランド数2
-     *     第1オペランド: 汎用レジスタ
-     *     第2オペランド: 汎用レジスタ
-     */
     R1_R2 = 020,
     /**
-     * オペランド数1または2
+     * オペランド数1または2。命令語長1
      *     第1オペランド: アドレス
      *     第2オペランド: 指標レジスタ
      */
     ADR_X = 030,
     /**
-     *   オペランド数1
+     *   オペランド数1。命令語長1
      *     第1オペランド: 汎用レジスタ
      */
     R_ = 040,
     /**
-     *  オペランドなし
+     *  オペランドなし。命令語長1
      */
     NONE = 0,
+    /**
+     *  COMET II命令以外
+     */
+    NOTCMD = 077,
 } CMDTYPE;
 
 /**
- * 命令コード配列
+ * 命令コード表の項目
  */
 typedef struct {
-    char *name;
-    CMDTYPE type;
-    WORD code;
+    char *name;                 /**<命令名 */
+    CMDTYPE type;               /**<命令タイプ */
+    WORD code;                  /**<命令コード */
+    const void (*ptr);          /**<命令の関数ポインタ */
 } CMD;
 
 /**
  * 命令コードのハッシュ表
  */
 typedef struct _CMDTAB {
-    struct _CMDTAB *next;
-    CMD *cmd;
+    struct _CMDTAB *next;       /**<リスト次項目へのポインタ */
+    CMD *cmd;                   /**<命令コード表の項目 */
 } CMDTAB;
 
 /**
- * CASL2プログラムのプロパティ
+ * プログラム実行時の開始と終了のアドレス
  */
 typedef struct {
-    WORD start;   /**<プログラムの開始番地 */
-    WORD end;     /**<プログラムの終了番地 */
-} PROGPROP;
+    WORD start;   /**<開始アドレス */
+    WORD end;     /**<終了アドレス */
+    bool stop;    /**<終了フラグ */
+} EXECPTR;
 
-extern PROGPROP *prog;
+extern EXECPTR *execptr;
 
 /**
  * COMET II仮想マシンのリセット
@@ -145,10 +145,9 @@ void free_cmdtype_code();
 bool create_code_type();
 
 /**
- * 命令コードから命令タイプを返す
- * 無効な場合はNONEを返す
+ * 命令コードから命令の関数ポインタを返す
  */
-CMDTYPE getcmdtype(WORD code);
+const void (*getcmdptr(WORD code));
 
 /**
  * コードがキーの命令ハッシュ表を解放する