|
|
1.1 ! root 1: #ifndef _M68K_H ! 2: #define _M68K_H ! 3: ! 4: typedef unsigned int u32; ! 5: typedef unsigned short u16; ! 6: typedef unsigned char u8; ! 7: typedef signed int s32; ! 8: typedef signed short s16; ! 9: typedef signed char s8; ! 10: ! 11: typedef void (*HOSTCALL) (); ! 12: ! 13: extern char *STRam; ! 14: ! 15: extern int Init680x0 (); ! 16: extern void Start680x0 (); ! 17: extern void FlagException (int num); ! 18: extern int GetReg (int reg); ! 19: extern void SetReg (int reg, int val); ! 20: extern void DumpRegs (); ! 21: extern unsigned int exception_handlers[32]; ! 22: ! 23: #define STMemory_ReadByte MemReadByte ! 24: #define STMemory_ReadWord MemReadWord ! 25: #define STMemory_ReadLong MemReadLong ! 26: #define STMemory_WriteByte MemWriteByte ! 27: #define STMemory_WriteWord MemWriteWord ! 28: #define STMemory_WriteLong MemWriteLong ! 29: ! 30: #define STRAM_ADDR(Var) ((u32)STRam+((u32)Var&0x00ffffff)) ! 31: ! 32: extern char MemReadByte (unsigned int pos); ! 33: extern short MemReadWord (unsigned int pos); ! 34: extern int MemReadLong (unsigned int pos); ! 35: extern void MemWriteByte (unsigned int pos, int val); ! 36: extern void MemWriteWord (unsigned int pos, int val); ! 37: extern void MemWriteLong (unsigned int pos, int val); ! 38: ! 39: static inline u32 do_get_mem_long(u32 *a) ! 40: { ! 41: #ifdef __i386__ ! 42: u32 val = *a; ! 43: __asm__ ("bswap %0\n":"=r"(val):"0"(val)); ! 44: return val; ! 45: #elif LITTLE_ENDIAN ! 46: u8 *b = (u8 *)a; ! 47: return (*b << 24) | (*(b+1) << 16) | (*(b+2) << 8) | (*(b+3)); ! 48: #else ! 49: return *a; ! 50: #endif ! 51: } ! 52: ! 53: static inline u16 do_get_mem_word(u16 *a) ! 54: { ! 55: #ifdef __i386__ ! 56: u16 val = *a; ! 57: __asm__ ("xchgb %b0,%h0" : "=q" (val) : "0" (val)); ! 58: return val; ! 59: #elif LITTLE_ENDIAN ! 60: u8 *b = (u8 *)a; ! 61: return (*b << 8) | (*(b+1)); ! 62: #else ! 63: return *a; ! 64: #endif ! 65: } ! 66: ! 67: static inline u8 do_get_mem_byte(u8 *a) ! 68: { ! 69: return *a; ! 70: } ! 71: ! 72: static inline void do_put_mem_long(u32 *a, u32 v) ! 73: { ! 74: #ifdef __i386__ ! 75: __asm__ ("bswap %0\n":"=r"(v):"0"(v)); ! 76: *a = v; ! 77: #elif LITTLE_ENDIAN ! 78: u8 *b = (u8 *)a; ! 79: ! 80: *b = v >> 24; ! 81: *(b+1) = v >> 16; ! 82: *(b+2) = v >> 8; ! 83: *(b+3) = v; ! 84: #else ! 85: *a = v; ! 86: #endif ! 87: } ! 88: ! 89: static inline void do_put_mem_word(u16 *a, u16 v) ! 90: { ! 91: #ifdef __i386__ ! 92: __asm__ ("xchgb %b0,%h0" : "=q" (v) : "0" (v)); ! 93: *a = v; ! 94: #elif LITTLE_ENDIAN ! 95: u8 *b = (u8 *)a; ! 96: ! 97: *b = v >> 8; ! 98: *(b+1) = v; ! 99: #else ! 100: *a = v; ! 101: #endif ! 102: } ! 103: ! 104: static inline void do_put_mem_byte(u8 *a, u8 v) ! 105: { ! 106: *a = v; ! 107: } ! 108: ! 109: #endif /* _M68K_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.