In public, it's better to cite SNES Development Wiki
instead of what appears to be a pirated copy of the official manual. I'll answer based on my recollection of those public resources.
dougeff wrote:1.It warns not to set a Sprite X to $100 (-256), maybe something about a 'time over' error that hasn't been resolved. I don't remember reading this warning anywhere else. Is this accurate?
There appears to be a logic error in sprite evaluation that treats sprites at x=-256 as if they are at x=0, that is, with all tiles on screen. They're not displayed (which is correct), but they still count against the 34 sliver cap (which is the error). But you don't need to write the sprite at all if -256 <= x <= -64 (or -32 with sane OBSEL size settings), as it'll count against the 32 sprite cap even if -255 <= x <= -64.
2. It recommends this at start...
Code: Select all
Jmp long to 80+ bank (faster)
And says CPU speed is automatically increased when accessing the 80+ banks. Is that right?
Execution out of ROM in $008000-$7DFFFF is always slow (2.7 MHz). Execution out of ROM in $808000-$FFFFFF is fast if the memory controller has been told to use fast ROM. So make sure your init code jumps out of bank $00 at some point, and when you do, jump to bank $80 or higher. Do the same for any nontrivial NMI or IRQ handler.
3. It said something about VRAM having $8000 words, but a potential $10000 (iirc). Is there such a thing as expansion VRAM?
Not in retail consoles. I don't know if it was expanded in debug consoles or the Nintendo Super System arcade platform.
4. It said that if you don't reset the NMI flag inside NMI, it can retrigger?
As far as I know, it's the same logic as the NES PPU's NMI: if you don't acknowledge the NMI by reading the status register, and you turn NMI generation off and on, it'll cause another NMI. On the NES, the NMI enable is $2000 bit 7, and the status register is at $2002. On the Super NES, the NMI generation enable is at $4200, and the status register is at $4210.
5. Should I have an IRQ and NMI handler inside every bank?
No. Your vectors should be in $00FFE0-$00FFFF. And unless you're using certain types of coprocessor, $008000-$00FFFF is always readable.
6. Does anyone use the WRAM registers, or is that just for DMA transfers to WRAM?
It might be useful for autoincrementing if the X and Y registers are taken up
7. If you set DMA to not increment, can you blank RAM with DMA, by continually writting the same byte (0)?
Yes, but you have to set ROM (or possibly the VRAM read port) as the source because WRAM-to-WRAM transfers don't work.
8. Is the CPU completely occupied with a DMA, or is it free to do other things?
General-purpose DMA completely occupies the CPU.
9. Is there any tools for pixel editing in 256 color mode?
GIMP can save a PNG in 4-, 16, or 256-color indexed mode and then pilbmp2nes.py
can convert it to tile data. I have used these tools both on Ubuntu and on Windows.
10. Multiply/Divide...do you need to wait to get the result?
Yes, if you're referring to 5A22 multiply and divide, not the PPU multiplier that's usable when the background mode isn't 7. There are a couple games that depend on incomplete results of 5A22 mul/div, but I consider the result unspecified.
13. Am I right to assume that the SNES doesn't care about the header?
The retail Super NES console doesn't care about anything in the header other than the vectors, but other tools are believed to read it.
14. Don't use screen math in mode 5-6? Another warning I've never seen before, with no explanation.
The PPU can look up only two palette entries per pixel: one for the sub screen and one for the main screen, and then it does math on the result. Usually the PPU displays the color math output in the whole pixel. But in high-resolution modes, the PPU splits each pixel into two halves, displaying the unchanged sub screen color in the left half and the color math output in the right half.
16. 2132 fixed color math. It says in the SFC wiki write once, but then their example shows multiple writes. (?)
If you're setting R, G, and B to different values, you have to poke in each value separately. There are three internal registers (COLDATA_R, COLDATA_G, COLDATA_B). Bits 7-5 of the written value select which registers to write (the "address" so to speak); bits 4-0 set the value to write to the selected registers.
17. Anyone know what Offset-per-tile mode is?
It's used for scrolling individual columns of a background, such as the segments of the snake in the final boss of Aladdin
, the floor in "Touch Fuzzy, Get Dizzy" in Yoshi's Island
, or the playfield in Tetris Attack
. It's also used for shearing the background of Star Fox
to fake rotation. Have you used VSRAM on the Sega Genesis?