diff --git a/src/dol_init.c b/src/dol_init.c new file mode 100644 index 0000000..f62ad6c --- /dev/null +++ b/src/dol_init.c @@ -0,0 +1,54 @@ +#ifdef GEKKO + +#include "dol_init.h" + +#include + +#include +#include +#include + +static void *xfb = NULL; +static GXRModeObj *rmode = NULL; + +void DOL_Init() +{ +#ifdef DEBUG_GDB + DEBUG_Init(GDBSTUB_DEVICE_USB, 1); + _break(); +#endif + + VIDEO_Init(); + rmode = VIDEO_GetPreferredMode(NULL); + xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); + + console_init(xfb, 20, 20, rmode->fbWidth, rmode->xfbHeight, rmode->fbWidth * VI_DISPLAY_PIX_SZ); + + VIDEO_Configure(rmode); + VIDEO_SetNextFramebuffer(xfb); + VIDEO_SetBlack(FALSE); + VIDEO_Flush(); + VIDEO_WaitVSync(); + if(rmode->viTVMode & VI_NON_INTERLACE) + { + VIDEO_WaitVSync(); + } + + // helps ensure TV overscan won't cut off initial console output + printf("\x1b[2;0H"); + + printf("DOL_Init: Console video init finished.\n"); + + if (!fatInitDefault()) + { + printf("DOL_Init: *** FATAL: fatInitDefault failed.\n"); + exit(1); + } + else + { + printf("DOL_Init: fatInitDefault success.\n"); + } +} + +#endif + diff --git a/src/dol_init.h b/src/dol_init.h new file mode 100644 index 0000000..398537e --- /dev/null +++ b/src/dol_init.h @@ -0,0 +1,11 @@ +#ifndef __DOL_INIT__ +#define __DOL_INIT__ + +#ifdef GEKKO + +void DOL_Init(); + +#endif + +#endif + diff --git a/src/i_main.c b/src/i_main.c index 7ef7fef..4afdc40 100644 --- a/src/i_main.c +++ b/src/i_main.c @@ -27,9 +27,7 @@ #include "m_argv.h" #ifdef GEKKO -#include -#include -#include +#include "dol_init.h" #endif // @@ -42,20 +40,15 @@ void D_DoomMain (void); int main(int argc, char **argv) { -#ifdef GEKKO -#ifdef DEBUG_GDB - DEBUG_Init(GDBSTUB_DEVICE_USB, 1); - _break(); -#endif - - fatInitDefault(); -#endif - // save arguments myargc = argc; myargv = argv; +#ifdef GEKKO + DOL_Init(); +#endif + M_FindResponseFile(); // start doom