aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/NDS.cpp14
-rw-r--r--src/NDS.h1
-rw-r--r--src/NDSCart.cpp13
-rw-r--r--src/NDSCart.h2
-rw-r--r--src/wx/main.cpp9
5 files changed, 24 insertions, 15 deletions
diff --git a/src/NDS.cpp b/src/NDS.cpp
index 574f557..52a1de0 100644
--- a/src/NDS.cpp
+++ b/src/NDS.cpp
@@ -135,7 +135,6 @@ bool Init()
if (!SPI::Init()) return false;
if (!RTC::Init()) return false;
- Reset();
return true;
}
@@ -307,13 +306,14 @@ void Reset()
KeyInput = 0x007F03FF;
_soundbias = 0;
+}
+
+void LoadROM(const char* path, bool direct)
+{
+ Reset();
- // test
- //LoadROM();
- //LoadFirmware();
- // a_interp2.nds a_rounding (10) (11) a_slope (5)
- if (NDSCart::LoadROM("rom/nsmb.nds"))
- Running = true; // hax
+ if (NDSCart::LoadROM(path, direct))
+ Running = true;
}
diff --git a/src/NDS.h b/src/NDS.h
index ed706af..976bd26 100644
--- a/src/NDS.h
+++ b/src/NDS.h
@@ -116,6 +116,7 @@ bool Init();
void DeInit();
void Reset();
+void LoadROM(const char* path, bool direct);
void SetupDirectBoot();
void RunFrame();
diff --git a/src/NDSCart.cpp b/src/NDSCart.cpp
index 416da26..16e8435 100644
--- a/src/NDSCart.cpp
+++ b/src/NDSCart.cpp
@@ -601,7 +601,7 @@ void Reset()
}
-bool LoadROM(char* path)
+bool LoadROM(const char* path, bool direct)
{
// TODO: streaming mode? for really big ROMs or systems with limited RAM
// for now we're lazy
@@ -632,10 +632,11 @@ bool LoadROM(char* path)
fclose(f);
//CartROM = f;
- // temp. TODO: later make this user selectable
- // calling this sets up shit for booting from the cart directly.
- // normal behavior is booting from the BIOS.
- NDS::SetupDirectBoot();
+ if (direct)
+ {
+ NDS::SetupDirectBoot();
+ CmdEncMode = 2;
+ }
CartInserted = true;
@@ -650,7 +651,7 @@ bool LoadROM(char* path)
if (arm9base >= 0x4000)
{
// reencrypt secure area if needed
- if (*(u32*)&CartROM[arm9base] == 0xE7FFDEFF)
+ if (*(u32*)&CartROM[arm9base] == 0xE7FFDEFF && *(u32*)&CartROM[arm9base+0x10] != 0xE7FFDEFF)
{
printf("Re-encrypting cart secure area\n");
diff --git a/src/NDSCart.h b/src/NDSCart.h
index 61dd11a..5125ffa 100644
--- a/src/NDSCart.h
+++ b/src/NDSCart.h
@@ -40,7 +40,7 @@ bool Init();
void DeInit();
void Reset();
-bool LoadROM(char* path);
+bool LoadROM(const char* path, bool direct);
void WriteROMCnt(u32 val);
u32 ReadROMData();
diff --git a/src/wx/main.cpp b/src/wx/main.cpp
index b31af1d..987491b 100644
--- a/src/wx/main.cpp
+++ b/src/wx/main.cpp
@@ -86,11 +86,18 @@ MainFrame::MainFrame()
sdlrend = SDL_CreateRenderer(sdlwin, -1, SDL_RENDERER_ACCELERATED); // SDL_RENDERER_PRESENTVSYNC
sdltex = SDL_CreateTexture(sdlrend, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_STREAMING, 256, 384);
+
+ NDS::Init();
}
void MainFrame::OnOpenROM(wxCommandEvent& event)
{
- NDS::Init();
+ wxFileDialog opener(this, _("Open ROM"), "", "", "DS ROM (*.nds)|*.nds;*.srl|Any file|*.*", wxFD_OPEN|wxFD_FILE_MUST_EXIST);
+ if (opener.ShowModal() == wxID_CANCEL)
+ return;
+
+ wxString filename = opener.GetPath();
+ NDS::LoadROM(filename.mb_str(), true);
emuthread->EmuStatus = 1;
emumutex->Lock();