Skip to content

Ferrum development journal · Part 2 of 19

From Return Values to Pixels and Sound

A window, a sound, and a changing image answer different questions. This phase started connecting translated Windows code to results a person can actually see and hear.

Once an executable can run, the next question is pretty straightforward: can it do anything useful outside the terminal? For a game or a desktop application, that means windows, drawing, input, and sound. Those are separate connections, and getting one working doesn't automatically bring the others along.

The August work started joining those pieces. A translated guest produced sound, the Mac surface gained a way to accept an image from the graphics path, and the rendering checks moved toward verifying the pixels the guest had actually drawn. That last part matters more than a successful device-creation call. An application can create a graphics device and still leave you looking at a blank window.

For example, if a test draws a known color, we can read the result back and compare it with what the program requested. Then we can ask a different question: did that image reach the window? The renderer and the presentation layer can each be doing something reasonable while the connection between them is wrong.

This phase also exposed instruction and API gaps that tiny command-line programs hadn't reached. More realistic graphics code exercised vector instructions, DLL initialization, memory, and synchronization in combinations the earlier tests never used. That is one reason I don't treat the number of implemented functions as a compatibility score. What matters is whether the application can use them together.

The sound and pixel milestones were encouraging because they made the work less abstract. There was something to observe. They were still targeted development results, though. They didn't establish sustained game audio, a long interactive session, or support for every DirectX feature.

The practical lesson was to keep asking for the result at the far end of a feature. If we're working on drawing, let's inspect what was drawn. If we're working on presentation, let's make sure the window changes. A return value is useful evidence, but the thing the viewer sees needs its own check.

Ferrum development journal

View the journal

Live19 entries so farUpdated New (19 entries updated in the last 14 days)

  1. Part 1Bringing FEX to macOS: The First Windows ProgramDevelopment work: Aug 5 – 7, 2026Updated , new
  2. Part 2From Return Values to Pixels and SoundDevelopment work: Aug 8 – 11, 2026Updated , new
  3. Part 3Building More of the Windows RuntimeDevelopment work: Aug 12 – 18, 2026Updated , new
  4. Part 4Following a Game Through Its Opening VideoDevelopment work: Aug 19 – 20, 2026Updated , new
  5. Part 5Installers, Saves, Fonts, and the Parts Around the GameDevelopment work: Aug 21 – 22, 2026Updated , new
  6. Part 6Game Progress and Measuring the Right ThingDevelopment work: Aug 23 – 27, 2026Updated , new
  7. Part 7Building the 32-Bit Graphics PathDevelopment work: Aug 28 – Sep 1, 2026Updated , new
  8. Part 8Making Memory, Files, and Graphics State AgreeDevelopment work: Sep 2 – 3, 2026Updated , new
  9. Part 9DirectX 12, Shader Caches, and the Steam Startup WorkDevelopment work: Sep 4 – 6, 2026Updated , new
  10. Part 10Working on Presentation and Controller InputDevelopment work: Sep 7 – 12, 2026Updated , new
  11. Part 11A Launcher and a Freeze That Wasn't the PresenterDevelopment work: Sep 15 – 17, 2026Updated , new
  12. Part 12Portal Reaches a Command Stream, With the Frame Still AheadDevelopment work: Sep 23 – 26, 2026Updated , new
  13. Part 13Correcting the Ferrum Progress ReportDevelopment work: Oct 2, 2026Updated , new
  14. Part 14Recovering the Project and Resuming Real TestsDevelopment work: Oct 5, 2026Updated , new
  15. Part 15Making Memory Protection and Lifetime Tests More UsefulDevelopment work: Oct 6 – 9, 2026Updated , new
  16. Part 16Getting Wine's Real 32-Bit Startup to RunDevelopment work: Oct 9 – 11, 2026Updated , new
  17. Part 17Making the Launcher Own Its Storage and ProcessesDevelopment work: Oct 11, 2026Updated , new
  18. Part 18A Real Archive Roundtrip and Better File BehaviorDevelopment work: Oct 11, 2026Updated , new
  19. Part 19Asynchronous I/O and the Bytes a Cancelled Write KeepsDevelopment work: Oct 11, 2026Updated , new

Arrow keys move through the results, Enter opens one, Command or Control with Enter opens it in a new tab. Tab and Shift+Tab change which kind of results are shown.