バージョンアップ
[YACASL2.git] / include / monitor.h
1 #ifndef MONITOR_INCLUDE
2 #define MONITOR_INCLUDE
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <assert.h>
7 #include "assemble.h"
8 #include "exec.h"
9
10 /**
11  * @brief モニター
12  */
13 enum {
14     MONARGSIZE = 3,          /**<モニター引数の最大数 */
15 };
16
17 /**
18  * @brief モニター引数を表すデータ型
19  */
20 typedef struct {
21     int argc;                   /**<オペランド数 */
22     char *argv[MONARGSIZE];      /**<オペランド配列 */
23 } MONARGS;
24
25 /**
26  * @brief モニター命令行を表すデータ型
27  */
28 typedef struct {
29     char *cmd;                  /**<コマンド */
30     MONARGS *args;               /**<引数 */
31 } MONCMDLINE;
32
33 /**
34  * @brief ブレークポイント表を表すデータ型
35  */
36 typedef struct _BPSLIST {
37     struct _BPSLIST *next;        /**<リスト次項目へのポインタ */
38     WORD adr;                   /**<アドレス */
39 } BPSLIST;
40
41 /**
42  * ブレークポイント表のサイズ
43  */
44 enum {
45     BPSTABSIZE = 251,         /**<ブレークポイント表のサイズ */
46 };
47
48 enum {
49     MONINSIZE = 40    /**<モニターの、入力領域 */
50 };
51
52 typedef enum {
53     MONREPEAT = 0,
54     MONNEXT = 1,
55     MONQUIT = 2,
56 } MONCMDTYPE;
57
58 /**
59  * @brief アドレスのハッシュ値を返す
60  *
61  * @return ハッシュ値
62  *
63  * @param adr アドレス
64  */
65 unsigned adrhash(WORD adr);
66
67 /**
68  * @brief 文字列から、モニターの引数を取得する
69  *
70  * @return モニターの引数
71  *
72  * @param *str 文字列
73  */
74 MONARGS *monargstok(const char *str);
75
76 /**
77  * @brief 行から、モニターの命令と引数を取得する
78  *
79  * @return モニターの命令と引数
80  *
81  * @param *line 行
82  */
83 MONCMDLINE *monlinetok(const char *line);
84
85 /**
86  * @brief モニターの命令を実行する
87  *
88  * @return モニター命令の種類
89  *
90  * @param *cmd モニター命令
91  * @param *args モニター命令の引数
92  */
93 MONCMDTYPE monitorcmd(char *cmd, MONARGS *args);
94
95 /**
96  * @brief ブレークポイント表にアドレスがある場合はtrue、ない場合はfalseを返す
97  *
98  * @return trueまたはfalse
99  *
100  * @param *adr アドレス
101  */
102 bool getbps(WORD adr);
103
104 /**
105  * @brief ブレークポイント表にアドレスを追加する
106  *
107  * @return 追加した場合はtrue、追加しなかった場合はfalse
108  *
109  * @param *adr アドレス
110  */
111 bool addbps(WORD adr);
112
113
114 /**
115  * @brief ブレークポイント表からアドレスを削除する
116  *
117  * @return 削除した場合はtrue、削除しなかった場合はfalse
118  *
119  * @param *adr アドレス
120  */
121 bool delbps(WORD adr);
122
123 /**
124  * @brief ブレークポイント表を解放する
125  *
126  * @return なし
127  */
128 void freebps();
129
130 /**
131  * @brief COMET IIモニターを起動する
132  *
133  * @return なし
134  */
135 void monitor();
136
137 #endif        /* end of MONITOR_INCLUDE */