ISO Container Handling - krcenov/RNS510-Map-Viewer GitHub Wiki

ISO Container Handling

CD_8555.ISO is a UDF + ISO9660 "bridge" disc (2048-byte sectors, standard for DVD data discs of this era).

The broken UDF layer

The UDF layer is broken in the original retail image — not something introduced by editing. The root directory's File Identifier Descriptors fail ECMA-167 validation, though the surrounding UDF structures (anchor volume descriptors, partition/logical volume descriptors, file set descriptor) all parse correctly. Real hardware and Windows Explorer both read this disc via its ISO9660 tree, not UDF — UDF is vestigial on this disc family.

Reading and writing

rns510_iso.py (project root):

  • open_tolerant(path) — opens the ISO with pycdlib, tolerating the broken UDF tree via a monkeypatch that treats the first unparsable File Identifier Descriptor as end-of-directory padding instead of raising.
  • strip_udf(iso) — removes UDF state before writing, producing a clean, standard ISO9660-only image.

Round-trip verified byte-for-byte (SHA256 match) on the 590MB eeu.rd file when unmodified. Full 6.48GB open+write takes ~11 seconds.

No checksum, hash, or signing mechanism exists anywhere on the disc — the official disc-mastering script (config/create_cd) is just mkdir/cp commands. The only real risk from editing is internal data-consistency (record counts, cross-reference indices), not any copy-protection gate.

pycdlib gotcha

Use update_file_contents_fp(fp, length, iso_path=...) (pycdlib 1.20+) to replace a file's content with a different size — no need for a remove+re-add dance.

Deploying an edited ISO

The RNS510 doesn't read a map ISO directly from an SD card — a separate, existing, already-verified community tool (maps-tool 2.0.2, GPL/Apache-2.0 Java GUI, not written by this project) handles that. First tested headlessly against CD_8555.ISO, then fully decompiled (a real self-executing JAR — Python's own zipfile opens the .exe directly; cfr + a winget-installed JDK recover real Java source for all ~1,470 of its own classes):

Works unpatched, despite this disc (V17, 2019) being newer than anything in the tool's own documentation (which only lists up to V12/2014) — that's a stale help file, not an actual code restriction. The only real validation gate is a region-code check, a real 4-value enum (EU/EEU/AUNZ/NA), which this disc passes. It builds a MAPS/MAPSDVD folder structure via a straight recursive byte-copy from the ISO, with one real, narrow special case confirmed at the code level: for exactly 2 old disc versions, CD_8048/CD_8049, it rewrites a bundled CONFIG/CREATE_CD file before copying (a real string-transform helper, not a "typo fix") — doesn't trigger on this disc.

The sd_to_hdd_fw.iso bootstrap disc is GENERATED at build time, not a static bundled file — and it silently includes the testmode/ speed-lockout unlock pattern documented on SWL Disc: Boot Chain and Build System, unconditionally, for every user, with no UI toggle anywhere in the app. A bundled ZIP template resource is extracted and combined with one region-matched VIM.WSH file, whose ENTIRE real content is the already-known SetRegDataHex(0x21,...)/SetRegDataHex(0x0B3A,...) pattern fused with the real SD-to-HDD copy shell procedure — the built disc's own DLSCRIPT.TXT runs nothing else. Full writeup, including the template's own real VERSION.TXT tying it directly to an already-analyzed testmode build: the boot-chain page above.

The "compress" feature (strip resources to fit a single-layer DVD) independently confirms, from this completely external tool, 2 filenames already known from disc analysis — POI.DB3 and NA_SIRIUS.DB3 — as exactly what it deletes, plus 2 new ones: POI.DB3N (a real string this tool checks for, never seen on any disc examined here — plausibly a secondary POI variant) and a real static SPEECHRES.XML resource the tool WRITES back after deleting voice packs (not just a plain removal, as its own help.html implies). Its "Maximum Compression" option, gated behind a real preference flag, strips any file whose path contains the literal substring "TPD" — plausibly the real tpd/ folder (the destination-search UI, see config/create_cd and the Disc-Root Subsystems) rather than eeu.tmc specifically, though not byte-verified against an actual disc.

Real-world procedure (from the tool's own help.html): prepare an 8GB+ FAT32 SD card with MAPS/MAPSDVD/test.mp3, burn sd_to_hdd_fw.iso to a blank DVD+R (slow speed, Track-at-Once), then on the unit: insert the SD card (confirm test.mp3 plays), enter Software Upgrade Mode (SETUP + EJECT + MIC/INFO buttons together), insert the firmware DVD, confirm the prompt, wait ~30 min while it copies SD → internal HDD.

This project's own tools stop at producing an edited ISO — run maps-tool separately to prepare the actual SD card. See the Road Editor Tool page for what's solid vs. experimental about the edits themselves.