@database ./vice.guide

@Master vicetmp.texi

@Width 72


This is the AmigaGuideŽ file ./vice.guide, produced by Makeinfo-1.55 from 
the input file vicetmp.texi.

   START-INFO-DIR-ENTRY * VICE: (vice).        VICE, the Versatile
Commodore Emulator.  END-INFO-DIR-ENTRY

\PARAM\  ifclear

VICE Manual

Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.


@Node Main "./vice.guide"
@Next "License"

This is the documentation for version 2.4 of VICE, the Versatile
Commodore Emulator.


 @{" License " Link "License"}                      The GNU General Public License gives you
                                permission to redistribute this program
                                on certain terms; and also explains that
                                there is no warranty.

 @{" Preface " Link "Preface"}                      Fundamental concepts.

 @{" Usage " Link "Usage"}                        Invoking the emulators.
 @{" System files " Link "System files"}                 Files needed to emulate.

 @{" Basics " Link "Basics"}                       Simple things you can do.

 @{" Settings and resources " Link "Settings and resources"}       Emulator parameters you can change.

 @{" Machine-specific features " Link "Machine-specific features"}    Peculiar characteristics of the emulators.

 @{" Platform-specific features " Link "Platform-specific features"}   Host platform specific features.

 @{" Snapshots " Link "Snapshots"}                    Save the emulator state in one file
 @{" Monitor " Link "Monitor"}                      The VICE built-in monitor.
 @{" c1541 " Link "c1541"}                        The disk-image maintenance utility.

 @{" File formats " Link "File formats"}                 Technical description of file formats.

 @{" Acknowledgments " Link "Acknowledgments"}              People involved in VICE.
 @{" Copyright " Link "Copyright"}                    Legal stuff.
 @{" Contacts " Link "Contacts"}                     Official home page, email addresses...

 @{" Concept Index " Link "Concept Index"} 
 @{" Resource Index " Link "Resource Index"} 
 @{" Command-line Index " Link "Command-line Index"} 


@EndNode

@Node "License" "vice.guide/License"
@Next "Preface"
@Prev "Main"
@Toc "Main"

GNU GENERAL PUBLIC LICENSE
**************************

                         Version 2, June 1991

     Copyright (C) 1989, 1991 Free Software Foundation, Inc.  675
     Mass Ave, Boston, MA 02111-1307, USA
     
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

Preamble
========

The licenses for most software are designed to take away your freedom
to share and change it.  By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not price.
Our General Public Licenses are designed to make sure that you have
the freedom to distribute copies of free software (and charge for this
service if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone
to deny you these rights or to ask you to surrender the rights.  These
restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis
or for a fee, you must give the recipients all the rights that you
have.  You must make sure that they, too, receive or can get the source
code.  And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software patents.
We wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program
proprietary.  To prevent this, we have made it clear that any patent
must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.

    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains a
     notice placed by the copyright holder saying it may be distributed
     under the terms of this General Public License.  The "Program",
     below, refers to any such program or work, and a "work based on
     the Program" means either the Program or any derivative work under
     copyright law: that is to say, a work containing the Program or a
     portion of it, either verbatim or with modifications and/or
     translated into another language.  (Hereinafter, translation is
     included without limitation in the term "modification".)  Each
     licensee is addressed as "you".

     Activities other than copying, distribution and modification are
     not covered by this License; they are outside its scope.  The act
     of running the Program is not restricted, and the output from the
     Program is covered only if its contents constitute a work based on
     the Program (independent of having been made by running the
     Program).  Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
     source code as you receive it, in any medium, provided that you
     conspicuously and appropriately publish on each copy an appropriate
     copyright notice and disclaimer of warranty; keep intact all the
     notices that refer to this License and to the absence of any
     warranty; and give any other recipients of the Program a copy of
     this License along with the Program.

     You may charge a fee for the physical act of transferring a copy,
     and you may at your option offer warranty protection in exchange
     for a fee.

  2. You may modify your copy or copies of the Program or any portion
     of it, thus forming a work based on the Program, and copy and
     distribute such modifications or work under the terms of Section 1
     above, provided that you also meet all of these conditions:

       a. You must cause the modified files to carry prominent notices
          stating that you changed the files and the date of any change.

       b. You must cause any work that you distribute or publish, that
          in whole or in part contains or is derived from the Program
          or any part thereof, to be licensed as a whole at no charge
          to all third parties under the terms of this License.

       c. If the modified program normally reads commands interactively
          when run, you must cause it, when started running for such
          interactive use in the most ordinary way, to print or display
          an announcement including an appropriate copyright notice and
          a notice that there is no warranty (or else, saying that you
          provide a warranty) and that users may redistribute the
          program under these conditions, and telling the user how to
          view a copy of this License.  (Exception: if the Program
          itself is interactive but does not normally print such an
          announcement, your work based on the Program is not required
          to print an announcement.)

     These requirements apply to the modified work as a whole.  If
     identifiable sections of that work are not derived from the
     Program, and can be reasonably considered independent and separate
     works in themselves, then this License, and its terms, do not
     apply to those sections when you distribute them as separate
     works.  But when you distribute the same sections as part of a
     whole which is a work based on the Program, the distribution of
     the whole must be on the terms of this License, whose permissions
     for other licensees extend to the entire whole, and thus to each
     and every part regardless of who wrote it.

     Thus, it is not the intent of this section to claim rights or
     contest your rights to work written entirely by you; rather, the
     intent is to exercise the right to control the distribution of
     derivative or collective works based on the Program.

     In addition, mere aggregation of another work not based on the
     Program with the Program (or with a work based on the Program) on
     a volume of a storage or distribution medium does not bring the
     other work under the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
     under Section 2) in object code or executable form under the terms
     of Sections 1 and 2 above provided that you also do one of the
     following:

       a. Accompany it with the complete corresponding machine-readable
          source code, which must be distributed under the terms of
          Sections 1 and 2 above on a medium customarily used for
          software interchange; or,

       b. Accompany it with a written offer, valid for at least three
          years, to give any third party, for a charge no more than your
          cost of physically performing source distribution, a complete
          machine-readable copy of the corresponding source code, to be
          distributed under the terms of Sections 1 and 2 above on a
          medium customarily used for software interchange; or,

       c. Accompany it with the information you received as to the offer
          to distribute corresponding source code.  (This alternative is
          allowed only for noncommercial distribution and only if you
          received the program in object code or executable form with
          such an offer, in accord with Subsection b above.)

     The source code for a work means the preferred form of the work for
     making modifications to it.  For an executable work, complete
     source code means all the source code for all modules it contains,
     plus any associated interface definition files, plus the scripts
     used to control compilation and installation of the executable.
     However, as a special exception, the source code distributed need
     not include anything that is normally distributed (in either
     source or binary form) with the major components (compiler,
     kernel, and so on) of the operating system on which the executable
     runs, unless that component itself accompanies the executable.

     If distribution of executable or object code is made by offering
     access to copy from a designated place, then offering equivalent
     access to copy the source code from the same place counts as
     distribution of the source code, even though third parties are not
     compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense or distribute the Program is
     void, and will automatically terminate your rights under this
     License.  However, parties who have received copies, or rights,
     from you under this License will not have their licenses
     terminated so long as such parties remain in full compliance.

  5. You are not required to accept this License, since you have not
     signed it.  However, nothing else grants you permission to modify
     or distribute the Program or its derivative works.  These actions
     are prohibited by law if you do not accept this License.
     Therefore, by modifying or distributing the Program (or any work
     based on the Program), you indicate your acceptance of this
     License to do so, and all its terms and conditions for copying,
     distributing or modifying the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
     Program), the recipient automatically receives a license from the
     original licensor to copy, distribute or modify the Program
     subject to these terms and conditions.  You may not impose any
     further restrictions on the recipients' exercise of the rights
     granted herein.  You are not responsible for enforcing compliance
     by third parties to this License.

  7. If, as a consequence of a court judgment or allegation of patent
     infringement or for any other reason (not limited to patent
     issues), conditions are imposed on you (whether by court order,
     agreement or otherwise) that contradict the conditions of this
     License, they do not excuse you from the conditions of this
     License.  If you cannot distribute so as to satisfy simultaneously
     your obligations under this License and any other pertinent
     obligations, then as a consequence you may not distribute the
     Program at all.  For example, if a patent license would not permit
     royalty-free redistribution of the Program by all those who
     receive copies directly or indirectly through you, then the only
     way you could satisfy both it and this License would be to refrain
     entirely from distribution of the Program.

     If any portion of this section is held invalid or unenforceable
     under any particular circumstance, the balance of the section is
     intended to apply and the section as a whole is intended to apply
     in other circumstances.

     It is not the purpose of this section to induce you to infringe any
     patents or other property right claims or to contest validity of
     any such claims; this section has the sole purpose of protecting
     the integrity of the free software distribution system, which is
     implemented by public license practices.  Many people have made
     generous contributions to the wide range of software distributed
     through that system in reliance on consistent application of that
     system; it is up to the author/donor to decide if he or she is
     willing to distribute software through any other system and a
     licensee cannot impose that choice.

     This section is intended to make thoroughly clear what is believed
     to be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
     certain countries either by patents or by copyrighted interfaces,
     the original copyright holder who places the Program under this
     License may add an explicit geographical distribution limitation
     excluding those countries, so that distribution is permitted only
     in or among countries not thus excluded.  In such case, this
     License incorporates the limitation as if written in the body of
     this License.

  9. The Free Software Foundation may publish revised and/or new
     versions of the General Public License from time to time.  Such
     new versions will be similar in spirit to the present version, but
     may differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the
     Program specifies a version number of this License which applies
     to it and "any later version", you have the option of following
     the terms and conditions either of that version or of any later
     version published by the Free Software Foundation.  If the Program
     does not specify a version number of this License, you may choose
     any version ever published by the Free Software Foundation.

 10. If you wish to incorporate parts of the Program into other free
     programs whose distribution conditions are different, write to the
     author to ask for permission.  For software which is copyrighted
     by the Free Software Foundation, write to the Free Software
     Foundation; we sometimes make exceptions for this.  Our decision
     will be guided by the two goals of preserving the free status of
     all derivatives of our free software and of promoting the sharing
     and reuse of software generally.

                                NO WARRANTY

 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
     SERVICING, REPAIR OR CORRECTION.

 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

                      END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs
=============================================

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

To do so, attach the following notices to the program.  It is safest to
attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

     ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES.
     Copyright (C) 19YY  NAME OF AUTHOR
     
     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.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
     type `show w'.  This is free software, and you are welcome
     to redistribute it under certain conditions; type `show c'
     for details.

The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License.  Of course, the
commands you use may be called something other than `show w' and `show
c'; they could even be mouse-clicks or menu items--whatever suits your
program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

     Yoyodyne, Inc., hereby disclaims all copyright
     interest in the program `Gnomovision'
     (which makes passes at compilers) written
     by James Hacker.
     
     SIGNATURE OF TY COON, 1 April 1989
     Ty Coon, President of Vice

This General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library,
you may consider it more useful to permit linking proprietary
applications with the library.  If this is what you want to do, use the
GNU Library General Public License instead of this License.


@EndNode

@Node "Preface" "vice.guide/Preface"
@Next "Usage"
@Prev "License"
@Toc "Main"

About VICE
**********

VICE is the one and only "Versatile Commodore Emulator".  It provides
emulation of the Commodore C64, C64DTV, C128, VIC20, PET, PLUS4, SCPU64
and CBM-II computers within a 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 what a Commodore 8-bit computer
is, or have questions about how these machines are used, how the file
formats work or anything else that is not strictly related to VICE, you
should read the appropriate FAQs *first*, as that kind of information
is not available here.  See @{"Contacts" Link "Contacts"}. for information about how to
retrieve the FAQs.

All the emulators provide an accurate 6502/6510 emulator, with emulation
of all the opcodes (both documented and undocumented ones) and accurate
timing.  Unlike other emulators, VICE aims to be cycle accurate; it
tries to emulate chip timings as precisely as possible and does so
*efficiently*.

Please do *not* expect the C64DTV, C128, PET, PLUS4, SCPU64 and CBM-II
emulators to be as good as the C64 or VIC20 one, as they are still
under construction.

*Notice:* This documentation is written for the Unix release of VICE,
but is slowly being made universal.


 @{" C64 emulator features " Link "C64 emulator features"} 
 @{" C64DTV emulator features " Link "C64DTV emulator features"} 
 @{" C128 emulator features " Link "C128 emulator features"} 
 @{" VIC20 emulator features " Link "VIC20 emulator features"} 
 @{" PET emulator features " Link "PET emulator features"} 
 @{" CBM-II emulator features " Link "CBM-II emulator features"} 
 @{" SCPU64 emulator features " Link "SCPU64 emulator features"} 
 @{" Keyboard emulation " Link "Keyboard emulation"} 
 @{" Joystick emulation " Link "Joystick emulation"} 
 @{" Disk drive emulation " Link "Disk drive emulation"} 
 @{" Supported file formats " Link "Supported file formats"} 
 @{" Common problems " Link "Common problems"} 


@EndNode

@Node "C64 emulator features" "vice.guide/C64 emulator features"
@Next "C64DTV emulator features"
@Prev "Preface"
@Toc "Preface"

C64 emulator features
=====================

As of version 2.3, two C64 emulators are provided: `x64' (fast) and
`x64sc' (accurate).

The fast C64 emulator, called `x64', features a fairly complete
emulation of the VIC-II video chip: sprites, all registers and all video
modes are fully emulated.  The emulation has been fully cycle-accurate
since version 0.13.0.

The accurate C64 emulator, called `x64sc', features a cycle-based and
pixel-accurate VIC-II emulation. This requires a much faster machine
than the old `x64'.

A rather complete emulation of the SID sound chip is also provided.  All
the basic features are implemented as well as most of the complex ones
including synchronisation, ring modulation and filters.  There are two
emulators of the SID chip available: first is the "standard" VICE
emulator, available since VICE 0.12; the second is Dag Lem's reSID
engine. The reSID engine is a lot more accurate than the standard
engine, but it is also a lot slower, and only suitable for faster
machines.

Naturally, also both CIAs (or VIAs, in some cases) are fully emulated
and cycle accurate.


@EndNode

@Node "C64DTV emulator features" "vice.guide/C64DTV emulator features"
@Next "C128 emulator features"
@Prev "C64 emulator features"
@Toc "Preface"

C64DTV emulator features
========================

The C64DTV emulator, called `x64dtv', features emulation of C64DTV
revisions 2 and 3. The emulator is under construction, but most of the
DTV specific features are already supported (with varying accuracy).

Video cache is disabled by default as it currently doesn't work with
some of C64DTV's new video modes. The new video modes have a simple
"fake" video cache implementation that may give incorrect results and
decreased performance.


@EndNode

@Node "C128 emulator features" "vice.guide/C128 emulator features"
@Next "VIC20 emulator features"
@Prev "C64DTV emulator features"
@Toc "Preface"

C128 emulator features
======================

The C128 emulator, called `x128', features a complete emulation of the
internal MMU ("Memory Management Unit"), 80 column VDC screen, fast IEC
bus emulation, 2 MHz mode, Z80 emulation plus all the features of the
C64 emulation.


@EndNode

@Node "VIC20 emulator features" "vice.guide/VIC20 emulator features"
@Next "PET emulator features"
@Prev "C128 emulator features"
@Toc "Preface"

VIC20 emulator features
=======================

The VIC20 emulates all the internal hardware, including the VIA chips.
The VIC-I video chip is fully emulated except NTSC interlace mode, so
most graphical effects will work correctly.

Sound support is implemented, but is still at an experimental stage.  If
you think it could be improved and know how to do so, feel free to
contact us (see @{"Contacts" Link "Contacts"}).

The VIC20 emulator now allows the use of the VIC1112 IEEE488 interface.
You have to enable the hardware (by menu, resource, or commandline
option) and then load the IEEE488 ROM (see for example
`http://www.funet.fi/pub/cbm/schematics/cartridges/vic20/ieee-488/325329-04.bin',
but you have to double the size to 4k for now).  The IEEE-488 code is
then started by `SYS45065'.


@EndNode

@Node "PET emulator features" "vice.guide/PET emulator features"
@Next "CBM-II emulator features"
@Prev "VIC20 emulator features"
@Toc "Preface"

PET emulator features
=====================

The PET emulator emulates the 2001, 3032, 4032, 8032, 8096, 8296 and
SuperPET (MicroMainFrame 9000) models, covering the whole series.  The
hardware is pretty much the same in each 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).  Fortunately, they are
not very important for average applications.

Sound is available for the PET as well, but like the VIC20's it is still
under construction.

The PET 8096 is basically a PET 8032 with a 64k extension board which
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 8296-G is a 8296 with built-in 8250 low-profile dual disk drive.

The PET 8296-GD is a 8296-GD with additionally a "HiRes Emulator" (HRE).
This is a cheaper version of a "HRG" hi-res board which was based on
Thomson chips. This version instead uses no additional hardware support
apart from some memory mapping tricks. It has supporting software in the
hre-*.bin rom files.

The SuperPET also is a PET 8032 with an expansion board.  It can map 4k
at a time out of 64k into the `$9***' area.  Also it has an ACIA 6551
for RS232 communication.  The 6809 CPU that is built into the SuperPET
is now emulated, since release 2.4, including the 6702 dongle chip.

The Super-OS/9 MMU expansion, developed by TPUG (Toronto PET Users
Group) is also emulated.

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 with respect to IEEE488 (they shipped it before they
tested it with the floppy drive, so only tape worked.  Therefore the
emulator patches the ROM to fix the IEEE488 routines.

As well as other low-level fixes the 2001 patch obtains the load address
for a program file from the first two bytes of the file.  This allows
the loading of both PET2001-saved files (that have $0400 as their load
address) and other PET files (that have $0401).  The PET2001 saves from
$0400 and not from $0401 as other PETs do.

Moreover, the secondary addresses used are now `0' and `1' for load and
save, respectively, and not arbitrary unused secondary addresses.

To select which model to run, specify it on the command line with the
`-model MODEL' option, where `MODEL' can be one of a list of PET model
numbers, all described in see @{"PET model" Link "PET model"}


@EndNode

@Node "CBM-II emulator features" "vice.guide/CBM-II emulator features"
@Next "SCPU64 emulator features"
@Prev "PET emulator features"
@Toc "Preface"

CBM-II emulator features
========================

The CBM-II emulator emulates several types of CBM-II models.  Those
models are known under different names in the USA and Europe.  In the
States they have been sold as `B128' and `B256', in Europe as `CBM
610', `CBM 620' (low-profile case) or `CBM 710' and `CBM 720'
(high-profile case with monitor). In addition to that now an
experimental C510 emulation is included. The C510 (also known as P500)
is the little brother of the C600/700 machines. It runs at roughly 1
MHz and, surprise, it has a VIC-II instead of the CRTC. Otherwise the
different line of computers are very similar.

These computers are prepared to take a coprocessor board with an 8088 or
Z80 CPU.  Indeed there are models `CBM 630' and `CBM 730' that
supposedly had those processors.  However these models are not emulated.

The basic difference is the amount of RAM these machines have been
supplied with.  The `B128' and the `CBM *10' models had 128k RAM, the
others 256k. This implies some banking scheme, as the 6502 can only
address 64k.  And indeed those machines use a 6509, that can address 1
MByte of RAM.  It has 2 registers at addresses 0 and 1.  The indirect
bank register at address 1 determines the bank (0-15) where the opcodes
`LDA (zp),Y' and `STA (zp),Y' take the data from.  The exec bank
register at address 0 determines the bank where all other read and
write addresses take place.

The business line machines (C6xx/7xx) have the RAM in banks 1-2, resp.
1-4. All available banks are used for BASIC, where program code is
separated from all variables, resp. from normal variables, strings and
arrays that are distributed over other banks. The C510 instead has RAM
in banks 0 and 1, and uses bank 1 for program and all variables. Bank
0, though, can be accessed by the VIC-II to display graphics.

Many models have been expanded to more than the built-in memory.  In
fact some machines have been expanded to the full 1M.  Bank 15 is used
as system bank, with only little RAM, and lots of expansion cartridge
ROM area, the I/O and the kernal/basic ROMs.  Some models have been
modified to map RAM into the expansion ROM area.  Those modifications
can be emulated as well.

The different settings are described in see @{"CBM-II model" Link "CBM-II model"}.


@EndNode

@Node "SCPU64 emulator features" "vice.guide/SCPU64 emulator features"
@Next "Keyboard emulation"
@Prev "CBM-II emulator features"
@Toc "Preface"

SCPU64 emulator features
========================

The XSCPU64 emulator is a simulation of a C64 equipped with a
SuperCPU64 V2B. Features:

   * 20 MHz asynchronous single cycle 65816 CPU core with proper dummy
     and invalid cycle handling.

   * 128 KiB static RAM, 0-16 MiB SIMM RAM, 64-512 KiB EPROM emulated
     and their respective timing details.

   * All RAM optimization configurations supported with write buffer.

   * I/O area access delays, write through to SRAM implemented.

   * Memory mappings including cartridge and boot memory map and kernal
     shadow.

   * Hardware registers and switches implemented.

   * Replacement SCPU64 ROM compatible with the original to avoid
     distribution problems

   * It's using the single cycle VICII core for accurate simulation

Still to do:

   * Measure and verify VICII interrupt phase shift

   * Measure and verify BA phase shift

   * SIMM RAM extra 7.5 cycle refresh delay every 10us missing.

   * CPU NMI support for "reset" button

The emulation is quite accurate but not perfect. If you code something
timing intensive using this simulation please always check it on real
hardware to avoid bad surprises.

The hardware itself is asynchronous in nature, therefore caution must
be taken to not do long timing loops without synchronization in 20 MHz
mode. Also don't squeeze out the last remaining cycles without leaving
a safety buffer.  Synchronization points can be created by doing I/O
reads or writes and leaving a few hundred cycles left each frame will
not hurt.

Otherwise it can happen that the code is running on this version of
VICE or my SCPU64 V2+C128D perfectly but nowhere else due to
manufacturing variations and frequency drifts.


@EndNode

@Node "Keyboard emulation" "vice.guide/Keyboard emulation"
@Next "Joystick emulation"
@Prev "SCPU64 emulator features"
@Toc "Preface"

The keyboard emulation
======================

There are two ways of emulating the keyboard in VICE.

The default way ("symbolic mapping") is to map every key combination to
the corresponding key combination on the real machine: for example, if
you press *, which is bound to `Shift-8' on a U.S. keyboard, in the C64
emulator, the emulated machine will have just the *unshifted* * key
pressed (as * is unshifted on the C64 keyboard).  Likewise, pressing '
on the same U.S. keyboard without any shift key will cause the
combination `Shift-7' to be pressed in the emulated C64.  This way, it
becomes quite obvious what keys should be typed to obtain all the
symbols.

There is, however, one problem with symbolic mapping: some keys really
need to be mapped specially regardless.  The most important examples
being, in the VIC20, C64 and C128 emulators, that CTRL is mapped to Tab
and that the Commodore key is mapped to the left Control). The RUN/STOP
key is mapped to the ESC key on the PC keyboard. The PET emulator,
lacking the Commodore key but having an ESC key, uses the left Control
key as RUN/STOP and the ESC key as ESC of course.

The second way ("positional mapping") is to map every key on the "real"
keyboard to the key which has the same position on the keyboard of the
emulated machine.  This way, no Shift key is forced by the program
(with the exception of the function keys F2, F4, F6 and F8, which
require Shift on the Commodore keyboards), and the keyboard is more
comfortable to use in those programs (such as some games) that require
the keys to be in the correct positions.

*Warning:* unlike the real C64, VICE "presses" the Shift key *together*
with the key to shift when the Shift must be forced.  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).  Yes, we know this is a bug.

The `RESTORE' key is mapped to `Page Up' (or `Prev') by default.


@EndNode

@Node "Joystick emulation" "vice.guide/Joystick emulation"
@Next "Disk drive emulation"
@Prev "Keyboard emulation"
@Toc "Preface"

The joystick emulation
======================

Joysticks can be emulated both via the keyboard and via a real joystick
connected to the host machine (the latter only works on GNU/Linux
systems).

There are two keyboard layouts for joystick use, known as "numpad" and
"custom".

The "numpad" layout uses the numeric keypad keys, i.e., the numbers
1...9 which emulate all the directions including the diagonal ones; 0
emulates the fire button.

The "custom" layout uses the keys w, e, r, s, d, f, x, c, v for the
directions and space for the fire button instead.


@EndNode

@Node "Disk drive emulation" "vice.guide/Disk drive emulation"
@Next "Supported file formats"
@Prev "Joystick emulation"
@Toc "Preface"

The disk drive emulation
========================

All the emulators support up to 4 external disk drives as devices 8, 9,
10 and 11.  Each of these devices can emulate virtual Commodore 1541,
1541-II, 1571, 1581, 2031, 2040, 3040, 4040, 1001, 8050 and 8250 drives
in one of four ways:

   * 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);

   * accessing file system directories, thus giving you the use of files
     without having to copy them to disk images; this also allows you to
     read and write files in the `P00' format (again, consult the
     `comp.emulators.cbm' FAQ for more info).

   * accessing a real device connected to the host machine. As of VICE
     1.11 it is possible to connect real drives like Commodore 1541 to
     the printer port of the host using the XA1541 or XM1541 cable.
     Currently this only works on Linux or Windows using the OpenCBM
     library. You can get it from
     http://www.lb.shuttle.de/puffin/cbm4linux (cbm4linux, Linux
     version) or from http://cbm4win.sf.net (cbm4win, Windows version).

   * directly using the disk drive of the host. The 3.5" disk drive of
     the host can be used to read or write Commodore 1581 formatted
     disks.  Currently this raw drive access feature is only available
     for Linux hosts.

When using disk images there are two available types of drive
emulation.  One of them the "virtual drive" emulation.  It does *not*
really emulate the serial line, but patches the kernal ROM (with the
so-called "kernal 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).
For real device or raw drive access it is required to enable this type
of emulation.

The IEEE488 drives (2031, 2040, 3040, 4040, 1001, 8050 and 8250) do not
use kernal traps. Instead the IEEE488 interface lines are monitored and
the data is passed to the drive emulation. To use them on the C64, you
need to enable the IEEE488 interface emulation. Only if the IEEE488
emulation is enabled, those drives can be selected.

The other alternative is a "true drive" emulation.  The Commodore disk
drives are provided with their own CPU (a 6502 as the VIC20 and the
PETs) and their 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 remain
unpatched 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 PETs do not use a serial IEC bus to communicate with the floppy
drive but instead use the parallel IEEE488 bus.  This does *byte by
byte* transfers, as opposed to the *bit by bit* transfers of the C64
and VIC20, so making it 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
of the Commodore IEEE488 bus interface is available for the C64 and the
VIC20. With IEEE488 drives you can have true 2031 emulation at unit #8,
and still have filesystem access at units #10 or #11, because
monitoring the IEEE488 lines does not interfere with the true drive
emulation.

The IEEE488 disk drives 2040, 3040, 4040, 8050 and 8250 are Dual Drive
Floppy Disks.  This means that these drives handle two disks. To
accomplish the emulation, only two disks can be emulated, namely units
#8 and #10. The attached image, track display and LED display of unit
#9 and #11 are used for the second drive of the dual disk drives. On
unix the unit number display (8 or 9, 10 or 11) in the emulation window
changes to the drive number display (0 or 1).

The Commodore 2040, 3040, 4040, 1001, 8050 and 8250 disk drives are
so-called "old-style" disk drives. Their architecture includes not one,
but two processors of the 6502 type, namely a 6502 for the file
handling and communication with the PET (IP), and a 6504 (which is a
6502 with reduced address space) for the drive handling (FDC). Both
processors communicate over a shared memory area. The IP writes
commands to read/write blocks to this area and the FDC executes them.
To make the emulation feasible, the FDC processor is not emulated
cycle-exactly as a 6504, but simply by checking the commands and
executing them on the host. This provides a fast FDC emulation, but
disallows the sending the FDC processor commands to execute code.
Applications where this is necessary are believed to be rather seldom.
Only the format command uses this feature, but this is checked for.

The dual disk drive 2040 emulates one of the very first CBM disk
drives. This drive has DOS version 1. DOS1 uses an own disk type, that
is closely related to the 1541 disk image. Only on tracks 18-24 DOS1
disks have a sector more than 1541 disks. DOS1 disk images have the
extension .d67.

The dual disk drives 3040 and 4040 use the same logical disk format as
the VC1541 and the 2031. In fact, the 4040 was the first disk with DOS
version 2. The 3040 emulated here originally was the same as 2040, only
for the european 30xx PET series. As many of the original DOS1 disk
drives were upgraded (a simple ROM upgrade!) to DOS2, I use the 3040
number for a DOS 2.0 disk drive, and 4040 for a revised DOS 2 disk
drive. It is, however, not yet clear whether the disks here are write
compatible to the 1541, as rumors exist that the write gap between
sectors is different. But read compatible they are. As VICE emulates
the FDC processor in C and not as 6504 emulation, this does not matter
in VICE.

The drives 1001, 8050 and 8250 do actually have the very same DOS ROM.
Only the code in the FDC is different, which is taken care of by VICE.
So for all three of those disk drives, only `dos1001' is needed. The
DOS version used is 2.7.


@EndNode

@Node "Supported file formats" "vice.guide/Supported file formats"
@Next "Common problems"
@Prev "Disk drive emulation"
@Toc "Preface"

Supported file formats
======================

VICE supports the most popular Commodore file formats:

   * `X64' (preferred) or `D64' disk image files; Used by the 1541,
     2031, 3040, 4040 drives.

   * `G64' GCR-encoded 1541 disk image files

   * `P64' NRZI flux pulse disk image files

   * `D67' CBM2040 (DOS1) disk image format

   * `D71' VC1571 disk image format

   * `D81' VC1581 disk image format

   * `D80' CBM8050 disk image format

   * `D82' CBM8250/1001 disk image format

   * `D1M' FD2000/FD4000 DD disk image format

   * `D2M' FD2000/FD4000 HD disk image format

   * `D4M' FD4000 ED disk image format

   * `T64' tape image files (read-only)

   * `P00' program files

   * `CRT' C64 cartridge image files

An utility (`c1541', see @{"c1541" Link "c1541"}) is provided to allow transfers and
conversions between these formats.

Notice that the use of the `X64' file format is depreciated now.

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

See @{"File formats" Link "File formats"}. for a technical description of the supported file
formats.


@EndNode

@Node "Common problems" "vice.guide/Common problems"
@Prev "Supported file formats"
@Toc "Preface"

Common problems
===============

This section tries to describe the most common known problems with VICE,
and how to resolve them.


 @{" Sound problems " Link "Sound problems"} 
 @{" Shared memory problems " Link "Shared memory problems"} 
 @{" Printer problems " Link "Printer problems"} 
 @{" PET keyboard problems " Link "PET keyboard problems"} 


@EndNode

@Node "Sound problems" "vice.guide/Sound problems"
@Next "Shared memory problems"
@Prev "Common problems"
@Toc "Common problems"

Sound problems
--------------

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,
the sound code is the least portable part of the emulator and has not
yet been thoroughly tested on all the supported platforms.

Linux, AIX and SGI systems should play sound without any problems; if
you are running Linux please use a 2.x kernel, 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...

Some problems have been reported with the proprietary version of the
Open Sound System for Linux.  With a Crystal sound card, sound output
was significantly delayed and, apparently, the allocated buffer size was
completely wrong.  This is not a VICE bug, but rather an OSS bug.


@EndNode

@Node "Shared memory problems" "vice.guide/Shared memory problems"
@Next "Printer problems"
@Prev "Sound problems"
@Toc "Common problems"

Shared memory problems
----------------------

If you cannot start VICE because you get errors about shared memory, try
to run it with the `+mitshm' command-line option.   This will
completely disable usage of the MITSHM extensions, that are normally
used to speed up the emulation window updates.  Of course, this will
also result in a big loss in speed.

Reasons for this failure could be:

   * IPC support has been disabled at the system level; some system
     administrators disable this for security reasons.  If *you* are the
     system administrator, use a kernel that has IPC support compiled
     in and enabled.

   * You are attempting to run the emulator across the network (i.e.,
     the emulator runs on one machine, and the output is displayed on
     another machine that works as an X terminal) and for some reason
     VICE does not recognize this fact.  In this case, you have found a
     bug, so please report it to us.

If you want to avoid running the emulator with `+mitshm' every time,
run it once with `+mitshm' and then choose "Save settings" from the
right-button menu.


@EndNode

@Node "Printer problems" "vice.guide/Printer problems"
@Next "PET keyboard problems"
@Prev "Shared memory problems"
@Toc "Common problems"

Printer problems
----------------

VICE supports the emulation of a printer either on the userport or as
IEC device 4. Unfortunately the Commodore IEC routines do not send all
commands to the IEC bus. For example an `OPEN 1,4' is not seen on the
IEC bus. Also a `CLOSE 1' after that is not seen. VICE can see from
printing that there was an `OPEN', but it cannot see when the close
was. Also a "finish print job" cannot be seen on the userport device.
To flush the printer buffer (write to `print.dump' or to the printer)
now a menu entry can be used. Disabling and re-enabling the printer
should work as well.

The printing services have not been extensively tested but apart from
the problem mentioned above it should work fine now.


@EndNode

@Node "PET keyboard problems" "vice.guide/PET keyboard problems"
@Prev "Printer problems"
@Toc "Common problems"

PET keyboard problems
---------------------

If you find that the German keyboard mapping (plus German charset) does
not print uppercase umlauts, then you are right.  The umlauts replace
the [,\ and ] characters in the charset. The keys that make these
characters do not have a different entry in the PET editor ROM tables
when shifted.  Thus it is not possible to get the uppercase umlauts in
the editor.  Nevertheless other programs are reported to change the
keyboard mapping table and thus allow the use of the shifted
(uppercase) umlauts.

Anyway, the VICE keyboard mappings are far from being perfect and we
are open to any suggestions.


@EndNode

@Node "Usage" "vice.guide/Usage"
@Next "System files"
@Prev "Preface"
@Toc "Main"

Invoking the emulators
**********************

The names of the available emulators are:

   * `vsid', the SID player

   * `x64', the fast C64 emulator

   * `x64sc', the accurate C64 emulator

   * `x64dtv', the C64DTV emulator

   * `x128', the C128 emulator

   * `xvic', the VIC20 emulator

   * `xpet', the PET emulator

   * `xplus4', the PLUS4 emulator

   * `xcbm2', the CBM-II emulator (CRTC models)

   * `xcbm5x0', the CBM-II emulator (VIC-II models)

   * `xscpu64', the SCPU64 emulator

You can run each of them by simply typing the name from a shell or by
configuring your window manager for example to use them to open disk
images.

If you want to look at the log output, or use the monitor in a port
which does not have a dedicated monitor UI yet (such as the XAW port),
you should always run them from a terminal window such as `xterm' or
`rxvt'.  For example, you could do

     xterm -e x64


 @{" Command-line initialization " Link "Command-line initialization"} 
 @{" Command-line autostart " Link "Command-line autostart"} 


@EndNode

@Node "Command-line initialization" "vice.guide/Command-line initialization"
@Next "Command-line autostart"
@Prev "Usage"
@Toc "Usage"

Command-line options used during initialization
===============================================

There are several options you can specify on the command line.  Some of
them are used to specify emulation settings and will be described in
detail later (see @{"Settings and resources" Link "Settings and resources"} for a complete list).  The
remaining options are used only to give usage information or to
initialize the emulator in some way:

`-help'
`-?'
     List all the available command-line options and their meaning.

`-default'
     Set default resources (see @{"Settings and resources" Link "Settings and resources"}).  This will
     override all the settings specified before, but not the settings
     specified afterwards on the command line.

`-config <filename>'
     Specify config file

`-logfile <name>'
     Specify log file name (`LogFileName').

`-verbose'
     Enable verbose log output.

`-keybuf <string>'
     Put the specified string into the keyboard buffer.

`-console'
     Console mode (for music playback)

`-chdir <directory>'
     Change the working directory.

`-autostart <name>'
     Autostart <name> (see @{"Command-line autostart" Link "Command-line autostart"}).

`-autoload <name>'
     Attach and autoload tape/disk image <name>

`-1 <Name>'
     Attach <Name> as a tape image file.

`-8 <Name>'
`-9 <Name>'
`-10 <Name>'
`-11 <Name>'
     Attach <Name> as a disk image to device 8, 9, 10 or 11.

`-attach8ro'
`-attach9ro'
`-attach10ro'
`-attach11ro'
     Attach disk image for drive #8-11 read only
     (`AttachDevice8Readonly=1', `AttachDevice9Readonly=1',
     `AttachDevice10Readonly=1', `AttachDevice11Readonly=1') (all
     emulators except vsid).

`-attach8rw'
`-attach9rw'
`-attach10rw'
`-attach11rw'
     Attach disk image for drive #8-11 read write (if possible)
     (`AttachDevice8Readonly=0', `AttachDevice9Readonly=0',
     `AttachDevice10Readonly=0', `AttachDevice11Readonly=0') (all
     emulators except vsid).


@EndNode

@Node "Command-line autostart" "vice.guide/Command-line autostart"
@Prev "Command-line initialization"
@Toc "Usage"

Autostarting programs from the command-line
===========================================

It is possible to let the emulator "autostart" a disk or tape image
file, by simply specifying its name as the *last* argument on the
command line, for example

     x64 lovelygame.x64.gz

will start the C64 emulator, attaching `lovelygame.x64.gz' as a disk
image and running the first program on it.  You can also specify the
name of the program on the fisk image by appending a colon (`:') the
name itself to the argument; for example

     x64 "lovelygame.x64.gz:run me"

will run the program named `run me' on `lovelygame.x64.gz' instead of
the first one.

Using the command-line option `-autostart' is equivalent; so the same
result can be obtained with

     x64 -autostart "lovelygame.x64.gz:run me"

If you specify a raw CBM or P00 file, the emulator will setup the file
system based drive emulation so that it is enabled and accesses the
directory containing the file first.  This is a very convenient way to
start multi-file programs stored in file system directories and not
requiring "true" drive emulation.

See @{"Disk and tape images" Link "Disk and tape images"}. for more information about images and
autostart.


@EndNode

@Node "System files" "vice.guide/System files"
@Next "Basics"
@Prev "Usage"
@Toc "Main"

System files
************

In order to work properly, the emulators need to load a few system
files:

   * the "system ROMs", raw binary files containing copies of the
     original ROMs of the machine you are emulating;

   * the "keyboard maps", text files describing the keyboard layout;

   * the "palette files", text files describing the colors of the
     machine you are emulating.

   * the "romset files", text files describing the different ROMs to
     load.

The place where they will be searched for depends on the value of the
`Directory' resource, which is a colon (`:')-separated search path
list, like the UNIX `PATH' environment variable.  The default value is

     PREFIX/lib/vice/EMU:$HOME/.vice/EMU:BOOTPATH/EMU

Where `PREFIX' is the installation prefix (usually `/usr/local'), `EMU'
is the name of the emulated machine (`C64', `C64DTV', `C128', `PET',
`PLUS4', `CBM-II', `SCPU64' or `VIC20') and `BOOTPATH' is the directory
where the executable resides.  The disk drive ROMs are looked for in a
directory with `EMU' set to `DRIVES'. `$HOME' is the user's home
directory.

For example, if you have the C64 emulator installed in

     /usr/local/bin/x64

then the value will be

     /usr/local/lib/vice/C64:$HOME/.vice/C64:/usr/local/bin/C64

And system files will be searched for under the following directories,
in the specified order:

  1. `/usr/local/lib/VICE/C64'

  2. `$HOME/.vice/C64'

  3. `/usr/local/bin/C64'

System files can still be installed in a different directory if you
specify a complete path instead of just a file name.  For example, if
you specify `./kernal' as the kernal image name, the kernal image will
be loaded from the current directory.  This can be done by using
command-line options or by modifying resource values (see
@{"Resource files" Link "Resource files"}).


 @{" ROM files " Link "ROM files"}                    Files containing dumps of the original ROMs.
 @{" Keymap files " Link "Keymap files"}                 Files describing the keyboard layout.
 @{" Palette files " Link "Palette files"}                Files defining the machine's colors.
 @{" Romset files " Link "Romset files"}                 Files defining the machine's ROM set.


@EndNode

@Node "ROM files" "vice.guide/ROM files"
@Next "Keymap files"
@Prev "System files"
@Toc "System files"

ROM files
=========

Every emulator requires its own ROM set.  For the VIC20 and the C64, the
ROM set consists of the following files:

   * `kernal',  the Kernal ROM (8 KBytes)

   * `basic', the Basic ROM (8 KBytes)

   * `chargen', the character generator ROM (4 Kbytes)

The C128 needs the following files:

   * `kernal', the Kernal ROM (8 Kbytes)

   * `basic', the Basic + Editor ROM (32 Kbytes)

   * `chargen', the character generator ROM (4 Kbytes)

The C128, VIC20, SCPU64 and C64 emulators also need the following DOS
ROMs for the hardware-level emulation of the 1540, 1541, 1571, 1581,
2000 and 4000 disk drives:

   * `dos1540', the 1540 drive ROM (16 Kbytes)

   * `dos1541', the 1541 drive ROM (16 Kbytes)

   * `dos1541II', the 1541-II drive ROM (16 Kbytes)

   * `dos1571', the 1571 drive ROM (32 Kbytes)

   * `dos1581', the 1581 drive ROM (32 Kbytes)

   * `dos2000', the 2000 drive ROM (32 Kbytes)

   * `dos4000', the 4000 drive ROM (32 Kbytes)

In addition to those all emulators can handle a parallel IEEE488
interface (the C64 and C128 via `$df**' extension, the VIC20 via
VIC1112 emulation) so they also need the DOS ROM for the IEEE disk
drives:

   * `dos2031', the 2031 drive ROM (16 Kbytes) (DOS 2.6, Commodore ROM
     images 901484-03 and 901484-05)

   * `dos2040', the 2040 drive ROM (8 Kbytes) (DOS 1, Commodore ROM
     images 901468-06, 901468-07)

   * `dos3040', the 3040 drive ROM (12 Kbytes) (DOS 2, Commodore ROM
     images 901468-11, 901468-12 and 901468-13)

   * `dos4040', the 4040 drive ROM (12 Kbytes) (DOS 2, Commodore ROM
     images 901468-14, 901468-15 and 901468-16)

   * `dos1001', the 1001/8050/8250 drive ROM (16 Kbytes) (DOS 2.7,
     Commodore ROM images 901887-01 and 901888-01)

Note that there are other DOS images on the internet. The DOS 2.5 images
might be used with the 8050, but it cannot handle the double sided
drives of the 1001 and 8250 and it is not supported by VICE.

The PET emulator uses an expanded setup, because there are three major
versions of the Basic and the Kernal, and many versions of the Editor
ROM. In addition there are cartridge ROM sockets.

The Kernal files contain the memory from range $F000-$FFFF, the Basic
ROMs either the range $C000-$DFFF or $B000-$DFFF.  To handle the
different screen sizes and keyboards, different so-called "editor-ROMs"
for the memory range $E000-$E800 are provided.  The PET ROMs have the
following names:

   * `kernal1', the PET2001 Kernal ROM (4 KBytes) (Commodore ROM images
     901447-06 and 901447-07)

   * `kernal2', the PET3032 Kernal ROM (4 KBytes) (Commodore ROM image
     901465-03)

   * `kernal4', the PET4032/8032 Kernal ROM (4 KBytes) (Commodore ROM
     image 901465-22)

   * `basic1', the PET2001 Basic 1 ROM (8 KBytes) (Commodore ROM images
     901447-09, 901447-02, 901447-03, 901447-04.bin.  The -09 ROM is
     the revised -01 ROM)

   * `basic2', the PET3032 Basic 2 ROM (8 KBytes) (Commodore ROM images
     901465-01 and 901465-01)

   * `basic4', the PET4032/8032 Basic 4 ROM (12 KBytes) (Commodore ROM
     images 901465-23, 901465-20 and 901465-21.  The -23 ROM is a
     revised -19 ROM)

   * `edit1g', the PET2001 editor for graphics keyboards (2 KBytes)
     (Commodore ROM image 901447-05)

   * `edit2b', the PET3032 editor for business keyboards (2 KBytes)
     (Commodore ROM image 901474-01)

   * `edit2g', the PET3032 editor for graphics keyboards (2 KBytes)
     (Commodore ROM image 901447-24)

   * `edit4g40', the PET4032 editor for graphics keyboards (2 KBytes)
     (Commodore ROM image 901498-01)

   * `edit4b40', the PET4032 editor for business keyboards (2 KBytes)
     (Commodore ROM image 901474-02)

   * `edit4b80', the PET8032 editor for business keyboards (2 KBytes)
     (Commodore ROM image 901474-04-?)

   * `chargen', the character generator ROM (2k).  It has two sets with
     128 chars each.  The second (inverted) half of each set is
     computed from the first half by inverting it.  This is a PET
     hardware feature.  (Commodore ROM image 901447-10)

   * `chargen.de', the character generator ROM (2k). This version is a
     patched German charset, with the characters [, \ and ] replaced by
     umlauts.  It has been provided by U. Guettich and he reports that
     it is supported by some programs.

   * `characters.901640-01.bin', the SuperPET character generator ROM
     (4k).  The first half is the same as `chargen', the second half
     contains, instead of an upper and lower case set, an ASCII
     character set and an APL character set. For these sets, the screen
     code is equal to the ASCII/APL code.

   * `waterloo-[abcdf]000.901898-0[1-5].bin',
     `waterloo-e000.901897-01.bin'.  The Waterloo system ROMs.

   * `hre-9000.324992-02.bin' HiRes Emulator (at $9000) and
     `hre-a000.324993-02.bin' HiRes BASIC (at $A000).  These are the
     two roms for supporting the HRE on the 8296.  The ROMs are
     initialized by the command `SYS 36864'.

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.

Also, you can specify replacements for the basic ROM at $B000-$DFFF
with the `-petromBasic' option and for the editor ROM at $E000-$E7FF
with the `-petromEditor' option.

The CBM-II emulator again uses another setup.  For those models the
kernal used is the same for all.  However, for different amounts of
memory exist different versions of the BASIC ROMs.  The 128k RAM version
(C610, C710, B128) uses one bank of 64k for the BASIC text and another
one for all the variables.  The 256k RAM version uses one bank for text,
one for variables, one for arrays and one for strings.

Also the character generator ROMs have a format different from the
above.  The other character ROMs have 8 bytes of pixel data per
character.  Those ROMs have 16 bytes per character instead.  The C6x0
only uses the first 8 of it, but the C7x0 uses 14 lines per character
and needs those increased ROMs.  Both ROMs hold, like the PET, two
character sets with 128 characters each.  Again the second half of the
full (256 char) character set is computed by inverting.

   * `kernal', the KERNAL (8k) for the business machines (6xx/7xx)

   * `kernal.500', the KERNAL (8k) for the personal machine (510)
     (901234-02)

   * `basic.128', the CBM-II 128k BASIC (16k)

   * `basic.256', CBM-II 256k BASIC (16k)

   * `basic.500', C510 BASIC (16k) (901236-02 + 901235-02)

   * `chargen.500', character generator ROM for the C5x0 (4k)
     (901225-01)

   * `chargen.600', character generator ROM for the C6x0 (4k)

   * `chargen.700', character generator ROM for the C7x0 (4k)

The SCPU64 needs the following files:

   * `scpu64', the SCPU64 ROM (128 Kbytes)

   * `chargen', the character generator ROM (4 Kbytes)


@EndNode

@Node "Keymap files" "vice.guide/Keymap files"
@Next "Palette files"
@Prev "ROM files"
@Toc "System files"

Keymap files
============

"Keymap files" are used to define the keyboard layout, defining which
key (or combination of keys) must be mapped to each keysym.

In other words, the keyboard emulation works like this: whenever the
user presses or releases a key while the emulation window has the input
focus, the emulator receives an X-Window event with a value that
identifies that key.  That value is called a "keysym" and is unique to
that key.  The emulator then looks up that keysym in an internal table
that tells it which key(s) to press or release on the emulated keyboard.

This table is described by the keymap file, which is made up of lines
like the following:

     KEYSYM ROW COLUMN SHIFTFLAG

Where:

   * `KEYSYM' is a string identifying the keysym: you can use the `xev'
     utility (shipped with the X Window system) to see what keysym is
     bound to any key;

   * `ROW' and `COLUMN' identify the key on the emulated keyboard;

   * `SHIFTFLAG' can have one of the following values:

        * `0': the key is never shifted;

        * `1': the key is shifted;

        * `2': the key is the left shift;

        * `4': the key is the right shift;

        * `8': the key can be (optionally) shifted by the user.

The `SHIFTFLAG' is useful if you want certain keys to be "artificially"
shifted by the emulator, and not by the user.  For example, F2 is
shifted on the C64 keyboard, but you might want it to be mapped to the
unshifted F2 key on the PC keyboard.  To do so, you just have to use a
line like the following:

     F2 0 4 1

where `0' and `4' identify the key (row 0, column 4 on the keyboard
matrix), and `1' specifies that every time the user presses F2 the
shift key on the C64 keyboard must be pressed.

There are also some special commands you can put into the keyboard file;
they are recognized because they start with an exclamation mark:

   * `!CLEAR' clears the currently loaded keyboard map; it is necessary
     to put this at the beginning of the file if you want the keymap
     file to override all of the current internal settings;

   * `!LSHIFT', `!RSHIFT', followed by a row and a column value,
     specify where the left and right shift keys are located on the
     emulated keyboard; for example, C64 default keymaps will specify

          !LSHIFT 1 7
          !RSHIFT 6 4

Any line starting with the `#' sign, instead, is completely ignored.
This is useful for adding comments within the keymap file.

VICE keymap files have the `.vkm' default extension, and every emulator
comes with a default positional mapping and a default symbolic mapping.


@EndNode

@Node "Palette files" "vice.guide/Palette files"
@Next "Romset files"
@Prev "Keymap files"
@Toc "System files"

Palette files
=============

"Palette files" are used to specify the colors used in the emulators.
They are made up of lines like the following:

     RED GREEN BLUE DITHER

where `RED', `GREEN' and `BLUE' are hexadecimal values ranging from 0
to FF and specifying the amount of red, green and blue you want for
each color and `DITHER' is a 4-bit hexadecimal number specifying the
pattern you want when rendering on a B/W display.

You have to include as many lines as the number of colors the emulated
machine has, and the order of the lines must respect the one used in the
machine (so the N'th line must contain the specifications for color N -
1 in the emulated machine).

Lines starting with the `#' sign are completely ignored.  This is
useful for adding comments (such as color names) within the palette
file.

For example, the default PET palette file (which has only two colors, 0
for background and 1 for foreground), looks like the following:

     #
     # VICE Palette file
     #
     # Syntax:
     # Red Green Blue Dither
     #
     
     # Background
     00 00 00 0
     
     # Foreground
     00 FF 00 F


@EndNode

@Node "Romset files" "vice.guide/Romset files"
@Prev "Palette files"
@Toc "System files"

Romset files
============

The Romset files are not used by default on all emulators.  You might
have recognized that the names of the ROM images are saved in
resources. Loading a Romset file now just means a `shortcut' to
changing all the resources with ROM image names and reloading the ROMs.

The PET and CBM-II emulators use this feature to change between the
different ROM versions available for those machines. E.g. the Romset
file for the PET 2001 is

     KernalName="pet2001"
     EditorName=
     ChargenName="chargen"
     RomModule9Name=
     RomModuleAName=
     RomModuleBName=

As you can see, the file even uses the same syntax as the resource
file, it is just a bit stripped down.

While a Romset file is processed, the directory where the Romset file
was found is temporarily prepended to the search path (`Directory'
resource). This also means that if you have a setting for `Directory'
in it, its effect is limited to the Romset file itself.


@EndNode

@Node "Basics" "vice.guide/Basics"
@Next "Settings and resources"
@Prev "System files"
@Toc "Main"

Basic operation
***************

This section describes the basic things you can do once the emulator
has been fired up.


 @{" Emulation window " Link "Emulation window"}             The window the emulator runs in.
 @{" Menus " Link "Menus"}                        Using emulator menus.
 @{" Help " Link "Help"}                         Getting help if you are stuck.
 @{" File Selector " Link "File Selector"}                Selecting files interactively.
 @{" Disk and tape images " Link "Disk and tape images"}         Using virtual disks and tapes.
 @{" Reset " Link "Reset"}                        Resetting the virtual machines.


@EndNode

@Node "Emulation window" "vice.guide/Emulation window"
@Next "Menus"
@Prev "Basics"
@Toc "Basics"

The emulation window
====================

When the emulator is run, the screen of the emulated machine is
displayed in a standard X Window which we will call the "emulation
window".  This window will be updated in real time, displaying the same
contents that a real monitor or TV set would.

Below the emulation window there is an area which is used to display
information about the state of the emulator; we will call this area the
"status bar".

On the extreme left of the status bar, there is a "performance meter".
This displays the current relative speed of the emulator (as a
percentage) and the update frequency (in frames per second).  All the
machines emulated are PAL, so the update frequency will be 50 frames
per second if your system is fast enough to allow emulation at the
speed of the real machine.

On the extreme right of the status bar, there is a "drive status
indicator".  This is only visible if the hardware-level ("True") 1541
emulation is turned on.  In that case, the drive status indicator will
contain a rectangle emulating the drive LED and will display the current
track position of the drive's read/write head.


@EndNode

@Node "Menus" "vice.guide/Menus"
@Next "Help"
@Prev "Emulation window"
@Toc "Basics"

Using the menus
===============

It is possible to execute some commands and change emulation parameters
while the emulator is running: when the pointer is over the emulation
window, two menus are available by pressing either the left or right
mouse buttons.  The left mouse button will open the "command menu" from
which several emulation-related commands can be executed; the right
mouse button will open the "settings menu" from which emulation
parameters can be changed.  The basic difference between the command and
the settings menu is that, while commands have only effect on the
current session, settings can be saved and later used with the "Save
settings" and "Load settings" right-button menu items, respectively.
"Restore default settings" restores the factory defaults.  See
@{"Settings and resources" Link "Settings and resources"}. for more information about how settings work in
VICE.

Sometimes commands can be reached via "shortcuts" or "hotkeys", i.e.,
it is possible to execute them by pressing a sequence of keys instead
of going through the menu with the mouse.  Where shortcuts exist, they
are displayed in parentheses at the right edge of the menu item.  In
VICE, all shortcuts must begin with the Meta or Alt key.  So, for
example, to attach a disk image to drive #8 (the corresponding menu
item displays "M-8"), you have to press the Meta (or Alt) and then 8.

Note that no other key presses are passed on to the emulated machine
while either Meta or Alt are held down.


@EndNode

@Node "Help" "vice.guide/Help"
@Next "File Selector"
@Prev "Menus"
@Toc "Basics"

Getting help
============

At any time, if you get stuck or do not remember how to perform a
certain action, you can use the "Browse manuals" command (left button
menu).  This will popup a browser and open the HTML version of this
documentation.  Notice that this requires VICE to be properly (and
fully) installed with a `make install'.

The browser can be specified via the `HTMLBrowserCommand' string
resource (see @{"Settings and resources" Link "Settings and resources"} for information about resources).
Every `%s' in the string will be replaced with a URL to the VICE HTML
pages.


@EndNode

@Node "File Selector" "vice.guide/File Selector"
@Next "Disk and tape images"
@Prev "Help"
@Toc "Basics"

Using the file selector
=======================

In those situations where it is necessary to specify a file name, all
of the VICE emulators will pop up a file selector window allowing you
to select or specify a file interactively.

To the left of the file selector, there is a list of ancestor
directories: by clicking on them, you can ascend the directory tree.  To
the right, there is a list of the files in the current directory; files
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 the active selection.

At the top, there is a "directory box", with the complete path of the
current directory, and a "file name box", with the name of the
currently selected file.  At the bottom there are two buttons: "OK"
confirms the selected file and "Cancel" abandons the file selector
without cancelling the operation.

It is also possible to specify what files you want to show in the file
selector by writing an appropriate shell-like pattern in the directory
box; e.g., `~/*.[dx]64' will only show files in the home directory whose
name ends with either `.d64' or with `.x64'.


@EndNode

@Node "Disk and tape images" "vice.guide/Disk and tape images"
@Next "Reset"
@Prev "File Selector"
@Toc "Basics"

Using disk and tape images
==========================

The emulator is able to emulate disk drives and tape recorders if
provided with suitable "disk images" or "tape images".  An "image" is a
raw dump of the contents of the media, and must be "attached" before
the emulator can use it.  "Attaching" a disk or tape image is like
"virtually" inserting a diskette or a cassette into the disk drive or
the tape recorder: once an image is attached, the emulator is able to
use it as a storage media.

There are five commands (in the left button menu) that deal with disk
and tape images:

   * Attach Disk Image

   * Detach Disk Image

   * Attach Tape Image

   * Detach Tape Image

   * Smart-attach a file

The first four commands are used to insert and remove the virtual disks
and cassettes from the respective units.  On the other hand, the last
commands tries to guess the type of the image you are attaching from
its name and size, and attaches it to the most reasonable device.

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 when you
reach its end.

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 (see @{"Autostart" Link "Autostart"}), this allows you to autostart these
particular files as well.

You can attach a disk for which you do not have write permissions: when
this happens, the 1541 emulator will emulate a write-protected disk.
This is also useful if you want to prevent certain disk images from
being written to; in the latter case, just remove the write permission
for that file, e.g., by doing a `chmod a-w'.


 @{" Previewing contents " Link "Previewing contents"}          Looking into the image before attaching it.
 @{" Autostart " Link "Autostart"}                    Starting a program automagically.
 @{" Compressed files " Link "Compressed files"}             Dealing with compressed files.
 @{" Zipcode and Lynx " Link "Zipcode and Lynx"}             Using Zipcoded ([1-4]!*) and Lynx files.


@EndNode

@Node "Previewing contents" "vice.guide/Previewing contents"
@Next "Autostart"
@Prev "Disk and tape images"
@Toc "Disk and tape images"

Previewing the image contents
-----------------------------

It is possible to examine the directory of a disk or tape image before
attaching it.  Just press the "Contents" button in the file selector
window and a new window will pop up with the contents of the selected
image.

Notice that this function automatically translates the directory from
PETSCII to ASCII; but, due to differences in the two encodings, it is
not always possible to translate all the characters, so you might get
funny results when "weird" characters such as the semi-graphical ones
are being used.


@EndNode

@Node "Autostart" "vice.guide/Autostart"
@Next "Compressed files"
@Prev "Previewing contents"
@Toc "Disk and tape images"

"Autostarting" an image
-----------------------

If you want to reset the machine and run the first program on a certain
image without typing any commands at the Commodore BASIC prompt, you can
use the "Autostart" button in the file selector window after selecting
a proper disk or tape image file.

Notice that, if true drive emulation is turned on, it will be turned off
before running the program and then turned on again after it has been
loaded.  This way, you get the maximum possible speed while loading the
file, but you do not lose compatibility once the program itself is
running.

This method is not completely safe, because some autostarting methods
might cause the true drive emulation not to be turned on again.  In such
cases, the best thing to do is to disable kernal traps (which will cause
true drive emulation to be always kept turned on), or to manually load
the program with true drive emulation turned on.


@EndNode

@Node "Compressed files" "vice.guide/Compressed files"
@Next "Zipcode and Lynx"
@Prev "Autostart"
@Toc "Disk and tape images"

Using compressed files
----------------------

It is also possible to attach disk or tape images that have been
compressed through various algorithms; compression formats are
identified from the file extension.  The following formats are supported
(the expected file name extension is in parenthesis):

   * GNU Zip (`.gz' or `.z');

   * BZip version 2 (`.bz2');

   * PkZip (`.zip');

   * GNU Zipped TAR archives (`.tar.gz', `.tgz');

   * Zoo (`.zoo').

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 contain only a single
file.

Windows and DOS don't contain the needful programs to handle compressed
archives. Get gzip and unzip for Windows at
ftp://ftp.freesoftware.com/pub/infozip/WIN32 and for DOS at
ftp://ftp.freesoftware.com/pub/infozip/MSDOS. Don't use pkunzip for
DOS, it doesn't work. The programs to use BZip2 archives may be found
at http://sourceware.cygnus.com/bzip2.  Just put the programs
(unzip.exe, gzip.exe, bzip2.exe) into a directory of your search path
(e.g. C:\DOS or C:\WINDOWS\COMMAND; have a look at the PATH variable).


@EndNode

@Node "Zipcode and Lynx" "vice.guide/Zipcode and Lynx"
@Prev "Compressed files"
@Toc "Disk and tape images"

Using Zipcode and Lynx images
-----------------------------

Since version 0.15, the VICE emulators have been able to attach disks
packed with Zipcode or Lynx directly, removing the need to manually
convert them into `D64' or `X64' files with `c1541'.  This is achieved
by automatically invoking `c1541', letting it decode the file into a
temporary image and attaching the resulting temporary image read-only.
For this to work, the directory containing `c1541' must be in your
`PATH'.

This uses the `-unlynx' and `-zcreate' options of `c1541' (see
@{"c1541 commands and options" Link "c1541 commands and options"}); these commands are not very reliable yet,
and could fail with certain kinds of Lynx and Zipcode images (for
example, they cannot deal with `DEL' files properly).  So please use
them with caution.

Lynx files usually come as `.lnx' files which are unpacked into single
disk images.  On the other hand, Zipcode files do not have a particular
extension (although `.z64' is sometimes used), and represent a disk by
means of component files, named as follows:

   * `1!NAME'

   * `2!NAME'

   * `3!NAME'

   * `4!NAME'

If you attach as a disk image (or smart-attach) any one of these files,
the emulator will simply pick up the other three (by examining the
name) and then build a disk image using all four.


@EndNode

@Node "Reset" "vice.guide/Reset"
@Prev "Disk and tape images"
@Toc "Basics"

Resetting the machine
=====================

You can reset the emulated machine at any time by using the "Reset"
command from the command menu.  There are two types of reset:

   * "soft reset", which simply resets the CPU and all the other chips;

   * "hard reset", which also clears up the contents of RAM.

A "soft reset" is the same as a hardware reset achieved by pulling the
RESET line down; a "hard reset" is more like a power on/power off
sequence in that it makes sure the whole RAM is cleared.

It is possible that a soft reset may not be enough to take the machine
to the OS initialization sequence: in such cases, you will have to do a
hard reset instead.

This is especially the case for the CBM-II emulators.  Those machines
examine a memory location and if they find a certain "magic" value they
only do what you know from the C64 as `Run/Stop-Restore'.  Therefore,
to really reset a CBM-II use hard reset.


@EndNode

@Node "Settings and resources" "vice.guide/Settings and resources"
@Next "Machine-specific features"
@Prev "Basics"
@Toc "Main"

Settings and resources
**********************

In the VICE emulators, all the settings are stored in entities known as
called "resources".  Each resource has a name and a value which may be
either an integer or a string.  Integer values are often used as
boolean values with the usual convention of using zero for "false" and
any other value for "true".

Resource values can be changed via the right-button menu (the
"settings" menu), via command-line options or via the "resource file".

The "resource file" is a human-readable file containing resource
values: it is called `vicerc' and is stored in the directory `.vice/'
in the user's home directory.  It is possible to dump the current
values of the resources into that file or load the values stored into
that file as the current values, at any time.  This is achieved with
the "Save settings" and "Load settings" right menu items.  A third menu
item, "Restore Default Settings", can be used to reset all the values
to the factory defaults.

A special resource, `SaveResourcesOnExit', if set to a non zero value,
causes the emulator to ask you if you want to save the current
(changed) settings before exiting, and can be toggled with the "Save
settings on exit" command from the right-button menu.

Notice that not all the resources can be changed from the menus; some of
them can only be changed by manually modifying the resource file or by
using command-line options.


 @{" Resource files " Link "Resource files"}               Format of resource files.
 @{" Resources and command-line " Link "Resources and command-line"}   Specifying settings from the
                                command-line

 @{" Performance settings " Link "Performance settings"}         Settings that affect speed of execution.
 @{" Video settings " Link "Video settings"}               Settings dealing with the video output.
 @{" Keyboard settings " Link "Keyboard settings"}            Settings relative to the keyboard emulation.
 @{" Control port settings " Link "Control port settings"}        Settings that control what device is emulated on available control ports.
 @{" Sound settings " Link "Sound settings"}               Settings that control audio playback
 @{" Drive settings " Link "Drive settings"}               Settings that control disk-drive emulation.
 @{" Peripheral settings " Link "Peripheral settings"}          Settings for emulated external devices.
 @{" RS232 settings " Link "RS232 settings"}               Settings for the RS232 emulation.
 @{" Monitor settings " Link "Monitor settings"}             Settings for the built-in monitor.
 @{" Misc settings " Link "Misc settings"}                Other settings.


@EndNode

@Node "Resource files" "vice.guide/Resource files"
@Next "Resources and command-line"
@Prev "Settings and resources"
@Toc "Settings and resources"

Format of resource files
========================

A resource file is made up of several sections; sections have the
purpose of separating the resources of a certain emulator from the ones
of the other emulators.  A section starts with the name of an emulator
in brackets (e.g., `[C64]') and ends when another section starts or
when the file ends.

Every line in a section has the following format:

     RESOURCE=VALUE

where `RESOURCE' is the name of a resource and `VALUE' is its assigned
value.  Resource names are case-sensitive and resource values are
either strings or integers.  Strings must start and end with a double
quote character (`"'), while integers must be given in decimal notation.

Here is an example of a stripped-down `.vice/vicerc' file:

     [VIC20]
     HTMLBrowserCommand="netscape %s"
     SaveResourcesOnExit=0
     FileSystemDevice8=1
     FSDevice8ConvertP00=1
     FSDevice8Dir="/home/ettore/cbm/stuff/vic20p00"
     FSDevice8SaveP00=1
     FSDevice8HideCBMFiles=1
     [C64]
     HTMLBrowserCommand="netscape %s"
     SaveResourcesOnExit=1
     FileSystemDevice8=1
     FSDevice8ConvertP00=1
     FSDevice8Dir="/home/ettore/cbm/stuff/c64p00"
     FSDevice8SaveP00=1
     FSDevice8HideCBMFiles=1

Notice that, when resource values are saved with "Save settings", the
emulator only modifies its own section, leaving the others unchanged.


@EndNode

@Node "Resources and command-line" "vice.guide/Resources and command-line"
@Next "Performance settings"
@Prev "Resource files"
@Toc "Settings and resources"

Using command-line options to change resources
==============================================

Resources can also be changed via command-line options.

Command-line options always override the defaults from `.vice/vicerc',
and their assignments last for the whole session.  So, if you specify a
certain command-line option that changes a certain resource from its
default value and then use "Save Settings", the value specified with
the command-line option will be saved back to the resource file.

Command-line options can begin with with a minus sign (`-') or with a
plus sign (`+').  Options beginning with a minus sign may require an
additional parameter, while the ones beginning with the plus sign never
require one.

Moreover, options beginning with a plus sign always have a counterpart
with the same name, but with a minus sign; in that case, the option
beginning with a minus sign is used to *enable* a certain feature,
while the one beginning with a plus sign is used to *disable* the same
feature (this is an X11 convention).  For example, `-mitshm' enables
support of MITSHM, while `+mitshm' disables it.

Autostart settings
==================

Autostart resources
-------------------

All these resources are available for all emulators except vsid.

`AutostartPrgDiskImage'
     String specifying the filename of the disk image used when
     autostarting a prg file and "copy to D64" is enabled (all
     emulators except vsid).

`AutostartBasicLoad'
     Boolean, if true load to basic start using ,8 when autostarting
     (all emulators except vsid).

`AutostartRunWithColon'
     Boolean, if true put a colon after the load command when
     autostarting (all emulators except vsid).

`AutostartHandleTrueDriveEmulation'
     Boolean, if true handle (enable/disable) True Drive Emulation on
     autostart (all emulators except vsid).

`AutostartWarp'
     Boolean, if true temporarily enable warp mode when autostarting
     (all emulators except vsid).

`AutostartPrgMode'
     Integer specifying the autostart mode for prg files (all emulators
     except vsid).  (0: virtual filesystem, 1: inject to RAM, 2: copy
     to D64)

`AutostartDelayRandom'
     Boolean, enables a short (0-10 frames) random delay on autostart
     (all emulators except vsid).

`AutostartDelay'
     Integer specifying the delay in seconds required to wait for the
     kernal reset routine before autostart. (0: use builtin value for
     standard kernal) When tweaking this value start with 'large'
     values and then lower it, a value that is too small results in
     autostart not happening.  (all emulators except vsid).  (0..1000)

Autostart command-line options
------------------------------

All these command-line options are available for all emulators except
vsid.

`-autostartprgdiskimage <Name>'
     Set disk image for autostart of PRG files (`AutostartPrgDiskImage')
     (all emulators except vsid).

`-basicload'
     On autostart, load to BASIC start (without ',1')
     (`AutostartBasicLoad=1') (all emulators except vsid).

`+basicload'
     On autostart, load with ',1' (`AutostartBasicLoad=0') (all
     emulators except vsid).

`-autostartwithcolon'
     On autostart, use the 'RUN' command with a colon, i.e., 'RUN:'
     (`AutostartRunWithColon=1').  (all emulators except vsid)

`+autostartwithcolon'
     On autostart, do not use the 'RUN' command with a colon; i.e.,
     'RUN' (`AutostartRunWithColon=0') (all emulators except vsid).

`-autostart-handle-tde'
`+autostart-handle-tde'
     Handle/Do not handle True Drive Emulation on autostart
     (`AutostartHandleTrueDriveEmulation=1',
     `AutostartHandleTrueDriveEmulation=0') (all emulators except vsid).

`-autostart-warp'
`+autostart-warp'
     Enable/disable warp mode during autostart (`AutostartWarp=1',
     `AutostartWarp=0') (all emulators except vsid).

`-autostartprgmode <Mode>'
     Set autostart mode for PRG files (`AutostartPrgMode') (all
     emulators except vsid).  (0: virtual filesystem, 1: inject to RAM,
     2: copy to D64)

`-autostart-delay-random'
`+autostart-delay-random'
     Enable/disable random delay on autostart (`AutostartDelayRandom')
     (all emulators except vsid).

`-autostart-delay <seconds>'
     Set initial autostart delay in seconds for the kernal reset
     routine before autostart. (0: use builtin value for standard
     kernal).  When tweaking this value start with 'large' values and
     then lower it, a value that is too small results in autostart not
     happening.  (`AutostartDelay') (all emulators except vsid).
     (0..1000)


@EndNode

@Node "Performance settings" "vice.guide/Performance settings"
@Next "Video settings"
@Prev "Resources and command-line"
@Toc "Settings and resources"

Performance settings
====================

It is possible to control the emulation speed by using the "Maximum
speed" menu item in the right-button menu.  The default setting is
`100', which causes the emulation to never run faster than the real
machine.  A higher value allows the emulator to run faster, a lower one
may force it to run slower.  The setting "No limit" means to run as
fast as possible, without limiting speed.

It is also possible to control the emulator's rate of frame update using
the "Refresh rate" setting; the value ranges from "1/1" (update 1/1 of
the frames of the real machine, that is 50 frames per second) to "1/10"
(update 1 every 10 frames) and can be changed via the "Refresh Rate"
submenu.  The "Auto" setting means to dynamically adapt the refresh
rate to the current speed of the host machine, making sure the maximum
speed specified by the via "Maxium speed" is always reached if
possible.  In any case, the refresh rate will never be worse than 1/10
if this option is specified.

Note that you cannot simultaneously specify "Auto" as the refresh rate
and "No limit" as the maximum speed..

Moreover, a special "warp speed" mode is provided and can be toggled
with the "Enable Warp Mode" menu item.  If this mode is enabled, it
will cause the emulator to disable any speed limit, turn sound emulation
off and use a 1/10 refresh rate, so that it will run at the maximum
possible speed.


 @{" Performance resources " Link "Performance resources"} 
 @{" Performance options " Link "Performance options"} 


@EndNode

@Node "Performance resources" "vice.guide/Performance resources"
@Next "Performance options"
@Prev "Performance settings"
@Toc "Performance settings"

Performance resources
---------------------

`Speed'
     Integer specifying the maximum relative speed, as a percentage.
     `0' stands for "no limit".

`RefreshRate'
     Integer specifying the refresh rate; a value of `n' specifies a
     refresh rate of 1/`n'.  A value of `0' enables automatic frame
     skipping.

`WarpMode'
     Booolean specifying whether "warp mode" is turned on or not.


@EndNode

@Node "Performance options" "vice.guide/Performance options"
@Prev "Performance resources"
@Toc "Performance settings"

Performance command-line options
--------------------------------

`-speed <percent>'
     Specifies the maximum speed as a percentage. `0' stands for "no
     limit" (`Speed').

`-refresh <value>'
     Specifies refresh rate, a value of `n' specifies a refresh rate of
     1/`n'. A value of `0' enables automatic frame skipping
     (`RefreshRate').

`-warp'
`+warp'
     Enable/Disable warp mode (`WarpMode=1', `WarpMode=0').


@EndNode

@Node "Video settings" "vice.guide/Video settings"
@Next "Keyboard settings"
@Prev "Performance settings"
@Toc "Settings and resources"

Video settings
==============

The following right-button menu items control the video output.  On
emulators that include two video chips (like `x128') all options but
XSync exist twice, once for each chip.  XSync is shared between the
video chips.

   * "Video Cache" enables a video cache that can speed up the emulation
     when little graphics activity is going on; it is especially useful
     when you run the emulator on a networked X terminal as it can
     reduce the network bandwidth required.  However, this setting can
     actually make the emulator slower when there is little graphics
     activity and the amount of work needed to maintain the cache is
     greater than the amount of work that would be wasted by not using
     it (if any).

   * "Double Size" toggles "double-size mode", which makes the
     emulation window twice as big.  When emulating a 80-column PET,
     only the height is doubled, so that the aspect ratio is closer to
     that of the real thing.

   * "Double Scan" toggles "double-scan mode", which causes the
     emulator to draw only odd lines when running in double-size mode
     (this saves some CPU time and also makes the emulation window look
     more like an old monitor).

   * `Use XSync()" causes the emulator to call the X11 function
     `XSync()' before updating the emulation window: this might be
     necessary on low-end systems to prevent it from consuming so many
     system resources that it becomes impossible for the user to
     interact with it.


 @{" Video resources " Link "Video resources"} 

using openGL Rastersynchronization under X11
--------------------------------------------

Warning: To get full retro experience with synchronization to the
vertrical raster retrace messing with X11 modelines (resolution and
refresh frequencies) is necessary. This description is a suggestion -
Follow this instructions at your own risk!

The following was tested under Ubuntu Linux (8.04) featuring Xorg
Xserver 1:7.3+10ubuntu and mesa openGL including HW support (NVIDIA
driver) supporting glx version 1.4 supplying GLX_SGI_video_sync.

It is assumed that this works also on other systems supporting the
required extensions.

Preconditions:
   * openGL extension GLX_SGI_video_sync in your X11 setup.    The
     availability of the extension is checked at startup.

   * XRandR extension to switch proper modes (50Hz for PAL, 60Hz for
     NTSC) is mandatory, proper modelines in your /etc/X11/xorg.conf
     must be present.

If your systems lacks 50 or 60Hz modes you might try using `gtf'
(typcally shipped with Xorg, xserver) - see related man page.

You might need to add the output such as:
     # 800x600 # 50.00 Hz (GTF) hsync: 30.90 kHz; pclk: 31.15 MHz
     Modeline "800x600_50.00" 31.15 800 824 904 1008 600 601 604 618 -HSync +Vsync
to you Monitor Section of /etc/X11/xorg.conf and add the resolution to
the `Screen' section.

Sometimes some consistency checks within the display driver drop this
resolutions again.  To drop e.g. the autodetection features in the
NVIDIA driver you might add `Option "UseEDID" "FALSE"' in section
`Device'.

XRandR cannot cope properly with the DynamicTwinView feature of the
proprietary nvidia driver. You might need

`Option         "DynamicTwinView" "False"'

to get proper results (in Screen or Device section of you xorg.conf).

ATTENTION: Disabling such features might allow X11 to access your HW in
a way that it gets damaged! You are at your own risk!

Enable fullscreen (not necessary, but makes sense):
   * choose your preferred resolution/refresh XRandR Resolutions and
     enable XRandR as fullscreen device (50Hz/PAL or 60Hz/NTSC mode).

   * Activate fullscreen with `Alt-D'.

   * choose `OpenGL Rastersynchronization' in the video chip menu
     (VIC-II Settings, VIC Setting, etc.)

Note that:
   * the current implementation is dropping synchronization silently in
     case the display frequency isn't aligned (50Hz for PAL, 60Hz for
     NTSC).

   * On some systems the XRandR system isn't informed about desktop
     display frequency changes if you switch resolutions via hotkeys
     like CTRL-Alt-+ (Numpad), which is possible e.g. with the X11
     implementation of Xorg.

     In that case you can override/tell the current frequency via menu:
     Settings->VICII Settings->Desktop Refreshrate (e.g. in x64) (this
     shouldn't be necessary if you use fullscreen via XRandR.


@EndNode

@Node "Video resources" "vice.guide/Video resources"
@Prev "Video settings"
@Toc "Video settings"

Video resources
---------------

The following resources affect the screen emulation.

`HwScalePossible'
     Boolean that indicates whether hardware scaling is possible or not.

`openGL_sync'
     Boolean, if true enable Open-GL frame sync.

`openGL_no_sync'
     Boolean, if true Open-GL sync is not available.

`Speed'
     Integer specifying the maximum relative speed, as a percentage. `0'
     stands for "no limit".

`RefreshRate'
     Integer specifying the refresh rate, a value of `n' specifies a
     refresh rate of 1/`n'. A value of `0' enables automatic frame
     skipping.

`WarpMode'
     Boolean specifying whether "warp mode" is turned on or not.


@EndNode

@Node "Keyboard settings" "vice.guide/Keyboard settings"
@Next "Control port settings"
@Prev "Video settings"
@Toc "Settings and resources"

Keyboard settings
=================

It is possible to specify whether the "positional" or "symbolic"
keyboard mapping should be used with the "Keyboard mapping type"
submenu (see @{"Keyboard emulation" Link "Keyboard emulation"} for an explanation of positional and
symbolic mappings).

The keyboard settings submenu also allows you to:

   * Load custom-made positional and symbolic keymap files ("Set
     symbolic keymap file" and "Set positional keymap file").

   * Dump the current keymap to a user-defined keymap file ("Dump to
     keymap file").


 @{" Keyboard resources " Link "Keyboard resources"} 
 @{" Keyboard options " Link "Keyboard options"} 


@EndNode

@Node "Keyboard resources" "vice.guide/Keyboard resources"
@Next "Keyboard options"
@Prev "Keyboard settings"
@Toc "Keyboard settings"

Keyboard resources
------------------

`KeymapIndex'
     Integer identifying which keymap is being used.  (0: symbolic, 1:
     positional, 2: symbolic (user), 3: positional (user)).

`KeymapSymFile'
     String specifying the name of the keymap file for the symbolic
     mapping (see @{"Keyboard emulation" Link "Keyboard emulation"} (this will be set indirectly by
     changing `KeymapIndex', `KeyboardMapping' or `KeyboardType').

`KeymapPosFile'
     String specifying the name of the keymap file for the positional
     mapping (see @{"Keyboard emulation" Link "Keyboard emulation"} (this will be set indirectly by
     changing `KeymapIndex', `KeyboardMapping' or `KeyboardType').

`KeymapUserSymFile'
     String specifying the name of the user keymap file for symbolic
     mapping (see @{"Keyboard emulation" Link "Keyboard emulation"}

`KeymapUserPosFile'
     String specifying the name of the user keymap file for positional
     mapping (see @{"Keyboard emulation" Link "Keyboard emulation"}

`KeyboardMapping'
     Integer specifying the keyboard layout of the host.  (0: American
     1: British 2: German 3: Danish 4: Norwegian 5: Finnish 6: Italian).

`KeyboardType'
     Integer specifying the emulated type of keyboard.  (machine
     specific, currently always 0 except for xpet: 0: Business (us) 1:
     Business (uk) 2: Business (de) 3: Business (jp) 4: Graphics (us)).


@EndNode

@Node "Keyboard options" "vice.guide/Keyboard options"
@Prev "Keyboard resources"
@Toc "Keyboard settings"

Keyboard command-line options
-----------------------------

`-keymap <number>'
     Specifies which keymap is being used (`KeymapIndex' 0: symbolic,
     1: positional, 2: symbolic (user), 3: positional (user)).

`-symkeymap <Name>'
     Specify filename of the symbolic user keymap file
     (`KeymapUserSymFile').

`-poskeymap <Name>'
     Specify filename of the positional user keymap file
     (`KeymapUserPosFile').

`-keyboardmapping <number>'
     Specifies the keyboard layout of the host (`KeyboardMapping' 0:
     American 1: British 2: German 3: Danish 4: Norwegian 5: Finnish 6:
     Italian).

`-keyboardtype <number>'
     Specifies the emulated type of keyboard (`KeyboardType' machine
     specific, currently always 0 except for xpet: 0: Business (us) 1:
     Business (uk) 2: Business (de) 3: Business (jp) 4: Graphics (us)).


@EndNode

@Node "Control port settings" "vice.guide/Control port settings"
@Next "Sound settings"
@Prev "Keyboard settings"
@Toc "Settings and resources"

The control port settings submenu allows you to select which control
port device is connected to a control port.


 @{" Control port resources " Link "Control port resources"} 
 @{" Control port options " Link "Control port options"} 


@EndNode

@Node "Control port resources" "vice.guide/Control port resources"
@Next "Control port options"
@Prev "Control port settings"
@Toc "Control port settings"

Control port resources
----------------------

`JoyPort1Device'
     Set the device attached to: control port 1
     (x64/x64sc/x64dtv/xscpu/x128/xcbm5x0/xplus4) control port (xvic).
     (x64/x64sc/xscpu/x128/xcbm5x0/xvic: 0: None, 1: Joystick, 2:
     Paddles, 3: Mouse (1351), 4: Mouse (NEOS), 5: Mouse (Amiga), 6:
     Mouse (CX-22), 7: Mouse (Atari ST), 8: Mouse (SmartMouse), 9:
     Mouse (Micromys), 10: KoalaPad, 11: Light Pen (up trigger), 12:
     Light Pen (left trigger), 13: Datel Light Pen, 14: Magnum Light
     Phaser, 15: Stack Light Rifle, 16: Inkwell Light Pen, 17: Sampler
     (2bit)) (x64dtv/xplus4: 0: None, 1: Joystick, 6: Mouse (CX-22),
     17: Sampler (2bit))

`JoyPort2Device'
     Set the device attached to: control port 2
     (x64/x64sc/x64dtv/xscpu/x128/xcbm5x0/xplus4)
     (x64/x64sc/xscpu/x128/xcbm5x0: 0: None, 1: Joystick, 2: Paddles,
     3: Mouse (1351), 4: Mouse (NEOS), 5: Mouse (Amiga), 6: Mouse
     (CX-22), 7: Mouse (Atari ST), 8: Mouse (SmartMouse), 9: Mouse
     (Micromys), 10: KoalaPad, 17: Sampler (2bit)) (x64dtv/xplus4: 0:
     None, 1: Joystick, 6: Mouse (CX-22), 17: Sampler (2bit))

`JoyPort3Device'
     Set the device attached to: userport joystick adapter port 1
     (x64/x64sc/xscpu/x128/xcbm2/xpet/xvic) userport joystick adapter
     port (x64dtv) sidcart control port (xplus4).
     (x64/x64sc/x64dtv/xscpu/x128/xcbm2/xpet/xvic: 0: None, 1:
     Joystick, 6: Mouse (CX-22), 17: Sampler (2bit)) (xplus4: 0: None,
     1: Joystick, 2: Paddles, 3: Mouse (1351), 4: Mouse (NEOS), 5:
     Mouse (Amiga), 6: Mouse (CX-22), 7: Mouse (Atari ST), 8: Mouse
     (SmartMouse), 9: Mouse (Micromys), 10: KoalaPad, 17: Sampler
     (2bit))

`JoyPort4Device'
     Set the device attached to: userport joystick adapter port 2
     (x64/x64sc/xscpu/x128/xcbm2/xpet/xvic)
     (x64/x64sc/xscpu/x128/xcbm2/xpet/xvic: 0: None, 1: Joystick, 6:
     Mouse (CX-22), 17: Sampler (2bit))


@EndNode

@Node "Control port options" "vice.guide/Control port options"
@Prev "Control port resources"
@Toc "Control port settings"

Control port command-line options
---------------------------------

`-controlport1device <device>'
     Set the device attached to: control port 1
     (x64/x64sc/x64dtv/xscpu/x128/xcbm5x0/xplus4) control port (xvic)
     (`JoyPort1Device').  (x64/x64sc/xscpu/x128/xcbm5x0/xvic: 0: None,
     1: Joystick, 2: Paddles, 3: Mouse (1351), 4: Mouse (NEOS), 5:
     Mouse (Amiga), 6: Mouse (CX-22), 7: Mouse (Atari ST), 8: Mouse
     (SmartMouse), 9: Mouse (Micromys), 10: KoalaPad, 11: Light Pen (up
     trigger), 12: Light Pen (left trigger), 13: Datel Light Pen, 14:
     Magnum Light Phaser, 15: Stack Light Rifle, 16: Inkwell Light Pen,
     17: Sampler (2bit)) (x64dtv/xplus4: 0: None, 1: Joystick, 6: Mouse
     (CX-22), 17: Sampler (2bit))

`-controlport2device <device>'
     Set the device attached to: control port 2
     (x64/x64sc/x64dtv/xscpu/x128/xcbm5x0/xplus4) (`JoyPort2Device').
     (x64/x64sc/xscpu/x128/xcbm5x0: 0: None, 1: Joystick, 2: Paddles,
     3: Mouse (1351), 4: Mouse (NEOS), 5: Mouse (Amiga), 6: Mouse
     (CX-22), 7: Mouse (Atari ST), 8: Mouse (SmartMouse), 9: Mouse
     (Micromys), 10: KoalaPad, 17: Sampler (2bit)) (x64dtv/xplus4: 0:
     None, 1: Joystick, 6: Mouse (CX-22), 17: Sampler (2bit))

`-controlport3device <device>'
     Set the device attached to: userport joystick adapter port 1
     (x64/x64sc/xscpu/x128/xcbm2/xpet/xvic) userport joystick adapter
     port (x64dtv) sidcart control port (xplus4) (`JoyPort3Device').
     (x64/x64sc/x64dtv/xscpu/x128/xcbm2/xpet/xvic: 0: None, 1:
     Joystick, 6: Mouse (CX-22), 17: Sampler (2bit)) (xplus4: 0: None,
     1: Joystick, 2: Paddles, 3: Mouse (1351), 4: Mouse (NEOS), 5:
     Mouse (Amiga), 6: Mouse (CX-22), 7: Mouse (Atari ST), 8: Mouse
     (SmartMouse), 9: Mouse (Micromys), 10: KoalaPad, 17: Sampler
     (2bit))

`-controlport4device <device>'
     Set the device attached to: userport joystick adapter port 2
     (x64/x64sc/xscpu/x128/xcbm2/xpet/xvic) (`JoyPort4Device').
     (x64/x64sc/xscpu/x128/xcbm2/xpet/xvic: 0: None, 1: Joystick, 6:
     Mouse (CX-22), 17: Sampler (2bit))

Joystick settings
=================

Joystick resources
------------------

`JoyDevice1'
`JoyDevice2'
`JoyDevice3'
`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for joystick emulation for ports 1 - 4, respectively.  (0=None,
     1=Joystick 1, 2=Joystick 2, 4=Numpad, 8=Keyset 1, 16=Keyset 2 on
     OS/2) (0=None, 1=Numpad, 2=Keyset 1, 3=Keyset 2, 4=HID joystick 0,
     5=HID joystick 1 on Mac OS X) The available joysticks might differ
     depending on operating system and joystick support in the OS
     (Linux joystick module must be available for example).

`JoyOpposite'
     Boolean, if true allow (usually impossible) bitcombinations for
     opposite directions.  (all emulators except vsid)

`UserportJoy'
     Boolean to enable/disable extra joysticks (all emulators except
     xcbm5x0 and vsid).

`UserportJoyType'
     Integer specifying the type of adapter used for the extra joysticks
     (all emulators except xcbm5x0 and vsid).  (0: Classical
     Games/Protovision, 1: PET, 2: Hummer, 3: OEM, 4: Digital
     Excess/Hitmen, 5: Kingsoft, 6: Starbyte) 4, 5 and 6 are x64,
     x64sc, xscpu64 and x128 only.

`Mouse'
     Boolean, enables mouse emulation

`KeySet1NorthWest'
`KeySet1North'
`KeySet1NorthEast'
`KeySet1East'
`KeySet1SouthEast'
`KeySet1South'
`KeySet1SouthWest'
`KeySet1West'
`KeySet1Fire'
     Integers specifying the keycodes for keyset 1 (all emulators
     except vsid).

`KeySet2NorthWest'
`KeySet2North'
`KeySet2NorthEast'
`KeySet2East'
`KeySet2SouthEast'
`KeySet2South'
`KeySet2SouthWest'
`KeySet2West'
`KeySet2Fire'
     Integers specifying the keycodes for keyset 2 (all emulators
     except vsid).

`KeySetEnable'
     Boolean that specifies whether user defined keysets are enabled
     (all emulators except vsid).

`KbdbufDelay'
     Integer specifying the additional keyboard delay.  (0: use default)

Joystick command-line options
-----------------------------

`-joydev1 <range>'
`-joydev2 <range>'
     Set the device for joystick emulation of port 1 and 2,
     respectively.  (`JoyDevice1', `JoyDevice2').  The range for OS/2
     is, valid numbers in the range are 0, 1, 2, 4, 8 and 16.

`-extrajoydev1 <0-8>'
`-extrajoydev2 <0-8>'
     Set device for extra joystick port 1 and 2.

`-joyopposite'
`+joyopposite'
     Enable/disable opposite joystick directions (`JoyOpposite=1',
     `JoyOpposite=0').  (all emulators except vsid)

`-userportjoy'
`+userportjoy'
     Enable/disable extra joystick(s) (`UserportJoy=1',
     `UserportJoy=0').  (all emulators except xcbm5x0 and vsid).

`-userportjoytype <Type>'
     Set extra joystick type (`UserportJoyType') (all emulators except
     xcbm5x0 and vsid).  (0: Classical Games/Protovision, 1: PET, 2:
     Hummer, 3: OEM, 4: Digital Excess/Hitmen, 5: Kingsoft, 6: Starbyte)
     4, 5 and 6 are x64, x64sc, xscpu64 and x128 only.

`-mouse'
`+mouse'
     Enable/Disable mouse grab

`-keyset'
`+keyset'
     Enable/disable user defined keyset (`KeySetEnable=1',
     `KeySetEnable=0') (all emulators except vsid).

`-keybuf-delay <value>'
     Set additional keyboard buffer delay (`KbdbufDelay').  (0: use
     default)


@EndNode

@Node "Sound settings" "vice.guide/Sound settings"
@Next "Drive settings"
@Prev "Control port settings"
@Toc "Settings and resources"

Sound settings
==============

The following menu items control sound output:

   * "Enable sound playback" turns sound emulation on and off.

   * "Sound synchronization" specifies the method for syncronizing the
     sound playback.  Possible settings are:
        * "Flexible", i.e., the audio renderer flexibly adds/removes
          samples to the output to smoothly adapt the playback to
          slight changes in the speed of the emulator.

        * "Adjusting" works like "flexible", but supports bigger
          differences in speed.  For example, if the emulation speed
          drops down from from 100% to 50%, audio slows down by the
          same amount too.

        * "Exact", instead, makes the audio renderer output always the
          same sounds you would hear from the real thing, without
          trying to adapt the ratio; to compensate the tolerances in
          speed, some extra frames will be skipped or added.

   * "Sample rate" specifies the sampling frequency, ranging from 8000
     to 48000 Hz (not all the sound cards and/or sound drivers can
     support all the frequencies, so actually the nearest candidate
     will be chosen).

   * "Buffer size" specifies the size of the audio buffer; the bigger
     the buffer, the longer the delay with which sounds are played.
     You should pick the smallest value your machine can handle without
     problems.

   * "Sound suspend time", will cause the audio playback to pause for
     the specified number of seconds whenever some clicking happens.
     If "Keep going" is selected, no pausing is done.


 @{" Sound resources " Link "Sound resources"} 
 @{" Sound options " Link "Sound options"} 


@EndNode

@Node "Sound resources" "vice.guide/Sound resources"
@Next "Sound options"
@Prev "Sound settings"
@Toc "Sound settings"

Sound resources
---------------

`Sound'
     Boolean specifying whether audio emulation is turned on.

`SoundSpeedAdjustment'
     Integer specifying what speed adjustment method the audio renderer
     should use.  (0: flexible, 1: adjusting, 2: exact)

`SoundSampleRate'
     Integer specifying the sampling frequency in Hz (not all the sound
     cards and/or sound drivers can support all the frequencies, so
     actually the nearest candidate will be chosen).  (8000..48000)

`SoundBufferSize'
     Integer specifying the size of the audio buffer, in milliseconds.

`SoundSuspendTime'
     Integer specifying the pause interval when audio underflows
     ("clicks") happen. `0' means no pause is done.

`SoundDeviceName'
     String specifying the audio driver.

     Implemented drivers are:

        * `ahi', for the Amiga/Morphos/Aros sound driver.

        * `aix', for the IBM AIX sound driver.

        * `allegro', for the DOS Allegro sound driver.

        * `alsa', for the linux ALSA sound driver.

        * `arts', for the *nix ARTS sound driver.

        * `beos', for the BeOS/Zeta/Haiku sound driver.

        * `bsp', for the BeOS/Zeta/Haiku BeOS Media Kit sound driver.

        * `coreaudio', for the Mac OS X sound driver (`SoundDeviceArg'
          specifies the audio device, default system output by default).

        * `dart', for the OS/2 sound driver.

        * `dummy', fully emulating the sound output chip(s), but not
          actually playing samples.

        * `dx', for the Windows Direct-X sound driver.

        * `hpux', for the HP-UX audio device (unfinished;
          `SoundDeviceArg' specifies the audio device, `/dev/audio' by
          default).

        * `midas', for the DOS Midas sound driver.

        * `pulse', for the Pulseaudio sound driver.

        * `sdl', for the Simple DirectMedia Layer audio driver.

        * `sgi', for the Silicon Graphics audio device (`SoundDeviceArg'
          specifies the audio device, `/dev/audio' by default);

        * `speed', like `dummy' but also calculating samples (mainly
          used to evaluate the speed of the sample generator);

        * `sun', for the Solaris and NetBDS audio device (unfinished;
          `SoundDeviceArg' specifies the audio device, `/dev/audio' by
          default).

        * `uss', for the Linux/FreeBSD Universal Sound System driver
          (`SoundDeviceArg' specifies the audio device, `/dev/dsp' by
          default);

        * `wmm', for the Windows Multimedia Waveout sound device.

     These drivers will actually be present only if the VICE
     configuration script detected the corresponding development
     support at the time of compilation.

`SoundDeviceArg'
     String specifying an additional parameter for the audio driver (see
     `SoundDeviceName').

`SoundRecordDeviceName'
     String specifying the driver used for sound recording.

     Implemented drivers are:

        * `aiff', for the Apple Interchange File Format 16bit sound
          recorder driver.

        * `dump', writing all the write accesses to the registers to a
          file (specified by `SoundDeviceArg', default value is
          `vicesnd.sid');

        * `fs', writing samples to a file (specified by
          `SoundDeviceArg'; default is `vicesnd.raw'); `iff', for the
          Amiga Interchange File Format (8SVX) 8bit sound recorder
          driver.

        * `mp3', for the MP3 sound recorder driver.

        * `flac', for the FLAC sound recorder driver.

        * `ogg', for the ogg/vorbis sound recorder driver.

        * `voc', for the Creative Voice (VOC) sound recorder driver.

        * `wav', for the RIFF/WAV sound recorder driver.

     These drivers will actually be present only if the VICE
     configuration script detected the corresponding development
     support at the time of compilation.

`SoundRecordDeviceArg'
     String specifying additional arguments for sound recording.

`SoundFragmentSize'
     Integer specifying the fragment size.  (0: very small, 1: small,
     2: medium, 3: large, 4: very large)

`SoundVolume'
     Integer specifying the master volume in percent.  (0..100)

`SoundOutput'
     Integer specifying the type of sound output. Output is selectable
     between 'system' (system decides to use mono or stereo output
     based on the presence of a stereo sid), 'always mono' (output is
     always mono, stereo streams are mixed into a mono stream) or
     'always stereo' (output is always stereo, mono streams are
     multiplexed to a stereo stream).  (0: system, 1: mono, 2: stereo)


@EndNode

@Node "Sound options" "vice.guide/Sound options"
@Prev "Sound resources"
@Toc "Sound settings"

Sound command-line options
--------------------------

`-sound'
`+sound'
     Enable/disable sound emulation (`Sound=1', `Sound=0').

`-soundsync <sync>'
     Specify the sound speed adjustment method (`SoundSpeedAdjustment').
     (0: flexible, 1: adjusting, 2: exact)

`-soundrate <value>'
     Specify the sound playback sample rate (`SoundSampleRate').
     (8000..48000)

`-soundoutput <output mode>'
     Sound output mode (`SoundOutput').  (0: system decides
     mono/stereo, 1: always mono, 2: always stereo)

`-soundbufsize <value>'
     Specify the size of the audio buffer in milliseconds
     (`SoundBufferSize').

`-soundfragsize <value>'
     Set sound fragment size (`SoundFragmentSize').  (0: very small, 1:
     small, 2: medium, 3: large, 4: very large)

`-sounddev <Name>'
     Specifies the name of the audio device (`SoundDeviceName').






























     (ahi/aix/allegro/alsa/arts/beos/bsp/coreaudio/dart/dummy/dx/hpux/midas/pulse/sdl/sgi/sun/uss/wmm)

`-soundarg <args>'
     Specifies an additional parameter for the audio device
     (`SoundDeviceArg').

`-soundrecdev <name>'
     Specify recording sound driver (`SoundRecordDeviceName').
     (aiff/dump/fs/iff/mp3/flac/ogg/speed/voc/wav)

`-soundrecarg <args>'
     Specify initialization parameters for recording sound driver
     (`SoundRecordDeviceArg').

`-soundsuspend <seconds>'
     Specify the pause interval when audio underflows (clicks) happen.
     0 means no pause is done (`SoundSuspendTime').

`-soundvolume <volume>'
     Specify the sound volume (`SoundVolume').  (0..100)

Tape settings
=============

These settings are used to control the hardware-level emulation of the
Tape drive.

Tape resources
--------------

`DatasetteResetWithCPU'
     Boolean specifying whether to reset (rewind) the tape when
     resetting the CPU.

`DatasetteZeroGapDelay'
     Integer specifying the delay in cycles for a zero in the tap.

`DatasetteSpeedTuning'
     Integer specifying the number of cycles added to each gap in the
     tap.

`DatasetteTapeWobble'
     Integer specifying the maximum random number of cycles added to
     each gap in the tap.

Tape command-line options
-------------------------

`-dsresetwithcpu'
`+dsresetwithcpu'
     Enable/disable automatic Datasette-Reset
     (`DatasetteResetWithCPU=1', `DatasetteResetWithCPU=0').

`-dszerogapdelay <value>'
     Set delay in cycles for a zero in the tap
     (`DatasetteZeroGapDelay').

`-dsspeedtuning <value>'
     Set number of cycles added to each gap in the tap
     (`DatasetteSpeedTuning').

`-dstapewobble <value>'
     Set maximum random number of cycles added to each gap in the tap
     (`DatasetteTapeWobble').


@EndNode

@Node "Drive settings" "vice.guide/Drive settings"
@Next "Peripheral settings"
@Prev "Sound settings"
@Toc "Settings and resources"

Drive settings
==============

These settings are used to control the hardware-level emulation of the
Disk drives.  When hardware-level emulation is turned on, only drives 8
and 9 are being emulated.

The following settings affect both drives:

   * "Enable true drive emulation" enables the (slow) hardware-level
     emulation of the drives for maximum compatibility.  This must be
     turned on for any of the following settings to have effect.

   * "Drive sync factor" specifies the speed of the drive's CPU.  This
     can be used to help loading certain programs that have trouble
     with the default PAL setting (for example, programs designed for
     NTSC machines).  The ratio is calculated as follows:

          sync_factor = 65536 * clk_drive / clk_machine

     where `clk_drive' and `clk_machine' are clock speeds in MHz.  The
     menu lets you choose between the PAL and NTSC values, and also lets
     you specify whatever value you want.  Be careful when changing it,
     though, because a wrong value can break things and even corrupt
     disk images.

The following settings, instead, are specific of each drive:

   * "Drive model" specifies the model of the drive being emulated.
     *Warning:* This will reset the drive.

   * "Enable parallel cable" enables emulation of a SpeedDOS parallel
     cable; if you switch this option on and replace the original
     Commodore ROMs with SpeedDOS-compatible ones, you can speed up
     loading/saving times.

   * "Idle method" specifies which method the drive emulation should
     use to save CPU cycles in the host CPU.  There are three methods:

        * "Skip cycles": Each time the serial line is accessed by the
          C64, the drive executes all the cycles since the last time it
          ran.  If the number of elapsed cycles is larger than a
          certain value, the drive discards part of them.

        * "Trap idle": The disk drive is still emulated upon serial line
          accesses as with the previous option, but it is also always
          emulated at the end of each screen frame.  If the drive gets
          into the DOS idle loop, only pending interrupts are emulated
          to save time.

        * "No traps": Like "Trap idle", but without any traps at all.
          So basically the drive works exactly as with the real thing,
          and nothing is done to reduce the power needs of the drive
          emulation.

     The first option ("Skip cycles") is usually best for performance,
     as the drive is emulated as little as possible; on the other hand,
     you may notice sudden slowdowns (when the drive executes several
     cycles at once) and the LED status is never updated (because it
     would not be possible to do correctly so).  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 will have no effect on performance if a
     program continuously reads from the IEC port, as the drive will
     have to be fully emulated in any case (some stupid programs do
     this, even when they don't actually need to use the drive).

     <P>

The second option ("Trap idle") is usually a bit slower, as at least
interrupts are always emulated, but ensures the LED state is always
updated correctly and always keeps the drive and the computer in sync.
On the other hand, if a program installs a non-standard idle loop in the
drive, the drive CPU has to be emulated even when not necessary and the
global emulation speed is then *much* slower.

"40-track image support" specifies how 40-track ("extended") disk
images should be supported.  There are three possible ways:

   * "Never extend" never extends disk images at all (so if a program
     tries to write tracks beyond the 35th, it is not allowed to do so);

   * "Ask on extend" prompts the user as soon as a program tries to
     write tracks beyond the 35th, and the user can then choose whether
     he wants the disk image to be extended or not;

   * "Extend on access" simply extends the disk image as soon the
     program needs it, without prompting the user.

itemize


 @{" Drive resources " Link "Drive resources"} 
 @{" Drive options " Link "Drive options"} 


@EndNode

@Node "Drive resources" "vice.guide/Drive resources"
@Next "Drive options"
@Prev "Drive settings"
@Toc "Drive settings"

Drive resources
---------------

`RawDriveDriver'
     String specifying the name of the device to be used for raw block
     access.

`DriveTrueEmulation'
     Boolean controlling whether the "true" drive emulation is turned
     on.

`DriveSoundEmulation'
     Boolean controlling whether the drive noise emulation is turned on
     (all emulators except vsid).

`DriveSoundEmulationVolume'
     Integer specifying the volume of the drive noise emulation (all
     emulators except vsid).  (0..4000)

`Drive8Type'
`Drive9Type'
`Drive10Type'
`Drive11Type'
     Integers specifying the model number for drives 8 to 11.  Possible
     values are `1541' [all emulators except xcbm2, xcbm5x0, xpet and
     vsid], `1542' (1541-II) [all emulators except xcbm2, xcbm5x0, xpet
     and vsid], `1570' [all emulators except xcbm2, xcbm5x0, xpet and
     vsid], `1571' [all emulators except xcbm2, xcbm5x0, xpet and vsid],
     `1573' (1571CR) [x128 only], `1551' [xplus4 only], `1581' [all
     emulators except xcbm2, xcbm5x0, xpet and vsid], `1001' [all
     emulators except x64dtv, xplus4 and vsid], `2000' [all emulators
     except xcbm2, xcbm5x0, xpet and vsid], `2031' [all emulators
     except x64dtv, xplus4 and vsid], `2040' [all emulators except
     x64dtv, xplus4 and vsid], `3040' [all emulators except x64dtv,
     xplus4 and vsid], `4000' [all emulators except xcbm2, xcbm5x0,
     xpet and vsid], `4040' [all emulators except x64dtv, xplus4 and
     vsid], `8050' [all emulators except x64dtv, xplus4 and vsid],
     `8250' [all emulators except x64dtv, xplus4 and vsid].

`Drive8RTCSave'
     Integer specifying whether the RTC data of drive 8 should be saved
     when changed or not (drive type 2000/4000 only).

`Drive9RTCSave'
     Integer specifying whether the RTC data of drive 9 should be saved
     when changed or not (drive type 2000/4000 only).

`Drive10RTCSave'
     Integer specifying whether the RTC data of drive 10 should be
     saved when changed or not (drive type 2000/4000 only).

`Drive11RTCSave'
     Integer specifying whether the RTC data of drive 11 should be
     saved when changed or not (drive type 2000/4000 only).

`Drive8ParallelCable'
`Drive9ParallelCable'
`Drive10ParallelCable'
`Drive11ParallelCable'
     integers controlling what type of parallel cable is emulated for
     drives 8 to 11 (x64, x64sc, xscpu64, x128 and xplus4 only).
     x64/x64sc/xscpu64/x128: (0: None, 1: Standard, 2: Professional
     DOS, 3: Formel64) xplus4: (0: None, 1: Standard)

`Drive8ProfDOS'
`Drive9ProfDOS'
`Drive10ProfDOS'
`Drive11ProfDOS'
     Booleans controlling whether Professional DOS is emulated or not
     for drives 8 to 11 (x64, x64sc, xscpu64 and x128 only).

`Drive8SuperCard'
`Drive9SuperCard'
`Drive10SuperCard'
`Drive11SuperCard'
     Booleans controlling whether Super Card is emulated or not for
     drives 8 to 11 (x64, x64sc, xscpu64 and x128 only).

`Drive8RAM2000'
`Drive8RAM4000'
`Drive8RAM6000'
`Drive8RAM8000'
`Drive8RAMA000'
`Drive9RAM2000'
`Drive9RAM4000'
`Drive9RAM6000'
`Drive9RAM8000'
`Drive9RAMA000'
`Drive10RAM2000'
`Drive10RAM4000'
`Drive10RAM6000'
`Drive10RAM8000'
`Drive10RAMA000'
`Drive11RAM2000'
`Drive11RAM4000'
`Drive11RAM6000'
`Drive11RAM8000'
`Drive11RAMA000'
     Booleans controlling whether a RAM block is emulated at the
     respective block or not for drives 8 to 11 respectively.

`Drive8ExtendImagePolicy'
`Drive9ExtendImagePolicy'
`Drive10ExtendImagePolicy'
`Drive11ExtendImagePolicy'
     Integer specifying the policy for 40-track support for drives 8 to
     11.  (0: never extend, 1: ask on extend, 2: extend on access)

`Drive8IdleMethod'
`Drive9IdleMethod'
`Drive10IdleMethod'
`Drive11IdleMethod'
     Integers specifying the idling method for the drive CPU.  See
     @{"Drive settings" Link "Drive settings"}.  (0: none, 1: skip cycles, 2: trap idle)

`Drive8RPM'
`Drive9RPM'
`Drive10RPM'
`Drive11RPM'
     Integers specifying the rotation speed of the drive, multiplied by
     100 so 300rpm equal 30000.

`Drive8Wobble'
`Drive9Wobble'
`Drive10Wobble'
`Drive11Wobble'
     Integers specifying the random wobble that will be added the
     rotation speed.

`DosName1540'
`DosName1541'
`DosName1541ii'
`DosName1570'
`DosName1571'
`DosName1581'
`DosName2000'
`DosName4000'
     Strings specifying the names of the ROM images for the drive
     emulation.  (all emulators except xcbm2, xcbm5x0, xpet and vsid)

`DosName1551'
     String specifying the name of the ROM image for the drive
     emulation.  (xplus4 only)

`DosName1571cr'
     String specifying the name of the ROM image for the drive
     emulation.  (x128 only)

`DosName2031'
`DosName2040'
`DosName3040'
`DosName4040'
`DosName1001'
     Strings specifying the names of the ROM images for the drive
     emulation.  (all emulators except x64dtv, xplus4 and vsid)

`DriveProfDOS1571Name'
     String specifying the filename of the 1571 professional DOS ROM
     image (x64, x64sc, xscpu64 and x128 only).

`DriveSuperCardName'
     String specifying the filename of the Super Card ROM image (x64,
     x64sc, xscpu64 and x128 only).


@EndNode

@Node "Drive options" "vice.guide/Drive options"
@Prev "Drive resources"
@Toc "Drive settings"

Drive command-line options
--------------------------

`-truedrive'
`+truedrive'
     Enable/disable true drive emulation (`DriveTrueEmulation=1',
     `DriveTrueEmulation=0').

`-drivesound'
`+drivesound'
     Enable/disable drive sound emulation (`DriveSoundEmulation=1',
     `DriveSoundEmulation=0') (all emulators except vsid).

`-drivesoundvolume <Volume>'
     Set the volume of the drive sound emulation
     (`DriveSoundEmulationVolume=1', `DriveSoundEmulationVolume=0')
     (all emulators except vsid).

`-drive8type <Type>'
`-drive9type <Type>'
`-drive10type <Type>'
`-drive11type <Type>'
     Specifies the drive types for drives 8-11, respectively.  Possible
     values for `TYPE' are `1541' [all emulators except xcbm2, xcbm5x0,
     xpet and vsid], `1542' (meaning 1541-II) [all emulators except
     xcbm2, xcbm5x0, xpet and vsid], `1551' [xplus4 only], `1570' [all
     emulators except xcbm2, xcbm5x0, xpet and vsid], `1571' [all
     emulators except xcbm2, xcbm5x0, xpet and vsid], `1573' (meaning
     1571cr) [x128 only], `1581' [all emulators except xcbm2, xcbm5x0,
     xpet and vsid], `2000' [all emulators except xcbm2, xcbm5x0, xpet
     and vsid], `4000' [all emulators except xcbm2, xcbm5x0, xpet and
     vsid], `2031' [all emulators except x64dtv, xplus4 and vsid],
     `2040' [all emulators except x64dtv, xplus4 and vsid], `3040' [all
     emulators except x64dtv, xplus4 and vsid], `4040' [all emulators
     except x64dtv, xplus4 and vsid], `1001' [all emulators except
     x64dtv, xplus4 and vsid], `8050' [all emulators except x64dtv,
     xplus4 and vsid] and `8250' [all emulators except x64dtv, xplus4
     and vsid].

`-drive8rtcsave'
`-drive8rtcsave'
     Enable/disable the saving of the RTC data for drive 8 when changed
     (drive type 2000/4000 only) (`Drive8RTCSave=1', `Drive8RTCSave=0').

`-drive9rtcsave'
`-drive9rtcsave'
     Enable/disable the saving of the RTC data for drive 9 when changed
     (drive type 2000/4000 only) (`Drive9RTCSave=1', `Drive9RTCSave=0').

`-drive10rtcsave'
`-drive10rtcsave'
     Enable/disable the saving of the RTC data for drive 10 when
     changed (drive type 2000/4000 only) (`Drive10RTCSave=1',
     `Drive10RTCSave=0').

`-drive11rtcsave'
`-drive11rtcsave'
     Enable/disable the saving of the RTC data for drive 11 when
     changed (drive type 2000/4000 only) (`Drive11RTCSave=1',
     `Drive11RTCSave=0').

`-parallel8 <type>'
`-parallel9 <type>'
`-parallel10 <type>'
`-parallel11 <type>'
     Set parallel cable type for drives 8-11 respectively
     (`Drive8ParallelCable', `Drive9ParallelCable',
     `Drive10ParallelCable', `Drive11ParallelCable') (x64, x64sc,
     xscpu64, x128 and xplus4 only).  x64/x64sc/xscpu64/x128: (0: None,
     1: Standard, 2: Professional DOS, 3: Formel64) xplus4: (0: None,
     1: Standard)

`-drive8idle <method>'
`-drive9idle <method>'
`-drive10idle <method>'
`-drive11idle <method>'
     Specifies <method> as the idling method for drives 8-11
     respectively (`Drive8IdleMethod', `Drive9IdleMethod',
     `Drive10IdleMethod'), `Drive11IdleMethod').  (0: none, 1: skip
     cycles, 2: trap idle)

`-drive8extend <method>'
`-drive9extend <method>'
`-drive10extend <method>'
`-drive11extend <method>'
     Specifies <method> as the track 40 extend policy in drives 8-11
     respectively (`Drive8ExtendImagePolicy', `Drive9ExtendImagePolicy',
     `Drive10ExtendImagePolicy', `Drive11ExtendImagePolicy').  (0:
     never extend, 1: ask on extend, 2: extend on access)

`-drive8rpm <rpm>'
`-drive9rpm <rpm>'
`-drive10rpm <rpm>'
`-drive11rpm <rpm>'
     Specifies the rotation speed of the drive, multiplied by 100 so
     300rpm equal 30000.

`-drive8wobble <wobble>'
`-drive9wobble <wobble>'
`-drive10wobble <wobble>'
`-drive11wobble <wobble>'
     Specifies random amount of wobble added to the rotation speed.

`-dos1540 <name>'
     Specify the ROM name for the 1540 emulation (`DosName1540').  (all
     emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos1541 <name>'
     Specify the ROM name for the 1541 emulation (`DosName1541').  (all
     emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos1541II <name>'
     Specify the ROM name for the 1541-II emulation (`DosName1541ii').
     (all emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos1551 <name>'
     Specify the ROM name for the 1551 emulation (`DosName1551').
     (xplus4 only)

`-dos1570 <name>'
     Specify the ROM name for the 1570 emulation (`DosName1570').  (all
     emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos1571 <name>'
     Specify the ROM name for the 1571 emulation (`DosName1571').  (all
     emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos1571cr <name>'
     Specify the ROM name for the 1571 emulation (`DosName1571CR').
     (x128 only)

`-dos1581 <name>'
     Specify the ROM name for the 1581 emulation (`DosName1581').  (all
     emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos2000 <name>'
     Specify the ROM name for the FD2000 emulation (`DosName2000').
     (all emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos4000 <name>'
     Specify the ROM name for the FD4000 emulation (`DosName4000').
     (all emulators except xcbm2, xcbm5x0, xpet and vsid)

`-dos2031 <name>'
     Specify the ROM name for the 2031 emulation (`DosName2031').  (all
     emulators except x64dtv, xplus4 and vsid)

`-dos2040 <name>'
     Specify the ROM name for the 2040 emulation (`DosName2040').  (all
     emulators except x64dtv, xplus4 and vsid)

`-dos3040 <name>'
     Specify the ROM name for the 3040 emulation (`DosName3040').  (all
     emulators except x64dtv, xplus4 and vsid)

`-dos4040 <name>'
     Specify the ROM name for the 4040 emulation (`DosName4040').  (all
     emulators except x64dtv, xplus4 and vsid)

`-dos1001 <name>'
     Specify the ROM name for the 1001, 8050 and 8250 emulations
     (`DosName1001').  (all emulators except x64dtv, xplus4 and vsid)

`-drive8ram2000, +drive8ram2000'
     Enable/disable 8KB RAM expansion at $2000-$3FFF for drive 8
     (`Drive8RAM2000=1', `Drive8RAM2000=0').

`-drive9ram2000, +drive9ram2000'
     Enable/disable 8KB RAM expansion at $2000-$3FFF for drive 9
     (`Drive9RAM2000=1', `Drive9RAM2000=0').

`-drive10ram2000, +drive10ram2000'
     Enable/disable 8KB RAM expansion at $2000-$3FFF for drive 10
     (`Drive10RAM2000=1', `Drive10RAM2000=0').

`-drive11ram2000, +drive11ram2000'
     Enable/disable 8KB RAM expansion at $2000-$3FFF for drive 11
     (`Drive11RAM2000=1', `Drive11RAM2000=0').

`-drive8ram4000, +drive8ram4000'
     Enable/disable 8KB RAM expansion at $4000-$5FFF for drive 8
     (`Drive8RAM4000=1', `Drive8RAM4000=0').

`-drive9ram4000, +drive9ram4000'
     Enable/disable 8KB RAM expansion at $4000-$5FFF for drive 9
     (`Drive9RAM4000=1', `Drive9RAM4000=0').

`-drive10ram4000, +drive10ram4000'
     Enable/disable 8KB RAM expansion at $4000-$5FFF for drive 10
     (`Drive10RAM4000=1', `Drive10RAM4000=0').

`-drive11ram4000, +drive11ram4000'
     Enable/disable 8KB RAM expansion at $4000-$5FFF for drive 11
     (`Drive11RAM4000=1', `Drive11RAM4000=0').

`-drive8ram6000, +drive8ram6000'
     Enable/disable 8KB RAM expansion at $6000-$7FFF for drive 8
     (`Drive8RAM6000=1', `Drive8RAM6000=0').

`-drive9ram6000, +drive9ram6000'
     Enable/disable 8KB RAM expansion at $6000-$7FFF for drive 9
     (`Drive9RAM6000=1', `Drive9RAM6000=0').

`-drive10ram6000, +drive10ram6000'
     Enable/disable 8KB RAM expansion at $6000-$7FFF for drive 10
     (`Drive10RAM6000=1', `Drive10RAM6000=0').

`-drive11ram6000, +drive11ram6000'
     Enable/disable 8KB RAM expansion at $6000-$7FFF for drive 11
     (`Drive11RAM6000=1', `Drive11RAM6000=0').

`-drive8ram8000, +drive8ram8000'
     Enable/disable 8KB RAM expansion at $8000-$9FFF for drive 8
     (`Drive8RAM8000=1', `Drive8RAM8000=0').

`-drive9ram8000, +drive9ram8000'
     Enable/disable 8KB RAM expansion at $8000-$9FFF for drive 9
     (`Drive9RAM8000=1', `Drive9RAM8000=0').

`-drive10ram8000, +drive10ram8000'
     Enable/disable 8KB RAM expansion at $8000-$9FFF for drive 10
     (`Drive10RAM8000=1', `Drive10RAM8000=0').

`-drive11ram8000, +drive11ram8000'
     Enable/disable 8KB RAM expansion at $8000-$9FFF for drive 11
     (`Drive11RAM8000=1', `Drive11RAM8000=0').

`-drive8rama000, +drive8rama000'
     Enable/disable 8KB RAM expansion at $A000-$BFFF for drive 8
     (`Drive8RAMA000=1', `Drive8RAMA000=0').

`-drive9rama000, +drive9rama000'
     Enable/disable 8KB RAM expansion at $A000-$BFFF for drive 9
     (`Drive9RAMA000=1', `Drive9RAMA000=0').

`-drive10rama000, +drive10rama000'
     Enable/disable 8KB RAM expansion at $A000-$BFFF for drive 10
     (`Drive10RAMA000=1', `Drive10RAMA000=0').

`-drive11rama000, +drive11rama000'
     Enable/disable 8KB RAM expansion at $A000-$BFFF for drive 11
     (`Drive11RAMA000=1', `Drive11RAMA000=0').

`-drive8profdos'
`+drive8profdos'
     Enable/disable Professional DOS for drive 8 (`Drive8ProfDOS=1',
     `Drive8ProfDOS=0') (x64, x64sc, xscpu64 and x128 only).

`-drive9profdos'
`+drive9profdos'
     Enable/disable Professional DOS for drive 9 (`Drive9ProfDOS=1',
     `Drive9ProfDOS=0') (x64, x64sc, xscpu64 and x128 only).

`-drive10profdos'
`+drive10profdos'
     Enable/disable Professional DOS for drive 10 (`Drive10ProfDOS=1',
     `Drive10ProfDOS=0') (x64, x64sc, xscpu64 and x128 only).

`-drive11profdos'
`+drive11profdos'
     Enable/disable Professional DOS for drive 11 (`Drive11ProfDOS=1',
     `Drive11ProfDOS=0') (x64, x64sc, xscpu64 and x128 only).

`-profdos1571 <name>'
     Specify name of Professional DOS 1571 ROM image
     (`DriveProfDOS1571Name') (x64, x64sc, xscpu64 and x128).

`-drive8supercard'
`+drive8supercard'
     Enable/disable Super Card for drive 8 (`Drive8SuperCard=1',
     `Drive8SuperCard=0') (x64, x64sc, xscpu64 and x128 only).

`-drive9supercard'
`+drive9supercard'
     Enable/disable Super Card for drive 9 (`Drive9SuperCard=1',
     `Drive9SuperCard=0') (x64, x64sc, xscpu64 and x128 only).

`-drive10supercard'
`+drive10supercard'
     Enable/disable Super Card for drive 10 (`Drive10SuperCard=1',
     `Drive10SuperCard=0') (x64, x64sc, xscpu64 and x128 only).

`-drive11supercard'
`+drive11supercard'
     Enable/disable Super Card for drive 11 (`Drive11SuperCard=1',
     `Drive11SuperCard=0') (x64, x64sc, xscpu64 and x128 only).

`-supercard <name>'
     Specify name of Super Card ROM image (`DriveSuperCardName') (x64,
     x64sc, xscpu64 and x128 only).


@EndNode

@Node "Peripheral settings" "vice.guide/Peripheral settings"
@Next "RS232 settings"
@Prev "Drive settings"
@Toc "Settings and resources"

Peripheral settings
===================

VICE is able to support some special peripherals:

   * "file system devices", pseudo-drives accessing the Unix file
     system;

   * printers.

These features depend on some "kernal traps" that replace the existing
routines in the original Commodore operating system with custom-made C
routines.


 @{" File system device settings " Link "File system device settings"}   Settings for file system devices.
 @{" Printer settings " Link "Printer settings"}             Settings for emulating a printer.
 @{" No kernal traps " Link "No kernal traps"}              Disabling kernal traps completely.


@EndNode

@Node "File system device settings" "vice.guide/File system device settings"
@Next "Printer settings"
@Prev "Peripheral settings"
@Toc "Peripheral settings"

Settings for file system devices
--------------------------------

These settings deal with the drive-like peripherals connected to the bus
of the emulated machine.  The first setting relates to the parallel
IEEE488 interface. With this interface a special engine is used to
listen to the bus lines to translates them to the filesystem code. Thus
the PET will always detect a drive for example, but it can also use
drives 10 and 11 even together with true disk drive emulation.

   * "Enable virtual devices", enables the peripheral access via the
     fast disk emulation (either kernal traps or IEEE488 interface).
     Both, filesystem and disk image access via fast drive emulation,
     are affected.

Four peripherals, numbered from 8 to 11, are accessible; each of them
provides the following settings:

   * "File system access", if enabled, allows the device to emulate a
     drive accessing a file system directory; note that when a disk
     image is attached to the same drive, the directory is no longer
     visible and the attached disk is used instead.

   * "File system directory" specifies the directory to be accessed by
     the drive.

   * "Convert P00 file names", if enabled, allows access to P00 files
     using their built-in name instead of the Unix one.

   * "Create P00 files on save", if enabled, creates P00 files (instead
     of raw CBM files) whenever a program creates a file.

Note that, by default, all drives create P00 files on save.


 @{" File system device resources " Link "File system device resources"} 
 @{" File system device options " Link "File system device options"} 


@EndNode

@Node "File system device resources" "vice.guide/File system device resources"
@Next "File system device options"
@Prev "File system device settings"
@Toc "File system device settings"

Resources for file system devices
.................................

`IECDevice8'
`IECDevice9'
`IECDevice10'
`IECDevice11'
     Booleans that specify whether IEC device emulation for device #8
     to #11 is enabled.

`FileSystemDevice8'
`FileSystemDevice9'
`FileSystemDevice10'
`FileSystemDevice11'
     Integers specifying the device type for device 8-11 respectively
     (all emulators except vsid).  (0: None, 1: Filesystem, 2: OpenCBM
     (Real), 3: Block Device (Raw))

`FSDevice8ConvertP00'
`FSDevice9ConvertP00'
`FSDevice10ConvertP00'
`FSDevice11ConvertP00'
     Booleans specifying whether on-read support for P00 files is
     enabled on drives 8, 9, 10 and 11 respectively (all emulators
     except vsid).

`FSDevice8SaveP00'
`FSDevice9SaveP00'
`FSDevice10SaveP00'
`FSDevice11SaveP00'
     Booleans specifying whether the drives should create P00 files
     instead of plain CBM ones for drives 8, 9, 10 and 11 respectively
     (all emulators except vsid).

`FSDevice8HideCBMFiles'
`FSDevice9HideCBMFiles'
`FSDevice10HideCBMFiles'
`FSDevice11HideCBMFiles'
     Booleans specifying whether non-P00 files should be invisible for
     drives 8, 9, 10 and 11 respectively (all emulators except vsid).

`FSDevice8Dir'
`FSDevice9Dir'
`FSDevice10Dir'
`FSDevice11Dir'
     Strings specifying the directories to which drives 8, 9, 10 and 11
     have access (all emulators except vsid).


@EndNode

@Node "File system device options" "vice.guide/File system device options"
@Prev "File system device resources"
@Toc "File system device settings"

Command-line options for file system devices
............................................

`-iecdevice8'
`+iecdevice8'
     Enable/disable IEC device emulation for device #8 (`IECDevice8=1',
     `IECDevice8=0').

`-iecdevice9'
`+iecdevice9'
     Enable/disable IEC device emulation for device #9 (`IECDevice9=1',
     `IECDevice9=0').

`-iecdevice10'
`+iecdevice10'
     Enable/disable IEC device emulation for device #10
     (`IECDevice10=1', `IECDevice10=0').

`-iecdevice11'
`+iecdevice11'
     Enable/disable IEC device emulation for device #11
     (`IECDevice11=1', `IECDevice11=0').

`-device8 <type>'
`-device9 <type>'
`-device10 <type>'
`-device11 <type>'
     Set device type for device 8-11 respectively (`FileSystemDevice8',
     `FileSystemDevice9', `FileSystemDevice10', `FileSystemDevice11')
     (all emulators except vsid).  (0: None, 1: Filesystem, 2: OpenCBM
     (Real), 3: Block device (Raw))

`-fs8 <Name>'
`-fs9 <Name>'
`-fs10 <Name>'
`-fs11 <Name>'
     Specify the paths for the file system access on drives 8, 9, 10
     and 11, respectively (`FSDevice8Dir', `FSDevice9Dir',
     `FSDevice10Dir' and `FSDevice11Dir') (all emulators except vsid).

`-fs8convertp00'
`+fs8convertp00'
     Enable/disable on-read support for P00 files on drive 8
     (`FSDevice8ConvertP00=1', `FSDevice8ConvertP00=0') (all emulators
     except vsid).

`-fs9convertp00'
`+fs9convertp00'
     Enable/disable on-read support for P00 files on drive 9
     (`FSDevice9ConvertP00=1', `FSDevice9ConvertP00=0') (all emulators
     except vsid).

`-fs10convertp00'
`+fs10convertp00'
     Enable/disable on-read support for P00 files on drive 10
     (`FSDevice10ConvertP00=1', `FSDevice10ConvertP00=0') (all
     emulators except vsid).

`-fs11convertp00'
`+fs11convertp00'
     Enable/disable on-read support for P00 files on drive 11
     (`FSDevice11ConvertP00=1', `FSDevice11ConvertP00=0') (all
     emulators except vsid).

`-fs8savep00'
`+fs8savep00'
     Enable/disable saving P00 files on drive 8 (`FSDevice8SaveP00=1',
     `FSDevice8SaveP00=0') (all emulators except vsid).

`-fs9savep00'
`+fs9savep00'
     Enable/disable saving P00 files on drive 9 (`FSDevice9SaveP00=1',
     `FSDevice9SaveP00=0') (all emulators except vsid).

`-fs10savep00'
`+fs10savep00'
     Enable/disable saving P00 files on drive 10
     (`FSDevice10SaveP00=1', `FSDevice10SaveP00=0') (all emulators
     except vsid).

`-fs11savep00'
`+fs11savep00'
     Enable/disable saving P00 files on drive 11
     (`FSDevice11SaveP00=1', `FSDevice11SaveP00=0') (all emulators
     except vsid).

`-fs8hidecbm'
`+fs8hidecbm'
     Enable/disable hiding of CBM files for drive 8
     (`FSDevice8HideCBMFiles=1', `FSDevice8HideCBMFiles=0') (all
     emulators except vsid).

`-fs9hidecbm'
`+fs9hidecbm'
     Enable/disable hiding of CBM files for drive 9
     (`FSDevice9HideCBMFiles=1', `FSDevice9HideCBMFiles=0') (all
     emulators except vsid).

`-fs10hidecbm'
`+fs10hidecbm'
     Enable/disable hiding of CBM files for drive 10
     (`FSDevice10HideCBMFiles=1', `FSDevice10HideCBMFiles=0') (all
     emulators except vsid).

`-fs11hidecbm'
`+fs11hidecbm'
     Enable/disable hiding of CBM files for drive 11
     (`FSDevice11HideCBMFiles=1', `FSDevice11HideCBMFiles=0') (all
     emulators except vsid).

`-flipname <name>'
     Specify name of the flip list file image (`FliplistName') (all
     emulators except vsid).


@EndNode

@Node "Printer settings" "vice.guide/Printer settings"
@Next "No kernal traps"
@Prev "File system device settings"
@Toc "Peripheral settings"

Printer settings
----------------

The VICE emulators can emulate printers connected to either the IEC
buffer or the user port.  Emulation can be achieved by redirecting the
printer output to a file or by piping it through an external process.
This is defined by so-called "printer device file names"; a printer
device file name can be either a simple path, or a command name
preceeded by a pipe symbol `|'.

For example, printer device `filename' will cause the output to be
appended to the file `filename', while printer device `|lpr' will cause
the `lpr' command to be executed and be fed the printer output.  The
printer output will not be converted but saved as printed by the
emulated machine.

Up to three printer devices may be specified through the following
resources:

   * device 1, whose default value is `print.dump';

   * device 2, whose default value is `|lpr'.

   * device 3, whose default value is `|petlp -F PS|lpr';

So, basically, by default printer device 1 will dump printer output to
`print.dump'; printer device 2 will print it via `lpr' directly to the
printer and device 3 will print it via `petlp' (a not-yet-complete
utility that will produce Postscript output from the Commodore printer
code) and then to the printer via `lpr'.


 @{" Printer resources " Link "Printer resources"} 
 @{" Printer options " Link "Printer options"} 


@EndNode

@Node "Printer resources" "vice.guide/Printer resources"
@Next "Printer options"
@Prev "Printer settings"
@Toc "Printer settings"

Printer resources
.................

`IECDevice4'
`IECDevice5'
`IECDevice6'
`IECDevice7'
     Booleans that specify whether IEC device emulation for device #4,
     #5, #6 and #7 is enabled.

`PrinterTextDevice1'
`PrinterTextDevice2'
`PrinterTextDevice3'
     Strings specifying the printer devices (see @{"Printer settings" Link "Printer settings"}).

`Printer4TextDevice'
`Printer5TextDevice'
`Printer6TextDevice'
     Integer (ranging from 0 to 2, for device 1-3) specifying what
     printer device (see @{"Printer settings" Link "Printer settings"}) the IEC printer is using.

`Printer4'
`Printer5'
`Printer6'
     Integer specifying how the printer (device 4-6) is being emulated.
     (0: None, 1: Filesystem, 2: Real)

`Printer7'
     Integer specifying how printer 7 is being emulated.  (0: None, 2:
     Real)

`Printer4Driver'
     String specifying the printer output driver.  (raw, ascii, mps803,
     nl10)

`Printer5Driver'
     String specifying the printer output driver.  (raw, ascii, mps803,
     nl10)

`Printer6Driver'
     String specifying the printer output driver.  (raw, 1520)

`Printer4Output'
`Printer5Output'
`Printer6Output'
     Strings specifying the IEC printer output device.  (text, graphics)

`PrinterUserport'
     Boolean specifying if the user-port printer is being emulated.

`PrinterUserportTextDevice'
     Integer (ranging from 0 to 2, for device 1-3) specifying what
     printer device the user-port printer is using.

`PrinterUserportDriver'
     String specifying the user-port printer output driver.
     (ascii/nl10/raw)

`PrinterUserportOutput'
     String specifying the user-port printer output device.  (text,
     graphics)


@EndNode

@Node "Printer options" "vice.guide/Printer options"
@Prev "Printer resources"
@Toc "Printer settings"

Printer command-line options
............................

`-iecdevice4'
`+iecdevice4'
     Enable/disable IEC device emulation for device #4 (`IECDevice4=1',
     `IECDevice4=0').

`-iecdevice5'
`+iecdevice5'
     Enable/disable IEC device emulation for device #5 (`IECDevice5=1',
     `IECDevice5=0').

`-iecdevice6'
`+iecdevice6'
     Enable/disable IEC device emulation for device #6 (`IECDevice6=1',
     `IECDevice6=0').

`-iecdevice7'
`+iecdevice7'
     Enable/disable IEC device emulation for device #7 (`IECDevice7=1',
     `IECDevice7=0').

`-device4 <type>'
     Set device type for device 4 (`Printer4').  (0: None, 1:
     Filesystem, 2: Real)

`-device5 <type>'
     Set device type for device 5 (`Printer5').  (0: None, 1:
     Filesystem, 2: Real)

`-device6 <type>'
     Set device type for device 6 (`Printer6').  (0: None, 1:
     Filesystem, 2: Real)

`-device7 <type>'
     Set device type for device 7 (`Printer7').  (0: None, 2: Real)

`-prtxtdev1 <name>'
`-prtxtdev2 <name>'
`-prtxtdev3 <name>'
     Specify name of printer text device or dump file
     (`PrinterTextDevice1', `PrinterTextDevice2', `PrinterTextDevice3').

`-pr4txtdev <0-2>'
`-pr5txtdev <0-2>'
`-pr6txtdev <0-2>'
     Specify printer text output device for IEC printer #4-6
     (`Printer4TextDevice', `Printer5TextDevice', `Printer6TextDevice').

`-pr4output <name>'
     Specify name of output device for device #4 (`Printer4Output').
     (text, graphics)

`-pr5output <name>'
     Specify name of output device for device #5 (`Printer5Output').
     (text, graphics)

`-pr6output <name>'
     Specify name of output device for device #6 (`Printer6Output').
     (text, graphics)

`-pr4drv <name>'
     Specify name of printer driver for device #4 (`Printer4Driver').
     (raw, ascii, mps803, nl10)

`-pr5drv <name>'
     Specify name of printer driver for device #5 (`Printer5Driver').
     (raw, ascii, mps803, nl10)

`-pr6drv <name>'
     Specify name of printer driver for device #6 (`Printer6Driver').
     (raw, 1520)

`-pruser'
`+pruser'
     Enable/disable emulation of the userport printer emulation
     (`PrUser=1', `PrUser=0').

`-prusertxtdev <0-2>'
     Specify printer text output device for userport printer
     (`PrinterUserportTextDevice').

`-pruseroutput <name>'
     Specify name of output device for the userport printer
     (`PrinterUserportOutput').  (text, graphics)

`-pruserdrv <name>'
     Specify name of printer driver for the userport printer
     (`PrinterUserportDriver').


@EndNode

@Node "No kernal traps" "vice.guide/No kernal traps"
@Prev "Printer settings"
@Toc "Peripheral settings"

Disabling kernal traps
----------------------

If you have compatibility problems, you can completely disable Kernal
traps with the "Disable kernal traps" option.  This will of course
disable all the features that depend on it, such as the fast 1541
emulation (so you will have to turn true 1541 emulation on if you want
to be able to read or write disk images) and tape support.


 @{" No traps resources " Link "No traps resources"} 
 @{" No traps options " Link "No traps options"} 


@EndNode

@Node "No traps resources" "vice.guide/No traps resources"
@Next "No traps options"
@Prev "No kernal traps"
@Toc "No kernal traps"

Resources to control Kernal traps
.................................

`VirtualDevices'
     Boolean specifying whether all the mechanisms for virtual device
     emulation should be enabled. Serial IEC devices use kernal traps,
     parallel IEEE488 devices use an own IEEE488 engine. Both are
     switched on and off with this resource.


@EndNode

@Node "No traps options" "vice.guide/No traps options"
@Prev "No traps resources"
@Toc "No kernal traps"

Command-line options to control Kernal traps
............................................

`-virtualdev'
`+virtualdev'
     Enable/disable virtual devices (`VirtualDevices=1',
     `VirtualDevices=0').


@EndNode

@Node "RS232 settings" "vice.guide/RS232 settings"
@Next "Monitor settings"
@Prev "Peripheral settings"
@Toc "Settings and resources"

RS232 settings
==============

The VICE emulators can emulate the RS232 device most of the machines
have.  The C64, C128 and VIC20 emulators emulate the userport RS232
interface at 300 and 1200 baud.  The C64 and C128 can also use the 9600
baud interface by Daniel Dallmann, using the shift registers of the two
CIA 6526 chips.  The PET can have a 6551 ACIA RS232 interface when
running as a SuperPET, and the CBM-II has such an ACIA by default.  The
C64 and C128 emulators can emulate an ACIA 6551 (also known as Datapump
for example) as extension at `$de**'.

Emulation can be achieved by either:

   * connecting a real UNIX serial device;

   * dumping to a file;

   * piping through a process.

It is possible to define up to four UNIX serial devices, and then decide
which interface should be connected to which device.  This is done by
so-called "rs232 device file names"; an rs232 device file name can be
either a simple path, or a command name preceeded by a pipe symbol `|'.
If the path specifies a special device (e.g. `/dev/ttyS0') it is
recognized by VICE and the emulator can set the baudrate.

For example, rs232 device `filename' will cause the output to be
written (not appended) to the file `filename', while printer device
`|lpr' will cause the `lpr' command to be executed and be fed the rs232
output.  The rs232 output will not be converted but saved as sent by
the emulated machine.  The same holds true for the rs232 input.  If the
command writes data to the standard output it will be caught by VICE
and sent back to the emulator.  Also the data sent by the pseudo device
will be sent back to VICE.

For example you can setup a null-modem cable between two serial ports
of your PC, setup one port for login and use the other in VICE.  Then
you can login from your emulator via the RS232 emulation and the
null-modem cable to your machine again.

You can not simply run a shell from VICE, as the shell will notice that
it does not run on its own pseudo terminal and will thus buffer its
output.  You need to write some program that opens an own pseudo
terminal and runs the shell from there (not yet finished).

Up to four RS232 devices may be specified through the following
resources:

   * device 1, whose default value is `/dev/ttyS0';

   * device 2, whose default value is `/dev/ttyS1';

   * device 3, whose default value is `rs232.dump';

   * device 4, whose default value is `|lpr'.

For the first two devices you can change the baudrate the tty device is
set to by specifying it on the commandline or in the menu.  This
baudrate is 9600 by default for the latter two, but can be changed only
by resources (The baudrate is independent from the baudrate the emulator
actually expects).


 @{" RS232 resources " Link "RS232 resources"} 
 @{" RS232 options " Link "RS232 options"} 
 @{" RS232 usage " Link "RS232 usage"} 


@EndNode

@Node "RS232 resources" "vice.guide/RS232 resources"
@Next "RS232 options"
@Prev "RS232 settings"
@Toc "RS232 settings"

RS232 resources
---------------

`RsDevice1'
`RsDevice2'
`RsDevice3'
`RsDevice4'
     Strings specifying the RS232 devices (see @{"RS232 settings" Link "RS232 settings"}).

`Acia1Enable'
     Boolean specifying whether the ACIA (Swiftlink, Turbo232)
     cartridge should be emulated or not (x64, x64sc, xscpu64, x128 and
     xvic only, and only if RS232 support is enabled and supported at
     compile time).

`Acia1Dev'
     Integer specifying what RS232 device (see @{"RS232 settings" Link "RS232 settings"}) the ACIA
     is using (all emulators except x64dtv and vsid, and only if RS232
     support is enabled and supported at compile time).

`Acia1Base'
     Integer specifying the base address for the emulated ACIA chip
     (x64, x64sc, xscpu64, xvic and x128 only, and only if RS232
     support is enabled and supported at compile time).  (xvic:
     $9800/$9C00, x128: $D700/$DE00/$DF00, x64/x64sc/xscpu64:
     $DE00/$DF00)

`Acia1Mode'
     Integer specifying the type of emulated RS232 interface (x64,
     x64sc, xscpu64, xvic and x128 only, and only if RS232 support is
     enabled and supported at compile time).  (0: normal, 1: Swiftlink,
     2: Turbo232)

`Acia1Irq'
     Integer specifying which interrupt to use (x64, x64sc, xscpu64,
     xvic and x128 only, and only if RS232 support is enabled and
     supported at compile time).  (0 = none, 1 = IRQ, 2 = NMI)

`RsUserEnable'
     Boolean specifying if the user-port RS232 interface is being
     emulated (C64, C128 and VIC20).

`RsUserBaud'
     Integer specifying the baudrate of the user-port RS232 interface
     (C64, C128 and VIC20).

`RsUserDev'
     Integer (ranging from 0 to 3, for device 1-4) specifying what
     RS232 device the user-port interface is using (C64, C128 and
     VIC20).


@EndNode

@Node "RS232 options" "vice.guide/RS232 options"
@Next "RS232 usage"
@Prev "RS232 resources"
@Toc "RS232 settings"

RS232 command-line options
--------------------------

`-rsdev1 <Name>'
`-rsdev2 <Name>'
`-rsdev3 <Name>'
`-rsdev4 <Name>'
     Specify <Name> as RS232 devices 1, 2, 3 and 4, respectively
     (`RsDevice1', `RsDevice2' `RsDevice3' and `RsDevice4').

`-acia1'
`+acia1'
     Enable/Disable the $DE** ACIA RS232 interface emulation
     (`Acia1Enable=1', `Acia1Enable=0') (x64, x64sc, xscpu64, x128 and
     xvic only, and only if RS232 support is enabled and supported at
     compile time).

`-myaciadev <0-3>'
     Specify RS232 device the ACIA should work on (all emulators except
     x64dtv and vsid, and only if RS232 support is enabled and
     supported at compile time)

`-acia1base <Base address>'
     Set the base address of the ACIA cartridge (`Acia1Base') (x64,
     x64sc, xscpu, x128 and xvic only, and only if RS232 support is
     enabled and supported at compile time).  (xvic: $9800/$9C00, x128:
     $D700/$DE00/$DF00, x64/x64sc/xscpu: $DE00/$DF00)

`-acia1mode <mode>'
     Set the ACIA mode (`Acia1Mode') (x64, x64sc, xscpu64, xvic and
     x128 only, and only if RS232 support is enabled and supported at
     compile time).  (0: Normal, 1: Swiftlink, 2: Turbo232)

`-acia1irq <interrupt>'
     Set the ACIA interrupt (`Acia1Irq') (x64, x64sc, xscpu64, xvic and
     x128 only, and only if RS232 support is enabled and supported at
     compile time).  (0: None, 1: NMI, 2: IRQ)

`-rsuser'
`+rsuser'
     Enable or disable emulation of the userport RS232 emulation
     (`RsUser'; C64, C128 and VIC20)

`-rsuserbaud <baud>'
     Set the baud rate of the RS232 userport emulation.

`-rsuserdev <0-3>'
     Specify device for the userport RS232 emulation (`RsUserDev'; C64,
     C128 and VIC20).


@EndNode

@Node "RS232 usage" "vice.guide/RS232 usage"
@Prev "RS232 options"
@Toc "RS232 settings"

RS232 usage example
-------------------

Here we give you a simple example how to set up an emulated C64 using
the modem connected to your PC. The following list shows each step.

`Attach your modem to your PC at a serial port.'
     Normally you should set it up to use the modem as "/dev/modem".

`start VICE'
`Setup VICE to use your modem as "serial device 1"'
     Go to the RS232 settings menu and change "Serial 1 device" to
     "/dev/modem" (or the device where you attached your modem to) Then
     go to the RS232 settings menu and change "Serial 1 baudrate" to
     the baudrate your modem should run at.    Watch out, e.g. on Linux
     there is an additional multiplier   to multiply with the baudrate
     (so e.g. 19200 gives 115200 or so baud)   See the "setserial"
     manpage on Linux for example.    However, most modems should be
     able to autodetect the speed to   the computer as well.

`Select the RS232 emulation your programs use'
     If you want to use the Userport emulation, go to the RS232
     settings and   change "Userport RS232 Device" to   "Serial 1". If
     you want ACIA emulation (swiftlink or what's it called?)   then
     change "ACIA $DE** device" to "Serial 1".

`Enable the emulation'
     Go to the RS232 settings and select either "ACIA $DE** emulation"
     or Userport 300/1200 baud or CIA 9600 baud emulation.

`Load your program and start it.'
     If it is able to detect an   RS232 cartridge like swiftlink or so,
     try to detect the ACIA emulation   if enabled.    Otherwise just
     set the baudrate to either 300, 1200 or 9600 according   to what
     you enabled in the VICE menu for the userport.


@EndNode

@Node "Monitor settings" "vice.guide/Monitor settings"
@Next "Misc settings"
@Prev "RS232 settings"
@Toc "Settings and resources"

Monitor settings
================

This section lists command-line options specific to the built-in
monitor.


 @{" Monitor options " Link "Monitor options"} 


@EndNode

@Node "Monitor options" "vice.guide/Monitor options"
@Toc "Monitor settings"

Monitor resources
-----------------

`KeepMonitorOpen'
     Boolean, if true the monitor window may stay open when the
     emulation is running, eg to look at trace-point output. (Not all
     ports/UIs support this, in that case this setting has no effect.)

`MonitorServer'
     Boolean specifying whether the remote monitor server is enabled.

`MonitorServerAddress'
     String specifying the address the remote monitor server listens to
     (ip4://127.0.0.1:6510)

Monitor command-line options
----------------------------

`-moncommands <Name>'
     Execute the commands from the file <Name> in the monitor after
     starting up. This command line switch is mainly thought to load
     labels and to set breakpoints.  Not all other commands are useful
     to be executed in this way, some may even lead to strange effects.

`-initbreak <address>'
     Set an initial breakpoint for the monitor. Addresses with prefix
     "0x" are hexadecimal.

`-keepmonopen'
`+keepmonopen'
     Enable/disable keeping the monitor window open
     (`KeepMonitorOpen=1', `KeepMonitorOpen=0').

`-remotemonitor'
`+remotemonitor'
     Enable/Disable remote monitor

`-remotemonitoraddress <name>'
     The local address the remote monitor should bind to

Memory settings
===============

Memory resources
----------------

`RAMInitStartValue'
     Integer specifying the value for the very first RAM address after
     powerup (all emulators except vsid).  (0..255)

`RAMInitValueInvert'
     Integer specifying the length of the memory block initialized with
     the same value (all emulators except vsid).

`RAMInitPatternInvert'
     Integer specifying the length of the memory block initialized with
     the same pattern (all emulators except vsid).

Memory command-line options
---------------------------

`-raminitstartvalue <value>'
     Set the value for the very first RAM address after powerup
     (`RAMInitStartValue') (all emulators except vsid).  (0..255)

`-raminitvalueinvert <num of bytes>'
     Length of memory block initialized with the same value
     (`RAMInitValueInvert') (all emulators except vsid).

`-raminitpatterninvert <num of bytes>'
     Length of memory block initialized with the same pattern
     (`RAMInitPatternInvert') (all emulators except vsid).


@EndNode

@Node "Misc settings" "vice.guide/Misc settings"
@Prev "Monitor settings"
@Toc "Settings and resources"

Miscellaneous settings
======================

This section lists generic resources that do not fit in the other
categories.


 @{" Misc resources " Link "Misc resources"} 
 @{" Misc options " Link "Misc options"} 


@EndNode

@Node "Misc resources" "vice.guide/Misc resources"
@Next "Misc options"
@Prev "Misc settings"
@Toc "Misc settings"

Miscellaneous resources
-----------------------

`JAMAction'
     Integer specifying the action to take when the CPU encounters a
     'JAM' opcode.  (0: show dialog, 1: continue emulation, 2: start
     monitor, 3: soft reset, 4: hard reset, 5: quit emulator)

`Directory'
     String specifying the search path for system files.  It is defined
     as a sequence of directory names, separated by colons (`:'), just
     like the `PATH' variable in the shell. The special string `$$'
     stands for the default search path.

`DoCoreDump'
     Boolean specifying whether the emulator should dump core when it
     gets a signal (all emulators except vsid).

`NetworkServerName'
     String specifying the name of the remote server.

`NetworkServerBindAddress'
     String specifying the IP of the remote server.

`NetworkServerPort'
     Integer specifying the port used for network play.

`NetworkControl'
     Integer specifying whether the emulator is running as server or
     client (0: client, 1: server)

`LogFileName'
     String specifying the filename of the current log file.

`FliplistName'
     String specifying the filename of the current flip list. (Drive 8
     only) (all emulators except vsid).

`AttachDevice8Readonly'
`AttachDevice9Readonly'
`AttachDevice10Readonly'
`AttachDevice11Readonly'
     Booleans that specify whether to attach images on drives 8 to 11
     read-only or not (all emulators except vsid).

`UserportRTC'
     Boolean specifying whether the userport RTC is emulated or not
     (x64, x64sc, xscpu64 and x128 only).

`UserportRTCSave'
     Boolean specifying whether the userport RTC data is saved when
     changed or not (x64, x64sc, xscpu64 and x128 only).


@EndNode

@Node "Misc options" "vice.guide/Misc options"
@Prev "Misc resources"
@Toc "Misc settings"

Miscellaneous command-line options
----------------------------------

`-jamaction <Type>'
     Specify the action to take when the CPU encounters a 'JAM' opcode
     (`JAMAction') (0: Show dialog, 1: continue emulation, 2: start
     monitor, 3: soft reset, 4: hard reset, 5: quit emulator).

`-directory <Path>'
     Specify the system file search path (`Directory').

`-core'
`+core'
     Enable/disable generation of core dumps (`DoCoreDump=1',
     `DoCoreDump=0') (all emulators except vsid).

`-debug'
`+debug'
     Disable/enable calling of the exception handler (`DoCoreDump=1',
     `DoCoreDump=0') (all emulators except vsid).

`-userportrtc'
`+userportrtc'
     Enable/disable the userport RTC emulation (`UserportRTC=1',
     `UserportRTC=0') (x64, x64sc, xscpu64 and x128 only).

`-userportrtcsave'
`+userportrtcsave'
     Disable/enable saving of the userport RTC data when changed
     (`UserportRTCSave=1', `UserportRTCSave=0') (x64, x64sc, xscpu64
     and x128 only).


@EndNode

@Node "Machine-specific features" "vice.guide/Machine-specific features"
@Next "Platform-specific features"
@Prev "Settings and resources"
@Toc "Main"

Machine-specific features
*************************


 @{" C64-128-specific " Link "C64-128-specific"}             Commands and settings specific to the
                                C64/128 emulators
 @{" C128-specific " Link "C128-specific"}                Commands and settings specific to the
                                C128 emulator
 @{" C64DTV-specific " Link "C64DTV-specific"}              Commands and settings specific to the
                                C64DTV emulator
 @{" SCPU64-specific " Link "SCPU64-specific"}              Commands and settings specific to the
                                SCPU64 emulator
 @{" VIC20-specific " Link "VIC20-specific"}               Commands and settings specific to the
                                VIC20 emulator
 @{" PLUS4-specific " Link "PLUS4-specific"}               Commands and settings specific to the
                                PLUS4 emulator
 @{" PET-specific " Link "PET-specific"}                 Commands and settings specific to the
                                PET emulator
 @{" CBM-II-specific " Link "CBM-II-specific"}              Commands and settings specific to the
                                CBM-II emulator
 @{" VSID-specific " Link "VSID-specific"}                Commands and settings specific to the
                                VSID music player


@EndNode

@Node "C64-128-specific" "vice.guide/C64-128-specific"
@Next "C128-specific"
@Prev "Machine-specific features"
@Toc "Machine-specific features"

C64/128-specific commands and settings
======================================

This section lists the settings and commands that are C64/128 specific
and thus are not present in the other emulators.


 @{" C64 cartridges " Link "C64 cartridges"}               Using cartridges with the C64 emulator.
 @{" VIC-II settings " Link "VIC-II settings"}              Settings that control the video chip.
 @{" SID settings " Link "SID settings"}                 Settings that control the audio chip.
 @{" C64 I-O extension settings " Link "C64 I-O extension settings"}   Settings that enable special extensions.
 @{" C64 system ROM settings " Link "C64 system ROM settings"}      Settings to control the C64 system ROMs.


@EndNode

@Node "C64 cartridges" "vice.guide/C64 cartridges"
@Next "VIC-II settings"
@Prev "C64-128-specific"
@Toc "C64-128-specific"

Using cartridges
----------------

The cartridge system is organized in "Slots" to allow more than one
cartridge connected at a time, like it can be done using an expansion
port expander on a real C64 (see below).

Generally a cartridge can be enabled by attaching its respective
cartridge image, or using the respective menu option for cartridges
that do not require an image.

x64, x64sc and x128 allow you to attach the following kinds of images:

   * `.crt' images, as used by the CCS64 emulator by Per Håkan Sundell

   * raw `.bin' images, with or without load address

"Cartridge images" are like disk images, but contain the contents of
cartridge ROM and/or RAM images instead of disk images.

To attach cartridges, use the "Attach a cartridge image" submenu. When
using `.crt' images, this will work for every cartridge which is
supported. For raw `.bin' images you might have to use command line
options.

When you have successfully attached a cartridge image, you should then
reset the machine to make sure the cartridge initializes itself. (Or
enable the "reset on cartridge change" option).

Of course, it is also possible to detach a currently attached cartridge
image ("Detach cartridge image").

If you are using a freezer cart like an Action Replay cartridge, you can
emulate the cartridge's freeze button with the "Cartridge freeze"
command.

The imaginary expansion port expander is organized in 4 slots, the
cartridges are associated with them like this:

Slot 0
......

All carts that have a passthrough connector go here. Once a "Slot 0"
cartridge is enabled all further cartridges are connected to its
respective passthrough port.

Only one cartridge of this type can be active at a time.

"Slot 0" carts have individual "enable" switches, enabling means
enabling permanently.

The following cartridges are emulated in this slot:

   * IEEE-488 Interface









     (`http://www.funet.fi/pub/cbm/schematics/cartridges/c64/ieee-488/eprom.bin')

   * Magic Voice

   * MMC64

Slot 1
......

Mostly RAM based cartridges which for one reason or the other might
make sense to be enabled together with one of the "Main Slot"
cartridges go here.

Only one cartridge of this type can be active at a time.

"Slot 1" carts have individual "enable" switches, enabling means
enabling permanently

The following cartridges are emulated in this slot:

   * Double Quick Brown Box (DQBB)

   * Expert Cartridge

   * ISEPIC

   * RamCart

Main Slot
.........

All other cartridges which are not pure i/o extensions go here.

Only one cartridge of this type can be active at a time.

Cartridges in the "Main Slot" must be explicitly set as default to
enable them permanently.

The following cartridges are emulated in this slot:

   * generic 4K, 8K and 16K game- and ultimax cartridges

   * Action Replay V5

   * Action Replay MK2

   * Action Replay MK3

   * Action Replay MK4

   * Atomic Power

   * C64 Games System

   * Capture

   * Comal 80

   * Dela EP64

   * Dela EP7x8

   * Dela EP256

   * Diashow-Maker

   * Dinamic

   * EasyFlash

   * Epyx FastLoad

   * EXOS

   * The Final Cartridge

   * The Final Cartridge III

   * Final Cartridge Plus

   * Freeze Frame

   * Freeze Machine

   * Fun Play

   * Game Killer

   * IDE64 (`http://www.ide64.org')

   * KCS Power Cartridge

   * MACH 5

   * Magic Desk

   * Magic Formel

   * Mikro Assembler

   * MMC Replay

   * Ocean

   * Prophet64

   * REX 256k EPROM Cart

   * REX Utility

   * Retro Replay

   * RGCD

   * RR-Net MK3

   * ROSS

   * Simons' BASIC

   * Snapshot 64

   * Stardos

   * Structured BASIC

   * Super Explode V5.0

   * Super Games

   * Super Snapshot V4

   * Super Snapshot V5

   * Warp Speed

   * Westermann Learning

   * Zaxxon

I/O Slot
........

All carts that are pure I/O extensions go here.

Any number of "I/O Slot" Carts may be active at a time.

"I/O Slot" carts have individual "enable" switches, enabling means
enabling permanently.

The following cartridges are emulated in this slot:

   * ACIA (Swiftlink, Turbo232)

   * DigiMAX

   * DS12C887 RTC

   * Ethernet (The Final Ethernet, RR-Net)

   * GEO-RAM

   * MIDI (Passport/Syntech, Datel/Siel/JMS/C-Lab, Maplin, Namesoft,
     Sequential)

   * RAM Expansion Module (REU)

   * SFX Sound Expander

   * SFX Sound Sampler

Expected behaviour
..................

When the emulator is run without arguments, all settings from the
config file should be applied and arguments override settings from the
config file.

When saving the settings to the config file it is expected that on the
next run of the emulator all settings will be in the same state as they
were when saved.

There is an exception to this rule: the cartridge in the "Main Slot"
must be explicitly set as default before it gets saved to the config
file.

`+cart' should disable ALL cartridges, including eventually activated
REU, Swithlink and all similar expansionport devices.

`-cartXYZ' options should generally attach AND activate a cart of type
XYZ.  As a consequence, attaching carts this way which are NOT in the
"Main Slot" will also enable the cart permanently.

Common problems
...............

If attaching a cartridge does not work as expected, this may be because
of various reasons:

   * Not seldomly the CRT type is incorrectly set in `.crt' files found
     "in the wild".  Make sure this is not the case (if in doubt use
     `cartconv' to verify and/or fix).

   * You may have unintentionally enabled more than one cartridge at
     once, for example by saving the settings with REU enabled, and
     then later attaching a game cartridge from the command-line. The
     cartridge system will allow certain combinations, but (as on the
     real thing) not all do (can) actually work. To make sure this is
     not the case, either detach all cartridges from the menus, or use
     `+cart' on the command-line.

   * The cartridge image might be broken. Try one from a different
     source. If you are sure the dump is ok (for example because you
     dumped it yourself) then make sure it is in proper linear order
     (on some cartridges, for example "capture", address and/or data
     lines at the eprom are shuffled around so a dump made with an
     eprom burner can not be used as is).

   * Last not least you might have encountered a bug in the emulation.
     If you suspect this is the case, and you can still reproduce the
     bug after checking the things above, please file a bug report
     including the following information:

        * attach your vicerc and a reference to the cartridge binaries

        * if you can, comment in the respective DEBUGXYZ macros
          prominently defined at the top of these files:
          src/c64/cart/c64cart.c src/c64/cart/c64cartmem.c
          src/c64/c64io.c src/c64/c64export.c and then recompile. this
          will add debug output that might make it much easier to
          locate certain problems.

IEEE-488 interface
..................

To be able to use an IEEE drive, you need to enable IEEE emulation for
the emulator. To do this, follow the following steps:

Download the IEEE 488 ROM image from the CBM archives (formerly known
as FUNET) Attach that image with File/Attach cartridge image/IEEE488
interface image.

Make sure you have a one-drive system only (that is, go to
Settings/Peripheral Setting, uncheck "use IEC device" for all devices,
go to Settings/Drive Settings and select "Floppy type" as "none" for
all drives other than drive 8.

After this, all drives can be selected in x64 and x128.

The Final Cartridge 3
.....................

The Final Cartridge 3 detects whether a mouse is connected when it
starts and disables mouse support if it doesnt detect one. So to make
mouse emulation work you must either enable it on the command line, or
reset the cartridge after enabling it from the user interface.

C64 cartridge settings
----------------------

C64 cartridge resources
.......................

`IOCollisionHandling'
     Integer specifying the way the I/O collisions should be handled.
     (0: error message and detach all involved carts, 1: error message
     and detach last attached involved carts, 2: warning in log and
     'AND' the valid return values)

`CartridgeReset'
     Boolean specifying whether the machine should be reset when a
     cartridge is changed.

`CartridgeType'
     Integer specifying the type of cartridge emulated in the "main"
     slot.

     The following cartridge types are valid:

        * -6: Ultimax

        * -3: Generic 8k

        * -2: Generic 16k

        * -1: None

        *  0: CRT

        *  1: Action Replay V5

        *  2: KCS Power Cartridge

        *  3: The Final Cartridge III

        *  4: Simons' BASIC

        *  5: Ocean

        *  6: Expert Cartridge

        *  7: Fun Play

        *  8: Super Games

        *  9: Atomic Power / Nordic Power

        * 10: Epyx FastLoad

        * 11: Westermann Learning

        * 12: REX Utility

        * 13: The Final Cartridge

        * 14: Magic Formel

        * 15: C64 Games System

        * 16: Warp Speed

        * 17: Dinamic

        * 18: Zaxxon

        * 19: Magic Desk

        * 20: Super Snapshot V5

        * 21: Comal 80

        * 22: Structured BASIC

        * 23: ROSS

        * 24: Dela EP64

        * 25: Dela EP7x8

        * 26: Dela EP256

        * 27: REX 256k EPROM Cart

        * 28: Mikro Assembler

        * 29: Final Cartridge Plus

        * 30: Action Replay MK4

        * 31: Stardos

        * 32: EasyFlash

        * 33: EasyFlash Xbank

        * 34: Capture

        * 35: Action Replay MK3

        * 36: Retro Replay

        * 37: MMC64

        * 38: MMC Replay

        * 39: IDE64

        * 40: Super Snapshot V4

        * 41: IEEE-488 Interface

        * 42: Game Killer

        * 43: Prophet64

        * 44: EXOS

        * 45: Freeze Frame

        * 46: Freeze Machine

        * 47: Snapshot 64

        * 48: Super Explode V5.0

        * 49: Magic Voice

        * 50: Action Replay MK2

        * 51: MACH 5

        * 52: Diashow-Maker

        * 53: Pagefox

        * 54: Kingsoft

        * 55: Silverrock 128K Cartridge

        * 56: Formel 64

        * 57: RGCD

        * 58: RR-Net MK3

`CartridgeFile'
     String specifying the filename of the image for the cartridge
     emulated in the "main" slot.

`DQBB'
     Boolean specifying whether the Double Quick Brown Box should be
     emulated or not.

`DQBBfilename'
     String specifying the filename of the DQBB RAM image.

`DQBBImageWrite'
     Boolean, if true write back the DQBB image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`EasyFlashJumper'
     Boolean specifying whether the Easy Flash jumper is set.

`EasyFlashWriteCRT'
     Boolean, if true write back the Easy Flash image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`EasyFlashOptimizeCRT'
     Boolean, if true omit empty (filled with $ff) banks from the .crt
     image when writing.

`ExpertCartridgeEnabled'
     Boolean specifying whether the Expert Cartridge should be emulated
     or not.

`Expertfilename'
     String specifying the filename of the Expert Cartridge RAM image.

`ExpertImageWrite'
     Boolean, if true write back the Expert Cartridge image file
     automatically, incase the RAM contents changed, when detaching or
     quitting the emulator.

`ExpertCartridgeMode'
     Integer specifying the state of the expert cartridge switch.  (0:
     off, 1: prg, 2: on)

`IDE64version'
     Integer specifying whether the emulated card version is V3.4, V4.1
     or V4.2. This is automatically detected most of the time for .crt
     cartridge images.

`IDE64Image1'
`IDE64Image2'
`IDE64Image3'
`IDE64Image4'
     Strings specifying the full path to the four harddisk images. If a
     file is non-existing the drive is not emulated.  Some older IDEDOS
     versions only support the first two harddisks.

`IDE64Cylinders1'
`IDE64Cylinders2'
`IDE64Cylinders3'
`IDE64Cylinders4'
     Integers specifying the number of cylinders for the four harddisk
     images.  (1..65535)

`IDE64Heads1'
`IDE64Heads2'
`IDE64Heads3'
`IDE64Heads4'
     Integers specifying the number of heads for the four harddisk
     images.  (1..16)

`IDE64Sectors1'
`IDE64Sectors2'
`IDE64Sectors3'
`IDE64Sectors4'
     Integers specifying the number of sectors for the four harddisk
     images.  (1..63)

`IDE64AutodetectSize1'
`IDE64AutodetectSize2'
`IDE64AutodetectSize3'
`IDE64AutodetectSize4'
     Booleans specifying whether the disk geometry should be auto
     detected based on the disk image for the respective harddisk, or
     the cylinder/head/sector resources above should be used.

`IDE64USBServerAddress'
     String specifying the address the IDE64 USB server listens to
     (ip4://127.0.0.1:64245)

`IDE64USBServer'
     Boolean specifying whether the IDE64 USB server is enabled.

`IDE64RTCSave'
     Boolean specifying whether the IDE64 RTC data should be saved when
     changed or not.

`IEEE488'
     Boolean specifying whether the IEEE488 interface should be
     emulated or not.

`IEEE488Image'
     String specifying the filename of the IEEE488 ROM image.

`IsepicCartridgeEnabled'
     Boolean specifying whether ISEPIC should be emulated or not.

`Isepicfilename'
     String specifying the filename of the ISEPIC RAM image.

`IsepicSwitch'
     Boolean specifying the status of the ISEPIC switch.  (0: off, 1:
     on)

`IsepicImageWrite'
     Boolean, if true write back the ISEPIC image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`MagicVoiceCartridgeEnabled'
     Boolean specifying whether the Magic Voice should be emulated or
     not.

`MagicVoiceImage'
     String specifying the filename of the Magic Voice ROM image.

`MMC64'
     Boolean specifying whether the MMC64 should be emulated or not.

`MMC64BIOSfilename'
     String specifying the filename of the MMC64 Flash ROM image.

`MMC64_bios_write'
     Boolean, if true write back the MMC64 Flash ROM image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`MMC64_flashjumper'
     Boolean that specifies whether the MMC64 flash jumper is set.

`MMC64_revision'
     Integer specifying the MMC64 hardware revision.  (0: Revision A,
     1: Revision B)

`MMC64imagefilename'
     String specifying the filename of the SD-Card image used by the
     MMC64 emulation.

`MMC64_RO'
     Boolean, if true the SD-Card image is mounted read-only.

`MMC64_sd_type'
     Integer that specifies the reported type for the emulated SD-Card.
     (0: Auto, 1: MMC, 2: SD, 3: SDHC)

`MMCRCardImage'
     String specifying the filename of the SD-Card image used by the
     MMCR emulation.

`MMCREEPROMImage'
     String specifying the filename of the MMCR EEPROM image.

`MMCRRescueMode'
     Boolean specifying if the rescue mode (both buttons pressed during
     powerup) of the MMCR is active.

`MMCRImageWrite'
     Boolean, if true write back the MMCR Flash ROM image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`MMCRCardRW'
     Boolean specifying if the SD-Card image used by the MMCR emulation
     is writeable.

`MMCRSDType'
     Integer that specifies the reported type for the emulated SD-Card.
     (0: Auto, 1: MMC, 2: SD, 3: SDHC)

`MMCREEPROMRW'
     Boolean specifying if the MMCR EEPROM image is writeable.

`RAMCART'
     Boolean specifying whether the RAMCart should be emulated or not.

`RAMCARTfilename'
     String specifying the filename of the RAMCart RAM image.

`RAMCARTImageWrite'
     Boolean, if true write back the RAMCart image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`RAMCART_RO'
     Boolean, if true the RAMCart contents are read only.

`RAMCARTsize'
     Integer specifying the size of the RAMCart in KB.  (64, 128)

`RRrevision'
     Integer specifying the RR hardware revision.  (0: Retro Replay, 1:
     Nordic Replay)

`RRFlashJumper'
     Boolean specifying whether the RR flash jumper is set or not.

`RRBankJumper'
     Boolean specifying whether the RR bank jumper is set or not.

`RRBiosWrite'
     Boolean, if true write back the RR Flash ROM image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`SSRamExpansion'
     Boolean, if true enable the 32k addon RAM of the Supersnapshot V5

C64 cartridge command-line options
..................................

`-iocollision <method>'
     Select the way the I/O collisions should be handled
     (`IOCollisionHandling').  (0: error message and detach all
     involved carts, 1: error message and detach last attached involved
     carts, 2: warning in log and 'AND' the valid return values

`+cart'
     Disable all cartridges (which would eventually be enabled in the
     config file).

`-cartreset'
`+cartreset'
     Reset/Do not reset machine if a cartridge is attached or detached
     (`CartridgeReset=1', `CartridgeReset=0').

`-cart8 <name>'
     Attach generic 8KB cartridge image.

`-cart16 <name>'
     Attach generic 16KB cartridge image.

`-cartultimax <name>'
     Attach generic 16kB Ultimax cartridge image.

`-cartcrt <name>'
     Attach CRT cartridge image.

`-cartap <name>'
     Attach raw 32KB Atomic Power cartridge image.

`-cartar2 <name>'
     Attach raw 16kB Action Replay MK2 cartridge image.

`-cartar3 <name>'
     Attach raw 16KB Action Replay MK3 cartridge image.

`-cartar4 <name>'
     Attach raw 32KB Action Replay MK4 cartridge image.

`-cartar5 <name>'
     Attach raw 32KB Action Replay cartridge image.

`-cartcap <name>'
     Attach raw 8kB Capture cartridge image.

`-cartcomal <name>'
     Attach raw 64kB Comal 80 cartridge image.

`-cartdep256 <name>'
     Attach raw Dela EP256 cartridge image.

`-cartdep64 <name>'
     Attach raw Dela EP64 cartridge image.

`-cartdep7x8 <name>'
     Attach raw Dela EP7x8 cartridge image.

`-cartdin <name>'
     Attach raw 128kB Dinamic cartridge image.

`-cartdsm <name>'
     Attach raw 8kB Diashow-Maker cartridge image.

`-cartdqbb <name>'
     Attach raw 16kB Double Quick Brown Box cartridge image.

`-dqbb'
`+dqbb'
     Enable/disable Double Quick Brown Box (`DQBB=1', `DQBB=0').

`-dqbbimage <name>'
     Specify Double Quick Brown Box filename (`DQBBfilename').

`-dqbbimagerw'
`+dqbbimagerw'
     Allow/disallow writing to DQBB image (`DQBBImageWrite=1',
     `DQBBImageWrite=0').

`-carteasy <name>'
     Attach raw EasyFlash cartridge image.

`-easyflashjumper'
`+easyflashjumper'
     Enable/disable EasyFlash jumper (`EasyFlashJumper=1',
     `EasyFlashJumper=0').

`-easyflashcrtwrite'
`+easyflashcrtwrite'
     Allow/Disallow writing to EasyFlash .crt image
     (`EasyFlashWriteCRT=1', `EasyFlashWriteCRT=0').

`-easyflashcrtoptimize'
`+easyflashcrtoptimize'
     Allow/Disallow EasyFlash .crt image optimizing (omitting of empty
     banks) on write (`EasyFlashOptimizeCRT=1',
     `EasyFlashOptimizeCRT=0').

`-cartepyx <name>'
     Attach raw 8KB Epyx FastLoad cartridge image.

`-cartexos <name>'
     Attach raw 8kB EXOS cartridge image.

`-cartexpert <name>'
     Attach raw 8kB Expert Cartridge image.

`-expert'
`+expert'
     Enable/Disable the Expert Cartridge (`ExpertCartridgeEnabled=1',
     `ExpertCartridgeEnabled=0').

`-expertimagename <name>'
     Set Expert Cartridge image name (`Expertfilename').

`-expertimagerw'
`+expertimagerw'
     Allow/Disallow writing to Expert Cartridge image
     (`ExpertImageWrite=1', `ExpertImageWrite=0').

`-expertmode <mode>'
     Set Expert Cartridge mode (`ExpertCartridgeMode').  (0: off, 1:
     prg, 2: on)

`-cartf64 <Name>'
     Attach raw 32kB Formel 64 image.

`-cartfc1 <name>'
     Attach raw 16kB Final Cartridge image.

`-cartfc3 <name>'
     Attach raw 64kB Final Cartridge III image.

`-cartfcplus <name>'
     Attach raw 32kB Final Cartridge Plus image.

`-cartff <name>'
     Attach raw 8kB Freeze Frame image.

`-cartfm <name>'
     Attach raw 32kB Freeze Machine image.

`-cartfp <name>'
     Attach raw 128kB Fun Play/Power Play cartridge image.

`-cartgk <name>'
     Attach raw 8KB Game Killer cartridge image.

`-cartgs <name>'
     Attach raw 512kB Game System cartridge image.

`-cartide64 <name>'
     Attach raw 64KB or 128KB IDE64 cartridge image.

`-IDE64image1 <name>'
`-IDE64image2 <name>'
`-IDE64image3 <name>'
`-IDE64image4 <name>'
     Specify path to the image files for IDE64 harddisks
     (`IDE64Image1', `IDE64Image2', `IDE64Image3', `IDE64Image4').

`-IDE64cyl1 <value>'
`-IDE64cyl2 <value>'
`-IDE64cyl3 <value>'
`-IDE64cyl4 <value>'
     Set number of cylinders for the IDE64 harddisk emulation
     (`IDE64Cylinders1', `IDE64Cylinders2', `IDE64Cylinders3',
     `IDE64Cylinders1').  (1..65535)

`-IDE64hds1 <value>'
`-IDE64hds2 <value>'
`-IDE64hds3 <value>'
`-IDE64hds4 <value>'
     Set number of heads for the IDE64 harddisk emulation
     (`IDE64Heads1', `IDE64Heads2', `IDE64Heads3', `IDE64Heads4').
     (1..16)

`-IDE64sec1 <value>'
`-IDE64sec2 <value>'
`-IDE64sec3 <value>'
`-IDE64sec4 <value>'
     Set number of sectors for the IDE64 harddisk emulation
     (`IDE64Sectors1', `IDE64Sectors2', `IDE64Sectors3',
     `IDE64Sectors4').  (1..63)

`-IDE64autosize1'
`+IDE64autosize1'
     Autodetect geometry of formatted image or do not autodetect and
     use specified geometry (`IDE64AutodetectSize1=1',
     `IDE64AutodetectSize1=0').

`-IDE64autosize2'
`+IDE64autosize2'
     Autodetect geometry of formatted image or do not autodetect and
     use specified geometry (`IDE64AutodetectSize2=1',
     `IDE64AutodetectSize2=0').

`-IDE64autosize3'
`+IDE64autosize3'
     Autodetect geometry of formatted image or do not autodetect and
     use specified geometry (`IDE64AutodetectSize3=1',
     `IDE64AutodetectSize3=0').

`-IDE64autosize4'
`+IDE64autosize4'
     Autodetect geometry of formatted image or do not autodetect and
     use specified geometry (`IDE64AutodetectSize4=1',
     `IDE64AutodetectSize4=0').

`-IDE64version <value>'
     Select IDE64 version V3 (0), V4.1 (1) or V4.2 (2).
     (`IDE64version').  (0..2)

`-IDE64USB'
`+IDE64USB'
     Enable/Disable IDE64 USB server

`-IDE64USBAddress <name>'
     The local address the IDE64 USB server should bind to

`-IDE64rtcsave'
`+IDE64rtcsave'
     Enable/disable saving of IDE64 RTC data when changed
     (`IDE64RTCSave=1', `IDE64RTCSave=0').

`-cartieee <name>'
     Attach CBM IEEE-488 cartridge image.

`-ieee488'
`+ieee488'
     Enable/disable emulation of the IEEE488 interface (`IEEE488=1',
     `IEEE488=0').  .

`-ieee488image <name>'
     Set IEEE488 interface image name (`IEEE488Image').

`-isepic'
`+isepic'
     Enable/disable the ISEPIC cart (`IsepicCartridgeEnabled=1',
     `IsepicCartridgeEnabled=0').

`-isepicswitch'
`+isepicswitch'
     Enable/disable the ISEPIC switch (`IsepicSwitch=1',
     `IsepicSwitch=0').

`-cartisepic <name>'
     Attach raw 2kB ISEPIC cartridge image.

`-isepicimagename <name>'
     Set ISEPIC image name (`Isepicfilename').

`-isepicimagerw'
`+isepicimagerw'
     Allow/disallow writing to ISEPIC image (`IsepicImageWrite=1',
     `IsepicImageWrite=0').

`-cartkcs <name>'
     Attach raw 16kB KCS Power cartridge image.

`-cartks <name>'
     Attach raw 24kB Kingsoft cartridge image.

`-cartmach5 <name>'
     Attach raw 8kB MACH 5 cartridge image.

`-cartmd <name>'
     Attach raw 32/64/128kB Magic Desk cartridge image.

`-cartmf <name>'
     Attach raw Magic Formel cartridge image.

`-cartmikro <name>'
     Attach raw 8kB Mikro Assembler cartridge image.

`-mmc64'
`+mmc64'
     Enable/disable the MMC64 expansion (`MMC64=1', `MMC64=0').

`-cartmmc64 <name>'
     Attach raw 8kB MMC64 cartridge image.

`-mmc64bios <name>'
     Specify name of MMC64 BIOS image (`MMC64BIOSfilename').

`-mmc64image <name>'
     Specify name of MMC64 image (`MMC64imagefilename').

`-mmc64readonly'
     Set the MMC64 card to read-only (`MMC64_RO=1').

`-mmc64readwrite'
     Set the MMC64 card to read/write (`MMC64_RO=0').

`-mmc64flash'
`+mmc64flash'
     Enable/Disable the MMC64 flash jumper (`MMC64_flashjumper=1',
     `MMC64_flashjumper=0').

`-mmc64bioswrite'
     Save the MMC64 bios when changed (`MMC64_bios_write'=1).

`-mmc64biosreadonly'
     Do not save the MMC64 bios when changed (`MMC64_bios_write'=0).

`-mmc64rev <revision>'
     Specify MMC64 revision (`MMC64_revision').  (0: Revision A, 1:
     Revision B)

`-mmc64sdtype <type>'
     Specify MMC64 SD type (`MMC64_sd_type').  (0: Auto, 1: MMC, 2: SD,
     3: SDHC)

`-cartmmcr <name>'
     Attach raw 512kB MMC Replay cartridge image.

`-mmcrrescue'
`+mmcrrescue'
     Enable/disable MMC Replay rescue mode (`MMCRRescueMode=1',
     `MMCRRescueMode=0').

`-mmcrimagerw'
`+mmcrimagerw'
     Allow/disallow writing to MMC Replay image (`MMCRImageWrite=1',
     `MMCRImageWrite=0').

`-mmcrsdtype <type>'
     Specify MMC Replay SD type (`MMCRSDType').  (0: Auto, 1: MMC, 2:
     SD, 3: SDHC)

`-mmcrcardimage <filename>'
     Specify MMC Replay card image filename (`MMCRCardImage').

`-mmcrcardrw'
`+mmcrcardrw'
     Allow/disallow writes to MMC Replay card image (`MMCRCardRW=1',
     `MMCRCardRW=0').

`-mmcreepromimage <filename>'
     Specify MMC Replay EEPROM image filename (`MMCREEPROMImage').

`-mmcreepromrw'
`+mmcreepromrw'
     Allow/disallow writes to MMC Replay EEPROM image
     (`MMCREEPROMRW=1', `MMCREEPROMRW=0').

`-cartmv <name>'
     Attach raw 16kB Magic Voice cartridge image.

`-magicvoiceimage <name>'
     Specify Magic Voice cartridge ROM image filename
     (`MagicVoiceImage').

`-magicvoice'
`+magicvoice'
     Enable/disable Magic Voice cartridge
     (`MagicVoiceCartridgeEnabled=1', `MagicVoiceCartridgeEnabled=0').

`-cartocean <name>'
     Attach raw Ocean cartridge image.

`-cartp64 <name>'
     Attach raw 256KB Prophet 64 cartridge image.

`-cartpf <name>'
     Attach raw 64kb Pagefox cartridge image.

`-cartramcart <name>'
     Attach raw RamCart cartridge image.

`-ramcart'
`+ramcart'
     Enable/disable the RAMCART expansion (`RAMCART=1', `RAMCART=0').

`-ramcartsize <size in KB>'
     Size of the RAMCART expansion (`RAMCARTsize').  (64, 128)

`-ramcartimage <name>'
     Specify name of RAMCART image (`RAMCARTfilename').

`-ramcartimagerw'
`+ramcartimagerw'
     Allow/disallow writing to RAMCart image (`RAMCARTImageWrite=1',
     `RAMCARTImageWrite=0').

`-ramcartro'
     Set the RamCart switch to read-only (`RAMCART_RO=1').

`-ramcartrw'
     Set the RamCart switch to read-only (`RAMCART_RO=0').

`-cartrep256 <name>'
     Attach raw REX EP256 cartridge image.

`-cartrgcd <Name>'
     Attach raw 64kB RGCD cartridge image.

`-cartross <name>'
     Attach raw 16/32kB ROSS cartridge image.

`-cartrrnet <name>'
     Attach raw 8KB RR-Net MK3 cartridge image.

`-cartrr <name>'
     Attach raw 64KB Retro Replay cartridge image.

`-rrbioswrite'
`+rrbioswrite'
     Enable/disable saving of the RR ROM at exit (`RRBiosWrite=1',
     `RRBiosWrite=0').

`-rrbankjumper'
`+rrbankjumper'
     Set/unset RR Bank Jumper (`RRBankJumper=1', `RRBankJumper=0').

`-rrflashjumper'
`+rrflashjumper'
     Set/unset RR Flash Jumper (`RRFlashJumper=1', `RRFlashJumper=0').

`-rrrev <Revision>'
     Set the RR revision (`RRrevision').  (0: Retro Replay, 1: Nordic
     Replay)

`-cartru <name>'
     Attach raw 8kB REX Utility cartridge image.

`-carts64 <name>'
     Attach raw 4kB Snapshot 64 cartridge image.

`-cartsb <name>'
     Attach raw Structured Basic cartridge image.

`-cartse5 <name>'
     Attach raw 16kB Super Explode V5 cartridge image.

`-cartsg <name>'
     Attach raw 64kB Super Games cartridge image.

`-cartsilver <Name>'
     Attach raw Silverrock 128 cartridge image.

`-cartsimon <name>'
     Attach raw 16kB Simons' Basic cartridge image.

`-cartss4 <name>'
     Attach raw 32KB Super Snapshot V4 cartridge image.

`-cartss5 <name>'
     Attach raw 64KB Super Snapshot V5 cartridge image.

`-ssramexpansion'
`+ssramexpansion'
     Enable/disable 32k addon RAM.  (`SSRamExpansion=1',
     `SSRamExpansion=0').

`-cartstar <name>'
     Attach raw 16KB Stardos cartridge image.

`-cartwl <name>'
     Attach raw 16KB Westermann Learning cartridge image.

`-cartws <name>'
     Attach raw 8kB Warp Speed cartridge image.

`-cartzaxxon <name>'
     Attach raw 16kB Zaxxon cartridge image.

CIA settings
------------

CIA resources
.............

`CIA1Model'
     Integer specifying CIA1 model (all emulators except
     x64dtv/xpet/xplus4/xvic).  (0: old 6526, 1: new 6526A)

`CIA2Model'
     Integer specifying CIA2 model (all emulators except
     x64dtv/xcbm2/xcbm5x0/xpet/xplus4/xvic).  (0: old 6526, 1: new
     6526A)

CIA command-line options
........................

`-ciamodel <model>'
     Set both CIA models (`CIA1Model', `CIA2Model') (all emulators
     except x64dtv/xcbm2/xcbm5x0/xpet/xplus4/xvic).  (0: old 6526, 1:
     new 6526A)

`-cia1model <model>'
     Set CIA1 model (`CIA1Model') (all emulators except
     x64dtv/xpet/xplus4/xvic).  (0: old 6526, 1: new 6526A)

`-cia2model <model>'
     Set CIA2 model (`CIA2Model') (all emulators except
     x64dtv/xcbm2/xcbm5x0/xpet/xplus4/xvic).  (0: old 6526, 1: new
     6526A)


@EndNode

@Node "VIC-II settings" "vice.guide/VIC-II settings"
@Next "SID settings"
@Prev "C64 cartridges"
@Toc "C64-128-specific"

VIC-II settings
---------------

These settings control the emulation of the VIC-II (MOS6569) video chip
used in both the C64 and the C128.

   * "Sprite-sprite collisions" and "Sprite-background collisions", if
     enabled, cause the hardware detection of sprite-to-sprite and
     sprite-to-background collisions of the VIC-II to be emulated.  This
     feature is used by many games, and disabling either of the two
     detection systems can sometimes make you invincible (although
     there is also a chance that also enemies become invincible then).

   * "Color set" can be used to dynamically change the palette file
     being used by choosing one of the available predefined color sets:

        * `default.vpl' ("default"), the default VICE palette;

        * `c64s.vpl' ("C64S"), palette taken from the shareware C64S
          emulator by Miha Peternel.

        * `ccs64.vpl' ("CCS64"), palette taken from the shareware CCS64
          emulator by Per Håkan Sundell.

        * `frodo.vpl' ("Frodo"), palette taken from the free Frodo
          emulator by Christian Bauer
          (http://www.uni-mainz.de/~bauec002/FRMain.html).

        * `pc64.vpl' ("PC64"), palette taken from the free PC64
          emulator by Wolfgang Lorenz.

        * `godot.vpl' ("GoDot"), palette as suggested by the authors of
          the C64 graphics package GoDot
          (http://users.aol.com/howtogodot/welcome.htm).


 @{" VIC-II resources " Link "VIC-II resources"} 
 @{" VIC-II options " Link "VIC-II options"} 


@EndNode

@Node "VIC-II resources" "vice.guide/VIC-II resources"
@Next "VIC-II options"
@Prev "VIC-II settings"
@Toc "VIC-II settings"

VIC-II resources
................

`VICIIModel'
     Integer that specifies VIC-II model (x64sc/xscpu64 only).  (6569,
     6569r1, 8565, 6567, 8562, 6567r56a, 6572)

`VICIICheckSsColl'
     Boolean specifying whether the sprite-sprite hardware collision
     detection must be emulated.

`VICIICheckSbColl'
     Boolean specifying whether the sprite-background hardware collision
     detection must be emulated.

`VICIIVSPBug'
     Boolean specifying whether the "VSP Bug" must be emulated
     (x64sc/xscpu64 only).

`VICIIVideoCache'
     Boolean specifying whether the video cache is turned on.

`VICIIDoubleSize'
     Boolean specifying whether double-size mode is turned on.

`VICIIDoubleScan'
     Boolean specifying whether double-scan mode is turned on.

`VICIINewLuminances'
     Boolean specifying whether to use new (9 steps) luminances.

`VICIIPaletteFile'
     String specifying the name of the palette file being used. The
     `.vpl' extension is optional.

`VICIIExternalPalette'
     Boolean specifying whether to use external palette file or not.

`VICIIColorSaturation'
     Integer specifying saturation of internal calculated palette.
     (0..2000)

`VICIIColorContrast'
     Integer specifying contrast of internal calculated palette.
     (0..2000)

`VICIIColorBrightness'
     Integer specifying brightness of internal calculated palette.
     (0..2000)

`VICIIColorGamma'
     Integer specifying gamma of internal calculated palette.  (0..4000)

`VICIIColorTint'
     Integer specifying tint of internal calculated palette.  (0..2000)

`VICIIPALScanLineShade'
     Integer specifying amount of scan line shading for the CRT
     emulation.  (0..1000)

`VICIIPALBlur'
     Integer specifying amount of horizontal blur for the CRT emulation.
     (0..1000)

`VICIIPALOddLinePhase'
     Integer specifying phase for color carrier in odd lines.  (0..2000)

`VICIIPALOddLineOffset'
     Integer specifying phase offset for color carrier in odd lines.
     (0..2000)

`VICIIAudioLeak'
     Boolean specifying whether to enable/disable video to audio leak
     emulation.

`VICIIFilter'
     Integer specifying rendering filter.  (0: None, 1: CRT emulation,
     2: Scale2x)

`VICIIBorderMode'
     Integer specifying border display mode.  (0: normal, 1: full, 2:
     debug, 3: none)


@EndNode

@Node "VIC-II options" "vice.guide/VIC-II options"
@Prev "VIC-II resources"
@Toc "VIC-II settings"

VIC-II command-line options
...........................

`-VICIIcheckss'
`+VICIIcheckss'
     Enable/disable emulation of hardware sprite-sprite collision
     detection (`VICIICheckSsColl=1', `VICIICheckSsColl=0').

`-VICIIchecksb'
`+VICIIchecksb'
     Enable/disable emulation of hardware sprite-background collision
     detection (`VICIICheckSbColl=1', `VICIICheckSbColl=0').

`-VICIIvspbug'
`+VICIIvspbug'
     Enable/disable emulation of the "VSP bug" (`VICIIVSPBug=1',
     `VICIIVSPBug=0') (x64sc/xscpu64 only).

`-VICIIvcache'
`+VICIIvcache'
     Enable/disable the video cache (`VICIIVideoCache=1',
     `VICIIVideoCache=0').

`-VICIIdsize'
`+VICIIdsize'
     Enable/disable the double size mode (`VICIIDoubleSize=1',
     `VICIIDoubleSize=0').

`-VICIIdscan'
`+VICIIdscan'
     Enable/disable the double scan mode (`VICIIDoubleScan=1',
     `VICIIDoubleScan=0').

`-VICIIfilter <Mode>'
     Select rendering filter (`VICIIFilter').  (0: None, 1: CRT
     emulation, 2: Scale2x)

`-VICIIintpal'
     Use an internal calculated palette (`VICIIExternalPalette=0').

`-VICIIextpal'
     Use an external palette (file) (`VICIIExternalPalette=1').

`-VICIIpalette <Name>'
     Specify the name of the palette file (`VICIIPaletteFile').

`-VICIIXRANDRfullmode <mode>'
     Select fullscreen mode

`-VICIIVidmodefullmode <mode>'
     Select fullscreen mode

`-VICIIborders <mode>'
     Set VIC-II border display mode (`VICIIBorderMode').  (0: normal,
     1: full, 2: debug, 3: none)

`-VICIImodel <model>'
     Set VIC-II model (`VICIIModel') (x64sc and xscpu64 only).  (6569,
     6569r1, 8565, 6567, 8562, 6567r56a, 6572)

`-VICIInewluminance'
`+VICIInewluminance'
     Enable/disable new luminances (`VICIINewLuminances=1',
     `VICIINewLuminances=0').

`-VICIIsaturation <0-2000>'
     Set saturation of internal calculated palette
     (`VICIIColorSaturation').

`-VICIIcontrast <0-2000>'
     Set contrast of internal calculated palette (`VICIIColorContrast').

`-VICIIbrightness <0-2000>'
     Set brightness of internal calculated palette
     (`VICIIColorBrightness').

`-VICIIgamma <0-4000>'
     Set gamma of internal calculated palette (`VICIIColorGamma').

`-VICIItint <0-2000>'
     Set tint of internal calculated palette (`VICIIColorTint').

`-VICIIoddlinesphase <0-2000>'
     Set phase for color carrier in odd lines (`VICIIPALOddLinePhase').

`-VICIIoddlinesoffset <0-2000>'
     Set phase offset for color carrier in odd lines
     (`VICIIPALOddLineOffset').

`-VICIIcrtblur <0-1000>'
     Amount of horizontal blur for the CRT emulation (`VICIIPALBlur').

`-VICIIcrtscanlineshade <0-1000>'
     Amount of scan line shading for the CRT emulation
     (`VICIIPALScanLineShade').

`-VICIIaudioleak'
`+VICIIaudioleak'
     Enable/disable video to audio leak emulation (`VICIIAudioLeak=1',
     `VICIIAudioLeak=0').


@EndNode

@Node "SID settings" "vice.guide/SID settings"
@Next "C64 I-O extension settings"
@Prev "VIC-II settings"
@Toc "C64-128-specific"

SID settings
------------

These settings control the emulation of the SID (MOS6581 or MOS8580)
audio chip.

   * "Second SID" maps a second SID chip into the address space for
     stereo sound. This emulates e.g. the "SID Symphony Stereo
     Cartridge" from Dr. Evil Laboratories. The second SID can be used
     with software such as "Stereo SID Player" by Mark Dickenson or
     "The Enhanced Sidplayer" by Craig Chamberlain.

   * "Second SID base address" sets the start address for the second SID
     chip. Software normally uses $DE00 or $DF00, since $DE00-$DEFF and
     $DF00-$DFFF can be mapped through the cartridge port of the C64.
     The default start address is $DE00.

   * "Emulate filters" causes the built-in programmable filters of the
     SID chip to be emulated.  A lot of C64 music requires them to be
     emulated properly, but their emulation requires some additional
     processor power.

   * "ChipModel" specifies the model of the SID chip being emulated:
     there are two slightly different generations of SID chips: MOS6581
     ones and MOS8580 ones.

   * "Use reSID emulation" specifies whether the more accurate (and
     resource hungry) reSID emulation is turned on or off.

   * "reSID sampling method" selects the method for conversion of the
     SID output signal to a sampling rate appropriate for playback by
     standard digital sound equipment. Possible settings are:
        * "Fast" simply clocks the SID chip at the output sampling
          frequency, picking the nearest sample. This yields acceptable
          sound quality, but sampling noise is noticeable in some
          cases, especially with SID combined waveforms. The sound
          emulation is still cycle exact.

        * "Interpolating" clocks the SID chip each cycle, and
          calculates each sample with linear interpolation. The
          sampling noise is now strongly attenuated by the SID external
          filter (as long as "Emulate filters" is selected), and the
          linear interpolation further improves the sound quality.

        * "Resampling" clocks the SID chip each cycle, and uses the
          theoretically correct method for sample generation. This
          delivers CD quality sound, but is extremely CPU intensive,
          and is thus most useful for non-interactive sound generation.
          Unless you have a very fast machine, that is.

   * "reSID resampling passband" specifies the percentage of the total
     bandwidth allocated to the resampling filter passband. The work
     rate of the resampling filter is inversely proportional to the
     remaining transition band percentage. This implies that e.g. with
     the transition band starting at ~ 20kHz, it is faster to generate
     48kHz than 44.1kHz samples. For CD quality sound generation at
     44.1kHz the passband percentage should be set to 90 (i.e. the
     transition band starting at almost 20kHz).


 @{" SID resources " Link "SID resources"} 
 @{" SID options " Link "SID options"} 


@EndNode

@Node "SID resources" "vice.guide/SID resources"
@Next "SID options"
@Prev "SID settings"
@Toc "SID settings"

SID resources
.............

`SidStereo'
     Integer specifying the amount of emulated extra SIDs.  (0: off, 1:
     1 extra sid, 2: 2 extra sids)

`SidStereoAddressStart'
     Integer specifying the base address of the second SID (x64, x64sc,
     xscpu64, x128 and vsid only).  (x128: 0xD420, 0xD440, 0xD460,
     0xD480, 0xD4A0, 0xD4C0, 0xD4E0, 0xD700, 0xD720, 0xD740, 0xD760,
     0xD780, 0xD7A0, 0xD7C0, 0xD7E0, 0xDE00, 0xDE20, 0xDE40, 0xDE60,
     0xDE80, 0xDEA0, 0xDEC0, 0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60,
     0xDF80, 0xDFA0, 0xDFC0, 0xDFE0) (x64/x64sc/xscpu64/vsid: 0xD420,
     0xD440, 0xD460, 0xD480, 0xD4A0, 0xD4C0, 0xD4E0, 0xD500, 0xD520,
     0xD540, 0xD560, 0xD580, 0xD5A0, 0xD5C0, 0xD5E0, 0xD600, 0xD620,
     0xD640, 0xD660, 0xD680, 0xD6A0, 0xD6C0, 0xD6E0, 0xD700, 0xD720,
     0xD740, 0xD760, 0xD780, 0xD7A0, 0xD7C0, 0xD7E0, 0xDE00, 0xDE20,
     0xDE40, 0xDE60, 0xDE80, 0xDEA0, 0xDEC0, 0xDEE0, 0xDF00, 0xDF20,
     0xDF40, 0xDF60, 0xDF80, 0xDFA0, 0xDFC0, 0xDFE0)

`SidTripleAddressStart'
     Integer specifying the base address of the third SID (x64, x64sc,
     xscpu64, x128 and vsid only).  (x128: 0xD420, 0xD440, 0xD460,
     0xD480, 0xD4A0, 0xD4C0, 0xD4E0, 0xD700, 0xD720, 0xD740, 0xD760,
     0xD780, 0xD7A0, 0xD7C0, 0xD7E0, 0xDE00, 0xDE20, 0xDE40, 0xDE60,
     0xDE80, 0xDEA0, 0xDEC0, 0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60,
     0xDF80, 0xDFA0, 0xDFC0, 0xDFE0) (x64/x64sc/xscpu64/vsid: 0xD420,
     0xD440, 0xD460, 0xD480, 0xD4A0, 0xD4C0, 0xD4E0, 0xD500, 0xD520,
     0xD540, 0xD560, 0xD580, 0xD5A0, 0xD5C0, 0xD5E0, 0xD600, 0xD620,
     0xD640, 0xD660, 0xD680, 0xD6A0, 0xD6C0, 0xD6E0, 0xD700, 0xD720,
     0xD740, 0xD760, 0xD780, 0xD7A0, 0xD7C0, 0xD7E0, 0xDE00, 0xDE20,
     0xDE40, 0xDE60, 0xDE80, 0xDEA0, 0xDEC0, 0xDEE0, 0xDF00, 0xDF20,
     0xDF40, 0xDF60, 0xDF80, 0xDFA0, 0xDFC0, 0xDFE0)

`SidFilters'
     Boolean specifying whether the built-in SID filters must be
     emulated.

`SidModel'
     Integer specifying what model of the SID must be emulated.  (0:
     6581, 1: 8580, 2: 8580D, 3: 6581R4, 4: DTVSID)

`SidEngine'
     Integer specifying what SID engine will be used.  (0: FastSID, 1:
     ReSID, 2: Catweasel MKIII, 3: HardSID, 4: ParSID Port 1, 5: ParSID
     Port 2, 6: ParSID Port 3)

`SidResidSampling'
     Integer specifying the sampling method (`0': Fast, `1':
     Interpolation, `2': Resampling)

`SidResidPassband'
     Integer specifying the resampling filter passband in percentage of
     the total bandwidth (`0 - 90').

`SidResidGain'
     Integer that specifies reSID gain in percent [97] (90..100)

`SidResidFilterBias'
     Integer that specifies reSID filter bias, which can be used to
     adjust DAC bias in millivolts. [0] (-5000..5000)


@EndNode

@Node "SID options" "vice.guide/SID options"
@Prev "SID resources"
@Toc "SID settings"

SID command-line options
........................

`-sidstereo'
     Specify the amount of extra SID chips to emulate (`SidStereo').
     (0: off, 1: 1 extra sid, 2: 2 extra sids)

`-sidstereoaddress <Base address>'
     Specifies the start address for the second SID chip
     (`SidStereoAddressStart') (x64, x64sc, xscpu64, x128 and vsid
     only).  (x128: 0xD420, 0xD440, 0xD460, 0xD480, 0xD4A0, 0xD4C0,
     0xD4E0, 0xD700, 0xD720, 0xD740, 0xD760, 0xD780, 0xD7A0, 0xD7C0,
     0xD7E0, 0xDE00, 0xDE20, 0xDE40, 0xDE60, 0xDE80, 0xDEA0, 0xDEC0,
     0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60, 0xDF80, 0xDFA0, 0xDFC0,
     0xDFE0) (x64/x64sc/xscpu64/vsid: 0xD420, 0xD440, 0xD460, 0xD480,
     0xD4A0, 0xD4C0, 0xD4E0, 0xD500, 0xD520, 0xD540, 0xD560, 0xD580,
     0xD5A0, 0xD5C0, 0xD5E0, 0xD600, 0xD620, 0xD640, 0xD660, 0xD680,
     0xD6A0, 0xD6C0, 0xD6E0, 0xD700, 0xD720, 0xD740, 0xD760, 0xD780,
     0xD7A0, 0xD7C0, 0xD7E0, 0xDE00, 0xDE20, 0xDE40, 0xDE60, 0xDE80,
     0xDEA0, 0xDEC0, 0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60, 0xDF80,
     0xDFA0, 0xDFC0, 0xDFE0)

`-sidtripleaddress `ADDRESS''
     Specifies the start address for the third SID chip
     (`SidTripleAddressStart') (x64, x64sc, xscpu64, x128 and vsid
     only).  (x128: 0xD420, 0xD440, 0xD460, 0xD480, 0xD4A0, 0xD4C0,
     0xD4E0, 0xD700, 0xD720, 0xD740, 0xD760, 0xD780, 0xD7A0, 0xD7C0,
     0xD7E0, 0xDE00, 0xDE20, 0xDE40, 0xDE60, 0xDE80, 0xDEA0, 0xDEC0,
     0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60, 0xDF80, 0xDFA0, 0xDFC0,
     0xDFE0) (x64/x64sc/xscpu64/vsid: 0xD420, 0xD440, 0xD460, 0xD480,
     0xD4A0, 0xD4C0, 0xD4E0, 0xD500, 0xD520, 0xD540, 0xD560, 0xD580,
     0xD5A0, 0xD5C0, 0xD5E0, 0xD600, 0xD620, 0xD640, 0xD660, 0xD680,
     0xD6A0, 0xD6C0, 0xD6E0, 0xD700, 0xD720, 0xD740, 0xD760, 0xD780,
     0xD7A0, 0xD7C0, 0xD7E0, 0xDE00, 0xDE20, 0xDE40, 0xDE60, 0xDE80,
     0xDEA0, 0xDEC0, 0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60, 0xDF80,
     0xDFA0, 0xDFC0, 0xDFE0)

`-sidenginemodel <engine and model>'
     Specify engine and model for the emulated SID chip (`SidEngine',
     `SidModel').  (FastSID 6581: 0/fast/fastold/fast6581, FastSID
     8580: 1/fastnew/fast8580, ReSID 6581: 256/resid/residold/resid6581,
     ReSID 8580: 257/residnew/resid8580, ReSID 8580 + digiboost:
     258/residdigital/residd/residnewd/resid8580d, DTVSID:
     260/dtv/c64dtv/dtvsid, Catweasel MKIII:
     512/catweaselmkiii/catweasel3/catweasel/cwmkiii/cw3/cw, HardSID:
     768/hardsid/hard/hs, ParSID Port 1: 1024/parsid/parsid1/par1/lpt1,
     ParSID Port 2: 1280/parsid2/par2/lpt2 ParSID Port 3:
     1536/parsid3/par3/lpt3)

`-sidfilters'
`+sidfilters'
     Enable/disable emulation of the built-in SID filters
     (`SidFilters=1', `SidFilters=0').

`-residsamp `METHOD''
     Specifies the sampling method; fast (`SidResidSampling=0'),
     interpolating (`SidResidSampling=1'), resampling
     (`SidResidSampling=2'), fast resampling (`SidResidSampling=3').

`-residpass `PERCENTAGE''
     Specifies the resampling filter passband in percentage of the total
     bandwidth (`SidResidPassband=0-90').

`-residgain `PERCENTAGE''
     Specifies reSID gain in percent (90 - 100).

`-residfilterbias <number>'
     reSID filter bias setting, which can be used to adjust DAC bias in
     millivolts.


@EndNode

@Node "C64 I-O extension settings" "vice.guide/C64 I-O extension settings"
@Next "C64 system ROM settings"
@Prev "SID settings"
@Toc "C64-128-specific"

C64 I/O extension settings
--------------------------

I/O extensions are (usually) cartridges which do not map into ROM space,
but use only the I/O space at address range $DE00 ... $DEFF and/or
$DF00 ... $DFFF.

Please use these extensions only when needed, as they might cause
compatibility problems.

The following I/O extensions are available:

   * ACIA (Swiftlink, Turbo232)

   * DigiMAX

   * DS12C887 RTC

   * Ethernet (The Final Ethernet, RR-Net)

   * GEO-RAM

   * MIDI (Passport, Datel, Maplin, Namesoft, Sequential)

   * REU - The "RAM Expansion Module" extension emulates a standard
     Commodore RAM Expansion Unit; this can be used with GEOS and other
     programs that are designed to take advantage of it.  This currently
     works only in the C64 emulator.

   * SFX Sound Expander

   * SFX Sound Sampler


 @{" C64 I-O extension resources " Link "C64 I-O extension resources"} 
 @{" C64 I-O extension options " Link "C64 I-O extension options"} 


@EndNode

@Node "C64 I-O extension resources" "vice.guide/C64 I-O extension resources"
@Next "C64 I-O extension options"
@Prev "C64 I-O extension settings"
@Toc "C64 I-O extension settings"

C64 I/O extension resources
...........................

`DIGIMAX'
     Boolean specifying whether the DigiMAX cartridge should be
     emulated or not.

`DIGIMAXbase'
     Integer specifying the DigiMAX base address.  (0xDD00: useport,
     0xDE00, 0xDE20, 0xDE40, 0xDE60, 0xDE80, 0xDEA0, 0xDEC0, 0xDEE0,
     0xDF00, 0xDF20, 0xDF40, 0xDF60, 0xDF80, 0xDFA0, 0xDFC0, 0xDFE0)

`DS12C887RTC'
     Boolean specifying whether the DS12C887 RTC cartridge should be
     emulated or not.

`DS12C887RTCbase'
     Integer specifying the DS12C887 RTC base address.  x128: (0xD700,
     0xDE00, 0xDF00) x64/x64sc/xscpu64: (0xD500, 0xD600, 0xD700,
     0xDE00, 0xDF00)

`DS12C887RTCRunMode'
     Boolean specifying whether the DS12C887 RTC cartridge starts out
     running or halted.  (0: halted, 1: running)

`DS12C887RTCSave'
     Boolean specifying whether the DS12C887 RTC data should be saved
     when changed or not.

`ETHERNET_ACTIVE'
     Boolean that specifies whether the CS8900 ethernet interface
     emulation is active.

`ETHERNET_INTERFACE'
     String specifying the device name of the ethernet device to use
     for the emulation.

`ETHERNET_DISABLED'
     Boolean that specified whether ethernet emulation has been
     disabled because it is not available in the current configuration.

`ETHERNET_AS_RR'
     Boolean that specifies whether RR-Net compatible mapping is
     enabled.

`GEORAM'
     Boolean specifying whether the GEO-RAM cartridge should be
     emulated or not.

`GEORAMfilename'
     String specifying the filename of the GEORAM image.

`GEORAMImageWrite'
     Boolean, if true write back the GEO-RAM image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`GEORAMsize'
     Integer specifying the size of the emulated GEO-RAM in KB.  (64,
     128, 256, 512, 1024, 2048, 4096).

`MIDIEnable'
     Boolean specifying whether the MIDI cartridge should be emulated
     or not (x64/x64sc/xscpu64/x128 only, and only if MIDI support is
     enabled and available at compile time).

`MIDIMode'
     Integer specifying the type of emulated MIDI interface (x64,
     x64sc, xscpu64 and x128 only, and only if MIDI support is enabled
     and available at compile time).  (0: Sequential, 1:
     Passport/Syntech, 2: DATEL/Siel/JMS, 3: Namesoft, 4: Maplin)

`REU'
     Boolean specifying whether the RAM Expansion Module should be
     emulated or not.

`REUfilename'
     String specifying the filename of the REU image.

`REUImageWrite'
     Boolean, if true write back the REU image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`REUsize'
     Integer specifying the size of the emulated REU in KB.  (128, 256,
     512, 1024, 2048, 4096, 8192, 16384)

`SFXSoundExpander'
     Boolean specifying whether the SFX Sound Expander should be
     emulated or not.

`SFXSoundExpanderChip'
     Integer specifying which YM chip is emulated.  (3526, 3812)

`SFXSoundSampler'
     Boolean specifying whether the SFX Sound Sampler should be
     emulated or not.


@EndNode

@Node "C64 I-O extension options" "vice.guide/C64 I-O extension options"
@Prev "C64 I-O extension resources"
@Toc "C64 I-O extension settings"

C64 I/O extension command-line options
......................................

`-digimax'
`+digimax'
     Enable/disable the DigiMAX cartridge (`DIGIMAX=1', `DIGIMAX=0').

`-digimaxbase <base address>'
     Base address of the DigiMAX cartridge (`DIGIMAXbase').  (0xDD00:
     userport, 0xDE00, 0xDE20, 0xDE40, 0xDE60, 0xDE80, 0xDEA0, 0xDEC0,
     0xDEE0, 0xDF00, 0xDF20, 0xDF40, 0xDF60, 0xDF80, 0xDFA0, 0xDFC0,
     0xDFE0)

`-ds12c887rtc'
`+ds12c887rtc'
     Enable/disable the DS12C887 RTC cartridge (`DS12C887RTC=1',
     `DS12C887RTC=0').

`-ds12c887rtcbase <base address>'
     Base address of the DS12C887 RTC cartridge (`DS12C887RTCbase').
     x128: (0xD700, 0xDE00, 0xDF00) x64/x64sc/xscpu64: (0xD500, 0xD600,
     0xD700, 0xDE00, 0xDF00)

`-ds12c887rtchalted'
     Set the DS12C887 RTC oscillator to 'halted'
     (`DS12C887RTCRunMode=0').

`+ds12c887rtcrunning'
     Set the DS12C887 RTC oscillator to 'running'
     (`DS12C887RTCRunMode=1').

`-ds12c887rtcsave'
`+ds12c887rtcsave'
     Enable/disable saving of the DS12C887 RTC data when changed
     (`DS12C887RTCSave=1', `DS12C887RTCSave=0').

`-miditype <0-4>'
     Set MIDI interface type (`MIDIMode') (x64, x64sc, xscpu64 and x128
     only, and only if MIDI support is enabled and available at compile
     time).  (0: Sequential, 1: Passport/Syntech, 2: DATEL/Siel/JMS, 3:
     Namesoft, 4: Maplin)

`-midi'
`+midi'
     Enable/disable MIDI emulation (`MIDIEnable=1', `MIDIEnable=0')
     (x64, x64sc, xscpu64 and x128 only, and only if MIDI support is
     enabled and available at compile time).  (0: Sequential, 1:
     Passport/Syntech, 2: DATEL/Siel/JMS, 3: Namesoft, 4: Maplin)

`-georam'
`+georam'
     Enable/disable the GEORAM expansion unit (`GEORAM=1', `GEORAM=0').

`-cartgeoram <name>'
     Attach raw GEO-RAM cartridge image.

`-georamimage <name>'
     Specify name of GEORAM image (`GEORAMfilename').

`-georamimagerw'
`+georamimagerw'
     Allow/disallow writing to GEORAM image (`GEORAMImageWrite=1',
     `GEORAMImageWrite=0').

`-georamsize <size in KB>'
     Size of the GEORAM expansion unit (`GEORAMsize').  (64, 128, 256,
     512, 1024, 2048, 4096)

`-reu'
`+reu'
     Enable/disable emulation of the RAM Expansion Module (`REU=1',
     `REU=0').

`-cartreu <name>'
     Attach raw REU cartridge image.

`-reuimage <name>'
     Specify name of REU image (`REUfilename').

`-reuimagerw'
`+reuimagerw'
     Allow/disallow writing to REU image (`REUImageWrite=1',
     `REUImageWrite=0').

`-reusize <size in KB>'
     Size of the RAM expansion unit (`REUsize').  (128, 256, 512, 1024,
     2048, 4096, 8192, 16384)

`-sfxse'
`+sfxse'
     Enable/disable the SFX soundexpander cartridge
     (`SFXSoundExpander=1', `SFXSoundExpander=0').

`-sfxsetype <type>'
     Set YM chip type (`SFXSoundExpanderChip').  (3526, 3812)

`-sfxss'
`+sfxss'
     Enable/disable the SFX Sound Sampler cartridge
     (`SFXSoundSampler=1', `SFXSoundSampler=0').

`-tfe'
`+tfe'
     Enable/Disable the TFE ("The Final Ethernet") unit

`-tfeif <name>'
     Set the system ethernet interface for TFE emulation

`-tferrnet'
`+tferrnet'
     Enable/Disable RRNet mode of TFE emulation

`-burstmod <value>'
     Set the kind of burst modification. This emulates the fast serial
     bus connection as described at
     http://www.cs.tut.fi/~albert/Dev/burst/, with the wire to the tape
     port cut (`BurstMod').  (0: None, 1: CIA-1, 2: CIA-2)


@EndNode

@Node "C64 system ROM settings" "vice.guide/C64 system ROM settings"
@Prev "C64 I-O extension settings"
@Toc "C64-128-specific"

C64 system ROM settings
-----------------------

These settings can be used to control what system ROMs are loaded in the
C64 emulator at startup. They cannot be changed from the menus.


 @{" C64 system ROM resources " Link "C64 system ROM resources"} 
 @{" C64 system ROM options " Link "C64 system ROM options"} 


@EndNode

@Node "C64 system ROM resources" "vice.guide/C64 system ROM resources"
@Next "C64 system ROM options"
@Prev "C64 system ROM settings"
@Toc "C64 system ROM settings"

C64 system ROM resources
........................

`BasicName'
     String specifying the name of the Basic ROM (default `basic').

`ChargenName'
     String specifying the name of the character generator ROM (default
     `chargen').

`KernalName'
     String specifying the name of the Kernal ROM (default `kernal').

`KernalRev'
     String specifying the Kernal revision. This resource can be used to
     control what revision of the C64 kernal is being used; it cannot be
     changed at runtime. VICE is able to automatically convert one ROM
     revision into another, by manually patching the loaded image. This
     way, it is possible to use any of the ROM revisions without
     changing the ROM set. Valid values are:

    `0'
          Kernal revision 0;

    `3'
          Kernal revision 3;

    `sx'
    `67'
          Commodore SX-64 ROM;

    `100'
    `4064'
          Commodore 4064 (also known as "PET64" or "Educator 64") ROM.


@EndNode

@Node "C64 system ROM options" "vice.guide/C64 system ROM options"
@Prev "C64 system ROM resources"
@Toc "C64 system ROM settings"

C64 system ROM command-line options
...................................

`-basic <name>'
     Specify filename of the Basic ROM file (`BasicName').

`-chargen <name>'
     Specify filename of the character generator ROM file
     (`ChargenName').

`-kernal <name>'
     Specify filename of the Kernal ROM file (`KernalName').

`-kernalrev <revision>'
     Specify Kernal revision (`KernalRev').  (1/2/3, 67/sx, 100/4064)

C64 settings
------------

C64 resources
.............

`GlueLogic'
     Integer specifying the type of emulated glue-logic.  (0: discrete,
     1: custom IC)

`BurstMod'
     Integer specifying the kind of Burst-Mode modification.  (0: None,
     1: CIA-1, 2: CIA-2)

`BoardType'
     Integer specifying the type of emulated board (not available in
     xscpu64).  (0: C64, 1: MAX)

`IECReset'
     Integer specifying if the IEC bus resets when the CPU resets.  (0:
     No, 1: Yes)

`MemoryHack'
     Integer specifying what memory expansion hack is active.  (0:
     None, 1: C64 256K, 2: PLUS60K, 3: PLUS256K)

`PLUS60Kfilename'
     String specifying the filename of the PLUS60K RAM image.

`PLUS60Kbase'
     Integer that specifies the base address of the PLUS60K RAM
     expansion.  (0xD040, 0xD100)

`PLUS256Kfilename'
     String specifying the filename of the PLUS256K RAM image.

`C64_256Kfilename'
     String specifying the filename of the 256K RAM image.

`C64_256Kbase'
     Integer that specifies the base address of the 256K RAM expansion.
     (0xDE00/0xDE80/0xDF00/0xDF80)

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-4: PAL-N, -3: Old NTSC, -1: PAL, -2: NTSC).

C64 command-line options
........................

`-gluelogictype <type>'
     Set glue logic type (`GlueLogic').  (0: discrete, 1: 252535-01)

`-iecreset <value>'
     Set IEC reset bahaviour (`IECReset').  (0: Do not reset with CPU
     reset, 1: Reset with CPU reset)

`-memoryexphack <device>'
     Set active memory expansion hack (`MemoryHack').  (0: None, 1: C64
     256K, 2: PLUS60K, 3: PLUS256K)

`-plus60kimage <name>'
     Specify name of PLUS60K image (`PLUS60Kfilename').

`-plus60kbase <base address>'
     Base address of the PLUS60K expansion (`PLUS60Kbase').
     (0xD040/0xD100)

`-plus256kimage <name>'
     Specify name of PLUS256K image (`PLUS256Kfilename').

`-256kimage <name>'
     Specify name of 256K image (`C64_256Kfilename').

`-256kbase <base address>'
     Base address of the 256K expansion (`C64_256Kbase').
     (0xDE00/0xDE80/0xDF00/0xDF80)

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-ntscold'
     Use old NTSC sync factor (`MachineVideoStandard=-3').

`-paln'
     Use PAL-N sync factor (`MachineVideoStandard=-4').

`-model <Model>'
     Set the C64 model (`VICIIModel', `CIA1Model', `CIA2Model',
     `GlueLogic', `BoardType', `IECReset', `KernalName', `ChargenName',
     `SidEngine', `SidModel') (x64 and x64sc only).  (c64/c64c/c64old,
     ntsc/newntsc/oldntsc, drean, jap, c64gs, pet64, ultimax)


@EndNode

@Node "C128-specific" "vice.guide/C128-specific"
@Next "C64DTV-specific"
@Prev "C64-128-specific"
@Toc "Machine-specific features"

C128-specific commands and settings
===================================

VDC settings
------------

VDC resources
.............

`VDC64KB'
     Boolean to enabled/disable full 64k video ram.

`VDCRevision'
     Integer specifying the VDC hardware revision (0: Rev 0, 1: Rev 1,
     2: Rev 2).

`VDCVideoCache'
     Boolean specifying whether the video cache is turned on.

`VDCDoubleSize'
     Boolean specifying whether double-size mode is turned on.

`VDCDoubleScan'
     Boolean specifying whether double-scan mode is turned on.

`VDCStretchVertical'
     Boolean specifying whether vertical stretching is turned on.

`VDCPaletteFile'
     String specifying the name of the palette file being used. The
     `.vpl' extension is optional.

`VDCExternalPalette'
     Boolean specifying whether to use external palette file or not.

`VDCColorSaturation'
     Integer specifying saturation of internal calculated palette.
     (0..2000)

`VDCColorContrast'
     Integer specifying contrast of internal calculated palette.
     (0..2000)

`VDCColorBrightness'
     Integer specifying brightness of internal calculated palette.
     (0..2000)

`VDCColorGamma'
     Integer specifying gamma of internal calculated palette.  (0..4000)

`VDCColorTint'
     Integer specifying tint of internal calculated palette.  (0..2000)

`VDCPALScanLineShade'
     Integer specifying amount of scan line shading for the CRT
     emulation.  (0..1000)

`VDCPALBlur'
     Integer specifying amount of horizontal blur for the CRT emulation.
     (0..1000)

`VDCPALOddLinePhase'
     Integer specifying phase for color carrier in odd lines.  (0..2000)

`VDCPALOddLineOffset'
     Integer specifying phase offset for color carrier in odd lines.
     (0..2000)

`VDCAudioLeak'
     Boolean specifying whether to enable/disable video to audio leak
     emulation.

`VDCFilter'
     Integer specifying rendering filter (0: None, 1: CRT emulation, 2:
     Scale2x)

VDC command-line options
........................

`-VDCvcache'
`+VDCvcache'
     Enable/disable the video cache (`VDCVideoCache=1',
     `VDCVideoCache=0').

`-VDCdsize'
`+VDCdsize'
     Enable/disable double size (`VDCDoubleSize=1', `VDCDoubleSize=0').

`-VDCstretchvertical'
`+VDCstretchvertical'
     Enable/Disable vertical stretching (`VDCStretchVertical=1',
     `VDCStretchVertical=0').

`-VDCdscan'
`+VDCdscan'
     Enable/disable double scan (`VDCDoubleScan=1', `VDCDoubleScan=0').

`-VDCintpal'
     Use an internal calculated palette (`VDCExternalPalette=0').

`-VDCextpal'
     Use an external palette (file) (`VDCExternalPalette=1').

`-VDCpalette <name>'
     Specify name of file of external palette (`VDCPaletteFile').

`-VDCXRANDRfullmode <mode>'
     Select fullscreen mode

`-VDCVidmodefullmode <mode>'
     Select fullscreen mode

`-VDC16KB'
     Set the VDC memory size to 16KB (`VDC64KB=0').

`-VDC64KB'
     Set the VDC memory size to 64KB (`VDC64KB=1').

`-VDCRevision <number>'
     Set VDC revision (`VDCRevision').  (0..2)

`-VDCsaturation <0-2000>'
     Set saturation of internal calculated palette
     (`VDCColorSaturation').

`-VDCcontrast <0-2000>'
     Set contrast of internal calculated palette (`VDCColorContrast').

`-VDCbrightness <0-2000>'
     Set brightness of internal calculated palette
     (`VDCColorBrightness').

`-VDCgamma <0-4000>'
     Set gamma of internal calculated palette (`VDCColorGamma').

`-VDCtint <0-2000>'
     Set tint of internal calculated palette (`VDCColorTint').

`-VDCoddlinesphase <0-2000>'
     Set phase for color carrier in odd lines (`VDCPALOddLinePhase').

`-VDCoddlinesoffset <0-2000>'
     Set phase offset for color carrier in odd lines
     (`VDCPALOddLineOffset').

`-VDCcrtblur <0-1000>'
     Amount of horizontal blur for the CRT emulation (`VDCPALBlur').

`-VDCcrtscanlineshade <0-1000>'
     Amount of scan line shading for the CRT emulation
     (`VDCPALScanLineShade').

`-VDCaudioleak'
`+VDCaudioleak'
     Enable/disable video to audio leak emulation (`VDCAudioLeak=1',
     `VDCAudioLeak=0').

`-VDCfilter <Mode>'
     Select rendering filter (`VDCFilter').  (0: None, 1: CRT
     emulation, 2: Scale2x)

C128 system ROM settings
------------------------

C128 system ROM resources
.........................

`ChargenIntName'
     String specifying the filename of the international character
     generator ROM image.

`ChargenDEName'
     String specifying the filename of the German character generator
     ROM image.

`ChargenFRName'
     String specifying the filename of the French character generator
     ROM image.

`ChargenSEName'
     String specifying the filename of the Swedish character generator
     ROM image.

`ChargenCHName'
     String specifying the filename of the Swiss character generator
     ROM image.

`KernalIntName'
     String specifying the filename of the international Kernal ROM
     image.

`KernalDEName'
     String specifying the filename of the German Kernal ROM image.

`KernalFIName'
     String specifying the filename of the Finnish Kernal ROM image.

`KernalFRName'
     String specifying the filename of the French Kernal ROM image.

`KernalITName'
     String specifying the filename of the Italian Kernal ROM image.

`KernalNOName'
     String specifying the filename of the Norwegian Kernal ROM image.

`KernalSEName'
     String specifying the filename of the Swedish Kernal ROM image.

`KernalCHName'
     String specifying the filename of the Swiss Kernal ROM image.

`BasicLoName'
`BasicHiName'
     Strings specifying the filename of the Basic ROM images.

`Kernal64Name'
     String specifying the filename of the C64 Kernal ROM image.

`Basic64Name'
     String specifying the filename of the C64 Basic ROM image.

`InternalFunctionROM'
     Integer specifying the internal function ROM type (0: None, 1:
     ROM, 2: RAM, 3: RTC).

`InternalFunctionName'
     String specifying the filename of the ROM image for the internal
     function ROM.

`InternalFunctionROMRTCSave'
     Boolean to enable/disable the saving of the Internal Function RTC
     data when changed.

`ExternalFunctionROM'
     Integer specifying the external function ROM type (0: None, 1:
     ROM, 2: RAM, 3: RTC)

`ExternalFunctionName'
     String specifying the filename of the ROM image for the external
     function ROM.

`ExternalFunctionROMRTCSave'
     Boolean to enable/disable the saving of the External Function RTC
     data when changed.

C128 system ROM command-line options
....................................

`-basic64 <name>'
     Specify name of C64 mode BASIC ROM image (`Basic64Name').

`-kernal64 <name>'
     Specify name of C64 mode Kernal ROM image (`Kernal64Name').

`-basiclo <name>'
     Specify name of BASIC ROM image (lower part) (`BasicLoName').

`-basichi <name>'
     Specify name of BASIC ROM image (higher part) (`BasicHiName').

`-kernal <name>'
     Specify name of international Kernal ROM image (`KernalIntName').

`-kernalde <name>'
     Specify name of German Kernal ROM image (`KernalDEName').

`-kernalfi <name>'
     Specify name of Finnish Kernal ROM image (`KernalFIName').

`-kernalfr <name>'
     Specify name of French Kernal ROM image (`KernalFRName').

`-kernalit <name>'
     Specify name of Italian Kernal ROM image (`KernalITName').

`-kernalno <name>'
     Specify name of Norwegian Kernal ROM image (`KernalNOName').

`-kernalse <name>'
     Specify name of Swedish Kernal ROM image (`KernalSEName').

`-kernalch <name>'
     Specify name of Swiss Kernal ROM image (`KernalCHName').

`-chargen <name>'
     Specify name of international character generator ROM image
     (`ChargenIntName').

`-chargde <name>'
     Specify name of German character generator ROM image
     (`ChargenDEName').

`-chargfr <name>'
     Specify name of French character generator ROM image
     (`ChargenFRName').

`-chargse <name>'
     Specify name of Swedish character generator ROM image
     (`ChargenSEName').

`-chargch <name>'
     Specify name of Swiss character generator ROM image
     (`ChargenCHName').

`-intfunc <type>'
     Set the internal Function ROM type (`InternalFunctionROM').  (0:
     None, 1: ROM, 2: RAM, 3: RTC)

`-intfrom <name>'
     Specify name of internal Function ROM image
     (`InternalFunctionName').

`-intfuncrtcsave'
`+intfuncrtcsave'
     Enable/disable the saving of the Internal Function RTC data when
     changed (`InternalFunctionROMRTCSave=1',
     `InternalFunctionROMRTCSave=0').

`-extfunc <type>'
     Set the external Function ROM type (`ExternalFunctionROM').  (0:
     None, 1: ROM, 2: RAM, 3: RTC)

`-extfrom <name>'
     Specify name of external Function ROM image
     (`ExternalFunctionName').

`-extfuncrtcsave'
`+extfuncrtcsave'
     Enable/disable the saving of the External Function RTC data when
     changed (`ExternalFunctionROMRTCSave=1',
     `ExternalFunctionROMRTCSave=0').

C128 settings
-------------

C128 resources
..............

`40/80ColumnKey'
     Boolean specifying the status of the 40/80 columns key.  (0: Not
     pressed, 1: Pressed)

`Go64Mode'
     Boolean, if true enter C64 mode on reset.

`C128FullBanks'
     Boolean to enable/disable RAM banks 2 and 3.

`MachineType'
     Integer specifying the C128 machine type.  (0: International, 1:
     Finnish, 2: French, 3: German, 4: Italian, 5: Norwegian, 6:
     Swedish)

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-1: PAL, -2: NTSC).

C128 command-line options
.........................

`-40col'
     Activate 40 column mode (`40/80ColumnKey=1').

`-80col'
     Activate 80 column mode (`40/80ColumnKey=0').

`-go64'
     Always switch to C64 mode on reset (`Go64Mode=1'.

`+go64'
     Always switch to C128 mode on reset (`Go64Mode=0'.

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-model <Model>'
     Set the C128 model (`MachineVideoStandard', `CIA1Model',
     `CIA2Model', `VICIINewLuminances', `VDCRevision', `VDC64KB',
     `SidEngine', `SidModel').  (c128/c128dcr, pal/ntsc)

`-c128fullbanks'
`+c128fullbanks'
     Enable/disable RAM banks 2 and 3 (`C128FullBanks=1',
     `C128FullBanks=0').

`-machinetype <Type>'
     Set the C128 machine type (`MachineType').  (0: International, 1:
     Finnish, 2: French, 3: German, 4: Italian, 5: Norwegian, 6:
     Swedish)


@EndNode

@Node "C64DTV-specific" "vice.guide/C64DTV-specific"
@Next "SCPU64-specific"
@Prev "C128-specific"
@Toc "Machine-specific features"

C64DTV-specific commands and settings
=====================================

This section lists the settings and commands that are C64DTV specific
and thus are not present in the other emulators.


 @{" C64DTV ROM image " Link "C64DTV ROM image"} 
 @{" DTV revision " Link "DTV revision"} 
 @{" LumaFix " Link "LumaFix"} 
 @{" Userport " Link "Userport"} 
 @{" Debug " Link "Debug"} 
 @{" Monitor DTV features " Link "Monitor DTV features"} 


@EndNode

@Node "C64DTV ROM image" "vice.guide/C64DTV ROM image"
@Next "DTV revision"
@Prev "C64DTV-specific"
@Toc "C64DTV-specific"

C64DTV ROM image
----------------

The DTV has a 2MB Flash chip which contains the kernal, basic and
character set ROMs along with other data, such as games in the case of
the original C64DTV ROM.

The image file is a dump of the flash chip. It is exactly 2MB (2097152
bytes).

If you do not have a suitable image file, an image using the C64 kernal,
basic and charset is automatically created.

If writing to the C64DTV ROM is enabled, the image file is rewritten
with the current data when exiting x64dtv.

Note that x64dtv tries to load the image file from the C64DTV directory
first, and if it isn't found there, x64dtv tries to load it from the
current directory. If you do not have `dtvrom.bin' in your C64DTV
directory and writing to DTV ROM is enabled, the `dtvrom.bin' file is
created to the current directory.

NOTE: The original C64DTV ROM has somewhat distorted colors, normally
you should use a patched rom.

`-c64dtvromimage <name>'
     Specify filename of the C64DTV ROM image (`c64dtvromfilename').

`-c64dtvromrw'
`+c64dtvromrw'
     Enable/disable writing to C64DTV ROM image (`c64dtvromrw=1',
     `c64dtvromrw=0').

The trueflashfs option is analogous to True drive emulation.  If
disabled, any file access to the flash filesystem (device 1) will go to
the local file system instead.

`-trueflashfs'
`+trueflashfs'
     Enable/disable true hardware flash file system (`FlashTrueFS=1',
     `FlashTrueFS=0').

`-fsflash <name>'
     Specify the directory for the flash file system device
     (`FSFlashDir').


@EndNode

@Node "DTV revision" "vice.guide/DTV revision"
@Next "LumaFix"
@Prev "C64DTV ROM image"
@Toc "C64DTV-specific"

DTV revision
------------

The DTV revision 2 has a bug in the Blitter. Using revision 3 is
recommended. Emulation of DTV revision 2 including Blitter bug is
intended for testing DTV software.

`-dtvrev <revision>'
     Specify DTV revision (`DtvRevision').  (2: DTV2, 3: DTV3)


@EndNode

@Node "LumaFix" "vice.guide/LumaFix"
@Next "Userport"
@Prev "DTV revision"
@Toc "C64DTV-specific"

LumaFix
-------

The PAL C64DTVs have wrong resistors in the video output circuit, which
causes incorrect luminances. Several hardware solutions ("LumaFixes")
have been developed to fix this flaw.

The fixed video output is emulated by selecting "New Luminances".  The
unmodified C64DTV video output can be emulated with "Old Luminances".

The default setting is "New Luminances".


@EndNode

@Node "Userport" "vice.guide/Userport"
@Next "Debug"
@Prev "LumaFix"
@Toc "C64DTV-specific"

Userport
--------

The C64DTV userport emulation currently supports three devices: Hummer
ADC, userport joystick and PS/2 mouse.

The joystick that controls either the Hummer ADC or userport joystick
can be selected using the same parameter or menu option.

While using the Hummer ADC, joystick UP and DOWN are mapped to the
Hummer buttons A and B respectively. LEFT and RIGHT set the ADCs output
to 0 and 255. Centering the joystick results in the ADC value of 128.

Currently the Hummer ADC and userport joystick are mutually exclusive.
This means that enabling one disables the other. PS/2 mouse emulation
can be used simultaneously with either Hummer ADC or userport joystick.

`-hummeradc'
`+hummeradc'
     Enable/Disable Hummer ADC (`HummerADC=1', `HummerADC=0').

`-ps2mouse'
`+ps2mouse'
     Enable/disable PS/2 mouse on userport (`ps2mouse=1', `ps2mouse=0').


@EndNode

@Node "Debug" "vice.guide/Debug"
@Next "Monitor DTV features"
@Prev "Userport"
@Toc "C64DTV-specific"

Debug
-----

Debugging information on Blitter, DMA and Flash can be enabled with
command line parameters. This can be useful for DTV software
development.

`-dtvblitterlog'
`+dtvblitterlog'
     Enable or disable DTV Blitter log

`-dtvdmalog'
`+dtvdmalog'
     Enable or disable DTV DMA log

`-dtvflashlog'
`+dtvflashlog'
     Enable or disable DTV Flash log


@EndNode

@Node "Monitor DTV features" "vice.guide/Monitor DTV features"
@Prev "Debug"
@Toc "C64DTV-specific"

Monitor DTV features
--------------------

Currently the registers A, Y and X are registers R0, R1 and R2
regardless of the mapping, which can be seen and modified via the
registers ACM and XYM.

The monitor can access all 2MB of RAM and 2MB of Flash, but only 64 kB
at a time.  The 64kB bank can be selected with "bank ram00".."ram1f"
for RAM and "bank rom00".."rom1f" for Flash.

The "load" command can load large files (>64kB) correctly if the bank
is set to "ramXX", where XX is the starting bank (usually "bank00").

DTV resources
-------------

`DtvRevision'
     Integer specifying the emulated DTV revision.  (2: DTV2, 3: DTV3)

`ChargenName'
     String specifying the name of the character generator ROM (default
     `chargen').

`KernalName'
     String specifying the name of the Kernal ROM (default `kernal').

`BasicName'
     String specifying the name of the Basic ROM (default `basic').

`c64dtvromfilename'
     String specifying the filename of the DTV Flash ROM image.

`c64dtvromrw'
     Boolean that specifies whether the emulated Flash ROM is writeable.

`FSFlashDir'
     String specifying the working directory for the flash file system.

`FlashTrueFS'
     Boolean, enables true hardware flash file system.

`HummerADC'
     Boolean to enable/disable the Hummer ADC emulation.

`ps2mouse'
     Boolean to enable/disable PS/2 Mouse emulation.

`DtvBlitterLog'
     Boolean, enables Blitter logging.

`DtvDMALog'
     Boolean, enables DMA logging.

`DtvFlashLog'
     Boolean, enables Flash ROM logging.

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine.
     (-1: PAL, -2: NTSC)

DTV command-line options
------------------------

`-model <Model>'
     Set the DTV model (`MachineVideoStandard', `DtvRevision',
     `HummerADC').  (v2/v2pal/v2ntsc, v3/v3pal/v3ntsc, hummer)

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-chargen <name>'
     Specify filename of the character generator ROM file
     (`ChargenName').

`-kernal <name>'
     Specify filename of the Kernal ROM file (`KernalName').

`-basic <name>'
     Specify the filename of the Basic ROM file (`BasicName').


@EndNode

@Node "SCPU64-specific" "vice.guide/SCPU64-specific"
@Next "VIC20-specific"
@Prev "C64DTV-specific"
@Toc "Machine-specific features"

SCPU64-specific commands and settings
=====================================

SCPU64 resources
----------------

`ChargenName'
     String specifying the name of the character generator ROM (default
     `chargen').

`SCPU64Name'
     String specifying the name of the SCPU64 ROM (default `scpu64').

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-4: PAL-N, -3: Old NTSC, -1: PAL, -2: NTSC).

`IECReset'
     Integer specifying if the IEC bus resets when the CPU resets.  (0:
     No, 1: Yes)

`BurstMod'
     Integer specifying the kind of Burst-Mode modification.  (0: None,
     1: CIA-1, 2: CIA-2)

`SIMMSize'
     Integer specifying the size of the SIMM RAM.  (0, 1, 4, 8, 16)

`JiffySwitch'
     Boolean to enable/disable the jiffy switch.

`SpeedSwitch'
     Boolean to enable/disable the speed switch.

`GlueLogic'
     Integer specifying the type of emulated glue-logic.  (0: discrete,
     1: custom IC)

SCPU64 command-line options
---------------------------

`-chargen <name>'
     Specify filename of the character generator ROM file
     (`ChargenName').

`-scpu64 <Name>'
     Specify filename of the SCPU64 ROM file (`SCPU64Name').

`-model <Model>'
     Set the C64 model (`MachineVideoStandard', `CIA1Model',
     `CIA2Model', `VICIINewLuminances', `IECReset', `ChargenName',
     `SidEngine', `SidModel').  (c64/c64c/c64old, ntsc/newntsc/oldntsc,
     drean, jap, c64gs)

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-ntscold'
     Use old NTSC sync factor (`MachineVideoStandard=-3').

`-paln'
     Use PAL-N sync factor (`MachineVideoStandard=-4').

`-iecreset <value>'
     Set IEC reset bahaviour (`IECReset').  (0: Do not reset with CPU
     reset, 1: Reset with CPU reset)

`-burstmod <value>'
     Set the kind of burst modification. This emulates the fast serial
     bus connection as described at
     http://www.cs.tut.fi/~albert/Dev/burst/, with the wire to the tape
     port cut (`BurstMod').  (0: None, 1: CIA-1, 2: CIA-2)

`-simmsize <number>'
     Set the size of the SIMM RAM (`SIMMSize').  (0, 1, 4, 8, 16)

`-jiffyswitch'
`+jiffyswitch'
     Enable/disable the jiffy swicth (`JiffySwitch=1', `JiffySwitch=0').

`-speedswitch'
`+speedswitch'
     Enable/disable the speed swicth (`SpeedSwitch=1', `SpeedSwitch=0').

`-gluelogictype <type>'
     Set glue logic type (`GlueLogic').  (0: discrete, 1: 252535-01)


@EndNode

@Node "VIC20-specific" "vice.guide/VIC20-specific"
@Next "PLUS4-specific"
@Prev "SCPU64-specific"
@Toc "Machine-specific features"

VIC20-specific commands and settings
====================================

This section lists the settings and commands that are VIC20-specific and
thus are not present in the other emulators.


 @{" VIC20 cartridges " Link "VIC20 cartridges"} 
 @{" VIC20 memory expansions " Link "VIC20 memory expansions"} 
 @{" VIC20 system ROM settings " Link "VIC20 system ROM settings"} 


@EndNode

@Node "VIC20 cartridges" "vice.guide/VIC20 cartridges"
@Next "VIC20 memory expansions"
@Prev "VIC20-specific"
@Toc "VIC20-specific"

Using cartridge images
----------------------

As with the C64 (see @{"C64 cartridges" Link "C64 cartridges"}), it is possible to attach several
types of cartridge images:

   * 4 or 8 Kbyte cartridges located at $2000;

   * 4 or 8 Kbyte cartridges located at $4000;

   * 4 or 8 Kbyte cartridges located at $6000;

   * 4 or 8 Kbyte cartridges located at $A000;

   * 4 Kbyte cartridges located at $B000.

This can all be done via the "Attach cartridge image..." command in the
left-button menu.  It is also possible to let xvic "guess" the type of
cartridge using "Smart-attach cartridge image...".

Notice that several cartridges are actually made up of two pieces (and
two files), that need to be loaded separately at different addresses.
In that case, you have to know the addresses (which are usually
specified in the file name) and use the "attach" command twice.

A special kind of cartridge file is where the two files mentioned above
are concatenated (with removing the two byte load address of the second
image) into one 16k image. There are only few of those images, though.
Normally the second part is located at $A000.  Vice can now attach such
concatenated files at the start address $2000, $4000, and $6000. The
second half of such an image is moved to $A000. If you encounter 16k
images that have the second half not at $A000 you can split the image
into two halfs (i.e. one 8194 byte and one 8192 byte, because the first
has the load address) and attach both files separately.

One cartridge that is currently only partially supported here is the
VIC1112 IEEE488 interface. You have to load the ROM as a cartridge, but
you also have to enable the IEEE488 hardware by menu.

VIC20 cartridge settings
------------------------

VIC20 cartridge resources
.........................

`CartridgeReset'
     Boolean specifying whether the machine should be reset when a
     cartridge is changed.

`CartridgeType'
     Integer specifying the type of cartridge emulated.

     The following cartridge types are valid:

        *     -1: None

        *      1: Generic

        *      2: Megacart

        *      3: Final Expansion

        *      4: Vic Flash Plugin

        *      5: IEEE-4888

        *      6: SIDCart

        * 0x8000: Auto Detect

        * 0x8002: 4KB at $2000-$2FFF

        * 0x8003: 8KB at $2000-$3FFF

        * 0x8004: 4KB at $6000-$6FFF

        * 0x8005: 8KB at $6000-$7FFF

        * 0x8006: 4KB at $A000-$AFFF

        * 0x8007: 8KB at $A000-$BFFF

        * 0x8008: 4KB at $B000-$BFFF

        * 0x8009: 8KB at $4000-$5FFF

        * 0x800A: 4KB at $4000-$4FFF

        * 0x8013: 16KB at $2000-$5FFF

        * 0x8015: 16KB at $6000-$9FFF

        * 0x8019: 16KB at $4000-$7FFF

`CartridgeFile'
     String specifying the filename of the image for the current
     cartridge.

`IOCollisionHandling'
     Integer specifying the way the I/O collisions should be handled.
     (0: error message and detach all involved carts, 1: error message
     and detach last attached involved carts, 2: warning in log and
     'AND' the valid return values)

`GenericCartridgeFile2000'
`GenericCartridgeFile4000'
`GenericCartridgeFile6000'
`GenericCartridgeFileA000'
`GenericCartridgeFileB000'
     Strings specifying the name of the respective cartridge ROM images.

`FinalExpansionWriteBack'
     Boolean, if true write back the Flash ROM image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`VicFlashPluginWriteBack'
     Boolean, if true write back the Flash ROM image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`MegaCartNvRAMfilename'
     String specifying the filename of the MegaCart NvRAM image.

`MegaCartNvRAMWriteBack'
     Boolean, if true write back the NvRAM image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`UltiMemWriteBack'
     Boolean, if true write back the Flash ROM image file
     automatically, incase the contents changed, when detaching or
     quitting the emulator.

`IO2RAM'
     Boolean specifying whether the I/O-2 ($9800-$9BFF) RAM cartridge
     should be emulated or not.

`IO3RAM'
     Boolean specifying whether the I/O-3 ($9C00-$9FFF) RAM cartridge
     should be emulated or not.

`TFEIOSwap'
     Boolean, swap/don't swap io mapping (map cart I/O to VIC20 I/O-2)

`SFXSoundExpander'
     Boolean specifying whether the SFX Sound Expander should be
     emulated or not.

`SFXSoundExpanderChip'
     Integer specifying which YM chip is emulated.  (3526, 3812)

`SFXSoundExpanderIOSwap'
     Boolean, swap io mapping (map cart I/O to VIC20 I/O-2) or don't
     swap io mapping (map cart I/O to VIC20 I/O-3).

`SFXSoundSampler'
     Boolean specifying whether the SFX Sound Sampler should be
     emulated or not.

`SFXSoundSamplerIOSwap'
     Boolean, swap io mapping (map cart I/O to VIC20 I/O-2) or don't
     swap io mapping (map cart I/O to VIC20 I/O-3).

`GEORAMfilename'
     String specifying the filename of the GEORAM image.

`GEORAM'
     Boolean specifying whether the GEO-RAM cartridge (using the
     MasC=uerade cartridge adapter) should be emulated or not.

`GEORAMsize'
     Integer specifying the size of the emulated GEO-RAM in KB.  (64,
     128, 256, 512, 1024, 2048, 4096).

`GEORAMImageWrite'
     Boolean, if true write back the GEO-RAM image file automatically,
     incase the RAM contents changed, when detaching or quitting the
     emulator.

`GEORAMIOSwap'
     Boolean specifying whether the io mapping should be swapped (map
     cart I/O-1 to VIC20 I/O-3 and cart I/O-2 to VIC20 I/O-2) or not
     (map cart I/O-2 to VIC20 I/O-2 and cart I/O-2 to VIC20 I/O-3).

`SidCart'
     Boolean specifying whether SID-Cart emulation is enabled or not.

`SidAddress'
     Integer that specifies the base address of the emulated SID chip.
     (0x9800, 0x9C00)

`SidClock'
     Integer specifying the clock rate used for the emulated SID chip
     (0: C64, 1: VIC20)

`DIGIMAX'
     Boolean specifying whether the DigiMAX cartridge (using the
     MasC=uerade cartridge adapter) should be emulated or not.

`DIGIMAXbase'
     Integer specifying the DigiMAX base address.  (0x9800, 0x9820,
     0x9840, 0x9860, 0x9880, 0x98A0, 0x98C0, 0x98E0, 0x9C00, 0x9C20,
     0x9C40, 0x9C60, 0x9C80, 0x9CA0, 0x9CC0, 0x9CE0)

`DS12C887RTC'
     Boolean specifying whether the DS12C887 RTC cartridge (using the
     MasC=uerade cartridge adapter) should be emulated or not.

`DS12C887RTCbase'
     Integer specifying the DS12C887 RTC base address.  (0x9800, 0x9C00)

`DS12C887RTCRunMode'
     Boolean specifying whether the DS12C887 RTC cartridge starts out
     running or halted.  (0: halted, 1: running)

`DS12C887RTCSave'
     Boolean specifying whether the DS12C887 RTC data should be saved
     when changed or not.

`IEEE488'
     Boolean specifying whether the IEEE488 interface should be
     emulated or not.

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-1: PAL, -2: NTSC).

VIC20 cartridge command-line options
....................................

`-iocollision <method>'
     Select the way the I/O collisions should be handled
     (`IOCollisionHandling').  (0: error message and detach all
     involved carts, 1: error message and detach last attached involved
     carts, 2: warning in log and 'AND' the valid return values

`-cartreset'
`+cartreset'
     Do/don't reset machine if a cartridge is attached or detached
     (`CartridgeReset=1', `CartridgeReset').

`-cart2 <name>'
     Specify 4/8/16K extension ROM name at $2000

`-cart4 <name>'
     Specify 4/8/16K extension ROM name at $4000

`-cart6 <name>'
     Specify 4/8/16K extension ROM name at $6000

`-cartA <name>'
     Specify 4/8K extension ROM name at $A000

`-cartB <name>'
     Specify 4K extension ROM name at $B000

`-cartgeneric <name>'
     Specify generic extension ROM name

`-cartmega <name>'
     Specify Mega-Cart extension ROM name

`-mcnvramfile <name>'
     Set Mega-Cart NvRAM filename (`MegaCartNvRAMfilename').

`-mcnvramwriteback'
`+mcnvramwriteback'
     Enable/Disable Mega-Cart NvRAM writeback
     (`MegaCartNvRAMWriteBack=1', `MegaCartNvRAMWriteBack=0').

`-cartfe <name>'
     Specify Final Expansion extension ROM name

`-fewriteback'
`+fewriteback'
     Enable/disable Final Expansion write back to ROM file
     (`FinalExpansionWriteBack=1', `FinalExpansionWriteBack=0').

`-cartfp <name>'
     Specify Vic Flash Plugin extension ROM name

`-fpwriteback'
`+fpwriteback'
     Enable/Disable Vic Flash Plugin write back to ROM file
     (`VicFlashPluginWriteBack=1', `VicFlashPluginWriteBack=0').

`-umwriteback'
`+umwriteback'
     Enable/disable UltiMem write back to ROM file
     (`UltiMemWriteBack=1', `UltiMemWriteBack=0').

`-io2ram'
`+io2ram'
     Enable/disable the I/O-2 ($9800-$9BFF) RAM cartridge (`IO2RAM=1',
     `IO2RAM=0').

`-io3ram'
`+io3ram'
     Enable/disable the I/O-3 ($9C00-$9FFF) RAM cartridge (`IO3RAM=1',
     `IO3RAM=0').

`-ieee488'
`+ieee488'
     Enable/disable VIC-1112 IEEE488 interface (`IEEE488=1',
     `IEEE488=0').

`-sidcart'
`+sidcart'
     Enable/disable SID Cartridge (`SidCart=1', `SidCart=0').

`-sidcartaddress <address>'
     Specify address of the SID Cartridge (`SidAddress').  (0x9800,
     0x9C00)

`-sidcartclock <clock>'
     Specify clock of the SID Cartridge (`SidClock').  (0: C64, 1:
     VIC20)

`-tfeioswap'
`+tfeioswap'
     Swap/don't swap io mapping (map cart I/O to VIC20 I/O-2)

`-tfe'
`+tfe'
     Enable/Disable the TFE ("The Final Ethernet") unit

`-tfeif <name>'
     Set the system ethernet interface for TFE emulation

`-tferrnet'
`+tferrnet'
     Enable/Disable RRNet mode of TFE emulation

`-digimax'
`+digimax'
     Enable/disable the DigiMAX cartridge (using the MasC=uerade
     cartridge adapter) (`DIGIMAX=1', `DIGIMAX=0').

`-digimaxbase <base address>'
     Base address of the DigiMAX cartridge (`DIGIMAXbase').  (0x9800,
     0x9820, 0x9840, 0x9860, 0x9880, 0x98A0, 0x98C0, 0x98E0, 0x9C00,
     0x9C20, 0x9C40, 0x9C60, 0x9C80, 0x9CA0, 0x9CC0, 0x9CE0)

`-ds12c887rtc'
`+ds12c887rtc'
     Enable/disable the DS12C887 RTC cartridge (using the MasC=uerade
     cartridge adapter) (`DS12C887RTC=1', `DS12C887RTC=0').

`-ds12c887rtcbase <base address>'
     Base address of the DS12C887 RTC cartridge (`DS12C887RTCbase').
     (0x9800, 0x9C00)

`-ds12c887rtchalted'
     Set the DS12C887 RTC oscillator to 'halted'
     (`DS12C887RTCRunMode=0').

`+ds12c887rtcrunning'
     Set the DS12C887 RTC oscillator to 'running'
     (`DS12C887RTCRunMode=1').

`-ds12c887rtcsave'
`+ds12c887rtcsave'
     Enable/disable saving of the DS12C887 RTC data when changed
     (`DS12C887RTCSave=1', `DS12C887RTCSave=0').

`-sfxse'
`+sfxse'
     Enable/disable the SFX soundexpander cartridge (using the
     MasC=uerade cartridge adapter) (`SFXSoundExpander=1',
     `SFXSoundExpander=0').

`-sfxsetype <type>'
     Set YM chip type (`SFXSoundExpanderChip').  (3526, 3812)

`-sfxseioswap'
     Swap io mapping (map cart I/O to VIC20 I/O-2)
     (`SFXSoundExpanderIOSwap=1').

`+sfxseioswap'
     Swap io mapping (map cart I/O to VIC20 I/O-3)
     (`SFXSoundExpanderIOSwap=0').

`-sfxssioswap'
     Swap io mapping (map cart I/O to VIC20 I/O-2)
     (`SFXSoundSamplerIOSwap=1').

`+sfxssioswap'
     Don't swap io mapping (map cart I/O to VIC20 I/O-3)
     (`SFXSoundSamplerIOSwap=0').

`-sfxss'
`+sfxss'
     Enable/disable the SFX Sound Sampler cartridge
     (`SFXSoundSampler=1', `SFXSoundSampler=0').

`-georamioswap'
     Swap the io mapping (map cart I/O-1 to VIC20 I/O-3 and cart I/O-2
     to VIC20 I/O-2) (`GEORAMIOSwap=1').

`+georamioswap'
     Do not swap the io mapping (map cart I/O-2 to VIC20 I/O-2 and cart
     I/O-2 to VIC20 I/O-3) (`GEORAMIOSwap=0').

`-georam'
`+georam'
     Enable/disable the GEORAM expansion unit (using the MasC=uerade
     cartridge adapter) (`GEORAM=1', `GEORAM=0').

`-georamimage <name>'
     Specify name of GEORAM image (`GEORAMfilename').

`-georamimagerw'
`+georamimagerw'
     Allow/disallow writing to GEORAM image (`GEORAMImageWrite=1',
     `GEORAMImageWrite=0').

`-georamsize <size in KB>'
     Size of the GEORAM expansion unit (`GEORAMsize').  (64, 128, 256,
     512, 1024, 2048, 4096)

`-model <model>'
     Specify the VIC20 model you want to emulate
     (`MachineVideoStandard', `RamBlock0', `RamBlock1', `RamBlock2',
     `RamBlock3' and `RamBlock5').  (vic20/vic20pal/vic20ntsc, vic21)

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

VIC settings
------------

VIC resources
.............

`VICVideoCache'
     Boolean specifying whether the video cache is turned on.

`VICDoubleSize'
     Boolean specifying whether double-size mode is turned on.

`VICDoubleScan'
     Boolean specifying whether double-scan mode is turned on.

`VICPaletteFile'
     String specifying the name of the palette file being used. The
     `.vpl' extension is optional.

`VICExternalPalette'
     Boolean specifying whether to use external palette file or not.

`VICColorSaturation'
     Integer specifying saturation of internal calculated palette.
     (0..2000)

`VICColorContrast'
     Integer specifying contrast of internal calculated palette,
     (0..2000)

`VICColorBrightness'
     Integer specifying brightness of internal calculated palette.
     (0..2000)

`VICColorGamma'
     Integer specifying gamma of internal calculated palette.  (0..4000)

`VICColorTint'
     Integer specifying tint of internal calculated palette.  (0..2000)

`VICPALScanLineShade'
     Integer specifying amount of scan line shading for the CRT
     emulation.  (0..1000)

`VICPALBlur'
     Integer specifying amount of horizontal blur for the CRT emulation.
     (0..1000)

`VICPALOddLinePhase'
     Integer specifying phase for color carrier in odd lines.  (0..2000)

`VICPALOddLineOffset'
     Integer specifying phase offset for color carrier in odd lines.
     (0..2000)

`VICAudioLeak'
     Boolean specifying whether to enable/disable video to audio leak
     emulation.

`VICFilter'
     Integer specifying the rendering filter.  (0: None, 1: CRT
     emulation, 2: Scale2x)

`VICBorderMode'
     Integer specifying border display mode (0: normal, 1: full, 2:
     debug, 3: none)

VIC command-line options
........................

`-VICvcache'
`+VICvcache'
     Enable/disable the video cache (`VICVideoCache=1',
     `VICVideoCache=0').

`-VICdsize'
`+VICdsize'
     Enable/disable the double size mode (`VICDoubleSize=1',
     `VICDoubleSize=0').

`-VICdscan'
`+VICdscan'
     Enable/disable the double scan mode (`VICDoubleScan=1',
     `VICDoubleScan=0').

`-VICfilter <Mode>'
     Select rendering filter (`VICFilter').  (0: None, 1: CRT
     emulation, 2: Scale2x)

`-VICpalette NAME'
     Specify the name of the palette file (`VICPaletteFile').

`-VICintpal'
     Use an internal calculated palette (`VICExternalPalette=0').

`-VICextpal'
     Use an external palette (file) (`VICExternalPalette=1').

`-VICXRANDRfullmode <mode>'
     Select fullscreen mode

`-VICVidmodefullmode <mode>'
     Select fullscreen mode

`-VICborders <mode>'
     Set VIC border display mode (`VICBorderMode').  (0: normal, 1:
     full, 2: debug, 3: none)

`-VICsaturation <0-2000>'
     Set saturation of internal calculated palette
     (`VICColorSaturation').

`-VICcontrast <0-2000>'
     Set contrast of internal calculated palette (`VICColorContrast').

`-VICbrightness <0-2000>'
     Set brightness of internal calculated palette
     (`VICColorBrightness').

`-VICgamma <0-4000>'
     Set gamma of internal calculated palette (`VICColorGamma').

`-VICtint <0-2000>'
     Set tint of internal calculated palette (`VICColorTint').

`-VICoddlinesphase <0-2000>'
     Set phase for color carrier in odd lines (`VICPALOddLinePhase').

`-VICoddlinesoffset <0-2000>'
     Set phase offset for color carrier in odd lines.
     (`VICPALOddLineOffset').

`-VICcrtblur <0-1000>'
     Amount of horizontal blur for the CRT emulation (`VICPALBlur').

`-VICcrtscanlineshade <0-1000>'
     Amount of scan line shading for the CRT emulation
     (`VICPALScanLineShade').

`-VICaudioleak'
`+VICaudioleak'
     Enable/disable video to audio leak emulation (`VICAudioLeak=1',
     `VICAudioLeak=0').


@EndNode

@Node "VIC20 memory expansions" "vice.guide/VIC20 memory expansions"
@Next "VIC20 system ROM settings"
@Prev "VIC20 cartridges"
@Toc "VIC20-specific"

Changing memory configuration
-----------------------------

It is possible to change the VIC20 memory configuration in two ways: by
enabling and/or disabling certain individual memory blocks, or by
choosing one among a few typical memory configurations.  The former can
be done by modifying resource values directly or from the right-button
menu; the latter can only be done from the menu.

There are 5 RAM expansion blocks in the VIC20, numbered 0, 1, 2, 3 and
5:

   * block 0 (3 Kbytes at $0400-$0FFF);

   * block 1 (8 Kbytes at $2000-$3FFF);

   * block 2 (8 Kbytes at $4000-$5FFF);

   * block 3 (8 Kbytes at $6000-$7FFF);

   * block 5 (8 Kbytes at $A000-$BFFF).

These blocks are called "expansion blocks" because they are not present
a stock ("unexpanded") machine.  Each of them is associated to a
boolean `RamBlockX' resource (where `X' is the block number) that
specifies whether the block is enabled or not.

There are also some common memory configurations you can pick from the
right-button menu:

   * no RAM expansion blocks at all;

   * all RAM expansion blocks enabled;

   * 3K expansion (only block 0 is enabled);

   * 8K expansion (only block 1 is enabled);

   * 16K expansion (only blocks 1 and 2 are enabled);

   * 24K expansion (only blocks 1, 2 and 3 are enabled).


 @{" VIC20 memconf resources " Link "VIC20 memconf resources"} 
 @{" VIC20 memconf options " Link "VIC20 memconf options"} 


@EndNode

@Node "VIC20 memconf resources" "vice.guide/VIC20 memconf resources"
@Next "VIC20 memconf options"
@Prev "VIC20 memory expansions"
@Toc "VIC20 memory expansions"

VIC20 memory configuration resources
....................................

`RAMBlock0'
`RAMBlock1'
`RAMBlock2'
`RAMBlock3'
`RAMBlock5'
     Booleans specifying whether RAM blocks 0, 1, 2, 3 and 5 must be
     enabled.


@EndNode

@Node "VIC20 memconf options" "vice.guide/VIC20 memconf options"
@Prev "VIC20 memconf resources"
@Toc "VIC20 memory expansions"

VIC20 memory configuration command-line options
...............................................

`-memory <config>'
     Specify memory configuration. It must be a comma-separated list of
     options, each of which can be one the following:

        * `none' (no extension);

        * `all' (all blocks);

        * `3k' (3k space in block 0);

        * `8k' (first 8k extension block);

        * `16k' (first and second 8k extension blocks);

        * `24k' (first, second and 3rd extension blocks);

        * `0', `1', `2', `3', `5' (memory in respective blocks);

        * `04', `20', `40', `60', `A0' (memory at respective address.

     For example,

          xvic -memory none

     gives an unexpanded VIC20.  While

          xvic -memory 60,a0

     or

          xvic -memory 3,5

     enables memory in blocks 3 and 5, which is the usual configuration
     for 16k ROM modules.


@EndNode

@Node "VIC20 system ROM settings" "vice.guide/VIC20 system ROM settings"
@Prev "VIC20 memory expansions"
@Toc "VIC20-specific"

VIC20 system ROM settings
-------------------------

These settings can be used to control what system ROMs are loaded in the
VIC20 emulator at startup.  They cannot be changed from the menus.


 @{" VIC20 system ROM resources " Link "VIC20 system ROM resources"} 
 @{" VIC20 system ROM options " Link "VIC20 system ROM options"} 


@EndNode

@Node "VIC20 system ROM resources" "vice.guide/VIC20 system ROM resources"
@Next "VIC20 system ROM options"
@Prev "VIC20 system ROM settings"
@Toc "VIC20 system ROM settings"

VIC20 system ROM resources
..........................

`KernalName'
     String specifying the name of the Kernal ROM (default `kernal').

`BasicName'
     String specifying the name of the Basic ROM (default `basic').

`ChargenName'
     String specifying the name of the character generator ROM (default
     `chargen').


@EndNode

@Node "VIC20 system ROM options" "vice.guide/VIC20 system ROM options"
@Prev "VIC20 system ROM resources"
@Toc "VIC20 system ROM settings"

VIC20 system ROM command-line options
.....................................

`-kernal <name>'
     Specify the filename of the Kernal ROM file (`KernalName').

`-basic <name>'
     Specify the filename of the Basic ROM file (`BasicName').

`-chargen <name>'
     Specify the filename of the character generator ROM file
     (`ChargenName').

`-cart2 NAME'
`-cart4 NAME'
`-cart6 NAME'
`-cartA NAME'
`-cartB NAME'
     Specify `NAME' as the cartridge image to attach.
     (`CartridgeFile2000', ..., `CartridgeFileB000').

VIC20 settings
--------------

VIC20 command-line options
..........................


@EndNode

@Node "PLUS4-specific" "vice.guide/PLUS4-specific"
@Next "PET-specific"
@Prev "VIC20-specific"
@Toc "Machine-specific features"

PLUS4-specific commands and settings
====================================

TED settings
------------

TED resources
.............

`TEDVideoCache'
     Boolean specifying whether the video cache is turned on.

`TEDDoubleSize'
     Boolean specifying whether double-size mode is turned on.

`TEDDoubleScan'
     Boolean specifying whether double-scan mode is turned on.

`TEDPaletteFile'
     String specifying the name of the palette file being used. The
     `.vpl' extension is optional.

`TEDExternalPalette'
     Boolean specifying whether to use external palette file or not.

`TEDColorSaturation'
     Integer specifying saturation of internal calculated palette.
     (0..2000)

`TEDColorContrast'
     Integer specifying contrast of internal calculated palette.
     (0..2000)

`TEDColorBrightness'
     Integer specifying brightness of internal calculated palette.
     (0..2000)

`TEDColorGamma'
     Integer specifying gamma of internal calculated palette.  (0..4000)

`TEDColorTint'
     Integer specifying tint of internal calculated palette.  (0..2000)

`TEDPALScanLineShade'
     Integer specifying amount of scan line shading for the CRT
     emulation.  (0..1000)

`TEDPALBlur'
     Integer specifying amount of horizontal blur for the CRT emulation.
     (0..1000)

`TEDPALOddLinePhase'
     Integer specifying phase for color carrier in odd lines.  (0..2000)

`TEDPALOddLineOffset'
     Integer specifying phase offset for color carrier in odd lines.
     (0..2000)

`TEDAudioLeak'
     Boolean specifying whether to enable/disable video to audio leak
     emulation.

`TEDFilter'
     Integer specifying rendering filter.  (0: None, 1: CRT emulation,
     2: Scale2x)

`TEDBorderMode'
     Integer specifying border display mode.  (0: normal, 1: full, 2:
     debug, 3: none)

TED command-line options
........................

`-TEDvcache'
`+TEDvcache'
     Enable/disable the video cache (`TEDVideoCache=1',
     `TEDVideoCache=0').

`-TEDdsize'
`+TEDdsize'
     Enable/disable double size (`TEDDoubleSize=1', `TEDDoubleSize=0').

`-TEDdscan'
`+TEDdscan'
     Enable/disable double scan (`TEDDoubleScan=1', `TEDDoubleScan=0').

`-TEDfilter <Mode>'
     Select rendering filter (`TEDFilter').  (0: None, 1: CRT
     emulation, 2: Scale2x)

`-TEDintpal'
     Use an internal calculated palette (`TEDExternalPalette=0').

`-TEDextpal'
     Use an external palette (file) (`TEDExternalPalette=1').

`-TEDpalette <name>'
     Specify name of the external palette file (`TEDPaletteFile').

`-TEDXRANDRfullmode <mode>'
     Select fullscreen mode

`-TEDVidmodefullmode <mode>'
     Select fullscreen mode

`-TEDborders <mode>'
     Set TED border display mode (`TEDBorderMode').  (0: normal, 1:
     full, 2: debug, 3: none)

`-TEDsaturation <0-2000>'
     Set saturation of internal calculated palette
     (`TEDColorSaturation').

`-TEDcontrast <0-2000>'
     Set contrast of internal calculated palette (`TEDColorContrast').

`-TEDbrightness <0-2000>'
     Set brightness of internal calculated palette
     (`TEDColorBrightness').

`-TEDgamma <0-4000>'
     Set gamma of internal calculated palette (`TEDColorGamma').

`-TEDtint <0-2000>'
     Set tint of internal calculated palette (`TEDColorTint').

`-TEDoddlinesphase <0-2000>'
     Set phase for color carrier in odd lines (`TEDPALOddLinePhase').

`-TEDoddlinesoffset <0-2000>'
     Set phase offset for color carrier in odd lines
     (`TEDPALOddLineOffset').

`-TEDcrtblur <0-1000>'
     Amount of horizontal blur for the CRT emulation (`TEDPALBlur').

`-TEDcrtscanlineshade <0-1000>'
     Amount of scan line shading for the CRT emulation
     (`TEDPALScanLineShade').

`-TEDaudioleak'
`+TEDaudioleak'
     Enable/disable video to audio leak emulation (`TEDAudioLeak=1',
     `TEDAudioLeak=0').

PLUS4 I/O extension settings
----------------------------

PLUS4 I/O extension resources
.............................

`CartridgeReset'
     Boolean specifying whether the machine should be reset when a
     cartridge is changed.

`DIGIBLASTER'
     Boolean to enable/disable the Digiblaster emulation.

`SpeechEnabled'
     Boolean to enable/disable the emulation of the V364 speech chip.

`SpeechImage'
     String specifying the filename of the speech ROM image.

`SidCart'
     Boolean specifying whether SID-Cart emulation is enabled or not.

`SidAddress'
     Integer that specifies the base address of the emulated SID chip.
     (0xFD40, 0xFE80)

`SidClock'
     Integer specifying the clock rate used for the emulated SID chip
     (0: C64, 1: Plus4)

`SIDCartJoy'
     Boolean to enable/disable the emulation of the SID-Cart control
     port.

PLUS4 I/O extension command-line options
........................................

`-cartreset'
`+cartreset'
     Do/don't reset machine if a cartridge is attached or detached
     (`CartridgeReset=1', `CartridgeReset').

`-cart <Name>'
     Smart-attach cartridge image

`+cart'
     Disable default cartridge

`-digiblaster'
`+digiblaster'
     Enable/disable the digiblaster add-on (`DIGIBLASTER=1',
     `DIGIBLASTER=0').

`-sidcart'
`+sidcart'
     Enable/disable SID Cartridge (`SidCart=1', `SidCart=0').

`-sidcartjoy'
`+sidcartjoy'
     Enable/disable SID cartridge control port (`SIDCartJoy=1',
     `SIDCartJoy=0').

`-sidcartaddress <address>'
     Specify address of the SID Cartridge (`SidAddress').  (0xFD40,
     0xFE80)

`-sidcartclock <clock>'
     Specify clock of the SID Cartridge (`SidClock').  (0: C64, 1:
     Plus4)

`-speech'
`+speech'
     Enable/Disable the v364 speech add-on (`SpeechEnabled=1',
     `SpeechEnabled=0').

`-speechrom <name>'
     Attach Speech ROM image (`SpeechImage', `SpeechEnabled').

PLUS4 system ROM settings
-------------------------

PLUS4 system ROM resources
..........................

`KernalName'
     String specifying the name of the Kernal ROM (default `kernal').

`BasicName'
     String specifying the name of the Basic ROM (default `basic').

`FunctionLowName'
     String specifying the filename of the Lo Function ROM.

`FunctionHighName'
     String specifying the filename of the High Function ROM.

`c1loName'
     String specifying the filename of cartridge 1 Lo ROM.

`c1hiName'
     String specifying the filename of cartridge 1 High ROM.

`c2loName'
     String specifying the filename of cartridge 2 Lo ROM.

`c2hiName'
     String specifying the filename of cartridge 2 High ROM.

PLUS4 system ROM command-line options
.....................................

`-kernal <Name>'
     Specify name of the Kernal ROM image (`KernalName').

`-basic <Name>'
     Specify name of the BASIC ROM image (`BasicName').

`-functionlo <name>'
     Specify name of Function low ROM image (`FunctionLowName').

`-functionhi <name>'
     Specify name of Function high ROM image (`FunctionHighName').

`-c1lo <name>'
     Specify name of Cartridge 1 low ROM image (`c1loName').

`-c1hi <name>'
     Specify name of Cartridge 1 high ROM image (`c1HiName').

`-c2lo <name>'
     Specify name of Cartridge 2 low ROM image (`c2loName').

`-c2hi <name>'
     Specify name of Cartridge 2 high ROM image (`c2HiName').

PLUS4 settings
--------------

PLUS4 resources
...............

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-1: PAL, -2: NTSC).

`RamSize'
     Integer specifying the size of the memory in kByte.  (16, 32, 64)

`MemoryHack'
     Integer specifying what memory expansion hack is active.  (0:
     None, 1: C256K, 2: H256K, 3: H1024K, 4: H4096K)

`Acia1Enable'
     Boolean specifying whether the ACIA should be emulated or not.

PLUS4 command-line options
..........................

`-model <model>'
     Specify the PLUS4 model you want to emulate
     (`MachineVideoStandard', `RamSize', `KernalName', `BasicName',
     `FunctionLowName', `FunctionHighName', `Acia1Enable',
     `SpeechImage', `SpeechEnabled').  (c16/c16pal/c16ntsc,
     plus4/plus4pal/plus4ntsc, v364/cv364, c232)

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-ramsize <ramsize>'
     Specify size of RAM installed in kb (`RamSize').  (16, 32, 64)

`-memoryexphack <device>'
     Set active memory expansion hack (`MemoryHack').  (0: None, 1:
     C256K, 2: H256K, 3: H1024K, 4: H4096K)

`-acia'
`+acia'
     Enable/Disable the ACIA emulation


@EndNode

@Node "PET-specific" "vice.guide/PET-specific"
@Next "CBM-II-specific"
@Prev "PLUS4-specific"
@Toc "Machine-specific features"

PET-specific commands and settings
==================================

This section lists the settings and commands that are PET-specific and
thus are not present in the other emulators.


 @{" PET model " Link "PET model"} 
 @{" CRTC Settings " Link "CRTC Settings"} 
 @{" PET I-O extensions " Link "PET I-O extensions"} 
 @{" PET system ROM " Link "PET system ROM"} 
 @{" PET diagnostic pin " Link "PET diagnostic pin"} 
 @{" PET settings " Link "PET settings"} 
 @{" Colour PET " Link "Colour PET"} 
 @{" PET colors " Link "PET colors"} 
 @{" PET DWW high resolution grapics " Link "PET DWW high resolution grapics"} 
 @{" PET HRE (HiRes Emulator) high resolution grapics " Link "PET HRE (HiRes Emulator) high resolution grapics"} 


@EndNode

@Node "PET model" "vice.guide/PET model"
@Next "CRTC Settings"
@Toc "PET-specific"

Changing PET model settings
---------------------------

With `xpet', it is possible to change at runtime the characteristics of
the emulated PET so that it matches (or not) the ones of a certain PET
model, and it is also possible to select from a common set of PET
models so that all the features are selected accordingly.

The former is done by changing the following resources (via resource
file, command line options or right-menu items):

`RamSize'
     Integer specifying the size of the memory in kByte. 96k denotes a
     8096, 128k a 8296.  (4, 8, 16, 32, 96, 128)

`IOSize'
     Integer specifying the size of the I/O area in Bytes for the 8296
     model.  (256, 2048)

`VideoSize'
     Integer specifying the number of columns on the screen.  (0:
     Automatic from ROM, 40: 40 columns, 80: 80 columns)

`Ram9'
     Boolean specifying if the 8296 can map RAM into the address range
     $9*** or not.

`RamA'
     Boolean specifying if the 8296 can map RAM into the address range
     $A*** or not.

`SuperPET'
     Boolean that enables/disables the SuperPET (MicroMainFrame 9000)
     I/O and 6809 CPU, and disables/enables the 8x96 mappings.

`Basic1'
     Boolean to enable/disable the patching of a version 1 kernal ROM
     to make the IEEE488 interface work.

`Basic1Chars'
     Boolean to enable/disable the exchanges of some characters in the
     character ROM that have changed between the first PET 2001 and all
     newer versions.

`EoiBlank'
     Boolean to enable/disable the "blank screen on EOI" feature of the
     oldest PET 2001.

`DiagPin'
     Boolean to enable/disable the diagnostic pin on the PET userport
     (see below).

`ChargenName'
     String specifying the name of the character generator ROM (default
     `chargen').

`KernalName'
     String specifying the name of the Kernal ROM (default `kernal4').

`BasicName'
     String specifying the name of the Basic ROM (default `basic4').

`EditorName'
     String specifying the filename of the editor ROM file. This file
     contains an overlay for the editor ROM at $E000-$E7FF if necessary.

`RomModule9Name'
     String specifying the filename for the $9*** Expansion ROM file.
     This file contains an expansion ROM image of 4k.

`RomModuleAName'
     String specifying the filename for the $A*** Expansion ROM file.
     This file contains an expansion ROM image of 4k.

`RomModuleBName'
     String specifying the filename for the $B*** Expansion ROM file.
     This file contains an expansion ROM image of 4k. This file
     overlays the lowest 4k of a BASIC 4 ROM.

Choosing a common PET model is done from the right-button menu instead,
by choosing an item from the "Model defaults" submenu.  Available
models are:

   * PET 2001-8N

   * PET 3008

   * PET 3016

   * PET 3032

   * PET 3032B

   * PET 4016

   * PET 4032

   * PET 4032B

   * PET 8032

   * PET 8096

   * PET 8296

   * SuperPET

Notice that this will *reset the emulated machine*.

It is also possible to select the PET model at startup, with the
`-model' command-line option: for example, `xpet -model 3032' will
emulate a PET 3032 while `xpet -model 8296' will emulate a PET 8296.


@EndNode

@Node "CRTC Settings" "vice.guide/CRTC Settings"
@Next "PET I-O extensions"
@Prev "PET model"
@Toc "PET-specific"

CRTC Settings
-------------

CRTC resources
..............

`Crtc'
     Boolean specifying whether to enable/disable CRTC 6545 emulation
     (all models from 40xx and above).

`CrtcVideoCache'
     Boolean specifying whether the video cache is turned on.

`CrtcDoubleSize'
     Boolean specifying whether double-size mode is turned on.

`CrtcDoubleScan'
     Boolean specifying whether double-scan mode is turned on.

`CrtcStretchVertical'
     Boolean specifying whether vertical stretching is turned on.

`CrtcPaletteFile'
     String specifying the name of the palette file being used. The
     `.vpl' extension is optional.

`CrtcExternalPalette'
     Boolean specifying whether to use external palette file or not.

`CrtcColorSaturation'
     Integer specifying saturation of internal calculated palette.
     (0..2000)

`CrtcColorContrast'
     Integer specifying contrast of internal calculated palette.
     (0..2000)

`CrtcColorBrightness'
     Integer specifying brightness of internal calculated palette.
     (0..2000)

`CrtcColorGamma'
     Integer specifying gamma of internal calculated palette.  (0..4000)

`CrtcColorTint'
     Integer specifying tint of internal calculated palette.  (0..2000)

`CrtcPALScanLineShade'
     Integer specifying amount of scan line shading for the CRT
     emulation.  (0..1000)

`CrtcPALBlur'
     Integer specifying amount of horizontal blur for the CRT emulation.
     (0..1000)

`CrtcPALOddLinePhase'
     Integer specifying phase for color carrier in odd lines (0..2000)

`CrtcPALOddLineOffset'
     Integer specifying phase offset for color carrier in odd lines.
     (0..2000)

`CrtcAudioLeak'
     Boolean specifying whether to enable/disable video to audio leak
     emulation.

`CrtcFilter'
     Integer specifying rendering filter.  (0: None, 2: CRT emulation,
     3: Scale2x)

CRTC command-line options
.........................

`-crtc'
`+crtc'
     Enable/disable the 6545 CRTC emulation (`Crtc=1', `Crtc=0').

`-Crtcvcache'
`+Crtcvcache'
     Enable/disable the video cache (`CrtcVideoCache=1',
     `CrtcVideoCache=0').

`-Crtcdsize'
`+Crtcdsize'
     Enable/disable double size (`CrtcDoubleSize=1',
     `CrtcDoubleSize=0').

`-CRTCstretchvertical'
`+CRTCstretchvertical'
     Enable/disable vertical stretching (`CrtcStretchVertical=1',
     `CrtcStretchVertical=0').

`-Crtcdscan'
`+Crtcdscan'
     Enable/disable double scan (`CrtcDoubleScan=1',
     `CrtcDoubleScan=0').

`-Crtcfilter <Mode>'
     Select rendering filter (`CrtcFilter').  (0: None, 2: CRT
     emulation, 3: Scale2x)

`-Crtcintpal'
     Use an internal calculated palette (`CrtcExternalPalette=0').

`-Crtcextpal'
     Use an external palette (file) (`CrtcExternalPalette=1').

`-Crtcpalette <name>'
     Specify the name of the palette file (`CrtcPaletteFile').

`-CrtcVidmodefullmode <mode>'
     Select fullscreen mode

`-Crtcsaturation <0-2000>'
     Set saturation of internal calculated palette
     (`CrtcColorSaturation').

`-Crtccontrast <0-2000>'
     Set contrast of internal calculated palette (`CrtcColorContrast').

`-Crtcbrightness <0-2000>'
     Set brightness of internal calculated palette
     (`CrtcColorBrightness').

`-Crtcgamma <0-4000>'
     Set gamma of internal calculated palette (`CrtcColorGamma').

`-Crtctint <0-2000>'
     Set tint of internal calculated palette (`CrtcColorTint').

`-Crtcoddlinesphase <0-2000>'
     Set phase for color carrier in odd lines (`CrtcPALOddLinePhase').

`-Crtcoddlinesoffset <0-2000>'
     Set phase offset for color carrier in odd lines
     (`CrtcPALOddLineOffset').

`-Crtccrtblur <0-1000>'
     Amount of horizontal blur for the CRT emulation (`CrtcPALBlur').

`-Crtccrtscanlineshade <0-1000>'
     Amount of scan line shading for the CRT emulation
     (`CrtcPALScanLineShade').

`-Crtcaudioleak'
`+Crtcaudioleak'
     Enable/disable video to audio leak emulation (`CrtcAudioLeak=1',
     `CrtcAudioLeak=0').


@EndNode

@Node "PET I-O extensions" "vice.guide/PET I-O extensions"
@Next "PET system ROM"
@Prev "CRTC Settings"
@Toc "PET-specific"

PET I/O extension settings
--------------------------

PET I/O extension resources
...........................

`PETREU'
     Boolean specifying whether PET REU emulation is enabled or not.

`PETREUfilename'
     String specifying the filename of the PET REU image.

`PETREUsize'
     Integer specifying the size of the emulated PET REU in KB.  (128,
     512, 1024, 2048)

`PETDWW'
     Boolean specifying whether DWW emulation is enabled or not.

`PETDWWfilename'
     String specifying the filename of the DWW image RAM image.

`PETHRE'
     Boolean specifying whether HRE emulation is enabled or not.

`PETColour'
     Integer selecting the colour extension.  (0: off, 1: RGBI, 2:
     Analog)

`PETColourBG'
     Iteger specifying the analog colour background on PET 4032.
     (0..255)

`UserportDAC'
     Boolean specifying whether userport DAC emulation is enabled.

`SidCart'
     Boolean specifying whether SID Cart emulation is enabled or not.

`SidAddress'
     Integer that specifies the base address of the emulated SID chip.
     (0x8F00, 0xE900)

`SidClock'
     Integer specifying the clock rate used for the emulated SID chip.
     (0: C64, 1: PET)

PET I/O extension command-line options
......................................

`-petreu'
`+petreu'
     Enable/disable the PET Memory Expansion Unit (`PETREU=1',
     `PETREU=0').

`-petreuimage <name>'
     Specify name of PET Ram and Expansion Unit image
     (`PETREUfilename').

`-petreuramsize <size in KB>'
     Size of the PET Ram and Expansion Unit (`PETREUsize').  (128, 512,
     1024, 2048)

`-userportdac'
`+userportdac'
     Enable/disable the userport DAC (`UserportDAC=1', `UserportDAC=0').

`-petdww'
`+petdww'
     Enable/disable the PET DWW hi-res board (30xx models only)
     (`PETDWW=1', `PETDWW=0').

`-petdwwimage <name>'
     Specify name of PET DWW RAM image (`PETDWWfilename').

`-pethre'
`+pethre'
     Enable/disable the PET HRE extension (model 8296 only)
     (`PETHRE=1', `PETHRE=0').

`-colour-rgbi'
     Enable the RGBI colour extension to PET 4032 (`PETColour=1').

`-colour-analog'
     Enable the analog colour extension to PET 4032 (`PETColour=2').

`-colour-analog-bg <Colour 0-255>'
     Select the analog colour background on PET 4032 (`PETColourBG').

`-sidcart'
`+sidcart'
     Enable/disable the SID Cartridge (`SidCart=1', `SidCart=0').

`-sidcartaddress <address>'
     Specify address of the SID Cartridge (`SidAddress').  (0x8F00,
     0xE900)

`-sidcartclock <clock>'
     Specify clock of the SID Cartridge (`SidClock').  (0: C64, 1: PET)


@EndNode

@Node "PET system ROM" "vice.guide/PET system ROM"
@Next "PET diagnostic pin"
@Prev "PET I-O extensions"
@Toc "PET-specific"

PET system ROM settings
-----------------------

PET system ROM resources
........................

`H6809RomAName'
`H6809RomBName'
`H6809RomCName'
`H6809RomDName'
`H6809RomEName'
`H6809RomFName'
     Strings specifying the filenames of the respective H6809 ROM
     images, relevant for the SuperPET.

PET system ROM command-line options
...................................

`-kernal <name>'
     Specify filename of the Kernal ROM file (`KernalName').

`-basic <name>'
     Specify filename of the BASIC ROM file (`BasicName').

`-editor NAME'
     Specify the filename for the editor ROM file (`EditorName').

`-chargen <name>'
     Specify filename of the character generator ROM file
     (`ChargenName').

`-rom9 <name>'
     Specify the filename for the ROM image file for the $9***
     cartridge area (`RomModule9Name').

`-romA <name>'
     Specify the filename for the ROM image file for the $A***
     cartridge area (`RomModuleAName').

`-romB <name>'
     Specify the filename for the ROM image file for the $B***
     cartridge area (`RomModuleBName').

`-6809romA <Name>'
     Specify 4K to 24K ROM file name at $A000 for 6809
     (`H6809RomAName').

`-6809romB <Name>'
     Specify 4K to 20K ROM file name at $B000 for 6809
     (`H6809RomBName').

`-6809romC <Name>'
     Specify 4K to 16K ROM file name at $C000 for 6809
     (`H6809RomCName').

`-6809romD <Name>'
     Specify 4K to 12K ROM file name at $D000 for 6809
     (`H6809RomDName').

`-6809romE <Name>'
     Specify 2K or 8K ROM file name at $E000 for 6809 (`H6809RomEName').

`-6809romF <Name>'
     Specify 4K ROM file name at $F000 for 6809 (`H6809RomFName').


@EndNode

@Node "PET diagnostic pin" "vice.guide/PET diagnostic pin"
@Next "PET settings"
@Prev "PET system ROM"
@Toc "PET-specific"

The PET diagnostic pin
----------------------

It is possible to enable or disable emulation of the PET diagnostic pin
via the `DiagPin' resource, or the "PET userport diagnostic pin" item
in the right-button menu.

When the diagnostic pin is set, the Kernal does not try to initialize
the BASIC, but directly jumps into the builtin machine monitor.


@EndNode

@Node "PET settings" "vice.guide/PET settings"
@Next "Colour PET"
@Prev "PET diagnostic pin"
@Toc "PET-specific"

PET settings
------------

PET resources
.............

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-1: PAL, -2: NTSC).

`CPUswitch'
     Integer specifying the status of the SuperPET CPU switch (0: 6502,
     1: 6809, 2: Prog.)

PET command line options
........................

These are the commandline options specific for the PET models.

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-model <model>'
     Specify the PET model you want to emulate (`Basic1',
     `Basic1Chars', `ChargenName', `KernalName', `BasicName',
     `EditorName', `RomModule9Name', `RomModuleAName',
     `RomModuleBName', `H6809RomAName', `H6809RomBName',
     `H6809RomCName', `H6809RomDName', `H6809RomEName',
     `H6809RomFName').  (2001, 3008, 3016, 3032, 3032B, 4016, 4032,
     4032B, 8032, 8096, 8296, SuperPET)

`-iosize <size>'
     Specify size of I/O in Bytes (`IOSize').  (256, 2048)

`-ramsize <size>'
     Specify size of RAM in KB (`RamSize').  (8, 16, 32, 96, 128)

`-videosize <size>'
     Specify video size (`VideoSize').  (0: Automatic from ROM, 40: 40
     columns, 80: 80 columns)

`-petram9'
`+petram9'
     Switch on/off RAM mapping at address $9000-$9FFF (`Ram9=1',
     `Ram9=0').

`-petramA'
`+petramA'
     Switch on/off RAM mapping at address $A000-$AFFF (`RamA=1',
     `RamA=0').

`-superpet'
`+superpet'
     Enable/disable SuperPET I/O and CPU emulation (`SuperPET').

`-cpu6502'
     Set SuperPET CPU switch to '6502' (`CPUswitch=0').

`-cpu6809'
     Set SuperPET CPU switch to '6809' (`CPUswitch=1').

`-cpuprog'
     Set SuperPET CPU switch to 'Prog' (`CPUswitch=2').

`-basic1'
`+basic1'
     Enable/disable patching the IEEE488 section of the PET2001 ROM
     when detected (`Basic1=1', `Basic1=0').

`-basic1char'
`+basic1char'
     Enable/disable PET 2001 character generator (`Basic1Chars=1',
     `Basic1Chars=0').

`-eoiblank'
`+eoiblank'
     Enable/disable EOI blanking the screen (`EoiBlank=1',
     `EoiBlank=0').

`-diagpin'
`+diagpin'
     Enable/disable the diagnostic pin at the PET userport
     (`DiagPin=1'. `DiagPin=0').


@EndNode

@Node "Colour PET" "vice.guide/Colour PET"
@Next "PET colors"
@Prev "PET settings"
@Toc "PET-specific"

Colour PET
----------

The Colour PET is a simple extension by Steve Gray
http://www.6502.org/users/sjgray/projects/colourpet/. It exploits the
similarities and differences between the 4032 and 8032 models, to use
memory at $8800 as colour RAM.

There are two versions of the extension:

with digital colour (RGBI), which can select 16 foreground and 16
background colours for each charcter cell. The The 8 colour bits are
used as RGBI RGBI, with the most significant bits for the background,
and the least significant bits for the foreground.

with analog colour, which can use 256 foreground colours for each
character cell. The 8 colour bits are used as RRR GGG BB.


@EndNode

@Node "PET colors" "vice.guide/PET colors"
@Next "PET DWW high resolution grapics"
@Prev "Colour PET"
@Toc "PET-specific"

Changing screen colors
----------------------

It is also possible to choose what color set is used for the emulation
window.  This is done by specifying a palette file name (see
@{"Palette files" Link "Palette files"}) in the `PaletteName' resource.  The menu provides the
following values:

   * `green.vpl' (default, "green)"), the good old green-on-black
     feeling;

   * `amber.vpl' ("amber"), an amber phosphor lookalike;

   * `white.vpl' ("white"), simple white-on-black palette.


@EndNode

@Node "PET DWW high resolution grapics" "vice.guide/PET DWW high resolution grapics"
@Next "PET HRE (HiRes Emulator) high resolution grapics"
@Prev "PET colors"
@Toc "PET-specific"

DWW high resolution grapics
---------------------------

The DWW, or Double-W (1), board is a high resolution graphics board for
PET models 30xx. It attaches to the internal expansion connector.  It
would not physically fit in 20xx, 40xx or 80xx models because their
connectors are physically and logically different. Apart from this, it
requires address space at $EC00-$EFFF, which makes it unfit to work in
40xx and 80xx models, which have only 256 bytes of I/O space at $E800.

The DWW board consists of 8 KB of RAM and a PIA to control various
options. The RAM can be mapped either linearly at $9000-$AFFF, or
bank-switched in 8 banks of 8 KB each at $EC00-$EFFF.

It seems that in the demo programs, the BASIC versions like to POKE in
60200, where the machine language programs use $EB00.

60200 Port A or DDR A           $EB28 $EBx0 1  0 \       2  1 - RAM
block at $EC00 (0-7)       4  2 /       8  3 charrom         0 = off 1
= on       16 4 hires           0 = on  1 = off       32 5 extra
charrom   0 = on  1 = off

60201 Control Register A: bit #3 (worth 4) controls if 60200 $EBx1
accesses the Data Direction Register A (0) or Port A (1).

60202 Port B or DDR B $EBx2 0 = RAM is visible from $9000 - $AFFF
1 = RAM is bank-switched in blocks of 1 K in $EC00 - $EFFF

[Control Register B is never mentioned, so putting 1 in this
address would access the DDR, creating an output line, which
after RESET is default 0...]  verbatim

Typical initialisation sequence:

poke 60201,0        poke 60200,255          (all outputs)     poke
60201,4        poke 60200,24 or 25 (16 + 8 + 1)  verbatim

Demo programs on disk PBE-110A, 110B, 111A, and 111B.  (PBE = PET
Benelux Exchange, the Dutch PET user group)

The memory mapping is a bit strange. It seems each 1 K block contains
the pixeldata for 1 bit-line of each text line. This is probably so that
the addressing of the RAM can borrow part of the addressing
logic/signals of the text screen. (The screen addressing cycles through
0-39, then increases the line (= byte offset) which is fetched from the
character ROM; for the graphics, the screen position selects the byte
in a KB and the char ROM offset selects which KB of graphics RAM).

My notes say: to set a pixel:

RE = INT(Y/8): LY = Y - 8*RE    (or Y AND 7) BY = INT(X/8): BI = X -
8*BY    (or X AND 7)  verbatim

when memory mapped to $9000:

L = 36864 + 1024 * LY + 40 * RE + BY     POKE L, PEEK(L) OR 2^BI
verbatim

when memory mapped to $EC00:

POKE 60200,LY + 40 (or 8?)     L = 60416 + RE * 40 + BY     POKE L,
PEEK(L) OR 2^BI  verbatim

Unfortunately there is no logical means of expanding the memory to 16
K, so even in a 80 columns PET the resolution will be the same.

---------- Footnotes ----------

(1)  Dubbel-W bord, designed by Ben de Winter and Pieter Wolvekamp


@EndNode

@Node "PET HRE (HiRes Emulator) high resolution grapics" "vice.guide/PET HRE (HiRes Emulator) high resolution grapics"
@Prev "PET DWW high resolution grapics"
@Toc "PET-specific"

HRE high resolution grapics
---------------------------

This information comes from kontakt@michau.name, Michal Pleban,
http://www.cbm-ii.com.

This is a short information about the HRE (HiRes Emulator) graphics
board for PET 8296. This is a small board that is installed on the
mainboard into sockets for the CRTC and character ROM. It adds the
ability to display 512x256 graphics on the built-in monitor.

The board is accompanied with two extension ROMs:

   * 324992-02 HiRes Emulator (at $9000)

   * 324993-02 HiRes BASIC (at $A000)

The ROMs are initialized by the command `SYS 36864'.

After that, the computer recognizes additional BASIC commands like
DISPLAY, PLOT and so on; these commands are identical to those of the
HiRes Graphics boards based on Thomson chips. All BASIC programs written
for the HRG boards should also work on the HRE (albeit much slower).

Upon initialization, the ROM code writes some routines into expansion
RAM as $8800 - they are used to manipulate the bitmap data. The actual
bitmap is located in expansion RAM at addresses $A000-$DFFF, and is
organized linearly (first 64 bytes form the first display line, then
comes the next line and so on).

The RAM is accessed for reading by writing the value #$83 into $E888.
This is a register in the CRTC memory space that is intercepted by the
board and serves as a latch to drive jumpers on the 8296D mainboard.
Because the ROMs are banked out this way, all video memory manipulation
must happen with interrupts disabled. Normal ROM operation is restored
by writing #$0F into $E888.

As usual with the 8296, the RAM can also be written even when the ROMs
are mapped normally.

The board is initialized into graphics mode by modifying the following
values in CRTC registers (it is done by the routine located at $8C1A):

   * Register $01 (horizontal displayed) = #$20

   * Register $02 (horizontal sync position) = original + #$02

   * Register $06 (vertical displayed) = #$20

   * Register $07 (vertical sync position) = original + #$04

   * Register $0C (RAM address high) = #$02

The last value causes the board to switch into graphics mode; former
values set up propoer screen dimensions for 512x256 display.


@EndNode

@Node "CBM-II-specific" "vice.guide/CBM-II-specific"
@Next "VSID-specific"
@Prev "PET-specific"
@Toc "Machine-specific features"

CBM-II-specific commands and settings
=====================================

This section lists the settings and commands that are CBM-II-specific
and thus are not present in the other emulators.


 @{" CBM-II model " Link "CBM-II model"} 
 @{" CBM-II commandline options " Link "CBM-II commandline options"} 
 @{" CBM-II colors " Link "CBM-II colors"} 


@EndNode

@Node "CBM-II model" "vice.guide/CBM-II model"
@Next "CBM-II commandline options"
@Prev "CBM-II-specific"
@Toc "CBM-II-specific"

Changing CBM-II model
---------------------

With `xcbm2' and `xcbm5x0', it is possible to change at runtime the
characteristics of the emulated CBM so that it matches (or not) the ones
of a certain CBM model, and it is also possible to select from a common
set of CBM models so that all the features are selected accordingly.

The former is done by changing the following resources (via resource
file, command line options or right-menu items):

`RamSize'
     Size of memory in kByte.  xcbm2: (128, 256, 512, 1024) xcbm5x0:
     (64, 128, 256, 512, 1024)

`Ram08'
     Boolean specifying whether the RAM should be mapped to the
     expansion ROM area at $0800-$0FFF or not.

`Ram1'
     Boolean specifying whether the RAM should be mapped to the
     expansion ROM area at $1000-$1FFF or not.

`Ram2'
     Boolean specifying whether the RAM should be mapped to the
     expansion ROM area at $2000-$3FFF or not.

`Ram4'
     Boolean specifying whether the RAM should be mapped to the
     expansion ROM area at $4000-$5FFF or not.

`Ram6'
     Boolean specifying whether the RAM should be mapped to the
     expansion ROM area at $6000-$7FFF or not.

`RamC'
     Boolean specifying whether the RAM should be mapped to the
     expansion ROM area at $C000-$CFFF or not.

`CartridgeReset'
     Boolean specifying whether the machine should be reset when a
     cartridge is changed.

`Cart1Name'
     String specifying the filename for the $1000-$1FFF expansion ROM
     file. This file contains an 8k ROM dump.

`Cart2Name'
     String specifying the filename for the $2000-$3FFF expansion ROM
     file. This file contains an 8k ROM dump.

`Cart4Name'
     String specifying the filename for the $4000-$5FFF expansion ROM
     file. This file contains an 8k ROM dump.

`Cart6Name'
     String specifying the filename for the $6000-$6FFF expansion ROM
     file. This file contains an 8k ROM dump.

`ModelLine'
     The CBM-II business models have two hardcoded lines at one of the
     I/O ports.  From those lines the kernal determines how it should
     init the CRTC video chip for either 50Hz (Europe) or 60Hz (North
     America), and either for 8 (C6x0) or 14 (C7x0) scanlines per
     character.  xcbm2: (0: CBM 7x0 (50Hz), 1: 60Hz C6x0, 2: 50Hz C6x0)
     xcbm5x0: (1: 60Hz C5x0, 2: 50Hz C5x0)

`ChargenName'
     String specifying the name of the character generator ROM (default
     for xcbm2: `chargen.600', default for xcbm5x0: `chargen.500').

`KernalName'
     String specifying the name of the Kernal ROM (default for xcbm2:
     `kernal', default for xcbm5x0: `kernal.500').

`BasicName'
     String specifying the name of the Basic ROM (default for xcbm2:
     `basic.128', default for xcbm5x0: `basic.500').

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-1: PAL, -2: NTSC).

Choosing a common CBM-II model is done from the right-button menu
instead, by choosing an item from the "Model defaults" submenu.
Available models are:

   * C510 PAL or NTSC (128k RAM)

   * C610 PAL or NTSC (128k RAM)

   * C620 (256k RAM)

   * C620+ (1024k RAM, expanded) PAL or NTSC

   * C710 (128k RAM) NTSC

   * C720 (256k RAM) NTSC

   * C720+ (1024k RAM, expanded) NTSC

Notice that this will *reset the emulated machine*.

Warning: At this time the 5x0 and other machines are implemented in
different executables, so switching between those models is not
possible.

It is also possible to select the CBM model at startup, with the
`-model' command-line option: for example, `xcbm2 -model 610' will
emulate a CBM 610 while `xcbm2 -model 620' will emulate a CBM 620.

CBM-II system ROM settings
--------------------------

CBM-II system ROM resources
...........................

CBM-II system ROM command line options
......................................

`-kernal <name>'
     Specify the name of the Kernal ROM file (`KernalName').

`-basic <name>'
     Specify the name of the Basic ROM file (`BasicName').

`-chargen <name>'
     Specify the filename for the character generator ROM file
     (`ChargenName').

`+cart'
     Disable all cartridges (which would eventually be enabled in the
     config file).

`-cartreset'
`+cartreset'
     Reset/do not reset machine if a cartridge is attached or detached
     (`CartridgeReset=1', `CartridgeReset=0').

`-cart1 <name>'
     Specify the filename for the ROM image file for the cartridge area
     $1000-$1FFF (`Cart1Name').

`-cart2 <name>'
     Specify the filename for the ROM image file for the cartridge area
     $2000-$2FFF (`Cart2Name').

`-cart4 <name>'
     Specify the filename for the ROM image file for the cartridge area
     $4000-$5FFF (`Cart4Name').

`-cart6 <name>'
     Specify the filename for the ROM image file for the cartridge area
     $6000-$7FFF (`Cart6Name').


@EndNode

@Node "CBM-II commandline options" "vice.guide/CBM-II commandline options"
@Next "CBM-II colors"
@Prev "CBM-II model"
@Toc "CBM-II-specific"

CBM-II command line options
---------------------------

These are the commandline options specific for the CBM-II models.

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-ramsize <ramsize>'
     Specify size of RAM (`RamSize').  xcbm2: (128, 256, 512, 1024)
     xcbm5x0: (64, 128, 256, 512, 1024)

`-ram08'
`+ram08'
     Enable/disable RAM mapping in bank 15 at address $0800-$0FFF
     (`Ram08=1', `Ram08=0').

`-ram1'
`+ram1'
     Enable/disable RAM mapping in bank 15 at address $1000-$1FFF
     (`Ram1=1', `Ram1=0').

`-ram2'
`+ram2'
     Enable/disable RAM mapping in bank 15 at address $2000-$3FFF
     (`Ram2=1', `Ram2=0').

`-ram4'
`+ram4'
     Enable/disable RAM mapping in bank 15 at address $4000-$5FFF
     (`Ram4=1', `Ram4=0').

`-ram6'
`+ram6'
     Enable/disable RAM mapping in bank 15 at address $6000-$7FFF
     (`Ram6=1', `Ram6=0').

`-ramC'
`+ramC'
     Enable/disable RAM mapping in bank 15 at address $C000-$CFFF
     (`RamC=1', `RamC=0').

`-model <modelnumber>'
     Specify CBM-II model to emulate (`ModelLine',
     `MachineVideoStandard', `RamSize', `KernalName', `BasicName',
     `ChargenName').  xcbm2: (610, 620, 620+, 710, 720, 720+) xcbm5x0:
     (510)


@EndNode

@Node "CBM-II colors" "vice.guide/CBM-II colors"
@Prev "CBM-II commandline options"
@Toc "CBM-II-specific"

Changing screen colors
----------------------

It is also possible to choose what color set is used for the emulation
window.  This is done by specifying a palette file name (see
@{"Palette files" Link "Palette files"}) in the `PaletteName' resource.  The menu provides the
following values:

   * `green.vpl' (default, "green"), the good old green-on-black
     feeling;

   * `amber.vpl' ("amber"), an amber phosphor lookalike;

   * `white.vpl' ("white"), simple white-on-black palette.


@EndNode

@Node "VSID-specific" "vice.guide/VSID-specific"
@Prev "CBM-II-specific"
@Toc "Machine-specific features"

VSID-specific commands and settings
===================================

VSID settings
-------------

VSID resources
..............

`PSIDKeepEnv'
     Boolean that specifies whether to override PSID settings for Video
     standard and SID model.

`PSIDTune'
     Integer that specifies the currently played sub tune.

`ChargenName'
     String specifying the name of the character generator ROM (default
     `chargen').

`KernalName'
     String specifying the name of the Kernal ROM (default `kernal').

`BasicName'
     String specifying the name of the Basic ROM (default `basic').

`KernalRev'
     String specifying the Kernal revision. This resource can be used to
     control what revision of the C64 kernal is being used; it cannot be
     changed at runtime. VICE is able to automatically convert one ROM
     revision into another, by manually patching the loaded image. This
     way, it is possible to use any of the ROM revisions without
     changing the ROM set. Valid values are:

    `0'
          Kernal revision 0;

    `3'
          Kernal revision 3;

    `sx'
    `67'
          Commodore SX-64 ROM;

    `100'
    `4064'
          Commodore 4064 (also known as "PET64" or "Educator 64") ROM.

`MachineVideoStandard'
     Integer that specifies the video standard of the emulated machine
     (-4: PAL-N, -3: Old NTSC, -1: PAL, -2: NTSC).

VSID command-line options
.........................

`-keepenv'
     Override PSID settings for Video standard and SID model
     (`PSIDKeepEnv=1').

`-tune <number>'
     Specify PSID tune <number> (`PSIDTune').

`-chargen <name>'
     Specify name of character generator ROM image (`ChargenName').

`-kernal <name>'
     Specify name of the Kernal ROM image (`KernalName').

`-basic <name>'
     Specify name of the Basic ROM image (`BasicName').

`-pal'
     Use PAL sync factor (`MachineVideoStandard=-1').

`-ntsc'
     Use NTSC sync factor (`MachineVideoStandard=-2').

`-ntscold'
     Use old NTSC sync factor (`MachineVideoStandard=-3').

`-paln'
     Use PAL-N sync factor (`MachineVideoStandard=-4').


@EndNode

@Node "Platform-specific features" "vice.guide/Platform-specific features"
@Next "Snapshots"
@Prev "Machine-specific features"
@Toc "Main"

Platform-specific features
**************************

This section lists the settings and commands that are platform specific.



 @{" AmigaOS-specific features " Link "AmigaOS-specific features"} 

 @{" BeOS-specific features " Link "BeOS-specific features"} 

 @{" DOS-specific features " Link "DOS-specific features"} 

 @{" OS2-specific features " Link "OS2-specific features"} 

 @{" SDL-specific features " Link "SDL-specific features"} 

 @{" Unix-specific features " Link "Unix-specific features"} 

 @{" Mac OS X-specific features " Link "Mac OS X-specific features"} 

 @{" Windows-specific features " Link "Windows-specific features"} 


@EndNode

@Node "AmigaOS-specific features" "vice.guide/AmigaOS-specific features"
@Next "BeOS-specific features"
@Prev "Platform-specific features"
@Toc "Platform-specific features"

AmigaOS-specific features
=========================



 @{" AmigaOS3-specific features " Link "AmigaOS3-specific features"} 

 @{" AmigaOS4-specific features " Link "AmigaOS4-specific features"} 

 @{" MorphOS-specific features " Link "MorphOS-specific features"} 

 @{" AROS-specific features " Link "AROS-specific features"} 

This section lists the settings and commands that are common and
specific to all Amiga based platforms (this includes AmigaOS3,
AmigaOS4, Morphos and AROS), and are thus not present in other
platforms.

Amiga (AmigaOS3/AmigaOS4/MorphOS/AROS) specific resources
---------------------------------------------------------

`InitialDefaultDir'
     String specifying the initial default directory, which is used by
     the generic file browser dialog.

`InitialTapeDir'
     String specifying the initial tape directory, which is used by the
     tape image file browser dialog (all emulators except xscpu64,
     x64dtv and vsid).

`InitialDiskDir'
     String specifying the initial tape directory, which is used by the
     disk image file browser dialog (all emulators except vsid).

`InitialAutostartDir'
     String specifying the initial autostart directory, which is used
     by the autostart image file browser dialog (all emulators except
     vsid).

`InitialCartDir'
     String specifying the initial cartridge directory, which is used
     by the cartridge image file browser dialog (all emulators except
     x64dtv and vsid).

`InitialSnapshotDir'
     String specifying the initial snapshots directory, which is used
     by the snapshots file browser dialog (all emulators except vsid).

`FullscreenEnabled'
     Boolean to enable/disable fullscreen mode.

`StatusBarEnabled'
     Boolean to enable/disable the statusbar.

`SaveResourcesOnExit'
     Boolean specifying whether the emulator should save changed
     settings before exiting. If this is enabled, the user will be
     always prompted first, in case the settings have changed.

`ConfirmOnExit'
     Boolean specifying whether to show a confirmation dialog on exit.

Amiga (AmigaOS3/AmigaOS4/MorphOS/AROS) specific command-line options
--------------------------------------------------------------------

`-initialdefaultdir <Name>'
     Select the initial default directory for the file browser dialog
     (`InitialDefaultDir').

`-initialtapedir <Name>'
     Select the initial tape images directory for the file browser
     dialog (`InitialTapeDir') (all emulators except xscpu64, x64dtv
     and vsid).

`-initialdiskdir <Name>'
     Select the initial disk images directory for the file browser
     dialog (`InitialDiskDir') (all emulators except vsid).

`-initialautostartdir <Name>'
     Select the initial autostart directory for the file browser dialog
     (`InitialAutostartDir') (all emulators except vsid).

`-initialcartdir <Name>'
     Select the initial cartridge images directory for the file browser
     dialog (`InitialCartDir') (all emulators except x64dtv and vsid).

`-initialsnapshotdir <Name>'
     Select the initial snapshot directory for the file browser dialog
     (`InitialSnapshotDir') (all emulators except vsid).

`-fullscreen'
`+fullscreen'
     Enable/disable fullscreen mode (`FullscreenEnabled=1',
     `FullscreenEnabled=0').

`-statusbar'
`+statusbar'
     Enable/Disable the statusbar (`StatusBarEnabled=1',
     `StatusBarEnabled=0').

`-saveres'
`+saveres'
     Enable/disable automatic saving of settings on exit
     (`SaveResourcesOnExit=1', `SaveResourcesOnExit=0').

`-confirmexit'
     Confirm quitting VICE (`ConfirmOnExit=1').

`+confirmexit'
     Never confirm quitting VICE (`ConfirmOnExit=0').


@EndNode

@Node "AmigaOS3-specific features" "vice.guide/AmigaOS3-specific features"
@Next "AmigaOS4-specific features"
@Prev "AmigaOS-specific features"
@Toc "AmigaOS-specific features"

AmigaOS3-specific features
--------------------------

This section lists the settings and commands that are common and
specific to AmigaOS3, and are thus not present in other platforms.

The AmigaOS3 port uses the AHI sound system, the CGX or P96 graphics
system, the LowLevel input system, the MUI GUI system, and optionally
the OpenPCI library for access to expansion cards like Catweasel or
HardSID. Please note that access to the Catweasel can also be done
using catweaselsid.device.

AmigaOS3 specific resources
...........................

`JoyFire1'
     Integer specifying the code of the button to use for fire for the
     emulation of joystick 1 (all emulators except xcbm2, xpet and
     vsid).

`JoyFire2'
     Integer specifying the code of the button to use for fire for the
     emulation of joystick 2 (all emulators except xcbm2, xpet, xvic
     and vsid).

`JoyFire3'
     Integer specifying the code of the button to use for fire for the
     emulation of extra joystick 1 (all emulators except xcbm5x0 and
     vsid).

`JoyFire4'
     Integer specifying the code of the button to use for fire for the
     emulation of extra joystick 2 (all emulators except xcbm5x0,
     xplus4 and vsid).

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4: Joy2, 5:
     Joy3)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4: Joy2,
     5: Joy3)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4:
     Joy2, 5: Joy3)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1,
     4: Joy2, 5: Joy3)

The following resource is only present if the CGX video system is
present and used at compile time, and cgxvideo.library is present at
runtime.

`VideoOverlayEnabled'
     Boolean to enable/disable video overlay mode.

AmigaOS3 specific command-line options
......................................

`-joydev1 <0-5>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Joy0, 3: Joy1, 4: Joy2, 5: Joy3)

`-joydev2 <0-5>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Joy0, 3: Joy1, 4: Joy2, 5: Joy3)

`-extrajoydev1 <0-5>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1,
     4: Joy2, 5: Joy3)

`-extrajoydev2 <0-5>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Joy0,
     3: Joy1, 4: Joy2, 5: Joy3)

The following command-line option is only present if the CGX video
system is present and used at compile time, and cgxvideo.library is
present at runtime.

`-videooverlay'
`+videooverlay'
     Enable/Disable video overlay mode (`VideoOverlayEnabled=1',
     `VideoOverlayEnabled=0').


@EndNode

@Node "AmigaOS4-specific features" "vice.guide/AmigaOS4-specific features"
@Next "MorphOS-specific features"
@Prev "AmigaOS3-specific features"
@Toc "AmigaOS-specific features"

AmigaOS4-specific features
--------------------------

This section lists the settings and commands that are common and
specific to AmigaOS4, and are thus not present in other platforms.

The AmigaOS4 port uses the AHI sound system, the P96 graphics system,
the AmigaInput input system, the MUI GUI system, and optionally the
expansion library for access to expansion cards like Catweasel or
HardSID.

AmigaOS4 specific resources
...........................

These are all generic joystick related resources and are therefor
present in all emulators except vsid.

`JOYAI1_ID'
     String specifying the AmigaInput ID of hardware joystick 1.

`JOYAI2_ID'
     String specifying the AmigaInput ID of hardware joystick 2.

`JOYAI1_Up'
     String specifying the AmigaInput event ID for the up direction of
     hardware joystick 1.

`JOYAI2_Up'
     String specifying the AmigaInput event ID for the up direction of
     hardware joystick 2.

`JOYAI1_Down'
     String specifying the AmigaInput event ID for the down direction
     of hardware joystick 1.

`JOYAI2_Down'
     String specifying the AmigaInput event ID for the down direction
     of hardware joystick 2.

`JOYAI1_Left'
     String specifying the AmigaInput event ID for the left direction
     of hardware joystick 1.

`JOYAI2_Left'
     String specifying the AmigaInput event ID for the left direction
     of hardware joystick 2.

`JOYAI1_Right'
     String specifying the AmigaInput event ID for the right direction
     of hardware joystick 1.

`JOYAI2_Right'
     String specifying the AmigaInput event ID for the right direction
     of hardware joystick 2.

`JOYAI1_Fire'
     String specifying the AmigaInput event ID for the fire button of
     hardware joystick 1.

`JOYAI2_Fire'
     String specifying the AmigaInput event ID for the fire button of
     hardware joystick 2.

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Keyset 1/AI, 3: Keyset 2/AI)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Keyset 1/AI, 3: Keyset
     2/AI)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1/AI, 3: Keyset
     2/AI)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset 1/AI,
     3: Keyset 2/AI)

AmigaOS4 specific command-line options
......................................

`-joydev1 <0-3>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Keyset 1/AI, 3: Keyset 2/AI)

`-joydev2 <0-3>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Keyset 1/AI, 3: Keyset 2/AI)

`-extrajoydev1 <0-3>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1/AI, 3:
     Keyset 2/AI)

`-extrajoydev2 <0-3>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset
     1/AI, 3: Keyset 2/AI)


@EndNode

@Node "MorphOS-specific features" "vice.guide/MorphOS-specific features"
@Next "AROS-specific features"
@Prev "AmigaOS4-specific features"
@Toc "AmigaOS-specific features"

MorphOS-specific features
-------------------------

This section lists the settings and commands that are common and
specific to MorphOS, and are thus not present in other platforms.

The MorphOS port uses the AHI or SDL sound system, the CGX graphics
system, the LowLevel input system, the MUI GUI system, and optionally
the OpenPCI library for access to expansion cards like Catweasel or
HardSID. Please note that access to the Catweasel can also be done
using catweaselsid.device.

MorphOS specific resources
..........................

`JoyFire1'
     Integer specifying the code of the button to use for fire for the
     emulation of joystick 1 (all emulators except xcbm2, xpet and
     vsid).

`JoyFire2'
     Integer specifying the code of the button to use for fire for the
     emulation of joystick 2 (all emulators except xcbm2, xpet, xvic
     and vsid).

`JoyFire3'
     Integer specifying the code of the button to use for fire for the
     emulation of extra joystick 1 (all emulators except xcbm5x0 and
     vsid).

`JoyFire4'
     Integer specifying the code of the button to use for fire for the
     emulation of extra joystick 2 (all emulators except xcbm5x0,
     xplus4 and vsid).

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4: Joy2, 5:
     Joy3)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4: Joy2,
     5: Joy3)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4:
     Joy2, 5: Joy3)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1,
     4: Joy2, 5: Joy3)

The following resource is only present if the CGX video system is
present and used at compile time, and cgxvideo.library is present at
runtime.

`VideoOverlayEnabled'
     Boolean to enable/disable video overlay mode.

MorphOS specific command-line options
.....................................

`-joydev1 <0-5>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Joy0, 3: Joy1, 4: Joy2, 5: Joy3)

`-joydev2 <0-5>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Joy0, 3: Joy1, 4: Joy2, 5: Joy3)

`-extrajoydev1 <0-5>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1,
     4: Joy2, 5: Joy3)

`-extrajoydev2 <0-5>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Joy0,
     3: Joy1, 4: Joy2, 5: Joy3)

The following command-line option is only present if the CGX video
system is present and used at compile time, and cgxvideo.library is
present at runtime.

`-videooverlay'
`+videooverlay'
     Enable/Disable video overlay mode (`VideoOverlayEnabled=1',
     `VideoOverlayEnabled=0').


@EndNode

@Node "AROS-specific features" "vice.guide/AROS-specific features"
@Prev "MorphOS-specific features"
@Toc "AmigaOS-specific features"

AROS-specific features
----------------------

This section lists the settings and commands that are common and
specific to AROS, and are thus not present in other platforms.

The AROS port uses the AHI or SDL sound system, the CGX graphics
system, the LowLevel input system, the MUI GUI system.

AROS specific resources
.......................

`JoyFire1'
     Integer specifying the code of the button to use for fire for the
     emulation of joystick 1 (all emulators except xcbm2, xpet and
     vsid).

`JoyFire2'
     Integer specifying the code of the button to use for fire for the
     emulation of joystick 2 (all emulators except xcbm2, xpet, xvic
     and vsid).

`JoyFire3'
     Integer specifying the code of the button to use for fire for the
     emulation of extra joystick 1 (all emulators except xcbm5x0 and
     vsid).

`JoyFire4'
     Integer specifying the code of the button to use for fire for the
     emulation of extra joystick 2 (all emulators except xcbm5x0,
     xplus4 and vsid).

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4: Joy2, 5:
     Joy3)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4: Joy2,
     5: Joy3)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1, 4:
     Joy2, 5: Joy3)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1,
     4: Joy2, 5: Joy3)

The following resource is only present if the CGX video system is
present and used at compile time, and cgxvideo.library is present at
runtime.

`VideoOverlayEnabled'
     Boolean to enable/disable video overlay mode.

AROS specific command-line options
..................................

`-joydev1 <0-5>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Joy0, 3: Joy1, 4: Joy2, 5: Joy3)

`-joydev2 <0-5>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Joy0, 3: Joy1, 4: Joy2, 5: Joy3)

`-extrajoydev1 <0-5>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Joy0, 3: Joy1,
     4: Joy2, 5: Joy3)

`-extrajoydev2 <0-5>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Joy0,
     3: Joy1, 4: Joy2, 5: Joy3)

The following command-line option is only present if the CGX video
system is present and used at compile time, and cgxvideo.library is
present at runtime.

`-videooverlay'
`+videooverlay'
     Enable/Disable video overlay mode (`VideoOverlayEnabled=1',
     `VideoOverlayEnabled=0').


@EndNode

@Node "BeOS-specific features" "vice.guide/BeOS-specific features"
@Next "DOS-specific features"
@Prev "AmigaOS-specific features"
@Toc "Platform-specific features"

BeOS-specific features
======================

This section lists the settings and commands that are common and
specific to BeOS, Zeta and Haiku, and are thus not present in other
platforms.

BeOS specific resources
-----------------------

`JoystickDisplay'
     Boolean to enable/disable displaying the joystick status in the
     emulator window.

`SaveResourcesOnExit'
     Boolean specifying whether the emulator should save changed
     settings before exiting. If this is enabled, the user will be
     always prompted first, in case the settings have changed.

`ConfirmOnExit'
     Boolean specifying whether to show a confirmation dialog on exit.

`DirectWindow'
     Boolean specifying whether to use the BeOS DirectWindow API.

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4..19:
     Hardware joysticks)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2,
     4..19: Hardware joysticks)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2,
     4..19: Hardware joysticks)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4..19: Hardware joysticks)

BeOS specific command-line options
----------------------------------

`-joydisplay'
`+joydisplay'
     Enable/Disable joystick display.  (`JoystickDisplay=1',
     `JoystickDisplay=0').

`-saveres'
`+saveres'
     Enable/disable automatic saving of settings on exit
     (`SaveResourcesOnExit=1', `SaveResourcesOnExit=0').

`-confirmexit'
     Confirm quitting VICE (`ConfirmOnExit=1').

`+confirmexit'
     Never confirm quitting VICE (`ConfirmOnExit=0').

`-directwindow'
`+directwindow'
     Enable/disable usage of the BeOS DirectWindow API
     (`DirectWindow=1', `DirectWindow=0').

`-joydev1 <0-19>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Keyset 1, 3: Keyset 2, 4..19: Hardware joysticks)

`-joydev2 <0-19>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Keyset 1, 3: Keyset 2, 4..19: Hardware joysticks)

`-extrajoydev1 <0-19>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4..19: Hardware joysticks)

`-extrajoydev2 <0-19>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset
     1, 3: Keyset 2, 4..19: Hardware joysticks)


@EndNode

@Node "DOS-specific features" "vice.guide/DOS-specific features"
@Next "OS2-specific features"
@Prev "BeOS-specific features"
@Toc "Platform-specific features"

DOS-specific features
=====================

This section lists the settings and commands that are common and
specific to DOS, and are thus not present in other platforms.

DOS joystick hardware types
---------------------------

Here is a list of joystick hardware types that are supported

`JOY_TYPE_AUTODETECT (0xFFFFFFFF, "auto")'
     Attempts to autodetect your joystick hardware. It isn't possible
     to reliably distinguish between all the possible input setups, so
     this routine can only ever choose the standard joystick,
     Sidewider, GamePad Pro, or GrIP drivers.

`JOY_TYPE_NONE (0x00000000, "none")'
     Dummy driver for machines without any joystick.

`JOY_TYPE_STANDARD (0x53544420, "standard")'
     A normal two button stick.

`JOY_TYPE_2PADS (0x32504144, "dual")'
     Dual joystick mode (two sticks, each with two buttons).

`JOY_TYPE_4BUTTON (0x34425554, "4button")'
     Enable the extra buttons on a 4-button joystick.

`JOY_TYPE_6BUTTON (0x36425554, "6button")'
     Enable the extra buttons on a 6-button joystick.

`JOY_TYPE_8BUTTON (0x38425554, "8button")'
     Enable the extra buttons on an 8-button joystick.

`JOY_TYPE_FSPRO (0x4650524F, "fspro")'
     CH Flightstick Pro or compatible stick, which provides four
     buttons, an analogue throttle control, and a 4-direction coolie
     hat.

`JOY_TYPE_WINGEX (0x57494E47, "wingex")'
     A Logitech Wingman Extreme, which should also work with any
     Thrustmaster Mk.I compatible joystick. It provides support for
     four buttons and a coolie hat. This also works with the Wingman
     Warrior, if you plug in the 15 pin plug (remember to unplug the
     9-pin plug!) and set the tiny switch in front to the "H" position
     (you will not be able to use the throttle or the spinner though).

`JOY_TYPE_SIDEWINDER (0x53572020, "sidewinder")'
     The Microsoft Sidewinder digital pad (supports up to four
     controllers, each with ten buttons and a digital direction
     control).

`JOY_TYPE_SIDEWINDER_AG (0x53574147, "sidewinderag")'
     An alternative driver to JOY_TYPE_SIDEWINDER. Try this if your
     Sidewinder isn't recognized with JOY_TYPE_SIDEWINDER.

`JOY_TYPE_SIDEWINDER_PP (0x53575050, "sidewinderpp")'
     The Microsoft Sidewinder 3D/Precision/Force Feedback Pro joysticks.

`JOY_TYPE_GAMEPAD_PRO (0x4750524F, "gamepadpro")'
     The Gravis GamePad Pro (supports up to two controllers, each with
     ten buttons and a digital direction control).

`JOY_TYPE_GRIP (0x47524950, "grip")'
     Gravis GrIP driver, using the grip.gll driver file.

`JOY_TYPE_GRIP4 (0x47524934, "grip4")'
     Version of the Gravis GrIP driver that is constrained to only move
     along the four main axes.

`JOY_TYPE_SNESPAD_LPT1 (0x534E4531, "sneslpt1")'
`JOY_TYPE_SNESPAD_LPT2 (0x534E4532, "sneslpt2")'
`JOY_TYPE_SNESPAD_LPT3 (0x534E4533, "sneslpt3")'
     SNES joypads connected to LPT1, LPT2 and LPT3 respectively.

`JOY_TYPE_PSXPAD_LPT1 (0x50535831, "psxlpt1")'
`JOY_TYPE_PSXPAD_LPT2 (0x50535832, "psxlpt2")'
`JOY_TYPE_PSXPAD_LPT3 (0x50535833, "psxlpt3")'
     PSX joypads connected to LPT1, LPT2 and LPT3 respectively. See
     http://www.ziplabel.com/dpadpro/index.html for information about
     the parallel cable required. The driver automagically detects
     which types of PSX pads are connected out of digital, analog (red
     or green mode), NegCon, multi taps, Namco light guns, Jogcons
     (force feedback steering wheel) and the mouse. If the controller
     isn't recognised it is treated as an analog controller, meaning
     the driver should work with just about anything. You can connect
     controllers in any way you see fit, but only the first 8 will be
     used. The Sony Dual Shock or Namco Jogcon will reset themselves
     (to digital mode) after not being polled for 5 seconds. This is
     normal, the same thing happens on a Playstation, it's designed to
     stop any vibration in case the host machine crashes. Other mode
     switching controllers may have similar quirks. However, if this
     happens to a Jogcon controller the mode button is disabled. To
     reenable the mode button on the Jogcon you need to hold down the
     Start and Select buttons at the same time. The G-con45 needs to be
     connected to (and pointed at) a TV type monitor connected to your
     computer.

`JOY_TYPE_N64PAD_LPT1 (0x4E363431, "n64lpt1")'
`JOY_TYPE_N64PAD_LPT2 (0x4E363432, "n64lpt2")'
`JOY_TYPE_N64PAD_LPT3 (0x4E363433, "n64lpt3")'
     N64 joypads connected to LPT1, LPT2 and LPT3 respectively. See
     http://www.st-hans.de/N64.htm for information about the necessary
     hardware adapter. It supports up to four controllers on a single
     parallel port. There is no need to calibrate the analog stick, as
     this is done by the controller itself when powered up. This means
     that the stick has to be centred when the controller is
     initialised. One possible issue people may have with this driver
     is that it is physically impossible to move the analog stick fully
     diagonal, but I can't see this causing any major problems. This is
     because of the shape of the rim that the analog stick rests
     against. Like the Gravis Game Pad Pro, this driver briefly needs
     to disable hardware interrupts while polling. This causes a
     noticeable performance hit on my machine in both drivers, but
     there is no way around it.

`JOY_TYPE_DB9_LPT1 (0x44423931, "db9lpt1")'
`JOY_TYPE_DB9_LPT1 (0x44423932, "db9lpt2")'
`JOY_TYPE_DB9_LPT3 (0x44423933, "db9lpt3")'
     A pair of two-button joysticks connected to LPT1, LPT2 and LPT3
     respectively. Port 1 is compatible with Linux joy-db9 driver
     (multisystem 2-button), and port 2 is compatible with Atari
     interface for DirectPad Pro. See the source file
     (src/dos/multijoy.c) for pinout information.

`JOY_TYPE_TURBOGRAFX_LPT1 (0x54475831, "tgxlpt1")'
`JOY_TYPE_TURBOGRAFX_LPT2 (0x54475832, "tgxlpt2")'
`JOY_TYPE_TURBOGRAFX_LPT3 (0x54475833, "tgxlpt3")'
     These drivers support up to 7 joysticks, each one with up to 5
     buttons, connected to LPT1, LPT2, and LPT3 respectively. They use
     the TurboGraFX interface by Steffen Schwenke: see
     http://www.burg-halle.de/~schwenke/parport.html for details on how
     to build this.

`JOY_TYPE_WINGWARRIOR (0x57574152, "wingwar")'
     A Wingman Warrior joystick.

`JOY_TYPE_IFSEGA_ISA (0x53454749, "ifsegaisa")'
`JOY_TYPE_IFSEGA_PCI (0x53454750, "ifsegapci")'
`JOY_TYPE_IFSEGA_PCI_FAST (0x53475046, "ifsegapcifast")'
     Drivers for the IF-SEGA joystick interface cards by the IO-DATA
     company (these come in PCI, PCI2, and ISA variants).

DOS specific resources
----------------------

`UseLeds'
     Boolean to enable/disable using the keyboard leds for status
     display.

`ShowStatusbar'
     Integer specifying the mode of the statusbar.  (0: Off, 1: On, 2:
     Auto)

`VGAMode'
     Integer specifying the VGA mode.  (0: 320x200x8, 1: 360x240x8, 2:
     360x270x8, 3: 376x282x8, 4: 400x300x8, 5: 640x480x8, 6: 800x600x8,
     7: 1024x768x8, 8: 320x200x16, 9: 400x300x16, 10: 640x480x16, 11:
     800x600x16, 12: 1024x768x16, 13: 640x480x32, 14: 800x600x32, 15:
     1024x768x32)

`HwJoyType'
     Integer specifying the hardware type of the joystick (all
     emulators except vsid).  See `'DOS joystick hardware types'' for
     the types.

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Joystick 1, 5: Joystick 2)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Joystick 1, 5: Joystick 2)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2,
     4: Joystick 1, 5: Joystick 2)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Joystick 1, 5: Joystick 2)

The following resource is only available if the midas sound driver is
not used during compile time.

`TripleBuffering'
     Boolean to enable/disable triple buffering if possible.

DOS specific command-line options
---------------------------------

`-leds'
`+leds'
     Enable/disable usage of keyboard leds (`UseLeds=1', `UseLeds=0').

`-statusbar <Mode>'
     Set the statusbar mode (`ShowStatusbar').  (0: Off, 1: On, 2: Auto)

`-vgamode <Mode>'
     Set the VGA mode (`VGAMode').  (0: 320x200x8, 1: 360x240x8, 2:
     360x270x8, 3: 376x282x8, 4: 400x300x8, 5: 640x480x8, 6: 800x600x8,
     7: 1024x768x8, 8: 320x200x16, 9: 400x300x16, 10: 640x480x16, 11:
     800x600x16, 12: 1024x768x16, 13: 640x480x32, 14: 800x600x32, 15:
     1024x768x32)

`-joyhwtype <type>'
     Set the joystick hardware type (`HwJoyType') (all emulators except
     vsid).  See `DOS joystick hardware types' for the types.

`-joydev1 <0-5>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Keyset 1, 3: Keyset 2, 4: Joystick 1, 5: Joystick 2)

`-joydev2 <0-5>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Keyset 1, 3: Keyset 2, 4: Joystick 1, 5: Joystick 2)

`-extrajoydev1 <0-5>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Joystick 1, 5: Joystick 2)

`-extrajoydev2 <0-5>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset
     1, 3: Keyset 2, 4: Joystick 1, 5: Joystick 2)

The following command-line option is only available if the midas sound
driver is not used during compile time.

`-triplebuf'
`+triplebuf'
     Enable/Disable triple buffering (`TripleBuffering=1',
     `TripleBuffering=0').


@EndNode

@Node "OS2-specific features" "vice.guide/OS2-specific features"
@Next "SDL-specific features"
@Prev "DOS-specific features"
@Toc "Platform-specific features"

OS2-specific features
=====================


@EndNode

@Node "SDL-specific features" "vice.guide/SDL-specific features"
@Next "Unix-specific features"
@Prev "OS2-specific features"
@Toc "Platform-specific features"

SDL-specific features
=====================

This section lists the settings and commands that are common and
specific to SDL, and are thus not present in other platforms.

SDL specific resources
----------------------

`HotkeyFile'
     String specifying the name of the hotkey file (all emulators
     except vsid).

`MenuKey'
     Integer specifying the keycode for activating the SDL menu.

`MenuKeyUp'
     Integer specifying the keycode for 'up' in the SDL menu.

`MenuKeyDown'
     Integer specifying the keycode for 'down' in the SDL menu.

`MenuKeyLeft'
     Integer specifying the keycode for 'left' in the SDL menu.

`MenuKeyRight'
     Integer specifying the keycode for 'right' in the SDL menu.

`MenuKeySelect'
     Integer specifying the keycode for 'select' in the SDL menu.

`MenuKeyCancel'
     Integer specifying the keycode for 'cancel' in the SDL menu.

`MenuKeyExit'
     Integer specifying the keycode for 'exit' in the SDL menu.

`MenuKeyMap'
     Integer specifying the keycode for 'map' in the SDL menu.

`SaveResourcesOnExit'
     Boolean specifying whether the emulator should save changed
     settings before exiting. If this is enabled, the user will be
     always prompted first, in case the settings have changed.

`ConfirmOnExit'
     Boolean specifying whether to show a confirmation dialog on exit.

`SDLStatusbar'
     Boolean to enable/disable the statusbar (all emulators except
     vsid).

`SDLBitdepth'
     Integer specifying the bitdepth used.  (0: current, 8, 15, 16, 24,
     32)

`SDLLimitMode'
     Integer specifying the resolution limit mode.  (0: off, 1: max, 2:
     fixed)

`SDLCustomWidth'
     Integer specifying the custom resolution width.

`SDLCustomHeight'
     Integer specifying the custom resolution height.

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Joystick (only if joystick support was present in the compile time
     SDL library))

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Joystick (only if joystick support was present in the compile time
     SDL library))

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2,
     4: Joystick (only if joystick support was present in the compile
     time SDL library))

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Joystick (only if joystick support was present in the
     compile time SDL library))

`CrtcSDLFullscreenMode'
     Integer specifying the fullscreen mode (xcbm2 and xpet only).

`CrtcHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (xcbm2 and xpet only).

`CrtcFullscreenDevice'
     String specifying the fullscreen device (xcbm2 and xpet only).

`CrtcFullscreen'
     Boolean specifying whether to use fullscreen mode or not (xcbm2
     and xpet only).

`CrtcFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (xcbm2 and xpet only).

`TEDSDLFullscreenMode'
     Integer specifying the fullscreen mode (xplus4 only).

`TEDHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (xplus4 only).

`TEDFullscreenDevice'
     String specifying the fullscreen device (xplus4 only).

`TEDFullscreen'
     Boolean specifying whether to use fullscreen mode or not (xplus4
     only).

`TEDFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (xplus4 only).

`VDCSDLFullscreenMode'
     Integer specifying the fullscreen mode (x128 only).

`VDCHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (x128 only).

`VDCFullscreenDevice'
     String specifying the fullscreen device (x128 only).

`VDCFullscreen'
     Boolean specifying whether to use fullscreen mode or not (x128
     only).

`VDCFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (x128 only).

`VICSDLFullscreenMode'
     Integer specifying the fullscreen mode (xvic only).

`VICHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (xvic only).

`VICFullscreenDevice'
     String specifying the fullscreen device (xvic only).

`VICFullscreen'
     Boolean specifying whether to use fullscreen mode or not (xvic
     only).

`VICFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (xvic only).

`VICIISDLFullscreenMode'
     Integer specifying the fullscreen mode (all emulators except
     xcbm2, xpet, xplus4, xvic and vsid).

`VICIIHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (all emulators except xcbm2, xpet, xplus4, xvic and vsid).

`VICIIFullscreenDevice'
     String specifying the fullscreen device (all emulators except
     xcbm2, xpet, xplus4, xvic and vsid).

`VICIIFullscreen'
     Boolean specifying whether to use fullscreen mode or not (all
     emulators except xcbm2, xpet, xplus4, xvic and vsid).

`VICIIFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (all emulators except xcbm2, xpet, xplus4, xvic and
     vsid).

The following resources are only present if the OpenGL library is
present and used at compile time.

`AspectRatio'
     String/float specifying the aspect ratio.  (0.5-2.0)

`SDLGLAspectMode'
     Integer specifying the OpenGL aspect mode.  (0: off, 1: custom, 2:
     true)

`SDLGLFlipX'
     Boolean to enable/disable OpenGL horizontal screen flip.

`SDLGLFlipY'
     Boolean to enable/disable OpenGL vertical screen flip.

The following resources are only present if the SDL library has
joystick support at compile time and applies to all emulators except
vsid.

`JoyMapFile'
     String specifying the name of the joystick map file.

`JoyThreshold'
     Integer specifying the joystick threshold.  (0..32767)

`JoyFuzz'
     Integer specifying the joystick fuzz.  (0..32767)

The following resource is only present if compiling for native dingoo.

`OverClock'
     Boolean to enable/disable overclocking.

SDL specific command-line options
---------------------------------

`-hotkeyfile <name>'
     Set the hotkey file name (`HotkeyFile') (all emulators except
     vsid).

`-menukey <key>'
     Set the keycode of the SDL menu activation key (`MenuKey').

`-menukeyup <key>'
     Set the keycode of the 'up' in the SDL menu (`MenuKeyUp').

`-menukeydown <key>'
     Set the keycode of the 'down' in the SDL menu (`MenuKeyDown').

`-menukeyleft <key>'
     Set the keycode of the 'left' in the SDL menu (`MenuKeyLeft').

`-menukeyright <key>'
     Set the keycode of the 'right' in the SDL menu (`MenuKeyRight').

`-menukeyselect <key>'
     Set the keycode of the 'select' in the SDL menu (`MenuKeySelect').

`-menukeycancel <key>'
     Set the keycode of the 'cancel' in the SDL menu (`MenuKeyCancel').

`-menukeyexit <key>'
     Set the keycode of the 'exit' in the SDL menu (`MenuKeyExit').

`-menukeymap <key>'
     Set the keycode of the 'map' in the SDL menu (`MenuKeyMap').

`-saveres'
`+saveres'
     Enable/disable automatic saving of settings on exit
     (`SaveResourcesOnExit=1', `SaveResourcesOnExit=0').

`-confirmexit'
     Confirm quitting VICE (`ConfirmOnExit=1').

`+confirmexit'
     Never confirm quitting VICE (`ConfirmOnExit=0').

`-statusbar'
`+statusbar'
     Enable/disable the statusbar (`SDLStatusbar=1', `SDLStatusbar=0')
     (all emulators except vsid).

`-sdlbitdepth <bpp>'
     Set the display bitdepth (`SDLBitdepth').  (0: current, 8, 15, 16,
     24, 32)

`-sdllimitmode <mode>'
     Set the resolution limit mode (`SDLLimitMode').  (0: off, 1: max,
     2: fixed)

`-sdlcustomw <width>'
     Set the custom resolution width (`SDLCustomWidth').

`-sdlcustomh <height>'
     Set the custom resolution height (`SDLCustomHeight').

`-joydev1 <0-3> / <0-4>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Keyset 1, 3: Keyset 2, 4: Joystick (only if joystick support
     was present in the compile time SDL library))

`-joydev2 <0-3> / <0-4>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Keyset 1, 3: Keyset 2, 4: Joystick (only if joystick
     support was present in the compile time SDL library))

`-extrajoydev1 <0-3> / <0-4>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Joystick (only if joystick support was present in the
     compile time SDL library))

`-extrajoydev2 <0-3> / <0-4>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset
     1, 3: Keyset 2, 4: Joystick (only if joystick support was present
     in the compile time SDL library))

`-CRTCSDLfullmode <Mode>'
     Set the fullscreen mode (`CrtcSDLFullscreenMode') (xcbm2 and xpet
     only).

`-CRTChwscale'
`+CRTChwscale'
     Enable/Disable hardware scaling (`CrtcHwScale=1', `CrtcHwScale=0')
     (xcbm2 and xpet only).

`-CRTCfulldevice <device>'
     Select fullscreen device (`CrtcFullscreenDevice') (xcbm2 and xpet
     only).

`-CRTCfull'
`+CRTCfull'
     Enable/Disable fullscreen (`CrtcFullscreen=1', `CrtcFullscreen=0')
     (xcbm2 and xpet only).

`-TEDSDLfullmode <Mode>'
     Set the fullscreen mode (`TEDSDLFullscreenMode') (xplus4 only).

`-TEDhwscale'
`+TEDhwscale'
     Enable/Disable hardware scaling (`TEDHwScale=1', `TEDHwScale=0')
     (xplus4 only).

`-TEDfulldevice <device>'
     Select fullscreen device (`TEDFullscreenDevice') (xplus4 only).

`-TEDfull'
`+TEDfull'
     Enable/Disable fullscreen (`TEDFullscreen=1', `TEDFullscreen=0')
     (xplus4 only).

`-VDCSDLfullmode <Mode>'
     Set the fullscreen mode (`VDCSDLFullscreenMode') (x128 only).

`-VDChwscale'
`+VDChwscale'
     Enable/Disable hardware scaling (`VDCHwScale=1', `VDCHwScale=1')
     (x128 only).

`-VDCfulldevice <device>'
     Select fullscreen device (`VDCFullscreenDevice') (x128 only).

`-VDCfull'
`+VDCfull'
     Enable/Disable fullscreen (`VDCFullscreen=1', `VDCFullscreen=0')
     (x128 only).

`-VICSDLfullmode <Mode>'
     Set the fullscreen mode (`VICSDLFullscreenMode') (xvic only).

`-VIChwscale'
`+VIChwscale'
     Enable/Disable hardware scaling (`VICHwScale=1', `VICHwScale=0')
     (xvic only).

`-VICfulldevice <device>'
     Select fullscreen device (`VICFullscreenDevice') (xvic only).

`-VICfull'
`+VICfull'
     Enable/Disable fullscreen (`VICFullscreen=1', `VICFullscreen=0')
     (xvic only).

`-VICIISDLfullmode <Mode>'
     Set the fullscreen mode (`VICIISDLFullscreenMode') (all emulators
     except xcbm2, xpet, xplus4, xvic and vsid).

`-VICIIhwscale'
`+VICIIhwscale'
     Enable/Disable hardware scaling (`VICIIHwScale=1',
     `VICIIHwScale=0') (all emulators except xcbm2, xpet, xplus4, xvic
     and vsid).

`-VICIIfulldevice <device>'
     Select fullscreen device (`VICIIFullscreenDevice') (all emulators
     except xcbm2, xpet, xplus4, xvic and vsid).

`-VICIIfull'
`+VICIIfull'
     Enable/Disable fullscreen (`VICIIFullscreen=1',
     `VICIIFullscreen=0') (all emulators except xcbm2, xpet, xplus4,
     xvic and vsid).

The following command-line options are only present if the OpenGL
library is present and used at compile time.

`-aspect <aspect ratio>'
     Set the aspect ratio (`AspectRatio').  (0.5-2.0)

`-sdlaspectmode <mode>'
     Set the aspect mode (`SDLGLAspectMode').  (0: off, 1: custom, 2:
     true)

`-sdlflipx'
`+sdlflipx'
     Enable/disable OpenGL horizontal screen flip (`SDLGLFlipX=1',
     `SDLGLFlipX=0').

`-sdlflipy'
`+sdlflipy'
     Enable/disable OpenGL vertical screen flip (`SDLGLFlipY=1',
     `SDLGLFlipY=0').

The following command-line options are only present if the SDL library
has joystick support at compile time and applies to all emulators
except vsid.

`-joymap <name>'
     Set the joystick map file name (`JoyMapFile').

`-joythreshold <0-32767>'
     Set the joystick threshold (`JoyThreshold').

`-joyfuzz <0-32767>'
     Set the joystick fuzz (`JoyFuzz').


@EndNode

@Node "Unix-specific features" "vice.guide/Unix-specific features"
@Next "Mac OS X-specific features"
@Prev "SDL-specific features"
@Toc "Platform-specific features"

Unix-specific features
======================



 @{" XAW-specific features " Link "XAW-specific features"} 

 @{" GTK-specific features " Link "GTK-specific features"} 

This section lists the settings and commands that are common and
specific to Unix, and are thus not present in other platforms.

Unix specific resources
-----------------------

`SaveResourcesOnExit'
     Boolean specifying whether the emulator should save changed
     settings before exiting. If this is enabled, the user will be
     always prompted first, in case the settings have changed.

`ConfirmOnExit'
     Boolean specifying whether to show a confirmation dialog on exit.

`HTMLBrowserCommand'
     String specifying the command to run the help browser. The help
     browser can be any HTML browser, and every `%s' in the string is
     replaced with the name of the toplevel file of the VICE
     documentation. For example, the default value `netscape %s' runs
     Netscape Navigator.

`CrtcHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (xcbm2 and xpet only).

`CrtcFullscreenDevice'
     String specifying the fullscreen device (xcbm2 and xpet only).

`CrtcFullscreen'
     Boolean specifying whether to use fullscreen mode or not (xcbm2
     and xpet only).

`CrtcFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (xcbm2 and xpet only).

`TEDHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (xplus4 only).

`TEDFullscreenDevice'
     String specifying the fullscreen device (xplus4 only).

`TEDFullscreen'
     Boolean specifying whether to use fullscreen mode or not (xplus4
     only).

`TEDFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (xplus4 only).

`VDCHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (x128 only).

`VDCFullscreenDevice'
     String specifying the fullscreen device (x128 only).

`VDCFullscreen'
     Boolean specifying whether to use fullscreen mode or not (x128
     only).

`VDCFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (x128 only).

`VICHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (xvic only).

`VICFullscreenDevice'
     String specifying the fullscreen device (xvic only).

`VICFullscreen'
     Boolean specifying whether to use fullscreen mode or not (xvic
     only).

`VICFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (xvic only).

`VICIIHwScale'
     Boolean specifying whether to enable or disable hardware scaling
     (all emulators except xcbm2, xpet, xplus4, xvic and vsid).

`VICIIFullscreenDevice'
     String specifying the fullscreen device (all emulators except
     xcbm2, xpet, xplus4, xvic and vsid).

`VICIIFullscreen'
     Boolean specifying whether to use fullscreen mode or not (all
     emulators except xcbm2, xpet, xplus4, xvic and vsid).

`VICIIFullscreenStatusbar'
     Boolean specifying whether to show the status bar in fullscreen
     mode or not (all emulators except xcbm2, xpet, xplus4, xvic and
     vsid).

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Analog joystick 1, 5: Analog joystick 2, 6: Analog joystick 3, 7:
     Analog joystick 4, 8: Analog joystick 5, 9: Analog joystick 6, 10:
     Digital joystick 1, 11: Digital joystick 2, 12: USB joystick 1,
     13: USB joystick 2)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Analog joystick 1, 5: Analog joystick 2, 6: Analog joystick 3, 7:
     Analog joystick 4, 8: Analog joystick 5, 9: Analog joystick 6, 10:
     Digital joystick 1, 11: Digital joystick 2, 12: USB joystick 1,
     13: USB joystick 2)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2,
     4: Analog joystick 1, 5: Analog joystick 2, 6: Analog joystick 3,
     7: Analog joystick 4, 8: Analog joystick 5, 9: Analog joystick 6,
     10: Digital joystick 1, 11: Digital joystick 2, 12: USB joystick
     1, 13: USB joystick 2)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Analog joystick 1, 5: Analog joystick 2, 6: Analog
     joystick 3, 7: Analog joystick 4, 8: Analog joystick 5, 9: Analog
     joystick 6, 10: Digital joystick 1, 11: Digital joystick 2, 12:
     USB joystick 1, 13: USB joystick 2)

The available joysticks might differ depending on operating system and
joystick support in the OS.

`Devices 4..9'
     Only available if joystick support is available at compile time.

`Devices 10 and 11'
     Only available if digital joystick support is available at compile
     time.

`Devices 12 and 13'
     Only available if USB joystick support is available at compile
     time.

The following resources are only available if MIDI support is available
at compile time.

`MIDIInDev'
     String specifying the MIDI input device (x64, x64sc, xscpu64, x128
     and xvic only).

`MIDIOutDev'
     String specifying the MIDI output device (x64, x64sc, xscpu64,
     x128 and xvic only).

The following resource is only available if MIDI support and ALSA
support is available at compile time.

`MIDIDriver'
     Enum specifying the MIDI driver (x64, x64sc, xscpu64, x128 and
     xvic only).  (0: OSS, 1: ALSA)

The following resources are only available if RS232 device support or
RS232 network support is available at compile time.

`RsDevice1Baud'
`RsDevice2Baud'
`RsDevice3Baud'
`RsDevice4Baud'
     Integers specifying the RS232 baudrate devices if the device file
     points to a special device (like `/dev/ttyS0'; see @{"RS232 settings" Link "RS232 settings"})
     (all emulators except vsid).

Unix specific command-line options
----------------------------------

`-saveres'
`+saveres'
     Enable/disable automatic saving of settings on exit
     (`SaveResourcesOnExit=1', `SaveResourcesOnExit=0').

`-confirmexit'
     Confirm quitting VICE (`ConfirmOnExit=1').

`+confirmexit'
     Never confirm quitting VICE (`ConfirmOnExit=0').

`-htmlbrowser <Command>'
     Specify the command to run the HTML browser for the on-line help
     (`HTMLBrowserCommand').

`-CRTChwscale'
`+CRTChwscale'
     Enable/Disable hardware scaling (`CrtcHwScale=1', `CrtcHwScale=0')
     (xcbm2 and xpet only).

`-CRTCfulldevice <device>'
     Select fullscreen device (`CrtcFullscreenDevice') (xcbm2 and xpet
     only).

`-TEDhwscale'
`+TEDhwscale'
     Enable/Disable hardware scaling (`TEDHwScale=1', `TEDHwScale=0')
     (xplus4 only).

`-TEDfulldevice <device>'
     Select fullscreen device (`TEDFullscreenDevice') (xplus4 only).

`-VDChwscale'
`+VDChwscale'
     Enable/Disable hardware scaling (`VDCHwScale=1', `VDCHwScale=1')
     (x128 only).

`-VIChwscale'
`+VIChwscale'
     Enable/Disable hardware scaling (`VICHwScale=1', `VICHwScale=0')
     (xvic only).

`-VICfulldevice <device>'
     Select fullscreen device (`VICFullscreenDevice') (xvic only).

`-VICIIhwscale'
`+VICIIhwscale'
     Enable/Disable hardware scaling (`VICIIHwScale=1',
     `VICIIHwScale=0') (all emulators except xcbm2, xpet, xplus4, xvic
     and vsid).

`-VICIIfulldevice <device>'
     Select fullscreen device (`VICIIFullscreenDevice') (all emulators
     except xcbm2, xpet, xplus4, xvic and vsid).

`-joydev1 <0-3> / <0-9> / <0-11> / <0-13>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Keyset 1, 3: Keyset 2, 4: Analog joystick 1, 5: Analog joystick
     2, 6: Analog joystick 3, 7: Analog joystick 4, 8: Analog joystick
     5, 9: Analog joystick 6, 10: Digital joystick 1, 11: Digital
     joystick 2, 12: USB joystick 1, 13: USB joystick 2)

`-joydev2 <0-3> / <0-9> / <0-11> / <0-13>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Keyset 1, 3: Keyset 2, 4: Analog joystick 1, 5: Analog
     joystick 2, 6: Analog joystick 3, 7: Analog joystick 4, 8: Analog
     joystick 5, 9: Analog joystick 6, 10: Digital joystick 1, 11:
     Digital joystick 2, 12: USB joystick 1, 13: USB joystick 2)

`-extrajoydev1 <0-3> / <0-9> / <0-11> / <0-13>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Analog joystick 1, 5: Analog joystick 2, 6: Analog
     joystick 3, 7: Analog joystick 4, 8: Analog joystick 5, 9: Analog
     joystick 6, 10: Digital joystick 1, 11: Digital joystick 2, 12:
     USB joystick 1, 13: USB joystick 2)

`-extrajoydev2 <0-3> / <0-9> / <0-11> / <0-13>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset
     1, 3: Keyset 2, 4: Analog joystick 1, 5: Analog joystick 2, 6:
     Analog joystick 3, 7: Analog joystick 4, 8: Analog joystick 5, 9:
     Analog joystick 6, 10: Digital joystick 1, 11: Digital joystick 2,
     12: USB joystick 1, 13: USB joystick 2)

The available joysticks might differ depending on operating system and
joystick support in the OS.

`Devices 4..9'
     Only available if joystick support is available at compile time.

`Devices 10 and 11'
     Only available if digital joystick support is available at compile
     time.

`Devices 12 and 13'
     Only available if USB joystick support is available at compile
     time.

The following command-line options are only available if MIDI support
is available at compile time.

`-midiin <name>'
     Specify MIDI-In device (`MIDIInDev') (x64, x64sc, xscpu64, x128
     and xvic only).

`-midiout <name>'
     Specify MIDI-Out device (`MIDIOutDev') (x64, x64sc, xscpu64, x128
     and xvic only).

The following command-line option is only available if MIDI support and
ALSA support is available at compile time.

`-mididrv <driver>'
     Specify MIDI driver (`MIDIDriver') (x64, x64sc, xscpu64, x128 and
     xvic only).  (0: OSS, 1: ALSA)

The following command-line options are only available if RS232 device
support or RS232 network support is available at compile time.

`-rsdev1baud <baudrate>'
`-rsdev2baud <baudrate>'
`-rsdev3baud <baudrate>'
`-rsdev4baud <baudrate>'
     Specify <baudrate> as baudrate for the RS232 devices if the device
     name specifies a special device (like `/dev/ttyS0' for example,
     see @{"RS232 settings" Link "RS232 settings"}; `RsDevice1Baud', `RsDevice2Baud'
     `RsDevice3Baud' and `RsDevice4Baud') (all emulators except vsid).


@EndNode

@Node "XAW-specific features" "vice.guide/XAW-specific features"
@Next "GTK-specific features"
@Prev "Unix-specific features"
@Toc "Unix-specific features"

XAW-specific features
---------------------

This section lists the settings and commands that are common and
specific to the XAW GUI, and are thus not present in other platforms.

XAW GUI specific resources
..........................

`DisplayDepth'
     Integer specifying the depth of the host display. The value `0'
     (the default) causes the emulator to autodetect it (all emulators
     except vsid).  (0..32)

`PrivateColormap'
     Boolean specifying whether VICE should install a private colormap
     at startup. This only makes sense for 8-bit displays that could
     run out of colors if other color-hungry applications are running
     at the same time (all emulators except vsid).

`UseXSync'
     Boolean specifying whether `XSync()' is called after updating the
     emulation window.

`MITSHM'
     Integer specifying whether VICE should try to use the shared memory
     extensions (MITSHM) when starting up. The shared memory extensions
     make things a lot faster but might not be available on your
     system. You will not be able to use these extensions if you are
     sitting at an X terminal while running the emulator on a remote
     machine across a network. Valid values are: 0 = do not use MITSHM,
     1 = do use MITSHM, -1 = try to autodetect availability on startup
     (default). The last is a simple test if the emulator runs across a
     network and if so disables MITSHM (If you have problems with this
     test please report it).  (-1: auto, 1: off, 2: on)

`Window0Width'
`Window0Height'
`Window0Xpos'
`Window0Ypos'
     Integers specifying the position and size of the (first) emulator
     window (all emulators except vsid).

`Window1Width'
`Window1Height'
`Window1Xpos'
`Window1Ypos'
     Integers specifying the position and size of the (second) emulator
     window (x128 only).

The following resources are only available if Xvideo support is present
at compile time.

`AspectRatio'
     String/float specifying the aspect ratio (0.5-2.0).

`KeepAspectRatio'
     Boolean specifying whether the aspect ratio of the output window
     should be preserved.  (0: free scaling, 1: scale with fixed aspect
     ratio)

`TrueAspectRatio'
     Boolean specifying whether to use the true (non square pixels)
     aspect ratio.

`FOURCC'
     String specifying the YUV FOURCC format to use.

The following resources are only available if XRandr support is present
at compile time.

`UseFullscreen'
     Boolean specifying whether fullscreen mode is currently in use
     (all emulators except vsid).

`CrtcXRANDRFullscreenMode'
     integer specifying XRANDR fullscreen mode (xcbm2 and xpet only).

`TEDXRANDRFullscreenMode'
     integer specifying XRANDR fullscreen mode (xplus4 only).

`VDCXRANDRFullscreenMode'
     integer specifying XRANDR fullscreen mode (x128 only).

`VICXRANDRFullscreenMode'
     integer specifying XRANDR fullscreen mode (xvic only).

`VICIIXRANDRFullscreenMode'
     integer specifying XRANDR fullscreen mode (all emulators except
     xcbm2, xpet, xplus4, xvic and vsid).

The following resources are only available if VidMode support is
present at compile time.

`UseFullscreen'
     Boolean specifying whether fullscreen mode is currently in use.

`CrtcVidmodeFullscreenMode'
     integer specifying VidMode fullscreen mode (xcbm2 and xpet only).

`TEDVidmodeFullscreenMode'
     integer specifying VidMode fullscreen mode (xplus4 only).

`VDCVidmodeFullscreenMode'
     integer specifying VidMode fullscreen mode (x128 only).

`VICVidmodeFullscreenMode'
     integer specifying VidMode fullscreen mode (xvic only).

`VICIIVidmodeFullscreenMode'
     integer specifying VidMode fullscreen mode (all emulators except
     xcbm2, xpet, xplus4, xvic and vsid).

XAW GUI specific command-line options
.....................................

`-displaydepth <value>'
     Specify the display depth (`DisplayDepth') (all emulators except
     vsid).  (0..32)

`-colormap'
`+colormap'
     Enable/disable installation of a private colormap
     (`PrivateColormap=1', `PrivateColormap=0') (all emulators except
     vsid).

`-xsync'
`+xsync'
     Enable/disable usage of `XSync()' when updating the emulation
     window (`UseXSync=1', `UseXSync=0').

`-mitshm'
`+mitshm'
     Enable/disable usage of the MITSHM extensions (`MITSHM=1',
     `MITSHM=0').

The following command-line options are only available if Xvideo support
is present at compile time.

`-aspect <aspect ratio>'
     Set the aspect ratio (`AspectRatio').  (0.5-2.0)

`-keepaspect'
     Enable keeping of the aspect ratio when scaling
     (`KeepAspectRatio=1').

`+keepaspect'
     Disable keeping of the aspect ratio when scaling (freescaling)
     (`KeepAspectRatio=0').

`-trueaspect'
`+trueaspect'
     Enable/disable whether to use the true (non square pixels) aspect
     ratio (`TrueAspectRatio=1', (`TrueAspectRatio=0').

`-fourcc <fourcc>'
     Set the YUV FOURCC format to use (`FOURCC').

The following command-line options are only available if XRandr support
is present at compile time.

`-fullscreen'
`+fullscreen'
     Enable/disable fullscreen mode (`UseFullscreen=1',
     (`UseFullscreen=0') (all emulators except vsid).

`-CrtcXRANDRfullmode <mode>'
     Select fullscreen mode (`CrtcXRANDRFullscreenMode').  (xcbm2 and
     xpet only)

`-TEDXRANDRfullmode <mode>'
     Select fullscreen mode (`TEDXRANDRFullscreenMode').  (xplus4 only)

`-VDCXRANDRfullmode <mode>'
     Select fullscreen mode (`VDCXRANDRFullscreenMode').  (x128 only)

`-VICXRANDRfullmode <mode>'
     Select fullscreen mode (`VICXRANDRFullscreenMode').  (xvic only)

`-VICIIXRANDRfullmode <mode>'
     Select fullscreen mode (`VICIIXRANDRFullscreenMode').  (all
     emulators except xcbm2, xpet, xplus4, xvic and vsid)

The following command-line options are only available if VidMode
support is present at compile time.

`-fullscreen'
`+fullscreen'
     Enable/disable fullscreen mode (`UseFullscreen=1',
     (`UseFullscreen=0').

`-CrtcVidmodefullmode <mode>'
     Select fullscreen mode (`CrtcVidmodeFullscreenMode').  (xcbm2 and
     xpet only)

`-TEDVidmodefullmode <mode>'
     Select fullscreen mode (`TEDVidmodeFullscreenMode').  (xplus4 only)

`-VDCVidmodefullmode <mode>'
     Select fullscreen mode (`VDCVidmodeFullscreenMode').  (x128 only)

`-VICVidmodefullmode <mode>'
     Select fullscreen mode (`VICVidmodeFullscreenMode').  (xvic only)

`-VICIIVidmodefullmode <mode>'
     Select fullscreen mode (`VICIIVidmodeFullscreenMode').  (all
     emulators except xcbm2, xpet, xplus4, xvic and vsid)


@EndNode

@Node "GTK-specific features" "vice.guide/GTK-specific features"
@Prev "XAW-specific features"
@Toc "Unix-specific features"

GTK-specific features
---------------------

This section lists the settings and commands that are common and
specific to the GTK GUI, and are thus not present in other platforms.

GTK GUI specific resources
..........................

`KeepAspectRatio'
     Boolean specifying whether the aspect ratio of the output window
     should be preserved.  (0: free scaling, 1: scale with fixed aspect
     ratio)

`TrueAspectRatio'
     Boolean specifying whether to use the true (non square pixels)
     aspect ratio.

GTK GUI specific command-line options
.....................................

`-keepaspect'
     Enable keeping of the aspect ratio when scaling
     (`KeepAspectRatio=1').

`+keepaspect'
     Disable keeping of the aspect ratio when scaling (freescaling)
     (`KeepAspectRatio=0').

`-trueaspect'
`+trueaspect'
     Enable/disable whether to use the true (non square pixels) aspect
     ratio (`TrueAspectRatio=1', (`TrueAspectRatio=0').


@EndNode

@Node "Mac OS X-specific features" "vice.guide/Mac OS X-specific features"
@Next "Windows-specific features"
@Prev "Unix-specific features"
@Toc "Platform-specific features"

Mac OS X-specific features
==========================


@EndNode

@Node "Windows-specific features" "vice.guide/Windows-specific features"
@Prev "Mac OS X-specific features"
@Toc "Platform-specific features"

Windows-specific features
=========================

This section lists the settings and commands that are common and
specific to the Windows GUI, and are thus not present in other
platforms.

Windows GUI specific resources
------------------------------

`MouseSensitivity'
     Integer specifying the sensitivity of the mouse (all emulators
     except xcbm2, xcbm5x0, xpet, xplus4 and vsid).  (0..40)

`MonitorDimensions'
     String that holds the dimensions and position in an encoded form.

`InitialDefaultDir'
     String specifying the initial default directory, which is used by
     the generic file browser dialog.

`InitialTapeDir'
     String specifying the initial tape directory, which is used by the
     tape image file browser dialog (all emulators except x64dtv,
     xscpu64 and vsid).

`InitialDiskDir'
     String specifying the initial tape directory, which is used by the
     disk image file browser dialog (all emulators except vsid).

`InitialAutostartDir'
     String specifying the initial autostart directory, which is used
     by the autostart image file browser dialog (all emulators except
     vsid).

`InitialCartDir'
     String specifying the initial cartridge directory, which is used
     by the cartridge image file browser dialog (all emulators except
     x64dtv and vsid).

`InitialSnapshotDir'
     String specifying the initial snapshots directory, which is used
     by the snapshots file browser dialog (all emulators except vsid).

`SaveResourcesOnExit'
     Boolean specifying whether the emulator should save changed
     settings before exiting. If this is enabled, the user will be
     always prompted first, in case the settings have changed.

`ConfirmOnExit'
     Boolean specifying whether to show a confirmation dialog on exit.

`SingleCPU'
     Boolean specifying whether to use only the first CPU on an SMP
     system, or all CPUs.

`Window0Xpos'
`Window0Ypos'
     Integers specifying the position and size of the (first) emulator
     window (all emulators except vsid).

`Window1Xpos'
`Window1Ypos'
     Integers specifying the position and size of the (second) emulator
     window (x128 only).

`AlwaysOnTop'
     Boolean specifying if the emulator window should stay on top of
     other windows.

`JoyDevice1'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Joystick 1, 5: joystick 2)

`JoyDevice2'
     Integer specifying which joystick device the emulator should use
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2, 4:
     Joystick 1, 5: joystick 2)

`JoyDevice3'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3: Keyset 2,
     4: Joystick 1, 5: joystick 2)

`JoyDevice4'
     Integer specifying which joystick device the emulator should use
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Joystick 1, 5: joystick 2)

`JoyAutofire1Speed'
     Integer specifying the autofire speed for the emulation of
     joystick 1 (all emulators except xcbm2, xpet and vsid).  (0..32)

`JoyAutofire2Speed'
     Integer specifying the autofire speed for the emulation of
     joystick 2 (all emulators except xcbm2, xpet, xvic and vsid).
     (0..32)

`JoyAutofire3Speed'
     Integer specifying the autofire speed for the emulation of extra
     joystick 1 (all emulators except xcbm5x0 and vsid).  (0..32)

`JoyAutofire4Speed'
     Integer specifying the autofire speed for the emulation of extra
     joystick 2 (all emulators except xcbm5x0, xplus4 and vsid).
     (0..32)

`JoyAutofire1Button'
     Integer specifying the the code of the button to use for autofire
     for the emulation of joystick 1 (all emulators except xcbm2, xpet
     and vsid).

`JoyAutofire2Button'
     Integer specifying the the code of the button to use for autofire
     for the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).

`JoyAutofire3Button'
     Integer specifying the the code of the button to use for autofire
     for the emulation of extra joystick 1 (all emulators except
     xcbm5x0 and vsid).

`JoyAutofire4Button'
     Integer specifying the the code of the button to use for autofire
     for the emulation of extra joystick 2 (all emulators except
     xcbm5x0, xplus4 and vsid).

`JoyFire1Button'
     Integer specifying the the code of the button to use for fire for
     the emulation of joystick 1 (all emulators except xcbm2, xpet and
     vsid).

`JoyFire2Button'
     Integer specifying the the code of the button to use for fire for
     the emulation of joystick 2 (all emulators except xcbm2, xpet,
     xvic and vsid).

`JoyFire3Button'
     Integer specifying the the code of the button to use for fire for
     the emulation of extra joystick 1 (all emulators except xcbm5x0
     and vsid).

`JoyFire4Button'
     Integer specifying the the code of the button to use for fire for
     the emulation of extra joystick 2 (all emulators except xcbm5x0,
     xplus4 and vsid).

The following resources are only available if MIDI support is available
at compile time.

`MIDIInDev'
     Integer specifying the MIDI input device (x64, x64sc, xscpu64,
     x128 and xvic only).

`MIDIOutDev'
     Integer specifying the MIDI output device (x64, x64sc, xscpu64,
     x128 and xvic only).

The following resources are only available if DirectX 9 support is
available at compile time.

`DX9Disable'
     Boolean specifying whether to disable the DirectX 9 video driver
     and fall back on the GDI video driver (all emulators except vsid).
     (0: use GDI, 1: use DX9)

`DXPrimarySurfaceRendering'
     Boolean to enable/disable rendering to DirectX primary surface
     (all emulators except vsid).

`FullscreenEnabled'
     Boolean to enable/disable fullscreen mode (all emulators except
     vsid).

`FullscreenDevice'
     Integer specifying the fullscreen device (all emulators except
     vsid).

`FullscreenWidth'
     Integer specifying the width of the fullscreen display (all
     emulators except vsid).

`FullscreenHeight'
     Integer specifying the height of the fullscreen display (all
     emulators except vsid).

`FullscreenRefreshRate'
     Integer specifying the refresh rate of the fullscreen display (all
     emulators except vsid).

`VBLANKSync'
     Boolean to enable/disable vertical blank sync (all emulators
     except vsid).

`KeepAspectRatio'
     Boolean specifying whether the aspect ratio of the output window
     should be preserved (all emulators except vsid).  (0: free
     scaling, 1: scale with fixed aspect ratio)

`TrueAspectRatio'
     Boolean specifying whether to use the true (non square pixels)
     aspect ratio (all emulators except vsid).

`AspectRatio'
     Integer specifying the aspect ratio (all emulators except vsid).
     (500..2000)

Windows GUI specific command-line options
-----------------------------------------

`-mousesensitivity <sensitivity>'
     Set the sensitivity of the mouse (`MouseSensitivity') (all
     emulators except xcbm2, xcbm5x0, xpet, xplus4 and vsid).  (0..40)

`-initialdefaultdir <Name>'
     Select the initial default directory for the file browser dialog
     (`InitialDefaultDir').

`-initialtapedir <Name>'
     Select the initial tape images directory for the file browser
     dialog (`InitialTapeDir') (all emulators except x64dtv, xscpu64
     and vsid).

`-initialdiskdir <Name>'
     Select the initial disk images directory for the file browser
     dialog (`InitialDiskDir') (all emulators except vsid).

`-initialautostartdir <Name>'
     Select the initial autostart directory for the file browser dialog
     (`InitialAutostartDir') (all emulators except vsid).

`-initialcartdir <Name>'
     Select the initial cartridge images directory for the file browser
     dialog (`InitialCartDir') (all emulators except x64dtv and vsid).

`-initialsnapshotdir <Name>'
     Select the initial snapshot directory for the file browser dialog
     (`InitialSnapshotDir') (all emulators except vsid).

`-saveres'
`+saveres'
     Enable/disable automatic saving of settings on exit
     (`SaveResourcesOnExit=1', `SaveResourcesOnExit=0').

`-confirmexit'
     Confirm quitting VICE (`ConfirmOnExit=1').

`+confirmexit'
     Never confirm quitting VICE (`ConfirmOnExit=0').

`-singlecpu'
     Only use the first CPU on SMP systems (`SingleCPU=1').

`+singlecpu'
     Use all CPUs on SMP systems (`SingleCPU=0').

`-alwaysontop'
`+alwaysontop'
     Enable/disable always on top feature (`AlwaysOnTop=1',
     `AlwaysOnTop=0').

`-joydev1 <0-5>'
     Set the device for joystick emulation of port 1 (`JoyDevice1')
     (all emulators except xcbm2, xpet and vsid).  (0: None, 1: Numpad,
     2: Keyset 1, 3: Keyset 2, 4: Joystick 1, 5: joystick 2)

`-joydev2 <0-5>'
     Set the device for joystick emulation of port 2 (`JoyDevice2')
     (all emulators except xcbm2, xpet, xvic and vsid).  (0: None, 1:
     Numpad, 2: Keyset 1, 3: Keyset 2, 4: Joystick 1, 5: joystick 2)

`-extrajoydev1 <0-5>'
     Set device for extra joystick port 1 (`JoyDevice3') (all emulators
     except xcbm5x0 and vsid).  (0: None, 1: Numpad, 2: Keyset 1, 3:
     Keyset 2, 4: Joystick 1, 5: joystick 2)

`-extrajoydev2 <0-5>'
     Set device for extra joystick port 2 (`JoyDevice4') (all emulators
     except xcbm5x0, xplus4 and vsid).  (0: None, 1: Numpad, 2: Keyset
     1, 3: Keyset 2, 4: Joystick 1, 5: joystick 2)

The following command-line options are only available if MIDI support
is available at compile time.

`-midiin <number>'
     Specify MIDI-In device (`MIDIInDev') (x64, x64sc, xscpu64, x128
     and xvic only).

`-midiout <number>'
     Specify MIDI-Out device (`MIDIOutDev') (x64, x64sc, xscpu64, x128
     and xvic only).

The following command-line options are only available if DirectX 9
support is available at compile time.

`-dx9disable'
     Disable DirectX 9 video driver and fall back on the GDI video
     driver (`DX9Disable=1') (all emulators except vsid).

`-dx9enable'
     Enable DirectX 9 video driver (`DX9Disable=1') (all emulators
     except vsid).

`-dxpsrender'
`+dxpsrender'
     Enable/disable rendering to DirectX primary surface
     (`DXPrimarySurfaceRendering=1', `DXPrimarySurfaceRendering=0')
     (all emulators except vsid).

`-fullscreen'
`+fullscreen'
     Enable/Disable fullscreen mode (`FullscreenEnabled=1',
     `FullscreenEnabled=0') (all emulators except vsid).

`-fullscreendevice <number>'
     Specify fullscreen device (`FullscreenDevice') (all emulators
     except vsid).

`-vblanksync'
`+vblanksync'
     Enable/disable vertical blank sync (`VBLANKSync=1', `VBLANKSync=0')
     (all emulators except vsid).

`-keepaspect'
     Enable keeping of the aspect ratio when scaling
     (`KeepAspectRatio=1') (all emulators except vsid).

`+keepaspect'
     Disable keeping of the aspect ratio when scaling (freescaling)
     (`KeepAspectRatio=0') (all emulators except vsid).

`-trueaspect'
`+trueaspect'
     Enable/disable whether to use the true (non square pixels) aspect
     ratio (`TrueAspectRatio=1', (`TrueAspectRatio=0') (all emulators
     except vsid).

`-aspect <aspect ratio>'
     Set the aspect ratio (`AspectRatio') (all emulators except vsid).
     (500..2000)


@EndNode

@Node "Snapshots" "vice.guide/Snapshots"
@Next "Monitor"
@Prev "Platform-specific features"
@Toc "Main"

Snapshots
*********

Every VICE emulator has a built-in snapshot feature, that saves the
complete emulator state into one file for later use.  You can therefore
save the emulator state - including the state of the game you are
playing for example - in a single file.


 @{" Snapshot usage " Link "Snapshot usage"} 
 @{" Snapshot format " Link "Snapshot format"} 


@EndNode

@Node "Snapshot usage" "vice.guide/Snapshot usage"
@Next "Snapshot format"
@Prev "Snapshots"
@Toc "Snapshots"

Snapshot usage
==============

A snapshot is one file containining the complete emulator state.  A
snapshot file can be generated by selecting the "Save snapshot" command
at any time.  This will pop up a requester from which you can specify
whether the snapshot should also contain the disk and ROM status.

A snapshot file can be used to restore the emulator state by selecting
the `load snapshot' menu entry at any time.  Unfortunately attached ROM
images/cartridges are only supported in the VIC20, the PET and the
CBM-II emulators at this time.

The memory configuration of the emulator is saved in the snapshot file
as well. This configuration is restored when the snapshot is loaded.

A quick snapshot can now be made by pressing the `M-F11' key and
reloaded by pressing the `M-F10' key.


@EndNode

@Node "Snapshot format" "vice.guide/Snapshot format"
@Prev "Snapshot usage"
@Toc "Snapshots"

Snapshot format
===============

A snapshot file consists of several modules of mostly different types.
Each module has a name and saves the state of an entity like a CIA, the
CPU, or the memory.


 @{" Emulator modules " Link "Emulator modules"} 
 @{" Module formats " Link "Module formats"} 


@EndNode

@Node "Emulator modules" "vice.guide/Emulator modules"
@Next "Module formats"
@Prev "Snapshot format"
@Toc "Snapshot format"

Emulator modules
----------------

This section lists the modules that are contained in each of the
emulators snapshot files.


 @{" x64 modules " Link "x64 modules"} 
 @{" x128 modules " Link "x128 modules"} 
 @{" xvic modules " Link "xvic modules"} 
 @{" xpet modules " Link "xpet modules"} 
 @{" xcbm2 and xcbm5x0 modules " Link "xcbm2 and xcbm5x0 modules"} 
 @{" Drive modules " Link "Drive modules"} 


@EndNode

@Node "x64 modules" "vice.guide/x64 modules"
@Next "x128 modules"
@Prev "Emulator modules"
@Toc "Emulator modules"

x64 modules
...........

The modules in the x64 emulator are:

.1 .4 .5  Name  Type  Description  MAINCPU  6502  The Main CPU -
although it is a 6510, only the 6502 core is saved here  C64MEM  Memory
Holds the RAM contents of the C64.  Also the CPU I/O register contents
are saved here.   C64ROM  ROM images  Dump of the system ROMs  VIC-II
656*  The VIC-II of the C64/128  CIA1  6526  The CIA for the interrupts
and the keyboard  CIA2  6526  The CIA for the userport, IEC-bus and
RS232.   SID  6581  The SID sound chip of the C64/C128  REU*

The RAM Extension Unit state (optional)  ACIA1  6551  An ACIA (RS232
interface) at $DE00 (optional)  TPI  6525  A TPI at $DF00 for a
parallel IEEE488 interface (optional)  *  Drive modules  The emulated
drive(s) have their own modules see @{"Drive modules" Link "Drive modules"}  multitable

Some of the modules are optional and are only saved if the specific
feature is enabled at save-time.  If the module is found when restoring
the state the optional features are enabled, and disabled otherwise.


@EndNode

@Node "x128 modules" "vice.guide/x128 modules"
@Next "xvic modules"
@Prev "x64 modules"
@Toc "Emulator modules"

x128 modules
............

The modules in the x128 emulator are:

.1 .4 .5  Name  Type  Description  MAINCPU  6502  The Main CPU -
although it is a 6510, only the 6502 core is saved here  C128MEM  Memory
Holds the RAM contents of the C64.  Also the CPU I/O register contents
are saved here.   C128ROM  ROM images  Dump of the system ROMs  VIC-II
656*  The VIC-II of the C64/128  CIA1  6526  The CIA for the interrupts
and the keyboard  CIA2  6526  The CIA for the userport, IEC-bus and
RS232.   SID  6581  The SID sound chip of the C64/C128  ACIA1  6551  An
ACIA at $DE00 (optional)  TPI  6525  A TPI at $DF00 for a parallel
IEEE488 interface (optional)  *  Drive modules  The emulated drive(s)
have their own modules see @{"Drive modules" Link "Drive modules"}  multitable

Some of the modules are optional and are only saved if the specific
feature is enabled at save-time.  If the module is found when restoring
the state the optional features are enabled, and disabled otherwise.

Not yet supported are the 80 column video chip, cartridges and RAM
expansion unit.


@EndNode

@Node "xvic modules" "vice.guide/xvic modules"
@Next "xpet modules"
@Prev "x128 modules"
@Toc "Emulator modules"

xvic modules
............

The modules in the xvic emulator are:

.1 .4 .5  Name  Type  Description  MAINCPU  6502  The Main CPU  VIC20MEM
Memory  Holds the RAM contents of the VIC20.   VIC20ROM  ROM images
Holds the ROM images of the VIC20, including possibly attached
cartridges  VIC-I  656*  The VIC-I of the VIC20  VIA1  6522  The VIA
for the interrupts and the keyboard  VIA2  6522  The VIA for the
userport, IEC-bus and RS232.   *  Drive modules  The emulated drive(s)
have their own modules see @{"Drive modules" Link "Drive modules"}  multitable


@EndNode

@Node "xpet modules" "vice.guide/xpet modules"
@Next "xcbm2 and xcbm5x0 modules"
@Prev "xvic modules"
@Toc "Emulator modules"

xpet modules
............

The modules in the xpet emulator are:

.1 .4 .5  Name  Type  Description  MAINCPU  6502  The Main CPU  PETMEM
Memory  Holds the RAM contents of the PET.   PETROM  ROM images  Holds
the ROM images of the PET, including possibly attached cartridges  CRTC
6545  The CRTC of the PET. This is also included if it is a dump of a
PET without CRTC, because the video state is saved here anyway.   PIA1
6520  The PIA for the interrupts, tape and the keyboard  PIA2  6520
The PIA for the IEEE488-bus  VIA  6522  The VIA for IEEE488, userport,
sound  ACIA1  6551  The ACIA for the SuperPET.  This module is optional.
DWWPIA  6520  The PIA for the DWW hires board.   CPU6809  6809  The
extra CPU in the SuperPET.  This module is optional.   *  Drive modules
The emulated drive(s) have their own modules see @{"Drive modules" Link "Drive modules"}
multitable


@EndNode

@Node "xcbm2 and xcbm5x0 modules" "vice.guide/xcbm2 and xcbm5x0 modules"
@Next "Drive modules"
@Prev "xpet modules"
@Toc "Emulator modules"

xcbm2 and xcbm5x0 modules
.........................

The modules in the xcbm2 and xcbm5x0 emulators are:

.1 .4 .5  Name  Type  Description  MAINCPU  6502  The Main CPU -
although it is a 6509, only the 6502 core is saved here  CBM2MEM  Memory
Holds the RAM contents of the CBM-II models.  Also holds the exec-bank
and indirection bank registers  C500DATA

Holds additional state information necessary for the C500 (e.g. cycles
till the next IRQ)  CBM2ROM  Memory  optional.  Holds the ROM images.
CRTC  6545  The video chip for the C6*0 and C7*0 models (only those
models).   VIC-II  656?   The video chip for the C5*0 models (only the
C5*0 models).   CIA1  6526  The CIA for IEEE 488 and userport.   TPI1
6525  TPI 1 for IEEE488  TPI2  6525  TPI 2 for interrupts and keyboard.
ACIA1  6551  The RS232 interface  SID  6581  The CBM2s SID sound chip
*  Drive modules  The emulated drive(s) have their own modules see
@{"Drive modules" Link "Drive modules"}  multitable


@EndNode

@Node "Drive modules" "vice.guide/Drive modules"
@Prev "xcbm2 and xcbm5x0 modules"
@Toc "Emulator modules"

Drive modules
.............

The modules for the real disk drive emulation are included in the
emulator when the emulation is enabled during the writing of the
snapshot.

.1 .4 .5  Name  Type  Description  *CPU  6502  The Drive 0 CPU  *  *  *
multitable


@EndNode

@Node "Module formats" "vice.guide/Module formats"
@Prev "Emulator modules"
@Toc "Snapshot format"

Module formats
--------------

This section shows the basic module framework and the contents of the
different types of modules.

The single chip modules contain the chip state, not the state of the
emulator.  We tried to make the format as implementation-independent as
possible, to allow reuse of snapshots in later versions of this
emulator, or even in other emulators.


 @{" Module Terminology " Link "Module Terminology"} 
 @{" Module framework " Link "Module framework"} 
 @{" CPU 6502 module " Link "CPU 6502 module"} 
 @{" CPU 6809 module " Link "CPU 6809 module"} 
 @{" CIA 6526 module " Link "CIA 6526 module"} 
 @{" VIA 6522 module " Link "VIA 6522 module"} 
 @{" PIA 6520 module " Link "PIA 6520 module"} 
 @{" TPI 6525 module " Link "TPI 6525 module"} 
 @{" RIOT 6532 module " Link "RIOT 6532 module"} 
 @{" SID 6581 module " Link "SID 6581 module"} 
 @{" ACIA 6551 module " Link "ACIA 6551 module"} 
 @{" VIC-I module " Link "VIC-I module"} 
 @{" VIC-II module " Link "VIC-II module"} 
 @{" CRTC module " Link "CRTC module"} 
 @{" C64 memory module " Link "C64 memory module"} 
 @{" C128 memory module " Link "C128 memory module"} 
 @{" VIC20 memory module " Link "VIC20 memory module"} 
 @{" PET memory module " Link "PET memory module"} 
 @{" CBM-II memory module " Link "CBM-II memory module"} 
 @{" C500 data module " Link "C500 data module"} 


@EndNode

@Node "Module Terminology" "vice.guide/Module Terminology"
@Next "Module framework"
@Prev "Module formats"
@Toc "Module formats"

Terminology
...........

In this section we use certain abbreviations to define the types of the
data saved in the snapshot.

`BYTE'
     8 bit integer.

`WORD'
     16 bit integer.  Saved with low-byte first, high-byte last.

`DWORD'
     32 bit integer.  Saved with low-word first, then high-word.  Each
     word saved with its low-byte first.

`ARRAY'
     Array of BYTE values.  Length depends on the description.

The tables for the single modules state the type, name and description
of the data saved in the modules.  The data is saved in the order it is
in the tables, so no offset is given.


@EndNode

@Node "Module framework" "vice.guide/Module framework"
@Next "CPU 6502 module"
@Prev "Module Terminology"
@Toc "Module formats"

Module framework
................

The VICE snapshot file starts with the magic string and includes the
fileformat version number.

.1 .4 .5  Type  Name  Description  19 BYTE  MAGIC  "VICE Snapshot
File\032", padded with 0  BYTE  VMAJOR  fileformat major version number
BYTE  VMINOR  fileformat minor version number  16 BYTE  MACHINENAME
Name of emulated machine, like "PET", "CBM-II", "VIC20", "C64" or
"C128". zerobyte-padded.   multitable

The file header is followed by a number of different snapshot modules.

Each module has a header with the information given in the table below.
The header includes two version numbers, VMAJOR and VMINOR.  Modules
with the same VMAJOR should be able to be exchanged.  I.e. higher VMINOR
numbers only append to the data for lower VMINOR.  This additional data
is ignored by older restore routines.  The other way around newer
restore routines must accept the fewer info from lower VMINOR dumps.
Changes in VMAJOR might introduce any incompatibility you like, but
that's what VMAJOR is for after all :-)

.1 .4 .5  Type  Name  Description  16 BYTE  MODULENAME  The name of the
module in ASCII, padded with 0 to 16 byte.   BYTE  VMAJOR  major
version number  BYTE  VMINOR  minor version number  DWORD  SIZE  size
of the module, including this header  multitable


@EndNode

@Node "CPU 6502 module" "vice.guide/CPU 6502 module"
@Next "CPU 6809 module"
@Prev "Module framework"
@Toc "Module formats"

CPU 6502 module
...............

This module saves the core 6502 state.  You will find a clock value
there.  All other modules save their own clock values relative to this
value.  However, the drive modules save their clocks relative to their
appropriate CPUs of course.

Warning: This module is still under construction and saves some
information that is not sure to be VICE-independent.  If in doubt, read
the source.

.1 .4 .5  Type  Name  Description  DWORD  CLK  the current CPU clock
value.  All other clock values are relative to this.   BYTE  AC
Accumulator  BYTE  XR  X index register  BYTE  YR  Y index register
BYTE  SP  Stack Pointer  WORD  PC  Programm Counter  BYTE  ST  Status
Registers  DWORD  LASTOPCODE  ?   DWORD  IRQCLK  absolute CLK when the
IRQ line came active  DOWRD  NMICLK  absolute CLK when the NMI line
came active  DWORD  ?   ?   DWORD  ?   ?   multitable


@EndNode

@Node "CPU 6809 module" "vice.guide/CPU 6809 module"
@Next "CIA 6526 module"
@Prev "CPU 6502 module"
@Toc "Module formats"

CPU 6809 module
...............

This module saves the core 6809 state.  You will find a clock value
there.  All other modules save their own clock values relative to this
value.  However, the drive modules save their clocks relative to their
appropriate CPUs of course.

Warning: This module is still under construction and saves some
information that is not sure to be VICE-independent.  If in doubt, read
the source.

.1 .4 .5  Type  Name  Description  DWORD  CLK  the current CPU clock
value.  All other clock values are relative to this.   WORD  X  The X
register  WORD  Y  The Y register  WORD  U  The U register  WORD  PC
The Program Counter register  BYTE  DP  The Direct Page register  BYTE
CC  The Condition Code register  BYTE  A  The A register  BYTE  B  The
B register

The following are for 6309 compatibility:  WORD  V  The V register  BYTE
E  The E register  BYTE  F  The F register  multitable


@EndNode

@Node "CIA 6526 module" "vice.guide/CIA 6526 module"
@Next "VIA 6522 module"
@Prev "CPU 6809 module"
@Toc "Module formats"

CIA module
..........

The CIA 6526 is an I/O port chip with 2 8-bit I/O ports, a shift
register, two timers, a Time of Day clock and interrupts.

Version numbers: Major 1, Minor 1.

.1 .4 .5  Type  Name  Description  BYTE  ORA  Output register A  BYTE
ORB  Output register B  BYTE  DDRA  Data direction register A  BYTE
DDRB  Data direction register B  WORD  TAC  Timer A counter value  WORD
TBC  Timer B counter value  BYTE  TOD_TEN  Time of Day - current tenth
of second  BYTE  TOD_SEC  Time of Day - current seconds  BYTE  TOD_MIN
Time of Day - current minutes  BYTE  TOD_HR  Time of Day - current hours
BYTE  SDR  contents of shift register  BYTE  IER  mask of enabled
interrupt masks  BYTE  CRA  Control register A  BYTE  CRB  Control
register B  WORD  TAL  Timer A latch value  WORD  TBL  Timer B latch
value  BYTE  IFR  mask of currently active interrupts  BYTE  PBSTATE
Bit 6/7 reflect the PB6/7 toggle bit state.  Bit 2/3 reflect the
corresponding port bit state.   BYTE  SRHBITS  number of half-bits to
still shift in/out SDR  BYTE  ALARM_TEN  Time of Day - alarm tenth of
second  BYTE  ALARM_SEC  Time of Day - alarm seconds  BYTE  ALARM_MIN
Time of Day - alarm minutes  BYTE  ALARM_HR  Time of Day - alarm hours
BYTE  READICR  current clock minus the clock when ICR was read last
plus 128.   BYTE  TODLATCHED  Bit 0: 1= latched for reading, Bit 1:
2=stopped for writing  BYTE  TODL_TEN  Time of Day - latched tenth of
second  BYTE  TODL_SEC  Time of Day - latched seconds  BYTE  TODL_MIN
Time of Day - latched minutes  BYTE  TODL_HR  Time of Day - latched
hours  DWORD  TOD_TICKS  clk ticks till next tenth of second  -  -  The
next items have been added in V1.1  WORD  TASTATE  The state bits of
the CIA timer A, according to ciatimer.h  WORD  TBSTATE  The state bits
of the CIA timer B, according to ciatimer.h  multitable

The last two items have been added in CIA snapshot version 1.1 due to
the improved CIA emulation in the newer VICE versions.  Some state bits
correspond to the CIA state as described in the "A Software Model of
the CIA 6526" document by Wolfgang Lorenz, some are delayed versions.
For more read the source file `ciatimer.h'.


@EndNode

@Node "VIA 6522 module" "vice.guide/VIA 6522 module"
@Next "PIA 6520 module"
@Prev "CIA 6526 module"
@Toc "Module formats"

VIA module
..........

The VIA 6522 is the predecessor of the CIA and also an I/O port chip
with 2 8-bit I/O ports, a shift register, two timers and interrupts.

Version numbers: Major 1, Minor 0.

.1 .4 .5  Type  Name  Description  BYTE  ORA  Output register A  BYTE
DDRA  Data direction register A  BYTE  ORB  Output register B  BYTE
DDRB  Data direction register B  WORD  T1L  Timer 1 Latch value  WORD
T1C  Timer 1 counter value  BYTE  T2L  Timer 2 latch (8 bit as only
lower byte is used)  WORD  T2C  Timer 2 counter value  BYTE  RUNFL  bit
7: timer 1 will generate IRQ on underflow; bit 6: timer 2 will generate
IRQ on underflow  BYTE  SR  Shift register value  BYTE  ACR  Auxiliary
control register  BYTE  PCR  Peripheral control register  BYTE  IFR
active interrupts  BYTE  IER  interrupt mask  BYTE  PB7  bit 7 = pb7
state  BYTE  SRHBITS  number of half-bits to shift out on SR  BYTE
CABSTATE  bit 7: state of CA2 pin, bit 6: state of CB2 pin  BYTE  ILA
Port A Input Latch (see ACR bit 0)  BYTE  ILB  Port B Input Latch (see
ACR bit 1)  multitable


@EndNode

@Node "PIA 6520 module" "vice.guide/PIA 6520 module"
@Next "TPI 6525 module"
@Prev "VIA 6522 module"
@Toc "Module formats"

PIA module
..........

The PIA 6520 is a chip with two I/O ports (Parallel Interface Adapter)
and four additional handshake lines.  The chip is pretty the same for
Port A and B, only that Port A implements handshake on read operation
and port B on write operation.

Version numbers: Major 1, Minor 0.

.1 .4 .5  Type  Name  Description  UBYTE  ORA  Output register A  UBYTE
DDRA  Data Direction Register A  UBYTE  CTRLA  Control Register A
UBYTE  ORB  Output register B  UBYTE  DDRB  Data Direction Register B
UBYTE  CTRLB  Control Register B  UBYTE  CABSTATE  Bit 7 = state of
CA2, Bit 6 = state of CB2  multitable


@EndNode

@Node "TPI 6525 module" "vice.guide/TPI 6525 module"
@Next "RIOT 6532 module"
@Prev "PIA 6520 module"
@Toc "Module formats"

TPI module
..........

The TPI 6525 is a chip with three I/O ports (Tri-Port-Interface).  One
of the ports can double as an interrupt prioritizer.  Therefore we also
have to save the states of the interrupt stack etc.

Version numbers: Major 1, Minor 0.

.1 .4 .5  Type  Name  Description  BYTE  PRA  Port A output register
BYTE  PRB  Port B output register  BYTE  PRC  Port C output register
(doubles as IRQ latch register)  BYTE  DDRA  Port A data direction
register  BYTE  DDRB  Port B data direction register  BYTE  DDRC  Port
C data direction register (doubles as IRQ mask register)  BYTE  CR
Control Register  BYTE  AIR  Active interrupt register  BYTE  STACK
Interrupt stack - the interrupt bits that are not (yet) served.   BYTE
CABSTATE  State of CA/CB pins.  Bit 7 = state of CA, Bit 6 = state of CB
multitable


@EndNode

@Node "RIOT 6532 module" "vice.guide/RIOT 6532 module"
@Next "SID 6581 module"
@Prev "TPI 6525 module"
@Toc "Module formats"

RIOT module
...........

The RIOT 6532 is a chip with two I/O ports, some RAM and a Timer.  The
chip contains 128 byte RAM, but the RAM is not saved in the RIOT
snapshot, but in the memory section.

Warning: This module is still under construction

Version numbers: Major 0, Minor 0.

.1 .4 .5  Type  Name  Description  BYTE  ORA  Port A output register
BYTE  DDRA  Port A data direction register  BYTE  ORB  Port B output
register  BYTE  DDRB  Port B data direction register  BYTE  EDGECTRL
Bit 0/1: A0/A1 address bits written to edgecontrol registers  BYTE
IRQFL  Bit 6/7: A6/A7 IRQ flag register. Bit 0: state of the IRQ line
(0=inactive, 1=active)  BYTE  N  timer value  WORD  DIVIDER  Pre-scale
divider value (1, 8, 64, or 1024)  WORD  REST  cycles since the last
counter change  BYTE  IRQEN  Bit 0: 0= timer IRQ disabled, 1= timer IRQ
enabled  multitable


@EndNode

@Node "SID 6581 module" "vice.guide/SID 6581 module"
@Next "ACIA 6551 module"
@Prev "RIOT 6532 module"
@Toc "Module formats"

SID module
..........

Warning: This module is still under construction.


@EndNode

@Node "ACIA 6551 module" "vice.guide/ACIA 6551 module"
@Next "VIC-I module"
@Prev "SID 6581 module"
@Toc "Module formats"

ACIA module
...........

The ACIA 6551 is an RS232 interface chip.  VICE emulates RS232
connections via `/dev/ttyS*' (Unix) or `COM:' (DOS/WIN - not yet?).
When saving a snapshot, those connections are of course lost.  The
state of the ACIA however is restored if possible.  I.e. if a connection
is already open when restoring the snapshot, this connection is used
instead.  If no connection is open, a carrier/DTR drop is emulated.

Version numbers: Major 1, Minor 0.

.1 .4 .5  Type  Name  Description  BYTE  TDR  Transmit Data Register
BYTE  RDR  Receiver Data Register  BYTE  SR  Status Register  BYTE  CMD
Command Register  BYTE  CTRL  Ctrl Register  BYTE  INTX  0 = no data
to tx; 1 = Data is being transmitted; 2 = Data is being transmitted
while data in TDR waiting to be put to internal transmit register  DWORD
TICKS  Clock ticks till the next TDR empty interrupt  multitable


@EndNode

@Node "VIC-I module" "vice.guide/VIC-I module"
@Next "VIC-II module"
@Prev "ACIA 6551 module"
@Toc "Module formats"

VIC-I module
............

Warning: This module is still under construction.


@EndNode

@Node "VIC-II module" "vice.guide/VIC-II module"
@Next "CRTC module"
@Prev "VIC-I module"
@Toc "Module formats"

VIC-II module
.............

Warning: This module is still under construction.


@EndNode

@Node "CRTC module" "vice.guide/CRTC module"
@Next "C64 memory module"
@Prev "VIC-II module"
@Toc "Module formats"

CRTC module
...........

Warning: After VICE version 1.0 the CRTC emulation has improved
considerably. Especially it is now cycle exact. Therefore a lot more
variables must be saved. The snapshot module version jumped from 0.0 to
1.0. Newer versions of VICE can read the old snapshots, but older
versions (1.0 and below) cannot read the new snapshots.

Warning: This module is still under construction.  Especially the
RASTERY and RASTERLINE values might be bogus.

Version numbers: Major 1, Minor 1.

.1 .4 .5  Type  Name  Description

Hardware options  WORD  VADDR_MASK  Mask of the address bits valid when
accessing the video memory  WORD  VADDR_CHARSWITCH  If one bit in the
video address is used to switch the character generator, it is masked
here.   WORD  VADDR_CHAROFFSET  The offset in characters in the
character generator that CHARSWITCH switches.   WORD  VADDR_REVSWITCH
If one bit in the video address inverts the screen, it is masked here.
WORD  CHARGEN_MASK  size of character generator in byte - 1  WORD
CHARGEN_OFFSET  offset given by external circuitry  BYTE  HW_CURSOR
external hardware cursor circuitry enabled  BYTE  HW_COLS  number of
displayed columns during one character clock cycle  BYTE  HW_BLANK  set
if the hardware blank feature is available

CRTC register  20 BYTE  REGISTERS  register DUMP of the CRTC registers
0-19.

CRTC internal registers  BYTE  REGNO  The current index in the CRTC
register file  BYTE  CHAR  The current cycle within the current
rasterline  BYTE  CHARLINE  The current character line  BYTE  YCOUNTER
The current rasterline in the character  BYTE  CRSRCNT  Framecounter
for the blinking cursor  BYTE  CRSRSTATE  if set the hardware cursor is
visible  BYTE  CRSRLINES  set if ycounter is within the active cursor
rasterlines for a char  WORD  CHARGEN_REL  relative base of currently
used character generator in ROM (in byte)  WORD  SCREEN_REL  screen
address to load the counter at the beginning of the next rasterline
WORD  VSYNC  number of rasterlines left within vsync; 0 = not in vsync
BYTE  VENABLE  vertical enable flipflop; 1= display, 0= blank.

(VICE-dependent?) variables  WORD  SCREEN_WIDTH  width of the current
display window  WORD  SCREEN_HEIGHT  height of the current display
window  WORD  SCREEN_XOFFSET  x position where the first character in a
line starts in the window...   WORD  HJITTER  ...but only after adding
this jitter  WORD  SCREEN_YOFFSET  x position where the first character
in a line starts in the window...   WORD  FRAMELINES  expected number
of rasterlines for the current frame  WORD  CURRENT_LINE  current
rasterline as seen from the CRTC

This value has been added in module version V1.1  BYTE  FLAG  Bit 0: If
1 then bit in VADDR_REVSWITCH must be set for reverse; if 0 then bit
must be cleared for reverse.   multitable

Here is the reference for the previous CRTC snapshot module. It is
outdated and will not be read by this and later versions of VICE.

Version numbers: Major 0, Minor 0.

.1 .4 .5  Type  Name  Description  BYTE  RASTERY  The number of clock
cycles from rasterlines start  WORD  RASTERLINE  The current rasterline
WORD  ADDRMASK  The address mask valid for the CRTC.  All memory
accesses are masked with this value  BYTE  HWFLAG  Bit 0: 1= hardware
cursor available.  Bit 1: 1= number of columns is doubled by external
hardware  20 BYTE  REGISTERS  register DUMP of the CRTC registers 0-19.
BYTE  CRSRSTATE  Hardware cursor: Bits 0-3: frame counter till next
crsr line toggle. Bit 7: 1= cursor line active  multitable


@EndNode

@Node "C64 memory module" "vice.guide/C64 memory module"
@Next "C128 memory module"
@Prev "CRTC module"
@Toc "Module formats"

C64 memory module
.................

The C64 memory module actually consists of two modules.  The "C64MEM"
module is mandatory and contains the RAM dump.  The "C64ROM" module is
optional and contains a dump of the ROM images.

The size of the C64 memory modules differs with each different memory
configuration. The RAM configuration is saved in the snapshot, and
restored when the snapshot is loaded. The attached cartridges are not
yet(!) saved and not yet restored upon load.

Version numbers: Major 0, Minor 0

The C64MEM module

.1 .4 .5  Type  Name  Description  BYTE  CPUDATA  CPU port data byte
BYTE  CPUDIR  CPU port direction byte  BYTE  EXROM  state of the EXROM
line (?)  BYTE  GAME  state of the GAME line (?)  ARRAY  RAM  64k RAM
dump  multitable

The C64ROM module

.1 .4 .5  Type  Name  Description  ARRAY  KERNAL  8k dump of the kernal
ROM  ARRAY  BASIC  8k dump of the basic ROM  ARRAY  CHARGEN  4k dump of
the chargen ROM  multitable


@EndNode

@Node "C128 memory module" "vice.guide/C128 memory module"
@Next "VIC20 memory module"
@Prev "C64 memory module"
@Toc "Module formats"

C128 memory module
..................

The C128 memory module actually consists of two modules.  The "C128MEM"
module is mandatory and contains the RAM dump.  The "C128ROM" module is
optional and contains a dump of the ROM images.

The size of the C128 memory modules differs with each different memory
configuration. The RAM configuration is saved in the snapshot, and
restored when the snapshot is loaded. The attached cartridges are also
restored upon load if they have been saved in the snapshot.

Version numbers: Major 0, Minor 0

The C128MEM module

.1 .4 .5  Type  Name  Description  12 BYTE  MMU  dump of the 12 MMU
registers  ARRAY  RAM  128k RAM dump banks 0 and 1  multitable

The C128ROM module

.1 .4 .5  Type  Name  Description  ARRAY  KERNAL  8k dump of the kernal
ROM  ARRAY  BASIC  32k dump of the basic ROM  ARRAY  EDITOR  4k dump of
the editor ROM  ARRAY  4k CHARGEN  dump of the chargen ROM  multitable


@EndNode

@Node "VIC20 memory module" "vice.guide/VIC20 memory module"
@Next "PET memory module"
@Prev "C128 memory module"
@Toc "Module formats"

VIC20 memory module
...................

The VIC20 memory module actually consists of two modules.  The
"VIC20MEM" module is mandatory and contains the RAM dump.  The
"VIC20ROM" module is optional and contains a dump of the ROM images.

The size of the VIC20 memory modules differs with each different memory
configuration. The RAM configuration is saved in the snapshot, and
restored when the snapshot is loaded. The attached cartridges are also
restored upon load if they have been saved in the snapshot.

The VIC20MEM module

Version numbers: Major 1, Minor 0

.1 .4 .5  Type  Name  Description  BYTE  CONFIG  Configuration
register.  Bits 0,1,2,3,5 reflect if the corresponding memory block is
RAM (bit=1) or not (bit=0).   ARRAY  RAM0  1k RAM dump $0000-$03ff
ARRAY  RAM1  4k RAM dump $1000-$1fff  ARRAY  COLORRAM  2k Color RAM,
$9400-$9bff  ARRAY  BLK0  if CONFIG & 1 then: 3k RAM dump $0400-$0fff
ARRAY  BLK1  if CONFIG & 2 then: 8k RAM dump $2000-$3fff  ARRAY  BLK2
if CONFIG & 4 then: 8k RAM dump $4000-$5fff  ARRAY  BLK3  if CONFIG & 8
then: 8k RAM dump $6000-$7fff  ARRAY  BLK5  if CONFIG & 32 then: 8k RAM
dump $a000-$bfff  multitable

The VIC20ROM module

Version numbers: Major 1, Minor 1

.1 .4 .5  Type  Name  Description  BYTE  CONFIG  Bit 0: 1= ROM block
$2*** enabled.  Bit 1: 1= ROM block $3*** enabled. Bit 2: 1= ROM block
$4*** enabled.  Bit 3: 1= ROM block $5*** enabled. Bit 4: 1= ROM block
$6*** enabled. Bit 5: 1= ROM block $7*** enabled. Bit 6: 1= ROM block
$A*** enabled. Bit 7: 1= ROM block $B*** enabled.   ARRAY  KERNAL  8k
KERNAL ROM image $e000-$ffff  ARRAY  BASIC  16k BASIC ROM image
$c000-$dfff  ARRAY  CHARGEN  4k CHARGEN ROM image  ARRAY  BLK1A  4k ROM
image $2*** (if CONFIG & 1)  ARRAY  BLK1B  4k ROM image $3*** (if
CONFIG & 2)  ARRAY  BLK3A  4k ROM image $6*** (if CONFIG & 16)  ARRAY
BLK3B  4k ROM image $7*** (if CONFIG & 32)  ARRAY  BLK5A  4k ROM image
$A*** (if CONFIG & 64)  ARRAY  BLK5B  4k ROM image $B*** (if CONFIG &
128)  ARRAY  BLK2A  4k ROM image $4*** (if CONFIG & 4; added in V1.1)
ARRAY  BLK2B  4k ROM image $5*** (if CONFIG & 8; added in V1.1)
multitable


@EndNode

@Node "PET memory module" "vice.guide/PET memory module"
@Next "CBM-II memory module"
@Prev "VIC20 memory module"
@Toc "Module formats"

PET memory module
.................

The PET memory module actually consists of three modules.  The "PETMEM"
module is mandatory and contains the RAM dump.  The "PETROM" module is
optional and contains a dump of the ROM images. The "PETDWW" module is
also optional and contains the image of the hires expansion board (if
enabled).

The size of the PET memory modules differs with each different memory
configuration.  The RAM configuration is saved in the snapshot, and
restored when the snapshot is loaded.

The PETMEM module

Version numbers: Major 1, Minor 3

.1 .4 .5  Type  Name  Description  BYTE  CONFIG  Configuration value.
Bits 0-3: 0= 40 col PET without CRTC; 1= 40 col PET with CRTC; 2 = 80
col PET (with CRTC); 3= SuperPET; 4= 8096; 5= 8296. Bit 6: 1= RAM at
$9***. Bit 7: 1= RAM at $A***.   BYTE  KEYBOARD  Keyboard type. 0= UK
business; 1= Graphics; 2= German business  BYTE  MEMSIZE  memory size
of low 32k in k (possible values 4, 8, 16, 32)  BYTE  CONF8X96  Value
of the 8x96 configuration register  BYTE  SUPERPET  SuperPET config.
Bit 0: 1= $9*** RAM enabled. Bit 1: 1= RAM write protected. Bit 2: 1=
CTRL register write protected. Bit 3: 0= DIAG pin active. Bits 4-7: RAM
block in use.   ARRAY  RAM  4-32k RAM (not 8296, size depends on
MEMSIZE)  ARRAY  VRAM  2/4k RAM (not 8296, size depends on CONFIG)
ARRAY  EXTRAM  64k expansion RAM (SuperPET and 8096 only)  ARRAY  RAM
128k RAM (8296 only)  -  -  The following item has been added in V1.1
BYTE  POSITIONAL  bit 0=0 = symbolic keyboard mapping, bit 0=1 =
positional mapping.   -  -  The following item has been added in V1.2
BYTE  EOIBLANK  bit 0=0 = EOI does not blank screen, bit 0=1 = EOI
blanks screen.   -  -  The following items have been added in V1.3  WORD
CPU_SWITCH  6502 / 6809 / PROG  BYTE  VAL, PREVODD, WANTODD  6702
dongle state information  WORD[8]  SHIFT  BYTE  SuperPET config 2
Extra bits due to the Super-OS/9 MMU. Bit 5: FIRQ disabled. Bit 6:
expansion memory in OS/9 flat mode.

multitable

The POSITIONAL item has been added in PETMEM snapshot version 1.1. It is
ignored by earlier restore routines (V1.0) and the V1.1 restore routines
do not change the current setting when reading a V1.0 snapshot.

In V1.2 the new EOIBLANK variable has been added. This implements the
"blank screen on EOI" feature that was previously linked to a wrong
resource.

In V1.3 the state for SuperPET has been added.

The PETROM module

Version numbers: Major 1, Minor 1

.1 .4 .5  Type  Name  Description  BYTE  CONFIG  Bit 0: 1= $9*** ROM
included. Bit 1: 1= $A*** ROM included. Bit 2: 1= $B*** ROM included.
Bit 3: 1= $e900-$efff ROM included. Bit 4: 1= SuperPET ROMs included.
ARRAY  KERNAL  4k KERNAL ROM image $f000-$ffff  ARRAY  EDITOR  2k
EDITOR ROM image $e000-$e7ff  ARRAY  CHARGEN  2k CHARGEN ROM image
ARRAY  ROM9  4k $9*** ROM image (if CONFIG & 1)  ARRAY  ROMA  4k $A***
ROM image (if CONFIG & 2)  ARRAY  ROMB  4k $B*** ROM image (if CONFIG &
4)  ARRAY  ROMC  4k $C*** ROM image  ARRAY  ROMD  4k $D*** ROM image
ARRAY  ROME9  7 blocks $e900-$efff ROM image (if CONFIG & 8)  -  -  The
following items have been added in V1.1  ROM6809  ROM6809  24k
$A000-$FFFF ROM   (if CONFIG & 16)  ARRAY  CHARGEN(2)  upper half of
CHARGEN (if CONFIG & 16)  multitable

The PETDWW module

For storing the state of the DWW hires expansion board, there is a
PETDWWPIA module, and a DWWMEM module.

The former has the same format as the PIA1.

.1 .4 .5  Type  Name  Description  WORD  SIZE  The size of the memory
dump that follows, or 0 if DWW disabled.   ARRAY  MEM  The memory in
the DWW card, SIZE bytes.   multitable


@EndNode

@Node "CBM-II memory module" "vice.guide/CBM-II memory module"
@Next "C500 data module"
@Prev "PET memory module"
@Toc "Module formats"

CBM-II memory module
....................

The CBM-II memory module actually consists of two modules.  The
"CBM2MEM" module is mandatory and contains the RAM dump.  The "CBM2ROM"
module is optional and contains a dump of the ROM images.

The size of the CBM-II memory modules differs with each different memory
configuration.  The RAM configuration is saved in the snapshot, and
restored when the snapshot is loaded.

Version numbers: Major 1, Minor 0

The CBM2MEM module

.1 .4 .5  Type  Name  Description  UBYTE  MEMSIZE  Memory size in 128k
blocks (1=128k, 2=256k, 4=512k, 8=1024k)  UBYTE  CONFIG  Bit 0 =
$f0800-$f0fff RAM, Bit 1 = $f1000-$f1fff RAM, Bit 2 = $f2000-$f3fff
RAM, Bit 3 = $f4000-$f5fff RAM, Bit 4 = $f6000-$f7fff RAM, Bit 5 =
$fc000-$fcfff RAM, Bit 6 = is a C500  UBYTE  HWCONFIG  Bit 0/1: model
line configuration  UBYTE  EXECBANK  CPUs execution bank register  UBYTE
INDBANK  CPUs indirection bank register  ARRAY  SYSRAM  2k system RAM
$f0000-$f07ff  ARRAY  VIDEO  2k video RAM $fd000-$fd7ff  ARRAY  RAM
RAM dump, size according to MEMSIZE  ARRAY  RAM08  if memsize < 1M and
CONFIG & 1 : 2k RAM $f0800-$f0fff  ARRAY  RAM1  if memsize < 1M and
CONFIG & 2 : 4k RAM $f1000-$f1fff  ARRAY  RAM2  if memsize < 1M and
CONFIG & 4 : 8k RAM $f2000-$f3fff  ARRAY  RAM4  if memsize < 1M and
CONFIG & 8 : 8k RAM $f4000-$f5fff  ARRAY  RAM6  if memsize < 1M and
CONFIG & 16 : 8k RAM $f6000-$f7fff  ARRAY  RAMC  if memsize < 1M and
CONFIG & 32 : 4k RAM $fc000-$fcfff  multitable

The RAM* arrays are only saved if the RAM itself is less than 1M.  If
the memory size is 1M then those areas are taken from the bank 15 area
of the normal RAM.

The memory array starts at $10000 if the memory size is less than 512k,
or at $00000 if 512k or more. In case of a C510, then the memory array
also always starts at $00000.

The CBM2ROM module

.1 .4 .5  Type  Name  Description  UBYTE  CONFIG  Bit 1: 1= $1*** ROM
image included. Bit 2: 1= $2000-$3fff ROM image included. Bit 3: 1=
$4000-$5fff ROM image included. Bit 4: 1= $6000-$7fff ROM image
included. Bit 5: 1= chargen ROM is VIC-II chargen, 0= CRTC chargen.
ARRAY  KERNAL  8 KERNAL ROM image ($e000-$efff)  ARRAY  BASIC  BASIC
ROM image ($8000-$bfff)  ARRAY  CHARGEN  4k CHARGEN ROM image  ARRAY
ROM1  4k cartridge ROM image for $1*** (if CONFIG & 2)  ARRAY  ROM2  8k
cartridge ROM image for $2000-$3fff (if CONFIG & 4)  ARRAY  ROM4  8k
cartridge ROM image for $4000-$5fff (if CONFIG & 8)  ARRAY  ROM6  8k
cartridge ROM image for $6000-$7fff (if CONFIG & 16)  multitable


@EndNode

@Node "C500 data module" "vice.guide/C500 data module"
@Prev "CBM-II memory module"
@Toc "Module formats"

C500 data module
................

The C500 data module contains simple state information not already saved
in the other modules.

Version numbers: Major 0, Minor 0

The C500DATA module

.1 .4 .5  Type  Name  Description  DWORD  IRQCLK  CPU clock ticks till
next 50Hz IRQ  multitable

Media images
************

Media images resources
======================

`DoodleOversizeHandling'
     Integer specifying the way the oversized input should be handled
     (all emulators except vsid).  (0: scale down, 1: crop left top, 2:
     crop center top, 3: crop right top, 4: crop left center, 5: crop
     center, 6: crop right center, 7: crop left bottom, 8: crop center
     bottom, 9: crop right bottom)

`DoodleUndersizeHandling'
     Integer specifying the way the undersized input should be handled
     (all emulators except vsid).  (0: scale, 1: borderize)

`DoodleMultiColorHandling'
     Integer specifying the way the multicolor to hires should be
     handled (all emulators except vsid).  (0: b&w, 1: 2 colors, 2: 4
     colors, 3: gray scale,  4: best cell colors)

`DoodleTEDLumHandling'
     Integer specifying the way the TED luminosity should be handled
     (all emulators except vsid).  (0: ignore, 1: dither)

`DoodleCRTCTextColor'
     Integer specifying the text color used when making screenshots
     from a CRTC window in doodle format (all emulators except vsid).
     (0: white, 1: amber, 2: green)

`KoalaOversizeHandling'
     Integer specifying the way the oversized input should be handled
     (all emulators except vsid).  (0: scale down, 1: crop left top, 2:
     crop center top, 3: crop right top, 4: crop left center, 5: crop
     center, 6: crop right center, 7: crop left bottom, 8: crop center
     bottom, 9: crop right bottom)

`KoalaUndersizeHandling'
     Integer specifying the way the undersized input should be handled
     (all emulators except vsid).  (0: scale, 1: borderize)

`KoalaTEDLumHandling'
     Integer specifying the way the TED luminosity should be handled
     (all emulators except vsid).  (0: ignore, 1: dither)

`KoalaCRTCTextColor'
     Integer specifying the text color used when making screenshots
     from a CRTC window in doodle format (all emulators except vsid).
     (0: white, 1: amber, 2: green)

`FFMPEGFormat'
     String specifying the current FFMPEG output driver.

`FFMPEGAudioBitrate'
     Integer specifying the current FFMPEG audio bitrate.

`FFMPEGVideoBitrate'
     Integer specifying the current FFMPEG video bitrate.

`FFMPEGAudioCodec'
     Integer specifying the current FFMPEG audio codec.

`FFMPEGVideoCodec'
     Integer specifying the current FFMPEG video codec.

`FFMPEGVideoHalveFramerate'
     Boolean, if true record only every other frame.

Media images command-line options
=================================

`-doodleoversize <method>'
     Select the way the oversized input should be handled
     (`DoodleOversizeHandling') (all emulators except vsid).  (0: scale
     down, 1: crop left top, 2: crop center top, 3: crop right top, 4:
     crop left center, 5: crop center, 6: crop right center, 7: crop
     left bottom, 8: crop center bottom, 9: crop right bottom)

`-doodleundersize <method>'
     Select the way the undersized input should be handled
     (`DoodleUndersizeHandling') (all emulators except vsid).  (0:
     scale, 1: borderize)

`-doodlemc <method>'
     Select the way the multicolor to hires should be handled
     (`DoodleMultiColorHandling') (all emulators except vsid).  (0:
     b&w, 1: 2 colors, 2: 4 colors, 3: gray scale, 4: best cell colors)

`-doodletedlum <method>'
     Select the way the TED luminosity should be handled
     (`DoodleTEDLumHandling') (all emulators except vsid).  (0: ignore,
     1: dither)

`-doodlecrtctextcolor <color>'
     Select the CRTC text color (`DoodleCRTCTextColor') (all emulators
     except vsid).  (0: white, 1: amber, 2: green)

`-koalaoversize <method>'
     Select the way the oversized input should be handled
     (`KoalaOversizeHandling') (all emulators except vsid).  (0: scale
     down, 1: crop left top, 2: crop center top, 3: crop right top, 4:
     crop left center, 5: crop center, 6: crop right center, 7: crop
     left bottom, 8: crop center bottom, 9: crop right bottom)

`-koalaundersize <method>'
     Select the way the undersized input should be handled
     (`KoalaUndersizeHandling') (all emulators except vsid).  (0:
     scale, 1: borderize)

`-koalatedlum <method>'
     Select the way the TED luminosity should be handled
     (`KoalaTEDLumHandling') (all emulators except vsid).  (0: ignore,
     1: dither)

`-koalacrtctextcolor <color>'
     Select the CRTC text color (`KoalaCRTCTextColor') (all emulators
     except vsid).  (0: white, 1: amber, 2: green)

`-ffmpegaudiobitrate <value>'
     Set bitrate for audio stream in media file

`-ffmpegvideobitrate <value>'
     Set bitrate for video stream in media file

Event history
*************

VICE supports recording an arbitrary session on the emulated machine and
playing back this session later. This is done by saving a snapshot at
the beginning of the recording session and then remembering all the
user interaction such as keyboard and joystick input. We call this an
'event history'.  The main purpose for having an event history is to
create game sessions, e.g. recording how to solve a game. An example
walkthrough for the well known game "Fort Apocalypse" is available.

This brief chapter will advise you how to record and playback such a
session.  Although it is based on the WinVICE x64 release and its user
interface, histories may be transferred to other machines and other
ports that support event history, e.g. the Unix port.

Recommended Settings
====================

When using the event history feature it is possible that the playback
session differs from what was done at recording time. This might arise
due to a problem in the initial snapshot or settings.  Here are some
suggestions to minimize the chance of failures in the session: a. Reset
to default settings.  b. Choose refresh rate 1/1.  c. Choose joystick
and Video/Doublesize settings as desired or needed.  d. SID engine must
be reSID (which is the default).  e. Choose Drive settings/Idle method:
None Do not change any settings during recording or playback!

Recorded Events
===============

The following is a list of the user interaction that will be recorded:
- Joystick movement and button - Keyboard - Resetting the machine (hard
and soft) - Attaching or detaching disk/tape images (see 8. Limitations)
- Datasette controls

Recording an Event History
==========================

Recording an event history will create one or two files for a snapshot
and the list of the user events. First, create an empty directory in
which these files are to be saved and then select this directory and
the name of the snapshot files via 'Snapshot//Select History
files/directory'.  Next, attach the disk or tape image with the game
you want to record and load and run the game.

Start recording via 'Snapshot//Start/Stop Recording History'.  Play the
game. All actions will be recorded.  After the game is finished, stop
recording via 'Snapshot//Start/Stop Recording History'. The selected
directory should now contain the two snapshot files (default ist
start.vsf and end.vsf).

Setting and Returning to Milestones
===================================

It is difficult to finish a game in one sitting and noone wants to
record all their mistakes and lost lives. Use the milestone feature in a
recording session in the following way:

Set a milestone when you have finished a level or completed a task
('Snapshot//Set recording milestone' or ALT-E). This will save the event
history and a snapshot of the machine to the file end.vsf but recording
will continue.

Return to the last milestone when you have made a mistake or lost a life
('Snapshot//Return to milestone' or ALT-U). This will reset the game
and the event history to the last milestone snapshot so that you can
try again.

Continuing an Event History
===========================

If you have stopped a recording session and want to continue it later,
you should create a backup of your start.vsf and end.vsf files first to
avoid overwriting them by accident.

Then change the event history start mode: 'Snapshot//Recording start
mode//Load existing snapshot'. When you start recording now, you will
continue where the session was stopped last time.

Another way of continuing an existing history is to start somewhere
inside the history (e.g. you have recorded 10 minutes of a game and
later recognize that you made a mistake after 6 minutes that makes it
impossible to finish the game).  For this you have to select the start
mode 'Overwrite playback'. Now you can start the playback with
'Snapshot//Start/Stop Playback History' and when you reach the point
where you want to change the history you can directly switch to
recording via 'Snapshot//Start/Stop Recording History'.

Playing Back an Event History
=============================

To play back an event history, select the directory with the history
files start.vsf and end.vsf via 'Snapshot//Select History directory'
and start the playback with 'Snapshot//Start/Stop Playback History'.
Enjoy!  During playback any user interaction is disabled.  The playback
stops when the end of the session is reached or if 'Snapshot//Select
History directory' is selected again.

Limitations and Suggestions
===========================

a. Snapshot files will be quite big (>1MB) if a disk image has been
attached.  If possible, use PRG or T64 images to reduce the size of
snapshot files.  b. Snapshots may not be 100% accurate even with all
the recommended settings.

Event history resources
=======================

`EventSnapshotDir'
     String specifying the directory used for loading and saving
     snapshots (all emulators except vsid).

`EventStartSnapshot'
     String specifying the filename for the start snapshot (all
     emulators except vsid).

`EventEndSnapshot'
     String specifying the filename for the end snapshot (all emulators
     except vsid).

`EventStartMode'
     Integer specifying how to start event recording (all emulators
     except vsid).  (0: save new snapshot, 1: load existing snapshot,
     2: reset, 3: playback)

`EventImageInclude'
     Boolean specifying whether to include ROM and Disk images in the
     snapshots (all emulators except vsid).

Event history command-line options
==================================

`-playback'
     Playback recorded events (all emulators except vsid).

`-eventsnapshotdir <Name>'
     Set event snapshot directory (`EventSnapshotDir') (all emulators
     except vsid).

`-eventstartsnapshot <Name>'
     Set event start snapshot filename (`EventStartSnapshot') (all
     emulators except vsid).

`-eventendsnapshot <Name>'
     Set event end snapshot filename (`EventEndSnapshot') (all
     emulators except vsid).

`-eventstartmode <Mode>'
     Set event start mode (`EventStartMode') (all emulators except
     vsid).  (0: save new snapshot, 1: load existing snapshot, 2:
     reset, 3: playback)

`-eventimageinc'
`+eventimageinc'
     Enable/disable the inclusion of disk images in the event
     (`EventImageInclude=1', `EventImageInclude=0') (all emulators
     except vsid).


@EndNode

@Node "Monitor" "vice.guide/Monitor"
@Next "c1541"
@Prev "Snapshots"
@Toc "Main"

Monitor
*******

Every VICE emulator has a complete built-in monitor, which can be used
to examine, disassemble and assemble machine language programs, as well
as debug them through breakpoints.  It can be activated by using the
"Activate monitor" command (left button menu).  Notice that in some
ports you have to run the emulator from a terminal emulation program
(such as `rxvt' or `xterm') in order to use the monitor.


 @{" Terminology " Link "Terminology"} 
 @{" Machine state commands " Link "Machine state commands"} 
 @{" Memory commands " Link "Memory commands"} 
 @{" Assembly commands " Link "Assembly commands"} 
 @{" Checkpoint commands " Link "Checkpoint commands"} 
 @{" General commands " Link "General commands"} 
 @{" Disk commands " Link "Disk commands"} 
 @{" Command file commands " Link "Command file commands"} 
 @{" Label commands " Link "Label commands"} 
 @{" Miscellaneous commands " Link "Miscellaneous commands"} 


@EndNode

@Node "Terminology" "vice.guide/Terminology"
@Next "Machine state commands"
@Prev "Monitor"
@Toc "Monitor"

Terminology
===========

`address_space'
     This refers to the range of memory locations and a set of
     registers.  This can be the addresses available to the computer's
     processor, the disk drive's processor or a specific memory
     configuration of one of the mentioned processors.

`bankname'
     The CPU can only see 64k of memory at any one time, due to its 16
     bit address bus. The C64 and other computers have more than this
     amount, and this is handled by banking: a memory address can have
     different contents, depending on the active memory bank.  A
     bankname names a specific bank in the current address_space.

`register'
     One of the following: program counter (PC), stack pointer (SP),
     accumulator (A), X register (X), or Y register (Y).

`address'
     A specific memory location in the range $0000 to $FFFF.

`address_range'
     Two addresses.  If the second address is less than the first, the
     range is assumed to wraparound from $FFFF to $0000.  Both addresses
     must be in the same address space.

`address_opt_range'
     An address or an address range.

`label'
     `label' is the name of a label. It must start with a dot (".") in
     order for the monitor to recognize it as a label. Register names
     preceeded by a dot (for example `.PC') are special labels that
     evaluate to value of the respective register at the time it is
     used, and thus can not be used as a regular label.

`prompt'
     The prompt has the format [x:y].  If x is -, memory reads from the
     monitor do not have side effects.  Otherwise, x is S.  The second
     part of the prompt, y, shows the default address space.

`checkpoint'
     The monitor has the ability to setup triggers that perform an
     action when a specified situation occurs.  There are three types of
     checkpoints; breakpoints, tracepoints and watchpoints.

`breakpoint'
     A breakpoint is triggered based on the program counter.  When it is
     triggered, the monitor is entered.

`tracepoint'
     Like breakpoints, a tracepoint is triggered based on the program
     counter.  Instead of entering the monitor, the program counter is
     printed and execution continues.

`watchpoint'
     Watchpoints are triggered by a read and/or write to an address.
     When a watchpoint is triggered, the monitor is entered.

`memmap'
     The memmap keeps track of RAM/ROM/IO read/write/execute accesses.
     The feature must be enabled with "-enable-memmap" configure
     option, as it might decrease performance notably on slower
     hardware. The option also enables CPU history.

`<...>'
     A data type.

`*'
     Zero or more occurrences.

`[...]'
     An optional argument.


@EndNode

@Node "Machine state commands" "vice.guide/Machine state commands"
@Next "Memory commands"
@Prev "Terminology"
@Toc "Monitor"

Machine state commands
======================

`backtrace'
`bt'
     Print JSR call chain (most recent call first). Stack offset
     relative to SP+1 is printed in parentheses. This is a best guess
     only.

`cpuhistory [<count>]'
`chis [<count>]'
     Show <count> last executed commands.  (disabled by default;
     configure with -enable-memmap to enable)

`dump "<filename>"'
     Write a snapshot of the machine into the file specified.  This
     snapshot is compatible with a snapshot written out by the UI.
     Note: No ROM images are included into the dump.

`goto <address>'
`g <address>'
     Change the PC to address and continue execution.

`io [<address>]'
     Display i/o registers. Invoking without an address shows a dump of
     the entire io range, if an address is given then details for the
     chip at the respective (base-)address are displayed (if available).

`next [<count>]'
`n [<count>]'
     Advance to the next instruction.  Subroutines are treated as a
     single instruction.

`registers [<reg_name> = <number> [, <reg_name> = <number>]*]'
`r [<reg_name> = <number> [, <reg_name> = <number>]*]'
     Assign respective registers.  With no parameters, display register
     values.

`reset [<type>]'
     Reset the machine or drive.  `type': 0 = soft, 1 = hard, 8-11 =
     drive.

`return'
`ret'
     Continues execution  and returns to the monitor just after the
     next RTS or RTI is executed.

`step [<count>]'
`z [<count>]'
     Single step through instructions.  An optional count allows
     stepping more than a single instruction at a time.

`stopwatch [reset]'
     Print the CPU cycle counter of the current device. 'reset' sets
     the counter to 0.

`undump "<filename>"'
     Read a snapshot of the machine from the file specified.


@EndNode

@Node "Memory commands" "vice.guide/Memory commands"
@Next "Assembly commands"
@Prev "Machine state commands"
@Toc "Monitor"

Memory commands
===============

`bank [<bankname>]'
     Without a bankname, display all available banks for the current
     address_space. With a bankname given, switch to the specified
     bank. If a bank is not completely filled (ROM banks for example)
     normally the `ram' bank is used where the bank has holes.  The
     `cpu' bank uses the bank currently used by the CPU.

`compare <address_range> <address>'
`c <address_range> <address>'
     Compare memory from the source specified by the address range to
     the destination specified by the address.  The regions may
     overlap.  Any values that miscompare are displayed using the
     default displaytype.

`device [c:|8:|9:]'
     Set the default address space to either the computer `c:' or the
     specified drive `8:' or `9:'

`fill <address_range> <data_list>'
`f <address_range> <data_list>'
     Fill memory in the specified address range with the data in
     <data_list>.  If the size of the address range is greater than the
     size of the data_list, the data_list is repeated.

`hunt <address_range> <data_list>'
`h <address_range> <data_list>'
     Hunt memory in the specified address range for the data in
     <data_list>.  If the data is found, the starting address of the
     match is displayed.  The entire range is searched for all possible
     matches.  The data list may have `xx' as a wildcard.

`i <address_opt_range>'
     Display memory contents as PETSCII text.

`ii <address_opt_range>'
     Display memory contents as screen code text

`mem [<data_type>] [<address_opt_range>]'
`m [<data_type>] [<address_opt_range>]'
     Display the contents of memory.  If no datatype is given, the
     default is used.  If only one address is specified, the length of
     data displayed is based on the datatype.  If no addresses are
     given, the 'dot' address is used.

`memmapshow [<mask>] [<address_opt_range>]'
`mmsh [<mask>] [<address_opt_range>]'
     Show the memmap. The mask can be specified to show only those
     locations with accesses of certain type(s). The mask is a number
     with the bits "ioRWXrwx", where RWX are for ROM and rwx for RAM.
     Optionally, an address range can be specified.  (disabled by
     default; configure with -enable-memmap to enable)

`memmapzap'
`mmzap'
     Clear the memmap.  (disabled by default; configure with
     -enable-memmap to enable)

`memmapsave "<filename>" <format>'
`mmsave "<filename>" <format>'
     Save the memmap as a picture. `format': 0 = BMP, 1 = PCX, 2 = PNG,
     3 = GIF, 4 = IFF.  (disabled by default; configure with
     -enable-memmap to enable)

`memchar [<data_type>] [<address_opt_range>]'
`mc [<data_type>] [<address_opt_range>]'
     Display the contents of memory as character data.  If only one
     address is specified, only one character is displayed.  If no
     addresses are given, the "dot" address is used.

`memsprite [<data_type>] [<address_opt_range>]'
`ms [<data_type>] [<address_opt_range>]'
     Display the contents of memory as sprite data.  If only one
     address is specified, only one sprite is displayed.  If no
     addresses are given, the "dot" address is used.

`move <address_range> <address>'
`t <address_range> <address>'
     Move memory from the source specified by the address range to the
     destination specified by the address.  The regions may overlap.

`screen'
`sc'
     Displays the contents of the screen.

`sidefx [on|off|toggle]'
`sfx [on|off|toggle]'
     Control how monitor generated reads affect memory locations that
     have read side-effects, like CIA interrupt registers for example.
     If the argument is 'on' then reads may cause side-effects.  If the
     argument is 'off' then reads don't cause side-effects.  If the
     argument is 'toggle' then the current mode is switched.  No
     argument displays the current state.

`> [<address>] <data_list>'
     Write the specified data at `address'.


@EndNode

@Node "Assembly commands" "vice.guide/Assembly commands"
@Next "Checkpoint commands"
@Prev "Memory commands"
@Toc "Monitor"

Assembly commands
=================

`a <address> [ <instruction> [: <instruction>]* ]'
     Assemble instructions to the specified address.  If only one
     instruction is specified, enter assembly mode (enter an empty line
     to exit assembly mode).

`disass [<address> [<address>]]'
`d [<address> [<address>]]'
     Disassemble instructions.  If two addresses are specified, they are
     used as a start and end address.  If only one is specified, it is
     treated as the start address and a default number of instructions
     are disassembled.  If no addresses are specified, a default number
     of instructions are disassembled from the dot address.


@EndNode

@Node "Checkpoint commands" "vice.guide/Checkpoint commands"
@Next "General commands"
@Prev "Assembly commands"
@Toc "Monitor"

Checkpoint commands
===================

`break [load|store|exec] [address [address] [if <cond_expr>]]'
     This command allows setting a breakpoint or listing the current
     breakpoints.  If no address is given, the currently valid
     checkpoints are printed.  If an address is given, a breakpoint is
     set for that address and the breakpoint number is printed.  The
     "load|store|exec" parameter can be either "load", "store" or "exec"
     (or any combination of these) to determine on which operation the
     monitor breaks. If not specified, the monitor breaks on "exec".  A
     conditional expression can also be specified for the breakpoint.
     For more information on conditions, see the CONDITION command.

`enable <checknum>'
`disable <checknum>'
     Each checkpoint can be enabled or disabled.  This command allows
     changing between these states.

`command <checknum> "<command>"'
     When checkpoint `checknum' is hit, the specified command is
     executed by the monitor.  Note that the `x' command is not yet
     supported as a command argument.

`condition <checknum> if <cond_expr>'
`cond <checknum> if <cond_expr>'
     Each time the specified checkpoint is examined, the condition is
     evaluated.  If it evalutes to true, the checkpoint is activated.
     Otherwise, it is ignores.  If registers are specified in the
     expression, the values used are those at the time the checkpoint is
     examined, not when the condition is set.

     Currently, the cond_expr is very limited. You can use registers
     (.A, .X, .Y, .PC, and .SP) and compare against other registers or
     absolute values. For example, the following are all valid
     conditions: .A == 0, .X == .Y, 8:.X == .X, .A != 5, .A < .X.

     However, you cannot specify memory contents and compare that.

`delete <checknum>'
`del <checknum>'
     Delete the specified checkpoint.

`ignore <checknum> [<count>]'
     Ignore a checkpoint after a given number of crossings.  If no
     count is given, the default value is 1.

`trace [load|store|exec] [address [address] [if <cond_expr>]]'
`tr [load|store|exec] [address [address] [if <cond_expr>]]'
     This command is similar to the `break' command except that it
     operates on tracepoints.  A tracepoint differs from a breakpoint by
     not stopping execution but simply printing the PC, giving the user
     an execution trace.  The second optional address can be used to
     specify the end of an range of addresses to be traced.  If no
     addresses are given, a list of all the checkpoints is printed.
     The "load|store|exec" parameter can be either "load", "store" or
     "exec" (or any combination of these) to determine which operation
     the monitor traces. If not specified, the monitor traces all
     operations.  A conditional expression can also be specified for
     the tracepoint.  For more information on conditions, see the
     CONDITION command.

`until [<address>]'
`un [<address>]'
     If no address is given, the currently valid breakpoints are
     printed.  If an address is given, a temporary breakpoint is set
     for that address and the breakpoint number is printed.  Control is
     returned to the emulator by this command.  The breakpoint is
     deleted once it is hit.

`watch [load|store|exec] [address [address] [if <cond_expr>]]'
`w [load|store|exec] [address [address] [if <cond_expr>]]'
     This command is similar to the `break' command except that it
     operates on watchpoints.  A watchpoint differs from a breakpoint by
     stopping on a read and/or write to an address or range of
     addresses.  If no addresses are given, a list of all the
     checkpoints is printed.  The "load|store|exec" parameter can be
     either "load", "store" or "exec" (or any combination of these) to
     determine on which operation the monitor breaks. If not specified,
     the monitor breaks on "load" and "store" operations.  A
     conditional expression can also be specified for the watchpoint.
     For more information on conditions, see the CONDITION command.


@EndNode

@Node "General commands" "vice.guide/General commands"
@Next "Disk commands"
@Prev "Checkpoint commands"
@Toc "Monitor"

General commands
================

`cd <directory>'
     Change the working directory.

`device [c:|8:|9:]'
`dev [c:|8:|9:]'
     Set the default address space to either the computer (`c:') or the
     disk (`8:|9:').

`dir [<directory>]'
`ls [<directory>]'
     Display the directory contents.

`pwd'
     Show current working directory.

`radix [H|D|O|B]'
`rad [H|D|O|B]'
     Set the default radix to hex, decimal, octal, or binary.  With no
     argument, the current radix is printed.


@EndNode

@Node "Disk commands" "vice.guide/Disk commands"
@Next "Command file commands"
@Prev "General commands"
@Toc "Monitor"

Disk commands
=============

`attach <filename> <device>'
     Attach file to device. (device 32 = cart)

`block_read <track> <sector> [<address>]'
`br <track> <sector> [<address>]'
     Read the block at the specified track and sector.  If an address is
     specified, the data is loaded into memory.  If no address is given,
     the data is displayed using the default datatype.

`block_write <track> <sector> <address>'
`bw <track> <sector> <address>'
     Write a block of data at `address' to the specified track and
     sector of disk in drive 8.

`detach <device>'
     Detach file from device. (device 32 = cart)

`@<disk command>'
     Perform a disk command on the currently attached disk image on
     drive 8.  The specified disk command is sent to the drive's
     channel #15.

`load "<filename>" <device> [<address>]'
`l "<filename>" <device> [<address>]'
     Load the specified file into memory.  If no address is given, the
     file is loaded to the address specified by the first two bytes
     read from the file.  If address is given, the file is loaded to
     the specified address and the first two bytes read from the file
     are skipped.  If device is 0, the file is read from the file
     system.

`list [<directory>]'
     List disk contents.

`bload "<filename>" <device> <address>'
`bl "<filename>" <device> <address>'
     Load the specified file into memory at the specified address.  If
     device is 0, the file is read from the file system.

`save "<filename>" <device> <address1> <address2>'
`s "<filename>" <device> <address1> <address2>'
     Save the memory from address1 to address2 to the specified file.
     Write two-byte load address.  If device is 0, the file is written
     to the file system.

`bsave "<filename>" <device> <address1> <address2>'
`bs "<filename>" <device> <address1> <address2>'
     Save the memory from address1 to address2 to the specified file.
     If device is 0, the file is written to the file system.


@EndNode

@Node "Command file commands" "vice.guide/Command file commands"
@Next "Label commands"
@Prev "Disk commands"
@Toc "Monitor"

Command file commands
=====================

`playback "<filename>"'
`pb "<filename>"'
     Monitor commands from the specified file are read and executed.
     This command stops at the end of file or when a STOP command is
     read.

`record "<filename>"'
`rec "<filename>"'
     After this command, all commands entered are written to the
     specified file until the STOP command is entered.

`stop'
     Stop recording commands.  See `record'.


@EndNode

@Node "Label commands" "vice.guide/Label commands"
@Next "Miscellaneous commands"
@Prev "Command file commands"
@Toc "Monitor"

Label commands
==============

`add_label <address> <label>'
`al <address> <label>'
     Map a given address to a label.  This label can be used when
     entering assembly code and is shown during disassembly.
     Additionally, it can be used whenever an address must be specified.

     <label> is the name of the label; it must start with a dot (".") in
     order for the monitor to recognize it as a label.

`delete_label [<address_space>] <label>'
`dl [<address_space>] <label>'
     Remove the specified label from the label tables.  If no address
     space is checked, all tables are checked.

`load_labels [<address_space>] "<filename>"'
`ll [<address_space>] "<filename>"'
     Load a file containing a mapping of labels to addresses.  If no
     address space is specified, the default readspace is used.

     The file must contain commands the monitor understands, e.g.
     add_label. The compiler cc65 can create such label files.

     Vice can also load label files created by the Acme assembler.
     Their syntax is e.g. "labelname = $1234 ; Maybe a comment". A dot
     will be added automatically to label names assigned in this way to
     fit to the Vice label syntax. Normally the semicolon seperates
     commands but after an assignment of this kind it may be used to
     start a comment to end of line, so unchanged Acme label files can
     be fed into Vice.

`save_labels [<address_space>] "<filename>"'
`sl [<address_space>] "<filename>"'
     Save labels to a file.  If no address space is specified, all of
     the labels are saved.

`show_labels [<address_space>]'
`shl [<address_space>]'
     Display current label mappings.  If no address space is specified,
     show all labels from default address space.

`clear_labels [<address_space>]'
`cl [<address_space>]'
     Clear current label mappings.  If no address space is specified,
     clear all labels from default address space.


@EndNode

@Node "Miscellaneous commands" "vice.guide/Miscellaneous commands"
@Prev "Label commands"
@Toc "Monitor"

Miscellaneous commands
======================

`cartfreeze'
     Use cartridge freeze.

`cpu <type>'
     Specify the type of CPU currently used (6502/z80).

`exit'
`x'
     Leave the monitor and return to execution.

`export'
`exp'
     Print out list of attached expansion port devices.

`help [<command>]'
     If no argument is given, prints out a list of all available
     commands.  If an argument is given, prints out specific help for
     that command.

`keybuf "<string>"'
     Put the specified string into the keyboard buffer. Note that you
     can specify specific keycodes by using C-style escaped hexcodes
     ("\x0a").

`print <expression>'
`p <expression>'
     Evaluate the specified expression and output the result.

`resourceget "<resource>"'
`resget "<resource>"'
     Displays the value of the `resource'.

`resourceset "<resource>" "<value>"'
`resset "<resource>" "<value>"'
     Sets the value of the `resource'.

`load_resources "<file>"'
`resload "<file>"'
     Load resources from `file'.

`save_resources "<file>"'
`ressave "<file>"'
     Save resources to `file'.

`screenshot "<filename>" [<format>]'
`scrsh "<filename>" [<format>]'
     Take a screenshot. `format': default = BMP, 1 = PCX, 2 = PNG, 3 =
     GIF, 4 = IFF.

`tapectrl <command>'
     Control the datasette. `command': 0 = stop, 1 = start, 2 =
     forward, 3 = rewind, 4 = record, 5 = reset, 6 = reset counter.

`quit'
     Exit the emulator immediately.

`~ <number>'
     Display the specified number in decimal, hex, octal and binary.


@EndNode

@Node "c1541" "vice.guide/c1541"
@Next "File formats"
@Prev "Monitor"
@Toc "Main"

c1541
*****

VICE is provided with a complete stand-alone disk image maintenance
utility, called `c1541'.

You can either invoke it from the command line or from within one of
the VICE emulators, using the "Run c1541" menu item which will open a
new terminal window with a running `c1541' in it.

The syntax is:

     c1541 [IMAGE1 [IMAGE2]] [COMMAND1 COMMAND2 ... COMMANDN]

`IMAGE1' and `IMAGE2' are disk image names that can be attached before
`c1541' starts.  `c1541' can handle up to two disk images at the same
time by using two virtual built-in drives, numbered `8' and `9';
`IMAGE1' (if present) is always attached to drive `8', while `IMAGE2'
is attached to drive `9'.

`COMMAND's specified on the command-line all begin with the minus sign
(`-'); if present, `c1541' executes them in the same order as they are
on the command line and returns a zero error code if they were
successful.  If any of the `COMMAND's fails, `c1541' stops and returns
a nonzero error code.

If no `COMMAND's are specified at all, `c1541' enters interactive mode,
where you can type commands manually.  Commands in interactive mode are
the same as commands in batch mode, but do not require a leading `-'.
As with the monitor, file name completion and command line editing with
history are provided via GNU `readline'.  Use the command `quit' or
press `C-d' to exit.


 @{" c1541 file specification " Link "c1541 file specification"} 
 @{" c1541 quoting " Link "c1541 quoting"} 
 @{" c1541 commands and options " Link "c1541 commands and options"} 
 @{" c1541 executing shell commands " Link "c1541 executing shell commands"} 


@EndNode

@Node "c1541 file specification" "vice.guide/c1541 file specification"
@Next "c1541 quoting"
@Prev "c1541"
@Toc "c1541"

Specifying files in c1541
=========================

When accessing CBM DOS files (i.e. files that reside on disk images),
c1541 uses a special syntax that lets you access files on both drive 8
and 9.  If you prepend the file name with `@8:' or `@9:', you will
specified that file is to be found or created on drive 8 and 9,
respectively.

For instance,

     @8:somefile

will name file named `somefile' on unit 8, while

     @9:somefile

will name file named `somefile' on unit 9.


@EndNode

@Node "c1541 quoting" "vice.guide/c1541 quoting"
@Next "c1541 commands and options"
@Prev "c1541 file specification"
@Toc "c1541"

Using quotes and backslashes
============================

You can use quotes (`"') in a command to embed spaces into file names.
For instance,

     read some file

will read file `some' from the disk image and write it into the file
system as `file', while

     read "some file"

will copy `some file' into the file system, with the name `some file'.

The backslash character (`\') has a special meaning too: it lets you
literally insert the following character no matter what it is.  For
example,

     read some\ file

will copy file `some file' into the file system, while

     read some\ file this\"file

will copy `some file' into the file system with name `this"file' (with
an embedded quote).


@EndNode

@Node "c1541 commands and options" "vice.guide/c1541 commands and options"
@Next "c1541 executing shell commands"
@Prev "c1541 quoting"
@Toc "c1541"

c1541 commands and options
==========================

This is a list of the `c1541' commands.  They are shown in their
interactive form, without the leading `-'.  Square brackets [] indicate
an optional part, and "<COMMAND>" translates to a disk command
according to CBM DOS, like "i0" for example.

`@ [<command>]'
     Execute specified CBM DOS command and print the current status of
     the drive.  If no `command' is specified, just print the status.

`? [<command>]'
     Explain specified command.  If no command is specified, list
     available ones.

`attach <diskimage> [<unit>]'
     Attach `diskimage' to `unit' (default unit is 8).

`block <track> <sector> <disp> [<drive>]'
     Show specified disk block in hex form.

`copy <source1> [<source2> ... <sourceN>] <destination>'
     Copy `source1' ... `sourceN' into destination.  If N > 1,
     `destination' must be a simple drive specifier (`@n:').

`delete <file1> [<file2> ... <fileN>]'
     Delete the specified files.

`exit'
     Exit (same as `quit').

`extract'
     Extract all the files to the file system.

`format <diskname,id> [<type> <imagename>] [<unit>]'
     If `unit' is specified, format the disk in unit `unit'.  If `type'
     and `imagename' are specified, create a new image named
     `imagename', attach it to unit 8 and format it.  `type' is a disk
     image type, and must be either `x64', `d64' (both VC1541/2031),
     `g64' (VC1541/2031 but in GCR coding), `d71' (VC1571), `d81'
     (VC1581), `d80' (CBM8050) or `d82' (CBM8250/1001).  Otherwise,
     format the disk in the current unit, if any.

`geosread <source> [<destination>]'
     Read GEOS <source> from the disk image and copy it as a Convert
     file into <destination> in the file system.  If <destination> is
     not specified, copy it into a file with the same name as <source>.

`geoswrite <source>'
     Write GOES Convert file <source> from the file system on a disk
     image.

`geosextract <source>'
     Extract all the files to the file system and GEOS Convert them.

`help [<command>]'
     Explain specified command.  If no command is specified, list
     available ones.

`info [<unit>]'
     Display information about unit `unit' (if unspecified, use the
     current one).

`list [<pattern>]'
`dir [<pattern>]'
     List files matching `pattern' (default is all files).

`name <diskname>[,<id>] <unit>'
     Change image name.

`p00save <enable> [<unit>]'
     Save P00 files to the file system.

`quit'
     Exit (same as `exit').

`read <source> [<destination>]'
     Read `source' from the disk image and copy it into `destination' in
     the file system.  If `destination' is not specified, copy it into a
     file with the same name as `source'.",

`rename <oldname> <newname>'
     Rename `oldname' into `newname'.  The files must be on the same
     drive.

`show [copying | warranty]'
     Show conditions for redistributing copies of C1541 (`copying') or
     the various kinds of warranty you do not have with C1541
     (`warranty').

`tape <t64name> [<file1> ... <fileN>]'
     Extract files from a T64 image.

`unit <number>'
     Make unit `number' the current unit.

`unlynx <lynxname> [<unit>]'
     Extract the specified Lynx image file into the specified unit
     (default is the current unit).

`validate [<unit>]'
     Validate the disk in unit `unit'.  If `unit' is not specified,
     validate the disk in the current unit.

`verbose'
     Enable verbose output.

`write <source> [<destination>]'
     Write `source' from the file system into `destination' on a disk
     image.

`zcreate <x64name> <zipname> [<label,id>]'
     Create an X64 disk image out of a set of four Zipcoded files named
     `1!zipname', `2!zipname', `3!zipname' and `4!zipname'.


@EndNode

@Node "c1541 executing shell commands" "vice.guide/c1541 executing shell commands"
@Prev "c1541 commands and options"
@Toc "c1541"

Executing shell commands
========================

If you want to execute a shell command from withing `c1541', just
prepend it with an exclamation mark (`!').  For example,

     !ls -la

will execute the command `ls -la', which will show you all the files in
the current directory.

c1541 examples
==============

`c1541 -attach test.d64 -list'
     Attach `test.d64' and show directory.

`c1541 -attach test.d64 -write test.prg testfile'
     Write `test.prg' to `test.d64' as `testfile'.

`c1541 -format "name,id" d64 disk.d64'
     Create a disk image in `d64' format, format it with the `name' and
     `id' and save it to `disk.d64'.

cartconv
********

The cartconv program is a cartridge conversion utility, it can convert
between binary and .crt images and it can 'insert' binary and/or .crt
images into the EPROM type of cartridges.

cartconv command line options
=============================

The cartconv program has the following parameters:

`-i "input name"'
     This parameter is mandatory, it should contain the name of the
     binary/.crt file you want to convert. For the EPROM type of
     cartridges this parameter can be used multiple times to insert
     images into the resulting file.

`-o "output name"'
     This parameter is mandatory, it should contain the name of the
     binary/.crt file you want to convert the input file to.

`-t carttype'
     This parameter is optional. It is only needed when converting to a
     .crt file. See below for the supported cartridge types.

`-n "cart name"'
     This parameter is optional and is used as the cartridge name when
     creating a .crt file.

`-l loadaddress'
     This parameter is optional and is used as the load-address when
     converting a .crt file to a .prg file, or when converting to a
     generic type .crt file.

`-f "input name"'
     This parameter is optional, and is meant to output information
     about the named file. It can't be used in conjuction with any of
     the other parameters.

`-r'
     This parameter is optional, it enables repair mode (accept broken
     input files)

`-p'
     This parameter is optional, when it is given cartconv will accept
     input files that do not match the cartridge sizes (useful for
     development).

`-b'
     This parameter is optional, when it is given cartconv will not
     omit banks that are empty (filled with $ff).

`-q'
     This parameter is optional, it disables all non-error messages

`--types'
     This parameter is optional. It shows all supported cartridge types
     (see below).

The following cartridge types are supported:

`bin'
     Binary .bin file (Default crt->bin)

`normal'
     Generic 8kB/12kB/16kB .crt file (Default bin->crt)

`prg'
     Binary C64 .prg file with load-address

`ulti'
     Ultimax mode 4kB/8kB/16kB .crt file

`ap'
     Atomic Power .crt file

`ar2'
     Action Replay MK2 .crt file

`ar3'
     Action Replay MK3 .crt file

`ar4'
     Action Replay MK4 .crt file

`ar5'
     Action Replay V5 .crt file

`cap'
     Capture .crt file

`comal'
     Comal 80 .crt file

`dep256'
     Dela EP256 .crt file, extra files can be inserted (1)(2)

`dep64'
     Dela EP64 .crt file, extra files can be inserted (1)

`dep7x8'
     Dela EP7x8 .crt file, extra files can be inserted (1)(2)(3)

`din'
     Dinamic .crt file

`dsm'
     Diashow-Maker .crt file

`easy'
     EasyFlash .crt file

`ecr'
     Easy Calc Result .crt file

`epyx'
     Epyx FastLoad .crt file

`exos'
     EXOS .crt file

`expert'
     Expert Cartridge .crt file

`f64'
     Formel 64 .crt file

`fc1'
     The Final Cartridge .crt file

`fc3'
     The Final Cartridge III .crt file

`fcp'
     Final Cartridge Plus .crt file

`ff'
     Freeze Frame .crt file

`fm'
     Freeze Machine .crt file

`fp'
     Fun Play .crt file

`gk'
     Game Killer .crt file

`gmod2'
     GMod2 .crt file

`gs'
     C64 Games System .crt file

`ide64'
     IDE64 .crt file

`ieee'
     IEEE-488 Interface .crt file

`kcs'
     KCS Power Cartridge .crt file

`ks'
     Kingsoft .crt file

`mach5'
     MACH 5 .crt file

`md'
     Magic Desk .crt file

`mf'
     Magic Formel .crt file

`mikro'
     Mikro Assembler .crt file

`mmc64'
     MMC64 .crt file

`mmcr'
     MMC Replay .crt file

`mv'
     Magic Voice .crt file

`ocean'
     Ocean .crt file

`p64'
     Prophet64 .crt file

`pf'
     Pagefox .crt file

`rep256'
     REX 256k EPROM Cart .crt file, extra files can be inserted
     (1)(2)(3)

`rgcd'
     RGCD .crt file

`ross'
     ROSS .crt file

`rr'
     Retro Replay .crt file

`rrnet'
     RR-Net MK3 .crt file

`ru'
     REX Utility .crt file

`s64'
     Snapshot 64 .crt file

`sb'
     Structured BASIC .crt file

`se5'
     Super Explode V5.0 .crt file

`sg'
     Super Games .crt file

`silver'
     Silverrock 128K Cartridge .crt file

`simon'
     Simons' BASIC .crt file

`ss4'
     Super Snapshot V4 .crt file

`ss5'
     Super Snapshot V5 .crt file

`star'
     Stardos .crt file

`wl'
     Westermann Learning .crt file

`ws'
     Warp Speed .crt file

`zaxxon'
     Zaxxon .crt file

   * (1) insertion of 32kB EPROM files supported.

   * (2) insertion of 8kB .crt/binary files supported.

   * (3) insertion of 16kB .crt/binary files supported.

cartconv examples
=================

`cartconv -i foo.crt -o foo.bin'
     Convert a .crt file to a binary file with no load-address.

`cartconv -t prg -i foo.crt -o foo.prg'
     Convert a .crt file to a .prg file with default load-address.

`cartconv -t prg -l 49152 -i foo.crt -o foo.prg'
     Convert a .crt file to a .prg file with 49152 as the load-address.

`cartconv -t ocean -i foo.bin -o foo.crt'
     Convert a binary file to an ocean type cartridge.

`cartconv -t dep64 -i dep64.bin -i eprom.prg -o foo.crt'
     Inserting a 32kB EPROM file into an dep64 type cartridge.
        * step 1 : use the dep64 binary file in VICE as a generic 8kB
          cartridge.

        * step 2 : generate an EPROM file.

        * step 3 : get the EPROM file to the host computer.

        * step 4 : insert the EPROM file into the final dep64 .crt file:

`cartconv -t dep256 -i dep256.bin -i somegame.crt -o foo.crt'
     Insert an 8kB .crt file into a dep256 type cartridge.

`cartconv -t rep256 -i rep256.bin -i foo1.crt -i foo2.crt -i foo3.crt -o foo.crt'
     Insert multiple 8kB .crt files into a rep256 type cartridge.

`cartconv -f foo.crt'
     Get information about a .crt file.

petcat
******

The petcat program is a text conversion utility, it can convert between
ASCII, PETSCII and tokenized BASIC.

petcat command line options
===========================

`-help'
     Output help text

`-?'
     Same as above

`-v'
     verbose output

`-c'
     controls (interpret also control codes) (default if textmode)

`-nc'
     no controls (suppress control codes in printout) (default if
     non-textmode)

`-ic'
     interpret control codes case-insensitive

`-d'
     output raw codes in decimal

`-h'
     write header (default if output is stdout)

`-nh'
     no header (default if output is a file)

`-skip <n>'
     Skip <n> bytes in the beginning of input file. Ignored on P00.

`-text'
     Force text mode

`-<version>'
     use keywords for <version> instead of the v7.0 ones

`-w<version>'
     tokenize using keywords on specified Basic version.

`-k<version>'
     list all keywords for the specified Basic version

`-k'
     list all Basic versions available.

`-l'
     Specify load address for program (in hex, no loading chars!).

`-o <name>'
     Specify the output file name

`-f'
     Force overwritten the output file. The default depends on the
     BASIC version.

BASIC Versions:
`10'
     Basic v10.0 (C65/C64DX)

`1p'
     Basic v1.0 (PET)

`2'
     Basic v2.0 (C64/VIC20/PET)

`3'
     Basic v3.5 (C16)

`40'
     Basic v4.0 (PET/CBM2)

`4e'
     Basic v2.0 with Basic v4.0 extension (C64)

`4v'
     Basic v2.0 with Basic v4.0 extension (VIC20)

`5'
     Basic v2.0 with Basic v5.0 extension (VIC20)

`70'
     Basic v7.0 (C128)

`71'
     Basic v7.0 with Basic v7.1 extension (C128)

`a'
     Basic v2.0 with AtBasic (C64)

`bk'
     Basic v2.0 with Kipper Basic (C64)

`blarg'
     Basic v2.0 with Blarg (C64)

`bob'
     Basic v2.0 with Basic on Bails (C64)

`bsx'
     Basic v2.0 with Basex (C64)

`bwarsaw'
     Basic v2.0 with Warsaw Basic (C64)

`bws'
     Basic v2.0 with WS Basic (C64)

`bwsf'
     Basic v2.0 with WS Basic final (C64)

`drago'
     Basic v2.0 with Drago basic v2.2 (C64)

`easy'
     Basic v2.0 with Easy Basic (VIC20)

`eve'
     Basic v2.0 with Eve Basic (C64)

`exp20'
     Basic v2.0 with Expanded Basic (VIC20)

`exp64'
     Basic v2.0 with Expanded Basic (C64)

`f'
     Basic v2.0 with Final Cartridge III (C64)

`game'
     Basic v2.0 with Game Basic (C64)

`graph'
     Basic v2.0 with Graphics basic (C64)

`lightning'
     Basic v2.0 with Basic Lightning (C64)

`magic'
     Basic v2.0 with Magic Basic (C64)

`mighty'
     Basic v2.0 with Mighty Basic by Craig Bruce (VIC20)

`pegasus'
     Basic v2.0 with Pegasus Basic v4.0 (C64)

`reu'
     Basic v2.0 with REU-Basic (C64)

`simon'
     Basic v2.0 with Simons' Basic extension (C64)

`speech'
     Basic v2.0 with Speech Basic v2.7 (C64)

`superbas'
     Basic v2.0 with Super Basic (C64)

`superexp'
     Basic v2.0 with Super Expander (VIC20)

`supergra'
     Basic v2.0 with Supergrafik 64 (C64)

`sxc'
     Basic v2.0 with Super Expander Chip (C64)

`tt64'
     Basic v2.0 with The Tool 64 (C64)

`turtle'
     Basic v2.0 with Turtle Basic by Craig Bruce (VIC20)

`ultra'
     Basic v2.0 with Ultrabasic-64 (C64)

`xbasic'
     Basic v2.0 with Xbasic (C64)

petcat examples
===============

`petcat -2 -o outputfile.txt -- inputfile.prg'
     Convert inputfile.prg to a text file in outputfile.txt, using
     BASIC V2 only

`petcat -wsimon -o outputfile.prg -- inputfile.txt'
     Convert inputfile.txt to a PRG file in outputfile.prg, using
     Simons' BASIC


@EndNode

@Node "File formats" "vice.guide/File formats"
@Next "Acknowledgments"
@Prev "c1541"
@Toc "Main"

The emulator file formats
*************************

This chapter gives a technical description of the various files
supported by the emulators.


 @{" T64 " Link "T64"}                          The tape image format
 @{" G64 " Link "G64"}                          The GCR-encoded disk image format
 @{" D64 " Link "D64"}                          The D64 disk image format
 @{" D71 " Link "D71"}                          The D71 disk image format
 @{" D80 " Link "D80"}                          The D80 disk image format
 @{" D81 " Link "D81"}                          The D81 disk image format
 @{" D82 " Link "D82"}                          The D82 disk image format
 @{" X64 " Link "X64"}                          The X64 disk image format
 @{" P00 " Link "P00"}                          The P00 image format


@EndNode

@Node "T64" "vice.guide/T64"
@Next "G64"
@Prev "File formats"
@Toc "File formats"

The T64 tape image format
=========================

(This section was taken from the C64S distribution.)

The `T64' File Structure was developed by Miha Peternel for use in the
C64S emulator.  It is easy to use and allows future extensions.


 @{" T64 file structure " Link "T64 file structure"} 
 @{" T64 tape record " Link "T64 tape record"} 
 @{" T64 file record " Link "T64 file record"} 


@EndNode

@Node "T64 file structure" "vice.guide/T64 file structure"
@Next "T64 tape record"
@Prev "T64"
@Toc "T64"

T64 File structure
------------------

.3 .3 .4  Offset  Size  Description  0  64  tape record  64  32*n  file
records for n directory entries  64+32*n  varies  binary contents of
the files  multitable


@EndNode

@Node "T64 tape record" "vice.guide/T64 tape record"
@Next "T64 file record"
@Prev "T64 file structure"
@Toc "T64"

Tape Record
-----------

.3 .3 .4  Offset  Size  Description  0  32  DOS tape description + EOF
(for type)  32  2  tape version ($0200)  34  2  number of directory
entries  36  2  number of used entries (can be 0 in my loader)  38  2
free  40  24  user description as displayed in tape menu  multitable


@EndNode

@Node "T64 file record" "vice.guide/T64 file record"
@Prev "T64 tape record"
@Toc "T64"

File record
-----------

.3 .3 .4  Offset  Size  Description  0  1  entry type (see below)  1  1
C64 file type  2  2  start address  4  2  end address  6  2  free  8  4
offset of file contents start within T64 file  12  4  free  16  16
C64 file name  multitable

Valid entry types are:

.3 .7  Code  Explanation  `0'  free entry  `1'  normal tape file  `2'
tape file with header: header is saved just before file data  `3'
memory snapshot v0.9, uncompressed  `4'  tape block  `5'  digitized
stream  `6' ... `255'  reserved  multitable

Notes:

   * VICE only supports file type `1'.

   * Types `3', `4' and `5' are subject to change (and are rarely
     used).


@EndNode

@Node "G64" "vice.guide/G64"
@Next "D64"
@Prev "T64"
@Toc "File formats"

The G64 GCR-encoded disk image format
=====================================

(This section was contributed by Peter Schepers and slightly edited by
Ettore Perazzoli.)

This format was defined in 1998 as a cooperative effort between several
emulator people, mainly Per Håkan Sundell, author of the CCS64 C64
emulator, Andreas Boose of the VICE CBM emulator team and Joe
Forster/STA, the author of Star Commander.  It was the first real public
attempt to create a format for the emulator community which removed
almost all of the drawbacks of the other existing image formats, namely
`D64'.

The intention behind `G64' is not to replace the widely used `D64'
format, as `D64' works fine with the vast majority of disks in
existence.  It is intended for those small percentage of programs which
demand to work with the 1541 drive in a non-standard way, such as
reading or writing data in a custom format.  The best example is with
speeder software such as Action Cartridge in Warp Save mode or Vorpal
which write track/sector data in another format other than standard
GCR.  The other obvious example is copy-protected software which looks
for some specific data on a track, like the disk ID, which is not
stored in a standard `D64' image.

`G64' has a deceptively simply layout for what it is capable of doing.
We have a signature, version byte, some predefined size values, and a
series of offsets to the track data and speed zones.  It is what's
contained in the track data areas and speed zones which is really at the
heart of this format.

Each track entry in simply the raw stream of GCR data, just what a read
head would see when a diskette is rotating past it.  How the data gets
interpreted is up to the program trying to access the disk.  Because the
data is stored in such a low-level manner, just about anything can be
done.  Most of the time I would suspect the data in the track would be
standard sectors, with SYNC, GAP, header, data and checksums.  The
arrangement of the data when it is in a standard GCR sector layout is
beyond the scope of this document.

Since it is a flexible format in both track count and track byte size,
there is no "standard" file size.  However, given a few constants like
42 tracks and halftracks, a track size of 7928 bytes and no speed offset
entries, the typical file size will a minimum of 333744 bytes.

Below is a dump of the header, broken down into its various parts.
After that will be an explanation of the track offset and speed zone
offset areas, as they demand much more explanation.

     Addr  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
     ----  -----------------------------------------------
     0000: 47 43 52 2D 31 35 34 31 00 54 F8 1E .. .. .. ..

.2 .8  Offset  Description  $0000-0007  File signature (`GCR-1541')
$0008  `G64' version (presently only $00 defined)  $0009  Number of
tracks in image (usually $54, decimal 84)  $000A-000B  Size of each
stored track in bytes (usually 7928, or $1EF8) in LO/HI format.
multitable

An obvious question here is "why are there 84 tracks defined when a
normal `D64' disk only has 35 tracks?"  Well, by definition, this image
includes all half-tracks, so there are actually 42 tracks and 42 half
tracks.  The 1541 stepper motor can access up to 42 tracks and the
in-between half-tracks.  Even though using more than 35 tracks is not
typical, it was important to define this format from the start with what
the 1541 is capable of doing, and not just what it typically does.

At first, the defined track size value of 7928 bytes may seem to be
arbitrary, but it is not.  It is determined by the fastest write speed
possible (speed zone 0), coupled with the average rotation speed of the
disk (300 rpm).  After some math, the answer that actually comes up is
7692 bytes.  Why the discrepency between the actual size of 7692 and the
defined size of 7928? Simply put, not all drives rotate at 300 rpm.
Some can be faster or slower, so a upper safety margin of +3% was built
added, in case some disks rotate slower and can write more data.  After
applying this safety factor, and some rounding-up, 7928 bytes per track
was arrived at.

Also note that this upper limit of 7928 bytes per track really only
applies to 1541 and compatible disks.  If this format were applied to
another disk type like the SFD1001, this value would be higher.

Below is a dump of the first section of a `G64' file, showing the
offsets to the data portion for each track and half-track entry.
Following that is a dump of the speed zone offsets.

     Addr  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
     ----  -----------------------------------------------
     0000: .. .. .. .. .. .. .. .. .. .. .. .. AC 02 00 00
     0010: 00 00 00 00 A6 21 00 00 00 00 00 00 A0 40 00 00
     0020: 00 00 00 00 9A 5F 00 00 00 00 00 00 94 7E 00 00
     0030: 00 00 00 00 8E 9D 00 00 00 00 00 00 88 BC 00 00
     0040: 00 00 00 00 82 DB 00 00 00 00 00 00 7C FA 00 00
     0050: 00 00 00 00 76 19 01 00 00 00 00 00 70 38 01 00
     0060: 00 00 00 00 6A 57 01 00 00 00 00 00 64 76 01 00
     0070: 00 00 00 00 5E 95 01 00 00 00 00 00 58 B4 01 00
     0080: 00 00 00 00 52 D3 01 00 00 00 00 00 4C F2 01 00
     0090: 00 00 00 00 46 11 02 00 00 00 00 00 40 30 02 00
     00A0: 00 00 00 00 3A 4F 02 00 00 00 00 00 34 6E 02 00
     00B0: 00 00 00 00 2E 8D 02 00 00 00 00 00 28 AC 02 00
     00C0: 00 00 00 00 22 CB 02 00 00 00 00 00 1C EA 02 00
     00D0: 00 00 00 00 16 09 03 00 00 00 00 00 10 28 03 00
     00E0: 00 00 00 00 0A 47 03 00 00 00 00 00 04 66 03 00
     00F0: 00 00 00 00 FE 84 03 00 00 00 00 00 F8 A3 03 00
     0100: 00 00 00 00 F2 C2 03 00 00 00 00 00 EC E1 03 00
     0110: 00 00 00 00 E6 00 04 00 00 00 00 00 E0 1F 04 00
     0120: 00 00 00 00 DA 3E 04 00 00 00 00 00 D4 5D 04 00
     0130: 00 00 00 00 CE 7C 04 00 00 00 00 00 C8 9B 04 00
     0140: 00 00 00 00 C2 BA 04 00 00 00 00 00 BC D9 04 00
     0150: 00 00 00 00 B6 F8 04 00 00 00 00 00 .. .. .. ..

.2 .8  Offset  Description  $000C-000F  Offset to stored track 1.0
($000002AC, in LO/HI format, see below for more)  $0010-0013  Offset to
stored track 1.5 ($00000000)  $0014-0017  Offset to stored track 2.0
($000021A6)  ...   $0154-0157  Offset to stored track 42.0 ($0004F8B6)
$0158-015B  Offset to stored track 42.5 ($00000000)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
           -----------------------------------------------
     0150: .. .. .. .. .. .. .. .. .. .. .. .. 03 00 00 00
     0160: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     0170: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     0180: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     0190: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     01A0: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     01B0: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     01C0: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     01D0: 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00
     01E0: 00 00 00 00 02 00 00 00 00 00 00 00 02 00 00 00
     01F0: 00 00 00 00 02 00 00 00 00 00 00 00 02 00 00 00
     0200: 00 00 00 00 02 00 00 00 00 00 00 00 02 00 00 00
     0210: 00 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00
     0220: 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00
     0230: 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00
     0240: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
     0250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     02A0: 00 00 00 00 00 00 00 00 00 00 00 00 .. .. .. ..

.2 .8  Offset  Description  $015C-015F  Speed zone entry for track 1
($03, in LO/HI  format, see below for more)  $0160-0163  Speed zone
entry for track 1.5 ($03)  ...   $02A4-02A7  Speed zone entry for track
42 ($00)  $02A8-02AB  Speed zone entry for track 42.5 ($00)  multitable

Starting here at $02AC is the first track entry (from above, it is the
first entry for track 1.0)

The track offsets (from above) require some explanation.  When one is
set to all 0's, no track data exists for this entry.  If there is a
value, it is an absolute reference into the file (starting from the
beginning of the file).  From the track 1.0 entry we see it is set for
$000002AC.  Going to that file offset, here is what we see...

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
           -----------------------------------------------
     02A0: .. .. .. .. .. .. .. .. .. .. .. .. 0C 1E FF FF
     02B0: FF FF FF 52 54 B5 29 4B 7A 5E 95 55 55 55 55 55
     02C0: 55 55 55 55 55 55 FF FF FF FF FF 55 D4 A5 29 4A
     02D0: 52 94 A5 29 4A 52 94 A5 29 4A 52 94 A5 29 4A 52

.2 .8  Offset  Description  $02AC-02AD  Actual size of stored track
(7692 or $1E0C, in LO/HI format)  $02AE-02AE+$1E0C  Track data
multitable

Following the track data is filler bytes.  In this case, there are 368
bytes of unused space.  This space can contain anything, but for the
sake of those wishing to compress these images for storage, they should
all be set to the same value.  In the sample I used, these are all set
to $FF.

Below is a dump of the end of the track 1.0 data area.  Note the actual
track data ends at address $20B9, with the rest of the block being
unused, and set to $FF.

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
           -----------------------------------------------
     1FE0: 52 94 A5 29 4A 52 94 A5 29 4A 52 94 A5 29 4A 52
     1FF0: 94 A5 29 4A 52 94 A5 29 4A 52 94 A5 29 4A 52 94
     2000: A5 29 4A 52 94 A5 29 4A 52 94 A5 29 4A 52 94 A5
     2010: 29 4A 52 94 A5 29 4A 52 94 A5 29 4A 52 94 A5 29
     2020: 4A 52 94 A5 29 4A 52 94 A5 29 4A 52 94 A5 29 4A
     2030: 55 55 55 55 55 55 FF FF FF FF FF FF FF FF FF FF
     2040: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2070: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2080: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2090: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     20A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     20B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     20C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     20D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     20E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     20F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2100: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2110: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2120: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2130: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2140: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2150: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2160: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2170: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2180: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     2190: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
     21A0: FF FF FF FF FF FF .. .. .. .. .. .. .. .. .. ..

The speed offset entries can be a little more complex. The 1541 has four
speed zones defined, which means the drive can write data at four
distinct speeds.  On a normal 1541 disk, these zones are as follows:

.5 .5  Track Range  Speed Zone  1-17  3  (highest writing speed)  18-24
2  25-30  1  31 and up  0 (lowest writing speed)  multitable

Note that you can, through custom programming of the 1541, change the
speed zone of any track to something different (change the 3 to a 0) and
write data differently.  From the dump of the speed offset entries
above, we see that all the entries are in the range of 0-3. If any entry
is less than 4, this is not considered a speed offset but defines the
whole track to be recorded at that one speed.

In the example I had, there were no offsets defined, so no speed zone
dump can be shown.  However, I can define what should be there.  You
will have a block of data, 1982 bytes long.  Each byte is encoded to
represent the speed of 4 bytes in the track offset area, and is broken
down as follows:

     Speed entry $FF:  in binary %11111111
                                  |'|'|'|'
                                  | | | |
                                  | | | +- 4'th byte speed (binary 11, 3 dec)
                                  | | +--- 3'rd byte speed (binary 11, 3 dec)
                                  | +----- 2'nd byte speed (binary 11, 3 dec)
                                  +------- 1'st byte speed (binary 11, 3 dec)

It was very smart thinking to allow for two speed zone settings, one in
the offset block and another defining the speed on a per-byte basis.  If
you are working with a normal disk, where each track is one constant
speed, then you don't need the extra blocks of information hanging
around the image, wasting space.

What may not be obvious is the flexibility of this format to add tracks
and speed offset zones at will.  If a program decides to write a track
out with varying speeds, and no speed offset exist, a new block will be
created by appending it to the end of the image, and the offset pointer
for that track set to point to the new block.  If a track has no offset
yet, meaning it doesn't exist (like a half-track), and one needs to be
added, the same procedure applies.  The location of the actual track or
speed zone data is not important, meaning they do not have to be in any
particular order since they are all referenced by the offsets at the
beginning of the image.

The P64 NRZI flux pulse disk image format
=========================================

This section is taken from "P64 file format specification" by Benjamin
'BeRo' Rosseaux.

All values are in little endian order !

P64 Header Layout
-----------------

             0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
           +---------------------------------------------------------------+
     0000: |'P'|'6'|'4'|'-'|'1'|'5'|'4'|'1'|    Version    |     Flags     |
           +---------------+---------------+-------------------------------+
     0010: |     Size      | CRC32Checksum |
           +-------------------------------+

Version:  File format version, current is 0x00000000

Size   Size of the following whole chunk content stream

Flags:  Bit    0 = Write protect                    Bit 1-31 =
Reserved, all set to 0 when creating a file,
  preserve existing value when updating

CRC32CheckSum:  CRC32 checksum of the following whole chunk content
stream

P64 Chunk Header Layout
-----------------------

             0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
           +-----------------------------------------------+
     0000: |Chunk Signature|      Size     | CRC32Checksum |
           +-----------------------------------------------+

Chunk signature:  Signature of chunk

Size:  Size of the chunk data

CRC32CheckSum:  CRC32 checksum of the chunk data

P64 Chunk 'HTPx' Layout
-----------------------

| x = half track index byte |
+--------------------------+

Track 18 = Half track 36 = Half track index byte decimal value 36

Half track NRZI transition flux pulse data chunk block

             0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
           +---------------------------------------------------------------+
     0000: |  Count pulses |     Size      | ..... Range-encoded data .... |
           +---------------------------------------------------------------+

Count pulses:  Count of the NRZI transition flux pulses in half track

Size:  Size of the range-encoded data

'HTPx' Range encoded data format
--------------------------------

Hint: For a working C implememtation see p64.c and p64.h

The range coder is a FPAQ0-style range coder combined with 12-bit
0-order models, one model per byte with one bit per byte processing.

      +--------------------------------------------------------------------------+
      |   Sub stream     | Count of models |  Size per model  | Total value bits |
      +------------------+-----------------+------------------+------------------+
      |     Position     |        4        |      65536       |        32        |
      +------------------+-----------------+------------------+------------------+
      |     Strength     |        4        |      65536       |        32        |
      +------------------+-----------------+------------------+------------------+
      |   Position flag  |        1        |        2         |        1         |
      +------------------+-----------------+------------------+------------------+
      |   Strenth flag   |        1        |        2         |        1         |
      +------------------+-----------------+------------------+------------------+
      +===Total models===|        10       |==================|==================|
      +--------------------------------------------------------------------------+

All initial model state values are initialized with zero.

All initial model probability values are initialized with 2048.

These model probability values will be updating in a adaptive way on the
fly and not precalculated before the encoding and even not loaded before
the decoding, see pseudo code below.

16000000 Hz / 5 rotations per second at 300 RPM = maximal 3200000 flux
pulses

So NRZI transition flux pulse positions are in the 0 .. 3199999 value
range, which is also a exact single rotation, where each time unit is a
cycle at 16 MHz with 300 RPM as a mapping for the ideal case.

The NRZI transition flux pulse stength are in the 0x00000000 ..
0xffffffff value range, where 0xffffffff indices a strong flux pulse,
that always triggers, and 0x00000001 indices a weak flux pulse, that
almost never triggers, and 0x00000000 indices a flux pulse, that
absolutly never triggers.

For 32-bit values, the model sub streams are subdivided byte wide in a
little-endian manner, and each byte is processed bitwise with model
probability shifting of 4 bits, just as:

Pascal-Style pseudo code:
     procedure WriteDWord(Model, Value : longword);
     var ByteValue, ByteIndex, Context, Bit : longword;
     begin
       for ByteIndex := 0 to 3 do begin
         ByteValue := (Value shr (ByteIndex shl 3)) and $ff;
         Context := 1;
         for Bit := 7 downto 0 do begin
           Context := (Context shl 1) or RangeCoderEncodeBit(
                         RangeCoderProbabilities[
                          RangeCoderProbabilityOffsets[Model + ByteIndex] +
                          (((RangeCoderProbabilityStates[Model + ByteIndex]
                          shl 8) or Context) and $ffff)], 4, (ByteValue shr
                          Bit) and 1);
         end;
         RangeCoderProbabilityStates[Model+ByteIndex] := ByteValue;
       end;
     end;

And for 1-bit flag values it is much simpler, but also with model
probability shifting of 4 bits, just as:

Pascal-Style pseudo code:
     procedure WriteBit(Model, Value : longword);
     begin
        RangeCoderProbabilityStates[Model] :=
          RangeCoderEncodeBit(RangeCoderProbabilities[
            RangeCoderProbabilityOffsets[Model] +
              RangeCoderProbabilityStates[Model]], 4, Value and 1);
     end;

The position and strength values are delta-encoded. If a value is equal
to the last previous value, then the value will not encoded, instead, a
flag for this will encoded. First the position value will encoded, then
the stength value. If the last position delta is 0, then it is a track
stream end marker.

Pascal-Style pseudo code:
     LastPosition := 0;
     PreviousDeltaPosition := 0
     
     LastStrength := 0;
     
     for PulseIndex := 0 to PulseCount - 1 do begin
     
       DeltaPosition := Pulses[PulseIndex].Position - LastPosition;
       if PreviousDeltaPosition <> DeltaPosition then begin
         PreviousDeltaPosition := DeltaPosition;
         WriteBit(ModelPositionFlag, 1)
         WriteDWord(ModelPosition, DeltaPosition);
       end else begin
         WriteBit(ModelPositionFlag, 0);
       end;
       LastPosition := Pulses[PulseIndex].Position;
     
       if LastStrength <> Pulses[PulseIndex].Strength then begin
         WriteBit(ModelStrengthFlag, 1)
         WriteDWord(ModelStrength, Pulses[PulseIndex].Strength - LastStrength);
       end else begin
         WriteBit(ModelStrengthFlag, 0);
       end;
       LastStrength := Pulses^[PulseIndex].Strength;
     
     end;
     
     // End code
     WriteBit(ModelPositionFlag, 1);
     WriteDWord(ModelPosition, 0);

The decoding is simply just in the another direction way.

Pseudo code for a FPAQ0-style carryless range coder:

Pascal-Style pseudo code:
     procedure RangeCoderInit; // At encoding and decoding start
     begin
       RangeCode := 0;
       RangeLow := 0;
       RangeHigh := $ffffffff;
     end;
     
     procedure RangeCoderStart; // At decoding start
     var Counter : longword;
     begin
       for Counter := 1 to 4 do begin
        RangeCode := (RangeCode shl 8) or ReadByteFromInput;
       end;
     end;
     
     procedure RangeCoderFlush; // At encoding end
     var Counter : longword;
     begin
       for Counter := 1 to 4 do begin
         WriteByteToOutput(RangeHigh shr 24);
         RangeHigh := RangeHigh shl 8;
       end;
     end;
     
     procedure RangeCoderEncodeNormalize;
     begin
       while ((RangeLow xor RangeHigh) and $ff000000) = 0 do begin
        WriteByteToOutput(RangeHigh shr 24);
        RangeLow := RangeLow shl 8;
        RangeHigh := (RangeHigh shl 8) or $ff;
       end;
     end;
     
     function RangeCoderEncodeBit(var Probability : longword; Shift,
                                  BitValue : longword) : longword;
     begin
       RangeMiddle := RangeLow + (((RangeHigh - RangeLow) shr 12) *
                                   Probability);
       if BitValue <> 0 then begin
         inc(Probability, ($fff - Probability) shr Shift);
         RangeHigh := RangeMiddle;
       end else begin
         dec(Probability, Probability shr Shift);
         RangeLow := RangeMiddle + 1;
       end;
       RangeCoderEncodeNormalize;
       result := BitValue;
     end;
     
     procedure RangeCoderDecodeNormalize;
     begin
       while ((RangeLow xor RangeHigh) and $ff000000) = 0 do begin
         RangeLow := RangeLow shl 8;
         RangeHigh := (RangeHigh shl 8) or $ff;
         RangeCode := (RangeCode shl 8) or ReadByteFromInput;
       end;
     end;
     
     function RangeCoderDecodeBit(var Probability : longword;
                                  Shift : longword) : longword;
     begin
       RangeMiddle := RangeLow + (((RangeHigh - RangeLow) shr 12) *
                                  Probability);
       if RangeCode <= RangeMiddle then begin
         inc(Probability, ($fff - Probability) shr Shift);
         RangeHigh := RangeMiddle;
         result := 1;
       end else begin
         dec(Probability, Probability shr Shift);
         RangeLow := RangeMiddle + 1;
         result := 0;
       end;
       RangeCoderDecodeNormalize;
     end;

The probability may be never zero! But that can't happen here with this
adaptive model in this P64 file format, since the adaptive model uses a
shift factor of 4 bits and initial probabilities value of 2048, so the
probability has a value range from 15 up to 4080 here. If you do want
to use the above range coder routines for other stuff with other
probability models, then you must to ensure that the probability output
value is never zero, for example with  "probability |= (probability <
1); " in C.

P64 Chunk 'DONE' Layout
-----------------------

This is the last empty chunk for to signalize that the correct file end
is reached.


@EndNode

@Node "D64" "vice.guide/D64"
@Next "X64"
@Prev "G64"
@Toc "File formats"

The D64 disk image format
=========================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel. Added 42 track info by groepaz)

First and foremost we have D64, which is basically a sector-for-sector
copy of a 1540/1541 disk. There are several versions of these which I
will cover shortly. The standard D64 is a 174848 byte file comprised of
256 byte sectors arranged in 35 tracks with a varying number of sectors
per track for a total of 683 sectors. Track counting starts at 1, not
0, and goes up to 35. Sector counting starts at 0, not 1, for the first
sector, therefore a track with 21 sectors will go from 0 to 20.

The original media (a 5.25" disk) has the tracks laid out in circles,
with track 1 on the very outside of the disk (closest to the sides) to
track 35 being on the inside of the disk (closest to the inner hub
ring).  Commodore, in their infinite wisdom, varied the number of
sectors per track and data densities across the disk to optimize
available storage, resulting in the chart below. It shows the
sectors/track for a standard D64. Since the outside diameter of a
circle is the largest (versus closer to the center), the outside tracks
have the largest amount of storage.

.33 .33 .33  Track  Sectors/track  # Sectors  1-17  21  357  18-24  19
133  25-30  18  108  31-35  17  85  36-40(*)  17  85  41-42(*)  17  34
multitable

.25 .25 .25 .25  Track  #Sect  #SectorsIn  D64 Offset  1  21  0  $00000
2  21  21  $01500  3  21  42  $02A00  4  21  63  $03F00  5  21  84
$05400  6  21  105  $06900  7  21  126  $07E00  8  21  147  $09300  9
21  168  $0A800  10  21  189  $0BD00  11  21  210  $0D200  12  21  231
$0E700  13  21  252  $0FC00  14  21  273  $11100  15  21  294  $12600
16  21  315  $13B00  17  21  336  $15000  18  19  357  $16500  19  19
376  $17800  20  19  395  $18B00  21  19  414  $19E00  22  19  433
$1B100  23  19  452  $1C400  24  19  471  $1D700  25  18  490  $1EA00
26  18  508  $1FC00  27  18  526  $20E00  28  18  544  $22000  29  18
562  $23200  30  18  580  $24400  31  17  598  $25600  32  17  615
$26700  33  17  632  $27800  34  17  649  $28900  35  17  666  $29A00
36(*)  17  683  $2AB00  37(*)  17  700  $2BC00  38(*)  17  717  $2CD00
39(*)  17  734  $2DE00  40(*)  17  751  $2EF00  41(*)  17  768  $30000
42(*)  17  785  $31100  multitable

(*) Tracks 36-40 apply to 40- and 42-track images only.  (*) Tracks
41-42 apply to 42-track images only.

The directory track should be contained totally on track 18. Sectors
1-18 contain the entries and sector 0 contains the BAM (Block
Availability Map) and disk name/ID. Since the directory is only 18
sectors large (19 less one for the BAM), and each sector can contain
only 8 entries (32 bytes per entry), the maximum number of directory
entries is 18 * 8 = 144. The first directory sector is always 18/1,
even though the t/s pointer at 18/0 (first two bytes) might point
somewhere else. It then follows the same chain structure as a normal
file, using a sector interleave of 3. This makes the chain links go
18/1, 18/4, 18/7 etc.

Note that you can extend the directory off of track 18, but only when
reading the disk or image. Attempting to write to a directory sector
not on track 18 will cause directory corruption. Each directory sector
has the following layout (18/1 partial dump):

      00: 12 04 81 11 00 4E 41 4D 45 53 20 26 20 50 4F 53 <- notice the T/S link
      10: 49 54 A0 A0 A0 00 00 00 00 00 00 00 00 00 15 00 <- to 18/4 ($12/$04)
      20: 00 00 84 11 02 41 44 44 49 54 49 4F 4E 41 4C 20 <- and how its not here
      30: 49 4E 46 4F A0 11 0C FE 00 00 00 00 00 00 61 01 <- ($00/$00)

The first two bytes of the sector ($12/$04) indicate the location of
the next track/sector of the directory (18/4). If the track is set to
$00, then it is the last sector of the directory. It is possible,
however unlikely, that the directory may *not* be competely on track 18
(some disks do exist like this). Just follow the chain anyhow.

When the directory is done, the track value will be $00. The sector
link should contain a value of $FF, meaning the whole sector is
allocated, but the actual value doesn't matter. The drive will return
all the available entries anyways.

This is a breakdown of a standard directory sector:

.2 .8  Bytes  Description  $00-$1F  First directory entry  $20-$3F
Second dir entry  $40-$5F  Third dir entry  $60-$7F  Fourth dir entry
$80-$9F  Fifth dir entry  $A0-$BF  Sixth dir entry  $C0-$DF  Seventh
dir entry  $E0-$FF  Eighth dir entry  multitable

This is a breakdown of a standard directory entry:

.2 .8  Bytes  Description  $00-$01  Track/Sector location of next
directory sector ($00 $00 if not the first entry in the sector)  $02
File type  $03-$04  Track/sector location of first sector of file
$05-$14  16 character filename (in PETASCII, padded with $A0)  $15-$16
Track/Sector location of first side-sector block (REL file only)  $17
REL file record length (REL file only, max. value 254)  $18-$1D  Unused
(except with GEOS disks)  $1E-$1F  File size in sectors, low/high byte
order ($1E+$1F*256). The approx. filesize in bytes is <= #sectors * 254
multitable

The file type field is used as follows:

.2 .8  Bits  Description  0-3  The actual file type  4  Unused  5  Used
only during SAVE-@ replacement  6  Locked flag (Set produces ">" locked
files)  7  Closed flag (Not set produces "*", or "splat" files)
multitable

The actual file type can be one of the following:

.2 .2 .6  Binary  Decimal  File type  0000  0  DEL  0001  1  SEQ  0010
2  PRG  0011  3  USR  0100  4  REL  multitable

Values 5-15 are illegal, but if used will produce very strange results.
The 1541 is inconsistent in how it treats these bits.  Some routines
use all 4 bits, others ignore bit 3, resulting in values from 0-7.

Files, on a standard 1541, are stored using an interleave of 10.
Assuming a starting track/sector of 17/0, the chain would run 17/0,
17/10, 17/20, 17/8, 17/18, etc.

Non-Standard & Long Directories
-------------------------------

Most Commdore floppy disk drives use a single dedicated directory track
where all filenames are stored. This limits the number of files stored
on a disk based on the number of sectors on the directory track. There
are some disk images that contain more files than would normally be
allowed. This requires extending the directory off the default
directory track by changing the last directory sector pointer to a new
track, allocating the new sectors in the BAM, and manually placing (or
moving existing) file entries there. The directory of an extended disk
can be read and the files that reside there can be loaded without
problems on a real drive. However, this is still a very dangerous
practice as writing to the extended portion of the directory will cause
directory corruption in the non-extended part. Many of the floppy
drives core ROM routines ignore the track value that the directory is
on and assume the default directory track for operations.

To explain: assume that the directory has been extended from track 18
to track 19/6 and that the directory is full except for a few slots on
19/6. When saving a new file, the drive DOS will find an empty file
slot at 19/6 offset $40 and correctly write the filename and a few
other things into this slot. When the file is done being saved the
final file information will be written to 18/6 offset $40 instead of
19/6 causing some directory corruption to the entry at 18/6. Also, the
BAM entries for the sectors occupied by the new file will not be saved
and the new file will be left as a SPLAT (*) file.

Attempts to validate the disk will result in those files residing off
the directory track to not be allocated in the BAM, and could also send
the drive into an endless loop. The default directory track is assumed
for all sector reads when validating so if the directory goes to 19/6,
then the validate code will read 18/6 instead. If 18/6 is part of the
normal directory chain then the validate routine will loop endlessly.

BAM layout
----------

The layout of the BAM area (sector 18/0) is a bit more complicated...

          00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          -----------------------------------------------
      00: 12 01 41 00 12 FF F9 17 15 FF FF 1F 15 FF FF 1F
      10: 15 FF FF 1F 12 FF F9 17 00 00 00 00 00 00 00 00
      20: 00 00 00 00 0E FF 74 03 15 FF FF 1F 15 FF FF 1F
      30: 0E 3F FC 11 07 E1 80 01 15 FF FF 1F 15 FF FF 1F
      40: 15 FF FF 1F 15 FF FF 1F 0D C0 FF 07 13 FF FF 07
      50: 13 FF FF 07 11 FF CF 07 13 FF FF 07 12 7F FF 07
      60: 13 FF FF 07 0A 75 55 01 00 00 00 00 00 00 00 00
      70: 00 00 00 00 00 00 00 00 01 08 00 00 03 02 48 00
      80: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      90: 53 48 41 52 45 57 41 52 45 20 31 20 20 A0 A0 A0
      A0: A0 A0 56 54 A0 32 41 A0 A0 A0 A0 00 00 00 00 00
      B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.2 .8  Bytes  Description  $00-$01  Track/Sector location of the first
directory sector (should be set to 18/1 but it doesn't matter, and
don't trust what is there, always go to 18/1 for first directory entry)
$02  Disk DOS version type (see note below) $41 ("A")  $03  Unused
$04-$8F  BAM entries for each track, in groups of four bytes per track,
starting on track 1 (see below for more details)  $90-$9F  Disk Name
(padded with $A0)  $A0-$A1  Filled with $A0  $A2-$A3  Disk ID  $A4
Usually $A0  $A5-$A6  DOS type, usually "2A"  $A7-$AA  Filled with $A0
$AB  Unused ($00)  $AC-$BF  For DOLPHIN DOS track 36-40 BAM entries,
otherwise unused ($00)  $C0-$D3  For SPEED DOS track 36-40 BAM entries,
otherwise unused ($00)  $D4-$FF Unused ($00)  multitable

Note: The BAM entries for SPEED, DOLPHIN and ProLogic DOS use the same
layout as standard BAM entries. One of the interesting things from the
BAM sector is the byte at offset $02, the DOS version byte. If it is
set to anything other than $41 or $00, then we have what is called
"soft write protection". Any attempt to write to the disk will return
the "DOS Version" error code 73 ,"CBM DOS V 2.6 1541". The 1541 is
simply telling you that it thinks the disk format version is incorrect.
This message will normally come up when you first turn on the 1541 and
read the error channel. If you write a $00 or a $41 into 1541 memory
location $00FF (for device 0), then you can circumvent this type of
write-protection, and change the DOS version back to what it should be.

The BAM entries require a bit (no pun intended) more of a breakdown.
Take the first entry at bytes $04-$07 ($12 $FF $F9 $17).  The first
byte ($12) is the number of free sectors on that track.  Since we are
looking at the track 1 entry, this means it has 18 (decimal) free
sectors. The next three bytes represent the bitmap of which sectors are
used/free. Since it is 3 bytes (8 bits/byte) we have 24 bits of
storage. Remember that at most, each track only has 21 sectors, so
there are a few unused bits.

.2 .4 .4  Bytes  Data  Description  $04-$07  $12 $FF $F9 $17  Track 1
BAM  $08-$0B  $15 $FF $FF $FF  Track 2 BAM  $0C-$0F  $15 $FF $FF $1F
Track 3 BAM  ...   ...   ...   $8C-$8F  $11 $FF $FF $01  Track 35 BAM
multitable

These entries must be viewed in binary to make any sense. We will use
the first entry (track 1) at bytes 04-07:

      FF=11111111, F9=11111001, 17=00010111

In order to make any sense from the binary notation, flip the bits
around.

                 111111 11112222
      01234567 89012345 67890123
      --------------------------
      11111111 10011111 11101000
      ^                     ^
      sector 0           sector 20

Since we are on the first track, we have 21 sectors, and only use up to
the bit 20 position. If a bit is on (1), the sector is free. Therefore,
track 1 has sectors 9, 10 and 19 used, all the rest are free. Any
leftover bits that refer to sectors that don't exist, like bits 21-23
in the above example, are set to allocated.

Each filetype has its own unique properties, but most follow one simple
structure. The first file sector is pointed to by the directory and
follows a t/s chain, until the track value reaches $00. When this
happens, the value in the sector link location indicates how much of
the sector is used. For example, the following chain indicates a file 6
sectors long, and ends when we encounter the $00/$34 chain. At this
point the last sector occupies from bytes $02-$34.

.16 .16 .16 .16 .16 .16  1  2  3  4  5  6  ---  ---  ---  ---  ---  ---
17/0  17/10  17/20  17/1  17/11  0/52  (11/00)  (11/0A)  (11/14)
(11/01)  (11/0B)  (0/34)  multitable

Variations on the D64 layout
----------------------------

These are some variations of the D64 layout:

1. Standard 35 track layout but with 683 error bytes added on to the
end of the file. Each byte of the error info corresponds to a single
sector stored in the D64, indicating if the sector on the original disk
contained an error. The first byte is for track 1/0, and the last byte
is for track 35/16.

2. A 40 track layout, following the same layout as a 35 track disk, but
with 5 extra tracks. These contain 17 sectors each, like tracks 31-35.
Some of the PC utilities do allow you to create and work with these
files. This can also have error bytes attached like variant #1.

3. A 42 track layout, with two extra tracks of 17 sectors each.  This
is extremely uncommon, since real drives often have problems with
accessing these tracks, software that uses them is very rare.

4. The Commodore 128 allowed for "auto-boot" disks. With this, t/s 1/0
holds a specific byte sequence which the computer recognizes as boot
code.

Below is a small chart detailing the standard file sizes of D64 images,
35, 40 or 42 tracks, with or without error bytes.

.5 .5  Disk type  Size  35 track, no errors  174848  35 track, 683
error bytes  175531  40 track, no errors  196608  40 track, 768 error
bytes  197376  42 track, no errors  205312  42 track, 802 error bytes
206114  multitable

The following table (provided by Wolfgang Moser) outlines the
differences between the standard 1541 DOS and the various "speeder"
DOS's that exist. The 'header 7/8' category is the 'fill bytes' as the
end of the sector header of a real 1541 disk.

.5 .1 .1 .1 .2  Disk format  tracks  header 7/8  Dos type  Diskdos vs.
type  Original CBM DOS v2.6  35  $0f $0f  "2A"  $41/'A'  *SpeedDOS+  40
$0f $0f  "2A"  $41/'A'  Professional DOS Initial  35  $0f $0f  "2A"
$41/'A'  Professional DOS Version 1/Prototype  40  $0f $0f  "2A"
$41/'A'  ProfDOS Release  40  $0f $0f  "4A"  $41/'A'  Dolphin-DOS
2.0/3.0  35  $0f $0f  "2A"  $41/'A'  Dolphin-DOS 2.0/3.0  40  $0d $0f
"2A"  $41/'A'  PrologicDOS 1541  35  $0f $0f  "2A"  $41/'A'
PrologicDOS 1541  40  $0f $0f  "2P"  $50/'P'  ProSpeed 1571 2.0  35
$0f $0f  "2A"  $41/'A'  ProSpeed 1571 2.0  40  $0f $0f  "2P"  $50/'P'
multitable

*Note: There are also clones of SpeedDOS that exist, such as RoloDOS
and DigiDOS. Both are just a change of the DOS startup string.

The location of the extra BAM information in sector 18/0, for 40 track
images, will be different depending on what standard the disks have
been formatted with. SPEED DOS stores them from $C0 to $D3, DOLPHIN DOS
stores them from $AC to $BF and PrologicDOS stored them right after the
existing BAM entries from $90-A3. PrologicDOS also moves the disk label
and ID forward from the standard location of $90 to $A4. 64COPY and
Star Commander let you select from several different types of extended
disk formats you want to create/work with.

All three of the speeder DOS's mentioned above don't alter the standard
sector interleave of 10 for files and 3 for directories. The reason is
that they use a memory cache installed in the drive which reads the
entire track in one pass. This alleviates the need for custom
interleave values.  They do seem to alter the algorithm that finds the
next available free sector so that the interleave value can deviate
from 10 under certain circumstances, but I don't know why they would
bother.

Below is a HEX dump of a Speed DOS BAM sector. Note the location of the
extra BAM info from $C0-D3.

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
            -----------------------------------------------
      0070: 12 FF FF 03 12 FF FF 03 12 FF FF 03 11 FF FF 01
      0080: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      0090: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0
      00A0: A0 A0 30 30 A0 32 41 A0 A0 A0 A0 00 00 00 00 00
      00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      00C0: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      00D0: 11 FF FF 01 00 00 00 00 00 00 00 00 00 00 00 00

Below is a HEX dump of a Dolphin DOS BAM sector. Note the location of
the extra BAM info from $AC-BF.

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
            -----------------------------------------------
      0070: 12 FF FF 03 12 FF FF 03 12 FF FF 03 11 FF FF 01
      0080: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      0090: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0
      00A0: A0 A0 30 30 A0 32 41 A0 A0 A0 A0 00 11 FF FF 01
      00B0: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Below is a HEX dump of a PrologicDOS BAM sector. Note that the disk
name and ID are now located at $A4 instead of starting at $90.

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
            -----------------------------------------------
      0070: 12 FF FF 03 12 FF FF 03 12 FF FF 03 11 FF FF 01
      0080: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      0090: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
      00A0: 11 FF FF 01 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0
      00B0: A0 A0 A0 A0 A0 A0 30 30 A0 32 50 A0 A0 A0 A0 00
      00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Error codes
-----------

Here is the meaning of the error bytes added onto the end of any
extended D64. The CODE is the same as that generated by the 1541 drive
controller... it reports these numbers, not the error code we usually
see when an error occurs.

Some of what comes below is taken from Immers/Neufeld book "Inside
Commodore DOS". Note the descriptions are not completely accurate as to
what the drive DOS is actually doing to seek/read/decode/write sectors,
but serve as simple examples only. The "type" field is where the error
usually occurs, whether it's searching for any SYNC mark, any header
ID, any valid header, or reading a sector.

.2 .2 .2 .2 .2  Code  Error  Type  D64  Description  $01  00  N/A  *
No error.   $02  20  Seek  *  Header block not found / Header
descriptor byte not found  $03  21  Seek  *  No SYNC sequence found  $04
22  Read  *  Data descriptor byte not found  $05  23  Read  *
Checksum error in data block  $06  24  Write

Write verify on format (never occurs on 1541)  $07  25  Write

Write verify error  $08  26  Write

Write protect on  $09  27  Seek  *  Checksum error in header block  $0A
28  Write

Write error (never occurs on 1541)  $0B  29  Seek  *  Disk sector ID
mismatch  $0F  74  Read

Drive Not Ready (no disk in drive or no device 1)  multitable

Codes $0 and $C to $E are unused and never occur.

These first errors are "seek" errors, where the disk controller is
simply reading headers and looking at descriptor bytes, checksums,
format ID's and reporting what errors it sees. These errors do *not*
necessarily apply to the exact sector being looked for. This fact makes
duplication of these errors very unreliable.

Code    : $03 Error   : 21 Type    : Seek Message : No SYNC sequence
found.

Each sector data block and header block are preceeded by SYNC marks. If
*no* sync sequence is found within 20 milliseconds (only ~1/10 of a
disk rotation!) then this error is generated. This error used to mean
the entire track is bad, but it does not have to be the case. Only a
small area of the track needs to be without a SYNC mark and this error
will be generated.

Converting this error to a D64 is very problematic because it depends
on where the physical head is on the disk when a read attempt is made.
If it is on valid header/sectors then it won't occur. If it happens over
an area without SYNC marks, it will happen.

Code    : $02 Error   : 20 Type    : Seek Message : Header descriptor
byte not found (HEX $08, GCR $52)

Each sector is preceeded by an 8-byte GCR header block, which starts
with the value $52 (GCR). If this value is not found after 90 attempts,
this error is generated.

Basically, what a track has is SYNC marks, and possibly valid data
blocks, but no valid header descriptors.

Code    : $09 Error   : 27 Type    : Seek Message : Checksum error in
header block

The header block contains a checksum value, calculated by XOR'ing the
TRACK, SECTOR, ID1 and ID2 values. If this checksum is wrong, this
error is generated.

Code    : $0B Error   : 29 Type    : Seek Message : Disk sector ID
mismatch

The ID's from the header block of the currently read sector are
compared against the ones from the low-level header of 18/0. If there
is a mismatch, this error is generated.

Code    : $02 Error   : 20 Type    : Seek Message : Header block not
found

This error can be reported again when searching for the correct header
block. An image of the header is built and searched for, but not found
after 90 read attempts. Note the difference from the first occurance.
The first one only searches for a valid ID, not the whole header.

Note that error 20 occurs twice during this phase. The first time is
when a header ID is being searched for, the second is when the proper
header pattern for the sector being searched for is not found.

From this point on, all the errors apply to the specific sector you are
looking for. If a read passed all the previous checks, then we are at
the sector being searched for.

Note that the entire sector is read before these errors are detected.
Therefore the data, checksum and off bytes are available.

Code    : $04 Error   : 22 Type    : Read Message : Data descriptor
byte not found (HEX $07, GCR $55)

Each sector data block is preceeded by the value $07, the "data block"
descriptor. If this value is not there, this error is generated. Each
encoded sector has actually 260 bytes. First is the descriptor byte,
then follows the 256 bytes of data, a checksum, and two "off" bytes.

Code    : $05 Error   : 23 Type    : Read Message : Checksum error in
data block

The checksum of the data read of the disk is calculated, and compared
against the one stored at the end of the sector. If there's a
discrepancy, this error is generated.

Code    : $0F Error   : 74 Type    : Read Message : Drive Not Ready (no
disk in drive or no device 1)

These errors only apply when writing to a disk. I don't see the
usefulness of having these as they cannot be present when only
*reading* a disk.

Code    : $06 Error   : 24 Type    : Write Message : Write verify (on
format)

Code    : $07 Error   : 25 Type    : Write Message : Write verify error

Once the GCR-encoded sector is written out, the drive waits for the
sector to come around again and verifies the whole 325-byte GCR block.
Any errors encountered will generate this error.

Code    : $08 Error   : 26 Type    : Write Message : Write protect on

Self explanatory. Remove the write-protect tab, and try again.

Code    : $0A Error   : 28 Type    : Write Message : Write error

In actual fact, this error never occurs, but it is included for
completeness.

This is not an error at all, but it gets reported when the read of a
sector is ok.

Code    : $01 Error   : 00 Type    : N/A Message : No error.

Self explanatory. No errors were detected in the reading and decoding
of the sector.

The advantage with using the 35 track D64 format, regardless of error
bytes, is that it can be converted directly back to a 1541 disk by
either using the proper cable and software on the PC, or send it down
to the C64 and writing it back to a 1541. It is the best documented
format since it is also native to the C64, with many books explaining
the disk layout and the internals of the 1541.


@EndNode

@Node "X64" "vice.guide/X64"
@Next "D71"
@Prev "D64"
@Toc "File formats"

The X64 disk image format
=========================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel.)

This file type, created by Teemu Rantanen, is used on the X64 emulator
(a UNIX-based emulator) which has been superceeded by VICE. Both VICE
and X64 support the X64 file standard, with VICE also supporting the
regular D64 and T64 files.

X64 is not a specific type of file, but rather encompasses *all* known
C64 disk types (hard disk, floppies, etc). An X64 is created by
prepending a 64-byte header to an existing image (1541, 1571, etc) and
setting specific bytes which describe what type of image follows. This
header has undergone some revision, and this description is based on
the 1.02 version, which was the last known at the time of writing.

The most common X64 file you will see is the D64 variety, typically
174912 bytes long (174848 for the D64 and 64 bytes for the header,
assuming no error bytes are appended). The header layout (as used in
64COPY) is as follows:

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
           -----------------------------------------------
     0000: 43 15 41 64 01 02 01 23 00 00 00 00 00 00 00 00
     0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     0040: XX XX XX <- standard C64 image starts here....

.2 .8  Bytes  Description  $00-$03  This is the "Magic header" ($43 $15
$41 $64)  $04  Header version major ($01)  $05  Header version minor
($01, now its up to $02)  $06  Device type represented  $07  Maximum
tracks in image (only in version 1.02 or greater) 1540/41/70: 35 1571:
35 1581: 80 (Logical single-sided disk)  $08  Number of disk sides in
image. This value must be $00 for all 1541 and 1581 formats. $00=No
second side $01=Second side  $09  Error data flag.   $0A-$1F  Unused,
set to $00  $20-$3E  Disk image description (in ASCII or ISO Latin/1)
$3F  Always set to $00  $40-  Standard C64 file begins here.
multitable

The device types are:

.2 .8  Value  Drive type  $00  1540 See note below...   $01  1541
(Default)  $02  1542  $03  1551  $04  1570  $05  1571  $06  1572  $08
1581  $10  2031 or 4031  $11  2040 or 3040  $12  2041  $18  4040  $20
8050  $21  8060  $22  8061  $30  SFD-1001  $31  8250  $32  8280
multitable

The first four bytes used for the device type at position $06 ($00 to
$03) are functionally the same, and are compatible with older version
of X64 files. Some old X64 files might have $00 for the device type
(instead of $01), but it makes no real difference.

As most instances of X64 files will be strictly 1541 images, bytes
$08-$3F are set to zero, and some versions of the X64 emulator don't
use bytes $08-$3F.


@EndNode

@Node "D71" "vice.guide/D71"
@Next "D81"
@Prev "X64"
@Toc "File formats"

The D71 disk image format
=========================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel.)

Similar to the D64 (1541), the 1571 drive can operate in either
single-sided (1541 compatible) mode or double-sided (1571) mode. In
this section I will be dealing with the double-sided mode only. For the
breakdown of the single-sided mode, see the D64 section.

The D71 has 70 tracks, double that of the 1541, with a DOS file size of
349696 bytes. If the error byte block (1366 bytes) is attached, this
makes the file size 351062 bytes. The track range and offsets into the
D71 files are as follows:

.5 .25 .25  Track  Sec/trk  # Sectors  1-17 (side 0)  21  357  18-24
(side 0)  19  133  25-30 (side 0)  18  108  31-35 (side 0)  17  85
36-52 (side 1)  21  357  53-59 (side 1)  19  133  60-65 (side 1)  18
108  66-70 (side 1)  17  85  multitable

.25 .25 .25 .25  Track  #Sect  #SectorsIn  D71 Offset  1  21  0  $00000
2  21  21  $01500  3  21  42  $02A00  4  21  63  $03F00  5  21  84
$05400  6  21  105  $06900  7  21  126  $07E00  8  21  147  $09300  9
21  168  $0A800  10  21  189  $0BD00  11  21  210  $0D200  12  21  231
$0E700  13  21  252  $0FC00  14  21  273  $11100  15  21  294  $12600
16  21  315  $13B00  17  21  336  $15000  18  19  357  $16500  19  19
376  $17800  20  19  395  $18B00  21  19  414  $19E00  22  19  433
$1B100  23  19  452  $1C400  24  19  471  $1D700  25  18  490  $1EA00
26  18  508  $1FC00  27  18  526  $20E00  28  18  544  $22000  29  18
562  $23200  30  18  580  $24400  31  17  598  $25600  32  17  615
$26700  33  17  632  $27800  34  17  649  $28900  35  17  666  $29A00
36  21  683  $2AB00  37  21  704  $2C000  38  21  725  $2D500  39  21
746  $2EA00  40  21  767  $2FF00  41  21  788  $31400  42  21  809
$32900  43  21  830  $33E00  44  21  851  $35300  45  21  872  $36800
46  21  893  $37D00  47  21  914  $39200  48  21  935  $3A700  49  21
956  $3BC00  50  21  977  $3D100  51  21  998  $3E600  52  21  1019
$3FB00  53  19  1040  $41000  54  19  1059  $42300  55  19  1078  $43600
56  19  1097  $44900  57  19  1116  $45C00  58  19  1135  $46F00  59
19  1154  $48200  60  18  1173  $49500  61  18  1191  $4A700  62  18
1209  $4B900  63  18  1227  $4CB00  64  18  1245  $4DD00  65  18  1263
$4EF00  66  17  1281  $50100  67  17  1298  $51200  68  17  1315  $52300
69  17  1332  $53400  70  17  1349  $54500  multitable

The directory structure is the same as a D64/1541. All the same
filetypes apply, the directory still only holds 144 files per disk and
should only exist on track 18.

The first two bytes of the sector ($12/$04 or 18/4) indicate the
location of the next track/sector of the directory. If the track value
is set to $00, then it is the last sector of the directory. It is
possible, however unlikely, that the directory may *not* be competely
on track 18 (some disks do exist like this). Just follow the chain
anyhow.

When the directory is done, the track value will be $00. The sector
link should contain a value of $FF, meaning the whole sector is
allocated, but the actual value doesn't matter. The drive will return
all the available entries anyways. This is a breakdown of a standard
directory sector and entry:

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 12 04 82 11 00 4A 45 54 20 53 45 54 20 57 49 4C
     10: 4C 59 A0 A0 A0 00 00 00 00 00 00 00 00 00 2B 00
     20: 00 00 82 0F 01 4A 53 57 20 31 A0 A0 A0 A0 A0 A0
     30: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 BF 00
     40: 00 00 82 06 03 53 4F 4E 20 4F 46 20 42 4C 41 47
     50: 47 45 52 A0 A0 00 00 00 00 00 00 00 00 00 AE 00
     60: 00 00 82 15 0D 50 4F 54 54 59 20 50 49 47 45 4F
     70: 4E A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 A2 00
     80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.2 .8  Bytes  Description  $00-$1F  First directory entry  $20-$3F
Second dir entry  $40-$5F  Third dir entry  $60-$7F  Fourth dir entry
$80-$9F  Fifth dir entry  $A0-$BF  Sixth dir entry  $C0-$DF  Seventh
dir entry  $E0-$FF  Eighth dir entry  multitable

This is a breakdown of a standard directory entry:

.2 .8  Bytes  Description  $00-$01  Track/Sector location of next
directory sector ($00/$FF if its the last sector)  $02  File type
$03-$04  Track/sector location of first sector of file  $05-$14  16
character filename (in PETASCII, padded with $A0)  $15-$16
Track/Sector location of first side-sector block (REL file only)  $17
REL file record length (REL file only, max. value 254)  $18-$1D  Unused
(except with GEOS disks)  $1E-$1F  File size in sectors, low/high byte
order ($1E+$1F*256). The approx. filesize in bytes is <= #sectors * 254
multitable

The file type field is used as follows:

.2 .8  Bits  Description  0-3  The actual file type  4  Unused  5  Used
only during SAVE-@ replacement  6  Locked flag (Set produces ">" locked
files)  7  Closed flag (Not set produces "*", or "splat" files)
multitable

The actual file type can be one of the following:

.2 .2 .6  Binary  Decimal  File type  0000  0  DEL  0001  1  SEQ  0010
2  PRG  0011  3  USR  0100  4  REL  multitable

Values 5-15 are illegal, but if used will produce very strange results.
The 1571 is inconsistent in how it treats these bits.  Some routines
use all 4 bits, others ignore bit 3, resulting in values from 0-7.

When the 1571 is in is native ("1571") mode, files are stored with a
sector interleave of 6, rather than 10 which the 1541 (and the 1571 in
"1541" mode) uses. The directory still uses an interleave of 3.

Non-Standard & Long Directories
-------------------------------

Most Commodore floppy disk drives use a single dedicated directory
track where all filenames are stored. This limits the number of files
stored on a disk based on the number of sectors on the directory track.
There are some disk images that contain more files than would normally
be allowed. This requires extending the directory off the default
directory track by changing the last directory sector pointer to a new
track, allocating the new sectors in the BAM, and manually placing (or
moving existing) file entries there. The directory of an extended disk
can be read and the files that reside there can be loaded without
problems on a real drive. However, this is still a very dangerous
practice as writing to the extended portion of the directory will cause
directory corruption in the non- extended part. Many of the floppy
drives core ROM routines ignore the track value that the directory is
on and assume the default directory track for operations.

To explain: assume that the directory has been extended from track 18
to track 19/6 and that the directory is full except for a few slots on
19/6. When saving a new file, the drive DOS will find an empty file
slot at 19/6 offset $40 and correctly write the filename and a few
other things into this slot. When the file is done being saved the
final file information will be written to 18/6 offset $40 instead of
19/6 causing some directory corruption to the entry at 18/6. Also, the
BAM entries for the sectors occupied by the new file will not be saved
and the new file will be left as a SPLAT (*) file.

Attempts to validate the disk will result in those files residing off
the directory track to not be allocated in the BAM, and could also send
the drive into an endless loop. The default directory track is assumed
for all sector reads when validating so if the directory goes to 19/6,
then the validate code will read 18/6 instead. If 18/6 is part of the
normal directory chain then the validate routine will loop endlessly.

Bam layout The BAM is somewhat different as it now has to
---------------------------------------------------------

take 35 new tracks into account. In order to do this, most of the extra
BAM information is stored on track 53/0, and the remaining sectors on
track 53 are marked in the BAM as allocated. This does mean that except
for one allocated sector on track 53, the rest of the track is unused
and wasted. (Track 53 is the equivalent to track 18, but on the flip
side of the disk). Here is a dump of the first BAM sector...

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 12 01 41 80 12 FF F9 17 15 FF FF 1F 15 FF FF 1F
     10: 15 FF FF 1F 15 FF FF 1F 15 FF FF 1F 15 FF FF 1F
     20: 15 FF FF 1F 15 FF FF 1F 15 FF FF 1F 15 FF FF 1F
     30: 15 FF FF 1F 15 FF FF 1F 15 FF FF 1F 15 FF FF 1F
     40: 15 FF FF 1F 15 FF FF 1F 11 FC FF 07 13 FF FF 07
     50: 13 FF FF 07 13 FF FF 07 13 FF FF 07 13 FF FF 07
     60: 13 FF FF 07 12 FF FF 03 12 FF FF 03 12 FF FF 03
     70: 12 FF FF 03 12 FF FF 03 12 FF FF 03 11 FF FF 01
     80: 11 FF FF 01 11 FF FF 01 11 FF FF 01 11 FF FF 01
     90: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0
     A0: A0 A0 30 30 A0 32 41 A0 A0 A0 A0 00 00 00 00 00
     B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 15 15 15
     E0: 15 15 15 15 15 15 15 15 15 15 15 15 15 15 00 13
     F0: 13 13 13 13 13 12 12 12 12 12 12 11 11 11 11 11

.5 .5  Bytes  Description  $00-$01  Track/Sector location of the first
directory sector (should be set to 18/1 but it doesn't matter, and
don't trust what is there, always go to 18/1 for first directory entry)
$02  Disk DOS version type (see note below) $41 ('A') = 1541  $03
Double-sided flag $00 - Single sided disk $80 - Double sided disk
$04-8F  BAM entries for each track, in groups of four bytes per track,
starting on track 1.   $90-$9F  Disk Name (padded with $A0)  $A0-$A1
Filled with $A0  $A2-$A3  Disk ID  $A4  Usually $A0  $A5-$A6  DOS type,
usually "2A"  $A7-$AA  Filled with $A0  $AB-$DC  Not used ($00's)
$DD-$FF  Free sector count for tracks 36-70 (1 byte/track).   multitable

The "free sector" entries for tracks 36-70 are likely included here in
the first BAM sector due to some memory restrictions in the 1571 drive.
There is only enough memory available for one BAM sector, but in order
to generate the "blocks free" value at the end of a directory listing,
the drive needs to know the extra track "free sector" values. It does
make working with the BAM a little more difficult, though.

These are the values that would normally be with the 4-byte BAM entry,
but the rest of the entry is contained on 53/0.

Note: If the DOS version byte is set to anything other than $41 or $00,
then we have what is called "soft write protection". Any attempt to
write to the disk will return the "DOS Version" error code 73. The 1571
is simply telling you that it thinks the disk format version is
incorrect.

The BAM entries require some explanation. Take the first entry at bytes
$04-$07 ($12 $FF $F9 $17). The first byte ($12) is the number of free
sectors on that track. Since we are looking at the track 1 entry, this
means it has 18 (decimal) free sectors.

The next three bytes represent the bitmap of which sectors are
used/free. Since it is 3 bytes (8 bits/byte) we have 24 bits of
storage. Remember that at most, each track only has 21 sectors, so
there are a few unused bits. These entries must be viewed in binary to
make any sense. We will use the first entry (track 1) at bytes 04-07:

      FF=11111111, F9=11111001, 17=00010111

In order to make any sense from the binary notation, flip the bits
around.

                 111111 11112222
      01234567 89012345 67890123
      --------------------------
      11111111 10011111 11101000
      ^                     ^
      sector 0           sector 20

Since we are on the first track, we have 21 sectors, and only use up to
the bit 20 position. If a bit is on (1), the sector is free. Therefore,
track 1 has sectors 9,10 and 19 used, all the rest are free.

In order to complete the BAM, we must check 53/0.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: FF FF 1F FF FF 1F FF FF 1F FF FF 1F FF FF 1F FF
     10: FF 1F FF FF 1F FF FF 1F FF FF 1F FF FF 1F FF FF
     20: 1F FF FF 1F FF FF 1F FF FF 1F FF FF 1F FF FF 1F
     30: FF FF 1F 00 00 00 FF FF 07 FF FF 07 FF FF 07 FF
     40: FF 07 FF FF 07 FF FF 07 FF FF 03 FF FF 03 FF FF
     50: 03 FF FF 03 FF FF 03 FF FF 03 FF FF 01 FF FF 01
     60: FF FF 01 FF FF 01 FF FF 01 00 00 00 00 00 00 00
     70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Each track from 36-70 has 3 byte entries, starting at address $00.

     Byte: $00-$02: $FF $FF $1F - BAM map for track 36
           $03-$05: $FF $FF $1F - BAM map for track 37
           ...
           $33-$35: $00 $00 $00 - BAM map for track 53
           ...
           $66-$68: $FF $FF $01 - BAM map for track 70
           $69-$FF:             - Not used

You can break down the entries for tracks 36-70 the same way as track
1, just combine the free sector bytes from 18/0 and the BAM usage from
53 to get the full 4-byte entry.

Just like a D64, you can attach error bytes to the file, for sector
error information. This block is 1366 bytes long, 1 byte for each of
the 1366 sectors in the image. With the error bytes, the file size is
351062 bytes.


@EndNode

@Node "D81" "vice.guide/D81"
@Next "D80"
@Prev "D71"
@Toc "File formats"

The D81 disk image format
=========================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel.)

Like D64 and D71, this is a byte for byte copy of a physical 1581 disk.
It consists of 80 tracks, 40 sectors each (0 to 39) for a size of
819200 bytes, or 3200 sectors. If the error byte block is attached,
this makes the file size 822400 bytes.

There are three sectors on the directory track used for disk internals
(header and BAM), leaving 37 sectors for filename entries, thus
allowing for 296 files (37 * 8) to be stored at the root level of the
disk.

The actual physical layout on the disk is quite different from what the
user sees, but this is unimportant to the scope of this section.  One
important difference from the D64 and D71 is all the sector interleaves
are now 1 for both files and directory storage (rather than 3 for
directory and 10 for file on a D64/D71). This is due to the built-in
buffering in the 1581. When reading a sector, the whole track will be
buffered in memory, and any sectors being modified will be done in
memory. Once it has to be written, the whole track will be written out
in one step.

The track range and offsets into the D81 files are as follows:

.25 .25 .25 .25  Track  #Sect  #SectorsIn  D81 Offset  1  40  0  $00000
2  40  40  $02800  3  40  80  $05000  4  40  120  $07800  5  40  160
$0A000  6  40  200  $0C800  7  40  240  $0F000  8  40  280  $11800  9
40  320  $14000  10  40  360  $16800  11  40  400  $19000  12  40  440
$1B800  13  40  480  $1E000  14  40  520  $20800  15  40  560  $23000
16  40  600  $25800  17  40  640  $28000  18  40  680  $2A800  19  40
720  $2D000  20  40  760  $2F800  21  40  800  $32000  22  40  840
$34800  23  40  880  $37000  24  40  920  $39800  25  40  960  $3C000
26  40  1000  $3E800  27  40  1040  $41000  28  40  1080  $43800  29  40
1120  $46000  30  40  1160  $48800  31  40  1200  $4B000  32  40  1240
$4D800  33  40  1280  $50000  34  40  1320  $52800  35  40  1360
$55000  36  40  1400  $57800  37  40  1440  $5A000  38  40  1480  $5C800
39  40  1520  $5F000  40  40  1560  $61800  41  40  1600  $64000  42
40  1640  $66800  43  40  1680  $69000  44  40  1720  $6B800  45  40
1760  $6E000  46  40  1800  $70800  47  40  1840  $73000  48  40  1880
$75800  49  40  1920  $78000  50  40  1960  $7A800  51  40  2000  $7D000
52  40  2040  $7F800  53  40  2080  $82000  54  40  2120  $84800  55
40  2160  $87000  56  40  2200  $89800  57  40  2240  $8C000  58  40
2280  $8E800  59  40  2320  $91000  60  40  2360  $93800  61  40  2400
$96000  62  40  2440  $98800  63  40  2480  $9B000  64  40  2520  $9D800
65  40  2560  $A0000  66  40  2600  $A2800  67  40  2640  $A5000  68
40  2680  $A7800  69  40  2720  $AA000  70  40  2760  $AC800  71  40
2800  $AF000  72  40  2840  $B1800  73  40  2880  $B4000  74  40  2920
$B6800  75  40  2960  $B9000  76  40  3000  $BB800  77  40  3040  $BE000
78  40  3080  $C0800  79  40  3120  $C3000  80  40  3160  $C5800
multitable

The header sector is stored at 40/0, and contains the disk name, ID and
DOS version bytes, but the BAM is no longer contained here (like the
D64).

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 28 03 44 00 31 35 38 31 20 55 54 49 4C 49 54 59
     10: 20 56 30 31 A0 A0 47 42 A0 33 44 A0 A0 00 00 00
     20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.2 .8  Bytes  Description  $00-$01  Track/Sector location of the first
directory sector (should be set to 40/3 but it doesn't matter, and
don't trust what is there, always go to 40/3 for first directory entry)
$02  Disk DOS version type (see note below) $44 ('D')=1581  $03  $00
$04-$13  16 character Disk Name (padded with $A0)  $14-$15  $A0  $16-$17
Disk ID  $18  $A0  $19  DOS Version ("3")  $1A  Disk version ("D")
$1B-$1C  $A0  $1D-$FF  Unused (usually $00)  multitable

The following might be set if the disk is a GEOS format (this info is
based on the D64 layout, and might not prove to be true)

.2 .8  Bytes  Description  $AB-$AC  Border sector (GEOS only, else set
to $00)  $AD-$BC  GEOS ID string ("geos FORMAT V1.x" GEOS only, else
$00)  $BD-$FF  Unused (usually $00)  multitable

Note: If the DOS version byte is changed to anything other than a $44
(or $00), then we have what is called "soft write protection". Any
attempt to write to the disk will return the "DOS Version" error code
73. The drive is simply telling you that it thinks the disk format
version is incompatible.

The directory track should be contained totally on track 40.  Sectors
3-39 contain the entries and sector 1 and 2 contain the BAM (Block
Availability Map). Sector 0 holds the disk name and ID. The first
directory sector is always 40/3, even though the t/s pointer at 40/0
(first two bytes) might point somewhere else. It goes linearly up the
sector count, 3-4-5-6-etc. Each sector holds up to eight entries.

The first two bytes of the sector ($28/$04) indicate the location of
the next track/sector of the directory (40/4). If the track is set to
$00, then it is the last sector of the directory. It is possible,
however unlikely, that the directory may *not* be competely on track
40. Just follow the chain anyhow.

When the directory is done (track=$00), the sector should contain an
$FF, meaning the whole sector is allocated. Theactual value doesn't
matter as all the entries will be returned anyways. Each directory
sector has the following layout:

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 28 04 81 2B 00 53 43 52 45 45 4E 20 20 33 A0 A0
     10: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 02 00
     20: 00 00 81 2B 01 53 43 52 45 45 4E 20 20 34 A0 A0
     30: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 03 00
     40: 00 00 81 2B 02 53 43 52 45 45 4E 20 20 35 A0 A0
     50: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 07 00
     60: 00 00 81 2B 08 53 43 52 45 45 4E 20 20 36 A0 A0
     70: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 08 00
     80: 00 00 81 2B 14 53 43 52 45 45 4E 20 20 37 A0 A0
     90: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 07 00
     A0: 00 00 81 24 00 53 43 52 45 45 4E 20 20 38 A0 A0
     B0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 0B 00
     C0: 00 00 82 24 04 46 49 4C 45 34 32 39 33 36 39 30
     D0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 07 00
     E0: 00 00 82 24 06 46 49 4C 45 32 35 37 38 38 31 35
     F0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 05 00

.2 .8  Bytes  Description  $00-$1F  First directory entry  $20-$3F
Second dir entry  $40-$5F  Third dir entry  $60-$7F  Fourth dir entry
$80-$9F  Fifth dir entry  $A0-$BF  Sixth dir entry  $C0-$DF  Seventh
dir entry  $E0-$FF  Eighth dir entry  multitable

This is a breakdown of a standard directory entry:

.2 .8  Bytes  Description  $00-$01  Track/Sector location of next
directory sector  $02  File type  $03-$04  Track/sector location of
first sector of file or partition  $05-$14  16 character filename (in
PETASCII, padded with $A0)  $15-$16  Track/Sector location of first
SUPER SIDE SECTOR block (REL file only)  $17  REL file record length
(REL file only)  $18-$1B  Unused (except with GEOS disks)  $1C-$1D
(Used during an SAVE or OPEN, holds the new t/s link)  $1E-$1F  File or
partition size in sectors, low/high byte order ($1E+$1F*256). The
approx. file size in bytes is <= #sectors * 254  multitable

The file type field is used as follows:

.2 .8  Bits  Description  0-3  The actual file type  4  Unused  5  Used
only during SAVE-@ replacement  6  Locked flag (Set produces ">" locked
files)  7  Closed flag (Not set produces "*", or "splat" files)
multitable

The actual file type can be one of the following:

.2 .2 .6  Binary  Decimal  File type  0000  0  DEL  0001  1  SEQ  0010
2  PRG  0011  3  USR  0100  4  REL  0101  5  CBM (partition or
sub-directory)  multitable

Values 6-15 are illegal, but if used will produce very strange results.

Non-Standard & Long Directories
-------------------------------

Most Commdore floppy disk drives use a single dedicated directory track
where all filenames are stored. This limits the number of files stored
on a disk based on the number of sectors on the directory track. There
are some disk images that contain more files than would normally be
allowed. This requires extending the directory off the default
directory track by changing the last directory sector pointer to a new
track, allocating the new sectors in the BAM, and manually placing (or
moving existing) file entries there. The directory of an extended disk
can be read and the files that reside there can be loaded without
problems on a real drive. However, this is still a very dangerous
practice as writing to the extended portion of the directory will cause
directory corruption in the non-extended part. Many of the floppy
drives core ROM routines ignore the track value that the directory is
on and assume the default directory track for operations.

BAM layout
----------

The BAM is located on 40/1 (for side 0, tracks 1-40) and 40/2 (for side
1, tracks 41-80). Each entry takes up six bytes, one for the "free
sector" count and five for the allocation bitmap.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 28 02 44 BB 47 42 C0 00 00 00 00 00 00 00 00 00
     10: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     20: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     30: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     40: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     50: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     60: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     70: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     80: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     90: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     A0: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     B0: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     C0: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     D0: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     E0: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     F0: FF FF FF FF 28 FF FF FF FF FF 24 F0 FF 2D FF FE

     Bytes:
     $00-$01: Track/sector of next bam sector (40/2)
         $02: Version # ('D')
         $03: One's complement of version# ($BB)
     $04-$05: Disk ID bytes (same as 40/0 Disk ID)
         $06: I/O byte
              bit 7 set - Verify on
              bit 7 clear - Verify off
              bit 6 set - Check header CRC
              bit 6 clear - Don't check header CRC
         $07: Auto-boot-loader flag
     $08-$0F: Reserved for future (set to $00)
     $10-$15: BAM entry for track 1 (track 41, side 1)
     $16-$1B: BAM entry for track 2 (track 42, side 1)
              ...
     $46-$4B: BAM entry for track 10 (track 50, side 1)
              ...
     $82-$87: BAM entry for track 20 (track 60, side 1)
              ...
     $BE-$C3: BAM entry for track 30 (track 70, side 1)
              ...
     $FA-$FF: BAM entry for track 40 (track 80, side 1)

The BAM entries require some explanation, so lets look at the track 40
entry at bytes $FA-FF ($24 $F0 $FF $2D $FF $FE). The first byte ($24,
or 36 decimal) is the number of free sectors on that track. The next
five bytes represent the bitmap of which sectors are used/free. Since
it is five bytes (8 bits/byte) we have 40 bits of storage. Since this
format has 40 sectors/track, the whole five bytes are used.

      F0: .. .. .. .. .. .. .. .. .. .. 24 F0 FF 2D FF FE

The last five bytes of any BAM entry must be viewed in binary to make
any sense. We will once again use track 40 as our reference:

      F0=11110000, FF=11111111, 2D=00101101, FF=11111111, FE=11111110

In order to make any sense from the binary notation, flip the bits
around.

                        111111 11112222 22222233 33333333
      Sector 01234567 89012345 67890123 45678901 23456789
             -------------------------- -------- --------
             00001111 11111111 10110100 11111111 01111111

Note that if a bit is on (1), the sector is free. Therefore, track 40
has sectors 0-3, 17, 20, 22, 23 and 32 used, all the rest are free.

The second BAM (for side 1) contains the entries for tracks 41-80.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 00 FF 44 BB 47 42 C0 00 00 00 00 00 00 00 00 00
     10: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     20: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     30: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     40: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     50: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     60: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     70: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     80: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     90: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     A0: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     B0: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     C0: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF
     D0: 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
     E0: FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF 28 FF
     F0: FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF FF FF

It is laid out exactly as the side 0 BAM except for one difference. The
track/sector reference for the next sector should be set to $00/$FF,
indicating there is no next sector.

REL files The REL filetype requires some extra explaining.
----------------------------------------------------------

It was designed to make access to data *anywhere* on the disk very
fast. Take a look at this directory entry...

      00: 00 FF 84 27 00 41 44 44 49 54 49 4F 4E 41 4C 20
      10: 49 4E 46 4F A0 27 02 FE 00 00 00 00 00 00 D2 0B

The third byte ($84) indicates this entry is a REL file and that the
three normally empty entries at offset $15, $16 and $17 are now used as
they are explained above. It's the track/sector chain that this entry
points to, called the SUPER SIDE SECTOR, which is of interest here (in
this case, 39/2).  The SUPER SIDE SECTOR is very different from the D64
format. If you check the D64 entry for a REL file and do the
calculations, you will find that the maximum file size of the REL file
is 720 data sectors. With the new SUPER SIDE SECTOR, you can now have
126 groups of these SIDE SECTORS chains, allowing for file sizes up to
(theoretically) 90720 sectors, or about 22.15 Megabytes.

Here is a dump of the beginning of the SUPER SIDE SECTOR...

      00: 27 01 FE 27 01 15 09 03 0F 38 16 4A 1C 00 00 00
      10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

     Bytes:
     $00-$01: Track/sector of first side sector in group 0
         $02: Always $FE
     $03-$04: Track/sector of first side sector in group 0 (again)
              ...
     $FD-$FE: Track/sector of first side sector in group 125
         $FF: Unused (likely $00)

The side sector layout is the same as the D64/1571.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 12 0A 00 FE 15 09 12 0A 0F 0B 0C 0C 09 0D 06 0E
     10: 15 07 15 08 15 0A 15 0B 15 0C 15 0D 15 0E 15 0F
     20: 15 10 15 11 15 12 15 13 15 14 15 15 15 16 15 17
     30: 15 18 15 19 15 1A 15 1B 15 1C 15 1D 15 1E 15 1F
     40: 15 20 15 21 15 22 15 23 15 24 15 25 15 26 15 27
     50: 14 00 14 01 14 02 14 03 14 04 14 05 14 06 14 07
     60: 14 08 14 09 14 0A 14 0B 14 0C 14 0D 14 0E 14 0F
     70: 14 10 14 11 14 12 14 13 14 14 14 15 14 16 14 17
     80: 14 18 14 19 14 1A 14 1B 14 1C 14 1D 14 1E 14 1F
     90: 14 20 14 21 14 22 14 23 14 24 14 25 14 26 14 27
     A0: 13 00 13 01 13 02 13 03 13 04 13 05 13 06 13 07
     B0: 13 08 13 09 13 0A 13 0B 13 0C 13 0D 13 0E 13 0F
     C0: 13 10 13 11 13 12 13 13 13 14 13 15 13 16 13 17
     D0: 13 18 13 19 13 1A 13 1B 13 1C 13 1D 13 1E 13 1F
     E0: 13 20 13 21 13 22 13 23 13 24 13 25 13 26 13 27
     F0: 12 00 12 01 12 02 12 03 12 04 12 05 12 06 12 07

     Bytes:
         $00: Track location of next side-sector ($00 if last sector)
         $01: Sector location of next side-sector
         $02: Side-sector block number (first sector is $00, the next is
              $01, then $02, etc)
         $03: REL file RECORD size (from directory entry)
     $04-$0F: Track/sector locations of the six other side-sectors. Note
              the first entry is this very sector we have listed here.
              The next is the next t/s listed at the beginning of the
              sector. All of this information must be correct. If one of
              these chains is $00/$00, then we have no more side sectors.
              Also, all of these (up to six) side sectors must have the
              same values in this range.
     $10-$FF: T/S chains of *each* sector of the data portion. When we
              get a $00/$00, we are at the end of the file.

1581 Partitions and Sub-directories
-----------------------------------

At the beginning of this section it was stated that the 1581 can hold
296 entries "at the root level". The 1581 also has the ability to
partition areas of the disk. Under the right conditions these can
become sub-directories, acting as a small diskette, complete with its
own directory and BAM. When you are inside of a sub-directory, no other
files except those in that directory are visible, or can be affected.

To the 1581, this file will show up as a "CBM" filetype in a directory.
All this does is tell the disk that a file, starting at X/Y
track/sector and Z sectors large exists. Doing a validate will not harm
these files as they have a directory entry, and are fully allocated in
the BAM.

There are two main uses for partitions. One is to simply allocate a
section of the disk to be used for direct-access reads/writes, and lock
it away from being overwritten after a VALIDATE. The second is as a
sub-directory, basically a small "disk within a disk".

In order to use a partition as a sub-directory, it must adhere to the
following four rules:

      1. If must start on sector 0
      2. It's size must be in multiples of 40 sectors
      3. It must be a minimum of 120 sectors long (3 tracks)
      4. If must not start on or cross track 40, which limits the
         biggest directory to 1600 sectors (tracks 1-39).

This is a dump of a sub-directory entry:

      00: 00 FF 85 29 00 50 41 52 54 49 54 49 4F 4E 20 31
      10: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 40 06

It is a partition starting on track 41/0, extends for 1600 sectors, and
has been formatted as a sub-directory. Note that when a partition is
created, the area being allocated is not touched in any way. If you
want it set up as a sub-directory, you must issue the FORMAT command to
the 1581 to create the central directory and BAM. Also note that from
the directory entry you can't tell whether it is a sub-directory or
not, just that it fits the sub-directory parameters.

The BAM track for the sub-directory exists on the first track of the
partition, and has the same layout as the disk BAM on track 40. The
biggest difference is the "disk name" is what what given when the
partition was formatted rather than what the actual disk name is. Also,
except for the free sectors in the partition area, all other sectors in
the BAM will be allocated.

If the partition size doesn't match the above rules for a
sub-directory, it will simply exist as a "protected" area of the disk,
and can't be used as a sub-directory. Either way, it still shows up as
a "CBM" type in a directory listing. Below is a dump of a 10-sector
partition starting on track 5/1, which does not qualify as a
sub-directory...

      00: 00 00 85 05 01 53 4D 41 4C 4C 50 41 52 54 20 32
      10: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 0A 00

The master BAM shows the entry for this partition on track 5...

      00: 28 02 44 BB 43 44 C0 00 00 00 00 00 00 00 00 00
      10: 23 C1 FF FF FF FF 28 FF FF FF FF FF 28 FF FF FF
      20: FF FF 28 FF FF FF FF FF 1E 01 F8 FF FF FF 28 FF
                                  ^^^^^^^^^^^^^^^^^

The breakdown of the BAM shows the allocation for this track, with
sectors 1-10 allocated, as it should be.

      10000000 00011111 11111111 11111111 11111111
      ^          ^          ^         ^          ^
      0          10         20        30         39

Partitions and sub-directories share one very important trait.  When
created, the sub-directory entry simply has the starting track/sector
and the size of the partition in sectors.  Partitions are created
linearly, meaning if one starts on 30/1 and is of size 15 sectors, then
the sector range from 1 through 15 on track 30 will be allocated. If a
partition size crosses a track boundary, the allocation will continue
on the next track starting on sector 0, and going up.

The section allocated will *not* have a track/sector chain like a file
would, but rather is dependant on the directory entry to keep it from
being overwritten. You can store whatever you want to in the allocated
area.

AUTO-BOOT LOADER
----------------

If byte $07 in the BAM is set, then when the drive is reset (and other
circumstances) it will look for a USR file called "COPYRIGHT CBM 86".
This file will then be loaded into the drive RAM and executed.

The format for this auto-loader file is fairly basic. It starts with a
two-byte load address, a size byte, program data, and a checksum at the
end.

     Bytes:
            $00-$01: Load address, low/high format
                $02: Size of program (SZ) (smaller than 256 bytes)
     $03-($03+SZ-1): Program data
             $03+SZ: Checksum byte


@EndNode

@Node "D80" "vice.guide/D80"
@Next "D82"
@Prev "D81"
@Toc "File formats"

The D80 disk image format
=========================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel.)

This is a sector-for-sector copy of an 8050 floppy disk. The file size
for an 8050 image is 533248 bytes. It is comprised of 256-byte sectors
arranged across 77 tracks, with a varying number of sectors per track
for a total of 2083 sectors. Track counting starts at 1 (not 0) and
sector counting starts at 0 (not 1), therefore a track with 29 sectors
will go from 0 to 28.

The original media (a 5.25" disk) has the tracks laid out in circles,
with track 1 on the very outside of the disk (closest to the sides) to
track 77 being on the inside of the disk (closest to the inner hub
ring). Commodore, in their infinite wisdom, varied the number of
sectors per track and data densities across the disk to optimize
available storage, resulting in the chart below. It shows the
sectors/track for a D80. Since the outside diameter of a circle is the
largest (versus closer to the center), the outside tracks have the
largest amount of storage.

.33 .33 .33  Track Range  Sectors/track  # Sectors  1-39  29  1131
40-53  27  378  54-64  25  275  65-77  23  299  multitable

.25 .25 .25 .25  Track  #Sect  #SectorsIn  D8x Offset  1  29  0  $00000
2  29  29  $01D00  3  29  58  $03A00  4  29  87  $05700  5  29  116
$07400  6  29  145  $09100  7  29  174  $0AE00  8  29  203  $0CB00  9
29  232  $0E800  10  29  261  $10500  11  29  290  $12200  12  29  319
$13F00  13  29  348  $15C00  14  29  377  $17900  15  29  406  $19600
16  29  435  $1B300  17  29  464  $1D000  18  29  493  $1ED00  19  29
522  $20A00  20  29  551  $22700  21  29  580  $24400  22  29  609
$26100  23  29  638  $27E00  24  29  667  $29B00  25  29  696  $2B800
26  29  725  $2D500  27  29  754  $2F200  28  29  783  $30F00  29  29
812  $32C00  30  29  841  $34900  31  29  870  $36600  32  29  899
$38300  33  29  928  $3A000  34  29  957  $3BD00  35  29  986  $3DA00
36  29  1015  $3F700  37  29  1044  $41400  38  29  1073  $43100  39  29
1102  $44E00  40  27  1131  $46B00  41  27  1158  $48600  42  27  1185
$4A100  43  27  1212  $4BC00  44  27  1239  $4D700  45  27  1266
$4F200  46  27  1293  $50D00  47  27  1320  $52800  48  27  1347  $54300
49  27  1374  $55E00  50  27  1401  $57900  51  27  1428  $59400  52
27  1455  $5AF00  53  27  1482  $5CA00  54  25  1509  $5E500  55  25
1534  $5FE00  56  25  1559  $61700  57  25  1584  $63000  58  25  1609
$64900  59  25  1634  $66200  60  25  1659  $67B00  61  25  1684  $69400
62  25  1709  $6AD00  63  25  1734  $6C600  64  25  1759  $6DF00  65
23  1784  $6F800  66  23  1807  $70F00  67  23  1830  $72600  68  23
1853  $73D00  69  23  1876  $75400  70  23  1899  $76B00  71  23  1922
$78200  72  23  1945  $79900  73  23  1968  $7B000  74  23  1991  $7C700
75  23  2014  $7DE00  76  23  2037  $7F500  77  23  2060  $80C00
multitable

The BAM (Block Availability Map) is on track 38. The D80 is only 77
tracks and so the BAM is contained on 38/0 and 38/3. The BAM interleave
is 3.

The directory is on track 39, with 39/0 contains the header (DOS type,
disk name, disk ID's) and sectors 1-28 contain the directory entries.
Both files and the directory use an interleave of 1. Since the
directory is only 28 sectors large (29 less one for the header), and
each sector can contain only 8 entries (32 bytes per entry), the
maximum number of directory entries is 28 * 8 = 224. The first
directory sector is always 39/1. It then follows a chain structure
using a sector interleave of 1 making the links go 39/1, 39/2, 39/3 etc.

When reading a disk, you start with 39/0 (disk label/ID) which points
to 38/0 (BAM0), 38/3 (BAM1), and finally to 39/1 (first dir entry
sector). When writing a file to a blank disk, it will start at 38/1
because 38/0 is already allocated.

Below is a dump of the header sector 39/0:

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 26 00 43 00 00 00 73 61 6D 70 6C 65 20 64 38 30
     10: A0 A0 A0 A0 A0 A0 A0 A0 65 72 A0 32 43 A0 A0 A0
     20: A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     ...
     F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.3 .7  Bytes  Description  $00-$01  T/S pointer to first BAM sector
(38/0)  $02  $43 'C' is for DOS format version  $03  Reserved  $04-$05
Unused  $06-$16  Disk name, padded with 0xA0 ("sample d80")  $17  0xA0
$18-$19  Disk ID bytes "er"  $1A  0xA0  $1B-$1C  DOS version bytes "2C"
$1D-$20  0xA0  $21-$FF  Unused  multitable

Below is a dump of the first directory sector, 39/1

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 27 02 82 26 01 54 45 53 54 A0 A0 A0 A0 A0 A0 A0
     10: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     20: 00 00 82 26 02 54 45 53 54 32 A0 A0 A0 A0 A0 A0
     30: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     40: 00 00 82 26 04 54 45 53 54 33 A0 A0 A0 A0 A0 A0
     50: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 05 00
     60: 00 00 82 26 0B 54 45 53 54 34 A0 A0 A0 A0 A0 A0
     70: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 09 00
     80: 00 00 82 26 14 54 45 53 54 35 A0 A0 A0 A0 A0 A0
     90: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 0C 00
     A0: 00 00 82 28 00 54 45 53 54 36 A0 A0 A0 A0 A0 A0
     B0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     C0: 00 00 82 28 01 54 45 53 54 37 A0 A0 A0 A0 A0 A0
     D0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     E0: 00 00 82 28 02 54 45 53 54 38 A0 A0 A0 A0 A0 A0
     F0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00

The first two bytes of the directory sector ($27/$02) indicate the
location of the next track/sector of the directory (39/2).  If the
track is set to $00, then it is the last sector of the directory.

When the directory is done, the track value will be $00. The sector
link should contain a value of $FF, meaning the whole sector is
allocated, but the actual value doesn't matter. The drive will return
all the available entries anyways. This is a breakdown of a standard
directory sector:

.2 .8  Bytes  Description  $00-$1F  First directory entry  $20-$3F
Second dir entry  $40-$5F  Third dir entry  $60-$7F  Fourth dir entry
$80-$9F  Fifth dir entry  $A0-$BF  Sixth dir entry  $C0-$DF  Seventh
dir entry  $E0-$FF  Eighth dir entry  multitable

This is a breakdown of a standard directory entry:

.2 .8  Bytes  Description  $00-$01  Track/Sector location of next
directory sector ($00 $00 if not the first entry in the sector)  $02
File type  $03-$04  Track/sector location of first sector of file
$05-$14  16 character filename (in PETASCII, padded with $A0)  $15-$16
Track/Sector location of first side-sector block (REL file only)  $17
REL file record length (REL file only, max. value 254)  $18-$1D  Unused
$1E-$1F  File size in sectors, low/high byte order ($1E+$1F*256). The
approx. filesize in bytes is <= #sectors * 254  multitable

The file type field is used as follows:

.2 .8  Bits  Description  0-3  The actual file type  4  Unused  5  Used
only during SAVE-@ replacement  6  Locked flag (Set produces ">" locked
files)  7  Closed flag (Not set produces "*", or "splat" files)
multitable

The actual file type can be one of the following:

.2 .2 .6  Binary  Decimal  File type  0000  0  DEL  0001  1  SEQ  0010
2  PRG  0011  3  USR  0100  4  REL  multitable

Values 5-15 are illegal, but if used will produce very strange results.

Non-Standard & Long Directories
-------------------------------

Most Commdore floppy disk drives use a single dedicated directory track
where all filenames are stored. This limits the number of files stored
on a disk based on the number of sectors on the directory track. There
are some disk images that contain more files than would normally be
allowed. This requires extending the directory off the default
directory track by changing the last directory sector pointer to a new
track, allocating the new sectors in the BAM, and manually placing (or
moving existing) file entries there. The directory of an extended disk
can be read and the files that reside there can be loaded without
problems on a real drive. However, this is still a very dangerous
practice as writing to the extended portion of the directory will cause
directory corruption in the non-extended part. Many of the floppy
drives core ROM routines ignore the track value that the directory is
on and assume the default directory track for operations.

BAM layout
----------

The BAM only occupies up to four sectors on track 38, so the rest of
the track is empty and is available for file storage.  Below is a dump
of the first BAM block, 38/0. A D80 will only contain two BAM sectors,
38/0 and 38/3. Each entry takes 5 bytes, 1 for the free count on that
track, and 4 for the BAM bits.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 26 03 43 00 01 33 1D FF FF FF 1F 1D FF FF FF 1F
     10: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D
     20: FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF
     30: FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF
     40: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     50: 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F
     60: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D
     70: FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF
     80: FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF
     90: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     A0: 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F
     B0: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1B
     C0: F6 FF FF 1F 1B FC FF FF 1F 1B FF FF FF 07 1B FF
     D0: FF FF 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF
     E0: FF 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF FF
     F0: 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF FF 07

.3 .7  Bytes  Description  $00-$01  T/S pointer to second BAM sector
(38/3)  $02  DOS version byte (0x43='C')  $03  Reserved  $04  Lowest
track covered by this BAM (0x01=1)  $05  Highest+1 track covered by
this BAM (0x33=51)  $06-$0A  BAM for track 1. The first byte shows the
"blocks free" for this track, the remaining 4 show the BAM for the
track.   $0B-$0F  BAM for track 2  ...   ...   $FB-$FF  BAM for track 50
multitable

Being bit-based, the BAM entries need some explanation. The first track
entry in the above BAM sector is at offset 06, "1D FF FF FF 1F". The
first number is how many blocks are free on this track ($1D=29) and the
remainder is the bit representation of the usage map for the track.
These entries must be viewed in binary to make any sense. First convert
the values to binary:

      FF=11111111, FF=11111111, FF=11111111, 1F=00011111

In order to make any sense from the binary notation, flip the bits
around.

                 111111 11112222 222222
      01234567 89012345 67890123 456789...
      -------------------------- ---------
      11111111 11111111 11111111 11111000
      ^                              ^
      sector 0                   sector 28

Since we are on the first track, we have 29 sectors, and only use up to
the bit 28 position. If a bit is on (1), the sector is free. Therefore,
track 1 is clean, all sectors are free.  Any leftover bits that refer
to sectors that don't exist, like bits 29-31 in the above example, are
set to allocated.

Second BAM block 38/3.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 27 01 43 00 33 4E 1B FF FF FF 07 1B FF FF FF 07
     10: 1B FF FF FF 07 19 FF FF FF 01 19 FF FF FF 01 19
     20: FF FF FF 01 19 FF FF FF 01 19 FF FF FF 01 19 FF
     30: FF FF 01 19 FF FF FF 01 19 FF FF FF 01 19 FF FF
     40: FF 01 19 FF FF FF 01 19 FF FF FF 01 17 FF FF 7F
     50: 00 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00
     60: 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 17
     70: FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 17 FF
     80: FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 00 00 00
     90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.3 .7  Bytes  Description  $00-$01  T/S pointer to second BAM sector
(39/1)  $02  DOS version byte (0x43='C')  $03  Reserved  $04  Lowest
track covered by this BAM (0x33=51)  $05  Highest+1 track covered by
this BAM (0x43=78)  $06-$0A  BAM for track 51. The first byte shows the
"blocks free" for this track, the remaining 4 show the BAM for the
track.   $0B-$0F  BAM for track 52  ...   ...   $88-$8C  BAM for track
77  $8D-$FF  Not used  multitable


@EndNode

@Node "D82" "vice.guide/D82"
@Next "P00"
@Prev "D80"
@Toc "File formats"

The D82 disk image format
=========================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel.)

This is a sector-for-sector copy of an 8250 floppy disk. The file size
for an 8250 image is 1066496 bytes. It is comprised of 256-byte sectors
arranged across 154 tracks, with a varying number of sectors per track
for a total of 4166 sectors. Track counting starts at 1 (not 0) and
sector counting starts at 0 (not 1), therefore a track with 29 sectors
will go from 0 to 28.

The original media (a 5.25" disk) has the tracks laid out in circles,
with track 1 on the very outside of the disk (closest to the sides) to
track 77 being on the inside of the disk (closest to the inner hub
ring). Commodore, in their infinite wisdom, varied the number of
sectors per track and data densities across the disk to optimize
available storage, resulting in the chart below. It shows the
sectors/track for a D82. Since the outside diameter of a circle is the
largest (versus closer to the center), the outside tracks have the
largest amount of storage.

.33 .33 .33  Track Range  Sectors/track  # Sectors  1-39  29  1131
40-53  27  378  55-64  25  275  65-77  23  299  78-116  29  1131
117-130  27  378  131-141  25  275  142-154  23  299  multitable

.25 .25 .25 .25  Track  #Sect  #SectorsIn  D82 Offset  1  29  0  $000000
2  29  29  $001D00  3  29  58  $003A00  4  29  87  $005700  5  29  116
$007400  6  29  145  $009100  7  29  174  $00AE00  8  29  203  $00CB00
9  29  232  $00E800  10  29  261  $010500  11  29  290  $012200  12  29
319  $013F00  13  29  348  $015C00  14  29  377  $017900  15  29  406
$019600  16  29  435  $01B300  17  29  464  $01D000  18  29  493
$01ED00  19  29  522  $020A00  20  29  551  $022700  21  29  580
$024400  22  29  609  $026100  23  29  638  $027E00  24  29  667
$029B00  25  29  696  $02B800  26  29  725  $02D500  27  29  754
$02F200  28  29  783  $030F00  29  29  812  $032C00  30  29  841
$034900  31  29  870  $036600  32  29  899  $038300  33  29  928
$03A000  34  29  957  $03BD00  35  29  986  $03DA00  36  29  1015
$03F700  37  29  1044  $041400  38  29  1073  $043100  39  29  1102
$044E00  40  27  1131  $046B00  41  27  1158  $048600  42  27  1185
$04A100  43  27  1212  $04BC00  44  27  1239  $04D700  45  27  1266
$04F200  46  27  1293  $050D00  47  27  1320  $052800  48  27  1347
$054300  49  27  1374  $055E00  50  27  1401  $057900  51  27  1428
$059400  52  27  1455  $05AF00  53  27  1482  $05CA00  54  25  1509
$05E500  55  25  1534  $05FE00  56  25  1559  $061700  57  25  1584
$063000  58  25  1609  $064900  59  25  1634  $066200  60  25  1659
$067B00  61  25  1684  $069400  62  25  1709  $06AD00  63  25  1734
$06C600  64  25  1759  $06DF00  65  23  1784  $06F800  66  23  1807
$070F00  67  23  1830  $072600  68  23  1853  $073D00  69  23  1876
$075400  70  23  1899  $076B00  71  23  1922  $078200  72  23  1945
$079900  73  23  1968  $07B000  74  23  1991  $07C700  75  23  2014
$07DE00  76  23  2037  $07F500  77  23  2060  $080C00  78  29  2083
$082300  79  29  2112  $084000  80  29  2141  $085D00  81  29  2170
$087A00  82  29  2199  $089700  83  29  2228  $08B400  84  29  2257
$08D100  85  29  2286  $08EE00  86  29  2315  $090600  87  29  2344
$092800  88  29  2373  $094500  89  29  2402  $096200  90  29  2431
$097F00  91  29  2460  $099C00  92  29  2489  $09B900  93  29  2518
$09D600  94  29  2547  $09F300  95  29  2576  $0A1000  96  29  2605
$0A2D00  97  29  2634  $0A4A00  98  29  2663  $0A6700  99  29  2692
$0A8400  100  29  2721  $0AA100  101  29  2750  $0ABE00  102  29  2779
$0ADB00  103  29  2808  $0AF800  104  29  2837  $0B1500  105  29  2866
$0B3200  106  29  2895  $0B4F00  107  29  2924  $0B6C00  108  29  2953
$0B8900  109  29  2982  $0BA600  110  29  3011  $0BC300  111  29  3040
$0BE000  112  29  3069  $0BFD00  113  29  3098  $0C1A00  114  29  3137
$0C3700  115  29  3156  $0C5400  116  29  3185  $0C7100  117  27  3214
$0C8E00  118  27  3241  $0CA900  119  27  3268  $0CC400  120  27  3295
$0CDF00  121  27  3322  $0CFA00  122  27  3349  $0D1500  123  27  3376
$0D3000  124  27  3403  $0D4B00  125  27  3430  $0D6600  126  27  3457
$0D8100  127  27  3484  $0D9C00  128  27  3511  $0DB700  129  27  3538
$0DD200  130  27  3565  $0DED00  131  25  3592  $0E0800  132  25  3617
$0E2100  133  25  3642  $0E3A00  134  25  3667  $0E5300  135  25  3692
$0E6C00  136  25  3717  $0E8500  137  25  3742  $0E9E00  138  25  3767
$0EB700  139  25  3792  $0ED000  140  25  3817  $0EE900  141  25  3842
$0F0200  142  23  3867  $0F1B00  143  23  3890  $0F3200  144  23  3913
$0F4900  145  23  3936  $0F6000  146  23  3959  $0F7700  147  23  3982
$0F8E00  148  23  4005  $0FA500  149  23  4028  $0FBC00  150  23  4051
$0FD300  151  23  4074  $0FEA00  152  23  4097  $100100  153  23  4120
$101800  154  23  4143  $102F00  multitable

The BAM (Block Availability Map) is on track 38. The D82 is 154 tracks
and so the BAM is contained on 38/0, 38/3, 38/6 and 38/9.  The BAM
interleave is 3.

The directory is on track 39, with 39/0 contains the header (DOS type,
disk name, disk ID's) and sectors 1-28 contain the directory entries.
Both files and the directory use an interleave of 1. Since the
directory is only 28 sectors large (29 less one for the header), and
each sector can contain only 8 entries (32 bytes per entry), the
maximum number of directory entries is 28 * 8 = 224. The first
directory sector is always 39/1. It then follows a chain structure
using a sector interleave of 1 making the links go 39/1, 39/2, 39/3 etc.

When reading a disk, you start with 39/0 (disk label/ID) which points
to 38/0 (BAM0), 38/3 (BAM1), 38/6 (BAM2), 38/9 (BAM3, and finally to
39/1 (first dir entry sector). When writing a file to a blank disk, it
will start at 38/1 because 38/0 is already allocated.

Below is a dump of the header sector 39/0:

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 26 00 43 00 00 00 73 61 6D 70 6C 65 20 64 38 30
     10: A0 A0 A0 A0 A0 A0 A0 A0 65 72 A0 32 43 A0 A0 A0
     20: A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     ...
     F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.3 .7  Bytes  Description  $00-$01  T/S pointer to first BAM sector
(38/0)  $02  $43 'C' is for DOS format version  $03  Reserved  $04-$05
Unused  $06-$16  Disk name, padded with 0xA0 ("sample d82")  $17  0xA0
$18-$19  Disk ID bytes "er"  $1A  0xA0  $1B-$1C  DOS version bytes "2C"
$1D-$20  0xA0  $21-$FF  Unused  multitable

Below is a dump of the first directory sector, 39/1

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 27 02 82 26 01 54 45 53 54 A0 A0 A0 A0 A0 A0 A0
     10: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     20: 00 00 82 26 02 54 45 53 54 32 A0 A0 A0 A0 A0 A0
     30: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     40: 00 00 82 26 04 54 45 53 54 33 A0 A0 A0 A0 A0 A0
     50: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 05 00
     60: 00 00 82 26 0B 54 45 53 54 34 A0 A0 A0 A0 A0 A0
     70: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 09 00
     80: 00 00 82 26 14 54 45 53 54 35 A0 A0 A0 A0 A0 A0
     90: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 0C 00
     A0: 00 00 82 28 00 54 45 53 54 36 A0 A0 A0 A0 A0 A0
     B0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     C0: 00 00 82 28 01 54 45 53 54 37 A0 A0 A0 A0 A0 A0
     D0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00
     E0: 00 00 82 28 02 54 45 53 54 38 A0 A0 A0 A0 A0 A0
     F0: A0 A0 A0 A0 A0 00 00 00 00 00 00 00 00 00 01 00

The first two bytes of the directory sector ($27/$02) indicate the
location of the next track/sector of the directory (39/2).  If the
track is set to $00, then it is the last sector of the directory.

When the directory is done, the track value will be $00. The sector
link should contain a value of $FF, meaning the whole sector is
allocated, but the actual value doesn't matter. The drive will return
all the available entries anyways. This is a breakdown of a standard
directory sector:

.2 .8  Bytes  Description  $00-$1F  First directory entry  $20-$3F
Second dir entry  $40-$5F  Third dir entry  $60-$7F  Fourth dir entry
$80-$9F  Fifth dir entry  $A0-$BF  Sixth dir entry  $C0-$DF  Seventh
dir entry  $E0-$FF  Eighth dir entry  multitable

This is a breakdown of a standard directory entry:

.2 .8  Bytes  Description  $00-$01  Track/Sector location of next
directory sector ($00 $00 if not the first entry in the sector)  $02
File type  $03-$04  Track/sector location of first sector of file
$05-$14  16 character filename (in PETASCII, padded with $A0)  $15-$16
Track/Sector location of first side-sector block (REL file only)  $17
REL file record length (REL file only, max. value 254)  $18-$1D  Unused
$1E-$1F  File size in sectors, low/high byte order ($1E+$1F*256). The
approx. filesize in bytes is <= #sectors * 254  multitable

The file type field is used as follows:

.2 .8  Bits  Description  0-3  The actual file type  4  Unused  5  Used
only during SAVE-@ replacement  6  Locked flag (Set produces ">" locked
files)  7  Closed flag (Not set produces "*", or "splat" files)
multitable

The actual file type can be one of the following:

.2 .2 .6  Binary  Decimal  File type  0000  0  DEL  0001  1  SEQ  0010
2  PRG  0011  3  USR  0100  4  REL  multitable

Values 5-15 are illegal, but if used will produce very strange results.

Non-Standard & Long Directories
-------------------------------

Most Commdore floppy disk drives use a single dedicated directory track
where all filenames are stored. This limits the number of files stored
on a disk based on the number of sectors on the directory track. There
are some disk images that contain more files than would normally be
allowed. This requires extending the directory off the default
directory track by changing the last directory sector pointer to a new
track, allocating the new sectors in the BAM, and manually placing (or
moving existing) file entries there. The directory of an extended disk
can be read and the files that reside there can be loaded without
problems on a real drive. However, this is still a very dangerous
practice as writing to the extended portion of the directory will cause
directory corruption in the non-extended part. Many of the floppy
drives core ROM routines ignore the track value that the directory is
on and assume the default directory track for operations.

BAM layout
----------

The BAM only occupies up to four sectors on track 38, so the rest of
the track is empty and is available for file storage.  Below is a dump
of the first BAM block, 38/0. A D82 will contain four BAM sectors,
38/0, 38/3, 38/6 and 38/9. Each entry takes 5 bytes, 1 for the free
count on that track, and 4 for the BAM bits.

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 26 03 43 00 01 33 1D FF FF FF 1F 1D FF FF FF 1F
     10: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D
     20: FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF
     30: FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF
     40: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     50: 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F
     60: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D
     70: FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF
     80: FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF
     90: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     A0: 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F
     B0: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1B
     C0: F6 FF FF 1F 1B FC FF FF 1F 1B FF FF FF 07 1B FF
     D0: FF FF 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF
     E0: FF 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF FF
     F0: 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF FF 07

.3 .7  Bytes  Description  $00-$01  T/S pointer to second BAM sector
(38/3)  $02  DOS version byte (0x43='C')  $03  Reserved  $04  Lowest
track covered by this BAM (0x01=1)  $05  Highest+1 track covered by
this BAM (0x33=51)  $06-$0A  BAM for track 1. The first byte shows the
"blocks free" for this track, the remaining 4 show the BAM for the
track.   $0B-$0F  BAM for track 2  ...   ...   $FB-$FF  BAM for track 50
multitable

Being bit-based, the BAM entries need some explanation. The first track
entry in the above BAM sector is at offset 06, "1D FF FF FF 1F". The
first number is how many blocks are free on this track ($1D=29) and the
remainder is the bit representation of the usage map for the track.
These entries must be viewed in binary to make any sense. First convert
the values to binary:

      FF=11111111, FF=11111111, FF=11111111, 1F=00011111

In order to make any sense from the binary notation, flip the bits
around.

                 111111 11112222 222222
      01234567 89012345 67890123 456789...
      -------------------------- ---------
      11111111 11111111 11111111 11111000
      ^                              ^
      sector 0                  sector 28

Since we are on the first track, we have 29 sectors, and only use up to
the bit 28 position. If a bit is on (1), the sector is free. Therefore,
track 1 is clean, all sectors are free. Any leftover bits that refer to
sectors that don't exist, like bits 29-31 in the above example, are set
to allocated.

Second BAM block 38/3

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 26 06 43 00 33 65 1B FF FF FF 07 1B FF FF FF 07
     10: 1B FF FF FF 07 19 FF FF FF 01 19 FF FF FF 01 19
     20: FF FF FF 01 19 FF FF FF 01 19 FF FF FF 01 19 FF
     30: FF FF 01 19 FF FF FF 01 19 FF FF FF 01 19 FF FF
     40: FF 01 19 FF FF FF 01 19 FF FF FF 01 17 FF FF 7F
     50: 00 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00
     60: 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 17
     70: FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 17 FF
     80: FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 1D FF FF
     90: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     A0: 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F
     B0: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D
     C0: FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF
     D0: FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF
     E0: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     F0: 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F

.3 .7  Bytes  Description  $00-$01  T/S pointer to third BAM sector
(38/6)  $02  DOS version byte (0x43='C')  $03  Reserved  $04  Lowest
track covered by this BAM (0x33=51)  $05  Highest+1 track covered by
this BAM (0x65=101)  $06-$0A  BAM for track 51. The first byte shows
the "blocks free" for this track, the remaining 4 show the BAM for the
track.   $0B-$0F  BAM for track 52  ...   ...   $FB-$FF  BAM for track
100  multitable

Third BAM block 38/6

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 26 09 43 00 65 97 1D FF FF FF 1F 1D FF FF FF 1F
     10: 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D
     20: FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF
     30: FF FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF
     40: FF 1F 1D FF FF FF 1F 1D FF FF FF 1F 1D FF FF FF
     50: 1F 1D FF FF FF 1F 1B FF FF FF 07 1B FF FF FF 07
     60: 1B FF FF FF 07 1B FF FF FF 07 1B FF FF FF 07 1B
     70: FF FF FF 07 1B FF FF FF 07 1B FF FF FF 07 1B FF
     80: FF FF 07 1B FF FF FF 07 1B FF FF FF 07 1B FF FF
     90: FF 07 1B FF FF FF 07 1B FF FF FF 07 19 FF FF FF
     A0: 01 19 FF FF FF 01 19 FF FF FF 01 19 FF FF FF 01
     B0: 19 FF FF FF 01 19 FF FF FF 01 19 FF FF FF 01 19
     C0: FF FF FF 01 19 FF FF FF 01 19 FF FF FF 01 19 FF
     D0: FF FF 01 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF
     E0: 7F 00 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F
     F0: 00 17 FF FF 7F 00 17 FF FF 7F 00 17 FF FF 7F 00

.3 .7  Bytes  Description  $00-$01  T/S pointer to fourth BAM sector
(38/9)  $02  DOS version byte (0x43='C')  $03  Reserved  $04  Lowest
track covered by this BAM (0x65=101)  $05  Highest+1 track covered by
this BAM (0x97=151)  $06-$0A  BAM for track 101. The first byte shows
the "blocks free" for this track, the remaining 4 show the BAM for the
track.   $0B-$0F  BAM for track 102  ...   ...   $FB-$FF  BAM for track
150  multitable

Fourth BAM block 38/9

         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
         -----------------------------------------------
     00: 27 01 43 00 97 9B 17 FF FF 7F 00 17 FF FF 7F 00
     10: 17 FF FF 7F 00 17 FF FF 7F 00 00 00 00 00 00 00
     20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.3 .7  Bytes  Description  $00-$01  T/S pointer to first directory
sector (39/1)  $02  DOS version byte (0x43='C')  $03  Reserved  $04
Lowest track covered by this BAM (0x97=151)  $05  Highest+1 track
covered by this BAM (0x9B=155)  $06-$0A  BAM for track 151. The first
byte shows the "blocks free" for this track, the remaining 4 show the
BAM for the track.   $0B-$0F  BAM for track 152  ...   ...   $15-$19
BAM for track 154  $1A-$FF  Not used  multitable


@EndNode

@Node "P00" "vice.guide/P00"
@Prev "D82"
@Toc "File formats"

The P00 image format
====================

(This section was contributed by Peter Schepers and slightly edited by
Marco van den Heuvel.)

These files were created for use in the PC64 emulator, written by
Wolfgang Lorenz. Each one has the same layout with the filetype being
stored in the DOS extension (i.e. Pxx is a PRG, Sxx is a SEQ, Uxx is a
USR and Rxx is a RELative file), and the header is only 26 bytes long.

This is a dump of a Pxx file (PRG)...

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
           -----------------------------------------------
     0000: 43 36 34 46 69 6C 65 00 43 52 49 53 49 53 20 4D
     0010: 4F 55 4E 54 41 49 4E 00 00 00

.3 .7  Bytes  Description  $00-$06  ASCII string "C64File"  $07  Always
$00  $08-$17  Filename in PETASCII, padded with $00 (not $A0, like a
D64)  $18  Always $00  $19  REL file record size ($00 if not a REL file)
$1A-??   Program data  multitable

The 'xx' in the extension of the file is usually 00, except when we
have two DOS filenames which would be the same, but the C64 filenames
are different! If we have two C64 filenames which are the same, they
*cannot* co-exist in the same directory. If we have two files which do
convert down to be the same DOS filename, the extension is incremented
until an unused one is found (x01, x02, x03, up to x99). We can have up
to 99 different C64 files with the same corresponding DOS names as
that's all the extension will hold (from P00 to P99).

Each PC64 file only has one entry, there are no multi-file containers
allowed. This could result in a large number of these files in a
directory, even for only a few programs, as each C64 file will result
in a PC64 file entry. The best use for a PC64 file is a single-file
program, one which does not load anything else.

The CRT cartridge image format
==============================

This chapter is based on CRT.txt (rev1.14) compiled by Peter Schepers,
with additional contributions from Per Hakan Sundell, Markus Brenner,
Marco Van Den Heuvel, Groepaz.

Cartridge files were introduced in the CCS64  emulator,  written  by
Per Hakan Sundell, and use the ".CRT" file extension. This format  was
created to handle the various ROM cartridges that exist, such as Action
Replay, the Power cartridge, and the Final Cartridge.

Normal game cartridges can load  into  several  different  memory
ranges ($8000-9FFF,  $A000-BFFF  or  $E000-FFFF).  Newer   utility
and   freezer cartridges were less intrusive, hiding themselves until
called  upon,  and still others used bank-switching techniques to allow
much larger ROM's than normal. Because of these "stealthing" and
bank-switching methods, a special cartridge format  was  necessary,  to
let  the  emulator  know  where  the cartridge should reside, the
control line  states  to  enable  it  and  any special hardware
features it uses.

Header contents
---------------

Here is a dump of a sample 8K normal cartridge,  "Attack  Of  The
Mutant Camels"...

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 00 00 01 00 00 00 00 00 00   ???@????????????
     0020: 41 54 54 41 43 4B 20 4F 46 20 54 48 45 20 4D 55   ATTACK?OF?THE?MU
     0030: 54 41 4E 54 20 43 41 4D 45 4C 53 00 00 00 00 00   TANT?CAMELS?????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: D3 9B BC FE C3 C2 CD 38 30 EA EA EA A9 01 85 13   .?....80....??
     0060: 4C B3 9B A9 08 85 5A 88 D0 FD C6 5A D0 F9 60 D0   Lŗ.?Z...Z.?`.

       Bytes:$0000-000F - 16-byte cartridge signature  "C64  CARTRIDGE"  (padded
                          with space characters)
              0010-0013 - File header length  ($00000040,  in  high/low  format,
                          calculated from offset $0000). The default  (also  the
                          minimum) value is $40.  Some  cartridges  exist  which
                          show a value of $00000020 which is wrong.
              0014-0015 - Cartridge version (high/low, presently 01.00)
              0016-0017 - Cartridge hardware type ($0000, high/low)
                            0 - Normal cartridge
                            1 - Action Replay
                            2 - KCS Power Cartridge
                            3 - Final Cartridge III
                            4 - Simons' BASIC
                            5 - Ocean type 1*
                            6 - Expert Cartridge
                            7 - Fun Play, Power Play
                            8 - Super Games
                            9 - Atomic Power
                           10 - Epyx Fastload
                           11 - Westermann Learning
                           12 - Rex Utility
                           13 - Final Cartridge I
                           14 - Magic Formel
                           15 - C64 Game System, System 3
                           16 - Warp Speed
                           17 - Dinamic**
                           18 - Zaxxon, Super Zaxxon (SEGA)
                           19 - Magic Desk, Domark, HES Australia
                           20 - Super Snapshot V5
                           21 - Comal-80
                           22 - Structured BASIC
                           23 - Ross
                           24 - Dela EP64
                           25 - Dela EP7x8
                           26 - Dela EP256
                           27 - Rex EP256
                           28 - Mikro Assembler
                           29 - Final Cartridge Plus
                           30 - Action Replay 4
                           31 - Stardos
                           32 - EasyFlash
                           33 - EasyFlash Xbank
                           34 - Capture
                           35 - Action Replay 3
                           36 - Retro Replay
                           37 - MMC64
                           38 - MMC Replay
                           39 - IDE64
                           40 - Super Snapshot V4
                           41 - IEEE-488
                           42 - Game Killer
                           43 - Prophet64
                           44 - EXOS
                           45 - Freeze Frame
                           46 - Freeze Machine
                           47 - Snapshot64
                           48 - Super Explode V5.0
                           49 - Magic Voice
                           50 - Action Replay 2
                           51 - MACH 5
                           52 - Diashow-Maker
                           53 - Pagefox
                           54 - Kingsoft
                           55 - Silverrock 128K Cartridge
                           56 - Formel 64
                           57 - RGCD
                           58 - RR-Net MK3
                           59 - EasyCalc
                           60 - GMod2
                   0018 - Cartridge port EXROM line status
                           0 - active (lo)
                           1 - inactive (hi)
                   0019 - Cartridge port GAME line status
                           0 - active (lo)
                           1 - inactive (hi)
              001A-001F - Reserved for future use
              0020-003F - 32-byte cartridge  name  "CCSMON"  (uppercase,  padded
                          with null characters)
              0040-xxxx - Cartridge contents (called CHIP PACKETS, as there  can
                          be more than one  per  CRT  file).  See  below  for  a
                          breakdown of the CHIP format.

(*Note: Ocean type 1 includes Navy Seals, Robocop 2 & 3,  Shadow  of
the     Beast, Toki, Terminator 2 and more)

(**Note: Dinamic includes Narco Police and more)

CHIP Contents
-------------

The following is the contents of the CHIP packet, from position $0040
on in the CRT file. Note I have re-adjusted the starting address to be
$0000, since we are now looking at a file contained in the .CRT file,
and all size references are from where it starts.

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0010: D3 9B BC FE C3 C2 CD 38 30 EA EA EA A9 01 85 13   .?....80....??
     0020: 4C B3 9B A9 08 85 5A 88 D0 FD C6 5A D0 F9 60 D0   Lŗ.?Z...Z.?`.
     0030: F2 60 A9 04 85 49 A9 00 85 48 A2 00 A5 48 9D 40   ?`.?I.?H.?ĨH@
     0040: 03 A5 49 9D 60 03 A5 48 18 69 28 85 48 A5 49 69   ?ĨI`?ĨH?i(HĨIi
     0050: 00 85 49 E8 E0 18 D0 E4 60 A6 03 A4 02 BD 40 03   ?I???.?`?????@?

       Bytes:$0000-0003 - Contained ROM signature "CHIP" (note there can be more
                          than one image in a .CRT file)
              0004-0007 - Total packet length ($00002010,  ROM  image  size  and
                          header combined) (high/low format)
              0008-0009 - Chip type
                           0 - ROM
                           1 - RAM, no ROM data
                           2 - Flash ROM
              000A-000B - Bank number ($0000 - normal cartridge)
              000C-000D - Starting load address (high/low format)
              000E-000F - ROM image size in bytes  (high/low  format,  typically
                          $2000 or $4000)
              0010-xxxx - ROM data

The following is a chart taken from the "Commodore Programmers
Reference Guide". It details the state of various areas of memory
depending  on  the state of the control lines.

Legend: L - ROML (low) H - ROMH (high) G - GAME E - EXROM

     Addr       LHGE   LHGE   LHGE   LHGE   LHGE   LHGE   LHGE   LHGE   LHGE
     Range
                1111   101X   1000   011X   001X   1110   0100   1100   XX01
              default                00X0                             Ultimax
     -------------------------------------------------------------------------
     E000-FFFF Kernal  RAM    RAM   Kernal  RAM   Kernal Kernal Kernal ROMH(*)
     D000-DFFF IO/CHR IO/CHR IO/RAM IO/CHR  RAM   IO/CHR IO/CHR IO/CHR   I/O
     C000-CFFF  RAM    RAM    RAM    RAM    RAM    RAM    RAM    RAM     -
     A000-BFFF BASIC   RAM    RAM    RAM    RAM   BASIC   ROMH   ROMH    -
     8000-9FFF  RAM    RAM    RAM    RAM    RAM    ROML   RAM    ROML  ROML(*)
     4000-7FFF  RAM    RAM    RAM    RAM    RAM    RAM    RAM    RAM     -
     1000-3FFF  RAM    RAM    RAM    RAM    RAM    RAM    RAM    RAM     -
     0000-0FFF  RAM    RAM    RAM    RAM    RAM    RAM    RAM    RAM    RAM

(*) Internal memory does not respond to write accesses in these areas

From the above chart, the following table can be built. It shows
standard cartridges, either 8K or 16K in size, and the memory ranges
they load into.

     Type     Size   Game   EXRom  Low Bank  High Bank
              in K   Line   Line    (ROML)    (ROMH)
     -------------------------------------------------
     Normal    8k     hi     lo     $8000      ----
     Normal    16k    lo     lo     $8000     $A000
     Ultimax   8k     lo     hi     $E000      ----

The ROMH and ROML lines are CPU-controlled status  lines,  used  to
bank in/out RAM, ROM or I/O, depending on what is needed at the time.

Ultimax cartridges typically are situated  in  the  $E000-FFFF  (8K)
ROM address range. There are some cartridges  which  only  use  4K  of
the  8K allocation. If the cartridge is 16K in size, then it will
reside  in  both $8000-9FFF and $E000-FFFF.

Cartridge Specifics
-------------------

0 - Normal cartridge
....................

.3 .7  Size  8Kb  EXROM  active (lo) (0)  GAME  inactive (hi) (1)  Load
address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 00 00 01 00 00 00 00 00 00   ???@????????????
     0020: 41 54 54 41 43 4B 20 4F 46 20 54 48 45 20 4D 55   ATTACK?OF?THE?MU
     0030: 54 41 4E 54 20 43 41 4D 45 4C 53 00 00 00 00 00   TANT?CAMELS?????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: D3 9B BC FE C3 C2 CD 38 30 EA EA EA A9 01 85 13   .?....80....??

The second sample below is a dump of "Music Machine", a  4Kb  ULTIMAX
 mode cartridge. It  is  still  identified  as  a  "standard
cartridge"     according to the ID.

Normal cartridge

.3 .7  Size  4Kb (ULTIMAX mode)  EXROM  inactive (hi) (1)  GAME  active
(lo) (0)  Load address  $F000-F7FF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 00 01 00 00 00 00 00 00 00   ???@????????????
     0020: 4D 55 53 49 43 20 4D 41 43 48 49 4E 45 00 00 00   MUSIC?MACHINE???
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 10 10 00 00 00 00 F0 00 10 00   CHIP????????????
     0050: 3C 66 C3 C3 66 3C FF FF 18 3C 66 7E 66 66 66 00   <f..f<???<f~fff?

The third sample is a dump of "Adventure Creator",  a  16Kb  standard
 cartridge.

Normal cartridge

.3 .7  Size  16Kb  EXROM  active (lo) (0)  GAME  active (lo) (0)  Load
address  $8000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 00 00 00 00 00 00 00 00 00   ???@????????????
     0020: 41 64 76 65 6E 74 75 72 65 20 43 72 65 61 74 6F   Adventure?Creato
     0030: 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   r???????????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00   CHIP???????.?@?
     0050: 09 80 81 EA C3 C2 CD 38 30 A2 00 78 D8 8E 11 D0   ?.!....80.?x..?.

1 - Action Replay
.................

.3 .7  Size  32Kb (4 banks of 8Kb each)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-9FFF (all modules)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 01 00 01 00 00 00 00 00 00   ???@????????????
     0020: 41 63 74 69 6F 6E 20 52 65 70 6C 61 79 20 56 00   Action?Replay?V?
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: 09 80 0C 80 C3 C2 CD 38 30 4C 60 80 4C 63 80 4C   ?.?....80L`.Lc.L

This cart has 32Kb of ROM, and 8Kb of RAM. The bank switching  is  done
   by writing to the I/O-1 range as follows:

         bit  meaning
         ---  -------
         7    extra ROM bank selector (A15) (unused)
         6    1 = resets FREEZE-mode (turns back to normal mode)
         5    1 = enable RAM at ROML ($8000-$9FFF) &
                  I/O-2 ($DF00-$DFFF = $9F00-$9FFF)
         4    ROM bank selector high (A14)
         3    ROM bank selector low  (A13)
         2    1 = disable cartridge (turn off $DE00)
         1    1 = /EXROM high
         0    1 = /GAME low

Additionally the RAM or ROM can be available through a  window  in  the
   I/O-2 range.

2 - KCS Power Cartridge
.......................

.3 .7  Size  16Kb (2 banks of 8K each)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Load address  module #1 - $8000-9FFF
module #2 - $A000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 20 01 00 00 02 00 00 00 00 00 00 00 00   ????????????????
     0020: 4B 43 53 20 50 6F 77 65 72 20 43 61 72 74 72 69   KCS?Power?Cartri
     0030: 64 67 65 00 00 00 00 00 00 00 00 00 00 00 00 00   dge?????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: 09 80 5E FE C3 C2 CD 38 30 78 D8 A2 FF 9A A9 27   ?.^....80x..?..'
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00   CHIP???????? ???
     2060: 97 E3 16 A1 FF FF FF 20 13 A0 A5 01 09 01 85 01   .?.????? Ĩ????

3 - Final Cartridge III
.......................

.3 .7  Size  64Kb (4 banks of 16Kb each)  EXROM  inactive (hi) (1)  GAME
inactive (hi) (1)  Load address  $8000-BFFF (all modules)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 03 00 00 00 00 00 00 00 00   ???@????????????
     0020: 46 69 6E 61 6C 20 43 61 72 74 72 69 64 67 65 20   Final?Cartridge?
     0030: 49 49 49 20 31 39 38 37 00 00 00 00 00 00 00 00   III?1987????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00   CHIP??@?????.?@?
     0050: 09 80 5E FE C3 C2 CD 38 30 4C 4C 80 4C 55 95 4C   ?.^....80LL.LUL
     ...
     4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00   CHIP??@?????.?@?
     4060: 01 02 00 81 5D 81 61 81 99 81 D8 81 0B 82 33 82   ???!]!a!!.!?3
     ...
     8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00   CHIP??@?????.?@?
     8070: 20 43 80 20 52 80 A9 4E 20 05 DE 20 FD BF AD 39   ?C.?R..N??.?..­9
     ...
     C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00   CHIP??@?????.?@?
     C080: A2 06 BD DD 85 95 05 CA 10 F8 AE A0 02 E8 EC A2   .??.?.??Ž ???.

A total of 64 kB of ROM memory  is  organized  into  four  $4000  banks
   located at $8000-$BFFF.

The banks are arranged in the following way:

         Bank 0:  BASIC, Monitor, Disk-Turbo
         Bank 1:  Notepad, BASIC (Menu Bar)
         Bank 2:  Desktop, Freezer/Print
         Bank 3:  Freezer, Compression

The cartridges uses the entire I/O-1 and I/O-2 range. Bank switching is
   done by writing the bank number plus $40 into  memory  location
$DFFF.      For instance, to select bank 2, $DFFF is set to $42.

The CRT file contains four CHIP blocks, each block with a start address
   of $8000, length $4000 and the bank number in the bank  field.  In
the     cartridge header, both EXROM ($18) and GAME  ($19)  are  set
to  1  to     enable the 16 kB ROM configuration.

The registers are arranged in the following way:

One register at $DFFF:

         bit  meaning
         ---  -------
         7      Hide this register (1 = hidden)
         6      NMI line  (0 = low = active) *1)
         5      GAME line  (0 = low = active) *2)
         4      EXROM line (0 = low = active)
         2-3    unassigned (usually set to 0)
         0-1    number of bank to show at $8000

1) if either the freezer button is pressed, or bit 6 is 0, then an  NMI
      is generated

2) if the freezer button is pressed, GAME is also forced low

The rest of I/O-1/I/O-2 contain a mirror of the last  2  pages  of  the
   currently selected ROM bank (also at $dfff, contrary to what some
other     documents say)

4 - Simons' Basic
.................

.3 .7  Size  16Kb (2 banks of 8kb each)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  module #1 - $8000-9FFF
  module #2 - $A000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 04 00 00 00 00 00 00 00 00   ???@????????????
     0020: 53 69 6D 6F 6E 27 73 20 42 61 73 69 63 00 00 00   Simon's?Basic???
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: 52 81 52 81 C3 C2 CD 38 30 41 4C 52 81 20 2C 81   R!R!...80ALR!?,!
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00   CHIP???????? ???
     2060: 20 A4 A6 99 9E CB A0 05 A5 A8 91 20 A4 A6 99 A2   ???. ?Ĩ?.???.

Simons' BASIC permanently uses 16 kB ($4000) bytes of cartridge  memory
   from $8000-$BFFF. However, through some custom bank-switching logic
the     upper area ($A000-$BFFF) may be disabled so Simons' BASIC may
use it as     additional RAM. Writing a value of $01 to address
location $DE00  banks     in ROM, $00 disables ROM and enables RAM.

The CRT file contains two CHIP blocks of length $2000 each,  the  first
   block having a start address of $8000, the second block $A000.  In
the     cartridge header, EXROM ($18) is set to 0, GAME ($19) is set
to  1  to     indicate the RESET/power-up configuration of 8 kB ROM.

5 - Ocean type 1
................

.3 .7  Size  32Kb, 128Kb, 256Kb or 512Kb sizes (4, 16, 32 or 64 banks
of 8Kb)  EXROM  active (lo) (0)  GAME  active (lo) (0)  Load address
Banks 00-15 - $8000-9FFF                    Banks 16-31 - $A000-BFFF
(except Terminator 2)  multitable

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
            -----------------------------------------------   ----------------
     00000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     00010: 00 00 00 40 01 00 00 05 00 00 00 00 00 00 00 00   ???@????????????
     00020: 53 48 41 44 4F 57 20 4F 46 20 54 48 45 20 42 45   SHADOW?OF?THE?BE
     00030: 41 53 54 00 00 00 00 00 00 00 00 00 00 00 00 00   AST?????????????
     00040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     00050: 09 80 83 81 C3 C2 CD 38 30 4C 83 81 4C 76 82 80   ?.!...80L!Lv.
      ...
     02050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00   CHIP????????.???
     02060: 59 6D 00 56 AD 00 55 AE F0 00 01 A0 FE 00 01 F8   Ym?V­?UŽ??? .???
      ...
     20140: 43 48 49 50 00 00 20 10 00 00 00 10 A0 00 20 00   CHIP???????? ???
     20150: 0A 9A 55 FF 9B 69 57 FE AA 65 96 FE 65 0F D6 D9   ?.U?iW.×e.e?..

Here is a list of the known OCEAN cartridges:

         Batman The Movie    (128 kB)
         Battle Command      (128 kB)
         Double Dragon       (128 kB)
         Navy Seals          (128 kB)
         Pang                (128 kB)
         Robocop 3           (128 kB)
         Space Gun           (128 kB)
         Toki                (128 kB)
         Chase H.Q. II       (256 kB)
         Robocop 2           (256 kB)
         Shadow of the Beast (256 kB)
         Terminator 2        (512 kB)

The 32Kb type of cart  has  4  banks  of  8Kb  ($2000),  banked  in  at
   $8000-$9FFF.

The 128Kb type of cart has  16  banks of  8Kb  ($2000),  banked  in  at
   $8000-$9FFF.

The 256Kb type of cart has 32 banks of 8Kb ($2000),  16  banked  in  at
   $8000-$9FFF, and 16 banked in at $A000-$BFFF.

The 512Kb type of cart has 64  banks  of  8Kb  ($2000),  banked  in  at
   $8000-$9FFF.

Bank switching is done by writing to $DE00. The lower six bits give the
   bank number (ranging from 0-63). Bit 7 in this selection word is
always     set.

6 - Expert Cartridge
....................

.3 .7  Size  8Kb  EXROM  inactive (hi) (1)  GAME  active (lo) (0)  Load
address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 06 01 00 00 00 00 00 00 00   ???@????????????
     0020: 45 78 70 65 72 74 20 43 61 72 74 72 69 64 67 65   Expert?Cartridge
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 40 10 00 02 00 00 80 00 20 00   CHIP??@?????.???
     0050: 00 00 00 0A F3 00 00 00 00 00 00 00 00 00 00 00   ????????????????

7 - Fun Play, Power Play
........................

.3 .7  Size  128Kb (16 banks of 8Kb modules)  EXROM  active (lo) (0)
GAME  inactive (hi) (1)  Load address  $8000-9FFF (all modules)
multitable

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
            -----------------------------------------------   ----------------
     00000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     00010: 00 00 00 40 01 00 00 07 00 01 00 00 00 00 00 00   ???@????????????
     00020: 46 55 4E 20 50 4C 41 59 00 00 00 00 00 00 00 00   FUN?PLAY????????
     00030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     00040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     00050: 1E 80 86 EA C3 C2 CD 38 30 1B 00 81 0D 08 80 00   ?.....80??!??.?
      ...
     02050: 43 48 49 50 00 00 20 10 00 00 00 08 80 00 20 00   CHIP????????.???
     02060: 78 A2 F0 86 01 BD 1D 08 9D F8 00 CA D0 F7 4C 00   x.???????..?L?
      ...
     04060: 43 48 49 50 00 00 20 10 00 00 00 10 80 00 20 00   CHIP????????.???
     04070: 38 E5 68 85 03 B0 11 27 03 12 C0 18 69 27 42 90   8?h?°?'??.?i'B
      ...
     06070: 43 48 49 50 00 00 20 10 00 00 00 18 80 00 20 00   CHIP????????.???
     06080: 44 D0 5E 06 02 C0 44 11 40 04 11 44 01 5F 1C 73   D.^??.D?@??D?_?s
      ...
     1E130: 43 48 49 50 00 00 20 10 00 00 00 39 80 00 20 00   CHIP???????9.???
     1E140: 85 EB 41 EA 9E 08 03 00 C0 06 18 01 00 C0 08 03   ?A.???.????.??

The FUN PLAY Cartridge uses $DE00 for  bank  selection,  and  uses  8Kb
   banks ($2000) at $8000-$9FFF. There are 16 banks of ROM memory and
are     referenced by the following values:

         $00 -> Bank 0
         $08 -> Bank 1
         $10 -> Bank 2
         $18 -> Bank 3
         $20 -> Bank 4
         $28 -> Bank 5
         $30 -> Bank 6
         $38 -> Bank 7
         $01 -> Bank 8
         $09 -> Bank 9
         $11 -> Bank 10
         $19 -> Bank 11
         $21 -> Bank 12
         $29 -> Bank 13
         $31 -> Bank 14
         $39 -> Bank 15

The bank field in the chip  headers  is  set  according  to  the  value
   written to $DE00. The following bits are  used  for  bank  decoding
in     $DE00 (0 being the LSB, 3 being the MSB).

             Bit# 76543210
                  xx210xx3

After copying memory from the ROM banks, the selection  program  writes
   a value of $86 to $DE00. This seems either  to  reset  or  disable
the     cartridge ROM.

8 - Super Games
...............

.3 .7  Size  64Kb (4 banks of 16Kb each)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Startup mode  16k game  Load address  $8000-BFFF (all
modules)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 08 00 00 00 00 00 00 00 00   ???@????????????
     0020: 53 55 50 45 52 20 47 41 4D 45 53 00 00 00 00 00   SUPER?GAMES?????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00   CHIP??@?????.?@?
     0050: 0A 80 0A 80 C3 C2 CD 38 30 00 A9 80 A0 00 85 FB   ?.?....80?.. ?.
     ...
     4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00   CHIP??@?????.?@?
     4060: 27 80 A8 80 C3 C2 CD 38 30 00 40 C0 40 C0 40 C0   '.?....80?@.@.@.
     ...
     8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00   CHIP??@?????.?@?
     8070: 00 00 00 49 4D C7 64 47 46 45 F3 48 DC 08 7E 0B   ???IM.dGFE?H.?~?
     ...
     C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00   CHIP??@?????.?@?
     C080: D5 F9 F0 C1 D5 F7 F0 BD E8 B5 02 F0 FB C9 05 30   .??..????ĩ??..?0

The Super Games cartridge  uses  4  16Kb  banks  ($8000-$BFFF)  of  ROM
   memory. Bank selecting is done by writing to $DF00.

$DF00 register is as follows:

         bit   meaning
         ---   -------
          0    bank bit 0
          1    bank bit 1
          2    mode (0 = EXROM/GAME (bridged on the same wire - 16k config) 1 = cartridge disabled)
          3    write-protect-latch  (1 = no more changes are possible until the next hardware-reset )
         4-7   unused

9 - Atomic Power
................

.3 .7  Size  32Kb (4 banks of 8Kb modules)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-9FFF (all modules)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 09 00 01 00 00 00 00 00 00   ???@????????????
     0020: 41 74 6F 6D 69 63 20 50 6F 77 65 72 00 00 00 00   Atomic?Power????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: 09 80 0C 80 C3 C2 CD 38 30 4C 41 80 4C 1E 80 4C   ?.?....80LA.L?.L
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00   CHIP????????.???
     2060: 09 80 0C 80 C3 C2 CD 38 30 4C 3F 80 4C 91 80 4C   ?.?....80L?.L..L
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00   CHIP????????.???
     4070: EF FC 09 80 C3 C2 CD 38 30 4C 27 80 4C DB 81 4C   ?.?....80L'.L.!L
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00   CHIP????????.???
     6080: 09 80 0C 80 C3 C2 CD 38 30 4C 73 86 4C 30 80 4C   ?.?....80LsL0.L

This cart has 32Kb of ROM and 8Kb of RAM

Writing to I/O-1 will do the following:

         bit  meaning
         ---  -------
         7    extra ROM bank selector (A15) (unused)
         6    1 = resets FREEZE-mode (turns back to normal mode)
         5    1 = enable RAM at ROML ($8000-$9FFF) &
                  I/O-2 ($DF00-$DFFF = $9F00-$9FFF)
         4    ROM bank selector high (A14)
         3    ROM bank selector low  (A13)
         2    1 = disable cartridge (turn off $DE00)
         1    1 = /EXROM high
         0    1 = /GAME low

If bit 5 (RAM enable) is 1, bit 0,1 (exrom/game) is ==  2  (cart  off),
   bit 2,6,7 (cart disable, freeze clear) are 0, then cart ROM (Bank
0..3)     is mapped at 8000-9FFF, and cart RAM (Bank 0) is  mapped  at
A000-BFFF     and cart RAM (Bank 0) is is enabled in the I/O-2 area
using  16Kb  game     config.

The cart RAM or ROM is available through a window in the I/O-2 range.

10 - Epyx Fastload
..................

.3 .7  Size  8Kb  EXROM  active (lo) (0)  GAME  inactive (hi) (1)  Load
address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 0A 00 01 00 00 00 00 00 00   ???@????????????
     0020: 45 50 59 58 20 46 41 53 54 4C 4F 41 44 00 00 00   EPYX?FASTLOAD???
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: 30 80 5E FE C3 C2 CD 38 30 20 04 90 4C 38 DF AB   0.^....80??L8?Ģ

The Epyx FastLoad cart uses a simple capacitor to toggle the ROM on
and off:

the capacitor is discharged, and 8k game config enabled, by either
reading ROML or reading I/O-1. If none of those accesses happen the
capacitor will charge, and if it is charged (after 512 cycles) then
the ROM will get disabled.

11 - Westermann Learning
........................

.3 .7  Size  16Kb  EXROM  active (lo) (0)  GAME  active (lo) (0)  Load
address  $8000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 0B 00 00 00 00 00 00 00 00   ???@????????????
     0020: 57 45 53 54 45 52 4D 41 4E 4E 00 00 00 00 00 00   WESTERMANN??????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 40 00   CHIP????????.?@?
     0050: 09 80 9C 80 C3 C2 CD 38 30 A2 00 8E 16 D0 20 84   ?.....80.?.?.?

Any read from the I/O-2 range will switch the cart off.

12 - Rex Utility
................

.3 .7  Size  8K  EXROM  active (lo) (0)  GAME  inactive (hi) (1)  Load
address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 0C 00 01 00 00 00 00 00 00   ???@????????????
     0020: 52 45 58 00 00 00 00 00 00 00 00 00 00 00 00 00   REX?????????????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00   CHIP????????.???
     0050: 08 80 C1 FE C3 C2 CD 38 30 6C 95 E3 20 A3 FD 20   ?......80l.?Ŗ.?

Reading from $DF00-DFBF disables ROM, reading from $DFC0-DFFF enables
 ROM (8k game config).

13 - Final Cartridge I
......................

.3 .7  Size  16Kb  EXROM  active (lo) (0)  GAME  active (lo) (0)  Load
address  $8000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII
           -----------------------------------------------   ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20   C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 0D 00 00 00 00 00 00 00 00   ???@????????????
     0020: 54 68 65 20 46 69 6E 61 6C 20 43 61 72 74 72 69   The?Final?Cartri
     0030: 64 67 65 20 49 00 00 00 00 00 00 00 00 00 00 00   dge?I???????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00   CHIP??@?????.?@?
     0050: 80 BA 5E FE C3 C2 CD 38 30 00 A0 A0 20 2D FE 58   .÷^....80?  ?-.X

Any access to I/O-1 turns cartridge ROM off. Any access to I/O-2  turns
   cartridge ROM on.

The cart ROM is visible in I/O-1 and I/O-2.

14 - Magic Formel
.................

.3 .7  Size  64Kb (8 banks of 8Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Load Address  $E000-FFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 0E 01 00 00 00 00 00 00 00  ???@????????????
     0020: 4D 61 67 69 63 20 46 6F 72 6D 65 6C 00 00 00 00  Magic?Formel????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 E0 00 20 00  CHIP????????????
     0050: 4D 46 30 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF0??`??`??`
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 E0 00 20 00  CHIP????????????
     2060: 4C 5F E4 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  L_???`??`??`
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 E0 00 20 00  CHIP????????????
     4070: 4D 46 32 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF2??`??`??`
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 E0 00 20 00  CHIP????????????
     6080: 4D 46 33 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF3??`??`??`
     ...
     8080: 43 48 49 50 00 00 20 10 00 00 00 04 E0 00 20 00  CHIP????????????
     8090: 4D 46 34 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF4??`??`??`
     ...
     A090: 43 48 49 50 00 00 20 10 00 00 00 05 E0 00 20 00  CHIP????????????
     A0A0: 4D 46 35 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF5??`??`??`
     ...
     C0A0: 43 48 49 50 00 00 20 10 00 00 00 06 E0 00 20 00  CHIP????????????
     C0B0: 4D 46 36 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF6??`??`??`
     ..
     E0B0: 43 48 49 50 00 00 20 10 00 00 00 07 E0 00 20 00  CHIP????????????
     E0C0: 4D 46 37 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D  MF7??`??`??`

15 - C64 Game System, System 3
..............................

.3 .7  Size  512Kb (64 banks of 8Kb each)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-9FFF (all modules)  multitable

             00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
             -----------------------------------------------  ----------------
     000000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     000010: 00 00 00 40 01 00 00 0F 00 01 00 00 00 00 00 00  ???@????????????
     000020: 43 36 34 47 53 20 43 61 72 74 72 69 64 67 65 00  C64GS?Cartridge?
     000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     000040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     000050: 6D 80 C5 80 C3 C2 CD 38 30 4C CB 80 4C 36 84 4C  m......80L..L6L
     ...
     002050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     002060: 18 D0 A9 FF 8D 15 D0 8D 1D D0 8D 17 D0 A2 07 A9  ?..??.?.?..?.
     ...
     004060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     004070: E0 08 19 21 77 84 52 98 9F 80 A5 21 31 01 31 89  ???!wR?.Ĩ!1?1	
     ...
     006070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00  CHIP????????.???
     006080: C0 08 1C 1D A0 92 03 03 D8 AA 04 C0 B8 01 40 EA  .??? .??.×?.??@.
     ...
     07E430: 43 48 49 50 00 00 20 10 00 00 00 3F 80 00 20 00  CHIP????????.???
     07E440: 45 20 41 20 42 49 47 20 58 FE 4F 4E 20 54 48 49  E?A?BIG?X.ON?THI

Here is a list of the known cartridges:

         C64GS 4-in-1      (Commodore)  (512 kB)
         Last Ninja Remix  (System 3)   (512 kB)
         Myth              (System 3)   (512 kB)

ROM memory is organized in 8Kb ($2000) banks  located  at  $8000-$9FFF.
   Bank switching is done by writing to address $DE00+X, where  X  is
the     bank number (STA $DE00,X). For instance, to read from bank  3,
address     $DE03 is written to. Reading from anywhere  in  the  I/O-1
range  will     disable the cart.

The CRT file contains a string of CHIP blocks, each block with a  start
   address of $8000, length $2000 and the bank number in the  bank
field.      In the cartridge header, EXROM ($18) is set to 0, GAME
($19) is set  to     1 to enable the 8 kB ROM configuration.

16 - Warp Speed
...............

.3 .7  Size  16Kb  EXROM  active (lo) (0)  GAME  active (lo) (0)  Load
address  $8000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 10 00 00 00 00 00 00 00 00  ???@????????????
     0020: 57 61 72 70 73 70 65 65 64 00 00 00 00 00 00 00  Warpspeed???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00  CHIP??@?????.?@?
     0050: 4C 22 80 4C 22 80 FF 43 42 4D 20 53 E4 20 18 E5  L".L".?CBM?S????

After  RESET  or  POWER  ON,  16kB  of  cartridge  ROM  is  visible  at
   $8000-$BFFF. Additionally,  ROM  normally  located  at  $9E00-$9FFF
is     mirrored into I/O-1 and I/O-2 at $DE00-$DFFF.  ROM  at
$8000-$BFFF  is     disabled by writing into the I/O-2 area (typically
$DF00)  and  may  be     re-enabled by writing into  I/O-1  ($DE00).
However,  the  $DE00-$DFFF     (I/O-1/I/O-2) area itself always remains
mapped to cartridge ROM.

17 - Dinamic
............

.3 .7  Size  128Kb (16 banks of 8Kb each)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-9FFF (all modules)  multitable

             00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
             -----------------------------------------------  ----------------
     000000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     000010: 00 00 00 40 01 00 00 11 00 01 00 00 00 00 00 00  ???@????????????
     000020: 4E 61 72 63 6F 20 50 6F 6C 69 63 65 00 00 00 00  Narco?Police????
     000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     000040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     000050: 0B 80 0B 80 C3 C2 CD 38 30 00 00 78 A2 FF 9A D8  ?.?....80??x.?..
     ..
     002050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     002060: 1C 8C 1B 8C 16 16 8F 16 16 88 1C 1C 86 1C 1C 89  ??????????	
     ..
     004060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     004070: B6 02 07 08 07 07 00 0A 0A B6 00 05 0A 00 07 07  ļ????????ļ??????
     ..
     01E130: 43 48 49 50 00 00 20 10 00 00 00 0F 80 00 20 00  CHIP????????.???
     01E140: 00 D5 70 03 F5 70 0F 5F 70 0F F7 70 35 FD F0 37  ?.p??p?_p??p5.?7

Here is a list of the known DINAMIC cartridges:

         Narco Police  (128 kB)
         Satan         (128 kB)

ROM memory is organized in 8Kb ($2000) banks  located  at  $8000-$9FFF.
   Bank switching is done by reading from address $DE00+X, where X is
the     bank number (LDA $DE00,X). For instance, to read from bank  3,
address     $DE03 is accessed.

The CRT file contains a string of CHIP blocks, each block with a  start
   address of $8000, length $2000 and the bank number in the  bank
field.      In the cartridge header, EXROM ($18) is set to 0, GAME
($19) is set  to     1 to enable the 8 kB ROM configuration.

18 - Zaxxon, Super Zaxxon (SEGA)
................................

.3 .7  Size  20Kb (3 banks of different sizes)  EXROM  active (lo) (0)
GAME  active (lo) (0)  Load address  $8000-8FFF (mirrored in
$9000-9FFF, module 0, chip U1)                     $A000-BFFF (banked
modules 1 and 2, chip U2)  multitable

             00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
             -----------------------------------------------  ----------------
     000000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     000010: 00 00 00 40 01 00 00 12 00 00 00 00 00 00 00 00  ???@????????????
     000020: 5A 61 78 78 6F 6E 00 00 00 00 00 00 00 00 00 00  Zaxxon??????????
     000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     000040: 43 48 49 50 00 00 10 10 00 00 00 00 80 00 10 00  CHIP????????.???
     000050: 0D 80 29 80 C3 C2 CD 38 30 78 4C 09 80 78 A9 00  ?.)....80xL?.x.?
     ..
     001050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00  CHIP???????? ???
     001060: A2 0F BD 00 20 D0 04 CA 10 F8 60 BD 70 20 F0 0D  .????.?.??`?p???
     ..
     003060: 43 48 49 50 00 00 20 10 00 00 00 01 A0 00 20 00  CHIP???????? ???
     003070: 65 A2 36 A3 E7 A3 CB A4 94 A5 86 A6 5E A7 35 A8  e.6Ŗ?Ŗ.?Ĩ?^§5?

The (Super) Zaxxon carts use a 4Kb ($1000) ROM at $8000-$8FFF (mirrored
   in $9000-$9FFF) along with two 8Kb ($2000) cartridge banks  located
at     $A000-$BFFF. One of the two banks is selected by doing a read
access to     either the $8000-$8FFF area (bank 0 is selected) or to
$9000-$9FFF area     (bank 1 is selected). EXROM ($18 = $00) and GAME
($19 = $00) lines  are     always pulled to GND to select the 16 kB ROM
configuration.

The CRT file includes three CHIP blocks:
         a) bank = 0, load address = $8000, size = $1000
         b) bank = 0, load address = $A000, size = $2000
         c) bank = 1, load address = $A000, size = $2000

19 - Magic Desk, Domark, HES Australia
......................................

.3 .7  Size  32Kb, 64Kb or 128Kb sizes (4 to 16 banks of 8Kb each)
EXROM  active (lo) (0)  GAME  inactive (hi) (1)  Startup mode  8k Game
Load address  (banks 00-15) - $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 13 00 01 00 00 00 00 00 00  ???@????????????
     0020: 4D 61 67 69 63 20 44 65 73 6B 00 00 00 00 00 00  Magic?Desk??????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 C6 CA C3 C2 CD 38 30 8E 16 D0 20 A3 FD 20  ?......80.?.?Ŗ.?
     ..
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 00 3F 0A 01 00 86 4E 24 28 31 30 29 3A 4A 4F 59  ?????N$(10):JOY
     ..
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     4070: 00 8B C9 28 4E 24 2C 31 29 B3 B1 22 FF 22 A7 32  ?.(N$,1)ŗą"?"§2
     ..
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00  CHIP????????.???
     6080: AE 01 83 33 2C 37 2C 22 32 29 20 44 45 4C 20 4B  Ž?3,7,"2)?DEL?K

This cartridge type is very similar to the OCEAN cart type: ROM  memory
   is  organized  in  8Kb  ($2000)  banks  located  at  $8000-$9FFF.
Bank     switching is done by writing the bank number to $DE00. Deviant
from the     Ocean type, bit 7 is cleared for selecting one of the ROM
banks. If bit     7 is set ($DE00 = $80), the GAME/EXROM lines are
disabled,  turning  on     RAM at $8000-$9FFF instead of ROM.

In the cartridge header, EXROM ($18) is set to 0, GAME ($19) is set  to
   1 to indicate the RESET/power-up configuration of 8 kB ROM.

Here is a list of the known cartridges:

         Ghosbusters        (HES Australia)   (32 kB)
         Magic Desk         (Commodore)       (32 kB)
         Badlands           (Domark)          (64 kB)
         Vindicators        (Domark)          (64 kB)
         Wonderboy          (HES Australia)   (64 kB)
         Cyberball          (Domark)         (128 kB)

20 - Super Snapshot V5
......................

.3 .7  Size  64Kb (4 banks of 16Kb each)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Load address  $8000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 14 00 00 00 00 00 00 00 00  ???@????????????
     0020: 53 75 70 65 72 20 53 6E 61 70 73 68 6F 74 20 35  Super?Snapshot?5
     0030: 20 4E 54 53 43 00 00 00 00 00 00 00 00 00 00 00  ?NTSC???????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00  CHIP??@?????.?@?
     0050: 09 80 59 80 C3 C2 CD 38 30 20 03 9F 00 FA F4 20  ?.Y....80???????
     ...
     4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00  CHIP??@?????.?@?
     4060: 79 DE BC FE C3 C2 CD 38 30 A9 05 8D 20 D0 8D 21  y.?....80.??.!
     ...
     8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00  CHIP??@?????.?@?
     8070: 50 DE BC FE C3 C2 CD 38 30 A9 0A 85 6A A9 0D 85  P.?....80.?j.?
     ...
     C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00  CHIP??@?????.?@?
     C080: 50 DE BC FE C3 C2 CD 38 30 85 07 20 1A AD A5 76  P.?....80???­Ĩv

The first page of the currently selected ROM bank is  mirrored  in  the
   I/O-1 range when reading.

The control Register is the I/O-1 range when writing:

         bit  meaning
         ---  -------
         7-5  unused
         4    ROM/RAM bank bit 1
         3    ROM enable
         2    ROM/RAM bank bit 0
         1    RAM enable, EXROM
         0    release freeze, !GAME

21 - Comal-80
.............

.3 .7  Size  64Kb (4 banks of 16Kb each)  EXROM  active (low) (0)  GAME
active (low) (0)  Load address  $8000-BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 15 00 00 00 00 00 00 00 00  ???@????????????
     0020: 43 6F 6D 61 6C 20 38 30 00 00 00 00 00 00 00 00  Comal?80????????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00  CHIP??@?????.?@?
     0050: 87 87 70 CF C3 C2 CD 38 30 4C AA CF 4C 70 CF 4C  ..p....80L×.Lp.L
     ...
     4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00  CHIP??@?????.?@?
     4060: AA CF 70 CF C3 C2 CD 38 30 01 29 01 28 01 2C 04  ×.p....80?)?(?,?
     ...
     8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00  CHIP??@?????.?@?
     8070: AA CF 70 CF C3 C2 CD 38 30 91 92 92 92 92 92 92  ×.p....80.......
     ...
     C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00  CHIP??@?????.?@?
     C080: 7B C8 7E C8 C3 C2 CD 38 30 43 4F 4D 41 4C 80 93  ..~....80COMAL..

The Comal-80 Cartridge uses 16Kb banks ($4000) at $8000-$BFFF. There
are 4     banks of ROM memory and the cart has 1 (write-only) bank
control register which     is located at $DE00 and mirrored throughout
the $DE00-$DEFF range.

         bit  meaning
         ---  -------
         7    exrom?
         6    game?
         5    unknown function (used by the software to disable the cartridge)
         4    unused?
         3    unused?
         2    unknown function (used by the software however)
         0-1  selects bank

22 - Structured Basic
.....................

.3 .7  Size  16Kb (2 banks of 8Kb each)  EXROM  inactive (hi) (1)  GAME
active (0)  Load address  $8000-9FFF  multitable

No sample data/file available.

IF YOU OWN THIS TYPE OF CARTRIDGE AND/OR CAN PROVIDE A ROM IMAGE, PLEASE
   GET IN TOUCH WITH US!

Any read/write access to $DE00 or $DE01 will  switch  in  bank  0.  Any
   read/write access to $DE02 will switch in bank 1. Any read/write
access     to $DE03 will switch off EXROM.

23 - Ross
.........

.3 .7  Size  16Kb or 32Kb sizes (1 or 2 banks of 16Kb each)  EXROM
active (lo) (0)  GAME  active (lo) (0)  Load address  $8000-BFFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 17 00 00 00 00 00 00 00 00  ???@????????????
     0020: 52 6F 73 73 20 31 34 00 00 00 00 00 00 00 00 00  Ross?14?????????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00  CHIP??@?????.?@?
     0050: 09 80 09 80 C3 C2 CD 38 30 A2 00 BD 20 80 4D 0E  ?.?....80.???.M?
     ...
     4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00  CHIP??@?????.?@?
     4060: 3F 5A 4D 4D 50 4D 8D 25 3F 1A 1F 77 3F CD E0 3F  ?ZMMPM%???w?.??

Any read access to $DE00 will switch in bank 1 (if cart is  32Kb).  Any
   read access to $DF00 will switch off EXROM and GAME.

24 - Dela EP64
..............

.3 .7  Size  8Kb to 72kb sizes (1 to 9 banks of 8Kb each,
               or 1 bank of 8Kb and 1 or 2 banks
       of 32Kb each)  EXROM  active (lo) (0)  GAME  inactive (hi) (1)
Load address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 18 00 01 00 00 00 00 00 00  ???@????????????
     0020: 44 45 4C 41 20 45 50 36 34 00 00 00 00 00 00 00  DELA?EP64???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 00 85 5E FE C3 C2 CD 38 30 FF FF FF FF FF FF FF  ?^....80???????
     ...
     2050: 43 48 49 50 00 00 80 10 00 00 00 01 80 00 80 00  CHIP??.?????.?.?
     2060: 54 45 53 54 0D 2A 0D 54 45 20 36 34 0D 00 00 00  TEST?*?TE?64????

This is an eprom cartridge. It has 1 2764 (8Kb) which  holds  the  base
   eprom with the base menu, and 2 27256 eproms of  which  8Kb  parts
are     banked into the $8000-9FFF area.

The bank selecting is done by writing to $DE00. The following bits  are
   used for bank decoding in $DE00 (0 being the LSB, 3 being the MSB).

              Bit# 76543210
                   xx10xx32

Any bank value below 4 or above 11 switches in the base bank (bank 0).

The bit values for each eprom bank are :

         eprom bank 1 : xx00xx01
         eprom bank 2 : xx01xx01
         eprom bank 3 : xx10xx01
         eprom bank 4 : xx11xx01
         eprom bank 5 : xx00xx10
         eprom bank 6 : xx01xx10
         eprom bank 7 : xx10xx10
         eprom bank 8 : xx11xx10

Setting bit 7 high will switch off EXROM.

25 - Dela EP7x8
...............

.3 .7  Size  8Kb to 64kb sizes (1 to 8 banks of 8Kb each)  EXROM
active (lo) (0)  GAME  inactive (hi) (1)  Load address  $8000-9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 19 00 01 00 00 00 00 00 00  ???@????????????
     0020: 44 45 4C 41 20 45 50 37 78 38 00 00 00 00 00 00  DELA?EP7x8??????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 5E FE C3 C2 CD 38 30 78 A2 FF 9A D8 8E 16  ?.^....80x.?...?
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 94 83 A0 83 C3 C2 CD 38 30 02 BB 5A 30 5F EE 3D   ...80?ģZ0_?=

This is an eprom cartridge. It has 8 8Kb banks of which the first holds
   the base menu, the other eproms can be banked into the $8000-9FFF
area.

The bank selecting is done by writing to $DE00. Each low bit is used to
   bank in the respective eprom. If all bits are high then  the  EXROM
is     switched off.

The bit values for each eprom bank is:

         eprom bank 1 : 11111110 ($FE) (base eprom)
         eprom bank 2 : 11111101 ($FD)
         eprom bank 3 : 11111011 ($FB)
         eprom bank 4 : 11110111 ($F7)
         eprom bank 5 : 11101111 ($EF)
         eprom bank 6 : 11011111 ($DF)
         eprom bank 7 : 10111111 ($BF)
         eprom bank 8 : 01111111 ($7F)
     
         EXROM off    : 11111111 ($FF)

26 - Dela EP256
...............

.3 .7  Size  8Kb to 262kb sizes (1 to 33 banks of 8Kb each)  EXROM
active (lo) (0)  GAME  inactive (hi) (1)  Load address  $8000-9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 1A 00 01 00 00 00 00 00 00  ???@????????????
     0020: 44 45 4C 41 20 45 50 32 35 36 00 00 00 00 00 00  DELA?EP256??????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 00 85 5E FE C3 C2 CD 38 30 93 0D 2B 2B 2B 20 45  ?^....80.?+++?E
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 09 80 28 80 C3 C2 CD 38 30 78 A2 05 8E 16 D0 20  ?.(....80x.?.?.?
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     4070: 0B 80 BC FE C3 C2 CD 38 30 DC 10 8E 16 D0 20 87  ?.?....80.?.?.?.
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00  CHIP????????.???
     6080: 09 80 F6 8E C3 C2 CD 38 30 A2 C8 8E 16 D0 20 ..  ?.?....80...?.?.
     ...
     8080: 43 48 49 50 00 00 20 10 00 00 00 04 80 00 20 00  CHIP????????.???
     8090: 94 83 A0 83 C3 C2 CD 38 30 02 BB 5A 30 5F EE 3D   ...80?ģZ0_?=

This is an eprom cartridge. It has 33 8Kb  banks  of  which  the  first
   holds the base menu, the other eproms can be banked into the
$8000-9FFF     area.

The bank selecting is done by writing to $DE00.

The values for the (extra) eprom banks are:

         eprom banks  1- 8 : $38-3F
         eprom banks  9-16 : $28-2F
         eprom banks 17-24 : $18-1F
         eprom banks 25-32 : $08-0F

Setting bit 7 high will switch off EXROM.

27 - Rex EP256
..............

.3 .7  Size  8Kb to 262kb sizes (1 bank of 8Kb and 1 to 8 banks of
either                                8Kb, 16Kb or 32Kb)  EXROM  active
(lo) (0)  GAME  inactive (hi) (1)  Load address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 1B 00 01 00 00 00 00 00 00  ???@????????????
     0020: 52 45 58 20 45 50 32 35 36 00 00 00 00 00 00 00  REX?EP256???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 C1 FE C3 C2 CD 38 30 20 A3 FD 20 50 FD 20  ?......80?Ŗ.?P.?
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 09 80 F2 8F C3 C2 CD 38 30 A2 C8 8E 16 D0 20 A3  ?.?...80...?.?Ŗ
     ...
     4060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00  CHIP??@?????.?@?
     4070: 09 80 09 80 C3 C2 CD 38 30 58 D8 20 84 FF 20 8A  ?.?....80X.???


This is an eprom cartridge. It has 9 eprom sockets, of which the  first
   holds the base eprom with the base menu which  is  an  8Kb  eprom,
the     other eprom sockets can handle 8Kb, 16Kb or 32Kb eproms, of
which  8kb     can be banked into the $8000-9FFF area.

The bank selecting is done by  writing  to  $DFA0.  Bits  2,  1  and  0
   determine which socket is used and bits 5 and 4 are used to  select
an     8Kb piece of the eprom.

The possible values for bits 5 and 4 for the (extra) eprom banks are:

          8Kb        : 3, 2, 1, 0
     
         16Kb bank 0 : 2, 0
         16Kb bank 1 : 3, 1
     
         32Kb bank 0 : 0
         32Kb bank 1 : 1
         32Kb bank 2 : 2
         32Kb bank 3 : 3

Reading from $DFC0 switches off the EXROM.      Reading from $DFE0
switches on the EXROM.

28 - Mikro Assembler
....................

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 1C 00 01 00 00 00 00 00 00  ???@????????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 60 80 FE 80 C3 C2 CD 38 30 4C 07 87 4C CA 82 41  `......80L?.L.A

The $9E00-$9EFF range is mirrored at $DE00-$DEFF. The $9F00-$9FFF range
   is mirrored at $DF00-$DFFF.

29 - Final Cartridge Plus
.........................

.3 .7  Size  32Kb (1 bank of 32Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Load address  $0000-$7FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 1D 01 00 00 00 00 00 00 00  ???@????????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 80 10 00 00 00 00 00 00 80 00  CHIP??.???????.?
     0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ????????????????

This cart has 32Kb of ROM, bank 0 is in the cart image but is  unused.
   The first 8Kb of the cart image is unused, the second 8Kb of the
cart     image is mapped to $E000-$FFFF, the third 8Kb of  the  cart
image  is     mapped to $8000-$9FFF and the fourth 8Kb of the cart
image  is  mapped     to $A000-$BFFF. An NMI can be triggered by the
cart, if address  $0001     is written to and the cartridge is enabled.
The cart can  be  disabled     by software, by clearing bit 4 when
writing to $DF00-$DFFF.  Cart  ROM     at $E000-$FFFF can be disabled
by setting bit 5 to 0 when  writing  to     $DF00-$DFFF. Cart ROM at
$8000-$BFFF can be disabled by setting bit  6     to 1 when  writing
to  $DF00-$DFFF.  Bit  7  of  a  byte  written  to     $DF00-$DFFF can
be read back from the cartridge  if  enabled  (like  a     memory cell).

30 - Action Replay 4
....................

.3 .7  Size  32Kb (4 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 1E 00 01 00 00 00 00 00 00  ???@????????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: EA 78 48 A9 7F 8D 0D DD D0 0E 48 AD 0D DD 10 04  .xP.??..?P?.??
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 09 80 0C 80 C3 C2 CD 38 30 4C E9 80 4C 81 81 4C  ?.?....80L?.L!!L
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     4070: 09 80 0E 80 C3 C2 CD 38 30 A2 00 4C EF FC 20 BC  ?.?....80.?L?.??
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00  CHIP????????.???
     6080: 09 80 0C 80 C3 C2 CD 38 30 4C 70 88 4C 3F 80 4C  ?.?....80LpL?.L

The control register is the I/O-1 range:

         bit  meaning
         ---  -------
         0    Eprom banking bit 0 (bank address 13)
         1    Controls the GAME line (0 sets GAME low, 1 sets GAME high)
         2    Freeze-end bit (disables the register and hides any rom bank)
         3    Controls the Exrom line (1 sets EXROM low, 0 sets EXROM high)
         4    Eprom banking bit 1 (bank address 14)
         5-7  Unused

The first page of the currently banked ROM block can be  read  in  the
  I/O-2 range.

31 - Stardos
............

.3 .7  Size  16Kb (2 banks of 8Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Load address  $8000-$9FFF (bank 0),
$E000-$FFFF (bank 1)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 1F 01 00 00 00 00 00 00 00  ???@????????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: F9 80 B6 80 C3 C2 CD 38 30 FD 80 89 80 4C 0C 88  ?.ļ....80..	.L?
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 E0 00 20 00  CHIP????????????
     2060: 85 56 20 0F BC A5 61 C9 88 90 03 20 D4 BA 20 CC  V???Ĩa.??.÷?.

This cart has 16Kb of ROM, of which the first  8Kb  is  mapped  in  at
  $8000-$9FFF and the second 8Kb is used as a  kernel  replacement.
The     kernel replacement is achieved by a clip that needs  to  be
installed     inside the C64.

Reading from I/O-1 causes a capacitor to get charged with every  read,
  once the capacitor is charged enough it switches the cart on.

Reading from I/O-2 causes a different capacitor to  get  charged  with
  every read, once the capacitor is charged enough it switched the
cart     off.

32 - EasyFlash
..............

.3 .7  Size  1024Kb (64 banks of 2 * 8Kb)  EXROM  inactive (hi) (1)
GAME  active (lo) (0)  Load address  $8000-$9FFF (ROML), $A000-$BFFF or
$E000-$FFFF (ROMH)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 20 01 00 00 00 00 00 00 00  ???@????????????
     0020: 45 61 73 79 46 6C 61 73 68 20 43 61 72 74 72 69  EasyFlash?Cartri
     0030: 64 67 65 00 00 00 00 00 00 00 00 00 00 00 00 00  dge?????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     0050: 00 85 5E FE C3 C2 CD 38 30 93 0D 2B 2B 2B 20 45  ?^....80.?+++?E

EasyFlash is a 1 MByte Flash EPROM card with  multiple  configurations
  and banks possible, it also has 256 bytes of RAM which is mapped
into     the I/O-2 range.

There are two control registers, one at $DE00 and one at $DE02.

The register at $DE00 does the following:

         bit  meaning
         ---  -------
         7    LED control
         6-3  Unused
         2    Mode (0/1)
         1    Exrom line control
         0    Game line control

The register at $DE02 controls which bank  is  mapped  into  ROMH  and
  ROML.

33 - EasyFlash Xbank
....................

.3 .7  Size  -  EXROM  -  GAME  -  Load address  -  multitable

This CRT type is not actually related to a seperate hardware, it is
used by some EasyFlash related tools as a container format.
Consequently VICE does (can) not load files of this type.

34 - Capture
............

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  inactive (hi) (1)  GAME
inactive (hi) (1)  Load address  $E000-$FFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 22 00 00 00 00 00 00 00 00  ???@???"????????
     0020: 4D 61 67 69 63 20 46 6F 72 6D 65 6C 00 00 00 00  Magic?Formel????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 01 E0 00 20 00  CHIP????????????
     0050: 00 0A 0D 8A B4 A1 20 80 00 0A 82 8A 8D 20 9E 20  ???
?.?.??
??

This cart has 8Kb of ROM which is mapped to  $E000,  and  8Kb  of  RAM
  which is mapped to $6000. The cartridge is disabled after a reset.

When the freeze button is pressed the following happens:

   * an NMI is generated

   * as soon as the current adress is in bank 0xfe the cart  switches
     to       ultimax  mode.  The  cart  ROM  then  contains  one  page
     full   of       "jmp $eaea", which ultimately calls the freezer
     code.

   * the $FFF7/$FFF8 "register" logic is enabled and any access (read
     or       write) to $FFF7 will turn the cart_enabled off (leave
     ultimax mode),       and an access to $FFF8 will turn the cart
     back  on  (enter  ultimax       mode). the "register logic" that
     causes this can  only  be  disabled       again by a hardware
     reset.

35 - Action Replay 3
....................

.3 .7  Size  16Kb (2 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 23 00 01 00 00 00 00 00 00  ???@???#????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: EA A9 E3 48 A9 7B 48 08 4C 1A 80 EA EA EA 48 AD  ...H..H?L?....H
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 09 80 5E FE C3 C2 CD 38 30 78 A2 FB D8 9A A9 27  ?.^....80x.....'

This cart has 16Kb of ROM of which 8Kb is mapped in at both  ROML  and
  ROMH. Bank switching and control register is done  through  the
I/O-1     range:

         bit  meaning
         ---  -------
         7-4  unused
         3    Exrom line control
         2    Disable cart
         1    Unused
         0    Bank

36 - Retro Replay
.................

.3 .7  Size  32Kb, 64Kb or 128Kb (4, 8 or 16 banks of 8Kb)  EXROM
active (lo) (0)  GAME  inactive (hi) (1)  Load address  $8000-$9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 24 00 01 00 00 00 00 00 00  ???@???$????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 0C 80 C3 C2 CD 38 30 4C 7F 81 4C 87 81 4C  ?.?....80L?!L.!L

The Retro Replay has three registers: Two write-only ($DE00  &  $DE01)
  and one read-only register ($DE00 & $DE01 giving the same results).

The register at $DE00 is reset to $00 on a hard reset if not in  flash
  mode. If in flash mode, it is set to  $02  in  order  to  prevent
the     computer from starting the normal cartridge. Flash  mode  is
selected     with a jumper.

Register at $DE00:

         bit  meaning
         ---  -------
         0    Controls the GAME line: A 1 asserts the line, a 0  will  deassert
              it.
         1    Controls the EXROM line: A 0 will assert it, a  1  will  deassert
              it.
         2    Writing a 1 will disable further write accesses to all  registers
              of the Retro Replay, and  set  the  memory  map  of  the  C64  to
              standard, as if there is no cartridge installed at all.
         3    Controls bank-address 13 for ROM and RAM banking.
         4    Controls bank-address 14 for ROM and RAM banking.
         5    Switches between ROM and RAM: 0=ROM, 1=RAM
         6    Must be written once to "1" after a successful freeze in order to
              set the correct memory map and  enable  bits  0  and  1  of  this
              register. Otherwise no effect.
         7    Controls bank-address 15 for ROM banking.

The register at $DE01 is the extended  control  register.  If  not  in
  Flash mode, bits 1, 2 and 6 can only be  written  once.  If  in
Flash     mode, the REUcomp bit cannot be set, but  the  register  will
not  be     disabled by the first write. Bit 5 is always set to 0 if
not in  Flash     mode.

Register at $DE01:

         bit  meaning
         ---  -------
         0    Enable clockport connector.
         1    AllowBank (1 allows banking of RAM in $DF00/$DE02 area)
         2    NoFreeze (1 disables Freeze function)
         3    Bank-address 13 for RAM and ROM (mirror of $DE00)
         4    Bank-address 14 for RAM and ROM (mirror of $DE00)
         5    Bank-address 16 for ROM (only in flash mode)
         6    REU compatibility bit. 0=standard memory map, 1 = REU  compatible
              memory map
         7    Bank-address 15 for ROM (mirror of $DE00)

Reading from the registers at either $DE00 or $DE01  will  return  the
  content of the status register.

Status register:

         bit  meaning
         ---  -------
         0    1=Flashmode active (jumper set)
         1    feedback of AllowBank bit
         2    1=Freeze button pressed
         3    feedback of banking bit 13
         4    feedback of banking bit 14
         5    feedback of banking bit 16
         6    1=REU compatible memory map active
         7    feedback of banking bit 15

The following memory maps are available:

   * standard -     $DE00 and $DE01 registers are active,  $DF00-$DFFF
     contain  the  last     page of the selected 8Kb bank  of  either
     ROM  or  RAM,  whatever  is     selected. RAM can only be accessed
     in $8000-$9FFF. ROM can  be  mapped     to $8000, $A000 or $E000
     with the corresponding  status  on  GAME  and     EXROM.

     Note: If the AllowBank bit is  not  set,  the  $DF00-$DFFF  area
     will     always access bank 0 of the RAM, so the older  cartridge
     images  will     work. The AllowBank bit does not have any effect
     on the ROM mirror  in     that area.

   * Freeze -     ROM is mapped to $E000-$FFFF, bank 0 is active
     directly after  Freeze.      Writing to bits 0 and 1 of the $DE00
     register will have no  effect  on     GAME and EXROM. RAM can be
     selected  and  used  in  $DF00  or  $DE02,     respectively, but
     not in $8000. Banking bits work, so  you  have  full     read
     access to the ROM, and access to up to four RAM  pages  with  the
       AllowBank bit set (minus 2 bytes if REU compatible bit  is
     set).  You     should leave this memory map ASAP by setting bit 6
     of  $DE00,  because     C64 RAM in the $E000 area is not
     available, and you don't have control     of the GAME and EXROM
     lines.

   * REU compatible -     $DE00 and $DE01 registers are active,
     $DE02-$DEFF contain a mirror  of     $9E02-$9EFF of the selected
     8K-bank of either ROM or RAM, whatever  is     selected. RAM can
     only be accessed in $8000-$9FFF. ROM can  be  mapped     to $8000,
     $A000 or $E000 with the corresponding  status  on  GAME  and
     EXROM. The $DF00 stays free for use with the 1764 Ram  Expansion
     Unit     (REU).

     Note: If the AllowBank bit is  not  set,  the  $DE02-$DEFF  area
     will     always access bank 0 of the RAM, so the older  cartridge
     images  will     work. The AllowBank bit does not have any effect
     on the ROM mirror  in     that area.

37 - MMC64
..........

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 25 00 01 00 00 00 00 00 00  ???@???%????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 64 97 C3 C2 CD 38 30 78 D8 A2 FF 9A 20 D4  ?.d...80x..?.?.

The clockport registers  of  this  cart  can  be  switched  to  either
  $DE01-$DE0F or $DF21-$DF2F. The control  registers  are  available
at     $DF10-$DF13.

The register at $DE01 / $DF21 is write only:

         bit  meaning
         ---  -------
         7-1  Unused
         0    0 = disable clock port, 1 = enable clockport

The registers at $DE02-$DE0F / $DF22-$DF2F are for the clock port  and
  are read/write.

The register at $DF10 is the  MMC64  SPI  transfer  register,  a  byte
  written to this registers is sent to the card & response from the
card     is read here.

The register at $DF11 is the MMC64 control register:

         bit  meaning
         ---  -------
         0    0 = MMC64 BIOS active, 1 = external ROM active
         1    0 = card selected, 1 = card not selected
         2    0 = 250khz transfer, 1 = 8mhz transfer
         3    0 = clock port @ $DE00, 1 = clock port @ $DF20
         4    0 = normal Operation, 1 = flash mode (*)
         5    0 = allow external rom when BIOS is disabled,
              1 = disable external ROM
         6    0 = SPI write trigger mode, 1 = SPI read trigger mode
         7    0 = MMC64 is active, 1 = MMC64 is completely disabled (**)

(*) bit can only be programmed when flash jumper is set     (**) bit
can only be modified after unlocking

The  register  at  $DF12  is  the  MMC64  status  register,  which  is
  read-only:

         bit  meaning
         ---  -------
         0    0 = SPI ready, 1 = SPI busy
         1    external GAME line
         2    external EXROM line
         3    0 = card inserted, 1 = no card inserted
         4    0 = card write enabled, 1 = card write disabled
         5    0 = flash jumper not set, 1 = flash jumper set
         6-7  unused

The register at $DF13 is the MMC64 identification register, which when
  reading from it can have the following values:

$64 when bit 1 of $DF11 is 0.      $01 when bit 1 of $DF11 is 1 and REV
A hardware is used.      $02 when bit 1 of $DF11 is 1 and REV B
hardware is used.

when writing to it it can be used to unlock  bit  7  of  $DF11  or  to
  re-enable the cart:

Write $55 & $AA into this register to unlock bit 7 of $DF11.      Write
$0A & $1C into this register to re-enable MMC64 hardware.

38 - MMC Replay
...............

.3 .7  Size  64Kb or 512Kb (8 or 64 banks of 8Kb)  EXROM  active (lo)
(0)  GAME  active (lo) (0)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 26 00 00 00 00 00 00 00 00  ???@???&????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 1A 80 6E 9E C3 C2 CD 38 30 4D 4D 43 52 45 50 4C  ?.n...80MMCREPL

The cart uses the following registers:

$DE00 - RR control register write

         bit  meaning
         ---  -------
         0    GAME line
         1    EXROM line
         2    1 = disable RR, bit can be reset by setting bit 6 of $DF12
         3    bank address 13
         4    bank address 14
         5    0 = rom enable, 1 = ram enable
         6    1 = exit freeze mode
         7    bank address 15

$DE01 - extended RR control register write

         bit  meaning
         ---  -------
         0    0 = disable clockport, 1 = enable clockport
         1    0 = disable I/O RAM banking, 1 = enable I/O RAM banking
         2    0 = enable freeze, 1 = disable freeze
         3    bank address 13 (mirror of $DE00)
         4    bank address 14 (mirror of $DE00)
         5    0 = enable MMC registers, 1 = disable MMC registers. Can only  be
              written when bit 6 of $DF12 is 1. Register becomes effective when
              bit 0 of $DF11 is 1.
         6    0 = RAM/ROM at $DFxx, 1 = RAM/ROM at $DExx
         7    bank address 15 (mirror of $DE00)

$DE02-$DE0F - Clockport memory area (when enabled)

$DF10 - MMC SPI transfer register, a byte written is sent to the  card
          & response from the card is read here.

$DF11 - MMC control register

         bit  meaning
         ---  -------
         0    0 = MMC BIOS enabled, 1 = MMC BIOS disabled.  Enabling  MMC  BIOS
              sets ROM banking to the last 64Kb bank.
         1    0 = card selected, 1 = card not selected. This bit also  controls
              the green activity LED.
         2    0 = 250khz transfer, 1 = 8mhz transfer
         3    ALWAYS 0
         4    ALWAYS 0
         5    (in RR-Mode:)
               0 = allow RR rom when MMC BIOS disabled , 1 = disable RR ROM
               (in mmcreplay bios mode:)
               RAM banking (0 = $E000 - $FFFF, 1 = $8000 - $9FFF)
               (in 16K mode:)
               enable RAM at $A000 - $BFFF
         6    0 = SPI write trigger mode, 1 = SPI read trigger mode
         7    ALWAYS 0

$DF12 - MMC status register

         bit  meaning
         ---  -------
         0    0 = SPI ready, 1 = SPI busy (read)
                             1 = forbid ROM  write  accesses  (write).  Setting
                             this bit will disable writes  to  ROM  until  next
                             reset
         1  feedback of $DE00 bit 0 (GAME)
         2  feedback of $DE00 bit 1 (EXROM)
         3  0 = card inserted, 1 = no card inserted
         4  0 = card write enabled, 1 = card write disabled
         5  EEPROM DATA line /  DDR  register.  Setting  DATA  to  "1"  enables
            reading data bit from EEPROM at this position.
         6  0 = RR compatibility mode, 1 = Extended mode
            Selecting RR compatibility mode limits RAM  to  32Kb  and  disables
            writes  to  extended  banking  register.  Selecting  Extended  mode
            enables full RAM banking and enables Nordic Power mode in RR mode.
         7  EEPROM CLK line

$DF13 - Extended banking register             Can only be read/written
to when bit 6 of $DF12 is 1

         bit  meaning
         ---  -------
         0    bank address 16
         1    bank address 17
         2    bank address 18
         3    ALWAYS 0
         4    ALWAYS 0
         5    16K rom mapping
         6    1 = enable  RR  register.  Disabling  RR  register  disables  ALL
              ROM/RAM banking too.
         7    ALWAYS 0

NOTE THAT THE MMC REPLAY EMULATION IS CURRENTLY INCOMPLETE AND
CONSIDERED     BROKEN.

39 - IDE64
..........

.3 .7  Size  64Kb or 128Kb (4 or 8 banks of 16Kb)  EXROM  active (lo)
(0)  GAME  inactive (hi) (1)  Load address  $8000-$BFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 27 00 01 00 00 00 00 00 00  ???@???'????????
     0020: 49 44 45 36 34 20 43 41 52 54 52 49 44 47 45 20  IDE64 CARTRIDGE?
     0030: 49 44 45 44 4f 53 20 32 30 31 33 31 32 31 32 00  IDEDOS 20131212?
     0040: 43 48 49 50 00 00 40 10 00 02 00 00 80 00 40 00  CHIP????????.???
     0050: 63 80 5E FE C3 C2 CD 38 30 20 49 44 45 36 34 20  c.^....80?IDE64?

The IDE64 cart uses the following registers:

         $DE20 - $DE2F IDE BUS Registers
         $DE30 - Low Data HDD register
         $DE31 - High Data HDD register

$DE32 register:

         bit  meaning
         ---  -------
         7    unused (0)
         6    unused (0)
         5    unused (0)
         4    version number (1)
         3    romaddr15
         2    romaddr14
         1    game
         0    exrom

         $DE32 - $DE35 = IDE64 ROM bank select registers
         $DE5F         = RTC access (bit 0 only to serial accessed RTC)
         $DE60 - $DEFF = ROM used by software
         $DEFB         = IDE64 clock reset, kill the cartridge
         $DEFC - $DEFF = IDE64 memory configuration registers

40 - Super Snapshot V4
......................

.3 .7  Size  32Kb (4 banks of 8Kb)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 28 00 00 00 00 00 00 00 00  ???@???(????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 80 AD B5 80 C3 C2 CD 38 30 08 48 A9 06 8D 00 DF  .ĩ....80?P.???
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00  CHIP???????? ???
     2060: 4C FA A0 A9 07 8D 00 DD 2C 00 DD 50 FB 2C 00 DD  L? .??.,?.P.,?.
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     4070: 13 80 BC FE C3 C2 CD 38 30 08 48 A9 02 8D 00 DF  ?.?....80?H.???
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 01 A0 00 20 00  CHIP???????? ???
     6080: F0 8A 48 A9 00 85 22 85 23 8D 53 0F 20 0C A1 B0  ?
H.?"#S???.°

This cart has 32Kb of ROM and 8Kb of RAM, it uses I/O-1 as a mirror of
  the last page of cart RAM. It has the following registers in the
I/O-2     range:

ROM config register at $DF00 (can only be written to):

         bit  meaning
         ---  -------
         0    ?
         1    ? (write 1 to release freeze mode)
         2    ROM bank select
         3    write 1 to disable cartridge
         4-6  unused
         7    ?

Note: if bit0, bit1, bit7 are all 0, then ultimax mapping is  selected
  and RAM is enabled at ROML, otherwise if bit 0 is 0, then 16Kb
mapping     is enabled, or if bit 0 is 1, then 8Kb mapping is enabled.

RAM config register at $DF01 (read/write):

If written value == last value - 1, then ultimax mapping  is  selected
  and RAM is enabled at ROML, if written value == last value +  1,
then     ROM is enabled at ROML and exrom is deasserted (switch to
either 8k or     16k mapping)

$DF02-$DFFF holds the last page of the first 8kb of the current bank.

41 - IEEE-488
.............

.3 .7  Size  4Kb (1 bank of 4Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$8FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 29 00 01 00 00 00 00 00 00  ???@???)????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 10 10 00 00 00 00 80 00 10 00  CHIP????????.???
     0050: 09 80 7A 80 C3 C2 CD 38 30 8E 16 D0 20 84 FF 20  ?.z....80.?.???

The cart uses a TPI for the  IEEE488  interface/communication  in  the
  I/O-2 range:

         $DF00 - Port A Data
         $DF01 - Port B Data
         $DF02 - Port C Data
         $DF03 - Port A Direction
         $DF04 - Port B Direction
         $DF05 - Port C Direction
         $DF06 - Control register
         $DF07 - Active Interrupt register

42 - Game Killer
................

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Load address  $E000-$FFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 2A 01 00 00 00 00 00 00 00  ???@???*????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 E0 00 20 00  CHIP????????????
     0050: 00 25 08 CF 07 9E 32 30 38 38 20 4D 43 2E 43 52  ?%?.?2088?MC.CR

When the cartridge is active, ultimax  is  enabled  when  the  address
  being accessed is is the $E000-$FFFF range, so the ROM is  visible
at     $E000, below is normal C64 RAM. The cart can be disabled by
writing to     either I/O-1 or I/O-2 range. When the freezer button is
pressed,  the     cartridge will be enabled and an NMI will be
triggered.

43 - Prophet64
..............

.3 .7  Size  256Kb (32 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 2B 00 01 00 00 00 00 00 00  ???@???+????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 09 80 C3 C2 CD 38 30 78 A0 00 84 F8 84 FA  ?.?....80x ???

The control register is the I/O-2 range:

         bit  meaning
         ---  -------
         7-6  unused
         5    disable cart
         4-0  bank select

44 - EXOS
.........

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Load address  $E000-$FFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 2C 01 00 00 00 00 00 00 00  ???@???,????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 E0 00 20 00  CHIP????????????
     0050: 85 56 20 0F BC A5 61 C9 88 90 03 20 D4 BA 20 CC  V???Ĩa.??.÷?.

This cart has 8Kb of ROM, mapped in at $E000-$FFFF only when hirom  is
  selected. The cart uses a clip that needs to be installed  inside
the     C64.

45 - Freeze Frame
.................

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 2D 00 01 00 00 00 00 00 00  ???@???-????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 10 80 10 80 C3 C2 CD 38 30 20 00 00 00 00 00 00  ?.?....80???????

When reading from the I/O-1 range the cart is  enabled,  when  reading
  from the I/O-2 range the cart is disabled. When the freeze  button
is     pressed the ROM is mapped to both $8000-$9FFF and $E000-$FFFF.

46 - Freeze Machine
...................

.3 .7  Size  16Kb or 32Kb (2 or 4 banks of 8Kb)  EXROM  active (lo) (0)
GAME  inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 2E 00 01 00 00 00 00 00 00  ???@???.????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 3A 83 60 80 C3 C2 CD 38 30 20 00 00 40 00 00 00  :`....80???@???
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00  CHIP???????? ???
     2060: 78 A9 34 85 01 A0 00 B1 F8 91 F6 E6 F8 D0 02 E6  x.4? ?ą?.?ĩ?.?ĩ
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     4070: 3A 83 60 80 C3 C2 CD 38 30 20 00 00 40 00 00 00  :`....80???@???
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 01 A0 00 20 00  CHIP???????? ???
     6080: 78 A9 34 85 01 A0 00 B1 F8 91 F6 E6 F8 D0 02 E6  x.4? ?ą?.?ĩ?.?ĩ

Warning, the following information is based on guess-work and might be
  incorrect, any further information and/or corrections are
appreciated.

When reading from  the  I/O-1  range  ROM  bank  0(/2)  is  mapped  to
  $8000-$9FFF and ROM bank 1(/3) is mapped to $A000-$BFFF. When
reading     from the I/O-2 range the cart is disabled. When a  reset
happens  the     ROM banks get switched and ROM bank 0(/2) is  mapped
to  $8000-$9FFF.      When a freeze happens ROM bank 0(/2) is mapped to
both $8000-$9FFF and     $E000-$FFFF.

47 - Snapshot 64
................

.3 .7  Size  4Kb (1 bank of 4Kb)  EXROM  inactive (hi) (1)  GAME
inactive (hi) (1)  Load address  $E000-$EFFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 2F 00 00 00 00 00 00 00 00  ???@???/????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 10 10 00 00 00 00 E0 00 10 00  CHIP????????????
     0050: 78 D8 48 8A 48 98 48 AC 0D DD 10 03 4C EE F2 AD  x.H
HH??.??L??

Warning, the following information is based on guess-work and might be
  incorrect, any further information and/or corrections are
appreciated.

The cart has a control bit (bit 0) in the I/O-2 range which is used to
  disable or enable the cart.

48 - Super Explode V5.0
.......................

.3 .7  Size  16Kb (2 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 30 00 01 00 00 00 00 00 00  ???@???0????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: D7 86 5E FE C3 C2 CD 38 30 A9 00 2C A9 FF 85 FE  .^....80.?,.?.
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: E8 96 5E FE C3 C2 CD 38 30 20 6C 81 A9 09 8D 99  ?^....80?l!.?

Warning, the following information is based on guess-work and might be
  incorrect, any further information and/or corrections are
appreciated.

The cart has 16Kb of ROM which are used as two banks of 8Kb, they  are
  mapped into $8000-$9FFF and the last page of the current ROM  bank
is     mirrored in $DF00-$DFFF. The cart has a control bit (bit 7) at
$DF00,     which is used to select what ROM bank is used.

49 - Magic Voice
................

.3 .7  Size  16Kb (2 banks of 8Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Load address  $8000-$9FFF (bank 1),
$A000-$BFFF (bank 2)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 31 01 00 00 00 00 00 00 00  ???@???1????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: EA 2C 80 DF 50 FB A0 00 8C 80 DF B9 E3 A3 29 0F  .,.?P. ?.?š.Ŗ)?
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00  CHIP???????? ???
     2060: 4A EB C0 49 6A EA BB FB 4E CA 43 1E 75 63 15 97  J?.Ij.ģ.N.C?uc?

This cart has 16Kb of ROM, mapped in at reset at $8000-$BFFF. The cart
  is controled through a TPI at $DF80-$DF87:

         $DF80 - Port A Data
         $DF81 - Port B Data
         $DF82 - Port C Data
         $DF83 - Port A Direction
         $DF84 - Port B Direction
         $DF85 - Port C Direction
         $DF86 - Control register
         $DF87 - Active Interrupt register

The cart has a pass-through port and does the following at start-up:

   * Program  starts  after  reset  at  $FFD3,  and  copies   code
     from       $FF36-$FFD2 to $0200-$029C (157 bytes)

   * Program continues at $021A, copies $A000-$BFFF from EPROM to RAM
     at       $A000-$BFFF  (8Kb),  copies  $E000-$FFFF  from  EPROM  to
      RAM   at       $E000-$FFFF (8Kb), copies $AE62-$B461 from RAM to
     RAM at $C000-$C5FF       (Magic Voice Code)

   * Jump to beginning of Magic Voice code at $C000

50 - Action Replay 2
....................

.3 .7  Size  16Kb (2 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Startup mode  8k Game  Load address  $8000-$9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 32 00 01 00 00 00 00 00 00  ???@???2????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: EA EA 68 AA 68 85 94 68 85 95 68 85 96 68 85 97  ..h×hhhh
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 30 80 5E FE C3 C2 CD 38 30 20 04 90 4C 38 DF 1A  0.^....80??L8??

Warning, the following information is based on guess-work and might be
  incorrect, any further information and/or corrections are
appreciated.

I/O-1 is somehow used to enable the cart, the exact way in which  this
  is done is unknown. Reading from the I/O-2 range  will  give  you
the     last page of the current ROM bank, and writing to it will
disable  the     cart.

51 - MACH 5
...........

.3 .7  Size  4Kb or 8Kb (1 bank of 4Kb or 8Kb)  EXROM  active (lo) (0)
GAME  inactive (hi) (1)  Startup mode  8k Game  Load address
$8000-$8FFF (4Kb),                    $8000-$9FFF (8Kb)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 33 00 01 00 00 00 00 00 00  ???@???3????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: AF 83 5E FE C3 C2 CD 38 30 4D 41 43 48 35 A5 93  ģ^....80MACH5Ĩ.

This cart has 8Kb ROM mapped at $8000-$9FFF, the $9E00-$9EFF range  is
  mirrored at $DE00-$DEFF and  the  $9F00-$9FFF  range  is  mirrored
at     $DF00-$DFFF.

52 - Diashow maker
..................

.3 .7  Size  8Kb (1 bank of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Startup mode  8k Game  Load address  $8000-$9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 34 00 01 00 00 00 00 00 00  ???@???4????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 09 80 C3 C2 CD 38 30 AD 11 D0 29 10 D0 62  ?.?....80?.)?.b

Accessing I/O-1 (the software  uses  $DE00  only  it  seems)  disables
  cartridge ROM. A reset enables 8K game mode and the ROM bank is
mapped     to $8000. A freeze causes ROM to be mapped to $8000.

53 - Pagefox
............

.3 .7  Size  64Kb (4 banks of 16Kb)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Startup mode  16k Game  Load address  $8000-$BFFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 35 00 00 00 00 00 00 00 00  ???@???5????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00  CHIP??@?????.?@?
     0050: 31 80 BB 0E C3 C2 CD 38 30 50 46 20 56 31 2E 30  1.ģ?...80PF?V1.0
     ...
     4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00  CHIP??@?????.?@?
     4060: A2 FE 9A 20 EC AE 20 82 80 20 74 86 20 A5 8B 4C  ...??Ž?.?t?ĨL
     ...
     8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00  CHIP??@?????.?@?
     8070: 5A 01 02 03 04 06 0A 0B 10 14 1E 28 3C 00 00 00  Z??????????(<???
     ...
     C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00  CHIP??@?????.?@?
     C080: 1E 03 14 82 09 05 09 0F 0C 0D 0F 05 09 09 0B 0A  ???????????????

This cart has 64Kb ROM (2 32Kb Eproms, mapped to $8000  and  $A000  in
  16Kb Game Mode), and 32Kb RAM (mapped to $8000 and $A000 in  16K
Game     Mode). The cart has 1 (write-only)  bank  control  register
which  is     located at $DE80 and mirrored throughout the $DE80-$DEFF
range:

         Bit 0: unused/don't care
         Bit 1: Bank select: 0=upper, 1=lower (not correct ?!)
         Bit 2: chip select 0
         Bit 3: chip select 1
         Bit 4: cartridge enable/disable: 0=enable, 1=disable
         Bits 5-7: unused/don't care

Chip select combinations of 0/1 are:
         00: Eprom "79"
         01: Eprom "ZS3"
         10: Ram
         11: empty space (reading returns VIC-II data)

note: on the original hardware "disabling" the  cartridge  by  setting
        bit 4 of the control register does NOT prevent write accesses
to           the cartridge RAM!. So  to  actually  disable  the  RAM,
it  is           suggested to write $FF to the register.

54 - Kingsoft
.............

.3 .7  Size  24Kb (3 banks of 8Kb)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Startup mode  16k Game  Load address  $8000-$9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 36 00 00 00 00 00 00 00 00  ???@???6????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 A2 89 C3 C2 CD 38 30 20 D3 83 78 8D 00 DE  ?..	...80?.x?.
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: 72 A2 05 A5 45 10 01 CA A5 46 10 02 CA CA 86 28  r.?ĨE??.ĨF??..(
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     4070: 78 A2 FF 9A D8 A9 08 8D 16 D0 A0 00 98 99 02 00  x.?...? ?. ???

This cart has 24Kb ROM (3 8Kb Eproms)

         reading io1:
         - switches to 16k game mode
         - first eprom mapped to 8000 (ROML)
         - second eprom mapped to A000 (ROMH)
     
         writing io1:
         - switches to ultimax mode _only_:
           - if 0xc000 > address >= 0x8000
           - if address >= 0xe000
           (meaning 0x0000-0x7fff and 0xc000-0xdfff gives normal c64 ram/io)
         - first eprom mapped to 8000 (ROML)
         - third eprom mapped to e000 (ROMH)

55 - Silverrock 128
...................

.3 .7  Size  128Kb (16 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Startup mode  8k Game  Load address  $8000-$9FFF
multitable

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
            -----------------------------------------------  ----------------
     00000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     00010: 00 00 00 40 01 00 00 37 00 01 00 00 00 00 00 00  ???@???7????????
     00020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     00030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     00040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     00050: 09 80 09 80 C3 C2 CD 38 30 78 A2 FF 9A D8 A9 00  ?.?....80?.?...?
     ...
     02050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     02060: 00 21 1D A9 90 1B 67 70 FD B0 04 C3 19 B9 11 2D  ???. ?gp?°?.?š??
     ...
     04060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     04070: 00 41 62 92 AD 71 32 87 08 20 BE 90 4C 36 8F 20  ?Ab.q2.??. L6 ?
     ...
     06070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00  CHIP????????.???
     06080: 00 61 00 02 02 03 0D 40 82 15 D0 A1 08 40 84 00  ?a?????@?..?@?
     ...
     08080: 43 48 49 50 00 00 20 10 00 00 00 04 80 00 20 00  CHIP????????.???
     08090: 00 81 8A 85 0D F0 8A 28 83 F8 8A 00 8B 58 83 60  ? 
??
??
?X`
     ...
     0A090: 43 48 49 50 00 00 20 10 00 00 00 05 80 00 20 00  CHIP????????.???
     0A0A0: 00 A1 C2 E3 C4 86 32 14 00 C5 40 EA 13 CA CB CC  ?....2??.@.?...
     ...
     0C0A0: 43 48 49 50 00 00 20 10 00 00 00 06 80 00 20 00  CHIP????????.???
     0C0B0: 00 C1 81 59 60 00 81 5D D9 58 5E EE 58 6E 3C 28  ?. Y`? ].X^?Xn<?
     ...
     0E0B0: 43 48 49 50 00 00 20 10 00 00 00 07 80 00 20 00  CHIP????????.???
     0E0C0: 00 E1 0F BF 3D 56 00 7E 52 FD 50 03 AA 00 0D 40  ???.=V?~R?P?×??@
     ...
     100C0: 43 48 49 50 00 00 20 10 00 00 00 08 80 00 20 00  CHIP????????.???
     100D0: 01 01 B9 D1 0D 15 89 55 65 45 41 C5 01 45 45 A8  ??š.??	UeEA.?EE?
     ...
     120D0: 43 48 49 50 00 00 20 10 00 00 00 09 80 00 20 00  CHIP????????.???
     120E0: 01 21 0C C7 29 54 41 29 4D C5 06 24 C7 24 8F 81  ???.?TA?M.??.?
     ...
     140E0: 43 48 49 50 00 00 20 10 00 00 00 0A 80 00 20 00  CHIP????????.???
     140F0: 01 41 EA 87 7A AF 95 67 BD F7 00 7D 6E C4 5D A6  ?A..zģg???.n.]?
     ...
     160F0: 43 48 49 50 00 00 20 10 00 00 00 0B 80 00 20 00  CHIP????????.???
     16100: 01 61 6A 92 6B 93 6B 94 6C 95 6D 96 6E 97 6E 98  ?aj.k.klmnn
     ...
     18100: 43 48 49 50 00 00 20 10 00 00 00 0C 80 00 20 00  CHIP????????.???
     18110: 01 81 0E 83 0D 0B 0F 81 FF 28 28 1E E3 0A 14 62  ? ???? ????.??b
     ...
     1A110: 43 48 49 50 00 00 20 10 00 00 00 0D 80 00 20 00  CHIP????????.???
     1A120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     ...
     1C120: 43 48 49 50 00 00 20 10 00 00 00 0E 80 00 20 00  CHIP????????.???
     1C130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     ...
     1E130: 43 48 49 50 00 00 20 10 00 00 00 0F 80 00 20 00  CHIP????????.???
     1E140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????

Cartridge hardware is designed around a 128Kb ROM (PROM or Mask ROM)
which is divided into 16 banks each of 8Kb. When adressing the onboard
bank-switching logic the requested ROM bank is mapped at address range
$8000-$9fff (8Kb)

The cartridge PCB layout was cost-optimized for mass-production
purposes.

The address-/data-lines and bank-switching logic uses the closest
address-/data-lines with shortest and most direct path/distance in
order to avoid too much PCB re-routing and keep production costs as low
as possible.

This means that the respective address-/data-lines from the cartridge
port may not necessarily connect with the corresponding
address-/data-line of the ROM according to the official specs of the
ROM.

This has over the years given some headaches and invalid dumps when
cartridge dumpers that wanted to dump the cartridge contents by
de-soldering the ROM and dumping it using an EPROM programmer/reader.

The image extracted from such an operation would need transformation
according to the actual cartridge PCB re-routing of
address-/data-lines. Alternatively one can make an adapter that
implements this applied re-routing of the address-/data-lines.

This mass-production cost optimization also results in an obscured
bank-switching address pattern/values more info on that later.

[HWrev1]: The original "Hugo" PCB [HWrev1] is labeled "HUGO Copyright
1990" on both sides of the PCB.  PCB production date is stamped on the
back og PCB in the format: "YYMM" 1Mbit 27C010 EPROM or PROM (typical
Atmel) "Hugo" PCB [HWrev1] contains the following discrete logic IC
components: 74LS00N (DIP) and 74LS237N (DIP) DIP pitch (pin spacing)
2.54mm (0.1 inch) Assembly/production facilities: Philips,
Strandlodsvej (Amager), Copenhagen, Denmark

[HWrev1] Bank-switching pattern: In order for the rom contents to
appear as a continuous memory layout the following ROM bank-switching
pattern must be applied by writing to adress 0xDE00: Cartridge
bank-switching values: 00 80 10 90 20 a0 30 b0 40 c0 50 d0 60 e0 70 f0
Writing the bank-switch value to any address in address-range
0xDE00-0xDEFF will work.

[HWrev2]: Revised PCB [HWrev2] for SMD mount is labeled "SO-A4-1" on
both sides of PCB.  1Mbit Mask ROM (SOIC-32) PCB contains the following
discrete logic SMD IC components: 74HCT02T (SOIC-14) and 74HCT174T
(SOIC-16) SOIC (pitch) pin spacing 1.27mm (SMD mounted)
Assembly/production facilities: Sono Press, Germany.

[HWrev2] Uses alternative bank-switching pattern: Writing *ANY* value
to address 0xDE0y (offset y) will select ROM bank y Cartridge still has
16 banks and the lower four bits in the address selects the right bank.
Hence the valid address range is 0xDE00-0xDE0F

56 - Formel 64
..............

.3 .7  Size  32Kb (4 banks of 8Kb)  EXROM  inactive (hi) (1)  GAME
active (lo) (0)  Startup mode  Ultimax  Load address  $E000-$FFFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 38 00 00 00 00 00 00 00 00  ???@???8????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 E0 00 20 00  CHIP????????????
     0050: 48 A9 FC 0C A9 FE 8D C2 DF 68 48 C9 8C F0 1C C9  H.??.? .?hH.??.
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 E0 00 20 00  CHIP????????????
     2060: EA EA 58 48 A9 FC 8D C2 DF 4C 6E E2 EA EA A9 FA  ..XH.? .?Ln....?
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 E0 00 20 00  CHIP????????????
     4070: 4C 86 E4 A9 FE 78 8D C2 DF 60 78 8C C3 DF A9 FA  L?.?x .?`x.?.?
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 E0 00 20 00  CHIP????????????
     6080: EA EA 48 58 A9 FC 8D C2 DF 68 48 C9 46 D0 7E 68  ..HX.? .?hH.F.~h

the following is a quick overview of how the cartridge works, as its a
bit unusual and different from most other cartridges:

     - 27256 EPROM (32k)
     - 7430 TTL
     - MC6821
     - 1 button (reset)
     
     rom bank 0x00 - 0x03 (0x04) 8192* 4 32k mapped to e000
     MC6821 registers mapped to io2 at dfc0..dfc4
     
     - press reset and hold delete to get the main menu
     - press reset and hold control to skip cbm80 check (dont start additional cartridge)
     
     - press RESTORE, then...
       - left arrow, return  show disk directory
       - delete, 1           load"*" from disk, run
       - f1/f2               ? (disk stuff?)
       - f3/f4               ? (disk stuff?)
       - f5/f6, q            enter monitor
       - f7/f8, 2            show drive error channel
       - control, cursor     back to basic
     
       - type "help" in basic to get a list of available commands
     
     *** MC6821 Port usage
     
     Port A (parallel cable to floppy drive):
     dfc0 port a ddr
     dfc1 port a (in/out)
     
     Port B (controls banking)
     dfc2 port b ddr ($7f)
     dfc3 port b (out)
     
     bit3    1 = rom at $e000 enabled, 0 = cartridge disabled
     bit1-2  rom bank number
     bit0    ?

57 - RGCD
.........

.3 .7  Size  64Kb (8 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Startup mode  8k Game  Load address  $8000-$9FFF
multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 39 00 01 00 00 00 00 00 00  ???@???9????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 0C 80 0C 80 C3 C2 CD 38 30 31 30 34 8E 16 D0 20  ?.?....80104.?.?
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     2060: B9 0A 72 AB 0B F0 08 C9 2F 0C 10 27 E8 EF 5A C5  š?rĢ???.??????Z.
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00  CHIP????????.???
     4070: C0 B4 6C A6 6A 0A 14 5E 65 AD 94 02 86 C8 30 1F  .?l?j??^e?.0?
     ...
     6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00  CHIP????????.???
     6080: A4 89 C6 3A C4 60 F0 10 4D F5 89 F0 13 6C E0 78  ?	.:.`??M?	??l?x
     ...
     8080: 43 48 49 50 00 00 20 10 00 00 00 04 80 00 20 00  CHIP????????.???
     8090: 00 0B 08 14 00 9E 32 30 36 31 00 00 00 A0 35 BA  ?????2061??? 5÷
     ...
     A090: 43 48 49 50 00 00 20 10 00 00 00 05 80 00 20 00  CHIP????????.???
     A0A0: 1B 4A 00 53 90 77 8E 1A 1D 94 00 A6 E2 50 29 11  ?J?S w.?????P??
     ...
     C0A0: 43 48 49 50 00 00 20 10 00 00 00 06 80 00 20 00  CHIP????????.???
     C0B0: 14 F7 2E 1A 34 B4 60 53 07 88 C4 F0 21 F6 88 20  ????4?`S?.????
     ...
     E0B0: 43 48 49 50 00 00 20 10 00 00 00 07 80 00 20 00  CHIP????????.???
     E0C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????

This cartridge type is very similar to the Magic Desk cart type: ROM
memory     is  organized  in  8Kb  ($2000)  banks  located  at
$8000-$9FFF.  Bank     switching is done by writing the bank number to
$DE00.

         bit 0-2   bank number
         bit 3     exrom latch (1 = cart disabled until reset or powercycle)

58 - RR-Net MK3
...............

.3 .7  Size  8Kb  EXROM  active (lo) (0)  GAME  inactive (hi) (1)
Startup mode  8k Game  Load address  $8000-$9FFF  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 3A 00 01 00 00 00 00 00 00  ???@???:????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 09 80 09 80 C3 C2 CD 38 30 78 A2 FF 9A D8 8E 16  ?.?....80x.?...?

This cartridge has a CS8900a based RR-Net compatible network interface,
and     on  8Kb  ($2000)  bank ROM  located  at  $8000-$9FFF.  The ROM
can be switched     on/off by writing to the IO1 space:

         a write to $de80 enables the ROM
         a write to $de88 disables the ROM

59 - EasyCalc
.............

.3 .7  Size  24Kb (3 banks of 8Kb)  EXROM  active (lo) (0)  GAME
active (lo) (0)  Startup mode  16k Game  Load address  $8000-$9FFF
(bank 1),                    $A000-$BFFF (banks 2/3)  multitable

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
           -----------------------------------------------  ----------------
     0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     0010: 00 00 00 40 01 00 00 3B 00 00 00 00 00 00 00 00  ???@???;????????
     0020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     0050: 59 89 BC FE C3 C2 CD 38 30 0B 80 B1 84 48 E6 84  Y	??...80?.ąHĩ
     ...
     2050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00  CHIP???????? ???
     2060: 04 0B 20 52 45 50 4C 49 43 41 54 45 20 FB 89 0F  ???REPLICATE??	?
     ...
     4060: 43 48 49 50 00 00 20 10 00 00 00 01 A0 00 20 00  CHIP???????? ???
     4070: 02 10 B5 00 C9 E3 D0 01 C8 C9 E2 D0 01 C8 C9 E0  ??ĩ?...?....?..?

This cart uses 8Kb mapped in at $8000-$9FFF and 2 banks of 8Kb mapped
in at $A000-$BFFF.

The bank at $A000-$BFFF is selected by bit 0 of the address of a write
access to I/O-1.

         A0 | bank
         ---------
          0 |  0
          1 |  1

60 - GMod2
..........

.3 .7  Size  512Kb (64 banks of 8Kb)  EXROM  active (lo) (0)  GAME
inactive (hi) (1)  Startup mode  8k Game  Load address  $8000-$9FFF
multitable

            00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F       ASCII
            -----------------------------------------------  ----------------
     00000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20  C64?CARTRIDGE???
     00010: 00 00 00 40 01 00 00 3C 00 01 00 00 00 00 00 00  ???@???<????????
     00020: 56 49 43 45 20 43 41 52 54 00 00 00 00 00 00 00  VICE?CART???????
     00030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     00040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00  CHIP????????.???
     00050: 09 80 09 80 C3 C2 CD 38 30 78 8E 16 D0 20 A3 FD  ?.?....80x.?.?Ŗ?
     ...
     02050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00  CHIP????????.???
     02060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????
     ...
     7E430: 43 48 49 50 00 00 20 10 00 00 00 3F 80 00 20 00  CHIP????????.???
     7E440: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ????????????????

GMod2 (Individual Computers)

This cart uses 512K Flash ROM (29F040) in 64 banks, mapped in at
$8000-$9fff and has a 2K serial EEPROM (m93C86).

         io1
             - register at de00
     
             bit7   (rw)  write enable (write 1), EEPROM data output (read)
             bit6   (ro)  EXROM (0=active) and EEPROM chip select (1=selected)
             bit5-0 (ro)  rom bank  bit5 EEPROM clock bit4 EEPROM data input
     
         see http://wiki.icomp.de/wiki/GMod2

The PSID image format for ripped SID tunes
==========================================

This section describes the SID file format used for SID tunes in the
HVSC (High Voltage SID Collection - http://hvsc.de). It is based mostly
on Michael Schwendt's document that describes the file format and the
PSID v2NG extensions described by Simon White and Dag Lem and was
further extended by Wilfred Bos (PSID v3/v4, RSID v3/v4) and LaLa
(assembled most of the following text) and last not least tweaked a bit
by Groepaz to fit into the VICE documentation.

The original documentation maintained by the HVSC team can be found
here: http://www.hvsc.de/download/C64Music/DOCUMENTS/SID_file_format.txt

SID files use the .sid file extension.

Since PSID v2 is simply an extension of PSID v1, PSID v2NG is an
extension of PSID v2, RSID is a restricted version of PSID v2NG, PSID
v3/v4 and RSID v3/v4 are extentions of PSID v2NG and RSID v2, all of
the formats are discussed together below. RSID in specific is discussed
in detail under the 'magicID' field description.

The information presented here targets programmers or other people with
reasonable background. It is not suitable for newbies who have never
before used a machine code monitor, a disassembler, or a hexadecimal
editor.

The SID file header v1
----------------------

The detailed structure of the SID header looks like the following.
Header offsets are in hexadecimal notation. Other integer values are
decimal unless explicitly marked otherwise. Any stored integer values
are in big-endian format:

     +00    magicID: ``PSID'' or ``RSID''

This is a four byte long ASCII character string containing the value
0x50534944 or 0x52534944. 'RSID' (Real SID) denotes that the file
strictly requires a true Commodore-64 environment to run properly.
'PSID' files will generally run trouble-free on older PlaySID and
libsidplay1 based emulators, too.

Some words about the Real C64 SID file format (RSID):

The RSID format was designed to contain tunes that are not PlaySID
compatible, but strictly require a real C64 environment to run. Tunes
that are multi-speed and/or contain samples and/or use additional
interrupt sources or do busy looping will cause older SID emulators to
lock up or play very wrongly (if at all).

By using the name RSID for such rips all existing SID emulators will
reject these tunes safely until they can be upgraded to cope with the
additional requirements.

Due to the nature of these tunes, every effort must be made to make
sure they are directly runnable on an actual C64 computer. As such the
tunes will only be presented with the default C64 power-on environment
and expected to configure and use all hardware appropriately.

RSID is based on PSIDv2NG with the following modifications:

   * magicID = RSID

   * version = 2, 3 and 4 only

   * loadAddress = 0 (reserved)

   * playAddress = 0 (reserved)

   * speed = 0 (reserved)

   * psidSpecific flag is called C64BASIC flag

The above fields MUST be checked and if any differ from the above then
the tune MUST be rejected. The definitions above will force tunes to
contain proper hardware configuration code and install valid interrupt
handlers.

See section "The SID file environment" below for the default C64
power-on environment for each SID file format.

     +04    WORD version

Available version number can be 0001, 0002, 0003 or 0004. Headers of
version 2, 3 and 4 provide additional fields. RSID and PSID v2NG files
must have 0002, 0003 or 0004 here.

     +06    WORD dataOffset

This is the offset from the start of the file to the C64 binary data
area.  Because of the fixed size of the header, this is either 0x0076
for version 1 and 0x007C for version 2, 3 and 4.

     +08    WORD loadAddress

The C64 memory location where to put the C64 data. 0 means the data are
in original C64 binary file format, i.e. the first two bytes of the
data contain the little-endian load address (low byte, high byte). This
must always be true for RSID files. Furthermore, the actual load
address must NOT be less than $07E8 in RSID files.

You must be absolutely sure what to enter here. There is no way to
detect automatically whether the first two bytes in a C64 data file are
meant to be a load address or some arbitrary bytes of code or data.
Unless your C64 file is not a normal binary file and thus has no load
address in front, you need not enter anything else than 0 here. The SID
tune will not play if you specify a load address which is present in
the C64 file already.

Normal C64 binary data files have a load address in their first two
bytes, so they can be loaded to a pre-defined destination address by
executing LOAD"FILE",8,1, for instance. If a load address is explicitly
specified in the sidtune info file, some sidtune converters and
utilities conjecture that the C64 data don't have a load address in
their first two bytes. Hence, the explicit load address from the info
file is moved in front of the C64 data to create a valid C64 binary
file which can be easily loaded on a C64, too. If that C64 file were to
be saved, it would contain two superfluous data bytes at offset 2 if an
original load address had been in the first two bytes of the old file.
This process of adding a duplicate load address can be repeated. The
file loader strips off the first two bytes (the used load address) and
puts the rest of the file contents (including the now obsolete load
address at file offset 2) into memory. If the new load address is the
same than the old one the two added bytes cause the whole data to be
displaced by two bytes, which most likely results in malfunctioning
code. Also, superfluous bytes in memory then can confuse disassemblers
which start at the beginning of the file or memory buffer.

     +0A    WORD initAddress

The start address of the machine code subroutine that initializes a
song, accepting the contents of the 8-bit 6510 Accumulator as the song
number parameter. 0 means the address is equal to the effective load
address.

In RSID files initAddress must never point to a ROM area ($A000-$BFFF or
$D000-$FFFF) or be lower than $07E8. Also, if the C64 BASIC flag is set,
initAddress must be 0.

     +0C    WORD playAddress

The start address of the machine code subroutine that can be called
frequently to produce a continuous sound. 0 means the initialization
subroutine is expected to install an interrupt handler, which then
calls the music player at some place. This must always be true for RSID
files.

     +0E    WORD songs

The number of songs (or sound effects) that can be initialized by
calling the init address. The minimum is 1. The maximum is 256.

     +10    WORD startSong

The song number to be played by default. This value is optional. It
often specifies the first song you would hear upon starting the program
is has been taken from. It has a default of 1.

     +12    LONGWORD speed

This is a 32 bit big endian number.

For version 1 and 2 and for version 2NG, 3 and 4 with PlaySID specific
flag (+76) set, the 'speed' should be handled as follows:

Each bit in 'speed' specifies the speed for the corresponding tune
number, i.e. bit 0 specifies the speed for tune 1. If there are more
than 32 tunes, the speed specified for tune 32 is the same as tune 1,
for tune 33 it is the same as tune 2, etc.

For version 2NG, 3 and 4 with PlaySID specific flag (+76) cleared, the
'speed' should be handled as follows:

Each bit in 'speed' specifies the speed for the corresponding tune
number, i.e. bit 0 specifies the speed for tune 1. If there are more
than 32 tunes, the speed specified for tune 32 is also used for all
higher numbered tunes.

For all version counts:

   * A 0 bit specifies vertical blank interrupt (50Hz PAL, 60Hz NTSC),
     and a 1 bit specifies CIA 1 timer interrupt (default 60Hz).

   * Surplus bits in 'speed' should be set to 0.

   * For RSID files 'speed' must always be set to 0.

Note that if 'play' = 0, the bits in 'speed' should still be set for
backwards compatibility with older SID players. New SID players running
in a C64 environment will ignore the speed bits in this case.

WARNING: This field does not work in PlaySID for Amiga like it was
intended, therefore the above is a redefinition of the original 'speed'
field in SID v2NG! See also the 'clock' (video standard) field
described below for 'flags'.

     +16    ``<name>''
     +36    ``<author>''
     +56    ``<released>'' (once known as ``<copyright>'')

These are 32 byte long ASCII character strings. Upon evaluating the
header, these fields may hold a character string of 32 bytes which is
not zero terminated. For less than 32 characters the string should be
zero terminated.  The maximum number of available free characters is 32.

     +76    <data>

Version 1 of the SID header is complete at this point. The binary C64
data starts here.

The SID file header v2, v3 and v4
---------------------------------

Version 2, 3 and 4 of the header incorporates the v1 header fields and
provides additional fields. Some of these are actually v2NG, v3 or v4
specific - those are noted below.

     +76    WORD flags

This is a 16 bit big endian number containing the following bitfields:

   * Bit 0 specifies format of the binary data (musPlayer):   0 =
     built-in music player,   1 = Compute!'s Sidplayer MUS data, music
     player must be merged.

If this bit is set, the appended binary data are in Compute!'s
Sidplayer MUS format, and does not contain a built-in music player. An
external player machine code must be merged to replay such a sidtune.

   * Bit 1 specifies whether the tune is PlaySID specific, e.g. uses
     PlaySID   samples (psidSpecific):   0 = C64 compatible,   1 =
     PlaySID specific (PSID v2NG, v3, v4)   1 = C64 BASIC flag (RSID)

This is a v2NG and RSID specific field.

PlaySID samples were invented to facilitate playback of C64 volume
register samples with the original Amiga PlaySID software. PlaySID
samples made samples a reality on slow Amiga hardware with a player
that was updated only once a frame.

Unfortunately, converting C64 volume samples to PlaySID samples means
that they can no longer be played on a C64, and furthermore the
conversion might potentially break the non-sample part of a tune if the
timing between writes to the SID registers is at all altered. This
follows from the ADSR bugs in the SID chip.

Today, the speed of common hardware and the sophistication of the SID
players is such that there is little need for PlaySID samples. However,
with all the PlaySID sample PSIDs in existence there's a need to
differentiate between SID files containing only original C64 code and
PSID files containing PlaySID samples or having other PlaySID specific
issues. As stated above, bit 1 in 'flags' is reserved for this purpose.

Since RSID files do not have the need for PlaySID samples, this flag is
used for a different purpose: tunes that include a BASIC executable
portion will be played (with the BASIC portion executed) if the C64
BASIC flag is set. At the same time, initAddress must be 0.

   * Bits 2-3 specify the video standard (clock):   00 = Unknown,   01
     = PAL,   10 = NTSC,   11 = PAL and NTSC.

This is a v2NG specific field.

As can be seen from the 'speed' field, it is not possible to specify
NTSC C64 playback. This is unfortunate, since the different clock
speeds means that a tune written for the NTSC C64 will be slightly
detuned if played back on a PAL C64. Furthermore, NTSC C64 tunes driven
by a vertical blank interrupt have to be converted to use the CIA 1
timer to fit into this scheme. This can cause severe problems, as the
NTSC refresh rate is once every 17045 cycles, while the CIA 1 timer A
is latched with 17095 cycles. Apart from the difference in timing
itself, the SID ADSR bugs can actually break the tune.

The 'clock' (video standard) field was introduced to circumvent this
problem.

   * Bits 4-5 specify the SID version (sidModel):   00 = Unknown,   01
     = MOS6581,   10 = MOS8580,   11 = MOS6581 and MOS8580.

This is a v2NG specific field.

   * Bits 6-7 specify the SID version (sidModel) of the second SID:
     00 = Unknown,   01 = MOS6581,   10 = MOS8580,   11 = MOS6581 and
     MOS8580.

If bits 6-7 are set to Unknown then the second SID will be set to the
same SID model as the first SID.

This is a v3 specific field.

   * Bits 8-9 specify the SID version (sidModel) of the third SID:   00
     = Unknown,   01 = MOS6581,   10 = MOS8580,   11 = MOS6581 and
     MOS8580.

If bits 8-9 are set to Unknown then the third SID will be set to the
same SID model as the first SID.

This is a v4 specific field.

The MOS6581 and the MOS8580 have three notable differences. First,
combined waveforms are generally louder on a MOS8580, to the extent
that some combinations that are clearly audible on a MOS8580 are
completely silent on a MOS6581. Second, the internal DC levels in the
MOS8580 are so small that software or hardware tricks must be used to
play volume samples. Third, the MOS8580 analog filter has totally
different characteristics from the MOS6581 analog filter.

To ensure that music specifically written for one of the two SID
versions can be played back correctly, bits 4-9 in 'flags' are used as
stated above.

   * Bits 10-15 are reserved and should be set to 0.

     +78    BYTE startPage (relocStartPage)

This is a v2NG specific field.

This is an 8 bit number. If 'startPage' is 0, the SID file is clean,
i.e. it does not write outside its data range within the driver ranges.
In this case the largest free memory range can be determined from the
start address and the data length of the SID binary data. If
'startPage' is 0xFF, there is not even a single free page, and driver
relocation is impossible. Otherwise, 'startPage' specifies the start
page of the single largest free memory range within the driver ranges.
For example, if 'startPage' is 0x1E, this free memory range starts at
$1E00.

     +79    BYTE pageLength (relocPages)

This is a v2NG specific field.

This is an 8 bit number indicating the number of free pages after
'startPage'.  If 'startPage' is not 0 or 0xFF, 'pageLength' is set to
the number of free pages starting at 'startPage'. If 'startPage' is 0
or 0xFF, 'pageLength' must be set to 0.

The relocation range indicated by 'startPage' and 'pageLength' should
never overlap or encompass the load range of the C64 data. For RSID
files, the relocation range should also not overlap or encompass any of
the ROM areas ($A000-$BFFF and $D000-$FFFF) or the reserved memory area
($0000-$03FF).

     +7A    BYTE secondSIDAddress

This is a v3 specific field. For v2NG, it should be set to 0.

This is an 8 bit number indicating the address of the second SID. It
specifies the middle part of the address, $Dxx0, starting from value
$42 for $D420 to $FE for $DFE0). Only even values are valid. Ranges
$00-$41 ($D000-$D410) and $80-$DF ($D800-$DDF0) are invalid. Any
invalid value means that no second SID is used, like $00.

     +7B    BYTE thirdSIDAddress

This is a v4 specific field. For v2NG and v3, it should be set to 0.

This is an 8 bit number indicating the address of the third SID. It
specifies the middle part of the address, $Dxx0, starting from value
$42 for $D420 to $FE for $DFE0). Only even values are valid. Ranges
$00-$41 ($D000-$D410) and $80-$DF ($D800-$DDF0) are invalid. Any
invalid value means that no third SID is used, like $00.  The address
of the third SID cannot be the same as the second SID.

     +7C    <data>

Version 2, 3 and 4 of the SID header ends here. This offset is the
start of the binary C64 data. See also 'loadAddress' for what the first
2 bytes of 'data' might indicate.

The SID file environment
------------------------

Before the data of a SID file is loaded in memory of a C64, certain
addresses and chips must be initialized in order to play the SID tune
correctly.

For RSID and PSID files the following address must be set:

.3 .7  $02A6  depending on the PAL/NTSC flag in the SID file header, it
is set to 0x01 for PAL and set to 0x00 for NTSC.   multitable

The default C64 environment for PSID files is as follows:

.3 .7  VIC  IRQ set to any raster value less than 0x100. Enabled when
speed  flag is 0, otherwise disabled.   CIA 1 timer A  set to 60Hz
(0x4025 for PAL and 0x4295 for NTSC) with the counter running. IRQs
active when speed flag is 1, otherwise IRQs are disabled.   Other timers
disabled and loaded with 0xFFFF.   multitable

When the init and play addresses are called the bank register value
must be written for every call and the value is calculated as follows:

     if   address < $A000  -> 0x37 // I/O, Kernal-ROM, Basic-ROM
     else address < $D000  -> 0x36 // I/O, Kernal-ROM
     else address >= $E000 -> 0x35 // I/O only
     else                  -> 0x34 // RAM only

The default C64 environment for RSID files is as follows:

.3 .7  VIC  IRQ set to raster 0x137, but not enabled.   CIA 1 timer A
set to 60Hz (0x4025 for PAL and 0x4295 for NTSC) with the counter
running and IRQs active.   Other timers  disabled and loaded with
0xFFFF.   Bank register  0x37  multitable

   * A side effect of the bank register is that init MUST NOT be
     located under a ROM/IO memory area (addresses $A000-$BFFF and
     $D000-$FFFF) or outside the load image.

   * Since every effort needs to be made to run the tune on a real C64
     the load address of the image MUST NOT be set lower than $07E8.

   * If the C64 BASIC flag is set, the value at $030C must be set with
     the song number to be played (0x00 for song 1).


@EndNode

@Node "Acknowledgments" "vice.guide/Acknowledgments"
@Next "Copyright"
@Prev "File formats"
@Toc "Main"

Acknowledgments
***************

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:
   * Andreas Matthies Improved the datasette support, the VIC20 video
     emulation and some UI stuff in the Win32 and DOS ports. He also
     wrote the BeOS port and implemented video/audio capture support.
     Improved history recording/playback and implemented support for
     video recording and the netlink feature. Made the Win32 user
     changable keyboard shortcut system. Improved CIA and VIA
     emulation. Worked on x64sc, especially interrupt timing.  Improved
     the FFMPEG support and started the 'in-source' FFMPEG
     support/merge. Wrote test programs. Various bug(fixe)s. ;-)

   * Martin Pottendorfer Implemented the Gnome Port based on Oliver
     Schaertels GTK+ port. Added support code for internationalization
     based on gettext. Improved the *nix fullscreen support. Added
     multi- threaded GUI display for *nix. Translated the UI to German.
     Implemented the fliplists + UI (*nix).

   * Marco van den Heuvel Translated the UI to Dutch. Made the
     internationalization support for the Win32 and Amiga ports. Wrote
     the GEO-RAM and RamCart cartridge code. Wrote the c64 +60K, +256K
     and 256K memory expansions code. Wrote the pet REU code. Wrote the
     plus4 memory expansions code. Made the ethernet support for the DOS
     port. Maintains the QNX 4.x, QNX 6.x, Solaris, Openserver,
     Unixware, Minix 3.x, Amiga, Syllable and OS/2 binary ports.
     Maintains the Win64 and Open Watcom project files. Maintains the
     SDL port(s). Added new .crt support. Added new screenshot formats.
     Added new sound recording support. Added SIDcart support for xpet,
     xplus4 and xvic. Improved the MMC64 emulation. Added 2 MHz mode
     and banks 2/3 support for x128.  Added the various userport
     joystick emulations. Added text copy and paste support to the
     Amiga and BeOS ports. Added DQBB and ISEPIC cartridge support.
     Added SFX Sound Sampler and SFX Sound Expander support. Added PCI
     support to the Amiga and DOS ports.  Rewrote the sound system into
     a modular one, added always mono and always stereo support for the
     sound output. Added the RTC system. Added digiblaster support.
     Added 3rd SID support. Added the 6309 CPU emulation. Added the
     65(S)C02 emulation. Added the 65816 emulation. Added native
     screenshot (koala/doodle) support. Added 6502/6510/8500/8502 cpu
     port unused bit fading.  Added vice.chm (windows), vice.guide
     (amiga), vice.hlp (windows), vice.inf (os/2), vice.pdf (generic)
     and vice.txt documentation generation. Added Android port based on
     'AnVICE 1.0.5'. Improved/fixed the 'in-source' FFMPEG support and
     fixed it for msvc7.0 and up. Generalized the 'RS232 net' support
     to be able to be used on any network supporting arch.  Started the
     SDL2 port. Added generic sampler input support.  Added new joyport
     system and converted the joystick, mouse and lightpen code to use
     the new system. Added joyport attached rtc (bbrtc). Added joyport
     attached cardkey keypad. Added joyport attached coplin keypad.
     Added joyport attached atari cx21 keypad. Added joyport attached
     atari cx85 keypad. Added joyport attached paperclip 64 dongle.
     Added joyport attached rushware keypad. Added joyport attached 2/4
     bit samplers. Added vic20 I/O-2 and I/O-3 RAM support. Added the
     c64 cp/m (z80) cartridge. Added IDE64 digimax short bus device
     emulation.  Added tapeport system and the tapelog, cp-clockf83,
     tape-sense dongle, and (not yet working) dtl basic dongle devices.
     Added easy calc result cartridge emulation. Added hardware SID I/O
     access system which allows CW3, HardSID, ParSID and SSI2001 to
     work on AmigaOS, BeOS, DOS, SDL, *nix and windows with and without
     device drivers. Added clockport system for mmc64, mmcreplay,
     retroreplay and ide64. Added rrnet clockport device.  Added mp3@64
     clockport device. And lots of other fixes and improvements.

   * Fabrizio Gennari Added some improvements to the DOS and GTK+
     ports. Changed the Windows video to use GDI as fallback, making it
     compile without DX if needed. Fixed the t64 support. Added monitor
     window support using VTE to the GTK+ GUI. Made some monitor fixes.
     Fixed some tape code issues.

   * Daniel Kahlin Worked on DTV VIC emulation, palette, DTV SID
     support in resid, better DMA/Blitter support and did lots of
     refactoring. Added new monitor commands and features. Improved the
     VIC emulation for xvic. Made MIDI driver code for Win32. Rewrote
     the xvic cartridge system. Added Mega-Cart and Final Expansion V3.2
     support to xvic. Wrote large parts of the new VIC-II emulation
     used in x64sc, especially the dot clock domain emulation. Wrote
     many test programs for hardware analysis.

   * Groepaz Added new more precise CRT emulation. Added support for
     the new cartridge system and many new cartridges. Fixed up parts of
     cartconv, c1541 and petcat. Added video to audio leak sound
     support.  Improved the GTK3 GUI. Added
     x64(sc)/x128/x64dtv/xplus4/xvic model selection system. Added
     KoalaPad emulation. Added keyrah keymaps.  Added joystick keys
     mapping to the keymap system. CIA emulation improvements. Added
     basic support for compute gazette sidplayer files (mus/str) to
     vsid. Added new palette files. Added 'available features' code.
     Fixed/added some items in the OSX GUI.  Added random tape wobble
     emulation. Added 64k RGCD cartridge emulation. Added psid v4 3sid
     support to vsid. Added single frame advance. Added drive RPM and
     wobble support. Added rrnet mk3 emulation. Added GMod2 cartridge
     emulation. Added xvic BehrBonz cartridge emulation. Added VICII
     VSP-bug emulation. Wrote alot of test programs. Updated this
     document after a long period of outdated mess. And various fixes
     and improvements.

   * Errol Smith Improved VDC emulation. Improved MPS803 printer
     emulation.

   * Olaf Seibert Contributed some PET, including PET DWW hires, Xaw,
     lightpen, hardware scaling, and disk drive patches. Added proper
     SuperPET support, including 6809/6309 CPU emulation. Maintains the
     Xaw UI.  Added PET HRE (High Res Emulator) board emulation. Added
     the 2-chip colour board for the Universal PET mainboard. Added
     support for 'printer/plotter' Commodore 1520.

   * Marcus Sutton Made some console, dialog and joystick fixes for the
     BeOS port.  Maintains the BeOS port. Added some GTK2 fixes. Fixed
     some PET model selection issues. Revived the Windows NT Unicode
     port.

   * Kajtar Zsolt Wrote the IDE64 interface emulation, FD2000/4000
     drive emulation, SCPU64 emulation and alot of fixes. Improved the
     mouse support. Added drive burst modification support. Added 1541
     drive sounds emulation. Improved c64 cart emulation. Added DAC
     high pass filtering. Added the xscpu64 emulator. Added scroll
     wheel support for the Micromys mouse emulation.  Added Swiss ROM
     support to x128. Added IDE64 USB server emulation. Added 1540
     drive emulation. Improved monitor support. Improved vdrive
     compatibility. Added godot screenshot support. And fixed various
     issues.

   * BSzili Provided many amigaos4 fixes. Maintains the amigaos based
     and derived ports.

   * AreaScout Fixed the SDL2 port. Revived the Android port. Maintains
     the SDL1, SDL2 and Android ports.

   * Bas Wassink Fixed some gtk2/3 issues. Fixed t64 file handling.
     Fixed memory leaks. Added more doxygen documentation. Fixed c1541
     issues.  Updated the Linux-Native-Howto.txt file. Added autoconf,
     automake and yasm version checking. Fixed runtime linker path
     issues with *BSD. Fixed out-of-tree building.

Former/inactive team members:

   * Ulrich Schulz Maintains the Dingoo port(s).

   * Stefan Haubenthal Added some Amiga fixes.

   * Thomas Giesel Added new monitor commands, features and
     improvements.

   * Ingo Korb Corrected block allocation and interleave for
     c1541/vdrive, added rudimentary xplus4 tape recording support,
     fixed some GTK2 issues, corrected a case of missing Pi symbols in
     petcat, changed the trap opcode byte, stopped the high-level
     serial drive code from responding to addresses 16-30 and was
     forced to update this entry himself.

   * Antti S. Lankila Made the ReSID-fp engine, rewrote the PAL
     emulation code and fixed the sound core for lower latency. Rewrote
     DTV SID support (ReSID-dtv). Improved 1541 drive rotation
     emulation. Worked on x64sc. Added RSID BASIC tunes support to
     vsid. Several ReSID fixes and improvements.

   * Christian Vogelgsang Maintained the Mac OS X port. Added Intel Mac
     support and universal binary creation. Wrote the build scripts for
     all external Mac libraries and the bindist bundle tool. Improved
     the TFE chip emulation. Added some GTK+ fixes.

   * Dag Lem Implemented the reSID SID emulation engine and video
     hardware scaling.

   * Spiro Trikaliotis Copyright (C) 2000-2011 Wrote the Win32 console
     implementation for the built-in monitor, corrected some REU
     related bugs, improved the CIA emulation, added com-port CIA
     support to the Win32 port, added text copy and paste support to
     the Win32 port, added support for the TFE and RR-Net (cs8900a),
     and wrote some further patches.

   * Hannu Nuotio Copyright (C) 2007-2011 Implemented DTV flash
     emulation, DTV support in the monitor, large parts of the DTV VIC,
     burst mode and skip cycle emulation as well as many other things.
     Added NEOS and Amiga mouse, paddle and light pen support. Added
     new monitor commands and features, including memmap. Made MIDI
     support and OSS MIDI driver. Implemented most of the SDL UI.
     Rewrote xvic CPU/VIC-I core for cycle based emulation. Implemented
     C64 cartridge snapshot support. Initiated and worked on all parts
     of implementing x64sc. Wrote test programs.

   * Andreas Boose Copyright (C) 1998-2010 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. He also added cartridge support and has been the main
     head behind the drive and datasette emulation since version 0.15.
     Also added several UI elements to the DOS, Win32 and *nix ports.
     He rewrote the C128 emulation adding Z80 mode, C64 mode and
     function ROM support, wrote the screenshot and the event system
     and started the plus4 emulator. Restructured the serial bus
     emulation and added realdrive and rawdrive support.

   * Tibor Biczo Copyright (C) 1998-2010 Improved the Win32 port and
     plus4 emulation.

   * M. Kiesel Copyright (C) 2007-2010 Started implementing x64dtv. The
     C64DTV memory model and early versions of the DMA and Blitter
     engine have been implemented by him. Added new monitor commands
     and features.

   * Andreas Dehmel Copyright (C) 1999-2007 Wrote the Acorn RISC OS
     port.

   * David Hansel Copyright (C) 2003-2005 Wrote the Star NL10 printer
     driver, implemented IEC devices and improved the tape emulation.

   * Markus Brenner Copyright (C) 2000-2004 Added VDC emulation to x128
     and added support for some more cartridges.

   * Thomas Bretz Copyright (C) 1999-2004 Started the OS/2 port.

   * Daniel Sladic Copyright (C) 1997-2001 Started the work on
     hardware-level 1541 emulation and wrote the new monitor introduced
     with VICE 0.15.

   * André Fachat Copyright (C) 1996-2001 Wrote the PET and CBM-II
     emulators, the CIA and VIA emulation, the IEEE488 interface,
     implemented the IEC serial bus in `xvic' and made tons of bug
     fixes.

   * Ettore Perazzoli Copyright (C) 1996-1999 Made the 6510, VIC-II,
     VIC-I and CRTC emulations, part of the hardware-level 1541
     emulation, speed optimizations, bug fixes, the event-driven
     cycle-exact engine, the Xt/Xaw/Xfwf-based GUI for X11, a general
     code reorganization, the new resource handling, most of the
     documentation. He also wrote the DOS port and the initial Win32
     port (well, somebody had to do it).

   * Teemu Rantanen Copyright (C) 1993-1994, 1997-1999 Implemented the
     SID emulation and the trap-based disk drive and serial bus
     implementation; added support for multiple display depths under
     X11. Also wrote `c1541'

   * Jouko Valta Copyright (C) 1993-1996 Wrote `petcat' and `c1541',
     `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 Copyright (C) 1993-1994 He was the founder of the
     project, wrote the old version of the 6502 emulation and the
     XDebugger, and retired from the project after x64 0.2.1.

Internationalization Team:

   * Mikkel Holm Olsen Copyright (C) 2009-2016 Provided the Danish user
     interface translations and fixed a few monitor bugs.

     Martin Pottendorfer Copyright (C) 2000-2016 Provided the German
     user interface translations.

     Manuel Antonio Rodriguez Bas Copyright (C) 2011-2016 Provided the
     Spanish user interface translations.

     Paul Dubé Copyright (C) 2004-2016 Provided the French user
     interface translations.

     Czirkos Zoltan Copyright (C) 2006-2016 Provided the Hungarian user
     interface translations.

     Karai Csaba Copyright (C) 2006-2016 Provided the Hungarian user
     interface translations.

     Andrea Musuruane Copyright (C) 2001-2016 Provided the Italian user
     interface translations.

     Jesse Lee Copyright (C) 2011-2016 Provided the Korean user
     interface translations.

     Marco van den Heuvel Copyright (C) 2005-2016 Provided the Dutch
     user interface translations.

     Jarek Sobolewski Copyright (C) 2011-2016 Provided the Polish user
     interface translations.

     Michael Litvinov Copyright (C) 2010-2016 Provided the Russian user
     interface translations.

     Peter Krefting Copyright (C) 2000-2016 Provided the Swedish user
     interface translations.

     Emir Akaydin Copyright (C) 2008-2016 Provided the Turkish user
     interface translations.

Documentation Team:

   * Daniel Kahlin

     Groepaz

     Kajtar Zsolt

     Marco van den Heuvel

     Olaf Seibert

External contributors:

   * Alexis Ballier Provided some ffmpeg fixes.

   * Christian Bauer Wrote the very interesting "VIC article" from
     which we got invaluable information about the VIC-II chip: without
     this, the VIC-II implementation would not have been possible.

   * Anthony J. Bentley Provided some man page fixes.

   * Eliseo Bianchi Provided the italian Amiga translations.

   * Enrico Bruttomesso Improved some italian translations.

   * Frank Buss Provide some midi fixes.

   * ck!  Provided a win32 cbm character font.

   * iAN CooG Added win32 vsid GUI and contributed various patches.

   * Mike Dawson Provided the GP2X port.

   * Hans Deragon Added support for dead keys in X11.

   * Paul David Doherty Wrote `zip2disk', on which the Zipcode support
     in `c1541' is based.

   * Sven A. Droll Added Supergrafik support to petcat.

   * Peter Edwards Implemented the SDL UI slider control and fixed some
     GP2X/Dingoo SDL UI issues.

   * István Fábián Contributed a initial patch with the more correct
     1541 bus timing code and which gave us hints for to improving the
     1541 emulation.

   * Daniel Fandrich Contributed some disk drive patches.

   * Dirk Farin Rewrote the MITSHM code.

   * Georg Feil Added support for toggling CB2 sound output line in the
     PET emulator.

   * Peter Andrew Felvegi aka Petschy Fixed a couple of bugs in the
     fast serial emulation.

   * Ricardo Ferreira Contributed the `unlynx' and `system' commands in
     `c1541' and added aRts sound support.

   * Flooder Provided parts of the Polish user interface translations.

   * Robert H. Forsman Jr.  Provided parts of the widget set for
     implementing the Xaw GUI.

   * Ian Gledhill Added support for the catweasel.device driver.

   * Peter Gordon Provided support for native AmigaOS4 compiling.

   * Richard Hable Contributed the initial version of the REU emulation.

   * Shawn Hargreaves Wrote Allegro, the graphics and audio library
     used in the DOS version.

   * Ville-Matias Heikkila Rewrote the vic20 sound code.

   * David Holz Provided a label file which gives the built-in monitor
     the labels for the C64.

   * Nathan Huizinga Added support for Expert and Super Snapshot carts.

   * Derrick Inksley Fixed loading of zip files with brackets ([]) in
     the filename for the windows port. Added drive selection
     functionality to the window sdl port. Some drive sound fixes.
     Fixed some windows drag'n'drop issues. Fixed some monitor code
     issues.

   * Craig Jackson Contributed miscellaneous patches in the old X64
     times.

   * Dirk Jagdmann Wrote the Catweasel sound driver.

   * Uffe Jakobsen Wrote the Silverrock cartridge emulation and fixed
     the ocean cartridge bank wrap. Fixed some network code issues.
     Fixed some monitor issues. Provided some SDL port fixes.

   * Lasse Jyrkinen Contributed miscellaneous patches in the old X64
     times.

   * Peter Karlsson Provided the swedish UI translations in the past.

   * Greg King Added a working RTC to the emulation of the IDE64
     cartridge. Provided some vdrive fixes. Added Inkwell Systems
     lightpen support. Fixed some monitor code issues. Provided some
     windows port fixes. Provided some SDL port fixes.

   * Michael Klein Fixed some MacOSX code issues. Contributed the ESD
     sound driver, basic support for the OPENCBM library and some other
     patches.

   * Frank König Contributed the Win32 joystick autofire feature.

   * Bernd Kortz Provided some fixes for ZETA and the ZETA binary
     package.

   * Bernhard Kuhn Made some joystick improvements for Linux.

   * Alexander Lehmann Added complete support for all the VIC20 memory
     configurations for the old VICE 0.12.

   * Ilkka "itix" Lehtoranta Provided the routines for the
     cybergraphics support for the Amiga ports.

   * Magnus Lind Atari ST mouse and Atari CX-22 trackball emulation and
     pixel aspect fixes. Improved the Amiga mouse emulation. Improved
     the vic20 sound output. Added windows POV hat support.  Improved
     sound fragment size handling. Provided some windows fixes.
     Provided some gtk port fixes. Provided some SDL port fixes.

   * Lioncash Provided some c1541 fixes. Fixed some 'geninfocontrib'
     helper tool issues. Fixed some 'embedded' build issues. Fixed some
     memory leaks.

   * Locnet Made the initial android port of x64.

   * Wolfgang Lorenz Wrote an excellent 6510 test suite that helped us
     to debug the CPU emulation.

   * lvd Provided some monitor fixes.

   * Marko Mäkelä Wrote lots of CPU documentation. Wrote the VIC
     Flash Plugin cartridge emulation in xvic. Wrote the Ultimem
     cartridge emulation in xvic.

   * mar77i Fixed some resource handling issues.

   * Robert McIntyre Bugged people enough to get the improved g64
     support rolling, updated g64 support to allow variable-length
     tracks, and performed initial development of half-track support.

   * Robert W. McMullen Provided parts of the widget set for
     implementing the Xaw GUI.

   * Jennifer Medkief Was in charge of checking up on the GUIs for
     elements that are wrong, unaccessable, and missing.

   * Dan Miner Contributed some patches to the fast disk drive
     emulation.

   * mjhn Provided some *nix 'readme' fixes.

   * Moiree Provided some command line fixes. Improved the build
     system. Fixed some vsid bugs. Fixed some SDL GUI issues. Fixed
     some documentation items.

   * Luca Montecchiani Contributed a new Unix joystick driver.

   * Wolfgang Moser Provided small optimization fixes to the GCR code,
     provided an excellent REU test suite and added REU fixes, and is
     always the good guy reviewing and commenting changes in the
     background.

   * Roberto Muscedere Improved support for REL files.

   * Leandro Nini Improved ReSID emulation. And fixed some c64dtv cpu
     opcode issues.

   * Tomi Ollila Donated `findpath.c'.

   * Per Olofsson Digitalized the C64 colors used in the (old) default
     palette.

   * Lasse Öörni Contributed the Windows Multimedia sound driver

   * Stein Pedersen Fixed windows midi driver for 64bit windows.

   * Helfried Peyrl Supplied a patch that fixes REL file records larger
     256 bytes when using vdrive.

   * Frank Prindle Contributed some patches.

   * Giuliano Procida Used to maintain the VICE `deb' package for the
     Debian distribution, and also helped proofreading the
     documentation.

   * Vesa-Matti Puro Wrote the very first 6502 CPU emulator in x64
     0.1.0. That was the beginning of the story...

   * Rami Rasanen Rewrote the VIC20 sound code.

   * Peter Rittwage Made 1541 GCR hardware tests.

   * David Roden Fixed various issues related to ffmpeg settings.

   * Pablo Roldán Contributed initial patch for VIC-II PAL-N model
     selection.

   * Mathias Roslund Provided the AmigaOS4 port.

   * Gunnar Ruthenberg Provided some VIC-II enhancements and improved
     the Win32 port.

   * Johan Samuelsson Provided the Swedish Amiga translations.

   * Oliver Schaertel Wrote the X11 full screen, parts of custom ROM
     set support and 1351 mouse emulation for unix.

   * Peter Schepers Contributed a document describing the G64 image
     format.

   * Michael Schwendt 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.

   * Heiko Selber Contributed some VIC20 I/O patches.

   * John Selck Improved the video rendering and added the fast PAL
     emulation.  Implemented new color generation based on P.
     Timmermanns knowledge.

   * Chris Sharp Wrote the AIX sound driver.

   * Andr351 "JoBBo" Siegel Provided the native MorphOS icons.

   * Harry "Piru" Sintonen Provided lots of fixes and improvements for
     the Amiga ports.

   * Manfred Spraul Wrote the Win32 text lister.

   * Markus Stehr Provided the MMC64 emulation.

   * Michael Steil Provided some c1541 fixes.

   * Dominique Strigl Contributed miscellaneous patches in the old X64
     times.

   * Samuli Suominen Fixed XShm includes for newer xextproto versions
     and updated libpng check for newer versions.

   * Steven Tieu Added initial support for 16/24 bpp X11 displays.

   * Philip Timmermann Did a lot of research about the VIC-II colors.

   * TMLPiper Provided fixes for the osx port.

   * Brian Totty Provided parts of the widget set for implementing the
     Xaw GUI.

   * Mustafa "GnoStiC" Tufan Made improvements to the GP2x port.

   * Lionel Ulmer Implemented joystick support for Linux and a first
     try of a SID emulation for SGI machines.

   * vonred Added multiple monitor support to the windows port.

   * Krister Walfridsson Implemented joystick and sound support for
     NetBSD.

   * webulator Provided Win32 drag & drop support

   * Robert Willie Added some additional commands to the fsdevice
     emulation.

   * Peter Weighill Gave many ideas and contributed the ROM patcher.

   * Gerhard Wesp Contributed the `extract' command in `c1541'.

   * Maciej Witkowiak Did some IDE64 and C1541 fixes.

   * David Wood Provided some monitor fixes.

   * Count Zero Fixed some monitor issues.

(We hope we have not forgotten anybody; if you think we have,  please
tell us.)

The people around the world providing results from running our test
programs on various machines deserve a special mention:

   * hedning (Drean C64 PAL-N, various C64 PAL boxes)

   * Jason Compton (Various C64 and C128 NTSC boxes)

   * The Woz (Drean C64 PAL-N)

   * Thierry (Drean C64 PAL-N)

   * MOS6569 (C64C PAL)

   * Mike (VIC-20 PAL)

   * Wilson (VIC-20 NTSC)

   * Vicassembly (VIC-20 NTSC)

   * David "jbevren" Wood (C64 NTSC-OLD)

Thanks also to everyone else for sending suggestions, ideas, bug
reports, questions and requests. In particular, a warm thanks goes to
the following people:

   * Lutz Sammer

   * Ralph Mason

   * George Caswell

   * Jasper Phillips

   * Luca Forcucci

   * Asger Alstrup

   * Bernhard Schwall

   * Salvatore Valente

   * Arthur Hagen

   * Douglas Carmichael

   * Ferenc Veres

   * Frank Reichel

   * Ullrich von Bassewitz

   * Holger Busse

   * David "jbevren" Wood

   * Gary Glenn

Last but not least, a very special thank to Andreas Arens, Lutz Sammer,
Edgar Tornig, Christian Bauer, Wolfgang Lorenz, Miha Peternel, Per
Håkan Sundell and David Horrocks for writing cool emulators to compete
with.  :-)


@EndNode

@Node "Copyright" "vice.guide/Copyright"
@Next "Contacts"
@Prev "Acknowledgments"
@Toc "Main"

Copyright
*********

   * Copyright (C) 1999-2016 Andreas Matthies

   * Copyright (C) 1999-2016 Martin Pottendorfer

   * Copyright (C) 2005-2016 Marco van den Heuvel

   * Copyright (C) 2007-2016 Fabrizio Gennari

   * Copyright (C) 2009-2016 Groepaz

   * Copyright (C) 2011-2016 Marcus Sutton

   * Copyright (C) 2011-2016 Kajtar Zsolt

   * Copyright (C) 2011-2016 Stefan Haubenthal

   * Copyright (C) 2015-2016 BSzili

   * Copyright (C) 2007-2015 Daniel Kahlin

   * Copyright (C) 2009-2015 Errol Smith

   * Copyright (C) 2010-2015 Olaf Seibert

   * Copyright (C) 2012-2014 Benjamin 'BeRo' Rosseaux

   * Copyright (C) 2011-2014 Ulrich Schulz

   * Copyright (C) 2011-2014 Thomas Giesel

   * Copyright (C) 2009-2014 Ingo Korb

   * Copyright (C) 2006-2014 Christian Vogelgsang

   * Copyright (C) 1998-2014 Dag Lem

   * Copyright (C) 2000-2011 Spiro Trikaliotis

   * Copyright (C) 1998-2010 Tibor Biczo

   * Copyright (C) 1998-2010 Andreas Boose

   * Copyright (C) 2007-2010 M. Kiesel

   * Copyright (C) 2007-2011 Hannu Nuotio

   * Copyright (C) 1999-2007 Andreas Dehmel

   * Copyright (C) 2003-2005 David Hansel

   * Copyright (C) 2000-2004 Markus Brenner

   * Copyright (C) 1999-2004 Thomas Bretz

   * Copyright (C) 1997-2001 Daniel Sladic

   * Copyright (C) 1996-1999 Ettore Perazzoli

   * Copyright (C) 1996-1999 André Fachat

   * Copyright (C) 1993-1994, 1997-1999 Teemu Rantanen

   * Copyright (C) 1993-1996 Jouko Valta

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


@EndNode

@Node "Contacts" "vice.guide/Contacts"
@Next "Concept Index"
@Prev "Copyright"
@Toc "Main"

Contact information
*******************


 @{" Home page " Link "Home page"}                    The official VICE WWW page.
 @{" Sending feedback " Link "Sending feedback"}             How to report impressions and
                                bugs to the authors.
 @{" Contributing " Link "Contributing"}                 How to help developing VICE.
 @{" Newsgroups " Link "Newsgroups"}                   VICE-related Usenet groups.
 @{" FAQs you should read " Link "FAQs you should read"}         VICE-related Frequently Asked Questions.


@EndNode

@Node "Home page" "vice.guide/Home page"
@Next "Sending feedback"
@Prev "Contacts"
@Toc "Contacts"

VICE home page
==============

You can find the latest news about VICE at the official VICE home page:

     http://vice-emu.sourceforge.net

VICE has moved its source repository to public services provided by
SourceForge. You can find it at
     http://sf.net/projects/vice-emu.

We would like to thank the SourceForge staff for that help.

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.


@EndNode

@Node "Sending feedback" "vice.guide/Sending feedback"
@Next "Contributing"
@Prev "Home page"
@Toc "Contacts"

How to send feedback
====================

Before contacting us, have a look at this manual and see if your
question is answered there. Keep in mind that we work on VICE in our
spare-time, so the more time we don't need to answer the same questions
over and over again, the more time we have to improve the emulation
itself. On the other hand, that does not mean that you should not
contact us, especially if you find bugs or have suggestions which might
improve the emulation.

Bug reports, suggestions, support requests should be directed to the
SourceForge trackers at

   * http://sourceforge.net/tracker/?group_id=223021.

This way, you, the users, and we, the developers, can track what has
been reported and what has been already fixed. Ideally, also sent the
report to the mailing address of the Vice team at

   * VICE Mailing List (vice-emu-mail@lists.sourceforge.net) for all
     general questions, bug reports, suggestions.

You can also contact (some of) us on IRC, at #vice-dev on freenode.

It's always nice to receive feedback and/or bugreports about VICE, but
please read these few notes before sending mail to anybody in the team.

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

   * Please don't send any HTML mail (we really hate that!).  If you use
     M$ Outlook or Netscape Communicator, make sure you turn off the
     "rich text" (HTML) feature.

   * Please don't send *any* binaries without asking first.

   * Please read the following documents carefully before reporting a
     bug or a problem you cannot solve:

        * the VICE documentation (you are reading it!);

        * the VICE FAQ (it is available on the Internet, and reachable
          from the VICE home page: http://vice-emu.sourceforge.net);

        * the `comp.emulators.cbm' and `comp.sys.cbm' FAQs (see
          @{"FAQs you should read" Link "FAQs you should read"}).

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

   * Please don't ask us how to transfer original C64 disk or tapes to
     your PC; this has been asked a gazillion times through email.  To
     transfer disks, you can use the Star Commander
     (http://sta.c64.org/sc.html) on DOS, and OpenCBM
     (http://www.trikaliotis.net/opencbm) on Windows and Linux.  And
     no, you cannot read C64 disks with your old 5"1/4 PC drive.

   * Please don't ask us where to find games for the emulator on the
     Internet.

   * Please don't ask us when the next version will be out, because we
     really don't know.

   * Please write in English.

In any case, we would be *really* glad to receive your comments about
VICE.  We cannot always answer all the email, but we surely read all of
it.

Thanks!


@EndNode

@Node "Contributing" "vice.guide/Contributing"
@Next "Newsgroups"
@Prev "Sending feedback"
@Toc "Contacts"

How to contribute
=================

If you want to make a major contribution, 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 yet,
and we really do *not* want anybody to waste time.

If you are going to make a patch, please make sure the patch is relative
to the very latest version, and provide us with the following:

   * Make sure you are giving us a diff against the latest Subversion
     trunk version of VICE. For instructions on accessing the Subversion
     repository, first read http://sourceforge.net/svn/?group_id=223021
     and get it with the command:
          `svn co https://vice-emu.svn.sourceforge.net/svnroot/vice-emu/trunk vice-src'

   * send a unified diff file against the trunk version of VICE (see
     above bullet point) by using the command: `svn diff' inside of the
     SVN workspace you checked out before.

   * If you cannot use SVN for one or the other reason, send a unified
     diff file containing all the changes you have made `diff -u';
     please don't use plain `diff'), as it adds much work for us to get
     it working;

   * GNU-style `ChangeLog' entries with a description of the changes you
     have made (look at the `ChangeLog's provided with the original VICE
     sources for an example).

This is very important, and makes adding patches much smoother and
safer.

People willing to port VICE to other platforms are always welcome.  But
notice from experience it will take at least a full year of continuous
work to write a well working and stable port.


@EndNode

@Node "Newsgroups" "vice.guide/Newsgroups"
@Next "FAQs you should read"
@Prev "Contributing"
@Toc "Contacts"

Interesting newsgroups
======================

There are some Usenet newsgroups you might be interested in:

   * `comp.emulators.cbm', discussing about emulators of Commodore 8-bit
     machines (definitely not Amiga emulators).

   * `comp.sys.cbm', discussing various topics regarding real Commodore
     8-bit machines.  This newsgroup is mainly for people who actually
     use original Commodore equipment (so please don't talk about
     emulation here).

   * `comp.emulators.misc', discussing emulators in general.


@EndNode

@Node "FAQs you should read" "vice.guide/FAQs you should read"
@Prev "Newsgroups"
@Toc "Contacts"

FAQs you should read
====================

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


@EndNode

@Node "Concept Index" "vice.guide/Concept Index"
@Next "Resource Index"
@Prev "Contacts"
@Toc "Main"

Concept Index
*************

@Index "Concept Index"



 @{" +cart " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -types " Link "c1541 executing shell commands"}                               c1541 executing shell commands
 @{" -1 " Link "Command-line initialization"}                                   Command-line initialization
 @{" -10 " Link "Command-line initialization"}                                  Command-line initialization
 @{" -11 " Link "Command-line initialization"}                                  Command-line initialization
 @{" -6809romB " Link "PET system ROM"}                            PET system ROM
 @{" -8 " Link "Command-line initialization"}                                   Command-line initialization
 @{" -9 " Link "Command-line initialization"}                                   Command-line initialization
 @{" -? " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -? " Link "Command-line initialization"}                                   Command-line initialization
 @{" -acia, +acia " Link "PLUS4-specific"}                         PLUS4-specific
 @{" -attach10rw " Link "Command-line initialization"}                          Command-line initialization
 @{" -attach11rw " Link "Command-line initialization"}                          Command-line initialization
 @{" -attach8rw " Link "Command-line initialization"}                           Command-line initialization
 @{" -attach9rw " Link "Command-line initialization"}                           Command-line initialization
 @{" -autoload " Link "Command-line initialization"}                            Command-line initialization
 @{" -autostart " Link "Command-line autostart"}                           Command-line autostart
 @{" -autostart " Link "Command-line initialization"}                           Command-line initialization
 @{" -b " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -c " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -cart " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -cart2 " Link "VIC20 system ROM options"}                               VIC20 system ROM options
 @{" -cart2 " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -cart4 " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -cart4 " Link "VIC20 system ROM options"}                               VIC20 system ROM options
 @{" -cart6 " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -cart6 " Link "VIC20 system ROM options"}                               VIC20 system ROM options
 @{" -cartA " Link "VIC20 system ROM options"}                               VIC20 system ROM options
 @{" -cartA " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -cartB " Link "VIC20 system ROM options"}                               VIC20 system ROM options
 @{" -cartB " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -cartfe " Link "VIC20 cartridges"}                              VIC20 cartridges
 @{" -cartfp " Link "VIC20 cartridges"}                              VIC20 cartridges
 @{" -cartgeneric " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" -cartmega " Link "VIC20 cartridges"}                            VIC20 cartridges
 @{" -chdir " Link "Command-line initialization"}                               Command-line initialization
 @{" -config " Link "Command-line initialization"}                              Command-line initialization
 @{" -console " Link "Command-line initialization"}                             Command-line initialization
 @{" -CrtcVidmodefullmode " Link "CRTC Settings"}                 CRTC Settings
 @{" -d " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -default " Link "Command-line initialization"}                             Command-line initialization
 @{" -dtvblitterlog, +dtvblitterlog " Link "Debug"}       Debug
 @{" -dtvdmalog, +dtvdmalog " Link "Debug"}               Debug
 @{" -dtvflashlog, +dtvflashlog " Link "Debug"}           Debug
 @{" -extrajoydev1 " Link "Control port options"}                        Control port options
 @{" -extrajoydev2 " Link "Control port options"}                        Control port options
 @{" -f " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -f " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -ffmpegaudiobitrate " Link "C500 data module"}                  C500 data module
 @{" -ffmpegvideobitrate " Link "C500 data module"}                  C500 data module
 @{" -h " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -help " Link "Command-line initialization"}                                Command-line initialization
 @{" -help " Link "c1541 executing shell commands"}                                c1541 executing shell commands
 @{" -i " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -ic " Link "c1541 executing shell commands"}                                  c1541 executing shell commands
 @{" -IDE64USB, +IDE64USB " Link "C64 cartridges"}                 C64 cartridges
 @{" -IDE64USBAddress " Link "C64 cartridges"}                     C64 cartridges
 @{" -initbreak " Link "Monitor options"}                           Monitor options
 @{" -joydev1 " Link "Control port options"}                             Control port options
 @{" -joydev2 " Link "Control port options"}                             Control port options
 @{" -k " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -k<version> " Link "c1541 executing shell commands"}                          c1541 executing shell commands
 @{" -keybuf " Link "Command-line initialization"}                              Command-line initialization
 @{" -l " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -l " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -mitshm, +mitshm " Link "Shared memory problems"}                     Shared memory problems
 @{" -moncommands " Link "Monitor options"}                         Monitor options
 @{" -mouse, +mouse " Link "Control port options"}                       Control port options
 @{" -n " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -nc " Link "c1541 executing shell commands"}                                  c1541 executing shell commands
 @{" -nh " Link "c1541 executing shell commands"}                                  c1541 executing shell commands
 @{" -o " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -o <name> " Link "c1541 executing shell commands"}                            c1541 executing shell commands
 @{" -p " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -q " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -r " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -raminitvalueinvert " Link "Monitor options"}                  Monitor options
 @{" -remotemonitor, +remotemonitor " Link "Monitor options"}       Monitor options
 @{" -remotemonitoraddress " Link "Monitor options"}                Monitor options
 @{" -residfilterbias " Link "SID options"}                     SID options
 @{" -residgain " Link "SID options"}                           SID options
 @{" -residpass " Link "SID options"}                           SID options
 @{" -residsamp " Link "SID options"}                           SID options
 @{" -rsdev1 " Link "RS232 options"}                              RS232 options
 @{" -rsdev2 " Link "RS232 options"}                              RS232 options
 @{" -rsdev3 " Link "RS232 options"}                              RS232 options
 @{" -rsdev4 " Link "RS232 options"}                              RS232 options
 @{" -rsuser, +rsuser " Link "RS232 options"}                     RS232 options
 @{" -rsuserbaud " Link "RS232 options"}                          RS232 options
 @{" -rsuserdev " Link "RS232 options"}                           RS232 options
 @{" -skip <n> " Link "c1541 executing shell commands"}                            c1541 executing shell commands
 @{" -t " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -TEDVidmodefullmode " Link "PLUS4-specific"}                  PLUS4-specific
 @{" -TEDXRANDRfullmode " Link "PLUS4-specific"}                   PLUS4-specific
 @{" -text " Link "c1541 executing shell commands"}                                c1541 executing shell commands
 @{" -tfe, +tfe " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" -tfe, +tfe " Link "C64 I-O extension options"}                           C64 I-O extension options
 @{" -tfeif " Link "C64 I-O extension options"}                               C64 I-O extension options
 @{" -tfeif " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -tfeioswap, +tfeioswap " Link "VIC20 cartridges"}               VIC20 cartridges
 @{" -tferrnet, +tferrnet " Link "C64 I-O extension options"}                 C64 I-O extension options
 @{" -tferrnet, +tferrnet " Link "VIC20 cartridges"}                 VIC20 cartridges
 @{" -v " Link "c1541 executing shell commands"}                                   c1541 executing shell commands
 @{" -VDCfulldevice " Link "SDL-specific features"}                       SDL-specific features
 @{" -VDCVidmodefullmode " Link "C128-specific"}                  C128-specific
 @{" -VDCXRANDRfullmode " Link "C128-specific"}                   C128-specific
 @{" -verbose " Link "Command-line initialization"}                             Command-line initialization
 @{" -VICIIVidmodefullmode " Link "VIC-II options"}                VIC-II options
 @{" -VICIIXRANDRfullmode " Link "VIC-II options"}                 VIC-II options
 @{" -VICVidmodefullmode " Link "VIC20 cartridges"}                  VIC20 cartridges
 @{" -VICXRANDRfullmode " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" -w<version> " Link "c1541 executing shell commands"}                          c1541 executing shell commands
 @{" ACIA (Swiftlink, Turbo232) " Link "C64 I-O extension settings"}           C64 I-O extension settings
 @{" Audio buffer size " Link "Sound settings"}                    Sound settings
 @{" Converting X64 files into D64 " Link "Supported file formats"}        Supported file formats
 @{" DigiMAX " Link "C64 I-O extension settings"}                              C64 I-O extension settings
 @{" Double-scan mode. " Link "Video settings"}                    Video settings
 @{" Double-size mode " Link "Video settings"}                     Video settings
 @{" DS12C887 RTC " Link "C64 I-O extension settings"}                         C64 I-O extension settings
 @{" DWW " Link "PET DWW high resolution grapics"}                                  PET DWW high resolution grapics
 @{" Ethernet (The Final Ethernet, RR-Net) " Link "C64 I-O extension settings"} C64 I-O extension settings
 @{" GEO-RAM " Link "C64 I-O extension settings"}                              C64 I-O extension settings
 @{" HP-UX and Solaris audio problems " Link "Sound problems"}     Sound problems
 @{" HRE " Link "PET HRE (HiRes Emulator) high resolution grapics"}                                  PET HRE (HiRes Emulator) high resolution grapics
 @{" HRG " Link "PET HRE (HiRes Emulator) high resolution grapics"}                                  PET HRE (HiRes Emulator) high resolution grapics
 @{" JOY_TYPE_2PADS " Link "DOS-specific features"}                       DOS-specific features
 @{" JOY_TYPE_4BUTTON " Link "DOS-specific features"}                     DOS-specific features
 @{" JOY_TYPE_6BUTTON " Link "DOS-specific features"}                     DOS-specific features
 @{" JOY_TYPE_8BUTTON " Link "DOS-specific features"}                     DOS-specific features
 @{" JOY_TYPE_AUTODETECT " Link "DOS-specific features"}                  DOS-specific features
 @{" JOY_TYPE_DB9_LPT1 " Link "DOS-specific features"}                    DOS-specific features
 @{" JOY_TYPE_DB9_LPT2 " Link "DOS-specific features"}                    DOS-specific features
 @{" JOY_TYPE_DB9_LPT3 " Link "DOS-specific features"}                    DOS-specific features
 @{" JOY_TYPE_FSPRO " Link "DOS-specific features"}                       DOS-specific features
 @{" JOY_TYPE_GAMEPAD_PRO " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_GRIP " Link "DOS-specific features"}                        DOS-specific features
 @{" JOY_TYPE_GRIP4 " Link "DOS-specific features"}                       DOS-specific features
 @{" JOY_TYPE_IFSEGA_ISA " Link "DOS-specific features"}                  DOS-specific features
 @{" JOY_TYPE_IFSEGA_PCI " Link "DOS-specific features"}                  DOS-specific features
 @{" JOY_TYPE_IFSEGA_PCI_FAST " Link "DOS-specific features"}             DOS-specific features
 @{" JOY_TYPE_N64PAD_LPT1 " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_N64PAD_LPT2 " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_N64PAD_LPT3 " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_NONE " Link "DOS-specific features"}                        DOS-specific features
 @{" JOY_TYPE_PSXPAD_LPT1 " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_PSXPAD_LPT2 " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_PSXPAD_LPT3 " Link "DOS-specific features"}                 DOS-specific features
 @{" JOY_TYPE_SIDEWINDER " Link "DOS-specific features"}                  DOS-specific features
 @{" JOY_TYPE_SIDEWINDER_AG " Link "DOS-specific features"}               DOS-specific features
 @{" JOY_TYPE_SIDEWINDER_PP " Link "DOS-specific features"}               DOS-specific features
 @{" JOY_TYPE_SNESPAD_LPT1 " Link "DOS-specific features"}                DOS-specific features
 @{" JOY_TYPE_SNESPAD_LPT2 " Link "DOS-specific features"}                DOS-specific features
 @{" JOY_TYPE_SNESPAD_LPT3 " Link "DOS-specific features"}                DOS-specific features
 @{" JOY_TYPE_STANDARD " Link "DOS-specific features"}                    DOS-specific features
 @{" JOY_TYPE_TURBOGRAFIX_LPT1 " Link "DOS-specific features"}            DOS-specific features
 @{" JOY_TYPE_TURBOGRAFIX_LPT2 " Link "DOS-specific features"}            DOS-specific features
 @{" JOY_TYPE_TURBOGRAFIX_LPT3 " Link "DOS-specific features"}            DOS-specific features
 @{" JOY_TYPE_WINGEX " Link "DOS-specific features"}                      DOS-specific features
 @{" JOY_TYPE_WINGWARRIOR " Link "DOS-specific features"}                 DOS-specific features
 @{" Limiting emulation speed " Link "Performance settings"}             Performance settings
 @{" Loosing control on low-end systems " Link "Video settings"}   Video settings
 @{" MIDI (Passport, Datel, Maplin, Namesoft, Sequential) " Link "C64 I-O extension settings"} C64 I-O extension settings
 @{" MITSHM " Link "Shared memory problems"}                               Shared memory problems
 @{" OSS/Linux problems " Link "Sound problems"}                   Sound problems
 @{" Refresh rate " Link "Performance settings"}                         Performance settings
 @{" reSID resampling passband " Link "SID settings"}            SID settings
 @{" reSID samping method " Link "SID settings"}                 SID settings
 @{" REU " Link "C64 I-O extension settings"}                                  C64 I-O extension settings
 @{" Sample rate " Link "Sound settings"}                          Sound settings
 @{" Second SID " Link "SID settings"}                           SID settings
 @{" Second SID base address " Link "SID settings"}              SID settings
 @{" SFX Sound Expander " Link "C64 I-O extension settings"}                   C64 I-O extension settings
 @{" SFX Sound Sampler " Link "C64 I-O extension settings"}                    C64 I-O extension settings
 @{" SID filters " Link "SID settings"}                          SID settings
 @{" SID models " Link "SID settings"}                           SID settings
 @{" Sound buffer size " Link "Sound settings"}                    Sound settings
 @{" Sound speed adjustment " Link "Sound settings"}               Sound settings
 @{" Sound suspend time " Link "Sound settings"}                   Sound settings
 @{" Sound syncronization " Link "Sound settings"}                 Sound settings
 @{" Sprite collision detection " Link "VIC-II settings"}           VIC-II settings
 @{" Toggling reSID emulation " Link "SID settings"}             SID settings
 @{" Turning sound playback on/off " Link "Sound settings"}        Sound settings
 @{" Using XSync() " Link "Video settings"}                        Video settings
 @{" VIC-II color sets " Link "VIC-II settings"}                    VIC-II settings
 @{" Video cache " Link "Video settings"}                          Video settings
 @{" Warp speed mode " Link "Performance settings"}                      Performance settings


@EndNode

@Node "Resource Index" "vice.guide/Resource Index"
@Next "Command-line Index"
@Prev "Concept Index"
@Toc "Main"

Index of Resources
******************



 @{" 40/80ColumnKey " Link "C128-specific"}                       C128-specific
 @{" Acia1Base " Link "RS232 resources"}                            RS232 resources
 @{" Acia1Dev " Link "RS232 resources"}                             RS232 resources
 @{" Acia1Enable " Link "RS232 resources"}                          RS232 resources
 @{" Acia1Enable " Link "PLUS4-specific"}                          PLUS4-specific
 @{" Acia1Irq " Link "RS232 resources"}                             RS232 resources
 @{" Acia1Mode " Link "RS232 resources"}                            RS232 resources
 @{" AlwaysOnTop " Link "Windows-specific features"}                          Windows-specific features
 @{" AspectRatio " Link "SDL-specific features"}                          SDL-specific features
 @{" AspectRatio " Link "Windows-specific features"}                          Windows-specific features
 @{" AspectRatio " Link "XAW-specific features"}                          XAW-specific features
 @{" AttachDevice10Readonly " Link "Misc resources"}               Misc resources
 @{" AttachDevice11Readonly " Link "Misc resources"}               Misc resources
 @{" AttachDevice8Readonly " Link "Misc resources"}                Misc resources
 @{" AttachDevice9Readonly " Link "Misc resources"}                Misc resources
 @{" AutostartBasicLoad " Link "Resources and command-line"}                   Resources and command-line
 @{" AutostartDelay " Link "Resources and command-line"}                       Resources and command-line
 @{" AutostartDelayRandom " Link "Resources and command-line"}                 Resources and command-line
 @{" AutostartHandleTrueDriveEmulation " Link "Resources and command-line"}    Resources and command-line
 @{" AutostartPrgDiskImage " Link "Resources and command-line"}                Resources and command-line
 @{" AutostartPrgMode " Link "Resources and command-line"}                     Resources and command-line
 @{" AutostartRunWithColon " Link "Resources and command-line"}                Resources and command-line
 @{" AutostartWarp " Link "Resources and command-line"}                        Resources and command-line
 @{" Basic1 " Link "PET model"}                               PET model
 @{" Basic1Chars " Link "PET model"}                          PET model
 @{" Basic64Name " Link "C128-specific"}                          C128-specific
 @{" BasicHiName " Link "C128-specific"}                          C128-specific
 @{" BasicLoName " Link "C128-specific"}                          C128-specific
 @{" BasicName " Link "CBM-II model"}                            CBM-II model
 @{" BasicName " Link "PLUS4-specific"}                            PLUS4-specific
 @{" BasicName " Link "Monitor DTV features"}                            Monitor DTV features
 @{" BasicName " Link "VIC20 system ROM resources"}                            VIC20 system ROM resources
 @{" BasicName " Link "PET model"}                            PET model
 @{" BasicName " Link "C64 system ROM resources"}                            C64 system ROM resources
 @{" BasicName " Link "VSID-specific"}                            VSID-specific
 @{" BoardType " Link "C64 system ROM options"}                            C64 system ROM options
 @{" BurstMod " Link "C64 system ROM options"}                             C64 system ROM options
 @{" BurstMod " Link "SCPU64-specific"}                             SCPU64-specific
 @{" C128FullBanks " Link "C128-specific"}                        C128-specific
 @{" c1hiName " Link "PLUS4-specific"}                             PLUS4-specific
 @{" c1loName " Link "PLUS4-specific"}                             PLUS4-specific
 @{" c2hiName " Link "PLUS4-specific"}                             PLUS4-specific
 @{" c2loName " Link "PLUS4-specific"}                             PLUS4-specific
 @{" c64dtvromfilename " Link "Monitor DTV features"}                    Monitor DTV features
 @{" c64dtvromrw " Link "Monitor DTV features"}                          Monitor DTV features
 @{" C64_256Kbase " Link "C64 system ROM options"}                         C64 system ROM options
 @{" C64_256Kfilename " Link "C64 system ROM options"}                     C64 system ROM options
 @{" Cart1Name " Link "CBM-II model"}                            CBM-II model
 @{" Cart2Name " Link "CBM-II model"}                            CBM-II model
 @{" Cart4Name " Link "CBM-II model"}                            CBM-II model
 @{" Cart6Name " Link "CBM-II model"}                            CBM-II model
 @{" CartridgeFile " Link "C64 cartridges"}                        C64 cartridges
 @{" CartridgeFile " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" CartridgeReset " Link "CBM-II model"}                       CBM-II model
 @{" CartridgeReset " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" CartridgeReset " Link "PLUS4-specific"}                       PLUS4-specific
 @{" CartridgeReset " Link "C64 cartridges"}                       C64 cartridges
 @{" CartridgeType " Link "C64 cartridges"}                        C64 cartridges
 @{" CartridgeType " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" ChargenCHName " Link "C128-specific"}                        C128-specific
 @{" ChargenDEName " Link "C128-specific"}                        C128-specific
 @{" ChargenFRName " Link "C128-specific"}                        C128-specific
 @{" ChargenIntName " Link "C128-specific"}                       C128-specific
 @{" ChargenName " Link "CBM-II model"}                          CBM-II model
 @{" ChargenName " Link "C64 system ROM resources"}                          C64 system ROM resources
 @{" ChargenName " Link "VIC20 system ROM resources"}                          VIC20 system ROM resources
 @{" ChargenName " Link "VSID-specific"}                          VSID-specific
 @{" ChargenName " Link "SCPU64-specific"}                          SCPU64-specific
 @{" ChargenName " Link "PET model"}                          PET model
 @{" ChargenName " Link "Monitor DTV features"}                          Monitor DTV features
 @{" ChargenSEName " Link "C128-specific"}                        C128-specific
 @{" CIA1Model " Link "C64 cartridges"}                            C64 cartridges
 @{" CIA2Model " Link "C64 cartridges"}                            C64 cartridges
 @{" ConfirmOnExit " Link "Unix-specific features"}                        Unix-specific features
 @{" ConfirmOnExit " Link "BeOS-specific features"}                        BeOS-specific features
 @{" ConfirmOnExit " Link "SDL-specific features"}                        SDL-specific features
 @{" ConfirmOnExit " Link "Windows-specific features"}                        Windows-specific features
 @{" ConfirmOnExit " Link "AmigaOS-specific features"}                        AmigaOS-specific features
 @{" CPUswitch " Link "PET settings"}                            PET settings
 @{" Crtc " Link "CRTC Settings"}                                 CRTC Settings
 @{" CrtcAudioLeak " Link "CRTC Settings"}                        CRTC Settings
 @{" CrtcColorBrightness " Link "CRTC Settings"}                  CRTC Settings
 @{" CrtcColorContrast " Link "CRTC Settings"}                    CRTC Settings
 @{" CrtcColorGamma " Link "CRTC Settings"}                       CRTC Settings
 @{" CrtcColorSaturation " Link "CRTC Settings"}                  CRTC Settings
 @{" CrtcColorTint " Link "CRTC Settings"}                        CRTC Settings
 @{" CrtcDoubleScan " Link "CRTC Settings"}                       CRTC Settings
 @{" CrtcDoubleSize " Link "CRTC Settings"}                       CRTC Settings
 @{" CrtcExternalPalette " Link "CRTC Settings"}                  CRTC Settings
 @{" CrtcFilter " Link "CRTC Settings"}                           CRTC Settings
 @{" CrtcFullscreen " Link "Unix-specific features"}                       Unix-specific features
 @{" CrtcFullscreen " Link "SDL-specific features"}                       SDL-specific features
 @{" CrtcFullscreenDevice " Link "SDL-specific features"}                 SDL-specific features
 @{" CrtcFullscreenDevice " Link "Unix-specific features"}                 Unix-specific features
 @{" CrtcFullscreenStatusbar " Link "Unix-specific features"}              Unix-specific features
 @{" CrtcFullscreenStatusbar " Link "SDL-specific features"}              SDL-specific features
 @{" CrtcHwScale " Link "SDL-specific features"}                          SDL-specific features
 @{" CrtcHwScale " Link "Unix-specific features"}                          Unix-specific features
 @{" CrtcPALBlur " Link "CRTC Settings"}                          CRTC Settings
 @{" CrtcPaletteFile " Link "CRTC Settings"}                      CRTC Settings
 @{" CrtcPALOddLineOffset " Link "CRTC Settings"}                 CRTC Settings
 @{" CrtcPALOddLinePhase " Link "CRTC Settings"}                  CRTC Settings
 @{" CrtcPALScanLineShade " Link "CRTC Settings"}                 CRTC Settings
 @{" CrtcSDLFullscreenMode " Link "SDL-specific features"}                SDL-specific features
 @{" CrtcStretchVertical " Link "CRTC Settings"}                  CRTC Settings
 @{" CrtcVideoCache " Link "CRTC Settings"}                       CRTC Settings
 @{" CrtcVidmodeFullscreenMode " Link "XAW-specific features"}            XAW-specific features
 @{" CrtcXRANDRFullscreenMode " Link "XAW-specific features"}             XAW-specific features
 @{" DatasetteResetWithCPU " Link "Sound options"}                Sound options
 @{" DatasetteSpeedTuning " Link "Sound options"}                 Sound options
 @{" DatasetteTapeWobble " Link "Sound options"}                  Sound options
 @{" DatasetteZeroGapDelay " Link "Sound options"}                Sound options
 @{" DiagPin " Link "PET model"}                              PET model
 @{" DIGIBLASTER " Link "PLUS4-specific"}                          PLUS4-specific
 @{" DIGIMAX " Link "C64 I-O extension resources"}                              C64 I-O extension resources
 @{" DIGIMAX " Link "VIC20 cartridges"}                              VIC20 cartridges
 @{" DIGIMAXbase " Link "VIC20 cartridges"}                          VIC20 cartridges
 @{" DIGIMAXbase " Link "C64 I-O extension resources"}                          C64 I-O extension resources
 @{" Directory " Link "Misc resources"}                            Misc resources
 @{" DirectWindow " Link "BeOS-specific features"}                         BeOS-specific features
 @{" DisplayDepth " Link "XAW-specific features"}                         XAW-specific features
 @{" DoCoreDump " Link "Misc resources"}                           Misc resources
 @{" DoodleCRTCTextColor " Link "C500 data module"}                  C500 data module
 @{" DoodleMultiColorHandling " Link "C500 data module"}             C500 data module
 @{" DoodleOversizeHandling " Link "C500 data module"}               C500 data module
 @{" DoodleTEDLumHandling " Link "C500 data module"}                 C500 data module
 @{" DoodleUndersizeHandling " Link "C500 data module"}              C500 data module
 @{" DosName1001 " Link "Drive resources"}                          Drive resources
 @{" DosName1540 " Link "Drive resources"}                          Drive resources
 @{" DosName1541 " Link "Drive resources"}                          Drive resources
 @{" DosName1541ii " Link "Drive resources"}                        Drive resources
 @{" DosName1551 " Link "Drive resources"}                          Drive resources
 @{" DosName1570 " Link "Drive resources"}                          Drive resources
 @{" DosName1571 " Link "Drive resources"}                          Drive resources
 @{" DosName1571cr " Link "Drive resources"}                        Drive resources
 @{" DosName1581 " Link "Drive resources"}                          Drive resources
 @{" DosName2000 " Link "Drive resources"}                          Drive resources
 @{" DosName2031 " Link "Drive resources"}                          Drive resources
 @{" DosName2040 " Link "Drive resources"}                          Drive resources
 @{" DosName3040 " Link "Drive resources"}                          Drive resources
 @{" DosName4000 " Link "Drive resources"}                          Drive resources
 @{" DosName4040 " Link "Drive resources"}                          Drive resources
 @{" DQBB " Link "C64 cartridges"}                                 C64 cartridges
 @{" DQBBfilename " Link "C64 cartridges"}                         C64 cartridges
 @{" DQBBImageWrite " Link "C64 cartridges"}                       C64 cartridges
 @{" Drive10ExtendImagePolicy " Link "Drive resources"}             Drive resources
 @{" Drive10IdleMethod " Link "Drive resources"}                    Drive resources
 @{" Drive10ParallelCable " Link "Drive resources"}                 Drive resources
 @{" Drive10ProfDOS " Link "Drive resources"}                       Drive resources
 @{" Drive10RAM2000 " Link "Drive resources"}                       Drive resources
 @{" Drive10RAM4000 " Link "Drive resources"}                       Drive resources
 @{" Drive10RAM6000 " Link "Drive resources"}                       Drive resources
 @{" Drive10RAM8000 " Link "Drive resources"}                       Drive resources
 @{" Drive10RAMA000 " Link "Drive resources"}                       Drive resources
 @{" Drive10RPM " Link "Drive resources"}                           Drive resources
 @{" Drive10RTCSave " Link "Drive resources"}                       Drive resources
 @{" Drive10SuperCard " Link "Drive resources"}                     Drive resources
 @{" Drive10Type " Link "Drive resources"}                          Drive resources
 @{" Drive10Wobble " Link "Drive resources"}                        Drive resources
 @{" Drive11ExtendImagePolicy " Link "Drive resources"}             Drive resources
 @{" Drive11IdleMethod " Link "Drive resources"}                    Drive resources
 @{" Drive11ParallelCable " Link "Drive resources"}                 Drive resources
 @{" Drive11ProfDOS " Link "Drive resources"}                       Drive resources
 @{" Drive11RAM2000 " Link "Drive resources"}                       Drive resources
 @{" Drive11RAM4000 " Link "Drive resources"}                       Drive resources
 @{" Drive11RAM6000 " Link "Drive resources"}                       Drive resources
 @{" Drive11RAM8000 " Link "Drive resources"}                       Drive resources
 @{" Drive11RAMA000 " Link "Drive resources"}                       Drive resources
 @{" Drive11RPM " Link "Drive resources"}                           Drive resources
 @{" Drive11RTCSave " Link "Drive resources"}                       Drive resources
 @{" Drive11SuperCard " Link "Drive resources"}                     Drive resources
 @{" Drive11Type " Link "Drive resources"}                          Drive resources
 @{" Drive11Wobble " Link "Drive resources"}                        Drive resources
 @{" Drive8ExtendImagePolicy " Link "Drive resources"}              Drive resources
 @{" Drive8IdleMethod " Link "Drive resources"}                     Drive resources
 @{" Drive8ParallelCable " Link "Drive resources"}                  Drive resources
 @{" Drive8ProfDOS " Link "Drive resources"}                        Drive resources
 @{" Drive8RAM2000 " Link "Drive resources"}                        Drive resources
 @{" Drive8RAM4000 " Link "Drive resources"}                        Drive resources
 @{" Drive8RAM6000 " Link "Drive resources"}                        Drive resources
 @{" Drive8RAM8000 " Link "Drive resources"}                        Drive resources
 @{" Drive8RAMA000 " Link "Drive resources"}                        Drive resources
 @{" Drive8RPM " Link "Drive resources"}                            Drive resources
 @{" Drive8RTCSave " Link "Drive resources"}                        Drive resources
 @{" Drive8SuperCard " Link "Drive resources"}                      Drive resources
 @{" Drive8Type " Link "Drive resources"}                           Drive resources
 @{" Drive8Wobble " Link "Drive resources"}                         Drive resources
 @{" Drive9ExtendImagePolicy " Link "Drive resources"}              Drive resources
 @{" Drive9IdleMethod " Link "Drive resources"}                     Drive resources
 @{" Drive9ParallelCable " Link "Drive resources"}                  Drive resources
 @{" Drive9ProfDOS " Link "Drive resources"}                        Drive resources
 @{" Drive9RAM2000 " Link "Drive resources"}                        Drive resources
 @{" Drive9RAM4000 " Link "Drive resources"}                        Drive resources
 @{" Drive9RAM6000 " Link "Drive resources"}                        Drive resources
 @{" Drive9RAM8000 " Link "Drive resources"}                        Drive resources
 @{" Drive9RAMA000 " Link "Drive resources"}                        Drive resources
 @{" Drive9RPM " Link "Drive resources"}                            Drive resources
 @{" Drive9RTCSave " Link "Drive resources"}                        Drive resources
 @{" Drive9SuperCard " Link "Drive resources"}                      Drive resources
 @{" Drive9Type " Link "Drive resources"}                           Drive resources
 @{" Drive9Wobble " Link "Drive resources"}                         Drive resources
 @{" DriveProfDOS1571Name " Link "Drive resources"}                 Drive resources
 @{" DriveSoundEmulation " Link "Drive resources"}                  Drive resources
 @{" DriveSoundEmulationVolume " Link "Drive resources"}            Drive resources
 @{" DriveSuperCardName " Link "Drive resources"}                   Drive resources
 @{" DriveTrueEmulation " Link "Drive resources"}                   Drive resources
 @{" DS12C887RTC " Link "C64 I-O extension resources"}                          C64 I-O extension resources
 @{" DS12C887RTC " Link "VIC20 cartridges"}                          VIC20 cartridges
 @{" DS12C887RTCbase " Link "VIC20 cartridges"}                      VIC20 cartridges
 @{" DS12C887RTCbase " Link "C64 I-O extension resources"}                      C64 I-O extension resources
 @{" DS12C887RTCRunMode " Link "C64 I-O extension resources"}                   C64 I-O extension resources
 @{" DS12C887RTCRunMode " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" DS12C887RTCSave " Link "C64 I-O extension resources"}                      C64 I-O extension resources
 @{" DS12C887RTCSave " Link "VIC20 cartridges"}                      VIC20 cartridges
 @{" DtvBlitterLog " Link "Monitor DTV features"}                        Monitor DTV features
 @{" DtvDMALog " Link "Monitor DTV features"}                            Monitor DTV features
 @{" DtvFlashLog " Link "Monitor DTV features"}                          Monitor DTV features
 @{" DtvRevision " Link "Monitor DTV features"}                          Monitor DTV features
 @{" DX9Disable " Link "Windows-specific features"}                           Windows-specific features
 @{" DXPrimarySurfaceRendering " Link "Windows-specific features"}            Windows-specific features
 @{" EasyFlashJumper " Link "C64 cartridges"}                      C64 cartridges
 @{" EasyFlashOptimizeCRT " Link "C64 cartridges"}                 C64 cartridges
 @{" EasyFlashWriteCRT " Link "C64 cartridges"}                    C64 cartridges
 @{" EditorName " Link "PET model"}                           PET model
 @{" EoiBlank " Link "PET model"}                             PET model
 @{" ETHERNET_ACTIVE " Link "C64 I-O extension resources"}                      C64 I-O extension resources
 @{" ETHERNET_AS_RR " Link "C64 I-O extension resources"}                       C64 I-O extension resources
 @{" ETHERNET_DISABLED " Link "C64 I-O extension resources"}                    C64 I-O extension resources
 @{" ETHERNET_INTERFACE " Link "C64 I-O extension resources"}                   C64 I-O extension resources
 @{" EventEndSnapshot " Link "C500 data module"}                     C500 data module
 @{" EventImageInclude " Link "C500 data module"}                    C500 data module
 @{" EventSnapshotDir " Link "C500 data module"}                     C500 data module
 @{" EventStartMode " Link "C500 data module"}                       C500 data module
 @{" EventStartSnapshot " Link "C500 data module"}                   C500 data module
 @{" ExpertCartridgeEnabled " Link "C64 cartridges"}               C64 cartridges
 @{" ExpertCartridgeMode " Link "C64 cartridges"}                  C64 cartridges
 @{" Expertfilename " Link "C64 cartridges"}                       C64 cartridges
 @{" ExpertImageWrite " Link "C64 cartridges"}                     C64 cartridges
 @{" ExternalFunctionName " Link "C128-specific"}                 C128-specific
 @{" ExternalFunctionROM " Link "C128-specific"}                  C128-specific
 @{" ExternalFunctionROMRTCSave " Link "C128-specific"}           C128-specific
 @{" FFMPEGAudioBitrate " Link "C500 data module"}                   C500 data module
 @{" FFMPEGAudioCodec " Link "C500 data module"}                     C500 data module
 @{" FFMPEGFormat " Link "C500 data module"}                         C500 data module
 @{" FFMPEGVideoBitrate " Link "C500 data module"}                   C500 data module
 @{" FFMPEGVideoCodec " Link "C500 data module"}                     C500 data module
 @{" FFMPEGVideoHalveFramerate " Link "C500 data module"}            C500 data module
 @{" FileSystemDevice10 " Link "File system device resources"}                   File system device resources
 @{" FileSystemDevice11 " Link "File system device resources"}                   File system device resources
 @{" FileSystemDevice8 " Link "File system device resources"}                    File system device resources
 @{" FileSystemDevice9 " Link "File system device resources"}                    File system device resources
 @{" FinalExpansionWriteBack " Link "VIC20 cartridges"}              VIC20 cartridges
 @{" FlashTrueFS " Link "Monitor DTV features"}                          Monitor DTV features
 @{" FliplistName " Link "Misc resources"}                         Misc resources
 @{" FOURCC " Link "XAW-specific features"}                               XAW-specific features
 @{" FSDevice10ConvertP00 " Link "File system device resources"}                 File system device resources
 @{" FSDevice10Dir " Link "File system device resources"}                        File system device resources
 @{" FSDevice10HideCBMFiles " Link "File system device resources"}               File system device resources
 @{" FSDevice10SaveP00 " Link "File system device resources"}                    File system device resources
 @{" FSDevice11ConvertP00 " Link "File system device resources"}                 File system device resources
 @{" FSDevice11Dir " Link "File system device resources"}                        File system device resources
 @{" FSDevice11HideCBMFiles " Link "File system device resources"}               File system device resources
 @{" FSDevice11SaveP00 " Link "File system device resources"}                    File system device resources
 @{" FSDevice8ConvertP00 " Link "File system device resources"}                  File system device resources
 @{" FSDevice8Dir " Link "File system device resources"}                         File system device resources
 @{" FSDevice8HideCBMFiles " Link "File system device resources"}                File system device resources
 @{" FSDevice8SaveP00 " Link "File system device resources"}                     File system device resources
 @{" FSDevice9ConvertP00 " Link "File system device resources"}                  File system device resources
 @{" FSDevice9Dir " Link "File system device resources"}                         File system device resources
 @{" FSDevice9HideCBMFiles " Link "File system device resources"}                File system device resources
 @{" FSDevice9SaveP00 " Link "File system device resources"}                     File system device resources
 @{" FSFlashDir " Link "Monitor DTV features"}                           Monitor DTV features
 @{" FullscreenDevice " Link "Windows-specific features"}                     Windows-specific features
 @{" FullscreenEnabled " Link "Windows-specific features"}                    Windows-specific features
 @{" FullscreenEnabled " Link "AmigaOS-specific features"}                    AmigaOS-specific features
 @{" FullscreenHeight " Link "Windows-specific features"}                     Windows-specific features
 @{" FullscreenRefreshRate " Link "Windows-specific features"}                Windows-specific features
 @{" FullscreenWidth " Link "Windows-specific features"}                      Windows-specific features
 @{" FunctionHighName " Link "PLUS4-specific"}                     PLUS4-specific
 @{" FunctionLowName " Link "PLUS4-specific"}                      PLUS4-specific
 @{" GenericCartridgeFile2000 " Link "VIC20 cartridges"}             VIC20 cartridges
 @{" GenericCartridgeFile4000 " Link "VIC20 cartridges"}             VIC20 cartridges
 @{" GenericCartridgeFile6000 " Link "VIC20 cartridges"}             VIC20 cartridges
 @{" GenericCartridgeFileA000 " Link "VIC20 cartridges"}             VIC20 cartridges
 @{" GenericCartridgeFileB000 " Link "VIC20 cartridges"}             VIC20 cartridges
 @{" GEORAM " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" GEORAM " Link "C64 I-O extension resources"}                               C64 I-O extension resources
 @{" GEORAMfilename " Link "C64 I-O extension resources"}                       C64 I-O extension resources
 @{" GEORAMfilename " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" GEORAMImageWrite " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" GEORAMImageWrite " Link "C64 I-O extension resources"}                     C64 I-O extension resources
 @{" GEORAMIOSwap " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" GEORAMsize " Link "C64 I-O extension resources"}                           C64 I-O extension resources
 @{" GEORAMsize " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" GlueLogic " Link "C64 system ROM options"}                            C64 system ROM options
 @{" GlueLogic " Link "SCPU64-specific"}                            SCPU64-specific
 @{" Go64Mode " Link "C128-specific"}                             C128-specific
 @{" H6809RomAName " Link "PET system ROM"}                        PET system ROM
 @{" H6809RomBName " Link "PET system ROM"}                        PET system ROM
 @{" H6809RomCName " Link "PET system ROM"}                        PET system ROM
 @{" H6809RomDName " Link "PET system ROM"}                        PET system ROM
 @{" H6809RomEName " Link "PET system ROM"}                        PET system ROM
 @{" H6809RomFName " Link "PET system ROM"}                        PET system ROM
 @{" HotkeyFile " Link "SDL-specific features"}                           SDL-specific features
 @{" HTMLBrowserCommand " Link "Unix-specific features"}                   Unix-specific features
 @{" HummerADC " Link "Monitor DTV features"}                            Monitor DTV features
 @{" HwJoyType " Link "DOS-specific features"}                            DOS-specific features
 @{" HwScalePossible " Link "Video resources"}                      Video resources
 @{" IDE64AutodetectSize1 " Link "C64 cartridges"}                 C64 cartridges
 @{" IDE64AutodetectSize2 " Link "C64 cartridges"}                 C64 cartridges
 @{" IDE64AutodetectSize3 " Link "C64 cartridges"}                 C64 cartridges
 @{" IDE64AutodetectSize4 " Link "C64 cartridges"}                 C64 cartridges
 @{" IDE64Cylinders1 " Link "C64 cartridges"}                      C64 cartridges
 @{" IDE64Cylinders2 " Link "C64 cartridges"}                      C64 cartridges
 @{" IDE64Cylinders3 " Link "C64 cartridges"}                      C64 cartridges
 @{" IDE64Cylinders4 " Link "C64 cartridges"}                      C64 cartridges
 @{" IDE64Heads1 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Heads2 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Heads3 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Heads4 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Image1 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Image2 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Image3 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64Image4 " Link "C64 cartridges"}                          C64 cartridges
 @{" IDE64RTCSave " Link "C64 cartridges"}                         C64 cartridges
 @{" IDE64Sectors1 " Link "C64 cartridges"}                        C64 cartridges
 @{" IDE64Sectors2 " Link "C64 cartridges"}                        C64 cartridges
 @{" IDE64Sectors3 " Link "C64 cartridges"}                        C64 cartridges
 @{" IDE64Sectors4 " Link "C64 cartridges"}                        C64 cartridges
 @{" IDE64USBServer " Link "C64 cartridges"}                       C64 cartridges
 @{" IDE64USBServerAddress " Link "C64 cartridges"}                C64 cartridges
 @{" IDE64version " Link "C64 cartridges"}                         C64 cartridges
 @{" IECDevice10 " Link "File system device resources"}                          File system device resources
 @{" IECDevice11 " Link "File system device resources"}                          File system device resources
 @{" IECDevice4 " Link "Printer resources"}                           Printer resources
 @{" IECDevice5 " Link "Printer resources"}                           Printer resources
 @{" IECDevice6 " Link "Printer resources"}                           Printer resources
 @{" IECDevice7 " Link "Printer resources"}                           Printer resources
 @{" IECDevice8 " Link "File system device resources"}                           File system device resources
 @{" IECDevice9 " Link "File system device resources"}                           File system device resources
 @{" IECReset " Link "C64 system ROM options"}                             C64 system ROM options
 @{" IECReset " Link "SCPU64-specific"}                             SCPU64-specific
 @{" IEEE488 " Link "C64 cartridges"}                              C64 cartridges
 @{" IEEE488 " Link "VIC20 cartridges"}                              VIC20 cartridges
 @{" IEEE488Image " Link "C64 cartridges"}                         C64 cartridges
 @{" InitialAutostartDir " Link "Windows-specific features"}                  Windows-specific features
 @{" InitialAutostartDir " Link "AmigaOS-specific features"}                  AmigaOS-specific features
 @{" InitialCartDir " Link "Windows-specific features"}                       Windows-specific features
 @{" InitialCartDir " Link "AmigaOS-specific features"}                       AmigaOS-specific features
 @{" InitialDefaultDir " Link "AmigaOS-specific features"}                    AmigaOS-specific features
 @{" InitialDefaultDir " Link "Windows-specific features"}                    Windows-specific features
 @{" InitialDiskDir " Link "AmigaOS-specific features"}                       AmigaOS-specific features
 @{" InitialDiskDir " Link "Windows-specific features"}                       Windows-specific features
 @{" InitialSnapshotDir " Link "AmigaOS-specific features"}                   AmigaOS-specific features
 @{" InitialSnapshotDir " Link "Windows-specific features"}                   Windows-specific features
 @{" InitialTapeDir " Link "AmigaOS-specific features"}                       AmigaOS-specific features
 @{" InitialTapeDir " Link "Windows-specific features"}                       Windows-specific features
 @{" InternalFunctionName " Link "C128-specific"}                 C128-specific
 @{" InternalFunctionROM " Link "C128-specific"}                  C128-specific
 @{" InternalFunctionROMRTCSave " Link "C128-specific"}           C128-specific
 @{" IO2RAM " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" IO3RAM " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" IOCollisionHandling " Link "VIC20 cartridges"}                  VIC20 cartridges
 @{" IOCollisionHandling " Link "C64 cartridges"}                  C64 cartridges
 @{" IOSize " Link "PET model"}                               PET model
 @{" IsepicCartridgeEnabled " Link "C64 cartridges"}               C64 cartridges
 @{" Isepicfilename " Link "C64 cartridges"}                       C64 cartridges
 @{" IsepicImageWrite " Link "C64 cartridges"}                     C64 cartridges
 @{" IsepicSwitch " Link "C64 cartridges"}                         C64 cartridges
 @{" JAMAction " Link "Misc resources"}                            Misc resources
 @{" JiffySwitch " Link "SCPU64-specific"}                          SCPU64-specific
 @{" JOYAI1_Down " Link "AmigaOS4-specific features"}                          AmigaOS4-specific features
 @{" JOYAI1_Fire " Link "AmigaOS4-specific features"}                          AmigaOS4-specific features
 @{" JOYAI1_ID " Link "AmigaOS4-specific features"}                            AmigaOS4-specific features
 @{" JOYAI1_Left " Link "AmigaOS4-specific features"}                          AmigaOS4-specific features
 @{" JOYAI1_Right " Link "AmigaOS4-specific features"}                         AmigaOS4-specific features
 @{" JOYAI1_Up " Link "AmigaOS4-specific features"}                            AmigaOS4-specific features
 @{" JOYAI2_Down " Link "AmigaOS4-specific features"}                          AmigaOS4-specific features
 @{" JOYAI2_Fire " Link "AmigaOS4-specific features"}                          AmigaOS4-specific features
 @{" JOYAI2_ID " Link "AmigaOS4-specific features"}                            AmigaOS4-specific features
 @{" JOYAI2_Left " Link "AmigaOS4-specific features"}                          AmigaOS4-specific features
 @{" JOYAI2_Right " Link "AmigaOS4-specific features"}                         AmigaOS4-specific features
 @{" JOYAI2_Up " Link "AmigaOS4-specific features"}                            AmigaOS4-specific features
 @{" JoyAutofire1Button " Link "Windows-specific features"}                   Windows-specific features
 @{" JoyAutofire1Speed " Link "Windows-specific features"}                    Windows-specific features
 @{" JoyAutofire2Button " Link "Windows-specific features"}                   Windows-specific features
 @{" JoyAutofire2Speed " Link "Windows-specific features"}                    Windows-specific features
 @{" JoyAutofire3Button " Link "Windows-specific features"}                   Windows-specific features
 @{" JoyAutofire3Speed " Link "Windows-specific features"}                    Windows-specific features
 @{" JoyAutofire4Button " Link "Windows-specific features"}                   Windows-specific features
 @{" JoyAutofire4Speed " Link "Windows-specific features"}                    Windows-specific features
 @{" JoyDevice1 " Link "AROS-specific features"}                           AROS-specific features
 @{" JoyDevice1 " Link "MorphOS-specific features"}                           MorphOS-specific features
 @{" JoyDevice1 " Link "Control port options"}                           Control port options
 @{" JoyDevice1 " Link "Windows-specific features"}                           Windows-specific features
 @{" JoyDevice1 " Link "AmigaOS4-specific features"}                           AmigaOS4-specific features
 @{" JoyDevice1 " Link "AmigaOS3-specific features"}                           AmigaOS3-specific features
 @{" JoyDevice1 " Link "BeOS-specific features"}                           BeOS-specific features
 @{" JoyDevice1 " Link "Unix-specific features"}                           Unix-specific features
 @{" JoyDevice1 " Link "SDL-specific features"}                           SDL-specific features
 @{" JoyDevice1 " Link "DOS-specific features"}                           DOS-specific features
 @{" JoyDevice2 " Link "Control port options"}                           Control port options
 @{" JoyDevice2 " Link "AROS-specific features"}                           AROS-specific features
 @{" JoyDevice2 " Link "SDL-specific features"}                           SDL-specific features
 @{" JoyDevice2 " Link "AmigaOS3-specific features"}                           AmigaOS3-specific features
 @{" JoyDevice2 " Link "DOS-specific features"}                           DOS-specific features
 @{" JoyDevice2 " Link "BeOS-specific features"}                           BeOS-specific features
 @{" JoyDevice2 " Link "Unix-specific features"}                           Unix-specific features
 @{" JoyDevice2 " Link "MorphOS-specific features"}                           MorphOS-specific features
 @{" JoyDevice2 " Link "Windows-specific features"}                           Windows-specific features
 @{" JoyDevice2 " Link "AmigaOS4-specific features"}                           AmigaOS4-specific features
 @{" JoyDevice3 " Link "Control port options"}                           Control port options
 @{" JoyDevice3 " Link "SDL-specific features"}                           SDL-specific features
 @{" JoyDevice3 " Link "Unix-specific features"}                           Unix-specific features
 @{" JoyDevice3 " Link "DOS-specific features"}                           DOS-specific features
 @{" JoyDevice3 " Link "MorphOS-specific features"}                           MorphOS-specific features
 @{" JoyDevice3 " Link "AmigaOS3-specific features"}                           AmigaOS3-specific features
 @{" JoyDevice3 " Link "AROS-specific features"}                           AROS-specific features
 @{" JoyDevice3 " Link "Windows-specific features"}                           Windows-specific features
 @{" JoyDevice3 " Link "AmigaOS4-specific features"}                           AmigaOS4-specific features
 @{" JoyDevice3 " Link "BeOS-specific features"}                           BeOS-specific features
 @{" JoyDevice4 " Link "AmigaOS4-specific features"}                           AmigaOS4-specific features
 @{" JoyDevice4 " Link "Windows-specific features"}                           Windows-specific features
 @{" JoyDevice4 " Link "Unix-specific features"}                           Unix-specific features
 @{" JoyDevice4 " Link "SDL-specific features"}                           SDL-specific features
 @{" JoyDevice4 " Link "DOS-specific features"}                           DOS-specific features
 @{" JoyDevice4 " Link "BeOS-specific features"}                           BeOS-specific features
 @{" JoyDevice4 " Link "AROS-specific features"}                           AROS-specific features
 @{" JoyDevice4 " Link "MorphOS-specific features"}                           MorphOS-specific features
 @{" JoyDevice4 " Link "AmigaOS3-specific features"}                           AmigaOS3-specific features
 @{" JoyDevice4 " Link "Control port options"}                           Control port options
 @{" JoyFire1 " Link "AROS-specific features"}                             AROS-specific features
 @{" JoyFire1 " Link "MorphOS-specific features"}                             MorphOS-specific features
 @{" JoyFire1 " Link "AmigaOS3-specific features"}                             AmigaOS3-specific features
 @{" JoyFire1Button " Link "Windows-specific features"}                       Windows-specific features
 @{" JoyFire2 " Link "AmigaOS3-specific features"}                             AmigaOS3-specific features
 @{" JoyFire2 " Link "AROS-specific features"}                             AROS-specific features
 @{" JoyFire2 " Link "MorphOS-specific features"}                             MorphOS-specific features
 @{" JoyFire2Button " Link "Windows-specific features"}                       Windows-specific features
 @{" JoyFire3 " Link "AROS-specific features"}                             AROS-specific features
 @{" JoyFire3 " Link "AmigaOS3-specific features"}                             AmigaOS3-specific features
 @{" JoyFire3 " Link "MorphOS-specific features"}                             MorphOS-specific features
 @{" JoyFire3Button " Link "Windows-specific features"}                       Windows-specific features
 @{" JoyFire4 " Link "AROS-specific features"}                             AROS-specific features
 @{" JoyFire4 " Link "MorphOS-specific features"}                             MorphOS-specific features
 @{" JoyFire4 " Link "AmigaOS3-specific features"}                             AmigaOS3-specific features
 @{" JoyFire4Button " Link "Windows-specific features"}                       Windows-specific features
 @{" JoyFuzz " Link "SDL-specific features"}                              SDL-specific features
 @{" JoyMapFile " Link "SDL-specific features"}                           SDL-specific features
 @{" JoyOpposite " Link "Control port options"}                          Control port options
 @{" JoyPort1Device " Link "Control port resources"}                       Control port resources
 @{" JoyPort2Device " Link "Control port resources"}                       Control port resources
 @{" JoyPort3Device " Link "Control port resources"}                       Control port resources
 @{" JoyPort4Device " Link "Control port resources"}                       Control port resources
 @{" JoystickDisplay " Link "BeOS-specific features"}                      BeOS-specific features
 @{" JoyThreshold " Link "SDL-specific features"}                         SDL-specific features
 @{" KbdbufDelay " Link "Control port options"}                          Control port options
 @{" KeepAspectRatio " Link "GTK-specific features"}                      GTK-specific features
 @{" KeepAspectRatio " Link "XAW-specific features"}                      XAW-specific features
 @{" KeepAspectRatio " Link "Windows-specific features"}                      Windows-specific features
 @{" KeepMonitorOpen " Link "Monitor options"}                      Monitor options
 @{" Kernal64Name " Link "C128-specific"}                         C128-specific
 @{" KernalCHName " Link "C128-specific"}                         C128-specific
 @{" KernalDEName " Link "C128-specific"}                         C128-specific
 @{" KernalFIName " Link "C128-specific"}                         C128-specific
 @{" KernalFRName " Link "C128-specific"}                         C128-specific
 @{" KernalIntName " Link "C128-specific"}                        C128-specific
 @{" KernalITName " Link "C128-specific"}                         C128-specific
 @{" KernalName " Link "Monitor DTV features"}                           Monitor DTV features
 @{" KernalName " Link "C64 system ROM resources"}                           C64 system ROM resources
 @{" KernalName " Link "PLUS4-specific"}                           PLUS4-specific
 @{" KernalName " Link "VSID-specific"}                           VSID-specific
 @{" KernalName " Link "VIC20 system ROM resources"}                           VIC20 system ROM resources
 @{" KernalName " Link "CBM-II model"}                           CBM-II model
 @{" KernalName " Link "PET model"}                           PET model
 @{" KernalNOName " Link "C128-specific"}                         C128-specific
 @{" KernalRev " Link "VSID-specific"}                            VSID-specific
 @{" KernalRev " Link "C64 system ROM resources"}                            C64 system ROM resources
 @{" KernalSEName " Link "C128-specific"}                         C128-specific
 @{" KeyboardMapping " Link "Keyboard resources"}                      Keyboard resources
 @{" KeyboardType " Link "Keyboard resources"}                         Keyboard resources
 @{" KeymapIndex " Link "Keyboard resources"}                          Keyboard resources
 @{" KeymapPosFile " Link "Keyboard resources"}                        Keyboard resources
 @{" KeymapSymFile " Link "Keyboard resources"}                        Keyboard resources
 @{" KeymapUserPosFile " Link "Keyboard resources"}                    Keyboard resources
 @{" KeymapUserSymFile " Link "Keyboard resources"}                    Keyboard resources
 @{" KeySet1East " Link "Control port options"}                          Control port options
 @{" KeySet1Fire " Link "Control port options"}                          Control port options
 @{" KeySet1North " Link "Control port options"}                         Control port options
 @{" KeySet1NorthEast " Link "Control port options"}                     Control port options
 @{" KeySet1NorthWest " Link "Control port options"}                     Control port options
 @{" KeySet1South " Link "Control port options"}                         Control port options
 @{" KeySet1SouthEast " Link "Control port options"}                     Control port options
 @{" KeySet1SouthWest " Link "Control port options"}                     Control port options
 @{" KeySet1West " Link "Control port options"}                          Control port options
 @{" KeySet2East " Link "Control port options"}                          Control port options
 @{" KeySet2Fire " Link "Control port options"}                          Control port options
 @{" KeySet2North " Link "Control port options"}                         Control port options
 @{" KeySet2NorthEast " Link "Control port options"}                     Control port options
 @{" KeySet2NorthWest " Link "Control port options"}                     Control port options
 @{" KeySet2South " Link "Control port options"}                         Control port options
 @{" KeySet2SouthEast " Link "Control port options"}                     Control port options
 @{" KeySet2SouthWest " Link "Control port options"}                     Control port options
 @{" KeySet2West " Link "Control port options"}                          Control port options
 @{" KeySetEnable " Link "Control port options"}                         Control port options
 @{" KoalaCRTCTextColor " Link "C500 data module"}                   C500 data module
 @{" KoalaOversizeHandling " Link "C500 data module"}                C500 data module
 @{" KoalaTEDLumHandling " Link "C500 data module"}                  C500 data module
 @{" KoalaUndersizeHandling " Link "C500 data module"}               C500 data module
 @{" LogFileName " Link "Misc resources"}                          Misc resources
 @{" MachineType " Link "C128-specific"}                          C128-specific
 @{" MachineVideoStandard " Link "PET settings"}                 PET settings
 @{" MachineVideoStandard " Link "SCPU64-specific"}                 SCPU64-specific
 @{" MachineVideoStandard " Link "Monitor DTV features"}                 Monitor DTV features
 @{" MachineVideoStandard " Link "VIC20 cartridges"}                 VIC20 cartridges
 @{" MachineVideoStandard " Link "C128-specific"}                 C128-specific
 @{" MachineVideoStandard " Link "C64 system ROM options"}                 C64 system ROM options
 @{" MachineVideoStandard " Link "PLUS4-specific"}                 PLUS4-specific
 @{" MachineVideoStandard " Link "CBM-II model"}                 CBM-II model
 @{" MachineVideoStandard " Link "VSID-specific"}                 VSID-specific
 @{" MagicVoiceCartridgeEnabled " Link "C64 cartridges"}           C64 cartridges
 @{" MagicVoiceImage " Link "C64 cartridges"}                      C64 cartridges
 @{" MegaCartNvRAMfilename " Link "VIC20 cartridges"}                VIC20 cartridges
 @{" MegaCartNvRAMWriteBack " Link "VIC20 cartridges"}               VIC20 cartridges
 @{" MemoryHack " Link "C64 system ROM options"}                           C64 system ROM options
 @{" MemoryHack " Link "PLUS4-specific"}                           PLUS4-specific
 @{" MenuKey " Link "SDL-specific features"}                              SDL-specific features
 @{" MenuKeyCancel " Link "SDL-specific features"}                        SDL-specific features
 @{" MenuKeyDown " Link "SDL-specific features"}                          SDL-specific features
 @{" MenuKeyExit " Link "SDL-specific features"}                          SDL-specific features
 @{" MenuKeyLeft " Link "SDL-specific features"}                          SDL-specific features
 @{" MenuKeyMap " Link "SDL-specific features"}                           SDL-specific features
 @{" MenuKeyRight " Link "SDL-specific features"}                         SDL-specific features
 @{" MenuKeySelect " Link "SDL-specific features"}                        SDL-specific features
 @{" MenuKeyUp " Link "SDL-specific features"}                            SDL-specific features
 @{" MIDIDriver " Link "Unix-specific features"}                           Unix-specific features
 @{" MIDIEnable " Link "C64 I-O extension resources"}                           C64 I-O extension resources
 @{" MIDIInDev " Link "Unix-specific features"}                            Unix-specific features
 @{" MIDIInDev " Link "Windows-specific features"}                            Windows-specific features
 @{" MIDIMode " Link "C64 I-O extension resources"}                             C64 I-O extension resources
 @{" MIDIOutDev " Link "Windows-specific features"}                           Windows-specific features
 @{" MIDIOutDev " Link "Unix-specific features"}                           Unix-specific features
 @{" MITSHM " Link "XAW-specific features"}                               XAW-specific features
 @{" MMC64 " Link "C64 cartridges"}                                C64 cartridges
 @{" MMC64BIOSfilename " Link "C64 cartridges"}                    C64 cartridges
 @{" MMC64imagefilename " Link "C64 cartridges"}                   C64 cartridges
 @{" MMC64_bios_write " Link "C64 cartridges"}                     C64 cartridges
 @{" MMC64_flashjumper " Link "C64 cartridges"}                    C64 cartridges
 @{" MMC64_revision " Link "C64 cartridges"}                       C64 cartridges
 @{" MMC64_RO " Link "C64 cartridges"}                             C64 cartridges
 @{" MMC64_sd_type " Link "C64 cartridges"}                        C64 cartridges
 @{" MMCRCardImage " Link "C64 cartridges"}                        C64 cartridges
 @{" MMCRCardRW " Link "C64 cartridges"}                           C64 cartridges
 @{" MMCREEPROMImage " Link "C64 cartridges"}                      C64 cartridges
 @{" MMCREEPROMRW " Link "C64 cartridges"}                         C64 cartridges
 @{" MMCRImageWrite " Link "C64 cartridges"}                       C64 cartridges
 @{" MMCRRescueMode " Link "C64 cartridges"}                       C64 cartridges
 @{" MMCRSDType " Link "C64 cartridges"}                           C64 cartridges
 @{" ModelLine " Link "CBM-II model"}                            CBM-II model
 @{" MonitorDimensions " Link "Windows-specific features"}                    Windows-specific features
 @{" MonitorServer " Link "Monitor options"}                        Monitor options
 @{" MonitorServerAddress " Link "Monitor options"}                 Monitor options
 @{" Mouse " Link "Control port options"}                                Control port options
 @{" MouseSensitivity " Link "Windows-specific features"}                     Windows-specific features
 @{" NetworkControl " Link "Misc resources"}                       Misc resources
 @{" NetworkServerBindAddress " Link "Misc resources"}             Misc resources
 @{" NetworkServerName " Link "Misc resources"}                    Misc resources
 @{" NetworkServerPort " Link "Misc resources"}                    Misc resources
 @{" openGL_no_sync " Link "Video resources"}                       Video resources
 @{" openGL_sync " Link "Video resources"}                          Video resources
 @{" OverClock " Link "SDL-specific features"}                            SDL-specific features
 @{" PETColour " Link "PET I-O extensions"}                            PET I-O extensions
 @{" PETColourBG " Link "PET I-O extensions"}                          PET I-O extensions
 @{" PETDWW " Link "PET I-O extensions"}                               PET I-O extensions
 @{" PETDWWfilename " Link "PET I-O extensions"}                       PET I-O extensions
 @{" PETHRE " Link "PET I-O extensions"}                               PET I-O extensions
 @{" PETREU " Link "PET I-O extensions"}                               PET I-O extensions
 @{" PETREUfilename " Link "PET I-O extensions"}                       PET I-O extensions
 @{" PETREUsize " Link "PET I-O extensions"}                           PET I-O extensions
 @{" PLUS256Kfilename " Link "C64 system ROM options"}                     C64 system ROM options
 @{" PLUS60Kbase " Link "C64 system ROM options"}                          C64 system ROM options
 @{" PLUS60Kfilename " Link "C64 system ROM options"}                      C64 system ROM options
 @{" Printer4 " Link "Printer resources"}                             Printer resources
 @{" Printer4Driver " Link "Printer resources"}                       Printer resources
 @{" Printer4Output " Link "Printer resources"}                       Printer resources
 @{" Printer4TextDevice " Link "Printer resources"}                   Printer resources
 @{" Printer5 " Link "Printer resources"}                             Printer resources
 @{" Printer5Driver " Link "Printer resources"}                       Printer resources
 @{" Printer5Output " Link "Printer resources"}                       Printer resources
 @{" Printer5TextDevice " Link "Printer resources"}                   Printer resources
 @{" Printer6 " Link "Printer resources"}                             Printer resources
 @{" Printer6Driver " Link "Printer resources"}                       Printer resources
 @{" Printer6Output " Link "Printer resources"}                       Printer resources
 @{" Printer6TextDevice " Link "Printer resources"}                   Printer resources
 @{" Printer7 " Link "Printer resources"}                             Printer resources
 @{" PrinterTextDevice1 " Link "Printer resources"}                   Printer resources
 @{" PrinterTextDevice2 " Link "Printer resources"}                   Printer resources
 @{" PrinterTextDevice3 " Link "Printer resources"}                   Printer resources
 @{" PrinterUserport " Link "Printer resources"}                      Printer resources
 @{" PrinterUserportDriver " Link "Printer resources"}                Printer resources
 @{" PrinterUserportOutput " Link "Printer resources"}                Printer resources
 @{" PrinterUserportTextDevice " Link "Printer resources"}            Printer resources
 @{" PrivateColormap " Link "XAW-specific features"}                      XAW-specific features
 @{" ps2mouse " Link "Monitor DTV features"}                             Monitor DTV features
 @{" PSIDKeepEnv " Link "VSID-specific"}                          VSID-specific
 @{" PSIDTune " Link "VSID-specific"}                             VSID-specific
 @{" Ram08 " Link "CBM-II model"}                                CBM-II model
 @{" Ram1 " Link "CBM-II model"}                                 CBM-II model
 @{" Ram2 " Link "CBM-II model"}                                 CBM-II model
 @{" Ram4 " Link "CBM-II model"}                                 CBM-II model
 @{" Ram6 " Link "CBM-II model"}                                 CBM-II model
 @{" Ram9 " Link "PET model"}                                 PET model
 @{" RamA " Link "PET model"}                                 PET model
 @{" RAMBlock0 " Link "VIC20 memconf resources"}                            VIC20 memconf resources
 @{" RAMBlock1 " Link "VIC20 memconf resources"}                            VIC20 memconf resources
 @{" RAMBlock2 " Link "VIC20 memconf resources"}                            VIC20 memconf resources
 @{" RAMBlock3 " Link "VIC20 memconf resources"}                            VIC20 memconf resources
 @{" RAMBlock5 " Link "VIC20 memconf resources"}                            VIC20 memconf resources
 @{" RamC " Link "CBM-II model"}                                 CBM-II model
 @{" RAMCART " Link "C64 cartridges"}                              C64 cartridges
 @{" RAMCARTfilename " Link "C64 cartridges"}                      C64 cartridges
 @{" RAMCARTImageWrite " Link "C64 cartridges"}                    C64 cartridges
 @{" RAMCARTsize " Link "C64 cartridges"}                          C64 cartridges
 @{" RAMCART_RO " Link "C64 cartridges"}                           C64 cartridges
 @{" RAMInitPatternInvert " Link "Monitor options"}                 Monitor options
 @{" RAMInitStartValue " Link "Monitor options"}                    Monitor options
 @{" RAMInitValueInvert " Link "Monitor options"}                   Monitor options
 @{" RamSize " Link "PET model"}                              PET model
 @{" RamSize " Link "PLUS4-specific"}                              PLUS4-specific
 @{" RamSize " Link "CBM-II model"}                              CBM-II model
 @{" RawDriveDriver " Link "Drive resources"}                       Drive resources
 @{" RefreshRate " Link "Performance resources"}                          Performance resources
 @{" RefreshRate " Link "Video resources"}                          Video resources
 @{" REU " Link "C64 I-O extension resources"}                                  C64 I-O extension resources
 @{" REUfilename " Link "C64 I-O extension resources"}                          C64 I-O extension resources
 @{" REUImageWrite " Link "C64 I-O extension resources"}                        C64 I-O extension resources
 @{" REUsize " Link "C64 I-O extension resources"}                              C64 I-O extension resources
 @{" RomModule9Name " Link "PET model"}                       PET model
 @{" RomModuleAName " Link "PET model"}                       PET model
 @{" RomModuleBName " Link "PET model"}                       PET model
 @{" RRBankJumper " Link "C64 cartridges"}                         C64 cartridges
 @{" RRBiosWrite " Link "C64 cartridges"}                          C64 cartridges
 @{" RRFlashJumper " Link "C64 cartridges"}                        C64 cartridges
 @{" RRrevision " Link "C64 cartridges"}                           C64 cartridges
 @{" RsDevice1 " Link "RS232 resources"}                            RS232 resources
 @{" RsDevice1Baud " Link "Unix-specific features"}                        Unix-specific features
 @{" RsDevice2 " Link "RS232 resources"}                            RS232 resources
 @{" RsDevice2Baud " Link "Unix-specific features"}                        Unix-specific features
 @{" RsDevice3 " Link "RS232 resources"}                            RS232 resources
 @{" RsDevice3Baud " Link "Unix-specific features"}                        Unix-specific features
 @{" RsDevice4 " Link "RS232 resources"}                            RS232 resources
 @{" RsDevice4Baud " Link "Unix-specific features"}                        Unix-specific features
 @{" RsUserBaud " Link "RS232 resources"}                           RS232 resources
 @{" RsUserDev " Link "RS232 resources"}                            RS232 resources
 @{" RsUserEnable " Link "RS232 resources"}                         RS232 resources
 @{" SaveResourcesOnExit " Link "Unix-specific features"}                  Unix-specific features
 @{" SaveResourcesOnExit " Link "SDL-specific features"}                  SDL-specific features
 @{" SaveResourcesOnExit " Link "Windows-specific features"}                  Windows-specific features
 @{" SaveResourcesOnExit " Link "AmigaOS-specific features"}                  AmigaOS-specific features
 @{" SaveResourcesOnExit " Link "BeOS-specific features"}                  BeOS-specific features
 @{" SCPU64Name " Link "SCPU64-specific"}                           SCPU64-specific
 @{" SDLBitdepth " Link "SDL-specific features"}                          SDL-specific features
 @{" SDLCustomHeight " Link "SDL-specific features"}                      SDL-specific features
 @{" SDLCustomWidth " Link "SDL-specific features"}                       SDL-specific features
 @{" SDLGLAspectMode " Link "SDL-specific features"}                      SDL-specific features
 @{" SDLGLFlipX " Link "SDL-specific features"}                           SDL-specific features
 @{" SDLGLFlipY " Link "SDL-specific features"}                           SDL-specific features
 @{" SDLLimitMode " Link "SDL-specific features"}                         SDL-specific features
 @{" SDLStatusbar " Link "SDL-specific features"}                         SDL-specific features
 @{" SFXSoundExpander " Link "C64 I-O extension resources"}                     C64 I-O extension resources
 @{" SFXSoundExpander " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" SFXSoundExpanderChip " Link "C64 I-O extension resources"}                 C64 I-O extension resources
 @{" SFXSoundExpanderChip " Link "VIC20 cartridges"}                 VIC20 cartridges
 @{" SFXSoundExpanderIOSwap " Link "VIC20 cartridges"}               VIC20 cartridges
 @{" SFXSoundSampler " Link "C64 I-O extension resources"}                      C64 I-O extension resources
 @{" SFXSoundSampler " Link "VIC20 cartridges"}                      VIC20 cartridges
 @{" SFXSoundSamplerIOSwap " Link "VIC20 cartridges"}                VIC20 cartridges
 @{" ShowStatusbar " Link "DOS-specific features"}                        DOS-specific features
 @{" SidAddress " Link "PLUS4-specific"}                           PLUS4-specific
 @{" SidAddress " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" SidAddress " Link "PET I-O extensions"}                           PET I-O extensions
 @{" SidCart " Link "PLUS4-specific"}                              PLUS4-specific
 @{" SidCart " Link "VIC20 cartridges"}                              VIC20 cartridges
 @{" SidCart " Link "PET I-O extensions"}                              PET I-O extensions
 @{" SIDCartJoy " Link "PLUS4-specific"}                           PLUS4-specific
 @{" SidClock " Link "PET I-O extensions"}                             PET I-O extensions
 @{" SidClock " Link "PLUS4-specific"}                             PLUS4-specific
 @{" SidClock " Link "VIC20 cartridges"}                             VIC20 cartridges
 @{" SidEngine " Link "SID resources"}                            SID resources
 @{" SidFilters " Link "SID resources"}                           SID resources
 @{" SidModel " Link "SID resources"}                             SID resources
 @{" SidResidFilterBias " Link "SID resources"}                   SID resources
 @{" SidResidGain " Link "SID resources"}                         SID resources
 @{" SidResidPassband " Link "SID resources"}                     SID resources
 @{" SidResidSampling " Link "SID resources"}                     SID resources
 @{" SidStereo " Link "SID resources"}                            SID resources
 @{" SidStereoAddressStart " Link "SID resources"}                SID resources
 @{" SidTripleAddressStart " Link "SID resources"}                SID resources
 @{" SIMMSize " Link "SCPU64-specific"}                             SCPU64-specific
 @{" SingleCPU " Link "Windows-specific features"}                            Windows-specific features
 @{" Sound " Link "Sound resources"}                                Sound resources
 @{" SoundBufferSize " Link "Sound resources"}                      Sound resources
 @{" SoundDeviceArg " Link "Sound resources"}                       Sound resources
 @{" SoundDeviceName " Link "Sound resources"}                      Sound resources
 @{" SoundFragmentSize " Link "Sound resources"}                    Sound resources
 @{" SoundOutput " Link "Sound resources"}                          Sound resources
 @{" SoundRecordDeviceArg " Link "Sound resources"}                 Sound resources
 @{" SoundRecordDeviceName " Link "Sound resources"}                Sound resources
 @{" SoundSampleRate " Link "Sound resources"}                      Sound resources
 @{" SoundSpeedAdjustment " Link "Sound resources"}                 Sound resources
 @{" SoundSuspendTime " Link "Sound resources"}                     Sound resources
 @{" SoundVolume " Link "Sound resources"}                          Sound resources
 @{" SpeechEnabled " Link "PLUS4-specific"}                        PLUS4-specific
 @{" SpeechImage " Link "PLUS4-specific"}                          PLUS4-specific
 @{" Speed " Link "Video resources"}                                Video resources
 @{" Speed " Link "Performance resources"}                                Performance resources
 @{" SpeedSwitch " Link "SCPU64-specific"}                          SCPU64-specific
 @{" SSRamExpansion " Link "C64 cartridges"}                       C64 cartridges
 @{" StatusBarEnabled " Link "AmigaOS-specific features"}                     AmigaOS-specific features
 @{" SuperPET " Link "PET model"}                             PET model
 @{" TEDAudioLeak " Link "PLUS4-specific"}                         PLUS4-specific
 @{" TEDBorderMode " Link "PLUS4-specific"}                        PLUS4-specific
 @{" TEDColorBrightness " Link "PLUS4-specific"}                   PLUS4-specific
 @{" TEDColorContrast " Link "PLUS4-specific"}                     PLUS4-specific
 @{" TEDColorGamma " Link "PLUS4-specific"}                        PLUS4-specific
 @{" TEDColorSaturation " Link "PLUS4-specific"}                   PLUS4-specific
 @{" TEDColorTint " Link "PLUS4-specific"}                         PLUS4-specific
 @{" TEDDoubleScan " Link "PLUS4-specific"}                        PLUS4-specific
 @{" TEDDoubleSize " Link "PLUS4-specific"}                        PLUS4-specific
 @{" TEDExternalPalette " Link "PLUS4-specific"}                   PLUS4-specific
 @{" TEDFilter " Link "PLUS4-specific"}                            PLUS4-specific
 @{" TEDFullscreen " Link "Unix-specific features"}                        Unix-specific features
 @{" TEDFullscreen " Link "SDL-specific features"}                        SDL-specific features
 @{" TEDFullscreenDevice " Link "Unix-specific features"}                  Unix-specific features
 @{" TEDFullscreenDevice " Link "SDL-specific features"}                  SDL-specific features
 @{" TEDFullscreenStatusbar " Link "SDL-specific features"}               SDL-specific features
 @{" TEDFullscreenStatusbar " Link "Unix-specific features"}               Unix-specific features
 @{" TEDHwScale " Link "Unix-specific features"}                           Unix-specific features
 @{" TEDHwScale " Link "SDL-specific features"}                           SDL-specific features
 @{" TEDPALBlur " Link "PLUS4-specific"}                           PLUS4-specific
 @{" TEDPaletteFile " Link "PLUS4-specific"}                       PLUS4-specific
 @{" TEDPALOddLineOffset " Link "PLUS4-specific"}                  PLUS4-specific
 @{" TEDPALOddLinePhase " Link "PLUS4-specific"}                   PLUS4-specific
 @{" TEDPALScanLineShade " Link "PLUS4-specific"}                  PLUS4-specific
 @{" TEDSDLFullscreenMode " Link "SDL-specific features"}                 SDL-specific features
 @{" TEDVideoCache " Link "PLUS4-specific"}                        PLUS4-specific
 @{" TEDVidmodeFullscreenMode " Link "XAW-specific features"}             XAW-specific features
 @{" TEDXRANDRFullscreenMode " Link "XAW-specific features"}              XAW-specific features
 @{" TFEIOSwap " Link "VIC20 cartridges"}                            VIC20 cartridges
 @{" TripleBuffering " Link "DOS-specific features"}                      DOS-specific features
 @{" TrueAspectRatio " Link "GTK-specific features"}                      GTK-specific features
 @{" TrueAspectRatio " Link "XAW-specific features"}                      XAW-specific features
 @{" TrueAspectRatio " Link "Windows-specific features"}                      Windows-specific features
 @{" UltiMemWriteBack " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" UseFullscreen " Link "XAW-specific features"}                        XAW-specific features
 @{" UseFullscreen " Link "XAW-specific features"}                        XAW-specific features
 @{" UseLeds " Link "DOS-specific features"}                              DOS-specific features
 @{" UserportDAC " Link "PET I-O extensions"}                          PET I-O extensions
 @{" UserportJoy " Link "Control port options"}                          Control port options
 @{" UserportJoyType " Link "Control port options"}                      Control port options
 @{" UserportRTC " Link "Misc resources"}                          Misc resources
 @{" UserportRTCSave " Link "Misc resources"}                      Misc resources
 @{" UseXSync " Link "XAW-specific features"}                             XAW-specific features
 @{" VBLANKSync " Link "Windows-specific features"}                           Windows-specific features
 @{" VDC64KB " Link "C128-specific"}                              C128-specific
 @{" VDCAudioLeak " Link "C128-specific"}                         C128-specific
 @{" VDCColorBrightness " Link "C128-specific"}                   C128-specific
 @{" VDCColorContrast " Link "C128-specific"}                     C128-specific
 @{" VDCColorGamma " Link "C128-specific"}                        C128-specific
 @{" VDCColorSaturation " Link "C128-specific"}                   C128-specific
 @{" VDCColorTint " Link "C128-specific"}                         C128-specific
 @{" VDCDoubleScan " Link "C128-specific"}                        C128-specific
 @{" VDCDoubleSize " Link "C128-specific"}                        C128-specific
 @{" VDCExternalPalette " Link "C128-specific"}                   C128-specific
 @{" VDCFilter " Link "C128-specific"}                            C128-specific
 @{" VDCFullscreen " Link "Unix-specific features"}                        Unix-specific features
 @{" VDCFullscreen " Link "SDL-specific features"}                        SDL-specific features
 @{" VDCFullscreenDevice " Link "SDL-specific features"}                  SDL-specific features
 @{" VDCFullscreenDevice " Link "Unix-specific features"}                  Unix-specific features
 @{" VDCFullscreenStatusbar " Link "Unix-specific features"}               Unix-specific features
 @{" VDCFullscreenStatusbar " Link "SDL-specific features"}               SDL-specific features
 @{" VDCHwScale " Link "Unix-specific features"}                           Unix-specific features
 @{" VDCHwScale " Link "SDL-specific features"}                           SDL-specific features
 @{" VDCPALBlur " Link "C128-specific"}                           C128-specific
 @{" VDCPaletteFile " Link "C128-specific"}                       C128-specific
 @{" VDCPALOddLineOffset " Link "C128-specific"}                  C128-specific
 @{" VDCPALOddLinePhase " Link "C128-specific"}                   C128-specific
 @{" VDCPALScanLineShade " Link "C128-specific"}                  C128-specific
 @{" VDCRevision " Link "C128-specific"}                          C128-specific
 @{" VDCSDLFullscreenMode " Link "SDL-specific features"}                 SDL-specific features
 @{" VDCStretchVertical " Link "C128-specific"}                   C128-specific
 @{" VDCVideoCache " Link "C128-specific"}                        C128-specific
 @{" VDCVidmodeFullscreenMode " Link "XAW-specific features"}             XAW-specific features
 @{" VDCXRANDRFullscreenMode " Link "XAW-specific features"}              XAW-specific features
 @{" VGAMode " Link "DOS-specific features"}                              DOS-specific features
 @{" VICAudioLeak " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" VICBorderMode " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" VICColorBrightness " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" VICColorContrast " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" VICColorGamma " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" VICColorSaturation " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" VICColorTint " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" VICDoubleScan " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" VICDoubleSize " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" VICExternalPalette " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" VICFilter " Link "VIC20 cartridges"}                            VIC20 cartridges
 @{" VicFlashPluginWriteBack " Link "VIC20 cartridges"}              VIC20 cartridges
 @{" VICFullscreen " Link "Unix-specific features"}                        Unix-specific features
 @{" VICFullscreen " Link "SDL-specific features"}                        SDL-specific features
 @{" VICFullscreenDevice " Link "SDL-specific features"}                  SDL-specific features
 @{" VICFullscreenDevice " Link "Unix-specific features"}                  Unix-specific features
 @{" VICFullscreenStatusbar " Link "SDL-specific features"}               SDL-specific features
 @{" VICFullscreenStatusbar " Link "Unix-specific features"}               Unix-specific features
 @{" VICHwScale " Link "SDL-specific features"}                           SDL-specific features
 @{" VICHwScale " Link "Unix-specific features"}                           Unix-specific features
 @{" VICIIAudioLeak " Link "VIC-II resources"}                       VIC-II resources
 @{" VICIIBorderMode " Link "VIC-II resources"}                      VIC-II resources
 @{" VICIICheckSbColl " Link "VIC-II resources"}                     VIC-II resources
 @{" VICIICheckSsColl " Link "VIC-II resources"}                     VIC-II resources
 @{" VICIIColorBrightness " Link "VIC-II resources"}                 VIC-II resources
 @{" VICIIColorContrast " Link "VIC-II resources"}                   VIC-II resources
 @{" VICIIColorGamma " Link "VIC-II resources"}                      VIC-II resources
 @{" VICIIColorSaturation " Link "VIC-II resources"}                 VIC-II resources
 @{" VICIIColorTint " Link "VIC-II resources"}                       VIC-II resources
 @{" VICIIDoubleScan " Link "VIC-II resources"}                      VIC-II resources
 @{" VICIIDoubleSize " Link "VIC-II resources"}                      VIC-II resources
 @{" VICIIExternalPalette " Link "VIC-II resources"}                 VIC-II resources
 @{" VICIIFilter " Link "VIC-II resources"}                          VIC-II resources
 @{" VICIIFullscreen " Link "Unix-specific features"}                      Unix-specific features
 @{" VICIIFullscreen " Link "SDL-specific features"}                      SDL-specific features
 @{" VICIIFullscreenDevice " Link "SDL-specific features"}                SDL-specific features
 @{" VICIIFullscreenDevice " Link "Unix-specific features"}                Unix-specific features
 @{" VICIIFullscreenStatusbar " Link "SDL-specific features"}             SDL-specific features
 @{" VICIIFullscreenStatusbar " Link "Unix-specific features"}             Unix-specific features
 @{" VICIIHwScale " Link "Unix-specific features"}                         Unix-specific features
 @{" VICIIHwScale " Link "SDL-specific features"}                         SDL-specific features
 @{" VICIIModel " Link "VIC-II resources"}                           VIC-II resources
 @{" VICIINewLuminances " Link "VIC-II resources"}                   VIC-II resources
 @{" VICIIPALBlur " Link "VIC-II resources"}                         VIC-II resources
 @{" VICIIPaletteFile " Link "VIC-II resources"}                     VIC-II resources
 @{" VICIIPALOddLineOffset " Link "VIC-II resources"}                VIC-II resources
 @{" VICIIPALOddLinePhase " Link "VIC-II resources"}                 VIC-II resources
 @{" VICIIPALScanLineShade " Link "VIC-II resources"}                VIC-II resources
 @{" VICIISDLFullscreenMode " Link "SDL-specific features"}               SDL-specific features
 @{" VICIIVideoCache " Link "VIC-II resources"}                      VIC-II resources
 @{" VICIIVidmodeFullscreenMode " Link "XAW-specific features"}           XAW-specific features
 @{" VICIIVSPBug " Link "VIC-II resources"}                          VIC-II resources
 @{" VICIIXRANDRFullscreenMode " Link "XAW-specific features"}            XAW-specific features
 @{" VICPALBlur " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" VICPaletteFile " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" VICPALOddLineOffset " Link "VIC20 cartridges"}                  VIC20 cartridges
 @{" VICPALOddLinePhase " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" VICPALScanLineShade " Link "VIC20 cartridges"}                  VIC20 cartridges
 @{" VICSDLFullscreenMode " Link "SDL-specific features"}                 SDL-specific features
 @{" VICVideoCache " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" VICVidmodeFullscreenMode " Link "XAW-specific features"}             XAW-specific features
 @{" VICXRANDRFullscreenMode " Link "XAW-specific features"}              XAW-specific features
 @{" VideoOverlayEnabled " Link "AROS-specific features"}                  AROS-specific features
 @{" VideoOverlayEnabled " Link "AmigaOS3-specific features"}                  AmigaOS3-specific features
 @{" VideoOverlayEnabled " Link "MorphOS-specific features"}                  MorphOS-specific features
 @{" VideoSize " Link "PET model"}                            PET model
 @{" VirtualDevices " Link "No traps resources"}                       No traps resources
 @{" WarpMode " Link "Video resources"}                             Video resources
 @{" WarpMode " Link "Performance resources"}                             Performance resources
 @{" Window0Height " Link "XAW-specific features"}                        XAW-specific features
 @{" Window0Width " Link "XAW-specific features"}                         XAW-specific features
 @{" Window0Xpos " Link "Windows-specific features"}                          Windows-specific features
 @{" Window0Xpos " Link "XAW-specific features"}                          XAW-specific features
 @{" Window0Ypos " Link "XAW-specific features"}                          XAW-specific features
 @{" Window0Ypos " Link "Windows-specific features"}                          Windows-specific features
 @{" Window1Height " Link "XAW-specific features"}                        XAW-specific features
 @{" Window1Width " Link "XAW-specific features"}                         XAW-specific features
 @{" Window1Xpos " Link "XAW-specific features"}                          XAW-specific features
 @{" Window1Xpos " Link "Windows-specific features"}                          Windows-specific features
 @{" Window1Ypos " Link "XAW-specific features"}                          XAW-specific features
 @{" Window1Ypos " Link "Windows-specific features"}                          Windows-specific features


@EndNode

@Node "Command-line Index" "vice.guide/Command-line Index"
@Prev "Resource Index"
@Toc "Main"

Index of Command-line options
*****************************



 @{" +cart " Link "CBM-II model"}                                CBM-II model
 @{" +cart " Link "C64 cartridges"}                                C64 cartridges
 @{" -256kbase " Link "C64 system ROM options"}                            C64 system ROM options
 @{" -256kimage " Link "C64 system ROM options"}                           C64 system ROM options
 @{" -40col " Link "C128-specific"}                               C128-specific
 @{" -6809romA " Link "PET system ROM"}                            PET system ROM
 @{" -6809romC " Link "PET system ROM"}                            PET system ROM
 @{" -6809romD " Link "PET system ROM"}                            PET system ROM
 @{" -6809romE " Link "PET system ROM"}                            PET system ROM
 @{" -6809romF " Link "PET system ROM"}                            PET system ROM
 @{" -80col " Link "C128-specific"}                               C128-specific
 @{" -acia1, +acia1 " Link "RS232 options"}                       RS232 options
 @{" -acia1base " Link "RS232 options"}                           RS232 options
 @{" -acia1irq " Link "RS232 options"}                            RS232 options
 @{" -acia1mode " Link "RS232 options"}                           RS232 options
 @{" -alwaysontop, +alwaysontop " Link "Windows-specific features"}           Windows-specific features
 @{" -aspect " Link "Windows-specific features"}                              Windows-specific features
 @{" -aspect " Link "XAW-specific features"}                              XAW-specific features
 @{" -aspect " Link "SDL-specific features"}                              SDL-specific features
 @{" -attach10ro " Link "Command-line initialization"}                          Command-line initialization
 @{" -attach11ro " Link "Command-line initialization"}                          Command-line initialization
 @{" -attach8ro " Link "Command-line initialization"}                           Command-line initialization
 @{" -attach9ro " Link "Command-line initialization"}                           Command-line initialization
 @{" -autostart-delay " Link "Resources and command-line"}                     Resources and command-line
 @{" -autostart-delay-random, +autostart-delay-random " Link "Resources and command-line"} Resources and command-line
 @{" -autostart-handle-tde, +autostart-handle-tde " Link "Resources and command-line"} Resources and command-line
 @{" -autostart-warp, +autostart-warp " Link "Resources and command-line"}     Resources and command-line
 @{" -autostartprgdiskimage " Link "Resources and command-line"}               Resources and command-line
 @{" -autostartprgmode " Link "Resources and command-line"}                    Resources and command-line
 @{" -autostartwithcolon, +autostartwithcolon " Link "Resources and command-line"} Resources and command-line
 @{" -basic " Link "Monitor DTV features"}                               Monitor DTV features
 @{" -basic " Link "VIC20 system ROM options"}                               VIC20 system ROM options
 @{" -basic " Link "CBM-II model"}                               CBM-II model
 @{" -basic " Link "PET system ROM"}                               PET system ROM
 @{" -basic " Link "VSID-specific"}                               VSID-specific
 @{" -basic " Link "C64 system ROM options"}                               C64 system ROM options
 @{" -basic <Name> " Link "PLUS4-specific"}                        PLUS4-specific
 @{" -basic1, +basic1 " Link "PET settings"}                     PET settings
 @{" -basic1char, +basic1char " Link "PET settings"}             PET settings
 @{" -basic64 " Link "C128-specific"}                             C128-specific
 @{" -basichi " Link "C128-specific"}                             C128-specific
 @{" -basiclo " Link "C128-specific"}                             C128-specific
 @{" -basicload, +basicload " Link "Resources and command-line"}               Resources and command-line
 @{" -burstmod " Link "C64 I-O extension options"}                            C64 I-O extension options
 @{" -burstmod " Link "SCPU64-specific"}                            SCPU64-specific
 @{" -c128fullbanks, +c128fullbanks " Link "C128-specific"}       C128-specific
 @{" -c1hi " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -c1lo " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -c2hi " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -c2lo " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -c64dtvromimage " Link "C64DTV ROM image"}                      C64DTV ROM image
 @{" -c64dtvromrw, +c64dtvromrw " Link "C64DTV ROM image"}           C64DTV ROM image
 @{" -cart1 " Link "CBM-II model"}                               CBM-II model
 @{" -cart16 " Link "C64 cartridges"}                              C64 cartridges
 @{" -cart2 " Link "CBM-II model"}                               CBM-II model
 @{" -cart4 " Link "CBM-II model"}                               CBM-II model
 @{" -cart6 " Link "CBM-II model"}                               CBM-II model
 @{" -cart8 " Link "C64 cartridges"}                               C64 cartridges
 @{" -cartap " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartar2 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartar3 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartar4 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartar5 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartcap " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartcomal " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartcrt " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartdep256 " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartdep64 " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartdep7x8 " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartdin " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartdqbb " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartdsm " Link "C64 cartridges"}                             C64 cartridges
 @{" -carteasy " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartepyx " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartexos " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartexpert " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartf64 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartfc1 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartfc3 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartfcplus " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartff " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartfm " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartfp " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartgeoram " Link "C64 I-O extension options"}                          C64 I-O extension options
 @{" -cartgk " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartgs " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartide64 " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartieee " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartisepic " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartkcs " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartks " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartmach5 " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartmd " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartmf " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartmikro " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartmmc64 " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartmmcr " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartmv " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartocean " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartp64 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartpf " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartramcart " Link "C64 cartridges"}                         C64 cartridges
 @{" -cartrep256 " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartreset, +cartreset " Link "C64 cartridges"}               C64 cartridges
 @{" -cartreset, +cartreset " Link "CBM-II model"}               CBM-II model
 @{" -cartreset, +cartreset " Link "PLUS4-specific"}               PLUS4-specific
 @{" -cartreset, +cartreset " Link "VIC20 cartridges"}               VIC20 cartridges
 @{" -cartreu " Link "C64 I-O extension options"}                             C64 I-O extension options
 @{" -cartrgcd " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartross " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartrr " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartrrnet " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartru " Link "C64 cartridges"}                              C64 cartridges
 @{" -carts64 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartsb " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartse5 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartsg " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartsilver " Link "C64 cartridges"}                          C64 cartridges
 @{" -cartsimon " Link "C64 cartridges"}                           C64 cartridges
 @{" -cartss4 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartss5 " Link "C64 cartridges"}                             C64 cartridges
 @{" -cartstar " Link "C64 cartridges"}                            C64 cartridges
 @{" -cartultimax " Link "C64 cartridges"}                         C64 cartridges
 @{" -cartwl " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartws " Link "C64 cartridges"}                              C64 cartridges
 @{" -cartzaxxon " Link "C64 cartridges"}                          C64 cartridges
 @{" -chargch " Link "C128-specific"}                             C128-specific
 @{" -chargde " Link "C128-specific"}                             C128-specific
 @{" -chargen " Link "CBM-II model"}                             CBM-II model
 @{" -chargen " Link "VSID-specific"}                             VSID-specific
 @{" -chargen " Link "PET system ROM"}                             PET system ROM
 @{" -chargen " Link "Monitor DTV features"}                             Monitor DTV features
 @{" -chargen " Link "SCPU64-specific"}                             SCPU64-specific
 @{" -chargen " Link "C128-specific"}                             C128-specific
 @{" -chargen " Link "VIC20 system ROM options"}                             VIC20 system ROM options
 @{" -chargen " Link "C64 system ROM options"}                             C64 system ROM options
 @{" -chargfr " Link "C128-specific"}                             C128-specific
 @{" -chargse " Link "C128-specific"}                             C128-specific
 @{" -cia1model " Link "C64 cartridges"}                           C64 cartridges
 @{" -cia2model " Link "C64 cartridges"}                           C64 cartridges
 @{" -ciamodel " Link "C64 cartridges"}                            C64 cartridges
 @{" -colormap, +colormap " Link "XAW-specific features"}                 XAW-specific features
 @{" -colour-analog " Link "PET I-O extensions"}                       PET I-O extensions
 @{" -colour-analog-bg " Link "PET I-O extensions"}                    PET I-O extensions
 @{" -colour-rgbi " Link "PET I-O extensions"}                         PET I-O extensions
 @{" -confirmexit, +confirmexit " Link "Unix-specific features"}           Unix-specific features
 @{" -confirmexit, +confirmexit " Link "Windows-specific features"}           Windows-specific features
 @{" -confirmexit, +confirmexit " Link "SDL-specific features"}           SDL-specific features
 @{" -confirmexit, +confirmexit " Link "BeOS-specific features"}           BeOS-specific features
 @{" -confirmexit, +confirmexit " Link "AmigaOS-specific features"}           AmigaOS-specific features
 @{" -controlport1device " Link "Control port options"}                  Control port options
 @{" -controlport2device " Link "Control port options"}                  Control port options
 @{" -controlport3device " Link "Control port options"}                  Control port options
 @{" -controlport4device " Link "Control port options"}                  Control port options
 @{" -core, +core " Link "Misc options"}                         Misc options
 @{" -cpu6502 " Link "PET settings"}                             PET settings
 @{" -cpu6809 " Link "PET settings"}                             PET settings
 @{" -cpuprog " Link "PET settings"}                             PET settings
 @{" -crtc, +crtc " Link "CRTC Settings"}                         CRTC Settings
 @{" -Crtcaudioleak, +Crtcaudioleak " Link "CRTC Settings"}       CRTC Settings
 @{" -Crtcbrightness " Link "CRTC Settings"}                      CRTC Settings
 @{" -Crtccontrast " Link "CRTC Settings"}                        CRTC Settings
 @{" -Crtccrtblur " Link "CRTC Settings"}                         CRTC Settings
 @{" -Crtccrtscanlineshade " Link "CRTC Settings"}                CRTC Settings
 @{" -Crtcdscan, +Crtcdscan " Link "CRTC Settings"}               CRTC Settings
 @{" -Crtcdsize, +Crtcdsize " Link "CRTC Settings"}               CRTC Settings
 @{" -Crtcextpal " Link "CRTC Settings"}                          CRTC Settings
 @{" -Crtcfilter " Link "CRTC Settings"}                          CRTC Settings
 @{" -CRTCfull, +CRTCfull " Link "SDL-specific features"}                 SDL-specific features
 @{" -CRTCfulldevice " Link "SDL-specific features"}                      SDL-specific features
 @{" -CRTCfulldevice " Link "Unix-specific features"}                      Unix-specific features
 @{" -Crtcgamma " Link "CRTC Settings"}                           CRTC Settings
 @{" -CRTChwscale, +CRTChwscale " Link "SDL-specific features"}           SDL-specific features
 @{" -CRTChwscale, +CRTChwscale " Link "Unix-specific features"}           Unix-specific features
 @{" -Crtcintpal " Link "CRTC Settings"}                          CRTC Settings
 @{" -Crtcoddlinesoffset " Link "CRTC Settings"}                  CRTC Settings
 @{" -Crtcoddlinesphase " Link "CRTC Settings"}                   CRTC Settings
 @{" -Crtcpalette " Link "CRTC Settings"}                         CRTC Settings
 @{" -Crtcsaturation " Link "CRTC Settings"}                      CRTC Settings
 @{" -CRTCSDLfullmode " Link "SDL-specific features"}                     SDL-specific features
 @{" -CRTCstretchvertical, +CRTCstretchvertical " Link "CRTC Settings"} CRTC Settings
 @{" -Crtctint " Link "CRTC Settings"}                            CRTC Settings
 @{" -Crtcvcache, +Crtcvcache " Link "CRTC Settings"}             CRTC Settings
 @{" -CrtcVidmodefullmode " Link "XAW-specific features"}                 XAW-specific features
 @{" -CrtcXRANDRfullmode " Link "XAW-specific features"}                  XAW-specific features
 @{" -debug, +debug " Link "Misc options"}                       Misc options
 @{" -device10 " Link "File system device options"}                            File system device options
 @{" -device11 " Link "File system device options"}                            File system device options
 @{" -device4 " Link "Printer options"}                             Printer options
 @{" -device5 " Link "Printer options"}                             Printer options
 @{" -device6 " Link "Printer options"}                             Printer options
 @{" -device7 " Link "Printer options"}                             Printer options
 @{" -device8 " Link "File system device options"}                             File system device options
 @{" -device9 " Link "File system device options"}                             File system device options
 @{" -diagpin, +diagpin " Link "PET settings"}                   PET settings
 @{" -digiblaster, +digiblaster " Link "PLUS4-specific"}           PLUS4-specific
 @{" -digimax, +digimax " Link "C64 I-O extension options"}                   C64 I-O extension options
 @{" -digimax, +digimax " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" -digimaxbase " Link "C64 I-O extension options"}                         C64 I-O extension options
 @{" -digimaxbase " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" -directory " Link "Misc options"}                           Misc options
 @{" -directwindow, +directwindow " Link "BeOS-specific features"}         BeOS-specific features
 @{" -displaydepth " Link "XAW-specific features"}                        XAW-specific features
 @{" -doodlecrtctextcolor " Link "C500 data module"}                 C500 data module
 @{" -doodlemc " Link "C500 data module"}                            C500 data module
 @{" -doodleoversize " Link "C500 data module"}                      C500 data module
 @{" -doodletedlum " Link "C500 data module"}                        C500 data module
 @{" -doodleundersize " Link "C500 data module"}                     C500 data module
 @{" -dos1001 " Link "Drive options"}                             Drive options
 @{" -dos1540 " Link "Drive options"}                             Drive options
 @{" -dos1541 " Link "Drive options"}                             Drive options
 @{" -dos1541II " Link "Drive options"}                           Drive options
 @{" -dos1551 " Link "Drive options"}                             Drive options
 @{" -dos1570 " Link "Drive options"}                             Drive options
 @{" -dos1571 " Link "Drive options"}                             Drive options
 @{" -dos1571cr " Link "Drive options"}                           Drive options
 @{" -dos1581 " Link "Drive options"}                             Drive options
 @{" -dos2000 " Link "Drive options"}                             Drive options
 @{" -dos2031 " Link "Drive options"}                             Drive options
 @{" -dos2040 " Link "Drive options"}                             Drive options
 @{" -dos3040 " Link "Drive options"}                             Drive options
 @{" -dos4000 " Link "Drive options"}                             Drive options
 @{" -dos4040 " Link "Drive options"}                             Drive options
 @{" -dqbb, +dqbb " Link "C64 cartridges"}                         C64 cartridges
 @{" -dqbbimage " Link "C64 cartridges"}                           C64 cartridges
 @{" -dqbbimagerw, +dqbbimagerw " Link "C64 cartridges"}           C64 cartridges
 @{" -drive10extend " Link "Drive options"}                       Drive options
 @{" -drive10idle " Link "Drive options"}                         Drive options
 @{" -drive10profdos, +drive10profdos " Link "Drive options"}     Drive options
 @{" -drive10ram2000, +drive10ram2000 " Link "Drive options"}     Drive options
 @{" -drive10ram4000, +drive10ram4000 " Link "Drive options"}     Drive options
 @{" -drive10ram6000, +drive10ram6000 " Link "Drive options"}     Drive options
 @{" -drive10ram8000, +drive10ram8000 " Link "Drive options"}     Drive options
 @{" -drive10rama000, +drive10rama000 " Link "Drive options"}     Drive options
 @{" -drive10rpm " Link "Drive options"}                          Drive options
 @{" -drive10rtcsave / +drive10rtcsave " Link "Drive options"}    Drive options
 @{" -drive10supercard, +drive10supercard " Link "Drive options"} Drive options
 @{" -drive10type " Link "Drive options"}                         Drive options
 @{" -drive10wobble " Link "Drive options"}                       Drive options
 @{" -drive11extend " Link "Drive options"}                       Drive options
 @{" -drive11idle " Link "Drive options"}                         Drive options
 @{" -drive11profdos, +drive11profdos " Link "Drive options"}     Drive options
 @{" -drive11ram2000, +drive11ram2000 " Link "Drive options"}     Drive options
 @{" -drive11ram4000, +drive11ram4000 " Link "Drive options"}     Drive options
 @{" -drive11ram6000, +drive11ram6000 " Link "Drive options"}     Drive options
 @{" -drive11ram8000, +drive11ram8000 " Link "Drive options"}     Drive options
 @{" -drive11rama000, +drive11rama000 " Link "Drive options"}     Drive options
 @{" -drive11rpm " Link "Drive options"}                          Drive options
 @{" -drive11rtcsave / +drive11rtcsave " Link "Drive options"}    Drive options
 @{" -drive11supercard, +drive11supercard " Link "Drive options"} Drive options
 @{" -drive11type " Link "Drive options"}                         Drive options
 @{" -drive11wobble " Link "Drive options"}                       Drive options
 @{" -drive8extend " Link "Drive options"}                        Drive options
 @{" -drive8idle " Link "Drive options"}                          Drive options
 @{" -drive8profdos, +drive8profdos " Link "Drive options"}       Drive options
 @{" -drive8ram2000, +drive8ram2000 " Link "Drive options"}       Drive options
 @{" -drive8ram4000, +drive8ram4000 " Link "Drive options"}       Drive options
 @{" -drive8ram6000, +drive8ram6000 " Link "Drive options"}       Drive options
 @{" -drive8ram8000, +drive8ram8000 " Link "Drive options"}       Drive options
 @{" -drive8rama000, +drive8rama000 " Link "Drive options"}       Drive options
 @{" -drive8rpm " Link "Drive options"}                           Drive options
 @{" -drive8rtcsave / +drive8rtcsave " Link "Drive options"}      Drive options
 @{" -drive8supercard, +drive8supercard " Link "Drive options"}   Drive options
 @{" -drive8type " Link "Drive options"}                          Drive options
 @{" -drive8wobble " Link "Drive options"}                        Drive options
 @{" -drive9extend " Link "Drive options"}                        Drive options
 @{" -drive9idle " Link "Drive options"}                          Drive options
 @{" -drive9profdos, +drive9profdos " Link "Drive options"}       Drive options
 @{" -drive9ram2000, +drive9ram2000 " Link "Drive options"}       Drive options
 @{" -drive9ram4000, +drive9ram4000 " Link "Drive options"}       Drive options
 @{" -drive9ram6000, +drive9ram6000 " Link "Drive options"}       Drive options
 @{" -drive9ram8000, +drive9ram8000 " Link "Drive options"}       Drive options
 @{" -drive9rama000, +drive9rama000 " Link "Drive options"}       Drive options
 @{" -drive9rpm " Link "Drive options"}                           Drive options
 @{" -drive9rtcsave / +drive9rtcsave " Link "Drive options"}      Drive options
 @{" -drive9supercard, +drive9supercard " Link "Drive options"}   Drive options
 @{" -drive9type " Link "Drive options"}                          Drive options
 @{" -drive9wobble " Link "Drive options"}                        Drive options
 @{" -drivesound, +drivesound " Link "Drive options"}             Drive options
 @{" -drivesoundvolume " Link "Drive options"}                    Drive options
 @{" -ds12c887rtc, +ds12c887rtc " Link "C64 I-O extension options"}           C64 I-O extension options
 @{" -ds12c887rtc, +ds12c887rtc " Link "VIC20 cartridges"}           VIC20 cartridges
 @{" -ds12c887rtcbase " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" -ds12c887rtcbase " Link "C64 I-O extension options"}                     C64 I-O extension options
 @{" -ds12c887rtchalted, -ds12c887rtcrunning " Link "VIC20 cartridges"} VIC20 cartridges
 @{" -ds12c887rtchalted, -ds12c887rtcrunning " Link "C64 I-O extension options"} C64 I-O extension options
 @{" -ds12c887rtcsave, +ds12c887rtcsave " Link "C64 I-O extension options"}   C64 I-O extension options
 @{" -ds12c887rtcsave, +ds12c887rtcsave " Link "VIC20 cartridges"}   VIC20 cartridges
 @{" -dsresetwithcpu, +dsresetwithcpu " Link "Sound options"}     Sound options
 @{" -dsspeedtuning " Link "Sound options"}                       Sound options
 @{" -dstapewobble " Link "Sound options"}                        Sound options
 @{" -dszerogapdelay " Link "Sound options"}                      Sound options
 @{" -dtvrev " Link "DTV revision"}                              DTV revision
 @{" -dx9disable " Link "Windows-specific features"}                          Windows-specific features
 @{" -dx9enable " Link "Windows-specific features"}                           Windows-specific features
 @{" -dxpsrender, +dxpsrender " Link "Windows-specific features"}             Windows-specific features
 @{" -easyflashcrtoptimize, +easyflashcrtoptimize " Link "C64 cartridges"} C64 cartridges
 @{" -easyflashcrtwrite, +easyflashcrtwrite " Link "C64 cartridges"} C64 cartridges
 @{" -easyflashjumper, +easyflashjumper " Link "C64 cartridges"}   C64 cartridges
 @{" -editor " Link "PET system ROM"}                              PET system ROM
 @{" -eoiblank, +eoiblank " Link "PET settings"}                 PET settings
 @{" -eventendsnapshot " Link "C500 data module"}                    C500 data module
 @{" -eventimageinc / +eventimageinc " Link "C500 data module"}      C500 data module
 @{" -eventsnapshotdir " Link "C500 data module"}                    C500 data module
 @{" -eventstartmode " Link "C500 data module"}                      C500 data module
 @{" -eventstartsnapshot " Link "C500 data module"}                  C500 data module
 @{" -expert, +expert " Link "C64 cartridges"}                     C64 cartridges
 @{" -expertimagename " Link "C64 cartridges"}                     C64 cartridges
 @{" -expertimagerw, +expertimagerw " Link "C64 cartridges"}       C64 cartridges
 @{" -expertmode " Link "C64 cartridges"}                          C64 cartridges
 @{" -extfrom " Link "C128-specific"}                             C128-specific
 @{" -extfunc " Link "C128-specific"}                             C128-specific
 @{" -extfuncrtcsave, +extfuncrtcsave " Link "C128-specific"}     C128-specific
 @{" -extrajoydev1 " Link "AmigaOS4-specific features"}                        AmigaOS4-specific features
 @{" -extrajoydev1 " Link "Windows-specific features"}                        Windows-specific features
 @{" -extrajoydev1 " Link "Unix-specific features"}                        Unix-specific features
 @{" -extrajoydev1 " Link "SDL-specific features"}                        SDL-specific features
 @{" -extrajoydev1 " Link "DOS-specific features"}                        DOS-specific features
 @{" -extrajoydev1 " Link "BeOS-specific features"}                        BeOS-specific features
 @{" -extrajoydev1 " Link "AROS-specific features"}                        AROS-specific features
 @{" -extrajoydev1 " Link "MorphOS-specific features"}                        MorphOS-specific features
 @{" -extrajoydev1 " Link "AmigaOS3-specific features"}                        AmigaOS3-specific features
 @{" -extrajoydev2 " Link "SDL-specific features"}                        SDL-specific features
 @{" -extrajoydev2 " Link "Unix-specific features"}                        Unix-specific features
 @{" -extrajoydev2 " Link "AmigaOS4-specific features"}                        AmigaOS4-specific features
 @{" -extrajoydev2 " Link "MorphOS-specific features"}                        MorphOS-specific features
 @{" -extrajoydev2 " Link "Windows-specific features"}                        Windows-specific features
 @{" -extrajoydev2 " Link "AROS-specific features"}                        AROS-specific features
 @{" -extrajoydev2 " Link "BeOS-specific features"}                        BeOS-specific features
 @{" -extrajoydev2 " Link "DOS-specific features"}                        DOS-specific features
 @{" -extrajoydev2 " Link "AmigaOS3-specific features"}                        AmigaOS3-specific features
 @{" -fewriteback, +fewriteback " Link "VIC20 cartridges"}           VIC20 cartridges
 @{" -flipname " Link "File system device options"}                            File system device options
 @{" -fourcc " Link "XAW-specific features"}                              XAW-specific features
 @{" -fpwriteback, +fpwriteback " Link "VIC20 cartridges"}           VIC20 cartridges
 @{" -fs10 " Link "File system device options"}                                File system device options
 @{" -fs10convertp00 / +fs10convertp00 " Link "File system device options"}    File system device options
 @{" -fs10hidecbm / +fs10hidecbm " Link "File system device options"}          File system device options
 @{" -fs10savep00 / +fs10savep00 " Link "File system device options"}          File system device options
 @{" -fs11 " Link "File system device options"}                                File system device options
 @{" -fs11convertp00 / +fs11convertp00 " Link "File system device options"}    File system device options
 @{" -fs11hidecbm / +fs11hidecbm " Link "File system device options"}          File system device options
 @{" -fs11savep00 / +fs11savep00 " Link "File system device options"}          File system device options
 @{" -fs8 " Link "File system device options"}                                 File system device options
 @{" -fs8convertp00 / +fs8convertp00 " Link "File system device options"}      File system device options
 @{" -fs8hidecbm / +fs8hidecbm " Link "File system device options"}            File system device options
 @{" -fs8savep00 / +fs8savep00 " Link "File system device options"}            File system device options
 @{" -fs9 " Link "File system device options"}                                 File system device options
 @{" -fs9convertp00 / +fs9convertp00 " Link "File system device options"}      File system device options
 @{" -fs9hidecbm / +fs9hidecbm " Link "File system device options"}            File system device options
 @{" -fs9savep00 / +fs9savep00 " Link "File system device options"}            File system device options
 @{" -fsflash " Link "C64DTV ROM image"}                             C64DTV ROM image
 @{" -fullscreen, +fullscreen " Link "AmigaOS-specific features"}             AmigaOS-specific features
 @{" -fullscreen, +fullscreen " Link "XAW-specific features"}             XAW-specific features
 @{" -fullscreen, +fullscreen " Link "XAW-specific features"}             XAW-specific features
 @{" -fullscreen, +fullscreen " Link "Windows-specific features"}             Windows-specific features
 @{" -fullscreendevice " Link "Windows-specific features"}                    Windows-specific features
 @{" -functionhi " Link "PLUS4-specific"}                          PLUS4-specific
 @{" -functionlo " Link "PLUS4-specific"}                          PLUS4-specific
 @{" -georam, +georam " Link "C64 I-O extension options"}                     C64 I-O extension options
 @{" -georam, +georam " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" -georamimage " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" -georamimage " Link "C64 I-O extension options"}                         C64 I-O extension options
 @{" -georamimagerw, +georamimagerw " Link "VIC20 cartridges"}       VIC20 cartridges
 @{" -georamimagerw, +georamimagerw " Link "C64 I-O extension options"}       C64 I-O extension options
 @{" -georamioswap, +georamioswap " Link "VIC20 cartridges"}         VIC20 cartridges
 @{" -georamsize " Link "C64 I-O extension options"}                          C64 I-O extension options
 @{" -georamsize " Link "VIC20 cartridges"}                          VIC20 cartridges
 @{" -gluelogictype " Link "SCPU64-specific"}                       SCPU64-specific
 @{" -gluelogictype " Link "C64 system ROM options"}                       C64 system ROM options
 @{" -go64, +go64 " Link "C128-specific"}                         C128-specific
 @{" -hotkeyfile " Link "SDL-specific features"}                          SDL-specific features
 @{" -htmlbrowser " Link "Unix-specific features"}                         Unix-specific features
 @{" -hummeradc, +hummeradc " Link "Userport"}               Userport
 @{" -IDE64autosize1, +IDE64autosize1 " Link "C64 cartridges"}     C64 cartridges
 @{" -IDE64autosize2, +IDE64autosize2 " Link "C64 cartridges"}     C64 cartridges
 @{" -IDE64autosize3, +IDE64autosize3 " Link "C64 cartridges"}     C64 cartridges
 @{" -IDE64autosize4, +IDE64autosize4 " Link "C64 cartridges"}     C64 cartridges
 @{" -IDE64cyl1 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64cyl2 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64cyl3 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64cyl4 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64hds1 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64hds2 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64hds3 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64hds4 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64image1 " Link "C64 cartridges"}                         C64 cartridges
 @{" -IDE64image2 " Link "C64 cartridges"}                         C64 cartridges
 @{" -IDE64image3 " Link "C64 cartridges"}                         C64 cartridges
 @{" -IDE64image4 " Link "C64 cartridges"}                         C64 cartridges
 @{" -IDE64rtcsave, +IDE64rtcsave " Link "C64 cartridges"}         C64 cartridges
 @{" -IDE64sec1 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64sec2 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64sec3 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64sec4 " Link "C64 cartridges"}                           C64 cartridges
 @{" -IDE64version " Link "C64 cartridges"}                        C64 cartridges
 @{" -iecdevice10, +iecdevice10 " Link "File system device options"}           File system device options
 @{" -iecdevice11, +iecdevice11 " Link "File system device options"}           File system device options
 @{" -iecdevice4, +iecdevice4 " Link "Printer options"}             Printer options
 @{" -iecdevice5, +iecdevice5 " Link "Printer options"}             Printer options
 @{" -iecdevice6, +iecdevice6 " Link "Printer options"}             Printer options
 @{" -iecdevice7, +iecdevice7 " Link "Printer options"}             Printer options
 @{" -iecdevice8, +iecdevice8 " Link "File system device options"}             File system device options
 @{" -iecdevice9, +iecdevice9 " Link "File system device options"}             File system device options
 @{" -iecreset " Link "C64 system ROM options"}                            C64 system ROM options
 @{" -iecreset " Link "SCPU64-specific"}                            SCPU64-specific
 @{" -ieee488, +ieee488 " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" -ieee488, +ieee488 " Link "C64 cartridges"}                   C64 cartridges
 @{" -ieee488image " Link "C64 cartridges"}                        C64 cartridges
 @{" -initialautostartdir " Link "AmigaOS-specific features"}                 AmigaOS-specific features
 @{" -initialautostartdir " Link "Windows-specific features"}                 Windows-specific features
 @{" -initialcartdir " Link "Windows-specific features"}                      Windows-specific features
 @{" -initialcartdir " Link "AmigaOS-specific features"}                      AmigaOS-specific features
 @{" -initialdefaultdir " Link "Windows-specific features"}                   Windows-specific features
 @{" -initialdefaultdir " Link "AmigaOS-specific features"}                   AmigaOS-specific features
 @{" -initialdiskdir " Link "Windows-specific features"}                      Windows-specific features
 @{" -initialdiskdir " Link "AmigaOS-specific features"}                      AmigaOS-specific features
 @{" -initialsnapshotdir " Link "AmigaOS-specific features"}                  AmigaOS-specific features
 @{" -initialsnapshotdir " Link "Windows-specific features"}                  Windows-specific features
 @{" -initialtapedir " Link "Windows-specific features"}                      Windows-specific features
 @{" -initialtapedir " Link "AmigaOS-specific features"}                      AmigaOS-specific features
 @{" -intfrom " Link "C128-specific"}                             C128-specific
 @{" -intfunc " Link "C128-specific"}                             C128-specific
 @{" -intfuncrtcsave, +intfuncrtcsave " Link "C128-specific"}     C128-specific
 @{" -io2ram, +io2ram " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" -io3ram, +io3ram " Link "VIC20 cartridges"}                     VIC20 cartridges
 @{" -iocollision " Link "C64 cartridges"}                         C64 cartridges
 @{" -iocollision " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" -iosize " Link "PET settings"}                              PET settings
 @{" -isepic, +isepic " Link "C64 cartridges"}                     C64 cartridges
 @{" -isepicimagename " Link "C64 cartridges"}                     C64 cartridges
 @{" -isepicimagerw, +isepicimagerw " Link "C64 cartridges"}       C64 cartridges
 @{" -isepicswitch, +isepicswitch " Link "C64 cartridges"}         C64 cartridges
 @{" -jamaction " Link "Misc options"}                           Misc options
 @{" -jiffyswitch, +jiffyswitch " Link "SCPU64-specific"}           SCPU64-specific
 @{" -joydev1 " Link "MorphOS-specific features"}                             MorphOS-specific features
 @{" -joydev1 " Link "Windows-specific features"}                             Windows-specific features
 @{" -joydev1 " Link "Unix-specific features"}                             Unix-specific features
 @{" -joydev1 " Link "SDL-specific features"}                             SDL-specific features
 @{" -joydev1 " Link "AmigaOS3-specific features"}                             AmigaOS3-specific features
 @{" -joydev1 " Link "AmigaOS4-specific features"}                             AmigaOS4-specific features
 @{" -joydev1 " Link "DOS-specific features"}                             DOS-specific features
 @{" -joydev1 " Link "BeOS-specific features"}                             BeOS-specific features
 @{" -joydev1 " Link "AROS-specific features"}                             AROS-specific features
 @{" -joydev2 " Link "AmigaOS4-specific features"}                             AmigaOS4-specific features
 @{" -joydev2 " Link "MorphOS-specific features"}                             MorphOS-specific features
 @{" -joydev2 " Link "Unix-specific features"}                             Unix-specific features
 @{" -joydev2 " Link "AmigaOS3-specific features"}                             AmigaOS3-specific features
 @{" -joydev2 " Link "BeOS-specific features"}                             BeOS-specific features
 @{" -joydev2 " Link "SDL-specific features"}                             SDL-specific features
 @{" -joydev2 " Link "AROS-specific features"}                             AROS-specific features
 @{" -joydev2 " Link "DOS-specific features"}                             DOS-specific features
 @{" -joydev2 " Link "Windows-specific features"}                             Windows-specific features
 @{" -joydisplay, +joydisplay " Link "BeOS-specific features"}             BeOS-specific features
 @{" -joyfuzz " Link "SDL-specific features"}                             SDL-specific features
 @{" -joyhwtype " Link "DOS-specific features"}                           DOS-specific features
 @{" -joymap " Link "SDL-specific features"}                              SDL-specific features
 @{" -joyopposite, +joyopposite " Link "Control port options"}           Control port options
 @{" -joythreshold " Link "SDL-specific features"}                        SDL-specific features
 @{" -keepaspect, +keepaspect " Link "Windows-specific features"}             Windows-specific features
 @{" -keepaspect, +keepaspect " Link "GTK-specific features"}             GTK-specific features
 @{" -keepaspect, +keepaspect " Link "XAW-specific features"}             XAW-specific features
 @{" -keepenv " Link "VSID-specific"}                             VSID-specific
 @{" -keepmonopen, +keepmonopen " Link "Monitor options"}           Monitor options
 @{" -kernal " Link "C128-specific"}                              C128-specific
 @{" -kernal " Link "VIC20 system ROM options"}                              VIC20 system ROM options
 @{" -kernal " Link "C64 system ROM options"}                              C64 system ROM options
 @{" -kernal " Link "CBM-II model"}                              CBM-II model
 @{" -kernal " Link "PET system ROM"}                              PET system ROM
 @{" -kernal " Link "VSID-specific"}                              VSID-specific
 @{" -kernal " Link "Monitor DTV features"}                              Monitor DTV features
 @{" -kernal <Name> " Link "PLUS4-specific"}                       PLUS4-specific
 @{" -kernal64 " Link "C128-specific"}                            C128-specific
 @{" -kernalch " Link "C128-specific"}                            C128-specific
 @{" -kernalde " Link "C128-specific"}                            C128-specific
 @{" -kernalfi " Link "C128-specific"}                            C128-specific
 @{" -kernalfr " Link "C128-specific"}                            C128-specific
 @{" -kernalit " Link "C128-specific"}                            C128-specific
 @{" -kernalno " Link "C128-specific"}                            C128-specific
 @{" -kernalrev " Link "C64 system ROM options"}                           C64 system ROM options
 @{" -kernalse " Link "C128-specific"}                            C128-specific
 @{" -keyboardmapping " Link "Keyboard options"}                     Keyboard options
 @{" -keyboardtype " Link "Keyboard options"}                        Keyboard options
 @{" -keybuf-delay " Link "Control port options"}                        Control port options
 @{" -keymap " Link "Keyboard options"}                              Keyboard options
 @{" -keyset, +keyset " Link "Control port options"}                     Control port options
 @{" -koalacrtctextcolor " Link "C500 data module"}                  C500 data module
 @{" -koalaoversize " Link "C500 data module"}                       C500 data module
 @{" -koalatedlum " Link "C500 data module"}                         C500 data module
 @{" -koalaundersize " Link "C500 data module"}                      C500 data module
 @{" -leds, +leds " Link "DOS-specific features"}                         DOS-specific features
 @{" -logfile " Link "Command-line initialization"}                             Command-line initialization
 @{" -machinetype " Link "C128-specific"}                         C128-specific
 @{" -magicvoice, +magicvoice " Link "C64 cartridges"}             C64 cartridges
 @{" -magicvoiceimage " Link "C64 cartridges"}                     C64 cartridges
 @{" -mcnvramfile " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" -mcnvramwriteback, +mcnvramwriteback " Link "VIC20 cartridges"} VIC20 cartridges
 @{" -memory " Link "VIC20 memconf options"}                              VIC20 memconf options
 @{" -memoryexphack " Link "PLUS4-specific"}                       PLUS4-specific
 @{" -memoryexphack " Link "C64 system ROM options"}                       C64 system ROM options
 @{" -menukey " Link "SDL-specific features"}                             SDL-specific features
 @{" -menukeycancel " Link "SDL-specific features"}                       SDL-specific features
 @{" -menukeydown " Link "SDL-specific features"}                         SDL-specific features
 @{" -menukeyexit " Link "SDL-specific features"}                         SDL-specific features
 @{" -menukeyleft " Link "SDL-specific features"}                         SDL-specific features
 @{" -menukeymap " Link "SDL-specific features"}                          SDL-specific features
 @{" -menukeyright " Link "SDL-specific features"}                        SDL-specific features
 @{" -menukeyselect " Link "SDL-specific features"}                       SDL-specific features
 @{" -menukeyup " Link "SDL-specific features"}                           SDL-specific features
 @{" -midi, +midi " Link "C64 I-O extension options"}                         C64 I-O extension options
 @{" -mididrv " Link "Unix-specific features"}                             Unix-specific features
 @{" -midiin " Link "Windows-specific features"}                              Windows-specific features
 @{" -midiin " Link "Unix-specific features"}                              Unix-specific features
 @{" -midiout " Link "Windows-specific features"}                             Windows-specific features
 @{" -midiout " Link "Unix-specific features"}                             Unix-specific features
 @{" -miditype " Link "C64 I-O extension options"}                            C64 I-O extension options
 @{" -mitshm, +mitshm " Link "XAW-specific features"}                     XAW-specific features
 @{" -mmc64, +mmc64 " Link "C64 cartridges"}                       C64 cartridges
 @{" -mmc64bios " Link "C64 cartridges"}                           C64 cartridges
 @{" -mmc64biosreadonly " Link "C64 cartridges"}                   C64 cartridges
 @{" -mmc64bioswrite " Link "C64 cartridges"}                      C64 cartridges
 @{" -mmc64flash, +mmc64flash " Link "C64 cartridges"}             C64 cartridges
 @{" -mmc64image " Link "C64 cartridges"}                          C64 cartridges
 @{" -mmc64readonly " Link "C64 cartridges"}                       C64 cartridges
 @{" -mmc64readwrite " Link "C64 cartridges"}                      C64 cartridges
 @{" -mmc64rev " Link "C64 cartridges"}                            C64 cartridges
 @{" -mmc64sdtype " Link "C64 cartridges"}                         C64 cartridges
 @{" -mmcrcardimage " Link "C64 cartridges"}                       C64 cartridges
 @{" -mmcrcardrw, +mmcrcardrw " Link "C64 cartridges"}             C64 cartridges
 @{" -mmcreepromimage " Link "C64 cartridges"}                     C64 cartridges
 @{" -mmcreepromrw, +mmcreepromrw " Link "C64 cartridges"}         C64 cartridges
 @{" -mmcrimagerw, +mmcrimagerw " Link "C64 cartridges"}           C64 cartridges
 @{" -mmcrrescue, +mmcrrescue " Link "C64 cartridges"}             C64 cartridges
 @{" -mmcrsdtype " Link "C64 cartridges"}                          C64 cartridges
 @{" -model " Link "C64 system ROM options"}                               C64 system ROM options
 @{" -model " Link "SCPU64-specific"}                               SCPU64-specific
 @{" -model " Link "CBM-II commandline options"}                               CBM-II commandline options
 @{" -model " Link "Monitor DTV features"}                               Monitor DTV features
 @{" -model " Link "PET settings"}                               PET settings
 @{" -model " Link "PLUS4-specific"}                               PLUS4-specific
 @{" -model " Link "C128-specific"}                               C128-specific
 @{" -model " Link "VIC20 cartridges"}                               VIC20 cartridges
 @{" -mousesensitivity " Link "Windows-specific features"}                    Windows-specific features
 @{" -myaciadev " Link "RS232 options"}                           RS232 options
 @{" -ntsc " Link "VIC20 cartridges"}                                VIC20 cartridges
 @{" -ntsc " Link "SCPU64-specific"}                                SCPU64-specific
 @{" -ntsc " Link "PLUS4-specific"}                                PLUS4-specific
 @{" -ntsc " Link "C64 system ROM options"}                                C64 system ROM options
 @{" -ntsc " Link "C128-specific"}                                C128-specific
 @{" -ntsc " Link "CBM-II commandline options"}                                CBM-II commandline options
 @{" -ntsc " Link "Monitor DTV features"}                                Monitor DTV features
 @{" -ntsc " Link "VSID-specific"}                                VSID-specific
 @{" -ntsc " Link "PET settings"}                                PET settings
 @{" -ntscold " Link "C64 system ROM options"}                             C64 system ROM options
 @{" -ntscold " Link "VSID-specific"}                             VSID-specific
 @{" -ntscold " Link "SCPU64-specific"}                             SCPU64-specific
 @{" -pal " Link "VSID-specific"}                                 VSID-specific
 @{" -pal " Link "Monitor DTV features"}                                 Monitor DTV features
 @{" -pal " Link "C128-specific"}                                 C128-specific
 @{" -pal " Link "C64 system ROM options"}                                 C64 system ROM options
 @{" -pal " Link "CBM-II commandline options"}                                 CBM-II commandline options
 @{" -pal " Link "VIC20 cartridges"}                                 VIC20 cartridges
 @{" -pal " Link "PET settings"}                                 PET settings
 @{" -pal " Link "SCPU64-specific"}                                 SCPU64-specific
 @{" -pal " Link "PLUS4-specific"}                                 PLUS4-specific
 @{" -paln " Link "VSID-specific"}                                VSID-specific
 @{" -paln " Link "C64 system ROM options"}                                C64 system ROM options
 @{" -paln " Link "SCPU64-specific"}                                SCPU64-specific
 @{" -parallel10 " Link "Drive options"}                          Drive options
 @{" -parallel11 " Link "Drive options"}                          Drive options
 @{" -parallel8 " Link "Drive options"}                           Drive options
 @{" -parallel9 " Link "Drive options"}                           Drive options
 @{" -petdww, +petdww " Link "PET I-O extensions"}                     PET I-O extensions
 @{" -petdwwimage " Link "PET I-O extensions"}                         PET I-O extensions
 @{" -pethre, +pethre " Link "PET I-O extensions"}                     PET I-O extensions
 @{" -petram9, +petram9 " Link "PET settings"}                   PET settings
 @{" -petramA, +petramA " Link "PET settings"}                   PET settings
 @{" -petreu, +petreu " Link "PET I-O extensions"}                     PET I-O extensions
 @{" -petreuimage " Link "PET I-O extensions"}                         PET I-O extensions
 @{" -petreuramsize " Link "PET I-O extensions"}                       PET I-O extensions
 @{" -playback " Link "C500 data module"}                            C500 data module
 @{" -plus256kimage " Link "C64 system ROM options"}                       C64 system ROM options
 @{" -plus60kbase " Link "C64 system ROM options"}                         C64 system ROM options
 @{" -plus60kimage " Link "C64 system ROM options"}                        C64 system ROM options
 @{" -poskeymap " Link "Keyboard options"}                           Keyboard options
 @{" -pr4drv " Link "Printer options"}                              Printer options
 @{" -pr4output " Link "Printer options"}                           Printer options
 @{" -pr4txtdev " Link "Printer options"}                           Printer options
 @{" -pr5drv " Link "Printer options"}                              Printer options
 @{" -pr5output " Link "Printer options"}                           Printer options
 @{" -pr5txtdev " Link "Printer options"}                           Printer options
 @{" -pr6drv " Link "Printer options"}                              Printer options
 @{" -pr6output " Link "Printer options"}                           Printer options
 @{" -pr6txtdev " Link "Printer options"}                           Printer options
 @{" -profdos1571 " Link "Drive options"}                         Drive options
 @{" -prtxtdev1 " Link "Printer options"}                           Printer options
 @{" -prtxtdev2 " Link "Printer options"}                           Printer options
 @{" -prtxtdev3 " Link "Printer options"}                           Printer options
 @{" -pruser, +pruser " Link "Printer options"}                     Printer options
 @{" -pruserdrv " Link "Printer options"}                           Printer options
 @{" -pruseroutput " Link "Printer options"}                        Printer options
 @{" -prusertxtdev " Link "Printer options"}                        Printer options
 @{" -ps2mouse, +ps2mouse " Link "Userport"}                 Userport
 @{" -ram08, +ram08 " Link "CBM-II commandline options"}                       CBM-II commandline options
 @{" -ram1, +ram1 " Link "CBM-II commandline options"}                         CBM-II commandline options
 @{" -ram2, +ram2 " Link "CBM-II commandline options"}                         CBM-II commandline options
 @{" -ram4, +ram4 " Link "CBM-II commandline options"}                         CBM-II commandline options
 @{" -ram6, +ram6 " Link "CBM-II commandline options"}                         CBM-II commandline options
 @{" -ramC, +ramC " Link "CBM-II commandline options"}                         CBM-II commandline options
 @{" -ramcart, +ramcart " Link "C64 cartridges"}                   C64 cartridges
 @{" -ramcartimage " Link "C64 cartridges"}                        C64 cartridges
 @{" -ramcartimagerw, +ramcartimagerw " Link "C64 cartridges"}     C64 cartridges
 @{" -ramcartro " Link "C64 cartridges"}                           C64 cartridges
 @{" -ramcartrw " Link "C64 cartridges"}                           C64 cartridges
 @{" -ramcartsize " Link "C64 cartridges"}                         C64 cartridges
 @{" -raminitpatterninvert " Link "Monitor options"}                Monitor options
 @{" -raminitstartvalue " Link "Monitor options"}                   Monitor options
 @{" -ramsize " Link "PET settings"}                             PET settings
 @{" -ramsize " Link "CBM-II commandline options"}                             CBM-II commandline options
 @{" -ramsize " Link "PLUS4-specific"}                             PLUS4-specific
 @{" -refresh " Link "Performance options"}                             Performance options
 @{" -reu, +reu " Link "C64 I-O extension options"}                           C64 I-O extension options
 @{" -reuimage " Link "C64 I-O extension options"}                            C64 I-O extension options
 @{" -reuimagerw, +reuimagerw " Link "C64 I-O extension options"}             C64 I-O extension options
 @{" -reusize " Link "C64 I-O extension options"}                             C64 I-O extension options
 @{" -rom9 " Link "PET system ROM"}                                PET system ROM
 @{" -romA " Link "PET system ROM"}                                PET system ROM
 @{" -romB " Link "PET system ROM"}                                PET system ROM
 @{" -rrbankjumper, +rrbankjumper " Link "C64 cartridges"}         C64 cartridges
 @{" -rrbioswrite, +rrbioswrite " Link "C64 cartridges"}           C64 cartridges
 @{" -rrflashjumper, +rrflashjumper " Link "C64 cartridges"}       C64 cartridges
 @{" -rrrev " Link "C64 cartridges"}                               C64 cartridges
 @{" -rsdev1baud " Link "Unix-specific features"}                          Unix-specific features
 @{" -rsdev2baud " Link "Unix-specific features"}                          Unix-specific features
 @{" -rsdev3baud " Link "Unix-specific features"}                          Unix-specific features
 @{" -rsdev4baud " Link "Unix-specific features"}                          Unix-specific features
 @{" -saveres, +saveres " Link "AmigaOS-specific features"}                   AmigaOS-specific features
 @{" -saveres, +saveres " Link "SDL-specific features"}                   SDL-specific features
 @{" -saveres, +saveres " Link "BeOS-specific features"}                   BeOS-specific features
 @{" -saveres, +saveres " Link "Windows-specific features"}                   Windows-specific features
 @{" -saveres, +saveres " Link "Unix-specific features"}                   Unix-specific features
 @{" -scpu64 " Link "SCPU64-specific"}                              SCPU64-specific
 @{" -sdlaspectmode " Link "SDL-specific features"}                       SDL-specific features
 @{" -sdlbitdepth " Link "SDL-specific features"}                         SDL-specific features
 @{" -sdlcustomh " Link "SDL-specific features"}                          SDL-specific features
 @{" -sdlcustomw " Link "SDL-specific features"}                          SDL-specific features
 @{" -sdlflipx, +sdlflipx " Link "SDL-specific features"}                 SDL-specific features
 @{" -sdlflipy, +sdlflipy " Link "SDL-specific features"}                 SDL-specific features
 @{" -sdllimitmode " Link "SDL-specific features"}                        SDL-specific features
 @{" -sfxse, +sfxse " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" -sfxse, +sfxse " Link "C64 I-O extension options"}                       C64 I-O extension options
 @{" -sfxseioswap, +sfxseioswap " Link "VIC20 cartridges"}           VIC20 cartridges
 @{" -sfxsetype " Link "C64 I-O extension options"}                           C64 I-O extension options
 @{" -sfxsetype " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" -sfxss, +sfxss " Link "C64 I-O extension options"}                       C64 I-O extension options
 @{" -sfxss, +sfxss " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" -sfxssioswap, +sfxssioswap " Link "VIC20 cartridges"}           VIC20 cartridges
 @{" -sidcart, +sidcart " Link "PLUS4-specific"}                   PLUS4-specific
 @{" -sidcart, +sidcart " Link "PET I-O extensions"}                   PET I-O extensions
 @{" -sidcart, +sidcart " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" -sidcartaddress " Link "PET I-O extensions"}                      PET I-O extensions
 @{" -sidcartaddress " Link "PLUS4-specific"}                      PLUS4-specific
 @{" -sidcartaddress " Link "VIC20 cartridges"}                      VIC20 cartridges
 @{" -sidcartclock " Link "PLUS4-specific"}                        PLUS4-specific
 @{" -sidcartclock " Link "VIC20 cartridges"}                        VIC20 cartridges
 @{" -sidcartclock " Link "PET I-O extensions"}                        PET I-O extensions
 @{" -sidcartjoy, +sidcartjoy " Link "PLUS4-specific"}             PLUS4-specific
 @{" -sidenginemodel " Link "SID options"}                      SID options
 @{" -sidfilters, +sidfilters " Link "SID options"}             SID options
 @{" -sidstereo " Link "SID options"}                           SID options
 @{" -sidstereoaddress " Link "SID options"}                    SID options
 @{" -sidtripleaddress " Link "SID options"}                    SID options
 @{" -simmsize " Link "SCPU64-specific"}                            SCPU64-specific
 @{" -singlecpu, +singlecpu " Link "Windows-specific features"}               Windows-specific features
 @{" -sound, +sound " Link "Sound options"}                       Sound options
 @{" -soundarg " Link "Sound options"}                            Sound options
 @{" -soundbufsize " Link "Sound options"}                        Sound options
 @{" -sounddev " Link "Sound options"}                            Sound options
 @{" -soundfragsize " Link "Sound options"}                       Sound options
 @{" -soundoutput " Link "Sound options"}                         Sound options
 @{" -soundrate " Link "Sound options"}                           Sound options
 @{" -soundrecarg " Link "Sound options"}                         Sound options
 @{" -soundrecdev " Link "Sound options"}                         Sound options
 @{" -soundsuspend " Link "Sound options"}                        Sound options
 @{" -soundsync " Link "Sound options"}                           Sound options
 @{" -soundvolume " Link "Sound options"}                         Sound options
 @{" -speech, +speech " Link "PLUS4-specific"}                     PLUS4-specific
 @{" -speechrom " Link "PLUS4-specific"}                           PLUS4-specific
 @{" -speed " Link "Performance options"}                               Performance options
 @{" -speedswitch, +speedswitch " Link "SCPU64-specific"}           SCPU64-specific
 @{" -ssramexpansion, +ssramexpansion " Link "C64 cartridges"}     C64 cartridges
 @{" -statusbar " Link "DOS-specific features"}                           DOS-specific features
 @{" -statusbar, +statusbar " Link "SDL-specific features"}               SDL-specific features
 @{" -statusbar, +statusbar " Link "AmigaOS-specific features"}               AmigaOS-specific features
 @{" -supercard " Link "Drive options"}                           Drive options
 @{" -superpet, +superpet " Link "PET settings"}                 PET settings
 @{" -symkeymap " Link "Keyboard options"}                           Keyboard options
 @{" -TEDaudioleak, +TEDaudioleak " Link "PLUS4-specific"}         PLUS4-specific
 @{" -TEDborders " Link "PLUS4-specific"}                          PLUS4-specific
 @{" -TEDbrightness " Link "PLUS4-specific"}                       PLUS4-specific
 @{" -TEDcontrast " Link "PLUS4-specific"}                         PLUS4-specific
 @{" -TEDcrtblur " Link "PLUS4-specific"}                          PLUS4-specific
 @{" -TEDcrtscanlineshade " Link "PLUS4-specific"}                 PLUS4-specific
 @{" -TEDdscan, +TEDdscan " Link "PLUS4-specific"}                 PLUS4-specific
 @{" -TEDdsize, +TEDdsize " Link "PLUS4-specific"}                 PLUS4-specific
 @{" -TEDextpal " Link "PLUS4-specific"}                           PLUS4-specific
 @{" -TEDfilter " Link "PLUS4-specific"}                           PLUS4-specific
 @{" -TEDfull, +TEDfull " Link "SDL-specific features"}                   SDL-specific features
 @{" -TEDfulldevice " Link "SDL-specific features"}                       SDL-specific features
 @{" -TEDfulldevice " Link "Unix-specific features"}                       Unix-specific features
 @{" -TEDgamma " Link "PLUS4-specific"}                            PLUS4-specific
 @{" -TEDhwscale, +TEDhwscale " Link "Unix-specific features"}             Unix-specific features
 @{" -TEDhwscale, +TEDhwscale " Link "SDL-specific features"}             SDL-specific features
 @{" -TEDintpal " Link "PLUS4-specific"}                           PLUS4-specific
 @{" -TEDoddlinesoffset " Link "PLUS4-specific"}                   PLUS4-specific
 @{" -TEDoddlinesphase " Link "PLUS4-specific"}                    PLUS4-specific
 @{" -TEDpalette " Link "PLUS4-specific"}                          PLUS4-specific
 @{" -TEDsaturation " Link "PLUS4-specific"}                       PLUS4-specific
 @{" -TEDSDLfullmode " Link "SDL-specific features"}                      SDL-specific features
 @{" -TEDtint " Link "PLUS4-specific"}                             PLUS4-specific
 @{" -TEDvcache, +TEDvcache " Link "PLUS4-specific"}               PLUS4-specific
 @{" -TEDVidmodefullmode " Link "XAW-specific features"}                  XAW-specific features
 @{" -TEDXRANDRfullmode " Link "XAW-specific features"}                   XAW-specific features
 @{" -triplebuf, +triplebuf " Link "DOS-specific features"}               DOS-specific features
 @{" -trueaspect, +trueaspect " Link "XAW-specific features"}             XAW-specific features
 @{" -trueaspect, +trueaspect " Link "GTK-specific features"}             GTK-specific features
 @{" -trueaspect, +trueaspect " Link "Windows-specific features"}             Windows-specific features
 @{" -truedrive, +truedrive " Link "Drive options"}               Drive options
 @{" -trueflashfs, +trueflashfs " Link "C64DTV ROM image"}           C64DTV ROM image
 @{" -tune " Link "VSID-specific"}                                VSID-specific
 @{" -umwriteback, +umwriteback " Link "VIC20 cartridges"}           VIC20 cartridges
 @{" -userportdac, +userportdac " Link "PET I-O extensions"}           PET I-O extensions
 @{" -userportjoy, +userportjoy " Link "Control port options"}           Control port options
 @{" -userportjoytype " Link "Control port options"}                     Control port options
 @{" -userportrtc, +userportrtc " Link "Misc options"}           Misc options
 @{" -userportrtcsave, +userportrtcsave " Link "Misc options"}   Misc options
 @{" -vblanksync, +vblanksync " Link "Windows-specific features"}             Windows-specific features
 @{" -VDC16KB " Link "C128-specific"}                             C128-specific
 @{" -VDC64KB " Link "C128-specific"}                             C128-specific
 @{" -VDCaudioleak, +VDCaudioleak " Link "C128-specific"}         C128-specific
 @{" -VDCbrightness " Link "C128-specific"}                       C128-specific
 @{" -VDCcontrast " Link "C128-specific"}                         C128-specific
 @{" -VDCcrtblur " Link "C128-specific"}                          C128-specific
 @{" -VDCcrtscanlineshade " Link "C128-specific"}                 C128-specific
 @{" -VDCdscan, +VDCdscan " Link "C128-specific"}                 C128-specific
 @{" -VDCdsize, +VDCdsize " Link "C128-specific"}                 C128-specific
 @{" -VDCextpal " Link "C128-specific"}                           C128-specific
 @{" -VDCfilter " Link "C128-specific"}                           C128-specific
 @{" -VDCfull, +VDCfull " Link "SDL-specific features"}                   SDL-specific features
 @{" -VDCgamma " Link "C128-specific"}                            C128-specific
 @{" -VDChwscale, +VDChwscale " Link "SDL-specific features"}             SDL-specific features
 @{" -VDChwscale, +VDChwscale " Link "Unix-specific features"}             Unix-specific features
 @{" -VDCintpal " Link "C128-specific"}                           C128-specific
 @{" -VDCoddlinesoffset " Link "C128-specific"}                   C128-specific
 @{" -VDCoddlinesphase " Link "C128-specific"}                    C128-specific
 @{" -VDCpalette " Link "C128-specific"}                          C128-specific
 @{" -VDCRevision " Link "C128-specific"}                         C128-specific
 @{" -VDCsaturation " Link "C128-specific"}                       C128-specific
 @{" -VDCSDLfullmode " Link "SDL-specific features"}                      SDL-specific features
 @{" -VDCstretchvertical, +VDCstretchvertical " Link "C128-specific"} C128-specific
 @{" -VDCtint " Link "C128-specific"}                             C128-specific
 @{" -VDCvcache, +VDCvcache " Link "C128-specific"}               C128-specific
 @{" -VDCVidmodefullmode " Link "XAW-specific features"}                  XAW-specific features
 @{" -VDCXRANDRfullmode " Link "XAW-specific features"}                   XAW-specific features
 @{" -vgamode " Link "DOS-specific features"}                             DOS-specific features
 @{" -VICaudioleak, +VICaudioleak " Link "VIC20 cartridges"}         VIC20 cartridges
 @{" -VICborders " Link "VIC20 cartridges"}                          VIC20 cartridges
 @{" -VICbrightness " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" -VICcontrast " Link "VIC20 cartridges"}                         VIC20 cartridges
 @{" -VICcrtblur " Link "VIC20 cartridges"}                          VIC20 cartridges
 @{" -VICcrtscanlineshade " Link "VIC20 cartridges"}                 VIC20 cartridges
 @{" -VICdscan, +VICdscan " Link "VIC20 cartridges"}                 VIC20 cartridges
 @{" -VICdsize, +VICdsize " Link "VIC20 cartridges"}                 VIC20 cartridges
 @{" -VICextpal " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" -VICfilter " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" -VICfull, +VICfull " Link "SDL-specific features"}                   SDL-specific features
 @{" -VICfulldevice " Link "SDL-specific features"}                       SDL-specific features
 @{" -VICfulldevice " Link "Unix-specific features"}                       Unix-specific features
 @{" -VICgamma " Link "VIC20 cartridges"}                            VIC20 cartridges
 @{" -VIChwscale, +VIChwscale " Link "Unix-specific features"}             Unix-specific features
 @{" -VIChwscale, +VIChwscale " Link "SDL-specific features"}             SDL-specific features
 @{" -VICIIaudioleak, +VICIIaudioleak " Link "VIC-II options"}     VIC-II options
 @{" -VICIIborders " Link "VIC-II options"}                        VIC-II options
 @{" -VICIIbrightness " Link "VIC-II options"}                     VIC-II options
 @{" -VICIIchecksb, +VICIIchecksb " Link "VIC-II options"}         VIC-II options
 @{" -VICIIcheckss, +VICIIcheckss " Link "VIC-II options"}         VIC-II options
 @{" -VICIIcontrast " Link "VIC-II options"}                       VIC-II options
 @{" -VICIIcrtblur " Link "VIC-II options"}                        VIC-II options
 @{" -VICIIcrtscanlineshade " Link "VIC-II options"}               VIC-II options
 @{" -VICIIdscan, +VICIIdscan " Link "VIC-II options"}             VIC-II options
 @{" -VICIIdsize, +VICIIdsize " Link "VIC-II options"}             VIC-II options
 @{" -VICIIextpal " Link "VIC-II options"}                         VIC-II options
 @{" -VICIIfilter " Link "VIC-II options"}                         VIC-II options
 @{" -VICIIfull, +VICIIfull " Link "SDL-specific features"}               SDL-specific features
 @{" -VICIIfulldevice " Link "Unix-specific features"}                     Unix-specific features
 @{" -VICIIfulldevice " Link "SDL-specific features"}                     SDL-specific features
 @{" -VICIIgamma " Link "VIC-II options"}                          VIC-II options
 @{" -VICIIhwscale, +VICIIhwscale " Link "SDL-specific features"}         SDL-specific features
 @{" -VICIIhwscale, +VICIIhwscale " Link "Unix-specific features"}         Unix-specific features
 @{" -VICIIintpal " Link "VIC-II options"}                         VIC-II options
 @{" -VICIImodel " Link "VIC-II options"}                          VIC-II options
 @{" -VICIInewluminance, +VICIInewluminance " Link "VIC-II options"} VIC-II options
 @{" -VICIIoddlinesoffset " Link "VIC-II options"}                 VIC-II options
 @{" -VICIIoddlinesphase " Link "VIC-II options"}                  VIC-II options
 @{" -VICIIpalette " Link "VIC-II options"}                        VIC-II options
 @{" -VICIIsaturation " Link "VIC-II options"}                     VIC-II options
 @{" -VICIISDLfullmode " Link "SDL-specific features"}                    SDL-specific features
 @{" -VICIItint " Link "VIC-II options"}                           VIC-II options
 @{" -VICIIvcache, +VICIIvcache " Link "VIC-II options"}           VIC-II options
 @{" -VICIIVidmodefullmode " Link "XAW-specific features"}                XAW-specific features
 @{" -VICIIvspbug, +VICIIvspbug " Link "VIC-II options"}           VIC-II options
 @{" -VICIIXRANDRfullmode " Link "XAW-specific features"}                 XAW-specific features
 @{" -VICintpal " Link "VIC20 cartridges"}                           VIC20 cartridges
 @{" -VICoddlinesoffset " Link "VIC20 cartridges"}                   VIC20 cartridges
 @{" -VICoddlinesphase " Link "VIC20 cartridges"}                    VIC20 cartridges
 @{" -VICpalette " Link "VIC20 cartridges"}                          VIC20 cartridges
 @{" -VICsaturation " Link "VIC20 cartridges"}                       VIC20 cartridges
 @{" -VICSDLfullmode " Link "SDL-specific features"}                      SDL-specific features
 @{" -VICtint " Link "VIC20 cartridges"}                             VIC20 cartridges
 @{" -VICvcache, +VICvcache " Link "VIC20 cartridges"}               VIC20 cartridges
 @{" -VICVidmodefullmode " Link "XAW-specific features"}                  XAW-specific features
 @{" -VICXRANDRfullmode " Link "XAW-specific features"}                   XAW-specific features
 @{" -videooverlay, +videooverlay " Link "AmigaOS3-specific features"}         AmigaOS3-specific features
 @{" -videooverlay, +videooverlay " Link "AROS-specific features"}         AROS-specific features
 @{" -videooverlay, +videooverlay " Link "MorphOS-specific features"}         MorphOS-specific features
 @{" -videosize " Link "PET settings"}                           PET settings
 @{" -virtualdev, +virtualdev " Link "No traps options"}             No traps options
 @{" -warp, +warp " Link "Performance options"}                         Performance options
 @{" -xsync, +xsync " Link "XAW-specific features"}                       XAW-specific features

@EndNode

