1 #ifndef REMOTE_H
2 #define REMOTE_H
3 
4 #include "../common/Types.h"
5 #include "GBA.h"
6 
7 #define BitSet(array, bit) \
8   ((u8 *)(array))[(bit) >> 3] |= (1 << ((bit) & 7))
9 
10 #define BitClear(array, bit) \
11   ((u8 *)(array))[(bit) >> 3] &= ~(1 << ((bit) & 7))
12 
13 #define BitGet(array, bit) \
14   ((u8)((array)[(bit) >> 3]) & (u8)(1 <<((bit) & 7)))
15 
16 #define BreakSet(array, addr, flag) \
17   ((u8 *)(array))[(addr)>>1] |= ((addr&1) ? (flag<<4) : (flag&0xf))
18 
19 #define BreakClear(array, addr, flag) \
20   ((u8 *)(array))[(addr)>>1] &= ~((addr&1) ? (flag<<4) : (flag&0xf))
21 
22 //check
23 #define BreakThumbCheck(array, addr) \
24 	((u8 *)(array))[(addr)>>1] &((addr&1) ? 0x80 : 0x8 )
25 
26 #define BreakARMCheck(array, addr) \
27   ((u8 *)(array))[(addr)>>1] & ((addr&1) ? 0x40 : 0x4 )
28 
29 #define BreakReadCheck(array, addr) \
30   ((u8 *)(array))[(addr)>>1] & ((addr&1) ? 0x20 : 0x2 )
31 
32 #define BreakWriteCheck(array, addr) \
33   ((u8 *)(array))[(addr)>>1] & ((addr&1) ? 0x10 : 0x1 )
34 
35 #define BreakCheck(array, addr, flag) \
36   ((u8 *)(array))[(addr)>>1] & ((addr&1) ? (flag<<4) : (flag&0xf))
37 
38 extern bool debugger;
39 
40 extern bool dexp_eval(char *, u32*);
41 extern void dexp_setVar(char *, u32);
42 extern void dexp_listVars();
43 extern void dexp_saveVars(char *);
44 extern void dexp_loadVars(char *);
45 
46 void debuggerOutput(const char *s, u32 addr);
47 
48 bool debuggerBreakOnExecution(u32 address, u8 state);
49 bool debuggerBreakOnWrite(u32 address, u32 value, int size);
50 void debuggerBreakOnWrite(u32 address, u32 oldvalue, u32 value, int size, int t);
51 bool debuggerBreakOnRead(u32 address, int size);
52 
53 struct regBreak{
54 	//u8 regNum; /No longer needed
55 	// bit 0 = equal
56 	// bit 1 = greater
57 	// bit 2 = smaller
58 	// bit 3 = signed
59 	u8 flags;
60 	u32 intVal;
61 	struct regBreak* next;
62 };
63 extern u8 lowRegBreakCounter[4]; //(r0-r3)
64 extern u8 medRegBreakCounter[4]; //(r4-r7)
65 extern u8 highRegBreakCounter[4]; //(r8-r11)
66 extern u8 statusRegBreakCounter[4]; //(r12-r15)
67 
68 extern bool enableRegBreak;
69 extern regBreak* breakRegList[16];
70 extern void breakReg_check(int i);
71 
72 struct regBreak* getFromBreakRegList(u8 regnum, int location);
73 
74 void clearBreakRegList();
75 void clearParticularRegListBreaks(int reg);
76 void deleteFromBreakRegList(u8 regnum, int location);
77 
78 void addBreakRegToList(u8 regnum, u8 flags, u32 value);
79 void printBreakRegList(bool verbose);
80 
81 void remoteStubMain();
82 void remoteStubSignal(int sig, int number);
83 void remoteOutput(const char *s, u32 addr);
84 void remoteSetProtocol(int p);
85 void remoteSetPort(int port);
86 
87 #endif // REMOTE_H
88