def install_nsp(nsp_file, usb_drive):
"""Installs an NSP game to a USB drive.
Args:
nsp_file: The path to the NSP file.
usb_drive: The path to the USB drive.
"""
# Create a temporary directory to store the extracted NSP files.
temp_dir = os.path.join(usb_drive, ".nsp_temp")
os.makedirs(temp_dir, exist_ok=True)
# Extract the NSP files to the temporary directory.
nx.archive.extract_nsp(nsp_file, temp_dir)
# Move the NSP files to the appropriate location on the USB drive.
nx.file.move(temp_dir, usb_drive)
# Delete the temporary directory.
os.rmdir(temp_dir)
def run_nsp(nsp_file, usb_drive):
"""Runs an NSP game from a USB drive.
Args:
nsp_file: The path to the NSP file.
usb_drive: The path to the USB drive.
"""
# Mount the USB drive.
nx.mount.mount_usb_drive(usb_drive)
# Start the NSP game.
nx.app.start_title(nsp_file)
# Unmount the USB drive.
nx.mount.unmount_usb_drive(usb_drive)
def main():
"""The main entry point for the homebrew app."""
# Get the path to the USB drive.
usb_drive = nx.interface.get_usb_drive_path()
# If the USB drive is not mounted, prompt the user to insert it.
if not nx.mount.is_usb_drive_mounted(usb_drive):
nx.console.log("Please insert a USB drive.")
nx.input.wait_for_button_press()
# Get the path to the NSP file.
nsp_file = nx.file.select_file()
# Install the NSP game to the USB drive.
install_nsp(nsp_file, usb_drive)
# Run the NSP game from the USB drive.
run_nsp(nsp_file, usb_drive)
if __name__ == "__main__":
main()
It just says:
To compile this Python application into a homebrew app, you can use the following command:
// Install an NSP game to an external USB drive.
void InstallNSPGameToUSB(const char* nsp_file, const char* usb_path) {
// Open the NSP game file.
FILE* file = fopen(nsp_file, "rb");
if (!file) {
return;
}
// Get the file size.
fseek(file, 0, SEEK_END);
size_t size = ftell(file);
fseek(file, 0, SEEK_SET);
// Allocate a buffer to store the NSP game file.
uint8_t* buffer = (uint8_t*)malloc(size);
if (!buffer) {
fclose(file);
return;
}
// Read the NSP game file into the buffer.
fread(buffer, 1, size, file);
fclose(file);
// Open the USB device.
handle_t usb_device;
swipc_usb_open(&usb_device, usb_path);
// Write the NSP game file to the USB device.
swipc_usb_write(usb_device, buffer, size);
// Close the USB device.
swipc_usb_close(usb_device);
// Free the buffer.
free(buffer);
}
// Uninstall an NSP game from an external USB drive.
void UninstallNSPGameFromUSB(const char* usb_path) {
// Open the USB device.
handle_t usb_device;
swipc_usb_open(&usb_device, usb_path);
// Remove the NSP game file from the USB device.
swipc_usb_remove(usb_device, "NSP");
// Close the USB device.
swipc_usb_close(usb_device);
}
// Run an NSP game from an external USB drive.
void RunNSPGameFromUSB(const char* usb_path) {
// Open the USB device.
handle_t usb_device;
swipc_usb_open(&usb_device, usb_path);
// Read the NSP game file from the USB device.
size_t size = swipc_usb_get_file_size(usb_device, "NSP");
uint8_t* buffer = (uint8_t*)malloc(size);
swipc_usb_read(usb_device, buffer, size, 0);
// Close the USB device.
swipc_usb_close(usb_device);
// Load the NSP game file into memory.
nx_applet_load_package_memory(buffer, size, 0);
// Start the NSP game.
nx_applet_start();
// Wait for the NSP game to exit.
nx_applet_wait();
// Free the buffer.
free(buffer);
}
int main(void) {
// Initialize the Nintendo Switch.
switch_init();
// Get the path to the NSP game file.
char* nsp_file = switch_select_file();
if (!nsp_file) {
switch_exit();
return 1;
}
// Get the path to the external USB drive.
char* usb_path = switch_select_path();
if (!usb_path) {
switch_exit();
return 1;
}
// Install the NSP game to the external USB drive.
InstallNSPGameToUSB(nsp_file, usb_path);
// Run the NSP game from the external USB drive.
RunNSPGameFromUSB(usb_path);
// Uninstall the NSP game from the external USB drive.
UninstallNSPGameFromUSB(usb_path);
It's a good time to be a first generation Pokemon fan. But when was it not a good time to be one? In recent weeks we've seen a native LOVE2D recreation of Pokemon Red...
Images for the rumoured Zelda-themed limited edition Switch 2 for The Legend of Zelda's 40th Anniversary have started to leak online.
The leak shows only the...
Hoenn to the ROM hacking scene is like Kanto to the official games. It's everywhere. At this point you've probably played through Pokemon Emerald with a party of...
After being announced last year, the fan-made remake Gamma Emerald has finally gotten its first early access release. A complete rebuild of fan-favourite Pokemon...
It’s about that time of year again where I check in with the community to see if we can get the front page aligned with what people are interested in knowing and what...
With the latest entry to the Fire Emblem series, Fortune's Weave, set to launch in September, Nintendo have today announced a new Nintendo Direct to put it soundly in...
Though we knew all the way back in May that this was coming, the exact numbers remained a mystery for prospective Nintendo gamers in the UK. If you happen to have...
Harbour Masters were cutting it close with this one, promising a release of their Banjo Kazooie PC port "Lighthouse" by the end of this month. And they did not...
So I got pretty lucky on this one. Having ordered the physical version of Oblivion Remastered on Switch 2, I had it delivered earlier today, beating out the official...
Over the past week, rumors have started swirling as Redditors (probably correctly) deduced the title of the upcoming Elder Scrolls game, which will apparently be...
It’s about that time of year again where I check in with the community to see if we can get the front page aligned with what people are interested in knowing and what...
Though we knew all the way back in May that this was coming, the exact numbers remained a mystery for prospective Nintendo gamers in the UK. If you happen to have...
Images for the rumoured Zelda-themed limited edition Switch 2 for The Legend of Zelda's 40th Anniversary have started to leak online.
The leak shows only the...
The long awaited Grand Theft Auto VI Extended Look gameplay trailer has finally dropped on YouTube. As you all know, it had dropped 6 hours earlier on Netflix, and...
After being announced last year, the fan-made remake Gamma Emerald has finally gotten its first early access release. A complete rebuild of fan-favourite Pokemon...
In the wake of Sony's shift to a digital-only ecosystem within the next year, Xbox have today announced a surprising scheme. Aiming to offer physical buyers the same...
GBAtemp is and always has been an independent community. Since 2002 our staff have voluntarily kept the site running, added new forums, features, provided constant...
Thanks to the recent decomplication efforts; The Minish Cap 3DS brings the Game Boy Advance classic Zelda title to your 3DS.
The port takes full advantage of the 3DS...
With the latest entry to the Fire Emblem series, Fortune's Weave, set to launch in September, Nintendo have today announced a new Nintendo Direct to put it soundly in...
Over the past week, rumors have started swirling as Redditors (probably correctly) deduced the title of the upcoming Elder Scrolls game, which will apparently be...