28

Elite was one of the earliest 3D games, wireframe only of course but still a remarkable accomplishment on 8-bit computers. Originating on the BBC micro, it was ported to many home computers, as well as the NES.

Wait a minute. The Nintendo was a tile based machine. How did it manage to render 3D wireframes? If you even had tiles in RAM I could see how you could do it, but the NES was restricted to tiles on the ROM cartridge; it had neither the ability to put bitmaps in RAM nor enough RAM to make use of that ability had it been present.

So, how?

  • 2
    I've never developed an NES cartridge, but I'd assume you could put RAM on the cartridge to use as PPU tile sets. – Jon Hess Apr 23 at 9:15
  • 4
    Well there is a PPU RD/WR & a CPU R/W line on NES connector and wikipedia suggests you can use ram for the tiles in a cartridge, so it looks to me like it's a Read Write connector – PeterI Apr 23 at 11:47
  • Sounds like someone needs to break out the disassembler. – pjc50 Apr 24 at 9:47
  • 1
    From talking to someone who wrote a nes emulator (though I don't think he ever released it to the public) I recall hearing that elite updated parts of the graphics memory while other parts were being drawn to the screen, – Peter Green Apr 24 at 13:54
  • 1
    "My greatest published achievements technically would have to be fitting BBC Cassette Elite into 32K of RAM including the screen, and later the NES conversion of Elite that used a character mapped display and a single NES controller. The NES is my favourite published conversion and was not thought technically feasible until we'd done it." Ian Bell, from an interview on his webpage elitehomepage.org – Uli Apr 24 at 15:01
24

The cartridge contains extra RAM. The NES can use tiles in cartridge memory space, but that doesn't necessarily have to be ROM. With suitable RAM and memory mapping the cartridge can create a basic bitmap display out of tiles.

The vectors are then rendered to that RAM using the NES CPU in the normal way.

  • As someone completely ignorant on the NES, I'm really curious about how this is actually implemented software side. How are tiles used to "render" a wireframe image that is supposed to change constantly? Dynamically generating each tile based on 3d computations sounds too intensive of a task for the NES hardware. – ChatterOne Apr 24 at 8:40
  • 2
    @ChatterOne it does dynamically generate them. It has a 6502 running at 1.66MHz (PAL) which is actually relatively powerful. For comparison the BBC Micro, which was the original platform for Elite, has a 6502 running at 2MHz. – user Apr 24 at 15:24
  • 1
    BTW Elite run on C64, too, on its ~1MHz 6502, and with greater resolution... – Usagi Miyamoto Apr 24 at 15:41
  • @UsagiMiyamoto No, an the C64 graphics resolution is artificially cut down to 256 pixels horizontally, therefore on all platforms x coordinate values can be handled in the same way just with a single byte. The loss in CPU power on a C64 was compensated by using loop-unrolling, which was not the problem because of a lot more available RAM for tables and loop code ... – Johann Klasek May 9 at 11:04
  • @JohannKlasek I read the answer by supercat and it is mentioning a 128×120 resolution. Also, if i remember correctly, Elite used multicolor mode on C64, with 160×200 pixels resolution... – Usagi Miyamoto May 9 at 11:49
9

The Nintendo can easily display 256 different 8x8 background tiles fetched from a cartridge. One could use 240 such tiles to draw e.g. a 128x120 bitmap while still having a few left over to decorate the edges, and if the cartridge fetches tile data from RAM, the content of those tiles could be updated under program control. This approach would be workable for a game like Qix, which doesn't update very much content every frame, but unworkable for Elite, where each animation frame is drawn "from scratch".

European (PAL) NES consoles only allow graphics memory to be accessed during about 20% of each frame time. That may not sound like much, but it's three times the amount of time available in North American (NTSC) consoles. This isn't enough a big enough fraction of the time to load entire bitmaps for every animation frame while achieving a decent frame rate, but it is is enough that if the system determines which tiles have meaningful picture content, it will only need a few video frames to load the data for those tiles into graphics memory. There are many additional complications, but the chief take-away is that the PAL vertical blank is long enough to make such things practical. Unfortunately, because the NTSC vertical blank is much shorter (about 7% of the frame) it's unlikely games like Elite will be adaptable to North American consoles.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.