Skip to main content

Module sdd1

Module sdd1 

Source
Expand description

The S-DD1 board — Nintendo’s lossless decompression ASIC (Star Ocean, Street Fighter Alpha 2).

Clean-room port of ares’ SDD1 component (ISC, sfc/coprocessor/sdd1/): a Ricoh-style Golomb-code + adaptive-binary-arithmetic entropy decoder that streams decompressed bytes DURING a DMA transfer, not on a plain memory read. There is no chip-ROM dump — the algorithm runs entirely against the cart’s own (compressed) ROM data — so the board is functional the moment the cart loads (docs/adr/0003).

S-DD1 owns its ROM mapping directly (like Super FX / SA-1, not wrapped over a base board): its bank-fold formula differs from plain LoROM/HiROM, and its DMA-decompression hook needs to see the FULL $00-3F,$80-BF:$8000-FFFF + $C0-FF:$0000-FFFF read path uninterrupted.

Bus window (bank:addr):

RegionTarget
$00-3F,$80-BF:$4800,$4801,$4804-$4807control registers ($4802,$4803 fall through to ROM)
$00-3F,$80-BF:$8000-FFFFbanked ROM via the $4804-$4807 MMC registers (plain read, $20-3F/$A0-BF A21 fold when r4805/r4807 bit 7 set)
$C0-FF:$0000-FFFFbanked ROM via MMC, OR a live decompression stream if a DMA channel matching this address is armed (Board::notify_dma_channel is the DMA-address/size snoop; rustysnes-core calls it on every $43n2-$43n6 write)

S-DD1 always uses DMA fixed-address transfer mode, so the source address never advances — every byte of a transfer reads the SAME address, which really means “keep streaming from here”; Decompressor::init is called once per DMA (on the first matching read), then Decompressor::read once per subsequent byte.

Structs§

Sdd1Board
A cartridge carrying an S-DD1 (owns its ROM mapping directly — see the module doc).

Functions§

select
Build an Sdd1Board for a cart detected as S-DD1 (board::select).