Annotation of hatari/doc/manual.html, revision 1.1.1.16

1.1       root        1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                      2: <html>
                      3: <head>
                      4:   <title>Hatari User's Manual</title>
1.1.1.3   root        5:   <meta name="description"
                      6:  content="User's manual for the Atari ST emulator Hatari">
1.1.1.8   root        7:   <meta name="author" content="Hatari development team">
1.1       root        8:   <meta name="keywords" content="hatari, documentation, manual, linux">
                      9:   <meta name="resource-type" content="document">
                     10:   <meta name="distribution" content="global">
1.1.1.5   root       11:   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
1.1       root       12:   <meta http-equiv="Content-Style-Type" content="text/css">
                     13:   <style type="text/css">
                     14:   <!--
1.1.1.11  root       15:        body {  background:#FFFFFF;
1.1.1.2   root       16:                color:#000000;
1.1.1.7   root       17:                margin-left:10px;
1.1.1.2   root       18:                margin-right:10px;
1.1.1.8   root       19:                font-family:Verdana,Arial,Helvetica,sans-serif;
1.1.1.2   root       20:                }
1.1       root       21: 
1.1.1.8   root       22:        h2 { border-bottom:solid thin black;}
                     23:        h4.gui { clear:right }
1.1.1.10  root       24:        h5 { margin-bottom:2px; margin-left:1em; }
                     25: 
                     26:        pre {   color: black;
1.1.1.11  root       27:                background:#eeeeee;
1.1.1.10  root       28:                margin: 0px 20px 8px 20px;
                     29:                padding: 2px 8px 1px 8px;
                     30:                border: solid thin #ccaa88;
                     31:                }
1.1       root       32: 
1.1.1.8   root       33:        td { font-family:Verdana,Arial,Helvetica,sans-serif; }
1.1       root       34: 
1.1.1.11  root       35:        a:link { color:#000099; background:#ffffff; text-decoration:none; }
                     36:        a:visited { color:#cc0000; background:#ffffff; text-decoration:none;}
                     37:        a:hover { color:#0000ff; background:#ffffff; text-decoration:none; }
                     38:        a:active { color:#993399; background:#ffffff; text-decoration:none; }
                     39: 
1.1.1.12  root       40:        .pageheader { text-align:center; }
1.1.1.11  root       41:        .commandline { font-family:Courier,monospace; font-size:90% }
                     42:        .file { color: #000088;}
                     43:        .button { color:#000000; background:#c0c0c0; border:outset thin gray; font-family:Courier,monospace; padding-left:1em; padding-right:1em;}
                     44:        .key { color:#550000; font-family:Courier,monospace; font-size:90% }
                     45:        .backdropped { background:#ffffee; }
                     46:        .image {margin-left: 5px; margin-right: 5px; border-width:2px; border-style:solid; border-color:#eeeeff; padding:1cm; text-align:center; }
                     47:        .floatimage { clear:right; float:right; margin-left:0.5cm; border-width:2px; border-style:solid; border-color:#eeeeff; padding:0.5cm; }
1.1       root       48: 
                     49:   -->
                     50:   </style>
                     51: </head>
1.1.1.5   root       52: 
                     53: <body>
                     54: 
1.1.1.12  root       55: <h1 class="pageheader">Hatari User's Manual</h1>
1.1.1.5   root       56: 
1.1.1.12  root       57: <p class="pageheader">
1.1.1.16! root       58: Version 1.6.2
1.1.1.3   root       59: </p>
1.1.1.12  root       60: <p class="pageheader">
1.1.1.8   root       61: Manual written by: <strong>Thomas Huth</strong>, <strong>Matthias Arndt</strong>
1.1.1.10  root       62:  &amp; <strong>Eero Tamminen</strong>
1.1.1.2   root       63: </p>
1.1.1.12  root       64: <p class="pageheader">
1.1.1.14  root       65: Hatari on the WWW: <strong><a href="http://hatari.tuxfamily.org/"
                     66:  target="_blank">http://hatari.tuxfamily.org/</a></strong>
1.1.1.2   root       67: </p>
1.1       root       68: 
1.1.1.5   root       69: <h2>Index</h2>
                     70: <ul>
                     71:   <li><a href="#Introduction">Introduction</a>
                     72:   <ul>
                     73:     <li><a href="#General description">General description</a>
                     74:     <li><a href="#Features">Features</a>
1.1.1.7   root       75:     <li><a href="#STE hardware emulation">STE hardware emulation</a>
1.1.1.12  root       76:     <li><a href="#TT hardware emulation">Experimental TT hardware emulation</a>
                     77:     <li><a href="#Falcon hardware emulation">Falcon hardware emulation</a>
1.1.1.5   root       78:     <li><a href="#System requirements">System requirements</a>
                     79:   </ul>
                     80:   <li><a href="#Compiling and running">Compiling and running</a>
                     81:   <ul>
                     82:     <li><a href="#Compiling Hatari">Compiling Hatari</a>
                     83:     <li><a href="#Installation of a TOS ROM">Installation of a TOS ROM</a>
                     84:     <li><a href="#Installation of the binary">Installation of the binary</a>
                     85:     <li><a href="#Running Hatari for the first time">Running Hatari for the first time</a>
                     86:   </ul>
1.1.1.13  root       87:   <li><a href="#Command line options">Command line options and arguments</a>
1.1.1.5   root       88:   <li><a href="#Using the emulated system">Using the emulated system</a>
                     89:   <ul>
                     90:     <li><a href="#The GUI">The GUI</a>
                     91:     <ul>
                     92:       <li><a href="#The Main Menu">The Main Menu</a>
1.1.1.10  root       93:       <li><a href="#The File Selector Dialog">The File Selector Dialog</a>
1.1.1.5   root       94:       <li><a href="#The System Dialog">The System Dialog</a>
1.1.1.10  root       95:       <li><a href="#The Floppy Disks Dialog">The Floppy Disks Dialog</a>
                     96:       <li><a href="#The Hard Disks Dialog">The Hard Disks Dialog</a>
1.1.1.5   root       97:       <li><a href="#The Memory Dialog">The Memory Dialog</a>
                     98:       <li><a href="#The ROM Dialog">The ROM Dialog</a>
                     99:       <li><a href="#The Joystick Dialog">The Joystick Dialog</a>
1.1.1.12  root      100:       <li><a href="#The Atari Monitor Dialog">The Atari Monitor Dialog</a>
                    101:       <li><a href="#The Hatari Screen Dialog">The Hatari Screen Dialog</a>
1.1.1.5   root      102:       <li><a href="#The Keyboard Dialog">The Keyboard Dialog</a>
                    103:       <li><a href="#The Sound Dialog">The Sound Dialog</a>
                    104:       <li><a href="#The Devices Dialog">The Devices Dialog</a>
                    105:     </ul>
                    106:     <li><a href="#Keyboard shortcuts">Keyboard shortcuts</a>
                    107:     <li><a href="#Emulated Atari ST keyboard">Emulated Atari ST keyboard</a>
                    108:     <li><a href="#Emulated mouse">Emulated mouse</a>
                    109:     <li><a href="#Emulated joystick">Emulated joystick</a>
                    110:     <li><a href="#Emulated video">Emulated video</a>
                    111:     <li><a href="#Emulated printer">Emulated printer</a>
                    112:     <li><a href="#Emulated RS232">Emulated RS232</a>
                    113:   </ul>
                    114:   <li><a href="#Floppy disk images">Floppy disk images</a>
                    115:   <li><a href="#Hard disk support">Hard disk support</a>
1.1.1.6   root      116:   <ul>
                    117:     <li><a href="#GEMDOS based hard disk emulation">GEMDOS based hard disk emulation</a></li>
1.1.1.10  root      118:     <li><a href="#ACSI hard disk emulation">ACSI hard disk emulation</a></li>
                    119:     <li><a href="#IDE hard disk emulation">IDE hard disk emulation</a></li>
1.1.1.12  root      120:   </ul>
                    121:   <li><a href="#Moving files to/from hard disk images">Moving files to/from hard disk images</a>
                    122:   <ul>
                    123:     <li><a href="#Using HD Driver with GEMDOS partitions">Using HD Driver with GEMDOS partitions</a></li>
                    124:     <li><a href="#Accessing HDD image partitions outside of Hatari">Accessing HDD image partitions outside of Hatari</a></li>
1.1.1.10  root      125:   </ul>
                    126:   <li><a href="#The debugger">The debugger</a>
1.1.1.12  root      127:   <ul>
                    128:     <li><a href="#General debugger use">General debugger use</a>
                    129:     <li><a href="#Inspecting emulation state">Inspecting emulation state</a>
                    130:     <li><a href="#Debug symbols">Debug symbols</a>
                    131:     <li><a href="#Breakpoints">Breakpoints</a>
                    132:     <li><a href="#Tracing">Tracing</a>
1.1.1.13  root      133:     <li><a href="#Profiling">Profiling</a>
                    134:     <li><a href="#Usage examples">Usage examples</a>
1.1.1.12  root      135:     <li><a href="#Build notes">Build notes</a>
                    136:   </ul>
1.1.1.10  root      137:   <li><a href="#Performance">Performance</a>
                    138:   <ul>
                    139:     <li><a href="#Improving Hatari performance">Improving Hatari performance</a>
1.1.1.13  root      140:     <li><a href="#Emulation options">Emulation options</a>
                    141:     <li><a href="#Emulator options">Emulator options</a>
1.1.1.10  root      142:     <li><a href="#Measuring the performance">Measuring the performance</a>
1.1.1.6   root      143:   </ul>
1.1.1.5   root      144:   <li><a href="#Appendix">Appendix</a>
                    145:   <ul>
                    146:     <li><a href="#Copying">Copying</a>
                    147:     <li><a href="#Introduction to Emulation">Introduction to Emulation</a>
                    148:   </ul>
                    149: </ul>
                    150: 
                    151: 
                    152: <a name="Introduction"></a><h2>Introduction</h2>
1.1       root      153: 
1.1.1.5   root      154: <a name="General description"></a><h3>General description</h3>
1.1       root      155: <p>
1.1.1.13  root      156: Hatari is an Atari ST, STE, TT and Falcon emulator for Linux, OSX,
                    157: Windows and other Systems which are supported by the SDL library.
1.1.1.4   root      158: The emulator is open source software and is distributed under the terms of the
1.1.1.7   root      159: <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General
                    160: Public License (GPL)</a>.
1.1.1.4   root      161: </p>
                    162: <p>
1.1.1.3   root      163: The Atari ST was a 16/32 bit computer system which was first released by Atari
1.1.1.4   root      164: in 1985. Using the Motorola 68000 CPU, it was a very popular computer having
                    165: quite a lot of CPU power at that time. See Appendix B for details on emulation
                    166: in general.
1.1.1.3   root      167: </p>
                    168: <p>
1.1.1.4   root      169: Unlike many other Atari ST emulators which try to give you a good
                    170: environment for running GEM applications, Hatari tries to emulate the hardware
                    171: of a ST as close as possible so that it is able to run most of the old ST games
                    172: and demos. Of course you can run normal GEM applications with Hatari, too.
1.1.1.13  root      173: Recent versions of Hatari even feature STE, Falcon and basic TT emulation.
1.1       root      174: </p>
                    175: 
1.1.1.5   root      176: <a name="Features"></a><h3>Features</h3>
1.1       root      177: <ul>
1.1.1.16! root      178:   <li>68000 - 68040 emulation via the UAE CPU core
        !           179:       (MMU emulation only with the WinUAE CPU core)</li>
1.1.1.7   root      180:   <li>ST RAM size variable (from 512kiB up to 14MiB are possible)</li>
1.1.1.3   root      181:   <li>optional cartridge images for the ST ROM port</li>
1.1.1.2   root      182:   <li>most of the ST specific hardware</li>
1.1       root      183:   <li>ST Shifter with ST-High, ST-Medium and ST-Low resolutions,
1.1.1.7   root      184:     overscan effects for all borders in color resolutions</li>
1.1.1.6   root      185:   <li>512 color ST palette</li>
1.1.1.13  root      186:   <li>Spec512 mode support for low and medium resolutions</li>
1.1.1.7   root      187:   <li>many raster effects </li>
1.1.1.8   root      188:   <li>scaling of low resolutions by factor two</li>
1.1.1.7   root      189:   <li>interleaved lines rendering of ST-medium and (scaled) ST-low
                    190:     resolutions for the TV "monitor type"</li>
1.1.1.8   root      191:   <li>Blitter chip emulation</li>
1.1.1.2   root      192:   <li>PSG YM2149 emulation (soundchip) including STFM samples</li>
1.1.1.8   root      193:   <li>Printer port emulation on hardware level (print to file)</li>
1.1.1.10  root      194:   <li>RS232 emulation</li>
                    195:   <li>MIDI input/output/through emulation</li>
1.1       root      196:   <li>Mega ST real time clock</li>
1.1.1.3   root      197:   <li>IKBD emulation (keyboard, mouse and joystick) with custom
1.1.1.7   root      198:     keyboard mapping</li>
1.1       root      199:   <li>joystick emulation via cursor keys and joystick emulation via a
1.1.1.7   root      200:     connected PC joystick</li>
1.1.1.3   root      201:   <li>FDC emulation using floppy disk images in standard formats (*.ST,
1.1.1.7   root      202:     *.MSA and *.DIM)</li>
1.1.1.5   root      203:   <li>support for packed disk images (PkZip and Gzip)</li>
1.1.1.12  root      204:   <li>optional write-protection for floppy disk images</li>
1.1.1.2   root      205:   <li>partial ACSI emulation for harddisk support</li>
1.1.1.12  root      206:   <li>GEMDOS interface driver to mount directories as harddrives
                    207:     with optional write-protection</li>
1.1.1.7   root      208:   <li>support for memory snapshots (save whole system state)</li>
1.1.1.2   root      209:   <li>driver for extended VDI resolutions</li>
                    210:   <li>recording of sound as .WAV and .YM files</li>
1.1.1.8   root      211:   <li>screenshots in PNG or BMP format</li>
1.1.1.12  root      212:   <li>AVI animation capturing with sound</li>
1.1.1.8   root      213:   <li>TOS versions 1.00, 1.02, 1.04 and 2.06 (and EmuTOS) can be used in ST mode.</li>
1.1       root      214: </ul>
1.1.1.5   root      215: 
1.1.1.7   root      216: <a name="STE hardware emulation"></a>
                    217: <h4>STE hardware emulation</h4>
1.1.1.13  root      218: <p>There is support for following additional STE features:</p>
1.1.1.5   root      219: <ul>
                    220:   <li>horizontal and vertical hardware fine scrolling</li>
                    221:   <li>split screen techniques / in-screen video address manipulations</li>
1.1.1.8   root      222:   <li>(STE specific) left border opening</li>
1.1.1.5   root      223:   <li>4096 colors STE palette</li>
1.1.1.12  root      224:   <li>Stereo DMA sample sound</li>
                    225:   <li>Experimental Microwire/LMC1992 emulation</li>
1.1.1.7   root      226:   <li>STE joypads</li>
1.1.1.8   root      227:   <li>TOS versions 1.06, 1.62, 2.05 and 2.06 (and EmuTOS) can be used in STE mode.</li>
1.1.1.5   root      228: </ul>
                    229: 
1.1.1.12  root      230: <a name="TT hardware emulation"></a>
                    231: <h4>Experimental TT hardware emulation</h4>
1.1.1.13  root      232: <p>There is support for following additional TT features:</p>
1.1.1.7   root      233: <ul>
                    234:   <li>TT low/med/high resolution support</li>
                    235:   <li>ST/TT palette switching and video shifter</li>
                    236:   <li>RAM upto 14MiB (ST-RAM only, there is no support for TT-RAM yet)</li>
1.1.1.8   root      237:   <li>Only TOS version 3.06 (and EmuTOS) can be used in TT mode.</li>
1.1.1.7   root      238: </ul>
                    239: 
1.1.1.12  root      240: <a name="Falcon hardware emulation"></a>
                    241: <h4>Falcon hardware emulation</h4>
1.1.1.13  root      242: <p>There is support for following additional Falcon features:</p>
1.1.1.7   root      243: <ul>
1.1.1.16! root      244:   <li>Partial Videl and Videl borders emulation for all Falcon screen modes</li>
1.1.1.12  root      245:   <li>Aspect correction and scaling of small resolutions by an integer factor</li>
1.1.1.7   root      246:   <li>STE/Falcon palette switching and shifter</li>
                    247:   <li>Mono/RGB/VGA/TV monitor types</li>
1.1.1.12  root      248:   <li>DSP co-processor emulation</li>
                    249:   <li>Experimental microphone (jack) emulation</li>
                    250:   <li>Experimental Crossbar sound matrix (ADC (mic & PSG), DAC, DMA, DSP)
                    251:       interconnect emulation + support for the additional DMA sound
                    252:       sample rates</li>
                    253:   <li>Experimental IDE master and slave emulation for harddisk support</li>
1.1.1.8   root      254:   <li>TOS versions 4.00, 4.02, 4.04 and 4.92 (and EmuTOS) can be used in Falcon mode.</li>
1.1.1.7   root      255: </ul>
                    256: 
1.1.1.12  root      257: <p>See the developers' <span class="file">doc/todo.txt</span> file
                    258: (included with Hatari sources) for the details on the few remaining
                    259: emulation gaps and the <a href="compatibility.html">Hatari Atari
                    260: Software Compatibility List</a> for which Atari programs are known
                    261: to be affected by them.</p>
1.1.1.5   root      262: 
                    263: 
                    264: <a name="System requirements"></a><h3>System requirements</h3>
                    265: 
1.1.1.13  root      266: <p> Hatari currently has the following minimum system requirements:</p>
1.1       root      267: <ul>
1.1.1.12  root      268:   <li>a fast PC (&gt;500MHz, for Falcon and TT emulation
                    269:       <a href="#Performance">even faster</a>)</li>
1.1.1.3   root      270:   <li>some sort of Unix (preferable <a href="http://www.linux.org/">GNU/Linux</a>)
                    271:   </li>
1.1       root      272:   <li>the SDL library (<a href="http://www.libsdl.org/">http://www.libsdl.org/</a>)</li>
1.1.1.3   root      273:   <li>the zLib (<a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a>)
1.1.1.12  root      274:       for support of ZIP-packed disk images (*.zip and *.gz)</li>
1.1       root      275: </ul>
1.1.1.5   root      276: 
                    277: <p>
1.1.1.14  root      278: In the course of time Hatari has successfully been tested by various people on
1.1.1.5   root      279: the following systems:
                    280: </p>
1.1       root      281: <ul>
1.1.1.8   root      282:   <li>Linux/i86 with Kernel 2.4.x and 2.6.x</li>
                    283:   <li>Linux/PPC with Kernel 2.4.x and 2.6.x</li>
1.1.1.14  root      284:   <li>BeOS/i86</li>
1.1.1.13  root      285:   <li>Apple Mac OS X on PowerPC and i86</li>
1.1.1.14  root      286:   <li>NetBSD 1.6 on i86</li>
1.1.1.4   root      287:   <li>NetBSD on a Digital Alpha</li>
1.1.1.8   root      288:   <li>FreeBSD 4.1 on an i486, FreeBSD 4.8 on a Pentium 4 and FreeBSD 5.1</li>
1.1.1.14  root      289:   <li>OpenBSD 3.5 and 5.0</li>
1.1.1.4   root      290:   <li>Solaris 8 on a SUN UltraSparc 1</li>
1.1.1.8   root      291:   <li>Linux/ARM (oabi) on Sharp Zaurus SL-C760 PDA</li>
1.1.1.12  root      292:   <li>Linux/ARM (eabi) on Nokia Maemo Internet Tablets and N900 phone</li>
1.1.1.14  root      293:   <li>Windows XP</li>
1.1       root      294: </ul>
1.1.1.5   root      295: 
                    296: <a name="Compiling and running"></a><h2>Compiling and running</h2>
                    297: 
                    298: <a name="Compiling Hatari"></a><h3>Compiling Hatari</h3>
                    299: 
1.1.1.13  root      300: <p>Required:</p>
                    301: <ul>
                    302: <li>A C compiler. Preferably GCC, but others have worked too.</li>
                    303: <li>A working CMake installation. See
                    304: <a href="http://www.cmake.org/">http://www.cmake.org/</a> for details.
                    305: <li>The SDL library v1.2.10 or newer. You can get it from
                    306: <a href="http://www.libsdl.org/">http://www.libsdl.org/</a>.
                    307: </li>
                    308: <li>The zLib compression library. You can get it from
                    309: <a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a>.
                    310: </li>
                    311: </ul>
                    312: 
                    313: <p>Optional:</p>
                    314: <ul>
                    315: <li>The PNG image library for PNG format screenshots and to
                    316: decrease AVI video recording file sizes. You can get it from
                    317: <a href="http://www.libpng.org/">http://www.libpng.org/</a>.</li>
                    318: <li>The GNU Readline library for Hatari debugger command line editing.</li>
                    319: <li>The Xlib library to support Hatari Python UI window embedding
                    320: on systems with the X window system (Linux and other unixes).</li>
                    321: <li>The portaudio library for Falcon microphone recording support</li>
                    322: </ul>
                    323: <p>
                    324: The versions available in your Linux distribution will be sufficient
                    325: in most cases, but make sure you have also the header files installed
                    326: for the libraries as well! Typically they're in a corresponding -dev
                    327: package.
1.1.1.3   root      328: </p>
1.1.1.13  root      329: 
                    330: <p>
                    331: After you've verified that you have the required libraries and their
                    332: development files, change to the <span class="file">hatari/</span>
                    333: directory.  Create a <span class="file">build/</span> directory under
                    334: it and configure the build system for your environment:
1.1.1.10  root      335: <pre>
1.1.1.13  root      336: mkdir -p build
                    337: cd build
                    338: cmake ..
1.1.1.10  root      339: </pre>
1.1.1.3   root      340: <p>
                    341: Then compile Hatari by typing <span class="commandline">make</span>.
1.1.1.13  root      342: If all works fine, you'll get the executable <span class="commandline">hatari</span>
1.1.1.3   root      343: in the src/ subdirectory.
1.1.1.2   root      344: </p>
1.1.1.13  root      345: <p>
                    346: Note: Instead of calling CMake directly, you can also use the supplied
                    347: configure script to run CMake and to give the arguments (like install
                    348: prefix) in a format familiar from GNU Autotools using programs.  Type
                    349: "<span class="commandline">./configure --help</span>"
                    350: to see all the options supported by this script.
                    351: </p>
1.1.1.5   root      352: 
                    353: <a name="Installation of a TOS ROM"></a><h3>Installation of a TOS ROM</h3>
                    354: 
1.1.1.6   root      355: <p>
                    356: Before you can start Hatari, you have to copy a TOS ROM image to the data
1.1.1.13  root      357: directory (<span class="file">&lt;prefix&gt;/share/hatari/</span>, by
                    358: default <span class="file">/usr/local/share/hatari/</span>) and
1.1.1.3   root      359: rename it to <span class="commandline">tos.img</span>, or use the
                    360: <span class="commandline">--tos</span> command line option to tell
                    361: Hatari where to find a TOS ROM.
1.1       root      362: Hatari needs a TOS ROM image because this contains the operating system
1.1.1.6   root      363: of the emulated Atari.
                    364: </p>
                    365: <p>
                    366: Unfortunately it is not possible to ship an original ROM
1.1.1.5   root      367: image with the Hatari package since these images are still copyrighted.
                    368: But you can easily create an image with a real ST and one of those various
1.1.1.12  root      369: ROM-image programs for the ST (search for "TOSDUMP" with your
1.1.1.5   root      370: favourite internet search engine). If your old ST does not work anymore, you
                    371: can also try to search the internet directly for corresponding TOS ROM image,
                    372: but don't ask the Hatari team where to get one. </p>
                    373: <p> Another solution is EmuTOS, which is also shipped with the official
                    374: release versions of Hatari. EmuTOS is an open-source TOS clone. You can find
                    375: it at:
                    376: <a href="http://emutos.sourceforge.net/">http://emutos.sourceforge.net/</a>.
                    377: It is not the best solution for playing games or running other old software
1.1.1.8   root      378: due to compatibility issues (see <span class="file">emutos.txt</span> for
                    379: more details), but it's free and compatible with Hatari.</p>
1.1       root      380: <p>If you do not specify a TOS image on the commandline nor can Hatari
                    381: find a suitable TOS image in the default dir, you'll get the chance to
                    382: select a TOS image file from the GUI. </p>
1.1.1.5   root      383: 
                    384: <a name="Installation of the binary"></a><h3>Installation of the binary</h3>
                    385: 
1.1.1.13  root      386: <p> Type <span class="commandline">make install</span> as "root" user to
                    387: do a systemwide installation.</p>
                    388: <p>Assuming you didn't change the default installation prefix and that
                    389: <span class="file">/usr/local/bin/</span> is in your PATH, you should
                    390: be now able to start the Hatari executable from anywhere.</p>
1.1       root      391: <p> When you finally have got a TOS image, try starting Hatari with the
1.1.1.3   root      392: option <span class="commandline">--help</span> to find out more about
                    393: its command line parameters. </p>
1.1.1.5   root      394: 
                    395: <a name="Running Hatari for the first time"></a><h3>Running Hatari for the first time</h3>
                    396: 
1.1.1.3   root      397: <p> Now type <span class="commandline">hatari</span> to run the
                    398: emulator for the first time. If all goes
                    399: well, you should now be presented with a window showing you the
                    400: familiar
                    401: little green desktop of the Atari ST. Press <span class="key">F12</span>
                    402: to turn on the GUI to
                    403: configure Hatari to suit your needs, press <span class="key">F11</span>
                    404: to toggle windowed and fullscreen mode. </p>
1.1.1.5   root      405: 
1.1.1.13  root      406: <a name="Command line options"></a><h2>Command line options
                    407: and arguments</h2>
1.1.1.5   root      408: 
1.1.1.7   root      409: <p>Usage:</p>
                    410: <pre>
1.1.1.13  root      411:  hatari [options] [disk image | directory | Atari program ]
1.1.1.7   root      412: </pre>
                    413: 
1.1.1.13  root      414: <p>As an argument one can give either a name of:</p>
                    415: <ul>
                    416: <li>A floppy disk image,
                    417: <li>A directory that should be emulated as a virtual GEMDOS hard disk, or</li>
                    418: <li>An Atari program that should be autostarted.  In this case
                    419:     the program's directory will be used as the C: drive from
                    420:     where this program will be started.
                    421:     (Note that autostarting a program might not work if you've also
                    422:     specified a floppy image for drive A: on command line or in config
                    423:     file which contains a desktop.inf/newdesk.inf/emutos.inf file on
                    424:     it.)</li>
                    425: </ul>
                    426: 
                    427: <p>Booting will be done from the disk image or directory that's given
                    428: last on the command line as an option or the argument (and which
                    429: corresponds to A: or C:).</p>
                    430: 
1.1.1.8   root      431: <p>Hatari command line options are split into several categories:</p>
1.1.1.7   root      432: 
1.1.1.8   root      433: <!--
                    434: Generated from hatari.1 options section by changing subheaders to h3
                    435: and removing extra paragraphs:
                    436:   groff -man -Thtml hatari.1 | awk '
                    437:   /OPTIONS<\/h/ { out = 1; next }
                    438:   /INDENTATION/ { next }
                    439:   /COMMANDS/ { out = 0; next }
                    440:   { if(out) print }' | sed -e 's/h2/h3/g' -e 's/<\/*p>//g'
                    441: -->
                    442: 
                    443: <a name="General options"></a>
                    444: <h3>General options</h3>
                    445: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      446:        cellspacing="0" cellpadding="0">
1.1.1.8   root      447: <tr valign="top" align="left">
                    448: <td width="10%"></td>
                    449: <td width="89%">
1.1.1.12  root      450: <b>-h, --help</b></td>
1.1.1.8   root      451: </table>
                    452: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      453:        cellspacing="0" cellpadding="0">
1.1.1.8   root      454: <tr valign="top" align="left">
                    455: <td width="21%"></td>
                    456: <td width="77%">
                    457: Print command line options and terminate
                    458: </td>
                    459: </table>
                    460: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      461:        cellspacing="0" cellpadding="0">
1.1.1.8   root      462: <tr valign="top" align="left">
                    463: <td width="10%"></td>
                    464: <td width="89%">
1.1.1.12  root      465: <b>-v, --version</b></td>
1.1.1.8   root      466: </table>
                    467: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      468:        cellspacing="0" cellpadding="0">
1.1.1.8   root      469: <tr valign="top" align="left">
                    470: <td width="21%"></td>
                    471: <td width="77%">
                    472: Print version information and terminate
                    473: </td>
                    474: </table>
                    475: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      476:        cellspacing="0" cellpadding="0">
1.1.1.8   root      477: <tr valign="top" align="left">
                    478: <td width="10%"></td>
                    479: <td width="89%">
1.1.1.12  root      480: <b>--confirm-quit &lt;bool&gt;</b></td>
1.1.1.8   root      481: </table>
                    482: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      483:        cellspacing="0" cellpadding="0">
1.1.1.8   root      484: <tr valign="top" align="left">
                    485: <td width="21%"></td>
                    486: <td width="77%">
                    487: Whether Hatari confirms quitting
                    488: </td>
                    489: </table>
                    490: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      491:        cellspacing="0" cellpadding="0">
1.1.1.8   root      492: <tr valign="top" align="left">
                    493: <td width="10%"></td>
                    494: <td width="89%">
1.1.1.12  root      495: <b>-c, --configfile
1.1.1.8   root      496: &lt;filename&gt;</b></td>
                    497: </table>
                    498: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      499:        cellspacing="0" cellpadding="0">
1.1.1.8   root      500: <tr valign="top" align="left">
                    501: <td width="21%"></td>
                    502: <td width="77%">
                    503: use the given file as configuration file instead of
                    504: ~/.hatari/hatari.cfg
                    505: </td>
                    506: </table>
                    507: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      508:        cellspacing="0" cellpadding="0">
1.1.1.8   root      509: <tr valign="top" align="left">
                    510: <td width="10%"></td>
                    511: <td width="89%">
1.1.1.13  root      512: <b>-k, --keymap
                    513: &lt;file&gt;</b></td>
1.1.1.8   root      514: </table>
                    515: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      516:        cellspacing="0" cellpadding="0">
1.1.1.8   root      517: <tr valign="top" align="left">
                    518: <td width="21%"></td>
                    519: <td width="77%">
1.1.1.13  root      520: load keyboard mapping from &lt;file&gt;
1.1.1.8   root      521: </td>
                    522: </table>
1.1.1.13  root      523: 
                    524: <a name="Common display options"></a>
                    525: <h3>Common display options</h3>
1.1.1.8   root      526: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      527:        cellspacing="0" cellpadding="0">
1.1.1.8   root      528: <tr valign="top" align="left">
                    529: <td width="10%"></td>
                    530: <td width="89%">
1.1.1.12  root      531: <b>-m, --mono</b></td>
1.1.1.8   root      532: </table>
                    533: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      534:        cellspacing="0" cellpadding="0">
1.1.1.8   root      535: <tr valign="top" align="left">
                    536: <td width="21%"></td>
                    537: <td width="77%">
                    538: Start in monochrome mode instead of color
                    539: </td>
                    540: </table>
                    541: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      542:        cellspacing="0" cellpadding="0">
1.1.1.8   root      543: <tr valign="top" align="left">
                    544: <td width="10%"></td>
                    545: <td width="89%">
1.1.1.12  root      546: <b>--monitor &lt;x&gt;</b></td>
1.1.1.8   root      547: </table>
                    548: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      549:        cellspacing="0" cellpadding="0">
1.1.1.8   root      550: <tr valign="top" align="left">
                    551: <td width="21%"></td>
                    552: <td width="77%">
                    553: Select monitor type (x = mono/rgb/vga/tv)
                    554: </td>
                    555: </table>
                    556: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      557:        cellspacing="0" cellpadding="0">
1.1.1.8   root      558: <tr valign="top" align="left">
                    559: <td width="10%"></td>
                    560: <td width="89%">
1.1.1.12  root      561: <b>-f, --fullscreen</b></td>
1.1       root      562: </table>
1.1.1.8   root      563: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      564:        cellspacing="0" cellpadding="0">
1.1.1.8   root      565: <tr valign="top" align="left">
                    566: <td width="21%"></td>
                    567: <td width="77%">
                    568: Start the emulator in fullscreen mode
                    569: </td>
                    570: </table>
                    571: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      572:        cellspacing="0" cellpadding="0">
1.1.1.8   root      573: <tr valign="top" align="left">
                    574: <td width="10%"></td>
                    575: <td width="89%">
1.1.1.12  root      576: <b>-w, --window</b></td>
1.1.1.8   root      577: </table>
                    578: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      579:        cellspacing="0" cellpadding="0">
1.1.1.8   root      580: <tr valign="top" align="left">
                    581: <td width="21%"></td>
                    582: <td width="77%">
                    583: Start the emulator in window mode
                    584: </td>
                    585: </table>
                    586: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      587:        cellspacing="0" cellpadding="0">
1.1.1.8   root      588: <tr valign="top" align="left">
                    589: <td width="10%"></td>
                    590: <td width="89%">
1.1.1.12  root      591: <b>--grab</b></td>
1.1.1.10  root      592: </table>
                    593: <table width="100%" border=0 rules="none" frame="void"
                    594:        cellspacing="0" cellpadding="0">
                    595: <tr valign="top" align="left">
                    596: <td width="21%"></td>
                    597: <td width="77%">
                    598: Grab mouse (also) in window mode
                    599: </td>
                    600: </table>
                    601: <table width="100%" border=0 rules="none" frame="void"
                    602:        cellspacing="0" cellpadding="0">
                    603: <tr valign="top" align="left">
                    604: <td width="10%"></td>
                    605: <td width="89%">
1.1.1.13  root      606: <b>--fast-forward &lt;bool&gt;</b></td>
1.1.1.8   root      607: </table>
                    608: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      609:        cellspacing="0" cellpadding="0">
1.1.1.8   root      610: <tr valign="top" align="left">
                    611: <td width="21%"></td>
                    612: <td width="77%">
1.1.1.13  root      613: On fast machine helps skipping (fast forwarding) Hatari
                    614: output
1.1.1.8   root      615: </td>
                    616: </table>
                    617: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      618:        cellspacing="0" cellpadding="0">
1.1.1.8   root      619: <tr valign="top" align="left">
                    620: <td width="10%"></td>
                    621: <td width="89%">
1.1.1.13  root      622: <b>--frameskips &lt;x&gt;</b></td>
1.1.1.8   root      623: </table>
                    624: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      625:        cellspacing="0" cellpadding="0">
1.1.1.8   root      626: <tr valign="top" align="left">
                    627: <td width="21%"></td>
                    628: <td width="77%">
1.1.1.13  root      629: Skip &lt;x&gt; frames after each displayed frame to
                    630: accelerate emulation (0=disabled, &gt;4 uses automatic
                    631: frameskip with given value as maximum)
1.1.1.12  root      632: </td>
                    633: </table>
                    634: <table width="100%" border=0 rules="none" frame="void"
                    635:        cellspacing="0" cellpadding="0">
                    636: <tr valign="top" align="left">
                    637: <td width="10%"></td>
                    638: <td width="89%">
1.1.1.13  root      639: <b>--statusbar &lt;bool&gt;</b></td>
1.1.1.12  root      640: </table>
                    641: <table width="100%" border=0 rules="none" frame="void"
                    642:        cellspacing="0" cellpadding="0">
                    643: <tr valign="top" align="left">
                    644: <td width="21%"></td>
                    645: <td width="77%">
1.1.1.13  root      646: Show statusbar (with floppy leds etc etc)
1.1.1.12  root      647: </td>
                    648: </table>
                    649: <table width="100%" border=0 rules="none" frame="void"
                    650:        cellspacing="0" cellpadding="0">
                    651: <tr valign="top" align="left">
                    652: <td width="10%"></td>
                    653: <td width="89%">
1.1.1.13  root      654: <b>--drive-led &lt;bool&gt;</b></td>
                    655: </table>
                    656: <table width="100%" border=0 rules="none" frame="void"
                    657:        cellspacing="0" cellpadding="0">
                    658: <tr valign="top" align="left">
                    659: <td width="21%"></td>
                    660: <td width="77%">
                    661: Show overlay drive led when statusbar isn&rsquo;t shown
                    662: </td>
                    663: </table>
                    664: <table width="100%" border=0 rules="none" frame="void"
                    665:        cellspacing="0" cellpadding="0">
                    666: <tr valign="top" align="left">
                    667: <td width="10%"></td>
                    668: <td width="89%">
                    669: <b>--bpp &lt;bool&gt;</b></td>
1.1.1.12  root      670: </table>
                    671: <table width="100%" border=0 rules="none" frame="void"
                    672:        cellspacing="0" cellpadding="0">
                    673: <tr valign="top" align="left">
                    674: <td width="21%"></td>
                    675: <td width="77%">
1.1.1.13  root      676: Force internal bitdepth (x = 8/15/16/32, 0=disable)
1.1.1.8   root      677: </td>
                    678: </table>
1.1.1.13  root      679: 
                    680: <a name="ST/STE specific display options"></a>
                    681: <h3>ST/STE specific display options</h3>
1.1.1.8   root      682: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      683:        cellspacing="0" cellpadding="0">
1.1.1.8   root      684: <tr valign="top" align="left">
                    685: <td width="10%"></td>
                    686: <td width="89%">
1.1.1.12  root      687: <b>--borders &lt;bool&gt;</b></td>
1.1.1.8   root      688: </table>
                    689: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      690:        cellspacing="0" cellpadding="0">
1.1.1.8   root      691: <tr valign="top" align="left">
                    692: <td width="21%"></td>
                    693: <td width="77%">
1.1.1.13  root      694: Show screen borders (for low/med resolution overscan demos)
1.1.1.8   root      695: </td>
                    696: </table>
                    697: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      698:        cellspacing="0" cellpadding="0">
1.1.1.8   root      699: <tr valign="top" align="left">
                    700: <td width="10%"></td>
                    701: <td width="89%">
1.1.1.14  root      702: <b>--desktop-st &lt;bool&gt;</b></td>
                    703: </table>
                    704: <table width="100%" border=0 rules="none" frame="void"
                    705:        cellspacing="0" cellpadding="0">
                    706: <tr valign="top" align="left">
                    707: <td width="21%"></td>
                    708: <td width="77%">
                    709: Whether fullscreen mode uses desktop resolution to avoid: messing
                    710: multi-screen setups, several seconds delay needed by LCD monitors
                    711: resolution switching and the resulting sound break. As Hatari ST/E
                    712: display code doesn't support zooming (except low-rez doubling), it
                    713: doesn't get scaled (by Hatari or monitor) when this is enabled.
                    714: Therefore this is mainly useful only if you suffer from the described
                    715: effects, but still want to grab mouse and remove other distractions
                    716: from the screen just by toggling fullscreen mode. (disabled by default)
                    717: </td>
                    718: </table>
                    719: <table width="100%" border=0 rules="none" frame="void"
                    720:        cellspacing="0" cellpadding="0">
                    721: <tr valign="top" align="left">
                    722: <td width="10%"></td>
                    723: <td width="89%">
1.1.1.13  root      724: <b>--spec512 &lt;x&gt;</b></td>
1.1.1.12  root      725: </table>
                    726: <table width="100%" border=0 rules="none" frame="void"
                    727:        cellspacing="0" cellpadding="0">
                    728: <tr valign="top" align="left">
                    729: <td width="21%"></td>
                    730: <td width="77%">
1.1.1.13  root      731: Hatari uses this threshold to decide when to render a
                    732: screen with the slower but more accurate Spectrum512 screen
                    733: conversion functions (0 &lt;= x &lt;= 512, 0=disable)
1.1.1.12  root      734: </td>
                    735: </table>
                    736: <table width="100%" border=0 rules="none" frame="void"
                    737:        cellspacing="0" cellpadding="0">
                    738: <tr valign="top" align="left">
                    739: <td width="10%"></td>
                    740: <td width="89%">
1.1.1.13  root      741: <b>-z, --zoom &lt;x&gt;</b></td>
1.1.1.8   root      742: </table>
                    743: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      744:        cellspacing="0" cellpadding="0">
1.1.1.8   root      745: <tr valign="top" align="left">
                    746: <td width="21%"></td>
                    747: <td width="77%">
1.1.1.13  root      748: Zoom low resolution (1=no, 2=yes)
1.1.1.8   root      749: </td>
                    750: </table>
1.1.1.13  root      751: 
                    752: <a name="Falcon/TT specific display options"></a>
                    753: <h3>Falcon/TT specific display options</h3>
                    754: <p>
                    755: Zooming to sizes specified below is internally done using integer
                    756: scaling factors. This means that different Atari resolutions may show
                    757: up with different sizes, but they are never blurry.
                    758: </p>
1.1.1.8   root      759: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      760:        cellspacing="0" cellpadding="0">
1.1.1.8   root      761: <tr valign="top" align="left">
                    762: <td width="10%"></td>
                    763: <td width="89%">
1.1.1.13  root      764: <b>--desktop &lt;bool&gt;</b></td>
1.1.1.8   root      765: </table>
                    766: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      767:        cellspacing="0" cellpadding="0">
1.1.1.8   root      768: <tr valign="top" align="left">
                    769: <td width="21%"></td>
                    770: <td width="77%">
1.1.1.13  root      771: Whether to use desktop resolution on fullscreen to avoid issues
                    772: related to resolution switching. Otherwise fullscreen will use
1.1.1.14  root      773: a resolution that is closest to the Hatari window size.
                    774: (enabled by default)
1.1.1.8   root      775: </td>
                    776: </table>
                    777: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      778:        cellspacing="0" cellpadding="0">
1.1.1.8   root      779: <tr valign="top" align="left">
                    780: <td width="10%"></td>
                    781: <td width="89%">
1.1.1.13  root      782: <b>--max-width &lt;x&gt;</b></td>
1.1.1.8   root      783: </table>
                    784: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      785:        cellspacing="0" cellpadding="0">
1.1.1.8   root      786: <tr valign="top" align="left">
                    787: <td width="21%"></td>
                    788: <td width="77%">
1.1.1.13  root      789: Maximum window width for zooming
1.1.1.8   root      790: </td>
                    791: </table>
                    792: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      793:        cellspacing="0" cellpadding="0">
1.1.1.8   root      794: <tr valign="top" align="left">
                    795: <td width="10%"></td>
                    796: <td width="89%">
1.1.1.13  root      797: <b>--max-height &lt;x&gt;</b></td>
1.1.1.8   root      798: </table>
                    799: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      800:        cellspacing="0" cellpadding="0">
1.1.1.8   root      801: <tr valign="top" align="left">
                    802: <td width="21%"></td>
                    803: <td width="77%">
1.1.1.13  root      804: Maximum window height for zooming
                    805: </td>
                    806: </table>
                    807: <table width="100%" border=0 rules="none" frame="void"
                    808:        cellspacing="0" cellpadding="0">
                    809: <tr valign="top" align="left">
                    810: <td width="10%"></td>
                    811: <td width="89%">
1.1.1.14  root      812: <b>--force-max &lt;bool&gt;</b></td>
                    813: </table>
                    814: <table width="100%" border=0 rules="none" frame="void"
                    815:        cellspacing="0" cellpadding="0">
                    816: <tr valign="top" align="left">
                    817: <td width="21%"></td>
                    818: <td width="77%">
                    819: Hatari window size is forced to specified maximum size and black borders
                    820: used when Atari resolution doesn't scale evenly to it.  This is most
                    821: useful when recording videos of Falcon demos that change their
                    822: resolution. (disabled by default)
                    823: </td>
                    824: </table>
                    825: <table width="100%" border=0 rules="none" frame="void"
                    826:        cellspacing="0" cellpadding="0">
                    827: <tr valign="top" align="left">
                    828: <td width="10%"></td>
                    829: <td width="89%">
1.1.1.13  root      830: <b>--aspect &lt;bool&gt;</b></td>
                    831: </table>
                    832: <table width="100%" border=0 rules="none" frame="void"
                    833:        cellspacing="0" cellpadding="0">
                    834: <tr valign="top" align="left">
                    835: <td width="21%"></td>
                    836: <td width="77%">
1.1.1.14  root      837: Whether to do monitor aspect ratio correction (enabled by default)
1.1.1.8   root      838: </td>
                    839: </table>
1.1.1.13  root      840: 
1.1.1.8   root      841: <a name="VDI options"></a>
                    842: <h3>VDI options</h3>
                    843: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      844:        cellspacing="0" cellpadding="0">
1.1.1.8   root      845: <tr valign="top" align="left">
                    846: <td width="10%"></td>
                    847: <td width="89%">
1.1.1.12  root      848: <b>--vdi &lt;bool&gt;</b></td>
1.1.1.8   root      849: </table>
                    850: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      851:        cellspacing="0" cellpadding="0">
1.1.1.8   root      852: <tr valign="top" align="left">
                    853: <td width="21%"></td>
                    854: <td width="77%">
                    855: Whether to use VDI screen mode
                    856: </td>
                    857: </table>
                    858: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      859:        cellspacing="0" cellpadding="0">
1.1.1.8   root      860: <tr valign="top" align="left">
                    861: <td width="10%"></td>
                    862: <td width="89%">
1.1.1.12  root      863: <b>--vdi-planes &lt;x&gt;</b></td>
1.1.1.8   root      864: </table>
                    865: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      866:        cellspacing="0" cellpadding="0">
1.1.1.8   root      867: <tr valign="top" align="left">
                    868: <td width="21%"></td>
                    869: <td width="77%">
1.1.1.12  root      870: Use extended VDI resolution with bit depth &lt;x&gt; (x = 1, 2 or 4)
1.1.1.8   root      871: </td>
                    872: </table>
                    873: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      874:        cellspacing="0" cellpadding="0">
1.1.1.8   root      875: <tr valign="top" align="left">
                    876: <td width="10%"></td>
                    877: <td width="89%">
1.1.1.12  root      878: <b>--vdi-width &lt;w&gt;</b></td>
1.1.1.8   root      879: </table>
                    880: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      881:        cellspacing="0" cellpadding="0">
1.1.1.8   root      882: <tr valign="top" align="left">
                    883: <td width="21%"></td>
                    884: <td width="77%">
1.1.1.12  root      885: Use extended VDI resolution with width &lt;w&gt; (320 &lt; w &lt;= 1280)
1.1.1.8   root      886: </td>
                    887: </table>
                    888: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      889:        cellspacing="0" cellpadding="0">
1.1.1.8   root      890: <tr valign="top" align="left">
                    891: <td width="10%"></td>
                    892: <td width="89%">
1.1.1.12  root      893: <b>--vdi-height &lt;h&gt;</b></td>
1.1.1.8   root      894: </table>
                    895: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      896:        cellspacing="0" cellpadding="0">
1.1.1.8   root      897: <tr valign="top" align="left">
                    898: <td width="21%"></td>
                    899: <td width="77%">
1.1.1.12  root      900: Use extended VDI resolution with height &lt;h&gt; (200 &lt; h &lt;= 960)
                    901: </td>
                    902: </table>
1.1.1.13  root      903: 
                    904: <a name="Screen capture options"></a>
                    905: <h3>Screen capture options</h3>
1.1.1.12  root      906: <table width="100%" border=0 rules="none" frame="void"
                    907:        cellspacing="0" cellpadding="0">
                    908: <tr valign="top" align="left">
                    909: <td width="10%"></td>
                    910: <td width="89%">
1.1.1.13  root      911: <b>--crop &lt;bool&gt;</b></td>
1.1.1.12  root      912: </table>
                    913: <table width="100%" border=0 rules="none" frame="void"
                    914:        cellspacing="0" cellpadding="0">
                    915: <tr valign="top" align="left">
                    916: <td width="21%"></td>
                    917: <td width="77%">
1.1.1.13  root      918: Remove statusbar from the screen captures
1.1.1.12  root      919: </td>
                    920: </table>
                    921: <table width="100%" border=0 rules="none" frame="void"
                    922:        cellspacing="0" cellpadding="0">
                    923: <tr valign="top" align="left">
                    924: <td width="10%"></td>
                    925: <td width="89%">
1.1.1.13  root      926: <b>--avirecord</b></td>
1.1.1.12  root      927: </table>
                    928: <table width="100%" border=0 rules="none" frame="void"
                    929:        cellspacing="0" cellpadding="0">
                    930: <tr valign="top" align="left">
                    931: <td width="21%"></td>
                    932: <td width="77%">
1.1.1.13  root      933: Start AVI recording
1.1.1.12  root      934: </td>
                    935: </table>
                    936: <table width="100%" border=0 rules="none" frame="void"
                    937:        cellspacing="0" cellpadding="0">
                    938: <tr valign="top" align="left">
                    939: <td width="10%"></td>
                    940: <td width="89%">
1.1.1.13  root      941: <b>--avi-vcodec &lt;x&gt;</b></td>
1.1.1.12  root      942: </table>
                    943: <table width="100%" border=0 rules="none" frame="void"
                    944:        cellspacing="0" cellpadding="0">
                    945: <tr valign="top" align="left">
                    946: <td width="21%"></td>
                    947: <td width="77%">
1.1.1.13  root      948: Select avi video codec (x = bmp/png)
1.1.1.12  root      949: </td>
                    950: </table>
                    951: <table width="100%" border=0 rules="none" frame="void"
                    952:        cellspacing="0" cellpadding="0">
                    953: <tr valign="top" align="left">
                    954: <td width="10%"></td>
                    955: <td width="89%">
1.1.1.13  root      956: <b>--avi-fps &lt;x&gt;</b></td>
1.1.1.12  root      957: </table>
                    958: <table width="100%" border=0 rules="none" frame="void"
                    959:        cellspacing="0" cellpadding="0">
                    960: <tr valign="top" align="left">
                    961: <td width="21%"></td>
                    962: <td width="77%">
1.1.1.13  root      963: Force avi frame rate (x = 50/60/71/...)
1.1.1.12  root      964: </td>
                    965: </table>
                    966: <table width="100%" border=0 rules="none" frame="void"
                    967:        cellspacing="0" cellpadding="0">
                    968: <tr valign="top" align="left">
                    969: <td width="10%"></td>
                    970: <td width="89%">
                    971: <b>--avi-file &lt;file&gt;</b></td>
                    972: </table>
                    973: <table width="100%" border=0 rules="none" frame="void"
                    974:        cellspacing="0" cellpadding="0">
                    975: <tr valign="top" align="left">
                    976: <td width="21%"></td>
                    977: <td width="77%">
                    978: Use &lt;file&gt; to record avi
1.1.1.8   root      979: </td>
                    980: </table>
1.1.1.13  root      981: 
1.1.1.8   root      982: <a name="Devices options"></a>
                    983: <h3>Devices options</h3>
                    984: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      985:        cellspacing="0" cellpadding="0">
1.1.1.8   root      986: <tr valign="top" align="left">
                    987: <td width="10%"></td>
                    988: <td width="89%">
1.1.1.12  root      989: <b>-j, --joystick
1.1.1.8   root      990: &lt;port&gt;</b></td>
                    991: </table>
                    992: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root      993:        cellspacing="0" cellpadding="0">
1.1.1.8   root      994: <tr valign="top" align="left">
                    995: <td width="21%"></td>
                    996: <td width="77%">
                    997: Emulate joystick with cursor keys in given port (0-5)
                    998: </td>
                    999: </table>
                   1000: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1001:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1002: <tr valign="top" align="left">
                   1003: <td width="10%"></td>
                   1004: <td width="89%">
1.1.1.12  root     1005: <b>--joy&lt;port&gt;
1.1.1.8   root     1006: &lt;type&gt;</b></td>
                   1007: </table>
                   1008: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1009:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1010: <tr valign="top" align="left">
                   1011: <td width="21%"></td>
                   1012: <td width="77%">
                   1013: Set joystick type (none/keys/real) for given port
                   1014: </td>
                   1015: </table>
                   1016: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1017:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1018: <tr valign="top" align="left">
                   1019: <td width="10%"></td>
                   1020: <td width="89%">
1.1.1.12  root     1021: <b>--printer &lt;file&gt;</b></td>
1.1.1.8   root     1022: </table>
                   1023: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1024:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1025: <tr valign="top" align="left">
                   1026: <td width="21%"></td>
                   1027: <td width="77%">
                   1028: Enable printer support and write data to &lt;file&gt;
                   1029: </td>
                   1030: </table>
                   1031: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1032:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1033: <tr valign="top" align="left">
                   1034: <td width="10%"></td>
                   1035: <td width="89%">
1.1.1.12  root     1036: <b>--midi-in &lt;filename&gt;</b></td>
1.1.1.8   root     1037: </table>
                   1038: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1039:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1040: <tr valign="top" align="left">
                   1041: <td width="21%"></td>
                   1042: <td width="77%">
1.1.1.9   root     1043: Enable MIDI support and write MIDI data to &lt;file&gt;
1.1.1.8   root     1044: </td>
                   1045: </table>
                   1046: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1047:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1048: <tr valign="top" align="left">
                   1049: <td width="10%"></td>
                   1050: <td width="89%">
1.1.1.12  root     1051: <b>--midi-out &lt;filename&gt;</b></td>
1.1.1.8   root     1052: </table>
                   1053: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1054:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1055: <tr valign="top" align="left">
                   1056: <td width="21%"></td>
                   1057: <td width="77%">
1.1.1.9   root     1058: Enable MIDI support and read MIDI data from &lt;file&gt;
                   1059: </td>
                   1060: </table>
                   1061: <table width="100%" border=0 rules="none" frame="void"
                   1062:        cellspacing="0" cellpadding="0">
                   1063: <tr valign="top" align="left">
                   1064: <td width="10%"></td>
                   1065: <td width="89%">
1.1.1.12  root     1066: <b>--rs232-in &lt;filename&gt;</b></td>
1.1.1.9   root     1067: </table>
                   1068: <table width="100%" border=0 rules="none" frame="void"
                   1069:        cellspacing="0" cellpadding="0">
                   1070: <tr valign="top" align="left">
                   1071: <td width="21%"></td>
                   1072: <td width="77%">
                   1073: Enable serial port support and use &lt;file&gt; as the input device
                   1074: </td>
                   1075: </table>
                   1076: <table width="100%" border=0 rules="none" frame="void"
                   1077:        cellspacing="0" cellpadding="0">
                   1078: <tr valign="top" align="left">
                   1079: <td width="10%"></td>
                   1080: <td width="89%">
1.1.1.12  root     1081: <b>--rs232-out &lt;filename&gt;</b></td>
1.1.1.9   root     1082: </table>
                   1083: <table width="100%" border=0 rules="none" frame="void"
                   1084:        cellspacing="0" cellpadding="0">
                   1085: <tr valign="top" align="left">
                   1086: <td width="21%"></td>
                   1087: <td width="77%">
                   1088: Enable serial port support and use &lt;file&gt; as the output device
1.1.1.8   root     1089: </td>
                   1090: </table>
1.1.1.13  root     1091: 
1.1.1.8   root     1092: <a name="Disk options"></a>
                   1093: <h3>Disk options</h3>
                   1094: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1095:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1096: <tr valign="top" align="left">
                   1097: <td width="10%"></td>
                   1098: <td width="89%">
1.1.1.12  root     1099: <b>--disk-a &lt;file&gt;</b></td>
1.1.1.8   root     1100: </table>
                   1101: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1102:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1103: <tr valign="top" align="left">
                   1104: <td width="21%"></td>
                   1105: <td width="77%">
                   1106: Set disk image for floppy drive A
                   1107: </td>
                   1108: </table>
                   1109: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1110:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1111: <tr valign="top" align="left">
                   1112: <td width="10%"></td>
                   1113: <td width="89%">
1.1.1.12  root     1114: <b>--disk-b &lt;file&gt;</b></td>
1.1.1.8   root     1115: </table>
                   1116: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1117:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1118: <tr valign="top" align="left">
                   1119: <td width="21%"></td>
                   1120: <td width="77%">
                   1121: Set disk image for floppy drive B
                   1122: </td>
                   1123: </table>
                   1124: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1125:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1126: <tr valign="top" align="left">
                   1127: <td width="10%"></td>
                   1128: <td width="89%">
1.1.1.12  root     1129: <b>--protect-floppy &lt;x&gt;</b></td>
1.1.1.8   root     1130: </table>
                   1131: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1132:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1133: <tr valign="top" align="left">
                   1134: <td width="21%"></td>
                   1135: <td width="77%">
1.1.1.12  root     1136: Write protect floppy image contents (on/off/auto). With "auto" option
                   1137: write protection is according to the disk image file attributes.
1.1.1.8   root     1138: </td>
                   1139: </table>
                   1140: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1141:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1142: <tr valign="top" align="left">
                   1143: <td width="10%"></td>
                   1144: <td width="89%">
1.1.1.12  root     1145: <b>--protect-hd &lt;x&gt;</b></td>
                   1146: </table>
                   1147: <table width="100%" border=0 rules="none" frame="void"
                   1148:        cellspacing="0" cellpadding="0">
                   1149: <tr valign="top" align="left">
                   1150: <td width="21%"></td>
                   1151: <td width="77%">
                   1152: Write protect harddrive &lt;dir&gt; contents (on/off/auto). With "auto"
                   1153: option the protection can be controlled by setting individual files
                   1154: attributes as it disables the file attribute modifications for
                   1155: the GEMDOS hard disk emulation.
                   1156: </td>
                   1157: </table>
                   1158: <table width="100%" border=0 rules="none" frame="void"
                   1159:        cellspacing="0" cellpadding="0">
                   1160: <tr valign="top" align="left">
                   1161: <td width="10%"></td>
                   1162: <td width="89%">
                   1163: <b>-d, --harddrive &lt;dir&gt;</b></td>
                   1164: </table>
                   1165: <table width="100%" border=0 rules="none" frame="void"
                   1166:        cellspacing="0" cellpadding="0">
                   1167: <tr valign="top" align="left">
                   1168: <td width="21%"></td>
                   1169: <td width="77%">
                   1170: Emulate harddrive partition(s) with &lt;dir&gt; contents
                   1171: </td>
                   1172: </table>
                   1173: <table width="100%" border=0 rules="none" frame="void"
                   1174:        cellspacing="0" cellpadding="0">
                   1175: <tr valign="top" align="left">
                   1176: <td width="10%"></td>
                   1177: <td width="89%">
                   1178: <b>--acsi &lt;file&gt;</b></td>
1.1.1.8   root     1179: </table>
                   1180: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1181:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1182: <tr valign="top" align="left">
                   1183: <td width="21%"></td>
                   1184: <td width="77%">
                   1185: Emulate an ACSI hard disk with an image &lt;file&gt;
                   1186: </td>
                   1187: </table>
                   1188: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1189:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1190: <tr valign="top" align="left">
                   1191: <td width="10%"></td>
                   1192: <td width="89%">
1.1.1.12  root     1193: <b>--ide-master &lt;file&gt;</b></td>
                   1194: </table>
                   1195: <table width="100%" border=0 rules="none" frame="void"
                   1196:        cellspacing="0" cellpadding="0">
                   1197: <tr valign="top" align="left">
                   1198: <td width="21%"></td>
                   1199: <td width="77%">
                   1200: Emulate an IDE master hard disk with an image &lt;file&gt;
                   1201: </td>
                   1202: </table>
                   1203: <table width="100%" border=0 rules="none" frame="void"
                   1204:        cellspacing="0" cellpadding="0">
                   1205: <tr valign="top" align="left">
                   1206: <td width="10%"></td>
                   1207: <td width="89%">
                   1208: <b>--ide-slave &lt;file&gt;</b></td>
1.1.1.8   root     1209: </table>
                   1210: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1211:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1212: <tr valign="top" align="left">
                   1213: <td width="21%"></td>
                   1214: <td width="77%">
1.1.1.12  root     1215: Emulate an IDE slave hard disk with an image &lt;file&gt;
1.1.1.8   root     1216: </td>
                   1217: </table>
                   1218: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1219:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1220: <tr valign="top" align="left">
                   1221: <td width="10%"></td>
                   1222: <td width="89%">
1.1.1.14  root     1223: <b>--fastfdc &lt;bool&gt;</b></td>
1.1.1.8   root     1224: </table>
                   1225: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1226:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1227: <tr valign="top" align="left">
                   1228: <td width="21%"></td>
                   1229: <td width="77%">
1.1.1.14  root     1230: speed up FDC emulation (can cause incompatibilities)
1.1.1.8   root     1231: </td>
                   1232: </table>
1.1.1.13  root     1233: 
1.1.1.8   root     1234: <a name="Memory options"></a>
                   1235: <h3>Memory options</h3>
                   1236: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1237:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1238: <tr valign="top" align="left">
                   1239: <td width="10%"></td>
                   1240: <td width="89%">
1.1.1.12  root     1241: <b>-s, --memsize &lt;x&gt;</b></td>
1.1.1.8   root     1242: </table>
                   1243: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1244:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1245: <tr valign="top" align="left">
                   1246: <td width="21%"></td>
                   1247: <td width="77%">
                   1248: Set amount of emulated RAM, x = 1 to 14 MiB, or 0 for 512
                   1249: KiB
                   1250: </td>
                   1251: </table>
                   1252: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1253:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1254: <tr valign="top" align="left">
                   1255: <td width="10%"></td>
                   1256: <td width="89%">
1.1.1.14  root     1257: <b>--memstate &lt;file&gt;</b></td>
                   1258: </table>
                   1259: <table width="100%" border=0 rules="none" frame="void"
                   1260:        cellspacing="0" cellpadding="0">
                   1261: <tr valign="top" align="left">
                   1262: <td width="21%"></td>
                   1263: <td width="77%">
                   1264: Load memory snap-shot &lt;file&gt;
                   1265: </td>
                   1266: </table>
                   1267: 
                   1268: <a name="ROM options"></a>
                   1269: <h3>ROM options</h3>
                   1270: <table width="100%" border=0 rules="none" frame="void"
                   1271:        cellspacing="0" cellpadding="0">
                   1272: <tr valign="top" align="left">
                   1273: <td width="10%"></td>
                   1274: <td width="89%">
1.1.1.12  root     1275: <b>-t, --tos
1.1.1.8   root     1276: &lt;imagefile&gt;</b></td>
                   1277: </table>
                   1278: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1279:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1280: <tr valign="top" align="left">
                   1281: <td width="21%"></td>
                   1282: <td width="77%">
                   1283: Specify TOS ROM image to use
                   1284: </td>
                   1285: </table>
                   1286: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1287:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1288: <tr valign="top" align="left">
                   1289: <td width="10%"></td>
                   1290: <td width="89%">
1.1.1.14  root     1291: <b>--patch-tos
                   1292: &lt;bool&gt;</b></td>
1.1.1.8   root     1293: </table>
                   1294: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1295:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1296: <tr valign="top" align="left">
                   1297: <td width="21%"></td>
                   1298: <td width="77%">
1.1.1.14  root     1299: Use this option to enable/disable TOS ROM patching. Experts only! Leave
                   1300: this enabled unless you know what you are doing!
1.1.1.8   root     1301: </td>
                   1302: </table>
                   1303: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1304:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1305: <tr valign="top" align="left">
                   1306: <td width="10%"></td>
                   1307: <td width="89%">
1.1.1.14  root     1308: <b>--cartridge &lt;imagefile&gt;</b></td>
1.1.1.8   root     1309: </table>
                   1310: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1311:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1312: <tr valign="top" align="left">
                   1313: <td width="21%"></td>
                   1314: <td width="77%">
1.1.1.14  root     1315: Use ROM cartridge image &lt;file&gt; (only works if
                   1316: GEMDOS HD emulation and extended VDI resolution are
                   1317: disabled)
1.1.1.8   root     1318: </td>
                   1319: </table>
1.1.1.13  root     1320: 
1.1.1.8   root     1321: <a name="CPU options"></a>
                   1322: <h3>CPU options</h3>
                   1323: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1324:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1325: <tr valign="top" align="left">
                   1326: <td width="10%"></td>
                   1327: <td width="89%">
1.1.1.12  root     1328: <b>--cpulevel &lt;x&gt;</b></td>
1.1.1.8   root     1329: </table>
                   1330: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1331:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1332: <tr valign="top" align="left">
                   1333: <td width="21%"></td>
                   1334: <td width="77%">
                   1335: Specify CPU (680x0) to use (use x &gt;= 1 with EmuTOS or
                   1336: TOS &gt;= 2.06 only!)
                   1337: </td>
                   1338: </table>
                   1339: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1340:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1341: <tr valign="top" align="left">
                   1342: <td width="10%"></td>
                   1343: <td width="89%">
1.1.1.12  root     1344: <b>--cpuclock &lt;x&gt;</b></td>
1.1.1.8   root     1345: </table>
                   1346: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1347:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1348: <tr valign="top" align="left">
                   1349: <td width="21%"></td>
                   1350: <td width="77%">
                   1351: Set the CPU clock (8, 16 or 32 Mhz)
                   1352: </td>
                   1353: </table>
                   1354: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1355:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1356: <tr valign="top" align="left">
                   1357: <td width="10%"></td>
                   1358: <td width="89%">
1.1.1.12  root     1359: <b>--compatible &lt;bool&gt;</b></td>
1.1.1.8   root     1360: </table>
                   1361: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1362:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1363: <tr valign="top" align="left">
                   1364: <td width="21%"></td>
                   1365: <td width="77%">
                   1366: Use a more compatible but slower 68000 CPU mode
                   1367: </td>
                   1368: </table>
1.1.1.13  root     1369: 
1.1.1.8   root     1370: <a name="Misc system options"></a>
                   1371: <h3>Misc system options</h3>
                   1372: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1373:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1374: <tr valign="top" align="left">
                   1375: <td width="10%"></td>
                   1376: <td width="89%">
1.1.1.12  root     1377: <b>--machine &lt;x&gt;</b></td>
1.1.1.8   root     1378: </table>
                   1379: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1380:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1381: <tr valign="top" align="left">
                   1382: <td width="21%"></td>
                   1383: <td width="77%">
1.1.1.13  root     1384: Select machine type (x = st, ste, tt or falcon)
1.1.1.8   root     1385: </td>
                   1386: </table>
                   1387: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1388:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1389: <tr valign="top" align="left">
                   1390: <td width="10%"></td>
                   1391: <td width="89%">
1.1.1.12  root     1392: <b>--blitter &lt;bool&gt;</b></td>
1.1.1.8   root     1393: </table>
                   1394: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1395:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1396: <tr valign="top" align="left">
                   1397: <td width="21%"></td>
                   1398: <td width="77%">
                   1399: Enable blitter emulation (ST only)
                   1400: </td>
                   1401: </table>
                   1402: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1403:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1404: <tr valign="top" align="left">
                   1405: <td width="10%"></td>
                   1406: <td width="89%">
1.1.1.13  root     1407: <b>--dsp &lt;x&gt;</b></td>
1.1.1.10  root     1408: </table>
                   1409: <table width="100%" border=0 rules="none" frame="void"
                   1410:        cellspacing="0" cellpadding="0">
                   1411: <tr valign="top" align="left">
                   1412: <td width="21%"></td>
                   1413: <td width="77%">
1.1.1.13  root     1414: Falcon DSP emulation (x = none, dummy or emu, Falcon only)
1.1.1.10  root     1415: </td>
                   1416: </table>
                   1417: <table width="100%" border=0 rules="none" frame="void"
                   1418:        cellspacing="0" cellpadding="0">
                   1419: <tr valign="top" align="left">
                   1420: <td width="10%"></td>
                   1421: <td width="89%">
1.1.1.14  root     1422: <b>--timer-d &lt;bool&gt;</b></td>
1.1.1.8   root     1423: </table>
                   1424: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1425:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1426: <tr valign="top" align="left">
                   1427: <td width="21%"></td>
                   1428: <td width="77%">
1.1.1.14  root     1429: Patch redundantly high Timer-D frequency set by TOS.  This about doubles
                   1430: Hatari speed (for ST/e emulation) as the original Timer-D frequency causes
                   1431: most of the interrupts.
1.1.1.8   root     1432: </td>
                   1433: </table>
                   1434: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1435:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1436: <tr valign="top" align="left">
                   1437: <td width="10%"></td>
                   1438: <td width="89%">
1.1.1.14  root     1439: <b>--fast-boot &lt;bool&gt;</b></td>
1.1.1.8   root     1440: </table>
                   1441: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1442:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1443: <tr valign="top" align="left">
                   1444: <td width="21%"></td>
                   1445: <td width="77%">
1.1.1.14  root     1446: Patch TOS and initialize the so-called &quot;memvalid&quot; system variables to
                   1447: by-pass the memory test of TOS, so that the system boots faster.
1.1.1.8   root     1448: </td>
                   1449: </table>
1.1.1.12  root     1450: <table width="100%" border=0 rules="none" frame="void"
                   1451:        cellspacing="0" cellpadding="0">
                   1452: <tr valign="top" align="left">
                   1453: <td width="10%"></td>
                   1454: <td width="89%">
1.1.1.14  root     1455: <b>--rtc &lt;bool&gt;</b></td>
1.1.1.12  root     1456: </table>
                   1457: <table width="100%" border=0 rules="none" frame="void"
                   1458:        cellspacing="0" cellpadding="0">
                   1459: <tr valign="top" align="left">
                   1460: <td width="21%"></td>
                   1461: <td width="77%">
1.1.1.14  root     1462: Enable real-time clock
1.1.1.12  root     1463: </td>
                   1464: </table>
1.1.1.14  root     1465: 
                   1466: <a name="Sound options"></a>
                   1467: <h3>Sound options</h3>
1.1.1.8   root     1468: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1469:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1470: <tr valign="top" align="left">
                   1471: <td width="10%"></td>
                   1472: <td width="89%">
1.1.1.14  root     1473: <b>--mic &lt;bool&gt;</b></td>
1.1.1.8   root     1474: </table>
                   1475: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1476:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1477: <tr valign="top" align="left">
                   1478: <td width="21%"></td>
                   1479: <td width="77%">
1.1.1.14  root     1480: Enable/disable (Falcon only) microphone
1.1.1.13  root     1481: </td>
                   1482: </table>
                   1483: <table width="100%" border=0 rules="none" frame="void"
                   1484:        cellspacing="0" cellpadding="0">
                   1485: <tr valign="top" align="left">
                   1486: <td width="10%"></td>
                   1487: <td width="89%">
1.1.1.14  root     1488: <b>--sound &lt;x&gt;</b></td>
1.1.1.13  root     1489: </table>
                   1490: <table width="100%" border=0 rules="none" frame="void"
                   1491:        cellspacing="0" cellpadding="0">
                   1492: <tr valign="top" align="left">
                   1493: <td width="21%"></td>
                   1494: <td width="77%">
1.1.1.14  root     1495: Sound frequency: 6000-50066. "off" disables the sound and speeds up
                   1496: the emulation. To prevent extra sound artifacts, the frequency should be
                   1497: selected so that it either matches evenly with the STE/TT/Falcon sound
                   1498: DMA (6258, 12517, 250033, 50066 Hz) or your sound card frequencies
                   1499: (11025, 22050, 44100 or 6000...48000 Hz).  Check what your sound card
                   1500: supports.
1.1.1.13  root     1501: </td>
                   1502: </table>
                   1503: <table width="100%" border=0 rules="none" frame="void"
                   1504:        cellspacing="0" cellpadding="0">
                   1505: <tr valign="top" align="left">
                   1506: <td width="10%"></td>
                   1507: <td width="89%">
1.1.1.14  root     1508: <b>--sound-buffer-size &lt;x&gt;</b></td>
1.1.1.13  root     1509: </table>
                   1510: <table width="100%" border=0 rules="none" frame="void"
                   1511:        cellspacing="0" cellpadding="0">
                   1512: <tr valign="top" align="left">
                   1513: <td width="21%"></td>
                   1514: <td width="77%">
1.1.1.14  root     1515: SDL's sound buffer size : 10-100, or 0 to use default buffer size.
                   1516: By default Hatari uses an SDL buffer size of 1024 samples, which
                   1517: gives approximatively 20-30 ms of sound depending on the chosen sound
                   1518: frequency. Under some OS or with not fully supported sound card, this
                   1519: default setting can cause a bigger delay at lower frequency (nearly 0.5 sec).
                   1520: In that case, you can use this option to force the size of the sound
                   1521: buffer to a fixed number of milliseconds of sound (using 20 is often
                   1522: a good choice if you have such problems). Most users will not need this option.
                   1523: </td>
                   1524: </table>
                   1525: <table width="100%" border=0 rules="none" frame="void"
                   1526:        cellspacing="0" cellpadding="0">
                   1527: <tr valign="top" align="left">
                   1528: <td width="10%"></td>
                   1529: <td width="89%">
1.1.1.16! root     1530: <b>--sound-sync &lt;bool&gt;</b></td>
        !          1531: </table>
        !          1532: <table width="100%" border=0 rules="none" frame="void"
        !          1533:        cellspacing="0" cellpadding="0">
        !          1534: <tr valign="top" align="left">
        !          1535: <td width="21%"></td>
        !          1536: <td width="77%">
        !          1537: The emulation rate is nudged by +100 or 0 or -100 micro-seconds on occasion.
        !          1538: This prevents the sound buffer from overflowing (long latency and
        !          1539: lost samples) or underflowing (short latency and repeated samples).
        !          1540: The emulation rate smoothly deviates by a maximum of 0.58% until
        !          1541: synchronized, while the emulator continuously generates every sound
        !          1542: sample and the crystal controlled sound system consumes every sample.
        !          1543: <br>(on|off, off is the default)
        !          1544: </td>
        !          1545: </table>
        !          1546: <table width="100%" border=0 rules="none" frame="void"
        !          1547:        cellspacing="0" cellpadding="0">
        !          1548: <tr valign="top" align="left">
        !          1549: <td width="10%"></td>
        !          1550: <td width="89%">
1.1.1.14  root     1551: <b>--ym-mixing &lt;x&gt;</b></td>
                   1552: </table>
                   1553: <table width="100%" border=0 rules="none" frame="void"
                   1554:        cellspacing="0" cellpadding="0">
                   1555: <tr valign="top" align="left">
                   1556: <td width="21%"></td>
                   1557: <td width="77%">
                   1558: Select a method for mixing the three YM2149 voice volumes together.
                   1559: "model" uses a mathematical model of the YM voices,
                   1560: "table" uses a lookup table of audio output voltage values measured
                   1561: on STF and "linear" just averages the 3 YM voices.
1.1.1.8   root     1562: </td>
                   1563: </table>
1.1.1.13  root     1564: 
1.1.1.8   root     1565: <a name="Debug options"></a>
                   1566: <h3>Debug options</h3>
                   1567: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1568:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1569: <tr valign="top" align="left">
                   1570: <td width="10%"></td>
                   1571: <td width="89%">
1.1.1.12  root     1572: <b>-D, --debug</b></td>
1.1.1.8   root     1573: </table>
                   1574: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1575:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1576: <tr valign="top" align="left">
                   1577: <td width="21%"></td>
                   1578: <td width="77%">
1.1.1.10  root     1579: Toggle whether CPU exceptions invoke the debugger
1.1.1.8   root     1580: </td>
                   1581: </table>
                   1582: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1583:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1584: <tr valign="top" align="left">
                   1585: <td width="10%"></td>
                   1586: <td width="89%">
1.1.1.12  root     1587: <b>--bios-intercept</b></td>
1.1.1.8   root     1588: </table>
                   1589: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1590:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1591: <tr valign="top" align="left">
                   1592: <td width="21%"></td>
                   1593: <td width="77%">
1.1.1.13  root     1594: Toggle Bios/XBios call interception and BIOS CON: output
                   1595: (e.g. EmuTOS console) redidirection to host terminal.
                   1596: Needed for Bios/XBios call tracing. Allows Atari programs
                   1597: to modify Hatari state through XBios 255 calls.
1.1.1.8   root     1598: </td>
                   1599: </table>
                   1600: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1601:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1602: <tr valign="top" align="left">
                   1603: <td width="10%"></td>
                   1604: <td width="89%">
1.1.1.12  root     1605: <b>--trace &lt;trace1,...&gt;</b></td>
1.1.1.8   root     1606: </table>
                   1607: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1608:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1609: <tr valign="top" align="left">
                   1610: <td width="21%"></td>
                   1611: <td width="77%">
                   1612: Activate debug traces, see <b>--trace help</b> for available tracing options
                   1613: </td>
                   1614: </table>
                   1615: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1616:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1617: <tr valign="top" align="left">
                   1618: <td width="10%"></td>
                   1619: <td width="89%">
1.1.1.12  root     1620: <b>--trace-file &lt;file&gt;</b></td>
                   1621: </table>
                   1622: <table width="100%" border=0 rules="none" frame="void"
                   1623:        cellspacing="0" cellpadding="0">
                   1624: <tr valign="top" align="left">
                   1625: <td width="21%"></td>
                   1626: <td width="77%">
                   1627: Save trace output to &lt;file&gt; (default=stderr)
                   1628: </td>
                   1629: </table>
                   1630: <table width="100%" border=0 rules="none" frame="void"
                   1631:        cellspacing="0" cellpadding="0">
                   1632: <tr valign="top" align="left">
                   1633: <td width="10%"></td>
                   1634: <td width="89%">
                   1635: <b>--parse &lt;file&gt;</b></td>
                   1636: </table>
                   1637: <table width="100%" border=0 rules="none" frame="void"
                   1638:        cellspacing="0" cellpadding="0">
                   1639: <tr valign="top" align="left">
                   1640: <td width="21%"></td>
                   1641: <td width="77%">
                   1642: Parse/execute debugger commands from &lt;file&gt;
                   1643: </td>
                   1644: </table>
                   1645: <table width="100%" border=0 rules="none" frame="void"
                   1646:        cellspacing="0" cellpadding="0">
                   1647: <tr valign="top" align="left">
                   1648: <td width="10%"></td>
                   1649: <td width="89%">
                   1650: <b>--control-socket &lt;file&gt;</b></td>
1.1.1.8   root     1651: </table>
                   1652: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1653:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1654: <tr valign="top" align="left">
                   1655: <td width="21%"></td>
                   1656: <td width="77%">
                   1657: Hatari reads options from given socket at run-time
                   1658: </td>
                   1659: </table>
                   1660: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1661:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1662: <tr valign="top" align="left">
                   1663: <td width="10%"></td>
                   1664: <td width="89%">
1.1.1.12  root     1665: <b>--log-file &lt;file&gt;</b></td>
1.1.1.8   root     1666: </table>
                   1667: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1668:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1669: <tr valign="top" align="left">
                   1670: <td width="21%"></td>
                   1671: <td width="77%">
                   1672: Save log output to &lt;file&gt; (default=stderr)
                   1673: </td>
                   1674: </table>
                   1675: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1676:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1677: <tr valign="top" align="left">
                   1678: <td width="10%"></td>
                   1679: <td width="89%">
1.1.1.12  root     1680: <b>--log-level &lt;x&gt;</b></td>
1.1.1.8   root     1681: </table>
                   1682: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1683:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1684: <tr valign="top" align="left">
                   1685: <td width="21%"></td>
                   1686: <td width="77%">
                   1687: Log output level (x=debug/todo/info/warn/error/fatal)
                   1688: </td>
                   1689: </table>
                   1690: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1691:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1692: <tr valign="top" align="left">
                   1693: <td width="10%"></td>
                   1694: <td width="89%">
1.1.1.12  root     1695: <b>--alert-level &lt;x&gt;</b></td>
1.1.1.8   root     1696: </table>
                   1697: <table width="100%" border=0 rules="none" frame="void"
1.1.1.9   root     1698:        cellspacing="0" cellpadding="0">
1.1.1.8   root     1699: <tr valign="top" align="left">
                   1700: <td width="21%"></td>
                   1701: <td width="77%">
                   1702: Show dialog for log messages above given level
                   1703: </td>
                   1704: </table>
1.1.1.10  root     1705: <table width="100%" border=0 rules="none" frame="void"
                   1706:        cellspacing="0" cellpadding="0">
                   1707: <tr valign="top" align="left">
                   1708: <td width="10%"></td>
                   1709: <td width="89%">
1.1.1.12  root     1710: <b>--run-vbls &lt;x&gt;</b></td>
1.1.1.10  root     1711: </table>
                   1712: <table width="100%" border=0 rules="none" frame="void"
                   1713:        cellspacing="0" cellpadding="0">
                   1714: <tr valign="top" align="left">
                   1715: <td width="21%"></td>
                   1716: <td width="77%">
                   1717: Exit after X VBLs
                   1718: </td>
                   1719: </table>
1.1.1.8   root     1720: 
1.1.1.5   root     1721: 
1.1.1.7   root     1722: <p>Type <span class="commandline">hatari --help</span> to list all
                   1723: the command line options supported by a given version of Hatari.</p>
                   1724: 
1.1.1.5   root     1725: <a name="Using the emulated system"></a><h2>Using the emulated system</h2>
                   1726: 
1.1       root     1727: <p> Once you've started Hatari succesfully, you can use the emulator as
1.1.1.10  root     1728: an almost complete Atari ST computer system. </p>
1.1.1.5   root     1729: 
                   1730: <a name="The GUI"></a><h3>The GUI</h3>
                   1731: 
1.1.1.3   root     1732: <p>Press <span class="key">F12</span> to enter the GUI. Navigate it
                   1733: with the mouse.
1.1       root     1734: The GUI is rather self explanatory.</p>
1.1.1.5   root     1735: 
1.1.1.8   root     1736: <a name="The Main Menu"></a><h4 class="gui">The Main Menu</h4>
1.1.1.5   root     1737: 
                   1738: <div class="floatimage">
1.1.1.10  root     1739: <img src="images/main.png" width="500" height="304" alt="Hatari's GUI - the main menu">
1.1.1.5   root     1740: </div>
                   1741: 
1.1.1.12  root     1742: <p>
                   1743: You can reach the other setup dialogs from the main menu by clicking on
                   1744: the appropriate buttons.
                   1745: </p>
                   1746: <p>
                   1747: You can load the current settings from a configuration file by clicking
                   1748: on <span class="button">Load&nbsp;config.</span> and you can save
                   1749: the current settings to a configuration file by clicking on
                   1750: <span class="button">Save&nbsp;config.</span>.
                   1751: </p>
                   1752: <p>
                   1753: Click <span class="button">OK</span> to go back and continue the emulation.
                   1754: All changed options will be applied.
                   1755: </p>
                   1756: <p>
                   1757: Select the <span class="button">Reset&nbsp;machine</span> option if you
                   1758: want the emulated machine to perform a cold reset. This is equal to
                   1759: switching the power off and on again on a real Atari machine.
                   1760: </p>
                   1761: <p>
                   1762: Click <span class="button">Quit</span> to terminate Hatari
                   1763: and return to the host OS.
                   1764: </p>
                   1765: <p>
                   1766: Click <span class="button">Cancel</span> to abandon any
                   1767: changes that you have made.
                   1768: </p>
1.1.1.5   root     1769: 
1.1.1.10  root     1770: 
                   1771: <a name="The File Selector Dialog"></a><h4 class="gui">The File Selector Dialog</h4>
                   1772: 
                   1773: <div class="floatimage">
                   1774: <img src="images/fileselector.png" width="640" height="399" alt="Hatari's GUI - the fileselector">
                   1775: </div>
                   1776: 
                   1777: <p>
                   1778:  The file selector dialog appears whenever you are prompted to choose a file
                   1779:  or folder.
                   1780: </p>
                   1781: <p>
                   1782:  To enter a folder or choose a file, simply click on the entry in the main box
                   1783:  of the dialog. You can use the arrows at the right, the cursor up and down
                   1784:  keys and the page up and down keys to navigate through the list.
                   1785: </p>
                   1786: <p>
                   1787:  You can use the three buttons in the upper right corner for additional folder
                   1788:  navigation. Use the <span class="button">..</span> button to go up one level
                   1789:  in the directory tree. Use the <span class="button">~</span> button to return
                   1790:  to your home directory. The <span class="button">/</span> button can be used
                   1791:  to go to the root directory of the file system.
                   1792: </p>
                   1793: 
                   1794: 
1.1.1.8   root     1795: <a name="The System Dialog"></a><h4 class="gui">The System Dialog</h4>
1.1.1.5   root     1796: 
                   1797: <div class="floatimage">
1.1.1.10  root     1798: <img src="images/system.png" width="360" height="384" alt="Hatari's GUI - the system dialog">
1.1.1.5   root     1799: </div>
                   1800: 
1.1.1.7   root     1801: <p>
                   1802:  First you can select the CPU type here. Here are some important hints for
                   1803:  choosing the correct CPU type:
                   1804: </p>
                   1805: <ul>
                   1806:  <li>
                   1807:   Atari ST and STE have only been shipped with a 68000 CPU, so for best
                   1808:   compatibility with old programs, choose this CPU type.
                   1809:  </li>
                   1810:  <li>
                   1811:   Atari TT and Falcon computers were using the 68030 CPU, so you should switch
1.1.1.12  root     1812:   use 68EC030+FPU (Hatari doesn't support 030 with MMU and some programs don't
                   1813:   work with 68020 so this is the best choice).
1.1.1.7   root     1814:  </li>
                   1815:  <li>
                   1816:   TOS 1.0x only works with 68000, while TOS 3.0x and 4.0x work only with a CPU
                   1817:   &gt;= 68020.
                   1818:  </li>
                   1819:  <li>
                   1820:   68010 and 68040 have never been used in official Atari computers, so don't
                   1821:   use these CPU types unless you've got some good reasons.
                   1822:  </li>
                   1823: </ul>
                   1824: 
                   1825: <p>
                   1826:  Beside the CPU type, you can also choose the machine type to emulate.
                   1827:  The ST was the very first 16/32-bit computer from Atari. Most older games
                   1828:  and demos require an ST. The STE was introduced some years later and had
                   1829:  some more advanced hardware features. There are not that many demos or
                   1830:  games that really require an STE but since most normal ST games/demos also
                   1831:  work with an STE, it's normally safe to always work in STE mode.
                   1832:  <br>
                   1833:  TT and Falcon are more advanced, but they are not as compatible to the ST as
1.1.1.8   root     1834:  the STE was. Therefore many old games and demos do not work with these machine
                   1835:  types anymore. There were only very few programs that were made for the TT
1.1.1.7   root     1836:  exclusively, while there were some interesting games and demos specially made
                   1837:  for the Falcon.
1.1.1.12  root     1838:  <em>Note:</em> TT and Falcon emulation are incomplete. They may not work
1.1.1.7   root     1839:  very well.
                   1840: </p>
                   1841: <p>
                   1842:  For STE emulation a STE compatible TOS image, e.q. version 1.06, 1.62 or
                   1843:  2.x, is strongly recommended. For TT emulation you need TOS 3.0x and for Falcon
                   1844:  emulation you need TOS 4.0x. EmuTOS can be used on all machine types.
                   1845: </p>
                   1846: <p>
                   1847:  Select the CPU clock you want to use. 8Mhz is ST standard and the most
                   1848:  compatible. Use 16MHz for Mega STE and Falcon emulation.
                   1849:  The CPU in the TT was clocked with 32 MHz.
                   1850: </p>
1.1.1.12  root     1851: <p>With the "Slower but more compatible CPU" option, you can enable
1.1.1.5   root     1852:  the emulation of 68k address errors and the CPU prefetch buffer. This is needed
                   1853:  for best compatibility, but it slows down emulation a little bit so you can
                   1854:  disable it if you don't need it.</p>
1.1.1.10  root     1855: <p>
                   1856:  For Falcon mode, you can choose whether you want to enable DSP emulation,
                   1857:  fake it or completely disable it. Most Falcon programs only play sound or work
                   1858:  correctly when you enable the DSP emulation, but it needs a lot of host CPU
                   1859:  power (more than 2 GHz). So if you have a slow host CPU, you can try if your
1.1.1.12  root     1860:  Falcon program also runs with DSP disabled or in "dummy" mode.
1.1.1.10  root     1861:  Note that you can not change this option while the DSP based program already
                   1862:  runs.
                   1863: </p>
1.1.1.5   root     1864: <p>You can also enable/disable Blitter emulation here. The Blitter is a custom
                   1865:  chip that accelerates some graphical operations. This switch only toggles the
                   1866:  Blitter in plain ST mode. In STE mode, the Blitter is always enabled (since all
                   1867:  STEs have been sold with a Blitter chip).</p>
1.1.1.12  root     1868: <p>If you enable the "Real time clock emulation" switch, a RTC will
1.1.1.5   root     1869:  be emulated based on the time of the host computer. Note that you need at least
                   1870:  TOS 1.02 for proper RTC emulation, TOS 1.00 does not support this.</p>
                   1871: <p>The Timer-D patch changes the Timer-D initialization from TOS. TOS uses
                   1872:  the MFP timer D as a baudrate generator for RS232. However, the TOS default
                   1873:  value slows down the emulation. The patch gives you a better performance.
1.1.1.7   root     1874:  It is normally safe to enable the patch, but if you encounter a program that
1.1.1.5   root     1875:  does not work, you can try to disable the patch to see if it works then.</p>
1.1.1.12  root     1876: <p><em>NOTE:</em> The emulated Atari is very very sensitive to these options
                   1877:  and it is strongly recommended to reset the emulation after changing
                   1878:  them (for most things that's done automatically).   The correct
                   1879:  CPU type and clock are automatically selected when one uses the
                   1880:  <span class="commandline">--machine</span> command line option.</p>
1.1.1.5   root     1881: 
                   1882: 
1.1.1.10  root     1883: <a name="The Floppy Disks Dialog"></a><h4 class="gui">The Floppy Disks Dialog</h4>
1.1.1.5   root     1884: 
1.1.1.10  root     1885: <div class="floatimage">
                   1886: <img src="images/floppydisks.png" width="640" height="320" alt="Hatari's GUI - the floppy disks dialog">
1.1.1.5   root     1887: </div>
                   1888: 
1.1.1.10  root     1889: <p>
                   1890:  This dialog can be used to choose which floppy disks should be emulated
                   1891:  in the disk drives. You can use most standard Atari ST disk image files.
                   1892:  You may select and browse also zipped disk images. See the chapter
1.1.1.12  root     1893:  <a href="#Floppy disk images">"Floppy disk images"</a> for details.
1.1.1.10  root     1894: </p>
                   1895: <p>
                   1896:  Click on the button <span class="button">Browse</span> next to the
                   1897:  A: and B: option to go to the fileselector to choose a disk image for the
                   1898:  corresponding drive.
                   1899: </p>
1.1.1.3   root     1900: <p>Click on <span class="button">Eject</span> to eject a disk image
                   1901: from the emulated drive. The emulated ST will act as if had no floppy
                   1902: disk in its drive.</p>
                   1903: <p>You can specify a default directory where Hatari will start to
                   1904: browse the filesystem.</p>
1.1.1.2   root     1905: <p>
1.1.1.6   root     1906: Check the "Auto insert B" option if you want Hatari to be smart and
                   1907: insert the second disk of a two disk game automatically.
                   1908: Some games then use the second drive automatically.
                   1909: In the case that a game is not able to find the disk in the second drive,
                   1910: you have to insert the second disk in drive A: manually when prompted.
                   1911: <br>
                   1912: <em>NOTE:</em> This option only works properly if the file name of the
                   1913: first disks ends with an 'a' before the extension and the second disk name
                   1914: ends with a 'b'.
1.1.1.2   root     1915: </p>
1.1.1.10  root     1916: <p>
1.1.1.14  root     1917:  Select if you want to use fast FDC (Floppy Disk Controller) emulation.
                   1918:  "Fast floppy access" will speed up disk accesses, but this could give
                   1919:   some incompatibilities with some programs that expect correct delays.
                   1920:   (some games/demos don't expect data to be read too fast from the disk)
1.1.1.10  root     1921: </p>
                   1922: <p>
                   1923:  You can choose if you want Hatari to write-protect your disks. Atari ST virii
                   1924:  can spread on disk images too so it might be a good idea to enable the write
                   1925:  protection option. However you can't save highscores or games to your disk
                   1926:  images in that case.
                   1927: </p>
                   1928: 
                   1929: <div class="floatimage">
1.1.1.12  root     1930: <img src="images/newfloppy.png" width="290" height="224" alt="Hatari's GUI - the new floppy dialog">
1.1.1.10  root     1931: </div>
                   1932: 
                   1933: <p>
                   1934:  If you need to create a new blank disk image, click on
                   1935:  <span class="button">Create&nbsp;blank&nbsp;image</span>.
                   1936:  Parameters for the new image can be set in the following dialog.
1.1.1.12  root     1937:  HD and ED disk sector counts are for non-Atari disk sizes, but such
                   1938:  disks are useful for programs that don't work with GEMDOS emulation.
1.1.1.10  root     1939:  Click on <span class="button">Create</span> to save the new image or on
                   1940:  <span class="button">Back</span> to return to the disk dialog.
                   1941: </p>
                   1942: <p>
                   1943:  After clicking <span class="button">Create</span>, a fileselector
                   1944:  appears. You can browse the filesystem now. Select the target directory,
1.1.1.12  root     1945:  click beside "File:" and type in a name for the new disk image.
1.1.1.10  root     1946:  The name should terminate with .st or .msa.
                   1947: </p>
                   1948: <p>
                   1949:  Hatari can currently create plain .ST and .MSA disk images exclusively.
1.1.1.12  root     1950:  <span class="commandline">hmsa</span> command line utility can be used
                   1951:  to convert disk images between .ST and .MSA formats.
1.1.1.10  root     1952: </p>
                   1953: 
                   1954: 
                   1955: <a name="The Hard Disks Dialog"></a><h4 class="gui">The Hard Disks Dialog</h4>
                   1956: 
                   1957: <div class="floatimage">
1.1.1.12  root     1958: <img src="images/harddisks.png" width="640" height="304" alt="Hatari's GUI - the hard disks dialog">
1.1.1.10  root     1959: </div>
                   1960: 
                   1961: <p>
                   1962:  This dialog can be used to change the harddisk settings.
                   1963: </p>
                   1964: <p>
1.1.1.12  root     1965:  You can select a harddrive image for ACSI, IDE master or slave hard drive
                   1966:  emulation via image file here or you may select a directory of your local
                   1967:  filesystem to be emulated as the harddrive of the emulated system.
1.1.1.10  root     1968: </p>
                   1969: <p>
                   1970:  Check "Boot from HD" if you want Hatari to execute the AUTO folder
                   1971:  on the harddrive.
1.1.1.12  root     1972:  This option is checked by default if you specify a harddrive image or
                   1973:  a directory via the command line.
                   1974: </p>
                   1975: <p>
                   1976:  Removing the check from the "Allow GEMDOS drive modification" option
                   1977:  will prevent Atari programs from modifying the files in GEMDOS HDD
                   1978:  emulation directory or creating new files under it.
1.1.1.10  root     1979: </p>
                   1980: <p>
                   1981:  Note that for IDE hard disk emulation you also need a TOS version &gt;= 2.05.
                   1982:  And ACSI hard disk emulation does not work with TOS 4.0x in Falcon mode.
                   1983: </p>
                   1984: 
1.1.1.5   root     1985: 
1.1.1.8   root     1986: <a name="The Memory Dialog"></a><h4 class="gui">The Memory Dialog</h4>
1.1.1.5   root     1987: 
1.1.1.8   root     1988: <div class="floatimage">
                   1989: <img src="images/memory.png" width="398" height="349" alt="Hatari's GUI - the memory dialog">
1.1.1.5   root     1990: </div>
                   1991: 
1.1.1.3   root     1992: <p>You can select the amount of RAM for the emulated ST here. Only
                   1993: amounts that were valid on a real unmodified STFM can be selected.</p>
                   1994: <p><em>Note:</em> This option is critical and you are strongly advised
                   1995: to reset the emulated ST
1.1       root     1996: when changing this option.</p>
1.1.1.2   root     1997: <p>Here you will find the options to save memory snapshots as well.</p>
1.1.1.3   root     1998: <p>Click on <span class="button">Save</span> to save a memory snapshot
                   1999: to file. You can select a new filename here.</p>
                   2000: <p>Click on <span class="button">Restore</span> to restore a memory
                   2001: snapshot from a file. Use the fileselector to select the snapshot to be
                   2002: restored.</p>
                   2003: <p><em>NOTE:</em> Memory snapshots are not interchangeable between
                   2004: different versions of Hatari. E.q. if you compile a newer Hatari, you
                   2005: cannot load your old memory snapshots back.</p>
                   2006: 
1.1.1.5   root     2007: 
1.1.1.8   root     2008: <a name="The ROM Dialog"></a><h4 class="gui">The ROM Dialog</h4>
                   2009: 
                   2010: <div class="floatimage">
                   2011: <img src="images/tos.png" width="519" height="367" alt="Hatari's GUI - the ROM dialog">
1.1.1.5   root     2012: </div>
                   2013: 
1.1.1.3   root     2014: <p>Here you can select the TOS image to use. Click on <span
1.1.1.5   root     2015:  class="button">Browse</span> to select it via the fileselector.
1.1.1.3   root     2016: You can also select an optional cartridge image to use. Click on <span
1.1.1.4   root     2017:  class="button">Browse</span> to select one via the fileselector. Click on <span
1.1.1.5   root     2018:  class="button">Eject</span> to disconnect the custom cartridge image.
                   2019: </p>
1.1.1.7   root     2020: <p>
                   2021: For ST mode, use TOS 1.00, 1.02, 1.04 or 2.06.
                   2022: For STE mode, use TOS 1.06, 1.62, 2.05 or 2.06.
                   2023: If you want to use the TT mode, you must specify a TOS 3.06 image here.
                   2024: And in Falcon mode, you have to use either TOS 4.00, 4.02, 4.04 or 4.92.
                   2025: However, you should always use TOS 4.04 for Falcon mode, it's the most common one.
                   2026: Also note that TOS 4.92 can not be booted from a boot disk (like it's done on a
                   2027: real Falcon), you have to specify it directly in the TOS ROM setup dialog here.
                   2028: </p>
                   2029: <p>
                   2030: Keep in mind that any custom cartridge image will not work together with
1.1.1.5   root     2031: GEMDOS hard disk emulation or the VDI extended resolution emulation
1.1.1.3   root     2032: since some additional driver code will be used in the cartridge memory
1.1.1.7   root     2033: space for these emulations.
                   2034: </p>
                   2035: <p>
                   2036: <em>Note:</em> These options are critical and you are strongly
1.1.1.3   root     2037: advised to reset the emulated ST
1.1.1.7   root     2038: when changing one of these option.
                   2039: </p>
1.1.1.5   root     2040: 
1.1.1.8   root     2041: 
                   2042: <a name="The Joystick Dialog"></a><h4 class="gui">The Joystick Dialog</h4>
1.1.1.5   root     2043: 
                   2044: <div class="floatimage">
                   2045: <img src="images/joystick.png" width="320" height="288" alt="Hatari's GUI - the joystick dialog">
                   2046: </div>
                   2047: 
                   2048: <p>In this dialog, you can configure the emulated joysticks.
                   2049: With the upper two arrows, you can choose the joystick which you want to
                   2050: configure.</p>
1.1.1.3   root     2051: <p>Joystick 1 is the normal ST joystick port and 99.9% of all ST games
1.1.1.5   root     2052: use this port.
                   2053: Joystick 0 emulates a joystick plugged into the ST mouse port
                   2054: and is often used in games for two players.</p>
                   2055: <p>With STE joypad A and B, you can enable the emulation of Jaguar joypads
                   2056: which are plugged in the enhanced joystick ports of the Atari STE.
                   2057: Only very few STE games support these joypads, so you often won't need this.</p>
                   2058: <p>Finally, Hatari also emulates joysticks which were plugged on the parallel
                   2059: port with a special adapter on a real ST. These were used in some few
1.1.1.12  root     2060: multi-player games like "Gauntlet 2".</p>
1.1.1.5   root     2061: <p>For each ST joystick, choose whether you want to disable it,
                   2062: use the keyboard for emulation or use a real PC joystick.</p>
                   2063: <p>For keyboard emulation, you can select the keys by pressing the
1.1.1.10  root     2064: <span class="button">Define&nbsp;keys</span> button. You will be prompted to press
1.1.1.5   root     2065: the keys for up, down, left, right and fire.</p>
                   2066: <p>If you want to use a real PC joystick for the emulation, you should connect
                   2067: it to your PC before you start Hatari. Then you can choose the joystick with
                   2068: the two lower arrows.</p>
1.1.1.12  root     2069: <p>Check the "Enable autofire" option if you are too lazy to pound
1.1.1.5   root     2070: on the fire button in shoot'em-up games. However, this option only works with
                   2071: certain games. In some other games, it gets worse if you enable this option.</p>
                   2072: <p>See also the chapter "Emulated Joystick" for details.</p>
                   2073: 
1.1.1.8   root     2074: 
1.1.1.12  root     2075: <a name="The Atari Monitor Dialog"></a><h4 class="gui">The Atari Monitor Dialog</h4>
1.1.1.5   root     2076: 
1.1.1.7   root     2077: <div class="floatimage">
1.1.1.12  root     2078: <img src="images/monitor.png" width="340" height="304" alt="Hatari's
                   2079: GUI - the Atari monitor dialog">
1.1.1.5   root     2080: </div>
1.1       root     2081: 
1.1.1.7   root     2082: <p>
                   2083:  Here you control the video output of the emulated Atari.
                   2084: </p>
                   2085: <p>
1.1.1.12  root     2086:  You can select which sort of monitor to use. This option depends on
                   2087:  the machine type which you have selected in the "System options"
                   2088:  dialog. In ST and STE mode, you can choose between monochrome mode
                   2089:  (select "Mono") and color mode (select one of the other monitor types).
                   2090:  Note that when you select "TV" and use zoomed low resolution or
                   2091:  switch to ST medium resolution, you will get a TV-like screen rendering
                   2092:  which is a little bit faster but darker compared to the normal "RGB"
                   2093:  monitor mode. Switching between mono and a color monitor acts like a monitor
                   2094:  switch on a real ST - so beware, this will reboot your emulated system!<br>
                   2095:  In TT mode, you can only choose between TT-high resolution ("Mono")
                   2096:  and normal modes (select one of the other monitor types).
                   2097:  Finally the Falcon mode supports all four types of monitors. Note that most
                   2098:  Falcon demos/games require a RGB or TV mode and do not work with VGA.
1.1.1.7   root     2099: </p>
                   2100: <p>
1.1.1.12  root     2101:  "Show ST/STE borders" toggles the displaying of the borders around the ST /
                   2102:  STE screen. Some demos and games use the screen borders for displaying
                   2103:  additional graphics. As enabling this option increases CPU computing time,
                   2104:  don't enable it if you have a very slow computer.
                   2105:  This option affects only the ST and STE modes, TT and Falcon modes are
                   2106:  always displayed without borders.
1.1.1.7   root     2107: </p>
                   2108: <p>
1.1.1.12  root     2109: Extended VDI resolutions will emulate a sort of extended graphics
                   2110: card in the emulated ST which give you larger resolutions with a higher
                   2111: colordepth for GEM. Select a resolution and color depth. Check to
                   2112: activate. It will disable all other video options mentioned above.
                   2113: Uncheck to get back to a normal ST behaviour.<br>
                   2114: <em>Note:</em> Using an extended resolution will only work with GEM
                   2115: conformant applications. 99% of all games and demos will not run if you
                   2116: activate any extended resolution here.
1.1.1.7   root     2117: </p>
1.1.1.12  root     2118: 
                   2119: 
                   2120: <a name="The Hatari Screen Dialog"></a><h4 class="gui">The Hatari
                   2121: Screen Dialog</h4>
                   2122: 
                   2123: <div class="floatimage">
1.1.1.13  root     2124: <img src="images/screen.png" width="520" height="320" alt="Hatari's
1.1.1.12  root     2125: GUI - the Hatari screen dialog">
                   2126: </div>
                   2127: 
1.1.1.7   root     2128: <p>
1.1.1.12  root     2129: Here you control how the video output of the emulated Atari appears
                   2130: on your screen.
                   2131: </p>
                   2132: 
                   2133: <p>
                   2134:  Check "Fullscreen" to run Hatari in fullscreen.  By default Hatari
                   2135:  runs in windowed mode.
1.1.1.7   root     2136: </p>
                   2137: <p>
1.1.1.12  root     2138:  The "Frame Skip" option can be used to speed up the emulator
1.1.1.8   root     2139:  if it is running too slow on your system. Disable frame-skip if you have
                   2140:  a fast computer. When selecting 1, 2 or 4, drawing of corresponding number
                   2141:  of frames will be skipped after each frame actually shown by Hatari.
1.1.1.12  root     2142:  Select "Auto" to let the emulator to decide whether, and
1.1.1.8   root     2143:  how many frames will be skipped.<br>
                   2144:  <em>Note:</em> The frameskip option also affects the frame rate of the
                   2145:  screen animation recording!
1.1.1.7   root     2146: </p>
                   2147: <p>
1.1.1.13  root     2148: Indicators that you can have on the Hatari window:
1.1.1.7   root     2149: </p>
1.1.1.13  root     2150: <ul>
                   2151: <li>"Statusbar" at the bottom of the screen.
                   2152: The statusbar shows the floppy drive LEDs, the current frameskip value,
                   2153: the machine type including TOS version and memory size, and whether
                   2154: recording is currently active.</li>
                   2155: <li>"Drive led" is a colored rectangle shown on top of the Hatari window
                   2156: contents. It will show any disk (floppy or hard disk) activity.</li>
                   2157: <li>"None" turns both of above options off.</li>
                   2158: </ul>
                   2159: <p>
                   2160: "Keep desktop resolution" option will use your desktop resolution
                   2161: for fullscreen to avoid issues related to resolution switching,
                   2162: especially on LCD monitors (they're slow).  If this isn't enabled,
                   2163: values from the "Max zoomed win" option are used in selecting
                   2164: a suitable resolution.
1.1.1.7   root     2165: <p>
1.1.1.13  root     2166: "Max zoomed win" option controls up to which size Hatari tries to scale
1.1.1.12  root     2167: the Atari resolutions and how much of the borders (enabled in Atari
1.1.1.13  root     2168: Monitor dialog) will be shown.  Note that there are several limitations
                   2169: in this and the "Keep desktop resolution" option, partly because Hatari
                   2170: has different implementations for different video modes:
1.1.1.7   root     2171: </p>
1.1.1.12  root     2172: <ul>
                   2173: <li>VDI resolutions (selectable in Atari Monitor dialog) aren't scaled.</li>
                   2174: <li>ST and STE video emulation supports only doubling of the ST-low
                   2175:     resolution.</li>
                   2176: <li>Hatari doesn't support downscaling. If the original Atari resolution
1.1.1.13  root     2177:     is larger than the specified size (e.g. TT-high), the Hatari screen
                   2178:     size will also be larger than requested.  Hatari Falcon/TT window size
                   2179:     will be limited to the Desktop size though.</li>
1.1.1.12  root     2180: <li>TT and Falcon resolutions support only <em>integer</em> scaling ratios.
                   2181:     If the scaling ratio cannot match the requested size exactly, Hatari
                   2182:     will use a ratio that will produce smaller size closest to the
                   2183:     requested one.</li>
                   2184: </ul>
                   2185: <p>
                   2186: You should set these values to a size that suits best your monitor
                   2187: resolution. It's intended to help in getting Hatari to best use your
                   2188: monitor space on a windowed mode and in fullscreen avoiding "fuzzy"
1.1.1.13  root     2189: scaling done by your LCD monitor.
1.1.1.12  root     2190: </p>
                   2191: <p>
                   2192: Giving "-z 2" option on command line will reset max zoomed size to
                   2193: default values and "-z 1" will disable all zooming.
                   2194: Note that zooming takes additional CPU computing time and should
                   2195: not be enabled on very slow computers.
                   2196: </p>
                   2197: <p>Click the <span class="button">Screenshot</span> button to create
                   2198: a screenshot in PNG (or BMP) format to the current working directory
                   2199: or click the <span class="button">Record&nbsp;AVI</span> button to
1.1.1.13  root     2200: record an AVI format video of Hatari screen (and audio) output.
                   2201: </p>
                   2202: <p>
                   2203: Selecting "Crop statusbar" option will leave statusbar out from
                   2204: the screenshots and recorded videos.
1.1       root     2205: </p>
1.1.1.8   root     2206: 
                   2207: <a name="The Keyboard Dialog"></a><h4 class="gui">The Keyboard Dialog</h4>
1.1.1.5   root     2208: 
                   2209: <div class="floatimage">
1.1.1.8   root     2210: <img src="images/keyboard.png" width="459" height="223" alt="Hatari's GUI - the keyboard dialog">
1.1.1.5   root     2211: </div>
                   2212: 
                   2213: <p>Here you can select the keyboard mapping to use. Two different mappings
1.1.1.12  root     2214:  called "Symbolic" and "Scancode" are predefined.</p>
                   2215: <p>"Symbolic" tries to map the symbolic values of your PC keys
1.1.1.5   root     2216:  to the ST keys. It should be working pretty good on all systems as long
                   2217:  as your keyboard layout looks close to the standard english keyboard
                   2218:  layout. However, you might experience some problems with special keys like
                   2219:  brackets etc.</p>
1.1.1.12  root     2220: <p>"Scancode" uses the scancode values of your PC keys for keyboard
1.1.1.5   root     2221:  mapping. This only works on certain architectures like Linux where the
                   2222:  scancodes are similar to the ST scancodes (e.g. it does not work on Mac OS X).
                   2223:  If it works on your system, this often gives better results than the symbolic
                   2224:  mapping. Note that you also need a TOS version with the right language
                   2225:  (e.g. use a French TOS if you are using a French keyboard).</p>
                   2226: <p>You can also load a custom keyboard mapping file here if you wish. Please
1.1.1.12  root     2227:  note that the custom keyboard mapping will use the "symbolic"
1.1.1.6   root     2228:  mapping for all keys that are not defined by your map file. Have a look
                   2229:  at the supplied example mapfile (keymap-sample.txt) to see how to create
                   2230:  your own keyboard mapping.</p>
1.1.1.8   root     2231: <p>
                   2232:  When the emulator runs in fast forward mode, and you want to type text,
                   2233:  it can be annoying that the emulated system detects multiple key events
                   2234:  due to the key repetition of the emulated system. To avoid this you can
                   2235:  disable the key repetition in fast forward mode here.
                   2236: </p>
1.1.1.5   root     2237: 
                   2238: 
1.1.1.8   root     2239: <a name="The Sound Dialog"></a><h4 class="gui">The Sound Dialog</h4>
                   2240: 
                   2241: <div class="floatimage">
1.1.1.16! root     2242: <img src="images/sound.png" width="400" height="400" alt="Hatari's GUI - the sound dialog">
1.1.1.5   root     2243: </div>
                   2244: 
1.1.1.2   root     2245: <p>Here you can control the sound subsystem.</p>
1.1.1.16! root     2246: <p>Check "Enabled" if you want emulated sound at all. Emulation is faster if
1.1.1.3   root     2247: sound emulation is turned off.</p>
1.1.1.16! root     2248: <p>If you experiment latency issues with your OS audio's output, you
        !          2249: can check the "Synchronize" option to adjust Hatari's video emulation to match
        !          2250: your OS audio.</p>
1.1.1.10  root     2251: <p>
                   2252:  Nine frequencies from low to high quality are available. Experiment a
                   2253:  little bit to find out which fits best for your setup.
                   2254:  For most modern computers, 44100 Hz or 48000 Hz should be fine.
                   2255:  For older or slower host systems, you should use a lower frequency.
                   2256:  12517, 250033 and 50066 Hz are frequencies supported by
                   2257:  the STE/TT/Falcon sound DMA.
                   2258: </p>
                   2259: <p>
1.1.1.16! root     2260: YM voices volume mixing "ST table" method uses a lookup table of audio output
        !          2261: voltage values measured on STF, "Math model" uses a complex model to mix the
        !          2262: 3 YM voices and "Linear" just averages the 3 YM voices. Use "ST table" or "Math model"
        !          2263: for accurate sound's emulation.
1.1.1.13  root     2264: </p>
                   2265: <p>
1.1.1.10  root     2266:  You can select to record a piece of sound here.
                   2267:  Use the <span class="button">Browse</span> button to choose a file.
                   2268:  The file name extension that you use (.WAV or .YM) determines in which format
                   2269:  the sound is recorded in. The <span class="button">Record&nbsp;sound</span> button
                   2270:  is a toggle so you will need to return to the GUI to switch sound recording off
                   2271:  again (or to use the keyboard shortcut for that).
                   2272: </p>
1.1.1.5   root     2273: 
                   2274: 
1.1.1.8   root     2275: <a name="The Devices Dialog"></a><h4 class="gui">The Devices Dialog</h4>
1.1.1.5   root     2276: 
1.1.1.8   root     2277: <div class="floatimage">
1.1.1.10  root     2278: <img src="images/devices.png" width="520" height="383" alt="Hatari's GUI - the device dialog">
1.1.1.5   root     2279: </div>
                   2280: 
1.1.1.10  root     2281: <p>Check the first checkmark to enable experimental printer support.
                   2282: See the <a href="#Emulated printer">Emulated printer</a> section for
                   2283: details.</p>
1.1.1.8   root     2284: 
1.1.1.3   root     2285: <p>As Hatari currently only supports printing to file, click on <span
1.1.1.10  root     2286:  class="button">Browse</span> to select the file to print to. You can
1.1.1.3   root     2287: enter a new filename as well.</p>
1.1.1.10  root     2288: <p>Check the second checkmark to enable experimental RS232 support.
                   2289: The RS232 device is configured according to the settings of
1.1.1.3   root     2290: the emulated RS232 of the Atari ST. This means Hatari will
                   2291: automatically use baudrate and handshaking as configured for the
                   2292: emulated ST.</p>
1.1.1.10  root     2293: <p>Click on <span class="button">Browse</span> to select suitable
                   2294: device files for serial input and output.  On Linux a good choice is
                   2295: /dev/ttyS0 or /dev/ttyS1.
                   2296: </p>
                   2297: <p>Check the third checkmark to enable experimental MIDI support.
                   2298: Click on <span class="button">Browse</span> to select a suitable
                   2299: MIDI device files for MIDI input and output.</p>
                   2300: <p><span class="file">midi-linux.txt</span> file explains how to
1.1.1.12  root     2301: select the correct MIDI device file, how to set up software sound
                   2302: synthetizing on Linux (using Alsa) if your sound card/driver doesn't
                   2303: support MIDI, and how to set up MIDI networking e.g. between multiple
1.1.1.10  root     2304: Hatari instances.
1.1.1.2   root     2305: </p>
1.1.1.5   root     2306: 
1.1.1.8   root     2307: 
                   2308: <a name="Keyboard shortcuts"></a><h3 style="clear:both;">Keyboard shortcuts</h3>
1.1.1.5   root     2309: 
1.1       root     2310: <p> While the emulator is running, you can activate or toggle various
1.1.1.6   root     2311: features via Hatari keyboard shortcuts. Below are listed the default
                   2312: shortcut key bindings:</p>
1.1.1.3   root     2313: <table border="1" cellpadding="3">
1.1       root     2314:   <tbody>
                   2315:     <tr class="backdropped">
                   2316:       <td align="center">Shortcut</td>
                   2317:       <td align="center">Purpose</td>
                   2318:     </tr>
                   2319:     <tr>
1.1.1.2   root     2320:       <td align="center"><span class="key">ALTGR+a</span></td>
                   2321:       <td align="center">record animation</td>
                   2322:     </tr>
                   2323:     <tr>
1.1       root     2324:       <td align="center"><span class="key">ALTGR+g</span></td>
1.1.1.8   root     2325:       <td align="center">grab a screenshot</td>
1.1       root     2326:     </tr>
                   2327:     <tr>
1.1.1.2   root     2328:       <td align="center"><span class="key">ALTGR+i</span></td>
1.1.1.8   root     2329:       <td align="center">boss key: leave full screen mode, pause Hatari
                   2330: and iconify its window</td>
1.1.1.2   root     2331:     </tr>
                   2332:     <tr>
1.1       root     2333:       <td align="center"><span class="key">ALTGR+j</span></td>
1.1.1.8   root     2334:       <td align="center">toggle joystick emulation via cursor keys
                   2335: on/off between ports 0 and 1</td>
1.1       root     2336:     </tr>
                   2337:     <tr>
                   2338:       <td align="center"><span class="key">ALTGR+m</span></td>
1.1.1.8   root     2339:       <td align="center">(un-)lock the mouse into the window</td>
1.1       root     2340:     </tr>
                   2341:     <tr>
                   2342:       <td align="center"><span class="key">ALTGR+r</span></td>
1.1.1.2   root     2343:       <td align="center">(warm) reset the ST</td>
1.1       root     2344:     </tr>
                   2345:     <tr>
                   2346:       <td align="center"><span class="key">ALTGR+c</span></td>
1.1.1.3   root     2347:       <td align="center">coldreset the ST (same as the original power
                   2348: switch)</td>
1.1       root     2349:     </tr>
                   2350:     <tr>
1.1.1.8   root     2351:       <td align="center"><span class="key">ALTGR+d</span></td>
                   2352:       <td align="center">open dialog to select/change disk A</td>
                   2353:     </tr>
                   2354:     <tr>
1.1.1.2   root     2355:       <td align="center"><span class="key">ALTGR+s</span></td>
                   2356:       <td align="center">enable/disable sound</td>
                   2357:     </tr>
                   2358:     <tr>
1.1       root     2359:       <td align="center"><span class="key">ALTGR+q</span></td>
                   2360:       <td align="center">quit the emulator</td>
                   2361:     </tr>
                   2362:     <tr>
1.1.1.2   root     2363:       <td align="center"><span class="key">ALTGR+x</span></td>
1.1.1.10  root     2364:       <td align="center">toggle normal speed/fast forward</td>
1.1.1.2   root     2365:     </tr>
                   2366:     <tr>
                   2367:       <td align="center"><span class="key">ALTGR+y</span></td>
                   2368:       <td align="center">enable/disable sound recording</td>
                   2369:     </tr>
                   2370:     <tr>
1.1.1.7   root     2371:       <td align="center"><span class="key">ALTGR+k</span></td>
                   2372:       <td align="center">save memory snapshot</td>
                   2373:     </tr>
                   2374:     <tr>
                   2375:       <td align="center"><span class="key">ALTGR+l</span></td>
                   2376:       <td align="center">load memory snapshot</td>
                   2377:     </tr>
                   2378:     <tr>
1.1.1.5   root     2379:       <td align="center"><span class="key">ALTGR+f or F11</span></td>
1.1.1.8   root     2380:       <td align="center">toggle between fullscreen and windowed mode</td>
1.1       root     2381:     </tr>
                   2382:     <tr>
1.1.1.5   root     2383:       <td align="center"><span class="key">ALTGR+o or F12</span></td>
1.1.1.8   root     2384:       <td align="center">activate the options GUI</td>
1.1       root     2385:     </tr>
                   2386:     <tr>
                   2387:       <td align="center"><span class="key">PAUSE</span></td>
1.1.1.10  root     2388:       <td align="center">pause emulation</td>
                   2389:     </tr>
                   2390:     <tr>
                   2391:       <td align="center"><span class="key">AltGr+PAUSE</span></td>
                   2392:       <td align="center">invoke the internal Hatari debugger</td>
1.1       root     2393:     </tr>
                   2394:   </tbody>
                   2395: </table>
1.1.1.5   root     2396: 
1.1.1.6   root     2397: <p>You can change the key bindings from the Hatari configuration file.
1.1.1.10  root     2398: The required key values can be seen in the SDL_keysym.h include file
1.1.1.8   root     2399: (usually in /usr/include/SDL/).</p>
1.1.1.6   root     2400: 
                   2401: 
1.1.1.5   root     2402: <a name="Emulated Atari ST keyboard"></a><h3>Emulated Atari ST keyboard</h3>
                   2403: 
1.1       root     2404: <p> All other keys on the keyboard act as the normal Atari ST keys so
                   2405: pressing SPACE on your PC will result in an emulated press of the SPACE
                   2406: key on the ST. The following keys have special meanings: </p>
1.1.1.3   root     2407: <table border="1" cellpadding="3">
1.1       root     2408:   <tbody>
                   2409:     <tr class="backdropped">
                   2410:       <td align="center">Key</td>
                   2411:       <td align="center">Meaning</td>
                   2412:     </tr>
                   2413:     <tr>
                   2414:       <td align="center"><span class="key">Alt</span></td>
                   2415:       <td align="center">will act as the ST's ALTERNATE key</td>
                   2416:     </tr>
                   2417:     <tr>
                   2418:       <td align="center"><span class="key">left CTRL</span></td>
                   2419:       <td align="center">will act as the ST's CONTROL key</td>
                   2420:     </tr>
                   2421:     <tr>
1.1.1.2   root     2422:       <td align="center"><span class="key">Print Screen</span></td>
1.1       root     2423:       <td align="center">will emulate the ST's HELP key</td>
                   2424:     </tr>
                   2425:     <tr>
1.1.1.2   root     2426:       <td align="center"><span class="key">Scroll Lock</span></td>
1.1       root     2427:       <td align="center">will emulate the ST's UNDO key</td>
                   2428:     </tr>
1.1.1.2   root     2429:     <tr>
                   2430:       <td align="center"><span class="key">Page Up</span></td>
                   2431:       <td align="center">will emulate the ST's ( key in the keypad</td>
                   2432:     </tr>
                   2433:     <tr>
                   2434:       <td align="center"><span class="key">Page Down</span></td>
                   2435:       <td align="center">will emulate the ST's ) in the keypad</td>
                   2436:     </tr>
1.1       root     2437:   </tbody>
                   2438: </table>
1.1.1.5   root     2439: 
1.1.1.8   root     2440: <p>If joystick emulation via keyboard is enabled, by default cursor keys
                   2441: are used for the directions and <span class="key">right CTRL</span> key
                   2442: as the fire button. Otherwise they act as corresponding keys of the emulated
                   2443: Atari ST.</p>
                   2444: 
1.1.1.12  root     2445: <p>NOTE: Problems with simultenous keypresses most likely aren't an
                   2446: issue in Hatari as many modern keyboards report/support only three
                   2447: simultenous key presses (or even just two depending on which keys
                   2448: are in question).  Expensive gaming keyboards support more.</p>
                   2449: 
1.1.1.5   root     2450: 
                   2451: <a name="Emulated mouse"></a><h3>Emulated mouse</h3>
                   2452: 
1.1       root     2453: <p>For obvious reasons your PC mouse will act as the emulated Atari ST
                   2454: mouse. In fullscreen mode it will act as expected, directly controlling
                   2455: the ST mouse pointer. </p>
                   2456: <p>However it is a little bit different in windowed mode. To make the
                   2457: mouse work there as expected you need to grab it first or lock it into
1.1.1.3   root     2458: the Hatari window. Do this by pressing the <span class="key">ALTGR+m</span>
1.1.1.10  root     2459: hotkey combination or starting Hatari with the
                   2460: <span class="commandline">--grab</span> command line option.
                   2461: Press the shortcut key (again) to go back to normal mouse behaviour
                   2462: which allows you to move mouse outside outside the Hatari window while
                   2463: Hatari is up and running. Note: pausing the emulation will also
                   2464: (temporarily) release the mouse grab.</p>
1.1.1.6   root     2465: <p>Mouse scrollwheel will act as cursor up and down keys. </p>
1.1.1.5   root     2466: 
                   2467: <a name="Emulated joystick"></a><h3>Emulated joystick</h3>
                   2468: 
1.1       root     2469: <p>The Atari ST joysticks are emulated ofcourse allowing you to play
                   2470: your favourite games with Hatari. </p>
                   2471: <p>The default mode is to use a connected PC joystick. You can use any
                   2472: joystick that is supported by your kernel. If your joystick works with
                   2473: other applications, it will likely work with Hatari as well. Make sure
                   2474: it is calibrated and then off you go. Move the stick to point into the
                   2475: desired direction. Please note that Hatari will not detect analogue
                   2476: movement as the Atari ST only had digital joysticks. The first
1.1.1.3   root     2477: firebutton will act as the normal firebutton on the Atari ST while the
                   2478: second
                   2479: firebutton will emulate a keypress of the <span class="key">SPACE</span>
                   2480: key on the ST as many ST
1.1.1.8   root     2481: games utilize the SPACE bar for secondary game functions. (Xenon for
1.1.1.3   root     2482: example)</p>
1.1       root     2483: <p>If you do not have a PC joystick or joypad, then you do not need to
                   2484: desperate. You can emulate one of the two Atari ST joysticks via the
                   2485: cursor keys. Just activate it in the GUI. Then the cursor keys will act
                   2486: as the joystick directions, the right CTRL key will act as the
                   2487: firebutton. You can still use the cursor keys as the ST's
1.1.1.3   root     2488: cursorkeys in this mode as long as you press <span class="key">SHIFT</span>
1.1.1.8   root     2489: along with the cursorkeys.  You can also configure these keys from the
                   2490: joystick options.</p>
1.1.1.5   root     2491: 
                   2492: <a name="Emulated video"></a><h3>Emulated video</h3>
                   2493: 
1.1.1.8   root     2494: <p>Hatari emulates all screen modes of the original machine.</p>
                   2495: <p>
                   2496: ST/STE shifter overscan effects are emulated, but due to the fact
                   2497: that these effects are achieved by using quirks and glitches in the
                   2498: original chips to do things beyond their specification, emulation is
                   2499: a bit tricky for these effects. As a result, some demos using these
                   2500: techniques might not be displayed correctly in Hatari, known ones are
                   2501: listed in the <span class="file">compatibility.html</span> file.
1.1.1.3   root     2502: </p>
                   2503: <p>Beside that you can setup extended VDI modes. These only work with
                   2504: GEM-compliant applications and they are equal to fitting a videocard
                   2505: into your Mega ST.</p>
                   2506: <p>Make sure to disable extended VDI modes for playing games as 99% of
                   2507: all ST games will not be able to make use of higher resolutions.</p>
1.1.1.5   root     2508: 
                   2509: <a name="Emulated printer"></a><h3>Emulated printer</h3>
                   2510: 
1.1.1.3   root     2511: <p>Due to the fact that printer handling is very different between Unix
                   2512: style machines and the Atari ST, emulation
1.1.1.2   root     2513: of the printer is achieved by writing all printer output to a file.</p>
1.1.1.3   root     2514: <p>The file will contain a sequence of data, the same that would appear
                   2515: on the data pins of the Atari ST printer port.
                   2516: That would include control characters and commands for graphic
                   2517: printing. Clicking "Print desktop" on the GEM desktop would result
1.1.1.2   root     2518: in a messy data dump in the printer output.</p>
1.1.1.3   root     2519: <p>Printer emulation works best for plain text files or programs that
                   2520: do not format the output for a specific printer.
                   2521: The file contents can be used with your favourite text editor for
                   2522: further processing and printing to a real printer.</p>
                   2523: <p>To get real direct printing out of Hatari on a PostScript printer,
                   2524: you may set up a GDOS printer with a PostScript driver on the emulated
                   2525: Atari and set your printer device file as Hatari's printer output.<br>
                   2526: <em>NOTE:</em> This has not been tested yet and the Hatari team cannot
                   2527: guarantee that it will work.</p>
1.1.1.5   root     2528: 
                   2529: <a name="Emulated RS232"></a><h3>Emulated RS232</h3>
                   2530: 
1.1.1.3   root     2531: <p>Serial communications in Hatari is designed to directly use a serial
                   2532: port on your PC.</p>
                   2533: <p>Communications parameters are set automatically upon the settings of
                   2534: the emulated ST. This means all you do is to set
                   2535: the communication parameters like baudrate from your ST communications
                   2536: software. Hatari will do the rest and handle
1.1.1.2   root     2537: the serial input and output for you.</p>
1.1.1.5   root     2538: 
                   2539: <a name="Floppy disk images"></a><h2>Floppy disk images</h2>
                   2540: 
1.1       root     2541: <p>Hatari does not use floppy disks directly but disk images due to
                   2542: differences between the floppy disk controllers of the ST and the PC.
1.1.1.3   root     2543: Three types of disk images are currently supported: The raw "ST" type,
                   2544: the similar "DIM" type and
1.1.1.2   root     2545: the compressed "MSA" (Magic-Shadow-Archiver) type. </p>
1.1       root     2546: <p> The raw type (file suffix should be "*.st") is simply a sector by
                   2547: sector image of a real floppy disk. You can easily create such an image
1.1.1.3   root     2548: with the <span class="commandline">dd</span> program which should
                   2549: normally be pre-installed on every
                   2550: Unix-like system. Simply type something like <span class="commandline">dd
                   2551: if=/dev/fd0 of=myimage.st</span> to create a disk image. Of course you
                   2552: need access to
1.1       root     2553: /dev/fd0, and depending on your system and the type of floppy disk you
                   2554: might have to use another device name here (for example I use
1.1.1.3   root     2555: /dev/fd0u720 for 720kB disks). However, if the disk is copy-protected
                   2556: or
1.1       root     2557: doesn't use a MSDOS compatible file system, this might fail. So be very
1.1.1.10  root     2558: careful if you are not sure about the disk format. </p>
1.1.1.3   root     2559: <p> The other possibility is to image the disk on a real Atari ST.
                   2560: There
1.1       root     2561: are programs like the Magic Shadow Archiver for this task. Hatari
1.1.1.3   root     2562: supports this slightly compressed MSA disk images, too. Note that
                   2563: Hatari
                   2564: only supports the "old" MSA format, there are some Magic Shadow
                   2565: Archiver
1.1       root     2566: clones (like Jay-MSA) that create better compressed but
1.1.1.2   root     2567: Hatari-incompatible disk images. However, if you have got such a MSA
1.1.1.3   root     2568: disk and want to use it with Hatari, you can still run the
                   2569: corresponding
1.1.1.2   root     2570: MSA program within Hatari to extract the incompatible disk image to a
                   2571: normal floppy disk image. </p>
1.1       root     2572: <p> While *.ST and *.MSA are more or less the "standard" types of Atari
1.1.1.2   root     2573: disk images, you might sometimes also find STT or ADF images on the
1.1.1.3   root     2574: internet. These currently do not work with Hatari. </p>
                   2575: <p>Hatari can now also utilize *.DIM images just as *.ST ones without
                   2576: any problems.
1.1.1.2   root     2577: Note that DIM images are nearly the same as the raw ST images
1.1.1.3   root     2578: (they only have an additional 32 bytes header), so you can easily
                   2579: transform
1.1.1.2   root     2580: the DIM images into ST images by stripping the header from the files.
                   2581: For example try something like:
                   2582: <span class="commandline">dd if=input.dim of=output.st bs=32 skip=1</span>
                   2583: </p>
1.1       root     2584: <p> If you've got a disk image that has been created with the old ST
                   2585: emulator PaCifiST (for DOS) or with early versions of the program
                   2586: Makedisk, and the disk image does not work with Hatari, then the disk
1.1.1.3   root     2587: probably suffers from the "PaCifiST bootsector bug" (Hatari will
                   2588: display a
1.1       root     2589: warning message then). In this case, the bootsector of the disk
                   2590: contains some illegal data, so that the disk even does not work on a
                   2591: real ST any more. However, if it is a .ST and not a .MSA disk, you can
1.1.1.3   root     2592: easily fix it by using a hex-editor to change the byte at offset $D
                   2593: (13)
1.1       root     2594: from 0 to 1 (don't forget to backup your disk image first, since you
                   2595: can also easily destroy your disk image when changing a wrong byte
                   2596: there). If the disk contains a bootsector program, you probably have to
                   2597: adjust the boot sector check sum, too (it can be found at offset $1FE +
                   2598: $1FF). </p>
1.1.1.2   root     2599: <p>Hatari supports disk images that are compressed with (Pk-)ZIP
                   2600: (file suffix must be ".zip") or GZip (file suffix must be ".st.gz" or
1.1.1.3   root     2601: ".msa.gz"), so you can archive your disk images into zip archives.
1.1.1.2   root     2602: You can also directly run the zip archives you may download from the
                   2603: net as long as the archive contains a disk image in .ST or .MSA format.</p>
1.1.1.3   root     2604: <p><em>Note:</em> Hatari does not save disk images back to *.ZIP files
                   2605: so
1.1.1.2   root     2606: your highscores and savegames are lost if you load the game from such
                   2607: a zipped disk image.</p>
1.1.1.5   root     2608: 
1.1.1.10  root     2609: 
1.1.1.5   root     2610: <a name="Hard disk support"></a><h2>Hard disk support</h2>
                   2611: 
1.1.1.8   root     2612: <p>
1.1.1.10  root     2613: Hatari supports three ways of emulating Atari hard drives: The low-level
                   2614: ACSI and IDE hard disk emulation and a GEMDOS based drive emulation.
                   2615: In most cases the GEMDOS based hard disk emulation is best as it allows
                   2616: exchanging files easily between the emulated and the host environment.
                   2617: </p>
                   2618: <p>
                   2619: Please note that changing the HD-image or the GEMDOS HD-folder will reset
1.1.1.8   root     2620: the emulated Atari since it is not possible to switch the hard disk
                   2621: while the emulator is running.
                   2622: </p>
1.1.1.12  root     2623: <p>
                   2624: On a 32-bit host system, the size of a hard disk image is limited to 2 GB.
1.1.1.14  root     2625: On 64-bit host systems, bigger images might be possible but the support
                   2626: for bigger images is not tested very well yet.  How large partition sizes
                   2627: are supported inside the hard disk (images) depends on the TOS version.
                   2628: TOS 1.0x supports up to 256MB partitions and TOS 4.0x up to 1GB ones.
1.1.1.12  root     2629: </p>
1.1.1.6   root     2630: 
                   2631: 
                   2632: <a name="GEMDOS based hard disk emulation"></a><h3>GEMDOS based hard disk emulation</h3>
1.1.1.12  root     2633: <p>
                   2634: With the GEMDOS based drive emulation, you can easily "mount" a
1.1       root     2635: folder from the host file system to a drive of the emulated Atari. To
                   2636: use the GEMDOS based drive emulation, you should use a folder on your
1.1.1.3   root     2637: hard disk that only contains files and folders with valid TOS
1.1.1.12  root     2638: filenames i.e. file and folders names shouldn't contain invalid GEMDOS
                   2639: filename characters and their length shouldn't exceed the 8+3 file name
                   2640: length limit.
                   2641: </p>
                   2642: <p>
                   2643: If you provide <span class="commandline">--harddisk</span> option
1.1.1.14  root     2644: a directory containing only single letter (C-Z) subdirectories, each
                   2645: of these subdirectories will be treated as a separate partition,
                   2646: otherwise the given directory itself will be assigned to drive "C:".
                   2647: In the multiple partition case, the letters used as the subdirectory
                   2648: names will determine to which drives/partitions they're assigned.
1.1.1.12  root     2649: </p>
                   2650: <p>
                   2651: GEMDOS drive emulation is an easy way to share files between the
                   2652: host system and the emulated Atari, but there are also some known
                   2653: limitations which are due to the way the GEMDOS drive emulation is
                   2654: implemented:
                   2655: </p>
                   2656: <ul>
                   2657: <li>It is not possible to use a cartridge image at the same time
                   2658: with the GEMDOS drive emulation (Hatari has it's own cartridge code
                   2659: that is used for GEMDOS emulation).</li>
                   2660: <li>As MiNT installs its own GEMDOS handler, it doesn't work with
                   2661: the GEMDOS drive emulation.  MiNT needs to be booted from a real hard
                   2662: disk image.</li>
                   2663: <li>GEMDOS drive emulation conflicts with the ACSI and IDE harddisk images.
                   2664: If you want to use GEMDOS HD emulation and ACSI/IDE disk images together,
                   2665: use a multiple partition GEMDOS emulation setup and select the partition
                   2666: subdirectories (letters) so that they don't conflict with the ACSI/IDE
                   2667: drive partitions (letters).  With HD Driver you have also another option,
                   2668: see <a href="#Using HD Driver with GEMDOS partitions">Using HD Driver
                   2669: with GEMDOS partitions</a>.</li>
                   2670: <li><em>The GEMDOS drive emulation does not work (very well) with TOS
                   2671: 1.00 and 1.02</em>.  Use at least TOS 1.04 if you want the GEMDOS drive
                   2672: emulation to work properly.</li>
                   2673: </ul>
                   2674: <p>
                   2675: So, if your programs complain that they could not find/read/write
                   2676: files on the GEMDOS emulated drive, you should try to copy them to a
                   2677: floppy disk image or a real hard disk image!
1.1.1.6   root     2678: </p>
1.1.1.8   root     2679: 
1.1.1.10  root     2680: <a name="ACSI hard disk emulation"></a><h3>ACSI hard disk emulation</h3>
                   2681: <p>
                   2682: To use the ACSI hard disk emulation, you need a hard disk image file
1.1.1.12  root     2683: with a pre-installed HD driver in it. You can try to get an image of
                   2684: your old ST hard disk or grab one from the internet (e.g. from the
                   2685: Hatari website).
                   2686: </p>
                   2687: <p>
                   2688: To create a <em>new</em> ACSI hard disk image, you can start with an empty
                   2689: image that you have created for example with the following command:
                   2690: <span class="commandline">dd if=/dev/zero of=hd.img bs=512 count=xxx</span>
                   2691: (where 'xxx' is size in 512 byte blocks).  Copy the complete AHDI 5.0
                   2692: package to a floppy disk image, then boot Hatari with this floppy disk
                   2693: image and the fresh hard disk image like this:
                   2694: <span class="commandline">--acsi hd.img ahdi.st</span>.
                   2695: Then start HDX.PRG from the floppy disk and format + partition the hard
                   2696: disk image with it.
                   2697: </p>
                   2698: <p>
                   2699: Formatting and partitioning works currently only with AHDI 5, but you
                   2700: can install the AHDI 6 driver to the hard disk after it's formatted.
                   2701: Restart the emulated system, run AHDI.PRG from the floppy disk to access
                   2702: the hard disk image from the emulated Atari and then run HINSTALL.PRG.
                   2703: After installing the hard disk driver to the fresh HD image with
                   2704: HINSTALL.PRG, you can boot directly from the hard disk image.
1.1.1.10  root     2705: </p>
                   2706: 
                   2707: <a name="IDE hard disk emulation"></a><h3>IDE hard disk emulation</h3>
                   2708: <p>
1.1.1.12  root     2709: <p>
                   2710: As the IDE disk format (little endian) differs from the ACSI disk format
                   2711: (big endian), you need separate disk images for them.  Hatari doesn't
                   2712: currently support formatting IDE disks with AHDI, but you can do it with
                   2713: <em>Cecile</em>.
                   2714: </p>
                   2715: <p>
                   2716: First create an empty image file with the size of your choice with:
1.1.1.10  root     2717: <span class="commandline">dd if=/dev/zero of=hd.img bs=1k count=xxx</span>.
                   2718: Then get the Cecile hard disk driver from
                   2719: <a href="http://centek.free.fr/atari/softs/s_cecile.htm">http://centek.free.fr/atari/softs/s_cecile.htm</a>
1.1.1.12  root     2720: and put it on a floppy disk image (e.g. to one named "cecile.st" using:
                   2721: <span class="commandline">zip2st.sh cecile.zip</span>).
1.1.1.10  root     2722: </p>
                   2723: <p>
                   2724: Run Hatari with
1.1.1.12  root     2725: <span class="commandline">hatari --machine falcon --tos tos404.rom
                   2726: --ide-master hd.img cecile.st</span>, switch to larger color resolution
                   2727: and warm up your French language skills. Then start the Cecile hard
                   2728: disk driver CECILE.PRG and run CC_TOOLS.APP to partition your hard
                   2729: disk image. Click the "Partition" button, select "Hatari IDE disk" and set
                   2730: suitable partition size with the arrows (below type field). Then click
                   2731: "Valider".
1.1.1.10  root     2732: </p>
                   2733: <p>
                   2734: If you only want to use your HD image in Falcon mode, you can install
                   2735: the Cecile hard disk driver to the image from the Cecile CC_TOOLS.APP:
1.1.1.12  root     2736: Click the "Installer" button and save the Cecile driver to the
1.1.1.10  root     2737: 1st partition on "Hatari IDE disk". If you want to also use your HD
                   2738: image in ST/STE mode, you need to get and install AHDI 6 driver on it
1.1.1.13  root     2739: instead (see <a href="#ACSI hard disk emulation">ASCI hard disk
1.1.1.12  root     2740: emulation</a> section).
1.1.1.10  root     2741: </p>
                   2742: <p>
                   2743: Then you can boot from your hard disk image by simply specifying it
1.1.1.12  root     2744: with the <span class="commandline">--ide-master</span> parameter.
1.1.1.10  root     2745: </p>
                   2746: 
                   2747: 
1.1.1.12  root     2748: <a name="Moving files to/from hard disk images"></a><h2>Moving files
                   2749: to/from hard disk images</h2>
                   2750: 
                   2751: <p>Moving files to and from Atari hard disk images can be done
                   2752: either through GEMDOS partitions (host directories mounted inside
                   2753: Hatari emulation) or accessing the images directly on the host
                   2754: (outside the emulation).  Both have their own limitations.</p>
                   2755: 
                   2756: <p>If it's fine for the IDE/ACSI partitions to be first, you can use
                   2757: hard disk images with AHDI or Cecile driver and a multipartition
                   2758: GEMDOS setup as described in above sections. If you want to boot from
                   2759: a GEMDOS partition i.e. such to be before hard disk image partitions,
                   2760: and still to be able to access all the IDE/ACSI partitions, you need to
                   2761: use HD Driver.</p>
                   2762: 
                   2763: <a name="Using HD Driver with GEMDOS partitions"></a><h3>Using HD Driver
                   2764: with GEMDOS partitions</h3>
                   2765: 
                   2766: <p>Uwe Seimet's <a href="http://www.seimet.de/atari/en/hddriver.html">HD
                   2767: Driver</a> works fine with both the Hatari GEMDOS partitions and normal
                   2768: hard disk images.  However, it doesn't work with EmuTOS so you need
                   2769: real TOS (at least version v1.04).
                   2770: </p>
                   2771: 
                   2772: <p>First copy the HDDRIVER.PRG binary into your GEMDOS drive emulation
                   2773: directory AUTO folder. Then start the HDDRUTIL.APP configuration utility,
                   2774: locate HDDRIVER.PRG, open the
                   2775: <a href="http://www.seimet.de/atari/en/hddriverscreenshots.html">"Devices
                   2776: and Partitions" dialog</a> and select the "Preserve Existing Partitions"
                   2777: option.  Then you can just start Hatari with your hard disk image and
                   2778: this GEMDOS directory, for example like this:
                   2779: "<span class="commandline">hatari --harddisk gemdos-hd/ --ide-master
                   2780: ide-hd.image</span>".</p>
                   2781: 
                   2782: <p>If you're using the <em>demo</em> version of HD Driver, you can
                   2783: write files only to the C: partition, i.e. in above case only copy
                   2784: files from the hard disk image partition to the GEMDOS partition (with
                   2785: some write slowndowns included into the demo version). If you want to
                   2786: copy files to the hard disk image with the <em>demo</em> version of
                   2787: the HD Driver, you need to set the hard disk image as drive C:.</p>
                   2788: 
                   2789: <p>To accomplish this, set the GEMDOS partitions to be from D: forward,
                   2790: i.e. have a directory which contains only single letter subdirectories,
                   2791: starting from "D" like in "<span class="commandline">mkdir gemdos-hd;
                   2792: mkdir gemdos-hd/D</span>". Then give Hatari (as the last parameter)
                   2793: a boot floppy image containing the demo version of HDDRIVER.PRG in
                   2794: its AUTO folder, like this: "<span class="commandline">hatari
                   2795: --ide-master ide-hd.image --harddisk gemdos-hd/ hd-driver-floppy.st</span>".
                   2796: </p>
                   2797: 
                   2798: 
                   2799: <a name="Accessing HDD image partitions outside of Hatari"></a><h3>Accessing
                   2800: HDD image partitions outside of Hatari</h3>
                   2801: 
1.1.1.10  root     2802: <p>
1.1.1.12  root     2803: If you want to access the harddisk image partitions also outside
                   2804: the emulation, the disk image needs to have a DOS partition table.
                   2805: The <span class="commandline">atari-hd-image</span> script included
1.1.1.10  root     2806: with Hatari can be used to create such an image.
                   2807: </p>
                   2808: <p>
                   2809: Inside the Hatari emulator, EmuTOS can access partition(s) on these
                   2810: kind of images directly without any driver software.  Of the Atari HD
1.1.1.12  root     2811: drivers mentioned above, Centek's Cecile and Uwe Seimet's HD Driver
                   2812: (demo) work fine with these partitions. E.g. AHDI and CBHD don't.
1.1.1.10  root     2813: </p>
                   2814: <p>
1.1.1.12  root     2815: Note that plain EmuTOS supports only ACSI and the listed HD drivers
                   2816: support only IDE (emulation). Cecile needs TT or Falcon and HD Driver
                   2817: doesn't work with EmuTOS.  To summarise; if ASCI emulation and
                   2818: EmuTOS are enough, use those. Otherwise, if you want to use TT or
                   2819: Falcon emulation, use Cecile (or full HD Driver version if you have
                   2820: it), otherwise use HD Driver (demo).
1.1.1.10  root     2821: </p>
                   2822: <p>
                   2823: To access the content of the partitions on Linux host, there are two
                   2824: possibilities:
                   2825: 
                   2826: <h4>Using Mtools</h4>
                   2827: <p>
                   2828: For this you need to add an entry for the hard disk
                   2829: image to your <span class="commandline">~/.mtoolsrc</span> and
                   2830: specify which partition you want to access from the image. For
                   2831: an image created with the above mentioned script, the line in
                   2832: the configuration file should look something like this:
                   2833: </p>
                   2834: <pre>
                   2835: MTOOLS_NO_VFAT=1
                   2836: drive c: file="/home/user/hatari/hd.img" partition=1
                   2837: </pre>
                   2838: <p>
                   2839: Note that Mtools is instructed to use FAT compatibility mode because
                   2840: EmuTOS cannot deal properly with VFAT file information.  If you don't
                   2841: want this setting for all your Mtools drives, you can set it also via
1.1.1.12  root     2842: the environment like this ("::" refers to the drive image given with
                   2843: the "-i" option):
1.1.1.10  root     2844: </p>
                   2845: <pre>
1.1.1.12  root     2846: MTOOLS_NO_VFAT=1 mcopy -spmv -i hd.img files/* ::
1.1.1.10  root     2847: </pre>
                   2848: 
                   2849: <h4>Using a loopback device</h4>
                   2850: <p>
                   2851: This is recommended even by Mtools documentation, but it's less
                   2852: convenient as it requires root rights. First you need to "loop"
                   2853: mount the image:
                   2854: </p>
                   2855: <pre>
                   2856: $ su
                   2857: # image="hd.img"; mountdir="hd"
                   2858: # start=$(parted $image unit s print | awk '/ 1 /{print $2}' | tr -d s)
                   2859: # losetup -f $image -o $((512*$start))
                   2860: # loop=$(losetup -a | tail -1 | cut -d: -f1)
                   2861: # mkdir -p $mountdir
                   2862: # mount -t msdos $loop $mountdir
                   2863: </pre>
                   2864: <p>
                   2865: This uses <span class="commandline">parted</span> to find out the first
                   2866: partition offset in sectors and then tells <span class="commandline">losetup</span>
                   2867: to bind the first free loop device to a corresponding offset from
                   2868: the <span class="commandline">hd.img</span> image.
                   2869: <span class="commandline">mount</span> is then used to mount the file system
                   2870: from the loop device on top of the "hd" directory.
                   2871: </p>
                   2872: <p>
                   2873: After you've copied the relevant files to the "hd" directory, you need
                   2874: unmount the file system and remove the loop device binding before using
                   2875: the disk image from Hatari:
                   2876: </p>
                   2877: <pre>
                   2878: # umount $mountdir
                   2879: # losetup -d $loop
                   2880: </pre>
                   2881: 
                   2882: <a name="The debugger"></a><h2>The debugger</h2>
                   2883: 
                   2884: <p>
                   2885: Hatari has a built-in debugging interface which can be used for
1.1.1.12  root     2886: analyzing code that runs in the emulated system. To invoke the
                   2887: debugger, press the <span class="key">AltGr + Pause</span>
                   2888: key combination.
                   2889: </p>
1.1.1.10  root     2890: 
                   2891: <p>
1.1.1.12  root     2892: If you start Hatari with the "-D" command line option, m68k
                   2893: exceptions will automatically invoke the debugger. You can
                   2894: toggle this also later from the debugger with the "setopt -D"
1.1.1.10  root     2895: command.
                   2896: </p>
                   2897: 
                   2898: <p>
1.1.1.13  root     2899: To run debugger commands at Hatari startup, one can use the "--parse
                   2900: &lt;file&gt;" command line option.  This is useful e.g. for debugging
                   2901: TOS or some demo startup code, or if you always want to use some
                   2902: specific debugger setup (breakpoints etc).
                   2903: </p>
                   2904: 
                   2905: <p>
1.1.1.12  root     2906: The debugger uses Hatari's parent console window, so make sure you run
                   2907: Hatari from the command line when you want to use the debugger. On
1.1.1.13  root     2908: Linux you can add for example an icon to your desktop that does it
                   2909: with something like this (replace "xterm" with your favorite terminal
                   2910: program):
1.1.1.10  root     2911: </p>
1.1.1.13  root     2912: <pre>
                   2913: xterm -T "Hatari debug window" -e hatari
                   2914: </pre>
1.1.1.10  root     2915: 
1.1.1.12  root     2916: 
                   2917: <a name="General debugger use"></a><h3>General debugger use</h3>
                   2918: 
1.1.1.10  root     2919: <p>
1.1.1.12  root     2920: At the debugger prompt, type "help" to get a list of all
1.1.1.10  root     2921: the available commands and their shortcuts:
                   2922: </p>
                   2923: <pre>
1.1.1.12  root     2924: Generic commands:
                   2925:            cd (  ) : change directory
                   2926:      evaluate ( e) : evaluate an expression
                   2927:          help ( h) : print help
1.1.1.14  root     2928:       history (hi) : show last CPU & DSP PC values & executed instructions
1.1.1.12  root     2929:          info ( i) : show machine/OS information
1.1.1.13  root     2930:          lock (  ) : specify information to show on entering the debugger
1.1.1.12  root     2931:       logfile ( f) : open or close log file
                   2932:         parse ( p) : get debugger commands from file
                   2933:        setopt ( o) : set Hatari command line and debugger options
                   2934:     stateload (  ) : restore emulation state
                   2935:     statesave (  ) : save emulation state
                   2936:         trace ( t) : select Hatari tracing settings
                   2937:          quit ( q) : quit emulator
                   2938: 
                   2939: CPU commands:
                   2940:       address ( a) : set CPU PC address breakpoints
                   2941:    breakpoint ( b) : set/remove/list conditional CPU breakpoints
1.1.1.10  root     2942:        disasm ( d) : disassemble from PC, or given address
1.1.1.13  root     2943:       profile (  ) : profile CPU code
1.1.1.10  root     2944:        cpureg ( r) : dump register values or set register to value
                   2945:       memdump ( m) : dump memory
                   2946:      memwrite ( w) : write bytes to memory
                   2947:       loadbin ( l) : load a file into memory
                   2948:       savebin ( s) : save memory to a file
1.1.1.12  root     2949:       symbols (  ) : load CPU symbols & their addresses
1.1.1.10  root     2950:          cont ( c) : continue emulation / CPU single-stepping
1.1.1.12  root     2951: 
                   2952: DSP commands:
                   2953:    dspaddress (da) : set DSP PC address breakpoints
                   2954:      dspbreak (db) : set/remove/list conditional DSP breakpoints
                   2955:     dspdisasm (dd) : disassemble DSP code
                   2956:    dspmemdump (dm) : dump DSP memory
                   2957:    dspsymbols (  ) : load DSP symbols & their addresses
1.1.1.13  root     2958:    dspprofile (dp) : profile DSP code
1.1.1.12  root     2959:        dspreg (dr) : read/write DSP registers
                   2960:       dspcont (dc) : continue emulation / DSP single-stepping
1.1.1.10  root     2961: </pre>
                   2962: 
1.1.1.13  root     2963: <a name="Entering arguments to debugger commands">
                   2964: </a><h4>Entering arguments to debugger commands</h4>
                   2965: 
                   2966: <p>
                   2967: After writing (with TAB completion) one of the above command names,
                   2968: pressing TAB will (for most commands) show all the available subcommands.
                   2969: </p>
                   2970: 
1.1.1.10  root     2971: <p>
1.1.1.13  root     2972: If you want to give numbers in other number bases
1.1.1.12  root     2973: than the default/selected one, they need to be prefixed with a
                   2974: character indicating this.  For decimals this prefix is "#" (#15),
                   2975: for hexadecimals "$" ($F), and for binary values it's "%" (%1111).
1.1.1.13  root     2976: </p>
                   2977: 
                   2978: <p>
                   2979: By default debugger expects all numbers without a prefix to be
1.1.1.12  root     2980: decimals, but you can change the default number base with the "setopt"
                   2981: command, just give it the desired default number base (bin/dec/hex).
1.1.1.13  root     2982: <em>When using the hexadecimal number base, remember still to prefix
                   2983: hexadecimal numbers with '$' if they could be confused with register
                   2984: names (a0-7, d0-7)!</em>  Otherwise results from expressions and
                   2985: conditional breakpoints can be unexpected.
1.1.1.12  root     2986: </p>
                   2987: 
1.1.1.13  root     2988: 
                   2989: <h4>Calculations and immediate evaluation</h4>
                   2990: 
1.1.1.12  root     2991: <p>
1.1.1.13  root     2992: Instead of a number, you can also use an arithmetic expression, by
                   2993: surrounding it with quotes ("").  An expression can contain
                   2994: calculations with CPU and DSP register, symbol and Hatari variable
                   2995: values in addition to numbers. For example to give a sum of A0 and
                   2996: D0 register values to a command, use "a0+d0".
1.1.1.12  root     2997: </p>
                   2998: 
                   2999: <p>
1.1.1.13  root     3000: Within arithmetic expressions parenthesis are used both to change
                   3001: the order of precendence <em>and</em> to indicate indirect addressing.
                   3002: Unlike with conditional breakpoint expressions (explained below), you
                   3003: cannot give size for the indirect addressing, a long value is always
                   3004: read from the RAM address given within parenthesis.  For example to
                   3005: get a long value pointed by stack pointer + 2, use "(a7+2)".
1.1.1.12  root     3006: </p>
                   3007: 
                   3008: <p>
1.1.1.13  root     3009: Values of arithmetic expressions are always evaluated before being
                   3010: given to a command.  Except for "evaluate" and "address" commands,
                   3011: they always need to be marked with quotes (""). Besides arithmetics,
                   3012: this can be used also to give symbol/register/variable values to
                   3013: commands that don't otherwise interpret them.  If command complains
                   3014: that it didn't recognize e.g. a register name, just put it to quotes
                   3015: and it will be "evaluated" before being given to the command.
1.1.1.12  root     3016: </p>
                   3017: 
                   3018: <p>
                   3019: With command argument completion (see <a href="#Build notes">build
1.1.1.13  root     3020: notes</a>), result from the last "evaluate" command can be inserted
                   3021: by typing '$' and pressing TAB.
1.1.1.12  root     3022: </p>
                   3023: 
                   3024: 
                   3025: <a name="Inspecting emulation state"></a><h3>Inspecting emulation state</h3>
                   3026: 
                   3027: <p>
                   3028: In the beginning, probably the most interesting commands are "m" and "d"
                   3029: for dumping and disassembling memory regions.  You can use "dm" and "dd"
                   3030: commands to do the same for the DSP.
1.1.1.10  root     3031: </p>
                   3032: <pre>
                   3033: &gt; help memdump
                   3034: 'memdump' or 'm' - dump memory
1.1.1.12  root     3035: Usage:  m [start address-[end address]]
1.1.1.10  root     3036:         dump memory at address or continue dump from previous address.
                   3037: </pre>
                   3038: <pre>
                   3039: &gt; help disasm
                   3040: 'disasm' or 'd' - disassemble from PC, or given address
1.1.1.12  root     3041: Usage:  d [start address-[end address]]
1.1.1.10  root     3042:         If no address is given, this command disassembles from the last
1.1.1.12  root     3043:         position or from current PC if no last position is available.
1.1.1.10  root     3044: </pre>
                   3045: <pre>
1.1.1.13  root     3046: &gt; disasm pc
                   3047: $00aa6e : 2f08                                 move.l    a0,-(sp)
                   3048: $00aa70 : 0241 0fff                            andi.w    #$fff,d1
                   3049: $00aa74 : 207c 00fe 78c0                       movea.l   #$fe78c0,a0
                   3050: $00aa7a : 2070 1000                            movea.l   (a0,d1.w),a0
                   3051: $00aa7e : 4ed0                                 jmp       (a0)
1.1.1.10  root     3052: </pre>
                   3053: 
                   3054: <p>
1.1.1.13  root     3055: Both commands accept in addition to numeric addresses also register
                   3056: and symbol names, like in above example.  If you don't specify an
                   3057: address, the commands continue showing from an address that comes
                   3058: after the previously shown data.  "disasm" command default address
                   3059: will be reseted to PC address everytime you re-enter the debugger.
                   3060: </p>
                   3061: 
                   3062: <p>
1.1.1.12  root     3063: You can use the "info" command to see state of specific sets of HW
1.1.1.13  root     3064: registers (e.g. "info videl") and Atari OS structures (e.g. "info gemdos").
                   3065: </p>
                   3066: 
                   3067: 
                   3068: <h4>Selecting what information is shown on entering the debugger</h4>
                   3069: 
                   3070: <p>
                   3071: By using the "lock" command, you can ask Hatari to show specific
                   3072: information whenever you enter the debugger / hit a breakpoint. For
                   3073: example to see disassembly from current PC address, use "lock disasm".
                   3074: </p>
                   3075: 
                   3076: <p>
                   3077: With the "regaddr" subcommand, you see disassembly or memory
                   3078: dump of an address pointed by a given register ("lock regaddr disasm
                   3079: a0"). Of the DSP registers, only Rx ones are valid for this
                   3080: subcommand.
                   3081: </p>
                   3082: 
                   3083: <p>
                   3084: "file" subcommand can be used to get (arbitrary number of) commands
                   3085: parsed and executed from a given debugger input file whenever debugger
                   3086: is entered.  With this you can output any information you need:
1.1.1.12  root     3087: </p>
1.1.1.13  root     3088: <pre>
                   3089: lock file debugger.ini
                   3090: </pre>
1.1.1.12  root     3091: 
                   3092: <p>
1.1.1.13  root     3093: To disable showing of this extra information, use "lock default".
                   3094: Without arguments "lock" command will show the available options
                   3095: (like the "info" command does).
1.1.1.12  root     3096: </p>
                   3097: 
1.1.1.13  root     3098: 
1.1.1.12  root     3099: <a name="Debug symbols"></a><h3>Debug symbols</h3>
                   3100: 
                   3101: <p>
                   3102: You can load symbol name/address information from a file to the
                   3103: debugger with the "symbols" command (and with "dspsymbols" for DSP).
1.1.1.13  root     3104: These symbolic names can be used in arithmetic expressions and
                   3105: conditional breakpoint expressions.  They also show up in the "disasm"
1.1.1.16! root     3106: command output and you can trace calls to them with "trace cpu_symbols"
        !          3107: (and DSP symbols with "trace dsp_symbols").
1.1.1.12  root     3108: </p>
                   3109: 
                   3110: <p>The symbols file format is following:</p>
                   3111: <pre>
                   3112: e01034 T random
                   3113: e01076 T kbdvbase
                   3114: e0107e T supexec
                   3115: </pre>
                   3116: <p>
1.1.1.13  root     3117: Where 'T' means text (code), 'D' means data and 'B' means BSS section
                   3118: type of address.  The hexadecimal address, address type letter and the
                   3119: symbol name are separated by white space.  Empty lines and lines
                   3120: starting with '#' (comments) are ignored.
1.1.1.12  root     3121: </p>
                   3122: 
                   3123: <p>
                   3124: AHCC C-compiler can provide a symbol file suitable for this with its
1.1.1.13  root     3125: "-n" 'nm' list option (not enabled by default). If you're reverse
1.1.1.12  root     3126: engineering some code, you could just create your own symbols file to
                   3127: help in debugging it later.
                   3128: </p>
                   3129: 
                   3130: <p>
                   3131: If you're debugging normal TOS/GEM programs instead of code loaded
1.1.1.13  root     3132: into a fixed address (like e.g. EmuTOS is), after the program has been
                   3133: loaded, load the symbols with the program text segment address offset:
                   3134: </p>
                   3135: <pre>
                   3136: symbols calc.sym "TEXT"
1.1.1.12  root     3137: </pre>
1.1.1.13  root     3138: <p>
                   3139: (The value of the above virtual "TEXT" debugger variable comes from a
                   3140: program basepage, it's set after the program is loaded by TOS, see
                   3141: "info basepage" output.)
                   3142: </p>
                   3143: 
1.1.1.12  root     3144: 
                   3145: <a name="Breakpoints"></a><h3>Breakpoints</h3>
                   3146: 
                   3147: <p>
                   3148: There are two ways to specify breakpoints for Hatari. First, there are
                   3149: the simple address breakpoints which trigger when the CPU (or DSP)
                   3150: program counter hits a given address. Use "a" (or "da" for the DSP)
                   3151: to create them, for example:
                   3152: </p>
                   3153: <pre>
1.1.1.13  root     3154: a $e01034
                   3155: a some_symbol
1.1.1.12  root     3156: </pre>
                   3157: 
                   3158: <p>
1.1.1.13  root     3159: Note that address breakpoints are just wrappers for conditional
                   3160: breakpoints so you need to use "b" command to remove or list them.
1.1.1.12  root     3161: </p>
                   3162: 
                   3163: <p>
                   3164: Then there are the conditional breakpoints which can handle much more
1.1.1.13  root     3165: complex break condition expressions; they can track changes to
                   3166: register and memory values with bitmasks, include multiple conditions
                   3167: for triggering a breakpoint and so on.  Use "b" (or "db" for the DSP) 
                   3168: to manage them.
1.1.1.10  root     3169: </p>
                   3170: 
1.1.1.13  root     3171: <p>Help explains the general syntax:</p>
1.1.1.10  root     3172: <pre>
1.1.1.13  root     3173: &gt; help b
                   3174: 'breakpoint' or 'b' - set/remove/list conditional CPU breakpoints
                   3175: Usage:  b &lt;condition&gt; [&amp;&amp; &lt;condition&gt; ...] [:&lt;option&gt;] | &lt;index&gt; | help | all
                   3176: 
                   3177: Set breakpoint with given &lt;conditions&gt;, remove breakpoint with
                   3178: given &lt;index&gt;, remove all breakpoints with 'all' or output
                   3179: breakpoint condition syntax with 'help'.  Without arguments,
                   3180: lists currently active breakpoints.
                   3181: </pre>
                   3182: 
                   3183: <p>
                   3184: Unless you give breakpoint one of the pre-defined subcommands ('all',
                   3185: 'help'), index for a breakpoint to remove or no arguments (to list
                   3186: breakpoints), the arguments are interpreted as a new breakpoint
                   3187: definition.
                   3188: </p>
                   3189: 
                   3190: <p>
                   3191: Each conditional breakpoint can have (currently up to 4) conditions
                   3192: which are separated by "&amp;&amp;".  All of the breakpoint's
                   3193: conditions need to be true for a breakpoint to trigger.
                   3194: </p>
                   3195: 
                   3196: 
                   3197: <a name="Breakpoint options"></a><h4>Breakpoint options</h4>
                   3198: 
                   3199: <p>
                   3200: Normally when a breakpoint is triggered, emulation is stopped and you
                   3201: get to the debugger. Breakpoint options can be used to affect what
                   3202: happens when a breakpoint is triggered.  These options are given after
                   3203: the conditions and are prefixed with ':'. 
                   3204: </p>
                   3205: 
                   3206: <dl>
                   3207: <dt><em>&lt;count&gt;</em></dt>
                   3208: <dd>Break only on every &lt;count&gt; hit. For example, to stop
                   3209: on every other time PC is at given address, use:
                   3210: <pre>
                   3211: a $1234 :2
                   3212: </pre>
                   3213: </dd>
                   3214: 
                   3215: <dt><em>once</em></dt>
                   3216: <dd>
                   3217: Delete the breakpoint when it's hit i.e. trigger it only once. It may
                   3218: be useful if you just want to get a specific address. Or if you're on
                   3219: an instruction that jumps back to a start of the loop and you want to
1.1.1.16! root     3220: finish the loop, you could use:
1.1.1.13  root     3221: <pre>
                   3222: b pc &gt; "pc" :once
                   3223: continue
                   3224: </pre>
                   3225: </dd>
                   3226: 
                   3227: <dt><em>trace</em></dt>
                   3228: <dd>
                   3229: Continue emulation without stopping after printing the value that
                   3230: triggered the breakpoint and doing other possible option actions.
                   3231: This is most useful when investigating memory or register value
                   3232: changes (explained below).
                   3233: </dd>
                   3234: 
                   3235: <dt><em>lock</em></dt>
                   3236: <dd>
                   3237: Show the same information on breakpoint hit as you see when entering
                   3238: the debugger (see the "lock" command in
                   3239: <a href="#Inspecting emulation state">Inspecting emulation state</a>
                   3240: above).  This enables also trace option as you would anyway see this
                   3241: information if debugger would be entered.
                   3242: </dd>
                   3243: 
                   3244: <dt><em>file &lt;file&gt;</em></dt>
                   3245: <dd>
                   3246: Execute debugger commands from given &lt;file&gt; when this breakpoint
                   3247: is hit.  With this you have complete control over what information is
                   3248: show when the debugger is hit, you can even chain breakpoints (as
                   3249: explained in
                   3250: <a href="#Chaining breakpoints">Chaining breakpoints</a> later on)
                   3251: etc.  Use this if "lock" option isn't enough or you want different
                   3252: information show on breakpoints and when entering the debugger.
                   3253: </dd>
                   3254: </dl>
                   3255: 
                   3256: <p>
                   3257: Note: you can give multiple options for conditional breakpoints, but
                   3258: for address breakpoints you can give only one these options.  And
                   3259: "file" option is supported only for conditional breakpoints.
                   3260: </p>
                   3261: 
                   3262: 
                   3263: <a name="Breakpoint conditions"></a><h4>Breakpoint conditions</h4>
                   3264: 
                   3265: <p>
                   3266: "b help" explains very briefly the breakpoint condition syntax:
                   3267: </p>
                   3268: <pre>
                   3269: &gt; b help
                   3270: condition = &lt;value&gt;[.mode] [&amp; &lt;mask&gt;] &lt;comparison&gt; &lt;value&gt;[.mode]
1.1.1.10  root     3271: 
                   3272: where:
1.1.1.12  root     3273:         value = [(] &lt;register/symbol/variable name | number&gt; [)]
1.1.1.13  root     3274:         number/mask = [#|$|%]&lt;digits&gt;
1.1.1.12  root     3275:         comparison = '&lt;' | '&gt;' | '=' | '!'
                   3276:         addressing mode (width) = 'b' | 'w' | 'l'
                   3277:         addressing mode (space) = 'p' | 'x' | 'y'
1.1.1.13  root     3278: </pre>
                   3279: 
                   3280: <p>
                   3281: For CPU breakpoints, mode is the address width; it can be byte ("b"),
                   3282: word ("w") or long ("l", default).  For DSP breakpoints, mode specifies
                   3283: the address space: "P", "X" or "Y". Note that on DSP only R0-R7
                   3284: registers can be used for memory addressing.  For example;
                   3285: <pre>
                   3286: db (r0).x = 1 &amp;&amp; (r0).y = 2
1.1.1.10  root     3287: </pre>
                   3288: 
                   3289: <p>
                   3290: If the value is in parenthesis like in '($ff820)' or '(a0)', then the
1.1.1.12  root     3291: used value will be read from the memory address pointed by it.  Note
1.1.1.13  root     3292: that this conditional breakpoint expression value is checked at
                   3293: run-time whereas quoted arithmetic expressions (mentioned in
                   3294: <a href="#Entering arguments to debugger commands">Entering arguments
                   3295: to debugger commands</a> above) are evaluated already when
                   3296: adding a breakpoint.  For example, to break when a value in an address
                   3297: (later) pointed by A0 matches the value <em>currently</em> in D0, one
                   3298: would use:
1.1.1.10  root     3299: </p>
1.1.1.12  root     3300: <pre>
1.1.1.13  root     3301: b (a0) = "d0"
1.1.1.12  root     3302: </pre>
                   3303: 
1.1.1.10  root     3304: <p>
1.1.1.13  root     3305: If you're interested only on certain bits in the value, you can use
                   3306: '&amp;' and a numeric mask on either side of comparison operator to
                   3307: mask the coresponding value, like this:
                   3308: <pre>
                   3309: b ($ff820).w &amp; 3 = (a0)  &amp;&amp;  (a1) = d0 & %1100
                   3310: </pre>
1.1.1.10  root     3311: 
1.1.1.13  root     3312: <p>
                   3313: Comparison operators should be familiar and obvious, except for '!'
                   3314: which indicates inequality ("is not") comparison.  For example:
                   3315: </p>
1.1.1.10  root     3316: <pre>
1.1.1.13  root     3317: b d0 &gt; $20  &amp;&amp;  d0 &lt; $40  &amp;&amp;  d0 ! $30
1.1.1.12  root     3318: </pre>
1.1.1.10  root     3319: 
                   3320: <p>
1.1.1.13  root     3321: As a convenience, if the both sides of the comparison are exactly the
                   3322: same (i.e. condition is redundant as it's always either true or
                   3323: false), the <em>right side</em> of the comparison is replaced with
                   3324: its current value.  This way you can give something like this:
1.1.1.12  root     3325: </p>
1.1.1.13  root     3326: <pre>
                   3327: b pc &gt; "pc"
                   3328: </pre>
                   3329: <p>As:</p>
                   3330: <pre>
                   3331: b pc &gt; pc
                   3332: </pre>
1.1.1.12  root     3333: 
                   3334: <p>
1.1.1.13  root     3335: That in itself isn't so useful, but for inequality ('!') comparison,
                   3336: conditional breakpoint will additionally track and output all further
                   3337: changes for the given address/register expression. This can be used
                   3338: for example to find out all value changes in a given memory address,
                   3339: like this:
                   3340: </p>
                   3341: <pre>
                   3342: b ($ffff9202).w ! ($ffff9202).w :trace
                   3343: </pre>
                   3344: <p>
                   3345: Typically with this one would use the breakpoint "trace" option like
                   3346: above.
1.1.1.12  root     3347: </p>
1.1.1.10  root     3348: 
1.1.1.13  root     3349: 
                   3350: <a name="Breakpoint variables"></a><h4>Breakpoint variables</h4>
                   3351: 
1.1.1.10  root     3352: <p>
1.1.1.13  root     3353: In addition to loaded symbols, the debugger supports also setting
                   3354: conditional breakpoints on values of some "virtual" variables listed
                   3355: by "b help". For example:
1.1.1.12  root     3356: </p>
1.1.1.13  root     3357: <ul>
                   3358: <li>If you want the emulation to stop on the first instruction of
                   3359:     next program; after TOS desktop is up, set a breakpoint on
                   3360:     the TEXT segment address given in a program basepage:
                   3361: <pre>
                   3362: b  pc = TEXT :once
                   3363: </pre>
                   3364: Note1: It's better to trigger it only once because if you'd leave it on,
                   3365: during reboot you would get a warning for every instruction until TOS sets
                   3366: a valid basepage.
                   3367: <br>
                   3368: Note2: you cannot use an address breakpoint for this because value of a
                   3369: variable given to it is evaluated when the breakpoint is set, not at
                   3370: run-time, so it cannot get the new value that the TEXT variable gets
                   3371: when you start a program.
                   3372: </li>
                   3373: <li>To find out current program DATA and BSS segment contents,
                   3374:     use the corresponding variables:
                   3375: <pre>
1.1.1.14  root     3376: m  DATA
                   3377: m  BSS
1.1.1.13  root     3378: </pre>
                   3379: </li>
                   3380: <li>If you want to stop at a specific cycle within a frame (that is,
                   3381:     PC relative to the current VBL/HBL in cycles), set breakpoints to
                   3382:     specific "HBL" and "FrameCycles" variable values.  If you for
                   3383:     example want to break after 20 HBLs, use:
1.1.1.12  root     3384: <pre>
1.1.1.13  root     3385: b  HBL = "HBL+20"
1.1.1.12  root     3386: </pre>
1.1.1.13  root     3387: </li>
                   3388: <li>Aes/Bios/Gemdos/LineA/LineF/Vdi/XbiosOpcode variables can be used
                   3389:     to catch AES, BIOS, GEMDOS, Line-A, Line-F, VDI and XBIOS OS-calls.
                   3390:     By default they contain the 0xffff value, so to trace e.g. AES calls,
                   3391:     one needs to use something like this:
                   3392: <pre>
                   3393: b  AesOpcode ! AesOpcode  &&  AesOpcode &lt 0xffff  :trace
                   3394: </pre>
                   3395: </li>
                   3396: </ul>
1.1.1.12  root     3397: 
                   3398: <p>
1.1.1.16! root     3399: Hint: "info" command "aes", "bios", "gemdos", "vdi" and "xbios"
        !          3400: subcommands for can be used to list the corresponding OS-call opcodes.
        !          3401: For example, to see the GEMDOS opcodes, use:</p>
1.1.1.13  root     3402: <pre>
                   3403: info gemdos 1
                   3404: </pre>
                   3405: 
                   3406: 
                   3407: <a name="Chaining breakpoints"></a>
                   3408: <h4>Chaining breakpoints and other actions</h4>
                   3409: 
                   3410: <p>
                   3411: As the file pointed by the breakpoint ":file" option (see
                   3412: <a href="#Breakpoint options">Breakpoint options</a>) can contain any
                   3413: debugger commands, it can also be used to do automatic "chaining" of
                   3414: debugger and breakpoint actions so that after one breakpoint is hit,
                   3415: another one is set.
1.1.1.12  root     3416: </p>
1.1.1.13  root     3417: 
                   3418: <p>For example if you have these input files:</p>
                   3419: <ul>
                   3420: <li>"break.ini":
                   3421: <pre>
                   3422: b GemdosOpcode = 0x3D :trace :file trace.ini
                   3423: </pre>
                   3424: </li>
                   3425: <li>"trace.ini":
                   3426: <pre>
                   3427: setopt --bios-intercept --trace gemdos,xbios,fdc,io_all
                   3428: b VBL = "VBL+4" :trace :file disable.ini
                   3429: </pre>
                   3430: </li>
                   3431: <li>"disable.ini":
1.1.1.12  root     3432: <pre>
1.1.1.13  root     3433: trace none
                   3434: b all
1.1.1.12  root     3435: </pre>
1.1.1.13  root     3436: </li>
                   3437: </ul>
1.1.1.12  root     3438: 
                   3439: <p>
1.1.1.13  root     3440: And then start Hatari with the first debugger input file and a GEMDOS
                   3441: harddisk directory containing "desktop.inf" file:
                   3442: </p>
                   3443: <pre>
                   3444: hatari --parse break.ini -d testdir
                   3445: </pre>
                   3446: 
                   3447: <ol>
                   3448: <li>"break.ini" input file will break when TOS opens
                   3449:     the "desktop.inf" file (it's the first Fopen() i.e. GEMDOS call
                   3450:     0x3D done by TOS at boot) and the breakpoint will run
                   3451:     the debugger commands from the "trace.ini" file
                   3452: <li>"trace.ini" input file sets Hatari to trace several things
                   3453:     (see <a href="#Tracing">Tracing</a> section below) in the
                   3454:     emulated system for few VBLs until breakpoint runs commands
                   3455:     from the "disable.ini" file
                   3456: <li>"disable.ini" input file will disable tracing and remove
                   3457:     all (remaining) breakpoints
                   3458: </ol>
                   3459: 
                   3460: <p>
                   3461: <em>Note:</em> because debugger input files cannot "continue"
                   3462: emulation, ":trace" option needs to be used for the breakpoint(s)
                   3463: if you want emulation to continue after the breakpoint action(s).
1.1.1.12  root     3464: </p>
                   3465: 
                   3466: <p>
1.1.1.13  root     3467: Hint: It's better to test each input file separate before testing the
                   3468: whole chain.  Besides the ":file" breakpoint option, these debugger
                   3469: input files can be also read with the debugger "file" command, "lock"
                   3470: command "file" option and with the Hatari "--parse" command line
                   3471: option.
1.1.1.10  root     3472: </p>
                   3473: 
1.1.1.13  root     3474: 
1.1.1.12  root     3475: <a name="Tracing"></a><h3>Tracing</h3>
                   3476: 
1.1.1.10  root     3477: <p>
1.1.1.13  root     3478: After analyzing the emulation state and/or setting new breakpoints,
                   3479: you can continue the emulation with the "c" command. You can continue
                   3480: for a given number of CPU instructions (or DSP instructions when "dc"
                   3481: is used), or you can continue forever (until a non-tracing breakpoint
                   3482: triggers) if you omit the instruction count.
                   3483: </p>
                   3484: 
                   3485: <p>
                   3486: If you want to continue with real-time disassembling, you can enable
                   3487: it with "trace cpu_disasm" (or "trace dsp_disasm" for DSP) at the
                   3488: debugger prompt before continuing.
1.1.1.12  root     3489: </p>
                   3490: <p>
                   3491: Disable tracing with "trace none" when you enter the debugger again.
1.1.1.16! root     3492: "trace help" (or TAB) can be used to list all the (over 40) supported
1.1.1.13  root     3493: traceable things, from HW events to OS functions.
1.1.1.12  root     3494: </p>
                   3495: <p>
                   3496: Because Hatari normally emulates things at the hardware level, tracing
1.1.1.13  root     3497: certain Atari OS Traps requires setting additional Hatari options
                   3498: which tell it to intercept this higher level functionality:
1.1.1.12  root     3499: <ul>
1.1.1.13  root     3500: <li>BIOS and XBIOS tracing require enabling of the BIOS intercepting with
                   3501:     the "--bios-intercept" option (which has also some other side-effects)
                   3502: </li>
                   3503: <li>GEMDOS tracing requires enabling the GEMDOS harddisk emulation
                   3504:     (which doesn't work under MiNT because it re-implements GEMDOS)</li>
1.1.1.12  root     3505: </ul>
                   3506: <p>
1.1.1.16! root     3507: Unlike with AES and VDI tracing, BIOS, GEMDOS and XBIOS traces show
        !          3508: arguments for most of the calls.
1.1.1.13  root     3509: </p>
                   3510: <p>
1.1.1.12  root     3511: Tracing options can be set even from a program within the emulation
1.1.1.13  root     3512: if you enable the Hatari "--bios-intercept" option and call XBios 255
                   3513: from the program with a suitable Hatari command line string.  Bios
                   3514: interception will also show the (Bios level) CON: output on the host
                   3515: console.
1.1.1.12  root     3516: </p>
                   3517: <p>
                   3518: Note that the trace output file can be set only when Hatari starts,
                   3519: it cannot be changed from within the debugger (or emulation).
1.1.1.10  root     3520: </p>
1.1.1.16! root     3521: <p>
        !          3522: If tracing isn't possible for the things you'd like to track, you can
        !          3523: use the OS call opcode breakpoints explained above with the ":trace"
        !          3524: breakpoint option.
        !          3525: </p>
1.1.1.10  root     3526: 
1.1.1.13  root     3527: 
                   3528: <a name="Profiling"></a><h3>Profiling</h3>
                   3529: 
                   3530: <p>
                   3531: Profiling tells where the emulated code spends most of its (emulated)
                   3532: time.  It can be used to find out where a program is (apparently)
                   3533: stuck or what are the largest performance bottlenecks for a program.
                   3534: </p>
                   3535: 
                   3536: <p>
                   3537: Profiling is used by first enabling the profiler (use "dp" for DSP):
                   3538: </p>
                   3539: <pre>
                   3540: &gt; profile on
                   3541: Profiling enabled.
                   3542: </pre>
                   3543: <p>
                   3544: And profiling will start once you continue the emulation:
                   3545: </p>
                   3546: <pre>
                   3547: &gt; c
                   3548: Returning to emulation...
                   3549: Allocated CPU profile buffer (18 MB).
                   3550: </pre>
                   3551: 
                   3552: <p>
                   3553: When you get back to the debugger, the collected profiling information
                   3554: is processed and a summary of in which parts of the RAM the execution
                   3555: happened is shown:
                   3556: </p>
                   3557: <pre>
                   3558: Allocated CPU profile address buffer (4 KB).
                   3559: Normal RAM (0-0x400000):
                   3560: - no activity
                   3561: Cartridge ROM (0xFA0000-0xFC0000):
                   3562: - no activity
                   3563: ROM TOS (0xE00000-0xE80000):
                   3564: - active address range:
                   3565:   0xe0014c-0xe23f02
                   3566: - active instruction addresses:
                   3567:   707 (100.00% of all)
                   3568: - executed instructions:
                   3569:   629144 (100.00% of all)
                   3570: - used cycles:
                   3571:   9408503 (100.00% of all)
                   3572: - address with most cycles:
                   3573:   0xe0dcca, 402628 cycles (4.28% of all in area)
                   3574: - address with most hits:
                   3575:   0xe004a4, 4900 hits (0.78% of all in area)
                   3576: </pre>
                   3577: <p>
                   3578: (DSP RAM will be shown only as single area in profile information.)
                   3579: </p>
                   3580: 
                   3581: <p>
                   3582: After this you can request more detailed profiling information:
                   3583: </p>
                   3584: <pre>
                   3585: &gt; profile
                   3586: 'profile' - profile CPU code
                   3587: Usage:  profile &lt;on|off|counts|cycles|symbols|stats&gt; [show count]
                   3588:        on &amp; off enable and disable profiling.  Data is collected
                   3589:        until debugger is entered again after which you can view
                   3590:        statistics about the data or view PC addresses that took
                   3591:        most cycles or functions/symbols called most often.
                   3592:        You can specify how many items are shown at most.
                   3593: </pre>
                   3594: 
                   3595: <p>For example:</p>
                   3596: <pre>
                   3597: &gt; profile counts 8
                   3598: addr:           count:
                   3599: 0xe004a4        0.78%   4900
                   3600: 0xe004b6        0.78%   4896
                   3601: 0xe0dcbc        0.55%   3448
                   3602: 0xe0dcc6        0.55%   3448
                   3603: 0xe0f59e        0.55%   3446
                   3604: 0xe0dcce        0.55%   3445
                   3605: 0xe0dcd6        0.55%   3445
                   3606: 8 CPU addresses listed.
                   3607: </pre>
                   3608: <p>
                   3609: If you have loaded symbol information for code addresses, with the
                   3610: "profile symbols" command you get a list of how many times the code
                   3611: execution passed through the defined symbol addresses.
                   3612: </p>
                   3613: 
                   3614: <p>
                   3615: After the profiling information has been post-processed, it will
                   3616: also be shown in the disassembly output.
                   3617: </p>
                   3618: 
                   3619: 
                   3620: <a name="Usage examples"></a><h3>Usage examples</h3>
                   3621: 
                   3622: <p>
                   3623: Here's a list of some common debugging tasks and how to do them
                   3624: with the Hatari debugger:
                   3625: </p>
                   3626: 
                   3627: <dl>
                   3628: <dt><em>Stopping on program startup and examining its data</em></dt>
                   3629: <dd>Please see <a href="#Breakpoint variables">Breakpoint variables</a>
                   3630: and <a href="#Inspecting emulation state">Inspecting emulation state</a>
                   3631: sections.
                   3632: </dd>
                   3633: 
                   3634: <dt><em>Tracing specific things in the system</em></dt>
                   3635: <dd>To trace e.g. all GEMDOS calls and IO operations, use:
                   3636: <pre>
                   3637: trace  gemdos,io_all
                   3638: </pre>
                   3639: Please see <a href="#Tracing">Tracing</a> section for more information
1.1.1.14  root     3640: on tracing, what's possible with it and what are its limitations.
1.1.1.13  root     3641: </dd>
                   3642: 
                   3643: <dt><em>Stopping when certain PC address is passed Nth time</em></dt>
                   3644: <dd>To stop e.g. after function/subroutine at $12345 is called for
                   3645: the 6th time:
                   3646: <pre>
                   3647: a  $12345 :6
                   3648: </pre>
                   3649: </dd>
                   3650: 
                   3651: <dt><em>Stopping when register has a specific value</em></dt>
                   3652: <dd>To stop when e.g. D1 register contains value 5, set a breakpoint on:
                   3653: <pre>
                   3654: b  d1 = 5
                   3655: </pre>
                   3656: </dd>
                   3657: 
                   3658: <dt><em>Stopping when a register value changes</em></dt>
                   3659: <dd>To stop when e.g. D1 register value changes, set a breakpoint on:
                   3660: <pre>
                   3661: b  d1 ! d1
                   3662: </pre>
                   3663: </dd>
                   3664: 
                   3665: <dt><em>Stopping when register value is within some range</em></dt>
                   3666: <dd>To stop when e.g. D1 register value is within range of 10-30,
                   3667: set a breakpoint on:
                   3668: <pre>
                   3669: b  d1 &gt; 9  &amp;&amp;  d1 &lt; 31
                   3670: </pre>
                   3671: </dd>
                   3672: 
                   3673: <dt><em>Stopping when memory location has a specific value</em></dt>
                   3674: <dd>To stop when e.g. bit 1 of the Video Shifter Sync Mode byte at
                   3675: IO address $ff820a is set i.e. video frequency is 60Hz, set
                   3676: a breakpoint on:
                   3677: <pre>
                   3678: b  ($ff820a).b & 2 = 2
                   3679: </pre>
                   3680: </dd>
                   3681: 
                   3682: <dt><em>Stopping when a memory value changes</em></dt>
                   3683: <dd>To stop when above bit changes, set a breakpoint on its value
                   3684: being different from the current value ('!' compares for inequality):
                   3685: <pre>
                   3686: b  ($ff820a).b & 2 ! ($ff820a).b & 2
                   3687: </pre>
                   3688: </dd>
                   3689: 
                   3690: <dt><em>Tracing all changes in specific memory location</em></dt>
                   3691: <dd>To see the new values and continue without stopping, use
                   3692: the ":trace" breakpoint option:
                   3693: <pre>
                   3694: b  ($ff820a).b & 2 ! ($ff820a).b & 2  :trace
                   3695: </pre>
                   3696: </dd>
                   3697: 
                   3698: <dt><em>Stopping at specific screen position</em></dt>
                   3699: <dd>To stop e.g. when VBL is 100, HBL is 40 and line cycles is 5,
                   3700: use the corresponding debugger variables:
                   3701: <pre>
                   3702: b  VBL = 100  &amp;&amp;  HBL = 40  &amp;&amp;  FrameCycles = 5
                   3703: </pre>
                   3704: </dd>
                   3705: 
                   3706: <dt><em>Stopping after value increases/decreases by certain amount</em></dt>
                   3707: <dd>To stop e.g. after D0 value has increased by 10, set breakpoint on:
                   3708: <pre>
                   3709: b  d0 = "d0 + 10"
                   3710: </pre>
                   3711: </dd>
                   3712: 
1.1.1.14  root     3713: <dt><em>Seeing code leading to a breakpoint</em></dt>
                   3714: <dd>To see the instructions executed before debugger was entered,
                   3715: you need to enabled history tracking beforehand and then whenever the
                   3716: debugger is entered, you can request given number (here 16) of past
                   3717: instructions to be shown:
                   3718: <pre>
                   3719: history on
                   3720: c
                   3721: [breakpoint is hit and debugger entered]
                   3722: history 16
                   3723: </pre>
                   3724: </dd>
                   3725: 
                   3726: <dt><em>Getting instruction execution history for every breakpoint</em></dt>
                   3727: <dd>
                   3728: To see last 16 instructions whenever (a normal or tracing) breakpoint
                   3729: is hit:
                   3730: <pre>
                   3731: history on
                   3732: lock history 16
                   3733: c
                   3734: </pre>
                   3735: </dd>
                   3736: 
1.1.1.13  root     3737: <dt><em>Single step so that new register values are shown after each step</em></dt>
                   3738: <dd>
                   3739: <pre>
                   3740: lock registers
                   3741: c 1
                   3742: [new register values]
                   3743: c 1
                   3744: [new register values]
                   3745: ...
                   3746: </pre>
                   3747: </dd>
                   3748: 
                   3749: <dt><em>Showing current stack contents</em></dt>
                   3750: <dd>To see first 64 bytes on top of the stack, use:
                   3751: <pre>
                   3752: m  "a7-64"-a7
                   3753: </pre>
                   3754: </dd>
                   3755: 
                   3756: <dt><em>Seeing specific information each time debugger is entered</em></dt>
                   3757: <dd>To see above information whenever some breakpoint is hit,
                   3758: you enter debugger manually etc, write that command to e.g.
                   3759: <span class="file">stack.ini</span> file and then use:
                   3760: <pre>
                   3761: lock  file stack.ini
                   3762: </pre>
                   3763: Please see also <a href="#Chaining breakpoints">Chaining breakpoints</a>
                   3764: section for more examples on what you can do with the debugger input files.
                   3765: </dd>
                   3766: 
1.1.1.16! root     3767: <dt><em>Finding where a program or the OS is stuck</em></dt>
        !          3768: <dd>Profiling tells from which addresses CPU is executing the instructions:
1.1.1.13  root     3769: <pre>
                   3770: profile  on
                   3771: c
                   3772: [after a while, use AltGr+Pause to get back to debugger]
                   3773: profile  counts
                   3774: </pre>
                   3775: </dd>
                   3776: 
                   3777: </dl>
                   3778: 
                   3779: <p>
1.1.1.16! root     3780: Hint: for most of the above commands, one just needs to prefix them with
1.1.1.13  root     3781: "d" (or "dsp" if using full command names) to do similar operation on
1.1.1.16! root     3782: the DSP.
1.1.1.13  root     3783: </p>
                   3784: 
                   3785: 
1.1.1.12  root     3786: <a name="Build notes"></a><h3>Build notes</h3>
                   3787: 
1.1.1.10  root     3788: <p>
                   3789: Lastly, the debugger is much nicer to use with the command line
1.1.1.16! root     3790: history, editing and especially the completion support for the
        !          3791: command, command argument and symbol names.
        !          3792: </p>
        !          3793: <p>
        !          3794: If you're building Hatari yourself, please make sure that you have the
        !          3795: GNU readline development files installed (on Debian / Ubuntu these
        !          3796: come from the libreadline5-dev package). Otherwise the name completion
        !          3797: and other features don't get enabled when you configure Hatari.
1.1.1.12  root     3798: </p>
                   3799: <p>
                   3800: ENABLE_TRACING define needs to be set for tracing to work.
                   3801: By default it should be enabled.
1.1.1.10  root     3802: </p>
                   3803: 
                   3804: 
                   3805: <a name="Performance"></a><h2>Performance</h2>
1.1.1.12  root     3806: 
                   3807: <p>Hatari performance varies between Atari programs, depending on what
                   3808: features Hatari needs to emulate for them.  Less accurate Atari
                   3809: emulators may be faster as emulation accuracy has a performance
                   3810: overhead.</p>
                   3811: 
1.1.1.13  root     3812: <p>The operating system and libraries below Hatari can also sometimes
                   3813: have a noticeable effect on performance.</p>
                   3814: 
1.1.1.12  root     3815: 
1.1.1.10  root     3816: <a name="Improving Hatari performance"></a><h3>Improving Hatari performance</h3>
                   3817: 
                   3818: <p>
1.1.1.13  root     3819: Hatari currently runs best in 16 or 32 bits per pixel color depth
                   3820: mode, so try to avoid 24 bits per pixel display modes if possible.
                   3821: 16-bit mode is fastest.
                   3822: </p>
                   3823: 
                   3824: <p>
                   3825: <em>On OSX, frame skipping, zooming and drive LED options (listed below)
                   3826: seem to have a large effect on performance in the windowed mode</em>.
                   3827: This is apparently due to issues in the SDL OSX backend and how OSX
                   3828: itself composites non-fullscreen window contents. OSX uses always
                   3829: 32-bit mode.
                   3830: </p>
                   3831: 
                   3832: <p>
1.1.1.10  root     3833: Unless you've disabled compiler optimizations (like GCC's -O2 or -O3
                   3834: options) in the Hatari build, the extra optimization flags (like GCC's
                   3835: "-mtune=i686") don't seem to have very large effect on Hatari
1.1.1.12  root     3836: performance.  Using GCC -O3 option instead of -O2 can give minor
                   3837: (5-10%) performance improvements for things (demos) that use very
                   3838: heavily interrupts.
1.1.1.10  root     3839: </p>
1.1.1.13  root     3840: 
1.1.1.10  root     3841: <p>
                   3842: However, Hatari can be sped up considerably by giving up some
1.1.1.13  root     3843: emulation or emulator accuracy.  Except for DSP, these options
                   3844: should be needed only on very slow devices like handhelds. See below.
                   3845: </p>
                   3846: 
                   3847: <p>
                   3848: If nothing else helps, try an earlier Hatari version.  More accurate
                   3849: emulation or emulator output in newer Hatari versions means that they
                   3850: can be slower despite optimizations.
1.1.1.10  root     3851: </p>
                   3852: 
                   3853: 
1.1.1.13  root     3854: <a name="Emulation options"></a><h3>Emulation options</h3>
1.1.1.10  root     3855: 
                   3856: <p>
                   3857: Emulation options have the largest impact on performance.
                   3858: These options can be changed from the Hatari GUI System dialog and
                   3859: the emulation needs to be rebooted for any of these changes to take
                   3860: an effect!
                   3861: </p>
                   3862: 
                   3863: <h5>DSP</h5>
                   3864: <p>
1.1.1.12  root     3865: Emulating the Falcon DSP is performance-wise several times more demanding
1.1.1.10  root     3866: than emulating the m68k; DSP runs at higher frequency, executes many
                   3867: instructions for each m68k instruction and emulation isn't as mature
1.1.1.16! root     3868: and optimized.  Unless some Falcon program needs DSP, <em>none</em> or
1.1.1.10  root     3869: <em>dummy</em> DSP emulation mode could be used.  Even of the programs
                   3870: that do use DSP, many use it only for background music and work
                   3871: fine without the real DSP emulation.
                   3872: </p>
1.1.1.12  root     3873: 
1.1.1.10  root     3874: <h5>Timer-D</h5>
                   3875: <p>
                   3876: The single largest factor contributing to general Hatari emulation
                   3877: performance is the handling of interrupts.  Enabling Timer-D patching
1.1.1.12  root     3878: option (about) doubles Hatari ST/STE emulation performance as it
                   3879: significantly reduces the number of interrupts generated by the emulated
                   3880: Atari machine. Using this has adverse effect only for very rare programs.
1.1.1.10  root     3881: </p>
1.1.1.12  root     3882: 
1.1.1.10  root     3883: <h5>Compatible CPU</h5>
                   3884: <p>
1.1.1.12  root     3885: After the DSP and  interrupts, m68k emulation takes most time.
1.1.1.10  root     3886: Disabling the "Slower but more compatible CPU" option will speed up
                   3887: the emulation a lot, but it won't anymore be cycle accurate.  This can
                   3888: be fine for many games and other programs, but won't work e.g. for demos
                   3889: using overscan or rasters.
                   3890: </p>
                   3891: 
                   3892: <p>
1.1.1.12  root     3893: Roughly speaking, for DSP emulation, one needs at least 2Ghz machine.
                   3894: For normal (unpatched) Timer-D frequency on some specific cases (like
1.1.1.10  root     3895: demos with overscan 512 color animations) one may need over 1GHz
1.1.1.12  root     3896: machine, but some rare ST/STE demos may require over 1GHz machine even
                   3897: with Timer-D patching.  For "Compatible CPU" one needs at least 1/2Ghz
                   3898: machine.
1.1.1.10  root     3899: </p>
1.1.1.12  root     3900: 
1.1.1.10  root     3901: <p>
1.1.1.12  root     3902: NOTE: Above options may cause some programs not to work correctly.
                   3903: The <a href="compatibility.html">Hatari Software Compatibility List</a>
                   3904: lists programs known to need real real Falcon DSP emulation or Timer-D
                   3905: frequency.  Disabling "Compatible CPU" option is recommended only as
                   3906: a last resort.
1.1.1.10  root     3907: </p>
                   3908: 
                   3909: 
1.1.1.13  root     3910: <a name="Emulator options"></a><h3>Emulator options</h3>
1.1.1.10  root     3911: 
                   3912: <p>
1.1.1.13  root     3913: Emulator options don't usually have as large effect on performance as
1.1.1.10  root     3914: emulation options, but they don't affect the emulated programs at all,
                   3915: just the quality of the emulation "output". These options can also
                   3916: be toggled at run-time without rebooting the emulation.
                   3917: </p>
                   3918: 
                   3919: <h5>Sound</h5>
                   3920: <p>
                   3921: Internal Hatari sound handling and the SDL_mixer sound thread
                   3922: libALSA sound processing can account up to 1/3 of the Hatari CPU usage
1.1.1.12  root     3923: in normal ST/STE emulation. Disabling sound will get rid of that.
                   3924: Using low sound frequency or one matching your sound card may also help.
                   3925: Best is if you disable also background music from the programs you run
                   3926: in Hatari as this can significantly reduce the number of generated
                   3927: interrupts.
1.1.1.10  root     3928: </p>
1.1.1.12  root     3929: 
1.1.1.10  root     3930: <h5>Frame skipping</h5>
                   3931: <p>
                   3932: Screen rendering can take noticeable amount of CPU time. The default
                   3933: Hatari "auto" frame skipping should be used unless there's a good
                   3934: reason not to.  It will skip converting and showing some of the frames
1.1.1.13  root     3935: if there's not enough time for them.
                   3936: </p>
                   3937: <p>
                   3938: Also, if your monitor refresh frequency is lower than the selected
                   3939: Hatari monitor frequency (e.g. LCD monitors usually use 60Hz whereas
                   3940: Atari monochrome monitor uses 71Hz), you should use frameskip of one.
                   3941: The reason is that if your SDL library uses VSync to synchronize the
                   3942: output to screen (like OSX one?), with zero frame skip that forces the
                   3943: emulation to run slower than a real Atari.  If SDL doesn't use VSync,
                   3944: Hatari does redundant work to convert frames you can't see.
1.1.1.10  root     3945: </p>
1.1.1.12  root     3946: 
                   3947: <h5>Zooming</h5>
1.1.1.10  root     3948: <p>
                   3949: If you are not using frame skip, disabling zooming can have
1.1.1.12  root     3950: noticeable improvement on performance.  You can do this by specifying
                   3951: suitably low "Max zoomed" resolution (<span class="commandline">--zoom
                   3952: 1</span> command line option sets it to 320x200).  If you still want to
                   3953: have a nice fullscreen mode, you should rather add the right resolution
                   3954: mode-lines (e.g. "320x200") to your xorg.conf file.  If you still want
                   3955: to use zooming, disabling borders may help a bit.
1.1.1.10  root     3956: </p>
1.1.1.12  root     3957: 
1.1.1.10  root     3958: <h5>Spec512 color handling</h5>
                   3959: <p>
                   3960: Handling Spec512 color modes which change the ST/e palette constantly
                   3961: takes some extra CPU.  If you have problems with CPU usage in such
                   3962: screens and you care more e.g. from the sound quality than visuals, you
1.1.1.16! root     3963: can either increase the threshold or disable the Spec512 mode handling
        !          3964: completely by zeroing the threshold for that with the
        !          3965: <span class="commandline">--spec512 0</span> option.
1.1.1.10  root     3966: </p>
1.1.1.12  root     3967: 
1.1.1.10  root     3968: <h5>Statusbar and drive LED</h5>
                   3969: <p>
1.1.1.16! root     3970: If your version of the SDL library uses VSync to synchronize the screen
        !          3971: output, drawing of the statusbar or the drive LED may have some minor
        !          3972: impact on performance too.  Normally they shouldn't.
1.1.1.10  root     3973: </p>
                   3974: 
                   3975: 
                   3976: <a name="Measuring the performance"></a><h3>Measuring the performance</h3>
                   3977: 
                   3978: <p>
                   3979: There are a couple of ways to monitor and measure Hatari performance.
                   3980: </p>
                   3981: <p>
                   3982: By default Hatari has Statusbar visible and automatic frameskip
                   3983: enabled. When Hatari has enough time that it can sleep a little each
                   3984: frame, the statusbar frame skip ("FS") value keeps at zero.  If Hatari
                   3985: is completely busy, it will increase to the maximum specified
                   3986: (automatic) frame skip value.
                   3987: </p>
                   3988: <p>
                   3989: Hatari has also a facility to measure FPS i.e. Frames Per Second.
                   3990: Just enable the <span class="commandline">--fast-forward</span> option
                   3991: on command line (or use the corresponding keyboard shortcut), and
                   3992: after a while, press the "Pause" key.  Whenever Hatari emulation is
1.1.1.12  root     3993: paused, Hatari will output on console how many VBLs it could show per
                   3994: second along with some other numbers.
1.1.1.10  root     3995: </p>
                   3996: <p>
                   3997: It depends on what you want to measure, but usually it's best to
                   3998: disable sound and set high frame skip like
                   3999: <span class="commandline">--sound off --frameskips 60</span> so that
                   4000: the associated external overheads are minimized.  E.g. video output
1.1.1.16! root     4001: can on some platforms do VSync and measurements would then show your
        !          4002: monitor refresh frequency instead of the actual Hatari performance.
1.1.1.10  root     4003: </p>
                   4004: <p>
                   4005: On Unix systems with <span class="commandline">times()</span> function
                   4006: call, only the time spent by the Hatari process itself is measured.
1.1.1.16! root     4007: On other systems, much less accurate SDL "wall clock" timings are
1.1.1.10  root     4008: used.  To make latter more accurate you could use also
                   4009: <span class="commandline">--run-vbls</span> option to specify how many
1.1.1.12  root     4010: VBLs Hatari should run before it exits.  In this case it's best to
                   4011: either have the test-case run automatically from the AUTO-folder or
                   4012: given as memory snapshot to Hatari with the frame skip set equal to
                   4013: the VBL count.
1.1.1.10  root     4014: </p>
                   4015: <p>
1.1.1.16! root     4016: Note that these numbers can fluctuate quite a bit, <em>especially</em>
1.1.1.10  root     4017: when the SDL timings are used, so for (statistically) reliable numbers
                   4018: you may need to repeat the measurement several times.  You should of
                   4019: course make also sure that the system doesn't have any other activity
                   4020: at the same time you're making the measurements.
                   4021: </p>
                   4022: 
                   4023: 
1.1.1.5   root     4024: <a name="Appendix"></a><h2>Appendix</h2>
                   4025: 
                   4026: <a name="Copying"></a><h3>Copying</h3>
1.1.1.4   root     4027: 
1.1       root     4028: <div class="backdropped">
                   4029: <p>This program is free software; you can redistribute it and/or modify
1.1.1.3   root     4030: it under the terms of the GNU General Public License as published by
                   4031: the
1.1       root     4032: Free Software Foundation; either version 2 of the License, or (at your
                   4033: option) any later version. </p>
                   4034: <p>This program is distributed in the hope that it will be useful, but <em>WITHOUT
                   4035: ANY WARRANTY</em>; without even the implied warranty of <em>MERCHANTABILITY</em>
1.1.1.3   root     4036: or <em>FITNESS FOR A PARTICULAR PURPOSE</em>. See the GNU General
1.1.1.4   root     4037: Public License for more details. </p>
                   4038: <p>
                   4039: You should have received a copy of the GNU General Public License
                   4040: along with this program; if not, write to the Free Software Foundation,
                   4041: Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                   4042: </p>
1.1       root     4043: </div>
1.1.1.3   root     4044: <p><a href="http://www.gnu.org/">The GNU Project and the Free Software
                   4045: Foundation</a> | <a href="http://www.fsf.org/licenses/gpl.html">The
                   4046: GNU General Public License</a></p>
1.1.1.4   root     4047: 
1.1.1.5   root     4048: <a name="Introduction to Emulation"></a><h3>Introduction to Emulation</h3>
                   4049: 
1.1       root     4050: <p>Emulation via software is an art and Hatari is an example of this.</p>
1.1.1.3   root     4051: <p>Emulation is to make a computer behave like a (probably) completely
                   4052: different machine on the lowest possible niveau.
                   4053: This includes CPU and custom chip emulation allowing software written
                   4054: for the emulated machine to be run without notice.
                   4055: A good emulator will run most of the software intended for the emulated
                   4056: platform without trouble.
1.1       root     4057: </p>
                   4058: <p>
1.1.1.3   root     4059: The key to emulation is to simply do those things with a software
                   4060: program, the emulator, that normally chips would perform.
                   4061: So you have an CPU emulator that basically consists of a large loop
                   4062: that does exactly what the real thing would do:
1.1       root     4063: </p>
                   4064: <ul>
1.1.1.3   root     4065:   <li>fetch an instruction from virtual memory</li>
                   4066:   <li>interpret this instruction</li>
                   4067:   <li>fetch operands from the emulated registers and memory</li>
                   4068:   <li>perform the operation like addition or changing the program
                   4069: counter on a jump instruction</li>
                   4070:   <li>writes results back into the intended registers or memory
                   4071: locations</li>
                   4072:   <li>increment of the program counter and loop</li>
1.1       root     4073: </ul>
                   4074: <p>
1.1.1.3   root     4075: The typical von-Neumann CPU can be emulated very fast, stable and
                   4076: error-free using such a simple loop system.
1.1       root     4077: </p>
                   4078: <p>
1.1.1.3   root     4079: But in most cases the CPU emulation is the simplest part. Correct
                   4080: emulation of the various custom chips and hardware
1.1       root     4081: parts of the emulated system is much trickier.
                   4082: </p>
                   4083: 
1.1.1.6   root     4084: <br>
                   4085: 
1.1.1.3   root     4086: <hr style="width: 100%; height: 2px;">
1.1       root     4087: <table border="0" width="100%">
1.1.1.3   root     4088:   <tbody>
1.1       root     4089:     <tr>
1.1.1.3   root     4090:       <td align="left"><a href="http://validator.w3.org/check/referer"><img
                   4091:  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"
                   4092:  border="0" height="31" width="88"></a></td>
                   4093:       <td align="right">
1.1.1.16! root     4094:       June 2012
1.1.1.3   root     4095:       </td>
1.1       root     4096:     </tr>
1.1.1.3   root     4097:   </tbody>
1.1       root     4098: </table>
                   4099: </body>
                   4100: </html>

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.