414 karma · joined December 9, 2021
C source needs to get compiled on every platform reachable - that is a must :)
First step was the full reverse to assembler, second step is to convert the assembler to binary equal compiled C code, all this still on DOS until no assembler code is left, then the porting to Linux,Windows will start
Reversing tends to bring in new bugs and its not easy to find all bugs in such old and reversed code - but so far everything seems to work
try finding open bugs if you got version 451.03 of F-15 around combined with Dosbox or a real DOS
find latest DOS release here: https://github.com/neuviemeporte/f15se2-re/releases
the f15_se2-*.zip file contains the replacement executables for the DOS game
The airforce needs YOU!
or Ghidra - but the DOS/16bit support is sometimes lacky - but the decompiler is builtin
here is a list of articles to read: https://forum.stunts.hu/index.php?topic=4287.0
Blog: https://marnetto.net/2026/01/27/camel
Youtube: https://www.youtube.com/watch?v=AF3stJfcK8A
Forum-Announcement: https://forum.stunts.hu/index.php?topic=4404.msg100046#msg10...
former SuperSight Blogs:
Part 1: https://marnetto.net/2025/02/20/broderbund-stunts-1.html
Part 2: https://marnetto.net/2025/08/08/broderbund-stunts-2.html
Part 3: https://marnetto.net/2025/08/13/broderbund-stunts-3.html
During the build, build.rs uses rustc_codegen_nvvm to compile the GPU kernel to PTX.
The resulting PTX is embedded into the CPU binary as static data.
The host code is compiled normally.its to ease the process of rewriting assembler code into high level code by having a highlevel-assembler-code in between
Spice86 is not intended for Binary exact reversing, like with https://www.scottsmitelli.com/projects/cosmore/ or Duke Nukem, ZZT or F15 Eeagle reversing project - these are using the same compiler and try to replicate every byte of the original exe - to prevent any reversing bugs at first - but this is the hardest form of reversing and takes easily years of hard work
-there is sometimes not a single statical exe (that means all code inside) but overlays(DOS like DLLs) or serveral other ways of loading code at runtime (example for sound/gfx-drivers) - DOS allows technicaly nearly everything so everything is done in games :)
-many game loaders combine code/data parts of a game in memory - for keeping floppy releases smaller
-self modifying code, also hard to disassemble statically with Gidrah/IDA
-good old segment/offset 16bit realmode games - a complete different beast compare to 32bit linear DOS games (Ghidra isn't very good at this, IDA is much much better)
some examples:
the Stunts loader combines several (in itself non valid) files in memory to create a exe (the single files are packed and the result in exe in memory is also packed) - not that easy to static disassemble something like that
Alpha Waves also got an loader and self modifying code that is not easy to reverse statical
its good to have the best disassemblers available and the best (or better dedicated) debuggers around to keep your reversing project shorter then decades :)
there is a team working on enhancing the original Syndicate Wars port (https://gynvael.coldwind.pl/?id=279) by Unavowed and Gynvael Coldwind
github: https://github.com/swfans/swars youtube: https://www.youtube.com/watch?v=eJOnGRdErpg
and nothing beats the legacyness of languages before the java/webtech times - and im not even talking about COBOL
a Rust/WASM based viewer for Dune1 Rooms and a rotateable sandy Globe
Room-Viewer: https://thomas.fach-pedersen.net/dune/room/
Globe: https://thomas.fach-pedersen.net/dune/globe/
all very far from a playable game but having Blade Runner in ScummVM tooked also over a decade of reversing :)
void test(int& y){}
int main() { int* x = nullptr; test(*x); }