Performance

How fast Bizmuth emulates the Next, and what it costs to run. Every figure here was measured on one machine, an AMD x86_64 desktop running CachyOS Linux, on development builds after 1.0.0-beta2, on 3 September 2026. A figure means something only against another from the same machine: two computers, or two window sizes, are not comparable.

Emulation speed

The Next runs 50 frames a second. With no window, Bizmuth runs as fast as the host allows, and its frame rate is the measure of headroom.

WorkloadFrames a secondTimes real time
ScrollNutter, a copper and raster scroller204.54.1
TX-1696, in game162.33.2
NXModPlayer, playing a module145.82.9

Each workload starts from a save state of the program running, so no boot time is counted. Each figure is the median of five runs interleaved with the build it was compared against. The same build run against itself differed by at most 0.3%, so a difference under about 0.5% is not a result.

Frame time by area

Measured with perf, as a share of the emulated frame, on the same workloads:

AreaScrollNutterNXModPlayerTX-1696
CPU and memory bus49.7%43.6%45.2%
video compositing20.6%17.0%24.4%
interrupt controller4.8%15.3%7.4%
AY sound6.0%4.8%4.7%
UART5.7%4.5%4.1%
CTC2.5%3.6%2.1%

These were taken before two later changes that reduced the interrupt controller’s share on NXModPlayer from 17.3% to 12.8% and removed most of the UART’s.

Windowed use

With a window open on X11, drawing through OpenGL, Bizmuth used 0.32 of a CPU core to run the Next at 50 frames a second: 27.9 × 10⁹ cycles over 20 seconds, with 11,030 page faults.

On Wayland the same build takes about 200 times the page faults, 2.19 million against 11,000, all of them in the toolkit’s software redraw of the window, which GTK 3 repeats in full for each of the 50 refreshes a second. Starting Bizmuth with GDK_BACKEND=x11 avoids it, where XWayland is installed.

Frame times

The ADP command frametimes reports how long the emulator spent on each of the last 300 frames: the mean, the 99th percentile, the worst, and how many overran the 20 ms frame. A stall shows in the worst figure and the overrun count, not in the mean.

Taken on an Apple M5 Max, booting NextZXOS with no window:

> frametimes
frames 300 of 583 seen — mean 5.13ms p99 6.84ms worst 7.29ms; 0 over the 19.99ms budget

This is the measure to quote when a program stutters, since the averages above hide a single long frame. See ADP.

← Documentation