Skip to content
View vs-sr-dev's full-sized avatar
  • Italy

Block or report vs-sr-dev

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
vs-sr-dev/README.md

Silicon Relics

Homebrew, ports and preservation research for obscure and failed vintage platforms — the machines that flopped, got cancelled, or were never documented, and so have almost no public technical record.

The goal is concrete: take technical knowledge that exists nowhere else — compiler bugs, hardware register maps, undocumented file formats, emulator internals — and make it publicly verifiable for the people who come after. For several of these platforms, these repositories are the only public documentation of their kind.

Everything below is either original code or documentation. No repository here contains game assets, ROM data or copyrighted content — the tools read media you already own.

Everything here is published as is. This is reverse-engineering work, not a specification: findings are revisited and corrected over time, but nothing in these repositories is guaranteed to be complete or correct, whether or not a given page says so. Where a claim can be checked mechanically, the repository ships the command that checks it — run that rather than trusting the prose.


🕹️ Homebrew

Original software, written from scratch for the target hardware.

Repo Platform What it is
fcf-quest Fairchild Channel F (1976) A JRPG in 4 KiB of cartridge and 64 bytes of RAM, F8 assembly
fcf-bufo Fairchild Channel F (1976) BUFO, a road-and-river crossing game in 2 KiB, F8 assembly
vis-synth Tandy/Memorex VIS (1992) OPL3 polyphonic synth — pad instrument, SMF player, live MIDI from host hardware over a custom MAME bridge
vis-fileviewer Tandy/Memorex VIS (1992) Media browser for photos, OPL3 audio and FLC video, the native Modular Windows way on an 80286
wiiu-crema Wii U Crema — a clean-room GX2/AX engine, benchmarked on real silicon

The Channel F is the constraint that best explains the appeal: a 1976 console with 64 bytes of system RAM, and two complete games written into it.

🔀 Ports & reimplementations

Existing games brought to hardware they were never meant to run on, or rebuilt natively.

Repo Target Source
psx-lba PlayStation Little Big Adventure (1994 DOS engine), at native 640×480
ds-lba Nintendo DS Little Big Adventure — 50 fps on a stock 4 MB DS, with voices, streamed music and a touch panel
wiiu-lba2 Wii U LBA2 / Twinsen's Odyssey from the 1997 Adeline source — completed start-to-finish on real hardware
dc-lba2 Dreamcast LBA2 on KallistiOS — v0.9 alpha, real-hardware boot blocker still open
wiiu-planetblupi Wii U Planet Blupi (Epsitec) — GamePad touch as mouse, runs on Aroma
vis-wolf3d Tandy/Memorex VIS Wolfenstein 3D, Win16 native, OPL3 audio
3do-omf2097 Panasonic 3DO One Must Fall: 2097, built on OpenOMF
pc-mikie portable C Konami's Mikie (1984) statically recompiled from MC6809, verified instruction-by-instruction against MAME
pc-highlander PC Highlander: The Last of the MacLeods (Jaguar CD, 1995) — native reimplementation
pc-rpgmaker3 PC The RPG Maker 3 (PS2) engine — native reimplementation
pc-immercenary PC Immercenary (3DO, 1995) — tooling and docs, port in progress
pc-ragnarokodysseyace PC Ragnarok Odyssey ACE (PS3) — tooling and docs, port in progress

All ports are BYOA — bring your own assets. They need a copy of the game you already own.

📖 Documentation & reverse engineering

Platform research

Three platforms with essentially no prior public reverse-engineering record.

Repo Platform Result
hyperscan-homebrew Mattel HyperScan (2006) — Sunplus S+Core 7, RFID cards, a total commercial flop 16+ reproducible bugs in the unmaintained GCC score-elf backend with verified workarounds; PPU, RFID-NFC and I²C drivers from scratch; the first emulated HyperScan audio in MAME (video)
ngpc-homebrew-notes SNK Neo Geo Pocket Color (1999) — Toshiba TLCS-900/H Verified toolchain and binary inventory, plus the first NGPC↔Dreamcast link-cable bridge ever emulated — retail hardware from 1999 that had never been emulated on either side (homebrew · retail)
pippin-homebrew Bandai Pippin @WORLD (1996) — Apple-licensed PowerPC 603 Upstreamable DingusPPC fixes giving it serial-over-DBDMA, which put the emulated Pippin on the real Internet (ping, and a live page in Netscape), plus a homebrew thin-client browser — and an honest, tcpdump-backed account of the one symptom that turned out not to be the emulator's fault

Game and engine documentation

Format archaeology: containers, sprite codecs, map formats, text systems, and the strata a shipped build accidentally preserves. Each repository carries machine-checkable verification commands, not just prose — the claims can be re-run against the files years from now.

Repo Subject
pc-princeofqin-doc Prince of Qin (秦殇, 2002) and Object Software's "EasyRPG" engine
pc-meridian59-doc Meridian 59 (1996), one of the first graphical MMORPGs — and 30 years of operational strata
pc-dungeonhack-doc Forgotten Realms: Dungeon Hack (1993) and the AESOP/16 engine
pc-wackywheels-doc Wacky Wheels (Apogee, 1994) and its fixed-point pseudo-3D floor renderer
pc-battlebugs-doc Battle Bugs (Sierra/Epyx, 1994) — 800×600 in 16 planar colours, one asset set serving both modes, and a per-bitplane column-major image codec
pc-corridor7-doc Corridor 7: Alien Invasion (Capstone / IntraCorp, 1994) — a licensed Wolfenstein 3-D taken to 256 colours, shipping its levels in TED5's TED5v1.0 editor work file with the map directory linked into the EXE. The MUSE tags date the whole soundtrack to the day, and ten credit sprites hang along a corridor on level 1
pc-hurl-doc H.U.R.L. / Slob Zone 3D (Deep River Publishing, 1995) on Lary Myers' ACK-3D. Levels ship as commented ASCII naming 661 of the game's 684 bitmaps by their original artist file names, and every projectile sits in a sealed room off the edge of the map because the engine allocates nothing at run time. The retail build still holds a level-select switch and an objective system never enabled
pc-mm-doc Might & Magic: Secret of the Inner Sanctum (1987)
pc-sargon5-doc Sargon V: World Class Chess (Mediagenic, 1991) — five files with four different extensions turn out to be one container, whose LZW packs least-significant bit first. One 8-bit asset set drives all four displays, the tutorial lessons are 258-node decision trees whose authoring sources shipped by mistake, and the About box hides a hamster
pc-nitemare3d-doc Nitemare-3D: A House of Horrors (David P. Gray, 1994) — a one-man 256-colour shooter that owes nothing to Wolfenstein: every format is Gray's own and none of it is compressed, because the engine demand-pages its art through a three-tier RAM/XMS/disk cache. An artist's placeholder shipped in the retail data as a wall reading "See file TILES007.PCX"
cdi-ultracdisoccer-doc Ultra CD-i Soccer (Krisalis / Philips Interactive Media, 1997) — a Green Book disc 2.4 % full that compresses nothing, with 10 % of its file system shipped as empty files: three abandoned localisations, palettes real and pictures never drawn. The executable asks for a Sega logo nobody pressed, and the studio put itself in the team database
cdi-origami-doc Origami (EagleVision interactive productions, 1993) — the opposite end of the CD-i format: a disc 98 % full in which 52 sectors out of 326,400 are the file system and the program. Catalogued (En,Fr,De,Nl), it carries five narration languages — the fifth is Japanese — and stores every photograph twice, one per video standard, so 21.7 % of the pressing is video your player never reads
cdi-linkthefacesofevil-doc Link: The Faces of Evil (Animation Magic / Philips Interactive Media, 1993) — the retail build still carries 325 C function names, handing over the architecture of a game whose source was never public. Half the 600 MB disc is deliberately empty, eight stereo music channels run in parallel so switching tunes costs no seek, and each playfield ships two dozen compiled 68000 subroutines
cdi-merlinsapprentice-doc Merlin's Apprentice (Philips Interactive Media of America, 1995) — Cliff Johnson's only CD-i game, pressed with the linker's symbol file still on it: 19,752 bytes nobody references, holding 887 named symbols that give up eight puzzle engines and all 27 puzzles by name, a cheat flag, and a streaming scheduler the error strings call the Traffic Cop. The BOLT asset container is mapped to the byte — 129 groups, 7,703 members, zero chain breaks — and its compressor turns out to manage 1.17:1
cdi-theapprentice-doc The Apprentice (The Vision Factory / Philips, 1994) — the CD-i's best action game, and a CD-i Ready disc: the whole thing hides in the 69,150-sector pregap of track 1, so every ripper reads it as audio and hands it back scrambled. It ships the linker's symbol table (521 named symbols), a 68000 disassembler switched on by a file in the player's NVRAM, and a default high-score table naming twenty people where the credits name three. The soundtrack is pressed twice — 22 Red Book tracks and 22 ADPCM channels, mapped one-to-one, 21 of 22 durations agreeing to a quarter-second — and 714 KB of the Philips bumper is byte-identical to Link's
cdi-platformnotes-doc The shared CD-i platform checklist the five discs above feed into, rather than each forking a copy — sector and Green Book layouts, OS-9 module validation, coding bytes, DYUV, real-time interleave, and the 29 seconds of authoring-system audio that turns up byte-identical on three unrelated discs, two from 1993 and one from 1995
cd32-dragonstone-doc Dragonstone (Core Design, 1995) on the Amiga CD32 — a floppy game pressed onto a disc it fills 3 % of, whose first-stage loader makes no OS call at all: it kills interrupts, drives Akiko directly and walks ISO 9660 by hand. The resident loader still carries the "Insert Disk X" prompt in three languages and a UK keyboard map for a console with no keyboard, and its file table is dimensioned for twelve levels with row four blanked to 0xFFFF — level 4 was cut and nothing else on the disc remembers it. Every directory record is stamped 1 January 1978, the AmigaDOS epoch, so the timestamps are a 26-minute log of the build. The localised text is IBM CP437 on an Amiga, two German files are in a third code page, and sector 21 — outside the file system, pointed at only by the volume descriptor — carries the Commodore trademark banner followed by 876 bytes of unlinked Exec object file, message-port routines and debug symbols intact
cd32-marvinsmarvellousadventure-doc Marvin's Marvellous Adventure (Infernal Byte Systems / 21st Century, 1994/1995) on the Amiga CD32 — Dragonstone's opposite in every respect, and the disc that answers its open question: sector 21 is byte-identical, all three SHA-1s, so the unlinked Exec object file came with Commodore's trademark block rather than from either studio. Nothing on the disc is compressed and nothing was swept. All 64 level files carry a 360-byte editor trailer naming each level's author, its source paths and whatever the designer was thinking (too much levels!, data suxx, kathrin aus h hilf florian aus b), and the unused half of every one still holds the previous level's memory. The CD32 executable has the floppy release's complete disk map compiled in as plain text, next to the volume names and the four-byte magic it checked them with. The Italian text file is named after Berlusconi, the password screen shipped with its placeholder untranslated in four languages, girls.resource and condom.resource sit in the string pool unreferenced, and the executable opens with BETTER DEAD THAN ZNEVB — ROT13, and level 12 is titled THE CLONE. At the root, run by nothing, a directory containing a working AGA rotozoomer, 550 lines of its 68020 source, and a signed note from the programmer inviting whoever finds it to read them
cd32-prey-doc Prey: An Alien Encounter (Almathera / KirkMoreno Multimedia, 1993) on the Amiga CD32 — a 122 MB disc with no audio track at all, whose entire soundtrack is 1,225 files of exactly 61,440 bytes of raw 8-bit PCM: the chunk size is the number the game writes to AUD3LEN, and the period it writes beside it makes those files 63 minutes 40 seconds at 19,705 Hz. The disc corrects two things the CD32 checklist had generalised too early. The Commodore trademark block is not at sector 21 — Prey's is at LBA 6021, because its volume starts at 6019 behind 6,000 empty sectors, and the volume descriptor says so. And /CD32.TM sits in the root as an ordinary file, dated 10 June 1993, referenced by nothing, byte-identical to that sector: Commodore handed developers the trademark block as a file, and that file already contained the 876-byte fragment of Exec's own source that every disc of the format has been carrying ever since. Its game executable has zero references to the custom-chip base address and 448 absolute register writes, so the usual grep scores it as never touching the hardware while it drives all of Paula. First disc here that really uses AGA — eight bitplanes and palettes ECS cannot represent. The intro animation shipped under the filename Test, C/Prod_Prep is Commodore's factory hard-disk formatter on a retail game disc, the sound effects are named in Danish, the executable still asks for two files that are not there, and several frames of the digitised actors still show the videotape timecode burnt into the picture. Documented alongside the 1992 CDTV release of the same game, which is the control disc: 1,201 files are byte-identical across the fourteen months between the two masters, and it falsified two claims made on the CD32 disc alone — a block of "wrong clock" timestamps that turned out to be the real CDTV build date, and a palette test that scored every ECS palette as 24-bit colour. It is also the first non-ISOCD master in the set, and it shows the .TM block is a shared mechanism with a per-console payload: on CDTV it holds cdtv.device by Carl Sassenrath, with no trademark banner anywhere on the disc
cd32-thesperislegacy-doc The Speris Legacy (Binary Emotions / Team 17, 1996) on the Amiga CD32 — a Zelda-clone filling 0.74 % of its disc, and the one that broke the .TM rule the other three established: its trademark block is 22,152 bytes of cdtv.device by Carl Sassenrath, byte for byte the CDTV Prey master's, on a CD32 disc cut three and a half years later — so the block is not console-determined, it is whatever file the person cutting the master fed to ISOCD. 35 of 47 files are Imploder-crunched and the decruncher is 350 bytes of 68000 inside the game, transcribed register-for-register to open all of it: the LEV2 container renders every map and all 266 sprite frames per level, in genuine 24-bit AGA palettes. The manual copy protection is reconstructed rather than described — the 5,950 codes are computed, by a six-coefficient polynomial per table, so all seven printed tables are regenerated from the executable and verified against a scan of the card. The four-floppy release survives whole inside the CD32 build: four assigns to cd0:, every data file still addressed by the floppy it lived on, and the build timestamps reproduce the same grouping independently. All sixteen levels are still named Egyptian World / Tuten Carmens Tomb, Makiah-2.Lev shipped with its BGFX tag corrupted to 42 47 00 65 and works because nothing validates chunk tags, the retail master carries a 68000 crash debugger, floppy save-disk code and a keyboard map, and the title module's sample names still hold the composer's letter to the team and his BBS phone number
cd32-legends-doc Legends (Krisalis Software, 1996) on the Amiga CD32 — a six-floppy A1200 game copied onto a CD that is 89 % full and only 0.72 % game: 28 Red Book tracks over a 4.9 MB data track, with the floppy release's hard-disk installer still on the disc, asking for the 4.7 MB it occupies and offering to format a boot disk in DF0:. The disc reconstructs its own ancestor four ways — six volume assigns, one floppy name compiled into each level, INSERT LEGENDS DISK 5 still in each level's text, and three-language swap prompts — and Legends_Disk4: is claimed by nothing. Every magic-number scan comes back clean and 79 of 111 files are packed anyway, by a container with no magic at all; the decruncher is 201 bytes in the loader and it is Bytekiller, the cruncher Another World used, with the checksum verification taken out. Because the level overlays are crunched hunk files, the front end re-implements LoadSeg in 400 bytes with the decruncher spliced between reading the body and relocating it. Its 34 sprite banks carry no names and the executables name every object in them, one compiled string per level, matching all 34 banks exactly. All 118 timestamps read 1992-03-06, four years before release and three before the console existed. And the credits are digitised photographs of the team — one of whom, Richard Teather, is also the name in the ISO's data-preparer field
cd32-liberation-doc Liberation: Captive II (Byte Engineers / Mindscape, 1994) on the Amiga CD32 — the largest data track on the format, 82,502 sectors, and 91.2 % of it is digitised speech: 1,248 lines recorded twice, stored as bare 8SVX runs with an offset index whose 0xFFFFFFFF entries are the 63 lines nobody recorded. The 3D engine ships as three shared libraries signed (C) Wyvern 1992 — a Blitter renderer, a geometry layer, and a 512-entry sine table with a perspective divide that catches divs.w overflow and halves the scale and retries — and the city's wall surfaces are not textures at all but 10,792 pre-rendered perspective sprites, four banks per file, identical geometry in all 71 files. The game runs three more executables to generate the city, the plot and every conversation, and names byte-identical backup copies of all four as fallbacks. Its boot script mounts a reset-surviving RAM disk and makes it bootable so a reset shows a warning instead of the game. Twelve directory records read 1992-02-05 and the executable's own build stamp says 08-Apr-94, which settles a two-year-early datestamp without a second release to compare against. Akiko is untouched — the best remaining candidate on the format, and the same binary explains why: both CD32-only libraries sit behind one runtime flag. And the disc shipped its text system's source, comments and all, opening with 384 words of notes to translators and the author's phone number, for a localisation that never happened
cd32-platformnotes-doc The shared Amiga CD32 / CDTV platform checklist the seven discs above feed into, so later Amiga CD pipelines extend one copy instead of forking it — disc identification (the system identifier of a CD32 game reads CDTV), the .TM block that belongs to no file, is pointed at only by a field in the volume descriptor, is not always at sector 21 and not always 2,048 bytes, is required for the disc to boot at all, shipped to developers as a file (CD32.TM, CDTV.TM) and holds whatever that file was — not what the console was, three claims here that later discs falsified and that are corrected in place, RNC ProPack, the Imploder and Bytekiller with the argument for lifting a decruncher out of the loader rather than trusting a format description — and the correction that a scan finding no compression magic proves nothing, the AmigaDOS epoch hiding a build log in the directory timestamps, the two greps that say whether a loader touches the OS at all, RNC ProPack method 1 with the bit-reader detail that makes it self-checking, hunk executables, copper lists and interleaved planar bitmaps, and the encodings not to assume
pc-grandiahd-doc GRANDIA HD Remaster — the PSX GPU/SPU/CD libraries reimplemented on D3D11/XAudio2
pc-secretofmana-doc Secret of Mana (2018 PC remake), a PhyreEngine title
pc-ff5-doc FINAL FANTASY V (2015 PC) and the mobile-port fingerprints in the build
pc-fftype0-doc FINAL FANTASY TYPE-0 HD — PSP heritage and the HexaDrive render layer
pc-talesofberseria-doc Tales of Berseria (2017) — container format and obfuscation
snes-talesofphantasia-doc Tales of Phantasia on SNES (1995) and GBA (2003), side by side — one of only two commercial ExHiROM carts, no enhancement chip, and its entire 4 KiB boot page duplicated so the same code runs through either window. The in-house LZSS codec is specified and reimplemented: back-references copied with MVN, the length nibble cancelled arithmetically, and the inner loop carried four times because the block-move opcode encodes its banks immediately. There is no global file table — 99 call sites name their assets with literal bank:offset immediates, and the four sparse directories that do exist cover 147 blocks out of 1089. The 2003 rebuild replaces every layer with Nintendo's stock equivalent yet still inherits a 1 KiB metatile table byte for byte, and 735 bytes of ASCII credit the two programmers who left mid-project to found tri-Ace
ps1-talesofdestiny-doc Tales of Destiny (Namco / Wolf Team, PlayStation 1997) — a disc that hands its file system to the program. ISO 9660 lists 29 files, five of them undifferentiated multi-megabyte blobs, and what divides the 131 MB map archive into 1,315 maps is a 10 KiB array of offset/length pairs compiled into SLPS_011.00; delete the executable and 131 MB of the disc becomes unaddressable. Everything else is stock Sony — TIM, SEQ, VAB, XA, MDEC — so the only format Namco wrote is the compressor, and 6,638 of 6,638 packed blocks decode to exactly the length their own header declares. The entire script, 538,900 Shift-JIS strings, sits inside the map archive, and two developer scene-select menus went to press with it: one offering a fake ending, one carrying a note from one programmer to another — in the current build, talk to the boatman. The naval mini-game still has its frame profiler compiled in, with a rank ladder running SEAMAN to GENERAL and then MONKEY and BROKEN; a \DEBUG.TXT probe still runs on every pressed copy; the stored-block path is wired to the wrong pointer and no block ever takes it; and the pad file's extent names the CD-DA audio track
ps1-talesofeternia-doc Tales of Eternia (Namco / Wolf Team, PlayStation 2000, disc 1 of three) — the title that shows the codec was not reimplemented but recompiled: the first 53 and 50 words of its two decompressors are identical to Destiny's byte for byte, and those prologues carry no address constants for a relocation to change. 21,054 blocks decode, 204.7 MB → 485.9 MB; the stored path that was dead and mis-wired in 1997 is fixed here and used 969 times; five blocks overrun their declared length by exactly one byte, and the console does it too. Half the 178 MB map archive — 90.5 MB, 50.6% — is eight sprite sheets stored about 870 times each, one copy per map, disc space traded for a single seek per load. The whole typeface lives in the executable: 3,426 glyphs, 11×11 at 1bpp, the complete JIS X 0208 level 1 set, right-aligned in an eleven-pixel cell whose 121st bit has nowhere to live. Map 0 is the developer debug room, in Japanese, on the retail disc — party editor, craymel grant, a 2,048-flag switcher, and a note from whoever maintained it to whoever kept filing requests: give me a break already, do it yourselves. The executable still carries a stale copy of the B.D directory, wrong in 1,289 of its 1,290 entries, from the build before that one table moved onto the disc; and 63 MB of uncleared mastering buffers inside the XA files spell out the source tree of the voice authoring — mp\chat.wav\skit.xa\, one path per interleave channel, which is what names all three archives
ps2-talesofdestiny2-doc Tales of Destiny 2 (Namco Tales Studio, PlayStation 2 2002) — the title that carried the 1995 compressor across a console generation. 9,469 of 9,469 blocks decode byte-exactly under the shared reference decoder with no PlayStation 2 branch added, 329 MB → 1,413 MB; the decoder itself could not be the same object this time, because the EE is an R5900, and the measurement says exactly that — 0 identical words against the 2000 build against ~50% of the same opcode sequence, the immediate 4078, the ring in a3 and the eight-wide unroll all held constant. Sixteen files on a 3.23 GB DVD, two of them 95% of it. FILE.FPB has no header at all: its 9,206 members are described by an array compiled into SLPS_251.72 that packs each member's padding into the low six bits of its 64-byte-aligned offset — one u32 for extent and exact length, ending on the archive's size to the byte. The linker left 77 empty marker sections naming every overlay in the game, enough to identify 65 of 70 anonymous members of MIPS code, among them a sound test and a model viewer; the 461 scene bundles are 47.2% copies, ten members stored 461 times each; and all 7,424 TM2@ pictures turn out to be palettes, never images. Riding along is 173 MB of a different, unreleased game — a promo build of Venus & Braves, out eight months later — shipped with 2,923 of its 2,939 files replaced by a single space, its entire build manifest intact, seven of its nine asset directories named after the people who filled them, and one 56 KB animation that escaped the stubbing. It also carries a TLS stack and a hard-coded RPC endpoint for eight IOP modules that are not on the disc — and, decisively, no copy of the codec: two Namco teams, one disc, one console, one year, and only one of them used it
gc-talesofsymphonia-doc Tales of Symphonia on GameCube (2003, two discs) and PlayStation 2 (2004, one disc), side by side — the same game thirteen months apart, with the number of discs as the only variable. The 1995 compressor reaches a big-endian console and does not change: main.dol carries the decoder four times, two routines each linked twice byte for byte, with 4078/4079 as subfic/cmpwi/addi, the ring masked to twelve bits, flags | 0xFF00, and the copy loop unrolled by eight — and the nine-byte block header stays little-endian, four bytes from a big-endian archive count, because the decoder assembles each size one lbz at a time and never had a reason to notice. 487 of 487 blocks decode on each disc under the shared reference decoder with no GameCube branch. Then 2004 breaks a chain unbroken since 1997: on the same R5900 as the 2002 title, the longest identical byte run at any alignment is 6 bytes against that pair's 212 — and not only because the compiler changed, since the dictionary clear became a call to an Emotion Engine quadword bzero with 4,080 where every build from 1997 to 2003 used 4,078, rounded up to divide by sixteen. The two-disc split cost 1,002,806,753 bytes: 1,588 files sit on both discs under the same path with the same bytes, duplication inside one disc is 0.1% and on the single-disc port also 0.1%, so the whole 36.0% across the set exists because there are two spindles — 1.78 GB of distinct content against a miniDVD's 1.46 GB made one disc impossible, and both discs run 95–96% full with their last file ending on the final byte, so there was nothing to trade. And the packer, invisible across four titles, is finally measured: nineteen files repacked from identical input come out with identical block counts and identical unpacked lengths and larger every time, +0.72% to +5.21%. Left behind: a battle archive for Rutee Katrea of Tales of Destiny (1997) dated 2003-02-07, four and a half months before every other one and deleted for the port; ten map files named after members of the team; six of eight relocatable modules nothing can load, one a debug build carrying its assertions and the only build path on either release, ./Btl/Debug/debug; movies called tod2_cut.h4m; forty-five archives wearing a Microsoft Cabinet header no cabinet reader can open but holding the only per-asset timestamps on either disc; nine CVM volumes still named SAMPLE_GAME_TITLE; host0: devkit paths in the retail executable — and a project called top2
tales-blockcodec-doc The shared Tales block codec the carts and discs above feed into, rather than each forking a copy — Wolf Team's in-house LZSS, on the Super Famicom in 1995, on the PlayStation in 1997 and again in 2000, on the PlayStation 2 in 2002, on the GameCube in 2003 and on the PlayStation 2 again in 2004. The same nine-byte header, the same method numbering in its low bits, the same 4 KiB window, and the same run escape with the same two constants: +3 and +19. On the 65816 those fall out of MVN, which transfers A + 1 bytes; the MIPS decoder has no MVN, no reason to be off by two, and is off by two anyway. What 1997 added is a 4 KiB ring preloaded with 3,840 bytes of synthetic tile-shaped data before a single token is read — and instrumenting all 20,085 compressed blocks of the 2000 disc shows where the packer actually goes: 72.9% of its reads of that untouched dictionary come from the plain zeroed tail, from 36 addresses out of 256, and not one block ever reads a byte the decoder never initialised. By 2000 it is no longer merely the same format: 212 bytes of the decoder are the same object code. By 2002 byte equality is off the table — a new CPU — and what survives instead is the source: half the opcode sequence and every constant a compiler does not get to choose. By 2003 it survives a change of byte order as well, on a PowerPC whose containers are big-endian while the codec's own header stays little-endian, because nothing in it was ever read as a word. And in 2004 the chain finally breaks: on the same CPU as 2002 the longest identical run is 6 bytes, and the dictionary clear is a hand edit for the Emotion Engine — 4,080 instead of 4,078. The packer surfaces at the same moment: nineteen files packed twice from one input, a year apart, segmented identically both times and 2.49% larger the second. The 2003 GBA rebuild of Phantasia does not use it at all, and neither does Venus & Braves, which shares a disc with the 2002 title — the codec followed the codebase, not the company, the console or the series — and one reference decoder reproduces every dialect byte for byte, 1,089 blocks on the cartridge and 38,270 across six disc images, without a line changed for any of them
pc-infiniteundiscovery Infinite Undiscovery (tri-Ace, Xbox 360) and the ASKA engine
android-talesofcrestoria-doc Tales of Crestoria (Bandai Namco, 2020) — a dead gacha running on tri-Ace's ASKA, twelve years after the Xbox 360: the same SLZ container with Zstandard bolted on, the same texture header field-for-field in little-endian, Direct3D 9 shader profiles still sitting inside a GLES3 cache — and a shipped native library with 99.7% of its code zeroed out
wii-thelaststory-re The Last Story (Wii) and the LastWorld engine
snes-rudranohihou-re Rudra no Hihou (SNES, Square) — the Japanese text system

🧰 Also

Repo What it is
chiproll Browser piano roll for chip music — NES, Atari TIA and POKEY. No install, no build, no server
pc-mediacatalog .NET 8 / WPF media cataloguer — perceptual-fingerprint duplicate detection across re-encodes
silicon-relics The wider Silicon Relics codex — a showcase site covering work beyond what is published here

Reading the repository names

<platform>-<subject>, where the platform is the target, not the origin. So psx-lba is Little Big Adventure running on PlayStation, and pc-mikie is an arcade game brought to PC.

Two suffixes narrow it further: -doc is documentation only, and -re is a reverse-engineering devlog. Anything without a suffix ships runnable code.

The wider Silicon Relics project

These repositories are part of a larger, ongoing body of cross-console work — an analog-horror ARG series and the homebrew and reverse-engineering that underpins it, spanning many years and many forgotten machines. Which platforms, and in what order, is something the series leaves for players to discover.

This is where that technical work surfaces publicly first.

On method and attribution

This is a human + LLM collaboration, stated openly because the honesty is the point. Claude acts as a technical bridge: I bring decades of domain knowledge and direction — knowing these platforms, recognising when a result is a genuine first, and deciding where it's worth digging — and Claude provides implementation across architectures I could not otherwise approach: the drivers, the emulator patches, the disassembly and log forensics, the documentation. Neither side reaches these results alone.

I'm a professional technical translator, a field heavily affected by AI, and I hold a deliberate position about it: AI used for net-new work that displaces no one — reverse-engineering an abandoned console that nobody else was working on — is the case worth defending. Visibility of the collaboration is part of that argument, not a disclaimer.

@vs-sr-dev

Popular repositories Loading

  1. dc-lba2 dc-lba2 Public

    Forked from LBALab/lba2-classic-community

    Sega Dreamcast port (KallistiOS) of the original 1997 Adeline source of Little Big Adventure 2 / Twinsen's Odyssey. V0.9 alpha — only the opening + first-island transitions are validated on Flycast…

    C++ 2

  2. pc-mediacatalog pc-mediacatalog Public

    C# 2

  3. vis-wolf3d vis-wolf3d Public

    Homebrew port of Wolfenstein 3D to the Tandy/Memorex Video Information System (VIS, 1992) — Win16 native, OPL3 audio, MAME-tested

    C 1

  4. vis-synth vis-synth Public

    OPL3 polyphonic synth for the Tandy/Memorex VIS (1992) — pad-driven instrument, SMF MIDI file player, and live MIDI from host hardware via custom MAME bridge

    C 1

  5. chiproll chiproll Public

    Browser-based piano roll for chip music. NES and Atari TIA, no install.

    JavaScript 1

  6. 3do-omf2097 3do-omf2097 Public

    A playable port of One Must Fall: 2097 to the Panasonic/3DO, built on OpenOMF

    C 1