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! 🙂

DLDI Support

I upgraded my version of devkitPro to R20 yesterday.  I removed all the old gba_nds_fat code and replaced it with Chishm’s latest libfat routines, which now contain the directory related functions I need for the file browser in SpeccyDS.  The latest libfat driver also includes support for DLDI.

SpeccyDS didn’t have any problems compiling with the new library and everything seems to be working as expected.  However, I have been left with a bit of a dilemma.  I know there is a lot of anticipation for DLDI support, but there are still a few major things I want to finish before releasing version 0.3.  I don’t feel like I have added enough to SpeccyDS to justify releasing the next version.

I may release it as it is now and call it version 0.2a.  However, the border changes will not be included since there isn’t any sensible way to set the border size.  We shall see…

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 🙂

Late merry christmas and happy new year!

SpeccyDS took a back seat over the holidays, moving over to more festive activities such as eating and drinking far too much. However, i’m now in the mood to get back into the swing of things!

I did get around to a few little bits over the holidays… The G6 driver has been merged into the FAT driver but, due to my lack of a G6, it is completly untested. I’ve also started to redesign the GUI code in a more OO-friendly manner, and implemented a few undocumented Z80 op-codes (around the EDxx range).

I’ve also started to look at 128k emulation. Don’t get too excited at the moment since i’ve only been reading up on what is required, but from what I can see it should be quite straight forward to modify the code to emulate a 128k Spectrum. The complicated bit seems to be the sound chip. The timing and memory bank switching should be quite easy to implement as long as I can find an efficient way of doing it.

I doubt 128k support will be in the next version since there are still a few things that I need to sort out, but it’s nice to know that it is possible.

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:
Arkanoid
Asterix and the Magic Cauldron
Bubble Bobble
Chaos (Some graphical corruption remains)
Critical Mass
MegaBucks
Sabre Wulf (Fixed rhino behaviour)
Uridium
Zynaps

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

SpeccyDS - Green BeretSpeccyDS ControlsSpeccyDS LoadSpeccyDS Save

Enjoy! 🙂