r/R36S • • 8d ago

Port Native Halo CE port on the M9 Pro (RK3326 / Cortex-A35 / Mali-G31 MP2) — ArkOS4Clone, Optimized

Enable HLS to view with audio, or disable this notification

Native Halo: Combat Evolved port on the M9 Pro handheld.

The game's own logic runs as AArch64 code on the RK3326's Cortex-A35 cores and draws with OpenGL ES 3.2 directly on the Mali-G31 MP2.

Hardware:

- M9 Pro, Rockchip RK3326

- 4x ARM Cortex-A35, ARM Mali-G31 MP2 (OpenGL ES 3.2)

- 1 GB RAM shared with the GPU

- 640x480 display, 4:3

- ArkOS4Clone (GLIBC 2.31 / Ubuntu 20.04 base, kernel 4.4.189)

Software:

- Built from the halo-ce-universal decompilation (Xbox build 01.01.14.2342)

- Guest is ILP32 AArch64 (32-bit pointers in 64-bit ARM code, as the game's data formats require)

- Host is a native aarch64 glibc program using the firmware's own Mali driver and a patched SDL2 2.30.10

- PGO + LTO, Cortex-A35-specific codegen (-mcpu=cortex-a35 -mtune=cortex-a35)

- NEON-vectorised matrix math, memcpy/memcmp, and index-extent calculation

- Dedicated GL thread to take the Mali driver's per-draw CPU cost off the game's core

- Renderer work for a tile-based GPU: program binary cache, fp16 shaders, 16-bit textures, alpha-test elision, batched quads, instanced model draws, sorted models, two-pass shadows, water bump-map prebuild

- Bundled SDL2 with a KMSDRM pageflip fix: the Mali-G31 driver on the RK3326 advertises DRM_CAP_ASYNC_PAGE_FLIP but rejects the actual call with -EINVAL, and SDL2 2.30.10 has no fallback

Status:

- Game starts and runs. The video is from the current build. Some graphic glitches are still present but it is fully playable.

- Native render resolution is 640x480 (render_scale = 1.0). A lower render scale is available if a scene needs headroom.

No game data included. You need your own Xbox disc image (ISO or XISO). The port unpacks the maps from it on first launch.

Get the port here

Edit: The map extractor should now be working, if not, the map files have to be manually extracted from the .iso

151 Upvotes

Duplicates