From f5d38d1dbba301b9c67da43b4b9817c7f5ebb936 Mon Sep 17 00:00:00 2001 From: VoxelTek <53562267+VoxelTek@users.noreply.github.com> Date: Thu, 7 Aug 2025 22:45:12 +1000 Subject: [PATCH] Generate `iso`, and hey it actually kinda runs! Kinda starts running, but seems to "boot-loop", which is annoying. Also, `isle.ini` is empty, for some reason. --- CMakeLists.txt | 12 ++++++++++++ ISLE/isleapp.cpp | 6 ++++++ ISLE/xbox/dbg.c | 7 +++++++ ISLE/xbox/dbg.h | 14 ++++++++++++++ PostbuildAction.cmake | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 ISLE/xbox/dbg.c create mode 100644 ISLE/xbox/dbg.h create mode 100644 PostbuildAction.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ed9e52e..4bd37c9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -509,6 +509,9 @@ if (NXDK) target_sources(lego1 PRIVATE ISLE/xbox/atof.c ) + target_sources(lego1 PRIVATE + ISLE/xbox/dbg.c + ) endif() if (ISLE_BUILD_APP) @@ -595,6 +598,9 @@ if (ISLE_BUILD_APP) target_sources(isle PRIVATE ISLE/xbox/atof.c ) + target_sources(isle PRIVATE + ISLE/xbox/dbg.c + ) endif() if(Python3_FOUND) if(NOT DEFINED PYTHON_PIL_AVAILABLE) @@ -839,6 +845,12 @@ if(NINTENDO_3DS) endif() install(FILES "$/isle.3dsx" DESTINATION "${CMAKE_INSTALL_BINDIR}") endif() +if (NXDK) + include("${CMAKE_SOURCE_DIR}/PostbuildAction.cmake") + set(XBE_TITLE isle) + set(XBOX_ISO_DIR ${CMAKE_CURRENT_BINARY_DIR}/xiso) + add_xbox_build_steps(isle ${XBE_TITLE} ${XBOX_ISO_DIR}) +endif() if(WINDOWS_STORE) install( DIRECTORY diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index 96c20415..b2fbc5f0 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -72,6 +72,10 @@ #include "ios/config.h" #endif +#ifdef NXDK +#include "xbox/dbg.h" +#endif + DECOMP_SIZE_ASSERT(IsleApp, 0x8c) // GLOBAL: ISLE 0x410030 @@ -300,6 +304,8 @@ void IsleApp::SetupVideoFlags( SDL_AppResult SDL_AppInit(void** appstate, int argc, char** argv) { + SDL_SetLogOutputFunction(my_output, NULL); + *appstate = NULL; SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "0"); diff --git a/ISLE/xbox/dbg.c b/ISLE/xbox/dbg.c new file mode 100644 index 00000000..511b541d --- /dev/null +++ b/ISLE/xbox/dbg.c @@ -0,0 +1,7 @@ +#include +#include + + +void my_output(void *userdata, int category, SDL_LogPriority priority, const char *message) { + DbgPrint("%s", message); +} diff --git a/ISLE/xbox/dbg.h b/ISLE/xbox/dbg.h new file mode 100644 index 00000000..561e17d9 --- /dev/null +++ b/ISLE/xbox/dbg.h @@ -0,0 +1,14 @@ +// atof.h +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + + +void my_output(void *userdata, int category, SDL_LogPriority priority, const char *message); + + +#ifdef __cplusplus +} +#endif diff --git a/PostbuildAction.cmake b/PostbuildAction.cmake new file mode 100644 index 00000000..39496c98 --- /dev/null +++ b/PostbuildAction.cmake @@ -0,0 +1,35 @@ +function(add_xbox_build_steps TARGET_NAME XBE_TITLE XBOX_ISO_DIR) + # Ensure ISO output directory exists + file(MAKE_DIRECTORY ${XBOX_ISO_DIR}) + + # Convert EXE to XBE + add_custom_target(${TARGET_NAME}_cxbe_convert ALL + COMMENT "CXBE Conversion: [EXE -> XBE]" + VERBATIM + COMMAND "${CMAKE_COMMAND}" -E env + ${NXDK_DIR}/tools/cxbe/cxbe + -OUT:${CMAKE_CURRENT_BINARY_DIR}/default.xbe + -TITLE:${XBE_TITLE} + ${CMAKE_CURRENT_BINARY_DIR}/${XBE_TITLE}.exe > NUL 2>&1 + ) + add_dependencies(${TARGET_NAME}_cxbe_convert ${TARGET_NAME}) + + # Convert XBE to XISO + add_custom_target(${TARGET_NAME}_xbe_iso ALL + COMMENT "XISO Conversion: [XBE -> XISO]" + COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_CURRENT_BINARY_DIR}/default.xbe" + "${XBOX_ISO_DIR}/default.xbe" + COMMAND "${CMAKE_COMMAND}" -E env + ${NXDK_DIR}/tools/extract-xiso/build/extract-xiso + -c ${XBOX_ISO_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/${XBE_TITLE}.iso + WORKING_DIRECTORY ${XBOX_ISO_DIR} + VERBATIM + ) + add_dependencies(${TARGET_NAME}_xbe_iso ${TARGET_NAME}_cxbe_convert) + + # Silence output + set_target_properties(${TARGET_NAME}_cxbe_convert PROPERTIES OUTPUT_QUIET ON) + set_target_properties(${TARGET_NAME}_xbe_iso PROPERTIES OUTPUT_QUIET ON) +endfunction()