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