See NES Games In a New Light Via wideNES

See NES Games In a New Light Via wideNES

Over the decades since the original NES was released various groups have released a number of emulators focused on both providing the most accurate game experience possible (truly accurate emulation can be quite expensive, relative to the age of the platform being emulated) and, in some cases, on improving the visuals of the games in question. But Daniel Prilik, a third-year software engineering student, has come up with a unique way of improving NES visuals by expanding what you can see on screen at any given moment.

The viewport on standard NES titles is 256×240. It doesn’t matter if you’re playing on an iPhone SE or an 80-inch television, 256×240 is the number of pixels you’ll be seeing stretched across your display. But with wideNES, the viewport can be expanded to include additional visual information normally kept out of sight.

Image and wideNES by Daniel Prilik. The box inside the frame corresponds to the standard TV viewport.
Image and wideNES by Daniel Prilik. The box inside the frame corresponds to the standard TV viewport.

You can see several GIFs of how wideNES works on Prilik’s website (bandwidth restrictions prevent me from uploading them as images here, unfortunately). The interesting thing about wideNES is that you can’t just play the game this way by default. Instead, the emulator maps the data presented to the player in real time, allowing the viewport to be larger in subsequent levels. The reason this isn’t handled by simply dumping level data from the NES ROMs themselves is because there’s no standard format for how that information is stored within the ROM file, each game developer tended to do things their own way, and every title is therefore unique. Building out the map based on what the player has seen is a much simpler (and practically possible) solution, though it does come with a limitation. The NES PPU (Picture Processing Unit) has two rendering layers — a sprite layer and a background layer. The NES uses hardware scrolling to change the viewport, which means the PPU is always tracking what area of the game is visible and what it should display.

What wideNES does is simple. Instead of painting over each old frame with a complete new frame, it paints new frames as overlapping the current frame offset by the current screen scroll position. This allows the field of play to be expanded. The downside to this approach is that it only covers the background image (remember, sprites and background are on two separate rendering layers). This means enemies will “pop” back into frame when they enter the original 256×240 viewport and vanish again when they leave it.

All of this is very much a work in progress, but that’s part of what makes the project cool. Prilik has documented all of his work, including showing GIFs of how the emulator didn’t work at various points in the process. He’s also written his own emulator, ANESE, to showcase how wideNES works and what it can do. Both, he says, are “far from production ready,” but it’s an intriguing look at how we can use modern graphics horsepower to expand games in ways their creators simply didn’t have access to at the time — and, for those of you who find this sort of thing interesting, a primer on how games used to be built when the hardware they ran on offered a fraction of modern performance, with an unbelievably tiny amount of RAM. To put this in perspective, the NES had 2KB of work RAM. The L1 cache of the CPU you’re reading this story with is probably 8x – 16x larger than that.

Feature image by Daniel Prilik.