diff options
Diffstat (limited to 'backends/platform')
-rw-r--r-- | backends/platform/wii/main.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/backends/platform/wii/main.cpp b/backends/platform/wii/main.cpp index 85ce7b02de..644726ac44 100644 --- a/backends/platform/wii/main.cpp +++ b/backends/platform/wii/main.cpp @@ -28,6 +28,9 @@ #include <ogc/machine/processor.h> #include <fat.h> +#ifndef GAMECUBE +#include <wiiuse/wpad.h> +#endif #ifdef USE_WII_DI #include <di/di.h> #endif @@ -58,6 +61,53 @@ void power_cb(void) { power_btn_pressed = true; } +static void show_console(int code) { + u32 b; + + printf("ScummVM exited abnormally (%d).\n", code); + + if (!gfx_frame_start()) + return; + + gfx_con_draw(); + gfx_frame_end(); + + while (true) { + b = 0; + + if (PAD_ScanPads() & 1) + b = PAD_ButtonsDown(0); + +#ifndef GAMECUBE + WPAD_ScanPads(); + if (WPAD_Probe(0, NULL) == WPAD_ERR_NONE) + b |= WPAD_ButtonsDown(0); +#endif + + if (b) + break; + + VIDEO_WaitVSync(); + } +} + +s32 reset_func(s32 final) { + static bool done = false; + + if (!done) { + show_console(-127); + done = true; + } + + return 1; +} + +static sys_resetinfo resetinfo = { + { NULL, NULL }, + reset_func, + 1 +}; + #ifdef DEBUG_WII_MEMSTATS void wii_memstats(void) { static u32 min_free = UINT_MAX; @@ -105,6 +155,8 @@ int main(int argc, char *argv[]) { else printf("<unknown>\n"); + SYS_RegisterResetFunc(&resetinfo); + SYS_SetResetCallback(reset_cb); #ifndef GAMECUBE SYS_SetPowerCallback(power_cb); @@ -135,8 +187,12 @@ int main(int argc, char *argv[]) { printf("shutdown\n"); + SYS_UnregisterResetFunc(&resetinfo); fatUnmountDefault(); + if (res) + show_console(res); + if (power_btn_pressed) { printf("shutting down\n"); SYS_ResetSystem(SYS_POWEROFF, 0, 0); |