SpeccySE

  • Thread starter Thread starter wavemotion
  • Start date Start date
  • Views Views 11,661
  • Replies Replies 88
  • Likes Likes 19
IMG_1022.jpeg
lode runner Dandanator rom 128k

IMG_1021.jpeg


Lode runner soft project 128k z80
 
Last edited by nitrozz,
I'll go out on a limb and say that first screen looks wrong :)

I have no idea what a 'datamation' ROM is... but if you're trying to use a Z80 snapshot, you should strongly prefer to use .TZX (perfect tape image) or, failing that, a plain .TAP image.
 
I'll go out on a limb and say that first screen looks wrong :)

I have no idea what a 'datamation' ROM is... but if you're trying to use a Z80 snapshot, you should strongly prefer to use .TZX (perfect tape image) or, failing that, a plain .TAP image.
Bad typo not datamation but Dandanator. Sorry
 
  • Like
Reactions: wavemotion
Just checked in version 1.4b with first pass at ULAplus support. The ULAplus is an enhancement that has been around for a while for the ZX Spectrum and provides an upgrade from 16 colors to 64 colors simultaneously (from a palette of 256). Many newer homebrews take advantage of this - and the default is for the Emulation to enable it (if used by the game) but you can turn that off globally as you wish.

Some games build ULAplus plus normal ZX Spectrum support into the same file... and sometimes a game will have a special ULAplus build that provides the extended capabilities.

Please go check out the Nixy games in their ULAplus forms and enjoy :)
 
https://github.com/wavemotion-dave/SpeccySE

Version 1.5 - 20-Oct-2025 by wavemotion-dave
  • Added ULAplus support for games that support the extended color palette.
  • Improved beeper sound accuracy.
  • Fixed potential Z80 core memory stack issue - fixes a couple of games that were crashing.
  • Other minor cleanups and improvements under the hood.
Good solid release with ULA+ support. The main holdouts for games not running now is related to accuracy in the timing and bus/memory contention. So games like Plyck, Ringo, Old Tower and Gluf will look glitchy on screen as they are expecting the timing to be pinpoint accurate. This is where ZXDS shines compared to Speccy-SE. I may try to take on this accuracy but it's a very steep hill to climb given the way this emulator is designed. But the majority of games are running quite nicely with this little emulator that shouldn't have existed :)
 
A big breakthrough today - I've been working hard on cycle-accurate memory contention which is necessary for the homebrews that require perfect timing. And while I don't know if I'll ever get it perfect - I was able to get it close enough to render some of the most difficult "full color" games. Below is Ringo - one of the five games that really stress an emulator's accuracy (the others are Old Tower, Gluff, Plyck, Buzzsaw). My new code can run all of them though Gluff still has some minor screen artifacts as does Buzzsaw but I'm hopeful to get those working fully.

1761070402860.png
 
Massive overhaul - not quite ready for a new release, but I did just check in 1.5c for the adventurous among you!

https://github.com/wavemotion-dave/SpeccySE

The Spectrum CPU core has been overhauled to bring in a more cycle-accurate emulation. It's still not perfect - mainly because I'm still rendering a scanline at a time... but it's now close enough to make the 'multi-color' games look and play correctly.

The 'multi-color' techniques are varied but generally come down to accurate timing of the ZX Spectrum ULA (video chip) driving the display vs the code knowing where in the drawing the ULA is. With careful timing by clever programmers, the colors can be switched around just after one line has been drawn and before the next starts. With conventional ZX Spectrum games the resolution of color is normally in 8x8 pixel blocks (that is... any 8x8 block can only contain 2 colors). With the 'multi-color' technique this can be 8x4, 8x2 or 8x1 (meaning colors can be changed on every scanline). The downside for the game programmer is that it takes quite a bit of ZX CPU power to render in this way... leaving very little CPU time for the actual gameplay. Therefore, amongst the many thousands of games available for the ZX Spectrum, only a few dozen games utilize this technique.

Having said that... they are some of the most amazing games on the system!!

Highly recommend you play Gluf, Ringo, Pyluk, Old Tower, Yazzie128, Buzzsaw+ and Get out of Mars.

This new driver is fully enabled on all games - whether or not the game uses multi-color techniques - so classic games will play much closer to real hardware. This new driver is fully enabled for both the DSi and DS-Lite/Phat -- it took some serious work this week to speed up the driver to the point where it plays nicely on all DS hardware.

I had to wipe existing Save States and the Configuration - sorry about that. But this was a radical overhaul. It's not perfect (and I now have an even deeper appreciation for what Patrik Rak accomplished with ZXDS) - but it's much closer and game-play wise it should be pretty solid. I will continue to improve as my skill allows.

I would appreciate any feedback you have on this version before I push out a 1.6 release.

1761477286431.png
 
Version 1.6 - 27-Oct-2025 by wavemotion-dave
  • Revamped Z80 CPU core to provide more accurate timing and memory contention/floating bus. Multi-color games (aka Nirvana+, BiFrost, etc) now play and look reasonably correct and CPU speed is generally correct.
  • Fix for AY music not restoring properly on some Load States.
  • Smoother beeper sound for improved fidelity.
  • Added Kempston 2nd Fire button which can be mapped in.
  • Default machine is now the ZX Spectrum 128K but it will revert to 48K for common games with compatibility issues.
  • Other minor cleanups and improvements as time permitted.

    1761575349613.png
 
Checked in 1.6a with one quality of life improvement. I've added a way to mark games as Favorites. You can mark any game as 'like' (yellow heart) or 'love' (red heart). When you're selecting any game, just press SELECT to toggle the icon. These icons persist so you will always know your favorite games in a long list of ZX Spectrum possibilities.

1761736726522.png
 
Checked in 1.6a with one quality of life improvement. I've added a way to mark games as Favorites. You can mark any game as 'like' (yellow heart) or 'love' (red heart). When you're selecting any game, just press SELECT to toggle the icon. These icons persist so you will always know your favorite games in a long list of ZX Spectrum possibilities.

View attachment 535945
Now this is something I will definitely use, thanks Dave
:)
 
This morning I got a couple of games running that had problems previously. Arcadia no longer has control "jitter" issues (it was reading unused port 0x7F for some reason) and the homebrew game Nothing (that's the name of the game!) now runs (undocumented extended Z80 opcodes).

I've also added a Z80 7MH Turbo mode which very few games utilize but the homebrew 'Nothing' will detect it and use enhanced graphics that wouldn't be possible on a standard 3.5MHz spectrum. Some of the Russian ZX clones would have this 'Turbo Mode' and now it's an option in Speccy-SE. I doubt the DS-Lite will have enough horsepower to run with the 'Turbo' mode but anyway...

I also got another frame or two of performance which never hurts - especially for the DS-Lite/Phat.

Daily build 1.6c is checked in.
 
Version 1.6d is checked in - this one is a massive update.

I've reworked the entire DS-Lite/Phat so it no longer has the 50% frameskip... and it double-buffers just like the DSi so it provides for a much smoother experience when playing. I had to find almost 20% speed to get it to handle these improvements and that was herculean - but I've got it! With the DSi extra processing power, I've improved the sound quality slightly.

There are additional fixes and improvements - but this specific version is highly aimed at bringing the DS-Lite/Phat users into parity with the DSi. It's not quite there... but it's close!!

I need to test it a bunch more before I put out an official 1.7 release.
 
Many thanks for old HW users !
You're quite welcome - and it's an enjoyable (??!!) challenge to get it all working smoothly on the basic DS hardware!

Plus, what many people don't realize is that when you run on a DSi/XL/LL handheld with many flashcards and stock firmware, you are really running in compatibility mode which is the same as running on base 67MHz CPU hardware. So these improvements will benefit many users who just want to throw the emulator and some favorite games on their device and play.
 
Another big update. 1.6f is checked-in.

I'm an idiot (but a lovable one). After 12 emulators you would think I'd have learned how to mix audio signals. I forgot to clip - so some games were producing a harsh sound when the game used both the AY sound chip and the ZX beeper. Games like Bonnie and Clyde should sound amazing but were sounding rather harsh when the volume got loud. I've corrected this.

And... I've finally managed to get the DS/DSi VSYNC tricked into refreshing at 50Hz to match the ZX emulation! This involves using and abusing the VCOUNT hardware register which is writeable on the DS/DSi such that you can fool the hardware into an elongated VBLANK period so match the PAL standard. The VSYNC handler is now called every 50Hz and helps with a smoother display experience closer to real hardware.

I added a 'FRAMESKIP' option which is only relevant for the DS-Lite/Phat. The default is ENABLED (rendering 3/4 of all frames double-buffered which looks quite good). It can be disabled for the more "simple" games like Atic-Atac or Jet-Pac so you get all frames. I can't quite render some of the modern homebrews with full-frames on the older DS-hardware... but I'll get there hopefully.

Things are shaping up nicely here!
 
https://github.com/wavemotion-dave/SpeccySE

Version 1.7 - 08-Nov-2025 by wavemotion-dave
  • Implemented Favorites system - use SELECT in game selection screen to toggle Like/Love.
  • Massive overhaul to provide smoother double-buffered frame rendering on all hardware (DS-Lite/Phat users rejoice!).
  • Improved beeper audio handling to smooth out sound in some games - especially improved on DSi hardware with the faster CPU.
  • New Frameskip option added for DS-Lite/Phat. Default is to render 3/4 frames to get enough speed for all games but many games can run without frameskip. DSi always renders all frames.
  • Synchronized the DS/DSi vSYNC to 50Hz to match the PAL emulation for smoother tear-free experience (any tearing remaining would be present in the game itself).
  • Properly cap at max volume for the games that utilize both the 128K AY chip and the beeper (was causing crackling sounds).
  • Fixed Arcadia input so the ship doesn't jitter across the bottom of the screen.
  • Added more undocumented Z80 opcodes to fix Nothing (that's the name of a game!).
  • Illegal ED opcodes now act like nop-nop and consume 8 CPU cycles as they should.
  • Improved Tape Position menu now shows current tape block to aid in positioning the tape for some multi-load games.
  • Added Z80 7MHz Turbo Mode for the few games that take advantage of it (e.g Nothing). Note the DS-Lite/Phat don't have enough CPU processing power to render at this turbo rate.
  • About 15% improvement in performance - mostly to help out on the DS-Lite/Phat render even the most complex games smoothly.
 
Problem, r-type.tzx don’t run after last update
My copy works but I’m using the +3 Trainer version with the level bug fixed. But for your copy you can try turning off auto stop as I did made that detection more aggressive which is better for most games.

Edit: confirmed. The version at the main Spectrum download site tries to jam tape Side A and B together and it's a bit of a mess for emulation. Find the +3 Trainer version or any versions that have Side A and Side B as separate files which is how it would have been loaded on a real Spectrum machine. Alternatively you can turn off Auto-Stop config for that game but you will have to do a lot of manual tape manipulation using the Cassette icon.

There are also alternate [a] versions in TZX format that utilize a special feature of TZX specification to auto-stop the tape exactly when it should be stopped (and this is awesome - and the reason I prefer TZX when it's done right).
 
Last edited by wavemotion,

Site & Scene News

Popular threads in this forum