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 main
This commit is contained in:
Michael Fitzmayer 2022-05-11 18:31:34 +02:00 committed by GitHub
parent 2c2cbbe664
commit 9b75fa0165
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 41 deletions

View File

@ -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.

View File

@ -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) */

View File

@ -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:

View File

@ -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 )
{

View File

@ -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>

View File

@ -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

View File

@ -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 */

View File

@ -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();
}
}