N-Gage port: add changes from code reviews, overall cleanup (#5618)
* Add changes from code review by @ccawley2011, #5597, overall cleanup * Update N-Gage README, minor cleanup and rephrasing * Call SDL_SetMainReady() before calling SDL_main, return SDL_main instead of mainmain
parent
2c2cbbe664
commit
9b75fa0165
|
@ -1,7 +1,7 @@
|
|||
Nokia N-Gage
|
||||
============
|
||||
|
||||
SDL2 port for Symbian S60v1/2 with a main focus on the Nokia N-Gage
|
||||
SDL2 port for Symbian S60v1 and v2 with a main focus on the Nokia N-Gage
|
||||
(Classic and QD) by [Michael Fitzmayer](https://github.com/mupfdev).
|
||||
|
||||
Compiling
|
||||
|
@ -13,8 +13,7 @@ The library is included in the
|
|||
sub-module.
|
||||
|
||||
A complete example project based on SDL2 can be found in the GitHub
|
||||
account of the SDK: [Example
|
||||
project](https://github.com/ngagesdk/wordle).
|
||||
account of the SDK: [Wordle](https://github.com/ngagesdk/wordle).
|
||||
|
||||
Current level of implementation
|
||||
-------------------------------
|
||||
|
@ -30,8 +29,9 @@ Acknowledgements
|
|||
----------------
|
||||
|
||||
Thanks to Hannu Viitala, Kimmo Kinnunen and Markus Mertama for the
|
||||
valuable insight into Symbian programming. Without the SDL 1.2 port for
|
||||
CDoom, this adaptation would not have been possible.
|
||||
valuable insight into Symbian programming. Without the SDL 1.2 port
|
||||
which was specially developed for CDoom (Doom for the Nokia 9210), this
|
||||
adaptation would not have been possible.
|
||||
|
||||
I would like to thank my friends
|
||||
[Razvan](https://twitter.com/bewarerazvan) and [Dan
|
||||
|
@ -39,6 +39,6 @@ Whelan](https://danwhelan.ie/), for their continuous support. Without
|
|||
you and the [N-Gage community](https://discord.gg/dbUzqJ26vs), I would
|
||||
have lost my patience long ago.
|
||||
|
||||
Last but not least, I would like to say a special thank you to the
|
||||
[EKA2L1](https://12z1.com/) team. Thank you for all your patience and
|
||||
support in troubleshooting.
|
||||
Last but not least, I would like to thank the development team of
|
||||
[EKA2L1](https://12z1.com/) (an experimental Symbian OS emulator). Your
|
||||
patience and support in troubleshooting helped me a lot.
|
||||
|
|
|
@ -62,7 +62,7 @@ typedef unsigned long uintptr_t;
|
|||
/* Enable the N-Gage timer support (src/timer/ngage/\*.c) */
|
||||
#define SDL_TIMER_NGAGE 1
|
||||
|
||||
/* Enable the N=Hahe video driver (src/video/ngage/\*.c) */
|
||||
/* Enable the N-Gage video driver (src/video/ngage/\*.c) */
|
||||
#define SDL_VIDEO_DRIVER_NGAGE 1
|
||||
|
||||
/* Enable the dummy audio driver (src/audio/dummy/\*.c) */
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/*
|
||||
EPOC version (originally for SDL 1.2) by Hannu Viitala
|
||||
(hannu.j.viitala@mbnet.fi).
|
||||
SDL_ngage_main.c, originally for SDL 1.2 by Hannu Viitala
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
|
@ -68,7 +67,8 @@ TInt E32Main()
|
|||
{
|
||||
oldHeap = User::SwitchHeap(newHeap);
|
||||
/* Call stdlib main */
|
||||
ret = main(argc, argv);
|
||||
SDL_SetMainReady();
|
||||
ret = SDL_main(argc, argv);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
/* An implementation of mutexes using semaphores */
|
||||
/* An implementation of mutexes using the Symbian API. */
|
||||
|
||||
#include <e32std.h>
|
||||
|
||||
|
@ -70,6 +70,22 @@ SDL_DestroyMutex(SDL_mutex * mutex)
|
|||
}
|
||||
}
|
||||
|
||||
/* Try to lock the mutex */
|
||||
#if 0
|
||||
int
|
||||
SDL_TryLockMutex(SDL_mutex * mutex)
|
||||
{
|
||||
if (mutex == NULL)
|
||||
{
|
||||
SDL_SetError("Passed a NULL mutex.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Not yet implemented.
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Lock the mutex */
|
||||
int
|
||||
SDL_LockMutex(SDL_mutex * mutex)
|
||||
|
@ -89,7 +105,7 @@ SDL_LockMutex(SDL_mutex * mutex)
|
|||
|
||||
/* Unlock the mutex */
|
||||
int
|
||||
SDL_mutexV(SDL_mutex * mutex)
|
||||
SDL_UnlockMutex(SDL_mutex * mutex)
|
||||
{
|
||||
if ( mutex == NULL )
|
||||
{
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
/* An implementation of semaphores using mutexes and condition variables */
|
||||
/* An implementation of semaphores using the Symbian API. */
|
||||
|
||||
#include <e32std.h>
|
||||
|
||||
|
|
|
@ -128,19 +128,6 @@ SDL_SYS_DetachThread(SDL_Thread * thread)
|
|||
return;
|
||||
}
|
||||
|
||||
/* WARNING: This function is really a last resort.
|
||||
* Threads should be signaled and then exit by themselves.
|
||||
* TerminateThread() doesn't perform stack and DLL cleanup.
|
||||
*/
|
||||
void
|
||||
SDL_SYS_KillThread(SDL_Thread *thread)
|
||||
{
|
||||
RThread rthread;
|
||||
rthread.SetHandle(thread->handle);
|
||||
rthread.Kill(0);
|
||||
rthread.Close();
|
||||
}
|
||||
|
||||
#endif /* SDL_THREAD_NGAGE */
|
||||
|
||||
/* vim: ts=4 sw=4
|
||||
|
|
|
@ -113,7 +113,7 @@ static SDL_Scancode ConvertScancode(_THIS, int key)
|
|||
keycode = SDLK_ASTERISK;
|
||||
break;
|
||||
case EStdKeyHash: // Hash
|
||||
keycode = SDLK_SLASH;
|
||||
keycode = SDLK_HASH;
|
||||
break;
|
||||
case EStdKeyDevice0: // Left softkey
|
||||
keycode = SDLK_SOFTLEFT;
|
||||
|
@ -121,14 +121,14 @@ static SDL_Scancode ConvertScancode(_THIS, int key)
|
|||
case EStdKeyDevice1: // Right softkey
|
||||
keycode = SDLK_SOFTRIGHT;
|
||||
break;
|
||||
case EStdKeyApplication0: // Green softkey
|
||||
case EStdKeyApplication0: // Call softkey
|
||||
keycode = SDLK_CALL;
|
||||
break;
|
||||
case EStdKeyApplication1: // Red softkey
|
||||
case EStdKeyApplication1: // End call softkey
|
||||
keycode = SDLK_ENDCALL;
|
||||
break;
|
||||
case EStdKeyDevice3: // Middle softkey
|
||||
keycode = SDLK_RETURN;
|
||||
keycode = SDLK_SELECT;
|
||||
break;
|
||||
case EStdKeyUpArrow: // Up arrow
|
||||
keycode = SDLK_UP;
|
||||
|
@ -166,7 +166,7 @@ int HandleWsEvent(_THIS, const TWsEvent& aWsEvent)
|
|||
case EEventFocusGained: /* SDL window got focus */
|
||||
phdata->NGAGE_IsWindowFocused = ETrue;
|
||||
/* Draw window background and screen buffer */
|
||||
DisableKeyBlocking(_this); //Markus: guess why :-)
|
||||
DisableKeyBlocking(_this);
|
||||
RedrawWindowL(_this);
|
||||
break;
|
||||
case EEventFocusLost: /* SDL window lost focus */
|
||||
|
|
|
@ -106,11 +106,16 @@ int SDL_NGAGE_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * forma
|
|||
{
|
||||
phdata->NGAGE_FrameBuffer += 32;
|
||||
}
|
||||
/*if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 12)
|
||||
phdata->NGAGE_FrameBuffer += 16 * 2;
|
||||
if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 16)
|
||||
phdata->NGAGE_FrameBuffer += 16 * 2;
|
||||
*/
|
||||
#if 0
|
||||
if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 12)
|
||||
{
|
||||
phdata->NGAGE_FrameBuffer += 16 * 2;
|
||||
}
|
||||
if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 16)
|
||||
{
|
||||
phdata->NGAGE_FrameBuffer += 16 * 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Get draw device for updating the screen
|
||||
TScreenInfoV01 screenInfo2;
|
||||
|
@ -367,11 +372,13 @@ void DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
|
|||
|
||||
TUint16* screenBuffer = (TUint16*)phdata->NGAGE_FrameBuffer;
|
||||
|
||||
/*if (phdata->NGAGE_ScreenOrientation == CFbsBitGc::EGraphicsOrientationRotated270)
|
||||
#if 0
|
||||
if (phdata->NGAGE_ScreenOrientation == CFbsBitGc::EGraphicsOrientationRotated270)
|
||||
{
|
||||
// ...
|
||||
}
|
||||
else */
|
||||
else
|
||||
#endif
|
||||
{
|
||||
DirectDraw(_this, numrects, rects, screenBuffer);
|
||||
}
|
||||
|
@ -385,7 +392,7 @@ void DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
|
|||
TInt aBy = rects[i].h;
|
||||
TRect rect2 = TRect(aAx, aAy, aBx, aBy);
|
||||
|
||||
phdata->NGAGE_DrawDevice->UpdateRegion(rect2); /* Should we update rects parameter area only?? */
|
||||
phdata->NGAGE_DrawDevice->UpdateRegion(rect2); /* Should we update rects parameter area only? */
|
||||
phdata->NGAGE_DrawDevice->Update();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue