--- hatari/src/includes/stMemory.h 2019/04/01 07:13:06 1.1.1.6 +++ hatari/src/includes/stMemory.h 2019/04/09 08:47:16 1.1.1.9 @@ -8,18 +8,30 @@ #ifndef HATARI_STMEMORY_H #define HATARI_STMEMORY_H +#include "main.h" #include "sysdeps.h" #include "maccess.h" -#include "main.h" - +#if ENABLE_SMALL_MEM +extern Uint8 *STRam; +extern uae_u8 *ROMmemory; +# define RomMem (ROMmemory-0xe00000) +#else extern Uint8 STRam[16*1024*1024]; -extern Uint32 STRamEnd; +#define RomMem STRam +#endif /* ENABLE_SMALL_MEM */ +extern Uint32 STRamEnd; /* Offset ST address to PC pointer: */ -#define STRAM_ADDR(Var) ((unsigned long)STRam+((Uint32)(Var) & 0x00ffffff)) - +#if ENABLE_SMALL_MEM +# define STRAM_ADDR(Var) \ + (((Var)>= 0xe00000) \ + ? ((unsigned long)RomMem+((Uint32)(Var) & 0x00ffffff)) \ + : ((unsigned long)STRam+((Uint32)(Var) & 0x00ffffff))) +#else +# define STRAM_ADDR(Var) ((unsigned long)STRam+((Uint32)(Var) & 0x00ffffff)) +#endif /*-----------------------------------------------------------------------*/ /* @@ -29,7 +41,14 @@ extern Uint32 STRamEnd; static inline void STMemory_WriteLong(Uint32 Address, Uint32 Var) { Address &= 0xffffff; +#if ENABLE_SMALL_MEM + if (Address >= 0xe00000) + do_put_mem_long(&ROMmemory[Address-0xe00000], Var); + else + do_put_mem_long(&STRam[Address], Var); +#else do_put_mem_long(&STRam[Address], Var); +#endif } /*-----------------------------------------------------------------------*/ @@ -40,7 +59,14 @@ static inline void STMemory_WriteLong(Ui static inline void STMemory_WriteWord(Uint32 Address, Uint16 Var) { Address &= 0xffffff; +#if ENABLE_SMALL_MEM + if (Address >= 0xe00000) + do_put_mem_word(&ROMmemory[Address-0xe00000], Var); + else + do_put_mem_word(&STRam[Address], Var); +#else do_put_mem_word(&STRam[Address], Var); +#endif } /*-----------------------------------------------------------------------*/ @@ -50,7 +76,14 @@ static inline void STMemory_WriteWord(Ui static inline void STMemory_WriteByte(Uint32 Address, Uint8 Var) { Address &= 0xffffff; +#if ENABLE_SMALL_MEM + if (Address >= 0xe00000) + ROMmemory[Address-0xe00000] = Var; + else + STRam[Address] = Var; +#else STRam[Address] = Var; +#endif } @@ -62,7 +95,14 @@ static inline void STMemory_WriteByte(Ui static inline Uint32 STMemory_ReadLong(Uint32 Address) { Address &= 0xffffff; +#if ENABLE_SMALL_MEM + if (Address >= 0xe00000) + return do_get_mem_long(&ROMmemory[Address-0xe00000]); + else + return do_get_mem_long(&STRam[Address]); +#else return do_get_mem_long(&STRam[Address]); +#endif } /*-----------------------------------------------------------------------*/ @@ -73,7 +113,14 @@ static inline Uint32 STMemory_ReadLong(U static inline Uint16 STMemory_ReadWord(Uint32 Address) { Address &= 0xffffff; +#if ENABLE_SMALL_MEM + if (Address >= 0xe00000) + return do_get_mem_word(&ROMmemory[Address-0xe00000]); + else + return do_get_mem_word(&STRam[Address]); +#else return do_get_mem_word(&STRam[Address]); +#endif } /*-----------------------------------------------------------------------*/ @@ -83,7 +130,14 @@ static inline Uint16 STMemory_ReadWord(U static inline Uint8 STMemory_ReadByte(Uint32 Address) { Address &= 0xffffff; +#if ENABLE_SMALL_MEM + if (Address >= 0xe00000) + return ROMmemory[Address-0xe00000]; + else + return STRam[Address]; +#else return STRam[Address]; +#endif }