#CSpect 126.96.36.199 Wednesday, January 18, 2023
Massive update, with virtually all rendering components touched to properly allow for blending modes. While there has been a concerted effort to beta test this, please report any rendering oddities that you see on the Spectrum Next discord channel.
Also in this version, is a major update to audio/video syncing, producing far smoother and more playable results. The recommended command line for gamers will now be "-60 -vsync [game]". This should give full audio, and nice smooth gameplay.
General timing has also been improved, so without audio running at 60hz and vsync in fullscreen, everything should "glide" nicely again - as it used to in the C++ version.
Plugin authors be aware of a change to the Plugin system. Due to the new Audio/Visual syncing system, the emulator "could" now be running on a different thread, and as such, you can no longer do GUI/OS work from callbacks. ALL UI/OS work must now be managed via the new OSTick() callback. Like the Tick() callback, but this is always called from the OS thread, allowing you to open windows, and refresh/draw them. Please see updated plugins on my github for further example code.
Hope you all enjoy this one, it's been some time in the making - thanks to all who helped beta test it.
- Fixed Timex Hires non-ULANext ink/paper orders
- Fixed Timex Hires ULANext ink/paper orders
- Added wildcard support in F_OPENDIR ($a3)
- Added better exception reporting to the LOG for loading plugins
- Fixed DeZog plugin building - DLL has been properly updated with new Plugin interface
- Fixed up keyboard cross threading issues
- Fixed up File open cross threading issue
- Added a new OSTick() call to plugins to allow UI/OS function calls - please note the changes in plugins to avoid crashes
- Fixed Timex hires with ULA Next ink/paper shift mode
- Added a "Standard Plugin Keys" section to the readme.txt file
- Fixed 2 profiler crashes, when clicking on the profile window in different states
- Fixed ULA last line drawing
- Fixed sprite in border bugs with new screen rendering
- Fixed L2 640x256 and 320x256 clipping
- Fixed Timex border colour issues
- New Audio/Video syncing system
- Fixed 320x256 window
- Fixed a crash in Mode 6 and 7 when the tile window was larger than the screen
- Fixed blending of tiles to border when in Mode 6 and 7
- Fixed border when in Mode 6 and 7 when ULA is being used in blending
- Fixed an esxDOS emulator issue, when a game requests too many bytes than is left in the file, and it fills the extra space with 0s resulting in game crashes
- Timing fixed. 50hz and 60hz were both running slowly/weirdly both with and without sound. Should now be correct.
- -60 and -VSYNC should now be perfectly smooth again
- -fps added to show FPS on title bar
- -freerun disable all timers and run as fast as we can (must use -sound as well)
- ULA Y scrcolling fixed to use Yscroll value MOD 192 (instead of anything over 192 being 0)
- ULA+TILE Stencil mode added. Stencil will use any ULA mode (normal, timex, lowres)
- Mode6/7 blending can now be used with stencil mode (where ever the hardware allowed it)
#CSpect 2.18.0 Monday, January 02, 2023
Major update as we now support Mode 6 and Mode 7, complete with the fancy blending they can do, and all the tile to sprite weirdness.
#CSpect V2.18.0 changes
- Mode 6 and 7 added in all it's ULA/Tile ordering weirdness. "(U|T) S (T|U) L" ordering
- Mode 6 blending added (B+L)
- Mode 7 blending added (B+L-5)
- multiface is now paged out on RETN
- Fixed a couple of RETN's that were marked as RETI's
- Added the Mode 6 and 7 blend mode (and fiddling) test/demo + source
#CSpect V2.17.1 Thursday, 29/12/2022
Minor update, fixing a profiler crash, and adding a new plugin to do file associations.
- Fixed a crash in the profiler
- Added a new extension to associate .NEX and .SNX files with the emulator using ALT+CTRL+SHIFT+A
#CSpect V2.17.0 Thursday, December 22/12/2022
- Fixed auto-mapping when RAM paged in over the ROM
- IM1 now has IRQs disabled on triggering
- Added Timex Hires and Timex Hi colour, smooth scrolling
- Fixed Timex Hires border colour (I think)
- Added DMA ports $0B and $6B
- Contended memory no longer affects 7,14 and 28Mhz modes
- Fixed a bug where all NEXT register stores (for reading back) were being zero'd on direct load of a NEX/SNA/SNX file
- CTC timers should now always run at 28Mhz regardless of CPU speed.
- SD card detection no longer crashes when it can't read partitions from a NEX/SNA/SNX file...
- Fixed using F3 on older card images (2.06 and below)
- New NextRegister Viewer window, activated by pressing CTRL+ALT+R
- New Plugin command added "DissasembleMemory()" - see iPlugin.cs for details
- Instruction TStates added to debugger view
- New Profiler added, activated by pressing CTRL+ALT+P
- Fixed up some TStates for Next instruction in the debugger
#CSpect V2.16.6 changes 23/11/2022
- Regs $6e and $6f set to newer defaults, reading should also be fixed.
- F_SEEK in esxDOS emulation now takes IXL (instead of L) for the offset type.
- Hires tile maps now scroll properly - and at the right speed
- 640 L2 mode now clips in the lower screen properly.
- Command line will now try and detect what your doing, so passing in
- an SD card image will setup the proper options, same for NEX files etc.
- "CSPect.exe card.img" or "CSpect.exe game.nex" is now valid
- Plugin "CSpect.Debugger(eDebugCommand.Enter)" now triggers on the next instruction, not a frame later.
- NextRegister 2 - hard reset, should now work.
- F3 now does a full hard reset, so should be far more dependable.
#CSpect V2.16.5 changes 29/05/2022
Very quick version to allow people to load older SD card versions, and older version of the ROM.
- Now detects older Next ROM image files and will auto-disable the divMMC auto mapping so they still work
#CSpect V2.16.4 changes 23/05/2022
Will now finally tell the user to install OpenAL, and I've fixed some 4bit relative image stuff.
- Now correctly detects that OpenAL is not installed, and will message the user and disable audio
- Added "IR" register to disassembly window
- Fixed some 4bit relative sprite shape stuff
- F5 will now screen shot whatever is on screen. The Spectrum screen (pre-shader), or the debugger
- Window should now start centered on screen (or 0,0 if screen isn't big enough)
#CSpect V2.16.4 changes 20/05/2022
- Fixed bug where LD A,(IX-??) wasn't recognised
Mainly some CTC timer fixes, and fixing the disassembler to display LD ?,(IX/IY-??).
- Fixed CTC timers, should now be correct
- CTC cascading timers added (I think)
- Fixed disassembler, "LD A,(IX-??)" should now be displayed correctly
- Interrupts are now disabled im start of IM2
#CSpect V2.16.2 changes 24/04/2022
Minor update for SNASM V3.1.1 - I didn't realise it was so out of date.
- Fixed bug where it didn’t report undefined symbols
- Added SNA export back in (48k and 128k)
- Fixed a bug with Macro usage in the first ASM file
- Fixed 6502 assembling – and PRG export
- Added “SET” back in for 6502 (can also use DEF)
- Put in an error when defining a label called “Filesize”
- Added 45GS02 CPU core for mega65 (opt 45gs02)
- Added “ADCQ”, “ANDQ”, “ASLQ”.
- Added CLD after all 32Bit instructions as “work around” for HW bug
- Fixed “INC A” and “DEC A” instructions
- Fixed a crash trying to read a file from a non-existant directory
#CSpect V2.16.0 changes xx/xx/2022
Lots of fixes and a few new additions. Improved the new divMMC autopaging for directly loaded NEX files. Added the -mouse option to try and help MAC users a little, and also fixed up the copper when large DMA blocks were running. A nice new feature is being able to visualise both copper and Raster IRQ splits using CTRL+ALT+S (via the copper plugin). Even for non-devs, this is a funky little tool to show just how complex things can get!
- Added directory functions to RST$08 plugin
- Fixed screen rendering time a little.
- on .NEX load, regs $B8-$BB are set to $82,$00,$00,$F0 - same as the OS.
- Added reg $0A = bit 2, to be able to disable DivMMC auto mapping
- Fixed crash when typing "BR :" in debugger
- Added a "-mouse" command line option. This will disable the "grabbing" of the mouse.
- When specifying an SD card image, you no longer have to specify -zxnext and -nextrom on the command line as well
- Fixed Copper when the DMA is running and blocking CPU, now counts DMA "TStates" instead of CPU ones
- .NEX files will automatically disable DivMMC PC address memory mapping
- Added -divmap command line, so you can force memory mapping of the DIVMMC "on" when directly loading a .NEX file
- Fixed a raster interrupt issue
- Added -copwait command line so you can easily visualise where the copper splits are
- Added -irqwait command line so you can easily visualise where the raster irq splits are
- You can now toggle the copper and irq visualiser with CTRL+ALT+S via the copper disassembler plugin
- You can now "set" command line globals via the Plugin interface
#CSpect V2.15.2 changes 29/03/2022
Updated so that the very latest OS now works by adding new Next Registers $B8-$BB, along with a few updates, changes and fixes.
Also please note, if you take over the "whole" machine to haved a full RAM machine, you will now need to set registers $B8-$BB to be able to jump to address $0000, or the DivMMC may well page in.
- DeZogPlugin added to main distro so it remains upto date.
- Added stackless NMI support
- Reset register $02 added
- Added NextRegs $B8 to $BB for DivMMC direct paging control
- Current ROM and DivMMC registers added to rewind history
- F6 now cycles through turbo speed settings
- F5 Now takes a screen shot (was on CTRL+F3)
- Fixed a rendering glitch when estimates for the right HBlank timing are "missed" and the line isn't drawn.
- -log_cpu removed. Rewind probably replaces the need for this.
- Updated RST$08 read/write to return values in BC,HL and DE as described in NextZXOS
- Layer 2 banks can now be in the full 2Mb (regs $12 and $13)
- Parallax demo updated to work with new $B8-$BA registers
#CSpect V2.15.1 changes
- Fixed SD card access - SpecNext IMG files now boot again
#CSpect V2.15.0 changes
Some fixes and a couple of new open source extension.
- Fixed a crash when trying to get file info on a file that can't be found (or opened)
- Fixed ULA colour 3 (where colours are 0-15) on a loaded NEX file.
- Fixed Border colour when ULA Palette scale set to 255, but ULANext mode is disabled
- All RST $08 operations have been moved to a new open source extension esxDOS.dll - lightly tested
- Added Copper Read/Write to extension system - allowing for a copper debugger/assembler etc
- Added single byte peek/pokes to extension interface for simpler access
- OpenTK upgraded to v3.3.2, any newer version won't install as it's incompatible with .NET frameworks
- Added initial open source Copper disassembler/viewer - "ctrl+altc" to open
- Open source extensions added to Github
#CSpect V2.14.8 changes
- Fixed a L2 scrolling issue - that I'd just added.... *sigh*
#CSpect V2.14.7 changes
- Fixed a L2 clip scroll offset issue
#CSpect V2.14.6 changes
- Forgot to switch on the new rendering again - now done.
#CSpect V2.14.5 changes
- Fixed L2 left clip (I think)
#CSpect V2.14.4 changes
A few fixes have been requested by devs, so I've done a quick new version.
- Fixed L2 320 and 640 clip window
- Fixed LD_R_A in debugger to "LD R,A"
- Fixed a bug when writing the copper control byte, where it would reset the lower byte of the copper write address
- Added the raster offset register ($62) but mostly untested.
- Screen rendering now starts in the HBlank, not at the end of the line, allowing changes for the next line to take place in the HBlank.
Minor update V2.14.3
- Fixed BIS and Warhawk crash
- Odd crash with last version, rebuilding zip to try and fix
- Now alerts you to a new version
- Did more sprite window fixes
- Altered FLASH rendering
Minor update V2.14.1
- Added a check for AY regs above 16, as a common music driver has a bug in it
- Timers are now reset on F3
- IRQ TStates are reset back to 30 Pre-Tstates. This isn't correct but helps some games work better.
- Stopped a crash on exit from fullscreen
- Fixed esxDOS Read/Write so it's now returning NEXT pointer IX instead of HL.
- You no longer need to extract ROM files to run in full SD card mode, they will be copied out the SD card image directly.
- Sprite right edge clip fixed - I think.
- AY registers are now readable
- Some very basic analytics are now collected. Each startup, command line options etc. "-analytics" to disable. Please leave it on if you can, as it'll help me direct developement effort.
- I have added my new SDCardEditor into the archive. This is very much just a beta, but lets you easy copy files from the SD card. Full editing coming on this.
- The latest windows update now causes some nasty stalling. To reduce (but not remove), go into "settings" and search for "game mode" and switch it off. This will help a little.
#CSpect V2.13.01 March 03, 2021
- A few fixes and some new Next hardware that's coming soon....
- Put some guards around break point setting to check ranges a little.
- Symbols are uppercased on load (they aren't case sensitive)
- Fixed memory window. Any address < $10000 is not a physical address, its the 64k mapped. If you need this, use bank/offset
- Fixed some BASIC key issues - holding down control keys etc
- Fixed a ULA global transparancy issue
- Fixed NEX loading and initialising of ULA colours
- Rewrote the ULA colour system - was a mess.
- Fixed some Timex rendering issues
- Basic CTC timers (4) added. Timer mode only, no cascading. Timers can generate IRQs.
- NextReg $CC and $CD - IRQ DMA suspend mode for timers, liner interrupts and ULA added
- Z80 CTC Timer example source included in demo
#CSpect V2.13.00 November 22, 2020
Note: I am aware most virus scanners are rejecting this. Apparently it's because I open files in "shared" read/write mode. This is so that SD cards can still be written to while the emulator is running. You'll need to add an exception if you wish to use it.
This is a special 'experimental' release so that everyone can try out the new "rewind" feature in the debugger. Specifying -rewind on the command line, or typing 'REWIND' in the debugger will enable/disable it.
This will then let you step 'backwards' using SHIFT+F7, undoing whatever the CPU has just exectued. Memory and CPU state should be solid (along with MMU and ROM usage), and I've started to add in sprite access as well - but this is more untested.
It's good fun, and super handy for debugging when you need to just roll back a little bit....
Fixed physical breakpoints in the plugins
- (Highly) Experiminetal "rewind" debugger feature. Simply press SHIFT+F7 to step back. Currently tracks all RAM access and Sprite port access.There's bound to be HEAPs of issues and bugs with this, but for simple debugging, it should be fine.
- Added UnStep in plugin system
- Added "REWIND" debugger command, to allow you to switch the CPU history on/off dynamically
- Added Debugger message display. Now reports errors when you use a non-existant label etc.
- Fixed a bug in the rewind of MMUs
- Swapped to 2.13 coz I was bored of 12.??
#CSpect V2.12.38 November 19, 2020
- Minor changes and fixes...
- Added NextRegs $2C and $2E (DAC mirrors)
- DMA read flags (Bit 5 and Bit 1) added and fixed.
- Added "_" to BASIC key detection
- I "think" I've fixed the stuck BASIC mode keys (where: just gets stuck and repeats....)
- Added OpenAL32.dll to the zip.... turns out that's allowed. on loading of a NEX file, NextRegs are set to what the OS NexLoad sets
- 32bit mode should work this time....in theory
#CSpect V2.12.36/35 November 11, 2020
RAM is now filled with random bytes on power up to help simulate the real machine -fill=$XXXXX allows you top specify a specific byte sequence to fill RAM with
- Debugger: general layout adjustment.
- Debugger: text colour changes when user bar over the top for easier reading
- Debugger: $ added to all hex numbers
- Debugger: Hex numbers are now coloured for easier spotting
- Debugger: Added "peek()" of all memory access to the left of the disassembly line
- Debugger: Added 16bit "peek()" of all 16bit register load/store locations
- Debugger: Added a small permanent memory dump using 16bit registers as the base address
- Debugger: ` now displays the current screen in the debugger (Keypad-Enter also works)
- Debugger: Memory window bookmarks added. CTRL+SHIFT+[0-9] to set, CTRL+[0-9] to jump to.
- CSpect should now run on 32bit and 64bit machines
- Now detects if the shader fails to compile, and switches off the shader mode
- Fixed port $123b 16k bank offset mode
- Fixed unified attached sprites
- Brand new C# version, which will now run on Linux and macOS. I'm sure there are still bugs in here, so released for community testing. It assembles everything I've got, so should be fine.
#CSpect V2.12.36/35 August 25, 2020
- Fixed F_RENAME to use IX instead of HL (now working)
- Fixed sprite clipping (I think)
- First pass at Tiles and Tilemaps in bank 7
- Faked esxDOS loading now returns an "access denied" error, if it tried to open a file that is write protected
- Transparent border now working (ULA off)
- Added F_RENAME (untested)
#CSpect V2.12.34 July 09, 2020
- Fixed HEX editing in the memory window so that it's case insensitive. (don't have to press SHIFT)
- ReadMe.txt now holds the "manual" part of this text file, and this is now "just" the version info.
#CSpect V2.12.33 July 09, 2020
- You can now click on the memory window to edit bytes directly by typing HEX values into it ENTER or click off to stop
- You can now press KEYPAD_ENTER to display the game screen while in the debugger
#CSpect V2.12.32 July 09, 2020
- Fixed reg $8E bit 3 usage - don't change RAM mapping
- Fixed Layer 2 palette colour offsets (NextReg $70)
- NextRegs $6E and $6F now return top 2 bits as 0
#CSpect V2.12.31 July 09, 2020
- Added DAC's B,C and D
- Added SAVE to the debugger: SAVE "NAME",add,len, SAVE "NAME",BANK:OFFSET,length, SAVE "NAME",BANK:OFFSET,BANK:OFFSET
- You can now read DMA Registers
- CTRL+F7 now executes to cursor in the debugger
- Added the demo "mod_player.nex" added to
#CSpect V2.12.30 June 09, 2020
- Layer 2 palette offset added to 256,320 and 640 modes.
- Fixed a crash when a write to E3 happens, and the roms haven't been loaded.
- Fixed a crash in the debugger when you entered a bank:offset and the offset was an invalid symbol
- Tilereg $6E set to $2C on power up - same as hardware. (don't assume though, set it)
- Tilereg $6F set to $0C on power up - same as hardware. (don't assume though, set it)
- SNasm V2.0.23 changes
- Fixed a crash when an expression has a divide by 0
#CSpect V2.12.28 changes May 17, 2020
- Fixed DMA prescaler (usually used for digial audio)
- 640x256x4 Layer 2 mode added
#CSpect V2.12.27 May 15, 2020
- Fixed a crash in AY Audio when loading in large files via fake esxDOS.
#CSpect V2.12.26 May 13, 2020
- Fixed a crash inside the debugger
- Added a new eDebugCommand.ClearAllBreakpoints to the iCSpect plugin interface
#CSpect V2.12.25 May 12, 2020
- Tiles over a transparent border now fixed
#CSpect V2.12.24 May 10, 2020
- Lower border colour fixed (I think)
- Added some wait states to slow down 28Mhz mode to more closely match the real machine
#CSpect V2.12.23 April 29, 2020
- CTRL+F3 will now save a screenshot into the current folder (without shader effects)
#CSpect V2.12.22 April 20, 2020
- Fixed a stupid typo on iCSpect interface to get sprites.
- NextReg 0x1c can now be read
- NextRegs 0x61 and 0x62 can now be read correctly
- Reading/Setting NextReg 255 (which isn't a real one) was crashing the emulator due to plugins
- Fixed the fallback colour, was only 8 bit instead of 9
- Fixed reading of the raster line for lower in the screen (upper 64 pixels usually)
- Fixed some threading issues in the serial coms (on USB hardware)
- Fixed and changed baud rates, and added in all normal ones (HDMI timing = 27000000/baud )
- 2000000 = 13
- 1152000 = 23
- 921600 = 29
- 576000 = 46
- 460800 = 58
- 256000 = 105
- 230400 = 117
- 128000 = 210
- 115200 = 234
- 57600 = 468
- 38400 = 703
- 31250 = 864
- 19200 = 1406
- 9600 = 2812
- 2400 = 11250
- 1200 = 22500
- Fixed “align” for use with segments
- Fixed “org” so it works with segments
- You can now use _ in binary (ie. %11_00_1111 )