|
|
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.