Reverse-engineered from its PowerPC binary and checked against the original running under emulation: textures byte for byte and every triangle, over 3,600 frames. 25 fps like the plugin; its colour maps and wave images are extracted from its own code; tests/kaleidostrobe_golden.npz was recorded from the original.
22 lines
1.1 KiB
Markdown
22 lines
1.1 KiB
Markdown
# Kaleidostrobe reverse-engineering tools
|
|
|
|
How `lintunes/kaleidostrobe/` was made, and how to check it again. Dev-only:
|
|
needs `pip install capstone unicorn numpy` (never a LinTunes dependency) and
|
|
the original bundle (`KALEIDOSTROBE_BIN`, default
|
|
`~/documents/misc/lil hacky bits/Kaleidostrobe.bundle/Contents/MacOS/Kaleidostrobe`).
|
|
|
|
- `macho.py` — Mach-O PPC parser + annotated disassembly
|
|
(`python macho.py _display _checkBeat`): resolves the PIC base, stubs,
|
|
non-lazy pointers and float constants.
|
|
- `emu.py` — the original under Unicorn: imports answered in Python
|
|
(libm, Darwin `rand`, TickCount/Microseconds, Carbon's `pi`), GL calls
|
|
recorded. After adding a hook, `ctl_remove_cache` — Unicorn never applies
|
|
a hook to code it already translated.
|
|
- `plugin.py` — drives `VisualPluginHandler` like iTunes: init, show, vply,
|
|
vrnd.
|
|
- `extract.py OUT.npz` — the colour maps and base wave images
|
|
→ `lintunes/kaleidostrobe/tables.npz`.
|
|
- `golden.py OUT.npz` — `tests/kaleidostrobe_golden.npz`.
|
|
- `compare.py [frames]`, `coverage.py` — the port against the original,
|
|
frame by frame / function by function.
|