Annotation of frontvm/as68k/m68000.h, revision 1.1.1.1

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 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.