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 引数が無視されることを表示する
98 *
99 * @param argc 引数の配列数
100 * @param *argv 引数配列
101 */
102 void warn_ignore_arg(int argc, char *argv[]);
103
104 /**
105 * @brief ブレークポイント表にアドレスがある場合はtrue、ない場合はfalseを返す
106 *
107 * @return trueまたはfalse
108 *
109 * @param *adr アドレス
110 */
111 bool getbps(WORD adr);
112
113 /**
114 * @brief ブレークポイント表にアドレスを追加する
115 *
116 * @return 追加した場合はtrue、追加しなかった場合はfalse
117 *
118 * @param *adr アドレス
119 */
120 bool addbps(WORD adr);
121
122
123 /**
124 * @brief ブレークポイント表からアドレスを削除する
125 *
126 * @return 削除した場合はtrue、削除しなかった場合はfalse
127 *
128 * @param *adr アドレス
129 */
130 bool delbps(WORD adr);
131
132 /**
133 * @brief ブレークポイント表を解放する
134 *
135 */
136 void freebps();
137
138 /**
139 * @brief COMET IIモニターを起動する
140 *
141 */
142 void monitor();
143
144 #endif