move 'FORCEINLINE mmu_gpu_map()' to MMU.h, because gcc does not like it in .cpp
This commit is contained in:
parent
b8aea4ffaa
commit
75e749ecf9
|
@ -289,7 +289,6 @@ u8 vram_lcdc_map[VRAM_LCDC_PAGES];
|
|||
|
||||
//in the range of 0x06000000 - 0x06800000 in 16KB pages (the ARM9 vram mappable area)
|
||||
//this maps to 16KB pages in the LCDC buffer which is what will actually contain the data
|
||||
#define VRAM_ARM9_PAGES 512
|
||||
u8 vram_arm9_map[VRAM_ARM9_PAGES];
|
||||
|
||||
//this chooses which banks are mapped in the 128K banks starting at 0x06000000 in ARM7
|
||||
|
@ -420,29 +419,6 @@ u8 *MMU_RenderMapToLCD(u32 vram_addr)
|
|||
}
|
||||
|
||||
|
||||
FORCEINLINE void* MMU_gpu_map(u32 vram_addr)
|
||||
{
|
||||
//THIS FUNCTION IS NOT AS DANGEROUS!
|
||||
//as an alternative to the above, use this:
|
||||
//it is supposed to map a single gpu vram address to emulator host memory
|
||||
//but it returns a pointer to some zero memory in case of accesses to unmapped memory.
|
||||
//this correctly handles the case with tile accesses to unmapped memory.
|
||||
//it could also potentially go through a different LUT than vram_arm9_map in case we discover
|
||||
//that it needs to be set up with different or no mirroring
|
||||
//(I think it is a reasonable possibility that only the cpu has the nutty mirroring rules)
|
||||
//
|
||||
//if this system isn't used, Fantasy Aquarium displays garbage in the first ingame screen
|
||||
//due to it storing 0x0F0F or somesuch in screen memory which points to a ridiculously big tile
|
||||
//which should contain all 0 pixels
|
||||
|
||||
u32 vram_page = (vram_addr>>14)&(VRAM_ARM9_PAGES-1);
|
||||
u32 ofs = vram_addr & 0x3FFF;
|
||||
vram_page = vram_arm9_map[vram_page];
|
||||
//blank pages are handled by the extra 16KB of blank memory at the end of ARM9_LCD
|
||||
//and the fact that blank pages are mapped to appear at that location
|
||||
return ARM9Mem.ARM9_LCD + (vram_page<<14) + ofs;
|
||||
}
|
||||
|
||||
template<u8 DMA_CHANNEL>
|
||||
void DMAtoVRAMmapping()
|
||||
{
|
||||
|
|
|
@ -181,7 +181,32 @@ extern struct armcpu_memory_iface arm7_base_memory_iface;
|
|||
extern struct armcpu_memory_iface arm9_direct_memory_iface;
|
||||
|
||||
extern u8 *MMU_RenderMapToLCD(u32 vram_addr);
|
||||
extern void* MMU_gpu_map(u32 vram_addr);
|
||||
|
||||
#define VRAM_ARM9_PAGES 512
|
||||
extern u8 vram_arm9_map[VRAM_ARM9_PAGES];
|
||||
FORCEINLINE void* MMU_gpu_map(u32 vram_addr)
|
||||
{
|
||||
//THIS FUNCTION IS NOT AS DANGEROUS!
|
||||
//as an alternative to the above, use this:
|
||||
//it is supposed to map a single gpu vram address to emulator host memory
|
||||
//but it returns a pointer to some zero memory in case of accesses to unmapped memory.
|
||||
//this correctly handles the case with tile accesses to unmapped memory.
|
||||
//it could also potentially go through a different LUT than vram_arm9_map in case we discover
|
||||
//that it needs to be set up with different or no mirroring
|
||||
//(I think it is a reasonable possibility that only the cpu has the nutty mirroring rules)
|
||||
//
|
||||
//if this system isn't used, Fantasy Aquarium displays garbage in the first ingame screen
|
||||
//due to it storing 0x0F0F or somesuch in screen memory which points to a ridiculously big tile
|
||||
//which should contain all 0 pixels
|
||||
|
||||
u32 vram_page = (vram_addr>>14)&(VRAM_ARM9_PAGES-1);
|
||||
u32 ofs = vram_addr & 0x3FFF;
|
||||
vram_page = vram_arm9_map[vram_page];
|
||||
//blank pages are handled by the extra 16KB of blank memory at the end of ARM9_LCD
|
||||
//and the fact that blank pages are mapped to appear at that location
|
||||
return ARM9Mem.ARM9_LCD + (vram_page<<14) + ofs;
|
||||
}
|
||||
|
||||
|
||||
enum MMU_ACCESS_TYPE
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue