X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmemory.h;h=e081550e104ffe1e505e0765fa44a26264731ced;hb=5c28b6dbf7aa20441c8a51f484f4f64b1966f7e3;hp=e57dc84a8495d238fd62a57085a702dd6a1f09e8;hpb=e27b52c2a13e2f7476fbe981e30043fb1b6e592a;p=virtualjaguar diff --git a/src/memory.h b/src/memory.h index e57dc84..e081550 100644 --- a/src/memory.h +++ b/src/memory.h @@ -13,8 +13,11 @@ extern uint8 jagMemSpace[]; extern uint8 * jaguarMainRAM; extern uint8 * jaguarMainROM; -extern uint8 jaguarBootROM[]; -extern uint8 jaguarCDBootROM[]; +//extern uint8 jaguarBootROM[]; +//extern uint8 jaguarCDBootROM[]; +//extern uint8 jaguarDevBootROM1[]; +//extern uint8 jaguarDevBootROM2[]; +//extern uint8 jaguarDevCDBootROM[]; extern uint8 * gpuRAM; extern uint8 * dspRAM; @@ -70,6 +73,11 @@ uint32 & smode = *((uint32 *)&jagMemSpace[0xF1A154]); enum { UNKNOWN, JAGUAR, DSP, GPU, TOM, JERRY, M68K, BLITTER, OP }; extern const char * whoName[9]; +// BIOS identification enum + +//enum { BIOS_NORMAL=0x01, BIOS_CD=0x02, BIOS_STUB1=0x04, BIOS_STUB2=0x08, BIOS_DEV_CD=0x10 }; +//extern int biosAvailable; + // Some handy macros to help converting native endian to big endian (jaguar native) // & vice versa @@ -87,6 +95,9 @@ extern const char * whoName[9]; #define SET16(r, a, v) r[(a)] = ((v) & 0xFF00) >> 8, r[(a)+1] = (v) & 0xFF #define GET16(r, a) ((r[(a)] << 8) | r[(a)+1]) +//This doesn't seem to work on OSX. So have to figure something else out. :-( +//byteswap.h doesn't exist on OSX. +#if 0 // This is GCC specific, but we can fix that if we need to... // Big plus of this approach is that these compile down to single instructions on little // endian machines while one big endian machines we don't have any overhead. :-) @@ -103,5 +114,100 @@ extern const char * whoName[9]; #define ESAFE32(x) (x) #define ESAFE64(x) (x) #endif +#endif + +#if 0 +Stuff ripped out of Hatari, that may be useful: + +/* Can the actual CPU access unaligned memory? */ +#ifndef CPU_CAN_ACCESS_UNALIGNED +# if defined(__i386__) || defined(powerpc) || defined(__mc68020__) +# define CPU_CAN_ACCESS_UNALIGNED 1 +# else +# define CPU_CAN_ACCESS_UNALIGNED 0 +# endif +#endif + + +/* If the CPU can access unaligned memory, use these accelerated functions: */ +#if CPU_CAN_ACCESS_UNALIGNED + +#include + + +static inline uae_u32 do_get_mem_long(void *a) +{ + return SDL_SwapBE32(*(uae_u32 *)a); +} + +static inline uae_u16 do_get_mem_word(void *a) +{ + return SDL_SwapBE16(*(uae_u16 *)a); +} + + +static inline void do_put_mem_long(void *a, uae_u32 v) +{ + *(uae_u32 *)a = SDL_SwapBE32(v); +} + +static inline void do_put_mem_word(void *a, uae_u16 v) +{ + *(uae_u16 *)a = SDL_SwapBE16(v); +} + + +#else /* Cpu can not access unaligned memory: */ + + +static inline uae_u32 do_get_mem_long(void *a) +{ + uae_u8 *b = (uae_u8 *)a; + + return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; +} + +static inline uae_u16 do_get_mem_word(void *a) +{ + uae_u8 *b = (uae_u8 *)a; + + return (b[0] << 8) | b[1]; +} + + +static inline void do_put_mem_long(void *a, uae_u32 v) +{ + uae_u8 *b = (uae_u8 *)a; + + b[0] = v >> 24; + b[1] = v >> 16; + b[2] = v >> 8; + b[3] = v; +} + +static inline void do_put_mem_word(void *a, uae_u16 v) +{ + uae_u8 *b = (uae_u8 *)a; + + b[0] = v >> 8; + b[1] = v; +} + + +#endif /* CPU_CAN_ACCESS_UNALIGNED */ + + +/* These are same for all architectures: */ + +static inline uae_u8 do_get_mem_byte(uae_u8 *a) +{ + return *a; +} + +static inline void do_put_mem_byte(uae_u8 *a, uae_u8 v) +{ + *a = v; +} +#endif #endif // __MEMORY_H__