Half‑Life at 30 FPS on a 2007 Nokia N95 shows legacy PC games can still run on legacy phones
#Regulation

Half‑Life at 30 FPS on a 2007 Nokia N95 shows legacy PC games can still run on legacy phones

Chips Reporter
4 min read

Argentine developer Dante Leoncini got the original Half‑Life to run at 30 FPS on a Nokia N95, leveraging the phone’s dual‑core ARM11 OMAP 2420 and PowerVR MBX GPU. The achievement highlights how modest ARM 11 hardware can still meet the minimum specs of late‑90s PC titles, while also exposing the bottlenecks that keep older smartphones from fully matching early‑PC performance.

Announcement

Argentine programmer Dante Leoncini announced on X that he has a working port of Half‑Life (1998) running at 30 FPS on a Nokia N95. The phone, launched in 2007, sports a 332 MHz dual‑core Texas Instruments OMAP 2420, 64 MB of RAM (or 128 MB on the later 8 GB model), and a PowerVR MBX 3D accelerator. Leoncini also added mouse and keyboard support, and says the remaining slowdowns have a known cause that he is now fixing.

Half-Life on a Nokia N95

Technical specifications and why the N95 can host a 1998 PC game

Component Original Half‑Life minimum (1998) Nokia N95 (2007)
CPU 133 MHz Intel Pentium (≈ 0.13 GHz) 332 MHz dual‑core ARM11 (≈ 0.33 GHz per core)
RAM 24 MB 64 MB (standard) / 128 MB (8 GB variant)
GPU Software rasteriser (no dedicated GPU) PowerVR MBX (≈ 3‑4 MPolys/s)
Storage 200 MB HDD 8 GB/16 GB flash
OS Windows 95/98 Symbian OS 9.2, S60 3rd Edition

The N95 clears the Half‑Life paper spec on every count, but the CPU architecture is the key differentiator. The original game was compiled for x86; the N95 runs ARM11 code, so a native Symbian build is required rather than simple binary emulation. Leoncini used the open‑source Xash3D engine as a base – the same engine that powers Half‑Life ports on Android, Raspberry Pi, and Meta Quest – and cross‑compiled it for the ARM v5 instruction set used by the OMAP 2420.

Bottlenecks identified

  1. CPU cache size – The ARM11 core has a 16 KB L1 cache, far smaller than the Pentium’s 16 KB L1 + 256 KB L2. Texture uploads and entity updates frequently miss the cache, causing stalls.
  2. Memory bandwidth – Symbian’s memory manager adds latency compared with the flat address space of a 1998 PC. The 64 MB RAM is split between the OS, graphics buffers, and the game, leaving roughly 30 MB for the engine.
  3. GPU driver overhead – The PowerVR MBX driver in Symbian is not optimized for the heavy triangle throughput required by Half‑Life’s static world geometry. The driver inserts extra synchronization points, reducing effective fill‑rate.

Leoncini reports that the dominant slowdown occurs during enemy AI processing, a CPU‑bound task that scales poorly on the dual‑core design because the engine was originally single‑threaded. His upcoming fix involves splitting AI updates across the second core and reducing the frequency of non‑critical physics ticks.

Market and supply‑chain context

While the N95 is long out of production, the port demonstrates a broader trend: legacy ARM 11 silicon can still meet the baseline requirements of early 3D titles. This has two immediate implications:

  1. Extended device lifecycles – Enterprises that still field legacy Symbian devices for specialized use‑cases (e.g., rugged field data capture) can now consider adding lightweight 3D visualisation tools without hardware refresh.
  2. Secondary‑market demand for hobbyist ports – The open‑source community often targets low‑cost, widely‑available hardware. A working Half‑Life demo on a $30‑$40 used N95 creates a small but measurable market for similar ports (e.g., Quake III, Doom). Sellers on platforms like eBay see a modest price premium for N95 units with verified 128 MB RAM.

From a supply‑chain perspective, the OMAP 2420 was produced in large volumes for Nokia’s 2007‑2008 flagship line. Excess inventory still circulates in secondary markets, making the chipset an attractive target for hobbyist developers who need a stable, documented silicon base without the lead‑time of newer SoCs.

What this means for future retro‑gaming projects

  • Engine reuse – Xash3D’s modular design means that once a stable ARM v5 build exists, the same code path can be retargeted to other ARM 11 devices (e.g., early Android phones, certain automotive infotainment units).
  • Cross‑core optimisation – Leoncini’s plan to offload AI to the second core is a template for other single‑threaded legacy engines. Even modest dual‑core chips can achieve near‑desktop frame rates with careful workload distribution.
  • Toolchain maturity – The Symbian NDK, though deprecated, still provides a reliable cross‑compiler for ARM v5. Maintaining a small repository of build scripts will lower the barrier for newcomers.

For enthusiasts, the next logical step is to push the port to 60 FPS on the 8 GB N95 variant (128 MB RAM) by enabling texture compression and dynamic resolution scaling. If Leoncini’s fix for the AI bottleneck succeeds, the performance gap between the original 133 MHz Pentium and the 332 MHz OMAP 2420 will shrink further, turning a nostalgic title into a smooth, playable experience on a device that is over 15 years old.


Sources:

Comments

Loading comments...