Readme File for ZXSpin v0.504 PUBLIC TEST 8/7/2004 What's new in this release and the latest updates can be found at http://www.zxspin.co.uk/ 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 a TEST version - 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: For general feedback and bug reporting - feedback@zxspin.co.uk and for support (asking how to get stuff done) mail support@zxspin.co.uk And Test the Assembler, won't you? It's in the tools menu. The Options page has changed too, and I can't be arsed to document it - I'm sure those of you who have used SPIN before will have no trouble with it. 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. Shift-ESC will bring up the debugger. 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 configured. 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 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 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. Byte loading *seems* to work for most 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. Byte 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, Woody, Mark Boyd, Damien Guard - the SPIN Team. --------------------------------------- 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.