Port of spectemu to Qt
C Shell Assembly C++ Elixir Prolog
Switch branches/tags
Nothing to show
Permalink
Failed to load latest commit information.
debian Debian - fix postinst rule Jun 3, 2011
patch spectemu 0.99.3 Nov 6, 2009
pics Improved icon Jan 10, 2010
utils spectemu 0.99.3 Nov 6, 2009
COPYING spectemu 0.99.3 Nov 6, 2009
ChangeLog spectemu 0.99.3 Nov 6, 2009
Makefile.dos spectemu 0.99.3 Nov 6, 2009
Makefile.in spectemu 0.99.3 Nov 6, 2009
README spectemu 0.99.3 Nov 6, 2009
README.DOS spectemu 0.99.3 Nov 6, 2009
README.Z80 spectemu 0.99.3 Nov 6, 2009
README.binfmt_misc spectemu 0.99.3 Nov 6, 2009
TODO spectemu 0.99.3 Nov 6, 2009
acconfig.h spectemu 0.99.3 Nov 6, 2009
akey.h spectemu 0.99.3 Nov 6, 2009
ax.c spectemu 0.99.3 Nov 6, 2009
ax.h spectemu 0.99.3 Nov 6, 2009
bin_to_c.c spectemu 0.99.3 Nov 6, 2009
compr.c spectemu 0.99.3 Nov 6, 2009
compr.h spectemu 0.99.3 Nov 6, 2009
config.dos spectemu 0.99.3 Nov 6, 2009
config.guess spectemu 0.99.3 Nov 6, 2009
config.h Added missing files Nov 21, 2009
config.h.in spectemu 0.99.3 Nov 6, 2009
config.sub spectemu 0.99.3 Nov 6, 2009
configure spectemu 0.99.3 Nov 6, 2009
configure.in spectemu 0.99.3 Nov 6, 2009
example.cfg spectemu 0.99.3 Nov 6, 2009
i386def.S spectemu 0.99.3 Nov 6, 2009
i386op1.S spectemu 0.99.3 Nov 6, 2009
i386op1x.S spectemu 0.99.3 Nov 6, 2009
i386op2.S spectemu 0.99.3 Nov 6, 2009
i386op2x.S spectemu 0.99.3 Nov 6, 2009
i386op3.S spectemu 0.99.3 Nov 6, 2009
i386op3x.S spectemu 0.99.3 Nov 6, 2009
i386op4.S spectemu 0.99.3 Nov 6, 2009
i386op5.S spectemu 0.99.3 Nov 6, 2009
i386op6.S spectemu 0.99.3 Nov 6, 2009
i386sp.S spectemu 0.99.3 Nov 6, 2009
i386step.S spectemu 0.99.3 Nov 6, 2009
install-sh spectemu 0.99.3 Nov 6, 2009
interf.c spectemu 0.99.3 Nov 6, 2009
interf.h spectemu 0.99.3 Nov 6, 2009
keynames.c spectemu 0.99.3 Nov 6, 2009
load_z80.bin spectemu 0.99.3 Nov 6, 2009
load_z80.c Added missing files Nov 21, 2009
mask.xbm spectemu 0.99.3 Nov 6, 2009
memdmps.c spectemu 0.99.3 Nov 6, 2009
memdmps.h spectemu 0.99.3 Nov 6, 2009
misc.c spectemu 0.99.3 Nov 6, 2009
misc.h Enable linking with C++ Nov 21, 2009
mkinstalldirs spectemu 0.99.3 Nov 6, 2009
opname.c spectemu 0.99.3 Nov 6, 2009
opname.h spectemu 0.99.3 Nov 6, 2009
pause.xbm spectemu 0.99.3 Nov 6, 2009
qbuild.pro More renaming and added empty program Jan 10, 2010
qresources.qrc 320x240 optimized keyboard png Jan 15, 2010
qspectemu.cpp vibrate using qtopia vibrate accessory class May 28, 2012
qspectemu.desktop More renaming and added empty program Jan 10, 2010
qspectemu.h vibrate using qtopia vibrate accessory class May 28, 2012
qspectemu.pro Rename to qspectemu Jan 9, 2010
qspectemu.xml By default bind for virtual keyboard Jan 16, 2010
qspectkey.png Program menu Dec 28, 2009
qspectkey320.png 320x240 optimized keyboard png Jan 15, 2010
rom128_0.bin spectemu 0.99.3 Nov 6, 2009
rom128_1.bin spectemu 0.99.3 Nov 6, 2009
rom48.bin spectemu 0.99.3 Nov 6, 2009
rom48.c Added missing files Nov 21, 2009
run.xbm spectemu 0.99.3 Nov 6, 2009
scrshot.c spectemu 0.99.3 Nov 6, 2009
scrshot.h spectemu 0.99.3 Nov 6, 2009
snapshot.c spectemu 0.99.3 Nov 6, 2009
snapshot.h Enable C++ linking for snapshot.h Nov 28, 2009
sp_def.h spectemu 0.99.3 Nov 6, 2009
sp_to_s.c spectemu 0.99.3 Nov 6, 2009
spconf.c spectemu 0.99.3 Nov 6, 2009
spconf.h Enable linking with C++ Nov 21, 2009
spconf_p.h spectemu 0.99.3 Nov 6, 2009
specsinc.xpm spectemu 0.99.3 Nov 6, 2009
spect.c spectemu 0.99.3 Nov 6, 2009
spectemu.lsm spectemu 0.99.3 Nov 6, 2009
spectemu.sh spectemu 0.99.3 Nov 6, 2009
spectemu.spec spectemu 0.99.3 Nov 6, 2009
spectkey.bin spectemu 0.99.3 Nov 6, 2009
spectkey.c Added missing files Nov 21, 2009
spectkey.png spectemu 0.99.3 Nov 6, 2009
spjoy.c spectemu 0.99.3 Nov 6, 2009
spjoy.h spectemu 0.99.3 Nov 6, 2009
spkey.c spectemu 0.99.3 Nov 6, 2009
spkey.h spectemu 0.99.3 Nov 6, 2009
spkey_p.h Enable linking with C++ Nov 21, 2009
spmain.c spectemu 0.99.3 Nov 6, 2009
spmain.h Enable linking with C++ Nov 21, 2009
spperif.c spectemu 0.99.3 Nov 6, 2009
spperif.h Enable linking with C++ Nov 21, 2009
spscr.c spectemu 0.99.3 Nov 6, 2009
spscr.h spectemu 0.99.3 Nov 6, 2009
spscr_p.h Enable linking with C++ Nov 21, 2009
spsound.c spectemu 0.99.3 Nov 6, 2009
spsound.h spectemu 0.99.3 Nov 6, 2009
sptape.c spectemu 0.99.3 Nov 6, 2009
sptape.h spectemu 0.99.3 Nov 6, 2009
sptiming.c spectemu 0.99.3 Nov 6, 2009
sptiming.h spectemu 0.99.3 Nov 6, 2009
spver.h spectemu 0.99.3 Nov 6, 2009
tapef_p.h spectemu 0.99.3 Nov 6, 2009
tapefile.c spectemu 0.99.3 Nov 6, 2009
tapefile.h spectemu 0.99.3 Nov 6, 2009
tapeout.1 spectemu 0.99.3 Nov 6, 2009
tapeout.c spectemu 0.99.3 Nov 6, 2009
vgakey.c spectemu 0.99.3 Nov 6, 2009
vgascr.c spectemu 0.99.3 Nov 6, 2009
vgascr.h spectemu 0.99.3 Nov 6, 2009
vgaspect.c spectemu 0.99.3 Nov 6, 2009
xdispkb.c spectemu 0.99.3 Nov 6, 2009
xdispkb.h spectemu 0.99.3 Nov 6, 2009
xkey.c spectemu 0.99.3 Nov 6, 2009
xkey.h spectemu 0.99.3 Nov 6, 2009
xscr.c spectemu 0.99.3 Nov 6, 2009
xscr.h Enable linking with C++ Nov 21, 2009
xspect.1 spectemu 0.99.3 Nov 6, 2009
xspect.c spectemu 0.99.3 Nov 6, 2009
xutils.c spectemu 0.99.3 Nov 6, 2009
z80.c spectemu 0.99.3 Nov 6, 2009
z80.h spectemu 0.99.3 Nov 6, 2009
z80_ari.h spectemu 0.99.3 Nov 6, 2009
z80_def.h spectemu 0.99.3 Nov 6, 2009
z80_op1.c spectemu 0.99.3 Nov 6, 2009
z80_op1.h spectemu 0.99.3 Nov 6, 2009
z80_op1x.c spectemu 0.99.3 Nov 6, 2009
z80_op2.c spectemu 0.99.3 Nov 6, 2009
z80_op2.h spectemu 0.99.3 Nov 6, 2009
z80_op2x.c spectemu 0.99.3 Nov 6, 2009
z80_op3.c spectemu 0.99.3 Nov 6, 2009
z80_op3.h spectemu 0.99.3 Nov 6, 2009
z80_op3x.c spectemu 0.99.3 Nov 6, 2009
z80_op4.c spectemu 0.99.3 Nov 6, 2009
z80_op4.h spectemu 0.99.3 Nov 6, 2009
z80_op4x.c spectemu 0.99.3 Nov 6, 2009
z80_op5.c spectemu 0.99.3 Nov 6, 2009
z80_op5.h spectemu 0.99.3 Nov 6, 2009
z80_op6.c spectemu 0.99.3 Nov 6, 2009
z80_op6.h spectemu 0.99.3 Nov 6, 2009
z80_step.c spectemu 0.99.3 Nov 6, 2009
z80_type.h spectemu 0.99.3 Nov 6, 2009
z80optab.c spectemu 0.99.3 Nov 6, 2009
z80optab.h spectemu 0.99.3 Nov 6, 2009

README

                      * * * * * * * * * * * * * * *
                      *                           *
                      *      S P E C T E M U      *
                      *                           *
                      *        Version 0.99       *
                      *                           *
                      * * * * * * * * * * * * * * *


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

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

  6.5    Virtual file support

  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 
      For Linux: through a sound card, or PC-speaker
      For SUN:   through built in sound device

 - PC Joystick support on Linux.

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

Note: 'make install' will install both xspect and vgaspect set-user-id
root. This could be a security risk. The program 'xspect' only needs
superuser privileges if you want to use PC speaker sound. To remove the
set-user-id flag, type 'chmod u-s xspect' in the directory where xspect is
installed (normally '/usr/local/bin').

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

You can also specify a path, where the snapshot and tape files will be
searched with the 'path' configuration parameter (section 6.1). This way
you will not have to specify the location of the snapshot, only the name.

For example if you have set the 'path = /c/spectrum/games' and start
spectemu:

  xspect chuckie2

then if the emulator can't find the file 'chuckie2' in the current
directory, it will look for it in the directory '/c/spectrum/games/'.


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 (.spectemurc)

 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

 pc-speaker         yes/no    no        Play sound through PC-speaker

 pcsp-delay         0...      0         Delay for PC speaker sound. 
                                        (should be about 1000 for a P90)

 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
                    kempston
                    sinclair1
                    sinclair2

 joystick-type      kempston  kempston  What type of joystick is emulated
                    cursor              with the PC joystick
                    shifted
                    sinclair1
                    sinclair2

 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

 path                         empty     Colon separated list of
                                        directories, where spectemu
                                        searches for snapshot and tape
                                        files

 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-a           Toggle auto fire mode of Joystick

 Ctrl-d           Change joystick type

 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

 Ctrl-z           Toggle full screen mode (experimental)

 Ctrl-x           Memory editing functions (experimental)


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.

If you only give a the name of the tapefile, then spectemu also searches
the directories given in the 'path' configuration parameter for the tape
file. 

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.

Matan Ziv-Av for the snapshot-path and the joystick code.

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.