--- uae/src/include/options.h 2018/04/24 16:38:39 1.1.1.1 +++ uae/src/include/options.h 2018/04/24 16:39:26 1.1.1.2 @@ -1,16 +1,16 @@ /* * UAE - The Un*x Amiga Emulator * - * cpp magic + * Stuff * * Copyright 1995, 1996 Bernd Schmidt, Ed Hanway */ #define UAEMAJOR 0 #define UAEMINOR 6 -#define UAEURSAMINOR 4 +#define UAEURSAMINOR 8 -typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT } KbdLang; +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; @@ -23,21 +23,22 @@ extern int illegal_mem; extern int use_fast_mem; extern int use_gfxlib; extern int no_xhair; -extern int use_lores; extern int automount_uaedev; extern int fake_joystick; extern KbdLang keyboard_lang; extern int color_mode; -extern int screen_res; 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; - -/* Contains the filename of .uaerc */ -extern char optionsfile[]; +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; /* AIX doesn't think it is Unix. Neither do I. */ #if defined(_ALL_SOURCE) || defined(_AIX) @@ -45,24 +46,12 @@ extern char optionsfile[]; #define __unix #endif -#define MAX_COLOR_MODES 5 -#define MAX_SCREEN_MODES 4 - -extern void target_specific_usage(void); - extern char df0[], df1[], df2[], df3[], romfile[], prtname[], sername[]; -#ifndef __unix -extern void parse_cmdline(int argc, char **argv); -#endif +#define MAX_COLOR_MODES 5 -#ifdef __mac__ -/* Apparently, no memcpy :-/ */ -static __inline__ void *memcpy(void *to, void *from, int size) -{ - BlockMove(from, to, size); -} -#endif +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) @@ -73,162 +62,6 @@ static char *my_strdup(const char*s) return x; } -#undef REGPARAM -#define fast_memcmp memcmp -#define memcmpy generic_memcmpy - -static __inline__ int generic_memcmpy(void *foo, const void *bar, int len) -{ - int res = memcmp(foo, bar, len); - if (res) - memcpy(foo, bar, len); - return res; -} - -#if defined(__GNUC_MINOR__) - -#ifdef __i386__ - -#define INTEL_FLAG_OPT - -#undef fast_memcmp -#undef memcmpy - -/* - * Careful: These inline functions may be used only _once_. We'd want to - * generate unique labels for each inline function, but unfortunately not each - * installation of GCC comes with GAS. Bletch. - */ - -static __inline__ int fast_memcmp(const void *foo, const void *bar, int len) -{ - int differs, baz; - __asm__ __volatile__ ("subl $4, %2\n" - "jc LLA2\n" - "LLA1:\n" - "movl (%0),%%ebx\n" - "cmpl (%1),%%ebx\n" - "jne LLA5\n" - "addl $4, %0\n" - "addl $4, %1\n" - "subl $4, %2\n" - "jnc LLA1\n" - "LLA2:\n" - "addl $4, %2\n" - "jz LLA4\n" - "LLA3:\n" - "movb (%0),%%bl\n" - "cmpb (%1),%%bl\n" - "jne LLA5\n" - "incl %0\n" - "incl %1\n" - "decl %2\n" - "jnz LLA3\n" - "LLA4:\n" - "movl $0, %3\n" - "jmp LLA6\n" - "LLA5:\n" - "movl $1, %3\n" - "LLA6:\n" - : "=&r" (foo), "=&r" (bar), "=&rm" (len), "=rm" (differs), - "=&b" (baz) - : "0" (foo), "1" (bar), "2" (len), "3" (baz) : "cc"); - return differs; -} - -static __inline__ int memcmpy(void *foo, const void *bar, int len) -{ - int differs, baz = 0, uupzuq = 0; - - __asm__ __volatile__ ("subl %1, %2\n" - "movl $0, %0\n" - "subl $16, %3\n" - "jc LLB7\n" - - "LLB8:\n" - "movl (%1),%%ecx\n" - "movl (%2,%1),%%ebx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, (%1)\n" - "orl %%ecx, %0\n" - - "movl 4(%2,%1),%%ebx\n" - "movl 4(%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, 4(%1)\n" - "orl %%ecx, %0\n" - - "movl 8(%2,%1),%%ebx\n" - "movl 8(%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, 8(%1)\n" - "orl %%ecx, %0\n" - - "movl 12(%2,%1),%%ebx\n" - "movl 12(%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, 12(%1)\n" - "orl %%ecx, %0\n" - - "addl $16, %1\n" - "subl $16, %3\n" - "jnc LLB8\n" - - "LLB7:\n" - "addl $16, %3\n" - "subl $4, %3\n" - "jc LLB2\n" - - "LLB1:\n" - "movl (%2,%1),%%ebx\n" - "movl (%1),%%ecx\n" - "xorl %%ebx, %%ecx\n" - "movl %%ebx, (%1)\n" - "orl %%ecx, %0\n" - "addl $4, %1\n" - "subl $4, %3\n" - "jnc LLB1\n" - - "LLB2:\n" - "addl $4, %3\n" - "jz LLB6\n" - "xorl %%ecx, %%ecx\n" - - "LLB3:\n" - "movb (%2,%1),%%bl\n" - "movb (%1),%%cl\n" - "xorb %%bl,%%cl\n" - "movb %%bl,(%1)\n" - "orl %%ecx, %0\n" - "incl %1\n" - "decl %3\n" - "jnz LLB3\n" - - "LLB6:\n" - : "=m" (differs) - : "r" (foo), "r" (bar), "r" (len), "b" (baz), "c" (uupzuq) : "cc", "memory"); - /* Now tell the compiler that foo, bar and len have been modified - * If someone finds a way to express all this cleaner in constraints that - * GCC 2.7.2 understands, please FIXME */ - __asm__ __volatile__ ("" : "=rm" (foo), "=rm" (bar), "=rm" (len) : : "ebx", "ecx", "edx", "eax", "esi", "memory"); - - return differs; -} -#endif /* __i386__ */ - -#if __GNUC__ > 2 || __GNUC_MINOR__ > 6 - -#if defined(__i386__) && !defined(USE_PROFILING) -#define REGPARAM __attribute__((regparm(3))) -#endif /* __i386__ */ - -#endif /* GCC version 2.7 or higher */ -#endif /* GCC 2 */ - -#ifndef REGPARAM -#define REGPARAM -#endif - /* * 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 @@ -246,3 +79,75 @@ static __inline__ int memcmpy(void *foo, /* #define NEED_TO_DEBUG_BADLY */ +#undef USE_EXECLIB + +#if !defined(USER_PROGRAMS_BEHAVE) +#define USER_PROGRAMS_BEHAVE 0 +#endif + +#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) +{ + ULONG *p2 = (ULONG *)((char *)p + offset); + int a = len & 7; + len >>= 3; + switch (a) { + case 7: p2--; goto l1; + case 6: p2-=2; goto l2; + case 5: p2-=3; goto l3; + case 4: p2-=4; goto l4; + case 3: p2-=5; goto l5; + case 2: p2-=6; goto l6; + case 1: p2-=7; goto l7; + case 0: goto l8; + } + + for (;;) { + p2[0] = c; + l1: + p2[1] = c; + l2: + p2[2] = c; + l3: + p2[3] = c; + l4: + p2[4] = c; + l5: + p2[5] = c; + l6: + p2[6] = c; + l7: + p2[7] = c; + l8: + if (!len) + break; + len--; + p2 += 8; + } +} + +#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) +{ + ULONG *p2 = (ULONG *)((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; + 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; + case 7: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; p2[6] = c; break; + case 6: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; p2[5] = c; break; + case 5: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; p2[4] = c; break; + case 4: p2[0] = c; p2[1] = c; p2[2] = c; p2[3] = c; break; + case 3: p2[0] = c; p2[1] = c; p2[2] = c; break; + case 2: p2[0] = c; p2[1] = c; break; + case 1: p2[0] = c; break; + case 0: break; + default: printf("Hit the programmer.\n"); break; + } +} +