ブレークポイント機能の修正
[YACASL2.git] / include / exec.h
index 171b188..f081089 100644 (file)
 #define YACASL2_EXEC_INCLUDED
 
 #include <stdbool.h>
+#include <stdio.h>
 #include "struct.h"
 #include "word.h"
+#include "cmem.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 */
+    bool step;           /**<ステップ実行の場合はtrue */
 } EXECMODE;
 
 /**
- * 実行モード: trace, logical, dump
+ * @brief 実行モード: trace, logical, dump, step
  */
 extern EXECMODE execmode;
 
 /**
- * 実行エラーをエラーリストに追加
+ * @brief 実行エラーをエラーリストに追加する
  */
 void addcerrlist_exec();
 
 /**
- * アセンブル結果読み込みエラーをエラーリストに追加
+ * @brief アセンブル結果読み込みエラーをエラーリストに追加する
  */
 void addcerrlist_load();
 
 /**
- * 指定されたファイルからアセンブル結果を読み込む
+ * @brief 指定されたファイルからアセンブル結果を読み込む
  */
-bool loadassemble(char *file);
+bool loadassemble(const char *file);
+
+
+/**
+ * @class Exec
+ * @brief execから関数ポインタで呼び出される関数
+ * @relatesalso exec
+ **/
 
 /**
- * COMET II仮想マシンのリセット
+ * @brief COMET II仮想マシンを実行する
+ *
+ * @relatesalso Exec
+ *
+ * @return なし
  */
-void reset();
+void exec();
 
 /**
- * NOP命令。語長1(OPのみ)
+ * @brief NOP命令。語長1(OPのみ)
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void nop();
 
 /**
- * LD命令 - オペランドr,adr,x。語長2
+ * @brief LD命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void ld_r_adr_x();
 
 /**
- * LD命令 - オペランドr1,r2。語長1
+ * @brief LD命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void ld_r1_r2();
 
 /**
- * ST命令。語長2
+ * @brief ST命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void st();
 
 /**
- * LAD命令。語長2
+ * @brief LAD命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void lad();
 
 /**
- * ADDA命令 - オペランドr,adr,x。語長2
+ * @brief ADDA命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void adda_r_adr_x();
 
 /**
- * ADDA命令 - オペランドr1,r2。語長1
+ * @brief ADDA命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void adda_r1_r2();
 
 /**
- * SUBA命令 - オペランドr,adr,x。語長2
+ * @brief SUBA命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void suba_r_adr_x();
 
 /**
- * SUBA命令 - オペランドr1,r2。語長1
+ * @brief SUBA命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void suba_r1_r2();
 
 /**
- * ADDL命令のテンプレート
- */
-void addl(const WORD r, const WORD val);
-
-/**
- * ADDL命令 - オペランドr,adr,x。語長2
+ * @brief ADDL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void addl_r_adr_x();
 
 /**
- * ADDL命令 - オペランドr1,r2。語長1
+ * @brief ADDL命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void addl_r1_r2();
 
 /**
- * SUBL命令 - オペランドr,adr,x。語長2
+ * @brief SUBL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void subl_r_adr_x();
 
 /**
- * SUBL命令 - オペランドr1,r2。語長1
+ * @brief SUBL命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void subl_r1_r2();
 
 /**
- * AND命令 - オペランドr,adr,x。語長2
+ * @brief AND命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void and_r_adr_x();
 
 /**
- * AND命令 - オペランドr1,r2。語長1
+ * @brief AND命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void and_r1_r2();
 
 /**
- * OR命令 - オペランドr,adr,x。語長2
+ * @brief OR命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void or_r_adr_x();
 
 /**
- * OR命令 - オペランドr1,r2。語長1
+ * @brief OR命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void or_r1_r2();
 
 /**
- * XOR命令 - オペランドr,adr,x。語長2
+ * @brief XOR命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void xor_r_adr_x();
 
 /**
- * XOR命令 - オペランドr1,r2。語長1
+ * @brief XOR命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void xor_r1_r2();
 
 /**
- * CPA命令 - オペランドr,adr,x。語長2
+ * @brief CPA命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void cpa_r_adr_x();
 
 /**
- * CPA命令 - オペランドr1,r2。語長1
+ * @brief CPA命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void cpa_r1_r2();
 
 /**
- * CPL命令のテンプレート
- */
-void cpl(const WORD r, const WORD val);
-
-/**
- * CPL命令 - オペランドr,adr,x。語長2
+ * @brief CPL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void cpl_r_adr_x();
 
 /**
- * CPL命令 - オペランドr1,r2。語長1
+ * @brief CPL命令 - オペランドr1,r2。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void cpl_r1_r2();
 
 /**
- * SLA命令 - オペランドr,adr,x。語長2
+ * @brief SLA命令 - オペランドr,adr,x。語長2
+ *
  * 算術演算なので、第15ビットは送り出されない
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void sla();
 
 /**
- * SRA命令 - オペランドr,adr,x。語長2
+ * @brief SRA命令 - オペランドr,adr,x。語長2
+ *
  * 算術演算なので、第15ビットは送り出されない
  * 空いたビット位置には符号と同じものが入る
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void sra();
 
 /**
- * SLL命令 - オペランドr,adr,x。語長2
+ * @brief SLL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void sll();
 
 /**
- * SRL命令 - オペランドr,adr,x。語長2
+ * @brief SRL命令 - オペランドr,adr,x。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void srl();
 
 /**
- * JPL命令。語長2
+ * @brief JPL命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void jpl();
 
 /**
- * JMI命令。語長2
+ * @brief JMI命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void jmi();
 
 /**
- * JNZ命令。語長2
+ * @brief JNZ命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void jnz();
 
 /**
- * JZE命令。語長2
+ * @brief JZE命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void jze();
 
 /**
- * JOV命令。語長2
+ * @brief JOV命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void jov();
 
 /**
- * JUMP命令。語長2
+ * @brief JUMP命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void jump();
 
 /**
- * PUSH命令。語長2
+ * @brief PUSH命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void push();
 
 /**
- * POP命令。語長1
+ * @brief POP命令。語長1
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void pop();
 
 /**
- * CALL命令。語長2
+ * @brief CALL命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void call();
 
 /**
- * RET命令。語長1(OPのみ)
+ * @brief RET命令。語長1(OPのみ)
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void ret();
 
 /**
- * SVC命令。語長2
+ * @brief SVC命令。語長2
+ * @relatesalso Exec
+ *
+ * @return なし
  */
 void svc();
 
 /**
- * COMET II仮想マシンの実行
+ * @brief COMET IIのメモリを表示する
+ *
+ * @return なし
  */
-bool exec();
+void dumpmemory();
 
 /**
- * COMET IIのメモリを表示
+ * @brief COMET IIのレジスタを表示する
+ *
+ * @return なし
  */
-void dumpmemory();
+void dspregister();
 
 /**
- * COMET IIのレジスタを表示
+ * @brief CASL IIのオブジェクトファイルを逆アセンブルし、標準出力へ出力する
+ *
+ * @return 正常終了時は0、異常終了時は0以外
+ *
+ * @param *file オブジェクトファイルのファイル名
  */
-void dspregister();
+bool disassemble_file(const char *file);
+
+/**
+ * @brief COMET IIデバッガーを起動する
+ *
+ * @return なし
+ */
+void debugger();
 
 #endif            /* YACASL2_EXEC_INCLUDEDの終端 */