"Fossies" - the Fresh Open Source Software Archive

Member "alec64-1.13/docs/alec64.html" (2 Jan 1999, 55840 Bytes) of package /linux/misc/old/alec64-1.13.tar.gz:


Caution: In this restricted "Fossies" environment the current HTML page may not be correctly presentated and may have some non-functional links. You can here alternatively try to browse the pure source code or just view or download the uninterpreted raw source code. If the rendering is insufficient you may try to find and view the page on the alec64-1.13.tar.gz project site itself.

The ALE C64 Emulator


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

(C) Copyright 1992-1996 Andreas Arens, Lutz Sammer and Edgar Törnig
Freely usable and freely distributable


CONTENTS

Emulator Documentation

Description

ALE C64 is a Commodore 64 emulator. ALE C64 is written in C.

The following ports exist.

ALE C64 can be copied and used absolute freely, but the copyright on the sources remains by the authors.

Installation

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.
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]

Examples

c64 -1

Start c64 and use keypad as joystick 1.

Environment

You can use following environment variables to runtime configure ALE C64.

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  | <-- | | CTR | |  2  | | SPC | | C=  | |  Q  | | RUN |
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

You can control the joystick emulation with:

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

Missing features

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.

SID MOS 6581 or 8580

We support emulations of the SID for 3 different hardwares.

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
Missing features
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
Missing features
Disadvantage

Control the SID emulation

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

Missing features

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

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

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 you 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
Missing features
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. 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:

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.

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
"<" 1541 locked.
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
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.

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.

Other informations

News groups

For information, questions and help you can look into following news groups:

FAQs

This is the FAQ for ALE C64: alec64.faq

For more information read the following FAQs.

C64-ROM-IMAGES

Information to get original C64 ROM Images.

Thanks to ...

Thanks to following people:

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 Törnig.

You can use and copy the binaries freely at no charge.

Contents