|
|
1.1 root 1: /*
2: * UAE - The Un*x Amiga Emulator
3: *
1.1.1.2 root 4: * Stuff
1.1 root 5: *
1.1.1.3 root 6: * Copyright 1995, 1996 Ed Hanway
7: * Copyright 1995-97 Bernd Schmidt
1.1 root 8: */
9:
10: #define UAEMAJOR 0
1.1.1.3 root 11: #define UAEMINOR 7
1.1.1.4 ! root 12: #define UAEURSAMINOR 6
1.1 root 13:
1.1.1.2 root 14: typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang;
1.1 root 15:
16: extern int version;
1.1.1.3 root 17:
18: struct uae_prefs {
19: int framerate;
20: int illegal_mem;
21: int no_xhair;
22: int use_serial;
23: int serial_demand;
24: int parallel_demand;
25: int automount_uaedev;
26:
27: int fake_joystick;
28: KbdLang keyboard_lang;
29: int allow_save;
30: int emul_accuracy;
31: int test_drawing_speed;
32:
33: int produce_sound;
34: int stereo;
35: int sound_bits;
36: int sound_freq;
37: int sound_minbsiz;
38: int sound_maxbsiz;
39:
40: int gfx_width;
41: int gfx_height;
42: int gfx_lores;
43: int gfx_linedbl;
44: int gfx_correct_aspect;
45: int gfx_xcenter;
46: int gfx_ycenter;
47: int color_mode;
48:
49: /* X11 specific options */
50: int use_low_bandwidth;
51: int use_mitshm;
52:
53: int blits_32bit_enabled;
54: int immediate_blits;
55:
56: char df[4][256];
57:
58: int m68k_speed;
59: int cpu_level;
60: int cpu_compatible;
61: int address_space_24;
62: };
63:
64: #define JSEM_DECODEVAL(n,v) (((v) >> (n*8)) & 255)
65: /* Determine how port n is configured with the value v in fake_joystick */
66: #define JSEM_ISJOY0(n,v) (JSEM_DECODEVAL(n,v) == 0)
67: #define JSEM_ISJOY1(n,v) (JSEM_DECODEVAL(n,v) == 1)
68: #define JSEM_ISMOUSE(n,v) (JSEM_DECODEVAL(n,v) == 2)
69: #define JSEM_ISNUMPAD(n,v) (JSEM_DECODEVAL(n,v) == 3)
70: #define JSEM_ISCURSOR(n,v) (JSEM_DECODEVAL(n,v) == 4)
71: #define JSEM_ISSOMEWHEREELSE(n,v) (JSEM_DECODEVAL(n,v) == 5)
72: extern const char *gameport_state (int n);
73:
74: /* These preferences make sense only at startup. */
75: extern int no_gui, use_debugger, use_gfxlib;
76:
77: extern struct uae_prefs currprefs, changed_prefs;
78:
79: extern void write_log (const char *);
80: extern void machdep_init (void);
1.1 root 81:
82: /* AIX doesn't think it is Unix. Neither do I. */
83: #if defined(_ALL_SOURCE) || defined(_AIX)
84: #undef __unix
85: #define __unix
86: #endif
87:
1.1.1.3 root 88: extern char romfile[], keyfile[], prtname[], sername[];
89:
90: extern int cloanto_rom;
1.1 root 91:
1.1.1.2 root 92: #define MAX_COLOR_MODES 5
1.1 root 93:
1.1.1.2 root 94: extern int fast_memcmp(const void *foo, const void *bar, int len);
95: extern int memcmpy(void *foo, const void *bar, int len);
1.1 root 96:
97: /*
98: * You can specify numbers from 0 to 5 here. It is possible that higher
99: * numbers will make the CPU emulation slightly faster, but if the setting
100: * is too high, you will run out of memory while compiling.
101: * Best to leave this as it is.
102: */
103: #define CPU_EMU_SIZE 0
104:
105: /* #define NEED_TO_DEBUG_BADLY */
106:
1.1.1.2 root 107: #if !defined(USER_PROGRAMS_BEHAVE)
108: #define USER_PROGRAMS_BEHAVE 0
109: #endif
110:
1.1.1.3 root 111: /* Some memsets which know that they can safely overwrite some more memory
112: * at both ends and use that knowledge to align the pointers. */
113:
1.1.1.2 root 114: #define QUADRUPLIFY(c) (((c) | ((c) << 8)) | (((c) | ((c) << 8)) << 16))
115:
116: /* When you call this routine, bear in mind that it rounds the bounds and
117: * may need some padding for the array. */
118:
119: #define fuzzy_memset(p, c, o, l) fuzzy_memset_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 4) >> 2)
1.1.1.3 root 120: static __inline__ void fuzzy_memset_1 (void *p, uae_u32 c, int offset, int len)
1.1.1.2 root 121: {
1.1.1.3 root 122: uae_u32 *p2 = (uae_u32 *)((char *)p + offset);
1.1.1.2 root 123: int a = len & 7;
124: len >>= 3;
125: switch (a) {
126: case 7: p2--; goto l1;
127: case 6: p2-=2; goto l2;
128: case 5: p2-=3; goto l3;
129: case 4: p2-=4; goto l4;
130: case 3: p2-=5; goto l5;
131: case 2: p2-=6; goto l6;
132: case 1: p2-=7; goto l7;
1.1.1.3 root 133: case 0: if (!--len) return; break;
1.1.1.2 root 134: }
135:
136: for (;;) {
137: p2[0] = c;
138: l1:
139: p2[1] = c;
140: l2:
141: p2[2] = c;
142: l3:
143: p2[3] = c;
144: l4:
145: p2[4] = c;
146: l5:
147: p2[5] = c;
148: l6:
149: p2[6] = c;
150: l7:
151: p2[7] = c;
1.1.1.3 root 152:
1.1.1.2 root 153: if (!len)
154: break;
155: len--;
156: p2 += 8;
157: }
158: }
159:
1.1.1.3 root 160: #define fuzzy_memset_le32(p, c, o, l) fuzzy_memset_le32_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 7) >> 2)
161: static __inline__ void fuzzy_memset_le32_1 (void *p, uae_u32 c, int offset, int len)
1.1.1.2 root 162: {
1.1.1.3 root 163: uae_u32 *p2 = (uae_u32 *)((char *)p + offset);
1.1.1.2 root 164:
165: switch (len) {
166: 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;
167: 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;
168: case 7: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; break;
169: case 6: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; break;
170: case 5: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; break;
171: case 4: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; break;
172: case 3: p2[0] = c; p2[1] = c; p2[2] = c; break;
173: case 2: p2[0] = c; p2[1] = c; break;
174: case 1: p2[0] = c; break;
175: case 0: break;
176: default: printf("Hit the programmer.\n"); break;
177: }
178: }
179:
1.1.1.3 root 180: /*
181: * Frame rate hack. Currently only implemented for Pentium (P6?) CPUs.
182: */
183: #if !defined __GNUC_MINOR__
184: #undef HAVE_RDTSC
185: #endif
186:
187: #undef HAVE_INLINE_RPT
188: #ifdef HAVE_RDTSC
189: #define FRAME_RATE_HACK
190:
191: typedef unsigned long frame_time_t;
192: static inline frame_time_t read_processor_time (void)
193: {
194: frame_time_t foo;
195: /* Don't assume the assembler knows rdtsc */
196: __asm__ __volatile__ (".byte 0x0f,0x31" : "=a" (foo) :);
197: return foo;
198: }
199: #define HAVE_INLINE_RPT
200: #else
201: typedef int frame_time_t;
202: #endif
203:
204: #if defined FRAME_RATE_HACK && !defined HAVE_INLINE_RPT
205: extern frame_time_t read_processor_time (void);
206: #endif
207: extern frame_time_t vsynctime, vsyncmintime;
208:
209: #if defined(AMIGA) && defined(__GNUC__)
210: #include "od-amiga/amiga-kludges.h"
211: #endif
212:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.