|
|
1.1 root 1: /*
2: * UAE - The Un*x Amiga Emulator
3: *
4: * Debugger
5: *
6: * (c) 1995 Bernd Schmidt
7: *
8: */
9:
10: #ifdef DEBUGGER
11:
12: #define MAX_HIST 500
13: #define MAX_LINEWIDTH 100
14:
15: extern int debugging;
16: extern int memwatch_enabled;
17: extern int exception_debugging;
18: extern int debug_copper;
19: extern int debug_dma;
20: extern int debug_sprite_mask;
21: extern int debug_bpl_mask, debug_bpl_mask_one;
22: extern int debugger_active;
23: extern int debug_illegal;
24: extern uae_u64 debug_illegal_mask;
25:
26: extern void debug (void);
27: extern void debugger_change (int mode);
28: extern void activate_debugger (void);
29: extern void deactivate_debugger (void);
30: extern int notinrom (void);
31: extern const TCHAR *debuginfo (int);
32: extern void record_copper (uaecptr addr, uae_u16 word1, uae_u16 word2, int hpos, int vpos);
33: extern void record_copper_blitwait (uaecptr addr, int hpos, int vpos);
34: extern void record_copper_reset (void);
35: extern int mmu_init (int, uaecptr,uaecptr);
36: extern void mmu_do_hit (void);
37: extern void dump_aga_custom (void);
38: extern void memory_map_dump (void);
39: extern void debug_help (void);
40: extern uaecptr dumpmem2 (uaecptr addr, TCHAR *out, int osize);
41: extern void update_debug_info (void);
42: extern int instruction_breakpoint (TCHAR **c);
43: extern int debug_bankchange (int);
44: extern void log_dma_record (void);
45: extern void debug_parser (const TCHAR *cmd, TCHAR *out, uae_u32 outsize);
46: extern void mmu_disasm (uaecptr pc, int lines);
47: extern int debug_read_memory_16 (uaecptr addr);
48: extern int debug_peek_memory_16 (uaecptr addr);
49: extern int debug_read_memory_8 (uaecptr addr);
50: extern int debug_peek_memory_8 (uaecptr addr);
51: extern int debug_write_memory_16 (uaecptr addr, uae_u16 v);
52: extern int debug_write_memory_8 (uaecptr addr, uae_u8 v);
53: extern bool debug_enforcer(void);
54:
55: #define BREAKPOINT_TOTAL 20
56: struct breakpoint_node {
57: uaecptr addr;
58: int enabled;
59: };
60: extern struct breakpoint_node bpnodes[BREAKPOINT_TOTAL];
61:
62: #define MW_MASK_CPU 0x00000001
63: #define MW_MASK_BLITTER_A 0x00000002
64: #define MW_MASK_BLITTER_B 0x00000004
65: #define MW_MASK_BLITTER_C 0x00000008
66: #define MW_MASK_BLITTER_D 0x00000010
67: #define MW_MASK_COPPER 0x00000020
68: #define MW_MASK_DISK 0x00000040
69: #define MW_MASK_AUDIO_0 0x00000080
70: #define MW_MASK_AUDIO_1 0x00000100
71: #define MW_MASK_AUDIO_2 0x00000200
72: #define MW_MASK_AUDIO_3 0x00000400
73: #define MW_MASK_BPL_0 0x00000800
74: #define MW_MASK_BPL_1 0x00001000
75: #define MW_MASK_BPL_2 0x00002000
76: #define MW_MASK_BPL_3 0x00004000
77: #define MW_MASK_BPL_4 0x00008000
78: #define MW_MASK_BPL_5 0x00010000
79: #define MW_MASK_BPL_6 0x00020000
80: #define MW_MASK_BPL_7 0x00040000
81: #define MW_MASK_SPR_0 0x00080000
82: #define MW_MASK_SPR_1 0x00100000
83: #define MW_MASK_SPR_2 0x00200000
84: #define MW_MASK_SPR_3 0x00400000
85: #define MW_MASK_SPR_4 0x00800000
86: #define MW_MASK_SPR_5 0x01000000
87: #define MW_MASK_SPR_6 0x02000000
88: #define MW_MASK_SPR_7 0x04000000
89: #define MW_MASK_ALL (0x08000000 - 1)
90:
91: #define MEMWATCH_TOTAL 20
92: struct memwatch_node {
93: uaecptr addr;
94: int size;
95: int rwi;
96: uae_u32 val, val_mask, access_mask;
97: int val_size, val_enabled;
98: int mustchange;
99: uae_u32 modval;
100: int modval_written;
101: int frozen;
102: uae_u32 reg;
103: uaecptr pc;
104: };
105: extern struct memwatch_node mwnodes[MEMWATCH_TOTAL];
106:
107: extern void memwatch_dump2 (TCHAR *buf, int bufsize, int num);
108:
109: uae_u16 debug_wgetpeekdma_chipram (uaecptr addr, uae_u32 v, uae_u32 mask, int reg);
110: uae_u16 debug_wputpeekdma_chipram (uaecptr addr, uae_u32 v, uae_u32 mask, int reg);
111: uae_u16 debug_wputpeekdma_chipset (uaecptr addr, uae_u32 v, uae_u32 mask, int reg);
112: void debug_lgetpeek (uaecptr addr, uae_u32 v);
113: void debug_wgetpeek (uaecptr addr, uae_u32 v);
114: void debug_bgetpeek (uaecptr addr, uae_u32 v);
115: void debug_bputpeek (uaecptr addr, uae_u32 v);
116: void debug_wputpeek (uaecptr addr, uae_u32 v);
117: void debug_lputpeek (uaecptr addr, uae_u32 v);
118:
119: uae_u32 get_byte_debug (uaecptr addr);
120: uae_u32 get_word_debug (uaecptr addr);
121: uae_u32 get_long_debug (uaecptr addr);
122: uae_u32 get_ilong_debug (uaecptr addr);
123: uae_u32 get_iword_debug (uaecptr addr);
124:
125:
126: enum debugtest_item { DEBUGTEST_BLITTER, DEBUGTEST_KEYBOARD, DEBUGTEST_FLOPPY, DEBUGTEST_MAX };
127: void debugtest (enum debugtest_item, const TCHAR *, ...);
128:
129: struct dma_rec
130: {
131: uae_u16 reg;
132: uae_u32 dat;
133: uae_u32 addr;
134: uae_u16 evt;
135: int type;
136: uae_s8 intlev;
137: };
138:
139: #define DMA_EVENT_BLITIRQ 1
140: #define DMA_EVENT_BLITNASTY 2
141: #define DMA_EVENT_BLITSTARTFINISH 4
142: #define DMA_EVENT_BPLFETCHUPDATE 8
143: #define DMA_EVENT_COPPERWAKE 16
144: #define DMA_EVENT_CPUIRQ 32
145: #define DMA_EVENT_INTREQ 64
146: #define DMA_EVENT_COPPERWANTED 128
147:
148: #define DMARECORD_REFRESH 1
149: #define DMARECORD_CPU 2
150: #define DMARECORD_COPPER 3
151: #define DMARECORD_AUDIO 4
152: #define DMARECORD_BLITTER 5
153: #define DMARECORD_BLITTER_FILL 6
154: #define DMARECORD_BLITTER_LINE 7
155: #define DMARECORD_BITPLANE 8
156: #define DMARECORD_SPRITE 9
157: #define DMARECORD_DISK 10
158: #define DMARECORD_MAX 11
159:
160: extern struct dma_rec *record_dma (uae_u16 reg, uae_u16 dat, uae_u32 addr, int hpos, int vpos, int type);
161: extern void record_dma_reset (void);
162: extern void record_dma_event (int evt, int hpos, int vpos);
163: extern void debug_draw_cycles (uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 *xredcolors, uae_u32 *xgreencolors, uae_u32 *xbluescolors);
164:
165: #else
166:
167: STATIC_INLINE void activate_debugger (void) { };
168: #ifdef WINUAE_FOR_HATARI
169: uae_u32 get_byte_debug (uaecptr addr);
170: uae_u32 get_word_debug (uaecptr addr);
171: uae_u32 get_long_debug (uaecptr addr);
172: uae_u32 get_ilong_debug (uaecptr addr);
173: uae_u32 get_iword_debug (uaecptr addr);
174: extern void mmu_do_hit (void);
175: #endif
176:
177: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.