SPECCYAL readme & FAQ (rev. 0.30)
Speccyal is a 48k Spectrum emulator. It can play (almost) all your favorites games, providing they are in .sna, .z80 or .tap format.
It has been exclusively written for Windows, and it uses DirectX (DirectDraw, DirectSound and DirectInput). It was my first step into the emulation world (and into the windows programming world) and I'm happy with it ! It all started as a personnal challenge, and I decided that everyone should benefit from my work. I hope everyone will be pleased with it!
What does it have to offer compared to other emulators ?
Yeah, you are right, there are lotsa other speccy emulators out there. Why would you use mine ?
What I intended to do when I first created this program was to offer an easy to use and straightforward 48 k Spectrum only emulator. This is by no means the best spectrum emulator and I know that but just read below ...
Until now (version 0.72b), it can do the following things :
Version V0.75 should bring the following features (see notes below about the V0.75 WIP release):
What are these menu options used for ?
Well, I think it's so straightforward I don't need to help you about this.
What are the requirements to run Speccyal ?
These are not really handicaping but I could reach one of the best Spectrum emulation levels if I could fix all these problems (no one can claim his emulator is 100% bugsfree).
Yes it is completely free !
Where can I get the source code ?
The source code WILL be available, as soon as I feel the code is clean.
The Z80 cpu core is available on my homepage (version V0.1). Just head to http://user.online.be/~ota105875/ to grab it !
My name is Stephane Schmitz, this is my first contribution to the emulation world. If you want to send me comments (they are welcome), email me to :
The official Speccyal homepage:
http://speccyal.vintagegaming.com
Or if you are happy with it and want to contribute to future enhancements, you can motive me by sending a beautiful postal card to the following address :
Stephane Schmitz Rue des Vergers, 6/bis 4801 Stembert BELGIUM
Version V0.75WIP / 06-05-2000 |
Please note that it's just a
WORK IN PROGRESS, it's just a taste of things to come. Don't
consider this as the final V0.75 version !
Some features which were previously working in the version aren't
working anymore. If you want the last stable version, get
Speccyal V0.72.
Don't say that you have not been warned !
What's new:
- Support for Neil Breadley's excellent MZ80 cpu core. Some games
which were buggy (for instance commando) should be perfect now.
But unfortunately some rare other games don't run anymore (now
that the source is released, I hope someone will be able to find
where this problem comes from :) I think it comes from the way
I'm handling interrupts but I'm not 100% sure). You can switch
between the two different cpu cores by selecting an option in the
"options menu". The current cpu core is displayed in
the status bar
- Added AY-3-8910 sound directly taken from MAME. Please note that the sound quality is not very good but I'm quite happy with it, especially if you consider that it's my first try. You could experience some slowdown with AY sound switched on. It's better working in scanlines mode than in "screen drawn in one pass" mode (F3).
- Beeper sound code has been recoded. Much better (pitch is correct now) but like AY sound, there are some glitches (I'm losing some buffer segments and sometimes the sound skips). Honestly, I'm happy with it now, even in its current state.
- Added a sound preferences dialog box. Used now for selecting the sound options (panning and volume for each of the 3 AY soundchip channels and beeper volume/panning as well)
- Speccyal has been tested on a NT 2000 box and hey, it's running! In 15,16,24 and 32 bits as well as fullscreen mode.
- Released the source code.
Please don't make another speccy emulator out of this source,
there are already too many speccy emulators out there ! I
released it just for learning purposes (and for help purposes
hehe,
I hope you guys will help me enhance my emulator)
THINGS THAT REMAIN TO BE DONE TO GET OUT OF THE WIP VERSION
- Loading .TAP files does not work anymore
- AY sound is crappy, probably due to the way I'm handling
interrupts, directsound buffers ... Now that the source is
online, some help anybody ?
- Switching between MZ80 and my cpu core sometimes lock the
emulation
- Neil Bradley MZ80 implementation is not complete, probably
because of some lack of decent interrupt support (look into
InterruptHandler in z80_2.cpp)
- Compatibility with NT2000. I got it to work but there's a
problem with directsound. With a little bit fiddling I'm sure it
will be almost 100% compatible.
- The source is crap :(, it has lots of commented lines and
contain ugly code. I'm aware of it and I'll try to do my best.
Version V0.72b / 29-02-2000 |
I just fixed the quick load option that I added in the last version. It was not running at all to say the least ... again, sorry about this.
- Fixed a bug which could help the "quick load" option from correctly working (and even crashing) on some precise configurations (if you had selected in windows explorer the option to view files extensions, because I was using a system dependent file function, which was implicitly using this
option)
Version V0.72 / 26-02-2000 |
What's new in V0.72:
In summary, all the previously
addressed issues have been (completely or at worst partially)
fixed.
I mean slow speed in windowed mode,
wrong palette and unfinished z80 cpu core (some bugs remain to be
discovered). The next weeks will be spent rewriting the whole
thing, so that the code is clean, in preparation for a source
release ! Plus, there are other enhancements, read below ... This
release will be the last one for a long time.
- Z80 cpu core has been enhanced (better stability, compatibility, added undocumented opcodes, flags 5 and 3 partial emulation (80% complete)). Some more games are running now (GreenBeret, Marble Madness, Imask2, Spindizzy ...) bringing the compatibility to a high level, in fact more than 95%. Out of 230 games I have tested, only 9-10 had problems, mainly graphics bugs, but none of them refused to work
- Palette routine has been rewritten for the nth time... this should be the last version and it should work on 99% graphics cards now). As a counterpart, it's not possible to switch colors (dark, light...) anymore but I think it's more important to have a perfect colors palette. Also, the colors are a bit more realistic (technically, I'm using an hardware independent pixel plotting function)
(thanks to Fabian Schmied and John Leather)- Fixed a bug that caused the emulator to crash if an error message was displayed
- Fixed a bug that caused the emulator to crash if the spectrum rom file could not be found
- The cursor blinks a bit faster ;) almost like the real thing
- The 6 last loaded games are saved and can be quickly selected in the file menu (not deeply tested, may lead) to unexpected errors ...). You can even (unofficially :)) quick load games in fullscreen mode by pressing alt-f.
- Preliminary support for 24 bits desktop mode (sluggish and tested on one card only, try to avoid it!)
- The DirectDraw primary surface was created in video memory. Now, it's created in system memory and windowed mode speed is now on par with fullscreen speed :) (tested on a Matrox Mystic 170 graphics card, which was previously lagging in windowed mode, now it's perfect, at
least on my test machine) (thanks to Fabian Schmied)- New logo :)
Version V0.71 beta / 04-02-2000 |
What's new in V0.71 beta:
In summary, I added fullscreen
support and fixed the purple/blue palette problem on some
graphics cards
in 16 bits colors mode.
- Fullscreen mode, at last :) It is *considerably* faster than windowed mode.
For example, on my office PC, the windowed mode lags between 20 et 25 fps where fullscreen
mode is running at a top notch 86 fps. You can consider the emulator is running at least
at twice the windowed speed. Press ALT-ENTER to switch between fullscreen / windowed mode.
Be warned tough that it should be considered a beta implementation.- 2 joysticks emulation. I don't have two joysticks so I haven't been
able to test this feature but it should work. Choose Kempston for player 1 and
either Sinclair1, Sinclair2 or Cursor for player 2. The new "2 joysticks emulation" checkbox
in the joysticks options windows just tell the emulator if Sinclair1, Sinclair2 and
Kempston joysticks emulations should be usable only with the second joystick.
Be warned that it has not been tested at all and will certainly exhibit weird behavior at some
moment. For example, I don't event test that two different joysticks are selected. I added this
functionnality as a gift :)
- I rewrote my palette routine. All I can say is that it perfectly works now !
Peoples who had "mauvish colors" problems should be pleased with it. I haven't been to find a
computer here at my office which have problem with it (some tested graphics cards: Nvidia TNT1,
TNT2 M64, Matrox Mystique 170, Intel i740, S3 Virge DX). Arghhh this damn RGB 555 colors mode ! The next version should include a new hardware independant pixel plotting function.- Added a new option ("Blit attributes"). This option can help some games to go faster. For example, in Silkworm, I went from 80 to 95 fps simply by switching this option on. Hopefully, the fullscreen option is there if you have speed problems.
- Switched from MSVC++4 to MSVC++6. Perhaps the generated code is now compatible with k6-2
processors (I know my emulator wasn't running on these "compatible" chips). Just tell
me if it's working now, I'm curious to know about it.
- Fixed keyboard input problems, which happened from time to time when the emulator
was launched.
- Fixed the "continuously playing sound" problem when entering some menu options. Now the
sound is off when loading a snapshot, diplaying the joystick options or keyboard layout...
- Better border emulation ! Now the border lines are almost completely synchronized with
the emulation (Vectron is my test game, and the border is always slighty out of sync,
but it's *much* better than previous border emulations).
- Fixed several opcodes cycles, mainly the undocumented ones.
- Fixed some bugs in my z80 core and in the debugger (the side effect of switching
to a newer compiler enabled me to find these bugs). I don't even know how the old version
was running because after having recompiled my emu with the new compiler version, it wasn't working at all !
- Added a status bar (windowed mode), with the current fps, screen and cpu speeds. Better
than the previous OSD.
- Added support for .TAP files. To make it work, start from BASIC, load the game and
type LOAD "" (altough, there's always a bug that causes a crash when pressing the F4/RESET
key :( , due to some opcodes overwriting the rom).- Other minor bugs fixed
- HTMLized the doc (readme.htm)
In the following releases, I'll
intend to implement the following features:
- Better cpu core (flags 3 and 5
emulation, bugfixes ...), maybe I'll switch to another z80 cpu
core (mz80?raze?)
- Support for ZIP files
- AY-3-8910 emulation (I'm not sure
if I have the required knowledge to include it, so if you can
help me, you're more than welcome). I saw that MAME supports the
soundchip but how can I include it in my DirectSound code ?
And in the (far) future, I could also add this:
- Plugins architecture (some
tests have already been done)
- Mutliple computers/consoles (z80
based) support
- Network support (first speccy
emulator to support newtork play?)
Since I'm alone to code this
emulator, I could spend some time to achieve these tasks.
So I'm searching for good win32/c++
programmers who have knowledge in the emulation developpment
process. Together, we could make out
of Speccyal one of the best windows emulators.
Cu!
Stephane
Version V0.70 / 02-01-2000 |
Version V0.68 beta/ 02-11-1999 |
Version V0.67/ 31-10-1999 |
UPDATE
I didn't want to make a new version, so I included this bugfix in the current V0.67 version.
Planned in the next version: better z80
debugger support, and maybe a scanline emulation (your favorite
border :) ), but I'm not sure at all if I'll be able to implement
it, as all my efforts to do so had previously resulted in crashs.
Version V0.67/ 31-10-1999 |
Version V0.66/ 30-10-1999 |
Version V0.64b/27-09-1999 |
Version V0.64/ 26-09-1999 |
Version V0.63/ 26-09-1999 |
Version V0.62/ 26-09-1999 |
Version V0.61/ 2-09-1999 |
Version V0.6/ 31-08-1999 |
Version V0.55b/ 27-08-1999 |
Version V0.55 / 27-08-1999 |
Version V0.54 / 24-08-1999 |
Version V0.53b/ 23-08-1999 |