I recently took the time to learn more about the graphics processors of the Sega Genesys & SNES and realized that my previous "retro 720p GPU" had a little too much Atari 7800 in it's design. Really, if someone wanted to create an HD 2D GPU they really should start with the SNES (or the GBA or NDS) PPU as these really represent the ultimate in 2D GPU design. However, IMHO there will be three main challenges which the designer will need to address:
- 720p has a 74.23MHz pixel clock (versus 5.37MHz on the SNES) which will limit the number of tile layers & sprites per line and bits per pixel depending upon VRAM width & access speed. Basically the PPU has to be able to fetch all of the data for each pixel of each tile & sprite from VRAM in less than 13.5ns.
- The SNES used a 32x2? tilemap with 8x8 tiles. At 720p 8x8 tiles would be a 160x90 tilemap, 16x16 a 80x45 tilemap and 32x32 a 40x23 tilemap (closest to SNES). So the question is what size tile is appropriate (although this could be selectable via different graphics modes). In addition, larger tiles & sprites need more colors to make best use of those pixels. (But note #1)
- While not as significant as #1 & #2, one minor challenge is the screen width is not a power of two. If the width is a power of two then each X & Y positions are separate bits in the address byte. So either the address calculation needs to use adders or there will be wasted space in the tilemaps for vertically scrolling games.
One enhancement to the SNES I would suggest is to have four address pointers for each tilemap (main, right, down & down+right). This would greatly simplify scrolling games as the level could be loaded into VRAM screen by screen.