Skip to content

POD in a window ​

2026-10-23, ninth session.

POD's demo race in a window under Wine: split screen, countdown at 6

The attract-mode race, two players split screen, drawn by WINPOD.EXE under Wine 11.

Until now everything we knew came from reading the code and the files. To test a modded file we need the game itself running. There is no Windows 95 machine here, so the choice was Wine (Gcenx's macOS build, Wine 11) with the disc's folder as drive D:, labelled POD2_0.

Six walls ​

Each stop came with its own message, and each was traced back to one place in WINPOD.EXE. The full table is in Running the original.

  1. "A privileged instruction was executed at 004a88cd." The CPU check (FUN_004a4284) asks a Cyrix chip for its identity through I/O ports 0x22 and 0x23. Windows 95 let a program do that; Wine does not. The patched copy says "not a Cyrix".

  2. "SetDisplayMode → DDERR_UNSUPPORTED". The game asked for 640 × 480 at 1,640 bits per pixel. A breakpoint in winedbg showed the depth was right (16) when the setup began. The culprit is the mode-list callback (0x4a4740): it appends every display mode to a table with no limit. A 1997 card listed a dozen modes. A Mac lists well over sixty, and the table runs into the colour-depth variable next to it. A small replacement callback keeps the first 56 modes up to 1024 wide.

  3. It kept going fullscreen. The game plays in a window only on a 16-bit desktop. On any other desktop it switches itself to fullscreen when activated. It now starts windowed (DAT_004f7260 = 0) and reads the desktop as 16-bit.

  4. "Please insert POD CD-ROM." This disc has its text in French, German, Italian and Spanish, but no English folder. With Language=English the game fails to open DIC_ERR.BMD and blames the CD. It now runs in French.

  5. A loading screen, twice. The game drew 16-bit pixels into a 32-bit surface, so every row showed up as two squashed copies:

    The loading screen shown twice side by side in false colours

    The back surface now asks for a 16-bit pixel format, and Wine converts it on each copy to the screen.

  6. Colours a little off. The menu came up, but greener and bluer than our decoder shows it. The game draws in RGB555 unless the screen says RGB565 (DAT_0060b314), and Wine's software blitter converts only 565:

    The main menu, MENU PRINCIPAL, with a green-blue tint

    The game now reads the layout from its own back surface, sees RGB565, and draws in it. POD had a 565 path all along, for the cards of the day that used it.

The "You must install Indeo to play the video" screen, NOINDEO.BBM

NOINDEO.BBM from DATA/BINARY/VIDEO, one of the stills we decoded earlier, shown by the game itself: the intro videos need the Indeo codec.

How it is known ​

Every patch checks the original bytes before it writes, in run/wine/patch_winpod.py. The copy goes into the Wine prefix under derived/, and the player's file is never touched. run/wine/run.sh builds the drive, the Ubi.ini the installer would have written, and the patched copy, then starts the game. The overflow was measured: winedbg showed the depth as 16 on entry and 0x668 at the failing call. The rest was observed in the code and then confirmed by the next run.

Next ​

Drive a race from the keyboard, and get sound, CD audio and the Indeo videos working. Then record the game's file reads, so each format document can name what the game opens and when. After that, load a modded texture and watch it appear on screen.

Prose CC0 1.0, code Apache 2.0. POD: Planet of Death is © Ubi Soft; none of its files are on this site.