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