MCUME/MCUME_teensy41/teensyuae/options.h

198 wiersze
5.0 KiB
C

/*
* UAE - The Un*x Amiga Emulator
*
* Stuff
*
* Copyright 1995, 1996 Ed Hanway
* Copyright 1995-97 Bernd Schmidt
*/
#define UAEMAJOR 0
#define UAEMINOR 6
#define UAEURSAMINOR 9
#define MAX_FILENAME 64
typedef enum { KBD_LANG_US, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang;
extern int version;
struct uae_prefs {
int framerate;
int illegal_mem;
int no_xhair;
int use_serial;
int automount_uaedev;
int fake_joystick;
KbdLang keyboard_lang;
int allow_save;
int emul_accuracy;
int test_drawing_speed;
int produce_sound;
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;
int blits_32bit_enabled;
int immediate_blits;
char df[4][MAX_FILENAME];
char hf0[MAX_FILENAME];
};
#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)
/* 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)
#undef __unix
#define __unix
#endif
extern char romfile[], prtname[], sername[];
/*
* 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
* is too high, you will run out of memory while compiling.
* Best to leave this as it is.
*/
#define CPU_EMU_SIZE 0
/* 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, uae_u32 c, int offset, int len)
{
uae_u32 *p2 = (uae_u32 *)((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: if (!--len) return; break;
}
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) + 7) >> 2)
static __inline__ void fuzzy_memset_le32_1 (void *p, uae_u32 c, int offset, int len)
{
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;
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;
}
}
static __inline__ int memcmpy(void *foo, const void *bar, int len)
{
int differs = memcmp(foo, bar, len);
memcpy(foo, bar, len);
return differs;
}
#define fast_memcmp memcmp
/*
* 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__ (".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 "md-amiga/amiga-kludges.h"
#endif