Pico MZ Release 3.1
This is the first release of Pico MZ in 2026. It fixes a number of problems that I've found since the 3.0 release last November and introduces the ability to read and write multi-block BSD (BASIC sequential data) files.
For ease of use (and code maintenance) it combines the MZ-80K,A and 700 emulations into a single .uf2 file per Pico platform type when using a Pimoroni VGA demo base. In other words, one .uf2 file for the Pico and one for the Pico 2.
There's a third .uf2 file that supports all three emulations for both of the RC2014 Pico and RP2040 VGA boards.
The emulator type is selected at power on by holding down a button. Button 'A' is for the MZ-80A, 'B' or 'C' for the MZ-700. No button press at start up results in the emulator booting into MZ-80K mode.
The most difficult piece of work was implementing multi-block data files. The sheer number of different ways each combination of Sharp MZ model and language tape approaches this is mind-bending. There's a note in the 1996 Sharp Users Club magazine Volume 16/3 referring to the development of SUPERCOPY that reads:
"This is where the fun starts! ... Sorting out these differences, and finding ways of accommodating them, has taken us the best part of the last three months, but we have succeeded ..."

The article goes on to explain the key differences in BSD file format between the machines and it's fortunate that the developers of SUPERCOPY did so, as it only(!) took me a couple of weeks to implement data file handling for the SP-5025, SA-5510 and S-BASIC dialects. There's more work to do - for example, the Knight's Wee Fortran compiler doesn't use any of the three formats I've implemented so far (and so still won't save Fortran source code to 'tape' on my emulator) but that will need to wait.
It will need to wait not least because the code implementing cassette tape emulation was already unstructured and rather fragile before I started to implement BSD files. It's now even more unstructured and fragile. To carry on extending cassette data file handling and hopefully implement disk data files, the code desperately needs refactoring. Definitely a winter job.
Combining the source code for the MZ80-K/A and MZ-700 emulations has also thrown up other opportunities for simplification and refactoring, particularly around keyboard and memory handling.
Along the way to the 3.1 release I've found weirdness in busy_wait_us() and/or TinyUSB that makes using the Pico SDK 2.3.0 a non-starter for the time being. I've rationalised the way the emulator is slowed down to match real hardware by more closely linking timing delays to the number of Z80 t-states that have elapsed. I've smoothed out yet more issues in keyboard handling - the issue log for the project reads like a long lament on the differences between USB and Sharp MZ keyboards. Memory dump handling has been improved and bugfixed (again). Saving programs to sd card works more reliably. The documentation has been updated.
That will definitely do for the time being. The emulator is not perfect (far from it), but it's good enough for most of my purposes and hopefully yours too, should you decide to try it.
The new and improved Pico MZ will get its public debut at the RC2014 assembly at the end of September. I hope to see you there.
Update 20th September 2026
Pico MZ release 3.1.1 is now available. There are a couple of bugs resolved that impacted keyboard handling on some games (for example, the MZ-700 and MZ-80K versions of Space Panic).
