
   
   
                            THE ALE C64 EMULATOR
                                       
   
     _________________________________________________________________
   
   
   

   *******  **        *********            ******       **         ****
  ********* **        *********           *********    **         *****
  **     ** **        **                  **     **   **         **  **
  **     ** **        ********     ***    **         *******    **   **
  ********* **        ********     ***    **        *********  ********
  **     ** **        **                  **     ** **     ** *********
  **     ** ********* *********           ********* *********        **
  **     ** ********* *********            *******    ******         **
                              Version  1.13

   
   
   _(C) Copyright 1992-1996 Andreas Arens, Lutz Sammer and Edgar Trnig_
   _Freely usable and freely distributable_
     _________________________________________________________________
   
   CONTENTS [INLINE]
   
Emulator Documentation

  Description
  
    _ALE C64_ is a Commodore 64 emulator. _ALE C64_ is written in C.
   
   The following ports exist.
     * Linux (elf and a.out) with XFree86 (1.2,1.3 and 2.0)
     * Linux (elf and a.out) with svgalib (1.2,1.3 and 2.0)
     * SCO Unix with VGA console
     * Solaris 2.4 for x86
     * DOS with GO32 (32Bit DPMI code)
       Also runs under Win 3.1/3.11, Win95 and OS/2 in full screen mode.
       
   _ALE C64_ can be copied and used absolute freely, but the copyright on
   the sources remains by the authors.
   
  Installation
     * Linux/Unix
     * DOS
       
    Linux/Unix:
    
      Choose your installation directory
      
    For example: /usr/games.
   
      Unpack the archive
      
    tar vxzf alec64-x.xx-elfbin.tar.gz
   This is the ELF binary archive.
   
   tar vxzf alec64-x.xx-aoutbin.tar.gz
   This is the a.out binary archive.
   
   x.xx is replaced by the version number.
   
      Required shared libraries
      
   I have compiled the binaries with the following shared libraries.
     * Linux X11 ELF
          + libXext.so.6 (tested with 6.0)
          + libX11.so.6 (tested with 6.0)
          + libc.so.5 (tested with 5.2.18)
     * Linux SVGALIB ELF
          + libvga.so.1 (tested with 1.2.10)
          + libc.so.5 (tested with 5.2.18)
     * Linux X11 AOUT
          + libXt.so.6 (tested with 6.0)
          + libX11.so.6 (tested with 6.0)
          + libc.so.4 (tested with 4.7.2)
     * Linux SVGALIB AOUT
          + libvga.so.1 (tested with 1.2.4)
          + libc.so.4 (tested with 4.7.2)
            
      Build rom images
      
    You need the image of the C64 BASIC ROM, C64 KERNEL ROM and C64
   CHARACTER ROM to run the emulator. This images must be in the
   _original_ binary form, exactly 8192 or 4096 bytes long, no extra
   information.
   
   If you don't know how to get this images, read the comp.emulators.cbm
   FAQ. See also: C64-ROM-IMAGES 
   
   cat basic kernel character > romimage.c64
   -or-
   cat original.64b original.64k original.64c > romimage.c64
   
   basic, kernel and character are the names of your ROM images.
   
   If you want to use the fastloader support (real 1541 emulation) you
   also need the 1541 ROM images. This image must be in the _original_
   binary form, exactly 16384 bytes long.
   
   mv yourrom 1541roms.c64
   
   Rename your 1541 ROM image to "1541roms.c64"!
   
      Choose the correct executable
      
   _Note: video-sync versions have been folded into the other
   executables. It can be turned on using the -v commandline option. _
   
   c64-svga-sp
          C64 for svgalib with speaker.
          
   c64-svga-o3
          C64 for svgalib with opl3 support.
          
   c64-svga-dsp
          C64 for svgalib with dsp (sound-blaster) support.
          
   c64-svga-os-sp
          C64 for svgalib with overscan and speaker.
          
   c64-svga-os-o3
          C64 for svgalib with overscan and opl3 support.
          
   c64-svga-os-dsp
          C64 for svgalib with overscan and dsp (sound-blaster) support.
          
   c64-x11-sp
          C64 for X11 8bpp with speaker.
          
   c64-x11-o3
          C64 for X11 8bpp with opl3 support.
          
   c64-x11-dsp
          C64 for X11 8bpp with dsp (sound-blaster) support.
          
   c64-x11-os-sp
          C64 for x11 8bpp with overscan and opl3 support.
          
   c64-x11-os-o3
          C64 for X11 8bpp with overscan and opl3 support.
          
   c64-x11-os-dsp
          C64 for X11 8bpp with overscan and dsp (sound-blaster) support.
          
   c64-x16-sp
          C64 for X11 16bpp with speaker.
          
   c64-x16-o3
          C64 for X11 16bpp with opl3 support.
          
   c64-x16-dsp
          C64 for X11 16bpp with dsp (sound-blaster) support.
          
   c64-x16-os-sp
          C64 for x11 16bpp with overscan and opl3 support.
          
   c64-x16-os-o3
          C64 for X11 16bpp with overscan and opl3 support.
          
   c64-x16-os-dsp
          C64 for X11 16bpp with overscan and dsp (sound-blaster)
          support.
          
   
   
   ln "selected version" c64
   -or-
   ln -s "selected version" c64
   
      Test it
      
    You can now start the emulator with
   
   c64
   
   To exit press _ALT+SysReq (PRINT KEY)_.
   
    DOS:
    
      Choose your installation directory
      
    For example: \games.
   
      Unpack the archive
      
    tar vxzf alec64-x.xx.tar.gz
   or
   unzip ale64xxx.zip
   
   x.xx or xxx is replaced by the version number.
   
      Build rom images
      
    You need the image of the C64 BASIC ROM, C64 KERNEL ROM and C64
   CHARACTER ROM to run the emulator. This images must be in the
   _original_ form, exactly 8192 or 4096 bytes long, no extra
   information.
   
   If you don't know how to get this images, read the comp.emulators.cbm
   FAQ. See also: C64-ROM-IMAGES 
   
   copy /b basic+kernel+character romimage.c64
   -or-
   copy /b original.64b+original.64k+original.64c romimage.c64
   
   basic, kernel and character are the names of your ROM images.
   
   If you want to use the fastloader support (real 1541 emulation) you
   also need the 1541 ROM images. This image must be in the _original_
   binary form, exactly 16384 bytes long.
   
   ren yourrom 1541roms.c64
   
   Rename your 1541 ROM image to "1541roms.c64"!
   
      Choose the correct executable
      
   _Note: video-sync versions have been folded into the other
   executables. It can be turned on using the -v commandline option. _
   
   c64-sp
          C64 version with speaker.
          
   c64-o3
          C64 version with opl3 support.
          
   c64-sb
          C64 version with dsp (sound-blaster) support.
          
   c64-ossp
          C64 version with VESA overscan and speaker.
          
   c64-oso3
          C64 version with VESA overscan and opl3 support.
          
   c64-ossb
          C64 version with VESA overscan and dsp (sound-blaster) support.
          
   
   
   copy "selected version" c64.exe
   
      Test it
      
    You can now start the emulator with
   
   c64
   
   To exit press _ALT+SysReq (PRINT KEY)_.
   -or- To exit press _ALT+CTRL+DEL_. (obsolete)
   
  Command line options
  
   c64 [-1] [-2] [-a name] [-c dir] [-d disk] [-e name] [-f n] [-F n] [-g
   geometry] [-h] [-i roms] [-I roms] [-j] [-k input] [-l lib] [-q] [-r
   N] [-s] [-S] [-t N] [-u N] [-v N] [prgid]
     * -1
       Use keypad as Joystick 1. (Not supported under X11)
     * -2
       Use keypad as Joystick 2. (Not supported under X11)
     * -a pathname
       Load the C64 file 'pathname' automatic at startup.
     * -c path
       Change to the directory 'path' for the emulator.
     * -d pathname
       Use floppy disk image (d64) 'pathname' as diskette.
     * -e pathname
       Load the C64 image 'pathname' as external ROM.
     * -f n
       Change the VIC fetch irq position to 'n'.
     * -F n
       Change the VIC fetch read position to 'n' relative to irq
       position.
     * -g geometry
       Geometry of the X11 window.
     * -h
       Display a short help for command line options.
     * -i pathname
       Use the ROM image 'pathname' as C64 ROMS.
     * -I pathname
       Use the ROM image 'pathname' as 1541 ROMS.
     * -j
       Enable hardware joystick.
     * -k keyboard-input
       Keyboard input for the emulator. Letters, numbers and signs are
       converted to C64 character set. Don't forget to quote it correct!
       ('~' can be used for RET, and '^?' {ascii 127} for F7)
     * -l pathname
       Use library file 'pathname' as database.
     * -q
       Quiet, do no sound emulation.
     * -r n
       Refresh rate, calculate/emulate only 1/n frames.
     * -s
       Slow, means PAL fast-loader support. (You will see, what i mean :)
     * -S
       Slow, means NTSC fast-loader support.
     * -t N
       Timeout for cycle syncron fastloader. (in N/50 s)
     * -u n
       Update rate, display only 1/n frames on X11.
     * -v n
       Video sync the emulator to n% of the original c64. (100 or 0 is
       1:1) _WARNING: This changes the DOS system-clock!!!!!_
       
     * prgid
       Lookup 'prgid' in library database and start it. Use 'list' to
       show the contence of the library database.
       
    Examples
    
    c64 -1
   
   Start c64 and use keypad as joystick 1.
   
  Environment
  
    You can use following environment variables to runtime configure _ALE
   C64_.
   
     * C64LIB
       Use this file 'pathname' as library database.
     * C64IMAGE
       Use this ROM image 'pathname' as C64 ROMS.
     * C64EXROM
       Use this C64 ROM image 'pathname' as external ROM.
     * C64AUTOLOAD
       Load this C64 binary file 'pathname' at startup.
     * C64PRINTCMD
       Use this os program 'pathname' as printer filter. Not valid for
       DOS version.
     * C64DIR
       Use this directory 'pathname' as working directory for C64. All
       releative paths are relative to this directory.
     * R1541IMAGE
       Use this ROM image 'pathname' as 1541 ROMS.
     * C64JOY1
       Joystick port 1 configuration. (up,down,left,right).
       
       Example: C64JOY1=693,1963,692,1952 (Linux), C64JOY1=50,110,50,110
       (DOS).
     * C64JOY1KEY
       C64 key on joystick button 2. matrix_row*8+matrix_column
       
       Example: C64JOY1KEY=60 (SPACE).
     * C64JOY2
       Joystick port 2 configuration. (up,down,left,right).
       
       NOTE: Must be set to support second joystick.
     * C64JOY2KEY
       C64 key on joystick button 2. matrix_row*8+matrix_column
       
       Example: C64JOY2KEY=58 (CTRL).
     * C64TIMEOUT
       Timeout for cycle syncron fastloader. (in N/50 s) This time the
       1541 and C64 are hold cycle syncron. If a longer time no access to
       serial happens, the 1541 emulation skips the emulation of this
       cycles.
       
    Examples
    
   SH (Unix)
   C64DIR=/usr/games/c64
   export C64DIR
   
   CSH (Unix)
   setenv C64DIR /usr/games/c64
   
   Uses the directory '/usr/games/c64' as start for relative paths. c64
   -c psi-5 changes to the directory '/usr/games/c64/psi-5'.
   
   DOS
   set C64DIR=\games\c64
   
   Uses the directory '\usr\games\c64' as start for relative paths. c64
   -c psi-5 changes to the directory '\games\c64\psi-5'.
   
  Keyboard
  
   Keyboard layout used for emulation. I use a layout very simular to the
   original layout.
   
    Picture keyboard layout

    <-  1!  2"  3#  4$  5%  6&  7'  8(  9)  0   +   -   __DEL_
   CTRL   q   w   e   r   t   y   u   i   o   p   q   *   RET_
 RUN STOP  a   s   d   f   g   h   j   k   l   :[  ;]  =   RET
 SHIFT  1  z   x   c   v   b   n   m   ,<  .>  /?  RIGHTSHIFT
 CTRL       C=      |_________SPACE_________|  C=         FIRE

   1 is arrow-up and pi. On 101 keyboards use PAGE-DOWN.
   
   The following keys have a special meaning for _ALE C64_.
   
    Keys used for C64
    
   F1 F2 F3 F4 F5 F6 F7 F8
          The C64 functions keys
          
   Caps-Lock
          RUN/STOP
          
   Left shift
          LEFT SHIFT
          
   Right shift
          RIGHT SHIFT
          
   Left Alt and Right Alt
          C=
          
   Left control and TAB (Right control is no longer C64 CTRL!!)
          CONTROL
          
   Home
          HOME
          
   End
          RESTORE
          
   Delete and Backspace
          DEL
          
   Insert
          SHIFT DEL
          
   Page up
          POUND
          
   Page down
          UP-ARROW and PI
          
   Arrow keys
          The C64 cursor keys
          
    Keys used for the emulator
    
   F9
          Decrements VicFetch the VIC fetch irq position.
          
   SHIFT + F9
          Increments VicFetch the VIC fetch irq position.
          
   F10
          Decrements VicFetchAdd the VIC read position relative to irq
          position.
          
   SHIFT + F10
          Increments VicFetchAdd the VIC read position relative to irq
          position.
          
   F11
          Toggles the sound emulation on/off
          
   F12
          Enters the builtin machine monitor
          
   PRINT
          Toggle autofire on/off
          
   SCROLL-LOCK
          Change update rate ( 1 ->2 ->3 ->4 ->1 )
          
   SHIFT + SCROLL-LOCK
          Change emulation rate ( 1 ->2 ->3 ->4 ->1 )
          
   PAUSE
          Pause the emulator
          
   NUM-LOCK
          Toggles emulation of joystick 1 or 2
          
   Keypad 1 2 3 4 6 7 8 9
          Joystick direction
          
   Keypad 5 and ESC
          Joystick fire (ESC can have Autofire, Keypad-5 never)
          
   Right control
          Joystick fire with autofire
          
   Keypad +
          Change to next disk
          
   Keypad -
          Change to previous disk
          
   Keypad *
          Toggle fastloader ON PAL -> ON NTSC -> OFF.
          
   Alt-Ctrl-Print, SysRequest
          Leave emulator.
          
   Alt-Ctrl-Delete
          Leave emulator. (DOS, now obsolete!)
          
   Ctrl-Pause, Intr.
          Reset emulator.
          
  Joystick
  
   The joysticks of the C64 are emulated with the keyboard or hardware
   joystick.
   
    Hardware Joystick
    
   You can use an analog or digital PC joystick. I suggest a digital only
   PC joystick.
   
      Install (LINUX)
      
   You must have installed the joystick module. (Tested with 0.8.0)
   
   Compile and run util/joycal.c. (Follow the given instructions). Setup
   following environment variable:
   
   C64JOY1=up,down,left,right
   export C64JOY1
   
   Replace up, down, left and right with the values of the program.
   
   You can now enable the joystick support with the commandline option
   -j.
   
      Install (DOS)
      
   Use a program which displays your joystick values.
   
   Setup following environment variable:
   
   set C64JOY1=up,down,left,right
   
   Values below up,left are taken as up,left.
   Values above down,right are taken as down,right.
   
      Use the second button
      
   You can assign a C64-key to the second joystick button. The default is
   SPACE.
   
   C64JOY1KEY=key -or- C64JOY2KEY=key
   
   key is matrix_row*8+matrix_column
   
   
   
   Table 1. Keyboard matrix table

        Column
Row        0     1       2       3       4       5       6       7
0       | DEL | RET | |  | | F7  | | F1  | | F3  | | F5  | | ^v  |
1       |  3  |  W  | |  A  | |  4  | |  Z  | |  S  | |  E  | | SHL |
2       |  5  |  R  | |  D  | |  6  | |  C  | |  F  | |  T  | |  X  |
3       |  7  |  Y  | |  G  | |  8  | |  B  | |  H  | |  U  | |  V  |
4       |  9  |  I  | |  J  | |  0  | |  M  | |  K  | |  O  | |  N  |
5       |  +  |  P  | |  L  | |  -  | |  .  | |  :  | |  @  | |  ,  |
6       | PFN |  *  | |  ;  | | HOM | | SHR | |  =  | |  ^  | |  /  |
7       |  1  |

    If you want SPACE the value is 60. (row=7,column=4, 7*8+4 -> 60)


    if you want CTRL the value is 58. (row=7,column=2, 7*8+2 -> 58)



      Notes:
          The shown messages "Joystick 1" and "Joystick 2" always mean the
      keyboard.
      
    Keyboard
    
     * ESC (Escape)
       Joystick fire (repeated with AUTOFIRE).
     * Right Control
       Joystick fire (repeated with AUTOFIRE).
     * Keypad 1
       Joystick down and left.
     * Keypad 2
       Joystick down.
     * Keypad 3
       Joystick down and right.
     * Keypad 4
       Joystick left.
     * Keypad 5
       Joystick fire (_not_ repeated with AUTOFIRE).
     * Keypad 6
       Joystick right.
     * Keypad 7
       Joystick up and left.
     * Keypad 8
       Joystick up.
     * Keypad 9
       Joystick up and right.




    You can control the joystick emulation with:
     * Num-lock
       Toggles joystick 1 or 2 emulation.
     * PRINT
       Toggles autofire on or off (PAL: 25Hz or NTSC: 30Hz).
     * Commandline: -1
       Keypad emulates joystick port 1. (not under X11)
     * Commandline: -2
       Keypad emulates joystick port 2. (not under X11)
     * Commandline: -j
       Enable support for hardware joysticks.




    Note:
        Under X11 the joystick emulations depends of the num-lock state.





  CPU MOS 6510
      The opcodes counts cycles and all hardware timings are calculate at this
      base.
  
    Supported features
     * All opcodes are supported
     * All addressing modes
     * Peripheral port at $0/$1
     * All illegal opcodes
     * Memory wrap
     * ($FF),Y and ($FF,X) bug
     * jmp ($xxFF) bug
     * Read-Modify-Write bug: write first unmodified data, then modified
     * Correct cycles for branches page boundary crossing
   
    Missing features
     * Some features of the decimal mode.
     * Test illegal 6510 opcodes (I didn't know, if all are correct
       emulated)
     * Correct cycles for page boundary crossing (AX, AY, IY)
     * Bug of 6510: Illegal read of indexed addressing
   
    Extensions to 6510
    
        We have extended the 6510 instruction set with emulator traps.
        We need them to emulate the IEC serial routines.




    You can use the emulator traps $09 - $11 to patch fastloader.
    Look at my example for 7 cities of gold.

     * EMU #00 ($02 $00)
       Exit emulator.
     * EMU #01 ($02 $01)
       Kernal patch: IEC TALK.
     * EMU #02 ($02 $02)
       Kernal patch: IEC SECTALK.
     * EMU #03 ($02 $03)
       Kernal patch: IEC UNTALK.
     * EMU #04 ($02 $04)
       Kernal patch: IEC READ.
     * EMU #05 ($02 $05)
       Kernal patch: IEC LISTEN.
     * EMU #06 ($02 $06)
       Kernal patch: IEC SECLISTEN.
     * EMU #07 ($02 $07)
       Kernal patch: IEC UNLISTEN.
     * EMU #08 ($02 $08)
       Kernal patch: IEC WRITE.
     * EMU #09 ($02 $09)
       IEC TALK: Serial send ACCU with talk. (without $40)
     * EMU #0A ($02 $0A)
       IEC SECTALK:Serial send ACCU with sec. talk.
     * EMU #0B ($02 $0B)
       IEC UNTALK: Serial send untalk.
     * EMU #0C ($02 $0C)
       IEC READ: Read a byte from serial into ACCU.
     * EMU #0D ($02 $0D)
       IEC LISTEN: Serial send ACCU with serial. (without $20)
     * EMU #0E ($02 $0E)
       IEC SECLISTEN:Serial send ACCU with sec. listen.
     * EMU #0F ($02 $0F)
       IEC UNLISTEN:Serial send unlisten.
     * EMU #10 ($02 $10)
       IEC WRITE: Serial send ACCU.
     * EMU #11 ($02 $11)
       IEC STATUS: Fetch serial status. (EOF...)
   
   
  SID MOS 6581 or 8580
      We support emulations of the SID for 3 different hardwares.
  
     * PC Speaker
     * DSP 8bit sampled data
     * OPL2/OPL3 FM synth chip
       
   
    PC Speaker
        This was very easy to implemented and makes a good sound. In each
        vertical retrace the SID emulation is called, 50 or 60 times per
    second.
        Each frame a different voice is emulated.
    
    


LINUX: I need I/O privileges to use the speaker.

    (ALE C64 must be run as root or must have suid root rights!)

      Disadvantage
          No exact emulation.
      
    DSP 8bit sampled data
        The SID sound is sampled with 22050 Hz and played using '/dev/dsp'
    under
        Linux or by direct hardware programming under DOS.
        This gives you an exact emulation of the SID.
    
      Supported features
     * All waveforms:
          + Triangle
          + Sawtooth
          + Pulse
          + Noise
     * Combine of waveforms.
     * Pulse width.
     * Envelopes (Attack, Decay, Sustain, Release).
     * Main volume.
     * Digital samples through D41C.
     * Synchronize of voices. (SYNC-bit)
     * Ring modulation. (RING-bit)
   
      Missing features
     * Filters. (I know how to build digital filter, but haven't the time
       to write it.)
     * Lockup of noise.
   
      Disadvantage
          If you have a slow computer, you hear clicks. (Use SCROLL-LOCK or
          SHIFT-SCROLL-LOCK to speedup emulation)
      
    OPL2/OPL3 FM synth chip
        I convert the writes to the SID register to writes to opl2/opl3.




    Does anybody know how to do the puls-width-modulation with an opl3?
    (mail to johns98@gmx.net)



LINUX: I need I/O privileges to use the opl3 chip.

    (ALE C64 must be run as root or must have suid root rights!)

      Supported features
     * All waveforms. (Only with OPL3)
          + Triangle
          + Sawtooth
          + Pulse (Only pulse width of 50%)
          + Noise
     * Envelopes (Attack, Decay, Sustain, Release)
     * Main volume.
     * Digital samples through D41C.
   
      Missing features
     * Synchronize of voices. _Need better docs, how I can do this with
       OPL_
     * Ring modulation. _Need better docs, how I can do this with OPL_
     * Filters.
     * Lockup of noise.
     * Correct pulse width.
     * Combine of waveforms.
   
      Disadvantage
     * The timings (Attack,...) and envelops are not exact emulated.
     * Bad output of sampled data.
   
   
    Control the SID emulation
    
     * Commandline: -q
       Turns sound emulation off.
     * Keyboard: F11
       Toggles sound emulation on/off.
   
   
  VIC II MOS 6567 (NTSC) or 6569 (PAL)
      The VIC is implemented on a rasterline basis. This means every 63-65
      cycles the 6510 emulation is stopped and a display line is drawn.
  
    Supported features
     * All video modes
          + Normal text mode
          + Multicolor text mode
          + Extended color text mode
          + Normal bitmap mode
          + Multicolor bitmap mode
          + Illegal modes
            Gives a black display.
     * Complete sprite emulation
          + Normal sprites
          + Multicolor sprites
          + X and Y size doubling
          + Sprite-Sprite and Sprite-Background collision and interrupts
          + Sprite priority
          + Multiplexed sprites
     * 38 or 40 columns mode
     * 24 or 25 lines mode
     * Splitscreens
     * Raster interrupts
     * Open vertical borders
     * 26 text line mode
     * Blank mode
     * X and Y smooth scroll register
     * Cycle stealing for bad-lines and sprites
     * Idle state (VIC displays the contents of $3FFF of the current
       video bank)
     * FLD (flexible line distance)
     * FLI (flexible line interpretation)
     * Linecrunch
     * Dynamic X scrolling (creature 1 uses it)
   
    Missing features
     * No sprite collision, if sprite isn't visibile.
     * Cycle stealing, if sprites not visibile.
     * 100% correct cycle stealing (BA ignores writes).
     * In line modifications.
     * The correct line fetch position.
     * Sprite stretching.
     * Sprites in the left or right border.
   
    Internals of VIC emulation
    
      video-sync
          The
_ALE C64_ Emulator runs with a virtual cpu clock, all hardware
    timings depends on the virtual cpu clock. If you have a fast computer
    (486DX4/100 or better) the emulator is way to fast. To reduce it to
    the original speed, I use video-sync. This means each video frame
    is syncronised to 1/50s (PAL) or 1/60s (NTSC).

    (Note: If you use the DSP sid emulation this is done by the sound driver!)

      vic-fetch
          The original c64 displays a video line over a long time (63-64us) one
          pixel after the other. The emulator displays the complete line at a
          specified cycle. I call this position vic-fetch. vic-fetch
          are the cycles from the raster-line-irq to the emulator display.
      
      vic-fetch-add
          vic-fetch-add are the cycles from the raster-line-irq to the change
          of the VIC rasterline register.
      
    Control of the VIC emulation
    
     * Commandline: -f n
       Change the VIC fetch irq position to 'n'.
     * Commandline: -F n
       Change the VIC fetch read position to 'n' relative to irq
       position.
     * Commandline: -v n
       Video sync the emulator to n% of the original c64. (100 or 0 is
       1:1)
     * Commandline: -r n
       Refresh rate, calculate/emulate only 1/n frames.
     * Commandline: -u n
       Update rate, display only 1/n frames under X11.
     * Keyboard: F9
       Decrements the VIC fetch irq position.
     * Keyboard: SHIFT + F9
       Increments the VIC fetch irq position.
     * Keyboard: F10
       Decrements the VIC fetch read position relative to irq position.
     * Keyboard: SHIFT + F10
       Increments the VIC fetch read position relative to irq position.
     * Keyboard: SCROLL-LOCK
       Change update rate ( 1 ->2 ->3 ->4 ->1 )
     * Keyboard: SHIFT + SCROLL-LOCK
       Change calculation/emulation rate ( 1 ->2 ->3 ->4 ->1 )
   
  Floppy Emulation
      The Floppy supports both filesystem and disk image emulation. The
      filesystem emulation supports both raw binary data and P00 format files.




    Since c64 file names can include characters that are illegal on most
    filesystem, and that can be longer then the DOS 8.3 format, the P00 format
    is prefered for the filesystem emulation. Directories in the filesystem
    appear as a file of type DIR in the directory emulation, files too large
    to fit into to 16 bit block size appear as a file of type BIG with a size
    of 0. The filesystem supports a mixed mode. Both raw binary data and P00
    files can reside in the same directory and will be autodected and used
    correctly according to their format. The filesystem emulation by default
    creates new files in P00 format.



    Many games can be converted to raw binary (LINUX) or P00 format. I use
    64copy to do this. (You can use 64copy with dosemu under LINUX)



    You can change the directory or image for the 1541 emulation with
     * 1541 command "G:directory", or "G:..", etc.
     * Commandline: -c directory
     * Monitor: w directory
     * Keyboard: KEYPAD +, increment last number of disk image.
     * Keyboard: KEYPAD -, decrement last number of disk image.
       The 1541 command "G:" can also be used to 'mount' disk images. If
       the
       selected directory in fact is a disk image (D64 file), the
       emulation is
       switched from filesystem to disk image mode. You can also do so
       from the
       monitor using the 'w' command or the '-c' commandline option. To
       'unmount'
       you of course can use the "G:" command (1541) or 'w' command
       (monitor) again
       by changing to another directory or disk image (i.e. "G:." for the
       current
       directory).



    Note: If you have to switch disks (disk images in fact) within a game, you
    of course cannot use the "G:" command over the 1541 command channel, but yo
u
    can still use the F12 to enter the monitor, switch images using the 'w'
    command, and then continue the game with the 'c' command.



    1541 hardware emulation for fastloaders
        For fastloaders a complete 1541 hardware emulation is needed. This
    means
        the 6502 cpu, ports and serial lines.




    I have just started the fastloader support, currently only 70% of the
    fastloaders may work.



    My 1541 emulation only need processor time while loading.



    Most games the first part could be loaded without fastloader. Than
    turn it on with KEYPAD *.

      Supported features
     * Works with PAL and NTSC fastloaders.
     * Full 6502 emulation.
     * All Jobs.
     * Lowlevel moving head.
     * Lowlevel GCR read.
     * 99% cycle aligned 1541 <-%gt; C64.
   
      Missing features
     * GCR write. (formating, and low-level writes)
     * Write protect.
     * Exact timers.
     * Memory mirrors. (need docs!)
   
      Note
          I didn't use a syncron 1541 emulation (every n c64 cylces, m 1541
      cylces
          are calculated



    I use an asyncron 1541 emulation, if the c64 accesses the serial line
    the 1541 emulation calculates the missing cycles. If a longer time no
    access happends, this recalculation is skipped. (If you play 10 minutes,
    you don't want to wait minutes until the 1541 emulation has calculated the
    missing cycles.) You can control this timeout with the variable
    C64TIMEOUT.

  Extensions
      Extensions to the normal C64 hardware.
  
    ALE-RAM
        We have build into our C64 1K of additional RAM.
    
     * 512 bytes at $D200-$D3FF.
     * 512 bytes at $D600-$D7FF.
   
       Some programs use the mirrored registers of the VIC ($D000-$3FFF)
       or
       SID ($D400-$D7FF) to fool the people.




    You can disable this extensions with:
     * Commandline: -x
   
   
  Monitor
  
_ALE C64_ has a built in machine language monitor.
    You can disassemble, display and modify the C64 memory.



    You can enter the builtin monitor with 'F12'.



    This are the builtin commands.
     * ?
       Show all monitor commands.
     * @
       Show 1541 status.
     * a [from] [to]
       Ascii dump.
     * b [addr]
       Set breakpoint to "addr". Or show current breakpoint.
     * B
       Unset breakpoint.
     * c [break]
       Continue with emulation. (Optional breakpoint)
     * C [break]
       Continue with emulation without display. (Optional breakpoint)
     * d [from] [to]
       Disassemble.
     * D [from] [to]
       Disassemble 1541 memory.
     * e addr n1 [n2 ... nn]
       Edit memory.
     * f [from] [to] [with]
       Fill memory.
     * g [pc]. Go to emulation mode with pc.
     * m [from] [to]
       Memory dump.
     * M [from] [to]
       Memory dump of 1541 memory.
     * r
       Register dump of the 6510.
     * R
       Register dump of the 1541 6502 registers.
     * w [directory_or_image]
       Change working directory or disk image of the 1541 emulation. Or
       show current working directory or disk image.
     * X
       eXit _ALE C64_ emulator.
     * FIXME: more to document.
   
   
_


    Don't wonder with breakpoints enabled the emulator is 1/2 to 1/3 slower !!


_


  Utilties
      I have written some utilities to make the life easier.
  
    bin2p00
        Converts ALE C64 binary format to p00 format.
    
    
  Files
      This are the files used by the emulator.
  
   /etc/default/c64 -or- alec64rc
          The _ALE C64_ default settings.
          
   1541roms.c64
          Combined ROM images of the 1541.
          
   autoload.c64
          C64 file loaded automatically at start of the emulator.
          
   external.c64
          The external cartridge ROM image.
          
   lib.c64
          The C64 program library base.
          
   romimage.c64
          Combined ROM images of the C64.
          
   snapshot.c64
          Snapshot image.
          
   dirfile.c64
          Contains mapping of operating system file names to C64.
   
   
  File formats
  
    /etc/default/c64 The ALE C64 default settings
    
    Is a ascii file, which contains the default settings for the emulator.
    



        Or you can use the file alec64rc in C64DIR.
        


        
        Each line has an entry:


        VARIABLE=VALUE



   VARIABLE
          The same names as for the environment variables.
          
   VALUE
          The same values as for the environment variables.
   
      Examples
      

    #
    # /etc/default/c64
    #

    # C64DIR should be absolute
    C64DIR=/usr/local/games/lib/c64

    # All others may be relative to C64DIR
    C64IMAGE=romimage.c64
    C64AUTOLOAD=prgs/util/mon$c
    C64LIB=lib.c64

    #C64PRINTCMD=lp -s -R %s


    1541roms.c64 1541 ROM Images
    
    
    8192 Bytes Floppy ROM $C000-$DFFF


        8192 Bytes Floppy ROM $E000-$FFFF


    romimage.c64 C64 ROM Images
    
    
    8192 Bytes Basic ROM $A000-$BFFF


        8192 Bytes Kernel ROM $E000-$FFFF

        4096 Bytes Character ROM $C000-$DFFF


    lib.c64 The ALE program library base
    
    
    This is an ascii library database for easy access of C64
    
    programs.




        Each line has 3 entries:


                program-id      directory       command

        Separate the fields with tabs.



   program-id
          Name of the program for commandline
          
   directory
          Directory to enter before the start of game (relative to
          C64DIR)
          Could also be a disk-image.
          
   command
          C64 commands (keyboard input) to start the game. Letters,
          numbers and signs are converted to C64 character set. ('~' can
          be used for RET, and '^?' for F7)
   
      Examples
      

    # My games
    # program-id        directory               command to start it
    BlueMax             games/synapse           load"blue max",8,1~run~
    SuperSprint         tested/super_sprint     load"loader",8,1~run~^?b


        You can now start the games with:

        c64 BlueMax

        or

        c64 SuperSprint



        or even shorter:

        Rename c64 or c64.exe to the program-id.

    dirfile.c64 Filename conversion (obsolete)
    
    
    os-name
    type "c64-name"




   os-name
          Is the operating system filename. (for DOS 8 character + 3
          extension)
          
   type
          Is the C64 type of the file ( prg, seq, usr or del ).
          
   "c64-name"
          Is the C64 file name enclosed in double quotes.
   
      Examples
      

        # Disk 2001
        sprites         prg             "sprites"
        name.c64        prg             "a name with space"



    ALE binary CBM files
    
    
    ALE C64 uses the standard CBM program files containing load
    
    address in the first two bytes.



        
        Attributes are used to support the different C64 file types.



   READ-ONLY
          "set UID bit (UNIX)
          "SEQ" 1541 sequential file.
          
   set GID bit (UNIX)
          "USR" 1541 user file.
          
   set UID bit and set GID bit (UNIX)
          "REL" 1541 relative file. (not supported, reserved)
          
   no read bits and no write bits
          "DEL" 1541 deleted file.
   
   
    *.p00, *.s00, *.u00, *.d00, *.r00 Encapsulate C64 File Images.
    
    
    These are C64 files prepended with a binary header to encapsulate
    
    the file name so that it can be used on all filesystems.
    
      Filename convention
      
   *.p00
          PRG program data file
          
   *.s00
          SEQ sequential data file
          
   *.u00
          USR user data file
          
   *.d00
          DEL deleted data file
          
   *.r00
          REL relative data file (Not supported by _ALE C64_)
          




        00 can be any number, used to prevent the 16 to 8 name conversion
        from generating duplicates.

        * can be an up to 8 characters long filename, with the characters
        in the range 64 to 95 ('@' - '_') and 48 to 57 ('0' - '9'.



      Header format

    Offset      Bytes   Description
    ------      -----   -----------------------------------
     0          8       String "C64File" terminated by 00.
     8          17      Original C64 Filename (in C64 character set).
    25          1       Record size for REL files.
    26          varies  Original file image with load address.


      *.d64 Raw 1541 disk Images.
      
   This files contains all sectors as they appear on a standard 1541
   formatted disk. Each sector is 256 bytes long. Error information (1
   byte per sector can be added at the end of the file.
   
        File types supported
     * 174848 Bytes: 35 Tracks 683 Sectors
     * 175531 Bytes: 35 Tracks 683 Sectors with error information
     * 196608 Bytes: 40 Tracks 768 Sectors
     * 197376 Bytes: 40 Tracks 768 Sectors with error information
     * 205312 Bytes: 42 Tracks 802 Sectors
     * 206114 Bytes: 42 Tracks 802 Sectors with error information
       
        Track and Block Format

    +--------------+-------------+-------------+
    | TRACK NUMBER | BLOCK RANGE | TOTAL BLOCK |
    +--------------+-------------+-------------+
    |    1 to 17   |   0 to 20   |      21     |
    |   18 to 24   |   0 to 18   |      19     |
    |   25 to 30   |   0 to 17   |      18     |
    |   31 to 35   |   0 to 16   |      17     |
    |   36 to 42 * |   0 to 16   |      17     |
    +--------------+-------------+-------------+

   * Tracks 36 to 42 are non standard.
   
        Error codes for error information

    CODE    MEANING                         DOS ERROR MESSAGE
    $01     Everything OK                   00, OK
    $02     Header block not found          20, READ ERROR
    $03     SYNC not found                  21, READ ERROR
    $04     Data block not found            22, READ ERROR
    $05     Checksum error in data block    23, READ ERROR
    $07     Verify error                    25, WRITE ERROR
    $08     Disk write protected            26, WRITE PROTECT ON
    $09     Checksum error in header block  27, READ ERROR
    $0B     Id mismatch                     29, DISK ID MISMATCH
    $0F     Disk not inserted               74, DRIVE NOT READY

   Error codes 06 and 0A do not occur on the 1541.
   
Original C64 Documentation

  CPU MOS 6510
  
  VIC II MOS 6567 (NTSC) or 6569 (PAL)
  
   
   
   Table 1. VIC Register Map

  SID MOS 6581 or 8580
  
    SID CONTROL REGISTERS
    
   There are 29 eight-bit registers in SID which control the generation
   of sound. These registers are either WRITE-only or READ-only and are
   listed below in Table 1.
   
   Table 1. SID Register Map

        REG #   DATA                                           REG NAME TYPE
        (Hex)   d7    d6    d5    d4    d3    d2    d1    d0
        - --------------------------------------------------------------------

        Voice 1:
        00     F7    F6    F5    F4    F3    F2    F1    F0    FREQ LO  Write
        01     F15   F14   F13   F12   F11   F10   F9    F8    FREQ HI  Write
        02     PW7   PW6   PW5   PW4   PW3   PW2   PW1   PW0   PW LO    Write
        03     -     -     -     -     PW11  PW10  PW9   PW8   PW HI    Write
        04     NSE   PUL   SAW   TRI   TEST  RING  SYNC  GATE  CONTROL  Write
        05     ATK3  ATK2  ATK1  ATK0  DCY3  DCY2  DCY1  DCY0  ATK/DCY  Write
        06     STN3  STN2  STN1  STN0  RLS3  RLS2  RLS1  RLS0  STN/RLS  Write

        Voice 2:
        07     F7    F6    F5    F4    F3    F2    F1    F0    FREQ LO  Write
        08     F15   F14   F13   F12   F11   F10   F9    F8    FREQ HI  Write
        09     PW7   PW6   PW5   PW4   PW3   PW2   PW1   PW0   PW LO    Write
        0A     -     -     -     -     PW11  PW10  PW9   PW8   PW HI    Write
        0B     NSE   PUL   SAW   TRI   TEST  RING  SYNC  GATE  CONTROL  Write
        0C     ATK3  ATK2  ATK1  ATK0  DCY3  DCY2  DCY1  DCY0  ATK/DCY  Write
        0D     STN3  STN2  STN1  STN0  RLS3  RLS2  RLS1  RLS0  STN/RLS  Write

        Voice 3:
        0E     F7    F6    F5    F4    F3    F2    F1    F0    FREQ LO  Write
        0F     F15   F14   F13   F12   F11   F10   F9    F8    FREQ HI  Write
        10     PW7   PW6   PW5   PW4   PW3   PW2   PW1   PW0   PW LO    Write
        11     -     -     -     -     PW11  PW10  PW9   PW8   PW HI    Write
        12     NSE   PUL   SAW   TRI   TEST  RING  SYNC  GATE  CONTROL  Write
        13     ATK3  ATK2  ATK1  ATK0  DCY3  DCY2  DCY1  DCY0  ATK/DCY  Write
        14     STN3  STN2  STN1  STN0  RLS3  RLS2  RLS1  RLS0  STN/RLS  Write

        Filter:
        15     -     -     -     -     -     FC2   FC1   FC0   FC LO    Write
        16     FC10  FC9   FC8   FC7   FC6   FC5   FC4   FC3   FC HI    Write
        17     RES3  RES2  RES1  RES0  FILEX FILT3 FILT2 FILT1 RES/FILT Write
        18     3 OFF HP    BP    LP    VOL3  VOL2  VOL1  VOL0  MODE/VOL Write

        Misc.:
        19     PX7   PX6   PX5   PX4   PX3   PX2   PX1   PX0   POT X    Read
        1A     PY7   PY6   PY5   PY4   PY3   PY2   PY1   PY0   POT Y    Read
        1B     O7    O6    O5    O4    O3    O2    O1    O0    OSC3/RND Read
        1C     E7    E6    E5    E4    E3    E2    E1    E0    ENV3     Read

   
   
   Table 2. SID Envelope Rates

        VALUE   ATTACK RATE     DECAY/RELEASE RATE
                Time/Cycle      Time/Cycle
        - ------------------------------------------
         0        2 ms            6 ms
         1        8 ms           24 ms
         2       16 ms           48 ms
         3       24 ms           72 ms
         4       38 ms          114 ms
         5       56 ms          168 ms
         6       68 ms          204 ms
         7       80 ms          240 ms
         8      100 ms          300 ms
         9      240 ms          750 ms
        10      500 ms          1.5 s
        11      800 ms          2.4 s
        12        1 s             3 s
        13        3 s             9 s
        14        5 s            15 s
        15        8 s            24 s

   NOTE: Envelope rates are based on a 1.0 MHz 2 clock. For other 2
   frequencies, multiply the given rate by 1 MHz/2. The rates refer to
   the amount of time per cycle. For example, given an ATTACK value of 2,
   the ATTACK cycle would take 16 ms to rise from zero to peak amplitude.
   The DECAY/RELEASE rates refer to the amount of time theses cycles
   would take to fall from peak amplitude to zero.
   
   Picture 3. 6581 Envelope

                  /|\                          - Reg 18: 0-3
                /  |  \                        ^         Max. volume level
              /    |    \_____________         | - Reg 06,0D,14: 4-7
            /      |     |            |\       | ^               Sustain level
          /        |     |            |  \     v v
        -|---------|-----|------------|---|--  --- 0
         |         |     |            |   |
         |<------->|<--->|            |<->|
              |       | Decay           | Release
              | Attack

      Register description
      
        Voice 1
        
   FREQ LO/FREQ HI (Registers 00,01)
          Together these registers form a 16-bit number which linearly
          controls the frequency of oscillator 1. The frequency is
          determined by the following equation:
          
          Fout = (Fn * Fclk / 16777216) Hz
          
          Where Fn is the 16-bit number in the frequency registers and
          Fclk is the system clock applied to the 2 input (pin 6).
          For a standard PAL 0.985 MHz clock, the frequency is given by:
          
          Fout = (Fn * 0.058725357) Hz
          
          For a standard NTSC 1.023 MHz clock, the frequency is given by:
          
          Fout = (Fn * 0.060959279) Hz
          
          It should be noted that the frequency resolution of SID is
          sufficient for any tuning scale and allows sweeping from note
          to note (portamento) with no dicernable frequency steps.
          
   PW LO/PW HI (Registers 02,03)
          Together these registers form a 12-bit number (bits 4-7 of
          PW HI are not used) which linearly controls the pulse width
          (duty cycle) of the pulse waveform on Oscillator 1. The pulse
          width is determined by the following equation:
          
          PWout = (PWn/40.95) %
          
          Where PWn is the 12-bit number in the Pulse Width registers.
          The pulse width resolution allows the width to be smoothly
          swept with no discernable stepping. Note that the pulse
          waveform on Oscillator 1 must be selected in order for the
          pulse width registers to have any audible effect. A value of 0
          or 4095 ($FFF) in the pulse width registers will produce a
          constant DC output, while a value of 2048 ($800) will produce a
          square wave.
          
          *********** FIXME: What is correct ***********
          
          [A value of 4095 will not produce a constant DC output].
          
   CONTROL REGISTER (Register 04)
          This register contains eight control bits which select various
          options on Oscillator 1.
          
          + GATE (Bit 0):
            The GATE bit controls the envelope generator for voice 1.
            When this bit is set to one, the envelope generator is gated
            (triggered) and the ATTACK/DECAY/SUSTAIN cycle is initiated.
            When the bit is reset to zero, the RELEASE cycle begins. The
            envelope generator controls the amplitude of Oscillator 1
            appearing at the audio output, therefore, the GATE bit must
            be set (along with suitable envelope parameters) for the
            selceted output of oscillator 1 to be audible.
          + SYNC (Bit 1):
            The SYNC bit, when set to one, synchronizes the fundamental
            frequency of oscillator 1 with the fundamental frequency of
            oscillator 3, producing "Hard Sync" effects. Varying the
            frequency of oscillator 1 with respect to oscillator 3
            produces a wide range of complex harmonic structures from
            voice 1 at the frequency of oscillator 3. In order for sync
            to occur, oscillator 3 must be set to some frequency other
            than zero but preferable lower than the frequency of
            oscillator 1. No other parameters of voice 3 have any effect
            on sync.
            
            [NOTE: by Chuck Martin
            For an explanation of SYNC, I'll use the sawtooth waveforms
            as an example. The way the sawtooth waveform is produced is
            by having a digital counter that begins at zero and counts up
            by ones. When it reaches the maximum value (65535 in a 16 bit
            DAC), it returns to zero and starts over. The way SYNC works
            is that if both OSC 1 and OSC 3 are putting out a sawtooth
            wave, but at two different frequencies, whenever OSC 3 resets
            to zero, OSC 1 also resets to zero, even if it hasn't reached
            its maximum value yet. If OSC 3 is set at a higher frequency
            than OSC 1, OSC 1 gets reset prematurely, so both oscillators
            end up running at the same frequency. OSC 1 will be at a
            lower amplitude, however, since it never gets a chance to get
            to its maximum value. This isn't very useful. If OSC 3 is set
            at a lower frequency, however, you get an interesting effect
            because if they start out at zero at the same time, OSC 1
            will reach maximum first, reset to zero, and then start over.
            When OSC 3 reaches maximum, it resets to zero and starts
            over, but OSC 1 also resets to zero at the same time. The
            result is that OSC 1 has alternating large and small teeth.
            The lower OSC 3 is set, the larger the small tooth of OSC 1
            becomes until OSC 3 reaches half the frequency of OSC 1 (one
            octave lower), at which time OSC 1 again has all teeth the
            same size. If you continue to lower the frequency of OSC 3,
            OSC 1 will then have two large teeth followed by one small
            tooth, and so on. Applying this same process to the pulse
            wave produces alternating wide and narrow pulses. ]
            
          + RING MOD (Bit 2):
            The RING MOD bit, when set to a one, replaces the triangle
            waveform of output of oscillator 1 with a "Ring Modulated"
            combination of oscillators 1 and 3. Varying the frequency of
            oscillator 1 with respect to oscillator 3 produces a wide
            range of non-harmonic overtone structures for creating bell
            or gong sounds and for special effects. In order for ring
            modulation to be audible, the triangle waveform of oscillator
            1 must be selected and oscillator 3 must be set to some
            frequency other than zero. No other parameters of voice 3
            have any effect on ring modulation.
            
            [NOTE: (by Chuck Martin)
            A low cost form of ring modulation used in some analog
            synthesizers was to run two square wave oscillators through a
            digital exclusive or (XOR) gate. This is not true ring
            modulation, but it has the same effect. The way the SID chip
            most likely does this is to do a bitwise XOR on the digital
            inputs of the DAC rather than on the square wave output
            itself. It would do the same thing. Unlike the SYNC effect,
            this will only work with square waves.
            
            [NOTE: (by Lutz Sammer) This is how I have implemented the
            RING MODULATION. ]]
            
          + TEST (Bit 3):
            The TEST bit, when set to one, resets and locks oscillator 1
            at zero until the TEST bit is cleared. The noise waveform
            output of oscillator 1 is also reset and the pulse waveform
            output is held at a DC level. Normally this bit is used for
            testing purposes, however, it can be used to synchronize
            oscillator 1 to external events, allowing the generation of
            highly complex waveforms under real-time software control.
          + TRI (Bit 4):
            When set to a one, the triangle waveform output of oscillator
            1 is selected. The triangle waveform is low in harmonics and
            has a mellow, flute-like quality.
          + SAW (Bit 5):
            When set to one, the sawtooth waveform output of oscillator 1
            is selected. The sawtooth waveform is rich in even and odd
            harmonics and has a bright, brassy quality.
          + PULSE (Bit 6):
            When set to one, the pulse waveform output of oscillator 1 is
            selected. The harmonic content of this waveform can be
            adjusted by the pulse width registers, producing tone
            qualities ranging from a bright, hollow square wave to a
            reedy pulse. Sweeping the pulse width in real-time produces a
            dynamic "phasing" effect which adds a sense of motion to the
            sound. Rapidly jumping between different pulse widths can
            produce interesting harmonic sequences.
          + NOISE (bit 7):
            When set to one, the noise output waveform of oscillator 1 is
            selected. This output is a random signal which changes at the
            frequency of oscillator 1. The sound quality can be varied
            from a low rumbling to hissing white noise via the oscillator
            frequency registers. Noise is useful in creating explosions,
            gunshots, jet engines, wind, surf and other unpitched sounds,
            as well as snare drums and cymbals. Sweeping the oscillator
            frequency with noise selected produces a dramatic rushing
            effect.
            
            [The Noise output is not "true" random, as it is based on a
            23 bit internal register].
            
   
          
          One of the output waveforms must be selected for oscillator 1
          to be audible, however it is NOT nescessary to de-select
          waveforms to silence the output of voice 1. The amplitude of
          voice 1 at the final output is a function of the envelope
          generator only.
          
          NOTE:
          The oscillator output waveforms are NOT additive. If more than
          one output waveform is selected simultaneously, the result will
          be a logical ANDing of the waveforms.
          
          [Transcriber's note: This is most probably wrong. Some claim
          that it is the "min" function that is used, but my experience
          is that it is more complex than that].
          
          Although this technique can be used to generate additional
          waveforms beyond the four listed above, it must be used with
          care. If any other waveform is selected while noise is on, the
          noise output can "lock up". If this occurs, the noise output
          will remain silent until reset by the TEST bit or by bringing
          RES (pin 5) low.
          
TODO

   The following things should be done.
     * Videosync under DOS should change the system clock!!
     * Soundblaster 2 support for DOS.
     * Cleanup of sources.
     * Write more documentation.
     * Use xresources for color configuration.
     * Support the paddles and joystick under X11 with mouse.
     * Variable autofire speed.
     * Screen shot.
     * Record of c64 sound.
     * Snapshot of emulation.
     * Left and right open borders.
     * Rewrite sprite routines for more speed.
     * DOS Overscan support needs rewrite for more speed.
     * SVGALIB and DOS version needs support for blitter and linear frame
       buffer.
     * Write own video mode for overscan, 400x300.
     * Enhance 1541 emulation.
     * GCR-write support for 1541 emulation.
     * Automatic fastloader detection (What should be done, if
       detected?).
     * Nice user interface (How multi platform?).
     * Combine all sound drivers into one executable.
     * More speed, more user friendly. (Suggestions)
       
Other informations

  News groups
  
    For information, questions and help you can look into following news
   groups:
     * comp.sys.cbm 
     * comp.emulators.cbm 
     * comp.emulators.misc 
       
  FAQs
  
    This is the FAQ for _ALE C64_: alec64.faq
   
   For more information read the following FAQs.
     * comp.sys.cbm Commodore FTP sites list.
     * comp.sys.cbm General FAQ.
     * comp.emulators.cbm FAQ.
     * comp.emulators.misc FAQ.
       
C64-ROM-IMAGES 

   Information to get original C64 ROM Images.
   
     * ftp.funet.fi
       
        c64-basic.901226-01
                Commodore 64 BASIC V2. The first and only revision.
                
        c64-kernal.901227-01
                Commodore 64 KERNAL ROM Revision 1. The RS-232 timing
                table is designed for exactly 1 MHz system clock
                frequency, although no C64 runs at that clock rate.
                Ripped from a very old American C64.
                
        c64-kernal.901227-02
                Commodore 64 KERNAL ROM Revision 2. Can be found on 1982
                and 1983 models.
                
        c64-kernal.901227-03
                Commodore 64 KERNAL ROM Revision 3. The last revision,
                also used in the C128's C64 mode.
                
        c64-kernal.sx
                Commodore SX64/DX64 KERNAL. With different startup
                colors, and tape routines disabled.
                
        characters-c64
                Commodore 64 character set. Every vertical line is at
                least 2 pixels wide in order to avoid color errors on
                television. Also the C=M and C=G graphic characters have
                been made 2 pixels wide, which is an error.
                
        1541-II.251968-03
                1541-II C000-FFFF Roms.
                
     * Please let me know if you know further sources.
       
Thanks to ...

   Thanks to following people:
   
     * Chuck Martin
       Helping me to implement ring-modulation and sync.
     * Bernhard Maerz
       For the joystick support and testing.
     * Christian Bauer
       He shows how easy it is to implement fast-loader support.
       
   Thanks also to everyone else who has helped via sending suggestions,
   ideas, bug reports, questions and requests.
   
Bug reports

   Send your bug reports, patches, improvements, questions and
   suggestions to johns98@gmx.net (Lutz Sammer) .
   
Copyright

   The _ALE_ C64 emulator:
   Copyright (c) 1992-1996 by Andreas Arens, Lutz Sammer and Edgar
   Trnig.
   
   You can use and copy the binaries freely at no charge.
   
Contents

     * Emulator Documentation
          + Description
          + Installation
          + Command line options
          + Environment
          + Keyboard
          + Joystick
          + CPU MOS 6510
          + SID MOS 6581 or 8580
          + VIC II MOS 6567 (NTSC) or 6569 (PAL)
          + Floppy Emulation
          + Extensions
          + Monitor
          + Utilities
          + Files
          + File Formats
     * Original C64 Documentation
          + CPU MOS 6510
          + SID MOS 6581 or 8580
          + VIC II MOS 6567 (NTSC) or 6569 (PAL)
     * TODO
     * Other informations
     * C64-ROM-IMAGES
     * Thanks to ...
     * Bug reports
     * Copyright
