Archive for the ‘Uncategorized’ Category

SpeccyDS v0.3 Released

Available on the download page, or by clicking here!

Most of the changes in this release are related to the GUI rewrite…

Complete re-write of the GUI.
Improved the touch screen accuracy on some Nintendo DS systems.
Added Quick Save and Quick Load functionality
Added two new keyboard images. A Save keyboard and a Spectrum +2 keyboard.
Added a new global settings screen to replace the old Controls screen.
Added re-definable keyboard controls.
Added border size control.
Removed the maximim file limit on the Load screen. There is now no fixed limit.
Implemented several Z80 undocumented features, fixing the crash in Ghosts ‘n’ Goblins.
Fixed the flags on the Z80 CPI command, fixing the odd behaviour in Scrabble.

Out with the old…

Finally, after spending the odd free hour on it over the last few weeks, the GUI rewrite is done.  Re-definable keyboard controls are included, along with a settings menu to let you define the border size and the keyboard graphic to be displayed.

I’ve included a graphic of the +2 keyboard along with the original 48K keyboard.  I was going to draw a keyboard for each of the Spectrum models, but since they are pretty much the same for the later models I haven’t bothered for the time being.

The settings, including the defined controls, are saved back to the flash card to a single config file.  I was thinking about saving them back to individual config files based on the game that is loaded but it might be a bit confusing to configure.  I may change it in the future depending on how people feel about it.

All this means that V0.3 has started to appear on the horizon!  I haven’t touched any of the actual emulation side of things so far for this release, so it would be nice if I can at least implement the remaining undocumented Z80 flags to get Ghosts ‘n’ Goblins working.  Hopefully the new version will be out in the next couple of weeks!

A Brief Summary of the Last Four Months

As you have all probably realised (and some people have commented on), the development of SpeccyDS has slowed.

Releasing version 0.2a burnt me out a bit and resulted in me shelving the source code for two or three months.  Over the last month, my interest has started to pick up again and I’ve been doing the odd piece of work here and there.  But I haven’t been putting in the time like I was when I first started.

The development is still ticking over slowly.  I’m currently halfway through re-writing the GUI, which will make it easier for me to add new screens.  It will also allow me to hook up remappable controls and add a proper options screen to control the border emulation.

Version 0.3 will definitely be released at some point and will include these and a few other changes, but I’m not going to put a date on it at the moment 😉

SpeccyDS v0.2a Released

Available on the download page, or by clicking here!

Here are the changes…

Upgraded to libfat, which inludes the DLDI driver.
Fixed .z80 loading routine. More .Z80 snapshots will now be accepted.
Fixed flag behaviour in DAA instruction to fix problems in Head over Heels.
Fixed HALT instruction (again!) to fix crash in Starquake.
Implemented a few undocumented instructions.
Optomised display routines.
Hooked up X and Y buttons.
Corrected Sinclair 1 and 2 joystick assignments. 

It doesn’t contain everything I had planned, but hopefully it should keep you happy.  Enjoy! 🙂

Borders and more

It’s been a busy week.

In my last post I explained how I had changed the display routines to speed up SpeccyDS and allow me to do some more interesting stuff with the screen.  Over the last week I’ve used this to hook up proper border emulation:

The first screenshot is the result of a BASIC Save command and demonstrates the border quite well.  The second shot demonstrates the scaling problems that are associated with displaying the borders on such a small screen.

Luckily, the DS hardware makes screen scaling very simple.  Therefore, I will probably add three border settings – None (default), Thin and Full.  The thin border should keep the distortion down to a minimum.

A few other things have changed, including:

– The Z80 loader has been fixed.  All 48k-based .Z80 files should now be accepted without causing the Spectrum to reset

– Simulated the resistor connection between the EAR and MIC ports on the spectrum.  Sound is now produced when using the BASIC save command etc

– Fixed the flags on the DAA instruction to fix Head Over Heals.  However, the sound still cuts out in some rooms

– Fixed the crash in Starquake (yay!).  It was caused by a silly bug in the HALT instruction

Next up is DLDI support…

I’ve also added a Donate tab at the top of the blog.  Developing SpeccyDS takes up a large amount of my free time.  If you are feeling generous, please show your appreciation by donating a few pounds towards the project.  Any amount is gratefully received!  Thank you 🙂

Profiling and Optomisations

Over the last few weeks i’ve been looking into how fast SpeccyDS currently runs and how it can be optomised to handle some of the new features.  Therefore, I added a simple speed meter that displays the percentage speed when compared to a real Spectrum.  The results were quite suprising…

When idling in Spectrum BASIC, SpeccyDS ran at 134% of a real Spectrum.  When under load (I used the menu screen of Cobra), the speed fell to 116%.  Far to low for my liking.

I knew that my display routines were not the best in the world.  I had put them together with a ‘just get it working’ attitude and I knew that there were savings to be had.  With this in mind, I tried disabling them so I could just measure the speed of the CPU core.  The speed jumped up to a massive 495%/312% (BASIC/Cobra)!

Obviously there was something seriously wrong in the display routines.  After a lot of swaping and re-coding, i’ve managed to get the speed up to a much more impressive 210%/168%.  The change in the code will also let me use the DS hardware to scale the Spectrum display to allow borders to be shown.  I’m not sure how practical this will be, but it will be nice to have the option.

Unfortunatly, this speed boost seems to have broken my sound code.  It doesn’t look like the CPU syncronisation enjoys going over the 200% speed barrier.  It is a bit odd to have problems because SpeccyDS is running too fast 🙂

Back again

Wow.  Over two weeks without a blog entry and not a thing to show for it.

As you’ve probably realised, i’ve taken a break from SpeccyDS for a bit.  Due to personal and work-related buisness I haven’t touched the source code since I released v0.2.  I’m hoping to get back into it in the next week or so and, as always, I will keep the blog updated with my progress.

I have some ideas about what to include in the new version (including the new G6 fat driver. Thanks Kasimir2007, you can stop spamming my blog now 😉 ), but first off will have to be a re-write of the GUI code. During the rush to get v0.2 out with the save snapshot screen, I destroyed pretty much all of the object orientated design of the GUI. I’m going to sit down with a pen and paper and draw out a nice little diagram to get it back into a more manageable state.

There are also quite a few entries on the compatibility list that need looking at. The .Z80 snapshot reset problem may be due to SpeccyDS ignoring certain types of .Z80 file, but i’m going to have to look into it further to be sure.

SpeccyDS v0.2 Released

Available as usual from the download page, or by clicking here!

Here’s a bit of info about the changes in this version…

Fixed ARM7/ARM9 synchronisation to prevent sound corruption.
Altered ADD IX,SP and ADD IY,SP instructions to fix crash in Bubble Bobble.
Altered ROM protection to fix crashes in Megabucks and others.
Altered HALT instruction to fix crashes in Chaos, Critical Mass and others.
Corrected S flag behaviour in BIT instructions to fix Sabre Wulf.
Added button support to the file browser. Files can now be selected using the d-pad and A buttons.
Added auto scrolling to the file browser. Display can now be scrolled by holding down the buttons.
Filenames are now displayed in the correct case in the file browser.
Added .Z80 loading support.
Added .Z80 saving support.
Implemented REIN fat library to increase hardware compatibility.

The following games which did not work in the previous version are now working:
Asterix and the Magic Cauldron
Bubble Bobble
Chaos (Some graphical corruption remains)
Critical Mass
Sabre Wulf (Fixed rhino behaviour)

Here is a selection of screenshots from the new version, taken from within Dualis…

SpeccyDS - Green BeretSpeccyDS ControlsSpeccyDS LoadSpeccyDS Save

Enjoy! 🙂

Bugs fixed

Thanks to the two games submitted by Charlie as not working (wheres the rest of you, eh? 😉 ), i’ve made a lot progress in fixing bugs in the CPU core…  Critical Mass was particulary useful.  Thanks for your help. Charlie! 🙂

As a result, the following games now seem to work perfectly…  Arkanoid, Bubble Bobble, Critical Mass, MegaBucks (yay!) and Zynaps. The AI in Chaos is fixed, but there is still the odd graphical glitch. Starquake still seems to crash, which is a shame.

The bug fixes have also sorted out the flashing graphics in a few games, such as Spike in Transylvania. Now i’ve just got to track down that Starquake bug…

Software Compatibility

Over the last couple of weeks I have made a few changes to SpeccyDS. First up was the file browser. As suggested, files can now highlighted with the stylus or the up and down d-pad controls. Once highlighted, a file can be loaded by either selecting them again or by pressing ‘A’. The system seems to work quite well.

I have also added support for .Z80 files. I really should have done this for the last release. The implementation was much easier than I expected and, as many people pointed out, the selection of .Z80 files is far better than .SNA.

The .Z80 support brings me onto the subject of this post… .Z80 support has given me the opportunity to test more games than I did with .SNA (since converting files to .SNA was a boring process). I’m happily surprised at the number of games that work without any problems. However, the crashes in Megabucks and Starquake still bother me since I’m having trouble tracking them down.

Therefore, I have created a new Compatibility page on the blog. The theory behind this is that bugs should be easier to track down if I have a larger list of non-working games to test. It’s looking a bit empty at the moment, so if you know of a game that doesn’t work with SpeccyDS I would appreciate it if you could add it to the comments with a description of what goes wrong. I will regularly check the comments and update the list as they come in.

Thanks for your help 🙂