mem.h
1 /* 2 * Read/Write memory macros - little endian 3 */ 4 #ifdef BYTES_SWAP 5 #define ReadB(address) *(uint8*)((uint32)(address)^1) 6 #define WriteB(address,value) *(uint8*)((uint32)(address)^1)=value 7 #define ReadW(addr) *(uint16*)(addr) 8 #define WriteW(addr,value) *(uint16*)(addr)=value 9 #define ReadL(address) ((*(uint16*)(address))<<16)|(*(uint16*)(address+2)) 10 #define WriteL(address,value) WriteW(address + 2, value); WriteW(address, value>> 16) 11 #define ReadSL(addr) (*(uint16*)(addr))|((*(uint16*)(addr+2))<<16) 12 #else 13 #define ReadB(address) *((int8 *) (address)) 14 #define WriteB(address,value) *((int8 *) (address)) = (value) 15 //#define ReadW(addr) ((*(uint16 *)(addr) << 8) | (*(uint16 *)(addr) >> 8)) 16 //#define WriteW(addr,value) *((int16 *)(addr)) = ((((uint16)(value)) << 8) | (((uint16)(value)) >> 8)) 17 #define ReadW(addr) *(uint16*)(addr) 18 #define WriteW(addr,value) *(uint16*)(addr)=value 19 //#define ReadL(address) ((uint16) ReadW(address) << 16) | (uint16) ReadW((address) + 2) 20 //#define WriteL(address,value) WriteW((address) + 2, value); WriteW(address, (value) >> 16) 21 #define ReadL(addr) *(uint32*)(addr) 22 #define WriteL(addr,value) *(uint32*)(addr)=value 23 //#define ReadSL(addr) ((uint16)ReadW(addr))|((((uint16)ReadW(addr+2)))<<16) 24 #define ReadSL(addr) ((uint16)ReadW(addr+2))|((((uint16)ReadW(addr)))<<16) 25 #endif 26 27 int MemInit(void); 28 void MemQuit(void); 29 void MemClean(void); 30 void MemReInit(void); 31 32 extern unsigned short int TosVersion; 33 extern short TosCountry; 34 void TOS_FixRom(uint8 *TosAddress);