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