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