1 /*
2 * UAE - The Un*x Amiga Emulator
3 *
4 * Stuff
5 *
6 * Copyright 1995, 1996 Ed Hanway
7 * Copyright 1995-98 Bernd Schmidt
8 */
9
10 #define UAEMAJOR 0
11 #define UAEMINOR 8
12 #define UAESUBREV 9
13
14 typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang;
15
16 extern long int version;
17
18 struct uaedev_mount_info;
19
20 struct strlist {
21 struct strlist *next;
22 char *str;
23 };
24
25 struct uae_prefs {
26 struct strlist *unknown_lines;
27
28 char description[256];
29
30 int illegal_mem;
31 int no_xhair;
32 int use_serial;
33 int serial_demand;
34 int parallel_demand;
35 int automount_uaedev;
36 int use_gfxlib;
37 int socket_emu;
38
39 int start_debugger;
40 int start_gui;
41
42 int jport0;
43 int jport1;
44 KbdLang keyboard_lang;
45 int allow_save;
46 int emul_accuracy;
47 int test_drawing_speed;
48
49 int produce_sound;
50 int stereo;
51 int sound_bits;
52 int sound_freq;
53 int sound_minbsiz;
54 int sound_maxbsiz;
55 int sound_pri_time;
56 int sound_pri_cutoff;
57 int sound_interpol;
58
59 int gfx_framerate;
60 int gfx_width;
61 int gfx_height;
62 int gfx_lores;
63 int gfx_linedbl;
64 int gfx_correct_aspect;
65 int gfx_afullscreen;
66 int gfx_pfullscreen;
67 int gfx_xcenter;
68 int gfx_ycenter;
69 int color_mode;
70
71 int blits_32bit_enabled;
72 int immediate_blits;
73 unsigned int chipset_mask;
74 int ntscmode;
75
76 char df[4][256];
77 char romfile[256];
78 char keyfile[256];
79 char prtname[256];
80
81 char path_floppy[256];
82 char path_hardfile[256];
83 char path_rom[256];
84
85 int m68k_speed;
86 int cpu_level;
87 int cpu_compatible;
88 int address_space_24;
89
90 uae_u32 z3fastmem_size;
91 uae_u32 fastmem_size;
92 uae_u32 chipmem_size;
93 uae_u32 bogomem_size;
94 uae_u32 a3000mem_size;
95 uae_u32 gfxmem_size;
96
97 struct uaedev_mount_info *mountinfo;
98
99 /* Target specific options */
100 int x11_use_low_bandwidth;
101 int x11_use_mitshm;
102 int x11_use_dgamode;
103 int x11_hide_cursor;
104 int svga_no_linear;
105 int win32_middle_mouse;
106 int win32_sound_style;
107 int win32_sound_tweak;
108 int win32_logfile;
109 int win32_iconified_nospeed;
110 int win32_iconified_nosound;
111 };
112
113 extern void save_options (FILE *, struct uae_prefs *);
114
115 extern void default_prefs (struct uae_prefs *);
116 extern void discard_prefs (struct uae_prefs *);
117
118 extern int cfgfile_yesno (char *option, char *value, char *name, int *location);
119 extern int cfgfile_intval (char *option, char *value, char *name, int *location, int scale);
120 extern int cfgfile_strval (char *option, char *value, char *name, int *location, const char *table[], int more);
121 extern int cfgfile_string (char *option, char *value, char *name, char *location, int maxsz);
122 extern char *cfgfile_subst_path (const char *path, const char *subst, const char *file);
123
124 extern int target_parse_option (struct uae_prefs *, char *option, char *value);
125 extern void target_save_options (FILE *, struct uae_prefs *);
126
127 extern int cfgfile_load (struct uae_prefs *, const char *filename);
128 extern int cfgfile_save (struct uae_prefs *, const char *filename);
129 extern void cfgfile_parse_line (struct uae_prefs *p, char *);
130 extern int cfgfile_parse_option (struct uae_prefs *p, char *option, char *value);
131 extern int cfgfile_get_description (const char *filename, char *description);
132 extern void cfgfile_show_usage (void);
133
134 extern void fixup_prefs_dimensions (struct uae_prefs *prefs);
135
136 extern void check_prefs_changed_custom (void);
137 extern void check_prefs_changed_cpu (void);
138 extern int check_prefs_changed_gfx (void);
139
140 #define JSEM_DECODEVAL(n,v) ((n) == 0 ? (v)->jport0 : (v)->jport1)
141 /* Determine how port n is configured */
142 #define JSEM_ISJOY0(n,v) (JSEM_DECODEVAL(n,v) == 0)
143 #define JSEM_ISJOY1(n,v) (JSEM_DECODEVAL(n,v) == 1)
144 #define JSEM_ISMOUSE(n,v) (JSEM_DECODEVAL(n,v) == 2)
145 #define JSEM_ISNUMPAD(n,v) (JSEM_DECODEVAL(n,v) == 3)
146 #define JSEM_ISCURSOR(n,v) (JSEM_DECODEVAL(n,v) == 4)
147 #define JSEM_ISSOMEWHEREELSE(n,v) (JSEM_DECODEVAL(n,v) == 5)
148 extern const char *gameport_state (int n);
149
150 extern struct uae_prefs currprefs, changed_prefs;
151
152 #if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 6
153 extern void write_log (const char *, ...) __attribute__ ((format (printf, 1, 2)));
154 #else
155 extern void write_log (const char *, ...);
156 #endif
157
158 extern void machdep_init (void);
159
160 /* AIX doesn't think it is Unix. Neither do I. */
161 #if defined(_ALL_SOURCE) || defined(_AIX)
162 #undef __unix
163 #define __unix
164 #endif
165
166 extern char romfile[], keyfile[], prtname[], sername[];
167
168 extern int cloanto_rom;
169
170 #define MAX_COLOR_MODES 5
171
172 extern int fast_memcmp(const void *foo, const void *bar, int len);
173 extern int memcmpy(void *foo, const void *bar, int len);
174
175 /*
176 * You can specify numbers from 0 to 5 here. It is possible that higher
177 * numbers will make the CPU emulation slightly faster, but if the setting
178 * is too high, you will run out of memory while compiling.
179 * Best to leave this as it is.
180 */
181 #define CPU_EMU_SIZE 0
182
183 /* #define NEED_TO_DEBUG_BADLY */
184
185 #if !defined(USER_PROGRAMS_BEHAVE)
186 #define USER_PROGRAMS_BEHAVE 0
187 #endif
188
189 /* Some memsets which know that they can safely overwrite some more memory
190 * at both ends and use that knowledge to align the pointers. */
191
192 #define QUADRUPLIFY(c) (((c) | ((c) << 8)) | (((c) | ((c) << 8)) << 16))
193
194 /* When you call this routine, bear in mind that it rounds the bounds and
195 * may need some padding for the array. */
196
197 #define fuzzy_memset(p, c, o, l) fuzzy_memset_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 4) >> 2)
fuzzy_memset_1(void * p,uae_u32 c,int offset,int len)198 static inline void fuzzy_memset_1 (void *p, uae_u32 c, int offset, int len)
199 {
200 uae_u32 *p2 = (uae_u32 *)((char *)p + offset);
201 int a = len & 7;
202 len >>= 3;
203 switch (a) {
204 case 7: p2--; goto l1;
205 case 6: p2-=2; goto l2;
206 case 5: p2-=3; goto l3;
207 case 4: p2-=4; goto l4;
208 case 3: p2-=5; goto l5;
209 case 2: p2-=6; goto l6;
210 case 1: p2-=7; goto l7;
211 case 0: if (!--len) return; break;
212 }
213
214 for (;;) {
215 p2[0] = c;
216 l1:
217 p2[1] = c;
218 l2:
219 p2[2] = c;
220 l3:
221 p2[3] = c;
222 l4:
223 p2[4] = c;
224 l5:
225 p2[5] = c;
226 l6:
227 p2[6] = c;
228 l7:
229 p2[7] = c;
230
231 if (!len)
232 break;
233 len--;
234 p2 += 8;
235 }
236 }
237
238 /* This one knows it will never be asked to clear more than 32 bytes. Make sure you call this with a
239 constant for the length. */
240 #define fuzzy_memset_le32(p, c, o, l) fuzzy_memset_le32_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 7) >> 2)
fuzzy_memset_le32_1(void * p,uae_u32 c,int offset,int len)241 static inline void fuzzy_memset_le32_1 (void *p, uae_u32 c, int offset, int len)
242 {
243 uae_u32 *p2 = (uae_u32 *)((char *)p + offset);
244
245 switch (len) {
246 case 9: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; p2[7] = c; p2[8] = c; break;
247 case 8: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; p2[7] = c; break;
248 case 7: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; break;
249 case 6: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; break;
250 case 5: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; break;
251 case 4: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; break;
252 case 3: p2[0] = c; p2[1] = c; p2[2] = c; break;
253 case 2: p2[0] = c; p2[1] = c; break;
254 case 1: p2[0] = c; break;
255 case 0: break;
256 default: printf("Hit the programmer.\n"); break;
257 }
258 }
259
260 #if defined(AMIGA) && defined(__GNUC__)
261 /* #include "od-amiga/amiga-kludges.h" */
262 #endif
263