Releases: neilhewitt/Zem80
2.0
This is version 2.0 of Zem80. It is a complete redesign of the emulator core with the goals of having a cleaner architecture, more modularity, better timing and porting to .NET 8.0.
Some minor breaking changes were introduced to the API and events, but these will be obvious from context. Update your project to .NET 8.0 and build and see if any errors pop up.
Full Changelog: 1.2.2...2.0 - warning, this is a HUGE set of changes!
Zem80 1.2.2 Release
This will be the final release of version 1 of the emulator.
This release contains some optimisations and a few bug fixes, but no new or changed features. It's worth updating simply for the improvements and fixes, though.
Development on version 2 has now begun and can be tracked on the development branch.
Zem80 1.2.1 Release
Many fixes in this release, plus I ported the emulator to .NET 7 - note that this is now the minimum version that the libraries will work with. I also, finally, got Spectrum audio working. This was made possible by redesigning the beeper code based on code from the SoftSpectrum48 project (I couldn't use their code as there is no published license even though the source is freely available), which fixed my latency / choppy audio issue, and then finally fixing the emulator cycle timing which was causing the audio distortion.
In this release I've added 'time-slice' timing as an option. You specify the new Timing.TimeSliced mode, supply a time slice value in ticks / t-states when you initialise the CPU, and once execution begins, once this number of t-states has been run the CPU will invoke the new OnTimeSliceEnded event. Why would you want to do this? Well, in the Spectrum VM I need real timing for screen updates and audio, but I don't need real-time operation for clock ticks etc. So the Spectrum VM sets the timing to TimeSliced which will run just as fast as it can (and that's FAST now that I've optimised some things) but after 20ms worth of Z80 time, which actually now takes <1ms of real time, it gets the event callback and calls Suspend() to put the Z80 to sleep. There's a timer running in the background firing every 20ms, which resumes the CPU, updates the screen, does interrupts for keyboard etc, after which the CPU suspends again. This massively reduces the % PC CPU that the emulator uses from 17% down to 2%. This is a great option if you need real timing but not real-time events.
If implementing emulated hardware against Zem80 1.2.1, be aware that you may need to supply your own cycle wait pattern to ensure the timing works as expected. I'll try to write a README about that sometime soon!
Zem80 1.1 Release
This release moves the emulator over to .NET 6 and includes a large number of fixes and optimisations to improve performance and reduce CPU usage. There are some small breaking changes. As before, the ZX Spectrum emulation is badly broken and shouldn't be used for anything other than testing.
Zem80 1.0.1 Release
This release adds some bug fixes, but there are several changes to the IDebugProcessor interface which remove many of the events present there and move them to the main Processor class. Restrictions on writing to the AF and F registers have been removed.
I also added basic but buggy beeper support to the ZX Spectrum sample VM, so it does now play sound, however this sound is choppy and as a whole the timing of the emulator appears to be off. As it's a sample VM only I don't intend to fix this (though I might play about with it anyway).
Anyone using v1.0.0 of the emulator should update to this release.
Zem80 1.0 Release
This is the first complete release of the Zem80 Z80 emulator project. The core Z80 emulation appears to be complete and defect-free (although I'm sure it's not!) and is ready for use in projects.
A sample ZX Spectrum virtual machine is included, but this is purely a sample and not intended to be used for actual emulation purposes - not least because it has no sound input or output. As an example of how to embed the Z80 emulation into a project, it serves its purpose, and it will not be extended further.
(Please note the license for this project, and further note that the ZX Spectrum ROM image files are distributed under different license conditions and you must respect these if you use or distribute this code.)