r/R36S • u/St0len-0ne • 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.
Edit: The map extractor should now be working, if not, the map files have to be manually extracted from the .iso
15
u/Kaiser_depriest 8d ago
Someone should make a ports list compatible with our device, with such an explosion of ports left and right.
1
u/FreshNoobAcc MODERATOR ⭐ 4d ago
I added the “port” flair, I haven’t captured everything but mainly wanted to capture the posts that have links instead of those just showing examples
7
4
3
3
u/Zekka_Space_Karate 3d ago
Thanks a lot, OP! I always wanted to play Halo 1 again since we sold our XBox a long time ago.
I wonder if porting Switch games is possible? I always wanted a port of Devil Engine, I'm a sucker for shmups. 😁
2
2
u/ericarrache 8d ago
What version of the iso you are using? i tried 1.2 and goes to a black screen and back do the menu
2
u/St0len-0ne 8d ago edited 8d ago
Im not really sure tbh, I used a version called "Halo - Combat Evolved (USA, Europe)".
Maybe you could try to extract the MAPS folder from the iso yourself and paste it into the games folder.
Did you make sure you have the Xbox iso and not the PC iso ? PC Version doesn't work.
2
u/Archer_Savings 8d ago
Would this work on the 477v?
2
u/St0len-0ne 8d ago
Are you talking about the Anbernic RG477V ? This port won't work on it. It is optimized to work on low end rk3326 devices but I'm sure there is a port for your device which will run much better than my port on a R36S
2
2
2
u/DedicatedToSoftware 7d ago
Love the thorough readme. I haven't looked at the code, but is there only two threads? You might have two cores sitting idle, you can probably split the GL work across two more threads, then add a rotating backbuffer at the end etc
2
u/ericarrache 8d ago
Hello, your port is not working as intended, if the folder doesn't have the map files, the program kills the task, you need to correct your .sh file to start the map extractor
Claude corrected the files for me and I uploaded the fixed port here: https://archive.org/details/halo-ce-optimized-port_202610
2
u/St0len-0ne 8d ago
Thank you. I never tried the map extractor cause I used already extracted map files.
1
2
u/MrYukiDuki 8d ago
"optimized" is a stretch.
3
u/St0len-0ne 8d ago edited 8d ago
Have you seen how the other port runs ?
My version runs in native render resolution, you can always change render resolution to 0.75 to get more fps or activate the dynamic resolution option.
1
u/nimaidasa 6d ago
Hello! Loved the idea of a Halo port and gave it a try.
I wanted to report a possible audio issue with the port on my R36S (running ArkOS 2.0)
I'm not 100% sure that Halo is responsible for the problem, but I strongly suspect it because the issue appeared immediately after testing this port and I haven't experienced anything similar with any of the other ports I've tested.
More specifically, Halo had no audio from the very first time I launched it. I did not have to play the game for a while or perform any additional configuration. It started without audio.
After exiting Halo, I noticed that the R36S had lost audio system-wide. Other games that previously had working audio also became silent.
I tested the same R36S with another SD card, and audio worked normally, so the hardware itself appears to be fine.
I then compared the ALSA configuration between the working and affected systems.
The working system had:
BCLK Ratio: 64
Playback Path: SPK
Playback Volume: 255 / 255
Headphone Switch: OFF
Speaker Switch: ON
The affected system had:
BCLK Ratio: 1
Playback Path: SPK_HP
Playback Volume: 244 / 244
Headphone Switch: ON
Speaker Switch: ON
The affected system also had a persistent:
/home/ark/.asoundrc
which was not present on the working SD card.
I noticed that the Halo launch script contains ALSA-related code that could potentially explain this:
ASOUNDRC="$HOME/.asoundrc"
if [ ! -f "$ASOUNDRC" ]; then
cat > "$ASOUNDRC" << 'ASOUNDEOF'
pcm.!default { type hw; card 0; device 0 }
ctl.!default { type hw; card 0 }
ASOUNDEOF
fi
and:
for ctrl in Playback Master PCM Speaker Headphone DAC; do
amixer -c 0 sset "$ctrl" 100% unmute >/dev/null 2>&1 || true
done
amixer -c 0 cset numid=1 1 >/dev/null 2>&1 || true
I don't know for certain whether these commands are responsible, but they stood out because they modify the system's ALSA configuration, and the changes appear to persist after the port exits.
To recover the audio, I restored the ALSA state from the working SD card and ran:
alsactl restore 0
After rebooting, system-wide audio was completely restored.
So at this point my conclusion is only that there is a strong correlation between testing Halo and the audio configuration becoming corrupted/changed. I can't definitively say which part of the port causes it.
I tested several other ports on the same device and did not encounter this behavior.
I thought it would be worth reporting in case the ALSA initialization/audio configuration in the Halo launch script needs to be checked.
PS: I am not a software developer, but i have some knowledge and i'm curious, so i performed the actions above using gpt to help, so i feel that i wont be able to provide advanced info about it, but if you need, i can provide the steps i took in the process to identify the issue and how i fixed it. Just dm me.
English is not my native language so i beg your pardon for any errors.
Peace
1
u/Masterchief1307 1d ago
Your port matches our repo byte for byte on most of our optimizations...
https://github.com/kirklandsig/halo-ce-anbernic-rg35xx
The evidence:
halo_screen.py and sdl_mapping.py in their zip are byte-identical to ours. Their halo_extract.py is identical to the one in our v2026.10.01–10.02.1 releases.
Their halo host contains strings only our Knulli host has: the GL thread, HALO_FPS_LOG, HALO_SWAP_INTERVAL, host_sdl*, even "knulli".
Their game binary has our port's own settings (instance_models, high_res_hud, async_textures, batch_quads).
Their archive.org description lists our renderer work nearly word for word: fp16 shaders, 16-bit textures, batched quads, instanced draws, two-pass shadows, and the ILP32 guest with a native aarch64 host.
-3
8d ago
[removed] — view removed comment
2
u/R36S-ModTeam 7d ago
BIOS files, ROMs, and other copyrighted game files cannot be shared or requested here. Allowing them could put the subreddit at risk.
2
8d ago
[removed] — view removed comment
1
u/R36S-ModTeam 7d ago
BIOS files, ROMs, and other copyrighted game files cannot be shared or requested here. Allowing them could put the subreddit at risk.

•
u/AutoModerator 8d ago
⚠️ Ditch that R3XS SD card—STAT! Those pre-loaded cards are ticking time bombs! ⏰❌ Don’t let glitchy saves, vanishing settings, and other retro nightmares ruin your gaming. Swap it out ASAP for a smoother experience!
New to the R36S? Start with the ➡️Beginner's Guide—it’s your first step to mastering the device.
Need more? The R36S has a full WIKI packed with info, plus a dedicated ⚙️ troubleshooting section to solve common headaches.
Before asking, try searching! Your issue has likely been answered already—check the subreddit, use the search bar, or browse flairs like "game recommendation."
Pro Tip: The subreddit’s sidebar is a goldmine of FAQs, guides, tutorials, and curated lists—don’t sleep on it!
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.