Model year 1997An alternate-history game consoleUpdated 6 Nov 2026 · what's new

Vérité Console

A game console that could have existed in 1997 but never did. I'm building it for real, around a graphics chip that lost the PC wars, and I'm writing every line of code it runs.

VÉRITÉ V2200 1163:2000
Spec sheet

At a glance

Graphics chip
V2200
Rendition Vérité, 1997
Graphics core
55 MHz
As Rendition's drivers set it
Video memory clock
110 MHz
Twice the core clock
Video memory
4–8 MB
SGRAM, from the donor card
Bus
32-bit PCI
33 MHz, between CPU and graphics
Operating systems
0
Bare metal, from power-on
Game media
Cartridge
A CompactFlash card in a shell
The what-if

A graphics chip that lost, given a second life

In the mid-'90s a Mountain View startup called Rendition made the Vérité, one of the first chips built to make 3D games look good on a PC. Its first version, the V1000, reached stores in 1996, and Rendition and id Software made a special version of Quake just for it, called vQuake, in time for Christmas. Next to the blocky software-drawn graphics most PCs had, it had smoothly filtered textures and anti-aliased edges.

Then 3dfx's Voodoo Graphics arrived and drew pixels about twice as fast. Rendition answered in 1997 with the V2100 and V2200, nearly doubling the V1000's speed, sold on cards like the Hercules Thriller 3D. It wasn't enough. Micron bought the company in 1998, and the Vérité line ended there.

Meanwhile, the PlayStation, the Saturn and the Nintendo 64 were showing what dedicated 3D hardware could do in a box under the TV. Consoles are where an unusual chip can shine: the hardware never changes, and programmers write straight to it instead of going through generic drivers. So I'm asking: what if someone had built a console around the Vérité? Then I'm building that console, from real parts of the era.

Why this chip

It was a programmable graphics chip, years early

Most 3D chips of 1996 and 1997 were fixed-function: hardwired circuits that do one job, drawing textured triangles, the same way every time. The Vérité put a small general-purpose processor, a RISC core, in front of its drawing hardware. The computer never draws anything itself. It sends the chip a stream of 32-bit command words, and a program running on the chip's own processor, called microcode, decides what each command means and drives the drawing engines.

Every modern graphics chip works roughly this way: games ship small programs, called shaders, that run on the GPU. In 1997 it was unusual, and on PCs it was mostly a handicap. The extra processor added overhead, and games only ever ran Rendition's own microcode, through generic Windows drivers.

A console changes that. There's no driver layer and no other software to stay compatible with, so I can write my own microcode, shaped for exactly the games this machine runs. That's the part nobody got to try back then.

What makes it possible now

The manual
The instruction set is documentedRendition's 69-page V2200 technical specification from January 1998 describes every instruction. That includes tri, which starts drawing a whole triangle, with depth, texture coordinates and shading, in a single instruction.
Drivers
Working open-source drivers surviveThe long-running X.org driver, and NetBSD's new veritefb, which even has an experimental way to run your own 3D microcode. Between them, they show the exact order of steps that wakes the chip up safely.
Reference code
Rendition's own microcode still existsTheir 2D microcode for the V2200 ships with the X.org driver. Once I could decode it, I could read how the people who designed the chip actually programmed it.
What it could do

A graphics chip you can reprogram per game

The Vérité wasn't completely alone. The Nintendo 64's graphics coprocessor also ran swappable microcode, and Chromatic Research's Mpact media chips were programmable too. But among PC 3D cards it was rare, and the N64 shows the idea works best exactly where this project puts it: in a console.

One catch shapes everything below. The chip's processor is slow next to its drawing hardware. At 55 MHz, drawing 640×480 thirty times a second leaves it only about six clock cycles per pixel, so running a program for every pixel only works on small areas. Where it shines is work done once per command, per triangle or per row of pixels, and building data in video memory so the main processor and the PCI bus don't have to.

These are ideas, not features yet. Each one is a small program that grows out of the four-instruction echo test below, so they can be tried one at a time once the chip is running.

How it works

From the processor to the screen

Here's the path a frame takes in the finished console. The main processor and the graphics chip work side by side: while the Vérité draws one frame, the CPU is already working out the next.

  1. Main processor Pentium-class CPU Runs the game: input, physics, and working out where every triangle goes. It writes the drawing commands into a list in main memory.
  2. 32-bit PCI, 33 MHz The chip fetches its own work The Vérité pulls the command list straight out of main memory by itself (bus-master DMA), so the CPU doesn't have to copy it over word by word.
  3. Inside the V2200
    1. Input FIFO A 32-word queue in, an 8-word queue out Commands wait here until the chip's processor is ready. If the queue fills up, the sender simply waits.
    2. RISC core, running microcode Reads each command and decides what to do This is where my own code runs. The core is big-endian, the opposite byte order from the x86 CPU, so the chip has byte-swapping windows to translate between the two.
    3. Triangle, pixel and fill engines Fixed hardware does the heavy lifting The triangle engine takes about 4 clock cycles to start a triangle, then roughly 1 per line and 1 per pixel, filling in depth, texture and shading as it goes.
    4. 4–8 MB video memory Everything the chip touches lives here The microcode itself, the textures, the depth buffer, and the picture being drawn.
  4. Display output From RAM to the CRT The display controller reads the finished frame out of video memory and turns it into a video signal.
First contact

Four instructions that prove it's alive

Before drawing anything, I need to prove the whole path works: the CPU loads my code into the chip, the chip runs it, commands go in, and answers come back. So the first microcode is an echo. It takes each number the CPU sends, adds one, and sends it back.

; echo.s: the first Vérité Console microcode
    .org 0x8000           ; free slot in video memory
    .entry start

start:
    add a0, fifo, zero    ; take a word from the CPU (waits if none)
    add a0, a0, #1        ; add one
    b   start             ; loop back...
    add fifo, a0, zero    ; ...but this runs first: send the answer

The odd-looking last line is a real quirk of the chip. Like many RISC processors of the time, the instruction right after a jump, called the delay slot, always runs before the jump takes effect. So the line that sends the answer back sits after the jump, and still runs every time.

The boot code around it finds the chip on the PCI bus, resets it, and holds its processor still. It then loads the echo program and reads it back twice: once from the CPU's side, and once by making the chip's own processor read it, which proves the byte order is right. Only then does it start the chip, send five numbers, and check that each comes back one higher.

The one hard rule: if any check fails, never start the chip's processor. Code that wasn't verified could rewrite the chip's memory controller settings, and a soft reset doesn't put those back.

The toolbox I built first

Disassembler
Turns the chip's machine code back into readable instructionsTested on Rendition's own 2D microcode: of its 4,683 words, only 6 aren't instructions, all of them in a data table, and all 483 jump targets land inside the program. That's how I know the decoding is right.
Assembler
Turns my instructions into the chip's machine codeI couldn't find a public assembler for this chip, so I wrote one. Both of Rendition's microcode programs go through disassemble, then reassemble, and come out byte-for-byte identical.
Firmware
Bare-metal C and x86 assemblyIt switches the CPU into 32-bit protected mode, scans every PCI device, and reports over a serial cable and on screen. It's built with Zig's bundled C compiler and tested in the QEMU emulator. QEMU can't pretend to be a Vérité, though, which is what the simulator below is for.
Simulator
A pretend V2200 that runs on my PCIt runs the same chip programs the real card would: the processor, the triangle, pixel and fill engines, the command queues, the chip fetching its own work, and the screen timing. It saves what's in video memory as a picture. It runs about 3.4 million chip instructions a second, and Rendition's own 2D microcode runs on it start to finish without a single warning. It also flags code that breaks the chip's timing rules. It can't say how fast the real chip will be, or settle the places where the manual is vague: those are listed, to check on the card.
SDK
Games are ordinary C and C++ programsThere's still no operating system. Instead, a thin layer answers the requests a program would normally make to Linux, such as opening a file or reading the clock, so standard C and C++ libraries work unchanged on bare metal. Game files load into memory at boot as a read-only folder. It all targets the original Pentium, with no newer instructions, and a test suite boots it in an emulator to check it. Along the way it caught a maths library that, on the Pentium's floating-point unit, worked out floor(−2.5) as −2.5 and sin(10) as almost zero.
Board design
KiCad, driven from scriptsPin maps for the bus wiring are generated by code, not drawn by hand, so a typo can't slip into one of 120 connections.
Lessons from vQuake

Taking apart the Quake that Rendition built

vQuake is the best record of what this chip did for real. Rendition's engineers and id Software made it in 1996, with Michael Abrash's help, and kept updating it into 1997. Its source code was never released, so I took the program apart instead: the game itself, the Rendition library built into it, and the chip program it loads. Every command it sends was traced from the game's code to the routine on the chip that handles it, and two separate checking passes went over every finding.

ResolutionV1000V2200V2200, faster CPUInfinitely fast chip
320×20051.048.171.056.0
512×38426.732.943.344.1
640×48016.922.027.932.4

Frames per second in vHexen2, which uses the same engine, from Podell's 1997 post. A Pentium 166 MMX, except "faster CPU", a Pentium II 300. At low resolution the V2200 was slower than the V1000, and even an infinitely fast chip stopped at 56 fps on the Pentium 166. A faster CPU did more.

The lesson for the console: keep the main processor out of per-row and per-pixel work, and do the lighting on the chip. The Dark Forces design below already works that way. If Quake ever comes to the console, it would send the chip the level's geometry and lights, and let the chip build the rows and light the surfaces.

First port

Dark Forces, drawn the way it was drawn in 1995

The first big game for the console is LucasArts' Star Wars: Dark Forces from 1995, through The Force Engine, an open-source rebuild of the game's engine. You bring your own copy of the game's files; the port only replaces the engine. It's a non-commercial showcase.

Dark Forces didn't draw the way 3D cards do. It painted walls as vertical strips and floors as horizontal rows. It looked through doorways and windows so that every pixel on screen was painted exactly once. And it used 256 colors, darkened through a table of 32 light levels the artists made by hand. A 1997 3D card, a Voodoo or a Vérité, would redraw all that as triangles in 16-bit color and approximate the lighting. This port goes the other way: it bends the Vérité into drawing the way Dark Forces draws, at 640×480 instead of the original 320×200.

Where the port is

How to read the tags

Scoreboard against the Voodoo

For Dark ForcesStock V2200, 1997This port
The 256-color art LostNo 256-color textures, so the art had to be converted to 16-bit color. The Voodoo had them. AheadThe original 256 colors, unconverted. The Voodoo can only draw in 16-bit color.
The lighting EvenBoth could only approximate the hand-made light tables. AheadThe original light tables, exactly.
Damage and goggle flashes EvenIn 16-bit color, both have to paint a tinted layer over the picture. AheadThe palette itself changes, as in DOS.
Menus and cutscenes AheadThe Voodoo Graphics has no 2D at all. AheadNow with a chip program of their own.
Raw drawing speed LostIn real games it didn't keep up with the Voodoo Graphics. Not our raceEven on paper with the Voodoo Graphics, behind the 1998 Voodoo2. Drawing each pixel once is how the port gets by.
A plan, not a measurement. The chip program runs in the simulator now, but nothing here has run on a real Vérité yet.

Where each trick goes

Where the Voodoo still wins: raw drawing speed. The Voodoo Graphics and the V2200 both draw about one pixel per clock, at 50 and 55 MHz, and the 1998 Voodoo2 has two texture units. The port doesn't try to win that race. Drawing each pixel once at 640×480, the paper estimate was about 11 ms a frame, inside a 60 fps budget, but the first simulator count puts the chip's own processor at about 43 ms, so 60 fps isn't won yet. And in the exact 256-color mode, 3D objects that are both textured and smoothly shaded get one light level per polygon, the design's one approximation. There's also a Smooth mode with filtered textures in 16-bit color, close to what a Voodoo looks like, to show the chip can do both.

Hardware

Spend in stages, and stop anywhere

The dream is one custom circuit board with everything on it. Getting there in one jump would mean debugging a new board, a transplanted chip and brand-new code all at once. That's a recipe for a $500 brick. So the rule is: buy hardware only when the next question can't be answered without it. Each stage proves something before the next one depends on it, and each one is a fine place to stop.

1 · Simulator
A pretend chip, for $0The simulator described above. It proves chip programs and the code that drives them, but not speed, exact pixels or anything electrical. Working now.
2 · Desktop PC
The real card in an ordinary PCThe V2200 card on its way goes into a desktop with an Intel DX58SO motherboard, which still has one old-style PCI slot. Nearly all the graphics work happens here: waking the chip, my own triangle microcode, screen modes, real speed measurements and the game ports. The PC has no serial port, so a plug-in serial card carries the debug log.
3 · Console CPU
The same card on the console's own processorThe console's CPU is a PC/104-Plus module: a coaster-sized industrial computer that stacks onto other boards through a 120-pin PCI connector. My adapter board turns that connector into a standard PCI slot, so the untouched V2200 card can plug in. It's a 4-layer board with every signal under 25 mm long. In software terms this is the finished console, with honest performance. The adapter is being designed now.
4 · Chip-down
The chip moves onto my own board (optional)Only needed for the console's final physical form. The V2200 is a 27 mm ball-grid chip with its connections underneath, so it comes off a cheap AGP V2200 card bought as a donor, while the working PCI card is used to read the chip's reset straps: resistors that tell it, at power-on, what memory it has and how fast to run. A middle ground is a carrier board with a PCI slot that takes the stock card. The processor for a single-board console is still open.
The box

What it might look like

Five case ideas, rendered in 3D as mood pieces. They aren't engineering yet: the real shell has to wait until the board's final shape is known. Every one of them takes cartridges.

Three console concepts with cartridges and wired gamepads: a putty-grey slab with four controller ports, a black wedge with a red racing stripe, and a clear purple cube showing the stacked boards inside.
A · Slab, "Studio Grey": a putty-grey 1995 living-room box with hi-fi pinstripes and four controller ports. B · Wedge, "Midnight Turbo": a black wedge rising to the cartridge slot, with an arcade-style logo. C · Clear Stack, "Grape Ice": a clear purple cube that shows off the stacked boards. It's the only one that fits the stage 3 hardware without a custom board.
Two more console concepts: a low graphite box with a drive-style cartridge bay on the front, and a two-tone grey console with a cartridge standing in a top slot.
The "multimedia box" direction, after the look of mid-'90s machines like the Apple Pippin and the 3DO M2. D · Bay, "Graphite": a low box where the cartridge slides into a drive-style bay. E · Twin, "Two-Tone": a light-grey shell on a darker base, with a top-loading slot.

Cartridges, not discs

A game cartridge is a CompactFlash card in a cartridge shell. Each game, and often each level, loads its own chip program and textures, so this console loads often, and flash has no seek time, where a 1997 CD drive makes every level change wait. The same card holds saves, so there's no separate memory card. Since ports never include game files, you copy your own copy of a game onto a card from a PC. And CompactFlash dates from 1994, so it's period-plausible.

Starting a game works like a real console: insert the cartridge, switch on, and the game starts. A small boot program of the console's own, the "console ROM", sets the chip's clocks, shows the logo, reads the cartridge's header to see what to load, and starts the game. With no cartridge in, it asks for one. One catch: the card can't be pulled out while the power is on, so the slot gets a lock tied to the power switch, as the Super Nintendo had.

Controllers the graphics chip reads itself

Vérité quirk

The V2200 has a little-used video input port, meant for 1997 video-capture add-on cards, that writes incoming bytes straight into video memory. The plan uses it for controllers. A small input board polls the pads in step with the screen's refresh and feeds their buttons through that port, so the chip's own processor sees them without the main CPU or the bus doing anything. One wire wakes both processors when a new sample lands. The chip could then move a cursor or turn the camera at the very last moment before a frame is shown. It's three custom boards: the pad, the input hub, and a port board with the four front sockets. For now this is a proposal: nothing is built.

Progress

Where it's at

Still before any hardware, but the software side has moved fast: there's now a simulated chip to run code on, a way to build games, and a first game's chip program. The build log below has the day-by-day story.

None of the chip code has run on a real Vérité yet. It runs in my simulator, which follows the manual, but a simulator can be wrong exactly where the manual is vague. The first real test is the day the card arrives.

Build log

What happened, day by day

Newest first. The rest of the page always shows where things stand now. This is the diary of how they got there.

vQuake decoded, Dark Forces on the chip, and an honest frame time

  • Decoded vQuake's command language. Every command the game sends its chip program, traced from the game's code to the routine that handles it on the chip. The surprise: it drives the V2200 exactly as it drove the older V1000. The full story is above.
  • Measured what a Quake frame costs. I built id's open-source renderer with counters and ran its three demos at three resolutions. Moving lights relighting surfaces turned out to be the biggest cost, not the bus.
  • Wrote Dark Forces' chip program. About 15 KB of microcode that draws walls, floors, sky, sprites and 3D objects in the exact 256-color mode. It passes all its tests in the simulator.
  • Got a first honest frame time, and it's slow. The simulator counts about 43 ms of the chip's processor time for a typical frame, against about 8 ms on paper. Almost half is floors, where the chip's 32-bit processor does 64-bit maths. There are four ideas for cutting that, none tried yet.
  • Dark Forces' engine booted with no operating system, in an emulator, on the console's software. It draws the test level pixel for pixel the same as the PC build.
  • Picked the cartridge slot and wrote down the boot sequence: insert, switch on, play. More above.
  • Read the leftover screen-setup code in Rendition's DOS library. It's unused, written for the V1000 and broken in one spot, but its table of screen timings carries over to the V2200.

The busiest day yet: a card on order and a chip to practise on

  • Ordered the card: a used Axle V2200 PCI card with 8 MB, sold as working, shipping from Australia. It'll be tested in a desktop PC first. The staged plan is above.
  • Made "native first" the project's rule. Every design has to say how it beats the 3dfx Voodoo by using this chip's quirks. Doing things the way a 1997 Voodoo driver would is only the fallback, never the plan.
  • Designed the Dark Forces renderer and scored it against the Voodoo. See the scoreboard.
  • Built the V2200 simulator. It runs about 3.4 million chip instructions a second, and Rendition's own 2D microcode runs on it with no warnings.
  • Built the SDK, so ordinary C and C++ programs run with no operating system. It caught a maths library that got floor(−2.5) wrong on the Pentium's floating-point unit.
  • Read about 100 pages of VOGONS, the retro PC forum, by hand. Others are working on this chip right now: an open-source DOS emulator, Rust-DOS, now emulates the Vérité's processor well enough to run real Rendition microcode, and the author of NetBSD's new Vérité driver has released an OpenGL driver for Rendition's GL microcode.
  • Planned the controllers, chose cartridges, and rendered five case ideas. See the box.

Groundwork

  • Found the chip's 1998 manual, Rendition's 3D programming guide and the two open-source drivers.
  • Wrote the start-up code that finds the chip, an assembler and disassembler for its instruction set, and the four-instruction echo test.
  • Worked out the chip's clocks, started the adapter board, and put up this page.
Hard parts

What could go wrong

Why

Because it's a great puzzle

It's part nostalgia for '90s tech, part puzzle, and part the fun of making something that only existed in an alternate timeline. It's also a chance to find out what a forgotten, ahead-of-its-time chip could really do when someone writes code just for it.

Sources

Further reading