A little while back, someone pointed out to me that Theme Park still wasn't quire right. So i look, and sure enough the alignment isn't quote right between BG1 and the other BGs and OBJ. Recall that Theme Park writes $ff then $03 to $2110, then writes $00 to $210d exactly once and yet expects BG1HOFS to have the value $0000, not $0003. Previous investigation had discovered that changing the ROM to write $83 to $2110 would make the real SNES have BG1HOFS=$0080, at the time mistakenly interpreted as $0083.
Further investigation reveals that the value jumps by 8s: any of $80-$87 leads to BG1HOFS being $0080, while $88 suddenly jumps to $0088. A little more testing reveals that the real formula for BGnxOFS registers is:
Code: Select all
Current = (Byte<<8) | (Prev&~7) | ((Current>>8)&7);
with Prev shared among all 8 registers.
OTOH, the M7* registers still seem to use the old formula:
with M7Prev again shared. OTOH, we still don't know the exact details of the Mode 7 calculations, particularly the observed offset quantization under extreme magnification, a few details of offsets ourside the standard -1024 to 1023 range, and the bit-accuracy of the scaling formulas...