Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
Blades of Steel (NES, Famicom Disk System)/ROM map: Difference between revisions
Jump to navigation
Jump to search
Rainwarrior (talk | contribs) (→PPU data bundles: 1C really means bank 7) |
Rainwarrior (talk | contribs) (→PPU data bundles: I made a utility for this) |
||
Line 28: | Line 28: | ||
$80 is written as the 256th byte | $80 is written as the 256th byte | ||
data pointer doesn't advance, return to step 2.5 | data pointer doesn't advance, return to step 2.5 | ||
Python utility for decoding/encoding: [https://gist.github.com/bbbradsmith/eed4194e226fa5bdf6a975e8924ffcf5 Gist] |
Revision as of 09:02, 6 March 2019
The following article is a ROM map for Blades of Steel (NES, Famicom Disk System).
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 - "invalid" 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 (never used) ... - 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