start devolving things.

also implement proper DMA timings.

will not build. don't try.
This commit is contained in:
StapleButter
2018-12-08 22:33:41 +01:00
parent 86dae1a25c
commit c6fb152d80
5 changed files with 382 additions and 460 deletions

View File

@ -87,77 +87,15 @@ typedef struct
} Timer;
enum
{
Region9_Void = 0,
Region9_BIOS,
Region9_ICache,
Region9_DCache,
Region9_ITCM,
Region9_DTCM,
Region9_MainRAM,
Region9_SharedWRAM,
Region9_IO,
Region9_Palette,
Region9_VRAM_ABG,
Region9_VRAM_BBG,
Region9_VRAM_AOBJ,
Region9_VRAM_BOBJ,
Region9_VRAM_LCDC,
Region9_OAM,
Region9_GBAROM,
Region9_GBARAM,
Region9_MAX
};
enum
{
Region7_Void = 0,
Region7_BIOS,
Region7_MainRAM,
Region7_SharedWRAM,
Region7_ARM7WRAM,
Region7_IO,
Region7_Wifi0,
Region7_Wifi1,
Region7_VRAM,
Region7_GBAROM,
Region7_GBARAM,
Region7_MAX
};
typedef struct
{
u8 BusType; // 0=32bit 1=16bit 2=8bit/GBARAM 3=ARM9/internal
u8 DelayS; // baseline sequential access delay
u8 DelayN; // baseline nonsequential access delay
u8 _pad;
} RegionTimings;
typedef struct
{
int Region;
u8* Mem;
u32 Mask;
} MemRegion;
extern u8 ARM9MemTimings[Region9_MAX+1][4];
extern u8 ARM7MemTimings[Region7_MAX+1][4];
extern u8 ARM9MemTimings[0x100000][4];
extern u8 ARM7MemTimings[0x20000][4];
// hax
extern u32 IME[2];
@ -185,6 +123,9 @@ void Stop();
bool DoSavestate(Savestate* file);
void SetARM9RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, int seq);
void SetARM7RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, int seq);
bool LoadROM(const char* path, const char* sram, bool direct);
void LoadBIOS();
void SetupDirectBoot();
@ -224,21 +165,21 @@ void StopDMAs(u32 cpu, u32 mode);
void RunTimingCriticalDevices(u32 cpu, s32 cycles);
int ARM9Read8(u32 addr, u32* val);
int ARM9Read16(u32 addr, u32* val);
int ARM9Read32(u32 addr, u32* val);
int ARM9Write8(u32 addr, u8 val);
int ARM9Write16(u32 addr, u16 val);
int ARM9Write32(u32 addr, u32 val);
u8 ARM9Read8(u32 addr);
u16 ARM9Read16(u32 addr);
u32 ARM9Read32(u32 addr);
void ARM9Write8(u32 addr, u8 val);
void ARM9Write16(u32 addr, u16 val);
void ARM9Write32(u32 addr, u32 val);
bool ARM9GetMemRegion(u32 addr, bool write, MemRegion* region);
int ARM7Read8(u32 addr, u32* val);
int ARM7Read16(u32 addr, u32* val);
int ARM7Read32(u32 addr, u32* val);
int ARM7Write8(u32 addr, u8 val);
int ARM7Write16(u32 addr, u16 val);
int ARM7Write32(u32 addr, u32 val);
u8 ARM7Read8(u32 addr);
u16 ARM7Read16(u32 addr);
u32 ARM7Read32(u32 addr);
void ARM7Write8(u32 addr, u8 val);
void ARM7Write16(u32 addr, u16 val);
void ARM7Write32(u32 addr, u32 val);
bool ARM7GetMemRegion(u32 addr, bool write, MemRegion* region);