Blades of Steel:ROM map
Jump to navigation
Jump to search
The following article is a ROM map for Blades of Steel.
PPU data bundles
This game has a simple RLE compressed format for PPU data. The ROM stores 15 PPU data bundles, decoded by a subroutine at $7:C818, taking X as an index (x2) to tables that locate the data:
$7:C89D - pointer table to packet data (2-byte address, little-endian, X as index) $7:C8BB - bank table for packet data (1-byte UNROM bank numbers, X/2 as index)
After setting the specified bank, and loading the pointer, the data stream encoded at this pointer is as follows:
1. 2-byte PPU write address (little endian) 2. Control byte: 2.1. $FF - end of bundle stop decoding 2.2. $7F - new write address return to step 1 2.3. $01-$7E - run-length for next byte $xx - byte to be repeated for the duration of the run length return to step 2 2.4. $81-$FE - & $7F = length of uncompressed data that follows ... - uncompressed data (length given above) return to step 2 2.4. $00 - run-length value of 256 (never used) $xx - byte to be repeated 256 times return to step 2 2.5. $80 - invalid uncompressed length value (causes hang) ... - 255 bytes of uncompressed data $80 is written as the 256th byte data pointer doesn't advance, return to step 2.5
Python utility for decoding/encoding: Gist