|
|
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:
70: extern int Log_Init(void);
71: extern int Log_SetAlertLevel(int level);
72: extern void Log_UnInit(void);
73: extern void Log_Printf(LOGTYPE nType, const char *psFormat, ...)
74: __attribute__ ((format (printf, 2, 3)));
75: extern void Log_AlertDlg(LOGTYPE nType, const char *psFormat, ...)
76: __attribute__ ((format (printf, 2, 3)));
77: extern LOGTYPE Log_ParseOptions(const char *OptionStr);
78: extern const char* Log_SetTraceOptions(const char *OptionsStr);
79: extern char *Log_MatchTrace(const char *text, int state);
80:
81: #ifndef __GNUC__
82: #undef __attribute__
83: #endif
84:
85:
86:
87: /* Tracing
88: * -------
89: * Tracing outputs information about what happens in the emulated
90: * system and slows down the emulation. As it's intended mainly
91: * just for the Hatari developers, tracing support is compiled in
92: * by default.
93: *
94: * Tracing can be enabled by defining ENABLE_TRACING
95: * in the top level config.h
96: */
97: #include "config.h"
98:
1.1.1.2 root 99: /* Up to 64 levels when using Uint64 for HatariTraceFlags */
1.1 root 100: #define TRACE_VIDEO_SYNC (1<<0)
101: #define TRACE_VIDEO_RES (1<<1)
102: #define TRACE_VIDEO_COLOR (1<<2)
103: #define TRACE_VIDEO_BORDER_V (1<<3)
104: #define TRACE_VIDEO_BORDER_H (1<<4)
105: #define TRACE_VIDEO_ADDR (1<<5)
106: #define TRACE_VIDEO_VBL (1<<6)
107: #define TRACE_VIDEO_HBL (1<<7)
108: #define TRACE_VIDEO_STE (1<<8)
109:
110: #define TRACE_MFP_EXCEPTION (1<<9)
111: #define TRACE_MFP_START (1<<10)
112: #define TRACE_MFP_READ (1<<11)
113: #define TRACE_MFP_WRITE (1<<12)
114:
115: #define TRACE_PSG_READ (1<<13)
116: #define TRACE_PSG_WRITE (1<<14)
117:
118: #define TRACE_CPU_PAIRING (1<<15)
119: #define TRACE_CPU_DISASM (1<<16)
120: #define TRACE_CPU_EXCEPTION (1<<17)
121:
122: #define TRACE_INT (1<<18)
123:
124: #define TRACE_FDC (1<<19)
125:
1.1.1.5 root 126: #define TRACE_ACIA (1<<20)
1.1 root 127:
1.1.1.5 root 128: #define TRACE_IKBD_CMDS (1<<21)
129: #define TRACE_IKBD_ACIA (1<<22)
130: #define TRACE_IKBD_EXEC (1<<23)
131:
132: #define TRACE_BLITTER (1<<24)
133:
134: #define TRACE_OS_BIOS (1<<25)
135: #define TRACE_OS_XBIOS (1<<26)
136: #define TRACE_OS_GEMDOS (1<<27)
137: #define TRACE_OS_VDI (1<<28)
138: #define TRACE_OS_AES (1<<29)
139:
140: #define TRACE_IOMEM_RD (1<<30)
141: #define TRACE_IOMEM_WR (1ULL<<31)
142:
143: #define TRACE_DMASND (1ll<<32)
144:
145: #define TRACE_CROSSBAR (1ll<<33)
146: #define TRACE_VIDEL (1ll<<34)
147:
148: #define TRACE_DSP_HOST_INTERFACE (1ll<<35)
149: #define TRACE_DSP_HOST_COMMAND (1ll<<36)
150: #define TRACE_DSP_HOST_SSI (1ll<<37)
151: #define TRACE_DSP_DISASM (1ll<<38)
152: #define TRACE_DSP_DISASM_REG (1ll<<39)
153: #define TRACE_DSP_DISASM_MEM (1ll<<40)
154: #define TRACE_DSP_STATE (1ll<<41)
155: #define TRACE_DSP_INTERRUPT (1ll<<42)
156:
157: #define TRACE_DSP_SYMBOLS (1ll<<43)
158: #define TRACE_CPU_SYMBOLS (1ll<<44)
159:
160: #define TRACE_NVRAM (1ll<<45)
1.1.1.4 root 161:
1.1.1.6 ! root 162: #define TRACE_SCSI_CMD (1ll<<46)
! 163:
! 164: #define TRACE_NATFEATS (1ll<<47)
! 165:
1.1 root 166: #define TRACE_NONE (0)
167: #define TRACE_ALL (~0)
168:
169:
170: #define TRACE_VIDEO_ALL ( TRACE_VIDEO_SYNC | TRACE_VIDEO_RES | TRACE_VIDEO_COLOR \
171: | TRACE_VIDEO_BORDER_V | TRACE_VIDEO_BORDER_H | TRACE_VIDEO_ADDR \
172: | TRACE_VIDEO_VBL | TRACE_VIDEO_HBL | TRACE_VIDEO_STE )
173:
174: #define TRACE_MFP_ALL ( TRACE_MFP_EXCEPTION | TRACE_MFP_START | TRACE_MFP_READ | TRACE_MFP_WRITE )
175:
176: #define TRACE_PSG_ALL ( TRACE_PSG_READ | TRACE_PSG_WRITE )
177:
178: #define TRACE_CPU_ALL ( TRACE_CPU_PAIRING | TRACE_CPU_DISASM | TRACE_CPU_EXCEPTION )
179:
1.1.1.2 root 180: #define TRACE_IKBD_ALL ( TRACE_IKBD_CMDS | TRACE_IKBD_ACIA | TRACE_IKBD_EXEC )
1.1 root 181:
1.1.1.2 root 182: #define TRACE_OS_ALL ( TRACE_OS_BIOS | TRACE_OS_XBIOS | TRACE_OS_GEMDOS | TRACE_OS_AES | TRACE_OS_VDI )
1.1 root 183:
184: #define TRACE_IOMEM_ALL ( TRACE_IOMEM_RD | TRACE_IOMEM_WR )
185:
1.1.1.2 root 186: #define TRACE_DSP_ALL ( TRACE_DSP_HOST_INTERFACE | TRACE_DSP_HOST_COMMAND | TRACE_DSP_HOST_SSI | TRACE_DSP_DISASM \
187: | TRACE_DSP_DISASM_REG | TRACE_DSP_DISASM_MEM | TRACE_DSP_STATE | TRACE_DSP_INTERRUPT )
1.1 root 188:
189: extern FILE *TraceFile;
1.1.1.2 root 190: extern Uint64 LogTraceFlags;
1.1 root 191:
192: #if ENABLE_TRACING
193:
194: #ifndef _VCWIN_
195: #define LOG_TRACE(level, args...) \
1.1.1.3 root 196: if (unlikely(LogTraceFlags & level)) { fprintf(TraceFile, args); fflush(TraceFile); }
1.1 root 197: #endif
1.1.1.2 root 198: #define LOG_TRACE_LEVEL( level ) (unlikely(LogTraceFlags & level))
1.1 root 199:
200: #else /* ENABLE_TRACING */
201:
202: #ifndef _VCWIN_
203: #define LOG_TRACE(level, args...) {}
204: #endif
205: #define LOG_TRACE_LEVEL( level ) (0)
206:
207: #endif /* ENABLE_TRACING */
208:
209: /* Always defined in full to avoid compiler warnings about unused variables.
210: * In code it's used in such a way that it will be optimized away when tracing
211: * is disabled.
212: */
213: #ifndef _VCWIN_
214: #define LOG_TRACE_PRINT(args...) fprintf(TraceFile , args)
215: #endif
216:
217:
218: #endif /* HATARI_LOG_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.