]> Shamusworld >> Repos - virtualjaguar/commitdiff
First stab at adding translations. Translators needed! :-)
authorShamus Hammons <jlhamm@acm.org>
Fri, 5 Apr 2013 01:46:35 +0000 (20:46 -0500)
committerShamus Hammons <jlhamm@acm.org>
Fri, 5 Apr 2013 01:46:35 +0000 (20:46 -0500)
res/help_fr.html [new file with mode: 0644]
res/help_gr.html [new file with mode: 0644]
src/eeprom.cpp
src/eeprom.h
src/gui/configdialog.cpp
src/gui/mainwin.cpp
src/gui/virtualjaguar.qrc
virtualjaguar.pro
virtualjaguar_fr.ts [new file with mode: 0644]
virtualjaguar_gr.ts [new file with mode: 0644]

diff --git a/res/help_fr.html b/res/help_fr.html
new file mode 100644 (file)
index 0000000..d23dbb8
--- /dev/null
@@ -0,0 +1,287 @@
+<html>
+
+<head>
+<title>Virtual Jaguar: The Documentation</title>
+</head>
+
+<body>
+<h1><i>Virtual Jaguar:</i> The Documentation</h1>
+
+<h2><i>Virtual Jaguar</i> Quick Start</h2>
+
+<p>Welcome to <i>Virtual Jaguar!</i> If this is your first time using <i>Virtual Jaguar</i>, you can get a feel for what it is and does by doing the following:
+
+<ul>
+<li>Select &ldquo;Insert Cartridge&rdquo; from the &ldquo;Jaguar&rdquo; menu, or press the &ldquo;Insert Cartridge&rdquo; toolbar button.</li>
+<li>In the dialog that shows up, you will see the pack-in title of <i>Downfall</i> which is brought to you courtesy of <b>Reboot</b> (<a href="http://reboot.atari.org">http://reboot.atari.org</a>).</li>
+<li>Click on the <i>Insert</i> button in the lower right hand corner of the dialog or simply press the <b>Enter</b> key on your keyboard.</li>
+<li>In a few moments, the <i>Downfall</i> title screen should show in the <i>Virtual Jaguar</i> main window.</li>
+</ul>
+
+<p>To play, use the left and right keys (mapped to <b>Z</b> and <b>C</b> on your keyboard) and the the B button (mapped to <b>K</b> on your keyboard). You can pause <i>Virtual Jaguar</i> by selecting &ldquo;Pause&rdquo; from the &ldquo;Jaguar&rdquo; menu, pressing the &ldquo;Pause&rdquo; toolbar button, or by pressing the <b>Esc</b> key on your keyboard. You can quit <i>Virtual Jaguar</i> by selecting &ldquo;Exit&rdquo; from the &ldquo;Jaguar&rdquo; menu, or by pressing <b>Ctrl</b> + <b>Q</b> on your keyboard.</p>
+
+<h2>System Requirements</h2>
+
+<p><i>Virtual Jaguar</i> should be able to run on most late model computers equipped with an OpenGL compliant video card. It requires a lot of raw <i>oomph</i> in it&rsquo;s present form to run well; do not be surprised if it doesn&rsquo;t run at 100% speed with all the options turned on. Certain subsystems of the Jaguar are not optimized yet and as such take more time than they would if they were optimized. To run <i>Virtual Jaguar</i> at full speed with all options on, we recommend using liquid nitrogen. At least until we get it properly optimized. ;-)</p>
+
+<h2><i>Virtual Jaguar</i> In Depth</h2>
+
+<p>This version of <i>Virtual Jaguar</i> has been redesigned with a modern GUI and as such should be fairly easy to use and understand. However, some options may not do what you expect: What follows is an exhaustive look at what the various toolbar buttons and menu options do.</p>
+
+<h2>The Toolbar</h2>
+
+<p>The main <i>Virtual Jaguar</i> toolbar contains the following buttons:</p>
+
+<ul>
+<li>Power</li>
+<li>Pause</li>
+<li>Insert Cartridge</li>
+<li>Use CD Unit</li>
+<li>Scale x1</li>
+<li>Scale x2</li>
+<li>Scale x3</li>
+<li>NTSC</li>
+<li>PAL</li>
+<li>Blur</li>
+<li>Full Screen</li>
+</ul>
+
+<p>Here&rsquo;s what they do.</p>
+
+<h3>Power</h3>
+
+<p>This toolbar button acts just like the power switch on a real Jaguar, complete with untuned tank circuit noise showing on the screen when the emulated Jaguar is turned off. Some options can only be changed after the power has been turned off, such as the NTSC/PAL switches, or the &ldquo;Use CD Unit&rdquo; option. The &ldquo;Use Jaguar BIOS&rdquo; option in the Configuration dialog will only take effect after the power has been cycled.</p>
+
+<h3>Pause</h3>
+
+<p>Pressing the Pause toolbar button will pause execution of the emulated Jaguar. Note that most games have a pause feature that is built into the game; this feature is separate from and will override any built-in game pause feature. Also, the emulator will go into pause mode if the power is on when you activate the &ldquo;Insert Cartridge&rdquo; dialog. Pressing the <b>Esc</b> key will also activate this option. Selecting this option in any of the ways listed above, while in pause mode, will take it out of pause mode.</p>
+
+<h3>Insert Cartridge</h3>
+
+<p>Pressing the Insert Cartridge button will bring up the Insert Cartridge dialog; it can also be launched by pressing <b>Ctrl</b> + <b>I</b> on your keyboard. On the left side of the dialog will be a list of software that <i>Virtual Jaguar</i> recognizes from the directory you tell it to look into (see the &ldquo;Configure&rdquo; menu option and the &ldquo;General&rdquo; tab, &ldquo;Software&rdquo; item for more information). Selecting an item in the list will bring up some information about the software on the right side of the dialog, if <i>Virtual Jaguar</i> knows about it. Pressing the icon in the lower right hand side of the dialog will then cause <i>Virtual Jaguar</i> to attempt to run the selected item. <i>Virtual Jaguar</i> cycles the power when it attempts to run the software you select.</p>
+
+<p>There are also some keyboard shortcuts that come with the Insert Cartridge dialog: Pressing a letter key will highlight the nearest item in the list that starts with that letter. Pressing more than one letter key in quick succession will narrow in on the item that matches those letter keys pressed. Pressing the <b>Esc</b> key will dismiss the dialog without attempting to load anything, and pressing the <b>Enter</b> key is the same as pressing the icon in the lower right hand side of the dialog.</p>
+
+<h3>Use CD Unit</h3>
+
+<p>Pressing this toolbar button will virtually plug in a Jaguar CD unit into the emulated Jaguar. It can only be toggled with the virtual machine powered <b>off</b>.</p>
+
+<p>As of the release date for this emulator, this option <b>DOES NOT WORK</b> 100% the way it&rsquo;s intended to: When it&rsquo;s working correctly, selecting this option will allow you to insert a Jaguar CD game into your computer&rsquo;s CD/DVD drive and play it as if it were on a real Jaguar. For now, you can see the CD BIOS make pretty patterns on your screen if you use it.</p>
+
+<p>Note that once this is working as it should, the DSP will be required to be <b>enabled</b> for it to work properly. It <b>WILL NOT WORK</b> properly without the DSP.</p>
+
+<h3>Scale x1</h3>
+
+<p>Selecting this toolbar button will cause the screen to be displayed with pixels that are sized 1 to 1 with your display; this will give you a very small display.</p>
+
+<h3>Scale x2</h3>
+
+<p>This will cause the screen to be displayed with pixels that are sized 2 to 1 with your display.</p>
+
+<h3>Scale x3</h3>
+
+<p>This will cause the screen to be displayed with pixels that are sized 3 to 1 with your display; this should yield a fairly large display.</p>
+
+<h3>NTSC</h3>
+
+<p>Selecting this item will cause the emulated Jaguar to behave as if it were an NTSC type Jaguar, running at 60 Hz. This option can only be toggled when the virtual machine is powered <b>off</b>.</p>
+
+<h3>PAL</h3>
+
+<p>Selecting this item will cause the emulated Jaguar to behave as if it were an PAL type Jaguar, running at 50 Hz. As an added bonus, you also get a few extra scan lines as compared with NTSC mode; some games will even utilize this extra screen real estate. This option can only be toggled when the virtual machine is powered <b>off</b>.</p>
+
+<h3>Blur</h3>
+
+<p>Normally, the emulated Jaguar&rsquo;s display shows pixels that are razor sharp and is what you would likely see if the Jaguar was hooked up to a high quality monitor. Selecting this item will cause the emulated Jaguar&rsquo;s display to be averaged, resulting in a screen that looks slightly blurry&mdash;more like what you would expect to see if the Jaguar was hooked up to a television. This is an aesthetic option that some people prefer; you may or may not like it.</p>
+
+<h3>Full Screen</h3>
+
+<p>Selecting this toolbar button will switch the display into full screen mode; selecting it again will switch it back to windowed mode. This option can also be activated by pressing the <b>F9</b> key on your keyboard. Note that on monitors with a wide aspect ratio that <i>Virtual Jaguar</i> will still display its virtual screen in a 4:3 aspect ratio&mdash;this is normal and expected.</p>
+
+
+<h2>Jaguar Menu</h2>
+
+<p>This menu has the following options:</p>
+
+<ul>
+<li>Power</li>
+<li>Pause</li>
+<li>Frame Advance</li>
+<li>Insert Cartridge...</li>
+<li>Use CD Unit</li>
+<li>Configure</li>
+<li>Exit</li>
+</ul>
+
+<p><b>Power</b> does the same as the toolbar button; see the &ldquo;Power&rdquo; toolbar button description for details.</p>
+
+<p><b>Pause</b> does the same as the toolbar button; see the &ldquo;Pause&rdquo; toolbar button description for details.</p>
+
+<p><b>Frame Advance</b> causes <i>Virtual Jaguar</i> to run for one frame (1/60th of a second for NTSC, 1/50th for PAL), and update the screen. This function can also be activated by pressing the <b>F7</b> key on your keyboard. This option only works when <i>Virtual Jaguar</i> is paused.</p>
+
+<p><b>Insert Cartridge...</b> does the same as the toolbar button; see the &ldquo;Insert Cartridge&rdquo; toolbar button description for details.</p>
+
+<p><b>Use CD Unit</b> does the same as the toolbar button; see the &ldquo;Use CD Unit&rdquo; toolbar button description for details.</p>
+
+<p><b>Configure</b> launches the Configure dialog. A full description is given in the &ldquo;Configure Dialog&rdquo; section below.</p>
+
+<p><b>Exit</b> quits <i>Virtual Jaguar</i> immediately. You can also quit <i>Virtual Jaguar</i> by pressing <b>Ctrl</b> + <b>Q</b> on your keyboard.</p>
+
+<h2>Help Menu</h2>
+
+<p>This menu has the following options:</p>
+
+<ul>
+<li>Contents</li>
+<li>About</li>
+</ul>
+
+<p>The <b>Contents</b> is what you&rsquo;re reading right now. The voice you are hearing in your head is probably your own, though we can&rsquo;t guarantee that. ;-) This dialog can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>The <b>About</b> option shows a credits dialog. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h2>The Configure Dialog</h2>
+
+<p>The Configure dialog has the following tabs:</p>
+
+<ul>
+<li>General</li>
+<li>Controller #1</li>
+<li>Controller #2</li>
+</ul>
+
+<h2>General Tab</h2>
+
+<p>Under the General tab, there are the following options:</p>
+
+<ul>
+<li>EEPROMs</li>
+<li>Software</li>
+<li>Enable Jaguar BIOS</li>
+<li>Enable GPU</li>
+<li>Enable DSP</li>
+<li>Show all files in file chooser</li>
+</ul>
+
+<p>Here&rsquo;s what they do.</p>
+
+<h3>EEPROMs</h3>
+
+<p>This field holds the location on your filesystem where your EEPROM files will live (see the &ldquo;EEPROMs&rdquo; section below for details). The path can be either absolute or relative; if relative, it will be relative to where the <i>Virtual Jaguar</i> executable is located on your filesystem.</p>
+
+<h3>Software</h3>
+
+<p>This field holds the location on your filesystem where your Jaguar software files will live (see the &ldquo;Software&rdquo; section below for details). The path can be either absolute or relative; if relative, it will be relative to where the <i>Virtual Jaguar</i> executable is located on your filesystem.</p>
+
+<h3>Enable Jaguar BIOS</h3>
+
+<p>Checking this option will cause the emulated Jaguar to run with the built-in system BIOS upon powering on. This is usually not necessary, but some games will not run correctly without it. Note that this option will only affect cartridge images; it has no effect on Alpine ROMs or homebrew files. Also, it won't take effect until the virtual machine has been power cycled.</p>
+
+<h3>Enable GPU</h3>
+
+<p>The GPU is one of the three main processors in the Jaguar, and checking this option enables it. Most software will not work without this.</p>
+
+<h3>Enable DSP</h3>
+
+<p>The DSP is one of the three main processors in the Jaguar, and checking this option enables it. Much software will work without it, however, there is some software that will not. Note that if the DSP is disabled, there will be <b>no</b> sound.</p>
+
+<h3>Show all files in file chooser</h3>
+
+<p>Normally the &ldquo;Insert Cartridge...&rdquo; dialog will ignore any files it encounters that it doesn&rsquo;t know how to deal with. You can override this behavior by checking this option. However, this will <b>not</b> cause <i>Virtual Jaguar</i> to be able to load such files.</p>
+
+<h2>Controller Tab</h2>
+
+<p>Under the Controller tab, there are the following options:</p>
+
+<ul>
+<li>A picture of a Jaguar controller showing which inputs are defined</li>
+<li>A button labeled &ldquo;Define All Inputs&rdquo;</li>
+</ul>
+
+<p>Hovering over a letter on the picture of the Jaguar controller will highlight it; clicking on the letter will let you redefine that input by pressing a key on the keyboard or button on a connected gamepad. If you prefer, you can define all inputs at once by clicking on the &ldquo;Define All Inputs&rdquo; button. It will then step through each input on the controller, one at a time, and wait for you to press the key/button that you wish to set it to. You can exit the key redefinition process at any time by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>NOTE: For gamepads to be detected, they must be connected to the computer before starting <i>Virtual Jaguar</i>.</p>
+
+<h2>EEPROMs</h2>
+
+<p>EEPROMs (Electrically Erasable Programmable Read Only Memory) were typically installed on Jaguar cartridges to save high scores and the like, and <i>Virtual Jaguar</i> emulates this. The EEPROMs are keyed to specific games by making a CRC32 checksum of the game and using this as a filename. If an EEPROM file does not exist, it is created when the emulated Jaguar writes to it. The EEPROM files are stored in the location specified by the &ldquo;EEPROMs&rdquo; field of the Configuration dialog, under the &ldquo;General&rdquo; tab.</p>
+
+<h2>Software</h2>
+
+<p>Software can be either uncompressed or stored in a ZIP file. <i>Virtual Jaguar</i> looks for software in the location specified by the &ldquo;Software&rdquo; field in the Configuration dialog, under the &ldquo;General&rdquo; tab.</p>
+
+<p><i>Virtual Jaguar</i> is a bit picky about file formats, but tries its best to figure out what you&rsquo;re trying to feed it. In general, if the file is a ROM image, or an Alpine image, <i>Virtual Jaguar</i> will recognize and utilize it. If it&rsquo;s a file meant to load into the emulated Jaguar&rsquo;s RAM space, <i>Virtual Jaguar</i> will load and run it as long as the file contains proper headers. A headerless file of this kind (as opposed to a cartridge or Alpine ROM image) is useless; it contains no information to help <i>Virtual Jaguar</i> know how to load and run it. There is no excuse for this kind of file to exist other than programmer laziness: So, if a file is not recognized by <i>Virtual Jaguar</i>, complain to the author and ask <i>politely</i> for a file with headers. :-)</p>
+
+<h2>Some Issues You May Encounter</h2>
+
+<p>Most of the time <i>Virtual Jaguar</i> tries to do the right thing with what you tell it to do. There are some options, however, that would be more annoying to use if <i>Virtual Jaguar</i> got in the way and forced you to do the right thing, so, in those places where it&rsquo;s possible to tell <i>Virtual Jaguar</i> to do bad things, it will willingly oblige.</p>
+
+<p>Some cartridge based games will not work without either the DSP enabled, the BIOS enabled, or both. <i>Virtual Jaguar</i> will let you attempt to run those games with those options disabled, but the result probably won&rsquo;t be what you want.</p>
+
+<h2>Jaguar Programmer&rsquo;s Zone</h2>
+
+<p><i>Virtual Jaguar</i> has a mode available that makes it more convenient for developers to use. In order to use this mode, you must start <i>Virtual Jaguar</i> with the --alpine option.</p>
+
+<p>When started in this mode, an Alpine tab is made available in the configuration dialog which gives you the following options:</p>
+
+<ul>
+<li>ROM to load</li>
+<li>ABS to load</li>
+</ul>
+
+<p><b>ROM to load</b> is the path to a Jaguar executable file that will be loaded into the Jaguar&rsquo;s cartridge memory space at $800000 (Alpine ROM images will load at $802000). As a convenience to coders, this file can be of any length, as long as it fits into the cartridge memory space (a file of this type is treated as an Alpine ROM and is loaded at $802000). The file thus loaded into memory will not be executed.</p>
+
+<p><b>ABS to load</b> is the path to a Jaguar executable file that will be loaded in the Jaguar&rsquo;s main RAM. This file must have valid headers, otherwise <i>Virtual Jaguar</i> won&rsquo;t be able to load it. Assuming the file exists and has the correct headers in it, it will be loaded and run when <i>Virtual Jaguar</i> is first run.</p>
+
+<p>Also, when in Alpine mode, extra toolbar buttons are defined (also found under the extra &ldquo;Debug&rdquo; menu):</p>
+
+<ul>
+<li>Memory Browser</li>
+<li>CPU Browser</li>
+<li>OP Browser</li>
+<li>M68K Disassembly Browser</li>
+<li>RISC Disassembly Browser</li>
+</ul>
+
+<h3>Memory Browser</h3>
+
+<p>This window lets you inspect <i>Virtual Jaguar</i>&rsquo;s emulated memory space. The <b>PgDn</b> key will advance the top of the window&rsquo;s memory location by 480 bytes, and <b>PgUp</b> will go back by the same amount. The <b>Plus (+)</b> key will advance the top of the window&rsquo;s memory location by 16 bytes, and <b>Minus (-)</b> will go back by the same amount. Entering a memory location, in hexadecimal, in the edit field and pressing the <b>Go</b> button will display memory from that location. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>CPU Browser</h3>
+
+<p>This window shows the state of the various CPUs in the emulated Jaguar. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>OP Browser</h3>
+
+<p>This window shows the current state of object list that the Object Processor is pointing to. Note that most of the time, this will likely show an object list that has had its objects processed. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>M68K Disassembly Browser</h3>
+
+<p>This window provides a disassembly of 68000 opcodes. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>RISC Disassembly Browser</h3>
+
+<p>This window provides a disassembly of RISC opcodes. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>The aforementioned options will only work when <i>Virtual Jaguar</i> is run in Alpine mode, that is, when the --alpine flag is passed in. If you do not pass in the --alpine flag, <i>Virtual Jaguar</i> will run as it normally does, i.e., as a stock Jaguar, and nothing will be loaded by default.</p>
+
+<h2>For The Curious</h2>
+
+<p>If you&rsquo;re wondering why some cartridges have labels in the &ldquo;Insert Cartridge...&rdquo; dialog and some don&rsquo;t, read on...</p>
+
+<p><i>Virtual Jaguar</i> looks at your ZIP file as a container&mdash;if it finds what it expects in the ZIP, it will use it. For example, label images: If you put an image file of a cartridge label in the ZIP file with your ROM image, <i>Virtual Jaguar</i> will use that image in the &ldquo;Insert Cartridge...&rdquo; dialog&mdash;assuming it&rsquo;s a valid image file. The image should be 365 x 168 for it to show up on the big cartridge image without any scaling; any bigger is just a waste of space and <i>Virtual Jaguar</i> will scale it down to 365 x 168 anyway.</p>
+
+<p>Using the ZIP file as a container this way opens up some exciting possibilities: Box art, overlays and documentation can be included and future versions of <i>Virtual Jaguar</i> will be able to utilize them.</p>
+
+<h2>Legal Nigglings</h2>
+
+<p>Or, as it&rsquo;s more commonly known, the disclaimer: <i>&ldquo;O liability, I do disclaim thee!&rdquo;</i></p>
+
+<p>Trademarks used in <i>Virtual Jaguar</i> and/or this documentation are the property of their respective owners. The user(s) of <i>Virtual Jaguar</i> assumes all risk associated with using the software; the authors are not responsible for anything the user(s) does with said software or what happens to the user(s) as a result of using this software.</p>
+
+<p><i>Virtual Jaguar</i> is Free (as in Libre) software and is licensed under the GPL version 3. You should have received a copy of the license with this software; if you did not, you may view a copy at <a href="http://www.gnu.org/licenses">http://www.gnu.org/licenses</a>. A copy of the source code is available at <a href="http://icculus.org/virtualjaguar">http://icculus.org/virtualjaguar</a>.</p>
+
+<p><i>Downfall</i> is &copy; 2011 <b>Reboot</b>, All Rights Reserved. Distribution of <i>Downfall</i> with <i>Virtual Jaguar</i> has been graciously authorized by <b>Reboot</b>, and may not be distributed as part of any other package.</p>
+
+</body>
+</html>
diff --git a/res/help_gr.html b/res/help_gr.html
new file mode 100644 (file)
index 0000000..d23dbb8
--- /dev/null
@@ -0,0 +1,287 @@
+<html>
+
+<head>
+<title>Virtual Jaguar: The Documentation</title>
+</head>
+
+<body>
+<h1><i>Virtual Jaguar:</i> The Documentation</h1>
+
+<h2><i>Virtual Jaguar</i> Quick Start</h2>
+
+<p>Welcome to <i>Virtual Jaguar!</i> If this is your first time using <i>Virtual Jaguar</i>, you can get a feel for what it is and does by doing the following:
+
+<ul>
+<li>Select &ldquo;Insert Cartridge&rdquo; from the &ldquo;Jaguar&rdquo; menu, or press the &ldquo;Insert Cartridge&rdquo; toolbar button.</li>
+<li>In the dialog that shows up, you will see the pack-in title of <i>Downfall</i> which is brought to you courtesy of <b>Reboot</b> (<a href="http://reboot.atari.org">http://reboot.atari.org</a>).</li>
+<li>Click on the <i>Insert</i> button in the lower right hand corner of the dialog or simply press the <b>Enter</b> key on your keyboard.</li>
+<li>In a few moments, the <i>Downfall</i> title screen should show in the <i>Virtual Jaguar</i> main window.</li>
+</ul>
+
+<p>To play, use the left and right keys (mapped to <b>Z</b> and <b>C</b> on your keyboard) and the the B button (mapped to <b>K</b> on your keyboard). You can pause <i>Virtual Jaguar</i> by selecting &ldquo;Pause&rdquo; from the &ldquo;Jaguar&rdquo; menu, pressing the &ldquo;Pause&rdquo; toolbar button, or by pressing the <b>Esc</b> key on your keyboard. You can quit <i>Virtual Jaguar</i> by selecting &ldquo;Exit&rdquo; from the &ldquo;Jaguar&rdquo; menu, or by pressing <b>Ctrl</b> + <b>Q</b> on your keyboard.</p>
+
+<h2>System Requirements</h2>
+
+<p><i>Virtual Jaguar</i> should be able to run on most late model computers equipped with an OpenGL compliant video card. It requires a lot of raw <i>oomph</i> in it&rsquo;s present form to run well; do not be surprised if it doesn&rsquo;t run at 100% speed with all the options turned on. Certain subsystems of the Jaguar are not optimized yet and as such take more time than they would if they were optimized. To run <i>Virtual Jaguar</i> at full speed with all options on, we recommend using liquid nitrogen. At least until we get it properly optimized. ;-)</p>
+
+<h2><i>Virtual Jaguar</i> In Depth</h2>
+
+<p>This version of <i>Virtual Jaguar</i> has been redesigned with a modern GUI and as such should be fairly easy to use and understand. However, some options may not do what you expect: What follows is an exhaustive look at what the various toolbar buttons and menu options do.</p>
+
+<h2>The Toolbar</h2>
+
+<p>The main <i>Virtual Jaguar</i> toolbar contains the following buttons:</p>
+
+<ul>
+<li>Power</li>
+<li>Pause</li>
+<li>Insert Cartridge</li>
+<li>Use CD Unit</li>
+<li>Scale x1</li>
+<li>Scale x2</li>
+<li>Scale x3</li>
+<li>NTSC</li>
+<li>PAL</li>
+<li>Blur</li>
+<li>Full Screen</li>
+</ul>
+
+<p>Here&rsquo;s what they do.</p>
+
+<h3>Power</h3>
+
+<p>This toolbar button acts just like the power switch on a real Jaguar, complete with untuned tank circuit noise showing on the screen when the emulated Jaguar is turned off. Some options can only be changed after the power has been turned off, such as the NTSC/PAL switches, or the &ldquo;Use CD Unit&rdquo; option. The &ldquo;Use Jaguar BIOS&rdquo; option in the Configuration dialog will only take effect after the power has been cycled.</p>
+
+<h3>Pause</h3>
+
+<p>Pressing the Pause toolbar button will pause execution of the emulated Jaguar. Note that most games have a pause feature that is built into the game; this feature is separate from and will override any built-in game pause feature. Also, the emulator will go into pause mode if the power is on when you activate the &ldquo;Insert Cartridge&rdquo; dialog. Pressing the <b>Esc</b> key will also activate this option. Selecting this option in any of the ways listed above, while in pause mode, will take it out of pause mode.</p>
+
+<h3>Insert Cartridge</h3>
+
+<p>Pressing the Insert Cartridge button will bring up the Insert Cartridge dialog; it can also be launched by pressing <b>Ctrl</b> + <b>I</b> on your keyboard. On the left side of the dialog will be a list of software that <i>Virtual Jaguar</i> recognizes from the directory you tell it to look into (see the &ldquo;Configure&rdquo; menu option and the &ldquo;General&rdquo; tab, &ldquo;Software&rdquo; item for more information). Selecting an item in the list will bring up some information about the software on the right side of the dialog, if <i>Virtual Jaguar</i> knows about it. Pressing the icon in the lower right hand side of the dialog will then cause <i>Virtual Jaguar</i> to attempt to run the selected item. <i>Virtual Jaguar</i> cycles the power when it attempts to run the software you select.</p>
+
+<p>There are also some keyboard shortcuts that come with the Insert Cartridge dialog: Pressing a letter key will highlight the nearest item in the list that starts with that letter. Pressing more than one letter key in quick succession will narrow in on the item that matches those letter keys pressed. Pressing the <b>Esc</b> key will dismiss the dialog without attempting to load anything, and pressing the <b>Enter</b> key is the same as pressing the icon in the lower right hand side of the dialog.</p>
+
+<h3>Use CD Unit</h3>
+
+<p>Pressing this toolbar button will virtually plug in a Jaguar CD unit into the emulated Jaguar. It can only be toggled with the virtual machine powered <b>off</b>.</p>
+
+<p>As of the release date for this emulator, this option <b>DOES NOT WORK</b> 100% the way it&rsquo;s intended to: When it&rsquo;s working correctly, selecting this option will allow you to insert a Jaguar CD game into your computer&rsquo;s CD/DVD drive and play it as if it were on a real Jaguar. For now, you can see the CD BIOS make pretty patterns on your screen if you use it.</p>
+
+<p>Note that once this is working as it should, the DSP will be required to be <b>enabled</b> for it to work properly. It <b>WILL NOT WORK</b> properly without the DSP.</p>
+
+<h3>Scale x1</h3>
+
+<p>Selecting this toolbar button will cause the screen to be displayed with pixels that are sized 1 to 1 with your display; this will give you a very small display.</p>
+
+<h3>Scale x2</h3>
+
+<p>This will cause the screen to be displayed with pixels that are sized 2 to 1 with your display.</p>
+
+<h3>Scale x3</h3>
+
+<p>This will cause the screen to be displayed with pixels that are sized 3 to 1 with your display; this should yield a fairly large display.</p>
+
+<h3>NTSC</h3>
+
+<p>Selecting this item will cause the emulated Jaguar to behave as if it were an NTSC type Jaguar, running at 60 Hz. This option can only be toggled when the virtual machine is powered <b>off</b>.</p>
+
+<h3>PAL</h3>
+
+<p>Selecting this item will cause the emulated Jaguar to behave as if it were an PAL type Jaguar, running at 50 Hz. As an added bonus, you also get a few extra scan lines as compared with NTSC mode; some games will even utilize this extra screen real estate. This option can only be toggled when the virtual machine is powered <b>off</b>.</p>
+
+<h3>Blur</h3>
+
+<p>Normally, the emulated Jaguar&rsquo;s display shows pixels that are razor sharp and is what you would likely see if the Jaguar was hooked up to a high quality monitor. Selecting this item will cause the emulated Jaguar&rsquo;s display to be averaged, resulting in a screen that looks slightly blurry&mdash;more like what you would expect to see if the Jaguar was hooked up to a television. This is an aesthetic option that some people prefer; you may or may not like it.</p>
+
+<h3>Full Screen</h3>
+
+<p>Selecting this toolbar button will switch the display into full screen mode; selecting it again will switch it back to windowed mode. This option can also be activated by pressing the <b>F9</b> key on your keyboard. Note that on monitors with a wide aspect ratio that <i>Virtual Jaguar</i> will still display its virtual screen in a 4:3 aspect ratio&mdash;this is normal and expected.</p>
+
+
+<h2>Jaguar Menu</h2>
+
+<p>This menu has the following options:</p>
+
+<ul>
+<li>Power</li>
+<li>Pause</li>
+<li>Frame Advance</li>
+<li>Insert Cartridge...</li>
+<li>Use CD Unit</li>
+<li>Configure</li>
+<li>Exit</li>
+</ul>
+
+<p><b>Power</b> does the same as the toolbar button; see the &ldquo;Power&rdquo; toolbar button description for details.</p>
+
+<p><b>Pause</b> does the same as the toolbar button; see the &ldquo;Pause&rdquo; toolbar button description for details.</p>
+
+<p><b>Frame Advance</b> causes <i>Virtual Jaguar</i> to run for one frame (1/60th of a second for NTSC, 1/50th for PAL), and update the screen. This function can also be activated by pressing the <b>F7</b> key on your keyboard. This option only works when <i>Virtual Jaguar</i> is paused.</p>
+
+<p><b>Insert Cartridge...</b> does the same as the toolbar button; see the &ldquo;Insert Cartridge&rdquo; toolbar button description for details.</p>
+
+<p><b>Use CD Unit</b> does the same as the toolbar button; see the &ldquo;Use CD Unit&rdquo; toolbar button description for details.</p>
+
+<p><b>Configure</b> launches the Configure dialog. A full description is given in the &ldquo;Configure Dialog&rdquo; section below.</p>
+
+<p><b>Exit</b> quits <i>Virtual Jaguar</i> immediately. You can also quit <i>Virtual Jaguar</i> by pressing <b>Ctrl</b> + <b>Q</b> on your keyboard.</p>
+
+<h2>Help Menu</h2>
+
+<p>This menu has the following options:</p>
+
+<ul>
+<li>Contents</li>
+<li>About</li>
+</ul>
+
+<p>The <b>Contents</b> is what you&rsquo;re reading right now. The voice you are hearing in your head is probably your own, though we can&rsquo;t guarantee that. ;-) This dialog can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>The <b>About</b> option shows a credits dialog. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h2>The Configure Dialog</h2>
+
+<p>The Configure dialog has the following tabs:</p>
+
+<ul>
+<li>General</li>
+<li>Controller #1</li>
+<li>Controller #2</li>
+</ul>
+
+<h2>General Tab</h2>
+
+<p>Under the General tab, there are the following options:</p>
+
+<ul>
+<li>EEPROMs</li>
+<li>Software</li>
+<li>Enable Jaguar BIOS</li>
+<li>Enable GPU</li>
+<li>Enable DSP</li>
+<li>Show all files in file chooser</li>
+</ul>
+
+<p>Here&rsquo;s what they do.</p>
+
+<h3>EEPROMs</h3>
+
+<p>This field holds the location on your filesystem where your EEPROM files will live (see the &ldquo;EEPROMs&rdquo; section below for details). The path can be either absolute or relative; if relative, it will be relative to where the <i>Virtual Jaguar</i> executable is located on your filesystem.</p>
+
+<h3>Software</h3>
+
+<p>This field holds the location on your filesystem where your Jaguar software files will live (see the &ldquo;Software&rdquo; section below for details). The path can be either absolute or relative; if relative, it will be relative to where the <i>Virtual Jaguar</i> executable is located on your filesystem.</p>
+
+<h3>Enable Jaguar BIOS</h3>
+
+<p>Checking this option will cause the emulated Jaguar to run with the built-in system BIOS upon powering on. This is usually not necessary, but some games will not run correctly without it. Note that this option will only affect cartridge images; it has no effect on Alpine ROMs or homebrew files. Also, it won't take effect until the virtual machine has been power cycled.</p>
+
+<h3>Enable GPU</h3>
+
+<p>The GPU is one of the three main processors in the Jaguar, and checking this option enables it. Most software will not work without this.</p>
+
+<h3>Enable DSP</h3>
+
+<p>The DSP is one of the three main processors in the Jaguar, and checking this option enables it. Much software will work without it, however, there is some software that will not. Note that if the DSP is disabled, there will be <b>no</b> sound.</p>
+
+<h3>Show all files in file chooser</h3>
+
+<p>Normally the &ldquo;Insert Cartridge...&rdquo; dialog will ignore any files it encounters that it doesn&rsquo;t know how to deal with. You can override this behavior by checking this option. However, this will <b>not</b> cause <i>Virtual Jaguar</i> to be able to load such files.</p>
+
+<h2>Controller Tab</h2>
+
+<p>Under the Controller tab, there are the following options:</p>
+
+<ul>
+<li>A picture of a Jaguar controller showing which inputs are defined</li>
+<li>A button labeled &ldquo;Define All Inputs&rdquo;</li>
+</ul>
+
+<p>Hovering over a letter on the picture of the Jaguar controller will highlight it; clicking on the letter will let you redefine that input by pressing a key on the keyboard or button on a connected gamepad. If you prefer, you can define all inputs at once by clicking on the &ldquo;Define All Inputs&rdquo; button. It will then step through each input on the controller, one at a time, and wait for you to press the key/button that you wish to set it to. You can exit the key redefinition process at any time by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>NOTE: For gamepads to be detected, they must be connected to the computer before starting <i>Virtual Jaguar</i>.</p>
+
+<h2>EEPROMs</h2>
+
+<p>EEPROMs (Electrically Erasable Programmable Read Only Memory) were typically installed on Jaguar cartridges to save high scores and the like, and <i>Virtual Jaguar</i> emulates this. The EEPROMs are keyed to specific games by making a CRC32 checksum of the game and using this as a filename. If an EEPROM file does not exist, it is created when the emulated Jaguar writes to it. The EEPROM files are stored in the location specified by the &ldquo;EEPROMs&rdquo; field of the Configuration dialog, under the &ldquo;General&rdquo; tab.</p>
+
+<h2>Software</h2>
+
+<p>Software can be either uncompressed or stored in a ZIP file. <i>Virtual Jaguar</i> looks for software in the location specified by the &ldquo;Software&rdquo; field in the Configuration dialog, under the &ldquo;General&rdquo; tab.</p>
+
+<p><i>Virtual Jaguar</i> is a bit picky about file formats, but tries its best to figure out what you&rsquo;re trying to feed it. In general, if the file is a ROM image, or an Alpine image, <i>Virtual Jaguar</i> will recognize and utilize it. If it&rsquo;s a file meant to load into the emulated Jaguar&rsquo;s RAM space, <i>Virtual Jaguar</i> will load and run it as long as the file contains proper headers. A headerless file of this kind (as opposed to a cartridge or Alpine ROM image) is useless; it contains no information to help <i>Virtual Jaguar</i> know how to load and run it. There is no excuse for this kind of file to exist other than programmer laziness: So, if a file is not recognized by <i>Virtual Jaguar</i>, complain to the author and ask <i>politely</i> for a file with headers. :-)</p>
+
+<h2>Some Issues You May Encounter</h2>
+
+<p>Most of the time <i>Virtual Jaguar</i> tries to do the right thing with what you tell it to do. There are some options, however, that would be more annoying to use if <i>Virtual Jaguar</i> got in the way and forced you to do the right thing, so, in those places where it&rsquo;s possible to tell <i>Virtual Jaguar</i> to do bad things, it will willingly oblige.</p>
+
+<p>Some cartridge based games will not work without either the DSP enabled, the BIOS enabled, or both. <i>Virtual Jaguar</i> will let you attempt to run those games with those options disabled, but the result probably won&rsquo;t be what you want.</p>
+
+<h2>Jaguar Programmer&rsquo;s Zone</h2>
+
+<p><i>Virtual Jaguar</i> has a mode available that makes it more convenient for developers to use. In order to use this mode, you must start <i>Virtual Jaguar</i> with the --alpine option.</p>
+
+<p>When started in this mode, an Alpine tab is made available in the configuration dialog which gives you the following options:</p>
+
+<ul>
+<li>ROM to load</li>
+<li>ABS to load</li>
+</ul>
+
+<p><b>ROM to load</b> is the path to a Jaguar executable file that will be loaded into the Jaguar&rsquo;s cartridge memory space at $800000 (Alpine ROM images will load at $802000). As a convenience to coders, this file can be of any length, as long as it fits into the cartridge memory space (a file of this type is treated as an Alpine ROM and is loaded at $802000). The file thus loaded into memory will not be executed.</p>
+
+<p><b>ABS to load</b> is the path to a Jaguar executable file that will be loaded in the Jaguar&rsquo;s main RAM. This file must have valid headers, otherwise <i>Virtual Jaguar</i> won&rsquo;t be able to load it. Assuming the file exists and has the correct headers in it, it will be loaded and run when <i>Virtual Jaguar</i> is first run.</p>
+
+<p>Also, when in Alpine mode, extra toolbar buttons are defined (also found under the extra &ldquo;Debug&rdquo; menu):</p>
+
+<ul>
+<li>Memory Browser</li>
+<li>CPU Browser</li>
+<li>OP Browser</li>
+<li>M68K Disassembly Browser</li>
+<li>RISC Disassembly Browser</li>
+</ul>
+
+<h3>Memory Browser</h3>
+
+<p>This window lets you inspect <i>Virtual Jaguar</i>&rsquo;s emulated memory space. The <b>PgDn</b> key will advance the top of the window&rsquo;s memory location by 480 bytes, and <b>PgUp</b> will go back by the same amount. The <b>Plus (+)</b> key will advance the top of the window&rsquo;s memory location by 16 bytes, and <b>Minus (-)</b> will go back by the same amount. Entering a memory location, in hexadecimal, in the edit field and pressing the <b>Go</b> button will display memory from that location. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>CPU Browser</h3>
+
+<p>This window shows the state of the various CPUs in the emulated Jaguar. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>OP Browser</h3>
+
+<p>This window shows the current state of object list that the Object Processor is pointing to. Note that most of the time, this will likely show an object list that has had its objects processed. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>M68K Disassembly Browser</h3>
+
+<p>This window provides a disassembly of 68000 opcodes. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>RISC Disassembly Browser</h3>
+
+<p>This window provides a disassembly of RISC opcodes. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>The aforementioned options will only work when <i>Virtual Jaguar</i> is run in Alpine mode, that is, when the --alpine flag is passed in. If you do not pass in the --alpine flag, <i>Virtual Jaguar</i> will run as it normally does, i.e., as a stock Jaguar, and nothing will be loaded by default.</p>
+
+<h2>For The Curious</h2>
+
+<p>If you&rsquo;re wondering why some cartridges have labels in the &ldquo;Insert Cartridge...&rdquo; dialog and some don&rsquo;t, read on...</p>
+
+<p><i>Virtual Jaguar</i> looks at your ZIP file as a container&mdash;if it finds what it expects in the ZIP, it will use it. For example, label images: If you put an image file of a cartridge label in the ZIP file with your ROM image, <i>Virtual Jaguar</i> will use that image in the &ldquo;Insert Cartridge...&rdquo; dialog&mdash;assuming it&rsquo;s a valid image file. The image should be 365 x 168 for it to show up on the big cartridge image without any scaling; any bigger is just a waste of space and <i>Virtual Jaguar</i> will scale it down to 365 x 168 anyway.</p>
+
+<p>Using the ZIP file as a container this way opens up some exciting possibilities: Box art, overlays and documentation can be included and future versions of <i>Virtual Jaguar</i> will be able to utilize them.</p>
+
+<h2>Legal Nigglings</h2>
+
+<p>Or, as it&rsquo;s more commonly known, the disclaimer: <i>&ldquo;O liability, I do disclaim thee!&rdquo;</i></p>
+
+<p>Trademarks used in <i>Virtual Jaguar</i> and/or this documentation are the property of their respective owners. The user(s) of <i>Virtual Jaguar</i> assumes all risk associated with using the software; the authors are not responsible for anything the user(s) does with said software or what happens to the user(s) as a result of using this software.</p>
+
+<p><i>Virtual Jaguar</i> is Free (as in Libre) software and is licensed under the GPL version 3. You should have received a copy of the license with this software; if you did not, you may view a copy at <a href="http://www.gnu.org/licenses">http://www.gnu.org/licenses</a>. A copy of the source code is available at <a href="http://icculus.org/virtualjaguar">http://icculus.org/virtualjaguar</a>.</p>
+
+<p><i>Downfall</i> is &copy; 2011 <b>Reboot</b>, All Rights Reserved. Distribution of <i>Downfall</i> with <i>Virtual Jaguar</i> has been graciously authorized by <b>Reboot</b>, and may not be distributed as part of any other package.</p>
+
+</body>
+</html>
index 485a2a1f20985f88d548904e7862693bab329a4c..4258a4e661fc5d8d4b37504ad05eb388057e69a2 100644 (file)
 #include "log.h"
 #include "settings.h"
 
-#define eeprom_LOG
+//#define eeprom_LOG
 
 static uint16_t eeprom_ram[64];
+static uint16_t cdromEEPROM[64];
 
 //
 // Private function prototypes
@@ -50,12 +51,18 @@ static uint16_t jerry_ee_data = 0;
 static uint16_t jerry_ee_data_cnt = 16;
 static uint16_t jerry_writes_enabled = 0;
 static uint16_t jerry_ee_direct_jump = 0;
+
 static char eeprom_filename[MAX_PATH];
-static bool foundEEPROM = false;
+static char cdromEEPROMFilename[MAX_PATH];
+static bool haveEEPROM = false;
+static bool haveCDROMEEPROM = false;
+
 
 void EepromInit(void)
 {
+       // Handle regular cartridge EEPROM
        sprintf(eeprom_filename, "%s%08X.eep", vjs.EEPROMPath, (unsigned int)jaguarMainROMCRC32);
+       sprintf(cdromEEPROMFilename, "%scdrom.eeprom", vjs.EEPROMPath);
        FILE * fp = fopen(eeprom_filename, "rb");
 
        if (fp)
@@ -63,37 +70,68 @@ void EepromInit(void)
                fread(eeprom_ram, 1, 128, fp);
                fclose(fp);
                WriteLog("EEPROM: Loaded from %s\n", eeprom_filename);
-               foundEEPROM = true;
+               haveEEPROM = true;
        }
        else
                WriteLog("EEPROM: Could not open file \"%s\"!\n", eeprom_filename);
+
+       // Handle JagCD EEPROM
+       fp = fopen(cdromEEPROMFilename, "rb");
+
+       if (fp)
+       {
+               fread(cdromEEPROM, 1, 128, fp);
+               fclose(fp);
+               WriteLog("EEPROM: Loaded from cdrom.eeprom\n");
+               haveCDROMEEPROM = true;
+       }
+       else
+               WriteLog("EEPROM: Could not open file \"%s\"!\n", cdromEEPROMFilename);
 }
 
+
 void EepromReset(void)
 {
-       if (!foundEEPROM)
+       if (!haveEEPROM)
                memset(eeprom_ram, 0xFF, 64 * sizeof(uint16_t));
+
+       if (!haveCDROMEEPROM)
+               memset(cdromEEPROM, 0xFF, 64 * sizeof(uint16_t));
 }
 
+
 void EepromDone(void)
 {
        WriteLog("EEPROM: Done.\n");
 }
 
+
 static void EEPROMSave(void)
 {
+       // Write out regular cartridge EEPROM data
        FILE * fp = fopen(eeprom_filename, "wb");
 
-       if (fp == NULL)
+       if (fp)
        {
-               WriteLog("EEPROM: Could not create file \"%s!\"\n", eeprom_filename);
-               return;
+               fwrite(eeprom_ram, 1, 128, fp);
+               fclose(fp);
        }
+       else
+               WriteLog("EEPROM: Could not create file \"%s!\"\n", eeprom_filename);
+
+       // Write out JagCD EEPROM data
+       fp = fopen(cdromEEPROMFilename, "wb");
 
-       fwrite(eeprom_ram, 1, 128, fp);
-       fclose(fp);
+       if (fp)
+       {
+               fwrite(cdromEEPROM, 1, 128, fp);
+               fclose(fp);
+       }
+       else
+               WriteLog("EEPROM: Could not create file \"%s!\"\n", cdromEEPROMFilename);
 }
 
+
 uint8_t EepromReadByte(uint32_t offset)
 {
        switch (offset)
@@ -111,11 +149,13 @@ uint8_t EepromReadByte(uint32_t offset)
        return 0x00;
 }
 
+
 uint16_t EepromReadWord(uint32_t offset)
 {
        return ((uint16_t)EepromReadByte(offset + 0) << 8) | EepromReadByte(offset + 1);
 }
 
+
 void EepromWriteByte(uint32_t offset, uint8_t data)
 {
        switch (offset)
@@ -132,12 +172,31 @@ void EepromWriteByte(uint32_t offset, uint8_t data)
        }
 }
 
+
 void EepromWriteWord(uint32_t offset, uint16_t data)
 {
        EepromWriteByte(offset + 0, (data >> 8) & 0xFF);
        EepromWriteByte(offset + 1, data & 0xFF);
 }
 
+
+/*
+;
+;   Commands specific to the National Semiconductor NM93C14
+;
+;
+;  9-bit commands..
+;                       876543210
+eEWDS  equ     %100000000              ;Erase/Write disable (default)
+eWRAL  equ     %100010000              ;Writes all registers
+eERAL  equ     %100100000              ;Erase all registers
+eEWEN  equ     %100110000              ;Erase/write Enable
+eWRITE equ     %101000000              ;Write selected register
+eREAD  equ     %110000000              ;read from EEPROM
+eERASE equ     %111000000              ;Erase selected register
+*/
+
+
 static void eeprom_set_di(uint32_t data)
 {
 //     WriteLog("eeprom: di=%i\n",data);
@@ -155,13 +214,19 @@ static void eeprom_set_di(uint32_t data)
                jerry_ee_op |= data;
                jerry_ee_direct_jump = 0;
 //             WriteLog("eeprom: opcode %i\n",jerry_ee_op);
+
                switch (jerry_ee_op)
                {
+               // Opcode 00: eEWEN, eERAL, eWRAL, eEWNDS
                case 0: jerry_ee_state = EE_STATE_0; break;
+               // Opcode 01: eWRITE (Write selected register)
                case 1: jerry_ee_state = EE_STATE_1; break;
+               // Opcode 10: eREAD (Read from EEPROM)
                case 2: jerry_ee_state = EE_STATE_2; break;
+               // Opcode 11: eERASE (Erase selected register)
                case 3: jerry_ee_state = EE_STATE_3; break;
                }
+
                eeprom_set_di(data);
                break;
        case EE_STATE_0:
@@ -174,11 +239,16 @@ static void eeprom_set_di(uint32_t data)
        case EE_STATE_0_0:
                switch ((jerry_ee_address_data >> 4) & 0x03)
                {
+               // Opcode 00 00: eEWDS (Erase/Write disable)
                case 0: jerry_ee_state=EE_STATE_0_0_0; break;
+               // Opcode 00 01: eWRAL (Write all registers)
                case 1: jerry_ee_state=EE_STATE_0_0_1; break;
+               // Opcode 00 10: eERAL (Erase all registers)
                case 2: jerry_ee_state=EE_STATE_0_0_2; break;
+               // Opcode 00 11: eEWEN (Erase/Write enable)
                case 3: jerry_ee_state=EE_STATE_0_0_3; break;
                }
+
                eeprom_set_di(data);
                break;
        case EE_STATE_0_0_0:
@@ -198,10 +268,13 @@ static void eeprom_set_di(uint32_t data)
        case EE_STATE_0_0_1_0:
                // WriteLog("eeprom: filling eeprom with 0x%.4x\n",data);
                if (jerry_writes_enabled)
+               {
                        for(int i=0; i<64; i++)
                                eeprom_ram[i] = jerry_ee_data;
 
-               EEPROMSave();                                                           // Save it NOW!
+                       EEPROMSave();                                           // Save it NOW!
+               }
+
                //else
                //      WriteLog("eeprom: not writing because read only\n");
                jerry_ee_state = EE_STATE_BUSY;
@@ -238,9 +311,11 @@ static void eeprom_set_di(uint32_t data)
        case EE_STATE_1_1:
                //WriteLog("eeprom: writing 0x%.4x at 0x%.2x\n",jerry_ee_data,jerry_ee_address_data);
                if (jerry_writes_enabled)
+               {
                        eeprom_ram[jerry_ee_address_data] = jerry_ee_data;
+                       EEPROMSave();                                           // Save it NOW!
+               }
 
-               EEPROMSave();                                                           // Save it NOW!
                jerry_ee_state = EE_STATE_BUSY;
                break;
        case EE_STATE_2:
@@ -278,6 +353,7 @@ static void eeprom_set_di(uint32_t data)
                        if (jerry_ee_direct_jump)
                                eeprom_set_di(data);
                }
+
                break;
        case EE_READ_ADDRESS:
                jerry_ee_address_data <<= 1;
@@ -293,13 +369,15 @@ static void eeprom_set_di(uint32_t data)
                        if (jerry_ee_direct_jump)
                                eeprom_set_di(data);
                }
+
                break;
        default:
                jerry_ee_state = EE_STATE_OP_A;
        }
 }
 
-static void eeprom_set_cs(uint32_t state)
+
+static void eeprom_set_cs(uint32_t /*state*/)
 {
 //     WriteLog("eeprom: cs=%i\n",state);
        jerry_ee_state = EE_STATE_START;
@@ -312,6 +390,7 @@ static void eeprom_set_cs(uint32_t state)
        jerry_writes_enabled = 1;
 }
 
+
 static uint32_t eeprom_get_do(void)
 {
        uint16_t data = 1;
@@ -327,7 +406,11 @@ static uint32_t eeprom_get_do(void)
                break;
        case EE_STATE_2_0:
                jerry_ee_data_cnt--;
+#if 0
                data = (eeprom_ram[jerry_ee_address_data] & (1 << jerry_ee_data_cnt)) >> jerry_ee_data_cnt;
+#else
+               data = (eeprom_ram[jerry_ee_address_data] >> jerry_ee_data_cnt) & 0x01;
+#endif
 
                if (!jerry_ee_data_cnt)
                {
@@ -340,3 +423,4 @@ static uint32_t eeprom_get_do(void)
 //     WriteLog("eeprom: do=%i\n",data);
        return data;
 }
+
index 0cb41c40bc5c628666e43552188bd9488aca24db..0f89adee3e4b379442abded138c2edfc45526c85 100644 (file)
@@ -10,7 +10,6 @@
 void EepromInit(void);
 void EepromReset(void);
 void EepromDone(void);
-void EepromUpdate(void);
 
 uint8_t EepromReadByte(uint32_t offset);
 uint16_t EepromReadWord(uint32_t offset);
index e84cf232c93ae45d3a67a89c96b7321f623c4a48..1c8936796b0cd9b82eb2bbb35aed7406e0841786 100644 (file)
@@ -56,10 +56,12 @@ ConfigDialog::ConfigDialog(QWidget * parent/*= 0*/): QDialog(parent)
 //     controllerTab2->UpdateLabel();                          // Now it's safe to do this... ;-)
 }
 
+
 ConfigDialog::~ConfigDialog()
 {
 }
 
+
 void ConfigDialog::LoadDialogFromSettings(void)
 {
 //     generalTab->edit1->setText(vjs.jagBootPath);
@@ -87,6 +89,7 @@ void ConfigDialog::LoadDialogFromSettings(void)
        }
 }
 
+
 void ConfigDialog::UpdateVJSettings(void)
 {
 //     strcpy(vjs.jagBootPath, generalTab->edit1->text().toAscii().data());
@@ -116,6 +119,7 @@ void ConfigDialog::UpdateVJSettings(void)
        }
 }
 
+
 QString ConfigDialog::CheckForTrailingSlash(QString s)
 {
        if (!s.endsWith('/') && !s.endsWith('\\'))
index ba2c0dd2c4682025b5ac549581724e8f87d9939d..43ec937cbf5cfbaa123d7746f6f02bc06d40fe8f 100644 (file)
@@ -681,13 +681,14 @@ void MainWin::Timer(void)
 
        videoWidget->updateGL();
 
-#if 1
        // FPS handling
-       // Approach: We use a ring buffer to store timestamps over a given amount
-       // of frames, then sum them to figure out the FPS.
+       // Approach: We use a ring buffer to store times (in ms) over a given
+       // amount of frames, then sum them to figure out the FPS.
        uint32_t timestamp = SDL_GetTicks();
        // This assumes the ring buffer size is a power of 2
-       ringBufferPointer = (ringBufferPointer + 1) & (RING_BUFFER_SIZE - 1);
+//     ringBufferPointer = (ringBufferPointer + 1) & (RING_BUFFER_SIZE - 1);
+       // Doing it this way is better. Ring buffer size can be arbitrary then.
+       ringBufferPointer = (ringBufferPointer + 1) % RING_BUFFER_SIZE;
        ringBuffer[ringBufferPointer] = timestamp - oldTimestamp;
        uint32_t elapsedTime = 0;
 
@@ -698,18 +699,14 @@ void MainWin::Timer(void)
        if (elapsedTime == 0)
                elapsedTime = 1;
 
-#if 0
-       float framesPerSecond = ((float)RING_BUFFER_SIZE / (float)elapsedTime) * 1000.0;
-       statusBar()->showMessage(QString("%1 FPS").arg(framesPerSecond));
-#else
        // This is in frames per 10 seconds, so we can have 1 decimal
        uint32_t framesPerSecond = (uint32_t)(((float)RING_BUFFER_SIZE / (float)elapsedTime) * 10000.0);
        uint32_t fpsIntegerPart = framesPerSecond / 10;
        uint32_t fpsDecimalPart = framesPerSecond % 10;
+       // If this is updated too frequently to be useful, we can throttle it down
+       // so that it only updates every 10th frame or so
        statusBar()->showMessage(QString("%1.%2 FPS").arg(fpsIntegerPart).arg(fpsDecimalPart));
-#endif
        oldTimestamp = timestamp;
-#endif
 }
 
 
index 5f081ef2c9eeb25372e4e456b9e723684a49ae80..3c26d37e93e007d4b8907f8539fb9b00db861a97 100644 (file)
        <file>../../res/test-pattern.jpg</file>
        <file>../../res/help.html</file>
 </qresource>
+<qresource lang="fr">
+       <file alias="/res/help.html">../../res/help_fr.html</file>
+</qresource>
+<qresource lang="gr">
+       <file alias="/res/help.html">../../res/help_gr.html</file>
+</qresource>
 </RCC>
index 6e0862fc72f56dbaba0b43287c0f49816863427c..31bf263af45fbd51ccb7b024e714183b7bd6e64b 100644 (file)
@@ -45,9 +45,9 @@ QMAKE_CXXFLAGS += `$(CROSS)sdl-config --cflags`
 
 # Need to add libcdio stuffola (checking/including)...
 
-# Translations. None yet. :-(
-#TRANSLATIONS = virtualjaguar_fr.ts \
-#      virtualjaguar_gr.ts
+# Translations. NB: Nobody has stepped up to do any :-P so these are dummy translations
+TRANSLATIONS = virtualjaguar_fr.ts \
+       virtualjaguar_gr.ts
 
 INCLUDEPATH += \
        src \
diff --git a/virtualjaguar_fr.ts b/virtualjaguar_fr.ts
new file mode 100644 (file)
index 0000000..26f7b13
--- /dev/null
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr_FR">
+<context>
+    <name>AboutWindow</name>
+    <message id="0">
+        <location filename="src/gui/about.cpp" line="25"/>
+        <location filename="src/gui/debug/cpubrowser.cpp" line="27"/>
+        <location filename="src/gui/debug/m68kdasmbrowser.cpp" line="27"/>
+        <location filename="src/gui/debug/memorybrowser.cpp" line="24"/>
+        <location filename="src/gui/debug/opbrowser.cpp" line="25"/>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="27"/>
+        <location filename="src/gui/filepicker.cpp" line="60"/>
+        <location filename="src/gui/help.cpp" line="23"/>
+        <source>About Virtual Jaguar...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/about.cpp" line="32"/>
+        <source>&lt;img src=&apos;:/res/vj_title_small.png&apos; style=&apos;float: right&apos;&gt;&lt;table&gt;&lt;tr&gt;&lt;td align=&apos;right&apos;&gt;&lt;b&gt;Version: &lt;/b&gt;&lt;/td&gt;&lt;td&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AlpineTab</name>
+    <message>
+        <location filename="src/gui/alpinetab.cpp" line="53"/>
+        <source>Allow writes to cartridge ROM</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CPUBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/cpubrowser.cpp" line="30"/>
+        <source>CPU Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>ConfigDialog</name>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="35"/>
+        <source>General</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="36"/>
+        <source>Controller #1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="37"/>
+        <source>Controller #2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="40"/>
+        <source>Alpine</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="52"/>
+        <source>Virtual Jaguar Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>ControllerTab</name>
+    <message>
+        <location filename="src/gui/controllertab.cpp" line="26"/>
+        <source>Define All Keys</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FilePickerWindow</name>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="138"/>
+        <source>&lt;h2&gt;...&lt;/h2&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="151"/>
+        <source>&lt;b&gt;Type: &lt;/b&gt;&lt;br&gt;&lt;b&gt;CRC32: &lt;/b&gt;&lt;br&gt;&lt;b&gt;Compatibility: &lt;/b&gt;&lt;br&gt;&lt;b&gt;Notes:&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="160"/>
+        <source>?MB Cartridge&lt;br&gt;00000000&lt;br&gt;?&lt;br&gt;?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="412"/>
+        <location filename="src/gui/filepicker.cpp" line="421"/>
+        <source>%1MB Cartridge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="414"/>
+        <location filename="src/gui/filepicker.cpp" line="429"/>
+        <source>%1MB Alpine ROM</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="416"/>
+        <location filename="src/gui/filepicker.cpp" line="438"/>
+        <source>*** UNKNOWN *** (%1 bytes)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="427"/>
+        <source>%1MB Alpine ROM w/Universal Header</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="434"/>
+        <source>ABS/COF Executable (%1 bytes)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="436"/>
+        <source>Jaguar Server Executable (%1 bytes)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>GeneralTab</name>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="56"/>
+        <source>Enable Jaguar BIOS</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="57"/>
+        <source>Enable GPU</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="58"/>
+        <source>Enable DSP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="59"/>
+        <source>Start Virtual Jaguar in full screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="61"/>
+        <source>Show all files in file chooser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>KeyGrabber</name>
+    <message>
+        <location filename="src/gui/keygrabber.cpp" line="25"/>
+        <source>Grab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/keygrabber.cpp" line="47"/>
+        <source>Press key for &quot;%1&quot;&lt;br&gt;(ESC to cancel)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>M68KDasmBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/m68kdasmbrowser.cpp" line="29"/>
+        <source>Go</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/m68kdasmbrowser.cpp" line="32"/>
+        <source>M68K Disassembly Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MainWin</name>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="95"/>
+        <source>Virtual Jaguar </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="98"/>
+        <source> - Alpine Mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="118"/>
+        <source>E&amp;xit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="121"/>
+        <source>Ctrl+q</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="122"/>
+        <source>Quit Virtual Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="131"/>
+        <source>&amp;Power</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="132"/>
+        <source>Powers Jaguar on/off</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="142"/>
+        <source>Pause</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="143"/>
+        <source>Toggles the running state</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="146"/>
+        <source>Esc</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="151"/>
+        <source>Zoom 100%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="152"/>
+        <source>Set window zoom to 100%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="156"/>
+        <source>Zoom 200%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="157"/>
+        <source>Set window zoom to 200%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="161"/>
+        <source>Zoom 300%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="162"/>
+        <source>Set window zoom to 300%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="168"/>
+        <source>NTSC</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="169"/>
+        <source>Sets Jaguar to NTSC mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="173"/>
+        <source>PAL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="174"/>
+        <source>Sets Jaguar to PAL mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="178"/>
+        <source>Blur</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="179"/>
+        <source>Sets OpenGL rendering to GL_NEAREST</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="183"/>
+        <source>&amp;About...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="184"/>
+        <source>Blatant self-promotion</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="187"/>
+        <source>&amp;Contents...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="188"/>
+        <source>Help is available, if you should need it</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="191"/>
+        <source>&amp;Insert Cartridge...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="192"/>
+        <source>Insert a cartridge into Virtual Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="193"/>
+        <source>Ctrl+i</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="196"/>
+        <source>&amp;Configure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="197"/>
+        <source>Configure options for Virtual Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="198"/>
+        <source>Ctrl+c</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="201"/>
+        <source>&amp;Use CD Unit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="202"/>
+        <source>Use Jaguar Virtual CD unit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="207"/>
+        <source>&amp;Frame Advance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="208"/>
+        <source>F7</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="211"/>
+        <source>F&amp;ull Screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="212"/>
+        <source>F9</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="217"/>
+        <source>Memory Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="218"/>
+        <source>Shows the Jaguar memory browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="222"/>
+        <source>CPU Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="223"/>
+        <source>Shows the Jaguar CPU browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="227"/>
+        <source>OP Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="228"/>
+        <source>Shows the Jaguar OP browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="232"/>
+        <source>68K Listing Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="233"/>
+        <source>Shows the 68K disassembly browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="237"/>
+        <source>RISC Listing Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="238"/>
+        <source>Shows the RISC disassembly browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="248"/>
+        <source>&amp;Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="259"/>
+        <location filename="src/gui/mainwin.cpp" line="289"/>
+        <source>&amp;Debug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="267"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="271"/>
+        <source>Stuff</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="298"/>
+        <source>Ready</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="575"/>
+        <location filename="src/gui/mainwin.cpp" line="588"/>
+        <source>Could not load file &quot;%1&quot;!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MemoryBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/memorybrowser.cpp" line="26"/>
+        <source>Go</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/memorybrowser.cpp" line="29"/>
+        <source>Memory Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>OPBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/opbrowser.cpp" line="27"/>
+        <source>OP Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>RISCDasmBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="28"/>
+        <source>Go</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="30"/>
+        <source>GPU</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="31"/>
+        <source>DSP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="34"/>
+        <source>RISC Disassembly Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff --git a/virtualjaguar_gr.ts b/virtualjaguar_gr.ts
new file mode 100644 (file)
index 0000000..a40cce8
--- /dev/null
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+    <name>AboutWindow</name>
+    <message id="0">
+        <location filename="src/gui/about.cpp" line="25"/>
+        <location filename="src/gui/debug/cpubrowser.cpp" line="27"/>
+        <location filename="src/gui/debug/m68kdasmbrowser.cpp" line="27"/>
+        <location filename="src/gui/debug/memorybrowser.cpp" line="24"/>
+        <location filename="src/gui/debug/opbrowser.cpp" line="25"/>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="27"/>
+        <location filename="src/gui/filepicker.cpp" line="60"/>
+        <location filename="src/gui/help.cpp" line="23"/>
+        <source>About Virtual Jaguar...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/about.cpp" line="32"/>
+        <source>&lt;img src=&apos;:/res/vj_title_small.png&apos; style=&apos;float: right&apos;&gt;&lt;table&gt;&lt;tr&gt;&lt;td align=&apos;right&apos;&gt;&lt;b&gt;Version: &lt;/b&gt;&lt;/td&gt;&lt;td&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AlpineTab</name>
+    <message>
+        <location filename="src/gui/alpinetab.cpp" line="53"/>
+        <source>Allow writes to cartridge ROM</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CPUBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/cpubrowser.cpp" line="30"/>
+        <source>CPU Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>ConfigDialog</name>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="35"/>
+        <source>General</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="36"/>
+        <source>Controller #1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="37"/>
+        <source>Controller #2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="40"/>
+        <source>Alpine</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/configdialog.cpp" line="52"/>
+        <source>Virtual Jaguar Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>ControllerTab</name>
+    <message>
+        <location filename="src/gui/controllertab.cpp" line="26"/>
+        <source>Define All Keys</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FilePickerWindow</name>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="138"/>
+        <source>&lt;h2&gt;...&lt;/h2&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="151"/>
+        <source>&lt;b&gt;Type: &lt;/b&gt;&lt;br&gt;&lt;b&gt;CRC32: &lt;/b&gt;&lt;br&gt;&lt;b&gt;Compatibility: &lt;/b&gt;&lt;br&gt;&lt;b&gt;Notes:&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="160"/>
+        <source>?MB Cartridge&lt;br&gt;00000000&lt;br&gt;?&lt;br&gt;?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="412"/>
+        <location filename="src/gui/filepicker.cpp" line="421"/>
+        <source>%1MB Cartridge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="414"/>
+        <location filename="src/gui/filepicker.cpp" line="429"/>
+        <source>%1MB Alpine ROM</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="416"/>
+        <location filename="src/gui/filepicker.cpp" line="438"/>
+        <source>*** UNKNOWN *** (%1 bytes)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="427"/>
+        <source>%1MB Alpine ROM w/Universal Header</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="434"/>
+        <source>ABS/COF Executable (%1 bytes)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/filepicker.cpp" line="436"/>
+        <source>Jaguar Server Executable (%1 bytes)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>GeneralTab</name>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="56"/>
+        <source>Enable Jaguar BIOS</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="57"/>
+        <source>Enable GPU</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="58"/>
+        <source>Enable DSP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="59"/>
+        <source>Start Virtual Jaguar in full screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/generaltab.cpp" line="61"/>
+        <source>Show all files in file chooser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>KeyGrabber</name>
+    <message>
+        <location filename="src/gui/keygrabber.cpp" line="25"/>
+        <source>Grab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/keygrabber.cpp" line="47"/>
+        <source>Press key for &quot;%1&quot;&lt;br&gt;(ESC to cancel)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>M68KDasmBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/m68kdasmbrowser.cpp" line="29"/>
+        <source>Go</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/m68kdasmbrowser.cpp" line="32"/>
+        <source>M68K Disassembly Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MainWin</name>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="95"/>
+        <source>Virtual Jaguar </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="98"/>
+        <source> - Alpine Mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="118"/>
+        <source>E&amp;xit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="121"/>
+        <source>Ctrl+q</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="122"/>
+        <source>Quit Virtual Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="131"/>
+        <source>&amp;Power</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="132"/>
+        <source>Powers Jaguar on/off</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="142"/>
+        <source>Pause</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="143"/>
+        <source>Toggles the running state</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="146"/>
+        <source>Esc</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="151"/>
+        <source>Zoom 100%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="152"/>
+        <source>Set window zoom to 100%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="156"/>
+        <source>Zoom 200%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="157"/>
+        <source>Set window zoom to 200%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="161"/>
+        <source>Zoom 300%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="162"/>
+        <source>Set window zoom to 300%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="168"/>
+        <source>NTSC</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="169"/>
+        <source>Sets Jaguar to NTSC mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="173"/>
+        <source>PAL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="174"/>
+        <source>Sets Jaguar to PAL mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="178"/>
+        <source>Blur</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="179"/>
+        <source>Sets OpenGL rendering to GL_NEAREST</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="183"/>
+        <source>&amp;About...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="184"/>
+        <source>Blatant self-promotion</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="187"/>
+        <source>&amp;Contents...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="188"/>
+        <source>Help is available, if you should need it</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="191"/>
+        <source>&amp;Insert Cartridge...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="192"/>
+        <source>Insert a cartridge into Virtual Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="193"/>
+        <source>Ctrl+i</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="196"/>
+        <source>&amp;Configure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="197"/>
+        <source>Configure options for Virtual Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="198"/>
+        <source>Ctrl+c</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="201"/>
+        <source>&amp;Use CD Unit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="202"/>
+        <source>Use Jaguar Virtual CD unit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="207"/>
+        <source>&amp;Frame Advance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="208"/>
+        <source>F7</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="211"/>
+        <source>F&amp;ull Screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="212"/>
+        <source>F9</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="217"/>
+        <source>Memory Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="218"/>
+        <source>Shows the Jaguar memory browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="222"/>
+        <source>CPU Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="223"/>
+        <source>Shows the Jaguar CPU browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="227"/>
+        <source>OP Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="228"/>
+        <source>Shows the Jaguar OP browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="232"/>
+        <source>68K Listing Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="233"/>
+        <source>Shows the 68K disassembly browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="237"/>
+        <source>RISC Listing Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="238"/>
+        <source>Shows the RISC disassembly browser window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="248"/>
+        <source>&amp;Jaguar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="259"/>
+        <location filename="src/gui/mainwin.cpp" line="289"/>
+        <source>&amp;Debug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="267"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="271"/>
+        <source>Stuff</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="298"/>
+        <source>Ready</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/mainwin.cpp" line="575"/>
+        <location filename="src/gui/mainwin.cpp" line="588"/>
+        <source>Could not load file &quot;%1&quot;!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MemoryBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/memorybrowser.cpp" line="26"/>
+        <source>Go</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/memorybrowser.cpp" line="29"/>
+        <source>Memory Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>OPBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/opbrowser.cpp" line="27"/>
+        <source>OP Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>RISCDasmBrowserWindow</name>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="28"/>
+        <source>Go</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="30"/>
+        <source>GPU</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="31"/>
+        <source>DSP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/gui/debug/riscdasmbrowser.cpp" line="34"/>
+        <source>RISC Disassembly Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>