VICE is the one and only Versatile Commodore Emulator. It allows you to emulate the Commodore C64, VIC20 and PET2001/3032/4032/8032/8096/8296 8-bit computers with one single package. The emulators run as separate programs, but have the same user interface, share the same settings and support the same file formats.
Important notice: If you have no idea about what a Commodore 8-bit computer is, or have questions about how these machines are used, how the file formats work or everything else that is not strictly related to VICE, you should read the appropriate FAQs first, as this kind of information is not available here. See the ``contacts'' section for more information.
If you are a user of the previous 0.11.0 version, you will notice that the C128 emulator is no longer included. We apologize for this, but there was really no time to work at it anymore, as too much time was been spent with the many improvements for the other emulators. If you need the C128 emulator you must stick to the 0.11.0 release (which is still available)... or help us to maintain it in the new VICE versions.
All the emulators provide an accurate 6502/6510 emulator, with emulation of all the opcodes and accurate timing. Also, all of the undocumented opcodes are implemented. Unlike other emulators, the emulation of all the chips (except the VIAs) is cycle accurate, and tries to emulate timings as precisely as possible.
Please do not expect the VIC20 and PET emulators to be as good as the C64 one, as they are still under construction.
The C64 emulator features a fairly complete emulation of the VIC-II video chip: sprites, all registers and all video modes are fully emulated. Since version 0.13.0, the emulation is fully cycle-accurate.
Moreover, a rather complete emulation of the SID sound chip is provided. All the basic features are implemented as well as most of the complex ones including sync and ring modulation. Filters are the only major feature missing at the moment.
Of course, also both CIAs are cycle-accurate and fully emulated.
The VIC20 is not complete yet, but already emulates all the internal hardware, including the VIA chips. Only part of the VIC-I video chip features are emulated, so many graphical effects will not work correctly.
Sound is implemented, but is still at the experimental stage. If you think it does not sound right and know how to improve it, feel free to contact us.
The VIA chips are not cycle-exact at the moment.
The PET emulator emulates the 2001, 3032, 4032, 8032, 8096 and 8296 models, which in general covers all models of this kind of machines! The hardware is pretty much the same and that is why one single program is enough to emulate all of them. For more detailed information about PET hardware please refer to the PETdoc file.
Both the 40 column and 80 column CRTC video chips are emulated (from the 4032 onward), but a few of the features are not implemented yet (numbers of rasterlines per char and lines per screen). Anyway, those missing features are not very important for average applications.
Sound is available for the PET as well, but like the VIC20 it is still under construction. Of course, also the PET VIA is not cycle-exact.
The PET 8096 is basically a PET 8032 with a 64k extension
board, that allows remapping the upper 32k with RAM. You have to
write to a special register at $fff0
to remap the
memory. The PET 8296 is a 8096 but with a completely redesigned
motherboard with 128k RAM in total. Of the additional 32k RAM you
can use only some in blocks of 4k, but you have to set jumpers on
the motherboard for it. VICE uses the command line options
-petram9
and -petramA
instead. Also the
video controller can handle a larger address range. The PET 8x96
model emulations run the Commodore LOS-96 operating system -
basically an improved BASIC 4 version with up to 32k for
BASIC text and 32k for variables. See PETdoc
for more information.
The PET computers came with three major ROM revisions, so-called BASIC 1, 2 and 4. all of which are provided. The PET 2001 uses the version 1, the PET 3032 uses version 2, and the others use version 4. The 2001 ROM is horribly broken in the IEEE488 part (they shipped it before they tested it with the floppy drive, so only tape worked - which is not supported in this emulator) so the ROM is patched to fix the IEEE488 routines.
What the 2001 patch basically does is (amongst more low level fixes) get the load address for a program file from the first two bytes of the file. This allows loading of PET2001-saved files (that have $0400 as load address) and other PET files (that have $0401). The PET2001 still saves from $0400, not from $0401 as other PETs do.
Warning: The (German) machine language lessons from ftp.funet.fi are one byte too short (the files "machineles *". in the "basicles.lha" archive there). This usually results in a machine lockup after load. To use them you have to type the following before loading:
NEW<return>
FOR I=1200 TO 8192:POKE I,0:NEXT<return>
This clears the memory, which kind of emulates the last
missing nullbyte (you can also achieve the same result using
the built-in monitor with `fill 400 2000 0
').
When saving, the PET2001 adds an additional byte to the file,
so those files might grow!
Moreover, the secondary addresses being used now are 0 and 1 for load and save, and not arbitrary unused secondary addresses.
To select which model to run, you specify the model on the command line with the -model MODEL option, where MODEL can be one of a list of PET model numbers, all described below.
Using the keyboard is quite straightforward, as each key is mapped to its usual character. VICE will press and release the Shift keys automatically to make everything work as expected.
WARNING: Unlike the real C64, VICE presses the shift key together with the key to shift. In most cases this should work fine, but some keyboard routines are quite picky and tend not to recognize the shift key because of this. For instance, F6 (which on the real C64 is obtained with Shift + F5) could be recognized as F5. In that case, use the shift key manually (i.e. type Shift + F5 in the example).
Special keys are mapped differently for the VIC20 and C64 emulators and the PET emulator.
VIC20/C64 mapping:
X11 key VIC20/C64 key --------------------- --------------------- TAB RESTORE LEFT CTRL CTRL BACKSPACE DEL INSERT INS LEFT ALT C= (Commodore key) ESC STOP
PET mapping:
X11 key PET key --------------------- --------------------- LEFT ALT REVERSE LEFT CTRL STOP RIGHT CTRL RPT (8xxx only) BACKSPACE DEL INSERT INS
When joystick emulation via the numeric keypad is enabled, the numeric keypad emulates the joystick as follows:
8 (up) (left) 4 6 (right) 2 (down) (fire) 0 or right Control
In order to emulate diagonal directions, you can either press two direction keys together or use the 7, 9, 1 and 3 keys. Moreover, 5 moves the cursor down as 2 so that the layout is somewhat more comfortable if you are used to the layout of the cursor keys in standard PC keyboards.
One catch for the PET, though. Because the PET do have a
numerical keyboard and the joysticks are rarely used, the joystick
emulation can be switched on and off via menu, resource and
the command line option -npjoystick
.
There are also some keys that perform frequently used commands:
All the emulators support emulation of up to 4 external disk drives as devices 8, 9, 10 and 11. Devices 8, 9 and 10 emulate virtual Commodore 1541 drives using disk images, i.e. files that contain a dump of all the blocks contained in a real floppy disk (if you want more information about what a disk image is, consult the comp.emulators.cbm FAQ). Device 11, instead, accesses file system directories, thus allowing you to access files without having to copy them to disk images. In addition, device 11 can be used to read and write P00 files (notice that, unlike other emulators, VICE uses the real file system name instead of the internal P00 name to access these files).
There are two available types of 1541 emulation for the disk image-based emulation. One of them the DOS level drive emulation. It does not really emulate the serial line, but patches the kernal ROM (with the so-called serial traps) so that serial line operations can be emulated via C language routines. This emulation is very fast, but only allows use of standard DOS functions (and not even all of them).
The other alternative is a hardware level drive emulation. The Commodore 1541 disk drive was provided with its own CPU (a 6502 as the VIC20) and its own RAM and ROM. So, in order to more closely emulate its features, a complete emulation of this hardware must be provided and that is what the hardware level emulation does. When the hardware level emulation is used, the kernal routines are no longer patched and the serial line is fully emulated. The problem with this emulation is that it needs a lot of processing power, mainly because the emulator has to emulate two CPUs instead of one.
The hardware level emulation is only available on the VIC20 and C64 emulators, and can only be used to emulate one drive at a time. As a consequence, it is only available for unit 8 and disables all the other drives when activated.
On the other hand, the PETs don't use a serial IEC bus to communicate with the floppy, instead they use the parallel IEEE488 bus. This bus transfers byte by byte, as opposed to bit by bit as the C64 and VIC20 do, so in this case it is feasible to emulate the parallel line completely while emulating the drive at DOS level only. The IEEE488 line interpreter maps the drives 8-11 (as described above) to the IEEE488 disk units, and no kernal traps are needed. The same emulation is available in the C64, to emulate the Commodore IEEE488 bus interface.
VICE supports the most popular file formats:
An utility (c1541) is provided to allow transfers between these formats.
Notice that the native format for disk images is X64; this means that, although the emulators and utilities can both read and write on D64 disk images, they never produce D64 files.
You can convert an X64 file back into a D64 file with the UNIX dd command:
dd bs=64 skip=1 if=IMAGE.X64 of=IMAGE.D64
VICE should compile and run without major problems on many UNIX systems, but there are some known issues related to the sound driver. In fact, sound is the least portable part of the emulator and has not been thoroughly tested on all the supported platforms yet.
Linux, AIX and SGI systems should play sound without any problems; if you are running Linux please use the new 2.x kernels, as VICE needs some features that were not implemented in older versions of the Linux sound driver.
On the other hand, HP-UX and Solaris machines are known to cause troubles. If you think you can help debugging the code for these systems, your help would be really appreciated. We are having troubles finding HP-UX and SUN consoles to work at...
The names of the available emulators are:
You can run each of them by simply typing the name from a shell. If you want to run them from another application (e.g. a window manager or some other sort of program launcher) you should always run them from a terminal window such as xterm or rxvt, as a lot of debugging information is printed and the built-in monitor will be run in there.
There are several options you can specify on the command line, and the -help option lists them all. See below for a detailed description of all the command-line options.
In order to work properly, the emulators need to load the system ROMs. The place where they will be searched for depends on the value of the directory resource. (See below for a description of what resources are and how they can be changed)
If directory is empty, the emulator will search for the ROMs in two places; first of all, it will try to load them from
where <EMU> is the emulator ID and can be either C64, VIC20 or PET. If they are not found here, it will try to load them from the current directory, under C64, VIC20 or PET.
If a directory has been specified instead, the emulator will always try to boot only from that directory.
The default ROM names for the VIC20 and C64 emulators are the following:
For the PET emulator the Basic and Kernal ROMS are packed into a single file. Only three kernal files are provided; one for each basic revision. To handle the different screen sizes and keyboards, different so-called `editor-ROMs' for the memory range $E000-$E800 are provided. The kernal files contain an editor ROM for 40 columns and graphics keyboard already. The PET ROMs have the following names:
The PETs also have sockets for extension ROMs for the addresses $9000-$9FFF, $A000-$AFFF and $B000-$BFFF (the last one for PET2001 and PET3032 only). You can specify ROM image files for those extensions command line options -petrom9, -petromA and -petromB resp.
An alternative would be to specify a long kernal ROM with the -kernal option that includes the extension ROM areas already.
Also, you can specify a replacement for the basic ROM at $B000-$DFFF with the -petromBasic option and a replacement for the editor ROM at $E000-$E7FF with the -petromEditor option.
You can also edit the configuration file as explained in the appropriate section.
When started, the emulator will also try to load a RAM image file (default name is ram) with the same behavior described above. If not found, the RAM will be initialized as after a power-up.
When the emulator is running, two pop-up menus can be opened by pressing the right and left mouse button. The `left' menu is used to issue commands, while the `right' menu can be used to change emulation settings.
2.1.2.1. Command Menu (left button)
These commands can be used to insert or remove virtual
disks and cassette tapes from the emulated units.
Supported formats are D64 and X64 for
disk images (devices 8, 9 and 10) and T64 for
tape images.
Notice that T64 support is
read-only, and that the cassette is automatically
rewound from the start when you reach the end.
Disk
images can also be attached to unit 8 by pressing the
F10 key.
Another important feature is that raw Commodore BASIC binary files and .P00 files can be attached as tapes. As you can autostart a tape image when it is attached (as explained below), this allows you to autostart these particular files as well.
When one of these options is selected, a file selector dialog is popped up. On the left, there is a list of ancestor directories of the current one: by clicking on them, you can go up the directory tree. On the right, there is a list of the files in the current directory, which can be selected by clicking on them. If you click on a directory, that directory becomes the current one; if you click on an ordinary file, it becomes active. On the bottom there are three buttons: `OK' attaches the selected file as a disk/tape image, `Contents' shows its directory and `Cancel' abandons the file selector without any changes. Another `Autostart' button (only available on x64) allows you to attach the disk or tape image and then automagically run the first program on it; this button is not available when attaching disk images to drives 9 and 10. Also notice that this might not work with all the programs, and that, even if the true 1541 emulation is turned on, the first program is always loaded in fast 1541 emulation mode.
Since version 0.12.0.8, you can attach a disk image even if it is on a read-only file system or you do not have write permissions for it. When this happens, the 1541 emulator will emulate a write-protected disk. This is also useful if you want to preserve certain disk image from being written to; in the latter case, just remove the write permission for that file, e.g. doing a chmod a-w.
It is also possible to attach compressed disk or tape images; the compression format is recognized from the file extension. The following formats are supported (the expected file name extension is in parenthesis):
PkZip, tar.gz, lha and zoo support is read-only and always uses the first T64 or D64 file in the archive. So archives containing multiple files will always be handled as if they contained one single file.
While devices 8, 9 and 10 are connected to virtual 1541 disk drives that are suitable for use with disk images, device 11 is always connected to a virtual drive that accesses the standard (UNIX) file system. By using this option, you can specify the path where the files are read or written.
The VICE emulators all have a built-in ML monitor, and this option activates it. See below for a complete description of the monitor commands.
The XDebugger is a simple X11-based tool that allows you to examine and disassemble the memory contents (still under construction, see below for a complete description of the XDebugger).
Run the stand-alone c1541 utility, that must be found somewhere in your $PATH (see below for a complete description of c1541).
View the documentation using the browser specified in the HTMLBrowserCommand resource, whose default value is netscape %s (see below to know how this can be changed).
This submenu allows you to reset the emulated machine. There are two commands in the submenu: ``Soft Reset'' simply resets the machine by bringing the RESET line down (as a "standard" hardware Reset switch would do), while ``Hard Reset'' also resets the RAM as after a power-up. A hard reset can also be performed anytime by pressing F12.
Notice that some programs are designed to ignore a simple reset and that some games might not work if the RAM is not completely initialized (eg. ``Q*Bert''). In such cases, you must use the ``Power-On Reset'' function instead of just a ``Reset''.
Exit the emulator. If the save settings on exit option is set and settings have changed, it will ask you whether you want to save them.
Pause the emulation. Select this option again to restart.
Show copyright information, contributors, and copying license.
With this settings, you can control whether the emulator repaints all the frames or not. With the 1/1 setting, all frames are repainted and animations are rendered as accurately as possible, but this can be too slow for certain machines. Lower settings such as 1/2 or 1/3 make animations less smooth but also need much less computing power.
If a maximum speed limit has been specified, you can use the ``auto'' setting that makes the emulator dynamically adapt to the speed of the host machine, trying to reach the specified speed limit and skipping frames only if necessary. If this setting is enabled, the emulator will never skip more than 10 consecutive frames, so the result will never be worse than using the 1/10 setting.
Warning: it is possible that the actual refresh rate you get with the ``auto'' setting is worse than the one you could get with a fixed refresh rate setting and 100% speed.
Specify the maximum emulation speed, relative to the real machine. You can also enable full speed operation (i.e. the emulator runs as fast as possible), but this will make the `auto' refresh setting no longer available.
With these options, you can specify which devices should be used for the two joystick ports. The available settings are ``None'', ``Analog Joystick 0'', ``Analog Joystick 1'', ``Digital Joystick 0'', ``Digital Joystick 1'', ``Numpad''. These are only available if the configure script detected a supported joystick driver.
Enables and Disables the numeric keypad joystick emulation for the PET emulator.
If no joystick support is available on your machine (or was not available when the executable was built, or VICE does not support it), you can only emulate joysticks using the numeric keypad. The arrow keys emulate the four directions, while the 0 and right Ctrl emulate the Fire button.
This swaps the two joystick devices. It can also be done by pressing F11.
Enable/disable the video cache. The video cache is used to avoid recalculating those parts of the screen that have not changed since last update; it can give a great performance boost in text mode and when there are not too many animations on the screen, but it can also just slow things down if the X server is very fast and the screen changes a lot. If the MITSHM extensions are not available on the machine you are using (e.g. you are running on a networked X-terminal), you should probably always keep this enabled.
This option increases the size of the emulation window. It can slow things down a lot, so beware! If you have a slow machine running Linux and XFree, you can probably achieve better results by changing the XFree screen size with Ctrl-Alt-+ and Ctrl-Alt--. If you use double size, you will probably have to turn the video cache on to obtain decent performance.
When emulating any of the 80-column PET models, only the height is doubled, thus giving the a more correct aspect ratio to the PET screen.
You have to enable double size to obtain dithering when you are running on a monochrome X11 display.
If this option is disabled and double size is enabled, only half of the lines are painted and the rest is kept black. This makes the emulator faster, and gives an old-stylish look to the window, but is also uglier to see.
If this option is enabled, when the emulation window is updated the emulator will always wait for the X server to complete the operation by using the XSync() call. Otherwise, it will simply perform the request and go on without waiting for the server to do its job, and the emulator and the X11 server processes will be executed in parallel for a short period of time. Keeping this option disabled can give a speed boost, but can also cause bad responsiveness to keyboard and mouse events as the X server is being constantly flooded (with double size windows, you might even have troubles opening the pop-up menus, especially if the X server is not very fast). The effect of this option is particularly noticeable when the video cache is disabled.
These can be used to enable or disable the internal sprite-sprite and sprite-background collision registers. Disabling these registers will make you invincible in some games (but sometimes also your enemies become invincible :-)).
This can be used to enable or disable the sound support.
Important notice: The VIC20 and PET sound emulations are still at the experimental stage.
Specify the sample rate, in Hz, for the sound emulation. Standard values are 8000, 11025, 22050, 44100 and 48000. Higher values are obviously slower, so don't try to use the 48KHz setting unless your machine can really handle it.
Specify the sound buffer size in seconds. The optimal sound buffer size depends greatly on the system performance, system load and the program running in the emulator. Using a higher value gives a longer delay but can be handled better by slower machines.
Enables/disables the automatic sound speed adjustment. When this feture is turned on, the sound driver tries to adapt the speed of the sound output to the speed of the emulator, slowing it down or speeding it up if the relative speed is not 100%. Although this allows you to run the emulator at most speeds without clicking, it can interfere with the automatic refresh rate setting and give irregular frame skipping if the speed is less than 100%. On the other hand, disabling it gives clicks if the speed is less than 100% and the emulator can never run above 100% speed.
The possible values for this setting are keep going or 1, 2, 5 or 10 second suspend. With keep going, the sound driver always produces output even if the emulator is too slow and it `clicks'. If you select one of the other options, instead, sound is temporarily turned off for the specified amount of seconds if clicks occur.
This option toggles the hardware-level 1541 disk drive emulation, as explained in the overview section. Be sure to use this option only if necessary, as keeping it disabled makes things much faster. Notice that with this option turned on, only drive 8 is emulated, while devices 9, 10 and 11 are disabled completely.
With this option, you can enable a SpeedDOS-compatible parallel cable. If you have the SpeedDOS ROMs in a suitable format, you can use them instead of the original Commodore ones and use this cable to speed up disk accesses when the true 1541 emulation is turned on.
On the real C64/VIC20, the drive clock frequency is different from the one of the computer and VICE takes account of this. You can select if you want PAL, NTSC or a custom frequency ratio. The sync value is calculated as follows:
where clk_1541 is the 1541 clock (about 1 MHz), while clk_c64 and clk_vic20 depend on the model being used (PAL or NTSC). For example, 65536 makes the drive run as fast as the computer, 65540 makes the drive faster, 65530 makes the computer faster.
The standard values are:
Though the VICE emulators emulate only PAL (European) machines, the NTSC setting can sometimes make many fast-loaders that are designed for NTSC machines work.
In order to save CPU resources, the 1541 drive emulation is disabled when not strictly necessary. With this option you can select when it is disabled.
The first option (``Skip cycles'') is usually better for performance, as the drive is emulated as little as possible; on the other hand, you can notice sudden slowdowns (when the drive executes several cycles at once) and you never know the LED status correctly. Moreover, if the drive tries to get in sync with the computer in some weird way and the computer does not access the serial line for a long time, it is possible that some cycles are discarded and the sync is lost. Notice that this hack can have no effect on performance if one program continuously reads the CIA ports, as the drive will have to be emulated in any case.
The second option (``Trap idle'') is usually a bit slower, as at least interrupts are always emulated, but allows the LED state to be always updated correctly and always keeps the 1541 and the computer in sync. On the other hand, if a program installs a non-standard idle loop in the drive, the 1541 CPU has to be emulated even when not necessary and the global emulation speed is then much slower.
There are 3 available extensions:
IEEE488 interface emulator, that emulates the original Commodore IEEE488 interface; for example, it can be used to run André Fachat's OS/A65 multitasking operating system. (But the OS now also runs on the True1541 emulation)
Emulation identification: this is a standard emulator identification extension that was proposed by Wolfgang Lorentz (author of PC64). With this option turned on, the unused I/O area at $DF00 is used to store some emulator and copyright information, and certain programs might not like it;
512K RAM Expansion Unit: emulate a 512K REU. (this can be used with a few applications that support it)
Notice that you cannot enable more than one option at once in this case, as they could cause conflicts.
This enables/disables the emulation of the PET diagnostic PIN on the userport.
This submenu contains the joystick settings for the PET
These options can be used to save and retrieve settings. If the ``Save Settings on Exit'' option is enabled and the resources have been changed the emulator will ask you whether you want to save them before exiting.
Notice that, although all options are stored in ~/.vicerc, saving the values does not destroy the settings for other emulators. See below for a complete description of the .vicerc file format.
When started, the emulator will search for a .vicerc configuration file in your $HOME directory (VICERC in the current directory on MS-DOS). On UNIX, if this is not found it will also try to find a vicerc file in your installation directory (usually something like /usr/local/lib/vice). If they are both unavailable, the settings will be set to the default values. After the settings are initialized, the emulator parses the command line; this allows you to override the values found in the configuration file.
The configuration file contains the settings for all the emulators; this is achieved by dividing the file into emulator-specific sections. Each section begins with the name of the related emulator in brackets, i.e. one of these:
This setup makes it possible for you to edit the configuration file with a text editor.
The resources for one emulator must be specified in the following form:
There can be spaces between the ResourceValue and the `=' symbol, and they will not be included in the value. If you want to force them, you must put the ResourceValue between double quotes ("...").
All the resources have command-line counterparts, but some command-line options are not available as resources. Here is a list of all the command-line options (in parenthesis, you'll find the name of the corresponding resource specification if available):
Specify the directory where the VICE support files are. Default is none (auto detect).
Specify the names of the disk images to attach to devices 8, 9 and 10 respectively at startup.
Specify a tape image in T64 format to attach at startup (device 1).
Attach FILENAME, trying to autodetect its type, and autostart it.
Specify in which port the joystick emulated via numeric keypad should be.
Specify the joystick device for ports 1 and 2, respectively. NUM can be one of the following:
Specify the maximum percentage speed for the emulator (e.g. 100 gives exact speed, if possible). 0 specifies that no speed limit is desired and makes the emulator run as fast as possible.
Specify than only one for each N frames must be recalculated. If N is equal to 0, then the value is automatically adjusted to obtain the maximum speed specified. (This cannot be done if Speed is set to 0, i.e. no speed limit)
Enable(-)/disable(+) double size window. If you are running on a monochrome X11 server, you should enable double size in order to enable the dithering.
Enable(-)/disable(+) double scan. If double scan is disabled and double size is enabled, only one each 2 lines is actually repainted, and the others are left black.
Enable(-)/disable(+) the video cache. This is enabled by default.
Enable(-)/disable(+) usage of a private colormap. This must be used when the emulator runs out of colors and thus cannot initialize the colormap correctly. When the option is enabled, it will use its own colormap instead of trying to allocate the colors on the default one: this will cause flashing when entering or leaving the emulation window but will also allow it to always have the correct colors.
Enable(-)/disable(+) the sound support.
Specify the sample rate for sound emulation in Hz.
Specify the sound buffer size in milliseconds.
Specify one sound device and one (optional) argument for the device driver. If no device is specified or NAME is an empty string, the emulator selects a supported sound device automatically. Available sound devices are:
Standard Linux/FreeBSD USS sound driver; the argument specifies the sound device file name (/dev/dsp is the default).
Silicon Graphics audio support; the argument specifies the sound device file name (/dev/audio by default).
Solaris audio support (unfinished); the argument specifies the sound device file name (/dev/audio by default).
HP-UX audio support (unfinished); the argument specifies the sound device file name (/dev/audio by default).
AIX audio support.
Simple DirectMedia Layer audio support.
Write samples to a file; the argument specifies the file name
(vicesnd.raw
by default).
Fully emulate the SID, but do not actually play samples.
Similar to dummy, but also calculates samples. This is used to evaluate the speed of the sample generator.
Dump all register write accesses to a file for debugging; the argument specifies the file name (vicesnd.sid by default).
Obviously, not all of them might be available on your system.
Enable(-)/disable(+) automatic sound speed adjustment.
Turn sound off for N seconds if the emulator is too slow and sound ``clicks''.
Enable(-)/disable(+) saving of resources when exiting the emulator (you will be asked first).
Enable(-)/disable(+) the slower hardware-level 1541 disk drive emulation. By default, the fast 1541 emulation is used.
Specify the 1541 ROM image name. Default value is dos1541.
Specify a method to disable the 1541 emulation when not necessary. 0 stands for `skip cycles', 1 for `trap idle' (see above for an explanation of what this means). The default is 1.
Specify the drive/computer clock ratio in 1/65536ths. The standard values are 66516 for PAL and 64094 for NTSC on the C64, 59126 for PAL and 64079 for NTSC on the VIC20. The default setting is PAL.
Enable(-)/disable(+) emulation of the SpeedDOS parallel cable. Default is disabled.
Specify the name of an HTML browser for consulting the on-line documentation. You can also specify command-line options as you would normally do from a shell. The string %s in COMMAND will be automatically replaced with the name of the file containing the manual page (VICE must be correctly installed to make this work correctly).
This feature allows you to issue any command you like to browse the documentation; for example, instead of running a new browser whenever you want to read the manual, you can remotely issue commands to an already running browser (for example, Netscape Navigator supports this with the -remote option).
The default value is netscape %s.
Specify the PET model to emulate.
Example: -model 8032 emulates a PET 8032, -model 2001 the very first PET model.
Specify the RAM expansions for the VIC20 emulation. You must specify a comma separated list of options that can be one of the following:
Examples:
Enable(-)/disable(+) usage of the MITSHM extensions. These extensions allow much faster performance if the program runs on the console, but are not available on all systems and cannot be used if you are running on a networked X-terminal. If the MITSHM extensions were not found when compiling the program, this option will have no effect and usage of the extensions will always be disabled.
Specify the X11 display depth. If not specified, it tries to find it out automatically.
Enable(-)/disable(+) usage of the XSync() call when the contents of the video frame buffer are blitted to the emulation window. Keeping this enabled will give slower performance but better X11 responsiveness.
Specify the name of the Kernal and Basic ROM image names. The PET ROM image contains both kernal and basic.
Specify the names for new Basic ($B000-$DFFF) and Editor ($E000-$E7FF) ROMs.
Specify the names of the PET extension ROM images for the address $9***, $A*** and $B*** resp.
Enables the CBM 8296 RAM mapping for the addresses $9*** and $A*** resp.
Specify a RAM image name to load at startup. If not specified, RAM is reset as after a power up.
Enable(-)/disable(+) hexadecimal notation in monitor. This is enabled by default
Enable(-)/disable(+) the kernal traps. ``Traps'' are patches that are applied to the operating system to allow certain operations. If serial traps are disabled, you cannot use the fast DOS-level 1541 emulation or the T64 tape images, but you are using the raw Kernal ROM without any modifications. The traps are enabled by default, and you probably need to disable them if you are going to use alternative ROM images.
Enable(-)/disable(+) the IEEE488 interface emulation. This is disabled by default.
Enable(-)/disable(+) the emulator identification feature. This is enabled by default.
Enable(-)/disable(+) the sprite/sprite and sprite/background collision registers respectively. These are all enabled by default.
VICE can transform one ROM revision into another by patching the ROM image after it has been loaded. There are 4 available revisions, 0, 3, 100 and 67. 0 and 3 refer to the standard C64, while 67 refers to the SX64 (portable model) and 100 to the Educator 64 (also known as PET4064). As the hardware of the corresponding machines is almost the same, you can thus emulate all of them just by using this option.
The default is no patching (i.e. KernalRev is an empty string).
Enable or disable the external 512K RAM Expansion Unit.
The built-in monitor features command-line editing with history and file name completion. It accepts the following commands:
Fill from START to END (or from START to START + LEN) with BYTES (or with STRING).
Search from START to END (or from START to START + LEN) for BYTES (or STRING).
Compare from START to END (or from START to START + LEN) with TARGET.
Copy the memory area from START to END (or from START to START + LEN) to DEST.
Relink code from START to END (or from START to START + LEN).
Activate line assembler from address START (default is current address). When the assembler is active, each line entered is immediately assembled. Use Control-D or x to quit the assembler and return to the monitor.
Disassemble from START (default is current address) to END (or to START + LEN).
Show memory contents in hexadecimal format from START to END (or from START to START + LEN).
Show memory contents in binary format from START to END (or from START to START + LEN).
Write to memory the sequence BYTES or string STRING from address START.
Jump to ADDR, setting register values REGISTERS.
Jump to subroutine at ADDR.
Show register contents.
Move up and down on stack.
Change working directory to PATH.
Save/load memory contents.
Save/load RAM state.
Attach IMAGE to device DEV. The format of IMAGE must match the device, i.e. you must specify a T64 image for unit 1 or a D64 image for units 8, 9 and 10.
Display video memory contents. If N is specified, look at bank N ; if ADDR is specified, look at address ADDR . The default is the current video matrix memory address.
Describe commands. If no argument is given, it lists all the available commands. If the argument is a known command, a short description is displayed. If the argument is a 65xx assembler instruction (documented or not), all the possible address modes for that instruction are shown, together with the hexadecimal code and the number of cycles for execution.
Exit monitor.
Exit monitor and emulator.
(Warning: the XDebugger is still under construction, and is not 100% functional yet).
When the XDebugger is enabled, a new window pops up. On the left it shows the opcode the CPU is working on, while on the right several register contents are displayed.
Below the registers is the status line. It shows the status of the emulator. It can be Running, Halted or Trace. You can switch between the states with the buttons below the status line. Run lifts off the CPU, Stop halts it, and Trace lets it run with displaying the executed opcodes in the left window.
When the emulator is stopped, it is possible to run single-step execution by pushing the Step button.
With the Skip button the next opcode to be executed can be skipped. This way JAM (i.e. illegal) opcodes can easily be used to trap a program and then be skipped here.
c1541 is a stand-alone disk image maintenance program. It can be used both interactively and from the command line.
The syntax is:
If some OPTIONS but no IMAGE is specified, c1541 runs in batch mode; otherwise, it attaches the IMAGE if present and enters the interactive mode, where you can type commands that are executed when you press Enter (abbreviations are allowed). As with the monitor, file name completion and command line editing with history are provided. Use quit to exit.
Notice that c1541 always creates X64 files, but can read and write D64 files automatically, without the need for any special options.
Each command-line option has an interactive-mode counterpart, that is shown in parenthesis: (abbreviations are allowed when not ambiguous)
Attach the disk image IMAGE for use. All consequent commands in interactive mode will refer to this image.
Detach currently attached disk image.
Format disk image IMAGE, giving the specified label. If IMAGE does not exist, create it.
Delete FILES from IMAGE.
List files in IMAGE.
Validate the disk.
Concatenate OLDNAME1, OLDNAME2.. into NEWNAME on IMAGE (can be used to copy files).
Build IMAGE from raw dump file DUMP (i.e. convert from D64 to X64 file).
Build IMAGE from a Zipcoded image called 1!DUMP, 2!DUMP, 3!DUMP, 4!DUMP.
Transfer FILES from TAPEIMAGE to IMAGE (default is copy all files).
Extract 1541NAME from the disk image into FSNAME (1541NAME by default) from IMAGE.
Extract all files from IMAGE.
Write FSNAME to IMAGE as 1541NAME (FSNAME by default). (works with P00 files as well)
Show disk blocks in hex format.
Show version information about IMAGE.
When more than one command is specified in batch mode, all of them are executed in the same order they have on the command line.
This information should also be available in section 1 of the on-line manual pages (man 1 c1541).
petcat can be used to expand tokenized basic programs into 7-bit ASCII text. The syntax is:
FILES can be either raw CBM binary files or P00. The available options are:
-c
Interpret control codes
-nc
Suppress control codes
-skip N
Skip N bytes at the beginning of input file. Ignored on
P00.
-l ADDR
Specify a load address.
-VERSION
Use keywords for VERSION instead of the 7.0 ones.
-wVERSION
Tokenize using keywords on the specified VERSION.
-kVERSION
List all the keywords for the specified VERSION. If no
VERSION is specified, list all the versions available.
1
PET Basic 1.0
2
Basic 2.0 (PET, VIC20, C64)
super
Basic 2.0 with Super Expander (VIC20)
turtle
Basic 2.0 with Turtle Basic by Craig Bruce (VIC20)
a
Basic 2.0 with AtBasic (C64)
simon
Basic 2.0 with Simon's Basic (C64)
speech
Basic 2.0 with Speech Basic 2.7 (C64)
4
Basic 4.0 (PET)
3
Basic 3.5 (C16/Plus4)
7
Basic 7.0 (C128)
10
Basic 10.0 (C64DX, also known as C65)
More information about petcat should be available in section 1 of your on-line manual pages (man 1 petcat).
CHANGES, user-visible changes between older versions of VICE and this one;
BUGS, list of known bugs in this release;
TODO, our wish list for next versions of VICE;
64doc.txt, documentation about the C64 internals;
PETdoc.txt, documentation about the PET internals;
recomment.html, description of the recomment utility;
cbm_basic_tokens.txt , a list of the CBM BASIC tokens as supported by the petcat utility;
serial.txt, description of the IEC serial bus used on the C64, VIC20 and C128;
mnemonics.txt, alphabetical list of all the G65SC802 and G65SC816 opcodes;
drive_info.txt, information about the Commodore disk drives;
Evaluation, the VICE evaluation query form: please fill in this document and send it to us to give your opinion about this project.
COPYING, the GNU General Public License under which VICE is distributed.
VICE derives from X64, the first Commodore 64 emulator for the X Window System. Here is an informal list of the people who were mostly involved in the development of X64 and VICE:
The VICE core team:
Ettore Perazzoli (ettore@comm2000.it)
6510, VIC-II, VIC-I and CRTC emulations, hardware-level 1541
emulation, speed optimizations, bug fixes, new interrupt
code, Xt/Xaw/Xfwf-based GUI for X11, general code
reorganization, new resource handling, MS-DOS port,
documentation.
Teemu Rantanen (tvr@cs.hut.fi)
SID emulation, disk drive and serial bus implementation,
support for multiple X11 display depths.
André
Fachat (fachat@physik.tu-chemnitz.de)
PET emulators, timer/interrupt code, CIA and
VIA emulation, serial code improvements, IEEE488 interface,
serial bus for VIC20 and tons of bug fixes.
Daniel Sladic (sladic@eecg.toronto.edu)
Hardware-level 1541 emulation.
Andreas Boose (boose@unixserv.rz.fh-hannover.de)
Gave lots of information and bug reports about the VIC-II, the
6510 and the CIAs; moreover, he wrote several test-routines
that were used to improve the emulation. Also contributed
some important patches, fixed several problems in the 1541
emulation, implemented SpeedDOS parallel cable emulation, and
added BZIP v2 support.\n
Former team members:
Jouko
Valta (jopi@stekt.oulu.fi)
Utilities (petcat and c1541),
documentation, T64 handling, user service and
maintenance (most of the work in x64 0.3.x was made by
him).
Retired from the project in July 96, after VICE
0.10.0.
Jarkko
Sonninen (sonninen@lut.fi)
Originator, wrote the old version of the 6502 emulation and
the XDebugger; retired from the project after x64 0.2.1.
External contributors:
Michael Schwendt (sidplay@geocities.com)
Helped with the SID (audio) chip emulation, bringing
important suggestions and bug reports, as well as the wave
tables and filter emulation from his SIDplay emulator.
Christian Bauer (bauec002@goofy.zdv.uni-mainz.de)
Wrote the very interesting ``VIC article'' from which we got
invaluable information about the VIC-II chip. Without this,
the VIC-II implementation would have not been possible.
Wolfgang Lorentz
Wrote an excellent 6510 test suite that helped us to debug the
CPU emulation.
Giuliano Procida (gpp10@cam.ac.uk)
Maintainer of the VICE deb package for the
Debian distribution.
Nathan Hand
Maintainer of the VICE rpm package for the
Red Hat distribution.
Marko Mäkelä (msmakela@nic.funet.fi)
CPU documentation.
Martin Pottendorfer
(Martin.Pottendorfer@aut.alcatel.at)
`Contents' button in the file selector, suggestions,
improvements in the Makefile for multi-platform compilation.
Chris Sharp (sharpc@hurlsey.ibm.com)
AIX sound driver.
Olaf Seibert (rhialto@polder.ubc.kun.nl)
PET, Disk drive patches.
Daniel Fandrich (dan@fch.wimsey.bc.ca)
Disk drive patches.
Heiko Selber (selber@fhi-berlin.mpg.de)
VIC-20 I/O patches.
Steven Tieu (stieu@physics.ubc.ca)
Added support for 16/24 bpp X11 displays.
Alexander Lehmann (alex@mathematik.th-darmstadt.de)
Added complete support for all the VIC20 memory configurations.
Lionel Ulmer
Joystick support for Linux, first try of a SID emulation for
SGI machines. Lionel, where are you now?
Bernhard Kuhn
(kuhn@eikon.e-technik.tu-muenchen.de)
Joystick improvements for Linux.
Gerhard Wesp (gwesp@cosy.sbg.ac.at)
c1541 improvements (extract command).
Ricardo Ferreira (storm@esoterica.pt)
c1541 improvements (unlynx and system
commands).
Hannu Helminen (dm@stekt.oulu.fi)
X11/Video Interface and PostScript programming guru.
Richard Hable (hab@fim.uni-linz.ac.at)
REU Emulation, Testing.
Russell Alphey (R.Alphey@agriculture.unimelb.edu.au)
Testing.
George Caswell (timbuktu@the-eye.res.wpi.edu)
Testing and suggestions.
Germano Caronni (caronni@tik.ethz.ch)
Ideas, patches, debugging and moral support.
Vesa-Matti Puro (vmp@lut.fi)
Wrote the very first 6502 CPU emulator in x64 0.1.0. That was
the beginning of the story... :-)
Dan Miner (dminer@nyx10.cs.du.edu)
Several patches to the fast disk drive emulation.
Frank Prindle (Frank.Prindle@lambada.oit.unc.edu)
Patches.
Peter Weighill (stuce@csv.warwick.ac.uk)
Many ideas and ROM patcher.
Dominique Strigl (strigl@sxb.bsf.alcatel.fr)
Patches.
Craig Jackson (Craig.Jackson@lambada.oit.unc.edu)
Patches.
Lasse Jyrkinen (ljj@stekt.oulu.fi,
Lasse.Jyrkinen@uz.kuleuven.ac.be)
Patches.
Per Olofsson (MagerValp@Goth.Org)
Digitalized the C64 colors.
Paul David Doherty (h0142kdd@rz.hu-berlin.de)
Wrote `zip2disk', on which the Zipcode support in c1541 is based
Robert H. Forsman Jr.
Shawn Hargreaves (shawn@talula.demon.co.uk)
Wrote Allegro, the graphics library used in the MS-DOS version.
Petteri Kangaslampi (pekangas@sci.fi)
(We hope we have not forgotten anybody; if you think we have, please tell us)
Thanks also to everyone else for sending suggestions, ideas, bug reports, questions and requests. In particular, a warm thank goes to the following people:
Last but not least, a very special thank to:
for writing really cool emulators to compete with. :-)
VICE is Copyright (c) 1993-1998 Ettore Perazzoli, Teemu Rantanen, André Fachat, Jouko Valta, Jarkko Sonninen and Daniel Sladic.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You can find the latest news about VICE at the official VICE home page:
Also the public patches and beta releases will be available there as well, so you might want to have a look at it periodically. If you are going to report a bug, please check those pages first; it is possible that the problem you encountered has already been fixed with a newer version.
If you want to report bugs, make suggestions or contribute to the project, please email one of the following people:
Please put the word VICE in all capitals in your subject line (e.g. VICE fails to run game XXX). This helps mail splitting and reduces chances that your message is unintentionally deleted, forgotten or lost.
When you report a bug, please try to be as accurate as possible and describe how it can be reproduced to the very detail. You should also tell us what machine you are running on, what operating system you are using as well as the version of it.
In any case, we would really be glad to receive your comments about VICE.
If you want to contribute, please ask first. It has already happened a couple of times that somebody started working at something that had already been done but not released to the public, and we really do not want anybody to waste time.
People willing to port VICE to other platforms are always welcome. In particular, we would be really glad if somebody ported VICE to MacOS or Windows NT/95. A port of the 0.11.0 C64 emulator for MacOS already exists but it is quite buggy and not maintained any longer.
There are some newsgroups you might be interested in:
We also recommend reading the
comp.emulators.cbm
and comp.sys.cbm
FAQs, which are posted regularly on the corresponding newsgroups
and are also available via FTP from
ftp://rtfm.mit.edu
.