diff options
author | bunnei <bunneidev@gmail.com> | 2014-08-29 00:07:45 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2014-08-29 00:07:45 +0200 |
commit | 06864c93fdf41ed383aadc3a76c40cb4725051b0 (patch) | |
tree | 5b2f042cae820f5b8ad622731bc378247fac7788 | |
parent | Merge pull request #81 from yuriks/downgrade-shader (diff) | |
parent | Loader: Added support for loading raw BIN executables. (diff) | |
download | yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.tar yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.tar.gz yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.tar.bz2 yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.tar.lz yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.tar.xz yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.tar.zst yuzu-06864c93fdf41ed383aadc3a76c40cb4725051b0.zip |
-rw-r--r-- | src/citra_qt/main.cpp | 2 | ||||
-rw-r--r-- | src/core/arm/interpreter/arm_interpreter.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/kernel/thread.cpp | 5 | ||||
-rw-r--r-- | src/core/hle/service/srv.cpp | 4 | ||||
-rw-r--r-- | src/core/loader/loader.cpp | 20 | ||||
-rw-r--r-- | src/core/loader/loader.h | 1 |
6 files changed, 32 insertions, 2 deletions
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index a6b87f781..1bf9bc53c 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/arm/interpreter/arm_interpreter.cpp b/src/core/arm/interpreter/arm_interpreter.cpp index d35a3ae17..0842d2f8e 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 554ec9756..8bd9ca1a1 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; } diff --git a/src/core/hle/service/srv.cpp b/src/core/hle/service/srv.cpp index 8f8413d02..23be3cf2c 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) { diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 2b42e3c64..365f5a277 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 4ba10de52..68f843005 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 |