mirror of https://github.com/mgba-emu/mgba.git
3DS: Clean up legacy initialization (fixes #1768)
This commit is contained in:
parent
774aca8462
commit
48006dd83e
1
CHANGES
1
CHANGES
|
@ -22,6 +22,7 @@ Other fixes:
|
||||||
- GBA: Reject incorrectly sized BIOSes
|
- GBA: Reject incorrectly sized BIOSes
|
||||||
- Qt: Fix OpenGL 2.1 support (fixes mgba.io/i/1678)
|
- Qt: Fix OpenGL 2.1 support (fixes mgba.io/i/1678)
|
||||||
Misc:
|
Misc:
|
||||||
|
- 3DS: Clean up legacy initialization (fixes mgba.io/i/1768)
|
||||||
- GBA Serialize: Only flunk BIOS check if official BIOS was expected
|
- GBA Serialize: Only flunk BIOS check if official BIOS was expected
|
||||||
- Qt: Disable Replace ROM option when no game loaded
|
- Qt: Disable Replace ROM option when no game loaded
|
||||||
- Qt: Defer texture updates until frame is drawn (fixes mgba.io/i/1590)
|
- Qt: Defer texture updates until frame is drawn (fixes mgba.io/i/1590)
|
||||||
|
|
|
@ -1,92 +1,31 @@
|
||||||
/* This code is mostly from ctrulib, which contains the following license:
|
/* Copyright (c) 2013-2020 Jeffrey Pfau
|
||||||
|
*
|
||||||
This software is provided 'as-is', without any express or implied
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
warranty. In no event will the authors be held liable for any damages
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
arising from the use of this software.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
* The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software in
|
|
||||||
a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
|
|
||||||
* Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original software.
|
|
||||||
|
|
||||||
* This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <3ds/archive.h>
|
#include <3ds/archive.h>
|
||||||
#include <3ds/types.h>
|
|
||||||
#include <3ds/srv.h>
|
|
||||||
#include <3ds/gfx.h>
|
|
||||||
#include <3ds/services/apt.h>
|
|
||||||
#include <3ds/services/fs.h>
|
|
||||||
#include <3ds/services/hid.h>
|
|
||||||
#include <3ds/svc.h>
|
|
||||||
|
|
||||||
#include <mgba-util/common.h>
|
#include <mgba-util/common.h>
|
||||||
|
|
||||||
extern char* fake_heap_start;
|
u32 __ctru_heap_size = 0x02400000;
|
||||||
extern char* fake_heap_end;
|
u32 __ctru_linear_heap_size = 0x01400000;
|
||||||
extern u32 __ctru_linear_heap;
|
|
||||||
extern u32 __ctru_heap;
|
|
||||||
extern u32 __ctru_heap_size;
|
|
||||||
extern u32 __ctru_linear_heap_size;
|
|
||||||
static u32 __custom_heap_size = 0x02400000;
|
|
||||||
static u32 __custom_linear_heap_size = 0x01400000;
|
|
||||||
|
|
||||||
uint32_t* romBuffer = NULL;
|
uint32_t* romBuffer = NULL;
|
||||||
size_t romBufferSize;
|
size_t romBufferSize;
|
||||||
|
|
||||||
FS_Archive sdmcArchive;
|
FS_Archive sdmcArchive;
|
||||||
|
|
||||||
bool allocateRomBuffer(void) {
|
__attribute__((constructor)) static void init(void) {
|
||||||
if (romBuffer) {
|
FSUSER_OpenArchive(&sdmcArchive, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, ""));
|
||||||
return true;
|
|
||||||
}
|
|
||||||
romBuffer = malloc(0x02000000);
|
romBuffer = malloc(0x02000000);
|
||||||
if (romBuffer) {
|
if (romBuffer) {
|
||||||
romBufferSize = 0x02000000;
|
romBufferSize = 0x02000000;
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
romBuffer = malloc(0x01000000);
|
romBuffer = malloc(0x01000000);
|
||||||
if (romBuffer) {
|
if (romBuffer) {
|
||||||
romBufferSize = 0x01000000;
|
romBufferSize = 0x01000000;
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __system_allocateHeaps() {
|
|
||||||
u32 tmp=0;
|
|
||||||
|
|
||||||
__ctru_heap_size = __custom_heap_size;
|
|
||||||
__ctru_linear_heap_size = __custom_linear_heap_size;
|
|
||||||
|
|
||||||
// Allocate the application heap
|
|
||||||
__ctru_heap = 0x08000000;
|
|
||||||
svcControlMemory(&tmp, __ctru_heap, 0x0, __ctru_heap_size, MEMOP_ALLOC, MEMPERM_READ | MEMPERM_WRITE);
|
|
||||||
|
|
||||||
// Allocate the linear heap
|
|
||||||
svcControlMemory(&__ctru_linear_heap, 0x0, 0x0, __ctru_linear_heap_size, MEMOP_ALLOC_LINEAR, MEMPERM_READ | MEMPERM_WRITE);
|
|
||||||
// Set up newlib heap
|
|
||||||
fake_heap_start = (char*)__ctru_heap;
|
|
||||||
fake_heap_end = fake_heap_start + __ctru_heap_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __appInit(void) {
|
|
||||||
// Initialize services
|
|
||||||
srvInit();
|
|
||||||
aptInit();
|
|
||||||
hidInit();
|
|
||||||
|
|
||||||
fsInit();
|
|
||||||
archiveMountSdmc();
|
|
||||||
|
|
||||||
FSUSER_OpenArchive(&sdmcArchive, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, ""));
|
|
||||||
allocateRomBuffer();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,8 +109,6 @@ static bool sgbCrop = false;
|
||||||
static aptHookCookie cookie;
|
static aptHookCookie cookie;
|
||||||
static bool core2;
|
static bool core2;
|
||||||
|
|
||||||
extern bool allocateRomBuffer(void);
|
|
||||||
|
|
||||||
static bool _initGpu(void) {
|
static bool _initGpu(void) {
|
||||||
if (!C3D_Init(C3D_DEFAULT_CMDBUF_SIZE)) {
|
if (!C3D_Init(C3D_DEFAULT_CMDBUF_SIZE)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -809,10 +807,6 @@ int main() {
|
||||||
camera.bufferSize = 0;
|
camera.bufferSize = 0;
|
||||||
camera.cam = SELECT_IN1;
|
camera.cam = SELECT_IN1;
|
||||||
|
|
||||||
if (!allocateRomBuffer()) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
aptHook(&cookie, _aptHook, 0);
|
aptHook(&cookie, _aptHook, 0);
|
||||||
|
|
||||||
ptmuInit();
|
ptmuInit();
|
||||||
|
|
|
@ -50,9 +50,6 @@ struct PerfOpts {
|
||||||
bool server;
|
bool server;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _3DS
|
|
||||||
extern bool allocateRomBuffer(void);
|
|
||||||
#endif
|
|
||||||
#ifdef __SWITCH__
|
#ifdef __SWITCH__
|
||||||
TimeType __nx_time_type = TimeType_LocalSystemClock;
|
TimeType __nx_time_type = TimeType_LocalSystemClock;
|
||||||
#endif
|
#endif
|
||||||
|
@ -76,9 +73,6 @@ int main(int argc, char** argv) {
|
||||||
gfxInitDefault();
|
gfxInitDefault();
|
||||||
osSetSpeedupEnable(true);
|
osSetSpeedupEnable(true);
|
||||||
consoleInit(GFX_BOTTOM, NULL);
|
consoleInit(GFX_BOTTOM, NULL);
|
||||||
if (!allocateRomBuffer()) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#elif defined(__SWITCH__)
|
#elif defined(__SWITCH__)
|
||||||
UNUSED(_mPerfShutdown);
|
UNUSED(_mPerfShutdown);
|
||||||
consoleInit(NULL);
|
consoleInit(NULL);
|
||||||
|
|
Loading…
Reference in New Issue