----------------------------------------------------------------------
                      UnrealSpeccy 0.09b by SMT
----------------------------------------------------------------------

        contents

                0. intro
                1. features
                2. system requirements
                3. keys in emulator
                4. bugs and incompatibilities
                5. greets
                6. contact me


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

        UnrealSpeccy designed for fast computers with latest OS: Windows 2000;
        system requirements are very high for Spectrum emulator, but
        acceptable (or relatively low?) for hardware in 2001 year ;-)

        this emulator is called 'Unreal' because there is some features,
        that never was available on real ZX-Spectrum, such as quick save/load
        snapshot, pause, speed-up/speed-down and so on...

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

features


  cpu
        all undocumented commands and flags


  memory

        PENTAGON-128/512/1024
        memory extension compatible with profi,scorpion,atmturbo1
        cache 16K


  sound

        beeper, tape saving and loading tones

        AY/YM: music 100% like original chips; effects - very close

        also there is 'unreal' (not available in real Spectrum) mode:
        playing AY music using digital player - emul plays three sound samples
        with volumes and frequencies taken from corresponding AY registers

        two covoxes - pentagon & scorpion

        soundrive

        saving sound to WAV or VTX (VTX - good format for ay sound, much
        more compact then PSG, but you need lha.exe somewhere in %PATH%)

        General Sound - FX player + very simple MOD player, but you can save
        MOD-file to disk and listen it in your favourite player

        digital sound filter for general sound. uses simple upsampling, so
        not much CPU time required (only 3 times slower, then normal mode)


  video

        several video drivers, from simple and fastest to complex bi-linear
        filtering, that upsamples Spectrum display to 512x384 * 64 colors;
        several 'noflic' filters are specially for demos, that fast switches
        two screens to get more colors (noflic2 emulates 'GIGASCREEN' device),
        several chunky filters for 21st century demos

        multicolors are fixed for PENTAGON, 1T screen update for all
        border effects

        port #FF present


  tune-up video with hotkeys

        change video settings, such as number of t-states/frame, t-states/line,
        fix with grey+, grey-, grey*

        t-states/frame is a computer speed, so it's easy to adjust speed in
        fast (or slow) games in very wide range for comfortable playing


  beta 128 disk interface

        implemented all FDC commands, except read/write whole track
        (format disk will not work);
        traps for read/write sector - more then 256 times speedup


  tape

        full TAP and partial TZX support
        (not supported in TZX: tape flow control blocks, such as loops,
        jumps, calls; and direct recording blocks -
        i did not find tapes with direct recording to test)

        tape browser

        auto-start tape when accessing to ROM load routine

        fast loading with two ways:
        1. trap ROM routine (zero loading time)
        2. loader detector: UnrealSpeccy able to recognize loader logic
           and speed up loader by removing delay loops and edge detection loops.
           (of course, UnrealSpeccy leaves original t-states timing
           so max speed mode must be enabled for fast loading - press NumLock)
           With this technique any 128K game may be loaded in 10-20 secs.
           i've developed this feature independent from RAMSOFT, but looks like
           they are used same idea in RS 0.90.38...
           for really fast loading, also choose fast (e.g. 'scanlines' or
           'small') video driver - press F4.


  input devices

        fully customizable keyboard
        kempston mouse with speed and swap_buttons options
        kempston joystick on keyboard
        kempston joystick on mouse (joystick will follow mouse cursor)


  files

        reading:

           SNA and Z80 (all versions, 48k and 128k)
           FDI, TRD, SCL (if SCL does not contain boot.B, it may be appended)

        writing:

           SNA 48k and 128k
           TRD, FDI
           SCR, BMP (screenshots)
           WAV, VTX

  leds

        1. AY volume/status. just for fun. white color - tone,
           grey - noise, blue - digital sound, green - envelope;
           also shows GS volumes sometimes

        2. perfomance leds. displays how much Z80 t-states between two
           interrupts. when watching some demo, you'll see, how much time
           takes one or another effect. second number is PC framerate - on
           normal speed, it must be 50. if it's less, then your CPU is too
           slow, and sound may be jerky - try to select faster video driver,
           disable some devices, increase skipframe or decrease t-states
           per int. when running on max speed, framerate shows how fast you
           computer is. for example, 800 is 16 times faster then 3.5MHz
           spectrum, and average game will load (without using traps) in 20 secs

        3. input led. shows which input devices are active - keyboard, mouse,
           kempston joystick. for keyboard, displays queried keyrows.
           one example: i've noticed, that in KOL0BOK2 intro active keyrows
           are <B>-<SPACE> and A-G. <SPACE> is an exit, but why program
           scans <A>-<G> ? i've pressed <A> and, and saw, that now program
           queries <Y>-<P>. after pressing A+P, program queries <CAPS>-<V>.
           when pressing A+P+X active keyrow is only <B>-<SPACE>. so, i've
           found cheat without digging in program code! (another way was to
           set breakpoint on reading port #FE and analyze code nearby)

        4. ROM/LOAD led. when saving/loading from disk, emulator shows
           blue or red diskette. when loading from tape, emulator displays
           cassette picture and progress for current block (or 'PS' - tape
           silence). if disk and tape are off, and cpu executes code in ROM,
           then emulator displays 'DOS', 'B48', '128' or 'CHC' (cache);
           also displays loading MOD/FX to General Sound

        5. using leds on AT keyboard to display AY amplitude peaks


  monitor

        software that in PC world is called 'debugger', in Spectrum world
        is often called 'monitor'

        find text or code.
        using mask: code matches when ((code & mask) == (pattern & mask))

        unlimited number of code breakpoints

        conditional breakpoints of any complexity, uses c-like expression
        syntax (with this feature can be easily done: breakpoint on range,
        breakpoint to port in and out, on instruction, etc..)

        built-in Z80 assembler/disassembler

        save-load memory blocks

        screen preview: when multicolor/border effects disabled,
        you'll see screen memory changes immediately, else TV-ray emulated

        all debug info on one screen, no need to switch pages


  GUI

        all settings, that present in INI file, may be changed in GUI
        (but will not be saved, for permanent effect edit INI file)

        easy entering POKEs, if you don't want to use monitor or use
        HEX addresses. delimiters for numbers are space, comma, colon,
        semicolon - so can be cut'n'pasted from any POKEs collection

        loading from archives. now supported: CAB,ZIP,RAR
        you can add own archivers to INI file

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

system requirements

        UnrealSpeccy designed and optimized for Windows 2000, it may work
        in Win95 too, but much slower

        for running UnrealSpeccy you need:

            12Mb of RAM
            Celeron-266 CPU for Windows NT / Windows 2000
            Celeron-400 CPU for Windows 95 / 98
            16-bit sound card [optional, but recommended]

        if you have such hardware, but emulator runs slow, try the
        following:

            1. increase sound buffer size (especially for win95) in INI file
            2. select 'scanlines' or 'fast' video driver
            3. disable vsync
            4. set 'skipframe=4' in INI file
            5. set 'Frame=30000' in INI file (if nothing else does not work)
            6. disable sound (without sound emulator runs much faster)

        this should help


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

keys in emulator

these are default keys, can be changed in INI file


ESC             monitor
F1              options/GUI
F2              write snapshot/disk image
Alt-F2          quicksave to qsave1.sna
Ctrl-F2         quicksave to qsave2.sna
Shift-F2        quicksave to qsave3.sna
F3              read snapshot/tape/disk image
Alt-F2          quickload from qsave1.sna
Ctrl-F3         quickload from qsave2.sna
Shift-F3        quickload from qsave3.sna
(SHIFT+)F4      select video driver
Alt-F4          exit emulator
F5              start/stop saving sound (WAV or VTX formats)
                may be used from monitor: set breakpoint to
                start/stop routines and save;
                when saving to vtx, start and end silence wiped
F6              enter POKE(s)
F7              start/stop tape
Shift-F7        tape browser
F8              screenshot
F11             NMI
Alt-F11         MNI to cache
Ctrl-F11        NMI to TR-DOS ("magic")
F12             reset 128
Ctrl-F12        reset tr-dos (128)
Shift-F12       reset to 48 basic, but port 7FFD unlocked
Alt-F12         reset to 48 basic, port 7FFD locked
Ctrl-Alt-F12    reset to cache
pause/break     pause
gray/           leds on/off
gray*           select parameter to change: t-states/int (speed), fix, etc...
gray+,gray-     change video parameter (press with SHIFT for finetuning)
NumLock         max speed on/off (no sound on max speed)


keys in monitor

(CTRL,SHIFT+)F1,F2,F3,F5 - see above
ESC             exit, run program
F6              set breakpoints range
SHIFT-F6        reset breakpoints range
F7              step
F8              trace, skip calls and loops
F9              show spectrum screen
Shift-F9        show alternative 128k screen
F11             trace to (sp)
TAB             next window
SHIFT-TAB       prev window
Ctrl-W          toggle watches/dump window
Ctrl-D          toggle text/hex dump
Alt-B           edit port 7FFD (select bank)
Alt-P           enter POKE(s)
Alt-R           load memory block from file
Alt-W           save memory block to file
Alt-G           general sound status (double-click - play sample)
Alt-C           enter/edit conditional breakpoints

       conditional breakpoints uses C expression syntax.
       operators (in priority order):
         () ! ~ M(x) -> * % / + - >> << > < == = <= >= != & ^ | && ||
       operands:
         a,b,c,d,e,h,l,bc,de,hl                 - common registers
         a',b',c',d',e',h',l',bc',de',hl'       - alternative registers
         ix,iy,pc,sp,i,r                        - control registers
         FD     - pentagon port #FD (also know as #7FFD)
         OUT    - port used in 'OUT' command (or 0FFFFFFFF when no outs)
         IN     - port used in 'IN'  command (or 0FFFFFFFF when no ins)
         VAL    - read/written value to port (only meaningful when OUT != 0FFFFFFFF or IN != 0FFFFFFFF)
         numbers - hex, but must start with digit: DFFD - wrong, 0DFFD - right
         characters - must be enclosed in single quotes ('A','B',etc..)
       all calculations uses 32-bit unsigned interger arithmetic
       if you are not familiar with C, use brackets as much as possible, due to
       non-intuitive operator's precedence, e.g.
       out & 0FF == 0FE   treated as 'out & (0FF == 0FE)' <- always 0

       M(x) is peek byte at address x (same as x->0)
       '=' is an alias for '==' (for pascal programmers)

       samples:

           (out+1) | (in+1)       - in/out to any port
           (in & 8001) == 0       - read keyboard row from <B> to <SPACE>
           !(out & 1)             - any out to port #FE
           (out & 0FF)==0BB && (val==0F3 || val==0F4) - reset General Sound
           (out & 0FF)==0FD && (val&7)==3   - set 3rd memory page
           (FD & 7) == 3                    - the same
           M(pc)==0CB && pc->1 >= 10 && pc->1 <= 17
                - set break on executing instruction "rl <reg>"

       i hope, these samples will be enough to get idea

       note: double-click on breakpoint to edit


monitor: registers window

Cursor          select register
ENTER,0-F       change register
Ctrl+A,F,B,D,H,S,P,X,Y,I,R,M,1,2 edit A,F,BC,DE,HL,SP,PC,IX,IY,I,R,IM,IFF1,IFF2
Alt+S,Z,5,H,3,P,N,C              toggle flag


monitor: CPU window

F4              trace to cursor
Alt-F7          find text
Ctrl-F7         find code with mask
HOME            goto PC
Ctrl-G          goto address
SPACE           set/reset breakpoint under cursor
ENTER           edit Z80 instruction
A-X             assemble new Z80 instruction
Z               set PC to cursor


monitor: memory window

Alt-F7          find text
Ctrl-F7         find code with mask
Cursor,Home,End,PgUp,PgDn        move
Ctrl-G                           goto address
Ctrl-TAB                         move to hex/ascii
Ctrl+S,P,B,D,H,X,Y               goto sp,pc,bc,de,hl,ix,iy
other keys                       edit memory

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

bugs and incompatibilities


   some programs, such as Manic Miner, requires old (1982) 48K ROM;
   you can get it from other emlulators and load it in 'ROM' settings

   some trdos programs (Unreal Megademo by KSA) works only if
   trdos traps disabled

   AY tone generator does not play when tone period is equal to zero

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

greetings goes to:

   * dj.Z, IMP and MIC - i enjoyed your music a lot !
   * Kirill Kolpakov and Hacker KAY (authors of Z80S)
   * Paul Pavlov - maintainer of largest TR-DOS archive
   * Raul Gomez Sanchez (author of R80)
   * Stalker - thanks for STS
   * Extreme, Digital Reality, CBS - for quality demos
   * V_Soft (Roman Scherbakov) - for Vortex format
   * Sergey Bulba - for AY_Emul
   * all ZX-Spectrum fans - Speccy is da best!


special thanks to people, who interested in
UnrealSpeccy' development and sent me info about hard/soft:

   * Maxim Vasilyev - sent me many bugreports
   * Mac Buster - some info about beta 128 disk interface
   * Shiru Otaku - sent me GSPAK.ZIP
   * Vitaliy Pigo - testing and benchmarking
   * and many others, who emailed me congratulations/suggestions/etc


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

contact me

        WWW:    http://tools2k.chat.ru
        e-mail: mail4smt@yahoo.com

        bug reports are welcomed. if you want more features or
        emulating some device, give me *complete* docs

        note: please do not send files greater then 20K in one
        email, send URLs

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