good news: libSDL now for nintendo DS !

Thread in 'Discussion' started by herc, 22 Sep 2008.

  1. just to let the programmers among you know: you can now use SDL to do homebrew on nintendo DS, as a result of googles summer of code:




    fulll mail quote:

     
  2. So who's going to port Texmaster to DS, now that Report's off the scene?
     
  3. the one, that extracts that mysteriously hidden source code...
     
  4. I wouldn't mind doing come non-tetris-clone experiments with this. Do you know of an easy beginner's guide? I've used SDL before on PC, I just wouldn't know how to get started on DS.
     
  5. no, sorry... i never did nds dev. but i know that i like sdl, so i got very excited that it now supports nds and even iphone!!

    tepples, can you jump in ?
     
  6. tepples

    tepples Lockjaw developer

    I've never used SDL. For PC game programming, I've always used SDL's biggest competitor; that might be because I started programming games on MS-DOS, which had Allegro but not SDL. And on the GBA and DS, I've always used my own libraries (e.g. GBFS, AGBTTY, RAC VWF, Tri Engine) or devkitPro's (e.g. libnds, libfat).

    A few things stand in the way of direct ports:
    • No other SDL platform has a resolution of 256x192 pixels. Other popular SDL platforms have e.g. 320x240 (GP2X), 640x480 (PC), 800x480 (Pandora, coming this northern fall). Graphics will likely need redrawing.
    • DS has less CPU (67 MHz, with huge cache miss penalties for instructions and data) and less RAM (4 MB) than any other popular SDL platform.
    • No keyboard. (Or does SDL provide an on-screen keyboard?)
    • Unlike DS games, DS homebrew equipment is not sold in stores that take cash. I haven't even seen Datel's Games n' Music in Walmart* lately; might the recall due to porn on the demo disc have something to do with it?
    • SDL isn't copylefted (on purpose). This means a lot of SDL games don't have public source code. Nor is there a guarantee that an SDL game has a maintainer or that the maintainer cares about the DS.
     
  7. heh, i've used allegro before. always been kind of interested in SDL but never got motivated enough to give it a whirl...
     
  8. Let's bump this one.

    Anyone ever tried this out?
    I've played around with SDL before, and I might get back into programming soon enough and I figured SDL might be a good choice for multiplatform. (Win/Lin/Mac/Gp2x/Wiz/Pandora/Dreamcast/DS.. List goes on, SDL is everywhere)

    So I decided to try this out and got myself a Linux Mint and grabbed SDL 1.3 from svn.
    Also grabbed toolkit from http://libsdl.org/extras/nds/
    Put it in /usr/local/share/devkitPro/

    Code:
    export DEVKITPRO=/usr/local/share/devkitPro
    export DEVKITARM=$DEVKITPRO/devkitARM
    export PATH=$DEVKITARM/bin:$PATH
    
    Then I did
    Code:
    cp include/SDL_config_nds.h include/SDL_config.h
    make -f Makefile.ds
    make
    
    No errors.
    Code:
    cp libSDL.a $DEVKITPRO/libnds/lib/
    mkdir $DEVKITPRO/libnds/include/SDL
    cp include/* $DEVKITPRO/libnds/include/SDL/
    
    Then I go to the test/nds-test-progs/general folder as that was the only examples I could find.
    I try to compile with the included Makefile so I just type 'make'.
    This is where SDL starts to hate me.

    Code:
    mint general # make
    linking general.elf
    main.o: In function `splash':
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:18: undefined reference to `SDL_RWFromFile'
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:18: undefined reference to `SDL_LoadBMP_RW'
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:24: undefined reference to `SDL_UpperBlit'
    main.o: In function `main':
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:61: undefined reference to `SDL_JoystickOpen'
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:71: undefined reference to `SDL_FillRect'
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:78: undefined reference to `SDL_FillRect'
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:86: undefined reference to `SDL_GetTicks'
    /home/mint/Documents/SDL-1.3.0-5441/test/nds-test-progs/general/source/main.c:75: undefined reference to `SDL_PollEvent'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL.o): In function `SDL_QuitSubSystem':
    SDL.c:(.text+0x72): undefined reference to `SDL_VideoQuit'
    SDL.c:(.text+0x8a): undefined reference to `SDL_TimerQuit'
    SDL.c:(.text+0x96): undefined reference to `SDL_HapticQuit'
    SDL.c:(.text+0xa4): undefined reference to `SDL_JoystickQuit'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL.o): In function `SDL_InitSubSystem':
    SDL.c:(.text+0x13c): undefined reference to `SDL_TimerInit'
    SDL.c:(.text+0x154): undefined reference to `SDL_JoystickInit'
    SDL.c:(.text+0x164): undefined reference to `SDL_StartTicks'
    SDL.c:(.text+0x16e): undefined reference to `SDL_HapticInit'
    SDL.c:(.text+0x18a): undefined reference to `SDL_VideoInit'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_EnableUNICODE':
    SDL_compat.c:(.text+0xb8): undefined reference to `SDL_StopTextInput'
    SDL_compat.c:(.text+0xc0): undefined reference to `SDL_StartTextInput'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_GL_SwapBuffers':
    SDL_compat.c:(.text+0xd4): undefined reference to `SDL_GL_SwapWindow'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_FreeYUVOverlay':
    SDL_compat.c:(.text+0x102): undefined reference to `SDL_DestroyTexture'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_DisplayYUVOverlay':
    SDL_compat.c:(.text+0x12e): undefined reference to `SDL_RenderCopy'
    SDL_compat.c:(.text+0x136): undefined reference to `SDL_RenderPresent'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_UnlockYUVOverlay':
    SDL_compat.c:(.text+0x166): undefined reference to `SDL_LockTexture'
    SDL_compat.c:(.text+0x190): undefined reference to `SDL_SW_CopyYUVToRGB'
    SDL_compat.c:(.text+0x198): undefined reference to `SDL_UnlockTexture'
    SDL_compat.c:(.text+0x1a0): undefined reference to `SDL_UnlockTexture'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_LockYUVOverlay':
    SDL_compat.c:(.text+0x1be): undefined reference to `SDL_SW_QueryYUVTexturePixels'
    SDL_compat.c:(.text+0x21a): undefined reference to `SDL_LockTexture'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_CreateYUVOverlay':
    SDL_compat.c:(.text+0x31e): undefined reference to `SDL_CreateTexture'
    SDL_compat.c:(.text+0x364): undefined reference to `SDL_SW_CreateYUVTexture'
    SDL_compat.c:(.text+0x374): undefined reference to `SDL_GetCurrentDisplayMode'
    SDL_compat.c:(.text+0x386): undefined reference to `SDL_CreateTexture'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_GetWMInfo':
    SDL_compat.c:(.text+0x416): undefined reference to `SDL_GetWindowWMInfo'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_SetColors':
    SDL_compat.c:(.text+0x42c): undefined reference to `SDL_SetPaletteColors'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_GetAppState':
    SDL_compat.c:(.text+0x45c): undefined reference to `SDL_GetWindowFlags'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_WarpMouse':
    SDL_compat.c:(.text+0x49c): undefined reference to `SDL_WarpMouseInWindow'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_WM_GrabInput':
    SDL_compat.c:(.text+0x4b4): undefined reference to `SDL_SetWindowGrab'
    SDL_compat.c:(.text+0x4ba): undefined reference to `SDL_GetWindowGrab'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_WM_ToggleFullScreen':
    SDL_compat.c:(.text+0x4d2): undefined reference to `SDL_GetWindowFlags'
    SDL_compat.c:(.text+0x4de): undefined reference to `SDL_SetWindowFullscreen'
    SDL_compat.c:(.text+0x4fa): undefined reference to `SDL_SetWindowFullscreen'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_WM_IconifyWindow':
    SDL_compat.c:(.text+0x52c): undefined reference to `SDL_MinimizeWindow'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_WM_SetCaption':
    SDL_compat.c:(.text+0x560): undefined reference to `SDL_SetWindowTitle'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_UpdateRects':
    SDL_compat.c:(.text+0x5e4): undefined reference to `SDL_UpdateTexture'
    SDL_compat.c:(.text+0x60c): undefined reference to `SDL_RenderCopy'
    SDL_compat.c:(.text+0x616): undefined reference to `SDL_RenderPresent'
    SDL_compat.c:(.text+0x634): undefined reference to `SDL_LowerBlit'
    SDL_compat.c:(.text+0x656): undefined reference to `SDL_RenderCopy'
    SDL_compat.c:(.text+0x65a): undefined reference to `SDL_RenderPresent'
    SDL_compat.c:(.text+0x668): undefined reference to `SDL_DirtyTexture'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_DisplayFormat':
    SDL_compat.c:(.text+0x6e0): undefined reference to `SDL_ConvertSurface'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_DisplayFormatAlpha':
    SDL_compat.c:(.text+0x728): undefined reference to `SDL_AllocFormat'
    SDL_compat.c:(.text+0x734): undefined reference to `SDL_ConvertSurface'
    SDL_compat.c:(.text+0x73c): undefined reference to `SDL_FreeFormat'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_SetAlpha':
    SDL_compat.c:(.text+0x7a8): undefined reference to `SDL_SetSurfaceAlphaMod'
    SDL_compat.c:(.text+0x7b0): undefined reference to `SDL_SetSurfaceBlendMode'
    SDL_compat.c:(.text+0x7bc): undefined reference to `SDL_SetSurfaceRLE'
    SDL_compat.c:(.text+0x7cc): undefined reference to `SDL_SetSurfaceAlphaMod'
    SDL_compat.c:(.text+0x7d4): undefined reference to `SDL_SetSurfaceBlendMode'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SelectVideoDisplay':
    SDL_compat.c:(.text+0x7ee): undefined reference to `SDL_SelectVideoDisplay'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_GetVideoInfo':
    SDL_compat.c:(.text+0x824): undefined reference to `SDL_GetDesktopDisplayMode'
    SDL_compat.c:(.text+0x83c): undefined reference to `SDL_PixelFormatEnumToMasks'
    SDL_compat.c:(.text+0x84c): undefined reference to `SDL_AllocFormat'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `ClearVideoSurface':
    SDL_compat.c:(.text+0x870): undefined reference to `SDL_MapRGB'
    SDL_compat.c:(.text+0x87a): undefined reference to `SDL_FillRect'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_CompatEventFilter':
    SDL_compat.c:(.text+0x8ba): undefined reference to `SDL_SelectMouse'
    SDL_compat.c:(.text+0x8c4): undefined reference to `SDL_GetMouseState'
    SDL_compat.c:(.text+0x8ca): undefined reference to `SDL_SelectMouse'
    SDL_compat.c:(.text+0x8f4): undefined reference to `SDL_PushEvent'
    SDL_compat.c:(.text+0x902): undefined reference to `SDL_PushEvent'
    SDL_compat.c:(.text+0x95a): undefined reference to `SDL_HasEvent'
    SDL_compat.c:(.text+0x972): undefined reference to `SDL_PeepEvents'
    SDL_compat.c:(.text+0x984): undefined reference to `SDL_PushEvent'
    SDL_compat.c:(.text+0x99a): undefined reference to `SDL_PushEvent'
    SDL_compat.c:(.text+0x9b8): undefined reference to `SDL_PushEvent'
    SDL_compat.c:(.text+0x9ce): undefined reference to `SDL_PushEvent'
    SDL_compat.c:(.text+0x9e4): undefined reference to `SDL_PushEvent'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o):SDL_compat.c:(.text+0x9fc): more undefined references to `SDL_PushEvent' follow
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_VideoPaletteChanged':
    SDL_compat.c:(.text+0xa5c): undefined reference to `SDL_SetDisplayPalette'
    SDL_compat.c:(.text+0xa6e): undefined reference to `SDL_SetTexturePalette'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_ResizeVideoMode':
    SDL_compat.c:(.text+0xac6): undefined reference to `SDL_GetWindowSize'
    SDL_compat.c:(.text+0xadc): undefined reference to `SDL_SetWindowSize'
    SDL_compat.c:(.text+0xafe): undefined reference to `SDL_QueryTexture'
    SDL_compat.c:(.text+0xb04): undefined reference to `SDL_DestroyTexture'
    SDL_compat.c:(.text+0xb10): undefined reference to `SDL_CreateTexture'
    SDL_compat.c:(.text+0xb26): undefined reference to `SDL_QueryTexturePixels'
    SDL_compat.c:(.text+0xb3c): undefined reference to `SDL_SetClipRect'
    SDL_compat.c:(.text+0xb44): undefined reference to `SDL_InvalidateMap'
    SDL_compat.c:(.text+0xb56): undefined reference to `SDL_CalculatePitch'
    SDL_compat.c:(.text+0xb72): undefined reference to `SDL_SetClipRect'
    SDL_compat.c:(.text+0xb7a): undefined reference to `SDL_InvalidateMap'
    SDL_compat.c:(.text+0xb88): undefined reference to `SDL_CalculatePitch'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_SetVideoMode':
    SDL_compat.c:(.text+0xbd0): undefined reference to `SDL_GetVideoDevice'
    SDL_compat.c:(.text+0xbe0): undefined reference to `SDL_GetDesktopDisplayMode'
    SDL_compat.c:(.text+0xc2c): undefined reference to `SDL_FreeSurface'
    SDL_compat.c:(.text+0xc46): undefined reference to `SDL_DelPaletteWatch'
    SDL_compat.c:(.text+0xc4e): undefined reference to `SDL_FreeSurface'
    SDL_compat.c:(.text+0xc60): undefined reference to `SDL_GL_DeleteContext'
    SDL_compat.c:(.text+0xc78): undefined reference to `SDL_GetEventFilter'
    SDL_compat.c:(.text+0xcf8): undefined reference to `SDL_GetDesktopDisplayMode'
    SDL_compat.c:(.text+0xd24): undefined reference to `SDL_CreateWindow'
    SDL_compat.c:(.text+0xd3e): undefined reference to `SDL_SetWindowIcon'
    SDL_compat.c:(.text+0xd46): undefined reference to `SDL_GetWindowFlags'
    SDL_compat.c:(.text+0xdca): undefined reference to `SDL_GL_CreateContext'
    SDL_compat.c:(.text+0xddc): undefined reference to `SDL_GL_MakeCurrent'
    SDL_compat.c:(.text+0xdf8): undefined reference to `SDL_CreateRGBSurfaceFrom'
    SDL_compat.c:(.text+0xe36): undefined reference to `SDL_SetEventFilter'
    SDL_compat.c:(.text+0xe40): undefined reference to `SDL_GetWindowPosition'
    SDL_compat.c:(.text+0xe48): undefined reference to `SDL_DestroyWindow'
    SDL_compat.c:(.text+0xe72): undefined reference to `SDL_CreateRenderer'
    SDL_compat.c:(.text+0xe7e): undefined reference to `SDL_GetRendererInfo'
    SDL_compat.c:(.text+0xe8a): undefined reference to `SDL_CreateTexture'
    SDL_compat.c:(.text+0xea8): undefined reference to `SDL_QueryTexture'
    SDL_compat.c:(.text+0xec0): undefined reference to `SDL_PixelFormatEnumToMasks'
    SDL_compat.c:(.text+0xf50): undefined reference to `SDL_SetWindowDisplayMode'
    SDL_compat.c:(.text+0xf6e): undefined reference to `SDL_QueryTexturePixels'
    SDL_compat.c:(.text+0xf92): undefined reference to `SDL_CreateRGBSurfaceFrom'
    SDL_compat.c:(.text+0xfbc): undefined reference to `SDL_DitherColors'
    SDL_compat.c:(.text+0xfca): undefined reference to `SDL_AddPaletteWatch'
    SDL_compat.c:(.text+0xfdc): undefined reference to `SDL_SetPaletteColors'
    SDL_compat.c:(.text+0x101a): undefined reference to `SDL_EnableScreenSaver'
    SDL_compat.c:(.text+0x103c): undefined reference to `SDL_CreateRGBSurface'
    SDL_compat.c:(.text+0x104a): undefined reference to `SDL_CreateTexture'
    SDL_compat.c:(.text+0x1062): undefined reference to `SDL_DisableScreenSaver'
    SDL_compat.c:(.text+0x107e): undefined reference to `SDL_CreateRGBSurface'
    SDL_compat.c:(.text+0x10b0): undefined reference to `SDL_SetSurfacePalette'
    SDL_compat.c:(.text+0x10be): undefined reference to `SDL_AddPaletteWatch'
    SDL_compat.c:(.text+0x10c8): undefined reference to `SDL_DitherColors'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_ListModes':
    SDL_compat.c:(.text+0x10e8): undefined reference to `SDL_GetVideoDevice'
    SDL_compat.c:(.text+0x1102): undefined reference to `SDL_GetNumDisplayModes'
    SDL_compat.c:(.text+0x110e): undefined reference to `SDL_GetDisplayMode'
    SDL_compat.c:(.text+0x112c): undefined reference to `SDL_GetNumDisplayModes'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_VideoModeOK':
    SDL_compat.c:(.text+0x11c4): undefined reference to `SDL_GetVideoDevice'
    SDL_compat.c:(.text+0x11d8): undefined reference to `SDL_GetNumDisplayModes'
    SDL_compat.c:(.text+0x11e4): undefined reference to `SDL_GetDisplayMode'
    SDL_compat.c:(.text+0x11fa): undefined reference to `SDL_GetNumDisplayModes'
    SDL_compat.c:(.text+0x1228): undefined reference to `SDL_GetDesktopDisplayMode'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_VideoDriverName':
    SDL_compat.c:(.text+0x1240): undefined reference to `SDL_GetCurrentVideoDriver'
    SDL_compat.c:(.text+0x124e): undefined reference to `SDL_strlcpy'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_compat.o): In function `SDL_AudioDriverName':
    SDL_compat.c:(.text+0x1272): undefined reference to `SDL_strlcpy'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_error.o): In function `SDL_SetError':
    SDL_error.c:(.text+0x152): undefined reference to `SDL_strlcpy'
    SDL_error.c:(.text+0x220): undefined reference to `SDL_strlcpy'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_audio.o): In function `close_audio_device':
    SDL_audio.c:(.text+0x2a8): undefined reference to `SDL_WaitThread'
    SDL_audio.c:(.text+0x2b4): undefined reference to `SDL_DestroyMutex'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_audio.o): In function `open_audio_device':
    SDL_audio.c:(.text+0x5a6): undefined reference to `SDL_CreateMutex'
    SDL_audio.c:(.text+0x858): undefined reference to `SDL_CreateThread'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_audio.o): In function `SDL_AudioUnlockDevice_Default':
    SDL_audio.c:(.text+0xcd4): undefined reference to `SDL_ThreadID'
    SDL_audio.c:(.text+0xce4): undefined reference to `SDL_mutexV'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_audio.o): In function `SDL_AudioLockDevice_Default':
    SDL_audio.c:(.text+0xcf8): undefined reference to `SDL_ThreadID'
    SDL_audio.c:(.text+0xd08): undefined reference to `SDL_mutexP'
    /usr/local/share/devkitPro/libnds/lib/libSDL.a(SDL_audio.o): In function `SDL_RunAudio':
    SDL_audio.c:(.text+0xd20): undefined reference to `SDL_ThreadID'
    SDL_audio.c:(.text+0xd78): undefined reference to `SDL_mutexP'
    SDL_audio.c:(.text+0xd88): undefined reference to `SDL_mutexV'
    SDL_audio.c:(.text+0xdca): undefined reference to `SDL_Delay'
    collect2: ld returned 1 exit status
    
    I was able to get some old SDL for DS port working. 1.2.9. But as far as I know there is no touchscreen support and you can only use the top screen. I think.

    Anyone tried 1.3 and got it to work?
     
  9. K

    K

    It's not good in the business plan to allow free software SDK available on any platform where the proprietary one require a MAC environment. Steve Job is not philanthropist
     

Share This Page