going through a collection of nes homebrew. saw "Cat.nes", loaded it up. here's cat dot nes
Displaying full-screen photos on the NES is an interesting challenge. There are two graphics layers: background and sprites. Both are based on 2-bit 8*8-pixel tiles.
The background fills the entire screen, but you can't use more than 256 distinct tiles (~1/4 of the screen) at the same time unless you swap the tileset during the horizontal blanking interval. The NES doesn't provide an easy way to wait for HBlank on its own. You have to use timed code, possibly assisted by "sprite 0 hit" detection, or use a cartridge with a special chip. (Super Mario Bros. uses sprite 0 hit + timed code to scroll the playfield independently of the status bar.) If you want more than 2*256 distinct tiles total, you need bankswitching circuitry in the cartridge anyway. (Edit: you don't need it to swap between the two tilesets the NES supports out of the box.)
You can only have 64 sprites (up to 1*2 tiles each) at the same time, and no more than 8 per scanline. Sprites can have their own tileset, though, and can be flipped horizontally and/or vertically, unlike background tiles.
The background and the sprites have 4 subpalettes each. All background subpalettes share one color, which is also the border color on NTSC systems. All sprite subpalettes have one transparent color. Sprites can be assigned subpalettes individually, but for the background, the resolution is only 2*2 tiles.
The master palette has ~54 colors, most fully saturated. You can shift all colors at the same time towards red, green, blue or a combination of them using "color emphasis bits."
More info on https://wiki.nesdev.org
