Nokia N-Gage

SDL port for the Nokia N-Gage Homebrew toolchain contributed by:

- Michael Fitzmayer
- Anonymous Maarten

Many thanks to:

- icculus and slouken for always making room for us, even when we show up in 2025 still waving the N-Gage flag.
- The Nokia N-Gage Discord community who keeps the platform alive.
- The staff and supporters of the Suomen pelimuseo, and to Heikki Jungmann, for their ongoing love and dedication for the Nokia N-Gage – you guys are awesome!

# History

When SDL support was discontinued due to the lack of C99 support at the time, this version was rebuilt from the ground up after resolving the compiler issues.

In contrast to the earlier SDL2 port, this version features a dedicated rendering backend and a functional, albeit limited, audio interface. Support for the software renderer has been removed.

The outcome is a significantly leaner and more efficient SDL port, which we hope will breathe new life into this beloved yet obscure platform.

# To the Stubborn Legends of the DC Scene

This port is lovingly dedicated to the ever-nostalgic Dreamcast homebrew scene – because if we managed to pull this off for the N-Gage (yes, the N-Gage), surely you guys can stop clinging to SDL2 like it's a rare Shenmue prototype and finally make the leap to SDL3. It's 2025, not 1999 – and let's be honest, you're rocking a state-of-the-art C23 compiler. The irony writes itself.

# Existing Issues and Limitations

- For now, the new SDL3 main callbacks are not optional and must be used. This is important as the callbacks are optional on other platforms.
- If the application is put in the background while sound is playing, some of the audio is looped until the app is back in focus.
- It is recommended initialising SDLs audio sub-system even when it is not required. The backend is started at a higher level. Initialising SDLs audio sub-system ensures that the backend is properly deinitialised.
- Because the audio sample rate can change during phone calls, the sample rate is currently fixed at 8kHz to ensure stable behavior. Although dynamically adjusting the sample rate is theoretically possible, the current implementation doesn't support it yet. This limitation is expected to be resolved in a future update.
- Dependency tracking is currently non-functional.