Readme File for ZXSpin v0.41
30/11/2002
------------------------------------

****IMPORTANT****
In order to get a
 release out, I'm
not updating this 
file much so make
sure you read the 
history list at 
the end of the 
document to find 
out what's new.
*****************

Welcome to ZXSpin.

What started off as an interpreter for Sinclair BASIC has now grown into a full blown emulator. It's reasonably accurate, and sports some nice features, more of which will be dealt with later. 

This is no longer considered "beta" - but it is bug ridden, and the number of bugs decreases (apparently) with each fresh release. However, it's not finished, not by a long chalk. It's constantly being rewritten, revised and sworn at, so as new features become available,  and new bugs get introduced, we'll release new binaries. 

It's runnable under Win9X/ME, and Win2k/XP. It'll also optionally use MMX. As for CPU Speed, it *should* run on a 266, but I really don't know. It runs well on an AMD K6-2 333, though this is no indication on the minimum spec.

This is only a quick doc, better help will be available in a future release. (I keep saying that).

Send Feedback to:

Paul.Dunn4@Ntlworld.com 

for the time being, till I get something better than hotmail.

Getting Started
---------------

Okay, to run the emulator (I assume you unpacked the archive okay) just double click the icon. Spin will shortly open it's main window. 

You'll need snapshots or TZX/Tap files, or (at last) +3 .dsk files to run, but you know about those, else why download this? If not, then Http://www.WorldofSpectrum.Org will help you out for snaps, and http://tzxvault.retrogames.com will give you some tape files and also a large archive of disk images.

You can quickly link to both those sites using the help menu.

You can quit using Alt-F4, the small close button at the top-right of the window, or the menu File -> Quit.

The Control Keys
----------------

F2 - Open a file (alt-F2 to save a file)
F3 - Pause
F4 - Fullscreen/Windowed Mode (Alt-Enter will also do this)
F5 - Throw an NMI if the Multiface is installed. 
Alt-F5 will Reset the emulation.
F6 - Open Tape Browser
F7 - Enable/Disable Keystick
F8 - Options
F10 - Rewind Tape Block
F11 - Play/Stop Tape
F12 - Fast Forward Tape Block

Alt-F4 will quit the emulator (assuming that it's not hanged or crashed).

Pause/Break - pause or unpause the emulator.

The cursor keys/Ctrl currently emulate the spectrum's shifted cursor keys 5,6,7,8 and Symbol Shift, unless the keystick is active.

Holding CTRL will load a tape in Usr0 mode (128k only), and Holding Shift will prevent Autoloading of tapes.

Those buttons at the bottom
---------------------------

From left to right:

Pause/Unpause, Open a file (any file), Start/Stop the tape, enable/disable the keystick, and Options. The power switch resets the emulator (hard reset).

The Menus - File
----------------

SPIN handles Zip files. If a zip contains only one compatible file, it will be unpacked and automatically loaded, if there's more than one file, it will open a small list box which will ask for the file you want. You cannot save to .zip files.

Here's description of the menus, and what the items on them do. Not all of them do anything yet.

Load Snapshot - allows you to navigate to your snaps folder and load either a .sna, or .z80 snapshot. 128k Snaps will automatically choose a 128k hardware to run on, 48k will default to a 48k model - actually, it won't, if you don't want it to. You can set an option in the main Files options page to set any 128k spectrum to ignore 48k snaps and load them in a 128k model. The 128k model will perform a Usr 0 reset to allow 48k programs to work whilst maintaining the 128k timings. This will not work for most 48k games, but you may be lucky.

Save Snapshot - saves snaps in .Z80 or .Sna form, depending on *which extension you choose*

Save Current Screen - Saves the current display either as a bitmap (which includes the border) or a .scr file which just saves the spectrum's display  memory (16384 - 23295, bank 5 or 7 depending on which is paged)

Insert Tape - insert a tape file. TZX, TAP, CSW or WAV, it'll take them all. Invalid TZX files won't be reported as such, just not loaded.

Insert Disk - Insert a +3 .dsk file. Currently, most dsks will work, including those saved in enhanced dsk format. The fdc is almost complete. Double sided dsk images are supported. Almost all protected games now work.

Recent Files - This is a list of the last ten files loaded into the emulator, so you can get back to the last snap you were playing quickly without having to navigate directory structures.

Load/Save Binary - Use this to save out portions of the spectrum's memory. Specify where to save from and how many bytes, and a filename. For loading, just the address to load to is sufficient.

Quit - quits the emulator.

Any other items that are greyed out are unavailable at the moment.
Drag and Drop support is included, any file that is supported by the emulator can be dragged and dropped onto the main window and handled accordingly.

View Menu
---------

From here you can open the debug window (the debugger isn't quite ready yet, there's a long way to go on this), and the tape controls dialog.

Tape Options - you can quickly skip forward or back through a TAP/TZX File here, and start/stop the tape. You can also access the tape browser window from here.

The emulator can run in various screen modes, and there are seperate options for full screen (DirectX) mode and windowed mode. Windowed mode *will* be slower than full screen. The fullscreen option will not take effect until you enter fullscreen. Use the "Go Fullscreen" item to switch, and use Alt-Enter to return to windowed mode.

You can also double or triple the window size - the display will stretch to fit. Also resizing the emulator's window by dragging one of the borders will have the same effect.

The Volume Levels window allows you to alter the stereo panning and volume levels in realtime, which is nice.

The Pokes window can be accessed from here too. This window (for the time being, just the first tab) allows you to enter addresses and values to poke, and the POKE button does the business. The text box below that is for searching for games pokes. Just type in the name of the game, and press search. You need an internet connection for this, and if present, it will search the Tipshop and open a web browser window with the results.

You can also access SPIN's options pages from here. More later.

Recording Menu
--------------

This is primarily the place where you can get to grips with the new *in development* RZX format. 
Click on Record RZX File, and choose a filename for it. you can then unpause the emulator and record your gaming. 

The Start/Stop Recording item will stop either recording or playback.

RZX files are in development at the moment, and are not guaranteed to be compatible with other emulators. They can also crash the emulator, under certain rare circumstances. You have been warned.

RZX File recording and playback now supports (and by defailt uses) ZLib compression for saving the initial snapshot and for the IRBs (Input Recording Blocks). We do not support multiple snaps or IRBs yet, neither is there a competition mode - AFAIK, there is still the issue of encryption to be resolved between the parties that are developing RZX.

Emulation Menu
--------------

This is where you can control the emulation - not a lot yet! The Start/Pause option will pause or un-pause the emulation. The Reset Spectrum has two options - either a full reset back to the original hardware selected, or a Usr0 option, to get to 48k mode with 128k timings. 

You can Mute the sound on this menu, and also opt to run the emulation at full speed, regardless of timing. This can greatly enhance loading speed with the sound turned off.

The option to Enable Keystick turns on or off the user defineable keyoard joystick. See the options section, control options for more details.

You can also set the speed of the emulated Z80 CPU - 3.5mhz (default) up to 100Mhz (ish). Note that this does *not* acclerate the ULA, so multicolour effects will be corrupted at higher speeds. Tape files however will still work, and *are* accelerated. You probably have no idea how hard it was to achieve speeding up the CPU but not the ULA :)

The Tape Controls Box
---------------------

With a tape inserted (opened as a file) you can view it's contents. The tapes are listed as TZX files. Selecting an entry in the left hand list will display its' details on the right.

As the tape plays, you'll see the position as a small Tape icon, and the details of the currently playing block. The buttons at the bottom are, from left to right: Open a tape file, start or stop the tape, and eject the tape.

There are also Tape player style buttons to rewind, or fastforward the tape through the blocks contained therein.

This is also a rudimentary Tape Editor - TZX Tapes can be modified, and saved. Choosing a block's properties allows you to edit the timings and such that a block uses.

The Options Box
---------------

Most of SPIN's options can be comfigured. Here's a list:


Hardware : 
----------

choose your hardware here. currently, only 48k Plus2, Plus2A, Plus3 and +3e are supported. The Plus3 floppy disk controller is unfinished, but works perfectly for +3DOS work. Memory contention can be turned off here, god alone knows why though.

+3e Support is only very basic, and requires the "p3e.rom" file - You can get a rom file from Garry Lancaster's site, it needs to be renamed to "p3e.rom" in order to work, and lives in the same folder that the other ROMs live in. There is no IDE support yet, so it's pretty useless as is, unless you want to play with Garry's Windowing system :)

Peripherals :
-------------

You can specify the Fuller Box, and the Currah uSpeech. Due to the fact that RZX has been rushed through as fast as possible, uSpeech is not available yet - there are what seem to be unsolvable problems with it due to fact that we have virtually no documentation and no access to samples that we can rely on - a *very* big thankyou to Mike Wynne for his Oric Speech samples, it sounds good - but we still need to sort out stuff like how big the individual samples are and things. If we do get it going, it will be in a future release.

You can also specify to install the Multiface. You will need either the Multiface128 ROM, or the Multiface3 ROM, depending on the hardware you're using. These roms need to be installed in the same place as your standard Spectrum ROMs, and called mf128.rom and mf3.rom. We can't distribute these ROMs with SPIN, unfortunately.

Controller :
------------

SPIN now supports keyboard joysticks - the cursor keys will simulate joystick movements. Select a joystick to use from the listbox - Shifted Cursor keys are the default - they allow easy editing in Sinclair BASIC, and the Ctrl (fire) button is mapped to Symbol shift. This is the configuration used if the "Enable Keystick" option in the Emulation menu is not enabled. 

The up/Down/Left/Right cursor keys correspond to the selected joystick, and either CTRL is fire. 
If the keystick is enabled, but not set to shifted cursor keys, then the symbol shift key will not be available, as CTRL is mapped to something else.

The Joystick support is similar, but there is no restriction on the Symbol Shift key (for obvious reasons). 

The square box with a circle in it allows you to test your stick. If you can't make the cross move, it won't be used in the game. The circle is the dead zone. I don't know about you, but my stick can jump about all over the place when it's idle. Any stick movements withing this zone will be ignored by SPIN.

The user defined settings need a little more explanation. By choosing "User Defined" for either Joystick or KeyStick, and then clicking the "Define" button, will open a box with a set of buttons arranged in a cross. To define the keys used by this stick, click the button and then press the key you want to use.

For example, For a QAOP<space> setting, click the Up arrow, press Q. Click Down, press A, Click Left, Press O, Click Right, Press P, Click the centre button (fire) and press Space. The list to the right shows which keys do what. Now in game, define your keys as QAOP<space> and you can play the game using the cursor keys (or the joystick) and the emulated spectrum will think that you're pressing the keys you defined to control the game.

Audio Settings : 
----------------

Here you can set up a few audio settings. Currently, you can choose between 22050 and 44100 hz, and choose to have stereo and surround enhancements, and little echo/reverb type thingy. I like these options. Starquake echoing in a cave sounds good.

Audio Settings/Volumes : You can set the volumes of each channel and the beeper/Mic here. The beeper on a real 128k speccy is about 3x louder than any single AY Channel (all AY Channels together = 1 Beeper) so bear that in mind, especially when listening to music that uses both beeper and AY music.

Audio Settings/Stereo Placements: Here you can set the placement in stereo space of each AY channel and the beeper, from left, through centre to right. There are presets available, ACB is the most commonly used in european demos.

Video Settings : You can choose here to set your frameskip (the higher, the quicker the emulation runs, at the expense of jerky graphics) and an auto-throttle. For the ultimate in smooth, set frameskip to 1, and auto throttle to off. Autothrottle will increase your framerate to match your computer's speed. 1Ghz machines won't need this, obviously.

The resolutions (Screen modes) are set as with the menu items, mentioned above.

The File Locations/Snapshots/Tapes Pages 
----------------------------------------

Here you can set how some files behave in SPIN. The first is for Z80 saving - you can opt to save out the extra info byte in a Z80 header which XZX uses to indicate that a +3 speccy is emulated. You can also choose V2 or V3 z80 files.

You can also set to ignore hardware changes in snaps. Now, whatever hardware you're running in will attempt to load your snap. Beware that +3 modes may not run 128k snaps properly - even if they were saved in 128k mode, they will be run in +3 mode if that's your current hardware setup. Similarly, 48k snaps will run in the Usr 0 (48k BASIC) mode of whatever hardware you have selected. This is very handy for demos which require a 48k mode to run in - usually the only way to get those to go is by using a .Tap file.

The tapes can be messed with too. You can choose to automatically launch a loader for tapes (LOAD "" for 48k, Loader option for 128k models) and disks, so that getting a game running is just a matter of opening a file. You can choose to auto-start and stop the  tapes. Bugs have been fixed here, and auto stop doesn't interfere with tape loading anymore. You can have the tapes automatically rewind when they reach the end. You can also choose to Speedload - load tapes faster than they would normally load on a real spectrum. the compatibility is good, we think we've covered most of the loader types out there. Feedback is good here too.

There's also the option to flashload (instantly load) any tzx block type $10 (standard loaders) if the ROM loading routine is called. This means that most .Tap files will load nearly instantly. If you are using Tap files, and there's a lot of parts that need to be loaded seperately, it's recommended that you have the auto tape controls turned on, or you could miss a lot of data.

Lastly, the Blitz loading option is only available with speedloading enabled. This will disregard all timings in order to load the tape as fast as possible. It works well in the majority of cases. It can cause emulation lockups at the moment, though.

Blitz loading *seems* to work for all tapes tested.

Options are saved whenever SPIN is exitted. If SPIN shuts down for any reason other than the User requested it to, then options likely won't be saved.

One other thing, there seems to be some misconception as to what Speedloading actually *is*. There are currently a couple of emulators out there that merely disregard all synchronisation timings in order to run the emulation as fast as possible whilst loading. SPIN isn't like that. We detect which loading routine is happening by comparing bytes around an IN instruction, and if we find a match for a recognised routine (speedlock, ROM, Alcatraz, UltraCarga etc) we can compress the loader down to happen in zero TStates. This results in greatly reduced loading times. Also SPIN *will* run as fast as possible when this happens, to gain a speed boost, but that is secondary to the main speedloading. We think that SPIN currently has the fastest Speedloaders out there, but then, we would :) We certainly detect and accelerate the highest number of loaders. Blitz loading is a little trickier to explain - suffice to say that it's a *very* fast loading method, which complements speedloading nicely.

The System Page
---------------

You can set a couple of options which govern how SPIN behaves here. 

Use MMX routines where available - SPIN will take advantage of the much faster memory shifting routines of the MMX enabled processors, if this is selected. This results in much nippier graphics and sound.

Pause when SPIN loses focus - when you click away to do something else, this option, when checked, will set SPIN to pause until you bring SPIN back to the fron again.

That's about it. Happy spectruming! or whatever.

Paul Dunn,
and Mark Woodmass.

---------------------------------------

SPIN uses dlls based on the InfoZip unzdll.dll, and as such I have to include this here:

InfoZip can be found at:   http://www.cdrom.com/pub/infozip/
and The Delphi Zipbeta package is at:   http://www.geocities.com/SiliconValley/Network/2114/zipbeta.html

Any problems in the Zip behaviour, please get in touch with Dunny (one of the SPIN authors, and the guy responsible for the zip handling) rather than mailing the guys who wrote the zip package's source code.

---------------------------------------



SPIN History/Known bugs/features/issues.
----------------------------------------

V0.1 (Public Beta) - 2/5/2002
-----------------------------

Not 100% TZX compatibility in speedloading. Close, but no cigar.
Bug in contention somewhere gives a slight corruption in the first part of the MDA demo.

Interface bugs - some of the UI is not implemented, some is. if something doesn't work, assume that it's not in yet.

Options do not save.
or load.

Options cannot be cancelled. It's 1 am, I'm trying to get a release out, ok?

let's see... what else?

Reset button doesn't always reset to the 128k menu on a 128k spectrum. 

Possibly lots of other stuff. Most of the contention etc is right, but the undocumented stuff like 128k port contention is not implemented correctly.
All undocumented opcodes are in though, so it's not all bad.

V0.1a (Public Beta, bug fix release) - 5/5/2002
-----------------------------------------------

Fixed resource leak in graphics
Switching "Auto Adjust Framerate" on and off now works.

Fixed bug in sound - beeper clips properly now.
Fixed widestereo routines to use user-settings

Small bug in the non-mmx interpolated gfx routine.
MMX will now be disabled if the host machine doesn't support MMX extensions
MMX can also be disabled by setting UseMMX = 0 in SPIN.ini

Temporary fix for MDA multicolours
Small speedup in the Z80's port read routines
Many parts of the Z80 Core recoded in Pure Assembly.

Updated all but the joystick options now.
Saving and loading of settings implemented.

Fixed file open/cancel bug
Fixed Auto tape controls preventing some games from loading
Fixed bug where the emulator would hang if the tape started playing with no tape inserted


V0.1b (Public Beta, more bugs fixed) - 15/5/2002
------------------------------------------------

Fixed joysticks detection - no longer warns you that there is no stick attached if you select None in the list of stick emulations.
Fixed folders not using the ones you selected.
Fixed a bug in the keyboard routine - special PC symbol keys work properly now.
Fixed some other *stupid* bugs in the keyboard routines...
Fixed a bug with the mouse pointer being visible in fullscreen.
Fixed Snapshot saving in 48k mode (SP pointer bug), and a related bug in 128k snap saving.
Fixed Z80 block compression
Fixed a paging bug in the +3 code

Changed Reset Icon to a power icon, thanks Neuro, (I'm not sure about it though, I liked my Bin)
Changes to F_Key mappings - see readme for info.
Changed Sound pitch a little - sounds better now, especially AY Sound.

Added MRU list, ten most recent files
Added drag and drop support.
Added ULA Snow effect, and Floating bus based on RamSoft's technical docs - with minor changes - probably errors in the translation from Italian to English :)
Added Resizeable main window.
Added All joystick types keystick and PC Joystick.
Added more tape controls - FF 1 block, REW 1 block, FF to end, REW to start.
Now saves window size and position.
Added "Tape Auto Rewind" feature
Added - Ctrl key can be used instead of Shift to get stuff like : rather than ; on symbol keys.
Added +3 Floopy drive emulation - full read/write support for dsk's, read only for e-dsk. No copy protected disks yet.
Added *Basic* +3e emulation - it loads and runs the ROM, but not much else. No IDE support.

There is a bug in the keyboard routines - it appears to ignore the first keypress after the emulator is loaded - all subsequent keypresses are ok.

V0.1c - Really stupid bugs
--------------------------

Fixed z80 48k snapshots loading
Fixed bug which prevented Scanlines modes from being saved
Fixed Pretty daft - "black Screen" bug

Added Option to ignore hardware changes for snap loading. If a 48k snap is loaded, it will use the currently selected hardware and the timings for it. 48k Usr0 mode demos now load properly if you choose a 128k model. I don't know of any other emulator that does this (although RealSpec might).

V0.1d - New stuff added
-----------------------

Realtime Audio settings window - change the panning/volume in real time.
Altered behaviour of the "Don't change Hardware to match Snaphots" option to include *all* hardware types (except where unavoidable, ie, loading a 128k snap into a 48k emulation).
Auto tape and disk load - jumps straight to LOAD "" (48k) or the loader option in 128k modes.
Fixed a small bug involving +2a's and snapshots :)
Added loading and saving of Binary files (chunks of memory)
Fixed a few bugs in resizing, and implemented a different method
Added (slow) bilinear resizing option.
Added CSW Support to the TZX loader.
Known non-working CSWs (From Andy Barker's Loading Schemes Page) :
	Mask.csw - Won't load at all
	Myla Di'Kaich.csw - No speedloading
	Sailing.csw - Won't load at all
Added support for Twister's loading scheme to be speedloaded.
Added Flashloading for Standard *TZX* blocks - CSWs and non $10 blocks won't flashload, even if they are using the standard ROM loader and ROM timings.
Fixed various bugs in the tape loading system - should be perfect now (Yeah, right!).
Added the basic bones of the debugger - work in progress, and likely to be for a *long* time.
Fixed some bloody stupid bugs in the joysticks - they should all work now.
Added more features to the +3 fdc code - most edsks of protected disks work, but a few still don't.
Fixed a drag and drop bug which wouldn't let you drop more than a few files before refusing any more.

Known bugs: The debugger is buggy (no surprise there then). The emulation locks up sometimes, usually after a pause (user requested or not, such as when the options open). I know why, just not how to fix.
Loads of others :)

V0.2 - Emulation Update
------------------------

Added Sound Mute option
Added Multiface emulation - if you have the ROMs :) This involved a large amount of changes to the whole emulation, so will probably have broken some stuff.
RZX saving fixed - broken due to new port behaviour
+3 Paging bugs fixed
Fixed the Usr0 reset option - was broken in 0.1d.
Fixed a possible Win2k/XP bug in the save dialogs.
Fixed a nasty, horrible sound looping noise when pausing the emulation.
Added WAV loading support - 8bit/16 mono/stereo, simple WAVs, only fmt_ and Data single blocks.
Plus 3 Floppy Disk code updated .All the tzx vault's dsk images work fine now.
Fixed a problem in NT/2k/XP with the Bitmap saving dialog.
Fixed a bug which could hang the emulator when it suspends or pauses
Added more debugger functions
Added Zip Support - both auto loading and "select file from zip".
Added Direct POKEing - POKE database support will be along later.
Added full speed option - watch it fly :)
Fixed a whole bunch of keyboard bugs. 
Virtually rewrote the thread communications. Much more stable now.
New option to use all available CPU time. This is better for slower machines.
Fixed a problem with .tap files - the wav support was getting in the way...
Fixed a problem with the debugger not appearing on breakpoints.
Fixed a "Win32 API Function Failed" error that appears if certain error messages appear.
Fixed a small bug in the Disk loader, which could cause an exception.
Added more keyboard keys - the [{}]|\ and copyright symbols are now directly available from the PC keyboard's keys (but the  key is copyright symbol)
Added "Search Tipshop" box to the pokes window
Fixed up the menus to accept accelerator keys
Added option to Pause the emulation when SPIN loses the focus (deactivates)
Fixed a bug where SPIN would not pop to the foreground when a file is dropped on it, in Win2k/XP
Added WOS, TipShop and TZXVault links on the help menu.
Added more loading schemes to the speedloader, such as UltraCarga.

Known bugs/issues in this release:

It may raise a BSOD or App error on exit. We think that this is squashed, but maybe not. We only have two machines to test with :) 
The last folder used in the open dialog can sometimes get lost or forgotten. Especially when working with .zips.
Zip list box will list all files in the zip that are compatible, and doesn't support folders inside the zip yet - it will list every file regardless of which folder it is in.

v0.2a - Damned Stupid bugs
--------------------------

Fixed the "Temp Folder" bug for Zip support.
Woody attempted to fix the AY sound envelope bug - we need confirmation that this is done (suggested by Matthew Westcott).
Added Mute on Lose Focus (suggested by Mike Wynne)
Added Mute Button to toolbar (again, suggested by Mike Wynne)
Fixed sound volume - should be about 2x louder now.

v0.2b - Goodness knows what I'm calling this one
------------------------------------------------

Added Minimise Button.
*MORE* +3 copyprotected disks now load - we're getting close to perfect +3 fdc now.
Added (most of) Eq TetraChloride's UI suggestions.
Fixed bug in thread priorities - now uses < 1% CPU time when paused.
Fixed the "F10 Rewind Tape" key bug.
Upped the volume again - SPIN is now as loud as it gets :)
Fixed the Volume controls - they now go all the way up to max.
Fixed Sound mute-on-focus-lost error - *any* window (even SPIN's own windows) open and the sound muted.
Added CPU speed options - Anyone for a 100mhz speccy? You might need to mute the sound for a decent framerate.
Fixed another snap saving problem - not all banks were saved in a 128k .sna
Fixed a bug which wouldn't allow keys 1..9 or 0 to be used for the user definable keystick.
Added Hints to the status bar, with a groovy little Hardware icon :)
And other UI improvements - should be a little more forgiving of large fonts now. Not perfect, but a lot better.
Fixed a small bug which forced a frameskip of 1 when the sound was muted
Added Clive.
Fixed small bugs in the error reporting for the Pokes window, and the binary files window.
Small bug fixes to the disassembly window, concerning certain IX+D opcodes
Fixed the Archive Info Block bug - no entries were displayed :)
Added and option to use a high-resolution timer to synchronise the emulation speed, rather than relying on DirectSound synchronisation. This might fix some people's speed problems.
Added Disk manager dialog - SPIN can now create blank floppy disks.
Fixed a bug in the sound init - if DSound is unavailable, then sound will be muted from then on, and you won't be notified on subsequent runs.
Altered the shutdown methods a bit - XP machines were taking 3-4 seconds for SPIN to quit :(
Added Full +3e IDE emulation - both IDE channels.
Fixed auto tape/disk loading for +3e mode
More bugs in the tapes fixed.
The old blitz loading is now incorporated permanently into Speedloading, and Blitz now describes the new loading technique. Try it, you might like it.
Fixed the temp folder bug - SPIN no longer requires its' own temporary folder.
Fixed a small bug which didn't properly select the correct hardware for some snaps
Added Filetype associations - whilst still maintaining the ability to run multiple instances of SPIN, I might add. That was a headache :)
Woody updated the graphics routines a touch - and every little counts.
He also added +3 Disk acceleration - kinda like Speedloading for disks (though not as thorough)
Added Maximise (full screen) button
Fixed small bug which would affect drag and drop when SPIN was set to pause when the focus was lost
Fixed an error unzipping files - sometimes, when you opened a file dialog, it would start in  the temporary folder.
Fixed more RZX bugs, but Sabre wulf is still giving me headaches - SPIN can record and play back, but SpecEMU can't use the recordings :( Don't know if it's emulation or RZX causing that atm.

V0.3 - Rewrite
--------------

Emulation/Environment:

Rewritten a sigificantly large portion of the emulation engine. Should be way more stable than before, but probably a lot of bugs to iron out. Also makes updates a lot easier.
Folder locations bug in Snapshots folder.
Bugs in the Binary Files dialog fixed
Added Fuller Joystick support
Added CSW association - it *is* a speccy format after all.
Fixed a small bug which could kill some machines when Fullscreen was activated
Fixed auto-associate on startup.
Fixed an "Emulate Memory Contention" bug
Added Magnum Lightgun support
Added 48k Keyboard helper - it's in the Help menu - which can be useful when programming BASIC in 48k Mode, and has a command finder which displays the correct keypresses for keywords and functions, and a Quick BASIC helper which can alleviate the tedium of typing in all those long listings :)
Various fixes to the speed (TZX Files should speedload a touch faster) and the graphics are more reliable now.
Better handling of zip files (they don't set the last visited folder to the temp folder) and MRU items don't set them either.
Added an FPS counter - click it to get % emulation speed, and click again to go back to FPS.
Fixed a bug concerning the speed of the emulation when muted sound was chosen in conjunction with the autothrottle.
SPIN Now saves the positions of all its' windows, not just the main window.
Added Support for external ROM files - install them to the ROMs folder and then select them into the appropriate hardware in the Options window.
Thanks to Steve Snake (Author of Klive) Losing Victoria now runs in the same manner as the real 128k Spectrum (and the same as Klive does), ie - by losing synch in the endpart. Thanks Steve!

RZX Recording/Playback:

Added RZX files to the list of Associated filetypes
RZX handling now brought further into line with RamSoft's spec. 
RZX now has compressed snapshot block support, and compressed IRB support. At last :)

Tapes/Disk Support:

Better handling of Tape flashloading.
Added CSW/WAV recording (MIC output)
Added TZX/TAP saves (ROM trap method).
Added Fuller Box AY Support. 
Added a new tape/disk opening method - hold down shift if you want to override the auto tape/disk loader, and opt *not* to load them when they open.
Fixed another bug in Flashloading that caused some tapes to skip around.
Speedups to the tapes - reworked to take advantage of Delphi's optimiser.
Altered the behaviour of the Autoload - tapes automatically play under autoload. 
Added an option to hold down CTRL to load tapes in Usr0 mode... Hi Jon! :-)
Added TZX Direct Recording Block recording support.
Added a *Basic* TZX editor - you can rearrage/delete/duplicate blocks, and edit their properties.
Added MRU List for tapes in the Tape Browser



V0.3a - Bugs and more tapes
---------------------------

Forgot to enable the Tape Browser's Save options! D'oh! You could still save by using eject, but still...
Fixed a small bug in the CSW recorder.
Fixed a bug in tape recording that really only affected CSW Saving. 
Added TZX -> WAV/CSW conversions.
Fixed a bug that could prevent SPIN from starting - an .ini problem. Surprise, surprise.
Fixed a couple of bugs in the block insert routines for the TZX Editor.
Added Real Tape loading - SPIN can now load from real spectrum tapes through a tape recorder attached to the Soundcard's line-in socket.



v0.4 - OpenGL and Seriously fast tapes
--------------------------------------

Added OpenGL (fullscreen/Windowed mode) support - way cool, check it out. Might need a fast PC though.
Altered the functionality of the toolbar - rightclick some buttons to get more options, ie - you can right click the reset button and then choose a normal reset or a Usr0.
Fixed a possible startup Bug.
Fixed a bug with ULA Snow and a reset - also demos such as Yolka97 work properly now :)
Fixed a last used folder bug with zip files - it now opens the folder the last zip came from, rather than the temporary folder it extracted to.
Added the ability to load snaps with shift held down to avoid switching hardware, which is usefule for loading snaps made in 128k/+2 mode in a +2 emulation.
Fixed a bug regarding pauses and B increments which prevented Doomsday.tzx from loading.
Fixed a small bug that didn't list zip files in the disk manager
Added undetected loaders to the speedloader detection list - Indiana Jones and the Last Crusade's level loader, and Kentucky Racing. (Both Alcatraz).
Added Marko's 10h Acceleration to the speedloader - it's quite possibly the fastest non-flashloading system in any emulator :)
Fixed a bug in the tape browser that can cause lockups and BSODs on 9x machines.
Fixed more small bugs in the tzx editor to do with view positions and menus and such.
Added Sinclair InfoSeek pasting ability to the ArchiveInfo Block editor
Fixed an interrupt table overwrite bug in the z80 core
Fixes to the auto tape controls - might be better now, needs testing, but seems to stop when it should.
Now detects Windows NT in order to overcome certain slowdowns in windows GDI
Added Interface II Rom support (*.rom)
Added ZXPrinter output - save those listings to disk :) Normal slow printing for compatibility, and a ROM trap for added speed in LLISTing. Use F1 (fullspeed) mode to speed up normal prints.
Added Kempston Mouse support.
Removed most of the old GDI graphics code, and added DirectDraw support.

v0.41 - Small bug fix
---------------------

Fixed a small bug in the GDI startup code
Woody added some speedups to the core and the graphics update - a significant improvement in some cases.