lupi

cow of tailed snake (gay)

avatar by @citriccenobite

you can say "chimoora" instead of "cow of tailed snake" if you want. its a good pun.​


i ramble about aerospace sometimes
I take rocket photos and you can see them @aWildLupi


I have a terminal case of bovine pungiform encephalopathy, the bovine puns are cowmpulsory


they/them/moo where "moo" stands in for "you" or where it's funny, like "how are moo today, Lupi?" or "dancing with mooself"



Bovigender (click flag for more info!)
bovigender pride flag, by @arina-artemis (click for more info)



cathoderaydude
@cathoderaydude

going through a collection of nes homebrew. saw "Cat.nes", loaded it up. here's cat dot nes


0x10f
@0x10f

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


cathoderaydude
@cathoderaydude

cat.nes: a technical achievement


You must log in to comment.

in reply to @cathoderaydude's post:

I remember reading in a book about Atari history (Racing the Beam) that some guy used it to show off what could be done and drew, iirc, a detailed picture of Darth Vader, for some exec. They said, wow that looks amazing, what can it do? And the artist/game programmer said, nothing! I used every ounce of capability on this image! Extremely paraphrased but delightful

in reply to @0x10f's post:

So other than finding (or making) places where you can reuse tiles, what do you do? Bankswitching hardware would work but feels like it’s just throwing money at the problem, not being clever…

Tile (CHR) data on the NES can either be stored in ROM (on cart) or RAM (also on cart). Most of the time when people talk about mid-screen bankswitching of tilesets, they are talking about games with CHR-ROM, because it is very, very rare for a game to have bankswitched CHR-RAM. Nevertheless, the is still a very similar workaround you can do even if your game only has the standard 8 KB of CHR-RAM.

With 8 KB of CHR-RAM, that's enough for 512 tiles --- 256 for sprites, and 256 for the background. However, which set of 256 tiles is used for which is determined by a register in the PPU. By modifying this register mid-frame, you can get the same effect as a CHR bankswitch. I know at the very least that Rare used this technique to draw the title screen in Battletoads and Double Dragon (Rare basically always used CHR-RAM (and mappers without the fabled scanline counters too, IIRC)).

Hope that helps (and is accurate).

Yeah, you can use both tilesets for the background that way.

With CHR RAM, you can have an unlimited number of tiles, but I don't think you'd have time to rewrite many of them during the HBlank intervals of a single frame.

in reply to @cathoderaydude's post: