--- uae/src/include/options.h 2018/04/24 16:39:26 1.1.1.2 +++ uae/src/include/options.h 2018/04/24 16:40:21 1.1.1.3 @@ -3,42 +3,81 @@ * * Stuff * - * Copyright 1995, 1996 Bernd Schmidt, Ed Hanway + * Copyright 1995, 1996 Ed Hanway + * Copyright 1995-97 Bernd Schmidt */ #define UAEMAJOR 0 -#define UAEMINOR 6 -#define UAEURSAMINOR 8 +#define UAEMINOR 7 +#define UAEURSAMINOR 5 typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang; extern int version; -extern int framerate; -extern int produce_sound; -extern int correct_aspect; -extern int use_fast_draw; -extern int use_debugger; -extern int use_serial; -extern int illegal_mem; -extern int use_fast_mem; -extern int use_gfxlib; -extern int no_xhair; -extern int automount_uaedev; -extern int fake_joystick; -extern KbdLang keyboard_lang; -extern int color_mode; -extern int sound_desired_bits; -extern int sound_desired_freq; -extern int sound_desired_bsiz; -extern int allow_save; -extern int no_gui; -extern int test_drawing_speed; -extern int emul_accuracy; -extern long hardfile_size; -extern int gfx_requested_width, gfx_requested_height, gfx_requested_lores; -extern int gfx_requested_linedbl, gfx_requested_correct_aspect; -extern int gfx_requested_xcenter, gfx_requested_ycenter; -extern int blits_32bit_enabled, immediate_blits; + +struct uae_prefs { + int framerate; + int illegal_mem; + int no_xhair; + int use_serial; + int serial_demand; + int parallel_demand; + int automount_uaedev; + + int fake_joystick; + KbdLang keyboard_lang; + int allow_save; + int emul_accuracy; + int test_drawing_speed; + + int produce_sound; + int stereo; + int sound_bits; + int sound_freq; + int sound_minbsiz; + int sound_maxbsiz; + + int gfx_width; + int gfx_height; + int gfx_lores; + int gfx_linedbl; + int gfx_correct_aspect; + int gfx_xcenter; + int gfx_ycenter; + int color_mode; + + /* X11 specific options */ + int use_low_bandwidth; + int use_mitshm; + + int blits_32bit_enabled; + int immediate_blits; + + char df[4][256]; + + int m68k_speed; + int cpu_level; + int cpu_compatible; + int address_space_24; +}; + +#define JSEM_DECODEVAL(n,v) (((v) >> (n*8)) & 255) +/* Determine how port n is configured with the value v in fake_joystick */ +#define JSEM_ISJOY0(n,v) (JSEM_DECODEVAL(n,v) == 0) +#define JSEM_ISJOY1(n,v) (JSEM_DECODEVAL(n,v) == 1) +#define JSEM_ISMOUSE(n,v) (JSEM_DECODEVAL(n,v) == 2) +#define JSEM_ISNUMPAD(n,v) (JSEM_DECODEVAL(n,v) == 3) +#define JSEM_ISCURSOR(n,v) (JSEM_DECODEVAL(n,v) == 4) +#define JSEM_ISSOMEWHEREELSE(n,v) (JSEM_DECODEVAL(n,v) == 5) +extern const char *gameport_state (int n); + +/* These preferences make sense only at startup. */ +extern int no_gui, use_debugger, use_gfxlib; + +extern struct uae_prefs currprefs, changed_prefs; + +extern void write_log (const char *); +extern void machdep_init (void); /* AIX doesn't think it is Unix. Neither do I. */ #if defined(_ALL_SOURCE) || defined(_AIX) @@ -46,22 +85,15 @@ extern int blits_32bit_enabled, immediat #define __unix #endif -extern char df0[], df1[], df2[], df3[], romfile[], prtname[], sername[]; +extern char romfile[], keyfile[], prtname[], sername[]; + +extern int cloanto_rom; #define MAX_COLOR_MODES 5 extern int fast_memcmp(const void *foo, const void *bar, int len); extern int memcmpy(void *foo, const void *bar, int len); -/* strdup() may be non-portable if you have a weird system */ -static char *my_strdup(const char*s) -{ - /* The casts to char * are there to shut up the compiler on HPUX */ - char *x = (char*)malloc(strlen((char *)s) + 1); - strcpy(x, (char *)s); - return x; -} - /* * You can specify numbers from 0 to 5 here. It is possible that higher * numbers will make the CPU emulation slightly faster, but if the setting @@ -70,30 +102,24 @@ static char *my_strdup(const char*s) */ #define CPU_EMU_SIZE 0 -#ifdef DONT_WANT_SOUND -#undef LINUX_SOUND -#undef AF_SOUND -#undef SOLARIS_SOUND -#undef SGI_SOUND -#endif - /* #define NEED_TO_DEBUG_BADLY */ -#undef USE_EXECLIB - #if !defined(USER_PROGRAMS_BEHAVE) #define USER_PROGRAMS_BEHAVE 0 #endif +/* Some memsets which know that they can safely overwrite some more memory + * at both ends and use that knowledge to align the pointers. */ + #define QUADRUPLIFY(c) (((c) | ((c) << 8)) | (((c) | ((c) << 8)) << 16)) /* When you call this routine, bear in mind that it rounds the bounds and * may need some padding for the array. */ #define fuzzy_memset(p, c, o, l) fuzzy_memset_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 4) >> 2) -static __inline__ void fuzzy_memset_1 (void *p, ULONG c, int offset, int len) +static __inline__ void fuzzy_memset_1 (void *p, uae_u32 c, int offset, int len) { - ULONG *p2 = (ULONG *)((char *)p + offset); + uae_u32 *p2 = (uae_u32 *)((char *)p + offset); int a = len & 7; len >>= 3; switch (a) { @@ -104,7 +130,7 @@ static __inline__ void fuzzy_memset_1 (v case 3: p2-=5; goto l5; case 2: p2-=6; goto l6; case 1: p2-=7; goto l7; - case 0: goto l8; + case 0: if (!--len) return; break; } for (;;) { @@ -123,7 +149,7 @@ static __inline__ void fuzzy_memset_1 (v p2[6] = c; l7: p2[7] = c; - l8: + if (!len) break; len--; @@ -131,10 +157,10 @@ static __inline__ void fuzzy_memset_1 (v } } -#define fuzzy_memset_le32(p, c, o, l) fuzzy_memset_le32_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 4) >> 2) -static __inline__ void fuzzy_memset_le32_1 (void *p, ULONG c, int offset, int len) +#define fuzzy_memset_le32(p, c, o, l) fuzzy_memset_le32_1 ((p), QUADRUPLIFY (c), (o) & ~3, ((l) + 7) >> 2) +static __inline__ void fuzzy_memset_le32_1 (void *p, uae_u32 c, int offset, int len) { - ULONG *p2 = (ULONG *)((char *)p + offset); + uae_u32 *p2 = (uae_u32 *)((char *)p + offset); switch (len) { 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; @@ -151,3 +177,36 @@ static __inline__ void fuzzy_memset_le32 } } +/* + * Frame rate hack. Currently only implemented for Pentium (P6?) CPUs. + */ +#if !defined __GNUC_MINOR__ +#undef HAVE_RDTSC +#endif + +#undef HAVE_INLINE_RPT +#ifdef HAVE_RDTSC +#define FRAME_RATE_HACK + +typedef unsigned long frame_time_t; +static inline frame_time_t read_processor_time (void) +{ + frame_time_t foo; + /* Don't assume the assembler knows rdtsc */ + __asm__ __volatile__ (".byte 0x0f,0x31" : "=a" (foo) :); + return foo; +} +#define HAVE_INLINE_RPT +#else +typedef int frame_time_t; +#endif + +#if defined FRAME_RATE_HACK && !defined HAVE_INLINE_RPT +extern frame_time_t read_processor_time (void); +#endif +extern frame_time_t vsynctime, vsyncmintime; + +#if defined(AMIGA) && defined(__GNUC__) +#include "od-amiga/amiga-kludges.h" +#endif +