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);