Sega Virtua Processor

From Sega Retro

SegaVirtuaProcessor logo.png

This short article is in need of work. You can help Sega Retro by adding to it.


The Sega Virtua Processor (SVP) is a custom-designed Sega Mega Drive-compatible DSP chip which allows for enhanced graphics and sound capabilities. This chip essentially serves as an extra processor, allowing games to produce a significantly higher number of polygons than would be possible on a standard Mega Drive. Primarily seen as a reaction to the Super Famicom's Super FX chip, the SVP boasted more performance than Nintendo's chip but would ultimately see use in only a single title - Virtua Racing, which saw an increase in both its cartridge size and retail price.

History

SegaVirtuaProcessor JP chip.png

The SVP chip was revealed for the Mega Drive in Summer 1993, before the Mega Drive version of Virtua Racing released in 1994.[1] Interestingly, Virtua Racing was the first to showcase the power of the SVP chip - plans were underway to produce more games using this chip, using a "Modular Converter" cartridge to cut production costs. This converter would contain the SVP chip, with the enhanced game designed to use the SVP chip plugging into the top of the unit.[2] However, due to the costs of production against the Mega Drive/Genesis' age and falling popularity, the project was dropped. Virtua Racing also has a cartridge roughly one-and-a-half times the size of a usual Mega Drive cartridge due to the added chip, and is incompatible with the Sega 32X add-on.

Early versions of Sonic the Hedgehog 3 were planned to use the SVP chip to create three-dimensional playfields. With Yuji Naka's interest in taking the franchise in new directions, the original plan was to use the chip to create an isometric world for Sonic to run in (a similar perspective to Sonic Labyrinth and Sonic 3D: Flickies' Island), which would have resulted in a vastly different game. However, Sega of Japan refused Sonic Team's demands for its inclusion, stating that the chip would not be ready by the game's original planned release date. Instead, the development team decided to create another traditional two-dimensional platformer.[3]

While it has been assumed that the SVP was only intended for the Mega Drive, there are indications that Sega may have had greater plans for the chip. Third-party developer Artech Digital Entertainments once considered using the SVP in their ultimately-unreleased Sega VR title Outlaw Racing[4], and the CRI title Zaxxon's Motherbase 2000 contains remnants of unused SVP support - despite being a Sega 32X game.

Magazine articles

Main article: Sega Virtua Processor/Magazine articles.

Technical specifications

The SVP chip adds the following capabilities to the Mega Drive hardware. For comparisons to Nintendo's Super FX chip, see blast processing.

  • DSP core: 16-bit fixed-point arithmetic, 32-bit output, 16-bit word size, 25 registers (8 general, 8 external, 8 pointer, 1 status)
  • ALU: 32-bit, status register
  • Multiplier: 32-bit output, 16x16-bit pipelined multiplication
  • DSP buses: 6 buses[7]
  • 32-bit internal data buses: Data (D) bus (16-bit), subsidiary (S) bus (16-bit)
  • 16-bit program data bus: Program data (PD) bus
  • 16-bit external data bus: External (EXT) bus
  • 16-bit address bus: Program address (PA) bus
  • 32-bit arithmetic bus: Multiplier (M) bus
Graphics
  • DSP performance:
  • MAC operations: 1 MAC (multiply-accumulate) per cycle,[7] 23.01136 million MACs per second
  • Fixed-point calculations: 2 calculations (multiply and add) per cycle,[6] 46.02272 million calculations (23.01136 million multiplies, 23.01136 million adds) per second
  • Framebuffer: 320×192, double-buffered, 30 FPS, 60 KB (dual 30 KB) buffers in FPM DRAM (1.8432 MB/s, 1.8432 MHz DSP cycles), 30 KB buffer in Mega Drive VRAM (921.6 KB/s DMA transfer, equivalent to 2.7648 MHz DSP cycles), 4.608 MHz DSP cycles for framebuffer
  • 3D polygon T&L geometry:
  • Geometry transformations: 60,000 polygons/sec[n 1]
  • Lighting calculations: 50,000 polygons/sec[n 2]
  • 3D polygon rendering:
  • Flat shading:[n 3] 20,000 polygons/sec (8×16 polygons),[n 4] 10,000 polygons/sec (16×32 polygons),[n 5] 9000 polygons/sec (Virtua Racing)[16]
  • Texture mapping: 3000 polygons/sec (8×16 texel textures)[n 6]
Memory
  • Memory: 2179 KB (2.128 MB)[6]
  • RAM: 131 KB
  • ROM: 2 MB (128 KB code, 1920 KB data)[5]
  • RAM bandwidth:
  • FPM DRAM: 34.679066 MB/sec (16-bit, 18.181818 MHz, 55ns cycles, 80ns access)[9][10]
  • SRAM cache: 92.04544 MB/sec (32-bit, dual 16-bit banks,[7][15] 23.01136 MHz, 43ns)[6][7]

Notes

  1. [369 cycles per polygon (81 multiplies/polygon, 9 divides/polygon),[11] 32 cycles per divide 369 cycles per polygon (81 multiplies/polygon, 9 divides/polygon),[11] 32 cycles per divide]
  2. [390 cycles per polygon (102 multiplies/polygon, 9 divides/polygon),[11] 32 cycles per divide 390 cycles per polygon (102 multiplies/polygon, 9 divides/polygon),[11] 32 cycles per divide]
  3. [18.40336 MHz available (4.608 MHz for framebuffer), 468 cycles per polygon (390 T&L cycles, 42 DRAM cycles for 40 bytes, 34 raster cycles,[12][13][5] 2 framebuffer access cycles), 2 cycles per pixel[14] 18.40336 MHz available (4.608 MHz for framebuffer), 468 cycles per polygon (390 T&L cycles, 42 DRAM cycles for 40 bytes, 34 raster cycles,[12][13][5] 2 framebuffer access cycles), 2 cycles per pixel[14]]
  4. [724 cycles per polygon[15] 724 cycles per polygon[15]]
  5. [1492 cycles per polygon[15] 1492 cycles per polygon[15]]
  6. [5366 cycles per 8×16 texel polygon (4642 cycles texture mapping per 8×16 texel polygon)
    • 258 cycles per 8×16 texel texture: 2 block moves, 2 cycles per texel (1 byte per texel), 2 cycles access
    • 4384 divide cycles per 8×16 texel polygon: 73 divides per 8×8 texel polygon, 288 vertex divide cycles per polygon (9 divides per polygon), 4096 texel divide cycles per 8×16 texel polygon (128 divides, 1 divide per texel)[17] 5366 cycles per 8×16 texel polygon (4642 cycles texture mapping per 8×16 texel polygon)
    • 258 cycles per 8×16 texel texture: 2 block moves, 2 cycles per texel (1 byte per texel), 2 cycles access
    • 4384 divide cycles per 8×16 texel polygon: 73 divides per 8×8 texel polygon, 288 vertex divide cycles per polygon (9 divides per polygon), 4096 texel divide cycles per 8×16 texel polygon (128 divides, 1 divide per texel)[17]]

References