[Description] [Download] [Contact]
[Description]

NUTRIA-reboot is a complete re-writing of one of the oldest ZX Spectrum 48K emulators, also called Nutria, that was a MS-DOS hosted program I developed in 1991. Nutria-reboot starts its versioning at v5.0.0 since the last version of the old Nutria was v4.0. You may be interested in other works I have developed related to the ZX.

NUTRIA-reboot is a 48K-only ZX Spectrum emulator. In spite of not emulating other models or clones, it has the following interesting features:

  • Complete and faithful emulation of the Z80, including undocumented instructions and behaviours, thoroughly tested with existing exercisers such as zexall or the ones of Patrik Rak. This also includes the more recent undocumented effects of interrupts on block instructions and other tests described in the GitHub page of Ped7g.
  • Faithful emulation of the ZX ULA, including interrupts, TV beam position and synchrony with the CPU, tested with a real ZX Spectrum 48K issue 4.
  • Faithful emulation of border effects, tested with games such as Aquaplane and Darkstar in both the emulator and the real ZX Spectrum.
  • Faithful emulation of the ULA/CPU memory and I/O contention, the CPU floating bus and the ULA snow effect.
  • Loading and saving of .SNA, .TAP, (non-turbo) .TZX, .TAB (procedural tape), and .BAS (plain BASIC) files; loading of .TAP, .TAB, .BAS, and .TZX either instantaneously -with ROM routines bypasses- or as raw tapes -raw sound- using the ROM routines.
  • Loading and saving of screens both in .SCR and in .PNG formats.
  • Both assembly and BASIC instrumentation to debug programs. This includes machine code, CPU stack, CPU registers, BASIC system variables, BASIC program variables, BASIC code, BASIC GOSUB stack and a very handy measurement of execution times.
  • Possibility of launching the app with or without the instrumentation panels, and also of automatically load an .SNA file if it is present in the same directory, for demonstrations (see the
    --help
    command line option).

The program is entirely written in C++ and it has a graphical user interface based on the ZXEcosystem library and GUI, which shows a native ZX Spectrum aspect. That interface provides access to a very important instrumentation of the emulator.

The following snapshot shows the main components of the interface when Nutria is opened:

You can see some general features of the GUI here:

  • Completely editable CPU state.
  • Disassembly of the current instructions, with their binary sequence of bytes visible just by hovering the mouse over them.
  • Calculation of execution times both for single instructions and groups of them.
  • Stack visualization of the zone where the register SP is pointing at.
  • All numeric values can be visualized either in hexadecimal or decimal, at will.
The "ULA state" tab provides information about the inner workings of the ULA:

  • Exhaustive information about the timings (how many frames since the last reboot, how many ULA clock ticks in the current frame).
  • Precise location of the TV beam, with numerical coordinates and a visual mark on the ZX screen.
  • Internal states of the ULA state machine, including information about contention, area of the display being drawn, and current accesses to memory.
On the other hand, the "Memory" tab shows the -completely editable- binary and textual content of the memory, either in hex or dec numerical bases, coloured depending on the area (ROM, display, RAM, ...), and with goto and search buttons:

You can control the execution at the low level of the CPU by going step by step and can set very diverse kinds of breakpoints:

  • Memory breakpoints; either execution (PC register reaching that address), read or write (at that address).
  • I/O breakpoints: read or write operations at certain ports.
  • CPU status: some bits of a register forming a value that can be compared with other in a logical expression.

As for the high level, you can control the execution of BASIC programs (even the BASIC line currently in the edition buffer), measure their timings, view and edit their variables, etc., as shown in the following figures and video:

Finally, you can decolour the screen to inspect the drawing of images:

... and also have have access to a complete tape manager able to not only select the next file to load from BASIC but also to edit tape files (.SNA snapshot files can be loaded as well from the topbar menu):

[Download]

Click here to download v6.1.0, the last executable version of Nutria-reboot, both for Linux-64 and Win-64.

This downloadable is updated with some frequency; come back from time to time for bug fixes and new features!

[Contact]

The development of the NUTRIA-reboot emulator started in Dec 2020. It has been entirely designed and programmed by me (Juan-Antonio Fernández-Madrigal) since then.

If you are interested in this work, you can contact me in "software" (remove quotes) at jafma.net.