--- uae/src/include/memory.h 2018/04/24 16:57:02 1.1.1.7 +++ uae/src/include/memory.h 2018/04/24 17:14:42 1.1.1.11 @@ -6,14 +6,7 @@ * Copyright 1995 Bernd Schmidt */ -/* Enabling this adds one additional native memory reference per 68k memory - * access, but saves one shift (on the x86). Enabling this is probably - * better for the cache. My favourite benchmark (PP2) doesn't show a - * difference, so I leave this enabled. */ - -#if 1 || defined SAVE_MEMORY -#define SAVE_MEMORY_BANKS -#endif +extern void memory_reset (void); extern int special_mem; #define S_READ 1 @@ -53,6 +46,9 @@ extern uae_u32 allocated_a3000mem; #define kickmem_start 0x00F80000 extern int ersatzkickfile; +extern int cloanto_rom; + +extern uae_u8* baseaddr[]; typedef struct { /* These ones should be self-explanatory... */ @@ -68,9 +64,15 @@ typedef struct { * that the pointer points to an area of at least the specified size. * This is used for example to translate bitplane pointers in custom.c */ check_func check; + /* For those banks that refer to real memory, we can save the whole trouble + of going through function calls, and instead simply grab the memory + ourselves. This holds the memory address where the start of memory is + for this particular bank. */ + uae_u8 *baseaddr; } addrbank; -extern uae_u8 filesysory[65536]; +extern uae_u8 *filesysory; +extern uae_u8 *rtarea; extern addrbank chipmem_bank; extern addrbank kickmem_bank; @@ -99,18 +101,20 @@ extern uae_u8 *default_xlate(uaecptr add #define bankindex(addr) (((uaecptr)(addr)) >> 16) -#ifdef SAVE_MEMORY_BANKS extern addrbank *mem_banks[65536]; +extern uae_u8 *baseaddr[65536]; #define get_mem_bank(addr) (*mem_banks[bankindex(addr)]) -#define put_mem_bank(addr, b) (mem_banks[bankindex(addr)] = (b)) -#else -extern addrbank mem_banks[65536]; -#define get_mem_bank(addr) (mem_banks[bankindex(addr)]) -#define put_mem_bank(addr, b) (mem_banks[bankindex(addr)] = *(b)) -#endif - -extern void memory_init(void); -extern void map_banks(addrbank *bank, int first, int count); +#define put_mem_bank(addr, b, realstart) do { \ + (mem_banks[bankindex(addr)] = (b)); \ + if ((b)->baseaddr) \ + baseaddr[bankindex(addr)] = (b)->baseaddr - (realstart); \ + else \ + baseaddr[bankindex(addr)] = (uae_u8*)(((long)b)+1); \ +} while (0) + +extern void memory_init (void); +extern void memory_cleanup (void); +extern void map_banks (addrbank *bank, int first, int count, int realsize); #ifndef NO_INLINE_MEMORY_ACCESS @@ -187,3 +191,50 @@ extern uae_u32 chipmem_bget (uaecptr) RE extern void chipmem_lput (uaecptr, uae_u32) REGPARAM; extern void chipmem_wput (uaecptr, uae_u32) REGPARAM; extern void chipmem_bput (uaecptr, uae_u32) REGPARAM; + +#ifdef NATMEM_OFFSET + +typedef struct shmpiece_reg { + uae_u8 *native_address; + int id; + uae_u32 size; + struct shmpiece_reg *next; + struct shmpiece_reg *prev; +} shmpiece; + +extern shmpiece *shm_start; +extern int canbang; + +#endif + +extern uae_u8 *mapped_malloc (size_t, char *); +extern void mapped_free (uae_u8 *); + +#define ROMTYPE_KICK 1 +#define ROMTYPE_KICKCD32 2 +#define ROMTYPE_EXTCD32 4 +#define ROMTYPE_EXTCDTV 8 +#define ROMTYPE_AR 16 +#define ROMTYPE_KEY 32 +#define ROMTYPE_ARCADIA 64 + +struct romdata { + char *name; + int version, revision; + uae_u32 crc32; + uae_u32 size; + int id; + int cpu; + int cloanto; + int type; +}; + +extern struct romdata *getromdatabycrc (uae_u32 crc32); +extern struct romdata *getromdatabydata (uae_u8 *rom, int size); +extern struct romdata *getromdatabyid (int id); +extern struct romdata *getarcadiarombyname (char *name); +extern void getromname (struct romdata*, char*); +extern struct romdata *getromdatabyname (char*); +extern void romlist_add (char *path, struct romdata *rd); +extern char *romlist_get (struct romdata *rd); +extern void romlist_clear (void);