|
|
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
! 12: #define UAEURSAMINOR 5
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.