--- uae/src/include/sysdeps.h 2018/04/24 16:40:20 1.1.1.3 +++ uae/src/include/sysdeps.h 2018/04/24 17:14:48 1.1.1.11 @@ -16,6 +16,13 @@ #include #include #include +#include + +#ifndef __STDC__ +#error "Your compiler is not ANSI. Get a real one." +#endif + +#include #ifdef HAVE_SYS_TYPES_H #include @@ -43,34 +50,10 @@ #include #endif -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_SYS_SELECT_H -#include -#endif - -#ifdef HAVE_SYS_VFS_H -#include -#endif - #ifdef HAVE_SYS_STAT_H #include #endif -#ifdef HAVE_SYS_MOUNT_H -#include -#endif - -#ifdef HAVE_SYS_STATFS_H -#include -#endif - -#ifdef HAVE_SYS_STATVFS_H -#include -#endif - #if TIME_WITH_SYS_TIME # include # include @@ -97,8 +80,8 @@ # endif #endif -#ifdef HAVE_GETOPT_H -#include +#ifdef HAVE_SYS_UTIME_H +# include #endif #include @@ -120,7 +103,7 @@ struct utimbuf }; #endif -#if defined(__GNUC__) && defined(AMIGA) +#if defined(__GNUC__) /* gcc on the amiga need that __attribute((regparm)) must */ /* be defined in function prototypes as well as in */ /* function definitions ! */ @@ -131,7 +114,7 @@ struct utimbuf /* sam: some definitions so that SAS/C can compile UAE */ #if defined(__SASC) && defined(AMIGA) -#define REGPARAM2 +#define REGPARAM2 #define REGPARAM #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE @@ -149,12 +132,26 @@ struct utimbuf }; #endif +#if defined(WARPUP) +#include "devices/timer.h" +#include "osdep/posixemu.h" +#define REGPARAM +#define REGPARAM2 +#define RETSIGTYPE +#define USE_ZFILE +#define strcasecmp stricmp +#define memcpy q_memcpy +#define memset q_memset +#define strdup my_strdup +#define random rand +#define creat(x,y) open("T:creat",O_CREAT|O_RDWR|O_TRUNC,777) +extern void* q_memset(void*,int,size_t); +extern void* q_memcpy(void*,const void*,size_t); +#endif + #ifdef __DOS__ #include #include -#else -#undef O_BINARY -#define O_BINARY 0 #endif /* Acorn specific stuff */ @@ -205,7 +202,7 @@ typedef uae_u32 uaecptr; #if SIZEOF_LONG_LONG == 8 #define uae_s64 long long -#define uae_u64 long long +#define uae_u64 unsigned long long #define VAL64(a) (a ## LL) #define UVAL64(a) (a ## uLL) #elif SIZEOF___INT64 == 8 @@ -226,18 +223,21 @@ typedef uae_u32 uaecptr; extern char *my_strdup (const char*s); #endif -#ifndef HAVE_GETOPT -extern char *optarg; -extern int getopt (int, char * const *, const char *); -#endif - extern void *xmalloc(size_t); +extern void *xcalloc(size_t, size_t); /* We can only rely on GNU C getting enums right. Mickeysoft VSC++ is known * to have problems, and it's likely that other compilers choke too. */ #ifdef __GNUC__ #define ENUMDECL typedef enum #define ENUMNAME(name) name + +/* While we're here, make abort more useful. */ +#define abort() \ + do { \ + write_log ("Internal error; file %s, line %d\n", __FILE__, __LINE__); \ + (abort) (); \ +} while (0) #else #define ENUMDECL enum #define ENUMNAME(name) ; typedef int name @@ -256,93 +256,89 @@ extern void *xmalloc(size_t); #undef DONT_HAVE_STDIO #undef DONT_HAVE_MALLOC -#ifdef _WIN32 +#if defined(WARPUP) #define DONT_HAVE_POSIX -/* Eeek, Mathias, does Windows _really_ not have ANSI stdio? I've accepted - * that Macs are awfully broken, but is Windows really as bad? */ -#define DONT_HAVE_STDIO -#define DONT_HAVE_MALLOC #endif +#if defined _WIN32 + +#if defined __WATCOMC__ + +#define O_NDELAY 0 +#include +#define dirent direct +#define mkdir(a,b) mkdir(a) +#define strcasecmp stricmp + +#elif defined __MINGW32__ + +#define O_NDELAY 0 +#define mkdir(a,b) mkdir(a) + +#endif + +#endif /* _WIN32 */ + #ifdef DONT_HAVE_POSIX #define access posixemu_access -extern int posixemu_access(char *,int); +extern int posixemu_access (const char *, int); #define open posixemu_open -extern int posixemu_open(char *,int,int); +extern int posixemu_open (const char *, int, int); #define close posixemu_close -extern void posixemu_close(int); +extern void posixemu_close (int); #define read posixemu_read -extern int posixemu_read(int, char *, int); +extern int posixemu_read (int, char *, int); #define write posixemu_write -extern int posixemu_write(int, char *, int); +extern int posixemu_write (int, const char *, int); #undef lseek #define lseek posixemu_seek -extern int posixemu_seek(int, int, int); -#define stat(a,b) posixemu_stat(a,b) -extern int posixemu_stat(char *, STAT *); +extern int posixemu_seek (int, int, int); +#define stat(a,b) posixemu_stat ((a), (b)) +extern int posixemu_stat (const char *, STAT *); #define mkdir posixemu_mkdir -extern int mkdir(char *, int); +extern int mkdir (const char *, int); #define rmdir posixemu_rmdir -extern int posixemu_rmdir(char *); +extern int posixemu_rmdir (const char *); #define unlink posixemu_unlink -extern int posixemu_unlink(char *); +extern int posixemu_unlink (const char *); +#define truncate posixemu_truncate +extern int posixemu_truncate (const char *, long int); #define rename posixemu_rename -extern int posixemu_rename(char *, char *); +extern int posixemu_rename (const char *, const char *); #define chmod posixemu_chmod -extern int posixemu_chmod(char *, int); +extern int posixemu_chmod (const char *, int); #define tmpnam posixemu_tmpnam -extern void posixemu_tmpnam(char *); +extern void posixemu_tmpnam (char *); #define utime posixemu_utime -extern void posixemu_utime(const char *, struct utimbuf *); +extern int posixemu_utime (const char *, struct utimbuf *); +#define opendir posixemu_opendir +extern DIR * posixemu_opendir (const char *); +#define readdir posixemu_readdir +extern struct dirent* readdir (DIR *); +#define closedir posixemu_closedir +extern void closedir (DIR *); + /* This isn't the best place for this, but it fits reasonably well. The logic * is that you probably don't have POSIX errnos if you don't have the above * functions. */ -extern long dos_errno(void); - -#endif - -#ifdef DONT_HAVE_REAL_POSIX - -extern FILE *uae_fopen_del (const char *name, const char *mode); -extern int uae_open_del (const char *name, int flags, int mode); - -#else - -static __inline__ FILE *uae_fopen_del (const char *name, const char *mode) -{ - FILE *fd; - fd = fopen (name, mode); - if (fd) { - unlink (name); - } - return fd; -} - -static __inline__ int uae_open_del (const char *name, int flags, int mode) -{ - int fd; - fd = open (name, mode, flags); - if (fd >= 0) { - unlink (name); - } - return fd; -} +extern long dos_errno (void); #endif #ifdef DONT_HAVE_STDIO -/* Mathias: what about fopen? */ -extern int stdioemu_fseek(FILE *,int,int); -#define fseek(a,b,c) stdioemu_fseek(a,b,c) -extern int stdioemu_fread(char *,int,int, FILE *); -#define fread(a,b,c,d) stdioemu_fread(a,b,c,d) -extern int stdioemu_fwrite(char *,int,int, FILE *); -#define fwrite(a,b,c,d) stdioemu_fwrite(a,b,c,d) -extern int stdioemu_ftell(FILE *); +extern FILE *stdioemu_fopen (const char *, const char *); +#define fopen(a,b) stdioemu_fopen(a, b) +extern int stdioemu_fseek (FILE *, int, int); +#define fseek(a,b,c) stdioemu_fseek(a, b, c) +extern int stdioemu_fread (char *, int, int, FILE *); +#define fread(a,b,c,d) stdioemu_fread(a, b, c, d) +extern int stdioemu_fwrite (const char *, int, int, FILE *); +#define fwrite(a,b,c,d) stdioemu_fwrite(a, b, c, d) +extern int stdioemu_ftell (FILE *); #define ftell(a) stdioemu_ftell(a) -extern int stdioemu_fclose(FILE *); +extern int stdioemu_fclose (FILE *); #define fclose(a) stdioemu_fclose(a) #endif @@ -350,9 +346,9 @@ extern int stdioemu_fclose(FILE *); #ifdef DONT_HAVE_MALLOC #define malloc(a) mallocemu_malloc(a) -extern void *mallocemu_malloc(int size); +extern void *mallocemu_malloc (int size); #define free(a) mallocemu_free(a) -extern void mallocemu_free(void *ptr); +extern void mallocemu_free (void *ptr); #endif @@ -370,3 +366,54 @@ extern void mallocemu_free(void *ptr); #endif #include "target.h" + +#ifdef UAE_CONSOLE +#undef write_log +#define write_log write_log_standard +#endif + +#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 6 +extern void write_log (const char *, ...) __attribute__ ((format (printf, 1, 2))); +#else +extern void write_log (const char *, ...); +#endif + +extern void console_out (const char *, ...); +extern void console_flush (void); +extern int console_get (char *, int); + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#ifndef STATIC_INLINE +#if __GNUC__ - 1 > 1 && __GNUC_MINOR__ - 1 >= 0 +#define STATIC_INLINE static __inline__ __attribute__ ((always_inline)) +#define NOINLINE __attribute__ ((noinline)) +#else +#define STATIC_INLINE static __inline__ +#define NOINLINE +#endif +#endif + +/* Every Amiga hardware clock cycle takes this many "virtual" cycles. This + used to be hardcoded as 1, but using higher values allows us to time some + stuff more precisely. + 512 is the official value from now on - it can't change, unless we want + _another_ config option "finegrain2_m68k_speed". + + We define this value here rather than in events.h so that gencpu.c sees + it. */ +#define CYCLE_UNIT 512 + +/* This one is used by cfgfile.c. We could reduce the CYCLE_UNIT back to 1, + I'm not 100% sure this code is bug free yet. */ +#define OFFICIAL_CYCLE_UNIT 512 + +/* + * 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