The log · 2 October 2026 · explainer
Sega Model 3 on a real CRT television
Sega's Model 3 drew its races at 384 lines for a 24 kHz arcade monitor. OmaCRT 0.14.0 plays them on a 15 kHz television through Supermodel, which draws the scene at the tube's 240 lines rather than shrinking it to them. Getting there took one relaxed check in an OpenGL loader, two words of an EEPROM, and a flyer in place of a box.
subject
Sega Model 3 games on a 15 kHz television
emulator
Supermodel, built to start as a Wayland client
games
Sega Rally 2, Daytona USA 2, Scud Race, Virtua Fighter 3 and eight more
tools
Claude Code with Opus 5.5, Xvfb, Rust
release
OmaCRT 0.14.0
3520× 240the frame Supermodel draws every Model 3 game into, at the board's 57.524 Hz

I wanted to play Sega Rally on the television in the living room, the arcade version. The first Sega Rally runs on Sega's Model 2 board, and that came first: MAME emulates it, RetroArch carries MAME, and OmaCRT already drives RetroArch. Its sequel, Sega Rally 2, runs on the Model 3 that followed in 1996, with a graphics board Sega built with Lockheed Martin's Real3D. MAME lists its Model 3 driver as preliminary, which in MAME's words means not playable. Supermodel is playable, and has been for years, but it is a program of its own, and nothing in OmaCRT had ever started one that was not RetroArch or mpv.
It does now, and the Model 3 games look sharper on the glass than the Model 2 games beside them.
01A board drawn for another monitor
Model 3 games draw 496 by 384 at 57.524 frames a second, for a medium resolution arcade monitor whose lines run at 24 kHz. A 15 kHz television draws 240 lines in a frame and cannot be talked into more without interlace, which the stock kernel cannot scan out. So 384 lines have to become 240 somewhere.
On Model 2 that happens after the drawing. MAME renders the board's 384 lines, and RetroArch fits them into the tube's 240. Fitting with nearest neighbour keeps five lines in every eight and throws the other three away, unevenly, and the rows of a timer's digits come and go. The launcher has filtered that reduction since 0.11.2, which brings the rows back as a softer picture.
Supermodel works the other way round: its renderer draws the 3D scene at whatever size it is asked for. The launcher hands it the whole frame the television is set to, 3520 by 240, and the polygons are drawn at 240 lines from the start: every line the set draws is a line the renderer drew, with nothing thrown away and nothing averaged. Only the 2D layers, the text and the gauges, are still scaled, with Supermodel's own filter. The tube runs at the board's own 57.524 Hz rather than 60.
Drawn at 240 lines, not reduced to them.
One frame of Sega Rally 2, three ways. The board draws 384 lines and the tube has 240: either the 384 are reduced, as Model 2 games are, or the renderer is asked for 240 in the first place.
Supermodel asked for 240 lines and drew 240 lines: every line on the glass is a line the renderer drew. Only the text and gauges are still scaled. This is Model 3 on the tube.



The frame, at the 4:3 the set shows it at



The marked part, enlarged
The board lines each tube line is made of
The 3520 counts how finely the television's mode slices each line in time. It is the arcade world's "super resolution", width to spare, so that a console's 320 pixels land on exactly eleven of it each. The set shows it as 4:3, the way the cabinet's monitor did.
02One check between Supermodel and the tube
OmaCRT does not give the television to the desktop. It takes the connector for itself, and the programs on the tube are clients of flyback, a compositor for that one output that speaks Wayland and nothing else. There is no X server on the television.
The Supermodel package in the Arch User Repository starts and stops with "OpenGL initialization failed". Supermodel carries its own copy of GLEW, the library that looks up OpenGL's functions, and glewInit() does two things: it loads the functions, then it asks the X server for its GLX extensions. Under Wayland there is no X server to ask, so the call returns GLEW_ERROR_NO_GLX_DISPLAY with every function Supermodel uses already loaded, and Supermodel treats any answer but success as fatal.
The change lets that one answer through:
if (GLEW_OK != err && GLEW_ERROR_NO_GLX_DISPLAY != err)
It lives in packaging/supermodel-omacrt, which builds the same upstream release as the AUR package with that line changed and replaces it. The launcher then starts the binary directly, tells it where its list of games is, and gives it the television's frame, its rate and a name the compositor can raise it by.
03A cabinet waiting for its twin
Sega Rally 2 started. Scud Race did not.


Scud Race and Daytona USA 2 were built to run linked: two cabinets side by side, joined by a network board so two people could race each other. Out of the box each board is the master of a pair. With no network board it gives up at once. With Supermodel's simulated one it gets further and waits at "network checking" for a second cabinet that never answers.
An operator who installed one of them alone fixed this in the game's test menu, under game assignments, by setting LINK ID to single. The agent did the same: it ran the game in a virtual X display, built a thirty line program that presses keys through XTest, and stepped through the menus one key a second, with a screenshot after each press. Faster than that, presses were lost or doubled and the cursor landed in the wrong test.

That fixed one machine. To fix every machine, the agent compared what the test menu writes. Supermodel saves the board's EEPROM to a file beside the game when it exits, and a factory file set against one saved after the change differed in five words: the link and a flag beside it, each in two copies of the settings, and a checksum. The checksum was the part that had to be right, since a game that finds its settings corrupt goes back to the factory ones. The agent wrote a short C program that tried every 16 bit CRC polynomial, with every common starting value, bit order and byte order, over every range of words the sum could cover, and checked each against both files. In forty seconds there was one answer: CRC-16/XMODEM over the 29 words of the first copy, high byte first. Daytona USA 2 keeps the same layout one word further along and agreed with it.
Two words decide how many cabinets there are.
Scud Race keeps its operator settings in a 128 byte EEPROM, 64 words of 16 bits. Supermodel saves it beside the game. Set LINK ID the way the test menu does and watch which words change, and what the checksum becomes.
- LINK ID, words 6 and 35
- 0001 · master
- Flag, words 15 and 44
- 0100
- CRC-16 of words 6 to 34
- 593B
- What the game does
- Waits for a second cabinet: “network board not present”.
- Header
- Checksum
- Identity
- Settings
- Second copy
The launcher now does this before every start of a twin set, and only to a file laid out exactly this way whose checksum already adds up. The very first time one of these games runs there is no file yet, so it shows its network error once. The file it saves on the way out is set right as it closes, the launcher says to start it again, and from then on it plays.
04The rest of the cabinet
A few smaller things make Supermodel behave like everything else on the tube.
Supermodel counts a pad's buttons from one, and the controls file it writes for itself on a first run puts Start and the coin on buttons nine and ten, which a pad does not have. The launcher writes one for a pad instead. Select is the coin, the left stick and the d-pad steer, the triggers are the pedals and the shoulders change gear. A trigger rests at the bottom of its axis rather than in the middle, so its rest point is moved there, or the first half of the pedal would do nothing. Select and Start together leave the game.
SDL opens the desktop's sound device by name whatever it is told, so the launcher moves Supermodel's stream once it opens: through the leveller that brings every game to one loudness, and on to the television.
libretro's thumbnail repository has no Model 3 games at all. An arcade game it does not know now takes its original flyer from the Arcade Database, the set's own or else its parent's, and its title screen as a last resort. A flyer is what an arcade game had in place of a box.

05Twelve games
There are twelve Model 3 games on my disk, one of each: where I had two versions of a game I kept the one that runs on its own and in English. Eleven of them play, all at the tube's line count; the twelfth is missing a file, as the last section explains. Here are eight more, as Supermodel drew them at the television's mode during each game's attract sequence.
06Trying it
Model 3 is in OmaCRT 0.14.0. Build and install the Supermodel package first:
cd packaging/supermodel-omacrt
makepkg -si
Then put your own sets in a folder called model3 or arcade_model3 under one of the library's roots, all in that one folder: a revision such as dayto2pe loads the files it shares with daytona2 from beside it. They appear as Arcade (Sega Model 3) after the next scan. The details are in docs/systems.md.
Star Wars Trilogy Arcade needs its set complete, including epr-21119.ic8, the program of the board behind the flight stick. Without it the game stops at boot because its stick has no force feedback. The light gun games, The Lost World and The Ocean Hunter, are listed but untested: OmaCRT has no gun yet.







