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.
| Workload | Frames a second | Times real time |
|---|---|---|
| ScrollNutter, a copper and raster scroller | 204.5 | 4.1 |
| TX-1696, in game | 162.3 | 3.2 |
| NXModPlayer, playing a module | 145.8 | 2.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:
| Area | ScrollNutter | NXModPlayer | TX-1696 |
|---|---|---|---|
| CPU and memory bus | 49.7% | 43.6% | 45.2% |
| video compositing | 20.6% | 17.0% | 24.4% |
| interrupt controller | 4.8% | 15.3% | 7.4% |
| AY sound | 6.0% | 4.8% | 4.7% |
| UART | 5.7% | 4.5% | 4.1% |
| CTC | 2.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 budgetThis is the measure to quote when a program stutters, since the averages above hide a single long frame. See ADP.