Files
pico-launcher/common/picoLoader7.h
Gericom f54a379ff2 Further work on support for cheats
Cheats can now be enabled/disabled and games can be launched with cheats
2026-02-28 17:00:02 +01:00

110 lines
3.1 KiB
C

#pragma once
/// @brief The Pico Loader API version supported by this header file.
#define PICO_LOADER_API_VERSION 3
/// @brief Enum to specify the drive to boot from.
typedef enum
{
/// @brief Flashcard through DLDI.
PLOAD_BOOT_DRIVE_DLDI = 0,
/// @brief DSi SD card.
PLOAD_BOOT_DRIVE_DSI_SD = 1,
/// @brief AGB semihosting on the IS-NITRO-EMULATOR.
PLOAD_BOOT_DRIVE_AGB_SEMIHOSTING = 2,
/// @brief Flag to indicate that a multiboot rom needs to be loaded that is already in memory.
PLOAD_BOOT_DRIVE_MULTIBOOT_FLAG = 1u << 15
} PicoLoaderBootDrive;
/// @brief Struct containing the load params.
typedef struct
{
/// @brief The path of the rom to load.
char romPath[256];
/// @brief The path to the save file to use.
char savePath[256];
/// @brief The actual length of the argv arguments buffer.
u32 argumentsLength;
/// @brief Argv arguments buffer.
char arguments[256];
} pload_params_t;
/// @brief Struct representing the API version 2 part of the header of picoLoader7.bin.
typedef struct
{
/// @brief The path of the rom to return to when exiting an application.
/// When this path is not set, no bootstub will be patched into homebrew applications.
char launcherPath[256];
} pload_header7_v2_t;
/// @brief Struct representing a single Action Replay cheat opcode.
typedef struct
{
/// @brief The first part of the opcode.
u32 a;
/// @brief The second part of the opcode.
u32 b;
} pload_cheat_opcode_t;
/// @brief Struct representing a single Action Replay cheat.
typedef struct
{
/// @brief Length of \see opcodes in bytes.
u32 length;
/// @brief The cheat opcodes.
pload_cheat_opcode_t opcodes[1];
} pload_cheat_t;
/// @brief Struct representing one or more cheats. Cheats are adjacent starting from the firstCheat field.
typedef struct
{
/// @brief Length of this stucture (length field + numberOfCheats field + all cheats).
u32 length;
/// @brief The number of cheats.
u32 numberOfCheats;
/// @brief The first cheat.
pload_cheat_t firstCheat;
} pload_cheats_t;
/// @brief Struct representing the API version 3 part of the header of picoLoader7.bin.
typedef struct
{
/// @brief Pointer to the cheats, or \c nullptr when there are no cheats.
const pload_cheats_t* cheats;
} pload_header7_v3_t;
/// @brief Struct representing the header of picoLoader7.bin.
typedef struct
{
/// @brief Pointer to the Pico Loader arm7 entry point (read-only).
void* const entryPoint;
/// @brief Sets the DLDI driver to use.
void* dldiDriver;
/// @brief Sets the boot drive. See \see PicoLoaderBootDrive.
u16 bootDrive;
/// @brief The supported Pico Loader API version (read-only).
const u16 apiVersion;
/// @brief The load params, see \see pload_params_t.
pload_params_t loadParams;
/// @brief The API version 2 part of the header. Only access this when \see apiVersion >= 2.
pload_header7_v2_t v2;
/// @brief The API version 3 part of the header. Only access this when \see apiVersion >= 3.
pload_header7_v3_t v3;
} pload_header7_t;