Back to Provenance

3543

.changelog/3543.md

3.3.12.1 KB
Original Source

Added

  • Disc Serial Extractor Plugin Architecture — Pluggable DiscSerialExtractorPlugin protocol in PVHashing with a DiscSerialExtractorRegistry singleton; built-in plugins for PSX/PS2 (ISO 9660 + SYSTEM.CNF), Sega Saturn/SegaCD/Dreamcast (IP.BIN header), GameCube/Wii (disc ID), BIN+CUE (track resolver), NDS ROM header, M3U multi-disc playlists, Dreamcast GDI format, and CHD v5 uncompressed archives.
  • M3UDiscSerialPlugin — Reads .m3u multi-disc playlists and delegates serial extraction to the registry for the first listed disc image.
  • GdiDiscSerialPlugin — Parses Dreamcast GDI disc listings, locates the high-density area track, and extracts the Dreamcast product code via SegaDiscSerialPlugin.
  • ChdDiscSerialPlugin — Recognises MAME CHD v5 archives; extracts serials from uncompressed CHDs by reading sector 0 (Sega IP.BIN) and sector 16 (ISO 9660 PVD) directly; logs a clear message for compressed CHDs pending libchdr integration.
  • WIA/RVZ support in GameCubeDiscSerialPlugin — Reads the uncompressed disc header (game code + maker code) stored at offset 0x54 in Dolphin/RetroArch WIA and RVZ files without any decompression.
  • Data.loadBE32 / Data.loadBE64 — Big-endian integer helpers added to Data+DiscSerial for CHD header parsing.

Fixed

  • PSX BIN+CUE serial extractionBinCueDiscSerialPlugin no longer skips ISODiscSerialPlugin when the data track is a .bin file (the extension check was incorrectly gating the ISO extractor, causing all PSX CUE+BIN images to return nil).
  • WBFS magic detectionGameCubeDiscSerialPlugin now recognises WBFS container files by their "WBFS" magic bytes at offset 0 (previously the GC/Wii magic check at offsets 0x18/0x1C always failed for WBFS files, returning nil).
  • Linux Data? returnDiscSerialExtractorRegistry.readHeader now correctly handles the Data? return of FileHandle.read(upToCount:) on Linux.
  • N64ROMNormalizer Linux build — Added #if canImport(CryptoKit) guard so the module compiles on Linux using swift-crypto instead of the Apple-only CryptoKit framework.