OSDN Git Service

[Emu][6809] Implement undefined opcodes, import from XM7/SDL.
[csp-qt/common_source_project-fm7.git] / source / src / common.h
1 /*\r
2         Skelton for retropc emulator\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2006.08.18 -\r
6 \r
7         [ common header ]\r
8 */\r
9 \r
10 #ifndef _COMMON_H_\r
11 #define _COMMON_H_\r
12 \r
13 #if defined(_USE_AGAR) || defined(_USE_SDL)\r
14 #include <SDL.h>\r
15 \r
16 # ifndef uint8\r
17    typedef uint8_t uint8;\r
18 # endif\r
19 # ifndef int8\r
20    typedef int8_t int8;\r
21 # endif\r
22 # ifndef uint16\r
23    typedef uint16_t uint16;\r
24 # endif\r
25 # ifndef int16\r
26    typedef int16_t int16;\r
27 # endif\r
28 # ifndef uint32\r
29    typedef uint32_t uint32;\r
30 # endif\r
31 # ifndef int32\r
32    typedef int32_t int32;\r
33 # endif\r
34 # ifndef uint64\r
35    typedef uint64_t uint64;\r
36 # endif\r
37 # ifndef int64\r
38    typedef int64_t int64;\r
39 # endif\r
40 # ifndef BOOL\r
41    typedef int BOOL;\r
42 # endif\r
43 # ifndef BYTE\r
44    typedef uint8_t BYTE;\r
45 # endif\r
46 # ifndef WORD\r
47    typedef uint16_t WORD;\r
48 # endif\r
49 # ifndef DWORD\r
50    typedef uint32_t DWORD;\r
51 # endif\r
52 # ifndef QWORD\r
53    typedef uint64_t QWORD;\r
54 # endif\r
55 \r
56 \r
57 \r
58 // tchar.h\r
59 #  ifdef  _UNICODE\r
60 #    define __T(x)      L ## x\r
61 #  else\r
62 #    define __T(x)      x\r
63 #  endif\r
64  \r
65 #  define _T(x)       __T(x)\r
66 #  define _TEXT(x)    __T(x)\r
67 \r
68 #  ifdef _UNICODE\r
69     typedef wchar_t _TCHAR;\r
70 #  else\r
71     typedef char    _TCHAR;\r
72 #  endif\r
73 \r
74 #  ifndef LPCTSTR\r
75     typedef _TCHAR LPCTSTR;\r
76 #  endif\r
77 \r
78 #  ifdef _USE_GETTEXT\r
79 #  include <libintl.h>\r
80 #  define _N(x) gettext(x)\r
81 # else\r
82 #  define _N(x) _T(x)\r
83 # endif\r
84 \r
85 #if (SDL_BYTEORDER == SDL_LIL_ENDIAN)\r
86 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
87 {\r
88    return x;\r
89 }\r
90 \r
91 static inline WORD EndianToLittle_WORD(WORD x)\r
92 {\r
93    return x;\r
94 }\r
95 #else // BIG_ENDIAN\r
96 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
97 {\r
98    DWORD y;\r
99    y = ((x & 0x000000ff) << 24) | ((x & 0x0000ff00) << 8) |\r
100        ((x & 0x00ff0000) >> 8)  | ((x & 0xff000000) >> 24);\r
101    return y;\r
102 }\r
103 \r
104 static inline WORD EndianToLittle_WORD(WORD x)\r
105 {\r
106    WORD y;\r
107    y = ((x & 0x00ff) << 8) | ((x & 0xff00) >> 8);\r
108    return y;\r
109 }\r
110 #endif\r
111 #define ZeroMemory(p,s) memset(p,0x00,s)\r
112 #define CopyMemory(t,f,s) memcopy(t,f,s)\r
113 \r
114 extern "C" \r
115 {\r
116 extern void Sleep(int tick);\r
117 extern uint32_t timeGetTime(void);\r
118 }\r
119 \r
120 \r
121 #else\r
122 #include <tchar.h>\r
123 \r
124 // variable scope of 'for' loop for microsoft visual c++ 6.0 and embedded visual c++ 4.0\r
125 #if defined(_MSC_VER) && (_MSC_VER == 1200)\r
126 #define for if(0);else for\r
127 #endif\r
128 \r
129 // disable warnings C4189, C4995 and C4996 for microsoft visual c++ 2005\r
130 #if defined(_MSC_VER) && (_MSC_VER >= 1400)\r
131 #pragma warning( disable : 4819 )\r
132 #pragma warning( disable : 4995 )\r
133 #pragma warning( disable : 4996 )\r
134 #endif\r
135 \r
136 \r
137 // type definition\r
138 #ifndef uint8\r
139 typedef unsigned char uint8;\r
140 #endif\r
141 #ifndef uint16\r
142 typedef unsigned short uint16;\r
143 #endif\r
144 #ifndef uint32\r
145 typedef unsigned int uint32;\r
146 #endif\r
147 #ifndef uint64\r
148 #ifdef _MSC_VER\r
149 typedef unsigned __int64 uint64;\r
150 #else\r
151 typedef unsigned long long uint64;\r
152 #endif\r
153 #endif\r
154 \r
155 #ifndef int8\r
156 typedef signed char int8;\r
157 #endif\r
158 #ifndef int16\r
159 typedef signed short int16;\r
160 #endif\r
161 #ifndef int32\r
162 typedef signed int int32;\r
163 #endif\r
164 #ifndef int64\r
165 #ifdef _MSC_VER\r
166 typedef signed __int64 int64;\r
167 #else\r
168 typedef signed long long int64;\r
169 #endif\r
170 \r
171 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
172 {\r
173    return x;\r
174 }\r
175 \r
176 static inline WORD EndianToLittle_WORD(WORD x)\r
177 {\r
178    return x;\r
179 }\r
180 \r
181 \r
182 #endif\r
183 \r
184 \r
185 typedef union {\r
186 #ifdef _BIG_ENDIAN\r
187         struct {\r
188                 uint8 h3, h2, h, l;\r
189         } b;\r
190         struct {\r
191                 int8 h3, h2, h, l;\r
192         } sb;\r
193         struct {\r
194                 uint16 h, l;\r
195         } w;\r
196         struct {\r
197                 int16 h, l;\r
198         } sw;\r
199 #else\r
200         struct {\r
201                 uint8 l, h, h2, h3;\r
202         } b;\r
203         struct {\r
204                 uint16 l, h;\r
205         } w;\r
206         struct {\r
207                 int8 l, h, h2, h3;\r
208         } sb;\r
209         struct {\r
210                 int16 l, h;\r
211         } sw;\r
212 #endif\r
213         uint32 d;\r
214         int32 sd;\r
215 } pair;\r
216 \r
217 // rgb color\r
218 #define _RGB888\r
219 \r
220 #if defined(_RGB555)\r
221 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 7) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
222 typedef uint16 scrntype;\r
223 #elif defined(_RGB565)\r
224 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 8) | (uint16)(((uint16)(g) & 0xfc) << 3) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
225 typedef uint16 scrntype;\r
226 #elif defined(_RGB888)\r
227 #define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0))\r
228 typedef uint32 scrntype;\r
229 #endif\r
230 \r
231 // misc\r
232 bool check_file_extension(_TCHAR* file_path, _TCHAR* ext);\r
233 _TCHAR *get_file_path_without_extensiton(_TCHAR* file_path);\r
234 uint32 getcrc32(uint8 data[], int size);\r
235 \r
236 #define array_length(array) (sizeof(array) / sizeof(array[0]))\r
237 \r
238 #define FROM_BCD(v)     (((v) & 0x0f) + (((v) >> 4) & 0x0f) * 10)\r
239 #define TO_BCD(v)       ((int)(((v) % 100) / 10) << 4) | ((v) % 10)\r
240 #define TO_BCD_LO(v)    ((v) % 10)\r
241 #define TO_BCD_HI(v)    (int)(((v) % 100) / 10)\r
242 \r
243 #define LEAP_YEAR(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))\r
244 \r
245 typedef struct cur_time_t {\r
246         int year, month, day, day_of_week, hour, minute, second;\r
247         bool initialized;\r
248         cur_time_t()\r
249         {\r
250                 initialized = false;\r
251         }\r
252         void increment();\r
253         void update_year();\r
254         void update_day_of_week();\r
255         void save_state(void *f);\r
256         bool load_state(void *f);\r
257 } cur_time_t;\r
258 \r
259 #endif\r
260 #endif