|
|
1.1 root 1: /*
2: Hatari - log.h
3:
1.1.1.5 root 4: This file is distributed under the GNU General Public License, version 2
5: or at your option any later version. Read the file gpl.txt for details.
1.1 root 6: */
7: #ifndef HATARI_LOG_H
8: #define HATARI_LOG_H
9:
10: #include <stdbool.h>
11: #include <SDL_types.h>
12:
13:
1.1.1.6 root 14: /* Exception debugging
15: * -------------------
16: */
17:
18: /* CPU exception flags
19: * is catching needed also for: traps 0, 3-12, 15? (MonST catches them)
20: */
21: #define EXCEPT_BUS (1<<0)
22: #define EXCEPT_ADDRESS (1<<1)
23: #define EXCEPT_ILLEGAL (1<<2)
24: #define EXCEPT_ZERODIV (1<<3)
25: #define EXCEPT_CHK (1<<4)
26: #define EXCEPT_TRAPV (1<<5)
27: #define EXCEPT_PRIVILEGE (1<<6)
1.1.1.8 ! root 28: #define EXCEPT_TRACE (1<<7)
! 29: #define EXCEPT_NOHANDLER (1<<8)
1.1.1.6 root 30:
31: /* DSP exception flags */
1.1.1.8 ! root 32: #define EXCEPT_DSP (1<<9)
1.1.1.6 root 33:
34: /* whether to enable exception debugging on autostart */
1.1.1.8 ! root 35: #define EXCEPT_AUTOSTART (1<<10)
1.1.1.6 root 36:
37: /* general flags */
38: #define EXCEPT_NONE (0)
39: #define EXCEPT_ALL (~EXCEPT_AUTOSTART)
40:
41: /* defaults are same as with earlier -D option */
42: #define DEFAULT_EXCEPTIONS (EXCEPT_BUS|EXCEPT_ADDRESS|EXCEPT_DSP)
43:
44: extern int ExceptionDebugMask;
45: extern const char* Log_SetExceptionDebugMask(const char *OptionsStr);
46:
47:
1.1 root 48: /* Logging
49: * -------
50: * Is always enabled as it's information that can be useful
51: * to the Hatari users
52: */
53: typedef enum
54: {
55: /* these present user with a dialog and log the issue */
56: LOG_FATAL, /* Hatari can't continue unless user resolves issue */
57: LOG_ERROR, /* something user did directly failed (e.g. save) */
58: /* these just log the issue */
59: LOG_WARN, /* something failed, but it's less serious */
60: LOG_INFO, /* user action success (e.g. TOS file load) */
61: LOG_TODO, /* functionality not yet being emulated */
62: LOG_DEBUG, /* information about internal Hatari working */
63: LOG_NONE /* invalid LOG level */
64: } LOGTYPE;
65:
66: #ifndef __GNUC__
67: /* assuming attributes work only for GCC */
68: #define __attribute__(foo)
69: #endif
70:
1.1.1.7 root 71: extern void Log_Default(void);
1.1 root 72: extern int Log_Init(void);
73: extern int Log_SetAlertLevel(int level);
74: extern void Log_UnInit(void);
75: extern void Log_Printf(LOGTYPE nType, const char *psFormat, ...)
76: __attribute__ ((format (printf, 2, 3)));
77: extern void Log_AlertDlg(LOGTYPE nType, const char *psFormat, ...)
78: __attribute__ ((format (printf, 2, 3)));
79: extern LOGTYPE Log_ParseOptions(const char *OptionStr);
80: extern const char* Log_SetTraceOptions(const char *OptionsStr);
81: extern char *Log_MatchTrace(const char *text, int state);
82:
83: #ifndef __GNUC__
84: #undef __attribute__
85: #endif
86:
87:
88:
89: /* Tracing
90: * -------
91: * Tracing outputs information about what happens in the emulated
92: * system and slows down the emulation. As it's intended mainly
93: * just for the Hatari developers, tracing support is compiled in
94: * by default.
95: *
96: * Tracing can be enabled by defining ENABLE_TRACING
97: * in the top level config.h
98: */
99: #include "config.h"
100:
1.1.1.2 root 101: /* Up to 64 levels when using Uint64 for HatariTraceFlags */
1.1 root 102: #define TRACE_VIDEO_SYNC (1<<0)
103: #define TRACE_VIDEO_RES (1<<1)
104: #define TRACE_VIDEO_COLOR (1<<2)
105: #define TRACE_VIDEO_BORDER_V (1<<3)
106: #define TRACE_VIDEO_BORDER_H (1<<4)
107: #define TRACE_VIDEO_ADDR (1<<5)
108: #define TRACE_VIDEO_VBL (1<<6)
109: #define TRACE_VIDEO_HBL (1<<7)
110: #define TRACE_VIDEO_STE (1<<8)
111:
112: #define TRACE_MFP_EXCEPTION (1<<9)
113: #define TRACE_MFP_START (1<<10)
114: #define TRACE_MFP_READ (1<<11)
115: #define TRACE_MFP_WRITE (1<<12)
116:
117: #define TRACE_PSG_READ (1<<13)
118: #define TRACE_PSG_WRITE (1<<14)
119:
120: #define TRACE_CPU_PAIRING (1<<15)
121: #define TRACE_CPU_DISASM (1<<16)
122: #define TRACE_CPU_EXCEPTION (1<<17)
123:
124: #define TRACE_INT (1<<18)
125:
126: #define TRACE_FDC (1<<19)
127:
1.1.1.5 root 128: #define TRACE_ACIA (1<<20)
1.1 root 129:
1.1.1.5 root 130: #define TRACE_IKBD_CMDS (1<<21)
131: #define TRACE_IKBD_ACIA (1<<22)
132: #define TRACE_IKBD_EXEC (1<<23)
133:
134: #define TRACE_BLITTER (1<<24)
135:
136: #define TRACE_OS_BIOS (1<<25)
137: #define TRACE_OS_XBIOS (1<<26)
138: #define TRACE_OS_GEMDOS (1<<27)
139: #define TRACE_OS_VDI (1<<28)
140: #define TRACE_OS_AES (1<<29)
141:
142: #define TRACE_IOMEM_RD (1<<30)
143: #define TRACE_IOMEM_WR (1ULL<<31)
144:
145: #define TRACE_DMASND (1ll<<32)
146:
147: #define TRACE_CROSSBAR (1ll<<33)
148: #define TRACE_VIDEL (1ll<<34)
149:
150: #define TRACE_DSP_HOST_INTERFACE (1ll<<35)
151: #define TRACE_DSP_HOST_COMMAND (1ll<<36)
152: #define TRACE_DSP_HOST_SSI (1ll<<37)
153: #define TRACE_DSP_DISASM (1ll<<38)
154: #define TRACE_DSP_DISASM_REG (1ll<<39)
155: #define TRACE_DSP_DISASM_MEM (1ll<<40)
156: #define TRACE_DSP_STATE (1ll<<41)
157: #define TRACE_DSP_INTERRUPT (1ll<<42)
158:
159: #define TRACE_DSP_SYMBOLS (1ll<<43)
160: #define TRACE_CPU_SYMBOLS (1ll<<44)
161:
162: #define TRACE_NVRAM (1ll<<45)
1.1.1.4 root 163:
1.1.1.6 root 164: #define TRACE_SCSI_CMD (1ll<<46)
165:
166: #define TRACE_NATFEATS (1ll<<47)
167:
1.1.1.7 root 168: #define TRACE_KEYMAP (1ll<<48)
169:
170: #define TRACE_MIDI (1ll<<49)
171:
172: #define TRACE_IDE (1ll<<50)
173:
174: #define TRACE_OS_BASE (1ll<<51)
175:
1.1.1.8 ! root 176: #define TRACE_SCSIDRV (1ll<<52)
! 177:
1.1 root 178: #define TRACE_NONE (0)
179: #define TRACE_ALL (~0)
180:
181:
182: #define TRACE_VIDEO_ALL ( TRACE_VIDEO_SYNC | TRACE_VIDEO_RES | TRACE_VIDEO_COLOR \
183: | TRACE_VIDEO_BORDER_V | TRACE_VIDEO_BORDER_H | TRACE_VIDEO_ADDR \
184: | TRACE_VIDEO_VBL | TRACE_VIDEO_HBL | TRACE_VIDEO_STE )
185:
186: #define TRACE_MFP_ALL ( TRACE_MFP_EXCEPTION | TRACE_MFP_START | TRACE_MFP_READ | TRACE_MFP_WRITE )
187:
188: #define TRACE_PSG_ALL ( TRACE_PSG_READ | TRACE_PSG_WRITE )
189:
190: #define TRACE_CPU_ALL ( TRACE_CPU_PAIRING | TRACE_CPU_DISASM | TRACE_CPU_EXCEPTION )
191:
1.1.1.2 root 192: #define TRACE_IKBD_ALL ( TRACE_IKBD_CMDS | TRACE_IKBD_ACIA | TRACE_IKBD_EXEC )
1.1 root 193:
1.1.1.7 root 194: #define TRACE_OS_ALL ( TRACE_OS_BASE | TRACE_OS_BIOS | TRACE_OS_XBIOS | TRACE_OS_GEMDOS | TRACE_OS_AES | TRACE_OS_VDI )
1.1 root 195:
196: #define TRACE_IOMEM_ALL ( TRACE_IOMEM_RD | TRACE_IOMEM_WR )
197:
1.1.1.2 root 198: #define TRACE_DSP_ALL ( TRACE_DSP_HOST_INTERFACE | TRACE_DSP_HOST_COMMAND | TRACE_DSP_HOST_SSI | TRACE_DSP_DISASM \
199: | TRACE_DSP_DISASM_REG | TRACE_DSP_DISASM_MEM | TRACE_DSP_STATE | TRACE_DSP_INTERRUPT )
1.1 root 200:
201: extern FILE *TraceFile;
1.1.1.2 root 202: extern Uint64 LogTraceFlags;
1.1 root 203:
204: #if ENABLE_TRACING
205:
1.1.1.8 ! root 206: #define LOG_TRACE(level, ...) \
! 207: if (unlikely(LogTraceFlags & (level))) { fprintf(TraceFile, __VA_ARGS__); fflush(TraceFile); }
! 208:
1.1.1.7 root 209: #define LOG_TRACE_LEVEL( level ) (unlikely(LogTraceFlags & (level)))
1.1 root 210:
211: #else /* ENABLE_TRACING */
212:
1.1.1.8 ! root 213: #define LOG_TRACE(level, ...) {}
! 214:
1.1 root 215: #define LOG_TRACE_LEVEL( level ) (0)
216:
217: #endif /* ENABLE_TRACING */
218:
219: /* Always defined in full to avoid compiler warnings about unused variables.
220: * In code it's used in such a way that it will be optimized away when tracing
221: * is disabled.
222: */
1.1.1.8 ! root 223: #define LOG_TRACE_PRINT(...) fprintf(TraceFile , __VA_ARGS__)
1.1 root 224:
225:
226: #endif /* HATARI_LOG_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.