diff --git a/src/asset/asset.c b/src/asset/asset.c index cd72175..e57c5b8 100644 --- a/src/asset/asset.c +++ b/src/asset/asset.c @@ -15,6 +15,10 @@ errorret_t assetInit(void) { memoryZero(&ASSET, sizeof(asset_t)); + + #if DOLPHIN + errorOk(); + #endif // Engine may have been provided the launch path if(ENGINE.argc > 0) { @@ -174,6 +178,10 @@ bool_t assetFileExists(const char_t *filename) { } errorret_t assetLoad(const char_t *filename, void *output) { + #if DOLPHIN + errorOk(); + #endif + assertStrLenMax(filename, FILENAME_MAX, "Filename too long."); assertNotNull(output, "Output pointer cannot be NULL."); diff --git a/src/debug/debug.c b/src/debug/debug.c index 4a9f7e1..9297346 100644 --- a/src/debug/debug.c +++ b/src/debug/debug.c @@ -6,6 +6,9 @@ */ #include "debug.h" +#if DOLPHIN + #include "display/display.h" +#endif void debugPrint(const char_t *message, ...) { va_list args; @@ -22,5 +25,32 @@ void debugPrint(const char_t *message, ...) { va_end(args); fclose(file); } + + #elif DOLPHIN + if(!DISPLAY.frameBuffer) return; + console_init( + DISPLAY.frameBuffer, + 20, + 20, + DISPLAY.screenMode->fbWidth, + DISPLAY.screenMode->xfbHeight, + DISPLAY.screenMode->fbWidth * VI_DISPLAY_PIX_SZ + ); + + // Printf + va_start(args, message); + vprintf(message, args); + va_end(args); + printf("\nPress START to exit..."); + + while(SYS_MainLoop()) { + VIDEO_WaitVSync(); + PAD_ScanPads(); + int buttonsDown = PAD_ButtonsDown(0); + if (buttonsDown & PAD_BUTTON_START) { + exit(0); + } + } + #endif } \ No newline at end of file diff --git a/src/display/display.c b/src/display/display.c index 900ebe7..48d679e 100644 --- a/src/display/display.c +++ b/src/display/display.c @@ -15,8 +15,9 @@ #include "ui/ui.h" #include "debug/debug.h" #include "display/text.h" +#include "assert/assert.h" -display_t DISPLAY; +display_t DISPLAY = { 0 }; errorret_t displayInit(void) { #if DISPLAY_SDL2 @@ -69,6 +70,42 @@ errorret_t displayInit(void) { glEnableClientState(GL_COLOR_ARRAY);// To confirm: every frame on PSP? glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); + + #elif DOLPHIN + + VIDEO_Init(); + DISPLAY.screenMode = VIDEO_GetPreferredMode(NULL); + DISPLAY.frameBuffer = MEM_K0_TO_K1( + SYS_AllocateFramebuffer(DISPLAY.screenMode) + ); + VIDEO_Configure(DISPLAY.screenMode); + + VIDEO_SetNextFramebuffer(DISPLAY.frameBuffer); + VIDEO_SetBlack(FALSE); + VIDEO_Flush(); + VIDEO_WaitVSync(); + if(DISPLAY.screenMode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); + + // DISPLAY.fifoBuffer = MEM_K0_TO_K1(memalign(32,FIFO_SIZE)); + // memset(DISPLAY.fifoBuffer, 0, FIFO_SIZE); + + // GX_Init(DISPLAY.fifoBuffer, FIFO_SIZE); + // GXColor backgroundColor = {0, 0, 0, 255}; + // GX_SetCopyClear(backgroundColor, 0x00ffffff); + // GX_SetViewport(0,0,DISPLAY.screenMode->fbWidth,DISPLAY.screenMode->efbHeight,0,1); + // GX_SetDispCopyYScale((f32)DISPLAY.screenMode->xfbHeight/(f32)DISPLAY.screenMode->efbHeight); + // GX_SetScissor(0,0,DISPLAY.screenMode->fbWidth,DISPLAY.screenMode->efbHeight); + // GX_SetDispCopySrc(0,0,DISPLAY.screenMode->fbWidth,DISPLAY.screenMode->efbHeight); + // GX_SetDispCopyDst(DISPLAY.screenMode->fbWidth,DISPLAY.screenMode->xfbHeight); + // GX_SetCopyFilter(DISPLAY.screenMode->aa,DISPLAY.screenMode->sample_pattern, + // GX_TRUE,DISPLAY.screenMode->vfilter); + // GX_SetFieldMode(DISPLAY.screenMode->field_rendering, + // ((DISPLAY.screenMode->viHeight==2*DISPLAY.screenMode->xfbHeight)?GX_ENABLE:GX_DISABLE)); + + // GX_SetCullMode(GX_CULL_NONE); + // GX_CopyDisp(DISPLAY.frameBuffer,GX_TRUE); + // GX_SetDispCopyGamma(GX_GM_1_0); + #endif quadInit(); @@ -110,6 +147,9 @@ errorret_t displayUpdate(void) { } SDL_GL_MakeCurrent(DISPLAY.window, DISPLAY.glContext); + #elif DOLPHIN + + #endif // Reset state @@ -138,6 +178,9 @@ errorret_t displayUpdate(void) { while((err = glGetError()) != GL_NO_ERROR) { debugPrint("GL Error: %d\n", err); } + #elif DOLPHIN + VIDEO_WaitVSync(); + if(DISPLAY.screenMode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); #endif diff --git a/src/display/display.h b/src/display/display.h index 24c203b..2052d20 100644 --- a/src/display/display.h +++ b/src/display/display.h @@ -15,6 +15,12 @@ typedef struct { #if DISPLAY_SDL2 SDL_Window *window; SDL_GLContext glContext; + + #elif DOLPHIN + void *frameBuffer; + GXRModeObj *screenMode; + void *fifoBuffer; + #endif } display_t; diff --git a/src/dusk.h b/src/dusk.h index ecf804a..34c9356 100644 --- a/src/dusk.h +++ b/src/dusk.h @@ -30,6 +30,7 @@ #endif #if DOLPHIN + #include #include #endif diff --git a/src/engine/engine.c b/src/engine/engine.c index 8eb4840..a197d51 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -37,7 +37,6 @@ errorret_t engineInit(const int32_t argc, const char_t **argv) { errorChain(uiInit()); errorChain(mapInit()); errorChain(sceneInit()); - backpackInit(); // Run the initial script. @@ -50,6 +49,10 @@ errorret_t engineInit(const int32_t argc, const char_t **argv) { } errorret_t engineUpdate(void) { + #if DOLPHIN + ENGINE.running = SYS_MainLoop(); + #endif + timeUpdate(); inputUpdate(); diff --git a/src/input/input.c b/src/input/input.c index 07bfd56..7db8c8f 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -23,7 +23,13 @@ void inputInit(void) { INPUT.actions[i].currentValue = 0.0f; } - INPUT.deadzone = 0.2f; + #if INPUT_GAMEPAD == 1 + INPUT.deadzone = 0.2f; + #endif + + #if DOLPHIN + PAD_Init(); + #endif eventInit( &INPUT.eventPressed, INPUT.pressedListeners, INPUT_LISTENER_PRESSED_MAX @@ -47,6 +53,9 @@ void inputUpdate(void) { #if INPUT_KEYBOARD == 1 INPUT.keyboardState = SDL_GetKeyboardState(NULL); #endif + #elif DOLPHIN + PAD_Read(INPUT.pads); + #endif // Reset all actions diff --git a/src/input/input.h b/src/input/input.h index 45f820e..29b7dca 100644 --- a/src/input/input.h +++ b/src/input/input.h @@ -37,6 +37,10 @@ typedef struct { #if INPUT_KEYBOARD == 1 const uint8_t *keyboardState; #endif + + #elif DOLPHIN + PADStatus pads[4]; + #endif } input_t;