SourceFiles.org - Use the Source, Luke
Home | Register | News | Forums | Guide | MyLinks | Bookmark

Related Sites

Latest News
  General News
  Reviews
  Press Releases
  Software
  Hardware
  Security
  Tutorials
  Off Topic


Back to files
  • *
  • S P E C T E M U *
  • *
  • Version 0.94 *
  • *

This package contains a 48k ZX-Spectrum emulator for Linux and other UNIX operating systems, with full Z80 instruction set, comprehensive screen, sound and tape emulation, and snapshot file saving and loading. It can run on a Linux console, or in an X11 window.

The program is free software and is copyrighted under the GNU General Public License. It comes with absolutely no warranty. See the file COPYING for details.

Written by Miklos Szeredi
Email: mszeredi@inf.bme.hu

It can be downloaded by FTP from:

tsx-11.mit.edu:/pub/linux/ALPHA/spectemu/spectemu-0.94.tar.gz or

sunsite.unc.edu:/pub/Linux/system/emulators/zx/spectemu-0.94.tar.gz

For news and updates have a look at the Spectemu Page:

http://www.inf.bme.hu/~mszeredi/spectemu/

You can also join a mailing list (at the Spectemu Page), to receive a notice when new versions of spectemu are available.

Table of contents

  1. Requirements
  2. Recommended
  3. Features
  4. Drawbacks
  5. Compiling and installation
  6. Using the emulator

6.1 Command line arguments and configuration files (NEW)

6.2 Using the Spectrum keyboard

6.3 Keys that control the emulator

6.4 Effects of changing frame frequency and sound buffer size

7. Where can I get ZX Spectrum games for this emulator

8. Tape files

8.1 Loading a tape file

8.2 Quick loading of tape files

8.3 Saving to a tape file

8.4 Saving a tape file to real tape

8.5 Making a tape file from a real tape

9. Bug reports

10. Credits

1. Requirements

Linux or other UNIX OS.
Color X11 server (depths 8, 16 and 32 bits are supported)

and/or
SVGALIB console graphics library on Linux.

2. Recommended

A sound-card on Linux for wonderful spectrum 1-bit sound. And well, a fast enough processor... (Especially for the X11 version.)

3. Features

  • Very fast because of assembly code in emulation (only on Intel processors).
  • Emulation also in C, which is slower, but supports any processor.
  • X support (with MITSHM if available, optionally double size window)
  • Linux console graphics (with SVGALIB)
  • Sound support (through Linux kernel sound-card driver, or SUN sound drivers)
  • Snapshot saving and loading (.Z80 and .SNA format)
  • Tape emulation: loading from tape files (.TAP and .TZX format)
  • Optional quick loading of tapes.
  • Saving to tape files.
  • Separate utility to save tape files to real tape
  • Configurable with config files and from command line

4. Drawbacks

  • Poor user interface

See the file TODO for a list of things which still need to be done (Maybe by YOU)

5. Compiling and installation

To install the precompiled Linux executables just run 'make install' as root.

To recompile the programs on other platforms first type

./configure

This tries to determine the system type and parameters. Probably you won't have to give any options to configure, but here is the list of the most important options:

--help Print a full list of options

  --prefix=PREFIX       Install files under PREFIX (default is /usr/local)
                        Executables go under PREFIX/bin, ...

--without-readline Do not use the readline library (default is to

use it if it's available on your system)

  --without-i386asm     Do not use the Intel assembly code (default is 
                        to use it, if your system is Intel based)

You may want to have a look at the produced `Makefile' and `config.h'. Then just type

make clean
make

Then to install the program, login as root, and run

make install

(If you want to compile on another machine be sure to `make realclean' before re-configuring and re-making the program!)

At the moment, there are two executable programs for running the emulator:

  xspect             the X11 version
  vgaspect           the Linux console version

'vgaspect' uses the SVGALIB library. If you do not have this installed on your system 'vgaspect' cannot be started. You MUST have SVGALIB version 1.2.10 or greater installed, and it is STRONGLY recommended, that you get version 1.2.11 or later!

SVGALIB is available at:
sunsite.unc.edu:/pub/Linux/libs/graphics/

If you have SVGALIB version 1.2.11 or later, the emulator can run in background when you switch virtual consoles.

6. Using the emulator

After starting 'xspect' or 'vgaspect' you should get the '(C) 1982 Sinclair Research Ltd' message, and after pressing a key, the flashing cursor. If not, then all I can say, is hard luck to you (if you are ambitious, compile the programs with debug information, and try to figure out what is causing the problem). Do not start the emulator processes in the background, the terminal is needed when loading or saving files.

To load a snapshot immediately after the start of the emulator, you can enter the name of the snapshot file on the command line. (Also see section 6.1)

E.g.

xspect snap/chuckie2

In X you can resize the window. Window size can only be a multiple of the smallest window size (320x256). Smaller window means faster emulation, so if emulation doesn't run at full speed, try making the window smaller.

6.1 Command line arguments and configuration files

You can give options to Spectemu in three different ways:

  1. In a configuration file (either ~/.spectemurc, or /usr/local/share/spectemu/spectemu.cfg)
  2. With the X Resource Database (.Xdefaults), this applies only to 'xspect'
  3. On the command line

Most of the options are common to all three methods, only the syntax differs slightly. Here are examples of the different syntax:

Config File:

scale = 1
private-map = true
sound = false
color-type = grayscale

.Xdefaults:

xspect.scale:1
xspect.privateMap:true
xspect.sound:false
xspect.colorType:grayscale

Command line:

xspect -scale 1 -private-map -no-sound -color-type grayscale

List of common options:

 NAME               RANGE     DEFAULT   DESCRIPTION
 ----               -----     -------   -----------

 frame-skip         1...      2         The smaller this is, the more 
                                        often the screen is updatated

 scale              1..4      2         Window size of 'xspect'

 private-map        yes/no    no        Use private colormap in 'xspect'

 mit-shm            yes/no    yes       Use MIT-SHM extension in X server 
                                        if available

 vga-mode           320x200   320x240   Resolution to use in 'vgaspect',
                    320x240             320x200 is faster (but not so nice)

 sound              yes/no    yes       Spectrum sound, if availble

 sound-delay        1...      4         The amount of frames (1/50 seconds) 
                                        to delay sound. See section 6.4

 sound-device       filename  (system   The name of the sound device
                              dependent)  

sound-sample-rate 4000... ~15625 Sample rate of sound device

 sound-autoclose    yes/no    yes       Whether to close sound device when
                                        unused (so other programs can use it) 

 sound-dsp-setfrag  yes/no    yes       Set this to 'no' if you use PCSND
                                        sound driver

 keyboard-type      extended  extended  Specifies the mapping of the keys,
                    spectrum            from the PC keyboard to the spectrum
                    compat              keys. See section 6.2
                    custom              

 cursor-type        shifted   shifted   How to use the arrow keys on the
                    raw                 PC keyboard. See section 6.2
                    joystick            

 allow-ascii        yes/no    yes       Interpret other keys on the PC
                                        keyboard. See section 6.2

 true-shift         <modif>*  alt       Modifier to get shifted symbol 
                                        as on the PC.

 func_shift         <modif>*  control   Modifier to get control functions.

 color-type         normal    normal    What type of colors to use. Gray-
                    grayscale           scale looks better on monochrome
                    custom              displays.

 pause-on-iconify   yes/no    no        Whether to pause emulator, when it
                                        is iconified ('xspect' only)

 vga-pause-bg       yes/no    no        Whether to pasue emulator, when you
                                        switch to a different console

 quick-load         yes/no    no        Use built in (quick) loader for
                                        tapefiles.

 auto-stop          yes/no    no        Pause tape after each segment when
                                        quick loading.

 load-immed         yes/no    no        Load tapefile immediately (as if 
                                        you typed LOAD "" / ENTER)

 pause              yes/no    no        Pause the emulator on startup
  • <modif> can be one of: none, shift, lock, control, alt,

    mod2, mod3, mod4, mod5

Extra command line parameters:

On the command line you may also use the following options:

 -help              Prints usage information, and a list of available
                    options

 -version           Prints out the version

Also on the command line, a snapshot file and/or a tapefile can be specified. Spectemu figures out the type of file from the extension. You can omit the extension, e.g. you have a snapshot file 'snap.z80' and you start spectemu with 'xspect snap', then it will add the '.z80' extension.

You can specify what type is the file by preceding it with one of '-z80', '-sna', '-tap' or '-tzx' options. This is useful for cases, when the filename does not have an extension (e.g. automatic starting with the midnight commander).

Extra config file options:

Color configuration
'''''''''''''''''''
You can configure the custom colors in the config files (and the X Resource Database) with:

color[0..15] = R G B

e.g.

color-type = custom

color0 = 10 20 30
color7 = 40 50 60

changes the 0-th (black) and the 7-th (white) colors.

Keyboard configuration
''''''''''''''''''''''
You can set custom key bindings in the config file:

Key_<keysym_name> = K ...

Or in the X resource database:

xspect.keys: <keysym_name> = K ...; ...

The <keysym_name> can be set to any keysym (defined in 'spkey_p.h'). The K arguments are the spectrum keys to be assigned to the given PC key. K can be any letter, number (a..z, 0..9) or the following:

none, space, enter, capsshift, symbolshift, kempston_up, kempston_down, kempston_left, kempston_right, kempston_fire

e.g.

keyboard-type = custom
true-shift = none

Key_Insert = capsshift 9
Key_Tab = capsshift symbolshift Key_Shift_R = kempston_fire
Key_Alt_L = symbolshift
Key_Alt_R = symbolshift

or as it would appear in a .Xdefaults file:

xspect.keyboardType:custom
xspect.trueShift:none

    xspect.keys:Insert          = capsshift 9;        \
                         Tab = capsshift symbolshift; \
                         Shift_R = kempston_fire;     \
                         Alt_L = symbolshift; Alt_R = symbolshift

6.2 Using the Spectrum keyboard

Those of you that have at some time used a Spectrum know, that the keyboard of this little computer is something very strange, with a LOT of keywords and symbols on and around each key. If you have not seen this keyboard (or have somehow managed to forget some bit of information that is on it) we produced quite a good copy of it, found in the 'spectkey.gif' file.

If you are using 'xspect' than pressing 'Ctrl-k' brings up the picture of the spectrum keyboard. You can press keys with the mouse (even more than one if you like), and it also shows which keys are pressed. (You can see what the emulator does when, for example you press 'BackSpace' or a '[' key on the PC keyboard).

The default mapping of the spectrum's keyboard to the PC's is the following:

The numbers, the letters, Enter and Space are the same. The left Shift on the PC corresponds to the CAPS SHIFT key of the Spectrum, and the right Shift corresponds to the SYMBOL SHIFT. This is quite simple and with these keys you can get all the functionality of the original Spectrum (assuming of course, you know how).

But...

To make life a bit easier, you can also use the Backspace, the arrow keys, and the following symbols as on a PC keyboard: ,./;'-=<>?:"_+[]{}\|~ (unless you turn the 'allow-ascii' option off)

To get a symbol which is written above the numbers on the PC, and not the function or symbol that is on the Spectrum, press Alt (actually the value of the 'true-shift' option) instead of Shift.

You can slightly modify the mapping with the 'keyboard-type' and 'cursor-type' options. Every mapping includes the basic keys (letters, numbers, Space and Enter). Here are the mappings special to each keyboard type and cursor type:

   PC Key            Spectrum Key
   ------            ------------

(Keyboard Types)

extended: (default)

Left Shift -> Caps Shift
Right Shift -> Symbol Shift
Back Space -> Caps Shift + '0'
Escape -> Caps Shift + '1'

spectrum: (spectrum-like layout, useful for some games, e.g. Jumping Jack)

< same as extended, plus: >
Comma (,) -> Symbol Shift
Period (.) -> Space
Semicolon (;) -> Enter

compat: (similar to other emulators' layouts, e.g. Z80, X128, XZX ...)

Shift (both) -> Caps Shift
Alt -> Symbol Shift
Back Space -> Caps Shift + '0'
Escape -> Caps Shift + '1'

custom
Use key bindings specified in the config file (see section 6.1)

(Cursor Types)

shifted: (default)

Left Arrow -> Caps Shift + '5'
Down Arrow -> Caps Shift + '6'
Up Arrow -> Caps Shift + '7'
Right Arrow -> Caps Shift + '8'

raw
Left Arrow -> '5' Down Arrow -> '6' Up Arrow -> '7' Right Arrow -> '8'
joystick
Left Arrow -> Kempston Left Down Arrow -> Kempston Down Up Arrow -> Kempston Up Right Arrow -> Kempston Right Keypad Ins -> Kempston Fire Keypad Del -> Kempston Fire Keypad Home -> Kempston Up + Left Keypad PgUp -> Kempston Up + Right Keypad End -> Kempston Down + Left Keypad PgDn -> Kempston Down + Right

6.3 Keys that control the emulator

All control keys are produced by pressing the Ctrl key and another key.

Ctrl-c, F10 Quit the emulator immediately

 Ctrl-l, F3       Load a snapshot file; you must type the path and 
                  filename on the terminal where you started the emulator,
                  e.g. 'snap/chuckie2'. The type and extension of the
                  file is determined automatically (.z80 or .sna). 
                 
 Ctrl-t, F2       Save the current state of the emulator in a snapshot file.
                  Format depends on the extension (.z80 or .sna). If no
                  extension is given, .z80 is appended. 

Ctrl-w, Ctrl-F2 Save a snapshot to a temporary file

Ctrl-e, Ctrl-F3 Restore last temporary snapshot saved with 'Ctrl-w'

Ctrl-q, F5 Reset the Spectrum

Ctrl-f Fast mode

Ctrl-n Normal speed mode

 Ctrl-b           Pause/Unpause emulator (you can do operations like loading
                  a snapshot file, etc... in paused mode too)
                  
 Ctrl-m           Toggle sound on/off

 Ctrl-h, F1       Print help
                  
 Ctrl-k           Display (undisplay) keyboard of spectrum. See section 6.2.
                  
 Ctrl-p, F4       Play tape. Tape file must be entered on the terminal. 
                  Optionally the starting segment can be entered; 
                  e.g. 'tape/tape1.tap' or 'tape/tape1.tzx 13'
                  
 Ctrl-s, F7       Stop tape
                  
 Ctrl-y           Toggle quick loading
                  
 Ctrl-o, F6       Pause and unpause during tapefile playing (restarts the
                  current segment).
                  
 Ctrl-r           Record to tape file. See section 8.3.
                  
 Ctrl-\, F9       Refresh screen, reset keyboard state and 
                  refresh colors.

 Ctrl-j           Toggle private colormap mode (only X) 
          
 Ctrl-comma       Decrease window size (only X)

 Ctrl-dot         Increase window size (only X)
                  
 Ctrl-equals      Skip more screen frames
                  
 Ctrl-minus       Skip less screen frames
                  
 Ctrl-]           Increase sound buffer size 
                  
 Ctrl-[           Decrease sound buffer size

6.4 Effects of changing frame frequency and sound buffer size

ONLY READ THIS IF YOU ARE NOT TOTALLY SATISFIED WITH THE EMULATOR'S PERFORMANCE

This should be totally automatic, so I'm now programming you to do what the emulator should. (Luckily you are much easier to program)

Frame skipping determines, after how many frames the emulator displays one on the screen. There are 50 frames in one second, and normally every other frame is displayed (25 per second). If the emulator is too slow under X, increasing frame skipping can have a good effect on performance, but at the cost of poorer quality. But the interesting thing is, that increasing frame skipping may cause a worsening of both performance and of picture quality (I will not explain it here why).

Decreasing frame skipping has the opposite effect of the above.

If the emulator uses sound, but sound is not continuous, then experiment with increasing sound buffer size, and increasing frame skipping. If you are lucky you can make things a bit better. Increasing sound buffer size has also the negative effect of delaying more the sound effects.

7. Where can I get ZX Spectrum games for this emulator

On the Spectemu homepage (http://www.inf.bme.hu/~mszeredi/spectemu/) you can find a list of sites worth checking. Here are some:

http://www.void.demon.nl/spectrum.html
http://www.nvg.unit.no/sinclair/planet/

The fact is, that there were a lot of Spectrum games around on audio tapes, and some of them are really good. There were always cracked and copyable versions around, and nobody was interested in copyrights. Unfortunately the big FTP archives do not allow non free software on their servers, so I can't include any games in this distribution.

(Because Spectrums have died out, and perhaps some of the software companies do not exist any more, probably some games could be distributed freely. But I will not check on those things.)

I've included a program named 'spconv', written by Henk de Groot (hegr@ensae.ericsson.se) which can convert between snapshot file formats.

Alternatively if you have some old spectrum tapes laying around, and you are very brave, you can check out section 8.5.

8. Tape files

8.1 Loading a tape file

The emulator now supports G.A. Lunter's .TAP and Tomaz Kac's .TZX tape files. To load a file, enter

LOAD ""

to the spectrum (by pressing keys j""), then press 'Ctrl-p'. On the terminal enter the name of the tape file to load, e.g.

tape/cnamemat

The emulator will now load from the tape file 'tape/cnamemat.tzx' or 'tape/cnamemat.tap' whichever exists. Playing automatically stops at the end of the tape file. To stop loading before this press Ctrl-s.

The default extensions are '.tap' / '.tzx' or '.TAP' / '.TZX' depending on whether the entered tape file is upper or lower case.

While loading try pressing Ctrl-f, which can speed things up. After loading the file press press Ctrl-n to restore normal speed.

8.2 Quick loading of tape files

Quick loading means bypassing of the tape loading routine in the spectrum ROM, and loading of tape blocks directly into the memory. Some programs use their own tape loading routines, and in that case the tape blocks are always "slow loaded" (see above section).

Quick loading is optional and can be toggled with the 'Ctrl-y' key.

When quick loading is on, after entering 'LOAD ""' you are immediately prompted for a tapefile. If the tapefile can't be loaded, the quick loading of the first header block is cancelled, but you can still load the rest of tape by pressing 'Ctrl-p' and entering the tapefile name.

Even in quick load mode, the playing of tapes is not automatically paused, when the program doesn't load more blocks, so with '.tap' files containing multipart games, you have to pause the tape at the end of each part with 'Ctrl-o' ('.tzx' tapefiles can contain a "Stop the Tape" mark, to automatically pause playing).

8.3 Saving to a tape file

If you want to save something to a tape file using the spectrum's "SAVE" command, do the following:

  1. Enter 'SAVE "file"' on the spectrum
  2. press Ctrl-r to start the recording
  3. on the terminal enter the name of the tapefile to use
  4. press a key on the spectrum
  5. wait for the recording to stop
  6. press Ctrl-s to stop recording

If the specified tape file already exists, the newly saved segments are appended to the old tapefile.

8.4 Saving a tape file to real tape

The utility 'tapeout' enables you to save tape files (.tap and .tzx) to real tape via the soundcard. At the moment it only works on Linux, because it uses the OSS sound driver. (You can compile it for non linux systems, by adding -DNO_SOUNDCARD to CFLAGS in Makefile. Then instead of writing to the sound device, the program writes to a headerless wav file (bits: 8, sample rate: what you've given).)

You can compile 'tapeout' by entering

make tapeout

in the main directory of spectemu. The command line parameters are:

tapeout sample_rate tapefile [start_block [output_file]]

The default value for start_block is 0, for output_file it is "/dev/dsp" (or if compiled -DNO_SOUNDCARD it is "tape.out").

You can stop recording to the tape by pressing Ctrl-C.

8.5 Making a tape file from a real tape

WARNING, ONLY TRY THIS IF YOU REALLY-REALLY WANT TO!

Well it's not so bad as that, I've digitized a lot Spectrum tapes with ease, but I have the advantage of having played with tapes a lot on the real Spectrum, and of being able to modify the code which does the digitization.

First of all you must have a sound-card to do this. If you've got it, then you have a small chance of succeeding.

First get the cassette player which you used to play Spectrum tapes. Then plug it in your sound-card's 'line-in' or 'mic' inputs. Then somehow set the sound driver so that it reads things form the input in which you plugged your cassette (I use 'xmmix' the 'Motif Audio Mixer' to do this). And if you've managed to get this far, go to the directory where you want to store the tape files (remember, there will be a lot of little files: one for each little segment!), and enter the following command:

recs - 32000 | filt | spload tapefile

or

recs - 32000 | spload tapefile

(The first type worked better for me)

Where 'recs', 'filt' and 'spload' are programs found in the utils directory, and 'tapefile' is the name of the tape file without the '.spt' extension.

'.spt' tape files only exist because of historical reasons (the tape digitizing program preceeded the emulator, and also at that time I didn't know of the '.TAP' format), and now it isn't suppurted by the emulator any more. So you must convert '.spt' files to '.tap' with the utility spt2tap (in the utils directory) to use it with the emulator.

(The contents of the utils directory can be remade by changing to that directory and entering the command: 'make realclean; make')

Now you can put your favorite Spectrum cassette in the cassette player, and press the Play button.

'spload' will write a lot of information on the terminal, of which you might try to make some sense. Also you can do a 'tail -f tapefile.spt' in another terminal, to see what is happening. Again if nothing happens, then you are on your own (and most probably at first nothing will happen).

And remember that this digitizer is not better than the real Spectrum, so if you cannot load a program with a Spectrum, you'll most probably will not be able to load it with 'spload'.

Good Luck!

9. Bug reports

Please send bug reports to:

mszeredi@inf.bme.hu

If you make any changes to the source, please mail me the 'diff -u' of the file(s) changed, and also why were the changes needed.

Please also tell me if you would like to maintain, or to continue developing spectemu.

10. Credits

Szeredi Tamas, for testing the emulator, and for helping with the 'spectkey.gif'.

Egmont Koblinger for helping to write some parts of the emulator, and for a lot of useful suggestions.

Dani Nagy and Zsazsa for helping to test the emulator.

G.A. Lunter for a very good description of the Spectrum, the undocumented features of Z80, and the '.z80' snapshot file format.

And lots of others, who sent me good ideas and modifications.


Other Sites

Discussion Groups
  Beginners
  Distributions
  Networking / Security
  Software
  PDAs

About | FAQ | Privacy | Awards | Contact
Comments to the webmaster are welcome.
Copyright 2006 Sourcefiles.org All rights reserved.