mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-25 07:10:00 -06:00

* Introduce firmware-related structs * Fix some indents * Move the generated firmware identifier to a constant * Document the WifiAccessPoint constructors * Add some constants * Remove a stray comment * Implement Firmware::UserData * Add Firmware::Mask * Document Firmware::Buffer * Add a Firmware constructor that uses a FileHandle * Set the default username in UserData * Update the UserData checksum * Forgot to include Platform.h * Remove some redundant assignments in the default Firmware constructor * const-ify CRC16 * Replace the plain Firmware buffer with a Firmware object - Remove some functions that were reimplemented in the Firmware constructors * Fix some crashes due to undefined behavior * Fix the user data initialization - Initialize both user data objects to default - Set both user data objects to the same touch screen calibration * Follow the DS logic in determining which user data section is current * Remove an unneeded include * Remove another unneeded include * Initialize FirmwareMask in Firmware::Firmware * Use the DEFAULT_SSID constant * Add SPI_Firmware::InstallFirmware and SPI_Firmware::RemoveFirmware * Move a logging call to after the file is written * Add a SaveManager for the firmware * Touch up the SPI_Firmware::Firmware declaration * Move all firmware loading and customization to the frontend * Call Platform::WriteFirmware when it's time to write the firmware back to disk * Fix some missing stuff * Remove the Get* functions from SPI_Firmware in favor of GetFirmware() * Implement SPI_Firmware::DeInit in terms of RemoveFirmware * Add Firmware::UpdateChecksums * Fix an incorrect length * Update all checksums in the firmware after setting touch screen calibration data * Use the Firmware object's Position methods * Remove register fields from the Firmware object * Install the firmware before seeing if direct boot is necessary * Install the firmware before calling NDS::Reset in LoadROM * Slight cleanup in ROMManager * Fix the default access point name * Shorten the various getters in Firmware * Add qualifiers for certain uses of firmware types - GCC can get picky if -fpermissive isn't defined * Add an InstallFirmware overload that takes a unique_ptr * Log when firmware is added or removed * Don't clear the firmware in SPI_Firmware::Init - The original code didn't, it just set the pointer to nullptr * Fix a typo * Write back the full firmware if it's not generated * Move the FreeBIOS to an external file * Load wfcsettings.bin into the correct part of the generated firmware blob * Load BIOS files in the frontend, not in the core * Fix logging the firmware ID * Add some utility functions * Mark Firmware's constructors as explicit * Remove obsolete ConfigEntry values * Include <locale> explicitly in ROMManager * Fix up some includes * Add Firmware::IsBootable() * Add a newline to a log entry - Whoops * Log the number of bytes written out in SaveManager * Mark FirmwareHeader's constructor as explicit * Clean up GenerateDefaultFirmware and LoadFirmwareFromFile - Now they return a pair instead of two by-ref values * Refactor SaveManager a little bit - Manage its buffers as unique_ptrs to mitigate leaks - Reallocate the internal buffer if SetPath is asked to reload the file (and the new length is different) * Remove some stray parens * Fix some firmware-related bugs I introduced - Firmware settings are now properly saved to disk (beforehand I misunderstood when the firmware blob was written) - Firmware is no longer overwritten by contents of wfcsettings.bin * Slight cleanup
117 lines
2.7 KiB
C++
117 lines
2.7 KiB
C++
/*
|
|
Copyright 2016-2022 melonDS team
|
|
|
|
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/.
|
|
*/
|
|
|
|
#ifndef DSI_H
|
|
#define DSI_H
|
|
|
|
#include "NDS.h"
|
|
#include "DSi_SD.h"
|
|
|
|
namespace DSi
|
|
{
|
|
|
|
extern u16 SCFG_BIOS;
|
|
extern u16 SCFG_Clock9;
|
|
extern u32 SCFG_EXT[2];
|
|
|
|
|
|
extern u8 ARM9iBIOS[0x10000];
|
|
extern u8 ARM7iBIOS[0x10000];
|
|
|
|
extern u8 eMMC_CID[16];
|
|
extern u64 ConsoleID;
|
|
|
|
extern DSi_SDHost* SDMMC;
|
|
extern DSi_SDHost* SDIO;
|
|
|
|
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];
|
|
|
|
bool Init();
|
|
void DeInit();
|
|
void Reset();
|
|
void Stop();
|
|
|
|
void DoSavestate(Savestate* file);
|
|
|
|
void SetCartInserted(bool inserted);
|
|
|
|
void SetupDirectBoot();
|
|
void SoftReset();
|
|
|
|
bool LoadNAND();
|
|
|
|
void RunNDMAs(u32 cpu);
|
|
void StallNDMAs();
|
|
bool NDMAsInMode(u32 cpu, u32 mode);
|
|
bool NDMAsRunning(u32 cpu);
|
|
void CheckNDMAs(u32 cpu, u32 mode);
|
|
void StopNDMAs(u32 cpu, u32 mode);
|
|
|
|
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);
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
#endif // DSI_H
|