comet2monitorのダンプ時に範囲が指定できるように
[YACASL2.git] / include / exec.h
index 073e576..b38e59a 100644 (file)
 #define YACASL2_EXEC_INCLUDED
 
 #include <stdbool.h>
+#include <stdio.h>
+#include <assert.h>
+#include <time.h>
 #include "struct.h"
 #include "word.h"
+#include "cmem.h"
+#include "cerr.h"
+#include "monitor.h"
+#include "disassemble.h"
 
 enum {
     INSIZE = 256    /**<IN命令の、入力領域 */
 };
 
 /**
- * 実行モード
+ * @brief 実行モードを表すデータ
  */
 typedef struct {
-    bool trace;           /**<レジストリの内容を表示する場合はtrue */
+    bool trace;           /**<レジストリの内容をステップごとに表示する場合はtrue */
     bool logical;         /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */
-    bool dump;            /**<メモリの内容を表示する場合はtrue */
+    bool dump;            /**<メモリの内容をステップごとに表示する場合はtrue */
+    int dump_start;       /**<メモリの内容をステップごとに表示する場合の開始アドレス */
+    int dump_end;         /**<メモリの内容をステップごとに表示する場合の終了アドレス */
+    bool monitor;         /**<モニターモードの場合はtrue */
+    bool step;            /**<ステップ実行の場合はtrue */
 } EXECMODE;
 
 /**
- * 実行モード: trace, logical, dump
+ * @brief 実行モード: trace, logical, dump, monitor, step
  */
 extern EXECMODE execmode;
 
 /**
- * 指定されたファイルからアセンブル結果を読み込む
+ * @brief 実行エラーをエラーリストに追加する
  */
-bool loadassemble(char *file);
+void addcerrlist_exec();
 
-/* COMET II仮想マシンのリセット */
-void reset();
+/**
+ * @brief アセンブル結果読み込みエラーをエラーリストに追加する
+ */
+void addcerrlist_load();
+
+/**
+ * @brief 指定されたファイルからアセンブル結果を読み込む
+ *
+ * @return 読み込み終了アドレス。読み込めなかった場合は、0
+ *
+ * @param file 読み込むファイル名
+ * @param start 読み込み開始アドレス
+ */
+WORD loadassemble(const char *file, WORD start);
+
+/**
+ * @class Exec
+ * @brief execから関数ポインタで呼び出される関数
+ * @relatesalso exec
+ **/
+
+/**
+ * @brief COMET II仮想マシンを実行する
+ *
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void exec();
+
+/**
+ * @brief NOP命令。語長1(OPのみ)
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void nop();
+
+/**
+ * @brief LD命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void ld_r_adr_x();
+
+/**
+ * @brief LD命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void ld_r1_r2();
+
+/**
+ * @brief ST命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void st();
+
+/**
+ * @brief LAD命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void lad();
+
+/**
+ * @brief ADDA命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void adda_r_adr_x();
+
+/**
+ * @brief ADDA命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void adda_r1_r2();
+
+/**
+ * @brief SUBA命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void suba_r_adr_x();
+
+/**
+ * @brief SUBA命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void suba_r1_r2();
+
+/**
+ * @brief ADDL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void addl_r_adr_x();
+
+/**
+ * @brief ADDL命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void addl_r1_r2();
+
+/**
+ * @brief SUBL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void subl_r_adr_x();
+
+/**
+ * @brief SUBL命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void subl_r1_r2();
+
+/**
+ * @brief AND命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void and_r_adr_x();
+
+/**
+ * @brief AND命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
+ */
+void and_r1_r2();
+
+/