DSi.h 2.53 KB
Newer Older
Arisotura's avatar
blarg    
Arisotura committed
1
/*
2
    Copyright 2016-2020 Arisotura
Arisotura's avatar
blarg    
Arisotura committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

    This file is part of melonDS.

    melonDS is free software: you can redistribute it and/or modify it under
    the terms of the GNU General Public License as published by the Free
    Software Foundation, either version 3 of the License, or (at your option)
    any later version.

    melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with melonDS. If not, see http://www.gnu.org/licenses/.
*/
Arisotura's avatar
Arisotura committed
18
19
20
21

#ifndef DSI_H
#define DSI_H

Arisotura's avatar
Arisotura committed
22
#include "NDS.h"
23
#include "DSi_SD.h"
Arisotura's avatar
Arisotura committed
24
25
26
27

namespace DSi
{

28
29
extern u16 SCFG_BIOS;

30
31
32
extern u8 ARM9iBIOS[0x10000];
extern u8 ARM7iBIOS[0x10000];

Arisotura's avatar
Arisotura committed
33
extern u8 eMMC_CID[16];
Arisotura's avatar
Arisotura committed
34
extern u64 ConsoleID;
Arisotura's avatar
Arisotura committed
35

36
37
38
extern DSi_SDHost* SDMMC;
extern DSi_SDHost* SDIO;

39
40
41
42
43
44
45
46
47
48
49
50
51
const u32 NWRAMSize = 0x40000;

extern u8* NWRAM_A;
extern u8* NWRAM_B;
extern u8* NWRAM_C;

extern u8* NWRAMMap_A[2][4];
extern u8* NWRAMMap_B[3][8];
extern u8* NWRAMMap_C[3][8];

extern u32 NWRAMStart[2][3];
extern u32 NWRAMEnd[2][3];
extern u32 NWRAMMask[2][3];
52

Arisotura's avatar
Arisotura committed
53
54
bool Init();
void DeInit();
55
56
void Reset();

Arisotura's avatar
Arisotura committed
57
58
void SoftReset();

Arisotura's avatar
Arisotura committed
59
bool LoadBIOS();
Arisotura's avatar
Arisotura committed
60
61
bool LoadNAND();

62
63
void RunNDMAs(u32 cpu);
void StallNDMAs();
64
bool NDMAsInMode(u32 cpu, u32 mode);
65
bool NDMAsRunning(u32 cpu);
Arisotura's avatar
Arisotura committed
66
67
void CheckNDMAs(u32 cpu, u32 mode);
void StopNDMAs(u32 cpu, u32 mode);
68

69
70
71
72
73
void MapNWRAM_A(u32 num, u8 val);
void MapNWRAM_B(u32 num, u8 val);
void MapNWRAM_C(u32 num, u8 val);
void MapNWRAMRange(u32 cpu, u32 num, u32 val);

Arisotura's avatar
Arisotura committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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, NDS::MemRegion* region);

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, NDS::MemRegion* region);

u8 ARM9IORead8(u32 addr);
u16 ARM9IORead16(u32 addr);
u32 ARM9IORead32(u32 addr);
void ARM9IOWrite8(u32 addr, u8 val);
void ARM9IOWrite16(u32 addr, u16 val);
void ARM9IOWrite32(u32 addr, u32 val);

u8 ARM7IORead8(u32 addr);
u16 ARM7IORead16(u32 addr);
u32 ARM7IORead32(u32 addr);
void ARM7IOWrite8(u32 addr, u8 val);
void ARM7IOWrite16(u32 addr, u16 val);
void ARM7IOWrite32(u32 addr, u32 val);

Arisotura's avatar
Arisotura committed
106
107
108
}

#endif // DSI_H