Update to my native Halo CE port for H700 handhelds: online play + coop with PCs, a server browser, and a PortMaster zip

Update to my native Halo CE port for H700 handhelds: online play + coop with PCs, a server browser, and a PortMaster zip

Update (Oct 7, v2026.10.07): muOS support and a round of fixes.

  • muOS works (with the PortMaster zip). Earlier releases crashed there in menus, at respawn and in the pause menu: muOS's SDL takes over the crash signals the port uses to track the game's writes to its textures. Tested on muOS 2601 Jacaranda on an RG35XX H, offline and online.
  • Marines no longer turn into stick figures after a level change. In a level loaded after another one (Silent Cartographer after Pillar of Autumn, say), marines' legs could show up as thin black lines, whole bodies could vanish with just their guns floating, and some parts stretched into long spikes. The GPU driver could overwrite part of the new level's model data with the previous level's. This had been there since at least v2026.10.02. The beach in Silent Cartographer sometimes losing its sand and water after another level was very likely the same bug; it hasn't happened since.
  • Music no longer cuts out for good after a load. If a load or a long hitch let the music run out, the mixer never picked it back up.
  • Server browser at 60 fps (it was 18–26). Text was drawn one character at a time; now runs of characters are drawn together.
  • Smoother firefights on muOS. Unloading into shielded enemies could drop muOS to 9–23 fps; the sound mixer was the bottleneck. The Silent Cartographer beach battle now holds 33–46 there, and 45–58 on Knulli.
  • Less memory over long sessions. Each level's shaders used to stay loaded for the whole session; now they're unloaded once unused. After six levels, about 50 MB more is free.
  • A fresh install compiles shaders faster (two compiler threads), so a level's first frames are smoother.

Speed on an RG35XX H, muOS and Knulli alike: Pillar of Autumn 55–57 fps, the Silent Cartographer beach battle 38–45.

Updating: unzip the new Knulli zip over the old files, or install the new PortMaster zip. Your maps/, save/ and config.toml are kept, and so are checkpoints from v2026.10.06.1.

Download: https://github.com/kirklandsig/halo-ce-anbernic-rg35xx/releases/latest

=============

TL;DR: Five days ago I posted Halo: Combat Evolved running natively on the Anbernic RG35XX H. It now plays online. I opened the server browser on the handheld, joined a public 23-player Slayer game on Blood Gulch, and it ran at 50–60 fps (mostly 58–60). No emulation, open source, bring your own Xbox disc.

https://preview.redd.it/jxsf526uyuth1.png?width=640&format=png&auto=webp&s=d33cbdb68b917c6fcb05440d344b1b2dc63d14cc

What's new

  • Online play, from the OpenCE decompilation project (formerly halo-ce-universal), which this port is built on:
    • a server browser of public internet games;
    • hosting and joining, over the internet or the local network (system link);
    • campaign co-op over the network;
    • the PC version's menus.
  • You play with anyone running the same OpenCE build, on PC or another handheld. Internet play only connects while you're hosting, joining or browsing.
  • A PortMaster zip alongside the Knulli one. The game is now built against an older glibc, so it should load on other H700 firmware too. It's tested on Knulli; muOS should work, but I haven't tested it on a handheld yet, so reports are welcome.
  • Faster than the first post: the Halo (a30) level opening is about 56–58 fps (it was ~55), and the Silent Cartographer beach battle is about 44 (it was ~40). Dynamic resolution keeps heavy scenes smooth, and frame pacing is much better.
  • Reported working on the RG34XX SP too.

https://preview.redd.it/2iquqxq0zuth1.png?width=640&format=png&auto=webp&s=7db161e89560b910182f71e9be2615e27cd70a20

What I've tested and what I haven't

I joined a public internet game and played on Blood Gulch with 22 other players: it connected first time and held 50–60 fps. Hosting from the handheld and online campaign co-op are in this build, but I haven't tried them on the handheld myself yet. If you do, tell me how it goes.

https://preview.redd.it/rw2rwgj4zuth1.png?width=640&format=png&auto=webp&s=c7087b4a2ada5bde8ffc4cf181a5c8631e8fef53

Installing or updating

Download the zip for Knulli or PortMaster from the latest release. The first launch extracts the maps from your own Xbox disc image on the handheld. If you're updating, your maps, saves and settings carry over. Two things to know:

  • Checkpoints from older versions can't be loaded (upstream changed the save format). Your profiles and unlocked levels are kept.
  • The first launch takes a little longer while shaders rebuild.

https://preview.redd.it/0ufe1z96zuth1.png?width=640&format=png&auto=webp&s=cef77cefdeab836437990498b833365ae06f388d

Legal

You need your own original Xbox copy of Halo. The repository and releases contain no game files, ISOs, maps or XBEs. It's an unofficial fan project, not affiliated with Microsoft, Bungie or Halo Studios.

Credits

  • OpenCE, whose online play, menus and decompilation this all rests on, and the Halo CE decompilation community (punpckhdq/halo and its forks).
  • The Knulli and PortMaster teams.

Links

Bug reports from other H700 devices (RG35XX Plus/SP/2024, RG40XX, RG CubeXX, RG34XX) are very welcome.

Much of the porting and optimisation was done with Claude Code (an AI coding agent) doing the heavy lifting under my direction; the commits say so too.

reddit.com
u/Masterchief1307 — 9 days ago
▲ 24 r/RG35XX_H+1 crossposts

Halo: Combat Evolved running natively on the Anbernic RG35XX H: no emulation, from 15 fps to ~55 (open source, WIP)

Halo (a30) opening, inside the Pelican: 56 fps (the green number is the frame rate)

TL;DR: Halo: Combat Evolved now runs natively on the Anbernic RG35XX H (and other Allwinner H700 handhelds on Knulli). There's no emulation: no xemu, no Box64, no Wine. It's the community decompilation of the original Xbox game, compiled for ARM64. The first build ran at 15 fps; it's at ~55 in the Halo level's opening now, and I'm chasing a locked 60. Open source; bring your own Xbox disc.

What it is

  • The halo-ce-universal decompilation of the Xbox game (the game's logic rebuilt as C source), compiled as native ARM64 code.
  • A small Linux host for Knulli bridges it to the firmware's own SDL2 and Arm's Mali-G31 OpenGL ES driver. It runs on stock Knulli with nothing extra to install.
  • It launches from Ports like any other port. The first launch extracts the maps from your own disc image.

Where it stands (render scale 0.75: 480x360 upscaled to the 640x480 screen)

Scene fps
Menus 60
Halo (a30), level opening in the Pelican ~55 (53–57, most frames at 60)
343 Guilty Spark (c10), swamp ~44
The Silent Cartographer (b30), beach battle ~40 (35–46)

It's a work in progress, and the goal is 60 everywhere.

How it got from 15 fps to ~55

The H700 has four Cortex-A53 cores and a small Mali-G31 GPU. Two things hurt the most:

  • Arm's driver burns 17–28 µs of CPU on every draw call, and a Halo frame has hundreds of them.
  • The GPU is tile-based, so switching render targets mid-frame makes it write the whole screen out to memory and read it back.

The biggest steps, measured on the device (a30 unless noted):

  1. Clocks. The GPU governor sat at 420 MHz under load. Pinning it at 648 MHz, with the CPU on the performance governor: 15 → 18 fps at native 640x480.
  2. A dedicated GL thread. Every OpenGL call is recorded and replayed on another core, so the game builds the next frame while the driver chews on this one.
  3. Render scale 0.75 and model LOD scaling: about 24–25 fps.
  4. Asynchronous occlusion readback. The game stalled once a frame waiting for the GPU's visibility results (lens flares). Reading them a few frames later took b30 from 23 to 31.
  5. Shadows rebuilt for a tile-based GPU. All shadow textures are drawn in one burst, and the blur is folded into the shader instead of extra render-target switches: 25 → 32.
  6. Vertex shaders only write what the pixel shader reads. Mali can then skip shading the varyings of culled triangles: 32 → 36.
  7. Alpha test dropped where the texture is fully opaque. This keeps Mali's hidden-surface removal working. Together with building the water's bump map at the start of the frame: 36 → 40.
  8. The water's bump map drawn straight into its texture's mip levels instead of copied, because copies between render targets stall the driver: 40 → 49.
  9. Low-level fixes.
    • The game's memcmp was a byte-by-byte C loop eating 6% of the main thread; it now compares 8 bytes at a time.
    • The GL command queue is published in batches.
    • Shader constants are split by how often they change.
    • Result: 49 → ~55.
  10. Instancing. Once draws are sorted, several marines' same body part come one after another. They're now drawn as one instanced draw, with each marine's constants (including armor colours) read per instance. Draw calls per frame fell from ~490 to ~300.

Now the Pelican scene is right at the edge on every front: the game's thread, the GL thread and the GPU are all within about a millisecond of the 16.7 ms a frame that 60 fps needs. The shadows are the biggest remaining cost (about 4–5 fps), mostly the CPU work of finding the ground under each shadow. That's what I'm working on next. That's what I'm working on next. The full history, with every measurement, is in the repo's docs/PERFORMANCE.md, along with notes on what didn't work.

Main menu: a locked 60 fps

The Silent Cartographer beach battle: ~40 fps, the hardest scene so far

343 Guilty Spark swamp: ~44 fps

Legal

You need your own original Xbox copy of Halo. The repository is source code and documentation only: no game files, ISOs, maps, XBEs or prebuilt game binaries. It's an unofficial fan project, not affiliated with Microsoft, Bungie or Halo Studios.

Credits

  • halo-ce-universal and the Halo CE decompilation community (punpckhdq/halo and its forks), who did the real heavy lifting of bringing the game back to source.
  • The Knulli team.

Links

Happy to answer questions, and bug reports from other H700 devices (RG35XX Plus/SP/2024, RG40XX, RG CubeXX) are very welcome!

Much of the porting and optimization was done with Claude Code (an AI coding agent) doing the heavy lifting under my direction; the commits say so too.

reddit.com
u/Masterchief1307 — 14 days ago

Anyone seeing RDS session hosts hang (RDP stuck at "Connecting", logoffs stall) after the September 2026 cumulative updates? (Server 2022 + 2025)

Since installing this month's CUs, KB5122871 on Windows Server 2025 (build 26100.33438) and KB5122882 on Windows Server 2022 (build 20348.5622), every session host in our RDS collection has started hanging in the same way, on the same day, and it had never happened before.

Symptoms once it starts:

  • New RDP connections sit at "Connecting…" and never reach the logon screen (Event 20498 "Remote Desktop Services has taken too long to complete the client connection" in TerminalServices-RemoteConnectionManager/Admin)
  • Existing users can't log off or disconnect cleanly
  • Task Manager on the host hangs (it blocks calling into the Local Session Manager)....pretty much all windows apps start to hang, especially anything to do with Settings
  • Winlogon event 6005 "SessionEnv is taking long time to handle the notification event (Disconnect)"
  • A normal restart hangs too; only a hard reset recovers it, and it comes back later the same day

The problem appears to start with a single session disconnect/reconnect that never completes, after which everything that touches session state on that host queues up behind it. Only reboots clear it. Microsoft's release notes for both KBs list an RDS change ("improves Remote Desktop audio redirection") and no known issues.

Environment: mixed Server 2022/2025 session-host collection, VMware VMs, RD Connection Broker, MFA at logon, third-party endpoint protection. All hosts were stable on the August CUs.

We're currently testing a rollback of the September CU on part of the collection with one host left updated as a control. Has anyone else seen this after KB5122871 / KB5122882, or found a Microsoft acknowledgment? Would appreciate hearing whether rolling back resolved it for you.

reddit.com
u/Masterchief1307 — 1 month ago

PSA: Outlook (classic) build 16.0.20228.20190 (Version 2607, Aug 11 update) is replacing signature images with blank placeholder PNGs, at least on RDS hosts with redirected AppData

Spent this morning chasing "signature images stopped working all of a sudden" that looked for all the world like a mail flow problem (we'd just cut over to a new mail gateway a couple of weeks ago, so naturally that got the blame first). It wasn't. Posting in case it saves someone the same rabbit hole.

Starting over the weekend, every email sent from our terminal servers had blank signature images.....company logo, headshots, badges, all gone. Recipients on Outlook, OWA, external, didn't matter. Outlook on a regular workstation (older build) was fine.

So we pulled the raw MIME of affected messages. The image parts were still there, still cid:-referenced correctly, still multipart/related but the PNGs themselves were garbage: the logo came through as a 216-byte, 1-colour, fully transparent PNG at exactly the HTML display size (337×112 instead of the real 450×150 / 46 KB file), and a 292 KB JPEG headshot became a 402-byte RGBA PNG. Every one of them had tEXt Software: Microsoft Office in it. So Outlook/Word was generating placeholders at compose time because it couldn't (or wouldn't) load the signature image files. Nothing in transport touched them.

Our env has 4 RDS hosts (Server 2022/2025, Office 2024 Retail C2R on the Current channel). Click-to-Run had self updated them from 16.0.20228.20158 → 16.0.20228.20190 at four different times between Thursday night and Sunday morning. On every host, the last message with real signature images was before its update, and the first blank one was after. Windows August CU had gone in days earlier with no effect. Signature source files on the file server were untouched since January.

Possibly relevant: on those hosts AppData\Roaming is folder-redirected to a UNC path, so Outlook resolves %APPDATA%\Microsoft\Signatures\... over SMB. My guess is the new build blocks/fails image loads from network paths when inserting a signature but I can't prove that part; the working workstation was on an old 2408 build so it doesn't isolate the variable. If anyone on 20228.20190 with local AppData sees the same (or doesn't), I'd love to know.

Fix that worked for us was to just (temp) roll back to the previous build and pin it:

reg add "HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate" /v updatetargetversion /t REG_SZ /d 16.0.20228.20158 /f

"C:\Program Files\Common Files\microsoft shared\ClickToRun\OfficeC2RClient.exe" /update user updatetoversion=16.0.20228.20158 forceappshutdown=true displaylevel=false

forceappshutdown does exactly what it says (kills users' Office apps, no save prompt), it's an ~880 MB full download for a downgrade, and the build flipped about 3 minutes after triggering. First test mail after the rollback had the real 46 KB logo again. Ran it as a one shot SYSTEM scheduled task per host at an agreed time; doing the remaining hosts after hours. Remember to remove the pin once MS ships a fixed build.

Not seeing anything on the Microsoft known issues page for it yet (the May 2026 "Top and Bottom wrap" image bug is a different, alreadyfixed thing).

Anyways, best of luck out there. :P

reddit.com
u/Masterchief1307 — 2 months ago

Batocera SSH + Claude Code

Probably could just as well use Codex too, but man, its been great having Claude SSH into my Batocera box to tinker, optimize and fix things.

I've had a few games give me issues, mainly launching or crashing, and Claude is able to rip through all of the system logs, pinpoint whatever it is, and apply the necessary remediations, all over SSH.

Its also been great at general housekeeping like cleaning up logs/redundant emulator data/caches, fixing scripts, updating configs, etc etc.

Anyways, food for thought. A good tool to have in your arsenal.

https://preview.redd.it/y7ctd5nycodh1.png?width=1905&format=png&auto=webp&s=027068bd7ba595d45673c73ab8c597ba009f2e3c

https://preview.redd.it/cvojiceucodh1.png?width=1891&format=png&auto=webp&s=f11de4777eb23a2e191f2f06b905c889e9f24049

reddit.com
u/Masterchief1307 — 3 months ago

Smart Translator - GPT Realtime Model Integration?

Any way to leverage a ChatGPT Oauth to use the latest GPT real-time model for the most natural cadence translation experience?

reddit.com
u/Masterchief1307 — 5 months ago