fasterer BG/OBJ VRAM reads

This commit is contained in:
Arisotura
2019-06-09 16:06:01 +02:00
parent 10df601023
commit 434a3007e2
3 changed files with 141 additions and 41 deletions

View File

@ -61,6 +61,11 @@ extern u32 VRAMMap_Texture[4];
extern u32 VRAMMap_TexPal[8];
extern u32 VRAMMap_ARM7[2];
extern u8* VRAMPtr_ABG[0x20];
extern u8* VRAMPtr_AOBJ[0x10];
extern u8* VRAMPtr_BBG[0x8];
extern u8* VRAMPtr_BOBJ[0x8];
extern int FrontBuffer;
extern u32* Framebuffer[2][2];
@ -78,6 +83,8 @@ void DoSavestate(Savestate* file);
void SetDisplaySettings(bool accel);
u8* GetUniqueBankPtr(u32 mask, u32 offset);
void MapVRAM_AB(u32 bank, u8 cnt);
void MapVRAM_CD(u32 bank, u8 cnt);
void MapVRAM_E(u32 bank, u8 cnt);
@ -218,7 +225,10 @@ void WriteVRAM_LCDC(u32 addr, T val)
template<typename T>
T ReadVRAM_ABG(u32 addr)
{
u32 ret = 0;
u8* ptr = VRAMPtr_ABG[(addr >> 14) & 0x1F];
if (ptr) return *(T*)&ptr[addr & 0x3FFF];
T ret = 0;
u32 mask = VRAMMap_ABG[(addr >> 14) & 0x1F];
if (mask & (1<<0)) ret |= *(T*)&VRAM_A[addr & 0x1FFFF];
@ -250,7 +260,10 @@ void WriteVRAM_ABG(u32 addr, T val)
template<typename T>
T ReadVRAM_AOBJ(u32 addr)
{
u32 ret = 0;
u8* ptr = VRAMPtr_AOBJ[(addr >> 14) & 0xF];
if (ptr) return *(T*)&ptr[addr & 0x3FFF];
T ret = 0;
u32 mask = VRAMMap_AOBJ[(addr >> 14) & 0xF];
if (mask & (1<<0)) ret |= *(T*)&VRAM_A[addr & 0x1FFFF];
@ -278,7 +291,10 @@ void WriteVRAM_AOBJ(u32 addr, T val)
template<typename T>
T ReadVRAM_BBG(u32 addr)
{
u32 ret = 0;
u8* ptr = VRAMPtr_BBG[(addr >> 14) & 0x7];
if (ptr) return *(T*)&ptr[addr & 0x3FFF];
T ret = 0;
u32 mask = VRAMMap_BBG[(addr >> 14) & 0x7];
if (mask & (1<<2)) ret |= *(T*)&VRAM_C[addr & 0x1FFFF];
@ -302,7 +318,10 @@ void WriteVRAM_BBG(u32 addr, T val)
template<typename T>
T ReadVRAM_BOBJ(u32 addr)
{
u32 ret = 0;
u8* ptr = VRAMPtr_BOBJ[(addr >> 14) & 0x7];
if (ptr) return *(T*)&ptr[addr & 0x3FFF];
T ret = 0;
u32 mask = VRAMMap_BOBJ[(addr >> 14) & 0x7];
if (mask & (1<<3)) ret |= *(T*)&VRAM_D[addr & 0x1FFFF];
@ -324,7 +343,7 @@ void WriteVRAM_BOBJ(u32 addr, T val)
template<typename T>
T ReadVRAM_ARM7(u32 addr)
{
u32 ret = 0;
T ret = 0;
u32 mask = VRAMMap_ARM7[(addr >> 17) & 0x1];
if (mask & (1<<2)) ret |= *(T*)&VRAM_C[addr & 0x1FFFF];
@ -365,7 +384,7 @@ T ReadVRAM_OBJ(u32 addr)
template<typename T>
T ReadVRAM_Texture(u32 addr)
{
u32 ret = 0;
T ret = 0;
u32 mask = VRAMMap_Texture[(addr >> 17) & 0x3];
if (mask & (1<<0)) ret |= *(T*)&VRAM_A[addr & 0x1FFFF];
@ -379,7 +398,7 @@ T ReadVRAM_Texture(u32 addr)
template<typename T>
T ReadVRAM_TexPal(u32 addr)
{
u32 ret = 0;
T ret = 0;
u32 mask = VRAMMap_TexPal[(addr >> 14) & 0x7];
if (mask & (1<<4)) ret |= *(T*)&VRAM_E[addr & 0xFFFF];