Sik wrote:
I imagine that having to process those sprites is a bigger issue (due to the MSB of the horizontal coordinate and the sprite size bit, ugh dammit Nintendo, why not just use words where not all bits are stored? - OAM is on-chip rather than on VRAM, right?)
True, but either way less Objects means less processing time.
Espozo wrote:
There are many times where I wonder how hard it would have been to have just given sprites 5 bytes.
As far as I understand it, it would not be hard, just expensive.
To get the character bits of an Object the system needs to calculate
id << 2 | %10 which costs very little silicon (no logic gates, just connection lines to the next block) and is near instantaneous.
If the Object data is not a power of 2, the system would need to use a pointer offset instead of a id (requiring more bits than just using an Id) and a n byte buffer that would need to filled before processing the Object. This takes silicon (for the buffer and logic) and master cycles to process.
It would easily reduce the number objects that can be processed and filtered per scanline by ~30% (guessing).
The other option is to make the OAM Table 2 1 byte per Object, but you would still have to split xPos in code.
Either way that you require an extra 96 bytes of wasted SRAM (IIRC) and SRAM was very expensive back then.
EDIT: Woke up this morning and realised a circular 5 byte buffer instead of using an offset index would be faster and would probably use the same amount of silicon.