From fb908b939523395fd863e72453b3c8da84d8a74b Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 26 Aug 2014 18:24:40 -0400 Subject: srv::Initialize: Return "success" status code. --- src/core/hle/service/srv.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/core/hle/service/srv.cpp b/src/core/hle/service/srv.cpp index 8f8413d0..23be3cf2 100644 --- a/src/core/hle/service/srv.cpp +++ b/src/core/hle/service/srv.cpp @@ -16,6 +16,10 @@ Handle g_event_handle = 0; void Initialize(Service::Interface* self) { DEBUG_LOG(OSHLE, "called"); + + u32* cmd_buff = Service::GetCommandBuffer(); + + cmd_buff[1] = 0; // No error } void GetProcSemaphore(Service::Interface* self) { -- cgit v1.2.3 From 304999dfebea595ea4a21082ed2ef9ea3f3d907f Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 26 Aug 2014 23:58:03 -0400 Subject: Threading: Fix thread starting to execute first instruction correctly. --- src/core/arm/interpreter/arm_interpreter.cpp | 2 +- src/core/hle/kernel/thread.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/core/arm/interpreter/arm_interpreter.cpp b/src/core/arm/interpreter/arm_interpreter.cpp index d35a3ae1..0842d2f8 100644 --- a/src/core/arm/interpreter/arm_interpreter.cpp +++ b/src/core/arm/interpreter/arm_interpreter.cpp @@ -27,7 +27,7 @@ ARM_Interpreter::ARM_Interpreter() { // Reset the core to initial state ARMul_CoProInit(state); ARMul_Reset(state); - state->NextInstr = RESUME; + state->NextInstr = RESUME; // NOTE: This will be overwritten by LoadContext state->Emulate = 3; state->pc = state->Reg[15] = 0x00000000; diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 554ec975..8bd9ca1a 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -117,6 +117,11 @@ void ResetThread(Thread* t, u32 arg, s32 lowest_priority) { t->context.sp = t->stack_top; t->context.cpsr = 0x1F; // Usermode + // TODO(bunnei): This instructs the CPU core to start the execution as if it is "resuming" a + // thread. This is somewhat Sky-Eye specific, and should be re-architected in the future to be + // agnostic of the CPU core. + t->context.mode = 8; + if (t->current_priority < lowest_priority) { t->current_priority = t->initial_priority; } -- cgit v1.2.3 From 6966fdf02578750f31098f23f1f14ebb4f642e2a Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 27 Aug 2014 00:04:26 -0400 Subject: Loader: Added support for loading raw BIN executables. - Useful for debugging homebrew Qt: Updated GUI to support loading .bin files. --- src/citra_qt/main.cpp | 2 +- src/core/loader/loader.cpp | 20 ++++++++++++++++++++ src/core/loader/loader.h | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index a6b87f78..1bf9bc53 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -150,7 +150,7 @@ void GMainWindow::BootGame(std::string filename) void GMainWindow::OnMenuLoadFile() { - QString filename = QFileDialog::getOpenFileName(this, tr("Load file"), QString(), tr("3DS executable (*.elf *.axf *.cci *.cxi)")); + QString filename = QFileDialog::getOpenFileName(this, tr("Load file"), QString(), tr("3DS executable (*.elf *.axf *.bin *.cci *.cxi)")); if (filename.size()) BootGame(filename.toLatin1().data()); } diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 2b42e3c6..365f5a27 100644 --- a/src/core/loader/loader.cpp +++ b/src/core/loader/loader.cpp @@ -9,6 +9,7 @@ #include "core/loader/elf.h" #include "core/loader/ncch.h" #include "core/hle/kernel/archive.h" +#include "core/mem_map.h" //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -39,6 +40,9 @@ FileType IdentifyFile(const std::string &filename) { else if (!strcasecmp(extension.c_str(), ".cci")) { return FileType::CCI; // TODO(bunnei): Do some filetype checking :p } + else if (!strcasecmp(extension.c_str(), ".bin")) { + return FileType::BIN; // TODO(bunnei): Do some filetype checking :p + } return FileType::Unknown; } @@ -69,6 +73,22 @@ ResultStatus LoadFile(const std::string& filename) { break; } + // Raw BIN file format... + case FileType::BIN: + { + INFO_LOG(LOADER, "Loading BIN file %s...", filename.c_str()); + + File::IOFile file(filename, "rb"); + + if (file.IsOpen()) { + file.ReadBytes(Memory::GetPointer(Memory::EXEFS_CODE_VADDR), (size_t)file.GetSize()); + Kernel::LoadExec(Memory::EXEFS_CODE_VADDR); + } else { + return ResultStatus::Error; + } + return ResultStatus::Success; + } + // Error occurred durring IdentifyFile... case FileType::Error: diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index 4ba10de5..68f84300 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -21,6 +21,7 @@ enum class FileType { CXI, CIA, ELF, + BIN, }; /// Return type for functions in Loader namespace -- cgit v1.2.3