Skip to content

v1.8.1

Choose a tag to compare

@kibertoad kibertoad released this 02 Nov 13:58
· 364 commits to main since this release
3bdb0ef

What's Changed

Hardware emulation

Voodoo2 on the OpenGL renderer

With voodoo_renderer=opengl, a Voodoo2 now draws on the GPU only and reads back just the rows a game reads, instead of drawing every frame twice. CPU-to-screen copies queue behind the drawing, and SGRAM fills follow the card's tiled layout and stay on the GPU. 3DMark 2000 now runs at full speed with OpenGL.

  • Flush once per Voodoo2 CPU-to-screen copy, not per data word by @kibertoad in #327
  • Voodoo2 OpenGL: queue CPU-to-screen copies behind the drawing (#334 step 1) by @kibertoad in #339
  • Voodoo2 OpenGL: draw on the GPU only, read back the rows a read touches (#334 steps 2-3) by @kibertoad in #340
  • voodoo: SGRAM fills go by the card's tiles and stay on the GPU (3DMark 2000 at full speed with OpenGL) by @kibertoad in #351
  • voodoo: cut the per-word costs of CPU-to-screen copies by @kibertoad in #354

Timing and speed

  • cycles=auto: keep the held frame rate on steps down, judge the host by time lost by @kibertoad in #253
  • Voodoo: queue texture data over textures queued triangles read by @kibertoad in #404
  • idle: skip a Windows 3.1 PeekMessage loop's passes through the services it calls by @kibertoad in #366

Improved hardware support

  • Ask for the discrete GPU on laptops with two graphics chips by @kibertoad in #331
  • FPU: round single stores as the control word says on both cores by @kibertoad in #337
  • dynrec: store singles of 80-bit values without leaving the block by @kibertoad in #324
  • CD images: Joliet long names for Windows programs by @kibertoad in #304
  • CD images: read High Sierra discs by @kibertoad in #305
  • Win16 DPMI: 0300h-0304h run real-mode code through one entry and return by @kibertoad in #314
  • win32_depth=16: a High Color desktop by @kibertoad in #313
  • video: update xBRZ only in damaged regions by @firestrand in #308
  • Make the Sound Blaster's output frames on the card's clock by @kibertoad in #424
  • VGA: honour CRTC Mode Control's address bits 13 and 14 in planar modes by @kibertoad in #428
  • Frames: don't end a batch in the blanking after a vertical retrace by @kibertoad in #431
  • Built-in Windows: Video for Windows with Indeo 3 and 5, and ACM 1918 by @kibertoad in #418
  • Glide: grSstWinOpen loads 3dfx's gamma, 1.3 on a Voodoo2 and Voodoo3 by @kibertoad in #454

Games fixed and optimized

Windows 98 Setup

  • Win16: CLI and STI go on; an INT whose real-mode vector a program set runs it by @kibertoad in #306
  • Built-in DOS: the FAT32 functions answer at any DOS version while a FAT32 drive is mounted by @kibertoad in #307
  • FindFirst: the volume label only in the root, by its name by @kibertoad in #316
  • FindNext on a FAT disk goes on from the directory slot by @kibertoad in #317
  • IOCTL: fail subfunctions past 11h, so Win98 Setup doesn't find PC-NFS by @kibertoad in #322
  • Answer IOCTL input and output status and the remote-handle check as MS-DOS does by @kibertoad in #389

The Tone Rebellion

  • Built-in Windows: CreateProcessA starts Windows 3.1 programs by @kibertoad in #300
  • DDRAW: leaving exclusive mode gives the desktop back by @kibertoad in #301

Sub Culture

  • Built-in Windows: CreateProcessA starts Windows 3.1 programs by @kibertoad in #300
  • disk: answer a name its folder lacks without asking the host by @kibertoad in #320
  • dynrec: store singles of 80-bit values without leaving the block by @kibertoad in #324
  • FPU: round single stores as the control word says on both cores by @kibertoad in #337

MechCommander

  • DDRAW: leaving exclusive mode gives the desktop back by @kibertoad in #301
  • USER32: per-queue activation, foreground lock, WM_MOUSEACTIVATE by @kibertoad in #303

NetStorm

  • CD images: Joliet long names for Windows programs by @kibertoad in #304

Metal Marines

Moto Racer

  • KERNEL32: look for a relative program path on the search path by @kibertoad in #310
  • Registry: Windows has a product id (Moto Racer install check) by @kibertoad in #311
  • COMDLG32: keep the old dialog's folder list in path order by @kibertoad in #312
  • Voodoo2: 8-bit texture downloads follow their own TMU's mode by @kibertoad in #315
  • Voodoo2: a graphics reset shows buffer 0 and draws into buffer 1 by @kibertoad in #330

Glover

  • DirectDraw: give a back buffer attached on the 3dfx device the card's pitch (Glover, #207) by @kibertoad in #319
  • win32: a timed wait ends on time, and its thread runs at once by @kibertoad in #333

Oni

  • USER32: leave the 0x of %#x out of wsprintf's width by @kibertoad in #345
  • Built-in DLLs: export under Windows 98 SE's ordinals by @kibertoad in #364
  • Built-in Windows: open the system tables to level 3, as Windows 98 does by @kibertoad in #367
  • Built-in Windows: WOW32.DLL's generic thunks by @kibertoad in #380

Unreal Gold

  • OPENGL32: draw full screen on a Voodoo2, as 3dfx's Voodoo2 driver did by @kibertoad in #349

Prehistorik 2

  • Game fixes in one table: Prehistorik 2's Sound Blaster mix, which had clicks at every note by @kibertoad in #359
  • Make the Sound Blaster's output frames on the card's clock by @kibertoad in #424
  • VGA: honour CRTC Mode Control's address bits 13 and 14 in planar modes by @kibertoad in #428
  • Frames: don't end a batch in the blanking after a vertical retrace by @kibertoad in #431
  • Ignore writes to floppy controller ports when no controller is attached by @kibertoad in #399

Jukebox Adventure

  • Game fixes in one table: Jukebox Adventure's Sound Blaster mix and its title screen hang by @kibertoad in #359

Johnny Castaway

  • USER32: don't take a sent message again while it is being handled by @kibertoad in #355
  • Win16: zero the segment registers that hold a selector being freed by @kibertoad in #357
  • USER32: a window shown or moved under the cursor gets a WM_MOUSEMOVE by @kibertoad in #365
  • idle: skip a Windows 3.1 PeekMessage loop's passes through the services it calls by @kibertoad in #366
  • Built-in Windows: the screen saver's timer, and .SCR from the prompt by @kibertoad in #384

Giants: Citizen Kabuto

  • Built-in Windows: DINPUT8.DLL, DirectX 8's DirectInput by @kibertoad in #350
  • Direct3D 7: clip vertex buffers that ProcessVertices clipped by @kibertoad in #356
  • DirectDraw: a mipmap's levels in one block of video memory by @kibertoad in #445

Omikron: The Nomad Soul

  • ddraw: IDirectDrawSurface4 compares only dwCaps in GetAttachedSurface by @kibertoad in #368
  • MSVCRT: _set_se_translator by @kibertoad in #369
  • USER32: clip the update region when validating, as Windows does by @kibertoad in #370

ACM 1918

  • Built-in Windows: Video for Windows with Indeo 3 and 5, and ACM 1918 by @kibertoad in #418

Drakkhen

  • Keep a process made with AH=26h resident and return to its maker by @kibertoad in #409

Myth: The Fallen Lords

  • Voodoo: queue texture data over textures queued triangles read by @kibertoad in #404

Test Drive 4

  • Built-in MSACM32.DLL for programs that only ask its metrics by @kibertoad in #436
  • Glide: grSstControl gives the monitor to the card and takes it away by @kibertoad in #437
  • USER32: ExitWindowsEx ends the session by @kibertoad in #438
  • Glide: grSstWinOpen loads 3dfx's gamma, 1.3 on a Voodoo2 and Voodoo3 by @kibertoad in #454
  • winmm: the Sound Blaster 16's seven aux devices by @kibertoad in #455

Program Manager (Windows 3.1)

  • Win16 KERNEL: GetCurrentDirectory (411) and SetCurrentDirectory (412) for Program Manager by @kibertoad in #448

Other changes:

  • ddraw: IDirectDrawSurface4 compares only dwCaps in GetAttachedSurface by @kibertoad in #368
  • Record what the frames before an audio underrun did by @kibertoad in #383
  • Skip frame limiters that read the built-in Windows's clock by @kibertoad in #388
  • Keep the running speed and the mounted disk image on a state load by @kibertoad in #335
  • Save states: W32 section version 22 for DirectInput app data by @kibertoad in #430
  • Give the debug server's log the lines logged before it started by @kibertoad in #336
  • Audio: a null output on an exact clock, and no measuring on SDL's dummy driver by @kibertoad in #427
  • Win32: load built-in DLLs dynamically as Windows does by @kibertoad in #394
  • win32: run exception handlers with TF clear by @kibertoad in #397
  • Add an issue form for problems in a game or program by @kibertoad in #352
  • AGENTS.md: a pull request's lifecycle, from draft to ready by @kibertoad in #363
  • tools: a run lock with shared builds and exclusive measurements by @kibertoad in #379
  • run-lock: wait at most two hours by default by @kibertoad in #406
  • AGENTS: decide timing measurements by what the claim quotes by @kibertoad in #407
  • web: record memchr in the lock file by @kibertoad in #395
  • Test: freeze the host clock in the clock-wait comparison by @kibertoad in #451
  • CI: move the Windows 7 build to nightly-2026-10-31 by @kibertoad in #401
  • CI: compile shaders with glslang; fix xBRZ's mix overload by @kibertoad in #302
  • Add dosc extension and key/mouse focus in libretro by @dividebysandwich in 5c3cba0c

Full Changelog: v1.8.0...v1.8.1