Current Status
Here is a summary of the current status of SoftSpectrum 48:
- Z80 emulation. The Z80 emulation is very accurate. It emulates all undocumented operations and flags as well as the memptr.
- ZX Spectrum 16K/48K/128/+2/+2A/+3 emulation. Contended memory, contended I/O and the floating bus are emulated (including the +2A/+3 floating bus).
- Test programs. Here is a list of test programs that SoftSpectrum 48 passes.
- ROM. Several ROM variants are selectable.
- Screen emulation. The screen image is updated 8 pixels at a time, simulating a CRT TV electron beam. This enables advanced color effects in games using a precise synchronization of the display data updates and the TV electron beam (like Uridium, Aquaplane and Starion). There is also a simple effect to simulate a CRT screen using a WPF pixel shader (read more about this here). ULAplus 64 colour mode is emulated.
- Sound. The Spectrum beeper and the AY-3-8912 sound chip are emulated.
- Loading files. Snapshot files in SNA, Z80 and SZX format can be loaded. The emulator can load files in TAP, PZX and TZX format (limited to the more the common TZX block types). Snapshots and tape files can be opened via drag and drop. Speed load (increased emulated CPU speed during tape loading) and flash load (loading tape blocks directly into RAM) can be selected in the tape loading dialog. Note that flash load is limited to tapes which are loaded via the ROM routines so tapes using custom loaders can't be flash loaded. Standard and extended disk images are supported in +3 mode. TR-DOS files can be opened (not written to) via Beta Disk emulation. RZX recordings can be loaded for playback.
- Saving files. Z80 snapshots can be saved. Saving to TAP format works as long as the ROM routines are used.
- Save and load game progress. There is a rewind button in the status bar, which loads Z80 snapshots that are auto saved every five seconds. Up to 99 states are saved, which means that the emulator can be rewound up to eight minutes. You can also quick save a snapshot using the F11 key, and load it with the F12 key.
- Keyboard. Special character keys (semi colon, quotes etc.) can be accessed from a standard PC keyboard (UK or Swedish keyboard layout can be selected) without using the ZX Spectrum modifier keys.
- Joystick. A game controller connected via USB can be used. Kempston joystick is also emulated via the PC keyboard arrow keys (fire button "B" on the PC keyboard).
- Mouse. Kempston mouse is emulated (activated via the Emulation menu).
- Debugging. There is a debug window with a button to step through the Z80 instructions and view the current register values. A disassembler processes (in a parallel emulation thread) 24 instructions ahead so that it is always possible to see what is coming next, when stepping through the code. Breakpoints can be added for memory addresses as well as accessing IO ports.
- Assembler. A simple assembler functionality is implemented by integrating a third party assembler (currently only Pasmo). In the Assembler window, a source file (*.asm) can be opened and assembled using the third party assembler. The resulting code is automatically loaded into RAM at a given address. Any labels are also loaded and are visible in the debugger. Read more here.
Updates
2023-12-17
- Support for RZX playback.
- Support for loading SZX snapshots
- Activating Z80 execution logging from the debugger is now more intuitive. Also, initial register values are added to the log.
- A problem with physical game controller buttons has been fixed, and analog stick calibration has been improved (thanks to John Vugts for his help with these issues).
- Updated memptr behaviour in I/O block instructions after new findings by ZjoyKiLer.
- The beeper routines have been modified to have less impact on other audio streams.
2023-07-30
- Assembler parameters are no longer hard coded but can be edited and are saved in user settings.
- Support for 16K Spectrum (including loading and saving 16K type 3 Z80 snapshots).
- Pressing left and right shift keys simultaneously now activates extended mode correctly (this is an alternative to pressing the left shift and ctrl keys).
- Improved snow effect for Spectrum 128 and +2 when reading from 0xC000-0xFFFF.
2023-01-02
2022-08-12
- Support for loading tape files in PZX format.
2022-07-19
- The tape player has been reworked to allow saving to TAP files via a new Record button. There is also a new File menu with options for creating and saving TAP files. Note that it is impossible to save to TZX files and that saving only works with the ROM routines.
- Screenshots can be saved in the SCR format.
- Breakpoints can now be activated for memory read and write.
- Breakpoints listed in the breakpoint window are now sorted in the order they were added.
- A problem with breakpoints in source files for the assembler has been fixed (labels named BR1/BR2/BR3 generate breakpoints).
- Various minor bug fixes.
2022-06-20
- The Breakpoints and Memory viewer windows are now displayed and hidden correctly when the debug window is opened and closed. They are also kept topmost when moved with the debug window.
2022-06-19
- The debug window has been split so that breakpoints and memory are handled in separate windows. The new windows can be docked to the main debug window.
- The Z80 registers can be edited in the debug window.
- There is a small ZX Spectrum screen in the debug window.
- Various minor bug fixes and improvements.
2022-04-28
- The memory inspector is now editable (only in RAM).
- Minor improvements to the disassembler.
- The scanline shader is slightly darker and scales better.
2022-02-12
- Updated the screen shader with a Gaussian blur effect, which replaces the built in WPF bitmap interpolation. Also replaced the CRT shader magnification (introduced in the 2021-08-15 version) with a feature which expands the scanline height from three to four rows when the display is magnified to 400% and above.
- Adjusted memory contention for HALT according to this article.
2022-01-03
- Added step over function to the debugger.
- Implemented the principles for how flags are affected by aborted block instructions described by David Banks.
- Breakpoints now survive a reset.
2022-01-01
- Breakpoints can now be added directly in the debugger disassembly view as well as in a separate list.
- It is now possible to switch between two different disassembly views; either a regular view of all the visible memory or a simulation of the next 24 operations following the current operation.
2021-12-27
- Game controller analog stick is now supported and configurable to a number of standard mappings.
- Retro USB joysticks are supported.
- Adjusted the screen memory switch timings to correctly display the Song in Lines demo.
- Some minor adjustments to the debugger GUI.
2021-09-18
- A very minor (but annoying) bug fix: the keyboard click now works correctly.
2021-08-15
- The ZX Printer is emulated. Printer output is directed to the Printer window under the Tools menu (the emulator detects a printer when the Printer Window is visible).
- The CRT shader patterns are now magnified when the emulator display is zoomed to 300% and above.
- Some minor bug fixes and improvements.
2021-06-17
- Some timing issues fixed. Starion's border effect is now displayed correctly.
- Intel has published a beta driver which fixes the problem causing the CRT shader effects freezing on the Intel Iris hardware. A final release is expected shortly (check their download site here: Downloads for Graphics (intel.com).
2021-05-04
- Fixed a bug which could cause the emulator to crash when auto loading settings that requires a reset (for example when loading a 128K tape in 48K mode).
2021-04-30
- Added the option to map up to 8 buttons on a physical joystick to the Spectrum keyboard.
- If there is a settings file (*.ssp) saved in the same folder and with the same name as a tape or a snapshot file, the settings will be loaded automatically when the tape or snapshot file is opened.
- The Kempston joystick interface is now available on port 0xDF as well as the usual port 0x1F. Normally, port 0xDF is reserved for the Kempston mouse but some games checks it for the joystick, so if the mouse option is disabled, the port will be connected to the joystick.
- Fixed a bug which disabled all CRT effects, regardless graphics card. Intel Iris is still not supported.
2021-04-06
- A snapshot is automatically saved every five seconds, making it possible to "rewind" the emulator using the new button to the left of the pause button in the status bar. Up to 99 snapshots can be saved, which makes it possible to go back up to eight minutes.
- The menu bar is now hidden in full screen mode. Moving the mouse to the top of the screen makes the menu visible.
- The +2 emulation now has the correct number of T-states per frame.
- As a workaround to support PC:s with the Intel Iris integrated graphics, which currently doesn't work with .NET WPF, the hardware acceleration is not activated until a CRT effect is selected. If the PC has an Iris card, selecting a CRT effect will cause the window to go black. Intel is working on this, so hopefully an updated driver will be coming soon.
2021-02-07
- Improved the snow effect so that this test program runs correctly (needs late timings).
- The tape flash loader now handles TZX-files containing text blocks.
- Fixed a ULAplus settings problem which toggled ULAplus on/off when opening and closing the settings dialog.
- Trainer files using space characters as separator can now be opened.
2020-12-06
- Fixed a timing bug with LD IX/IY,(NN) which caused flicker in the Old Tower game.
- Fixed a problem with the presentation of IX/IY+d operations in the debugger.
- Various tape loading improvements and bug fixes to handle special cases such as short fragmented data blocks and non-standard flag bytes.
- Window scaling up to 600 %.
2020-11-25
- When a program tries to activate the ULAplus palette when it is already active, no action will be taken. Previously the palette would be re-activated unnecessarily, which slowed down the emulator.
2020-11-20
- Block type #35 (Custom info block) no longer prevents loading of TZX files.
- Reading ULAplus port #FF3B now correctly returns the last byte written to port #BF3B (but only when ULAplus is activated in the user settings).
2020-11-15
- Added setting for what the emulator should do when it loses focus (pause, mute audio or continue as normal).
2020-11-07
- Improved tape flash loading (see this entry in the Notes section).
2020-09-13
- Fixed an error which caused the CRT beam to move too fast in debug mode.
- Various minor bug fixes and improvements.
2020-07-19
- TR-DOS images (.trd and .scl) can be read via emulation of the Beta 128 Disk interface (enabled in Settings). The Beta Disk ROM is activated with RANDOMIZE USR 15616.
- The AY audio signal is now synced with the Z80 frame so that digital audio can be generated by controlling the signal amplitude (like in this demo). Previously (since the 2020-01-18 release), a separate class (Digitizer) was used to implement digitized speech when both the tone and noise channels are disabled in the mix, but this is now handled by the regular signal generator and the Digitizer class has been retired.
- Various minor bug fixes and improvements.
2020-06-04
- SP48.exe can now be executed from the command line with two arguments: path to a file to open (snapshot or tape file) and/or selected hardware mode. See the Tips section for instructions.
- POK-files (read about POK-files here) will be opened automatically when a snapshot is opened and the POK-file has the same name as the snapshot, but with the .pok extension, if the PO-file is present in the same directory as the snapshot or in a subdirectory named POKES. The POK-file trainers are applied in the Trainers window in the Tools menu.
- Fixed a bug which wrongly set Interface 1 as installed when saving Z80 snapshots.
- Various code improvements.
2020-04-30
- A simple poke function is available under the Tools menu.
- Various bug fixes. Screen effects are now scaled better with Windows scaling. The full screen setting is now remembered between sessions.
2020-04-10
- All settings are now available in a new window instead of only through separate menu items.
- Tape loading settings are now included in the settings save file.
- It is now possible to select how buttons on a connected controller device are mapped to the emulated Kempston joystick.
- A change to the settings file format is not backwards compatible regarding which machine is emulated, so any saved settings file needs to be updated (load the settings, select the machine and save the settings file again).
2020-03-22
- User settings can now be saved to file. Current settings are still saved automatically and loaded the next time the program starts.
- Fixed a bug which caused the keyboard click sound to lag.
2020-03-12
- Added basic joystick support. A game controller connected via USB can be used as a Kempston joystick. This is a simple implementation which is only tested on a PS/4 controller so it may not always work as expected for all controllers. For example, the buttons are hard coded to map to the controller buttons 0 and 1, which may or may not be optimal. Also, only the digital directional controls are polled - analog sticks are not recognized.
- Improved digital AY audio.
- New border width option: No border.
2020-02-29
- Fixed a bug which muted one of the AY channels (via the AY Digitizer class) when simulating digial Audio.
- Modified the AY output levels (roughly) according to http://forum.tslabs.info/viewtopic.php?f=6&t=539.
- Fixed a bug which caused the display to be misaligned in full screen mode.
2020-02-16
- Improved beeper emulation.
- Added information about currently selected ROM and name of snapshot or tapefile that has been loaded in the status bar.
2020-01-30
- Fixed a bug which caused the AY emulation to truncate frequency values to integers.
- Fixed a bug which prevented AY playback to be re-enabled after being disabled in 48K mode.
2020-01-18
- AY emulation now handles simulated digital audio when setting both tone and noise to "off" in the mix (an effect which is used to generate digitized speech in this demo: b2gemba.tap).
- AY envelopes are no longer reset when the signal period is changed.
- The AY noise generator is modified according to information from the World of Spectrum forum.
- The beeper is now a separate class.
2019-12-28
- Improved timings for screen memory switching.
- The debugger memory browser now includes a view of the stack.
- Fixed a bug in the +2A/+3 special memory mode switching which prevented Match Day II loading via disk.
- Various minor improvements and bug fixes.
2019-12-08
- New memory inspector in the debugger with access to all memory banks.
2019-12-07
- New breakpoints in the debugger for In/Out commands.
- Various layout changes in the debugger.
- Fixed a problem with the presentation of LD (IX+d),N in the debugger.
2019-11-10
- Improved AY emulation.
2019-11-01
- Tape files can be opened directly via File -> Open file (snapshots are opened via the same command). They can also be dragged and dropped onto the main window.
- Automatic tape loading can be initated at any time. Previously this was done by sending key presses to the emulator so it had to be in a state where it could accept commands.
2019-10-26
- Quick save/load current machine state using the F1/F12 keys.
- The Z80 registers are updated after flash loading headerless data blocks.
- Some improvements to the tape player logic, including a more precise auto pause (which is now active by default).
- The stack pointer is correctly handled when loading 128K SNA-files.
- The assembler function accepts a "$" prefix in the source ORG directive for hex values.
2019-10-06
- Screen switching perfomed via uncontened ports is now correct according to the information I have, but contended ports are still not timed correctly (the instruction timings are correct - it is only the point in time where the actual switch happens which differs).
- Tape starts playing automatically after entering LOAD command in the emulator.
- Tape pauses automatically when a tape loading routine pauses (which happens when programs have separately loaded parts). This is a bit experminental and may need more calibration, so the function is disabled by default, but it can be enabled by checking a box in the tape player window.
- A bug which caused +2A/+3 machines with 4.1 ROM to crash when flash loading tapes is fixed.
2019-09-28
- Added delay after screen switch command (OUT #7FFD) on 128 KB machines so that the ptime test gives correct results. Read more about this here.
2019-08-17
- The +3 disc controller command "Read Track" (sometimes called "Read Diagnostic") is now handled. A small reservation for any errors here because I have only had one disk image which uses this command to use for testing and the documentation is a bit unclear to me.
- Disk images with empty tracks followed by a non-empty track are can now be loaded.
2019-08-11
- Improved Flash loading of Basic programs (more information here).
- More than one interrupt is now allowed within the same frame.
- Option for late timings added.
2019-08-03
- Bug fixes related to the AY controller: Registers 14-15, which are now treated as one register (they both hold the value last written to any of them). The AY controller is no longer shut down during accelerated speeds.
- A problem with the tape the TZX "Stop" command is fixed so that TaiPan 128K no longer crashes.
2019-07-30
- Added an option for edge detection when loading tape files. Briefly this means that the tape loader doesn't have to wait for the duration of tape signals. Instead the emulator shortcuts the waiting period and delivers the necessary information directly to the loader. This is only implemented for the ROM tape loading routines at this point.
- Fixed a bug in the disk loading routine which caused some games to crash.
2019-07-22
- In +3 mode, the floppy disk emulation now supports SAVE, ERASE and FORMAT for standard images (like this).
- Fixed a timing problem in +3 mode.
2019-07-16
- Z80 snapshots for the +2A/+3 models can now be loaded and saved.
- Tape flash load now works for the +2A/+3 models. Note that flash load is still limited to the ROM routines.
- The +2A/+3 ROM version 4.1 and the +3e ROM by Garry Lancaster are now included.
2019-07-13
- The +3 model is emulated (with the same 4.0 ROM as the +2A model). The floppy disk functions are limited; only extended disk images are handled (including copy protection schemes like Speedlock +3).
- The +3 special memory paging mode is implemented.
- Various minor bug fixes.
2019-04-01
- New shader effects: A vertical CRT effect with more brightness than the original diagonal effect, plus a simple scanline effect. These new effects are not so realistic in my opinion but they are easier on the eyes (the original one is not very realistic either).
2019-03-23
- Fixed a bug that sometimes kept bit 6 (ear input bit) of the ULA ports set after tape loading.
- Calibrated speed tape loading, which failed to load some tap files.
2019-03-20
- Improved dynamics in the AY emulation.
- Added an optional stereo effect to the AY sound (activated in the Emulation menu).
- ULA plus is now off by default, but can be activated in the Emulation menu.
2019-03-14
- ULA plus is now activated via the Emulation menu.
2019-03-10
- Fixed a bug in the Out port which now handles all even port numbers.
2019-03-09
- Fixed a bug in the AY Controller which incorrectly accepted 8 bit values for the coarse time periods (only 4 bit values should be allowed).
2019-03-04
- The +2A floating bus is implemented.
2019-02-10
- Added +2 and +2A emulation. The +2A floating bus is not emulated.
- Memory contention now in accordance with the Sinclair FAQ Wiki (including IR contention which was previously omitted).
- Improved display update timings (and added som new h/w settings for this).
- Minor bug fixes and code improvements.
2019-01-14
- ULAplus 64 colour mode emulated. Check out https://sites.google.com/site/ulaplus/ to find some games with ULAplus support.
- Temporary increase or decrease emulation speed by holding down <§> or <TAB> keys.
- Minor bug fixes.
2019-01-05
- Added Kempston mouse emulation. Some games with mouse support are available here: https://velesoft.speccy.cz/kmsoft.htm.
- New full screen mode (selected from the File menu), which is recommended when using the mouse emulation. This is because the Spectrum and Windows mouse pointers won't be aligned, so it is easy to click outside of the window by mistake.
- TZX file block type "Skip block" is now handled.
2019-01-03
- A limited tape flash load function is implemented (a ROM routine is monitored and bypassed so that tape blocks can be loaded directly into RAM).
- Flash load and speed load are selectable via checkboxes in the tape player window.
- Turned off snow effect for 128K mode.
2018-10-21
- The assembler now interprets ORG directives in HEX format using either $ prefix or h suffix.
- Fixed a bug so that a breakpoint at the start of an interrupt routine works as expected.
- A new button "Load" in the tape dialog automatically types Load "" and starts tape playback (also works in 128K mode).
- Adjusted pause between loaded tape blocks to ensure that custom loaders have enough time to start before the next block is played back.
2018-08-03
- "IX/IY+d"-instructions are now correctly presented in the debugger.
2018-08-02
- Corrected the operation duration for LD SP, IX/IY which now is 10 T-states instead of 4. The Overscan demo now works.
- Fixed a bug which copied the content of the breakpoint 2 text box to breakpoint 3 in the debug window.
2018-07-29
- CRT beam and video data fetch syncronisation is improved, so that the Shock Megademo works.
- An approximation of the snow effect is implemented.
2018-07-15
- The current position of the simulated CRT beam is visible when stepping through code in the debugger. Also, a bug is fixed so that the CRT beam is updated correctly when debugging.
- OpenSE Basic added to the ROM options.
2018-06-18
- Breakpoints can now be created automatically from assembly source. This is done by naming labels BR1, BR2 or BR3 (there are only three breakpoints in the emulator.).
- Some fixes in the debug window handling so that breakpoints remain after reset.
2018-06-09
- Labels for the 48K ROM are displayed in the debugger. The labels are loaded from a symbol file in the "Rom files" folder. There is one symbol file for each rom file, but only the 48K one is populated. The labels where generated by assembling Geoff Wearmouth's ROM disassembly. Some editing was necessary since the actual lables only represent addresses, so the comments above the labels were used instead.
2018-06-08
- When loading a program via the assembler, any labels from the source file will be visible in the debugger. The labels are loaded from the symbols file generated by Pasmo.
2018-06-03
- Improved screen update timings and moved the code handling this from the Controller class to the Display class.
2018-05-19
- The emulator now finds any ORG directive in assembler source files and sets the target location for the resulting machine code to the correct location.
2018-05-18
- A simple assembler functionality implemented by integrating Pasmo.
2018-04-08
- 128K SNA files can be loaded.
2018-03-19
- It is now possible to save 128K Z80 files.
2018-03-04
- Improved emulation of the floating bus (see notes here).
- Correct handling of reading from port 0x3FFD and 0x7FFD (which result in a write to the same port).
- Fusestest for 48K and 128K as well as tests 36 and 37 in Richard Butler's timing tests OK.
- Added 400% speed option.
- Fixed some problems with snapshot loading and various other minor bug fixes.
2018-01-22
- Added floating bus support (48K and 128K), which makes the game Sidewize look really good.
- Fixed a problem with the LDIR contention pattern which caused Fusetest to fail.
- Moved some code from the controller class to the display class.
2018-01-13
- Fixed a bug in the tape loading routine which resulted in errors in Patrik Rak's emulation test programs.
- Corrected an error in the interrupt handling routing so that interrupts are accepted correctly according to The Undocumented Z80 Documented by Sean Young.
2018-01-05
- New debugger layout with several new functions like logging to file and switching between hex and decimal presentation.
- The debugger now presents the address for prefix instructions the same way as other emulators, i.e. the address of the first prefix is presented.
- A new class "Controller.cs" now handles the orchestration of the CPU and the other system components. Previously this was handled in the Main Window class. The classes are also more loosely coupled now via events.
2017-12-02
- Border width (Large/Medium/Small) can be selected via the Emulation menu.
- Display update timing fixed for 128K mode.
2017-11-29
- Major performance improvement.
- The screen data is now updated in sync with a simulated electron beam to enable color effects. Previously the screen was updated only one row at a time due to performance issues.
- A timing error for OUT (N), A is corrected.
2017-11-19
- Drag & drop function for opening snapshots is improved. SNA and Z80-files are supported.
- 48K/128K emulation is now controlled by the program when opening SNA and Z80-files.
2017-11-15
- Minor bug fixes and some code cleaning.
2017-11-12
- Sound on "Castelvania Spectral Interlude" and "Dizzy VII - Crystal Kingdom Dizzy" fixed.
- 128K CPU speed and memory contention added.
- Improved internal handling of user settings.
2017-11-04
- The AY-3-8912 sound chip is emulated.
2017-09-24
- User settings are now saved between sessions. Default settings can be restored from the Emulation menu.
- ROM file handling modified in preparation for allowing custom ROM files to be loaded from disk.
2017-08-14
- More TZX loading improvements. Most protection schemes should be handled now (including Speedlock 1-7, Alcatraz, BleepLoad and Haxpoc). Injectaload is not working.
2017-08-04
- Fixed some more bugs in the TZX loading routines.
2017-07-31
- Fixed a bug in the TZX loading routines, which caused pauses to be too short. TZX files are still not fully supported, but many more should load now.
2017-07-23
- Basic support for TZX files implemented. This includes standard-, turbo- and pure data blocks (see www.worldofspectrum.org/TZXformat.html).
- Fixed a bug in the disassembler, which sometimes gave false information about current memory content.
2017-07-08
- TAP files are now loaded via a "Tape Player" window in the Tools menu (previously called Windows menu). The TAP file contents are listed and it is possible to select which part of the TAP file to load.
2017-06-30
- Split the Snapshot class into several classes.
- Bug fixes and various improvements.
2017-06-19
- Added support for loading 128K Z80 snapshots.
- Fixed some bugs and tidied some things up in the snapshot class.
2017-06-10
- Fixed a bug in the memory class concerning access to addresses above 65535 (which the Spectrum redirects to the first byte of ROM).
2017-06-07
- Very basic support for the 128K model added (see Current Status above).
2017-05-08
- Fast(er) loading of TAP files implemented. This is achieved by increasing the CPU speed to 400 % after the first header has been loaded at normal speed.
- Enabled drag and drop of snapshot files to the main window.
- Bug fixes.
2017-04-27
Major improvements of timings so that special effects in games like Aquaplane and Uridium can be emulated:
Major improvements of timings so that special effects in games like Aquaplane and Uridium can be emulated:
- Precise timing of interrupts.
- Memory and IO contention emulated.
- Screen updates (one pixel row at a time) synchronized with the interrupt cycle.
- Memptr now correctly handled.
2016-12-29
- Updated NAudio to version 1.8.
- Calibrated the audio functions to remove stutters and artefacts which appeared in "demanding" audio streams created by programs like Arkanoid and Dreamwalker: Alter Ego 2.
2016-12-28
- Improved timings (including fixing a bug which caused the wrong number of instructions to be processed each frame.
- Added support for the pixel shader when updating the screen one pixel row at a time (which is now the default setting).
2016-12-10
- Updated the pixel shader.
2016-11-27
- Added a pixel shader with a CRT-like effect.
2016-11-06
- Fixed a bug which caused flags not to be updated when loading snapshots.
- Border color and IFF2 flag now handled correctly when saving and loading snapshots.
2016-10-23
- Refactored the Z80 class. A lot of redundant code has been removed - for example the DD and FD opcodes (dealing with the IX and IY registers) are now handled by the same code. Also, in some cases the structure of the Z80 instruction set (as described by Cristian Dinu at z80.info) has been utilized to make the code more compact.
2016-09-28
- SCF/CCF is now handled correctly as well as most of the Memptr cases. SoftSpectrum now passes Patrik Rak's test suite "Z80Full". See http://faqwiki.zxnet.co.uk/wiki/Z80 for details.
- A bug which allowed undesired nested interrupts is fixed.
2016-09-17
- All undocumented Z80 opcodes and flags are implemented except for F3 and F5 in the SCF,/CCF and Bit n,(HL)/(IX+d) instructions. The emulator now passes Zexall (http://mdfs.net/Software/Z80/Exerciser/Spectrum/).
- Improved debug window with a disassembler wich looks "ahead" 20 steps, memory inspection and button to enable/disable interrupts.
2016-07-28
- Fixed some bugs in the debug window and tweaked the layout.
2016-07-27
- Added support for beeper activation via bit 3 (MIC) to OUT 0xFE.
- Added audio when loading TAP-files.
2016-03-27
- Added the undocumented F3 and F5 flags to the Z80 emulation. Not that they are likely to be used by any program, but the goal is to emulate the Z80 as well as possible. The undocumented instructions still remain to add.
- Improved the debug functions.
2016-03-11
- Fixed a problem with repeating keys for special characters.
- Mapped PC ALT key to SYMBOL SHIFT.
2016-03-08
- Added a Control menu to the main window, with commands to set a breakpoint at a memory address and activate/deactivate the breakpoint. When the breakpoint is reached the game pauses.
- Added a simple debug window with a button to step through the Z80 instructions one at a time.
- Fixed another problem with the R register increment function.
2016-01-24
- Fixed a problem with the R register increment function.
- Added support for detecting key presses on row CAPS SHIFT to SPACE at IN-port 23510.
- Made the arrow keys simulate key presses 5-8 so that SHIFT + [Arrow key] kan be used instead of SHIFT + [key 5-8]. Previously, it was possible to just press arrow keys to simulate SHIFT + [key 5-8] but this interfered with the arrow keys simulation of a Kempston Joystick.
2016-01-05
- Added function for saving Z80 snapshots.
- Cleaned up code.
2016-01-02
- Added an option to switch between the original ROM and the Gosh Wonderful ROM 1.3. There is currently no working "official" link to this ROM, but I will add something about it in the Notes section. Its most prominent feature is that it allows entering keywords letter by letter, which makes it practical working with a PC keyboard.
- Inspired by the Gosh Wonderful ROM I have extended the keyboard input functions to correctly interpret most special characters (#,£,$ etc.) from their normal positions on a PC keyboard (the Spectrum key mapping still works of course). There are two limitations to this: The left shift key is only interpreted as the Spectrum CAPS SHIFT so the right shift key must be used to access special characters on the PC keyboard. Also, special characters that are are accessed in extended mode in the Spectrum can't be accessed this way. The emulator is set up for a UK keyboard by default, and there is an option to switch to a Swedish keyboard. More options may be added later.
Updated 17 December 2023