]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc2020b1.zip
authorToni Wilen <twilen@winuae.net>
Sat, 2 Jan 2010 15:41:51 +0000 (17:41 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:50:21 +0000 (21:50 +0200)
63 files changed:
a2091.c
akiko.c
ar.c
arcadia.c
archivers/dms/pfile.c
archivers/dms/u_heavy.c
cd32_fmv.c
cdtv.c
cfgfile.c
cia.c
consolehook.c [new file with mode: 0644]
custom.c
debug.c
disk.c
drawing.c
expansion.c
filesys.asm
filesys.c
filesys_bootrom.c
gayle.c
hardfile.c
include/ar.h
include/autoconf.h
include/consolehook.h [new file with mode: 0644]
include/custom.h
include/gui.h
include/inputdevice.h
include/keyboard.h
include/memory.h
include/options.h
include/rommgr.h [new file with mode: 0644]
include/sysdeps.h
include/uae.h
inputdevice.c
main.c
memory.c
moduleripper.c
ncr_scsi.c
od-win32/WinUAE_Install.nsi
od-win32/blkdev_win32_aspi.c
od-win32/blkdev_win32_ioctl.c
od-win32/blkdev_win32_spti.c
od-win32/clirun.c
od-win32/debug_win32.c
od-win32/direct3d.c
od-win32/fsdb_win32.c
od-win32/keyboard_win32.c
od-win32/posixemu.c
od-win32/prowizard/prowizard.vcproj [new file with mode: 0644]
od-win32/resources/winuae.rc
od-win32/resources/winuae_minimal.rc
od-win32/unicode.c
od-win32/win32.c
od-win32/win32.h
od-win32/win32_filesys.c
od-win32/win32gui.c
od-win32/winuae_msvc/winuae_msvc.vcproj
od-win32/winuaechangelog.txt
od-win32/writelog.c
rommgr.c [new file with mode: 0644]
uaeunp.c
zfile.c
zfile_archive.c

diff --git a/a2091.c b/a2091.c
index 6c21e51d10d784474f1b23c1b67e930b7c9c1b27..4b1f45de149c0fde1e6e150c57b3ce0c70f76925 100644 (file)
--- a/a2091.c
+++ b/a2091.c
@@ -17,6 +17,7 @@
 #include "options.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "newcpu.h"
 #include "debug.h"
diff --git a/akiko.c b/akiko.c
index 6cc35e0f4fae9a0ee2e5fc79856d706f9061eda5..5e780193c9807f2099076bb04ecc12130de53692 100644 (file)
--- a/akiko.c
+++ b/akiko.c
@@ -131,6 +131,7 @@ static void i2c_do (void)
                                memcpy (cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), nvram_writetmp, NVRAM_PAGE_SIZE);
                                nvram_write (nvram_address & ~(NVRAM_PAGE_SIZE - 1), NVRAM_PAGE_SIZE);
                                direction = -1;
+                               gui_flicker_led (LED_MD, 0, 2);
 #if AKIKO_DEBUG_NVRAM
                                write_log (L"NVRAM write address %04X:", nvram_address & ~(NVRAM_PAGE_SIZE - 1));
                                for (i = 0; i < NVRAM_PAGE_SIZE; i++)
@@ -223,6 +224,7 @@ static void i2c_do (void)
                if (direction < 0) {
                        memcpy (nvram_writetmp, cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), NVRAM_PAGE_SIZE);
                        nvram_writeaddr = nvram_address & (NVRAM_PAGE_SIZE - 1);
+                       gui_flicker_led (LED_MD, 0, 1);
                }
                state = I2C_DATA;
                bitcounter = 0;
@@ -766,7 +768,7 @@ static int cdrom_command_led (void)
        cdrom_led &= ~1;
        cdrom_led |= v & 1;
        if (cdrom_led != old)
-               gui_cd_led (0, cdrom_led);
+               gui_flicker_led (LED_CD, 0, cdrom_led);
        if (v & 0x80) { // result wanted?
                cdrom_result_buffer[0] = cdrom_command;
                cdrom_result_buffer[1] = cdrom_led & 1;
@@ -1169,7 +1171,7 @@ void AKIKO_hsync_handler (void)
                                cdrom_led |= LED_CD_AUDIO;
                        else
                                cdrom_led &= ~LED_CD_AUDIO;
-                       gui_cd_led (0, cdrom_led);
+                       gui_flicker_led (LED_CD, 0, cdrom_led);
                }
                if (cdrom_seek_delay <= 0) {
                        cdrom_run_read ();
diff --git a/ar.c b/ar.c
index 66a459f36067058f389992a92f00d0ab4f990bc7..d68295278c3c953c3bcf3315bd11cffb0c8248a4 100644 (file)
--- a/ar.c
+++ b/ar.c
 #include "options.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "newcpu.h"
 #include "zfile.h"
index 73c21d64d033b85cbf74954cefd5b2deb569f3be..5053b90570edc0523ad5514575ad87fce1a9c135 100644 (file)
--- a/arcadia.c
+++ b/arcadia.c
@@ -14,6 +14,7 @@
 #include "options.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "newcpu.h"
 #include "debug.h"
index bf9524231cfbc94844aa9c348d2a14a711d98707..548c446f722ed02c760ed3186ac2cefb46a4a4cb 100644 (file)
@@ -1,11 +1,11 @@
 
 /*
- *     xDMS  v1.3  -  Portable DMS archive unpacker  -  Public Domain
- *     Written by     Andre Rodrigues de la Rocha  <adlroc@usa.net>
- *
- *     Handles the processing of a single DMS archive
- *
- */
+*     xDMS  v1.3  -  Portable DMS archive unpacker  -  Public Domain
+*     Written by     Andre Rodrigues de la Rocha  <adlroc@usa.net>
+*
+*     Handles the processing of a single DMS archive
+*
+*/
 
 
 #define HEADLEN 56
@@ -48,7 +48,7 @@ UCHAR *text;
 
 static void log_error(int track)
 {
-    write_log (L"DMS: Ignored error on track %d!\n", track);
+       write_log (L"DMS: Ignored error on track %d!\n", track);
 }
 
 USHORT DMS_Process_File(struct zfile *fi, struct zfile *fo, USHORT cmd, USHORT opt, USHORT PCRC, USHORT pwd, int part)
@@ -108,10 +108,10 @@ USHORT DMS_Process_File(struct zfile *fi, struct zfile *fo, USHORT cmd, USHORT o
        to = (USHORT) ((b1[18]<<8) | b1[19]);           /*  Highest track in archive. May be incorrect if archive is "appended" */
 
        if (part && from < 30) {
-           free(b1);
-           free(b2);
-           free(text);
-           return DMS_FILE_END;
+               free(b1);
+               free(b2);
+               free(text);
+               return DMS_FILE_END;
        }
 
        pkfsize = (ULONG) ((((ULONG)b1[21])<<16) | (((ULONG)b1[22])<<8) | (ULONG)b1[23]);       /*  Length of total packed data as in archive   */
@@ -208,8 +208,8 @@ USHORT DMS_Process_File(struct zfile *fi, struct zfile *fo, USHORT cmd, USHORT o
                write_log (L" ------  -------  -------  ------  ----  ----  ---- -----\n");
        }
 
-//     if (((cmd==CMD_UNPACK) || (cmd==CMD_SHOWBANNER)) && (geninfo & 2) && (!pwd))
-//             return ERR_NOPASSWD;
+       //      if (((cmd==CMD_UNPACK) || (cmd==CMD_SHOWBANNER)) && (geninfo & 2) && (!pwd))
+       //              return ERR_NOPASSWD;
 
        ret=NO_PROBLEM;
 
@@ -319,7 +319,7 @@ static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR
                else
                        write_log (L"   %2d     ",(short)number);
 
-           write_log (L"%5d    %5d   %s  %04X  %04X  %04X    %0d\n", pklen1, unpklen, modes[cmode], usum, hcrc, dcrc, flags);
+               write_log (L"%5d    %5d   %s  %04X  %04X  %04X    %0d\n", pklen1, unpklen, modes[cmode], usum, hcrc, dcrc, flags);
        }
 
        if ((pklen1 > TRACK_BUFFER_LEN) || (pklen2 >TRACK_BUFFER_LEN) || (unpklen > TRACK_BUFFER_LEN)) return ERR_BIGTRACK;
@@ -327,8 +327,8 @@ static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR
        if (zfile_fread(b1,1,(size_t)pklen1,fi) != pklen1) return ERR_SREAD;
 
        if (CreateCRC(b1,(ULONG)pklen1) != dcrc) {
-           log_error (number);
-           crcerr = 1;
+               log_error (number);
+               crcerr = 1;
        }
        /*  track 80 is FILEID.DIZ, track 0xffff (-1) is Banner  */
        /*  and track 0 with 1024 bytes only is a fake boot block with more advertising */
@@ -339,12 +339,12 @@ static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR
        if ((cmd == CMD_UNPACK) && (number<80) && (unpklen>2048)) {
                memset(b2, 0, unpklen);
                if (!crcerr)
-                   Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, enc);
+                       Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, enc);
                if (zfile_fwrite(b2,1,(size_t)unpklen,fo) != unpklen) return ERR_CANTWRITE;
        }
 
        if (crcerr)
-           return NO_PROBLEM;
+               return NO_PROBLEM;
 
        if ((cmd == CMD_SHOWBANNER) && (number == 0xffff)){
                Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, enc);
@@ -429,80 +429,80 @@ static void dms_decrypt(UCHAR *p, USHORT len, UCHAR *src){
 
 static USHORT Unpack_Track(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, UCHAR cmode, UCHAR flags, USHORT number, USHORT pklen1, USHORT usum1, int enc)
 {
-    USHORT r, err = NO_PROBLEM;
-    static USHORT pass;
-    int maybeencrypted;
-    int pwrounds;
-    UCHAR *tmp;
-    USHORT prevpass = 0;
-
-    if (passfound) {
-       if (number != 80)
-           dms_decrypt(b1, pklen1, b1);
-       r = Unpack_Track_2(b1, b2, pklen2, unpklen, cmode, flags);
-       if (r == NO_PROBLEM) {
-           if (usum1 == Calc_CheckSum(b2,(ULONG)unpklen))
-               return NO_PROBLEM;
-       }
-       log_error(number);
-       if (passretries <= 0)
-           return ERR_CSUM;
-    }
-
-    passretries--;
-    pwrounds = 0;
-    maybeencrypted = 0;
-    tmp = (unsigned char*)malloc (pklen1);
-    memcpy (tmp, b1, pklen1);
-    memset(b2, 0, unpklen);
-    for (;;) {
-       r = Unpack_Track_2(b1, b2, pklen2, unpklen, cmode, flags);
-       if (r == NO_PROBLEM) {
-           if (usum1 == Calc_CheckSum(b2,(ULONG)unpklen)) {
-               passfound = maybeencrypted;
-               if (passfound)
-                   write_log (L"DMS: decryption key = 0x%04X\n", prevpass);
-               err = NO_PROBLEM;
-               pass = prevpass;
-               break;
-           }
-       }
-       if (number == 80 || !enc) {
-           err = ERR_CSUM;
-           break;
+       USHORT r, err = NO_PROBLEM;
+       static USHORT pass;
+       int maybeencrypted;
+       int pwrounds;
+       UCHAR *tmp;
+       USHORT prevpass = 0;
+
+       if (passfound) {
+               if (number != 80)
+                       dms_decrypt(b1, pklen1, b1);
+               r = Unpack_Track_2(b1, b2, pklen2, unpklen, cmode, flags);
+               if (r == NO_PROBLEM) {
+                       if (usum1 == Calc_CheckSum(b2,(ULONG)unpklen))
+                               return NO_PROBLEM;
+               }
+               log_error(number);
+               if (passretries <= 0)
+                       return ERR_CSUM;
        }
-       maybeencrypted = 1;
-       prevpass = pass;
-       PWDCRC = pass;
-       pass++;
-       dms_decrypt(b1, pklen1, tmp);
-       pwrounds++;
-       if (pwrounds == 65536) {
-           err = ERR_CSUM;
-           passfound = 0;
-           break;
+
+       passretries--;
+       pwrounds = 0;
+       maybeencrypted = 0;
+       tmp = (unsigned char*)malloc (pklen1);
+       memcpy (tmp, b1, pklen1);
+       memset(b2, 0, unpklen);
+       for (;;) {
+               r = Unpack_Track_2(b1, b2, pklen2, unpklen, cmode, flags);
+               if (r == NO_PROBLEM) {
+                       if (usum1 == Calc_CheckSum(b2,(ULONG)unpklen)) {
+                               passfound = maybeencrypted;
+                               if (passfound)
+                                       write_log (L"DMS: decryption key = 0x%04X\n", prevpass);
+                               err = NO_PROBLEM;
+                               pass = prevpass;
+                               break;
+                       }
+               }
+               if (number == 80 || !enc) {
+                       err = ERR_CSUM;
+                       break;
+               }
+               maybeencrypted = 1;
+               prevpass = pass;
+               PWDCRC = pass;
+               pass++;
+               dms_decrypt(b1, pklen1, tmp);
+               pwrounds++;
+               if (pwrounds == 65536) {
+                       err = ERR_CSUM;
+                       passfound = 0;
+                       break;
+               }
        }
-    }
-    free (tmp);
-    return err;
+       free (tmp);
+       return err;
 }
 
 
 static void printbandiz(UCHAR *m, USHORT len){
-    UCHAR *i,*j;
-
-    i=j=m;
-    while (i<m+len) {
-       if (*i == 10) {
-           TCHAR *u;
-           *i=0;
-           u = au (j);
-           write_log (L"%s\n",u);
-           xfree (u);
-           j=i+1;
+       UCHAR *i,*j;
+
+       i=j=m;
+       while (i<m+len) {
+               if (*i == 10) {
+                       TCHAR *u;
+                       *i=0;
+                       u = au (j);
+                       write_log (L"%s\n",u);
+                       xfree (u);
+                       j=i+1;
+               }
+               i++;
        }
-       i++;
-    }
 }
 
 
index 8b456cb47f169361991e7ad334aa2cd1643ee22a..b9de0b170b78d675aa629585c16d9f12a1d05ded 100644 (file)
@@ -1,13 +1,13 @@
 
 /*
- *     xDMS  v1.3  -  Portable DMS archive unpacker  -  Public Domain
- *     Written by     Andre Rodrigues de la Rocha  <adlroc@usa.net>
- *
- *     Lempel-Ziv-Huffman decompression functions used in Heavy 1 & 2
- *     compression modes. Based on LZH decompression functions from
- *     UNIX LHA made by Masaru Oki
- *
- */
+*     xDMS  v1.3  -  Portable DMS archive unpacker  -  Public Domain
+*     Written by     Andre Rodrigues de la Rocha  <adlroc@usa.net>
+*
+*     Lempel-Ziv-Huffman decompression functions used in Heavy 1 & 2
+*     compression modes. Based on LZH decompression functions from
+*     UNIX LHA made by Masaru Oki
+*
+*/
 
 
 #include "cdata.h"
index 7ea43cb09724d284aab4021369c3dacbd5edd08d..f475af9e38f50bc78e39c25cfa08b1f7319bda89 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "options.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "newcpu.h"
 #include "zfile.h"
diff --git a/cdtv.c b/cdtv.c
index 0f3eebc0503452eca1a9e23a8a46c2a0d711b52c..e51542055c1aedc0c5cd73698e0353da24f1579d 100644 (file)
--- a/cdtv.c
+++ b/cdtv.c
@@ -979,7 +979,7 @@ void CDTV_hsync_handler (void)
        else
                cd_led &= ~LED_CD_ACTIVE;
        if (cd_led)
-               gui_cd_led (0, cd_led);
+               gui_flicker_led (LED_CD, 0, cd_led);
 
        if (cd_media && (tp_cr & 1)) {
                tp_air |= 1 << 1;
@@ -1482,6 +1482,7 @@ void cdtv_battram_write (int addr, int v)
 
        if (offset >= CDTV_NVRAM_SIZE)
                return;
+       gui_flicker_led (LED_MD, 0, 2);
        if (cdtv_battram[offset] == v)
                return;
        cdtv_battram[offset] = v;
@@ -1500,6 +1501,7 @@ uae_u8 cdtv_battram_read (int addr)
        offset = addr & CDTV_NVRAM_MASK;
        if (offset >= CDTV_NVRAM_SIZE)
                return 0;
+       gui_flicker_led (LED_MD, 0, 1);
        v = cdtv_battram[offset];
        return v;
 }
index 54444a0fc29e730111736809614f3c5a0be8d31e..64cf1d09c2723299cfb76d4ccacf0b674e2164d7 100644 (file)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -22,6 +22,7 @@
 #include "gfxfilter.h"
 #include "savestate.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "gui.h"
 #include "newcpu.h"
 #include "zfile.h"
@@ -784,7 +785,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
        cfgfile_write_bool (f, L"cpu_24bit_addressing", p->address_space_24);
        /* do not reorder end */
 
-       if (currprefs.cpu_cycle_exact) {
+       if (p->cpu_cycle_exact) {
                if (p->cpu_frequency)
                        cfgfile_write (f, L"cpu_frequency", L"%d", p->cpu_frequency);
                if (p->cpu_clock_multiplier) {
@@ -1441,17 +1442,6 @@ static struct uaedev_config_info *getuci(struct uae_prefs *p)
        return NULL;
 }
 
-static void validatefsname (TCHAR *name, int isdevname)
-{
-       int i;
-       for (i = 0; i < _tcslen (name); i++) {
-               if (name[i] == ':')
-                       name[i] = 0;
-               if (name[i] == '/')
-                       name[i] = 0;
-       }
-}
-
 struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index,
        TCHAR *devname, TCHAR *volname, TCHAR *rootdir, int readonly,
        int secspertrack, int surfaces, int reserved,
@@ -1482,8 +1472,8 @@ struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index,
        _tcscpy (uci->devname, devname ? devname : L"");
        _tcscpy (uci->volname, volname ? volname : L"");
        _tcscpy (uci->rootdir, rootdir ? rootdir : L"");
-       validatefsname (uci->devname, 1);
-       validatefsname (uci->volname, 0);
+       validatedevicename (uci->devname);
+       validatevolumename (uci->volname);
        uci->readonly = readonly;
        uci->sectors = secspertrack;
        uci->surfaces = surfaces;
@@ -1516,7 +1506,7 @@ struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index,
                        }
                }
                _tcscpy (uci->devname, base2);
-               validatefsname (uci->devname, 1);
+               validatedevicename (uci->devname);
        }
        s = filesys_createvolname (volname, rootdir, L"Harddrive");
        _tcscpy (uci->volname, s);
@@ -3121,39 +3111,6 @@ uae_u8 *save_configuration (int *len)
        return dstbak;
 }
 
-
-static int configure_rom (struct uae_prefs *p, int *rom, int msg)
-{
-       struct romdata *rd;
-       TCHAR *path = 0;
-       int i;
-
-       i = 0;
-       while (rom[i] >= 0) {
-               rd = getromdatabyid (rom[i]);
-               if (!rd) {
-                       i++;
-                       continue;
-               }
-               path = romlist_get (rd);
-               if (path)
-                       break;
-               i++;
-       }
-       if (!path) {
-               if (msg)
-                       romwarning(rom);
-               return 0;
-       }
-       if (rd->type & (ROMTYPE_KICK | ROMTYPE_KICKCD32))
-               _tcscpy (p->romfile, path);
-       if (rd->type & (ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV | ROMTYPE_ARCADIABIOS))
-               _tcscpy (p->romextfile, path);
-       if (rd->type & (ROMTYPE_CD32CART | ROMTYPE_ARCADIAGAME | ROMTYPE_HRTMON | ROMTYPE_XPOWER | ROMTYPE_NORDIC | ROMTYPE_AR | ROMTYPE_SUPERIV))
-               _tcscpy (p->cartfile, path);
-       return 1;
-}
-
 static void default_prefs_mini (struct uae_prefs *p, int type)
 {
        _tcscpy (p->description, L"UAE default A500 configuration");
diff --git a/cia.c b/cia.c
index 6948b33b72795e69f63d04bcf5e3e421948cf6f6..24c8e55844e0bb7738ba96eec38a73cfd79a9368 100644 (file)
--- a/cia.c
+++ b/cia.c
@@ -552,7 +552,7 @@ static void led_vsync (void)
        led_on = 0;
        led_times = 0;
        if (led_changed)
-               gui_led (0, gui_data.powerled_brightness);
+               gui_led (LED_POWER, gui_data.powerled_brightness);
        led_changed = 0;
        led_cycle = get_cycles ();
 }
diff --git a/consolehook.c b/consolehook.c
new file mode 100644 (file)
index 0000000..9bf747c
--- /dev/null
@@ -0,0 +1,107 @@
+
+
+#include "sysconfig.h"
+#include "sysdeps.h"
+
+#include "options.h"
+#include "memory.h"
+#include "execlib.h"
+#include "disk.h"
+#include "rommgr.h"
+#include "uae.h"
+#include "threaddep/thread.h"
+#include "keybuf.h"
+
+#include "consolehook.h"
+
+static uaecptr beginio;
+
+void consolehook_config (struct uae_prefs *p)
+{
+       int roms[] = { 15, 31, 16, 46, -1 };
+
+       default_prefs (p, 0);
+       //p->headless = 1;
+       p->produce_sound = 0;
+       p->gfx_resolution = 0;
+       p->gfx_linedbl = 0;
+       p->gfx_framerate = 10;
+       p->immediate_blits = 1;
+       p->collision_level = 0;
+       configure_rom (p, roms, 0);
+       p->cpu_model = 68020;
+       p->fpu_model = 68882;
+       p->m68k_speed = -1;
+       p->cachesize = 8192;
+       p->cpu_compatible = 0;
+       p->address_space_24 = 0;
+       p->chipmem_size = 0x00200000;
+       p->fastmem_size = 0x00800000;
+       p->bogomem_size = 0;
+       p->nr_floppies = 1;
+       p->dfxtype[1] = DRV_NONE;
+       p->floppy_speed = 0;
+       p->start_gui = 0;
+       p->gfx_size_win.width = 320;
+       p->gfx_size_win.height = 256;
+       p->turbo_emulation = 0;
+       p->win32_automount_drives = 2;
+       p->win32_automount_cddrives = 2;
+
+       add_filesys_config (p, -1, L"DH0", L"CLIBOOT", L".", 1, 0, 0, 0, 0, 15, NULL, 0, 0);
+}
+
+static void *console_thread (void *v)
+{
+       uae_set_thread_priority (NULL, 1);
+       for (;;) {
+               TCHAR wc = console_getch ();
+               char c[2];
+
+               write_log (L"*");
+               c[0] = 0;
+               c[1] = 0;
+               ua_copy (c, 1, &wc);
+               record_key_direct ((0x10 << 1) | 0);
+               record_key_direct ((0x10 << 1) | 1);
+       }
+}
+
+int consolehook_activate (void)
+{
+       return console_emulation;
+}
+
+void consolehook_ret (uaecptr condev, uaecptr oldbeginio)
+{
+       beginio = oldbeginio;
+       write_log (L"console.device at %08X\n", condev);
+
+       uae_start_thread (L"consolereader", console_thread, NULL, NULL);
+}
+
+uaecptr consolehook_beginio (uaecptr request)
+{
+       uae_u32 io_data = get_long (request + 40); // 0x28
+       uae_u32 io_length = get_long (request + 36); // 0x24
+       uae_u32 io_actual = get_long (request + 32); // 0x20
+       uae_u32 io_offset = get_long (request + 44); // 0x2c
+       uae_u16 cmd = get_word (request + 28);
+
+       if (cmd == CMD_WRITE) {
+               TCHAR *buf;
+               const char *src = get_real_address (io_data);
+               int len = io_length;
+               if (io_length == -1)
+                       len = strlen (src);
+               buf = xmalloc ((len + 1) * sizeof (TCHAR));
+               au_copy (buf, len, src);
+               buf[len] = 0;
+               f_out (L"%s", buf);
+               xfree (buf);
+       } else if (cmd == CMD_READ) {
+
+               write_log (L"%08x: CMD=%d LEN=%d OFF=%d ACT=%d\n", request, cmd, io_length, io_offset, io_actual);
+       }
+       return beginio;
+}
index e1ff89db0fa5ad68c30be3db76069dedcc882ce5..3c1f3b8302611137f33642df8a330ad5e1d98bbb 100644 (file)
--- a/custom.c
+++ b/custom.c
@@ -176,6 +176,7 @@ int maxhpos_short = MAXHPOS_PAL;
 int maxvpos = MAXVPOS_PAL;
 int maxvpos_max = MAXVPOS_PAL;
 int minfirstline = VBLANK_ENDLINE_PAL;
+int equ_vblank_endline = EQU_ENDLINE_PAL;
 int vblank_hz = VBLANK_HZ_PAL, fake_vblank_hz, vblank_skip, doublescan;
 frame_time_t syncbase;
 static int fmode;
@@ -183,7 +184,8 @@ uae_u16 beamcon0, new_beamcon0;
 uae_u16 vtotal = MAXVPOS_PAL, htotal = MAXHPOS_PAL;
 static uae_u16 hsstop, hbstrt, hbstop, vsstop, vbstrt, vbstop, hsstrt, vsstrt, hcenter;
 static int ciavsyncmode;
-static int diw_hstrt;
+static int diw_hstrt, diw_hstop;
+static int diw_hcounter;
 
 #define HSYNCTIME (maxhpos * CYCLE_UNIT);
 
@@ -230,8 +232,6 @@ static int bpl1dat_written, bpl1dat_early;
 static uae_s16 bpl1mod, bpl2mod;
 static uaecptr prevbpl[2][MAXVPOS][8];
 static uaecptr bplpt[8], bplptx[8];
-/* Used as a debugging aid, to offset any bitplane temporarily.  */
-int bpl_off[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
 
 /*static int blitcount[256];  blitter debug */
 
@@ -257,11 +257,12 @@ int plffirstline_total, plflastline_total;
 static int plfstrt_start, plfstrt, plfstop;
 static int sprite_minx, sprite_maxx;
 static int first_bpl_vpos;
-static int last_diw_pix_hpos, last_ddf_pix_hpos;
+static int last_ddf_pix_hpos;
 static int last_decide_line_hpos;
 static int last_fetch_hpos, last_sprite_hpos;
 static int diwfirstword, diwlastword;
 static int plfleft_real;
+static int last_hdiw;
 static enum diw_states diwstate, hdiwstate, ddfstate;
 int first_planes_vpos, last_planes_vpos;
 int diwfirstword_total, diwlastword_total;
@@ -577,23 +578,56 @@ static void remember_ctable_for_border (void)
 * checked.  */
 static void decide_diw (int hpos)
 {
-       /* Last hpos = hpos + 0.5, eg. normal PAL end hpos is 227.5 * 2 = 455 */
-       int pix_hpos = coord_diw_to_window_x (hpos == maxhpos ? hpos * 2 + 1 : hpos * 2);
-       if (pix_hpos >= diwfirstword && last_diw_pix_hpos < diwfirstword && hdiwstate == DIW_waiting_start)
-       {
+       /* Last hpos = hpos + 0.5, eg. normal PAL end hpos is 227.5 * 2 = 455
+          OCS Denise: 9 bit hdiw counter does not reset during lines 0 to 9
+          (PAL) or lines 0 to 10 (NTSC)
+          ECS Denise and AGA: no above "features"
+       */
+
+       int hdiw = hpos == maxhpos ? hpos * 2 + 1 : hpos * 2 + 2;
+
+       if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE) && vpos <= equ_vblank_endline) {
+               if (vpos == equ_vblank_endline)
+                       diw_hcounter++;
+               hdiw = diw_hcounter;
+               hdiw &= 511;
+       }
+       for (;;) {
+               int lhdiw = hdiw;
+               if (last_hdiw > lhdiw)
+                       lhdiw = 512;
+
+               if (lhdiw >= diw_hstrt && last_hdiw < diw_hstrt && hdiwstate == DIW_waiting_start) {
+                       if (thisline_decision.diwfirstword == -1)
+                               thisline_decision.diwfirstword = diwfirstword < 0 ? 0 : diwfirstword;
+                       hdiwstate = DIW_waiting_stop;
+               }
+               if (lhdiw >= diw_hstop && last_hdiw < diw_hstop && hdiwstate == DIW_waiting_stop) {
+                       if (thisline_decision.diwlastword == -1)
+                               thisline_decision.diwlastword = diwlastword < 0 ? 0 : diwlastword;
+                       hdiwstate = DIW_waiting_start;
+               }
+               if (lhdiw != 512)
+                       break;
+               last_hdiw = 0 - 1;
+       }
+       last_hdiw = hdiw;
+
+
+#if 0
+       pix_hpos = coord_diw_to_window_x (hdiw);
+       if (pix_hpos >= diwfirstword && last_diw_pix_hpos < diwfirstword && hdiwstate == DIW_waiting_start) {
                if (thisline_decision.diwfirstword == -1)
                        thisline_decision.diwfirstword = diwfirstword < 0 ? 0 : diwfirstword;
-               // hstrt < 2 and ECS Denise: horizontal diw start detector not active
-               if (diw_hstrt >= 2 || !(currprefs.chipset_mask & CSMASK_ECS_DENISE))
-                       hdiwstate = DIW_waiting_stop;
+               hdiwstate = DIW_waiting_stop;
        }
-       if (pix_hpos >= diwlastword && last_diw_pix_hpos < diwlastword && hdiwstate == DIW_waiting_stop)
-       {
+       if (pix_hpos >= diwlastword && last_diw_pix_hpos < diwlastword && hdiwstate == DIW_waiting_stop) {
                if (thisline_decision.diwlastword == -1)
                        thisline_decision.diwlastword = diwlastword < 0 ? 0 : diwlastword;
                hdiwstate = DIW_waiting_start;
        }
        last_diw_pix_hpos = pix_hpos;
+#endif
 }
 
 static int fetchmode;
@@ -1036,7 +1070,7 @@ static void update_toscr_planes (void)
 STATIC_INLINE void maybe_first_bpl1dat (int hpos)
 {
        if (thisline_decision.plfleft != -1) {
-               // early bpl1day crap fix (Sequential engine animation)
+               // early bpl1dat crap fix (Sequential engine animation)
                if (plfleft_real == -1) {
                        int i;
                        for (i = 0; i < thisline_decision.nr_planes; i++) {
@@ -1059,7 +1093,7 @@ STATIC_INLINE void maybe_first_bpl1dat (int hpos)
 STATIC_INLINE void fetch (int nr, int fm, int hpos)
 {
        if (nr < bplcon0_planes_limit) {
-               uaecptr p = bplpt[nr] + bpl_off[nr];
+               uaecptr p = bplpt[nr];
                bplpt[nr] += 2 << fm;
                bplptx[nr] += 2 << fm;
                if (nr == 0)
@@ -1349,7 +1383,7 @@ STATIC_INLINE void beginning_of_plane_block (int hpos, int fm)
 /* The usual inlining tricks - don't touch unless you know what you are doing. */
 STATIC_INLINE void long_fetch_ecs (int plane, int nwords, int weird_number_of_bits, int dma)
 {
-       uae_u16 *real_pt = (uae_u16 *)pfield_xlateptr (bplpt[plane] + bpl_off[plane], nwords * 2);
+       uae_u16 *real_pt = (uae_u16 *)pfield_xlateptr (bplpt[plane], nwords * 2);
        int delay = (plane & 1) ? toscr_delay2 : toscr_delay1;
        int tmp_nbits = out_nbits;
        uae_u32 shiftbuffer = todisplay[plane][0];
@@ -1407,7 +1441,7 @@ STATIC_INLINE void long_fetch_ecs (int plane, int nwords, int weird_number_of_bi
 #ifdef AGA
 STATIC_INLINE void long_fetch_aga (int plane, int nwords, int weird_number_of_bits, int fm, int dma)
 {
-       uae_u32 *real_pt = (uae_u32 *)pfield_xlateptr (bplpt[plane] + bpl_off[plane], nwords * 2);
+       uae_u32 *real_pt = (uae_u32 *)pfield_xlateptr (bplpt[plane], nwords * 2);
        int delay = (plane & 1) ? toscr_delay2 : toscr_delay1;
        int tmp_nbits = out_nbits;
        uae_u32 *shiftbuffer = todisplay[plane];
@@ -2543,6 +2577,12 @@ static void finish_decisions (void)
 
        /* leave free space for possible extra color changes at the end of line */
        next_color_change += (HBLANK_OFFSET + 1) / 2;
+
+       diw_hcounter += maxhpos * 2;
+       if ((currprefs.chipset_mask & CSMASK_ECS_DENISE) || vpos > equ_vblank_endline) {
+               diw_hcounter = maxhpos * 2;
+               last_hdiw = 2 - 1;
+       }
 }
 
 /* Set the state of all decisions to "undecided" for a new scanline. */
@@ -2607,7 +2647,6 @@ static void reset_decisions (void)
        memset (outword, 0, sizeof outword);
 
        last_decide_line_hpos = -1;
-       last_diw_pix_hpos = -1;
        last_ddf_pix_hpos = -1;
        last_sprite_hpos = -1;
        last_fetch_hpos = -1;
@@ -2733,12 +2772,14 @@ void init_hz (void)
                        minfirstline = VBLANK_ENDLINE_PAL;
                        vblank_hz = VBLANK_HZ_PAL;
                        sprite_vblank_endline = VBLANK_SPRITE_PAL;
+                       equ_vblank_endline = EQU_ENDLINE_PAL;
                } else {
                        maxvpos = MAXVPOS_NTSC;
                        maxhpos = MAXHPOS_NTSC;
                        minfirstline = VBLANK_ENDLINE_NTSC;
                        vblank_hz = VBLANK_HZ_NTSC;
                        sprite_vblank_endline = VBLANK_SPRITE_NTSC;
+                       equ_vblank_endline = EQU_ENDLINE_NTSC;
                }
                maxvpos_max = maxvpos;
        }
@@ -2757,6 +2798,7 @@ void init_hz (void)
                        minfirstline = maxvpos - 1;
                sprite_vblank_endline = minfirstline - 2;
                maxvpos_max = maxvpos;
+               equ_vblank_endline = -1;
                doublescan = htotal <= 164 ? 1 : 0;
                dumpsync ();
                hzc = 1;
@@ -2827,6 +2869,7 @@ static void calcdiw (void)
        }
 
        diw_hstrt = hstrt;
+       diw_hstop = hstop;
 
        diwfirstword = coord_diw_to_window_x (hstrt);
        diwlastword = coord_diw_to_window_x (hstop);
@@ -4488,7 +4531,7 @@ STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cyc
 {
        uae_u16 data = last_custom_value1;
        if (dma) {
-               if (cycle)
+               if (cycle && currprefs.cpu_cycle_exact)
                        s->ptxhpos = hpos;
                data = last_custom_value1 = chipmem_agnus_wget (s->pt);
                alloc_cycle (hpos, CYCLE_SPRITE);
@@ -4500,12 +4543,9 @@ STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cyc
        s->pt += 2;
        return data;
 }
-STATIC_INLINE uae_u16 sprite_fetch2 (struct sprite *s, int dma, int hpos, int cycle, int mode)
+STATIC_INLINE uae_u16 sprite_fetch2 (struct sprite *s, int hpos, int cycle, int mode)
 {
-       uae_u16 data = last_custom_value1;
-       if (dma) {
-               data = last_custom_value1 = chipmem_agnus_wget (s->pt);
-       }
+       uae_u16 data = last_custom_value1 = chipmem_agnus_wget (s->pt);
        s->pt += 2;
        return data;
 }
@@ -4567,10 +4607,10 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
                        switch (sprite_width)
                        {
                        case 64:
-                               sprite_fetch2 (s, dma, hpos, cycle, 0);
-                               sprite_fetch2 (s, dma, hpos, cycle, 0);
+                               sprite_fetch2 (s, hpos, cycle, 0);
+                               sprite_fetch2 (s, hpos, cycle, 0);
                        case 32:
-                               sprite_fetch2 (s, dma, hpos, cycle, 0);
+                               sprite_fetch2 (s, hpos, cycle, 0);
                                break;
                        }
                } else {
@@ -4601,10 +4641,10 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
                }
 #endif
                if (cycle == 0) {
-                       SPRxDATA_1 (dma ? data : sprdata[num][0], num, hpos);
+                       SPRxDATA_1 (data, num, hpos);
                        s->dmacycle = 1;
                } else {
-                       SPRxDATB_1 (dma ? data : sprdatb[num][0], num, hpos);
+                       SPRxDATB_1 (data, num, hpos);
                        spr_arm (num, 1);
                }
 #ifdef AGA
@@ -4612,9 +4652,9 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
                {
                case 64:
                        {
-                               uae_u16 data32 = sprite_fetch2 (s, dma, hpos, cycle, 1);
-                               uae_u16 data641 = sprite_fetch2 (s, dma, hpos, cycle, 1);
-                               uae_u16 data642 = sprite_fetch2 (s, dma, hpos, cycle, 1);
+                               uae_u16 data32 = sprite_fetch2 (s, hpos, cycle, 1);
+                               uae_u16 data641 = sprite_fetch2 (s, hpos, cycle, 1);
+                               uae_u16 data642 = sprite_fetch2 (s, hpos, cycle, 1);
                                if (dma) {
                                        if (cycle == 0) {
                                                sprdata[num][3] = data642;
@@ -4630,7 +4670,7 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
                        break;
                case 32:
                        {
-                               uae_u16 data32 = sprite_fetch2 (s, dma, hpos, cycle, 1);
+                               uae_u16 data32 = sprite_fetch2 (s, hpos, cycle, 1);
                                if (dma) {
                                        if (cycle == 0)
                                                sprdata[num][1] = data32;
@@ -4651,6 +4691,7 @@ static void do_sprites (int hpos)
 
        if (vpos < sprite_vblank_endline)
                return;
+
        if (doflickerfix () && interlace_seen && (next_lineno & 1))
                return;
 
@@ -4762,6 +4803,8 @@ static void adjust_array_sizes (void)
 
 static void init_hardware_frame (void)
 {
+       int i;
+
        first_bpl_vpos = -1;
        next_lineno = 0;
        prev_lineno = -1;
@@ -4776,6 +4819,8 @@ static void init_hardware_frame (void)
        ddflastword_total = 0;
        plflastline_total = 0;
        plffirstline_total = maxvpos;
+       for (i = 0; i < MAX_SPRITES; i++)
+               spr[i].ptxhpos = MAXHPOS;
 }
 
 void init_hardware_for_drawing_frame (void)
@@ -4935,6 +4980,10 @@ static void vsync_handler (void)
 
        handle_events ();
 
+#if CUSTOM_DEBUG > 1
+       if ((intreq & 0x0020) && (intena & 0x0020))
+               write_log (L"vblank interrupt not cleared\n");
+#endif
        INTREQ (0x8000 | 0x0020);
        if (bplcon0 & 4)
                lof ^= 1;
@@ -5266,8 +5315,18 @@ static void hsync_handler (void)
                for (i = 0; i < 4; i++) {
                        alloc_cycle (hp, i == 0 ? CYCLE_STROBE : CYCLE_REFRESH); /* strobe */
 #ifdef DEBUGGER
-                       if (debug_dma)
-                               record_dma (i == 0 ? (vpos + 1 == maxvpos + lof ? 0x38 : 0x3c) : 0x1fe, 0xffff, 0xffffffff, hp, vpos, DMARECORD_REFRESH);
+                       if (debug_dma) {
+                               uae_u16 strobe = 0x3c;
+                               if (vpos < equ_vblank_endline)
+                                       strobe = 0x38;
+                               else if (vpos < minfirstline)
+                                       strobe = 0x3a;
+                               else if (vpos + 1 == maxvpos + lof)
+                                       strobe = 0x38;
+                               else if ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) && lol)
+                                       strobe = 0x3e;
+                               record_dma (i == 0 ? strobe : 0x1fe, 0xffff, 0xffffffff, hp, vpos, DMARECORD_REFRESH);
+                       }
 #endif
                        hp += 2;
                        if (hp >= maxhpos)
diff --git a/debug.c b/debug.c
index 6c54879d3662a84693e12c6c403c515208482da3..5e9f537c81920bcd000eabecc1740b08060b3adc 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -33,6 +33,7 @@
 #include "inputdevice.h"
 #include "crc32.h"
 #include "cpummu.h"
+#include "rommgr.h"
 
 int debugger_active;
 static uaecptr skipaddr_start, skipaddr_end;
@@ -112,8 +113,6 @@ static TCHAR help[] = {
        L"  od                    Enable/disable Copper vpos/hpos tracing\n"
        L"  ot                    Copper single step trace\n"
        L"  ob <addr>             Copper breakpoint\n"
-       L"  O                     Display bitplane offsets\n"
-       L"  O <plane> <offset>    Offset a bitplane\n"
        L"  H[H] <cnt>            Show PC history (HH=full CPU info) <cnt> instructions\n"
        L"  C <value>             Search for values like energy or lifes in games\n"
        L"  Cl                    List currently found trainer addresses\n"
@@ -3201,16 +3200,6 @@ static void debug_1 (void)
                                break;
                        }
                case 'O':
-                       if (more_params (&inptr)) {
-                               int plane = readint (&inptr);
-                               int offs = readint (&inptr);
-                               if (plane >= 0 && plane < 8)
-                                       bpl_off[plane] = offs;
-                       } else {
-                               int i;
-                               for (i = 0; i < 8; i++)
-                                       console_out_f (L"Plane %d offset %d\n", i, bpl_off[i]);
-                       }
                        break;
                case 'b':
                        if (staterecorder (&inptr))
diff --git a/disk.c b/disk.c
index 91f2b73b902e44117cf63fff7fa3aafb683818b0..e4ccb3c2c542e7632e2fc2e799db3f6deeb12610 100644 (file)
--- a/disk.c
+++ b/disk.c
@@ -74,7 +74,7 @@ static int longwritemode = 0;
 * W number of tracks (default 2*80=160)
 *
 * W reserved
-* W type, 0=normal AmigaDOS track, 1 = raw MFM
+* W type, 0=normal AmigaDOS track, 1 = raw MFM (upper byte = disk revolutions - 1)
 * L available space for track in bytes (must be even)
 * L track length in bits
 */
@@ -114,6 +114,7 @@ typedef struct {
        int bitlen, track;
        unsigned int sync;
        image_tracktype type;
+       int revolutions;
 } trackid;
 
 #define MAX_TRACKS (2 * 83)
@@ -153,6 +154,7 @@ typedef struct {
        int mfmpos;
        int indexoffset;
        int tracklen;
+       int revolutions;
        int prevtracklen;
        int trackspeed;
        int dmalen;
@@ -620,7 +622,7 @@ static void reset_drive(int i)
        drv->dskchange_time = 0;
        drv->buffered_cyl = -1;
        drv->buffered_side = -1;
-       gui_led (i + 1, 0);
+       gui_led (i + LED_DF0, 0);
        drive_settype_id (drv);
        _tcscpy (currprefs.df[i], changed_prefs.df[i]);
        drv->newname[0] = 0;
@@ -647,7 +649,7 @@ static void update_drive_gui (int num)
        gui_data.drive_track[num] = drv->cyl;
        gui_data.drive_side = side;
        gui_data.drive_writing[num] = writ;
-       gui_led (num + 1, gui_data.drive_motor[num]);
+       gui_led (num + LED_DF0, gui_data.drive_motor[num]);
 }
 
 static void drive_fill_bigbuf (drive * drv,int);
@@ -699,6 +701,7 @@ static void updatemfmpos (drive *drv)
 static void track_reset (drive *drv)
 {
        drv->tracklen = FLOPPY_WRITE_LEN * drv->ddhd * 2 * 8;
+       drv->revolutions = 1;
        drv->trackspeed = get_floppy_speed ();
        drv->buffered_side = -1;
        drv->skipoffset = -1;
@@ -725,7 +728,8 @@ static int read_header_ext2 (struct zfile *diskfile, trackid *trackdata, int *nu
        for (i = 0; i < (*num_tracks); i++) {
                tid = trackdata + i;
                zfile_fread (buffer, 2 + 2 + 4 + 4, 1, diskfile);
-               tid->type = buffer[2] * 256 + buffer[3];
+               tid->type = buffer[3];
+               tid->revolutions = buffer[2] + 1;
                tid->len = buffer[5] * 65536 + buffer[6] * 256 + buffer[7];
                tid->bitlen = buffer[9] * 65536 + buffer[10] * 256 + buffer[11];
                tid->offs = offs;
@@ -966,6 +970,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR
                        tid->sync = buffer[0] * 256 + buffer[1];
                        tid->len = buffer[2] * 256 + buffer[3];
                        tid->offs = offs;
+                       tid->revolutions = 1;
                        if (tid->sync == 0) {
                                tid->type = TRACK_AMIGADOS;
                                tid->bitlen = 0;
@@ -991,6 +996,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR
                        tid->len = 512 * drv->num_secs;
                        tid->bitlen = 0;
                        tid->offs = i * 512 * drv->num_secs;
+                       tid->revolutions = 1;
                }
                drv->useturbo = 1;
 
@@ -1040,6 +1046,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR
                                        tid->type = TRACK_NONE;
                                        tid->len = 512 * drv->num_secs;
                                }
+                               tid->revolutions = 1;
                                tid++;
 
                        }
@@ -1093,6 +1100,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR
                        tid->len = 512 * drv->num_secs;
                        tid->bitlen = 0;
                        tid->offs = i * 512 * drv->num_secs;
+                       tid->revolutions = 1;
                }
        }
        openwritefile (drv, 0);
@@ -1577,11 +1585,13 @@ static void drive_fill_bigbuf (drive * drv, int force)
        drv->multi_revolution = 0;
        drv->tracktiming[0] = 0;
        drv->skipoffset = -1;
+       drv->revolutions = 1;
 
        if (drv->writediskfile && drv->writetrackdata[tr].bitlen > 0) {
                int i;
                trackid *wti = &drv->writetrackdata[tr];
                drv->tracklen = wti->bitlen;
+               drv->revolutions = wti->revolutions;
                read_floppy_data (drv->writediskfile, wti, 0, (uae_u8*)drv->bigmfmbuf, (wti->bitlen + 7) / 8);
                for (i = 0; i < (drv->tracklen + 15) / 16; i++) {
                        uae_u16 *mfm = drv->bigmfmbuf + i;
@@ -1660,10 +1670,12 @@ static void diskfile_update (struct zfile *diskfile, trackid *ti, int len, uae_u
 {
        uae_u8 buf[2 + 2 + 4 + 4], *zerobuf;
 
+       ti->revolutions = 1;
        ti->bitlen = len;
        zfile_fseek (diskfile, 8 + 4 + (2 + 2 + 4 + 4) * ti->track, SEEK_SET);
        memset (buf, 0, sizeof buf);
        ti->type = type;
+       buf[2] = 0;
        buf[3] = ti->type;
        do_put_mem_long ((uae_u32 *) (buf + 4), ti->len);
        do_put_mem_long ((uae_u32 *) (buf + 8), ti->bitlen);
index f61661dc196d9ef32374749637098fa11e494312..6969c5de42523d33db97253160e73791d85e0873 100644 (file)
--- a/drawing.c
+++ b/drawing.c
@@ -2468,8 +2468,8 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                int half = 0;
 
                pen_rgb = c1;
-               if (led >= 1 && led <= 4) {
-                       int pled = led - 1;
+               if (led >= LED_DF0 && led <= LED_DF3) {
+                       int pled = led - LED_DF0;
                        int track = gui_data.drive_track[pled];
                        pos = 6 + pled;
                        on_rgb = 0x00cc00;
@@ -2489,14 +2489,14 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                                        pen_rgb = ledcolor (0x00aaaaaa, rc, gc, bc, alpha);
                        }
                        side = gui_data.drive_side;
-               } else if (led == 0) {
+               } else if (led == LED_POWER) {
                        pos = 3;
                        //on = gui_data.powerled_brightness > 0;
                        on_rgb = ((gui_data.powerled_brightness * 10 / 16) + 0x33) << 16;
                        on = gui_data.powerled;
                        //on_rgb = 0xcc0000;
                        off_rgb = 0x330000;
-               } else if (led == 5) {
+               } else if (led == LED_CD) {
                        pos = 5;
                        on = gui_data.cd & (LED_CD_AUDIO | LED_CD_ACTIVE);
                        on_rgb = (on & LED_CD_AUDIO) ? 0x00cc00 : 0x0000cc;
@@ -2508,7 +2508,7 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                        num1 = -1;
                        num2 = 10;
                        num3 = 12;
-               } else if (led == 6) {
+               } else if (led == LED_HD) {
                        pos = 4;
                        on = gui_data.hd;
                        on_rgb = on == 2 ? 0xcc0000 : 0x0000cc;
@@ -2516,7 +2516,7 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                        num1 = -1;
                        num2 = 11;
                        num3 = 12;
-               } else if (led == 7) {
+               } else if (led == LED_FPS) {
                        int fps = (gui_data.fps + 5) / 10;
                        pos = 2;
                        on_rgb = 0x000000;
@@ -2529,7 +2529,7 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                        am = 3;
                        if (num1 == 0)
                                am = 2;
-               } else if (led == 8) {
+               } else if (led == LED_CPU) {
                        int idle = (gui_data.idle + 5) / 10;
                        pos = 1;
                        on = framecnt && !picasso_on;
@@ -2540,7 +2540,7 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                        num3 = idle % 10;
                        num4 = num1 == 0 ? 13 : -1;
                        am = 3;
-               } else if (led == 9) {
+               } else if (led == LED_SND) {
                        int snd = abs(gui_data.sndbuf + 5) / 10;
                        if (snd > 99)
                                snd = 99;
@@ -2560,7 +2560,17 @@ void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u
                                on_rgb = 0x0000cc; // "normal" overflow
                        off_rgb = 0x000000;
                        am = 3;
-               }
+               } else if (led == LED_MD && gui_data.drive_disabled[3]) {
+                       // DF3 reused as internal non-volatile ram led (cd32/cdtv)
+                       pos = 6 + 3;
+                       on = gui_data.md;
+                       on_rgb = on == 2 ? 0xcc0000 : 0x00cc00;
+                       off_rgb = 0x003300;
+                       num1 = -1;
+                       num2 = -1;
+                       num3 = -1;
+               } else
+                       return;
                on_rgb |= 0x33000000;
                off_rgb |= 0x33000000;
                if (half > 0) {
@@ -2910,8 +2920,7 @@ void vsync_handle_redraw (int long_frame, int lof_changed)
                if (currprefs.gfx_afullscreen && currprefs.gfx_avsync)
                        flush_screen (0, 0); /* vsync mode */
        }
-       gui_hd_led (-1, 0);
-       gui_cd_led (-1, 0);
+       gui_flicker_led (-1, 0, 0);
 #ifdef AVIOUTPUT
        frame_drawn ();
 #endif
index 455e9610cd9637e8a03af7d6c6816ab911a6522b..198f9142f5fc8c0f6e5d439969669e23c47d86b1 100644 (file)
@@ -15,6 +15,7 @@
 #include "options.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "autoconf.h"
 #include "custom.h"
 #include "newcpu.h"
index b63c4a6f98287383e7074346e3c5100582acedef..6c634326324ce78dd84d95c8f283d0f43c84f61c 100644 (file)
@@ -21,6 +21,7 @@
 ; 2008.12.11 mousehack -> tablet driver
 ; 2008.12.25 mousehack cursor sync
 ; 2009.01.20 clipboard sharing
+; 2009.12.27 console hook
 
 AllocMem = -198
 FreeMem = -210
@@ -46,16 +47,16 @@ NRF_MAGIC = $80000000
 our_seglist:
        dc.l 0                                                                  ; 8 /* NextSeg */
 start:
-       dc.l 9                                                                  ;0 12
-       bra.w filesys_mainloop  ;1 16
+       dc.l 9                                          ;0 12
+       bra.w filesys_mainloop          ;1 16
        dc.l make_dev-start                     ;2 20
-       dc.l filesys_init-start ;3 24
-       dc.l exter_server-start ;4 28
+       dc.l filesys_init-start         ;3 24
+       dc.l exter_server-start         ;4 28
        dc.l bootcode-start                     ;5 32
-       dc.l setup_exter-start  ;6 36
-       dc.l mh_e-start                                 ;7 40
-       dc.l clipboard_init-start ;8 44
-       ;48
+       dc.l setup_exter-start          ;6 36
+       dc.l mh_e-start                         ;7 40
+       dc.l clipboard_init-start       ;8 44
+       ;52
 
 bootcode:
        lea.l doslibname(pc),a1
@@ -113,6 +114,7 @@ myafterdos
        move.w #-$48,a0 ;InitCode
        jsr -$01a4(a6) ;SetFunction (restore original)
        bsr.w clipboard_init
+       bsr.w consolehook
        movem.l (sp)+,d0-d7/a1-a6
        rts ;return directly to caller
 
@@ -2387,9 +2389,53 @@ cliphook:
        moveq #0,d0
        rts
 
+consolehook:
+       move.l 4.w,a6
+       moveq #-1,d2
+       move.w #$FF38,d0
+       moveq #100,d1
+       bsr.w getrtbase
+       jsr (a0)
+       tst.l d0
+       beq.s .ch2
+       moveq #0,d2
+       jsr -$0084(a6) ;Forbid
+       lea 350(a6),a0 ;DeviceList
+       lea con_dev(pc),a1
+       jsr -$114(a6) ;FindName
+       tst.l d0
+       beq.s .ch1
+       move.l d0,a0
+       lea chook(pc),a1
+       move.l -$1e+2(a0),a2 ; BeginIO
+       move.l a1,-$1e+2(a0)
+       move.l a0,a1
+       move.w #$FF38,d0
+       moveq #101,d1
+       bsr.w getrtbase
+       jsr (a0)
+       moveq #1,d2
+.ch1
+       jsr -$008a(a6) ;Permit
+.ch2
+       move.l d2,d0
+       rts     
+       
+chook:
+       subq.l #4,sp ; native code fills with original return address
+       movem.l d0-d1/a0,-(sp)
+       move.w #$FF38,d0
+       moveq #102,d1
+       bsr.w getrtbase
+       jsr (a0)
+       movem.l (sp)+,d0-d1/a0
+       rts
+
+
 
 inp_dev: dc.b 'input.device',0
 tim_dev: dc.b 'timer.device',0
+con_dev: dc.b 'console.device',0
 devsn_name: dc.b 'DEVS',0
 devs_name: dc.b 'DEVS:',0
 clip_name: dc.b 'DEVS:clipboard.device',0
index 947c84b7b72109ecb45b0c858f56bc70ed766aee..3d0541f7a53cd5da9e1f36be1c50d4c16faec5f1 100644 (file)
--- a/filesys.c
+++ b/filesys.c
@@ -51,6 +51,7 @@
 #include "uaeresource.h"
 #include "inputdevice.h"
 #include "clipboard.h"
+#include "consolehook.h"
 
 #define TRACING_ENABLED 0
 #if TRACING_ENABLED
@@ -296,9 +297,52 @@ static void stripsemicolon (TCHAR *s)
 {
        if (!s)
                return;
-       while(_tcslen(s) > 0 && s[_tcslen(s) - 1] == ':')
+       while (_tcslen(s) > 0 && s[_tcslen(s) - 1] == ':')
                s[_tcslen(s) - 1] = 0;
 }
+static void stripspace (TCHAR *s)
+{
+       int i;
+       if (!s)
+               return;
+       for (i = 0; i < _tcslen (s); i++) {
+               if (s[i] == ' ')
+                       s[i] = '_';
+       }
+}
+static void striplength (TCHAR *s, int len)
+{
+       if (!s)
+               return;
+       if (_tcslen (s) <= len)
+               return;
+       s[len] = 0;
+}
+static void fixcharset (TCHAR *s)
+{
+       char tmp[MAX_DPATH];
+       if (!s)
+               return;
+       ua_fs_copy (tmp, MAX_DPATH, s, '_');
+       au_fs_copy (s, strlen (tmp) + 1, tmp);
+}
+
+TCHAR *validatevolumename (TCHAR *s)
+{
+       stripsemicolon (s);
+       stripspace (s);
+       fixcharset (s);
+       striplength (s, 30);
+       return s;
+}
+TCHAR *validatedevicename (TCHAR *s)
+{
+       stripsemicolon (s);
+       stripspace (s);
+       fixcharset (s);
+       striplength (s, 30);
+       return s;
+}
 
 TCHAR *filesys_createvolname (const TCHAR *volname, const TCHAR *rootdir, const TCHAR *def)
 {
@@ -347,7 +391,7 @@ TCHAR *filesys_createvolname (const TCHAR *volname, const TCHAR *rootdir, const
                else
                        nvol = my_strdup (L"");
        }
-       stripsemicolon (nvol);
+       validatevolumename (nvol);
        xfree (p);
        return nvol;
 }
@@ -473,15 +517,17 @@ static int set_filesys_unit_1 (int nr,
                bootpri = -128;
        if (donotmount)
                bootpri = -129;
-       if (bootpri < -129) bootpri = -129;
-       if (bootpri > 127) bootpri = 127;
+       if (bootpri < -129)
+               bootpri = -129;
+       if (bootpri > 127)
+               bootpri = 127;
        ui->bootpri = bootpri;
        ui->open = 1;
 
        return nr;
 err:
        if (ui->hf.handle_valid)
-               hdf_close(&ui->hf);
+               hdf_close (&ui->hf);
        return -1;
 }
 
@@ -978,7 +1024,7 @@ static void set_volume_name (Unit *unit)
        int i;
        char *s;
 
-       s = ua_fs (unit->ui.volname);
+       s = ua_fs (unit->ui.volname, -1);
        namelen = strlen (s);
        put_byte (unit->volume + 44, namelen);
        for (i = 0; i < namelen; i++)
@@ -2070,6 +2116,7 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context)
        Unit *unit;
        UnitInfo *uinfo;
        int late = 0;
+       int ed, ef;
 
        /* find UnitInfo with correct device name */
        s = _tcschr (devname, ':');
@@ -2092,8 +2139,11 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context)
                put_long (pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED);
                return 0;
        }
+       uinfo = mountinfo.ui + i;
 
-       if (!mountinfo.ui[i].wasisempty && !my_existsdir (mountinfo.ui[i].rootdir) && !my_existsfile (mountinfo.ui[i].rootdir))
+       ed = my_existsdir (uinfo->rootdir);
+       ef = my_existsfile (uinfo->rootdir);
+       if (!uinfo->wasisempty && !ef && !ed)
        {
                write_log (L"Failed attempt to mount device '%s'\n", devname);
                put_long (pkt + dp_Res1, DOS_FALSE);
@@ -2101,7 +2151,6 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context)
                return 0;
        }
 
-       uinfo = mountinfo.ui + i;
        if (!uinfo->unit_pipe) {
                late = 1;
                filesys_start_thread (uinfo, i);
@@ -2111,7 +2160,8 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context)
 
        /*    write_comm_pipe_int (unit->ui.unit_pipe, -1, 1);*/
 
-       write_log (L"FS: %s (flags=%08X) starting..\n", unit->ui.volname, unit->volflags);
+       write_log (L"FS: %s (flags=%08X,E=%d,ED=%d,EF=%d,native='%s') starting..\n",
+               unit->ui.volname, unit->volflags, uinfo->wasisempty, ed, ef, unit->ui.rootdir);
 
        /* fill in our process in the device node */
        devnode = get_long (pkt + dp_Arg3) << 2;
@@ -2740,7 +2790,7 @@ static void
        put_long (info + 120, entrytype);
 
        TRACE((L"name=\"%s\"\n", xs));
-       x2 = x = ua_fs (xs);
+       x2 = x = ua_fs (xs, -1);
        n = strlen (x);
        if (n > 106)
                n = 106;
@@ -2771,7 +2821,7 @@ static void
                xs = aino->comment;
                if (!xs)
                        xs= L"";
-               x2 = x = ua_fs (xs);
+               x2 = x = ua_fs (xs, -1);
                n = strlen (x);
                if (n > 78)
                        n = 78;
@@ -2853,7 +2903,7 @@ static int exalldo (uaecptr exalldata, uae_u32 exalldatasize, uae_u32 type, uaec
                entrytype = aino->dir ? 2 : -3;
                xs = aino->aname;
        }
-       x = ua_fs (xs);
+       x = ua_fs (xs, -1);
 
        size = 0;
        size2 = 4;
@@ -2880,7 +2930,7 @@ static int exalldo (uaecptr exalldata, uae_u32 exalldatasize, uae_u32 type, uaec
                        commentx = L"";
                else
                        commentx = aino->comment;
-               comment = ua_fs (commentx);
+               comment = ua_fs (commentx, -1);
                size += strlen (comment) + 1;
                size = (size + 3) & ~3;
        }
@@ -3256,7 +3306,7 @@ static void action_examine_next (Unit *unit, dpacket packet)
        uae_u32 uniq;
 
        TRACE((L"ACTION_EXAMINE_NEXT(0x%lx,0x%lx)\n", lock, info));
-       gui_hd_led (unit->unit, 1);
+       gui_flicker_led (LED_HD, unit->unit, 1);
        DUMPLOCK(unit, lock);
 
        if (lock != 0)
@@ -3572,7 +3622,7 @@ static void
                return;
        }
        TRACE((L"ACTION_READ(%s,0x%lx,%ld)\n", k->aino->nname, addr, size));
-       gui_hd_led (unit->unit, 1);
+       gui_flicker_led (LED_HD, unit->unit, 1);
 #ifdef RELY_ON_LOADSEG_DETECTION
        /* HACK HACK HACK HACK
        * Try to detect a LoadSeg() */
@@ -3652,7 +3702,7 @@ static void
                return;
        }
 
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
        TRACE((L"ACTION_WRITE(%s,0x%lx,%ld)\n", k->aino->nname, addr, size));
 
        if (unit->ui.readonly) {
@@ -3715,7 +3765,7 @@ static void
                whence = SEEK_SET;
 
        TRACE((L"ACTION_SEEK(%s,%d,%d)\n", k->aino->nname, pos, mode));
-       gui_hd_led (unit->unit, 1);
+       gui_flicker_led (LED_HD, unit->unit, 1);
 
        old = fs_lseek (unit, k->fd, 0, SEEK_CUR);
        {
@@ -3784,7 +3834,7 @@ static void
                PUT_PCK_RES1 (packet, DOS_TRUE);
        }
        notify_check (unit, a);
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
 }
 
 static void action_set_comment (Unit * unit, dpacket packet)
@@ -3841,7 +3891,7 @@ maybe_free_and_out:
        a->comment = commented;
        fsdb_set_file_attrs (a);
        notify_check (unit, a);
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
 }
 
 static void
@@ -4023,7 +4073,7 @@ static void
        notify_check (unit, aino);
        updatedirtime (aino, 0);
        PUT_PCK_RES1 (packet, make_lock (unit, aino->uniq, -2) >> 2);
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
 }
 
 static void
@@ -4075,7 +4125,7 @@ static void
                return;
        }
 
-       gui_hd_led (unit->unit, 1);
+       gui_flicker_led (LED_HD, unit->unit, 1);
        k->notifyactive = 1;
        /* If any open files have file pointers beyond this size, truncate only
        * so far that these pointers do not become invalid.  */
@@ -4213,7 +4263,7 @@ static void
                delete_aino (unit, a);
        }
        PUT_PCK_RES1 (packet, DOS_TRUE);
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
 }
 
 static void
@@ -4246,7 +4296,7 @@ static void
                notify_check (unit, a);
                PUT_PCK_RES1 (packet, DOS_TRUE);
        }
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
 }
 
 static void
@@ -4352,7 +4402,7 @@ static void
        if (a2->elock > 0 || a2->shlock > 0 || wehavekeys > 0)
                de_recycle_aino (unit, a2);
        PUT_PCK_RES1 (packet, DOS_TRUE);
-       gui_hd_led (unit->unit, 2);
+       gui_flicker_led (LED_HD, unit->unit, 2);
 }
 
 static void
@@ -4462,7 +4512,7 @@ static void action_change_file_position64 (Unit *unit, dpacket packet)
                whence = SEEK_SET;
 
        TRACE((L"ACTION_CHANGE_FILE_POSITION64(%s,%I64d,%d)\n", k->aino->nname, pos, mode));
-       gui_hd_led (unit->unit, 1);
+       gui_flicker_led (LED_HD, unit->unit, 1);
 
        old = fs_lseek64 (unit, k->fd, 0, SEEK_CUR);
        {
@@ -4535,7 +4585,7 @@ static void action_change_file_size64 (Unit *unit, dpacket packet)
                return;
        }
 
-       gui_hd_led (unit->unit, 1);
+       gui_flicker_led (LED_HD, unit->unit, 1);
        k->notifyactive = 1;
        /* If any open files have file pointers beyond this size, truncate only
        * so far that these pointers do not become invalid.  */
@@ -4644,7 +4694,7 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context)
                                        lockend = get_long (lockend);
                                        cnt++;
                                }
-                               TRACE((L"%d %x %x %x\n", cnt, locks, lockend, m68k_areg (regs, 3)));
+                               TRACE((L"message_lock: %d %x %x %x\n", cnt, locks, lockend, m68k_areg (regs, 3)));
                                put_long (lockend, get_long (m68k_areg (regs, 3)));
                                put_long (m68k_areg (regs, 3), locks);
                        }
@@ -5688,6 +5738,15 @@ static uae_u32 REGPARAM2 mousehack_done (TrapContext *context)
        } else if (mode == 16) {
                uaecptr a2 = m68k_areg (regs, 2);
                input_mousehack_mouseoffset (a2);
+       } else if (mode == 100) {
+               return consolehook_activate () ? 1 : 0;
+       } else if (mode == 101) {
+               consolehook_ret (m68k_areg (regs, 1), m68k_areg (regs, 2));
+       } else if (mode == 102) {
+               uaecptr ret = consolehook_beginio (m68k_areg (regs, 1));
+               put_long (m68k_areg (regs, 7) + 4 * 4, ret);
+       } else {
+               write_log (L"Unknown mousehack hook %d\n", mode);
        }
        return 1;
 }
index 0fc55a03a723bbf5bd530c69d99d18848fc0cfe0..ce5c88eca0aecec45cc553d22f106ea0c4bdce2c 100644 (file)
@@ -3,33 +3,33 @@
  db(0x00); db(0x00); db(0x08); db(0x04); db(0x00); db(0x00); db(0x00); db(0xd0);
  db(0x00); db(0x00); db(0x02); db(0x2c); db(0x00); db(0x00); db(0x00); db(0x24);
  db(0x00); db(0x00); db(0x02); db(0xe8); db(0x00); db(0x00); db(0x0d); db(0xf4);
- db(0x00); db(0x00); db(0x12); db(0x84); db(0x43); db(0xfa); db(0x16); db(0xe1);
+ db(0x00); db(0x00); db(0x12); db(0x84); db(0x43); db(0xfa); db(0x17); db(0x5a);
  db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28);
  db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04);
- db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x44);
- db(0x70); db(0x14); db(0x24); db(0x00); db(0x22); db(0x3c); db(0x00); db(0x01);
- db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80);
- db(0x67); db(0x32); db(0x24); db(0x40); db(0x20); db(0x4a); db(0x43); db(0xfa);
- db(0x00); db(0x5c); db(0x20); db(0xd9); db(0x59); db(0x82); db(0x66); db(0xfa);
- db(0x4e); db(0xae); db(0xff); db(0x88); db(0x22); db(0x4e); db(0x30); db(0x7c);
- db(0xff); db(0xb8); db(0x20); db(0x0a); db(0x4e); db(0xae); db(0xfe); db(0x5c);
- db(0x25); db(0x40); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0x00); db(0x14);
- db(0x25); db(0x48); db(0x00); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x84);
- db(0x4e); db(0xae); db(0xff); db(0x82); db(0x4c); db(0xdf); db(0x47); db(0x07);
- db(0x4e); db(0x75); db(0x20); db(0x57); db(0x20); db(0x68); db(0x00); db(0x02);
- db(0x2f); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x58); db(0x8f);
- db(0x48); db(0xe7); db(0xff); db(0x7e); db(0x22); db(0x4e); db(0x20); db(0x08);
- db(0x30); db(0x7c); db(0xff); db(0xb8); db(0x4e); db(0xae); db(0xfe); db(0x5c);
- db(0x61); db(0x00); db(0x11); db(0xd2); db(0x4c); db(0xdf); db(0x7e); db(0xff);
+ db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x40);
+ db(0x70); db(0x14); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae);
+ db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x32); db(0x24); db(0x40);
+ db(0x20); db(0x4a); db(0x43); db(0xfa); db(0x00); db(0x60); db(0x20); db(0xd9);
+ db(0x59); db(0x82); db(0x66); db(0xfa); db(0x4e); db(0xae); db(0xff); db(0x88);
+ db(0x22); db(0x4e); db(0x30); db(0x7c); db(0xff); db(0xb8); db(0x20); db(0x0a);
+ db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x25); db(0x40); db(0x00); db(0x0e);
+ db(0x41); db(0xfa); db(0x00); db(0x14); db(0x25); db(0x48); db(0x00); db(0x08);
+ db(0x4e); db(0xae); db(0xfd); db(0x84); db(0x4e); db(0xae); db(0xff); db(0x82);
+ db(0x4c); db(0xdf); db(0x47); db(0x07); db(0x4e); db(0x75); db(0x20); db(0x57);
+ db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90);
+ db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e);
+ db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8);
+ db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x11); db(0xd6);
+ db(0x61); db(0x00); db(0x15); db(0x88); db(0x4c); db(0xdf); db(0x7e); db(0xff);
  db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02);
  db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00);
  db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00);
  db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0b); db(0x82);
- db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x16); db(0x52); db(0x70); db(0x24);
+ db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x16); db(0xcb); db(0x70); db(0x24);
  db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80);
- db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x16); db(0x42); db(0x70); db(0x00);
+ db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x16); db(0xbb); db(0x70); db(0x00);
  db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40);
  db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x5a); db(0x20); db(0x3c);
  db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01);
  db(0x0a); db(0xf0); db(0x4e); db(0x90); db(0x72); db(0x03); db(0x74); db(0xf6);
  db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88);
  db(0x65); db(0x0a); db(0x67); db(0x08); db(0x78); db(0x00); db(0x22); db(0x44);
- db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x15); db(0x4d);
+ db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x15); db(0xc6);
  db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00);
  db(0x0b); db(0xa4); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c);
  db(0xff); db(0x48); db(0x61); db(0x00); db(0x0a); db(0xbc); db(0x4e); db(0x90);
  db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7);
  db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00);
  db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa);
- db(0x15); db(0x47); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
+ db(0x15); db(0xc0); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
  db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a);
  db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62);
  db(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78);
  db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d);
- db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x14); db(0xf8);
+ db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x15); db(0x71);
  db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c);
  db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8);
  db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10);
@@ -95,7 +95,7 @@
  db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfd); db(0x4a);
  db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
  db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa);
- db(0x13); db(0xcc); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa);
+ db(0x14); db(0x45); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa);
  db(0xff); db(0x24); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa);
  db(0xff); db(0x1c); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c);
  db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae);
  db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40);
  db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88);
  db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa);
- db(0x13); db(0x5c); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b);
+ db(0x13); db(0xd5); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b);
  db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae);
  db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78);
  db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50);
  db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a);
- db(0x45); db(0xfa); db(0x12); db(0xae); db(0x10); db(0x19); db(0x12); db(0x1a);
+ db(0x45); db(0xfa); db(0x13); db(0x27); db(0x10); db(0x19); db(0x12); db(0x1a);
  db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42);
  db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20);
  db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
  db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08);
- db(0x00); db(0x08); db(0x41); db(0xfa); db(0x12); db(0x84); db(0x25); db(0x48);
- db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x12); db(0x00); db(0x25); db(0x48);
+ db(0x00); db(0x08); db(0x41); db(0xfa); db(0x12); db(0xfd); db(0x25); db(0x48);
+ db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x12); db(0x79); db(0x25); db(0x48);
  db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88);
  db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee);
  db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a);
  db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); db(0x22); db(0x4a);
  db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); db(0x00); db(0x3a);
  db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); db(0x00); db(0x04);
- db(0x43); db(0xfa); db(0x0d); db(0x7d); db(0x70); db(0x00); db(0x4e); db(0xae);
+ db(0x43); db(0xfa); db(0x0d); db(0xf6); db(0x70); db(0x00); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0x4e); db(0xae);
  db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); db(0x20); db(0x02);
  db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x06);
- db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0d); db(0x78);
+ db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0d); db(0xf1);
  db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80);
  db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa);
- db(0x0d); db(0x66); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
+ db(0x0d); db(0xdf); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
  db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c);
  db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
  db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x2c);
  db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae);
  db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c);
- db(0x43); db(0xfa); db(0x0c); db(0xcd); db(0x70); db(0x00); db(0x4e); db(0xae);
+ db(0x43); db(0xfa); db(0x0d); db(0x46); db(0x70); db(0x00); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00);
  db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
  db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00);
  db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46);
  db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb);
  db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda);
- db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0b); db(0xc4);
+ db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0c); db(0x2e);
  db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x84);
- db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0b); db(0xc1);
+ db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0c); db(0x2b);
  db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x74);
  db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); db(0x20); db(0x4d);
  db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae);
  db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43);
  db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6);
  db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75);
- db(0x41); db(0xfa); db(0x09); db(0x21); db(0x43); db(0xfa); db(0x01); db(0x5c);
+ db(0x41); db(0xfa); db(0x09); db(0x9a); db(0x43); db(0xfa); db(0x01); db(0x5c);
  db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75);
  db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a);
  db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e);
  db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff);
  db(0x37); db(0x40); db(0x00); db(0x00); db(0x43); db(0xed); db(0x00); db(0x00);
  db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c);
- db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x07); db(0x65);
+ db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x07); db(0xde);
  db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xda);
  db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e);
  db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06);
  db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40);
  db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16);
  db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa);
- db(0x07); db(0x83); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
+ db(0x07); db(0xfc); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
  db(0x27); db(0x40); db(0x00); db(0x14); db(0x67); db(0xd0); db(0x4a); db(0xab);
  db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c);
- db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x07); db(0x79); db(0x70); db(0x00);
+ db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x07); db(0xf2); db(0x70); db(0x00);
  db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18);
  db(0x67); db(0x00); db(0xff); db(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08);
  db(0x66); db(0x38); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6);
  db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e);
- db(0x43); db(0xfa); db(0x06); db(0x68); db(0x4e); db(0xae); db(0xfe); db(0xec);
+ db(0x43); db(0xfa); db(0x06); db(0xd2); db(0x4e); db(0xae); db(0xfe); db(0xec);
  db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82);
- db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0x56); db(0x70); db(0x00);
+ db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0xc0); db(0x70); db(0x00);
  db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x16); db(0x2b); db(0x40);
  db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x42); db(0x60); db(0x00);
  db(0xff); db(0x76); db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48);
  db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x68);
  db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e);
- db(0x43); db(0xfa); db(0x06); db(0x35); db(0x4e); db(0xae); db(0xfe); db(0xec);
+ db(0x43); db(0xfa); db(0x06); db(0x9f); db(0x4e); db(0xae); db(0xfe); db(0xec);
  db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82);
- db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0x21);
+ db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0x8b);
  db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xd4);
  db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x00);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00);
  db(0x00); db(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00);
  db(0xf9); db(0xb0); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa);
- db(0x03); db(0xed); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6);
+ db(0x04); db(0x66); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6);
  db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00);
  db(0xee); db(0xe6); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00);
  db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae);
  db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
  db(0x38); db(0x3e); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa);
- db(0x03); db(0x7b); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
+ db(0x03); db(0xf4); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
  db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00);
  db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92);
  db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82);
  db(0x61); db(0x00); db(0xf8); db(0xf6); db(0x4e); db(0x90); db(0x22); db(0x04);
  db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf);
  db(0x7c); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18);
- db(0x41); db(0xfa); db(0x02); db(0xf3); db(0x22); db(0x08); db(0x74); db(0xfe);
+ db(0x41); db(0xfa); db(0x03); db(0x6c); db(0x22); db(0x08); db(0x74); db(0xfe);
  db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34);
  db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14);
  db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae);
  db(0xfe); db(0xb6); db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa);
- db(0x02); db(0xe3); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00);
+ db(0x03); db(0x5c); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00);
  db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08);
  db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a);
  db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40);
  db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae);
  db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa);
- db(0x03); db(0x0f); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
+ db(0x03); db(0x88); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
  db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda);
  db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a);
- db(0x41); db(0xfa); db(0x02); db(0x47); db(0x22); db(0x08); db(0x74); db(0xfe);
+ db(0x41); db(0xfa); db(0x02); db(0xc0); db(0x22); db(0x08); db(0x74); db(0xfe);
  db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea);
  db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32);
- db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0x31);
+ db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xaa);
  db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00);
  db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00);
  db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2);
  db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa);
- db(0x02); db(0x0a); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44);
+ db(0x02); db(0x83); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44);
  db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14);
  db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c);
  db(0x61); db(0x00); db(0xfe); db(0x48); db(0x70); db(0x00); db(0x4e); db(0xae);
  db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); db(0x22); db(0x68);
  db(0x00); db(0x08); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d);
  db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); db(0x70); db(0x00);
- db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e);
- db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74);
- db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76);
- db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53);
- db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44);
- db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70);
- db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65);
- db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d);
- db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f);
- db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69);
- db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x45);
- db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); db(0x50);
- db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); db(0x70);
- db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); db(0x45);
- db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61);
- db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); db(0x69);
- db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d);
- db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); db(0x69);
- db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20);
- db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74);
- db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66);
- db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f);
- db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41);
- db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74);
- db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70);
- db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64);
- db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61);
- db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69);
- db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62);
- db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61);
- db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69);
- db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78);
- db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e);
- db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00);
- db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74);
- db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75);
- db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);
+ db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x74); db(0xff);
+ db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x64); db(0x61); db(0x00);
+ db(0xf6); db(0x18); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x38);
+ db(0x74); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee);
+ db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x00); db(0x62); db(0x4e); db(0xae);
+ db(0xfe); db(0xec); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40);
+ db(0x43); db(0xfa); db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4);
+ db(0x21); db(0x49); db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c);
+ db(0xff); db(0x38); db(0x72); db(0x65); db(0x61); db(0x00); db(0xf5); db(0xe2);
+ db(0x4e); db(0x90); db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76);
+ db(0x20); db(0x02); db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7);
+ db(0xc0); db(0x80); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66);
+ db(0x61); db(0x00); db(0xf5); db(0xc6); db(0x4e); db(0x90); db(0x4c); db(0xdf);
+ db(0x01); db(0x03); db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75);
+ db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65);
+ db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64);
+ db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x63); db(0x6f);
+ db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65);
+ db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56);
+ db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00);
+ db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69);
+ db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64);
+ db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41);
+ db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62);
+ db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76);
+ db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a);
+ db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f);
+ db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e);
+ db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41);
+ db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f);
+ db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); db(0x61); db(0x72);
+ db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20);
+ db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); db(0x64); db(0x72);
+ db(0x69); db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45);
+ db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73);
+ db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20);
+ db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d);
+ db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55);
+ db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75);
+ db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20);
+ db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00);
+ db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72);
+ db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75);
+ db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69);
+ db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72);
+ db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c);
+ db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65);
+ db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e);
+ db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79);
+ db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73);
+ db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f);
+ db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); db(0x00); db(0x00);
+ db(0x00); db(0x00); db(0x03); db(0xf2);
 
diff --git a/gayle.c b/gayle.c
index 8e5ccffd3c695ae5d6faab4c38f90a56c0ef29fe..35fb41f1ca9b5c3f7dd7542ea330f8d62955b55d 100644 (file)
--- a/gayle.c
+++ b/gayle.c
@@ -604,7 +604,7 @@ static void ide_read_sectors (int flags)
                ide_fail ();
                return;
        }
-       gui_hd_led (ide->num, 1);
+       gui_flicker_led (LED_HD, ide->num, 1);
        nsec = get_nsec (lba48);
        get_lbachs (ide, &lba, &cyl, &head, &sec, lba48);
        if (IDE_LOG > 0)
@@ -632,7 +632,7 @@ static void ide_write_sectors (int flags)
                ide_fail ();
                return;
        }
-       gui_hd_led (ide->num, 2);
+       gui_flicker_led (LED_HD, ide->num, 2);
        nsec = get_nsec (lba48);
        get_lbachs (ide, &lba, &cyl, &head, &sec, lba48);
        if (lba * ide->blocksize >= ide->hdhfd.size) {
index caf6e3d43ae99d72f66228ad03556a5384d7dfb8..37ff641716a49fcab4b55abfdd7a5d37b5481533 100644 (file)
@@ -903,7 +903,7 @@ int hdf_write (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len)
 
 static uae_u64 cmd_readx (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len)
 {
-       gui_hd_led (hfd->unitnum, 1);
+       gui_flicker_led (LED_HD, hfd->unitnum, 1);
        hf_log3 ("cmd_read: %p %04x-%08x (%d) %08x (%d)\n",
                dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize));
        return hdf_read (hfd, dataptr, offset, len);
@@ -917,7 +917,7 @@ static uae_u64 cmd_read (struct hardfiledata *hfd, uaecptr dataptr, uae_u64 offs
 }
 static uae_u64 cmd_writex (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len)
 {
-       gui_hd_led (hfd->unitnum, 2);
+       gui_flicker_led (LED_HD, hfd->unitnum, 2);
        hf_log3 ("cmd_write: %p %04x-%08x (%d) %08x (%d)\n",
                dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize));
        return hdf_write (hfd, dataptr, offset, len);
index 0ce2f1d7b634330682ec762fef893f52ac548efa..cb74192ef769f4df01665fa66ea1c1ea6bbb59b2 100644 (file)
@@ -52,8 +52,6 @@ extern void REGPARAM3 chipmem_lput_actionreplay1 (uaecptr addr, uae_u32 l) REGPA
 
 extern void action_replay_version (void);
 
-extern void descramble_nordicpro (uae_u8*, int, int);
-
 extern int hrtmon_flag;
 
 extern void hrtmon_enter (void);
index 70e550cda2e3ecdfeba5b4175196c3c2548604bb..ed5dd8752d4ed1847a7f1fbecaeb499933718945 100644 (file)
@@ -56,6 +56,8 @@ extern int add_filesys_unitconfig (struct uae_prefs *p, int index, TCHAR *error)
 extern int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo*);
 extern int kill_filesys_unitconfig (struct uae_prefs *p, int nr);
 extern int move_filesys_unitconfig (struct uae_prefs *p, int nr, int to);
+extern TCHAR *validatedevicename (TCHAR *s);
+extern TCHAR *validatevolumename (TCHAR *s);
 
 int filesys_insert(int nr, TCHAR *volume, const TCHAR *rootdir, int readonly, int flags);
 int filesys_eject(int nr);
diff --git a/include/consolehook.h b/include/consolehook.h
new file mode 100644 (file)
index 0000000..4a5b213
--- /dev/null
@@ -0,0 +1,5 @@
+
+int consolehook_activate (void);
+void consolehook_ret (uaecptr condev, uaecptr oldbeginio);
+uaecptr consolehook_beginio (uaecptr request);
+void consolehook_config (struct uae_prefs *p);
index 24d58df0f6881f6e9bfb85ce37537c961c1001be..ceded2fd14aa845d29b5993b67079aabdccaa965 100644 (file)
@@ -100,6 +100,8 @@ extern uae_u16 INTREQR (void);
 #define VBLANK_SPRITE_NTSC 20
 #define VBLANK_HZ_PAL 50
 #define VBLANK_HZ_NTSC 60
+#define EQU_ENDLINE_PAL 9
+#define EQU_ENDLINE_NTSC 10
 
 extern int maxhpos, maxhpos_short;
 extern int maxvpos, maxvpos_max;
@@ -156,8 +158,6 @@ extern int xredcolor_s, xredcolor_b, xredcolor_m;
 extern int xgreencolor_s, xgreencolor_b, xgreencolor_m;
 extern int xbluecolor_s, xbluecolor_b, xbluecolor_m;
 
-extern int bpl_off[8];
-
 #define RES_LORES 0
 #define RES_HIRES 1
 #define RES_SUPERHIRES 2
index f6d0cef77e2093c0397c7daab389a81c3aa8d4fa..ec2dca0d02f056f7e892be9cc0ffa7f984fc9bbe 100644 (file)
@@ -16,8 +16,7 @@ extern void gui_fps (int fps, int idle);
 extern void gui_changesettings (void);
 extern void gui_lock (void);
 extern void gui_unlock (void);
-extern void gui_hd_led (int, int);
-extern void gui_cd_led (int, int);
+extern void gui_flicker_led (int, int, int);
 extern void gui_disk_image_change (int, const TCHAR *);
 extern unsigned int gui_ledstate;
 extern void gui_display (int shortcut);
@@ -28,23 +27,37 @@ extern int no_gui, quit_to_gui;
 #define LED_CD_ACTIVE2 2
 #define LED_CD_AUDIO 4
 
+#define LED_POWER 0
+#define LED_DF0 1
+#define LED_DF1 2
+#define LED_DF2 3
+#define LED_DF3 4
+#define LED_HD 5
+#define LED_CD 6
+#define LED_FPS 7
+#define LED_CPU 8
+#define LED_SND 9
+#define LED_MD 10
+#define LED_MAX 11
+
 struct gui_info
 {
-    uae_u8 drive_motor[4];          /* motor on off */
-    uae_u8 drive_track[4];          /* rw-head track */
-    uae_u8 drive_writing[4];        /* drive is writing */
-    uae_u8 drive_disabled[4];      /* drive is disabled */
-    uae_u8 powerled;                /* state of power led */
-    uae_u8 powerled_brightness;            /* 0 to 255 */
-    uae_u8 drive_side;             /* floppy side */
-    uae_u8 hd;                     /* harddrive */
-    uae_u8 cd;                     /* CD */
+    uae_u8 drive_motor[4];             /* motor on off */
+    uae_u8 drive_track[4];             /* rw-head track */
+    uae_u8 drive_writing[4];   /* drive is writing */
+    uae_u8 drive_disabled[4];  /* drive is disabled */
+    uae_u8 powerled;                   /* state of power led */
+    uae_u8 powerled_brightness;        /* 0 to 255 */
+    uae_u8 drive_side;                 /* floppy side */
+    uae_u8 hd;                                 /* harddrive */
+    uae_u8 cd;                                 /* CD */
+       uae_u8 md;                                      /* CD32 or CDTV internal storage */
     int fps, idle;
     int sndbuf, sndbuf_status;
-    TCHAR df[4][256];              /* inserted image */
-    uae_u32 crc32[4];              /* crc32 of image */
+    TCHAR df[4][256];                  /* inserted image */
+    uae_u32 crc32[4];                  /* crc32 of image */
 };
-#define NUM_LEDS (1 + 1 + 1 + 1 + 1 + 1 + 4)
+#define NUM_LEDS (LED_MAX)
 
 extern struct gui_info gui_data;
 
index 949bdcba2a2cc482c33585f33c165b2e1b4ebc97..36db61f0e75fcf5b946550d3f53f8ee0fb01bea1 100644 (file)
@@ -114,6 +114,8 @@ extern int inputdevice_translatekeycode (int keyboard, int scancode, int state);
 extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default *trans);
 extern int handle_input_event (int nr, int state, int max, int autofire);
 extern void inputdevice_do_keyboard (int code, int state);
+extern int inputdevice_iskeymapped (int keyboard, int scancode);
+extern int inputdevice_synccapslock (int, int*);
 
 extern uae_u16 potgo_value;
 extern uae_u16 POTGOR (void);
index f9c5b4f13776c4cfa2bfdd7f34f22e7e6f1bc7f9..9714e34ce8072ba328c6824e0f12b88634157931 100644 (file)
@@ -156,3 +156,5 @@ enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT, AKS_FREEZEBUTTON,
     AKS_DISKSWAPPER_NEXT,AKS_DISKSWAPPER_PREV,
     AKS_DISKSWAPPER_INSERT0,AKS_DISKSWAPPER_INSERT1,AKS_DISKSWAPPER_INSERT2,AKS_DISKSWAPPER_INSERT3,
 };
+
+extern int target_checkcapslock (int, int *);
\ No newline at end of file
index b369218cfe8d73367abbc291a978621dd092b1cf..6d5bcae75711fcd511138e791a6a3963b8879605 100644 (file)
@@ -342,86 +342,8 @@ extern uae_u8 *mapped_malloc (size_t, const TCHAR*);
 extern void mapped_free (uae_u8 *);
 extern void clearexec (void);
 extern void mapkick (void);
-extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size);
 extern void a3000_fakekick (int);
 
-#define ROMTYPE_KICK       0x000001
-#define ROMTYPE_KICKCD32    0x000002
-#define ROMTYPE_EXTCD32            0x000004
-#define ROMTYPE_EXTCDTV            0x000008
-#define ROMTYPE_A2091BOOT   0x000010
-#define ROMTYPE_A4091BOOT   0x000020
-#define ROMTYPE_AR         0x000040
-#define ROMTYPE_SUPERIV            0x000080
-#define ROMTYPE_KEY        0x000100
-#define ROMTYPE_ARCADIABIOS 0x000200
-#define ROMTYPE_ARCADIAGAME 0x000400
-#define ROMTYPE_HRTMON     0x000800
-#define ROMTYPE_NORDIC     0x001000
-#define ROMTYPE_XPOWER     0x002000
-#define ROMTYPE_CD32CART    0x004000
-#define ROMTYPE_SPECIALKICK 0x008000
-#define ROMTYPE_MASK       0x01ffff
-#define ROMTYPE_EVEN       0x020000
-#define ROMTYPE_ODD        0x040000
-#define ROMTYPE_8BIT       0x080000
-#define ROMTYPE_BYTESWAP    0x100000
-#define ROMTYPE_CD32       0x200000
-#define ROMTYPE_SCRAMBLED   0x400000
-
-struct romheader {
-       TCHAR *name;
-       int id;
-};
-
-struct romdata {
-       TCHAR *name;
-       int ver, rev;
-       int subver, subrev;
-       TCHAR *model;
-       uae_u32 size;
-       int id;
-       int cpu;
-       int cloanto;
-       int type;
-       int group;
-       int title;
-       TCHAR *partnumber;
-       uae_u32 crc32;
-       uae_u32 sha1[5];
-       TCHAR *configname;
-};
-
-struct romlist {
-       TCHAR *path;
-       struct romdata *rd;
-};
-
-extern struct romdata *getromdatabypath (TCHAR *path);
-extern struct romdata *getromdatabycrc (uae_u32 crc32);
-extern struct romdata *getromdatabydata (uae_u8 *rom, int size);
-extern struct romdata *getromdatabyid (int id);
-extern struct romdata *getromdatabyidgroup (int id, int group, int subitem);
-extern struct romdata *getromdatabyzfile (struct zfile *f);
-extern struct romlist **getarcadiaroms (void);
-extern struct romdata *getarcadiarombyname (TCHAR *name);
-extern struct romlist **getromlistbyident (int ver, int rev, int subver, int subrev, TCHAR *model, int all);
-extern void getromname (struct romdata*, TCHAR*);
-extern struct romdata *getromdatabyname (TCHAR*);
-extern struct romlist *getromlistbyids (int *ids);
-extern void romwarning(int *ids);
-extern struct romlist *getromlistbyromdata (struct romdata *rd);
-extern void romlist_add (TCHAR *path, struct romdata *rd);
-extern TCHAR *romlist_get (struct romdata *rd);
-extern void romlist_clear (void);
-extern struct zfile *read_rom (struct romdata **rd);
-extern struct zfile *read_rom_name (const TCHAR *filename);
-
-extern int load_keyring (struct uae_prefs *p, TCHAR *path);
-extern uae_u8 *target_load_keyfile (struct uae_prefs *p, TCHAR *path, int *size, TCHAR *name);
-extern void free_keyring (void);
-extern int get_keyring (void);
-
 extern uaecptr strcpyha_safe (uaecptr dst, const uae_char *src);
 extern uae_char *strcpyah_safe (uae_u8 *dst, uaecptr src, int maxsize);
 extern void memcpyha_safe (uaecptr dst, const uae_u8 *src, int size);
index 23d7600af205ff7fb6656699e496874810ba644c..a993061655caed8e9ea042b7893d79c50b5000ac 100644 (file)
@@ -9,7 +9,7 @@
 
 #define UAEMAJOR 2
 #define UAEMINOR 0
-#define UAESUBREV 1
+#define UAESUBREV 2
 
 typedef enum { KBD_LANG_US, KBD_LANG_DK, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang;
 
diff --git a/include/rommgr.h b/include/rommgr.h
new file mode 100644 (file)
index 0000000..ff7a314
--- /dev/null
@@ -0,0 +1,89 @@
+extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size);
+
+#define ROMTYPE_KICK       0x000001
+#define ROMTYPE_KICKCD32    0x000002
+#define ROMTYPE_EXTCD32            0x000004
+#define ROMTYPE_EXTCDTV            0x000008
+#define ROMTYPE_A2091BOOT   0x000010
+#define ROMTYPE_A4091BOOT   0x000020
+#define ROMTYPE_AR         0x000040
+#define ROMTYPE_SUPERIV            0x000080
+#define ROMTYPE_KEY        0x000100
+#define ROMTYPE_ARCADIABIOS 0x000200
+#define ROMTYPE_ARCADIAGAME 0x000400
+#define ROMTYPE_HRTMON     0x000800
+#define ROMTYPE_NORDIC     0x001000
+#define ROMTYPE_XPOWER     0x002000
+#define ROMTYPE_CD32CART    0x004000
+#define ROMTYPE_SPECIALKICK 0x008000
+#define ROMTYPE_MASK       0x01ffff
+#define ROMTYPE_EVEN       0x020000
+#define ROMTYPE_ODD        0x040000
+#define ROMTYPE_8BIT       0x080000
+#define ROMTYPE_BYTESWAP    0x100000
+#define ROMTYPE_CD32       0x200000
+#define ROMTYPE_SCRAMBLED   0x400000
+
+struct romheader {
+       TCHAR *name;
+       int id;
+};
+
+struct romdata {
+       TCHAR *name;
+       int ver, rev;
+       int subver, subrev;
+       TCHAR *model;
+       uae_u32 size;
+       int id;
+       int cpu;
+       int cloanto;
+       int type;
+       int group;
+       int title;
+       TCHAR *partnumber;
+       uae_u32 crc32;
+       uae_u32 sha1[5];
+       TCHAR *configname;
+};
+
+struct romlist {
+       TCHAR *path;
+       struct romdata *rd;
+};
+
+extern struct romdata *getromdatabypath (TCHAR *path);
+extern struct romdata *getromdatabycrc (uae_u32 crc32);
+extern struct romdata *getromdatabydata (uae_u8 *rom, int size);
+extern struct romdata *getromdatabyid (int id);
+extern struct romdata *getromdatabyidgroup (int id, int group, int subitem);
+extern struct romdata *getromdatabyzfile (struct zfile *f);
+extern struct romlist **getarcadiaroms (void);
+extern struct romdata *getarcadiarombyname (TCHAR *name);
+extern struct romlist **getromlistbyident (int ver, int rev, int subver, int subrev, TCHAR *model, int all);
+extern void getromname (struct romdata*, TCHAR*);
+extern struct romdata *getromdatabyname (TCHAR*);
+extern struct romlist *getromlistbyids (int *ids);
+extern void romwarning(int *ids);
+extern struct romlist *getromlistbyromdata (struct romdata *rd);
+extern void romlist_add (TCHAR *path, struct romdata *rd);
+extern TCHAR *romlist_get (struct romdata *rd);
+extern void romlist_clear (void);
+extern struct zfile *read_rom (struct romdata **rd);
+extern struct zfile *read_rom_name (const TCHAR *filename);
+
+extern int load_keyring (struct uae_prefs *p, TCHAR *path);
+extern uae_u8 *target_load_keyfile (struct uae_prefs *p, TCHAR *path, int *size, TCHAR *name);
+extern void free_keyring (void);
+extern int get_keyring (void);
+extern void kickstart_fix_checksum (uae_u8 *mem, int size);
+extern void descramble_nordicpro (uae_u8*, int, int);
+extern int kickstart_checksum (uae_u8 *mem, int size);
+extern int decode_rom (uae_u8 *mem, int size, int mode, int real_size);
+extern struct zfile *rom_fopen (const TCHAR *name, const TCHAR *mode, int mask);
+extern struct zfile *read_rom_name_guess (const TCHAR *filename);
+extern void addkeydir (const TCHAR *path);
+extern int romlist_count (void);
+extern struct romlist *romlist_getit (void);
+extern int configure_rom (struct uae_prefs *p, int *rom, int msg);
+
index cd3a39d495ae94c93c5804f7f5bed3503c337e53..30bfc09208af44d31af8fec3bb753a1d3ee7d33b 100644 (file)
@@ -235,10 +235,10 @@ extern char *ua (const TCHAR*);
 extern TCHAR *aucp (const char *s, unsigned int cp);
 extern char *uacp (const TCHAR *s, unsigned int cp);
 extern TCHAR *au_fs (const char*);
-extern char *ua_fs (const TCHAR*);
+extern char *ua_fs (const TCHAR*, int);
 extern char *ua_copy (char *dst, int maxlen, const TCHAR *src);
 extern TCHAR *au_copy (TCHAR *dst, int maxlen, const char *src);
-extern char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src);
+extern char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src, int defchar);
 extern TCHAR *au_fs_copy (TCHAR *dst, int maxlen, const char *src);
 extern char *uutf8 (const TCHAR *s);
 extern TCHAR *utf8u (const char *s);
@@ -477,6 +477,7 @@ extern void console_out (const TCHAR *);
 extern void console_out_f (const TCHAR *, ...);
 extern void console_flush (void);
 extern int console_get (TCHAR *, int);
+extern TCHAR console_getch (void);
 extern void f_out (void *, const TCHAR *, ...);
 extern TCHAR* buf_out (TCHAR *buffer, int *bufsize, const TCHAR *format, ...);
 extern void gui_message (const TCHAR *,...);
index cf2fd6bd895ae7ed89dd140f1e8330c1c6674513..bfb49238d064058d4d72c633383366f2ab7380eb 100644 (file)
@@ -27,6 +27,7 @@ extern void target_run (void);
 extern void target_quit (void);
 
 extern int quit_program;
+extern int console_emulation;
 
 extern TCHAR warning_buffer[256];
 extern TCHAR start_path_data[];
index ea652e4dbfc7f87ce85a51e4d5a9919e2ed92271..367b2b3f14da9a45a36eceea21c045f9a9e64895 100644 (file)
@@ -129,6 +129,7 @@ struct uae_input_device2 {
 
 static struct uae_input_device2 joysticks2[MAX_INPUT_DEVICES];
 static struct uae_input_device2 mice2[MAX_INPUT_DEVICES];
+static uae_u8 scancodeused[MAX_INPUT_DEVICES][256];
 
 static int input_acquired;
 static int testmode;
@@ -3040,6 +3041,7 @@ static void scanevents (struct uae_prefs *p)
                        }
                }
        }
+       memset (scancodeused, 0, sizeof scancodeused);
        for (i = 0; i < MAX_INPUT_DEVICES; i++) {
                use_keyboards[i] = 0;
                if (keyboards[i].enabled && i < idev[IDTYPE_KEYBOARD].get_num()) {
@@ -3052,6 +3054,8 @@ static void scanevents (struct uae_prefs *p)
                                        isparport (ei);
                                        ismouse (ei);
                                        isdigitalbutton (ei);
+                                       if (ei > 0)
+                                               scancodeused[i][keyboards[i].extra[j][k]] = 1;
                                }
                                j++;
                        }
@@ -3432,13 +3436,16 @@ static void set_kbr_default (struct uae_prefs *p, int index, int num)
                                while (trans[l].scancode >= 0) {
                                        if (kbr->extra[i][0] == trans[l].scancode) {
                                                for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {
-                                                       if (kbr->eventid[i][k] == 0) break;
+                                                       if (kbr->eventid[i][k] == 0)
+                                                               break;
                                                }
                                                if (k == MAX_INPUT_SUB_EVENT) {
                                                        write_log (L"corrupt default keyboard mappings\n");
                                                        return;
                                                }
                                                kbr->eventid[i][k] = trans[l].event;
+                                               if (trans[l].event == INPUTEVENT_KEY_CAPS_LOCK)
+                                                       kbr->flags[i][k] |= ID_FLAG_TOGGLE;
                                                break;
                                        }
                                        l++;
@@ -3477,6 +3484,38 @@ void inputdevice_setkeytranslation (struct uae_input_device_kbr_default *trans)
        keyboard_default = trans;
 }
 
+int inputdevice_iskeymapped (int keyboard, int scancode)
+{
+       struct uae_input_device *na = &keyboards[keyboard];
+
+       if (!keyboards || scancode < 0)
+               return 0;
+       return scancodeused[keyboard][scancode];
+}
+
+int inputdevice_synccapslock (int oldcaps, int *capstable)
+{
+       struct uae_input_device *na = &keyboards[0];
+       int j, i;
+       
+       if (!keyboards)
+               return -1;
+       for (j = 0; na->extra[j][0]; j++) {
+               if (na->extra[j][0] == INPUTEVENT_KEY_CAPS_LOCK) {
+                       for (i = 0; capstable[i]; i += 2) {
+                               if (na->extra[j][0] == capstable[i]) {
+                                       if (oldcaps != capstable[i + 1]) {
+                                               oldcaps = capstable[i + 1];
+                                               inputdevice_translatekeycode (0, capstable[i], oldcaps ? -1 : 0);
+                                       }
+                                       return i;
+                               }
+                       }
+               }
+       }
+       return -1;
+}
+
 static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state)
 {
        struct uae_input_device *na = &keyboards[keyboard];
@@ -3494,6 +3533,21 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state
                                int evt = na->eventid[j][sublevdir[state == 0 ? 1 : 0][k]];
                                int toggled;
 
+                               // if evt == caps and scan == caps: sync with native caps led
+                               if (evt == INPUTEVENT_KEY_CAPS_LOCK) {
+                                       int v;
+                                       if (state < 0)
+                                               state = 1;
+                                       v = target_checkcapslock (scancode, &state);
+                                       if (v < 0)
+                                               continue;
+                                       if (v > 0)
+                                               toggle = 0;
+                               } else if (state < 0) {
+                                       // it was caps lock resync, ignore, not mapped to caps
+                                       continue;
+                               }
+
                                if (toggle) {
                                        if (!state)
                                                continue;
@@ -3543,7 +3597,7 @@ int inputdevice_translatekeycode (int keyboard, int scancode, int state)
 {
        if (inputdevice_translatekeycode_2 (keyboard, scancode, state))
                return 1;
-       if (currprefs.mmkeyboard)
+       if (currprefs.mmkeyboard && scancode > 0)
                sendmmcodes (scancode, state);
        return 0;
 }
diff --git a/main.c b/main.c
index c5267e4679a906669c8afe9cef69fcffea91b1aa..ca850bd67417b756c1c60dca0f98692b706f9b58 100644 (file)
--- a/main.c
+++ b/main.c
@@ -51,6 +51,7 @@
 #include "gfxfilter.h"
 #include "uaeresource.h"
 #include "dongle.h"
+#include "consolehook.h"
 
 #ifdef USE_SDL
 #include "SDL.h"
@@ -63,6 +64,7 @@ struct uae_prefs currprefs, changed_prefs;
 int no_gui = 0, quit_to_gui = 0;
 int cloanto_rom = 0;
 int kickstart_rom = 1;
+int console_emulation = 0;
 
 struct gui_info gui_data;
 
@@ -116,6 +118,8 @@ void fixup_prefs_dimensions (struct uae_prefs *prefs)
 
 void fixup_cpu (struct uae_prefs *p)
 {
+       if (p->cpu_frequency == 1000000)
+               p->cpu_frequency = 0;
        switch (p->cpu_model)
        {
        case 68000:
@@ -384,6 +388,7 @@ void fixup_prefs (struct uae_prefs *p)
        if (p->cpu_cycle_exact) {
                p->gfx_framerate = 1;
                p->cachesize = 0;
+               p->m68k_speed = 0;
        }
 #endif
        if (p->maprom && !p->address_space_24)
@@ -729,6 +734,11 @@ static int real_main2 (int argc, TCHAR **argv)
                        return -1;
                }
 
+               if (console_emulation) {
+                       consolehook_config (&currprefs);
+                       fixup_prefs (&currprefs);
+               }
+
                if (! setup_sound ()) {
                        write_log (L"Sound driver unavailable: Sound output disabled\n");
                        currprefs.produce_sound = 0;
index 2d0434f4b8047c445f195e7ed9b19ff38310695e..217a6d783c611a1c468fa9334125f1ac9f4e1347 100644 (file)
--- a/memory.c
+++ b/memory.c
@@ -12,6 +12,7 @@
 #include "options.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "ersatz.h"
 #include "zfile.h"
 #include "custom.h"
@@ -82,958 +83,6 @@ static int need_hardreset;
 /* The address space setting used during the last reset.  */
 static int last_address_space_24;
 
-static struct romlist *rl;
-static int romlist_cnt;
-
-TCHAR *romlist_get (struct romdata *rd)
-{
-       int i;
-
-       if (!rd)
-               return 0;
-       for (i = 0; i < romlist_cnt; i++) {
-               if (rl[i].rd->id == rd->id)
-                       return rl[i].path;
-       }
-       return 0;
-}
-
-static struct romlist *romlist_getrl (struct romdata *rd)
-{
-       int i;
-
-       if (!rd)
-               return 0;
-       for (i = 0; i < romlist_cnt; i++) {
-               if (rl[i].rd == rd)
-                       return &rl[i];
-       }
-       return 0;
-}
-
-static void romlist_cleanup (void);
-void romlist_add (TCHAR *path, struct romdata *rd)
-{
-       struct romlist *rl2;
-
-       if (path == NULL || rd == NULL) {
-               romlist_cleanup ();
-               return;
-       }
-       romlist_cnt++;
-       rl = realloc (rl, sizeof (struct romlist) * romlist_cnt);
-       rl2 = rl + romlist_cnt - 1;
-       rl2->path = my_strdup (path);
-       rl2->rd = rd;
-}
-
-
-struct romdata *getromdatabypath(TCHAR *path)
-{
-       int i;
-       for (i = 0; i < romlist_cnt; i++) {
-               struct romdata *rd = rl[i].rd;
-               if (rd->configname && path[0] == ':') {
-                       if (!_tcscmp(path + 1, rd->configname))
-                               return rd;
-               }
-               if (!_tcscmp(rl[i].path, path))
-                       return rl[i].rd;
-       }
-       return NULL;
-}
-
-#define NEXT_ROM_ID 73
-
-static struct romheader romheaders[] = {
-       { L"Freezer Cartridges", 1 },
-       { L"Arcadia Games", 2 },
-       { NULL, 0 }
-};
-
-#define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \
-{ L"X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e },
-#define ALTROMPN(id,grp,num,size,flags,pn,crc32,a,b,c,d,e) \
-{ L"X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, pn, crc32, a, b, c, d, e },
-
-static struct romdata roms[] = {
-       { L"Cloanto Amiga Forever ROM key", 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, NULL,
-       0x869ae1b1, 0x801bbab3,0x2e3d3738,0x6dd1636d,0x4f1d6fa7,0xe21d5874 },
-       { L"Cloanto Amiga Forever 2006 ROM key", 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, NULL,
-       0xb01c4b56, 0xbba8e5cd,0x118b8d92,0xafed5693,0x5eeb9770,0x2a662d8f },
-
-       { L"KS ROM v1.0 (A1000)(NTSC)", 1, 0, 1, 0, L"A1000\0", 262144, 1, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x299790ff, 0x00C15406,0xBEB4B8AB,0x1A16AA66,0xC05860E1,0xA7C1AD79 },
-       { L"KS ROM v1.1 (A1000)(NTSC)", 1, 1, 31, 34, L"A1000\0", 262144, 2, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xd060572a, 0x4192C505,0xD130F446,0xB2ADA6BD,0xC91DAE73,0x0ACAFB4C},
-       { L"KS ROM v1.1 (A1000)(PAL)", 1, 1, 31, 34, L"A1000\0", 262144, 3, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xec86dae2, 0x16DF8B5F,0xD524C5A1,0xC7584B24,0x57AC15AF,0xF9E3AD6D },
-       { L"KS ROM v1.2 (A1000)", 1, 2, 33, 166, L"A1000\0", 262144, 4, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x9ed783d0, 0x6A7BFB5D,0xBD6B8F17,0x9F03DA84,0xD8D95282,0x67B6273B },
-       { L"KS ROM v1.2 (A500,A1000,A2000)", 1, 2, 33, 180, L"A500\0A1000\0A2000\0", 262144, 5, 0, 0, ROMTYPE_KICK, 0, 0, L"315093-01",
-       0xa6ce1636, 0x11F9E62C,0xF299F721,0x84835B7B,0x2A70A163,0x33FC0D88 },
-       { L"KS ROM v1.3 (A500,A1000,A2000)", 1, 3, 34, 5, L"A500\0A1000\0A2000\0", 262144, 6, 0, 0, ROMTYPE_KICK, 0, 0, L"315093-02",
-       0xc4f0f55f, 0x891E9A54,0x7772FE0C,0x6C19B610,0xBAF8BC4E,0xA7FCB785 },
-       { L"KS ROM v1.3 (A3000)(SK)", 1, 3, 34, 5, L"A3000\0", 262144, 32, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xe0f37258, 0xC39BD909,0x4D4E5F4E,0x28C1411F,0x30869504,0x06062E87 },
-       { L"KS ROM v1.4 (A3000)", 1, 4, 36, 16, L"A3000\0", 524288, 59, 3, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xbc0ec13f, 0xF76316BF,0x36DFF14B,0x20FA349E,0xD02E4B11,0xDD932B07 },
-       ALTROMPN(59, 1, 1, 262144, ROMTYPE_EVEN, L"390629-02", 0x58327536,0xd1713d7f,0x31474a59,0x48e6d488,0xe3368606,0x1cf3d1e2)
-       ALTROMPN(59, 1, 2, 262144, ROMTYPE_ODD , L"390630-02", 0xfe2f7fb9,0xc05c9c52,0xd014c66f,0x9019152b,0x3f2a2adc,0x2c678794)
-       { L"KS ROM v2.04 (A500+)", 2, 4, 37, 175, L"A500+\0", 524288, 7, 0, 0, ROMTYPE_KICK, 0, 0, L"390979-01",
-       0xc3bdb240, 0xC5839F5C,0xB98A7A89,0x47065C3E,0xD2F14F5F,0x42E334A1 },
-       { L"KS ROM v2.05 (A600)", 2, 5, 37, 299, L"A600\0", 524288, 8, 0, 0, ROMTYPE_KICK, 0, 0, L"391388-01",
-       0x83028fb5, 0x87508DE8,0x34DC7EB4,0x7359CEDE,0x72D2E3C8,0xA2E5D8DB },
-       { L"KS ROM v2.05 (A600HD)", 2, 5, 37, 300, L"A600HD\0A600\0", 524288, 9, 0, 0, ROMTYPE_KICK, 0, 0, L"391304-01",
-       0x64466c2a, 0xF72D8914,0x8DAC39C6,0x96E30B10,0x859EBC85,0x9226637B },
-       { L"KS ROM v2.05 (A600HD)", 2, 5, 37, 350, L"A600HD\0A600\0", 524288, 10, 0, 0, ROMTYPE_KICK, 0, 0, L"391304-02",
-       0x43b0df7b, 0x02843C42,0x53BBD29A,0xBA535B0A,0xA3BD9A85,0x034ECDE4 },
-       { L"KS ROM v2.04 (A3000)", 2, 4, 37, 175, L"A3000\0", 524288, 71, 3, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x234a7233, 0xd82ebb59,0xafc53540,0xddf2d718,0x7ecf239b,0x7ea91590 },
-       ALTROMPN(71, 1, 1, 262144, ROMTYPE_EVEN, L"390629-03", 0x7db1332b,0x48f14b31,0x279da675,0x7848df6f,0xeb531881,0x8f8f576c)
-       ALTROMPN(71, 1, 2, 262144, ROMTYPE_ODD , L"390630-03", 0xa245dbdf,0x83bab8e9,0x5d378b55,0xb0c6ae65,0x61385a96,0xf638598f)
-
-       { L"KS ROM v3.0 (A1200)", 3, 0, 39, 106, L"A1200\0", 524288, 11, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x6c9b07d2, 0x70033828,0x182FFFC7,0xED106E53,0x73A8B89D,0xDA76FAA5 },
-       ALTROMPN(11, 1, 1, 262144, ROMTYPE_EVEN, L"391523-01", 0xc742a412,0x999eb81c,0x65dfd07a,0x71ee1931,0x5d99c7eb,0x858ab186)
-       ALTROMPN(11, 1, 2, 262144, ROMTYPE_ODD , L"391524-01", 0xd55c6ec6,0x3341108d,0x3a402882,0xb5ef9d3b,0x242cbf3c,0x8ab1a3e9)
-       { L"KS ROM v3.0 (A4000)", 3, 0, 39, 106, L"A4000\0", 524288, 12, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x9e6ac152, 0xF0B4E9E2,0x9E12218C,0x2D5BD702,0x0E4E7852,0x97D91FD7 },
-       ALTROMPN(12, 1, 1, 262144, ROMTYPE_EVEN, L"391513-02", 0x36f64dd0,0x196e9f3f,0x9cad934e,0x181c07da,0x33083b1f,0x0a3c702f)
-       ALTROMPN(12, 1, 2, 262144, ROMTYPE_ODD , L"391514-02", 0x17266a55,0x42fbed34,0x53d1f11c,0xcbde89a9,0x826f2d11,0x75cca5cc)
-       { L"KS ROM v3.1 (A4000)", 3, 1, 40, 70, L"A4000\0", 524288, 13, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x2b4566f1, 0x81c631dd,0x096bbb31,0xd2af9029,0x9c76b774,0xdb74076c },
-       ALTROM(13, 1, 1, 262144, ROMTYPE_EVEN, 0xf9cbecc9,0x138d8cb4,0x3b8312fe,0x16d69070,0xde607469,0xb3d4078e)
-       ALTROM(13, 1, 2, 262144, ROMTYPE_ODD , 0xf8248355,0xc2379547,0x9fae3910,0xc185512c,0xa268b82f,0x1ae4fe05)
-       { L"KS ROM v3.1 (A500,A600,A2000)", 3, 1, 40, 63, L"A500\0A600\0A2000\0", 524288, 14, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xfc24ae0d, 0x3B7F1493,0xB27E2128,0x30F989F2,0x6CA76C02,0x049F09CA },
-       { L"KS ROM v3.1 (A1200)", 3, 1, 40, 68, L"A1200\0", 524288, 15, 1, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x1483a091, 0xE2154572,0x3FE8374E,0x91342617,0x604F1B3D,0x703094F1 },
-       ALTROMPN(15, 1, 1, 262144, ROMTYPE_EVEN, L"391773-01", 0x08dbf275,0xb8800f5f,0x90929810,0x9ea69690,0xb1b8523f,0xa22ddb37)
-       ALTROMPN(15, 1, 2, 262144, ROMTYPE_ODD , L"391774-01", 0x16c07bf8,0x90e331be,0x1970b0e5,0x3f53a9b0,0x390b51b5,0x9b3869c2)
-       { L"KS ROM v3.1 (A3000)", 3, 1, 40, 68, L"A3000\0", 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xefb239cc, 0xF8E210D7,0x2B4C4853,0xE0C9B85D,0x223BA20E,0x3D1B36EE },
-       ALTROM(61, 1, 1, 262144, ROMTYPE_EVEN, 0x286b9a0d,0x6763a225,0x8ec493f7,0x408cf663,0x110dae9a,0x17803ad1)
-       ALTROM(61, 1, 2, 262144, ROMTYPE_ODD , 0x0b8cde6a,0x5f02e97b,0x48ebbba8,0x7d516a56,0xb0400c6f,0xc3434d8d)
-       { L"KS ROM v3.1 (A4000)(Cloanto)", 3, 1, 40, 68, L"A4000\0", 524288, 31, 2 | 4, 1, ROMTYPE_KICK, 0, 0, NULL,
-       0x43b6dd22, 0xC3C48116,0x0866E60D,0x085E436A,0x24DB3617,0xFF60B5F9 },
-       { L"KS ROM v3.1 (A4000)", 3, 1, 40, 68, L"A4000\0", 524288, 16, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0xd6bae334, 0x5FE04842,0xD04A4897,0x20F0F4BB,0x0E469481,0x99406F49 },
-       ALTROM(16, 1, 1, 262144, ROMTYPE_EVEN, 0xb2af34f8,0x24e52b5e,0xfc020495,0x17387ab7,0xb1a1475f,0xc540350e)
-       ALTROM(16, 1, 2, 262144, ROMTYPE_ODD , 0xe65636a3,0x313c7cbd,0xa5779e56,0xf19a41d3,0x4e760f51,0x7626d882)
-       { L"KS ROM v3.1 (A4000T)", 3, 1, 40, 70, L"A4000T\0", 524288, 17, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x75932c3a, 0xB0EC8B84,0xD6768321,0xE01209F1,0x1E6248F2,0xF5281A21 },
-       ALTROMPN(17, 1, 1, 262144, ROMTYPE_EVEN, L"391657-01", 0x0ca94f70,0xb3806eda,0xcb3362fc,0x16a154ce,0x1eeec5bf,0x5bc24789)
-       ALTROMPN(17, 1, 2, 262144, ROMTYPE_ODD , L"391658-01", 0xdfe03120,0xcd7a706c,0x431b04d8,0x7814d3a2,0xd8b39710,0x0cf44c0c)
-       { L"KS ROM v3.X (A4000)(Cloanto)", 3, 10, 45, 57, L"A4000\0", 524288, 46, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x3ac99edc, 0x3cbfc9e1,0xfe396360,0x157bd161,0xde74fc90,0x1abee7ec },
-
-       { L"CD32 KS ROM v3.1", 3, 1, 40, 60, L"CD32\0", 524288, 18, 1, 0, ROMTYPE_KICKCD32, 0, 0, NULL,
-       0x1e62d4a5, 0x3525BE88,0x87F79B59,0x29E017B4,0x2380A79E,0xDFEE542D },
-       { L"CD32 extended ROM", 3, 1, 40, 60, L"CD32\0", 524288, 19, 1, 0, ROMTYPE_EXTCD32, 0, 0, NULL,
-       0x87746be2, 0x5BEF3D62,0x8CE59CC0,0x2A66E6E4,0xAE0DA48F,0x60E78F7F },
-
-       /* plain CD32 rom */
-       { L"CD32 ROM (KS + extended)", 3, 1, 40, 60, L"CD32\0", 2 * 524288, 64, 1, 0, ROMTYPE_KICKCD32 | ROMTYPE_EXTCD32 | ROMTYPE_CD32, 0, 0, NULL,
-       0xf5d4f3c8, 0x9fa14825,0xc40a2475,0xa2eba5cf,0x325bd483,0xc447e7c1 },
-       /* real CD32 rom dump 391640-03 */
-       ALTROMPN(64, 1, 1, 2 * 524288, ROMTYPE_CD32, L"391640-03", 0xa4fbc94a, 0x816ce6c5,0x07787585,0x0c7d4345,0x2230a9ba,0x3a2902db )
-
-       { L"CD32 MPEG Cartridge ROM", 3, 1, 40, 30, L"CD32FMV\0", 262144, 23, 1, 0, ROMTYPE_CD32CART, 0, 0, NULL,
-       0xc35c37bf, 0x03ca81c7,0xa7b259cf,0x64bc9582,0x863eca0f,0x6529f435 },
-
-       { L"CDTV extended ROM v1.00", 1, 0, 1, 0, L"CDTV\0", 262144, 20, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL,
-       0x42baa124, 0x7BA40FFA,0x17E500ED,0x9FED041F,0x3424BD81,0xD9C907BE },
-       ALTROMPN(20, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, L"252606-01", 0x791cb14b,0x277a1778,0x92449635,0x3ffe56be,0x68063d2a,0x334360e4)
-       ALTROMPN(20, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, L"252607-01", 0xaccbbc2e,0x41b06d16,0x79c6e693,0x3c3378b7,0x626025f7,0x641ebc5c)
-       { L"CDTV extended ROM v2.07", 2, 7, 2, 7, L"CDTV\0", 262144, 22, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL,
-       0xceae68d2, 0x5BC114BB,0xA29F60A6,0x14A31174,0x5B3E2464,0xBFA06846 },
-       ALTROM(22, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x36d73cb8,0x9574e546,0x4b390697,0xf28f9a43,0x4e604e5e,0xf5e5490a)
-       ALTROM(22, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x6e84dce7,0x01a0679e,0x895a1a0f,0x559c7253,0xf539606b,0xd447b54f)
-       { L"CDTV/A570 extended ROM v2.30", 2, 30, 2, 30, L"CDTV\0", 262144, 21, 0, 0, ROMTYPE_EXTCDTV, 0, 0, L"391298-01",
-       0x30b54232, 0xED7E461D,0x1FFF3CDA,0x321631AE,0x42B80E3C,0xD4FA5EBB },
-       ALTROM(21, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x48e4d74f,0x54946054,0x2269e410,0x36018402,0xe1f6b855,0xfd89092b)
-       ALTROM(21, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x8a54f362,0x03df800f,0x032046fd,0x892f6e7e,0xec08b76d,0x33981e8c)
-
-       { L"A1000 bootstrap ROM", 0, 0, 0, 0, L"A1000\0", 65536, 24, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
-       0x0b1ad2d0, 0xBA93B8B8,0x5CA0D83A,0x68225CC3,0x3B95050D,0x72D2FDD7 },
-       ALTROM(24, 1, 1, 8192,           0, 0x62f11c04, 0xC87F9FAD,0xA4EE4E69,0xF3CCA0C3,0x6193BE82,0x2B9F5FE6)
-       ALTROMPN(24, 2, 1, 4096, ROMTYPE_EVEN | ROMTYPE_8BIT, L"252179-01", 0x42553bc4,0x8855a97f,0x7a44e3f6,0x2d1c88d9,0x38fee1f4,0xc606af5b)
-       ALTROMPN(24, 2, 2, 4096, ROMTYPE_ODD  | ROMTYPE_8BIT, L"252180-01", 0x8e5b9a37,0xd10f1564,0xb99f5ffe,0x108fa042,0x362e877f,0x569de2c3)
-
-       { L"The Diagnostic 2.0 (Logica)", 2, 0, 2, 0, L"LOGICA\0", 524288, 72, 0, 0, ROMTYPE_KICK | ROMTYPE_SPECIALKICK, 0, 0, NULL,
-       0x8484f426, 0xba10d161,0x66b2e2d6,0x177c979c,0x99edf846,0x2b21651e },
-
-       { L"Freezer: Action Replay Mk I v1.00", 1, 0, 1, 0, L"AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0x2d921771, 0x1EAD9DDA,0x2DAD2914,0x6441F5EF,0x72183750,0x22E01248 },
-       ALTROM(52, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x82d6eb87, 0x7c9bac11,0x28666017,0xeee6f019,0x63fb3890,0x7fbea355)
-       ALTROM(52, 1, 2, 32768, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x40ae490c, 0x81d8e432,0x01b73fd9,0x2e204ebd,0x68af8602,0xb62ce397)
-       { L"Freezer: Action Replay Mk I v1.50", 1, 50, 1, 50, L"AR\0", 65536, 25, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0xd4ce0675, 0x843B433B,0x2C56640E,0x045D5FDC,0x854DC6B1,0xA4964E7C },
-       ALTROM(25, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x7fbd6de2, 0xb5f71a5c,0x09d65ecc,0xa8a3bc93,0x93558461,0xca190228)
-       ALTROM(25, 1, 2, 32768, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x43018069, 0xad8ff242,0xb2cbf125,0x1fc53a73,0x581cf57a,0xb69cee00)
-       { L"Freezer: Action Replay Mk II v2.05", 2, 5, 2, 5, L"AR\0", 131072, 26, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0x1287301f, 0xF6601DE8,0x888F0050,0x72BF562B,0x9F533BBC,0xAF1B0074 },
-       { L"Freezer: Action Replay Mk II v2.12", 2, 12, 2, 12, L"AR\0", 131072, 27, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0x804d0361, 0x3194A07A,0x0A82D8B5,0xF2B6AEFA,0x3CA581D6,0x8BA8762B },
-       { L"Freezer: Action Replay Mk II v2.14", 2, 14, 2, 14, L"AR\0", 131072, 28, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0x49650e4f, 0x255D6DF6,0x3A4EAB0A,0x838EB1A1,0x6A267B09,0x59DFF634 },
-       { L"Freezer: Action Replay Mk III v3.09", 3, 9, 3, 9, L"AR\0", 262144, 29, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0x0ed9b5aa, 0x0FF3170A,0xBBF0CA64,0xC9DD93D6,0xEC0C7A01,0xB5436824 },
-       ALTROM(29, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2b84519f, 0x7841873b,0xf009d834,0x1dfa2794,0xb3751bac,0xf86adcc8)
-       ALTROM(29, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x1d35bd56, 0x6464be16,0x26b51949,0x9e76e4e3,0x409e8016,0x515d48b6)
-       { L"Freezer: Action Replay Mk III v3.17", 3, 17, 3, 17, L"AR\0", 262144, 30, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0xc8a16406, 0x5D4987C2,0xE3FFEA8B,0x1B02E314,0x30EF190F,0x2DB76542 },
-       { L"Freezer: Action Replay 1200", 0, 0, 0, 0, L"AR\0", 262144, 47, 0, 0, ROMTYPE_AR, 0, 1, NULL,
-       0x8d760101, 0x0F6AB834,0x2810094A,0xC0642F62,0xBA42F78B,0xC0B07E6A },
-
-       { L"Freezer: Action Cartridge Super IV Professional", 0, 0, 0, 0, L"SUPERIV\0", 0, 62, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL,
-       0xffffffff, 0, 0, 0, 0, 0, L"SuperIV" },
-       { L"Freezer: Action Cart. Super IV Pro (+ROM v4.3)", 4, 3, 4, 3, L"SUPERIV\0", 170368, 60, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL,
-       0xe668a0be, 0x633A6E65,0xA93580B8,0xDDB0BE9C,0x9A64D4A1,0x7D4B4801 },
-       { L"Freezer: X-Power Professional 500 v1.2", 1, 2, 1, 2, L"XPOWER\0", 131072, 65, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL,
-       0x9e70c231, 0xa2977a1c,0x41a8ca7d,0x4af4a168,0x726da542,0x179d5963 },
-       ALTROM(65, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf98742e4,0xe8e683ba,0xd8b38d1f,0x79f3ad83,0xa9e67c6f,0xa91dc96c)
-       ALTROM(65, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdfb9984b,0x8d6bdd49,0x469ec8e2,0x0143fbb3,0x72e92500,0x99f07910)
-       { L"Freezer: X-Power Professional 500 v1.3", 1, 2, 1, 2, L"XPOWER\0", 131072, 68, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL,
-       0x31e057f0, 0x84650266,0x465d1859,0x7fd71dee,0x00775930,0xb7e450ee },
-       ALTROM(68, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x0b2ce0c7,0x45ad5456,0x89192404,0x956f47ce,0xf66a5274,0x57ace33b)
-       ALTROM(68, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x34580c35,0x8ad42566,0x7364f238,0x978f4381,0x08f8d5ec,0x470e72ea)
-       { L"Freezer: Nordic Power v1.5", 1, 5, 1, 5, L"NPOWER\0", 65536, 69, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL,
-       0x83b4b21c, 0xc56ced25,0x506a5aab,0x3fa13813,0x4fc9e5ae,0x0f9d3709 },
-       ALTROM(69, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdd207174,0xae67652d,0x64f5db20,0x0f4b2110,0xee59567f,0xfbd90a1b)
-       ALTROM(69, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x8f93d85d,0x73c62d21,0x40c0c092,0x6315b702,0xdd5d0f05,0x3dad7fab)
-       { L"Freezer: Nordic Power v2.0", 2, 0, 2, 0, L"NPOWER\0", 65536, 67, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL,
-       0xa4db2906, 0x0aec68f7,0x25470c89,0x6b699ff4,0x6623dec5,0xc777466e },
-       ALTROM(67, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xb21be46c,0x50dc607c,0xce976bbd,0x3841eaf0,0x591ddc7e,0xa1939ad2)
-       ALTROM(67, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x96057aed,0xdd9209e2,0x1d5edfc1,0xcdb52abe,0x93de0f35,0xc43da696)
-       { L"Freezer: Nordic Power v3.0", 3, 0, 3, 0, L"NPOWER\0", 65536, 70, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL,
-       0x72850aef, 0x59c91d1f,0xa8f118f9,0x0bdba05a,0x9ae788d7,0x7a6cc7c9 },
-       ALTROM(70, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf3330e1f,0x3a597db2,0xb7d11b6c,0xb8e13496,0xc215f223,0x88c4ca3c)
-       ALTROM(70, 1, 2, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xee58e0f9,0x4148f4cb,0xb42cec33,0x8ca144de,0xd4f54118,0xe0f185dd)
-       { L"Freezer: HRTMon v2.32 (built-in)", 0, 0, 0, 0, L"HRTMON\0", 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, NULL,
-       0xffffffff, 0, 0, 0, 0, 0, L"HRTMon" },
-
-       { L"A590/A2091 SCSI boot ROM", 6, 0, 6, 0, L"A590\0A2091\0", 16384, 53, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
-       0x8396cf4e, 0x5E03BC61,0x8C862ABE,0x7BF79723,0xB4EEF4D2,0x1859A0F2 },
-       ALTROM(53, 1, 1, 8192, ROMTYPE_ODD  | ROMTYPE_8BIT, 0xb0b8cf24,0xfcf40175,0x05f4d441,0x814b45d5,0x59c19eab,0x43816b30)
-       ALTROM(53, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2e77bbff,0x8a098845,0x068f32cf,0xa4d34a27,0x8cd290f6,0x1d35a52c)
-       { L"A590/A2091 SCSI boot ROM", 6, 6, 6, 6, L"A590\0A2091\0", 16384, 54, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
-       0x33e00a7a, 0x739BB828,0xE874F064,0x9360F59D,0x26B5ED3F,0xBC99BB66 },
-       ALTROM(54, 1, 1, 8192, ROMTYPE_ODD  | ROMTYPE_8BIT, 0xe536bbb2,0xfd7f8a6d,0xa18c1b02,0xd07eb990,0xc2467a24,0x183ede12)
-       ALTROM(54, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0xc0871d25,0xe155f18a,0xbb90cf82,0x0589c15e,0x70559d3b,0x6b391af8)
-       { L"A590/A2091 SCSI boot ROM", 7, 0, 7, 0, L"A590\0A2091\0", 16384, 55, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
-       0x714a97a2, 0xE50F01BA,0xF2899892,0x85547863,0x72A82C33,0x3C91276E },
-       ALTROM(55, 1, 1, 8192, ROMTYPE_ODD  | ROMTYPE_8BIT, 0xa9ccffed,0x149f5bd5,0x2e2d2990,0x4e3de483,0xb9ad7724,0x48e9278e)
-       ALTROM(55, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2942747a,0xdbd7648e,0x79c75333,0x7ff3e4f4,0x91de224b,0xf05e6bb6)
-       { L"A590/A2091 SCSI Guru boot ROM", 6, 14, 6, 14, L"A590\0A2091\0", 32768, 56, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
-       0x04e52f93, 0x6DA21B6F,0x5E8F8837,0xD64507CD,0x8A4D5CDC,0xAC4F426B },
-       { L"A4091 SCSI boot ROM", 40, 9, 40, 9, L"A4091\0", 32768, 57, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL,
-       0x00000000, 0, 0, 0, 0, 0 },
-       { L"A4091 SCSI boot ROM", 40, 13, 40, 13, L"A4091\0", 32768, 58, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL,
-       0x54cb9e85, 0x3CE66919,0xF6FD6797,0x4923A12D,0x91B730F1,0xFFB4A7BA },
-
-       { L"Arcadia OnePlay 2.11", 0, 0, 0, 0, L"ARCADIA\0", 0, 49, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
-       { L"Arcadia TenPlay 2.11", 0, 0, 0, 0, L"ARCADIA\0", 0, 50, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
-       { L"Arcadia OnePlay 3.00", 0, 0, 0, 0, L"ARCADIA\0", 0, 51, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
-
-       { L"Arcadia SportTime Table Hockey", 0, 0, 0, 0, L"ARCADIA\0", 0, 33, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia SportTime Bowling", 0, 0, 0, 0, L"ARCADIA\0", 0, 34, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia World Darts", 0, 0, 0, 0, L"ARCADIA\0", 0, 35, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Magic Johnson's Fast Break", 0, 0, 0, 0, L"ARCADIA\0", 0, 36, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Leader Board Golf", 0, 0, 0, 0, L"ARCADIA\0", 0, 37, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Leader Board Golf (alt)", 0, 0, 0, 0, L"ARCADIA\0", 0, 38, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Ninja Mission", 0, 0, 0, 0, L"ARCADIA\0", 0, 39, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Road Wars", 0, 0, 0, 0, L"ARCADIA\0", 0, 40, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Sidewinder", 0, 0, 0, 0, L"ARCADIA\0", 0, 41, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Spot", 0, 0, 0, 0, L"ARCADIA\0", 0, 42, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Space Ranger", 0, 0, 0, 0, L"ARCADIA\0", 0, 43, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia Xenon", 0, 0, 0, 0, L"ARCADIA\0", 0, 44, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-       { L"Arcadia World Trophy Soccer", 0, 0, 0, 0, L"ARCADIA\0", 0, 45, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
-
-       { NULL }
-
-};
-
-void romlist_clear (void)
-{
-       int i;
-       int mask = 0;
-       struct romdata *parent;
-       TCHAR *pn;
-
-       xfree (rl);
-       rl = 0;
-       romlist_cnt = 0;
-       parent = 0;
-       pn = NULL;
-       for (i = 0; roms[i].name; i++) {
-               struct romdata *rd = &roms[i];
-               if (rd->group == 0) {
-                       parent = rd;
-                       mask = rd->type;
-                       pn = parent->partnumber;
-               } else {
-                       rd->type &= ~ROMTYPE_MASK;
-                       rd->type |= mask & ROMTYPE_MASK;
-                       if (rd->partnumber && !pn) {
-                               TCHAR *newpn;
-                               if (parent->partnumber == NULL)
-                                       parent->partnumber = my_strdup (L"");
-                               newpn = xcalloc ((_tcslen (parent->partnumber) + 1 + _tcslen (rd->partnumber) + 1) * sizeof (TCHAR), 1);
-                               if (_tcslen (parent->partnumber) > 0) {
-                                       _tcscpy (newpn, parent->partnumber);
-                                       _tcscat (newpn, L"/");
-                               }
-                               _tcscat (newpn, rd->partnumber);
-                               xfree (parent->partnumber);
-                               parent->partnumber = newpn;
-                       }
-               }
-       }
-}
-
-/* remove rom entries that need 2 or more roms but not everything required is present */
-static void romlist_cleanup (void)
-{
-       int i = 0;
-       while (roms[i].name) {
-               struct romdata *rd = &roms[i];
-               int grp = rd->group >> 16;
-               int ok = 1;
-               int j = i;
-               int k = i;
-               while (rd->name && (rd->group >> 16) == grp && grp > 0) {
-                       struct romlist *rl = romlist_getrl (rd);
-                       if (!rl)
-                               ok = 0;
-                       rd++;
-                       j++;
-               }
-               if (ok == 0) {
-                       while (i < j) {
-                               struct romlist *rl = romlist_getrl (&roms[i]);
-                               if (rl) {
-                                       int cnt = romlist_cnt - i - 1;
-                                       write_log (L"%s '%s' removed from romlist\n", roms[k].name, rl->path);
-                                       xfree (rl->path);
-                                       if (cnt > 0)
-                                               memmove (rl, rl + 1, cnt * sizeof (struct romlist));
-                                       romlist_cnt--;
-                               }
-                               i++;
-                       }
-               }
-               i++;
-       }
-       for (i = 0; i < romlist_cnt; i++) {
-               struct romlist *rll = &rl[i];
-               //write_log (L"%s (%s)\n", rll->rd->name, rll->path);
-       }
-}
-
-struct romlist **getromlistbyident(int ver, int rev, int subver, int subrev, TCHAR *model, int all)
-{
-       int i, j, ok, out, max;
-       struct romdata *rd;
-       struct romlist **rdout, *rltmp;
-       void *buf;
-       static struct romlist rlstatic;
-
-       for (i = 0; roms[i].name; i++);
-       if (all)
-               max = i;
-       else
-               max = romlist_cnt;
-       buf = xmalloc ((sizeof (struct romlist*) + sizeof (struct romlist)) * (i + 1));
-       rdout = (struct romlist**)buf;
-       rltmp = (struct romlist*)((uae_u8*)buf + (i + 1) * sizeof (struct romlist*));
-       out = 0;
-       for (i = 0; i < max; i++) {
-               ok = 0;
-               if (!all)
-                       rd = rl[i].rd;
-               else
-                       rd = &roms[i];
-               if (rd->group)
-                       continue;
-               if (model && !_tcsicmp (model, rd->name))
-                       ok = 2;
-               if (rd->ver == ver && (rev < 0 || rd->rev == rev)) {
-                       if (subver >= 0) {
-                               if (rd->subver == subver && (subrev < 0 || rd->subrev == subrev) && rd->subver > 0)
-                                       ok = 1;
-                       } else {
-                               ok = 1;
-                       }
-               }
-               if (!ok)
-                       continue;
-               if (model && ok < 2) {
-                       TCHAR *p = rd->model;
-                       ok = 0;
-                       while (*p) {
-                               if (!_tcscmp(rd->model, model)) {
-                                       ok = 1;
-                                       break;
-                               }
-                               p = p + _tcslen(p) + 1;
-                       }
-               }
-               if (!model && rd->type != ROMTYPE_KICK)
-                       ok = 0;
-               if (ok) {
-                       if (all) {
-                               rdout[out++] = rltmp;
-                               rltmp->path = NULL;
-                               rltmp->rd = rd;
-                               rltmp++;
-                       } else {
-                               rdout[out++] = &rl[i];
-                       }
-               }
-       }
-       if (out == 0) {
-               xfree (rdout);
-               return NULL;
-       }
-       for (i = 0; i < out; i++) {
-               int v1 = rdout[i]->rd->subver * 1000 + rdout[i]->rd->subrev;
-               for (j = i + 1; j < out; j++) {
-                       int v2 = rdout[j]->rd->subver * 1000 + rdout[j]->rd->subrev;
-                       if (v1 < v2) {
-                               struct romlist *rltmp = rdout[j];
-                               rdout[j] = rdout[i];
-                               rdout[i] = rltmp;
-                       }
-               }
-       }
-       rdout[out] = NULL;
-       return rdout;
-}
-
-struct romdata *getarcadiarombyname (TCHAR *name)
-{
-       int i;
-       for (i = 0; roms[i].name; i++) {
-               if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIAGAME || roms[i].type == ROMTYPE_ARCADIAGAME)) {
-                       TCHAR *p = roms[i].name;
-                       p = p + _tcslen (p) + 1;
-                       if (_tcslen (name) >= _tcslen (p) + 4) {
-                               TCHAR *p2 = name + _tcslen (name) - _tcslen (p) - 4;
-                               if (!memcmp (p, p2, _tcslen (p)) && !memcmp (p2 + _tcslen (p2) - 4, ".zip", 4))
-                                       return &roms[i];
-                       }
-               }
-       }
-       return NULL;
-}
-
-struct romlist **getarcadiaroms(void)
-{
-       int i, out, max;
-       void *buf;
-       struct romlist **rdout, *rltmp;
-
-       max = 0;
-       for (i = 0; roms[i].name; i++) {
-               if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME))
-                       max++;
-       }
-       buf = xmalloc ((sizeof (struct romlist*) + sizeof (struct romlist)) * (max + 1));
-       rdout = (struct romlist**)buf;
-       rltmp = (struct romlist*)((uae_u8*)buf + (max + 1) * sizeof (struct romlist*));
-       out = 0;
-       for (i = 0; roms[i].name; i++) {
-               if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME)) {
-                       rdout[out++] = rltmp;
-                       rltmp->path = NULL;
-                       rltmp->rd = &roms[i];
-                       rltmp++;
-               }
-       }
-       rdout[out] = NULL;
-       return rdout;
-}
-
-
-static int kickstart_checksum_do (uae_u8 *mem, int size)
-{
-       uae_u32 cksum = 0, prevck = 0;
-       int i;
-       for (i = 0; i < size; i+=4) {
-               uae_u32 data = mem[i]*65536*256 + mem[i+1]*65536 + mem[i+2]*256 + mem[i+3];
-               cksum += data;
-               if (cksum < prevck)
-                       cksum++;
-               prevck = cksum;
-       }
-       return cksum == 0xffffffff;
-}
-
-#define ROM_KEY_NUM 3
-struct rom_key {
-       uae_u8 *key;
-       int size;
-};
-
-static struct rom_key keyring[ROM_KEY_NUM];
-
-static void addkey (uae_u8 *key, int size, const TCHAR *name)
-{
-       int i;
-
-       //write_log (L"addkey(%08x,%d,'%s')\n", key, size, name);
-       if (key == NULL || size == 0) {
-               xfree (key);
-               return;
-       }
-       for (i = 0; i < ROM_KEY_NUM; i++) {
-               if (keyring[i].key && keyring[i].size == size && !memcmp (keyring[i].key, key, size)) {
-                       xfree (key);
-                       //write_log (L"key already in keyring\n");
-                       return;
-               }
-       }
-       for (i = 0; i < ROM_KEY_NUM; i++) {
-               if (keyring[i].key == NULL)
-                       break;
-       }
-       if (i == ROM_KEY_NUM) {
-               xfree (key);
-               //write_log (L"keyring full\n");
-               return;
-       }
-       keyring[i].key = key;
-       keyring[i].size = size;
-       write_log (L"ROM KEY '%s' %d bytes loaded\n", name, size);
-}
-
-static void addkeyfile (const TCHAR *path)
-{
-       struct zfile *f;
-       int keysize;
-       uae_u8 *keybuf;
-
-       f = zfile_fopen (path, L"rb", ZFD_NORMAL);
-       if (!f)
-               return;
-       zfile_fseek (f, 0, SEEK_END);
-       keysize = zfile_ftell (f);
-       if (keysize > 0) {
-               zfile_fseek (f, 0, SEEK_SET);
-               keybuf = xmalloc (keysize);
-               zfile_fread (keybuf, 1, keysize, f);
-               addkey (keybuf, keysize, path);
-       }
-       zfile_fclose (f);
-}
-
-static void addkeydir (const TCHAR *path)
-{
-       TCHAR tmp[MAX_DPATH];
-
-       _tcscpy (tmp, path);
-       if (zfile_exists (tmp)) {
-               int i;
-               for (i = _tcslen (tmp) - 1; i > 0; i--) {
-                       if (tmp[i] == '\\' || tmp[i] == '/')
-                               break;
-               }
-               tmp[i] = 0;
-       }
-       _tcscat (tmp, L"/");
-       _tcscat (tmp, L"rom.key");
-       addkeyfile (tmp);
-}
-
-int get_keyring (void)
-{
-       int i, num = 0;
-       for (i = 0; i < ROM_KEY_NUM; i++) {
-               if (keyring[i].key)
-                       num++;
-       }
-       return num;
-}
-
-int load_keyring (struct uae_prefs *p, TCHAR *path)
-{
-       uae_u8 *keybuf;
-       int keysize;
-       TCHAR tmp[MAX_PATH], *d;
-       int keyids[] = { 0, 48, -1 };
-       int cnt, i;
-
-       free_keyring ();
-       keybuf = target_load_keyfile (p, path, &keysize, tmp);
-       addkey (keybuf, keysize, tmp);
-       for (i = 0; keyids[i] >= 0; i++) {
-               struct romdata *rd = getromdatabyid (keyids[i]);
-               TCHAR *s;
-               if (rd) {
-                       s = romlist_get (rd);
-                       if (s)
-                               addkeyfile (s);
-               }
-       }
-
-       cnt = 0;
-       for (;;) {
-               keybuf = NULL;
-               keysize = 0;
-               tmp[0] = 0;
-               switch (cnt)
-               {
-               case 0:
-                       if (path)
-                               _tcscpy (tmp, path);
-                       break;
-               case 1:
-                       _tcscat (tmp, L"rom.key");
-                       break;
-               case 2:
-                       if (p) {
-                               _tcscpy (tmp, p->path_rom);
-                               _tcscat (tmp, L"rom.key");
-                       }
-                       break;
-               case 3:
-                       _tcscpy (tmp, L"roms/rom.key");
-                       break;
-               case 4:
-                       _tcscpy (tmp, start_path_data);
-                       _tcscat (tmp, L"rom.key");
-                       break;
-               case 5:
-                       _stprintf (tmp, L"%s../shared/rom/rom.key", start_path_data);
-                       break;
-               case 6:
-                       if (p) {
-                               for (i = 0; uae_archive_extensions[i]; i++) {
-                                       if (_tcsstr (p->romfile, uae_archive_extensions[i]))
-                                               break;
-                               }
-                               if (!uae_archive_extensions[i]) {
-                                       _tcscpy (tmp, p->romfile);
-                                       d = _tcsrchr (tmp, '/');
-                                       if (!d)
-                                               d = _tcsrchr (tmp, '\\');
-                                       if (d)
-                                               _tcscpy (d + 1, L"rom.key");
-                               }
-                       }
-                       break;
-               case 7:
-                       return get_keyring ();
-               }
-               cnt++;
-               if (!tmp[0])
-                       continue;
-               addkeyfile (tmp);
-       }
-}
-void free_keyring (void)
-{
-       int i;
-       for (i = 0; i < ROM_KEY_NUM; i++)
-               xfree (keyring[i].key);
-       memset(keyring, 0, sizeof (struct rom_key) * ROM_KEY_NUM);
-}
-
-struct romdata *getromdatabyname (TCHAR *name)
-{
-       TCHAR tmp[MAX_PATH];
-       int i = 0;
-       while (roms[i].name) {
-               if (!roms[i].group) {
-                       getromname (&roms[i], tmp);
-                       if (!_tcscmp (tmp, name) || !_tcscmp (roms[i].name, name))
-                               return &roms[i];
-               }
-               i++;
-       }
-       return 0;
-}
-
-struct romdata *getromdatabyid (int id)
-{
-       int i = 0;
-       while (roms[i].name) {
-               if (id == roms[i].id && roms[i].group == 0)
-                       return &roms[i];
-               i++;
-       }
-       return 0;
-}
-
-struct romdata *getromdatabyidgroup (int id, int group, int subitem)
-{
-       int i = 0;
-       group = (group << 16) | subitem;
-       while (roms[i].name) {
-               if (id == roms[i].id && roms[i].group == group)
-                       return &roms[i];
-               i++;
-       }
-       return 0;
-}
-
-STATIC_INLINE int notcrc32 (uae_u32 crc32)
-{
-       if (crc32 == 0xffffffff || crc32 == 0x00000000)
-               return 1;
-       return 0;
-}
-
-struct romdata *getromdatabycrc (uae_u32 crc32)
-{
-       int i = 0;
-       while (roms[i].name) {
-               if (roms[i].group == 0 && crc32 == roms[i].crc32 && !notcrc32(crc32))
-                       return &roms[i];
-               i++;
-       }
-       return 0;
-}
-
-static int cmpsha1 (uae_u8 *s1, struct romdata *rd)
-{
-       int i;
-
-       for (i = 0; i < SHA1_SIZE / 4; i++) {
-               uae_u32 v1 = (s1[0] << 24) | (s1[1] << 16) | (s1[2] << 8) | (s1[3] << 0);
-               uae_u32 v2 = rd->sha1[i];
-               if (v1 != v2)
-                       return -1;
-               s1 += 4;
-       }
-       return 0;
-}
-
-static struct romdata *checkromdata (uae_u8 *sha1, int size, uae_u32 mask)
-{
-       int i = 0;
-       while (roms[i].name) {
-               if (!notcrc32(roms[i].crc32) && roms[i].size >= size) {
-                       if (roms[i].type & mask) {
-                               if (!cmpsha1 (sha1, &roms[i]))
-                                       return &roms[i];
-                       }
-               }
-               i++;
-       }
-       return NULL;
-}
-
-int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size)
-{
-       int cnt, t, i;
-
-       for (i = ROM_KEY_NUM - 1; i >= 0; i--) {
-               uae_u8 sha1[SHA1_SIZE];
-               struct romdata *rd;
-               int keysize = keyring[i].size;
-               uae_u8 *key = keyring[i].key;
-               if (!key)
-                       continue;
-               for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize)  {
-                       mem[cnt] ^= key[t];
-                       if (real_size == cnt + 1)
-                               t = keysize - 1;
-               }
-               if ((mem[2] == 0x4e && mem[3] == 0xf9) || (mem[0] == 0x11 && (mem[1] == 0x11 || mem[1] == 0x14))) {
-                       cloanto_rom = 1;
-                       return 1;
-               }
-               get_sha1 (mem, size, sha1);
-               rd = checkromdata (sha1, size, -1);
-               if (rd) {
-                       if (rd->cloanto)
-                               cloanto_rom = 1;
-                       return 1;
-               }
-               if (i == 0)
-                       break;
-               for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize)  {
-                       mem[cnt] ^= key[t];
-                       if (real_size == cnt + 1)
-                               t = keysize - 1;
-               }
-       }
-       return 0;
-}
-
-static int decode_rekick_rom_do (uae_u8 *mem, int size, int real_size)
-{
-       uae_u32 d1 = 0xdeadfeed, d0;
-       int i;
-
-       for (i = 0; i < size / 8; i++) {
-               d0 = ((mem[i * 8 + 0] << 24) | (mem[i * 8 + 1] << 16) | (mem[i * 8 + 2] << 8) | mem[i * 8 + 3]);
-               d1 = d1 ^ d0;
-               mem[i * 8 + 0] = d1 >> 24;
-               mem[i * 8 + 1] = d1 >> 16;
-               mem[i * 8 + 2] = d1 >> 8;
-               mem[i * 8 + 3] = d1;
-               d1 = ((mem[i * 8 + 4] << 24) | (mem[i * 8 + 5] << 16) | (mem[i * 8 + 6] << 8) | mem[i * 8 + 7]);
-               d0 = d0 ^ d1;
-               mem[i * 8 + 4] = d0 >> 24;
-               mem[i * 8 + 5] = d0 >> 16;
-               mem[i * 8 + 6] = d0 >> 8;
-               mem[i * 8 + 7] = d0;
-       }
-       return 1;
-}
-
-static int decode_rom (uae_u8 *mem, int size, int mode, int real_size)
-{
-       if (mode == 1) {
-               if (!decode_cloanto_rom_do (mem, size, real_size)) {
-#ifndef SINGLEFILE
-                       notify_user (NUMSG_NOROMKEY);
-#endif
-                       return 0;
-               }
-               return 1;
-       } else if (mode == 2) {
-               decode_rekick_rom_do (mem, size, real_size);
-               return 1;
-       }
-       return 0;
-}
-
-struct romdata *getromdatabydata (uae_u8 *rom, int size)
-{
-       uae_u8 sha1[SHA1_SIZE];
-       uae_u8 tmp[4];
-       uae_u8 *tmpbuf = NULL;
-       struct romdata *ret = NULL;
-
-       if (size > 11 && !memcmp (rom, "AMIROMTYPE1", 11)) {
-               uae_u8 *tmpbuf = xmalloc (size);
-               int tmpsize = size - 11;
-               memcpy (tmpbuf, rom + 11, tmpsize);
-               decode_rom (tmpbuf, tmpsize, 1, tmpsize);
-               rom = tmpbuf;
-               size = tmpsize;
-       }
-#if 0
-       if (size > 0x6c + 524288 && !memcmp (rom, "AMIG", 4)) {
-               uae_u8 *tmpbuf = (uae_u8*)xmalloc (size);
-               int tmpsize = size - 0x6c;
-               memcpy (tmpbuf, rom + 0x6c, tmpsize);
-               decode_rom (tmpbuf, tmpsize, 2, tmpsize);
-               rom = tmpbuf;
-               size = tmpsize;
-       }
-#endif
-       get_sha1 (rom, size, sha1);
-       ret = checkromdata(sha1, size, -1);
-       if (!ret) {
-               get_sha1 (rom, size / 2, sha1);
-               ret = checkromdata (sha1, size / 2, -1);
-               if (!ret) {
-                       /* ignore AR IO-port range until we have full dump */
-                       memcpy (tmp, rom, 4);
-                       memset (rom, 0, 4);
-                       get_sha1 (rom, size, sha1);
-                       ret = checkromdata (sha1, size, ROMTYPE_AR);
-                       memcpy (rom, tmp, 4);
-               }
-       }
-       xfree (tmpbuf);
-       return ret;
-}
-
-struct romdata *getromdatabyzfile (struct zfile *f)
-{
-       int pos, size;
-       uae_u8 *p;
-       struct romdata *rd;
-
-       pos = zfile_ftell (f);
-       zfile_fseek (f, 0, SEEK_END);
-       size = zfile_ftell (f);
-       p = xmalloc (size);
-       if (!p)
-               return 0;
-       memset (p, 0, size);
-       zfile_fseek (f, 0, SEEK_SET);
-       zfile_fread (p, 1, size, f);
-       zfile_fseek (f, pos, SEEK_SET);
-       rd = getromdatabydata (p, size);
-       xfree (p);
-       return rd;
-}
-
-void getromname        (struct romdata *rd, TCHAR *name)
-{
-       name[0] = 0;
-       if (!rd)
-               return;
-       while (rd->group)
-               rd--;
-       _tcscat (name, rd->name);
-       if ((rd->subrev || rd->subver) && rd->subver != rd->ver)
-               _stprintf (name + _tcslen (name), L" rev %d.%d", rd->subver, rd->subrev);
-       if (rd->size > 0)
-               _stprintf (name + _tcslen (name), L" (%dk)", (rd->size + 1023) / 1024);
-       if (rd->partnumber && _tcslen (rd->partnumber) > 0)
-               _stprintf (name + _tcslen (name), L" [%s]", rd->partnumber);
-}
-
-struct romlist *getromlistbyromdata (struct romdata *rd)
-{
-       int ids[2];
-
-       ids[0] = rd->id;
-       ids[1] = 0;
-       return getromlistbyids(ids);
-}
-
-struct romlist *getromlistbyids (int *ids)
-{
-       struct romdata *rd;
-       int i, j;
-
-       i = 0;
-       while (ids[i] >= 0) {
-               rd = getromdatabyid (ids[i]);
-               if (rd) {
-                       for (j = 0; j < romlist_cnt; j++) {
-                               if (rl[j].rd->id == rd->id)
-                                       return &rl[j];
-                       }
-               }
-               i++;
-       }
-       return NULL;
-}
-
-void romwarning (int *ids)
-{
-       int i, exp;
-       TCHAR tmp1[MAX_DPATH], tmp2[MAX_DPATH];
-       TCHAR tmp3[MAX_DPATH];
-
-       exp = 0;
-       tmp2[0] = 0;
-       i = 0;
-       while (ids[i] >= 0) {
-               struct romdata *rd = getromdatabyid (ids[i]);
-               getromname (rd, tmp1);
-               _tcscat (tmp2, L"- ");
-               _tcscat (tmp2, tmp1);
-               _tcscat (tmp2, L"\n");
-               if (rd->type & (ROMTYPE_A2091BOOT | ROMTYPE_A4091BOOT))
-                       exp++;
-               i++;
-       }
-       translate_message (exp ? NUMSG_EXPROMNEED : NUMSG_ROMNEED, tmp3);
-       gui_message (tmp3, tmp2);
-}
-
 addrbank *mem_banks[MEMORY_BANKS];
 
 /* This has two functions. It either holds a host address that, when added
@@ -2425,311 +1474,6 @@ void a3000_fakekick (int map)
        }
 }
 
-static int kickstart_checksum (uae_u8 *mem, int size)
-{
-       if (!kickstart_checksum_do (mem, size)) {
-#ifndef        SINGLEFILE
-               notify_user (NUMSG_KSROMCRCERROR);
-#endif
-               return 0;
-       }
-       return 1;
-}
-
-static int read_rom_file (uae_u8 *buf, struct romdata *rd)
-{
-       struct zfile *zf;
-       struct romlist *rl = romlist_getrl (rd);
-       uae_char tmp[11];
-
-       if (!rl || _tcslen (rl->path) == 0)
-               return 0;
-       zf = zfile_fopen (rl->path, L"rb", ZFD_NORMAL);
-       if (!zf)
-               return 0;
-       addkeydir (rl->path);
-       zfile_fread (tmp, sizeof tmp, 1, zf);
-       if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) {
-               zfile_fread (buf, rd->size, 1, zf);
-               decode_cloanto_rom_do (buf, rd->size, rd->size);
-       } else {
-               memcpy (buf, tmp, sizeof tmp);
-               zfile_fread (buf + sizeof tmp, rd->size - sizeof (tmp), 1, zf);
-       }
-       zfile_fclose (zf);
-       return 1;
-}
-
-static void byteswap (uae_u8 *buf, int size)
-{
-       int i;
-       for (i = 0; i < size; i += 2) {
-               uae_u8 t = buf[i];
-               buf[i] = buf[i + 1];
-               buf[i + 1] = t;
-       }
-}
-static void wordbyteswap (uae_u8 *buf, int size)
-{
-       int i;
-       for (i = 0; i < size; i += 4) {
-               uae_u8 t;
-               t = buf[i + 0];
-               buf[i + 0] = buf[i + 2];
-               buf[i + 2] = t;
-               t = buf[i + 1];
-               buf[i + 1] = buf[i + 3];
-               buf[i + 3] = t;
-       }
-}
-
-static void mergecd32 (uae_u8 *dst, uae_u8 *src, int size)
-{
-       int i, k;
-       k = 0;
-       for (i = 0; i < size / 2; i += 2) {
-               int j = i + size / 2;
-               dst[k + 1] = src[i + 0];
-               dst[k + 0] = src[i + 1];
-               dst[k + 3] = src[j + 0];
-               dst[k + 2] = src[j + 1];
-               k += 4;
-       }
-#if 0
-       {
-               struct zfile *f;
-               f = zfile_fopen ("c:\\d\\1.rom","wb", ZFD_NORMAL);
-               zfile_fwrite (dst, 1, size, f);
-               zfile_fclose(f);
-       }
-#endif
-}
-
-static void descramble (struct romdata *rd, uae_u8 *data, int size, int odd)
-{
-       int flags = rd->type;
-
-       if (flags & (ROMTYPE_NORDIC | ROMTYPE_XPOWER))
-               descramble_nordicpro (data, size, odd);
-}
-
-struct zfile *read_rom (struct romdata **prd)
-{
-       struct romdata *rd2 = *prd;
-       struct romdata *rd = *prd;
-       TCHAR *name;
-       int id = rd->id;
-       uae_u32 crc32;
-       int size;
-       uae_u8 *buf, *buf2;
-
-       /* find parent node */
-       for (;;) {
-               if (rd2 == &roms[0])
-                       break;
-               if (rd2[-1].id != id)
-                       break;
-               rd2--;
-       }
-       *prd = rd2;
-       size = rd2->size;
-       crc32 = rd2->crc32;
-       name = rd->name;
-       buf = xmalloc (size * 2);
-       memset (buf, 0xff, size * 2);
-       if (!buf)
-               return NULL;
-       buf2 = buf + size;
-       while (rd->id == id) {
-               int i, j, add;
-               int ok = 0;
-               uae_u32 flags = rd->type;
-               int odd = (flags & ROMTYPE_ODD) ? 1 : 0;
-
-               add = 0;
-               for (i = 0; i < 2; i++) {
-                       memset (buf, 0, size);
-                       if (!(flags & (ROMTYPE_EVEN | ROMTYPE_ODD))) {
-                               read_rom_file (buf, rd);
-                               if (flags & ROMTYPE_CD32) {
-                                       memcpy (buf2, buf, size);
-                                       mergecd32 (buf, buf2, size);
-                               }
-                               add = 1;
-                               i++;
-                       } else {
-                               int romsize = size / 2;
-                               if (i)
-                                       odd = !odd;
-                               if (flags & ROMTYPE_8BIT) {
-                                       read_rom_file (buf2, rd);
-                                       if (flags & ROMTYPE_BYTESWAP)
-                                               byteswap (buf2, romsize);
-                                       if (flags & ROMTYPE_SCRAMBLED)
-                                               descramble (rd, buf2, romsize, odd);
-                                       for (j = 0; j < size; j += 2)
-                                               buf[j + odd] = buf2[j / 2];
-                                       read_rom_file (buf2, rd + 1);
-                                       if (flags & ROMTYPE_BYTESWAP)
-                                               byteswap (buf2, romsize);
-                                       if (flags & ROMTYPE_SCRAMBLED)
-                                               descramble (rd + 1, buf2, romsize, !odd);
-                                       for (j = 0; j < size; j += 2)
-                                               buf[j + (1 - odd)] = buf2[j / 2];
-                               } else {
-                                       read_rom_file (buf2, rd);
-                                       if (flags & ROMTYPE_BYTESWAP)
-                                               byteswap (buf2, romsize);
-                                       if (flags & ROMTYPE_SCRAMBLED)
-                                               descramble (rd, buf2, romsize, odd);
-                                       for (j = 0; j < size; j += 4) {
-                                               buf[j + 2 * odd + 0] = buf2[j / 2 + 0];
-                                               buf[j + 2 * odd + 1] = buf2[j / 2 + 1];
-                                       }
-                                       read_rom_file (buf2, rd + 1);
-                                       if (flags & ROMTYPE_BYTESWAP)
-                                               byteswap (buf2, romsize);
-                                       if (flags & ROMTYPE_SCRAMBLED)
-                                               descramble (rd + 1, buf2, romsize, !odd);
-                                       for (j = 0; j < size; j += 4) {
-                                               buf[j + 2 * (1 - odd) + 0] = buf2[j / 2 + 0];
-                                               buf[j + 2 * (1 - odd) + 1] = buf2[j / 2 + 1];
-                                       }
-                               }
-                               add = 2;
-                       }
-                       if (get_crc32 (buf, size) == crc32) {
-                               ok = 1;
-                       } else {
-                               /* perhaps it is byteswapped without byteswap entry? */
-                               byteswap (buf, size);
-                               if (get_crc32 (buf, size) == crc32)
-                                       ok = 1;
-                       }
-                       if (ok) {
-                               struct zfile *zf = zfile_fopen_empty (NULL, name, size);
-                               if (zf) {
-                                       zfile_fwrite (buf, size, 1, zf);
-                                       zfile_fseek (zf, 0, SEEK_SET);
-                               }
-                               xfree (buf);
-                               return zf;
-                       }
-               }
-               rd += add;
-
-       }
-       xfree (buf);
-       return NULL;
-}
-
-static struct zfile *rom_fopen (const TCHAR *name, const TCHAR *mode, int mask)
-{
-       struct zfile *f;
-       //write_log (L"attempting to load '%s'\n", name); 
-       f = zfile_fopen (name, mode, mask);
-       //write_log (L"=%p\n", f);
-       return f;
-}
-
-struct zfile *read_rom_name (const TCHAR *filename)
-{
-       int i;
-       struct zfile *f;
-
-       for (i = 0; i < romlist_cnt; i++) {
-               if (!_tcsicmp (filename, rl[i].path)) {
-                       struct romdata *rd = rl[i].rd;
-                       f = read_rom (&rd);
-                       if (f)
-                               return f;
-               }
-       }
-       f = rom_fopen (filename, L"rb", ZFD_NORMAL);
-       if (f) {
-               uae_u8 tmp[11];
-               zfile_fread (tmp, sizeof tmp, 1, f);
-               if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) {
-                       struct zfile *df;
-                       int size;
-                       uae_u8 *buf;
-                       addkeydir (filename);
-                       zfile_fseek (f, 0, SEEK_END);
-                       size = zfile_ftell (f) - sizeof tmp;
-                       zfile_fseek (f, sizeof tmp, SEEK_SET);
-                       buf = xmalloc (size);
-                       zfile_fread (buf, size, 1, f);
-                       df = zfile_fopen_empty (f, L"tmp.rom", size);
-                       decode_cloanto_rom_do (buf, size, size);
-                       zfile_fwrite (buf, size, 1, df);
-                       zfile_fclose (f);
-                       xfree (buf);
-                       zfile_fseek (df, 0, SEEK_SET);
-                       f = df;
-               } else {
-                       zfile_fseek (f, -((int)sizeof tmp), SEEK_CUR);
-               }
-       }
-       return f;
-}
-
-struct zfile *read_rom_name_guess (const TCHAR *filename)
-{
-       int i, j;
-       struct zfile *f;
-       TCHAR *name;
-
-       for (i = _tcslen (filename) - 1; i >= 0; i--) {
-               if (filename[i] == '/' || filename[i] == '\\')
-                       break;
-       }
-       if (i < 0)
-               return NULL;
-       name = &filename[i];
-
-       for (i = 0; i < romlist_cnt; i++) {
-               TCHAR *n = rl[i].path;
-               for (j = _tcslen (n) - 1; j >= 0; j--) {
-                       if (n[j] == '/' || n[j] == '\\')
-                               break;
-               }
-               if (j < 0)
-                       continue;
-               if (!_tcsicmp (name, n + j)) {
-                       struct romdata *rd = rl[i].rd;
-                       f = read_rom (&rd);
-                       if (f) {
-                               write_log (L"ROM %s not found, using %s\n", filename, rl[i].path);
-                               return f;
-                       }
-               }
-       }
-       return NULL;
-}
-
-static void kickstart_fix_checksum (uae_u8 *mem, int size)
-{
-       uae_u32 cksum = 0, prevck = 0;
-       int i, ch = size == 524288 ? 0x7ffe8 : 0x3e;
-
-       mem[ch] = 0;
-       mem[ch + 1] = 0;
-       mem[ch + 2] = 0;
-       mem[ch + 3] = 0;
-       for (i = 0; i < size; i+=4) {
-               uae_u32 data = (mem[i] << 24) | (mem[i + 1] << 16) | (mem[i + 2] << 8) | mem[i + 3];
-               cksum += data;
-               if (cksum < prevck)
-                       cksum++;
-               prevck = cksum;
-       }
-       cksum ^= 0xffffffff;
-       mem[ch++] = cksum >> 24;
-       mem[ch++] = cksum >> 16;
-       mem[ch++] = cksum >> 8;
-       mem[ch++] = cksum >> 0;
-}
-
 static uae_char *kickstring = "exec.library";
 static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int noalias)
 {
@@ -3995,6 +2739,7 @@ uae_u8 *restore_rom (uae_u8 *src)
        uae_u32 crc32, mem_start, mem_size, mem_type, version;
        TCHAR *s, *romn;
        int i, crcdet;
+       struct romlist *rl = romlist_getit ();
 
        mem_start = restore_u32 ();
        mem_size = restore_u32 ();
@@ -4003,7 +2748,7 @@ uae_u8 *restore_rom (uae_u8 *src)
        crc32 = restore_u32 ();
        romn = restore_string ();
        crcdet = 0;
-       for (i = 0; i < romlist_cnt; i++) {
+       for (i = 0; i < romlist_count (); i++) {
                if (rl[i].rd->crc32 == crc32 && crc32) {
                        if (zfile_exists (rl[i].path)) {
                                switch (mem_type)
index 8bcace9988b6494aef8a3c2a5b7aafa5ff392aed..a8137e1a1635f38c8c63b24893e436255de8e145 100644 (file)
@@ -1,10 +1,10 @@
- /*
-  * UAE - The Un*x Amiga Emulator
-  *
-  * Pro-Wizard glue code
-  *
-  * Copyright 2004 Toni Wilen
-  */
+/*
+* UAE - The Un*x Amiga Emulator
+*
+* Pro-Wizard glue code
+*
+* Copyright 2004 Toni Wilen
+*/
 
 #include "sysconfig.h"
 #include "sysdeps.h"
@@ -21,114 +21,114 @@ static int got, canceled;
 
 static void mc (uae_u8 *d, uaecptr s, int size)
 {
-    int i;
+       int i;
 
-    for (i = 0; i < size; i++)
-       d[i] = get_byte (s++);
+       for (i = 0; i < size; i++)
+               d[i] = get_byte (s++);
 }
 
 #ifdef _WIN32
 static LONG WINAPI ExceptionFilter (struct _EXCEPTION_POINTERS * pExceptionPointers, DWORD ec)
 {
-    return EXCEPTION_EXECUTE_HANDLER;
+       return EXCEPTION_EXECUTE_HANDLER;
 }
 #endif
 
 void moduleripper (void)
 {
-    int size;
-    uae_u8 *buf, *p;
-
-    size = currprefs.chipmem_size;
-    size += currprefs.fastmem_size;
-    size += currprefs.bogomem_size;
-    size += currprefs.mbresmem_low_size;
-    size += currprefs.mbresmem_high_size;
-    size += currprefs.z3fastmem_size;
-    size += currprefs.z3fastmem2_size;
-    buf = p = xmalloc (size);
-    if (!buf)
-       return;
-    memcpy (p, chipmemory, currprefs.chipmem_size);
-    p += currprefs.chipmem_size;
-    mc (p, fastmem_start, currprefs.fastmem_size);
-    p += currprefs.fastmem_size;
-    mc (p, bogomem_start, currprefs.bogomem_size);
-    p += currprefs.bogomem_size;
-    mc (p, a3000lmem_start, currprefs.mbresmem_low_size);
-    p += currprefs.mbresmem_low_size;
-    mc (p, a3000hmem_start, currprefs.mbresmem_high_size);
-    p += currprefs.mbresmem_high_size;
-    mc (p, z3fastmem_start, currprefs.z3fastmem_size);
-    p += currprefs.z3fastmem_size;
-    mc (p, z3fastmem_start + currprefs.z3fastmem_size, currprefs.z3fastmem2_size);
-    p += currprefs.z3fastmem2_size;
-
-    got = 0;
-    canceled = 0;
+       int size;
+       uae_u8 *buf, *p;
+
+       size = currprefs.chipmem_size;
+       size += currprefs.fastmem_size;
+       size += currprefs.bogomem_size;
+       size += currprefs.mbresmem_low_size;
+       size += currprefs.mbresmem_high_size;
+       size += currprefs.z3fastmem_size;
+       size += currprefs.z3fastmem2_size;
+       buf = p = xmalloc (size);
+       if (!buf)
+               return;
+       memcpy (p, chipmemory, currprefs.chipmem_size);
+       p += currprefs.chipmem_size;
+       mc (p, fastmem_start, currprefs.fastmem_size);
+       p += currprefs.fastmem_size;
+       mc (p, bogomem_start, currprefs.bogomem_size);
+       p += currprefs.bogomem_size;
+       mc (p, a3000lmem_start, currprefs.mbresmem_low_size);
+       p += currprefs.mbresmem_low_size;
+       mc (p, a3000hmem_start, currprefs.mbresmem_high_size);
+       p += currprefs.mbresmem_high_size;
+       mc (p, z3fastmem_start, currprefs.z3fastmem_size);
+       p += currprefs.z3fastmem_size;
+       mc (p, z3fastmem_start + currprefs.z3fastmem_size, currprefs.z3fastmem2_size);
+       p += currprefs.z3fastmem2_size;
+
+       got = 0;
+       canceled = 0;
 #ifdef _WIN32
-    __try {
+       __try {
 #endif
-       prowizard_search (buf, size);
+               prowizard_search (buf, size);
 #ifdef _WIN32
-    } __except(ExceptionFilter (GetExceptionInformation (), GetExceptionCode ())) {
-       write_log (L"prowizard scan crashed\n");
-    }
+       } __except(ExceptionFilter (GetExceptionInformation (), GetExceptionCode ())) {
+               write_log (L"prowizard scan crashed\n");
+       }
 #endif
-    if (!got)
-       notify_user (NUMSG_MODRIP_NOTFOUND);
-    else if (!canceled)
-       notify_user (NUMSG_MODRIP_FINISHED);
-    xfree (buf);
+       if (!got)
+               notify_user (NUMSG_MODRIP_NOTFOUND);
+       else if (!canceled)
+               notify_user (NUMSG_MODRIP_FINISHED);
+       xfree (buf);
 }
 
 FILE *moduleripper_fopen (const char *aname, const char *amode)
 {
-    TCHAR tmp2[MAX_DPATH];
-    TCHAR tmp[MAX_DPATH];
-    TCHAR *name, *mode;
-    FILE *f;
-
-    fetch_ripperpath (tmp, sizeof tmp);
-    name = au (aname);
-    mode = au (amode);
-    _stprintf (tmp2, L"%s%s", tmp, name);
-    f = _tfopen (tmp2, mode);
-    xfree (mode);
-    xfree (name);
-    return f;
+       TCHAR tmp2[MAX_DPATH];
+       TCHAR tmp[MAX_DPATH];
+       TCHAR *name, *mode;
+       FILE *f;
+
+       fetch_ripperpath (tmp, sizeof tmp);
+       name = au (aname);
+       mode = au (amode);
+       _stprintf (tmp2, L"%s%s", tmp, name);
+       f = _tfopen (tmp2, mode);
+       xfree (mode);
+       xfree (name);
+       return f;
 }
 
 FILE *moduleripper2_fopen (const char *name, const char *mode, const char *aid, int addr, int size)
 {
-    TCHAR msg[MAX_DPATH], msg2[MAX_DPATH];
-    TCHAR *id;
-    int ret;
-
-    if (canceled)
-       return NULL;
-    got++;
-    translate_message (NUMSG_MODRIP_SAVE, msg);
-    id = au (aid);
-    _stprintf (msg2, msg, id, addr, size);
-    ret = gui_message_multibutton (2, msg2);
-    xfree (id);
-    if (ret < 0)
-       canceled = 1;
-    if (ret < 0 || ret != 1)
-       return NULL;
-    return moduleripper_fopen (name, mode);
+       TCHAR msg[MAX_DPATH], msg2[MAX_DPATH];
+       TCHAR *id;
+       int ret;
+
+       if (canceled)
+               return NULL;
+       got++;
+       translate_message (NUMSG_MODRIP_SAVE, msg);
+       id = au (aid);
+       _stprintf (msg2, msg, id, addr, size);
+       ret = gui_message_multibutton (2, msg2);
+       xfree (id);
+       if (ret < 0)
+               canceled = 1;
+       if (ret < 0 || ret != 1)
+               return NULL;
+       return moduleripper_fopen (name, mode);
 }
 
 #else
 
 FILE *moduleripper_fopen (const char *name, const char *mode)
 {
-    return NULL;
+       return NULL;
 }
 FILE *moduleripper2_fopen (const char *name, const char *mode, const char *id)
 {
-    return NULL;
+       return NULL;
 }
 
 #endif
index f6c8453b309a543c5646b803d4ac46acd395d74d..92e86f7acacde45d022333169e5c9eec4ebd81fb 100644 (file)
@@ -15,6 +15,7 @@
 #include "options.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "newcpu.h"
 #include "ncr_scsi.h"
index c85407def9b72c57ccae0e7682fd94df01ab978f..5cc2664746be88ff6f141f1b1d445515245355c7 100644 (file)
@@ -1,5 +1,5 @@
 !define PRODUCT_NAME "WinUAE"
-!define PRODUCT_VERSION "2.0.0"
+!define PRODUCT_VERSION "2.0.1"
 !define PRODUCT_PUBLISHER "Arabuusimiehet"
 !define PRODUCT_WEB_SITE "http://www.winuae.net/"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\winuae.exe"
index 5b4f6d52d90b34339116138e35b39ff9cbb9c416..20d526b2330faf2a20b131688d1834b414f049a3 100644 (file)
@@ -295,6 +295,8 @@ static void *scgo_getbuf (SCSI *scgp, long amt)
 
 static void scsi_sfree (SCSI *scgp)
 {
+       if (!scgp)
+               return;
        if (scgp->cmdstart)
                free(scgp->cmdstart);
        if (scgp->cmdstop)
@@ -367,6 +369,7 @@ static SCSI *openscsi (int busno, int tgt, int tlun)
                errno = EINVAL;
                if (log_scsi)
                        write_log (L"ASPI: Illegal value for busno, target or lun '%d,%d,%d'\n", busno, tgt, tlun);
+               scsi_sfree (scgp);
                return 0;
        }
        /*
@@ -379,23 +382,29 @@ static SCSI *openscsi (int busno, int tgt, int tlun)
                ;
        } else if (tgt != -1 || tgt != -1 || tlun != -1) {
                errno = EINVAL;
+               scsi_sfree (scgp);
                return 0;
        }
        if (scgp->local == NULL) {
                scgp->local = malloc(sizeof(struct scg_local));
-               if (scgp->local == NULL)
+               if (scgp->local == NULL) {
+                       scsi_sfree (scgp);
                        return 0;
+               }
        }
        /*
        * Try to open ASPI-Router
        */
-       if (!open_driver(scgp))
+       if (!open_driver(scgp)) {
+               scsi_sfree (scgp);
                return 0;
+       }
        /*
        * More than we have ...
        */
        if (busno >= busses) {
                close_driver ();
+               scsi_sfree (scgp);
                return 0;
        }
        return scgp;
@@ -746,9 +755,9 @@ static void aspi_led (int unitnum)
        int type = si[unitnum].type;
 
        if (type == INQ_ROMD)
-               gui_cd_led (unitnum, 1);
+               gui_flicker_led (LED_CD, unitnum, 1);
        else if (type == INQ_DASD)
-               gui_hd_led (unitnum, 1);
+               gui_flicker_led (LED_HD, unitnum, 1);
 }
 
 static uae_sem_t scgp_sem;
index f8b04ff297c0a5ce9fe09107aee00437fbad2f05..6cb3d85e03f13c15fa919ee6f848508941921751 100644 (file)
@@ -492,7 +492,7 @@ static uae_u8 *spti_read (int unitnum, int sector, int sectorsize)
        cmd[3] = (uae_u8)(sector >> 16);
        cmd[4] = (uae_u8)(sector >> 8);
        cmd[5] = (uae_u8)(sector >> 0);
-       gui_cd_led (unitnum, 1);
+       gui_flicker_led (LED_CD, unitnum, 1);
        memset (&swb, 0, sizeof (swb));
        memcpy (swb.spt.Cdb, cmd, len);
        swb.spt.Length = sizeof (SCSI_PASS_THROUGH);
@@ -535,7 +535,7 @@ uae_u8 *ioctl_command_rawread (int unitnum, int sector, int sectorsize)
        if (sectorsize != 2336 && sectorsize != 2352 && sectorsize != 2048)
                return 0;
        while (cnt-- > 0) {
-               gui_cd_led (unitnum, 1);
+               gui_flicker_led (LED_CD, unitnum, 1);
                seterrormode (unitnum);
                rri.DiskOffset.QuadPart = sector * 2048;
                rri.SectorCount = 1;
@@ -564,7 +564,7 @@ static int ioctl_command_readwrite (int unitnum, int sector, int write, int bloc
        if (!open_createfile (unitnum, 0))
                return 0;
        while (cnt-- > 0) {
-               gui_cd_led (unitnum, 1);
+               gui_flicker_led (LED_CD, unitnum, 1);
                seterrormode (unitnum);
                if (SetFilePointer (ciw32[unitnum].h, sector * ciw32[unitnum].blocksize, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
                        reseterrormode (unitnum);
@@ -577,7 +577,7 @@ static int ioctl_command_readwrite (int unitnum, int sector, int write, int bloc
        }
        cnt = 3;
        while (cnt-- > 0) {
-               gui_cd_led (unitnum, 1);
+               gui_flicker_led (LED_CD, unitnum, 1);
                seterrormode (unitnum);
                if (write) {
                        if (!WriteFile (ciw32[unitnum].h, p, blocksize, &dtotal, 0)) {
@@ -622,7 +622,7 @@ static int ioctl_command_readwrite (int unitnum, int sector, int write, int bloc
                        }
                }
                reseterrormode (unitnum);
-               gui_cd_led (unitnum, 1);
+               gui_flicker_led (LED_CD, unitnum, 1);
                break;
        }
        *ptr = p;
@@ -709,7 +709,7 @@ static uae_u8 *ioctl_command_toc (int unitnum)
 
        if (!open_createfile (unitnum, 0))
                return 0;
-       gui_cd_led (unitnum, 1);
+       gui_flicker_led (LED_CD, unitnum, 1);
        while (cnt-- > 0) {
                seterrormode (unitnum);
                if (!DeviceIoControl (ciw32[unitnum].h, IOCTL_CDROM_READ_TOC, NULL, 0, toc, sizeof(CDROM_TOC), &len, NULL)) {
@@ -758,7 +758,7 @@ static uae_u8 *ioctl_command_toc (int unitnum)
                p[10] = toc->TrackData[i].Address[3];
                p += 11;
        }
-       gui_cd_led (unitnum, 1);
+       gui_flicker_led (LED_CD, unitnum, 1);
        return ciw32[unitnum].tempbuffer;
 }
 
index f487b19acb8cd712bc23b3474074ed9ad5d5823e..193d63aba6fb28f942e0467c35d23c26cff82430 100644 (file)
@@ -72,7 +72,7 @@ static int doscsi (int unitnum, SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER *swb, int *
                scsi_log_before (swb->spt.Cdb, swb->spt.CdbLength,
                        swb->spt.DataIn == SCSI_IOCTL_DATA_OUT ? swb->spt.DataBuffer : 0,swb->spt.DataTransferLength);
        }
-       gui_cd_led (unitnum, 1);
+       gui_flicker_led (LED_CD, unitnum, 1);
        swb->spt.ScsiStatus = 0;
        if (di->bus >= 0) {
                swb->spt.PathId = di->path;
@@ -98,7 +98,7 @@ static int doscsi (int unitnum, SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER *swb, int *
                swb->spt.SenseInfoLength = 0; /* 0 and 1 = success, not error.. */
        if (swb->spt.SenseInfoLength > 0)
                return 0;
-       gui_cd_led (unitnum, 1);
+       gui_flicker_led (LED_CD, unitnum, 1);
        return status;
 }
 
index 5500b244c2de67ac411f13ab823d4e29ae7e53d4..d83ab01801594b4b43f69dfa018fcfb13ef6fa8d 100644 (file)
@@ -11,163 +11,164 @@ static PROCESS_INFORMATION pi;
 
 static DWORD WINAPI pipethread (LPVOID pipewr)
 {
-    TCHAR buff[256];
-    DWORD read, wrote;
-    HANDLE pipewrite = (HANDLE)pipewr;
-
-    while (runthread) {
-       read = 0;
-       ReadConsole (stdin_save, buff, 1, &read, NULL);
-       buff[read] = 0;
-       if (read > 0) {
-           if (!WriteFile (pipewrite, buff, read * sizeof (TCHAR), &wrote, NULL)) {
-               if (GetLastError () == ERROR_NO_DATA)
-                   break;
-           }
+       TCHAR buff[256];
+       DWORD read, wrote;
+       HANDLE pipewrite = (HANDLE)pipewr;
+
+       while (runthread) {
+               read = 0;
+               ReadConsole (stdin_save, buff, 1, &read, NULL);
+               buff[read] = 0;
+               if (read > 0) {
+                       if (!WriteFile (pipewrite, buff, read * sizeof (TCHAR), &wrote, NULL)) {
+                               if (GetLastError () == ERROR_NO_DATA)
+                                       break;
+                       }
+               }
        }
-    }
-    return 0;
+       return 0;
 }
 
 static void HandleOutput (HANDLE piperead)
 {
-    TCHAR buffer[256];
-    DWORD read, wrote;
-
-    for (;;) {
-       read = 0;
-       if (!ReadFile (piperead, buffer, sizeof buffer, &read, NULL)) {
-           if (GetLastError () == ERROR_BROKEN_PIPE)
-               break;
-       }
-       if (read > 0) {
-           WriteConsole (stdout_save, buffer, read / sizeof (TCHAR), &wrote, NULL);
+       TCHAR buffer[256];
+       DWORD read, wrote;
+
+       for (;;) {
+               read = 0;
+               if (!ReadFile (piperead, buffer, sizeof buffer, &read, NULL)) {
+                       if (GetLastError () == ERROR_BROKEN_PIPE)
+                               break;
+               }
+               if (read > 0) {
+                       WriteConsole (stdout_save, buffer, read / sizeof (TCHAR), &wrote, NULL);
+               }
        }
-    }
 }
 
 static BOOL WINAPI ctrlhandler (DWORD type)
 {
-    if (pi.hProcess)
-       TerminateProcess (pi.hProcess, 0);
-    ExitProcess (0);
-    return TRUE;
+       if (pi.hProcess)
+               TerminateProcess (pi.hProcess, 0);
+       ExitProcess (0);
+       return TRUE;
 }
 
 #define conpar L"-console"
 
 int wmain (int argc, wchar_t *argv[], wchar_t *envp[])
 {
-    CONSOLE_SCREEN_BUFFER_INFO csbi;
-    STARTUPINFO si;
-    TCHAR *cmd, *parms2;
-    int len, parmlen, i;
-    HANDLE cp;
-    HANDLE out_rd = NULL, out_wr = NULL, out_rd_tmp = NULL;
-    HANDLE in_rd = NULL, in_wr = NULL, in_wr_tmp = NULL;
-    HANDLE err_wr;
-    DWORD tid;
-    HANDLE thread;
-    SECURITY_ATTRIBUTES sa;
-
-    len = _tcslen (argv[0]);
-    if (len < 4)
-       return 0;
-    cmd = malloc ((len + 4 + 1) * sizeof (TCHAR));
-    _tcscpy (cmd, argv[0]);
-    if (_tcsicmp (cmd + len - 4, L".com"))
-       _tcscat (cmd + len, L".exe");
-    else
-       _tcscpy (cmd + len - 4, L".exe");
-
-    parmlen = 0;
-    for (i = 1; i < argc; i++) {
-       if (parmlen > 0)
-           parmlen ++;
-       parmlen += 1 + _tcslen (argv[i]) + 1;
-    }
-    parms2 = malloc ((_tcslen (cmd) + 1 + parmlen + 1 + _tcslen (conpar) + 1) * sizeof (TCHAR));
-    _tcscpy (parms2, cmd);
-    _tcscat (parms2, L" ");
-    _tcscat (parms2, conpar);
-    for (i = 1; i < argc; i++) {
-       int isspace = 0;
+       CONSOLE_SCREEN_BUFFER_INFO csbi;
+       STARTUPINFO si;
+       TCHAR *cmd, *parms2;
+       int len, parmlen, i;
+       HANDLE cp;
+       HANDLE out_rd = NULL, out_wr = NULL, out_rd_tmp = NULL;
+       HANDLE in_rd = NULL, in_wr = NULL, in_wr_tmp = NULL;
+       HANDLE err_wr;
+       DWORD tid;
+       HANDLE thread;
+       SECURITY_ATTRIBUTES sa;
+
+       len = _tcslen (argv[0]);
+       if (len < 4)
+               return 0;
+       cmd = malloc ((len + 4 + 1) * sizeof (TCHAR));
+       _tcscpy (cmd, argv[0]);
+       if (_tcsicmp (cmd + len - 4, L".com"))
+               _tcscat (cmd + len, L".exe");
+       else
+               _tcscpy (cmd + len - 4, L".exe");
+
+       parmlen = 0;
+       for (i = 1; i < argc; i++) {
+               if (parmlen > 0)
+                       parmlen ++;
+               parmlen += 1 + _tcslen (argv[i]) + 1;
+       }
+       parms2 = malloc ((_tcslen (cmd) + 1 + parmlen + 1 + _tcslen (conpar) + 1) * sizeof (TCHAR));
+       _tcscpy (parms2, cmd);
        _tcscat (parms2, L" ");
-       if (_tcschr (argv[i], ' '))
-           isspace = 1;
-       if (isspace)
-           _tcscat (parms2, L"\"");
-       _tcscat (parms2, argv[i]);
-       if (isspace)
-           _tcscat (parms2, L"\"");
-    }
-       
-    cp = GetCurrentProcess ();
-    sa.nLength = sizeof sa;
-    sa.bInheritHandle = TRUE;
-    sa.lpSecurityDescriptor = NULL;
-
-    stdout_save = GetStdHandle (STD_OUTPUT_HANDLE);
-    stdin_save = GetStdHandle (STD_INPUT_HANDLE);
-    stderr_save = GetStdHandle (STD_ERROR_HANDLE);
-
-    SetConsoleMode (stdin_save, ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_PROCESSED_OUTPUT);
-    SetConsoleCP (65001);
-    SetConsoleOutputCP (65001);
-    if (GetConsoleScreenBufferInfo (stdout_save, &csbi)) {
-       if (csbi.dwMaximumWindowSize.Y < 900) {
-           csbi.dwMaximumWindowSize.Y = 900;
-           SetConsoleScreenBufferSize (stdout_save, csbi.dwMaximumWindowSize);
+       _tcscat (parms2, conpar);
+       for (i = 1; i < argc; i++) {
+               int isspace = 0;
+               _tcscat (parms2, L" ");
+               if (_tcschr (argv[i], ' '))
+                       isspace = 1;
+               if (isspace)
+                       _tcscat (parms2, L"\"");
+               _tcscat (parms2, argv[i]);
+               if (isspace)
+                       _tcscat (parms2, L"\"");
        }
-    }
 
-    CreatePipe (&out_rd_tmp, &out_wr, &sa, 0);
-    CreatePipe (&in_rd, &in_wr_tmp, &sa, 0);
+       cp = GetCurrentProcess ();
+       sa.nLength = sizeof sa;
+       sa.bInheritHandle = TRUE;
+       sa.lpSecurityDescriptor = NULL;
+
+       stdout_save = GetStdHandle (STD_OUTPUT_HANDLE);
+       stdin_save = GetStdHandle (STD_INPUT_HANDLE);
+       stderr_save = GetStdHandle (STD_ERROR_HANDLE);
+
+       //SetConsoleMode (stdin_save, ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_PROCESSED_OUTPUT);
+       SetConsoleMode (stdin_save, ENABLE_PROCESSED_INPUT|ENABLE_PROCESSED_OUTPUT);
+       SetConsoleCP (65001);
+       SetConsoleOutputCP (65001);
+       if (GetConsoleScreenBufferInfo (stdout_save, &csbi)) {
+               if (csbi.dwMaximumWindowSize.Y < 900) {
+                       csbi.dwMaximumWindowSize.Y = 900;
+                       SetConsoleScreenBufferSize (stdout_save, csbi.dwMaximumWindowSize);
+               }
+       }
+
+       CreatePipe (&out_rd_tmp, &out_wr, &sa, 0);
+       CreatePipe (&in_rd, &in_wr_tmp, &sa, 0);
 
-    DuplicateHandle (cp, out_wr, cp, &err_wr, 0, TRUE, DUPLICATE_SAME_ACCESS);
-    DuplicateHandle (cp, out_rd_tmp, cp, &out_rd, 0, FALSE, DUPLICATE_SAME_ACCESS);
-    DuplicateHandle (cp, in_wr_tmp, cp, &in_wr, 0, FALSE, DUPLICATE_SAME_ACCESS);
+       DuplicateHandle (cp, out_wr, cp, &err_wr, 0, TRUE, DUPLICATE_SAME_ACCESS);
+       DuplicateHandle (cp, out_rd_tmp, cp, &out_rd, 0, FALSE, DUPLICATE_SAME_ACCESS);
+       DuplicateHandle (cp, in_wr_tmp, cp, &in_wr, 0, FALSE, DUPLICATE_SAME_ACCESS);
 
-    CloseHandle (out_rd_tmp);
-    CloseHandle (in_wr_tmp);
+       CloseHandle (out_rd_tmp);
+       CloseHandle (in_wr_tmp);
 
-    memset (&si, 0, sizeof si);
-    si.cb = sizeof si;
-    si.dwFlags = STARTF_USESTDHANDLES;
-    si.hStdInput = in_rd;
-    si.hStdOutput = out_wr;
-    si.hStdError = err_wr;
+       memset (&si, 0, sizeof si);
+       si.cb = sizeof si;
+       si.dwFlags = STARTF_USESTDHANDLES;
+       si.hStdInput = in_rd;
+       si.hStdOutput = out_wr;
+       si.hStdError = err_wr;
 
-    SetConsoleCtrlHandler (&ctrlhandler, TRUE);
+       SetConsoleCtrlHandler (&ctrlhandler, TRUE);
 
-    if (!CreateProcess (cmd, parms2,
-       NULL, NULL, TRUE,
-       CREATE_SUSPENDED | CREATE_NEW_CONSOLE | GetPriorityClass (GetCurrentProcess ()),
-       NULL, NULL, &si, &pi)) {
-           _tprintf (L"CreateProcess(%s) failed\n", cmd);
-           goto end;
-    }
+       if (!CreateProcess (cmd, parms2,
+               NULL, NULL, TRUE,
+               CREATE_SUSPENDED | CREATE_NEW_CONSOLE | GetPriorityClass (GetCurrentProcess ()),
+               NULL, NULL, &si, &pi)) {
+                       _tprintf (L"CreateProcess(%s) failed\n", cmd);
+                       goto end;
+       }
 
-    CloseHandle (out_wr);
-    CloseHandle (in_rd);
-    CloseHandle (err_wr);
+       CloseHandle (out_wr);
+       CloseHandle (in_rd);
+       CloseHandle (err_wr);
 
-    thread = CreateThread (NULL, 0, pipethread, (LPVOID)in_wr, 0, &tid);
+       thread = CreateThread (NULL, 0, pipethread, (LPVOID)in_wr, 0, &tid);
 
-    ResumeThread (pi.hThread);
+       ResumeThread (pi.hThread);
 
-    HandleOutput (out_rd);
-    runthread = 0;
-    CloseHandle (stdin_save);
-    WaitForSingleObject (thread, INFINITE);
+       HandleOutput (out_rd);
+       runthread = 0;
+       CloseHandle (stdin_save);
+       WaitForSingleObject (thread, INFINITE);
 
-    CloseHandle (out_rd);
-    CloseHandle (in_wr);
+       CloseHandle (out_rd);
+       CloseHandle (in_wr);
 
-    CloseHandle (pi.hProcess);
-    CloseHandle (pi.hThread);
+       CloseHandle (pi.hProcess);
+       CloseHandle (pi.hThread);
 end:
-    free (parms2);
-    free (cmd);
-    return 0;
+       free (parms2);
+       free (cmd);
+       return 0;
 }
index 036370f5cf4cb6fef98ef1026a692336c07ac00a..36f25212cb9101b7a5e2f9029bae53fe588a6a01 100644 (file)
@@ -1757,7 +1757,6 @@ static LRESULT CALLBACK DebuggerProc (HWND hDlg, UINT message, WPARAM wParam, LP
                }
        case WM_CLOSE:
                DestroyWindow(hDlg);
-               uae_quit();
                return TRUE;
        case WM_DESTROY:
                {
@@ -1787,6 +1786,7 @@ static LRESULT CALLBACK DebuggerProc (HWND hDlg, UINT message, WPARAM wParam, LP
                        DeleteFromHistory(histcount);
                        DeleteObject(udfont);
                        consoleopen = 0;
+                       deactivate_debugger ();
                        return TRUE;
                }
        case WM_GETMINMAXINFO:
index f2aa98dec6fa55376c384298482cac6331da09cb..05bc53949ce385d182895e4e1843d232457356a6 100644 (file)
@@ -605,6 +605,7 @@ static int psEffect_End (void)
 static LPDIRECT3DTEXTURE9 createtext (int *ww, int *hh, D3DFORMAT format)
 {
        LPDIRECT3DTEXTURE9 t;
+       D3DLOCKED_RECT locked;
        HRESULT hr;
        int w, h;
 
@@ -659,9 +660,21 @@ static LPDIRECT3DTEXTURE9 createtext (int *ww, int *hh, D3DFORMAT format)
                        D3D_ErrorString (hr), w, h, format);
                return 0;
        }
-
        *ww = w;
        *hh = h;
+       hr = IDirect3DTexture9_LockRect (t, 0, &locked, NULL, 0);
+       if (SUCCEEDED (hr)) {
+               int y;
+               int wb;
+               wb = w * 4;
+               if (wb > locked.Pitch)
+                       wb = w * 2;
+               if (wb > locked.Pitch)
+                       wb = w * 1;
+               for (y = 0; y < h; y++)
+                       memset ((uae_u8*)locked.pBits + y * locked.Pitch, 0, wb);
+               IDirect3DTexture9_UnlockRect (t, 0);
+       }
        return t;
 }
 
@@ -723,7 +736,7 @@ static void updateleds (void)
                }
                done = 1;
        }
-       hr = IDirect3DTexture9_LockRect (ledtexture, 0, &locked, NULL, D3DLOCK_DISCARD);
+       hr = IDirect3DTexture9_LockRect (ledtexture, 0, &locked, NULL, 0);
        if (FAILED (hr)) {
                write_log (L"SL IDirect3DTexture9_LockRect failed: %s\n", D3D_ErrorString (hr));
                return;
@@ -967,7 +980,7 @@ static void createscanlines (int force)
        l1 = (currprefs.gfx_filter_scanlineratio >> 0) & 15;
        l2 = (currprefs.gfx_filter_scanlineratio >> 4) & 15;
 
-       hr = IDirect3DTexture9_LockRect (sltexture, 0, &locked, NULL, D3DLOCK_DISCARD);
+       hr = IDirect3DTexture9_LockRect (sltexture, 0, &locked, NULL, 0);
        if (FAILED (hr)) {
                write_log (L"SL IDirect3DTexture9_LockRect failed: %s\n", D3D_ErrorString (hr));
                return;
@@ -1358,7 +1371,7 @@ void D3D_clear (void)
        if (FAILED (hr))
                return;
        for (i = 0; i < 2; i++) {
-               IDirect3DDevice9_Clear (d3ddev, 0L, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0L);
+               IDirect3DDevice9_Clear (d3ddev, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 0, 0);
                IDirect3DDevice9_Present (d3ddev, NULL, NULL, NULL, NULL);
        }
 }
@@ -1380,7 +1393,7 @@ static void D3D_render22 (int clear)
        if (clear || needclear) {
                int i;
                for (i = 0; i < 2; i++) {
-                       hr = IDirect3DDevice9_Clear (d3ddev, 0L, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0L );
+                       hr = IDirect3DDevice9_Clear (d3ddev, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 0, 0);
                        if (FAILED (hr))
                                write_log (L"IDirect3DDevice9_Clear() failed: %s\n", D3D_ErrorString (hr));
                        IDirect3DDevice9_Present (d3ddev, NULL, NULL, NULL, NULL);
@@ -1410,8 +1423,7 @@ pass2:
                        if (lpRenderTarget)
                                IDirect3DSurface9_Release (lpRenderTarget);
                        uPasses = 0;
-                       if (!psEffect_Begin ((lpWorkTexture == lpWorkTexture1) ?
-psEffect_PreProcess1 : psEffect_PreProcess2, &uPasses))
+                       if (!psEffect_Begin ((lpWorkTexture == lpWorkTexture1) ? psEffect_PreProcess1 : psEffect_PreProcess2, &uPasses))
                                           return;
                        for (uPass = 0; uPass < uPasses; uPass++) {
                                if (!psEffect_BeginPass (uPass))
index 0c836dc0acc4c86b88bc00037f6368afea4922b9..4f4bfccdf272b61ecebb287c5a62938b442e6729 100644 (file)
@@ -315,7 +315,7 @@ static int fsdb_name_invalid_2 (const TCHAR *n)
 
        s1[0] = 0;
        s2[0] = 0;
-       ua_fs_copy (s1, MAX_DPATH, n);
+       ua_fs_copy (s1, MAX_DPATH, n, -1);
        au_fs_copy (s2, MAX_DPATH, s1);
        if (_tcsicmp (s2, n) != 0)
                return 1;
index 62c703f983620db5985130d15b7ea9219381a636..9db90110b6627d0bd8f8498897fe7ea2d2ad1452 100644 (file)
@@ -204,6 +204,7 @@ static int ctrlpressed (void)
 }
 
 static int capslockstate;
+static int host_capslockstate, host_numlockstate, host_scrolllockstate;
 
 int getcapslockstate (void)
 {
@@ -216,12 +217,20 @@ void setcapslockstate (int state)
 
 int getcapslock (void)
 {
-       int newstate;
-
-       newstate = GetKeyState (VK_CAPITAL) & 1; // this returns bogus state if caps change when in exclusive mode..
-       if (newstate != capslockstate)
-               inputdevice_translatekeycode (0, DIK_CAPITAL, newstate);
-       capslockstate = newstate;
+       int capstable[7];
+
+       // this returns bogus state if caps change when in exclusive mode..
+       host_capslockstate = GetKeyState (VK_CAPITAL) & 1;
+       host_numlockstate = GetKeyState (VK_NUMLOCK) & 1;
+       host_scrolllockstate = GetKeyState (VK_SCROLL) & 1;
+       capstable[0] = DIK_CAPITAL;
+       capstable[1] = host_capslockstate;
+       capstable[2] = DIK_NUMLOCK;
+       capstable[3] = host_numlockstate;
+       capstable[4] = DIK_SCROLL;
+       capstable[5] = host_scrolllockstate;
+       capstable[6] = 0;
+       capslockstate = inputdevice_synccapslock (capslockstate, capstable);
        return capslockstate;
 }
 
@@ -347,13 +356,26 @@ static int np[] = { DIK_NUMPAD0, 0, DIK_NUMPADPERIOD, 0, DIK_NUMPAD1, 1, DIK_NUM
 void my_kbd_handler (int keyboard, int scancode, int newstate)
 {
        int code = 0;
+       int scancode_new;
        static int swapperdrive = 0;
 
        if (scancode == specialkeycode ())
                return;
 
+       if (scancode == DIK_F11 && currprefs.win32_ctrl_F11_is_quit && ctrlpressed ())
+               code = AKS_QUIT;
+
+       scancode_new = scancode;
+       if (!specialpressed () && inputdevice_iskeymapped (keyboard, scancode))
+               scancode = 0;
+       // GUI must be always available
+       if (scancode_new == DIK_F12 && currprefs.win32_guikey < 0)
+               scancode = scancode_new;
+       if (scancode_new == currprefs.win32_guikey && scancode_new != DIK_F12)
+               scancode = scancode_new;
+       
        //write_log ( "keyboard = %d scancode = 0x%02x state = %d\n", keyboard, scancode, newstate );
-       if (newstate) {
+       if (newstate && code == 0) {
 
                if (scancode == DIK_F12 || scancode == currprefs.win32_guikey) {
                        if (ctrlpressed ()) {
@@ -370,12 +392,6 @@ void my_kbd_handler (int keyboard, int scancode, int newstate)
 
                switch (scancode)
                {
-               case DIK_F11:
-                       if (currprefs.win32_ctrl_F11_is_quit) {
-                               if (ctrlpressed ())
-                                       code = AKS_QUIT;
-                       }
-                       break;
                case DIK_F1:
                case DIK_F2:
                case DIK_F3:
@@ -505,11 +521,20 @@ void my_kbd_handler (int keyboard, int scancode, int newstate)
                return;
        }
 
-       if (!specialpressed () && scancode == DIK_CAPITAL) {
-               if (!newstate)
-                       return;
-               capslockstate = capslockstate ? 0 : 1;
-               newstate = capslockstate;
+       scancode = scancode_new;
+       if (!specialpressed () && newstate) {
+               if (scancode == DIK_CAPITAL) {
+                       host_capslockstate = host_capslockstate ? 0 : 1;
+                       capslockstate = host_capslockstate;
+               }
+               if (scancode == DIK_NUMLOCK) {
+                       host_numlockstate = host_numlockstate ? 0 : 1;
+                       capslockstate = host_numlockstate;
+               }
+               if (scancode == DIK_SCROLL) {
+                       host_scrolllockstate = host_scrolllockstate ? 0 : 1;
+                       capslockstate = host_scrolllockstate;
+               }
        }
 
        if (currprefs.input_selected_setting == 0) {
@@ -537,3 +562,18 @@ void keyboard_settrans (void)
        inputdevice_setkeytranslation (keytrans);
 }
 
+
+int target_checkcapslock (int scancode, int *state)
+{
+       if (scancode != DIK_CAPITAL && scancode != DIK_NUMLOCK && scancode != DIK_SCROLL)
+               return 0;
+       if (*state == 0)
+               return -1;
+       if (scancode == DIK_CAPITAL)
+               *state = host_capslockstate;
+       if (scancode == DIK_NUMLOCK)
+               *state = host_numlockstate;
+       if (scancode == DIK_SCROLL)
+               *state = host_scrolllockstate;
+       return 1;
+}
index 7502232a23ef5a6755dd0ffd5e44c8e793e1feed..9203c14da7c226d5e1792f35c3a7fbd06d0d05f1 100644 (file)
@@ -280,8 +280,10 @@ int uae_start_thread (TCHAR *name, void *(*f)(void *), void *arg, uae_thread_id
        thp->arg = arg;
        hThread = (HANDLE)_beginthreadex (NULL, 0, thread_init, thp, 0, &foo);
        if (hThread) {
-               if (name)
+               if (name) {
                        write_log (L"Thread '%s' started (%d)\n", name, hThread);
+                       SetThreadPriority (hThread, THREAD_PRIORITY_HIGHEST);
+               }
        } else {
                result = 0;
                write_log (L"Thread '%s' failed to start!?\n", name ? name : L"<unknown>");
@@ -305,6 +307,7 @@ DWORD_PTR cpu_affinity = 1, cpu_paffinity = 1;
 
 void uae_set_thread_priority (uae_thread_id *tid, int pri)
 {
+#if 0
        int pri2;
        HANDLE th;
 
@@ -315,11 +318,19 @@ void uae_set_thread_priority (uae_thread_id *tid, int pri)
        pri2 = GetThreadPriority (th);
        if (pri2 == THREAD_PRIORITY_ERROR_RETURN)
                pri2 = 0;
+       if (pri > 0)
+               pri2 = THREAD_PRIORITY_HIGHEST;
+       else
+               pri2 = THREAD_PRIORITY_ABOVE_NORMAL;
        pri2 += pri;
        if (pri2 > 1)
                pri2 = 1;
        if (pri2 < -1)
                pri2 = -1;
        SetThreadPriority (th, pri2);
+#endif
+       if (!SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_HIGHEST))
+               SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
+
 }
 
diff --git a/od-win32/prowizard/prowizard.vcproj b/od-win32/prowizard/prowizard.vcproj
new file mode 100644 (file)
index 0000000..95e41ac
--- /dev/null
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9,00"
+       Name="prowizard"
+       ProjectGUID="{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}"
+       RootNamespace="prowizard"
+       Keyword="Win32Proj"
+       TargetFrameworkVersion="196613"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+                       IntermediateDirectory="$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               DebugInformationFormat="4"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+                       IntermediateDirectory="$(ConfigurationName)"
+                       ConfigurationType="4"
+                       CharacterSet="1"
+                       WholeProgramOptimization="1"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               EnableIntrinsicFunctions="true"
+                               WholeProgramOptimization="false"
+                               AdditionalIncludeDirectories="..\..\prowizard\include;..\..\include"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+                               RuntimeLibrary="0"
+                               BufferSecurityCheck="false"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               DebugInformationFormat="3"
+                               CallingConvention="2"
+                               CompileAs="1"
+                               DisableSpecificWarnings="4996"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile="c:\dev\lib\prowizard.lib"
+                               ModuleDefinitionFile=""
+                               ExportNamedFunctions="prowizard_search"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+                       >
+                       <File
+                               RelativePath="..\..\prowizard\misc\misc.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\prowizard\prowiz.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\..\prowizard\misc\testbag.c"
+                               >
+                       </File>
+                       <Filter
+                               Name="Rippers"
+                               >
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\AC1D_packer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\AMOS-MusicBank.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\AMOS-PowerPackerBank.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\BP-Soundmonitor.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\BSI-FutureComposer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Bytekiller.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ChipTracker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Crunchmania-Address.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Crunchmania-Simple.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\datacrunchers.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\DefjamCruncher32-pro.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\DigiBooster17.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\DigitalIllusion.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\DoubleAction.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Dragpack100.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Dragpack252.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\EurekaPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\FastTracker2.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\FC-M-Packer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\FuchsTracker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\FutureComposer13.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\FutureComposer14.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\FuzzacPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\GameMusicCreator.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\GNUPacker12.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\GnuPlayer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\GPMO.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\HeatseekerMC10.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\HornetPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\HQC2.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\JamCracker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\KefrensSoundMachine.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\MasterCruncher30-Address.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\MaxPacker12.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\MED-Octamed.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\MegaCruncher-Object.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\MegaCruncher.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\MOD-compatible.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ModuleProtector.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Mugician.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Newtron.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NewtronOld.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NoiseFromHeaven.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NoisePacker1.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NoisePacker2.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NoisePacker3.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NoiseRunner.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\NovoTrade.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PhaPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PolkaPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PowerMusic.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PowerPacker23.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PowerPacker30.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PowerPacker40-library.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\PowerPacker40.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Promizer01.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Promizer10c.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Promizer18a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Promizer20.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Promizer40.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ProPacker10.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ProPacker21.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ProPacker30.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Prorunner10.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\Prorunner20.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\QuadraComposer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\RelokIt10.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SGT-Packer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\skizzo.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SkytPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SoundFX.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SoundTracker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SoundTracker26.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SpikeCruncher.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StartrekkerPack.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StimPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneArtsPlayer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneCracker270.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneCracker299.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneCracker299b.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneCracker299d.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneCracker300.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\StoneCracker310.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SuperCruncher27.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\SyncroPacker46.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TetraPack102.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TetraPack21.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TetraPack22.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TheDarkDemon.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer22a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer30a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer40.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer41a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer50a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer60a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ThePlayer61a.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TimeCruncher17.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TitanicsPlayer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TMK.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TNMCruncher.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TrackerPacker1.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TrackerPacker2.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TrackerPacker3.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TryItCruncher101.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\TurboSqueezer61.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\UnicTracker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\UnicTracker2.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\WantonPacker.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\XannPlayer.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\prowizard\rippers\ZenPacker.c"
+                                       >
+                               </File>
+                       </Filter>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+                       >
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+                       >
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
index 8855e504cbc12644f8b2e6a44a92111df8891a7b..65614471010d5aea620a774e93dc5664098a39e8 100644 (file)
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource."
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (Neutral) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_APPICON             ICON                    "winuae.ico"
-IDI_FLOPPY              ICON                    "35floppy.ico"
-IDI_ABOUT               ICON                    "amigainfo.ico"
-IDI_HARDDISK            ICON                    "Drive.ico"
-IDI_CPU                 ICON                    "cpu.ico"
-IDI_GAMEPORTS           ICON                    "joystick.ico"
-IDI_IOPORTS             ICON                    "joystick.ico"
-IDI_INPUT               ICON                    "joystick.ico"
-IDI_MISC1               ICON                    "misc.ico"
-IDI_MISC2               ICON                    "misc.ico"
-IDI_MOVE_UP             ICON                    "move_up.ico"
-IDI_MOVE_DOWN           ICON                    "move_dow.ico"
-IDI_AVIOUTPUT           ICON                    "avioutput.ico"
-IDI_DISK                ICON                    "Drive.ico"
-IDI_FOLDER              ICON                    "folder.ico"
-IDI_SOUND               ICON                    "sound.ico"
-IDI_DISPLAY             ICON                    "screen.ico"
-IDI_ROOT                ICON                    "root.ico"
-IDI_MEMORY              ICON                    "chip.ico"
-IDI_QUICKSTART          ICON                    "quickstart.ico"
-IDI_PATHS               ICON                    "paths.ico"
-IDI_DISKIMAGE           ICON                    "diskimage.ico"
-IDI_PORTS               ICON                    "port.ico"
-IDI_CONFIGFILE          ICON                    "configfile.ico"
-IDI_FILE                ICON                    "file.ico"
-IDI_EXPANSION           ICON                    "expansion.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Accelerator
-//
-
-IDR_DBGACCEL ACCELERATORS 
-BEGIN
-    VK_F1,          ID_DBG_PAGE1,           VIRTKEY, NOINVERT
-    VK_F2,          ID_DBG_PAGE2,           VIRTKEY, NOINVERT
-    VK_F3,          ID_DBG_PAGE3,           VIRTKEY, NOINVERT
-    VK_F4,          ID_DBG_PAGE4,           VIRTKEY, NOINVERT
-    VK_F5,          ID_DBG_PAGE5,           VIRTKEY, NOINVERT
-    VK_F6,          ID_DBG_PAGE6,           VIRTKEY, NOINVERT
-    VK_F7,          ID_DBG_PAGE7,           VIRTKEY, NOINVERT
-    VK_F8,          ID_DBG_PAGE8,           VIRTKEY, NOINVERT
-    VK_F9,          ID_DBG_PAGE9,           VIRTKEY, NOINVERT
-    VK_F11,         ID_DBG_STEP_OVER,       VIRTKEY, NOINVERT
-    VK_F12,         ID_DBG_STEP_INTO,       VIRTKEY, NOINVERT
-    VK_DOWN,        IDC_DBG_MEMDOWN,        VIRTKEY, ALT, NOINVERT
-    VK_RIGHT,       IDC_DBG_MEMDOWNFAST,    VIRTKEY, ALT, NOINVERT
-    VK_UP,          IDC_DBG_MEMUP,          VIRTKEY, ALT, NOINVERT
-    VK_LEFT,        IDC_DBG_MEMUPFAST,      VIRTKEY, ALT, NOINVERT
-    "H",            IDC_DBG_HELP,           VIRTKEY, ALT, NOINVERT
-    "P",            IDC_DBG_MEMTOPC,        VIRTKEY, ALT, NOINVERT
-    "A",            IDC_DBG_AUTOSET,        VIRTKEY, ALT, NOINVERT
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_KICKSTART DIALOGEX 0, 0, 300, 176
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_CONTEXTHELP
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "System ROM Settings",-1,5,0,290,93
-    LTEXT           "Main ROM file:",IDC_ROMTEXT,14,13,263,10
-    COMBOBOX        IDC_ROMFILE,12,26,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "...",IDC_KICKCHOOSER,280,25,10,15
-    LTEXT           "Extended ROM file:",IDC_ROMFILE2TEXT,14,43,263,10
-    COMBOBOX        IDC_ROMFILE2,12,56,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "...",IDC_ROMCHOOSER2,280,55,10,15
-    CONTROL         "MapROM emulation [] Creates a BlizKick-compatible memory area.",IDC_MAPROM,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,95,77,87,10
-    CONTROL         "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,77,87,10
-    GROUPBOX        "Miscellaneous",-1,5,99,290,75
-    LTEXT           "Cartridge ROM file:",IDC_FLASHTEXT2,12,110,265,10
-    COMBOBOX        IDC_CARTFILE,12,123,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "...",IDC_CARTCHOOSER,280,122,10,15
-    LTEXT           "Flash RAM file:",IDC_FLASHTEXT,12,142,265,10
-    EDITTEXT        IDC_FLASHFILE,12,155,262,13,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_FLASHCHOOSER,280,154,10,15
-END
-
-IDD_DISPLAY DIALOGEX 0, 0, 300, 235
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Screen",IDC_SCREENRESTEXT,12,0,270,67,BS_LEFT
-    COMBOBOX        IDC_DISPLAYSELECT,59,10,215,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RESOLUTION,59,27,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_REFRESHRATE,187,27,87,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    EDITTEXT        IDC_XSIZE,59,48,48,12,ES_NUMBER
-    EDITTEXT        IDC_YSIZE,114,48,47,12,ES_NUMBER
-    GROUPBOX        "Settings",IDC_SETTINGSTEXT,12,73,199,137
-    CONTROL         "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,125,92,10
-    LTEXT           "Refresh:",IDC_REFRESHTEXT,18,173,28,8
-    CONTROL         "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,168,75,20
-    EDITTEXT        IDC_RATETEXT,124,172,77,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Centering",IDC_STATIC,221,73,61,49
-    CONTROL         "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,87,49,10
-    CONTROL         "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,103,49,10
-    GROUPBOX        "Line Mode",IDC_LINEMODE,222,126,61,84
-    CONTROL         "Normal",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,231,148,44,10
-    CONTROL         "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,164,45,10
-    CONTROL         "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,180,46,10
-    COMBOBOX        IDC_DA_MODE,20,218,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,214,101,20
-    LTEXT           "FPS adj.:",IDC_REFRESH2TEXT,16,193,32,8
-    CONTROL         "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,188,127,20
-    EDITTEXT        IDC_RATE2TEXT,175,192,26,12,ES_CENTER | ES_READONLY
-    COMBOBOX        IDC_RESOLUTIONDEPTH,134,27,46,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Filtered low resolution",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,125,89,10
-    COMBOBOX        IDC_SCREENMODE_NATIVE,100,85,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SCREENMODE_RTG,100,103,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Native mode:",IDC_STATIC,19,85,59,15,SS_CENTERIMAGE
-    RTEXT           "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE
-    PUSHBUTTON      "Reset to defaults",IDC_DA_RESET,212,218,73,14
-    RTEXT           "Resolution:",IDC_STATIC,27,152,59,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_LORES,100,152,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Remove interlace artifacts",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,139,99,10
-    RTEXT           "Windowed:",IDC_STATIC,17,46,40,15,SS_CENTERIMAGE
-    RTEXT           "Fullscreen:",IDC_STATIC,17,19,40,15,SS_CENTERIMAGE
-END
-
-IDD_MEMORY DIALOGEX 0, 0, 300, 158
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_CONTEXTHELP
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Memory Settings",-1,14,7,274,69
-    RTEXT           "Chip:",-1,24,26,20,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20
-    EDITTEXT        IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Slow:",-1,149,26,20,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20
-    EDITTEXT        IDC_SLOWRAM,243,25,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Fast:",IDC_FASTTEXT,24,51,20,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,47,50,20
-    EDITTEXT        IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Z3 Fast:",IDC_Z3TEXT,139,51,30,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20
-    EDITTEXT        IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "A3000/A4000 Advanced Memory Settings",-1,14,84,274,65
-    RTEXT           "Motherboard Fast RAM:",-1,40,100,129,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,96,59,20
-    EDITTEXT        IDC_MBRAM1,244,99,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Processor Slot Fast RAM:",-1,40,123,129,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,119,59,20
-    EDITTEXT        IDC_MBRAM2,244,122,34,12,ES_CENTER | ES_READONLY
-END
-
-IDD_CPU DIALOGEX 0, 0, 300, 241
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "CPU",IDC_STATIC,5,1,81,144,BS_LEFT
-    CONTROL         "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,15,63,10
-    CONTROL         "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,28,65,10
-    CONTROL         "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,41,63,10
-    CONTROL         "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,54,64,10
-    CONTROL         "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,67,66,10
-    CONTROL         "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,80,66,10
-    CONTROL         "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,107,73,8
-    CONTROL         "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,119,73,10
-    GROUPBOX        "CPU Emulation Speed",IDC_STATIC,90,3,205,92
-    CONTROL         "Fastest possible, but maintain chipset timing",IDC_CS_HOST,
-                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,95,18,195,10
-    CONTROL         "Match A500 speed",IDC_CS_68000,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,32,195,10
-    CONTROL         "Adjustable between CPU and chipset",IDC_CS_ADJUSTABLE,
-                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,46,195,10
-    CONTROL         "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,114,71,67,20
-    CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,219,71,69,20
-    GROUPBOX        "Advanced JIT Settings",IDC_STATIC,90,147,205,91
-    CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,140,161,115,20
-    EDITTEXT        IDC_CACHETEXT,255,166,30,12,ES_CENTER | ES_READONLY
-    CONTROL         "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,194,63,10
-    CONTROL         "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,208,63,10
-    CONTROL         "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,222,62,10
-    CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,194,62,10
-    CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,235,194,52,10
-    CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,208,52,10
-    CONTROL         "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,221,73,10
-    GROUPBOX        "FPU",IDC_STATIC,5,147,81,90,BS_LEFT
-    CONTROL         "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,94,73,8
-    CONTROL         "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,161,63,10
-    CONTROL         "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,63,10
-    CONTROL         "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,188,63,10
-    CONTROL         "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,202,63,10
-    RTEXT           "CPU Frequency",IDC_STATIC,105,119,51,10,SS_CENTERIMAGE
-    GROUPBOX        "Cycle-exact CPU Emulation Speed",IDC_STATIC,90,99,205,46
-    RTEXT           "CPU",IDC_STATIC,96,77,17,10,SS_CENTERIMAGE
-    RTEXT           "Chipset",IDC_STATIC,182,77,26,9,SS_CENTERIMAGE
-    RTEXT           "CPU Idle",IDC_STATIC,231,60,47,9,SS_CENTERIMAGE
-    RTEXT           "Cache size:",IDC_STATIC,95,167,42,10,SS_CENTERIMAGE
-    CONTROL         "68040 MMU [] 68040 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,132,73,10
-    COMBOBOX        IDC_CPU_FREQUENCY,165,118,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    EDITTEXT        IDC_CPU_FREQUENCY2,218,117,70,15
-END
-
-IDD_FLOPPY DIALOGEX 0, 0, 300, 240
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    COMBOBOX        IDC_DF0TEXT,2,22,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF0TYPE,115,6,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,8,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF0WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,4,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT0,253,4,30,15
-    PUSHBUTTON      "...",IDC_DF0,287,4,10,15
-    COMBOBOX        IDC_DF1TEXT,2,58,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF1TYPE,115,42,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,43,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF1WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,40,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT1,253,40,30,15
-    PUSHBUTTON      "...",IDC_DF1,287,40,10,15
-    COMBOBOX        IDC_DF2TEXT,2,93,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF2TYPE,115,77,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,77,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF2WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,75,9,15
-    PUSHBUTTON      "Eject",IDC_EJECT2,253,75,30,15
-    PUSHBUTTON      "...",IDC_DF2,287,75,10,15
-    COMBOBOX        IDC_DF3TEXT,2,128,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF3TYPE,115,112,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,113,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF3WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,111,9,15
-    PUSHBUTTON      "Eject",IDC_EJECT3,253,110,30,15
-    PUSHBUTTON      "...",IDC_DF3,287,109,10,15
-    GROUPBOX        "New Floppy Disk Image",IDC_SETTINGSTEXT,5,183,289,49
-    COMBOBOX        IDC_FLOPPYTYPE,12,197,64,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Create Standard Disk [] Creates a standard 880 or 1760 KB ADF disk image.",IDC_CREATE,81,196,97,15
-    PUSHBUTTON      "Create Custom Disk [] Creates a low level (MFM) ADF disk image (about 2MB). Useful for programs that use non-standard disk formats (for example some save disks or DOS-formatted floppies)",IDC_CREATE_RAW,187,196,101,15
-    GROUPBOX        "Floppy Drive Emulation Speed",IDC_SETTINGSTEXT2,5,144,289,35
-    CONTROL         "",IDC_FLOPPYSPD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,32,154,116,20
-    EDITTEXT        IDC_FLOPPYSPDTEXT,183,157,101,12,ES_CENTER | ES_READONLY
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE0,43,5,70,15,NOT WS_VISIBLE
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE1,43,40,70,15,NOT WS_VISIBLE
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE2,43,75,70,15,NOT WS_VISIBLE
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE3,43,110,70,15,NOT WS_VISIBLE
-    EDITTEXT        IDC_CREATE_NAME,81,215,97,13,ES_AUTOHSCROLL
-    RTEXT           "Disk label:",IDC_STATIC,15,216,52,10,SS_CENTERIMAGE
-    CONTROL         "DF0:",IDC_DF0ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,6,34,15
-    CONTROL         "DF1:",IDC_DF1ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,41,34,15
-    CONTROL         "DF2:",IDC_DF2ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,76,34,15
-    CONTROL         "DF3:",IDC_DF3ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,111,34,15
-END
-
-IDD_HARDDISK DIALOGEX 0, 0, 300, 237
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_CONTEXTHELP
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    CONTROL         "List1",IDC_VOLUMELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,0,290,167
-    PUSHBUTTON      "Add &Directory or Archive...",IDC_NEW_FS,10,171,103,15
-    PUSHBUTTON      "Add &Hardfile...",IDC_NEW_HF,130,171,74,15
-    PUSHBUTTON      "Add Ha&rd Drive...",IDC_NEW_HD,220,171,75,15
-    PUSHBUTTON      "Remove",IDC_REMOVE,235,193,60,15
-    PUSHBUTTON      "&Properties",IDC_EDIT,235,210,60,15
-    CONTROL         "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,192,100,10
-    CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,192,119,10
-    CONTROL         "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,203,121,10
-    CONTROL         "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,226,101,10
-    CONTROL         "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,215,100,10
-    CONTROL         "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,215,115,10
-    CONTROL         "Include removable drives..",IDC_MAPDRIVES_REMOVABLE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,203,100,10
-END
-
-IDD_SOUND DIALOGEX 0, 0, 300, 237
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    COMBOBOX        IDC_SOUNDCARDLIST,5,3,291,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Sound Emulation",IDC_SOUNDSETTINGS,5,20,120,85
-    CONTROL         "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,35,101,10
-    CONTROL         "Disabled, but emulated",IDC_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,48,102,10
-    CONTROL         "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,61,102,10
-    CONTROL         "Enabled, 100% accurate",IDC_SOUND3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,74,101,10
-    GROUPBOX        "Volume",IDC_STATIC,132,36,164,31
-    CONTROL         "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,44,105,20
-    EDITTEXT        IDC_SOUNDVOLUME2,247,47,40,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Sound Buffer Size",IDC_STATIC,132,73,164,31
-    CONTROL         "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,81,105,19
-    EDITTEXT        IDC_SOUNDBUFFERMEM,247,84,40,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,6,106,290,60
-    LTEXT           "Frequency:",IDC_SOUNDFREQTXT,11,140,53,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFREQ,13,149,51,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,209,140,77,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFILTER,209,149,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Channel mode:",IDC_SOUNDSTEREOTXT,11,116,57,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREO,13,125,122,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,209,116,75,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDINTERPOLATION,209,125,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,141,116,63,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREOSEP,142,125,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Stereo delay:",IDC_SOUNDSTEREOMIXTXT,141,140,63,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREOMIX,142,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Floppy Drive Sound Emulation",IDC_STATIC,6,172,220,60
-    CONTROL         "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,186,107,19
-    EDITTEXT        IDC_SOUNDDRIVEVOLUME2,124,188,40,12,ES_CENTER | ES_READONLY
-    COMBOBOX        IDC_SOUNDDRIVE,173,187,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SOUNDDRIVESELECT,18,209,202,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SOUNDSWAP,73,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Swap channels:",IDC_SOUNDSWAPTXT,74,140,61,8,SS_CENTERIMAGE
-    CONTROL         "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,89,103,10
-    CONTROL         "Exclusive mode",IDC_SOUND_EXCLUSIVE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,137,25,154,10
-    CONTROL         "DirectSound",IDC_SOUND_DS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,181,55,10
-    CONTROL         "WASAPI",IDC_SOUND_WASAPI,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,193,53,10
-    CONTROL         "OpenAL",IDC_SOUND_OPENAL,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,205,53,10
-    CONTROL         "PortAudio",IDC_SOUND_PORTAUDIO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,217,58,10
-    GROUPBOX        "Drivers",IDC_STATIC,230,172,66,60
-END
-
-IDD_LOADSAVE DIALOGEX 0, 0, 302, 241
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    CONTROL         "",IDC_CONFIGTREE,"SysTreeView32",TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,6,3,289,153,WS_EX_CLIENTEDGE
-    RTEXT           "Name:",IDC_STATIC,4,161,40,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITNAME,48,162,146,13,ES_AUTOHSCROLL
-    RTEXT           "Description:",IDC_STATIC,2,182,41,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITDESCRIPTION,48,183,146,13,ES_AUTOHSCROLL
-    RTEXT           "Link:",IDC_STATIC,4,204,40,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_CONFIGLINK,48,205,93,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,207,48,10
-    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED
-    CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,163,42,10
-    GROUPBOX        "Additional Information",IDC_STATIC,199,179,96,38,BS_LEFT
-    PUSHBUTTON      "View",IDC_VIEWINFO,208,195,37,15
-    PUSHBUTTON      "Set",IDC_SETINFO,250,195,37,15
-    PUSHBUTTON      "Load",IDC_QUICKLOAD,5,225,44,15
-    PUSHBUTTON      "Save",IDC_QUICKSAVE,54,225,44,15
-    PUSHBUTTON      "Load From...",IDC_LOAD,121,225,49,15
-    PUSHBUTTON      "Delete",IDC_DELETE,251,225,44,15
-    PUSHBUTTON      "Save As...",IDC_SAVE,175,225,44,15
-END
-
-IDD_IOPORTS DIALOGEX 0, 0, 300, 228
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Parallel Port",IDC_STATIC,5,2,291,86
-    RTEXT           "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_PRINTERLIST,49,15,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,114,51,58,12
-    RTEXT           "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,176,49,76,15,SS_NOTIFY | SS_CENTERIMAGE
-    EDITTEXT        IDC_PRINTERAUTOFLUSH,255,50,25,12,ES_NUMBER
-    RTEXT           "Type:",IDC_STATIC,15,33,21,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_PS_PARAMS,114,67,167,12,ES_AUTOHSCROLL
-    GROUPBOX        "Serial Port",IDC_STATIC,4,92,292,48
-    COMBOBOX        IDC_SERIAL,49,104,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,123,48,12
-    CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,123,55,12
-    RTEXT           "Out:",IDC_MIDI,10,154,34,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_MIDIOUTLIST,49,154,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "In:",IDC_MIDI2,10,174,29,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_MIDIINLIST,49,174,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,
-                    "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,123,65,12
-    CONTROL         "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,123,78,12
-    COMBOBOX        IDC_PRINTERTYPELIST,49,33,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Ghostscript extra parameters:",IDC_STATIC,10,66,102,15,SS_CENTERIMAGE
-    GROUPBOX        "MIDI",IDC_STATIC,5,143,291,51,BS_LEFT
-    GROUPBOX        "Protection Dongle",IDC_STATIC,5,197,292,30,BS_LEFT
-    COMBOBOX        IDC_DONGLELIST,50,208,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-END
-
-IDD_GAMEPORTS DIALOGEX 0, 0, 300, 236
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    COMBOBOX        IDC_PORT0_JOYS,45,29,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_PORT1_JOYS,45,65,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Swap port 0 and 1",IDC_SWAP,194,101,93,14
-    RTEXT           "Port 0:",IDC_STATIC,11,28,25,15,SS_CENTERIMAGE
-    RTEXT           "Port 1:",IDC_STATIC,11,64,25,15,SS_CENTERIMAGE
-    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,64,87,106,15,SS_NOTIFY | SS_CENTERIMAGE
-    GROUPBOX        "Mouse and Joystick settings",IDC_STATIC,4,15,292,148
-    GROUPBOX        "Mouse extra settings",IDC_STATIC,4,165,292,69
-    RTEXT           "Mouse speed:",IDC_STATIC,17,180,56,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTSPEEDM,87,180,25,12,ES_NUMBER
-    CONTROL         "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,187,120,10
-    CONTROL         "Full tablet input emulation",IDC_PORT_TABLET_FULL,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,220,121,10
-    CONTROL         "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,175,119,10
-    COMBOBOX        IDC_PORT_TABLET_CURSOR,167,201,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Magic Mouse cursor mode:",IDC_STATIC,17,204,138,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_PORT0_JOYSMODE,195,47,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_PORT1_JOYSMODE,195,82,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_PORT2_JOYS,45,125,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Parallel port joystick adapter",IDC_STATIC,10,105,147,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_PORT3_JOYS,45,143,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-END
-
-IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "UAE Authors and Contributors..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    DEFPUSHBUTTON   "Ok",ID_OK,177,224,53,14
-    CONTROL         "",IDC_CONTRIBUTORS,"RICHEDIT",TCS_HOTTRACK | TCS_VERTICAL | TCS_RAGGEDRIGHT | TCS_OWNERDRAWFIXED | TCS_MULTISELECT | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,5,404,214
-END
-
-IDD_ABOUT DIALOGEX 0, 0, 300, 191
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    CONTROL         "",IDC_RICHEDIT1,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,45,10,210,15
-    CONTROL         "",IDC_RICHEDIT2,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,30,260,13
-    PUSHBUTTON      "Contributors",IDC_CONTRIBUTORS,110,55,80,15
-    CONTROL         "",IDC_UAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,120,80,15
-    CONTROL         "",IDC_PICASSOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,90,80,20
-    CONTROL         "",IDC_AMIGAHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,109,90,80,20
-    CONTROL         "",IDC_WINUAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,120,80,15
-    CONTROL         "",IDC_AIABHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,120,80,15
-    CONTROL         "",IDC_THEROOTS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,145,80,15
-    CONTROL         "",IDC_CAPS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,145,80,15
-    CONTROL         "",IDC_ABIME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,145,80,15
-    CONTROL         "",IDC_CLOANTOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,90,80,20
-    CONTROL         "",IDC_AMIGASYS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,63,169,80,15
-    CONTROL         "",IDC_AMIKIT,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,157,169,80,15
-END
-
-IDD_MISC1 DIALOGEX 0, 0, 300, 237
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Miscellaneous Options",IDC_STATIC,8,2,290,136
-    CONTROL         "Untrap = middle button",IDC_JULIAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,19,110,10
-    CONTROL         "Show GUI on startup",IDC_SHOWGUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,31,109,10
-    CONTROL         "Native On-screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,80,109,10
-    CONTROL         "Don't show taskbar button",IDC_NOTASKBARBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,56,109,10
-    CONTROL         "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,43,110,10
-    GROUPBOX        "Keyboard LEDs",IDC_STATIC,7,140,85,94
-    COMBOBOX        IDC_KBLED1,22,154,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_KBLED2,22,173,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_KBLED3,22,193,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Logging",IDC_STATIC,97,140,202,25
-    CONTROL         "Create log file",IDC_CREATELOGFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,151,72,10
-    CONTROL         "Illegal memory accesses",IDC_ILLEGAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,189,151,95,10
-    GROUPBOX        "State Files",IDC_STATIC,98,167,201,68
-    PUSHBUTTON      "Load state...",IDC_DOLOADSTATE,105,180,49,14
-    PUSHBUTTON      "Save state...",IDC_DOSAVESTATE,105,208,49,14
-    CONTROL         "Enable state recording",IDC_STATE_CAPTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,182,88,10
-    RTEXT           "Recording rate (seconds):",IDC_STATIC,157,199,86,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_STATE_RATE,248,197,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Recording buffer (MB):",IDC_STATIC,160,219,83,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_STATE_BUFFERSIZE,248,217,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Always on top",IDC_ALWAYSONTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,69,110,10
-    CONTROL         "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,216,64,10
-    COMBOBOX        IDC_SCSIMODE,213,30,80,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_LANGUAGE,153,117,122,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Language",IDC_STATIC,138,107,154,27
-    CONTROL         "Disable screensaver",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,82,109,10
-    COMBOBOX        IDC_DD_SURFACETYPE,213,63,79,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "DirectDraw display buffer:",IDC_STATIC,195,50,92,10,SS_CENTERIMAGE
-    RTEXT           "SCSI and CD/DVD access method:",IDC_STATIC,151,12,126,10,SS_CENTERIMAGE
-    CONTROL         "Synchronize clock",IDC_CLOCKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,95,111,10
-    CONTROL         "Faster RTG [] Enables less accurate custom chipset emulation mode when Picasso96 is enabled.",IDC_FASTERRTG,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,19,108,100,10
-    CONTROL         "RTG On-screen LEDs",IDC_SHOWLEDSRTG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,93,109,10
-END
-
-IDD_HARDFILE DIALOGEX 0, 0, 299, 249
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardfile Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "Settings",IDC_STATIC,10,5,280,146
-    RTEXT           "Path:",IDC_HARDFILE_DIR_TEXT,25,18,22,10
-    EDITTEXT        IDC_PATH_NAME,52,15,213,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_SELECTOR,271,15,11,15
-    RTEXT           "FileSys:",IDC_HARDFILE_FILESYS_TEXT,13,38,34,10
-    EDITTEXT        IDC_PATH_FILESYS,52,35,213,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_FILESYS_SELECTOR,271,35,11,15
-    RTEXT           "Device:",IDC_HARDFILE_DEVICE_TEXT,16,58,31,10
-    EDITTEXT        IDC_HARDFILE_DEVICE,52,55,66,15,ES_AUTOHSCROLL
-    RTEXT           "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,20,94,48,8
-    EDITTEXT        IDC_HARDFILE_BOOTPRI,73,90,44,15
-    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,74,64,10
-    PUSHBUTTON      "Enable RDB mode",IDC_HDF_RDB,174,55,92,14
-    RTEXT           "Surfaces:",IDC_SURFACES_TEXT,118,94,32,10
-    EDITTEXT        IDC_HEADS,155,90,40,15,ES_NUMBER
-    RTEXT           "Reserved:",IDC_RESERVED_TEXT,197,94,35,10
-    EDITTEXT        IDC_RESERVED,237,90,40,15,ES_NUMBER
-    RTEXT           "Sectors:",IDC_SECTORS_TEXT,120,113,30,10
-    EDITTEXT        IDC_SECTORS,155,111,40,15,ES_NUMBER
-    RTEXT           "Block size:",IDC_BLOCKSIZE_TEXT,197,113,35,10
-    EDITTEXT        IDC_BLOCKSIZE,237,111,40,15,ES_NUMBER
-    GROUPBOX        "New hard disk image file",IDC_STATIC,10,156,280,62
-    PUSHBUTTON      "Create",IDC_HF_CREATE,23,171,80,14
-    EDITTEXT        IDC_HF_SIZE,119,171,61,15,ES_NUMBER
-    PUSHBUTTON      "OK",IDOK,102,226,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,158,226,50,14
-    EDITTEXT        IDC_HF_DOSTYPE,119,194,61,15
-    COMBOBOX        IDC_HF_TYPE,23,195,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_HDF_CONTROLLER,73,112,44,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "DOS type",IDC_STATIC,187,196,32,10,SS_CENTERIMAGE
-    RTEXT           "MB",IDC_STATIC,185,174,17,10,SS_CENTERIMAGE
-    RTEXT           "HD Controller:",IDC_STATIC,16,113,52,10,SS_CENTERIMAGE
-    CONTROL         "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,74,53,10
-    CONTROL         "Do not mount",IDC_HDF_DONOTMOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,74,67,10
-    EDITTEXT        IDC_HDFINFO,16,131,268,12,ES_CENTER | ES_READONLY
-    CONTROL         "Sparse file",IDC_HF_SPARSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,168,62,10
-    CONTROL         "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,180,62,10
-END
-
-IDD_FILESYS DIALOGEX 15, 25, 299, 111
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Volume Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    LTEXT           "Device name:",-1,11,7,54,10
-    EDITTEXT        IDC_VOLUME_DEVICE,65,5,104,15,ES_AUTOHSCROLL
-    LTEXT           "Volume label:",-1,13,28,54,10
-    EDITTEXT        IDC_VOLUME_NAME,65,25,104,15,ES_AUTOHSCROLL
-    LTEXT           "Path:",-1,38,49,44,10
-    EDITTEXT        IDC_PATH_NAME,65,46,227,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "Select Directory",IDC_FS_SELECT_DIR,65,66,103,15
-    CONTROL         "Read/write",IDC_FS_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,7,55,10
-    RTEXT           "Boot priority:",IDC_VOLUME_BOOTPRI_TEXT,178,28,49,8
-    EDITTEXT        IDC_VOLUME_BOOTPRI,236,25,30,15
-    PUSHBUTTON      "OK",IDOK,65,91,48,15
-    PUSHBUTTON      "Cancel",IDCANCEL,120,91,48,15
-    PUSHBUTTON      "Select Archive or Plain File",IDC_FS_SELECT_FILE,190,66,103,15
-    PUSHBUTTON      "Eject",IDC_FS_SELECT_EJECT,230,91,62,15
-    CONTROL         "Bootable",IDC_FS_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,7,53,10
-END
-
-IDD_SETINFO DIALOGEX 0, 0, 229, 85
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Additional Information Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    RTEXT           "Path:",-1,5,20,24,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATH_NAME,35,20,169,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_SELECTOR,210,20,10,15
-    PUSHBUTTON      "OK",IDOK,120,65,48,15
-    PUSHBUTTON      "Cancel",IDCANCEL,175,65,48,15
-END
-
-IDD_CHIPSET DIALOGEX 0, 65490, 300, 229
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "Chipset",IDC_STATIC,14,11,145,90
-    CONTROL         "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS,
-                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,26,51,10
-    CONTROL         "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,42,55,10
-    CONTROL         "ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,42,55,10
-    CONTROL         "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,58,52,10
-    CONTROL         "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,26,51,10
-    CONTROL         "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,58,50,10
-    GROUPBOX        "Options",IDC_STATIC,168,11,114,89
-    CONTROL         "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,179,33,96,10
-    CONTROL         "Cycle-exact [] The most compatible A500 emulation mode. Very fast PC recommended.",IDC_CYCLEEXACT,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,46,100,10
-    GROUPBOX        "Collision Level",IDC_STATIC,14,105,267,48
-    CONTROL         "None [] Collision hardware emulation disabled.",IDC_COLLISION0,
-                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,121,59,10
-    CONTROL         "Sprites only [] Emulate only sprite vs. sprite collisions.",IDC_COLLISION1,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,137,62,10
-    CONTROL         "Sprites and Sprites vs. Playfield [] Recommended collision emulation level.",IDC_COLLISION2,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,121,161,10
-    CONTROL         "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",IDC_COLLISION3,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,137,119,10
-    GROUPBOX        "Sound Emulation",IDC_STATIC,13,159,268,65
-    CONTROL         "Disabled",IDC_CS_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,175,102,10
-    CONTROL         "Emulated",IDC_CS_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,190,91,10
-    CONTROL         "Emulated, 100% accurate",IDC_CS_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,205,95,10
-    CONTROL         "Genlock connected [] Allow boot sequence to detect genlock. Genlock is not emulated.",IDC_GENLOCK,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,59,100,10
-    COMBOBOX        IDC_CS_EXT,100,80,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Chipset Extra",IDC_STATIC,25,79,52,15,SS_CENTERIMAGE
-END
-
-IDD_CHIPSET2 DIALOGEX 0, 65490, 300, 247
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "Battery Backed Up Real Time Clock",IDC_STATIC,11,24,275,29
-    CONTROL         "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,36,55,10
-    CONTROL         "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,36,52,10
-    CONTROL         "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,36,46,10
-    EDITTEXT        IDC_CS_RTCADJUST,215,34,64,13,ES_AUTOHSCROLL
-    GROUPBOX        "CIA-A TOD Clock Source",IDC_STATIC,11,56,275,29
-    CONTROL         "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,68,63,10
-    CONTROL         "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,68,85,10
-    CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,186,68,88,10
-    CONTROL         "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,146,80,10
-    CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,95,88,10
-    CONTROL         "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,76,10
-    CONTROL         "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,108,87,10
-    CONTROL         "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,108,84,10
-    CONTROL         "CDTV CD",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,121,47,10
-    CONTROL         "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,120,87,10
-    CONTROL         "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,120,90,10
-    CONTROL         "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,133,79,10
-    CONTROL         "A4000/A4000T IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,133,88,10
-    CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,71,10
-    EDITTEXT        IDC_CS_RAMSEYREV,91,214,45,13,ES_AUTOHSCROLL
-    CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,229,71,10
-    EDITTEXT        IDC_CS_FATGARYREV,91,228,45,13,ES_AUTOHSCROLL
-    CONTROL         "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,188,76,10
-    CONTROL         "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,8,234,10
-    CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,95,92,10
-    CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,216,81,10
-    EDITTEXT        IDC_CS_AGNUSREV,232,214,45,13,ES_AUTOHSCROLL
-    CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,229,81,10
-    EDITTEXT        IDC_CS_DENISEREV,232,228,45,13,ES_AUTOHSCROLL
-    CONTROL         "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,188,76,10
-    CONTROL         "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,188,88,10
-    LTEXT           "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,17,174,159,8,SS_CENTERIMAGE
-    CONTROL         "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,133,92,10
-    CONTROL         "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,76,10
-    CONTROL         "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,200,76,10
-    CONTROL         "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,200,101,10
-    CONTROL         "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,146,92,10
-    CONTROL         "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,146,80,10
-    CONTROL         "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10
-    CONTROL         "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,159,80,10
-    CONTROL         "No-EHB Denise",IDC_CS_NOEHB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,159,80,10
-    CONTROL         "Blitter Busy Bug",IDC_CS_BLITTERBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,159,80,10
-END
-
-IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 217
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Output Properties",IDC_STATIC,5,0,274,126
-    EDITTEXT        IDC_AVIOUTPUT_FILETEXT,15,15,226,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE
-    PUSHBUTTON      "...",IDC_AVIOUTPUT_FILE,249,15,19,12
-    CONTROL         "Audio",IDC_AVIOUTPUT_AUDIO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,33,39,14
-    CONTROL         "",IDC_AVIOUTPUT_AUDIO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,34,209,13
-    CONTROL         "Video",IDC_AVIOUTPUT_VIDEO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,50,39,14
-    CONTROL         "",IDC_AVIOUTPUT_VIDEO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,51,209,13
-    CONTROL         "Disable frame rate limit",IDC_AVIOUTPUT_FRAMELIMITER,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,122,10
-    CONTROL         "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14
-    PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,16,141,77,14
-    GROUPBOX        "Ripper",IDC_STATIC,5,127,274,49
-    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,192,141,77,14,WS_DISABLED
-    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,159,77,14
-    GROUPBOX        "Input Recorder",IDC_STATIC,5,178,274,33
-    CONTROL         "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,190,77,14
-    CONTROL         "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,190,77,14
-    CONTROL         "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,192,78,10
-    CONTROL         "Disable sound output",IDC_AVIOUTPUT_NOSOUNDOUTPUT,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,88,123,10
-    CONTROL         "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,88,120,10
-    CONTROL         "Capture before filtering",IDC_AVIOUTPUT_ORIGINALSIZE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,71,120,10
-    CONTROL         "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,160,162,10
-END
-
-IDD_INPUT DIALOGEX 0, 0, 300, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    COMBOBOX        IDC_INPUTTYPE,5,5,98,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_INPUTDEVICE,109,5,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "",IDC_INPUTDEVICEDISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,282,8,9,8
-    CONTROL         "List1",IDC_INPUTLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,22,290,146
-    COMBOBOX        IDC_INPUTAMIGACNT,5,174,24,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_INPUTAMIGA,33,174,262,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Joystick dead zone (%):",-1,7,196,79,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTDEADZONE,92,195,25,12,ES_NUMBER
-    RTEXT           "Autofire rate (frames):",-1,10,212,76,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTAUTOFIRERATE,92,210,25,12,ES_NUMBER
-    RTEXT           "Digital joy-mouse speed:",-1,124,196,84,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTSPEEDD,215,195,25,12,ES_NUMBER
-    RTEXT           "Analog joy-mouse speed:",-1,120,212,88,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTSPEEDA,215,211,25,12,ES_NUMBER
-    PUSHBUTTON      "Copy from:",IDC_INPUTCOPY,249,195,45,14
-    COMBOBOX        IDC_INPUTCOPYFROM,249,211,45,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14
-END
-
-IDD_FILTER DIALOGEX 0, 0, 296, 241
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Filter Settings",-1,0,1,294,199
-    COMBOBOX        IDC_FILTERMODE,20,15,103,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERFILTER,132,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Reset to defaults",IDC_FILTERDEFAULT,221,15,67,14
-    RTEXT           "Horiz. size:",-1,7,61,46,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,54,152,19
-    EDITTEXT        IDC_FILTERHZV,253,56,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Vert. size:",-1,7,81,46,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,74,152,19
-    EDITTEXT        IDC_FILTERVZV,253,76,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Horiz. position:",-1,5,101,55,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,94,151,19
-    EDITTEXT        IDC_FILTERHOV,253,96,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Vert. position:",-1,5,120,55,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,114,151,19
-    EDITTEXT        IDC_FILTERVOV,253,116,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Extra settings:",-1,105,135,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,174,151,19
-    EDITTEXT        IDC_FILTERXLV,253,176,34,12,ES_CENTER | ES_READONLY
-    COMBOBOX        IDC_FILTERSLR,253,151,33,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Presets",-1,0,203,296,36
-    COMBOBOX        IDC_FILTERPRESETS,8,217,119,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Load",IDC_FILTERPRESETLOAD,132,216,47,14
-    PUSHBUTTON      "Save",IDC_FILTERPRESETSAVE,184,216,47,14
-    PUSHBUTTON      "Delete",IDC_FILTERPRESETDELETE,236,216,47,14
-    COMBOBOX        IDC_FILTERHZMULT,59,60,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERVZMULT,59,80,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERXTRA,105,151,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERASPECT,14,151,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,168,85,10
-    RTEXT           "Automatic scaling:",-1,9,38,79,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_FILTERAUTOSCALE,105,36,140,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERASPECT2,14,180,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-END
-
-IDD_HARDDRIVE DIALOGEX 0, 0, 380, 76
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Harddrive Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    LTEXT           "Hard drive:",IDC_STATIC,7,11,80,10
-    COMBOBOX        IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10
-    DEFPUSHBUTTON   "Add hard drive",IDOK,231,48,65,14
-    PUSHBUTTON      "Cancel",IDCANCEL,319,48,54,14
-    DEFPUSHBUTTON   "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14
-    EDITTEXT        IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
-    COMBOBOX        IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "HD Controller:",IDC_STATIC,42,51,52,10,SS_CENTERIMAGE
-END
-
-IDD_MISC2 DIALOGEX 0, 0, 300, 244
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "When Active",IDC_STATIC,8,7,88,73
-    RTEXT           "Run at priority:",IDC_ACTIVE_PRI,14,17,52,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_ACTIVE_PRIORITY,14,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "When Inactive",IDC_STATIC,102,7,92,73
-    RTEXT           "Run at priority:",IDC_INACTIVE_PRI,109,17,51,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_INACTIVE_PRIORITY,109,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Pause emulation",IDC_INACTIVE_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,50,69,10
-    CONTROL         "Disable sound",IDC_INACTIVE_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,63,79,10
-    GROUPBOX        "When Minimized",IDC_STATIC,199,7,92,73
-    RTEXT           "Run at priority:",IDC_MINIMIZED_PRI,207,18,51,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_MINIMIZED_PRIORITY,207,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Pause emulation",IDC_MINIMIZED_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,50,69,10
-    CONTROL         "Disable sound",IDC_MINIMIZED_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,63,79,10
-    CONTROL         "",IDC_ASSOCIATELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,19,94,164,100
-    GROUPBOX        "File Extension Associations",IDC_STATIC,8,83,186,138
-    PUSHBUTTON      "Deassociate all",IDC_ASSOCIATE_OFF,108,200,75,14
-    PUSHBUTTON      "Associate all",IDC_ASSOCIATE_ON,19,200,75,14
-END
-
-IDD_DISK DIALOGEX 0, 0, 300, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_CONTROL | DS_CENTER | DS_CENTERMOUSE | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    CONTROL         "",IDC_DISKLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,6,292,196
-    PUSHBUTTON      "Remove floppy disk image",IDC_DISKLISTREMOVE,156,223,101,15
-    COMBOBOX        IDC_DISKTEXT,3,205,293,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Insert floppy disk image",IDC_DISKLISTINSERT,41,223,101,15
-END
-
-IDD_PANEL DIALOGEX 0, 0, 420, 278
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT
-CAPTION "WinUAE Properties"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "",IDC_PANEL_FRAME,112,4,303,247,NOT WS_VISIBLE
-    CONTROL         "",IDC_PANELTREE,"SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_NOSCROLL | WS_BORDER | WS_HSCROLL | WS_TABSTOP,5,5,101,248,WS_EX_CLIENTEDGE
-    GROUPBOX        "",IDC_PANEL_FRAME_OUTER,110,2,307,251
-    PUSHBUTTON      "Reset",IDC_RESETAMIGA,5,259,47,14
-    PUSHBUTTON      "Quit",IDC_QUITEMU,55,259,47,14
-    DEFPUSHBUTTON   "OK",IDOK,260,259,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,313,259,50,14
-    PUSHBUTTON      "Help",IDHELP,366,259,50,14,WS_DISABLED
-    PUSHBUTTON      "Restart",IDC_RESTARTEMU,106,259,47,14,NOT WS_VISIBLE
-END
-
-IDD_PATHS DIALOGEX 0, 0, 300, 243
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    LTEXT           "System ROMs:",IDC_PATHS_ROML,14,4,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_ROM,14,15,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_ROMS,281,15,11,15
-    LTEXT           "Configuration files:",IDC_PATHS_CONFIGL,14,32,121,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_CONFIG,14,42,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_CONFIGS,281,42,11,15
-    LTEXT           "Screenshots:",IDC_PATHS_SCREENSHOTL,14,59,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_SCREENSHOT,14,69,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_SCREENSHOTS,281,69,11,15
-    LTEXT           "State files:",IDC_PATHS_STATEFILEL,14,86,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_SAVESTATE,14,96,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_SAVESTATES,281,96,11,15
-    LTEXT           "Videos:",IDC_PATHS_AVIOUTPUTL,14,113,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_AVIOUTPUT,14,123,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_AVIOUTPUTS,281,123,11,15
-    LTEXT           "Saveimages:",IDC_PATHS_SAVEIMAGEL,14,140,261,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_SAVEIMAGE,14,151,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_SAVEIMAGES,281,151,11,15
-    PUSHBUTTON      "Reset to defaults",IDC_PATHS_DEFAULT,14,196,92,14
-    PUSHBUTTON      "Rescan ROMs",IDC_ROM_RESCAN,14,212,92,14
-    PUSHBUTTON      "Clear registry",IDC_RESETREGISTRY,111,212,92,14
-    COMBOBOX        IDC_PATHS_DEFAULTTYPE,111,197,163,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Clear disk history",IDC_RESETDISKHISTORY,14,228,92,14
-    CONTROL         "Cache Configuration files",IDC_PATHS_CONFIGCACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,32,97,10
-    LTEXT           "Rips:",IDC_PATHS_RIPSL,13,168,261,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_RIP,13,178,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_RIPS,280,178,11,15
-END
-
-IDD_QUICKSTART DIALOGEX 0, 0, 300, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Emulated Hardware",IDC_QUICKSTART_CONFIG,3,0,294,54
-    RTEXT           "Model:",IDC_STATIC,5,14,50,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_QUICKSTART_MODEL,59,12,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Configuration:",IDC_STATIC,5,33,50,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_QUICKSTART_CONFIGURATION,59,31,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Compatibility vs Required CPU Power ",IDC_QUICKSTART_COMPA,3,56,294,33
-    RTEXT           "Best compatibility",IDC_STATIC,13,70,67,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_QUICKSTART_COMPATIBILITY,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,95,65,115,21
-    RTEXT           "Low compatibility",IDC_STATIC,215,70,63,10,SS_CENTERIMAGE
-    GROUPBOX        "Host Configuration",IDC_QUICKSTART_HOST,3,91,294,33
-    RTEXT           "Configuration:",IDC_STATIC,5,105,55,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_QUICKSTART_HOSTCONFIG,65,103,225,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Emulated Floppy Drives",IDC_QUICKSTART_DF,3,126,294,84
-    CONTROL         "Floppy drive DF0:",IDC_DF0QENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,10,136,72,15
-    PUSHBUTTON      "Select disk image",IDC_DF0QQ,85,136,98,15
-    RTEXT           "Write-protected",IDC_STATIC,185,139,56,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF0WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,137,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT0Q,261,136,30,15
-    COMBOBOX        IDC_DF0TEXTQ,9,154,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Floppy drive DF1:",IDC_DF1QENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,172,71,15
-    PUSHBUTTON      "Select disk image",IDC_DF1QQ,85,172,98,15
-    RTEXT           "Write-protected",IDC_STATIC,185,175,55,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF1WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,173,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT1Q,261,172,30,15
-    COMBOBOX        IDC_DF1TEXTQ,9,190,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Set configuration",IDC_QUICKSTART_SETCONFIG,9,219,72,15,NOT WS_VISIBLE
-    GROUPBOX        "Mode",IDC_STATIC,190,211,107,27,BS_LEFT
-    CONTROL         "Start in Quickstart mode",IDC_QUICKSTARTMODE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,197,222,94,10
-END
-
-IDD_FRONTEND DIALOGEX 0, 0, 420, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    CONTROL         "",IDC_FE_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,9,235,124
-    GROUPBOX        "",IDC_FE_INFO,249,140,160,95
-    GROUPBOX        "",IDC_FE_SCREENSHOT,249,7,160,128
-END
-
-IDD_PROGRESSBAR DIALOGEX 0, 0, 229, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Processing..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    PUSHBUTTON      "Cancel",IDCANCEL,88,40,50,14
-    CONTROL         "",IDC_PROGRESSBAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,7,19,215,14
-    CTEXT           "x",IDC_PROGRESSBAR_TEXT,23,5,187,10,SS_CENTERIMAGE | WS_TABSTOP
-END
-
-IDD_STRINGBOX DIALOGEX 0, 0, 229, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Enter text..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,48,39,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,151,39,50,14
-    EDITTEXT        IDC_STRINGBOXEDIT,7,17,214,14,ES_AUTOHSCROLL | ES_WANTRETURN
-END
-
-IDD_DEBUGGER DIALOGEX 0, 0, 454, 368
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "WinUAE Debugger"
-FONT 8, "Courier New", 0, 0, 0x0
-BEGIN
-    EDITTEXT        IDC_DBG_OUTPUT1,1,255,370,86,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP
-    EDITTEXT        IDC_DBG_OUTPUT2,1,79,370,262,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP
-    LISTBOX         IDC_DBG_MEM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_DASM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    EDITTEXT        IDC_DBG_MEMINPUT,1,79,36,12,ES_AUTOHSCROLL | ES_WANTRETURN
-    EDITTEXT        IDC_DBG_INPUT,1,342,354,12,ES_AUTOHSCROLL | ES_WANTRETURN
-    PUSHBUTTON      "?",IDC_DBG_HELP,356,342,15,12,NOT WS_TABSTOP
-    PUSHBUTTON      "Set to PC",IDC_DBG_MEMTOPC,38,79,45,12,NOT WS_TABSTOP
-    LISTBOX         IDC_DBG_DREG,1,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_AREG,54,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_AMEM,106,1,231,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_CCR,338,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_SP_VBR,338,44,115,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MMISC,396,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_PC,1,68,52,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_PREFETCH,54,68,283,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_FPREG,372,218,81,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_FPSR,372,285,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MISCCPU,372,320,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    CONTROL         "",IDC_DBG_STATUS,"msctls_statusbar32",0x103,0,355,453,12
-    LISTBOX         IDC_DBG_BRKPTS,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-    LISTBOX         IDC_DBG_MCUSTOM,372,79,81,138,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MISC,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-    LISTBOX         IDC_DBG_CUSTOM,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-    CONTROL         "Auto set",IDC_DBG_AUTOSET,"Button",BS_AUTOCHECKBOX,84,79,50,12
-    LISTBOX         IDC_DBG_DASM2,1,79,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MEM2,1,167,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-END
-
-IDD_DBGMEMINPUT DIALOGEX 0, 0, 150, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Enter address..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,15,39,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,75,39,50,14
-    EDITTEXT        IDC_DBG_MEMINPUT2,20,12,100,14,ES_AUTOHSCROLL | ES_WANTRETURN
-    CTEXT           "Enter address",IDC_DBG_ADDRINPUTTXT,20,1,100,10,SS_CENTERIMAGE | WS_TABSTOP
-END
-
-IDD_EXPANSION DIALOGEX 0, 0, 300, 206
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    RTEXT           "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,44,53,10,SS_NOTIFY | SS_CENTERIMAGE
-    CONTROL         "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,40,60,20
-    EDITTEXT        IDC_P96RAM,152,43,34,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "RTG Graphics Card",IDC_STATIC,5,12,291,113
-    CONTROL         "Scale if smaller than display size setting",IDC_RTG_SCALE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,74,162,10
-    CONTROL         "Match host and RTG color depth if possible",IDC_RTG_MATCH_DEPTH,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,62,163,10
-    COMBOBOX        IDC_RTG_8BIT,211,29,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_16BIT,211,44,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_24BIT,211,59,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_32BIT,211,74,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,86,162,10
-    COMBOBOX        IDC_RTG_SCALE_ASPECTRATIO,211,101,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Aspect ratio:",IDC_STATIC,153,102,52,10,SS_CENTERIMAGE
-    RTEXT           "Refresh rate:",IDC_STATIC,22,103,51,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_RTG_VBLANKRATE,77,101,68,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,148,120,10
-    CONTROL         "uaenet.device [] Sana 2 compatible network device emulation. WinPcap required.",IDC_SANA2,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,160,77,10
-    CONTROL         "A2065 Z2 [] A2065 Ethernet Zorro II card emulation. WinPcap required.",IDC_A2065,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,160,57,10
-    GROUPBOX        "Network",IDC_STATIC,126,130,169,66
-    COMBOBOX        IDC_NETDEVICE,132,176,156,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,160,102,10
-    CONTROL         "Catweasel Z2 emulation [] Catweasel MK2 Zorro II card emulation. Physical Windows compatible Catweasel card and drivers required.",IDC_CATWEASEL,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,148,101,10
-    GROUPBOX        "Miscellaneous Expansions",IDC_STATIC,5,130,117,66
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,1,0
- PRODUCTVERSION 2,0,1,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "FileDescription", "WinUAE"
-            VALUE "FileVersion", "2.0.1"
-            VALUE "InternalName", "WinUAE"
-            VALUE "LegalCopyright", "© 1996-2009 under the GNU Public License (GPL)"
-            VALUE "OriginalFilename", "WinUAE.exe"
-            VALUE "ProductName", "WinUAE"
-            VALUE "ProductVersion", "2.0.1"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x409, 1200
-    END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Cursor
-//
-
-IDC_MYHAND              CURSOR                  "H_arrow.cur"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDM_SYSTRAY MENU 
-BEGIN
-    POPUP "Menu"
-    BEGIN
-        MENUITEM "Configuration",               ID_ST_CONFIGURATION
-        POPUP "Floppy drives"
-        BEGIN
-            MENUITEM "Eject all drives",            ID_ST_EJECTALL
-            MENUITEM "DF0:",                        ID_ST_DF0
-            MENUITEM "DF1:",                        ID_ST_DF1
-            MENUITEM "DF2:",                        ID_ST_DF2
-            MENUITEM "DF3:",                        ID_ST_DF3
-        END
-        MENUITEM "Reset",                       ID_ST_RESET
-        MENUITEM "Help",                        ID_ST_HELP
-        MENUITEM "Quit WinUAE",                 ID_ST_QUIT
-    END
-END
-
-IDM_DBGCONTEXTMENU MENU 
-BEGIN
-    POPUP "Inactive"
-    BEGIN
-        POPUP "Copy"
-        BEGIN
-            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE
-            MENUITEM "Copy all",                    ID_DBG_COPYLB
-        END
-    END
-    POPUP "Memory"
-    BEGIN
-        POPUP "Copy"
-        BEGIN
-            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE
-            MENUITEM "Copy all",                    ID_DBG_COPYLB
-        END
-        POPUP "Set top address"
-        BEGIN
-            MENUITEM "Set to A0",                   ID_DBG_SETTOA0
-            MENUITEM "Set to A1",                   ID_DBG_SETTOA1
-            MENUITEM "Set to A2",                   ID_DBG_SETTOA2
-            MENUITEM "Set to A3",                   ID_DBG_SETTOA3
-            MENUITEM "Set to A4",                   ID_DBG_SETTOA4
-            MENUITEM "Set to A5",                   ID_DBG_SETTOA5
-            MENUITEM "Set to A6",                   ID_DBG_SETTOA6
-            MENUITEM "Set to A7",                   ID_DBG_SETTOA7
-            MENUITEM "Enter address",               ID_DBG_ENTERADDR
-        END
-    END
-    POPUP "Disassembly"
-    BEGIN
-        POPUP "Copy"
-        BEGIN
-            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE
-            MENUITEM "Copy all",                    ID_DBG_COPYLB
-        END
-        POPUP "Breakpoints"
-        BEGIN
-            MENUITEM "Toggle breakpoint",           ID_DBG_TOGGLEBP
-            MENUITEM "Clear all breakpoints",       ID_DBG_DELETEBPS
-        END
-        POPUP "Set top address"
-        BEGIN
-            MENUITEM "Set to PC",                   ID_DBG_SETTOPC
-            MENUITEM "Enter address",               ID_DBG_ENTERADDR
-        END
-    END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// WAVE
-//
-
-IDR_DRIVE_STARTUP_A500_1 WAVE                    "drive_startup.wav"
-IDR_DRIVE_CLICK_A500_1  WAVE                    "drive_click.wav"
-IDR_DRIVE_SPIN_A500_1   WAVE                    "drive_spin.wav"
-IDR_DRIVE_SNATCH_A500_1 WAVE                    "drive_snatch.wav"
-IDR_DRIVE_SPINND_A500_1 WAVE                    "drive_spinnd.wav"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_XARCADE             BITMAP                  "xarcade-winuae.bmp"
-IDB_LCD160X43           BITMAP                  "lcd.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO 
-BEGIN
-    IDD_FILTER, DIALOG
-    BEGIN
-        BOTTOMMARGIN, 237
-    END
-END
-#endif    // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE 
-BEGIN
-    IDS_KICKSTART           "ROM"
-    IDS_DISK                "Disk swapper"
-    IDS_DISPLAY             "Display"
-    IDS_HARDDISK            "Hard drives"
-    IDS_FLOPPY              "Floppy drives"
-    IDS_ABOUT               "About"
-    IDS_LOADSAVE            "Configurations"
-    IDS_AVIOUTPUT           "Output"
-    IDS_IOPORTS             "IO ports"
-    IDS_MISC1               "Miscellaneous"
-    IDS_MEMORY              "RAM"
-    IDS_CPU                 "CPU and FPU"
-    IDS_CHIPSET             "Chipset"
-    IDS_INPUT               "Input"
-    IDS_FILTER              "Filter"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_MISC2               "Pri. & Extensions"
-    IDS_PATHS               "Paths"
-    IDS_QUICKSTART          "Quickstart"
-    IDS_FRONTEND            "Frontend"
-    IDS_CHIPSET2            "Adv. Chipset"
-    IDS_GAMEPORTS           "Game ports"
-    IDS_EXPANSION           "Expansions"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_EXTTEXT             "Floppy disk image files"
-    IDS_EXTACTUAL           "ADF"
-    IDS_SOUND               "Sound"
-    IDS_CDROM               "CD-ROM"
-    IDS_FRAMERATE           "Every %1Frame"
-    IDS_SECOND              "second "
-    IDS_THIRD               "third "
-    IDS_FOURTH              "fourth "
-    IDS_FIFTH               "fifth "
-    IDS_SIXTH               "sixth "
-    IDS_SEVENTH             "seventh "
-    IDS_EIGHTH              "eighth "
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NINTH               "ninth "
-    IDS_TENTH               "tenth "
-    IDS_SELECTADF           "Select a floppy disk image file..."
-    IDS_ADF                 "Floppy disk image files"
-    IDS_CHOOSEBLANK         "Choose a blank floppy disk image file..."
-    IDS_SELECTHDF           "Select a hard disk image file..."
-    IDS_HDF                 "Hard disk image files"
-    IDS_SELECTUAE           "Select a WinUAE configuration file..."
-    IDS_UAE                 "WinUAE configuration files"
-    IDS_SELECTROM           "Select a system ROM file..."
-    IDS_ROM                 "System ROM files"
-    IDS_SELECTKEY           "Select a system ROM key file..."
-    IDS_KEY                 "System ROM key files"
-    IDS_SELECTINFO          "Select information for your configuration..."
-    IDS_NONE                "none"
-    IDS_VOLUME              "Volume"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_SELECTFILESYSROOT   "Please select the root directory of the file system..."
-    IDS_DEFAULTMIDIOUT      "Default MIDI-Out Device"
-    IDS_CONTRIBUTORS1       "Bernd Schmidt - The Grand-Master\nSam Jordan - Custom-chip, floppy-DMA, etc.\nMathias Ortmann - Original WinUAE Main Guy, BSD Socket support\nBrian King - Picasso96 Support, Integrated GUI for WinUAE, previous WinUAE Main Guy\nToni Wilen - Core updates, WinUAE Main Guy\nGustavo Goedert/Peter Remmers/Michael Sontheimer/Tomi Hakala/Tim Gunn/Nemo Pohle - DOS Port Stuff\nSamuel Devulder/Olaf Barthel/Sam Jordan - Amiga Ports\nKrister Bergman - XFree86 and OS/2 Port\nA. Blanchard/Ernesto Corvi - MacOS Port\nChristian Bauer - BeOS Port\nIan Stephenson - NextStep Port\nPeter Teichmann - Acorn/RiscOS Port\nStefan Reinauer - ZorroII/III AutoConfig, Serial Support\nChristian Schmitt/Chris Hames - Serial Support\nHerman ten Brugge - 68020/68881 Emulation Code\nTauno Taipaleenmaki - Various UAE-Control/UAE-Library Support\nBrett Eden/Tim Gunn/Paolo Besser/Nemo Pohle - Various Docs and Web-Sites\nGeorg Veichtlbauer - Help File coordinator, German GUI\nFulvio Leonardi - Italian translator for WinUAE\n"
-    IDS_CONTRIBUTORS2       "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nPéter Tóth /Balázs Rátkai/Iván Herczeg/András Arató - Hungarian translation.\nKarsten Bock, Gavin Fance, Dirk Trowe, Christoph Meier and Christian Schindler - Freezer cartridge hardware support.\nMikko Nieminen - Demo compatibility testing.\nArabuusimiehet - [This information is on a need-to-know basis]"
-    IDS_INVALIDPRTPORT      "The printer you have in this configuration is not valid on this machine.\n"
-    IDS_RESTOREUSS          "Restore a WinUAE snapshot file"
-    IDS_USS                 "WinUAE snapshot files"
-    IDS_WRONGOSVERSION      "WinUAE is no longer supported on Windows NT.  Please upgrade to either Windows 2000 or Windows XP or a later version."
-    IDS_SELECTFLASH         "Select a flash or battery-backed RAM file..."
-    IDS_FLASH               "WinUAE flash or battery-backed RAM file"
-    IDS_INPUTHOSTWIDGET     "Input source"
-    IDS_INPUTAMIGAEVENT     "Input target"
-    IDS_INPUTAUTOFIRE       "Autofire"
-    IDS_SAVEUSS             "Save a WinUAE snapshot file"
-    IDS_MIDIOVERFLOW        "Sysexbuffer overflow. Should not happen. Please report this to\nberndroesch1@compuserve.de"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_PATH                "Path"
-    IDS_RW                  "R/W"
-    IDS_SECTORS             "Sectors"
-    IDS_SURFACES            "Surfaces"
-    IDS_RESERVED            "Reserved"
-    IDS_BLOCKSIZE           "Block size"
-    IDS_NAME                "Name"
-    IDS_DESCRIPTION         "Description"
-    IDS_COULDNOTLOADCONFIG  "Could not load the selected configuration!\n"
-    IDS_NOHELP              "Online help is disabled because the HTML Help functionality is not installed on this system. HTML Help is available from http://www.microsoft.com/downloads/.\n"
-    IDS_MUSTSELECTCONFIG    "You must select a configuration or enter a name before selecting Load...\n"
-    IDS_INVALIDCOMPORT      "The serial port you have in this configuration is not valid on this machine.\n"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_HFDSIZE             "Size"
-    IDS_DEVICE              "Device"
-    IDS_BOOTPRI             "BootPri"
-    IDS_FLOPPY_COMPATIBLE   " (compatible)"
-    IDS_FLOPPY_TURBO        "Turbo"
-    IDS_YES                 "yes"
-    IDS_NO                  "no"
-    IDS_PRI_ABOVENORMAL     "Above Normal"
-    IDS_PRI_NORMAL          "Normal"
-    IDS_PRI_BELOWNORMAL     "Below Normal"
-    IDS_PRI_LOW             "Low"
-    IDS_OLDRTGLIBRARY       "The installed LIBS:Picasso96/rtg.library (%d.%d) should be updated.\nA newer version is included in the ""Amiga Programs"" directory\n of the WinUAE distribution archive.\n\nNewer library version fixes graphics problems and increases performance."
-    IDS_DEFAULT_AF2005      "Amiga Forever 2005+"
-    IDS_DEFAULT_AF          "Amiga Forever"
-    IDS_DEFAULT_WINUAE      "WinUAE default (old)"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_SOUND_STEREO2       "Cloned Stereo (4 Channels)"
-    IDS_INPUT_CUSTOMEVENT   "<Custom event>"
-    IDS_DEFAULT_NEWWINUAE   "WinUAE default (new)"
-    IDS_SOUND_CLONED51      "Cloned Stereo (5.1)"
-    IDS_SOUND_51            "5.1 Channels"
-    IDS_AUTOMATIC           "Automatic"
-    IDS_ALL                 "All"
-    IDS_INPUTTOGGLE         "Toggle"
-    IDS_NETDISCONNECTED     "Cable disconnected"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_UNSUPPORTEDPIXELFORMAT 
-                            "Error: unsupported pixel format. Please use a different screen mode.\n"
-    IDS_MUSTENTERNAME       "You must select a configuration or enter a name before selecting Save...\n"
-    IDS_MUSTSELECTCONFIGFORDELETE 
-                            "You must select a configuration or enter a name before selecting Delete...\n"
-    IDS_DELETECONFIGCONFIRMATION 
-                            "Are you sure you want to Delete this configuration?\n"
-    IDS_DELETECONFIGTITLE   "Confirm Delete"
-    IDS_MUSTSELECTPATH      "You must select a path!"
-    IDS_SETTINGSERROR       "Settings error"
-    IDS_MUSTSELECTNAME      "You must select a name for the volume!"
-    IDS_MUSTSELECTFILE      "You must select a file!"
-    IDS_FAILEDHARDFILECREATION "Failed to create hard disk image file..."
-    IDS_CREATIONERROR       "Creation error"
-    IDS_ERRORTITLE          "WinUAE message"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_INP                 "WinUAE Input Recording"
-    IDS_RESTOREINP          "Playback a WinUAE input recording"
-    IDS_SAVEINP             "Record a WinUAE input recording"
-    IDS_SCREEN_WINDOWED     "Windowed"
-    IDS_SCREEN_FULLSCREEN   "Fullscreen"
-    IDS_SCREEN_FULLWINDOW   "Full-window"
-    IDS_SCREEN_VSYNC        "VSync"
-    IDS_SCREEN_VSYNC_AUTOSWITCH "AutoVSync"
-    IDS_SOUND_MONO          "Mono"
-    IDS_SOUND_MIXED         "Mixed"
-    IDS_SOUND_STEREO        "Stereo"
-    IDS_DISABLED            "Disabled"
-    IDS_SOUND_FILTER_OFF    "Always off"
-    IDS_SOUND_FILTER_EMULATED "Emulated (A500)"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_SOUND_FILTER_EMULATED_E "Emulated (A1200)"
-    IDS_INPUT_COMPATIBILITY "Compatibility mode"
-    IDS_INPUT_CUSTOM        "Configuration #%d"
-    IDS_INPUT_COPY_DEFAULT  "Default"
-    IDS_INPUT_COPY_CUSTOM   "Config #%d"
-    IDS_3D_NO_FILTER        "Point (%d-bit)"
-    IDS_3D_BILINEAR         "Bilinear (%d-bit)"
-    IDS_VSYNC_DEFAULT       "Default"
-    IDS_DRIVESOUND_NONE     "No sound"
-    IDS_DRIVESOUND_DEFAULT_A500 "A500 (WinUAE built-in)"
-    IDS_AVIOUTPUT_NOCODEC   "no codec selected"
-    IDS_DISK_IMAGENAME      "Disk image"
-    IDS_DISK_DRIVENAME      "Drive"
-    IDS_UNSUPPORTEDSCREENMODE 
-                            "The selected screen mode can't be displayed in a window, because %s\nSwitching to full-screen display."
-    IDS_UNSUPPORTEDSCREENMODE_1 
-                            "the desktop is running in an unknown color mode."
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_UNSUPPORTEDSCREENMODE_2 
-                            "the desktop is running in 8-bit color depth, which WinUAE can't use in windowed mode."
-    IDS_UNSUPPORTEDSCREENMODE_3 
-                            "the desktop is too small for the specified window size."
-    IDS_UNSUPPORTEDSCREENMODE_4 
-                            "you selected an RTG (Picasso96) display with unsupported color depth."
-    IDS_FLOPPYTYPE35DD      "3.5"" DD"
-    IDS_FLOPPYTYPE35HD      "3.5"" HD"
-    IDS_FLOPPYTYPE525SD     "5.25"" SD"
-    IDS_FLOPPYTYPEDISABLED  "Disabled"
-    IDS_STMENUNOFLOPPY      "No floppy disk inserted"
-    IDS_TREEVIEW_HARDWARE   "Hardware"
-    IDS_TREEVIEW_HOST       "Host"
-    IDS_TREEVIEW_MISC       "Miscellaneous"
-    IDS_TREEVIEW_SETTINGS   "Settings"
-    IDS_WINUAETITLE_MMB     "[Mouse active - press ALT+TAB or middle mouse button to cancel]"
-    IDS_WINUAETITLE_NORMAL  "[Mouse active - press ALT+TAB to cancel]"
-    IDS_STARTEMULATION      "Start"
-    IDS_TREEVIEW_ABOUT      "About"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NOHARDDRIVES        "No hard disks detected that were either empty or RDB-partitioned."
-    IDS_DEFAULT_HOST        "Default Configuration"
-    IDS_SOUND_4CHANNEL      "4 Channels"
-    IDS_HF_FS_CUSTOM        "Custom"
-    IDS_SELECTFS            "Select file system handler (FastFileSystem, SmartFilesystem, etc.)"
-    IDS_KEYJOY              "Keyboard Layout A (Numeric keypad, 0 and 5 = Fire)\nKeyboard Layout B (Cursor keys, Right CTRL and ALT = Fire)\nKeyboard Layout C (W=Up S=Down A=Left D=Right, Left ALT = Fire)\nX-Arcade (Left)\nX-Arcade (Right)"
-    IDS_STATEFILE_UNCOMPRESSED "Uncompressed"
-    IDS_STATEFILE_RAMDUMP   "RAM dump"
-    IDS_STATEFILE_WAVE      "Wave audio dump"
-    IDS_SOUND_SWAP_PAULA    "Paula only"
-    IDS_SOUND_SWAP_AHI      "AHI only"
-    IDS_SOUND_SWAP_BOTH     "Both"
-    IDS_SOUND_FILTER_ON_AGA "Always on (A500)"
-    IDS_SOUND_FILTER_ON_A500 "Always on (A1200)"
-    IDS_DRIVESOUND_PC_FLOPPY "PC floppy drive %c"
-    IDS_FLOPPYTYPE35DDESCOM "3.5"" ESCOM"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NUMSG_NEEDEXT2      "The software uses a non-standard floppy disk format. You may need to use a custom floppy disk image file instead of a standard one. This message will not appear again."
-    IDS_NUMSG_NOROMKEY      "Could not find system ROM key file."
-    IDS_NUMSG_KSROMCRCERROR "System ROM checksum incorrect. The system ROM image file may be corrupt."
-    IDS_NUMSG_KSROMREADERROR "Error while reading system ROM."
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NUMSG_NOEXTROM      "No extended ROM found."
-    IDS_NUMSG_MODRIP_NOTFOUND "No music modules or packed data found."
-    IDS_NUMSG_MODRIP_FINISHED "Scan finished."
-    IDS_NUMSG_MODRIP_SAVE   "Module/packed data found\n%s\nStart address %08.8X, Size %d bytes\nWould you like to save it?"
-    IDS_NUMSG_KS68020       "The selected system ROM requires a 68020 with 32-bit addressing or 68030 or higher CPU."
-    IDS_NUMSG_ROMNEED       "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."
-    IDS_NUMSG_STATEHD       "WARNING: Current configuration is not fully compatible with state saves.\nThis message will not appear again."
-    IDS_NUMSG_NOCAPS        "Selected disk image needs the SPS plugin\nwhich is available from\nhttp//www.softpres.org/"
-    IDS_NUMSG_OLDCAPS       "You need an updated SPS plugin\nwhich is available from\nhttp//www.softpres.org/"
-    IDS_IMGCHK_BOOTBLOCKCRCERROR 
-                            "The selected floppy disk image is not bootable (boot block checksum error)"
-    IDS_IMGCHK_BOOTBLOCKNO  "The selected floppy disk image is not bootable (no boot block)"
-    IDS_IMGCHK_DAMAGED      "The selected floppy disk image is damaged or unformatted"
-    IDS_IMGCHK_KS2          "The selected floppy disk image requires a 2.04 or later system ROM.\nThe configuration has been updated."
-    IDS_IMGCHK_KS3          "The selected floppy disk image requires a 3.0 or later system ROM.\nThe configuration has been updated."
-    IDS_ROMSCANEND          "Scan of ROMs finished"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_ROM_AVAILABLE       "available"
-    IDS_ROM_UNAVAILABLE     "unavailable"
-    IDS_NUMSG_KS68EC020     "The selected system ROM requires a 68020 with 24-bit addressing or higher CPU."
-    IDS_ROMSCANNOROMS       "No supported system ROMs detected."
-    IDS_NUMSG_KICKREP       "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement."
-    IDS_NUMSG_KICKREPNO     "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality."
-    IDS_NUMSG_NOROM         "Could not load system ROM, trying system ROM replacement."
-    IDS_HDCLONE_OK          "Hard drive image file created succesfully."
-    IDS_HDCLONE_FAIL        "Hard drive image file creation failed.\nError code %d:%d."
-    IDS_NUMSG_KS68030       "The selected system ROM requires a 68030 CPU."
-    IDS_NUMSG_EXPROMNEED    "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."
-    IDS_SB_FAVORITENAME     "Enter name..."
-    IDS_SB_CUSTOMEVENT      "Enter custom event string.."
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_QS_MODELS           "A500\nA500+\nA600\nA1000\nA1200\nA3000\nA4000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration"
-    IDS_QS_MODEL_A500       "1.3 ROM, OCS, 512 KB Chip + 512 KB Slow RAM (most common)\nThis configuration is capable of running most games and demos produced for first-generation hardware. Only few exceptions need a different configuration (e.g. the oldest games tend to be incompatible with this configuration).\n1.3 ROM, ECS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nLater hardware revision of the A500. Nearly 100% compatible with the previous configuration.\n1.3 ROM, ECS Agnus, 1 MB Chip RAM\nFew newer games and demos require this configuration.\n1.3 ROM, OCS Agnus, 512 KB Chip RAM\nVery old (e.g. pre-1988) games and demos may require this configuration.\n1.2 ROM, OCS Agnus, 512 KB Chip RAM\nAs available for the A1000, and installed on the first A500 and A2000 series. Some very old programs only work correctly with this configuration. Note: This system ROM version can only boot from floppy disk (no hard disk boot support).\n1.2 ROM, OCS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nThis configuration adds expansion memory to the first A500 produced. Try this if your game does not work with newer configurations, but works with the previous one. It could add some features to the game, including faster loading times. Note: This system ROM version can only boot from floppy disk (no hard disk boot support)."
-    IDS_QS_MODEL_A500P      "Basic non-expanded configuration\nThe A500+ adds an ECS Agnus chip, 1 MB of Chip RAM and a 2.0 ROM to the A500. Many A500 games and demos don't work properly on an A500+.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"
-    IDS_QS_MODEL_A600       "Basic non-expanded configuration\nThe A600 is smaller than the A500+ and has an updated 2.0 ROM.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"
-    IDS_QS_MODEL_A1000      "512 KB Chip RAM\nThe A1000 was the first model produced, with a configuration equivalent to that of an A500 with OCS chipset. You normally don't need to use this configuration, unless you are nostalgic and would like to hear the short A1000 boot tune\n""ICS"" Denise without EHB support\nVery first A1000 models had Denise without EHB capability.\n256 KB Chip RAM\n Unexpanded A1000. All later A1000 models were sold with a 256 KB RAM expansion built-in."
-    IDS_QS_MODEL_A1200      "Basic non-expanded configuration\nUse this configuration to run most AGA demos and games\n4 MB Fast RAM expanded configuration\nSome newer AGA games and demos need an expanded A1200 to run."
-    IDS_QS_MODEL_CD32       "CD32\nThe CD32 was one the first 32-bit consoles on the market. It is basically an A1200 with a built-in CD-ROM drive. Insert your CD32 or CDTV CD-ROM into a free CD-ROM drive before starting the emulation.\nCD32 + MPEG Full Motion Video Cartridge (not emulated yet)\n"
-    IDS_QS_MODEL_CDTV       "CDTV\nThe CDTV was the first model with a built-in CD-ROM drive. Looking like a black CD player, it featured a configuration equivalent to that of an A500 with 1 MB RAM and an ECS chipset.\nFloppy drive and 64KB SRAM card expanded CDTV\n"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_QS_MODEL_UAE        "High-end expanded configuration"
-    IDS_QS_MODEL_ARCADIA    "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and  Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel."
-    IDS_QS_MODEL_A3000      "1.4 ROM, 2MB Chip + 8MB Fast\n\n2.04 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n"
-    IDS_QS_MODEL_A4000      "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n"
-    IDS_QS_MODEL_A4000T     "A4000T (test)\nA4000T"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_FLOPPYTYPE35DDPC    "3.5"" DD (PC)"
-    IDS_FLOPPYTYPE35HDPC    "3.5"" HD (PC)"
-    IDS_JOYMODE_DEFAULT     "Default"
-    IDS_JOYMODE_MOUSE       "Mouse"
-    IDS_JOYMODE_JOYSTICK    "Joystick"
-    IDS_JOYMODE_JOYSTICKANALOG "Analog joystick"
-    IDS_JOYMODE_LIGHTPEN    "Light pen"
-    IDS_JOYMODE_MOUSE_CDTV  "CDTV remote mouse"
-    IDS_JOYMODE_JOYSTICK_CD32 "CD32 pad"
-    IDS_TABLET_BOTH_CURSORS "Show both cursors"
-    IDS_TABLET_NATIVE_CURSOR "Show native cursor only"
-    IDS_TABLET_HOST_CURSOR  "Show host cursor only"
-    IDS_AUTOSCALE_DISABLED  "Disabled"
-    IDS_AUTOSCALE_SCALING   "Automatic scaling"
-    IDS_AUTOSCALE_RESIZE    "Automatic resize"
-    IDS_PRINTER_ASCII       "ASCII-Only"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_PRINTER_EPSON9      "Epson Matrix Printer Emulation, 9pin"
-    IDS_PRINTER_POSTSCRIPT_DETECTION "PostScript (Passthrough)"
-    IDS_PRINTER_POSTSCRIPT_EMULATION 
-                            "PostScript (Emulation, GhostScript required)"
-    IDS_PRINTER_PASSTHROUGH "Passthrough"
-    IDS_RES_LORES           "Lores"
-    IDS_RES_HIRES           "Hires (normal)"
-    IDS_RES_SUPERHIRES      "SuperHires"
-    IDS_PRINTER_EPSON48     "Epson Matrix Printer Emulation, 48pin"
-END
-
-#endif    // English (Neutral) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Finnish resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)
-#ifdef _WIN32
-LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE 
-BEGIN
-    "resource.\0"
-END
-
-3 TEXTINCLUDE 
-BEGIN
-    "\r\0"
-END
-
-2 TEXTINCLUDE 
-BEGIN
-    "#include ""afxres.h""\r\0"
-END
-
-#endif    // APSTUDIO_INVOKED
-
-#endif    // Finnish resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.\r
+//\r
+#include "resource."\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "afxres.h"\r\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (Neutral) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_APPICON             ICON                    "winuae.ico"\r
+IDI_FLOPPY              ICON                    "35floppy.ico"\r
+IDI_ABOUT               ICON                    "amigainfo.ico"\r
+IDI_HARDDISK            ICON                    "Drive.ico"\r
+IDI_CPU                 ICON                    "cpu.ico"\r
+IDI_GAMEPORTS           ICON                    "joystick.ico"\r
+IDI_IOPORTS             ICON                    "joystick.ico"\r
+IDI_INPUT               ICON                    "joystick.ico"\r
+IDI_MISC1               ICON                    "misc.ico"\r
+IDI_MISC2               ICON                    "misc.ico"\r
+IDI_MOVE_UP             ICON                    "move_up.ico"\r
+IDI_MOVE_DOWN           ICON                    "move_dow.ico"\r
+IDI_AVIOUTPUT           ICON                    "avioutput.ico"\r
+IDI_DISK                ICON                    "Drive.ico"\r
+IDI_FOLDER              ICON                    "folder.ico"\r
+IDI_SOUND               ICON                    "sound.ico"\r
+IDI_DISPLAY             ICON                    "screen.ico"\r
+IDI_ROOT                ICON                    "root.ico"\r
+IDI_MEMORY              ICON                    "chip.ico"\r
+IDI_QUICKSTART          ICON                    "quickstart.ico"\r
+IDI_PATHS               ICON                    "paths.ico"\r
+IDI_DISKIMAGE           ICON                    "diskimage.ico"\r
+IDI_PORTS               ICON                    "port.ico"\r
+IDI_CONFIGFILE          ICON                    "configfile.ico"\r
+IDI_FILE                ICON                    "file.ico"\r
+IDI_EXPANSION           ICON                    "expansion.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDR_DBGACCEL ACCELERATORS \r
+BEGIN\r
+    VK_F1,          ID_DBG_PAGE1,           VIRTKEY, NOINVERT\r
+    VK_F2,          ID_DBG_PAGE2,           VIRTKEY, NOINVERT\r
+    VK_F3,          ID_DBG_PAGE3,           VIRTKEY, NOINVERT\r
+    VK_F4,          ID_DBG_PAGE4,           VIRTKEY, NOINVERT\r
+    VK_F5,          ID_DBG_PAGE5,           VIRTKEY, NOINVERT\r
+    VK_F6,          ID_DBG_PAGE6,           VIRTKEY, NOINVERT\r
+    VK_F7,          ID_DBG_PAGE7,           VIRTKEY, NOINVERT\r
+    VK_F8,          ID_DBG_PAGE8,           VIRTKEY, NOINVERT\r
+    VK_F9,          ID_DBG_PAGE9,           VIRTKEY, NOINVERT\r
+    VK_F11,         ID_DBG_STEP_OVER,       VIRTKEY, NOINVERT\r
+    VK_F12,         ID_DBG_STEP_INTO,       VIRTKEY, NOINVERT\r
+    VK_DOWN,        IDC_DBG_MEMDOWN,        VIRTKEY, ALT, NOINVERT\r
+    VK_RIGHT,       IDC_DBG_MEMDOWNFAST,    VIRTKEY, ALT, NOINVERT\r
+    VK_UP,          IDC_DBG_MEMUP,          VIRTKEY, ALT, NOINVERT\r
+    VK_LEFT,        IDC_DBG_MEMUPFAST,      VIRTKEY, ALT, NOINVERT\r
+    "H",            IDC_DBG_HELP,           VIRTKEY, ALT, NOINVERT\r
+    "P",            IDC_DBG_MEMTOPC,        VIRTKEY, ALT, NOINVERT\r
+    "A",            IDC_DBG_AUTOSET,        VIRTKEY, ALT, NOINVERT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_KICKSTART DIALOGEX 0, 0, 300, 176\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+EXSTYLE WS_EX_CONTEXTHELP\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "System ROM Settings",-1,5,0,290,93\r
+    LTEXT           "Main ROM file:",IDC_ROMTEXT,14,13,263,10\r
+    COMBOBOX        IDC_ROMFILE,12,26,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "...",IDC_KICKCHOOSER,280,25,10,15\r
+    LTEXT           "Extended ROM file:",IDC_ROMFILE2TEXT,14,43,263,10\r
+    COMBOBOX        IDC_ROMFILE2,12,56,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "...",IDC_ROMCHOOSER2,280,55,10,15\r
+    CONTROL         "MapROM emulation [] Creates a BlizKick-compatible memory area.",IDC_MAPROM,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,95,77,87,10\r
+    CONTROL         "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,77,87,10\r
+    GROUPBOX        "Miscellaneous",-1,5,99,290,75\r
+    LTEXT           "Cartridge ROM file:",IDC_FLASHTEXT2,12,110,265,10\r
+    COMBOBOX        IDC_CARTFILE,12,123,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "...",IDC_CARTCHOOSER,280,122,10,15\r
+    LTEXT           "Flash RAM file:",IDC_FLASHTEXT,12,142,265,10\r
+    EDITTEXT        IDC_FLASHFILE,12,155,262,13,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_FLASHCHOOSER,280,154,10,15\r
+END\r
+\r
+IDD_DISPLAY DIALOGEX 0, 0, 300, 235\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Screen",IDC_SCREENRESTEXT,12,0,270,67,BS_LEFT\r
+    COMBOBOX        IDC_DISPLAYSELECT,59,10,215,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RESOLUTION,59,27,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_REFRESHRATE,187,27,87,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    EDITTEXT        IDC_XSIZE,59,48,48,12,ES_NUMBER\r
+    EDITTEXT        IDC_YSIZE,114,48,47,12,ES_NUMBER\r
+    GROUPBOX        "Settings",IDC_SETTINGSTEXT,12,73,199,137\r
+    CONTROL         "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,125,92,10\r
+    LTEXT           "Refresh:",IDC_REFRESHTEXT,18,173,28,8\r
+    CONTROL         "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,168,75,20\r
+    EDITTEXT        IDC_RATETEXT,124,172,77,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Centering",IDC_STATIC,221,73,61,49\r
+    CONTROL         "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,87,49,10\r
+    CONTROL         "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,103,49,10\r
+    GROUPBOX        "Line Mode",IDC_LINEMODE,222,126,61,84\r
+    CONTROL         "Normal",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,231,148,44,10\r
+    CONTROL         "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,164,45,10\r
+    CONTROL         "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,180,46,10\r
+    COMBOBOX        IDC_DA_MODE,20,218,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,214,101,20\r
+    LTEXT           "FPS adj.:",IDC_REFRESH2TEXT,16,193,32,8\r
+    CONTROL         "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,188,127,20\r
+    EDITTEXT        IDC_RATE2TEXT,175,192,26,12,ES_CENTER | ES_READONLY\r
+    COMBOBOX        IDC_RESOLUTIONDEPTH,134,27,46,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Filtered low resolution",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,125,89,10\r
+    COMBOBOX        IDC_SCREENMODE_NATIVE,100,85,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_SCREENMODE_RTG,100,103,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Native mode:",IDC_STATIC,19,85,59,15,SS_CENTERIMAGE\r
+    RTEXT           "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE\r
+    PUSHBUTTON      "Reset to defaults",IDC_DA_RESET,212,218,73,14\r
+    RTEXT           "Resolution:",IDC_STATIC,27,152,59,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_LORES,100,152,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Remove interlace artifacts",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,139,99,10\r
+    RTEXT           "Windowed:",IDC_STATIC,17,46,40,15,SS_CENTERIMAGE\r
+    RTEXT           "Fullscreen:",IDC_STATIC,17,19,40,15,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_MEMORY DIALOGEX 0, 0, 300, 158\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+EXSTYLE WS_EX_CONTEXTHELP\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Memory Settings",-1,14,7,274,69\r
+    RTEXT           "Chip:",-1,24,26,20,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20\r
+    EDITTEXT        IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Slow:",-1,149,26,20,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20\r
+    EDITTEXT        IDC_SLOWRAM,243,25,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Fast:",IDC_FASTTEXT,24,51,20,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,47,50,20\r
+    EDITTEXT        IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Z3 Fast:",IDC_Z3TEXT,139,51,30,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20\r
+    EDITTEXT        IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "A3000/A4000 Advanced Memory Settings",-1,14,84,274,65\r
+    RTEXT           "Motherboard Fast RAM:",-1,40,100,129,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,96,59,20\r
+    EDITTEXT        IDC_MBRAM1,244,99,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Processor Slot Fast RAM:",-1,40,123,129,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,119,59,20\r
+    EDITTEXT        IDC_MBRAM2,244,122,34,12,ES_CENTER | ES_READONLY\r
+END\r
+\r
+IDD_CPU DIALOGEX 0, 0, 300, 241\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "CPU",IDC_STATIC,5,1,81,144,BS_LEFT\r
+    CONTROL         "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,15,63,10\r
+    CONTROL         "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,28,65,10\r
+    CONTROL         "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,41,63,10\r
+    CONTROL         "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,54,64,10\r
+    CONTROL         "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,67,66,10\r
+    CONTROL         "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,80,66,10\r
+    CONTROL         "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,107,73,8\r
+    CONTROL         "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,119,73,10\r
+    GROUPBOX        "CPU Emulation Speed",IDC_STATIC,90,3,205,92\r
+    CONTROL         "Fastest possible, but maintain chipset timing",IDC_CS_HOST,\r
+                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,95,18,195,10\r
+    CONTROL         "Approximate A500 or A500/A1200 cycle-exact",IDC_CS_68000,\r
+                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,32,195,10\r
+    CONTROL         "Adjustable between CPU and chipset",IDC_CS_ADJUSTABLE,\r
+                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,46,195,10\r
+    CONTROL         "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,114,71,67,20\r
+    CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,219,71,69,20\r
+    GROUPBOX        "Advanced JIT Settings",IDC_STATIC,90,147,205,91\r
+    CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,140,161,115,20\r
+    EDITTEXT        IDC_CACHETEXT,255,166,30,12,ES_CENTER | ES_READONLY\r
+    CONTROL         "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,194,63,10\r
+    CONTROL         "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,208,63,10\r
+    CONTROL         "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,222,62,10\r
+    CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,194,62,10\r
+    CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,235,194,52,10\r
+    CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,208,52,10\r
+    CONTROL         "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,221,73,10\r
+    GROUPBOX        "FPU",IDC_STATIC,5,147,81,90,BS_LEFT\r
+    CONTROL         "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,94,73,8\r
+    CONTROL         "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,161,63,10\r
+    CONTROL         "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,63,10\r
+    CONTROL         "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,188,63,10\r
+    CONTROL         "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,202,63,10\r
+    RTEXT           "CPU Frequency",IDC_STATIC,105,119,51,10,SS_CENTERIMAGE\r
+    GROUPBOX        "Cycle-exact CPU Emulation Speed",IDC_STATIC,90,99,205,46\r
+    RTEXT           "CPU",IDC_STATIC,96,77,17,10,SS_CENTERIMAGE\r
+    RTEXT           "Chipset",IDC_STATIC,182,77,26,9,SS_CENTERIMAGE\r
+    RTEXT           "CPU Idle",IDC_STATIC,231,60,47,9,SS_CENTERIMAGE\r
+    RTEXT           "Cache size:",IDC_STATIC,95,167,42,10,SS_CENTERIMAGE\r
+    CONTROL         "68040 MMU [] 68040 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,132,73,10\r
+    COMBOBOX        IDC_CPU_FREQUENCY,165,118,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    EDITTEXT        IDC_CPU_FREQUENCY2,218,117,70,15\r
+END\r
+\r
+IDD_FLOPPY DIALOGEX 0, 0, 300, 240\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    COMBOBOX        IDC_DF0TEXT,2,22,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF0TYPE,115,6,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,8,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF0WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,4,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT0,253,4,30,15\r
+    PUSHBUTTON      "...",IDC_DF0,287,4,10,15\r
+    COMBOBOX        IDC_DF1TEXT,2,58,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF1TYPE,115,42,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,43,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF1WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,40,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT1,253,40,30,15\r
+    PUSHBUTTON      "...",IDC_DF1,287,40,10,15\r
+    COMBOBOX        IDC_DF2TEXT,2,93,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF2TYPE,115,77,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,77,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF2WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,75,9,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT2,253,75,30,15\r
+    PUSHBUTTON      "...",IDC_DF2,287,75,10,15\r
+    COMBOBOX        IDC_DF3TEXT,2,128,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF3TYPE,115,112,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,113,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF3WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,111,9,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT3,253,110,30,15\r
+    PUSHBUTTON      "...",IDC_DF3,287,109,10,15\r
+    GROUPBOX        "New Floppy Disk Image",IDC_SETTINGSTEXT,5,183,289,49\r
+    COMBOBOX        IDC_FLOPPYTYPE,12,197,64,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Create Standard Disk [] Creates a standard 880 or 1760 KB ADF disk image.",IDC_CREATE,81,196,97,15\r
+    PUSHBUTTON      "Create Custom Disk [] Creates a low level (MFM) ADF disk image (about 2MB). Useful for programs that use non-standard disk formats (for example some save disks or DOS-formatted floppies)",IDC_CREATE_RAW,187,196,101,15\r
+    GROUPBOX        "Floppy Drive Emulation Speed",IDC_SETTINGSTEXT2,5,144,289,35\r
+    CONTROL         "",IDC_FLOPPYSPD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,32,154,116,20\r
+    EDITTEXT        IDC_FLOPPYSPDTEXT,183,157,101,12,ES_CENTER | ES_READONLY\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE0,43,5,70,15,NOT WS_VISIBLE\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE1,43,40,70,15,NOT WS_VISIBLE\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE2,43,75,70,15,NOT WS_VISIBLE\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE3,43,110,70,15,NOT WS_VISIBLE\r
+    EDITTEXT        IDC_CREATE_NAME,81,215,97,13,ES_AUTOHSCROLL\r
+    RTEXT           "Disk label:",IDC_STATIC,15,216,52,10,SS_CENTERIMAGE\r
+    CONTROL         "DF0:",IDC_DF0ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,6,34,15\r
+    CONTROL         "DF1:",IDC_DF1ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,41,34,15\r
+    CONTROL         "DF2:",IDC_DF2ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,76,34,15\r
+    CONTROL         "DF3:",IDC_DF3ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,111,34,15\r
+END\r
+\r
+IDD_HARDDISK DIALOGEX 0, 0, 300, 237\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+EXSTYLE WS_EX_CONTEXTHELP\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "List1",IDC_VOLUMELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,0,290,167\r
+    PUSHBUTTON      "Add &Directory or Archive...",IDC_NEW_FS,10,171,103,15\r
+    PUSHBUTTON      "Add &Hardfile...",IDC_NEW_HF,130,171,74,15\r
+    PUSHBUTTON      "Add Ha&rd Drive...",IDC_NEW_HD,220,171,75,15\r
+    PUSHBUTTON      "Remove",IDC_REMOVE,235,193,60,15\r
+    PUSHBUTTON      "&Properties",IDC_EDIT,235,210,60,15\r
+    CONTROL         "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,192,100,10\r
+    CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,192,119,10\r
+    CONTROL         "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,203,121,10\r
+    CONTROL         "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,226,101,10\r
+    CONTROL         "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,215,100,10\r
+    CONTROL         "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,215,115,10\r
+    CONTROL         "Include removable drives..",IDC_MAPDRIVES_REMOVABLE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,203,100,10\r
+END\r
+\r
+IDD_SOUND DIALOGEX 0, 0, 300, 237\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    COMBOBOX        IDC_SOUNDCARDLIST,5,3,291,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Sound Emulation",IDC_SOUNDSETTINGS,5,20,120,85\r
+    CONTROL         "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,35,101,10\r
+    CONTROL         "Disabled, but emulated",IDC_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,48,102,10\r
+    CONTROL         "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,61,102,10\r
+    CONTROL         "Enabled, 100% accurate",IDC_SOUND3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,74,101,10\r
+    GROUPBOX        "Volume",IDC_STATIC,132,36,164,31\r
+    CONTROL         "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,44,105,20\r
+    EDITTEXT        IDC_SOUNDVOLUME2,247,47,40,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Sound Buffer Size",IDC_STATIC,132,73,164,31\r
+    CONTROL         "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,81,105,19\r
+    EDITTEXT        IDC_SOUNDBUFFERMEM,247,84,40,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,6,106,290,60\r
+    LTEXT           "Frequency:",IDC_SOUNDFREQTXT,11,140,53,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDFREQ,13,149,51,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,209,140,77,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDFILTER,209,149,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Channel mode:",IDC_SOUNDSTEREOTXT,11,116,57,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDSTEREO,13,125,122,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,209,116,75,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDINTERPOLATION,209,125,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,141,116,63,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDSTEREOSEP,142,125,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Stereo delay:",IDC_SOUNDSTEREOMIXTXT,141,140,63,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDSTEREOMIX,142,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Floppy Drive Sound Emulation",IDC_STATIC,6,172,220,60\r
+    CONTROL         "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,186,107,19\r
+    EDITTEXT        IDC_SOUNDDRIVEVOLUME2,124,188,40,12,ES_CENTER | ES_READONLY\r
+    COMBOBOX        IDC_SOUNDDRIVE,173,187,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_SOUNDDRIVESELECT,18,209,202,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_SOUNDSWAP,73,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Swap channels:",IDC_SOUNDSWAPTXT,74,140,61,8,SS_CENTERIMAGE\r
+    CONTROL         "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,89,103,10\r
+    CONTROL         "Exclusive mode",IDC_SOUND_EXCLUSIVE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,137,25,154,10\r
+    CONTROL         "DirectSound",IDC_SOUND_DS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,181,55,10\r
+    CONTROL         "WASAPI",IDC_SOUND_WASAPI,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,193,53,10\r
+    CONTROL         "OpenAL",IDC_SOUND_OPENAL,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,205,53,10\r
+    CONTROL         "PortAudio",IDC_SOUND_PORTAUDIO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,217,58,10\r
+    GROUPBOX        "Drivers",IDC_STATIC,230,172,66,60\r
+END\r
+\r
+IDD_LOADSAVE DIALOGEX 0, 0, 302, 241\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "",IDC_CONFIGTREE,"SysTreeView32",TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,6,3,289,153,WS_EX_CLIENTEDGE\r
+    RTEXT           "Name:",IDC_STATIC,4,161,40,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDITNAME,48,162,146,13,ES_AUTOHSCROLL\r
+    RTEXT           "Description:",IDC_STATIC,2,182,41,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDITDESCRIPTION,48,183,146,13,ES_AUTOHSCROLL\r
+    RTEXT           "Link:",IDC_STATIC,4,204,40,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_CONFIGLINK,48,205,93,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,207,48,10\r
+    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED\r
+    CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,163,42,10\r
+    GROUPBOX        "Additional Information",IDC_STATIC,199,179,96,38,BS_LEFT\r
+    PUSHBUTTON      "View",IDC_VIEWINFO,208,195,37,15\r
+    PUSHBUTTON      "Set",IDC_SETINFO,250,195,37,15\r
+    PUSHBUTTON      "Load",IDC_QUICKLOAD,5,225,44,15\r
+    PUSHBUTTON      "Save",IDC_QUICKSAVE,54,225,44,15\r
+    PUSHBUTTON      "Load From...",IDC_LOAD,121,225,49,15\r
+    PUSHBUTTON      "Delete",IDC_DELETE,251,225,44,15\r
+    PUSHBUTTON      "Save As...",IDC_SAVE,175,225,44,15\r
+END\r
+\r
+IDD_IOPORTS DIALOGEX 0, 0, 300, 228\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Parallel Port",IDC_STATIC,5,2,291,86\r
+    RTEXT           "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_PRINTERLIST,49,15,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,114,51,58,12\r
+    RTEXT           "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,176,49,76,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PRINTERAUTOFLUSH,255,50,25,12,ES_NUMBER\r
+    RTEXT           "Type:",IDC_STATIC,15,33,21,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PS_PARAMS,114,67,167,12,ES_AUTOHSCROLL\r
+    GROUPBOX        "Serial Port",IDC_STATIC,4,92,292,48\r
+    COMBOBOX        IDC_SERIAL,49,104,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,123,48,12\r
+    CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,123,55,12\r
+    RTEXT           "Out:",IDC_MIDI,10,154,34,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_MIDIOUTLIST,49,154,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "In:",IDC_MIDI2,10,174,29,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_MIDIINLIST,49,174,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,\r
+                    "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,123,65,12\r
+    CONTROL         "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,123,78,12\r
+    COMBOBOX        IDC_PRINTERTYPELIST,49,33,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Ghostscript extra parameters:",IDC_STATIC,10,66,102,15,SS_CENTERIMAGE\r
+    GROUPBOX        "MIDI",IDC_STATIC,5,143,291,51,BS_LEFT\r
+    GROUPBOX        "Protection Dongle",IDC_STATIC,5,197,292,30,BS_LEFT\r
+    COMBOBOX        IDC_DONGLELIST,50,208,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+END\r
+\r
+IDD_GAMEPORTS DIALOGEX 0, 0, 300, 236\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    COMBOBOX        IDC_PORT0_JOYS,45,29,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_PORT1_JOYS,45,65,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Swap port 0 and 1",IDC_SWAP,194,101,93,14\r
+    RTEXT           "Port 0:",IDC_STATIC,11,28,25,15,SS_CENTERIMAGE\r
+    RTEXT           "Port 1:",IDC_STATIC,11,64,25,15,SS_CENTERIMAGE\r
+    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,64,87,106,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    GROUPBOX        "Mouse and Joystick settings",IDC_STATIC,4,15,292,148\r
+    GROUPBOX        "Mouse extra settings",IDC_STATIC,4,165,292,69\r
+    RTEXT           "Mouse speed:",IDC_STATIC,17,180,56,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDM,87,180,25,12,ES_NUMBER\r
+    CONTROL         "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,187,120,10\r
+    CONTROL         "Full tablet input emulation",IDC_PORT_TABLET_FULL,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,220,121,10\r
+    CONTROL         "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,175,119,10\r
+    COMBOBOX        IDC_PORT_TABLET_CURSOR,167,201,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Magic Mouse cursor mode:",IDC_STATIC,17,204,138,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_PORT0_JOYSMODE,195,47,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_PORT1_JOYSMODE,195,82,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_PORT2_JOYS,45,125,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Parallel port joystick adapter",IDC_STATIC,10,105,147,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_PORT3_JOYS,45,143,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+END\r
+\r
+IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION\r
+CAPTION "UAE Authors and Contributors..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "Ok",ID_OK,177,224,53,14\r
+    CONTROL         "",IDC_CONTRIBUTORS,"RICHEDIT",TCS_HOTTRACK | TCS_VERTICAL | TCS_RAGGEDRIGHT | TCS_OWNERDRAWFIXED | TCS_MULTISELECT | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,5,404,214\r
+END\r
+\r
+IDD_ABOUT DIALOGEX 0, 0, 300, 191\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    CONTROL         "",IDC_RICHEDIT1,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,45,10,210,15\r
+    CONTROL         "",IDC_RICHEDIT2,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,30,260,13\r
+    PUSHBUTTON      "Contributors",IDC_CONTRIBUTORS,110,59,80,15\r
+    CONTROL         "",IDC_UAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,128,80,15\r
+    CONTROL         "",IDC_PICASSOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | NOT WS_VISIBLE | WS_DISABLED,206,55,80,20\r
+    CONTROL         "",IDC_AMIGAHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,109,98,80,20\r
+    CONTROL         "",IDC_WINUAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,98,80,15\r
+    CONTROL         "",IDC_AIABHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | NOT WS_VISIBLE | WS_DISABLED,17,59,80,15\r
+    CONTROL         "",IDC_THEROOTS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,153,80,15\r
+    CONTROL         "",IDC_CAPS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,128,80,15\r
+    CONTROL         "",IDC_ABIME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,128,80,15\r
+    CONTROL         "",IDC_CLOANTOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,98,80,20\r
+    CONTROL         "",IDC_AMIGASYS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,153,80,15\r
+    CONTROL         "",IDC_AMIKIT,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,153,80,15\r
+END\r
+\r
+IDD_MISC1 DIALOGEX 0, 0, 300, 237\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Miscellaneous Options",IDC_STATIC,8,2,290,136\r
+    CONTROL         "Untrap = middle button",IDC_JULIAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,19,110,10\r
+    CONTROL         "Show GUI on startup",IDC_SHOWGUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,31,109,10\r
+    CONTROL         "Native On-screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,80,109,10\r
+    CONTROL         "Don't show taskbar button",IDC_NOTASKBARBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,56,109,10\r
+    CONTROL         "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,43,110,10\r
+    GROUPBOX        "Keyboard LEDs",IDC_STATIC,7,140,85,94\r
+    COMBOBOX        IDC_KBLED1,22,154,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_KBLED2,22,173,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_KBLED3,22,193,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Logging",IDC_STATIC,97,140,202,25\r
+    CONTROL         "Create log file",IDC_CREATELOGFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,151,72,10\r
+    CONTROL         "Illegal memory accesses",IDC_ILLEGAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,189,151,95,10\r
+    GROUPBOX        "State Files",IDC_STATIC,98,167,201,68\r
+    PUSHBUTTON      "Load state...",IDC_DOLOADSTATE,105,180,49,14\r
+    PUSHBUTTON      "Save state...",IDC_DOSAVESTATE,105,208,49,14\r
+    CONTROL         "Enable state recording",IDC_STATE_CAPTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,182,88,10\r
+    RTEXT           "Recording rate (seconds):",IDC_STATIC,157,199,86,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_STATE_RATE,248,197,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Recording buffer (MB):",IDC_STATIC,160,219,83,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_STATE_BUFFERSIZE,248,217,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Always on top",IDC_ALWAYSONTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,69,110,10\r
+    CONTROL         "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,216,64,10\r
+    COMBOBOX        IDC_SCSIMODE,213,30,80,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_LANGUAGE,153,117,122,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Language",IDC_STATIC,138,107,154,27\r
+    CONTROL         "Disable screensaver",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,82,109,10\r
+    COMBOBOX        IDC_DD_SURFACETYPE,213,63,79,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "DirectDraw display buffer:",IDC_STATIC,195,50,92,10,SS_CENTERIMAGE\r
+    RTEXT           "SCSI and CD/DVD access method:",IDC_STATIC,151,12,126,10,SS_CENTERIMAGE\r
+    CONTROL         "Synchronize clock",IDC_CLOCKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,95,111,10\r
+    CONTROL         "Faster RTG [] Enables less accurate custom chipset emulation mode when Picasso96 is enabled.",IDC_FASTERRTG,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,19,108,100,10\r
+    CONTROL         "RTG On-screen LEDs",IDC_SHOWLEDSRTG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,93,109,10\r
+END\r
+\r
+IDD_HARDFILE DIALOGEX 0, 0, 299, 249\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Hardfile Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "Settings",IDC_STATIC,10,5,280,146\r
+    RTEXT           "Path:",IDC_HARDFILE_DIR_TEXT,25,18,22,10\r
+    EDITTEXT        IDC_PATH_NAME,52,15,213,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_SELECTOR,271,15,11,15\r
+    RTEXT           "FileSys:",IDC_HARDFILE_FILESYS_TEXT,13,38,34,10\r
+    EDITTEXT        IDC_PATH_FILESYS,52,35,213,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_FILESYS_SELECTOR,271,35,11,15\r
+    RTEXT           "Device:",IDC_HARDFILE_DEVICE_TEXT,16,58,31,10\r
+    EDITTEXT        IDC_HARDFILE_DEVICE,52,55,66,15,ES_AUTOHSCROLL\r
+    RTEXT           "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,20,94,48,8\r
+    EDITTEXT        IDC_HARDFILE_BOOTPRI,73,90,44,15\r
+    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,74,64,10\r
+    PUSHBUTTON      "Enable RDB mode",IDC_HDF_RDB,174,55,92,14\r
+    RTEXT           "Surfaces:",IDC_SURFACES_TEXT,118,94,32,10\r
+    EDITTEXT        IDC_HEADS,155,90,40,15,ES_NUMBER\r
+    RTEXT           "Reserved:",IDC_RESERVED_TEXT,197,94,35,10\r
+    EDITTEXT        IDC_RESERVED,237,90,40,15,ES_NUMBER\r
+    RTEXT           "Sectors:",IDC_SECTORS_TEXT,120,113,30,10\r
+    EDITTEXT        IDC_SECTORS,155,111,40,15,ES_NUMBER\r
+    RTEXT           "Block size:",IDC_BLOCKSIZE_TEXT,197,113,35,10\r
+    EDITTEXT        IDC_BLOCKSIZE,237,111,40,15,ES_NUMBER\r
+    GROUPBOX        "New hard disk image file",IDC_STATIC,10,156,280,62\r
+    PUSHBUTTON      "Create",IDC_HF_CREATE,23,171,80,14\r
+    EDITTEXT        IDC_HF_SIZE,119,171,61,15,ES_NUMBER\r
+    PUSHBUTTON      "OK",IDOK,102,226,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,158,226,50,14\r
+    EDITTEXT        IDC_HF_DOSTYPE,119,194,61,15\r
+    COMBOBOX        IDC_HF_TYPE,23,195,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_HDF_CONTROLLER,73,112,44,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "DOS type",IDC_STATIC,187,196,32,10,SS_CENTERIMAGE\r
+    RTEXT           "MB",IDC_STATIC,185,174,17,10,SS_CENTERIMAGE\r
+    RTEXT           "HD Controller:",IDC_STATIC,16,113,52,10,SS_CENTERIMAGE\r
+    CONTROL         "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,74,53,10\r
+    CONTROL         "Do not mount",IDC_HDF_DONOTMOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,74,67,10\r
+    EDITTEXT        IDC_HDFINFO,16,131,268,12,ES_CENTER | ES_READONLY\r
+    CONTROL         "Sparse file",IDC_HF_SPARSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,168,62,10\r
+    CONTROL         "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,180,62,10\r
+END\r
+\r
+IDD_FILESYS DIALOGEX 15, 25, 299, 111\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Volume Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "Device name:",-1,11,7,54,10\r
+    EDITTEXT        IDC_VOLUME_DEVICE,65,5,104,15,ES_AUTOHSCROLL\r
+    LTEXT           "Volume label:",-1,13,28,54,10\r
+    EDITTEXT        IDC_VOLUME_NAME,65,25,104,15,ES_AUTOHSCROLL\r
+    LTEXT           "Path:",-1,38,49,44,10\r
+    EDITTEXT        IDC_PATH_NAME,65,46,227,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "Select Directory",IDC_FS_SELECT_DIR,65,66,103,15\r
+    CONTROL         "Read/write",IDC_FS_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,7,55,10\r
+    RTEXT           "Boot priority:",IDC_VOLUME_BOOTPRI_TEXT,178,28,49,8\r
+    EDITTEXT        IDC_VOLUME_BOOTPRI,236,25,30,15\r
+    PUSHBUTTON      "OK",IDOK,65,91,48,15\r
+    PUSHBUTTON      "Cancel",IDCANCEL,120,91,48,15\r
+    PUSHBUTTON      "Select Archive or Plain File",IDC_FS_SELECT_FILE,190,66,103,15\r
+    PUSHBUTTON      "Eject",IDC_FS_SELECT_EJECT,230,91,62,15\r
+    CONTROL         "Bootable",IDC_FS_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,7,53,10\r
+END\r
+\r
+IDD_SETINFO DIALOGEX 0, 0, 229, 85\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Additional Information Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    RTEXT           "Path:",-1,5,20,24,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATH_NAME,35,20,169,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_SELECTOR,210,20,10,15\r
+    PUSHBUTTON      "OK",IDOK,120,65,48,15\r
+    PUSHBUTTON      "Cancel",IDCANCEL,175,65,48,15\r
+END\r
+\r
+IDD_CHIPSET DIALOGEX 0, 65490, 300, 229\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "Chipset",IDC_STATIC,14,11,145,90\r
+    CONTROL         "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,26,51,10\r
+    CONTROL         "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,42,55,10\r
+    CONTROL         "ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,42,55,10\r
+    CONTROL         "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,58,52,10\r
+    CONTROL         "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,26,51,10\r
+    CONTROL         "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,58,50,10\r
+    GROUPBOX        "Options",IDC_STATIC,168,11,114,89\r
+    CONTROL         "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,179,33,96,10\r
+    CONTROL         "Cycle-exact [] The most compatible A500 emulation mode. Very fast PC recommended.",IDC_CYCLEEXACT,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,46,100,10\r
+    GROUPBOX        "Collision Level",IDC_STATIC,14,105,267,48\r
+    CONTROL         "None [] Collision hardware emulation disabled.",IDC_COLLISION0,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,121,59,10\r
+    CONTROL         "Sprites only [] Emulate only sprite vs. sprite collisions.",IDC_COLLISION1,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,137,62,10\r
+    CONTROL         "Sprites and Sprites vs. Playfield [] Recommended collision emulation level.",IDC_COLLISION2,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,121,161,10\r
+    CONTROL         "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",IDC_COLLISION3,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,137,119,10\r
+    GROUPBOX        "Sound Emulation",IDC_STATIC,13,159,268,65\r
+    CONTROL         "Disabled",IDC_CS_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,175,102,10\r
+    CONTROL         "Emulated",IDC_CS_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,190,91,10\r
+    CONTROL         "Emulated, 100% accurate",IDC_CS_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,205,95,10\r
+    CONTROL         "Genlock connected [] Allow boot sequence to detect genlock. Genlock is not emulated.",IDC_GENLOCK,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,59,100,10\r
+    COMBOBOX        IDC_CS_EXT,100,80,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Chipset Extra",IDC_STATIC,25,79,52,15,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_CHIPSET2 DIALOGEX 0, 65490, 300, 247\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "Battery Backed Up Real Time Clock",IDC_STATIC,11,24,275,29\r
+    CONTROL         "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,36,55,10\r
+    CONTROL         "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,36,52,10\r
+    CONTROL         "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,36,46,10\r
+    EDITTEXT        IDC_CS_RTCADJUST,215,34,64,13,ES_AUTOHSCROLL\r
+    GROUPBOX        "CIA-A TOD Clock Source",IDC_STATIC,11,56,275,29\r
+    CONTROL         "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,68,63,10\r
+    CONTROL         "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,68,85,10\r
+    CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,186,68,88,10\r
+    CONTROL         "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,146,80,10\r
+    CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,95,88,10\r
+    CONTROL         "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,76,10\r
+    CONTROL         "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,108,87,10\r
+    CONTROL         "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,108,84,10\r
+    CONTROL         "CDTV CD",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,121,47,10\r
+    CONTROL         "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,120,87,10\r
+    CONTROL         "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,120,90,10\r
+    CONTROL         "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,133,79,10\r
+    CONTROL         "A4000/A4000T IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,133,88,10\r
+    CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,71,10\r
+    EDITTEXT        IDC_CS_RAMSEYREV,91,214,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,229,71,10\r
+    EDITTEXT        IDC_CS_FATGARYREV,91,228,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,188,76,10\r
+    CONTROL         "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,8,234,10\r
+    CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,95,92,10\r
+    CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,216,81,10\r
+    EDITTEXT        IDC_CS_AGNUSREV,232,214,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,229,81,10\r
+    EDITTEXT        IDC_CS_DENISEREV,232,228,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,188,76,10\r
+    CONTROL         "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,188,88,10\r
+    LTEXT           "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,17,174,159,8,SS_CENTERIMAGE\r
+    CONTROL         "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,133,92,10\r
+    CONTROL         "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,76,10\r
+    CONTROL         "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,200,76,10\r
+    CONTROL         "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,200,101,10\r
+    CONTROL         "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,146,92,10\r
+    CONTROL         "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,146,80,10\r
+    CONTROL         "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10\r
+    CONTROL         "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,159,80,10\r
+    CONTROL         "No-EHB Denise",IDC_CS_NOEHB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,159,80,10\r
+    CONTROL         "Blitter Busy Bug",IDC_CS_BLITTERBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,159,80,10\r
+END\r
+\r
+IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 217\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Output Properties",IDC_STATIC,5,0,274,126\r
+    EDITTEXT        IDC_AVIOUTPUT_FILETEXT,15,15,226,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE\r
+    PUSHBUTTON      "...",IDC_AVIOUTPUT_FILE,249,15,19,12\r
+    CONTROL         "Audio",IDC_AVIOUTPUT_AUDIO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,33,39,14\r
+    CONTROL         "",IDC_AVIOUTPUT_AUDIO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,34,209,13\r
+    CONTROL         "Video",IDC_AVIOUTPUT_VIDEO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,50,39,14\r
+    CONTROL         "",IDC_AVIOUTPUT_VIDEO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,51,209,13\r
+    CONTROL         "Disable frame rate limit",IDC_AVIOUTPUT_FRAMELIMITER,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,122,10\r
+    CONTROL         "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14\r
+    PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,16,141,77,14\r
+    GROUPBOX        "Ripper",IDC_STATIC,5,127,274,49\r
+    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,192,141,77,14,WS_DISABLED\r
+    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,159,77,14\r
+    GROUPBOX        "Input Recorder",IDC_STATIC,5,178,274,33\r
+    CONTROL         "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,190,77,14\r
+    CONTROL         "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,190,77,14\r
+    CONTROL         "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,192,78,10\r
+    CONTROL         "Disable sound output",IDC_AVIOUTPUT_NOSOUNDOUTPUT,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,88,123,10\r
+    CONTROL         "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,88,120,10\r
+    CONTROL         "Capture before filtering",IDC_AVIOUTPUT_ORIGINALSIZE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,71,120,10\r
+    CONTROL         "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,160,162,10\r
+END\r
+\r
+IDD_INPUT DIALOGEX 0, 0, 300, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    COMBOBOX        IDC_INPUTTYPE,5,5,98,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_INPUTDEVICE,109,5,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "",IDC_INPUTDEVICEDISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,282,8,9,8\r
+    CONTROL         "List1",IDC_INPUTLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,22,290,146\r
+    COMBOBOX        IDC_INPUTAMIGACNT,5,174,24,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_INPUTAMIGA,33,174,262,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Joystick dead zone (%):",-1,7,196,79,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTDEADZONE,92,195,25,12,ES_NUMBER\r
+    RTEXT           "Autofire rate (frames):",-1,10,212,76,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTAUTOFIRERATE,92,210,25,12,ES_NUMBER\r
+    RTEXT           "Digital joy-mouse speed:",-1,124,196,84,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDD,215,195,25,12,ES_NUMBER\r
+    RTEXT           "Analog joy-mouse speed:",-1,120,212,88,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDA,215,211,25,12,ES_NUMBER\r
+    PUSHBUTTON      "Copy from:",IDC_INPUTCOPY,249,195,45,14\r
+    COMBOBOX        IDC_INPUTCOPYFROM,249,211,45,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14\r
+END\r
+\r
+IDD_FILTER DIALOGEX 0, 0, 296, 241\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Filter Settings",-1,0,1,294,199\r
+    COMBOBOX        IDC_FILTERMODE,20,15,103,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERFILTER,132,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Reset to defaults",IDC_FILTERDEFAULT,221,15,67,14\r
+    RTEXT           "Horiz. size:",-1,7,61,46,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,54,152,19\r
+    EDITTEXT        IDC_FILTERHZV,253,56,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Vert. size:",-1,7,81,46,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,74,152,19\r
+    EDITTEXT        IDC_FILTERVZV,253,76,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Horiz. position:",-1,5,101,55,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,94,151,19\r
+    EDITTEXT        IDC_FILTERHOV,253,96,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Vert. position:",-1,5,120,55,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,114,151,19\r
+    EDITTEXT        IDC_FILTERVOV,253,116,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Extra settings:",-1,105,135,57,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,174,151,19\r
+    EDITTEXT        IDC_FILTERXLV,253,176,34,12,ES_CENTER | ES_READONLY\r
+    COMBOBOX        IDC_FILTERSLR,253,151,33,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Presets",-1,0,203,296,36\r
+    COMBOBOX        IDC_FILTERPRESETS,8,217,119,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Load",IDC_FILTERPRESETLOAD,132,216,47,14\r
+    PUSHBUTTON      "Save",IDC_FILTERPRESETSAVE,184,216,47,14\r
+    PUSHBUTTON      "Delete",IDC_FILTERPRESETDELETE,236,216,47,14\r
+    COMBOBOX        IDC_FILTERHZMULT,59,60,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERVZMULT,59,80,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERXTRA,105,151,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERASPECT,14,151,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,168,85,10\r
+    RTEXT           "Automatic scaling:",-1,9,38,79,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_FILTERAUTOSCALE,105,36,140,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERASPECT2,14,180,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+END\r
+\r
+IDD_HARDDRIVE DIALOGEX 0, 0, 380, 76\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Harddrive Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "Hard drive:",IDC_STATIC,7,11,80,10\r
+    COMBOBOX        IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10\r
+    DEFPUSHBUTTON   "Add hard drive",IDOK,231,48,65,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,319,48,54,14\r
+    DEFPUSHBUTTON   "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14\r
+    EDITTEXT        IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE\r
+    COMBOBOX        IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "HD Controller:",IDC_STATIC,42,51,52,10,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_MISC2 DIALOGEX 0, 0, 300, 244\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "When Active",IDC_STATIC,8,7,88,73\r
+    RTEXT           "Run at priority:",IDC_ACTIVE_PRI,14,17,52,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_ACTIVE_PRIORITY,14,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "When Inactive",IDC_STATIC,102,7,92,73\r
+    RTEXT           "Run at priority:",IDC_INACTIVE_PRI,109,17,51,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_INACTIVE_PRIORITY,109,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Pause emulation",IDC_INACTIVE_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,50,69,10\r
+    CONTROL         "Disable sound",IDC_INACTIVE_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,63,79,10\r
+    GROUPBOX        "When Minimized",IDC_STATIC,199,7,92,73\r
+    RTEXT           "Run at priority:",IDC_MINIMIZED_PRI,207,18,51,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_MINIMIZED_PRIORITY,207,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Pause emulation",IDC_MINIMIZED_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,50,69,10\r
+    CONTROL         "Disable sound",IDC_MINIMIZED_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,63,79,10\r
+    CONTROL         "",IDC_ASSOCIATELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,19,94,164,100\r
+    GROUPBOX        "File Extension Associations",IDC_STATIC,8,83,186,138\r
+    PUSHBUTTON      "Deassociate all",IDC_ASSOCIATE_OFF,108,200,75,14\r
+    PUSHBUTTON      "Associate all",IDC_ASSOCIATE_ON,19,200,75,14\r
+END\r
+\r
+IDD_DISK DIALOGEX 0, 0, 300, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_CONTROL | DS_CENTER | DS_CENTERMOUSE | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    CONTROL         "",IDC_DISKLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,6,292,196\r
+    PUSHBUTTON      "Remove floppy disk image",IDC_DISKLISTREMOVE,156,223,101,15\r
+    COMBOBOX        IDC_DISKTEXT,3,205,293,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Insert floppy disk image",IDC_DISKLISTINSERT,41,223,101,15\r
+END\r
+\r
+IDD_PANEL DIALOGEX 0, 0, 420, 278\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+EXSTYLE WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT\r
+CAPTION "WinUAE Properties"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "",IDC_PANEL_FRAME,112,4,303,247,NOT WS_VISIBLE\r
+    CONTROL         "",IDC_PANELTREE,"SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_NOSCROLL | WS_BORDER | WS_HSCROLL | WS_TABSTOP,5,5,101,248,WS_EX_CLIENTEDGE\r
+    GROUPBOX        "",IDC_PANEL_FRAME_OUTER,110,2,307,251\r
+    PUSHBUTTON      "Reset",IDC_RESETAMIGA,5,259,47,14\r
+    PUSHBUTTON      "Quit",IDC_QUITEMU,55,259,47,14\r
+    DEFPUSHBUTTON   "OK",IDOK,260,259,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,313,259,50,14\r
+    PUSHBUTTON      "Help",IDHELP,366,259,50,14,WS_DISABLED\r
+    PUSHBUTTON      "Restart",IDC_RESTARTEMU,106,259,47,14,NOT WS_VISIBLE\r
+END\r
+\r
+IDD_PATHS DIALOGEX 0, 0, 300, 243\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    LTEXT           "System ROMs:",IDC_PATHS_ROML,14,4,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_ROM,14,15,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_ROMS,281,15,11,15\r
+    LTEXT           "Configuration files:",IDC_PATHS_CONFIGL,14,32,121,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_CONFIG,14,42,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_CONFIGS,281,42,11,15\r
+    LTEXT           "Screenshots:",IDC_PATHS_SCREENSHOTL,14,59,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_SCREENSHOT,14,69,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_SCREENSHOTS,281,69,11,15\r
+    LTEXT           "State files:",IDC_PATHS_STATEFILEL,14,86,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_SAVESTATE,14,96,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_SAVESTATES,281,96,11,15\r
+    LTEXT           "Videos:",IDC_PATHS_AVIOUTPUTL,14,113,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_AVIOUTPUT,14,123,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_AVIOUTPUTS,281,123,11,15\r
+    LTEXT           "Saveimages:",IDC_PATHS_SAVEIMAGEL,14,140,261,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_SAVEIMAGE,14,151,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_SAVEIMAGES,281,151,11,15\r
+    PUSHBUTTON      "Reset to defaults",IDC_PATHS_DEFAULT,14,196,92,14\r
+    PUSHBUTTON      "Rescan ROMs",IDC_ROM_RESCAN,14,212,92,14\r
+    PUSHBUTTON      "Clear registry",IDC_RESETREGISTRY,111,212,92,14\r
+    COMBOBOX        IDC_PATHS_DEFAULTTYPE,111,197,163,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Clear disk history",IDC_RESETDISKHISTORY,14,228,92,14\r
+    CONTROL         "Cache Configuration files",IDC_PATHS_CONFIGCACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,32,97,10\r
+    LTEXT           "Rips:",IDC_PATHS_RIPSL,13,168,261,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_RIP,13,178,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_RIPS,280,178,11,15\r
+END\r
+\r
+IDD_QUICKSTART DIALOGEX 0, 0, 300, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Emulated Hardware",IDC_QUICKSTART_CONFIG,3,0,294,54\r
+    RTEXT           "Model:",IDC_STATIC,5,14,50,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_QUICKSTART_MODEL,59,12,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Configuration:",IDC_STATIC,5,33,50,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_QUICKSTART_CONFIGURATION,59,31,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Compatibility vs Required CPU Power ",IDC_QUICKSTART_COMPA,3,56,294,33\r
+    RTEXT           "Best compatibility",IDC_STATIC,13,70,67,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_QUICKSTART_COMPATIBILITY,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,95,65,115,21\r
+    RTEXT           "Low compatibility",IDC_STATIC,215,70,63,10,SS_CENTERIMAGE\r
+    GROUPBOX        "Host Configuration",IDC_QUICKSTART_HOST,3,91,294,33\r
+    RTEXT           "Configuration:",IDC_STATIC,5,105,55,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_QUICKSTART_HOSTCONFIG,65,103,225,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Emulated Floppy Drives",IDC_QUICKSTART_DF,3,126,294,84\r
+    CONTROL         "Floppy drive DF0:",IDC_DF0QENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,10,136,72,15\r
+    PUSHBUTTON      "Select disk image",IDC_DF0QQ,85,136,98,15\r
+    RTEXT           "Write-protected",IDC_STATIC,185,139,56,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF0WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,137,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT0Q,261,136,30,15\r
+    COMBOBOX        IDC_DF0TEXTQ,9,154,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Floppy drive DF1:",IDC_DF1QENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,172,71,15\r
+    PUSHBUTTON      "Select disk image",IDC_DF1QQ,85,172,98,15\r
+    RTEXT           "Write-protected",IDC_STATIC,185,175,55,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF1WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,173,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT1Q,261,172,30,15\r
+    COMBOBOX        IDC_DF1TEXTQ,9,190,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Set configuration",IDC_QUICKSTART_SETCONFIG,9,219,72,15,NOT WS_VISIBLE\r
+    GROUPBOX        "Mode",IDC_STATIC,190,211,107,27,BS_LEFT\r
+    CONTROL         "Start in Quickstart mode",IDC_QUICKSTARTMODE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,197,222,94,10\r
+END\r
+\r
+IDD_FRONTEND DIALOGEX 0, 0, 420, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "",IDC_FE_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,9,235,124\r
+    GROUPBOX        "",IDC_FE_INFO,249,140,160,95\r
+    GROUPBOX        "",IDC_FE_SCREENSHOT,249,7,160,128\r
+END\r
+\r
+IDD_PROGRESSBAR DIALOGEX 0, 0, 229, 58\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Processing..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    PUSHBUTTON      "Cancel",IDCANCEL,88,40,50,14\r
+    CONTROL         "",IDC_PROGRESSBAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,7,19,215,14\r
+    CTEXT           "x",IDC_PROGRESSBAR_TEXT,23,5,187,10,SS_CENTERIMAGE | WS_TABSTOP\r
+END\r
+\r
+IDD_STRINGBOX DIALOGEX 0, 0, 229, 58\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Enter text..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,48,39,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,151,39,50,14\r
+    EDITTEXT        IDC_STRINGBOXEDIT,7,17,214,14,ES_AUTOHSCROLL | ES_WANTRETURN\r
+END\r
+\r
+IDD_DEBUGGER DIALOGEX 0, 0, 454, 368\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_CONTROLPARENT\r
+CAPTION "WinUAE Debugger"\r
+FONT 8, "Courier New", 0, 0, 0x0\r
+BEGIN\r
+    EDITTEXT        IDC_DBG_OUTPUT1,1,255,370,86,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP\r
+    EDITTEXT        IDC_DBG_OUTPUT2,1,79,370,262,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP\r
+    LISTBOX         IDC_DBG_MEM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_DASM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    EDITTEXT        IDC_DBG_MEMINPUT,1,79,36,12,ES_AUTOHSCROLL | ES_WANTRETURN\r
+    EDITTEXT        IDC_DBG_INPUT,1,342,354,12,ES_AUTOHSCROLL | ES_WANTRETURN\r
+    PUSHBUTTON      "?",IDC_DBG_HELP,356,342,15,12,NOT WS_TABSTOP\r
+    PUSHBUTTON      "Set to PC",IDC_DBG_MEMTOPC,38,79,45,12,NOT WS_TABSTOP\r
+    LISTBOX         IDC_DBG_DREG,1,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_AREG,54,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_AMEM,106,1,231,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_CCR,338,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_SP_VBR,338,44,115,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MMISC,396,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_PC,1,68,52,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_PREFETCH,54,68,283,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_FPREG,372,218,81,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_FPSR,372,285,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MISCCPU,372,320,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    CONTROL         "",IDC_DBG_STATUS,"msctls_statusbar32",0x103,0,355,453,12\r
+    LISTBOX         IDC_DBG_BRKPTS,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL\r
+    LISTBOX         IDC_DBG_MCUSTOM,372,79,81,138,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MISC,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL\r
+    LISTBOX         IDC_DBG_CUSTOM,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL\r
+    CONTROL         "Auto set",IDC_DBG_AUTOSET,"Button",BS_AUTOCHECKBOX,84,79,50,12\r
+    LISTBOX         IDC_DBG_DASM2,1,79,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MEM2,1,167,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+END\r
+\r
+IDD_DBGMEMINPUT DIALOGEX 0, 0, 150, 58\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Enter address..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,15,39,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,75,39,50,14\r
+    EDITTEXT        IDC_DBG_MEMINPUT2,20,12,100,14,ES_AUTOHSCROLL | ES_WANTRETURN\r
+    CTEXT           "Enter address",IDC_DBG_ADDRINPUTTXT,20,1,100,10,SS_CENTERIMAGE | WS_TABSTOP\r
+END\r
+\r
+IDD_EXPANSION DIALOGEX 0, 0, 300, 206\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    RTEXT           "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,44,53,10,SS_NOTIFY | SS_CENTERIMAGE\r
+    CONTROL         "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,40,60,20\r
+    EDITTEXT        IDC_P96RAM,152,43,34,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "RTG Graphics Card",IDC_STATIC,5,12,291,113\r
+    CONTROL         "Scale if smaller than display size setting",IDC_RTG_SCALE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,74,162,10\r
+    CONTROL         "Match host and RTG color depth if possible",IDC_RTG_MATCH_DEPTH,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,62,163,10\r
+    COMBOBOX        IDC_RTG_8BIT,211,29,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RTG_16BIT,211,44,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RTG_24BIT,211,59,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RTG_32BIT,211,74,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,86,162,10\r
+    COMBOBOX        IDC_RTG_SCALE_ASPECTRATIO,211,101,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Aspect ratio:",IDC_STATIC,153,102,52,10,SS_CENTERIMAGE\r
+    RTEXT           "Refresh rate:",IDC_STATIC,22,103,51,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_RTG_VBLANKRATE,77,101,68,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,148,120,10\r
+    CONTROL         "uaenet.device [] Sana 2 compatible network device emulation. WinPcap required.",IDC_SANA2,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,160,77,10\r
+    CONTROL         "A2065 Z2 [] A2065 Ethernet Zorro II card emulation. WinPcap required.",IDC_A2065,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,160,57,10\r
+    GROUPBOX        "Network",IDC_STATIC,126,130,169,66\r
+    COMBOBOX        IDC_NETDEVICE,132,176,156,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,160,102,10\r
+    CONTROL         "Catweasel Z2 emulation [] Catweasel MK2 Zorro II card emulation. Physical Windows compatible Catweasel card and drivers required.",IDC_CATWEASEL,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,148,101,10\r
+    GROUPBOX        "Miscellaneous Expansions",IDC_STATIC,5,130,117,66\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION 2,0,2,0\r
+ PRODUCTVERSION 2,0,2,0\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x40004L\r
+ FILETYPE 0x1L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "FileDescription", "WinUAE"\r
+            VALUE "FileVersion", "2.0.2"\r
+            VALUE "InternalName", "WinUAE"\r
+            VALUE "LegalCopyright", "© 1996-2010 under the GNU Public License (GPL)"\r
+            VALUE "OriginalFilename", "WinUAE.exe"\r
+            VALUE "ProductName", "WinUAE"\r
+            VALUE "ProductVersion", "2.0.2"\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Cursor\r
+//\r
+\r
+IDC_MYHAND              CURSOR                  "H_arrow.cur"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDM_SYSTRAY MENU \r
+BEGIN\r
+    POPUP "Menu"\r
+    BEGIN\r
+        MENUITEM "Configuration",               ID_ST_CONFIGURATION\r
+        POPUP "Floppy drives"\r
+        BEGIN\r
+            MENUITEM "Eject all drives",            ID_ST_EJECTALL\r
+            MENUITEM "DF0:",                        ID_ST_DF0\r
+            MENUITEM "DF1:",                        ID_ST_DF1\r
+            MENUITEM "DF2:",                        ID_ST_DF2\r
+            MENUITEM "DF3:",                        ID_ST_DF3\r
+        END\r
+        MENUITEM "Reset",                       ID_ST_RESET\r
+        MENUITEM "Help",                        ID_ST_HELP\r
+        MENUITEM "Quit WinUAE",                 ID_ST_QUIT\r
+    END\r
+END\r
+\r
+IDM_DBGCONTEXTMENU MENU \r
+BEGIN\r
+    POPUP "Inactive"\r
+    BEGIN\r
+        POPUP "Copy"\r
+        BEGIN\r
+            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE\r
+            MENUITEM "Copy all",                    ID_DBG_COPYLB\r
+        END\r
+    END\r
+    POPUP "Memory"\r
+    BEGIN\r
+        POPUP "Copy"\r
+        BEGIN\r
+            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE\r
+            MENUITEM "Copy all",                    ID_DBG_COPYLB\r
+        END\r
+        POPUP "Set top address"\r
+        BEGIN\r
+            MENUITEM "Set to A0",                   ID_DBG_SETTOA0\r
+            MENUITEM "Set to A1",                   ID_DBG_SETTOA1\r
+            MENUITEM "Set to A2",                   ID_DBG_SETTOA2\r
+            MENUITEM "Set to A3",                   ID_DBG_SETTOA3\r
+            MENUITEM "Set to A4",                   ID_DBG_SETTOA4\r
+            MENUITEM "Set to A5",                   ID_DBG_SETTOA5\r
+            MENUITEM "Set to A6",                   ID_DBG_SETTOA6\r
+            MENUITEM "Set to A7",                   ID_DBG_SETTOA7\r
+            MENUITEM "Enter address",               ID_DBG_ENTERADDR\r
+        END\r
+    END\r
+    POPUP "Disassembly"\r
+    BEGIN\r
+        POPUP "Copy"\r
+        BEGIN\r
+            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE\r
+            MENUITEM "Copy all",                    ID_DBG_COPYLB\r
+        END\r
+        POPUP "Breakpoints"\r
+        BEGIN\r
+            MENUITEM "Toggle breakpoint",           ID_DBG_TOGGLEBP\r
+            MENUITEM "Clear all breakpoints",       ID_DBG_DELETEBPS\r
+        END\r
+        POPUP "Set top address"\r
+        BEGIN\r
+            MENUITEM "Set to PC",                   ID_DBG_SETTOPC\r
+            MENUITEM "Enter address",               ID_DBG_ENTERADDR\r
+        END\r
+    END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// WAVE\r
+//\r
+\r
+IDR_DRIVE_STARTUP_A500_1 WAVE                    "drive_startup.wav"\r
+IDR_DRIVE_CLICK_A500_1  WAVE                    "drive_click.wav"\r
+IDR_DRIVE_SPIN_A500_1   WAVE                    "drive_spin.wav"\r
+IDR_DRIVE_SNATCH_A500_1 WAVE                    "drive_snatch.wav"\r
+IDR_DRIVE_SPINND_A500_1 WAVE                    "drive_spinnd.wav"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Bitmap\r
+//\r
+\r
+IDB_XARCADE             BITMAP                  "xarcade-winuae.bmp"\r
+IDB_LCD160X43           BITMAP                  "lcd.bmp"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO \r
+BEGIN\r
+    IDD_FILTER, DIALOG\r
+    BEGIN\r
+        BOTTOMMARGIN, 237\r
+    END\r
+END\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_KICKSTART           "ROM"\r
+    IDS_DISK                "Disk swapper"\r
+    IDS_DISPLAY             "Display"\r
+    IDS_HARDDISK            "Hard drives"\r
+    IDS_FLOPPY              "Floppy drives"\r
+    IDS_ABOUT               "About"\r
+    IDS_LOADSAVE            "Configurations"\r
+    IDS_AVIOUTPUT           "Output"\r
+    IDS_IOPORTS             "IO ports"\r
+    IDS_MISC1               "Miscellaneous"\r
+    IDS_MEMORY              "RAM"\r
+    IDS_CPU                 "CPU and FPU"\r
+    IDS_CHIPSET             "Chipset"\r
+    IDS_INPUT               "Input"\r
+    IDS_FILTER              "Filter"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_MISC2               "Pri. & Extensions"\r
+    IDS_PATHS               "Paths"\r
+    IDS_QUICKSTART          "Quickstart"\r
+    IDS_FRONTEND            "Frontend"\r
+    IDS_CHIPSET2            "Adv. Chipset"\r
+    IDS_GAMEPORTS           "Game ports"\r
+    IDS_EXPANSION           "Expansions"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_EXTTEXT             "Floppy disk image files"\r
+    IDS_EXTACTUAL           "ADF"\r
+    IDS_SOUND               "Sound"\r
+    IDS_CDROM               "CD-ROM"\r
+    IDS_FRAMERATE           "Every %1Frame"\r
+    IDS_SECOND              "second "\r
+    IDS_THIRD               "third "\r
+    IDS_FOURTH              "fourth "\r
+    IDS_FIFTH               "fifth "\r
+    IDS_SIXTH               "sixth "\r
+    IDS_SEVENTH             "seventh "\r
+    IDS_EIGHTH              "eighth "\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NINTH               "ninth "\r
+    IDS_TENTH               "tenth "\r
+    IDS_SELECTADF           "Select a floppy disk image file..."\r
+    IDS_ADF                 "Floppy disk image files"\r
+    IDS_CHOOSEBLANK         "Choose a blank floppy disk image file..."\r
+    IDS_SELECTHDF           "Select a hard disk image file..."\r
+    IDS_HDF                 "Hard disk image files"\r
+    IDS_SELECTUAE           "Select a WinUAE configuration file..."\r
+    IDS_UAE                 "WinUAE configuration files"\r
+    IDS_SELECTROM           "Select a system ROM file..."\r
+    IDS_ROM                 "System ROM files"\r
+    IDS_SELECTKEY           "Select a system ROM key file..."\r
+    IDS_KEY                 "System ROM key files"\r
+    IDS_SELECTINFO          "Select information for your configuration..."\r
+    IDS_NONE                "none"\r
+    IDS_VOLUME              "Volume"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_SELECTFILESYSROOT   "Please select the root directory of the file system..."\r
+    IDS_DEFAULTMIDIOUT      "Default MIDI-Out Device"\r
+    IDS_CONTRIBUTORS1       "Bernd Schmidt - The Grand-Master\nSam Jordan - Custom-chip, floppy-DMA, etc.\nMathias Ortmann - Original WinUAE Main Guy, BSD Socket support\nBrian King - Picasso96 Support, Integrated GUI for WinUAE, previous WinUAE Main Guy\nToni Wilen - Core updates, WinUAE Main Guy\nGustavo Goedert/Peter Remmers/Michael Sontheimer/Tomi Hakala/Tim Gunn/Nemo Pohle - DOS Port Stuff\nSamuel Devulder/Olaf Barthel/Sam Jordan - Amiga Ports\nKrister Bergman - XFree86 and OS/2 Port\nA. Blanchard/Ernesto Corvi - MacOS Port\nChristian Bauer - BeOS Port\nIan Stephenson - NextStep Port\nPeter Teichmann - Acorn/RiscOS Port\nStefan Reinauer - ZorroII/III AutoConfig, Serial Support\nChristian Schmitt/Chris Hames - Serial Support\nHerman ten Brugge - 68020/68881 Emulation Code\nTauno Taipaleenmaki - Various UAE-Control/UAE-Library Support\nBrett Eden/Tim Gunn/Paolo Besser/Nemo Pohle - Various Docs and Web-Sites\nGeorg Veichtlbauer - Help File coordinator, German GUI\nFulvio Leonardi - Italian translator for WinUAE\n"\r
+    IDS_CONTRIBUTORS2       "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nPéter Tóth /Balázs Rátkai/Iván Herczeg/András Arató - Hungarian translation.\nKarsten Bock, Gavin Fance, Dirk Trowe, Christoph Meier and Christian Schindler - Freezer cartridge hardware support.\nMikko Nieminen - Demo compatibility testing.\nArabuusimiehet - [This information is on a need-to-know basis]"\r
+    IDS_INVALIDPRTPORT      "The printer you have in this configuration is not valid on this machine.\n"\r
+    IDS_RESTOREUSS          "Restore a WinUAE snapshot file"\r
+    IDS_USS                 "WinUAE snapshot files"\r
+    IDS_WRONGOSVERSION      "WinUAE is no longer supported on Windows NT.  Please upgrade to either Windows 2000 or Windows XP or a later version."\r
+    IDS_SELECTFLASH         "Select a flash or battery-backed RAM file..."\r
+    IDS_FLASH               "WinUAE flash or battery-backed RAM file"\r
+    IDS_INPUTHOSTWIDGET     "Input source"\r
+    IDS_INPUTAMIGAEVENT     "Input target"\r
+    IDS_INPUTAUTOFIRE       "Autofire"\r
+    IDS_SAVEUSS             "Save a WinUAE snapshot file"\r
+    IDS_MIDIOVERFLOW        "Sysexbuffer overflow. Should not happen. Please report this to\nberndroesch1@compuserve.de"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_PATH                "Path"\r
+    IDS_RW                  "R/W"\r
+    IDS_SECTORS             "Sectors"\r
+    IDS_SURFACES            "Surfaces"\r
+    IDS_RESERVED            "Reserved"\r
+    IDS_BLOCKSIZE           "Block size"\r
+    IDS_NAME                "Name"\r
+    IDS_DESCRIPTION         "Description"\r
+    IDS_COULDNOTLOADCONFIG  "Could not load the selected configuration!\n"\r
+    IDS_NOHELP              "Online help is disabled because the HTML Help functionality is not installed on this system. HTML Help is available from http://www.microsoft.com/downloads/.\n"\r
+    IDS_MUSTSELECTCONFIG    "You must select a configuration or enter a name before selecting Load...\n"\r
+    IDS_INVALIDCOMPORT      "The serial port you have in this configuration is not valid on this machine.\n"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_HFDSIZE             "Size"\r
+    IDS_DEVICE              "Device"\r
+    IDS_BOOTPRI             "BootPri"\r
+    IDS_FLOPPY_COMPATIBLE   " (compatible)"\r
+    IDS_FLOPPY_TURBO        "Turbo"\r
+    IDS_YES                 "yes"\r
+    IDS_NO                  "no"\r
+    IDS_PRI_ABOVENORMAL     "Above Normal"\r
+    IDS_PRI_NORMAL          "Normal"\r
+    IDS_PRI_BELOWNORMAL     "Below Normal"\r
+    IDS_PRI_LOW             "Low"\r
+    IDS_OLDRTGLIBRARY       "The installed LIBS:Picasso96/rtg.library (%d.%d) should be updated.\nA newer version is included in the ""Amiga Programs"" directory\n of the WinUAE distribution archive.\n\nNewer library version fixes graphics problems and increases performance."\r
+    IDS_DEFAULT_AF2005      "Amiga Forever 2005+"\r
+    IDS_DEFAULT_AF          "Amiga Forever"\r
+    IDS_DEFAULT_WINUAE      "WinUAE default (old)"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_SOUND_STEREO2       "Cloned Stereo (4 Channels)"\r
+    IDS_INPUT_CUSTOMEVENT   "<Custom event>"\r
+    IDS_DEFAULT_NEWWINUAE   "WinUAE default (new)"\r
+    IDS_SOUND_CLONED51      "Cloned Stereo (5.1)"\r
+    IDS_SOUND_51            "5.1 Channels"\r
+    IDS_AUTOMATIC           "Automatic"\r
+    IDS_ALL                 "All"\r
+    IDS_INPUTTOGGLE         "Toggle"\r
+    IDS_NETDISCONNECTED     "Cable disconnected"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_UNSUPPORTEDPIXELFORMAT \r
+                            "Error: unsupported pixel format. Please use a different screen mode.\n"\r
+    IDS_MUSTENTERNAME       "You must select a configuration or enter a name before selecting Save...\n"\r
+    IDS_MUSTSELECTCONFIGFORDELETE \r
+                            "You must select a configuration or enter a name before selecting Delete...\n"\r
+    IDS_DELETECONFIGCONFIRMATION \r
+                            "Are you sure you want to Delete this configuration?\n"\r
+    IDS_DELETECONFIGTITLE   "Confirm Delete"\r
+    IDS_MUSTSELECTPATH      "You must select a path!"\r
+    IDS_SETTINGSERROR       "Settings error"\r
+    IDS_MUSTSELECTNAME      "You must select a name for the volume!"\r
+    IDS_MUSTSELECTFILE      "You must select a file!"\r
+    IDS_FAILEDHARDFILECREATION "Failed to create hard disk image file..."\r
+    IDS_CREATIONERROR       "Creation error"\r
+    IDS_ERRORTITLE          "WinUAE message"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_INP                 "WinUAE Input Recording"\r
+    IDS_RESTOREINP          "Playback a WinUAE input recording"\r
+    IDS_SAVEINP             "Record a WinUAE input recording"\r
+    IDS_SCREEN_WINDOWED     "Windowed"\r
+    IDS_SCREEN_FULLSCREEN   "Fullscreen"\r
+    IDS_SCREEN_FULLWINDOW   "Full-window"\r
+    IDS_SCREEN_VSYNC        "VSync"\r
+    IDS_SCREEN_VSYNC_AUTOSWITCH "AutoVSync"\r
+    IDS_SOUND_MONO          "Mono"\r
+    IDS_SOUND_MIXED         "Mixed"\r
+    IDS_SOUND_STEREO        "Stereo"\r
+    IDS_DISABLED            "Disabled"\r
+    IDS_SOUND_FILTER_OFF    "Always off"\r
+    IDS_SOUND_FILTER_EMULATED "Emulated (A500)"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_SOUND_FILTER_EMULATED_E "Emulated (A1200)"\r
+    IDS_INPUT_COMPATIBILITY "Compatibility mode"\r
+    IDS_INPUT_CUSTOM        "Configuration #%d"\r
+    IDS_INPUT_COPY_DEFAULT  "Default"\r
+    IDS_INPUT_COPY_CUSTOM   "Config #%d"\r
+    IDS_3D_NO_FILTER        "Point (%d-bit)"\r
+    IDS_3D_BILINEAR         "Bilinear (%d-bit)"\r
+    IDS_VSYNC_DEFAULT       "Default"\r
+    IDS_DRIVESOUND_NONE     "No sound"\r
+    IDS_DRIVESOUND_DEFAULT_A500 "A500 (WinUAE built-in)"\r
+    IDS_AVIOUTPUT_NOCODEC   "no codec selected"\r
+    IDS_DISK_IMAGENAME      "Disk image"\r
+    IDS_DISK_DRIVENAME      "Drive"\r
+    IDS_UNSUPPORTEDSCREENMODE \r
+                            "The selected screen mode can't be displayed in a window, because %s\nSwitching to full-screen display."\r
+    IDS_UNSUPPORTEDSCREENMODE_1 \r
+                            "the desktop is running in an unknown color mode."\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_UNSUPPORTEDSCREENMODE_2 \r
+                            "the desktop is running in 8-bit color depth, which WinUAE can't use in windowed mode."\r
+    IDS_UNSUPPORTEDSCREENMODE_3 \r
+                            "the desktop is too small for the specified window size."\r
+    IDS_UNSUPPORTEDSCREENMODE_4 \r
+                            "you selected an RTG (Picasso96) display with unsupported color depth."\r
+    IDS_FLOPPYTYPE35DD      "3.5"" DD"\r
+    IDS_FLOPPYTYPE35HD      "3.5"" HD"\r
+    IDS_FLOPPYTYPE525SD     "5.25"" SD"\r
+    IDS_FLOPPYTYPEDISABLED  "Disabled"\r
+    IDS_STMENUNOFLOPPY      "No floppy disk inserted"\r
+    IDS_TREEVIEW_HARDWARE   "Hardware"\r
+    IDS_TREEVIEW_HOST       "Host"\r
+    IDS_TREEVIEW_MISC       "Miscellaneous"\r
+    IDS_TREEVIEW_SETTINGS   "Settings"\r
+    IDS_WINUAETITLE_MMB     "[Mouse active - press ALT+TAB or middle mouse button to cancel]"\r
+    IDS_WINUAETITLE_NORMAL  "[Mouse active - press ALT+TAB to cancel]"\r
+    IDS_STARTEMULATION      "Start"\r
+    IDS_TREEVIEW_ABOUT      "About"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NOHARDDRIVES        "No hard disks detected that were either empty or RDB-partitioned."\r
+    IDS_DEFAULT_HOST        "Default Configuration"\r
+    IDS_SOUND_4CHANNEL      "4 Channels"\r
+    IDS_HF_FS_CUSTOM        "Custom"\r
+    IDS_SELECTFS            "Select file system handler (FastFileSystem, SmartFilesystem, etc.)"\r
+    IDS_KEYJOY              "Keyboard Layout A (Numeric keypad, 0 and 5 = Fire)\nKeyboard Layout B (Cursor keys, Right CTRL and ALT = Fire)\nKeyboard Layout C (W=Up S=Down A=Left D=Right, Left ALT = Fire)\nX-Arcade (Left)\nX-Arcade (Right)"\r
+    IDS_STATEFILE_UNCOMPRESSED "Uncompressed"\r
+    IDS_STATEFILE_RAMDUMP   "RAM dump"\r
+    IDS_STATEFILE_WAVE      "Wave audio dump"\r
+    IDS_SOUND_SWAP_PAULA    "Paula only"\r
+    IDS_SOUND_SWAP_AHI      "AHI only"\r
+    IDS_SOUND_SWAP_BOTH     "Both"\r
+    IDS_SOUND_FILTER_ON_AGA "Always on (A500)"\r
+    IDS_SOUND_FILTER_ON_A500 "Always on (A1200)"\r
+    IDS_DRIVESOUND_PC_FLOPPY "PC floppy drive %c"\r
+    IDS_FLOPPYTYPE35DDESCOM "3.5"" ESCOM"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NUMSG_NEEDEXT2      "The software uses a non-standard floppy disk format. You may need to use a custom floppy disk image file instead of a standard one. This message will not appear again."\r
+    IDS_NUMSG_NOROMKEY      "Could not find system ROM key file."\r
+    IDS_NUMSG_KSROMCRCERROR "System ROM checksum incorrect. The system ROM image file may be corrupt."\r
+    IDS_NUMSG_KSROMREADERROR "Error while reading system ROM."\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NUMSG_NOEXTROM      "No extended ROM found."\r
+    IDS_NUMSG_MODRIP_NOTFOUND "No music modules or packed data found."\r
+    IDS_NUMSG_MODRIP_FINISHED "Scan finished."\r
+    IDS_NUMSG_MODRIP_SAVE   "Module/packed data found\n%s\nStart address %08.8X, Size %d bytes\nWould you like to save it?"\r
+    IDS_NUMSG_KS68020       "The selected system ROM requires a 68020 with 32-bit addressing or 68030 or higher CPU."\r
+    IDS_NUMSG_ROMNEED       "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."\r
+    IDS_NUMSG_STATEHD       "WARNING: Current configuration is not fully compatible with state saves.\nThis message will not appear again."\r
+    IDS_NUMSG_NOCAPS        "Selected disk image needs the SPS plugin\nwhich is available from\nhttp//www.softpres.org/"\r
+    IDS_NUMSG_OLDCAPS       "You need an updated SPS plugin\nwhich is available from\nhttp//www.softpres.org/"\r
+    IDS_IMGCHK_BOOTBLOCKCRCERROR \r
+                            "The selected floppy disk image is not bootable (boot block checksum error)"\r
+    IDS_IMGCHK_BOOTBLOCKNO  "The selected floppy disk image is not bootable (no boot block)"\r
+    IDS_IMGCHK_DAMAGED      "The selected floppy disk image is damaged or unformatted"\r
+    IDS_IMGCHK_KS2          "The selected floppy disk image requires a 2.04 or later system ROM.\nThe configuration has been updated."\r
+    IDS_IMGCHK_KS3          "The selected floppy disk image requires a 3.0 or later system ROM.\nThe configuration has been updated."\r
+    IDS_ROMSCANEND          "Scan of ROMs finished"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_ROM_AVAILABLE       "available"\r
+    IDS_ROM_UNAVAILABLE     "unavailable"\r
+    IDS_NUMSG_KS68EC020     "The selected system ROM requires a 68020 with 24-bit addressing or higher CPU."\r
+    IDS_ROMSCANNOROMS       "No supported system ROMs detected."\r
+    IDS_NUMSG_KICKREP       "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement."\r
+    IDS_NUMSG_KICKREPNO     "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality."\r
+    IDS_NUMSG_NOROM         "Could not load system ROM, trying system ROM replacement."\r
+    IDS_HDCLONE_OK          "Hard drive image file created succesfully."\r
+    IDS_HDCLONE_FAIL        "Hard drive image file creation failed.\nError code %d:%d."\r
+    IDS_NUMSG_KS68030       "The selected system ROM requires a 68030 CPU."\r
+    IDS_NUMSG_EXPROMNEED    "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."\r
+    IDS_SB_FAVORITENAME     "Enter name..."\r
+    IDS_SB_CUSTOMEVENT      "Enter custom event string.."\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_QS_MODELS           "A500\nA500+\nA600\nA1000\nA1200\nA3000\nA4000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration"\r
+    IDS_QS_MODEL_A500       "1.3 ROM, OCS, 512 KB Chip + 512 KB Slow RAM (most common)\nThis configuration is capable of running most games and demos produced for first-generation hardware. Only few exceptions need a different configuration (e.g. the oldest games tend to be incompatible with this configuration).\n1.3 ROM, ECS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nLater hardware revision of the A500. Nearly 100% compatible with the previous configuration.\n1.3 ROM, ECS Agnus, 1 MB Chip RAM\nFew newer games and demos require this configuration.\n1.3 ROM, OCS Agnus, 512 KB Chip RAM\nVery old (e.g. pre-1988) games and demos may require this configuration.\n1.2 ROM, OCS Agnus, 512 KB Chip RAM\nAs available for the A1000, and installed on the first A500 and A2000 series. Some very old programs only work correctly with this configuration. Note: This system ROM version can only boot from floppy disk (no hard disk boot support).\n1.2 ROM, OCS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nThis configuration adds expansion memory to the first A500 produced. Try this if your game does not work with newer configurations, but works with the previous one. It could add some features to the game, including faster loading times. Note: This system ROM version can only boot from floppy disk (no hard disk boot support)."\r
+    IDS_QS_MODEL_A500P      "Basic non-expanded configuration\nThe A500+ adds an ECS Agnus chip, 1 MB of Chip RAM and a 2.0 ROM to the A500. Many A500 games and demos don't work properly on an A500+.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"\r
+    IDS_QS_MODEL_A600       "Basic non-expanded configuration\nThe A600 is smaller than the A500+ and has an updated 2.0 ROM.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"\r
+    IDS_QS_MODEL_A1000      "512 KB Chip RAM\nThe A1000 was the first model produced, with a configuration equivalent to that of an A500 with OCS chipset. You normally don't need to use this configuration, unless you are nostalgic and would like to hear the short A1000 boot tune\n""ICS"" Denise without EHB support\nVery first A1000 models had Denise without EHB capability.\n256 KB Chip RAM\n Unexpanded A1000. All later A1000 models were sold with a 256 KB RAM expansion built-in."\r
+    IDS_QS_MODEL_A1200      "Basic non-expanded configuration\nUse this configuration to run most AGA demos and games\n4 MB Fast RAM expanded configuration\nSome newer AGA games and demos need an expanded A1200 to run."\r
+    IDS_QS_MODEL_CD32       "CD32\nThe CD32 was one the first 32-bit consoles on the market. It is basically an A1200 with a built-in CD-ROM drive. Insert your CD32 or CDTV CD-ROM into a free CD-ROM drive before starting the emulation.\nCD32 + MPEG Full Motion Video Cartridge (not emulated yet)\n"\r
+    IDS_QS_MODEL_CDTV       "CDTV\nThe CDTV was the first model with a built-in CD-ROM drive. Looking like a black CD player, it featured a configuration equivalent to that of an A500 with 1 MB RAM and an ECS chipset.\nFloppy drive and 64KB SRAM card expanded CDTV\n"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_QS_MODEL_UAE        "High-end expanded configuration"\r
+    IDS_QS_MODEL_ARCADIA    "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and  Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel."\r
+    IDS_QS_MODEL_A3000      "1.4 ROM, 2MB Chip + 8MB Fast\n\n2.04 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n"\r
+    IDS_QS_MODEL_A4000      "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n"\r
+    IDS_QS_MODEL_A4000T     "A4000T (test)\nA4000T"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_FLOPPYTYPE35DDPC    "3.5"" DD (PC)"\r
+    IDS_FLOPPYTYPE35HDPC    "3.5"" HD (PC)"\r
+    IDS_JOYMODE_DEFAULT     "Default"\r
+    IDS_JOYMODE_MOUSE       "Mouse"\r
+    IDS_JOYMODE_JOYSTICK    "Joystick"\r
+    IDS_JOYMODE_JOYSTICKANALOG "Analog joystick"\r
+    IDS_JOYMODE_LIGHTPEN    "Light pen"\r
+    IDS_JOYMODE_MOUSE_CDTV  "CDTV remote mouse"\r
+    IDS_JOYMODE_JOYSTICK_CD32 "CD32 pad"\r
+    IDS_TABLET_BOTH_CURSORS "Show both cursors"\r
+    IDS_TABLET_NATIVE_CURSOR "Show native cursor only"\r
+    IDS_TABLET_HOST_CURSOR  "Show host cursor only"\r
+    IDS_AUTOSCALE_DISABLED  "Disabled"\r
+    IDS_AUTOSCALE_SCALING   "Automatic scaling"\r
+    IDS_AUTOSCALE_RESIZE    "Automatic resize"\r
+    IDS_PRINTER_ASCII       "ASCII-Only"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_PRINTER_EPSON9      "Epson Matrix Printer Emulation, 9pin"\r
+    IDS_PRINTER_POSTSCRIPT_DETECTION "PostScript (Passthrough)"\r
+    IDS_PRINTER_POSTSCRIPT_EMULATION \r
+                            "PostScript (Emulation, GhostScript required)"\r
+    IDS_PRINTER_PASSTHROUGH "Passthrough"\r
+    IDS_RES_LORES           "Lores"\r
+    IDS_RES_HIRES           "Hires (normal)"\r
+    IDS_RES_SUPERHIRES      "SuperHires"\r
+    IDS_PRINTER_EPSON48     "Epson Matrix Printer Emulation, 48pin"\r
+END\r
+\r
+#endif    // English (Neutral) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Finnish resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE \r
+BEGIN\r
+    "resource.\0"\r
+END\r
+\r
+3 TEXTINCLUDE \r
+BEGIN\r
+    "\r\0"\r
+END\r
+\r
+2 TEXTINCLUDE \r
+BEGIN\r
+    "#include ""afxres.h""\r\0"\r
+END\r
+\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+#endif    // Finnish resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif    // not APSTUDIO_INVOKED\r
+\r
index e03b2ef7b9e41cc1a2afb535eba31c7489323f0e..e5fa5dbb75ce0dcb8dd734aedc9a248652080f68 100644 (file)
@@ -663,7 +663,7 @@ BEGIN
     CONTROL         "Blitter Busy Bug",IDC_CS_BLITTERBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,159,80,10
 END
 
-IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 203
+IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 217
 STYLE DS_LOCALEDIT | DS_SETFONT | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
@@ -675,23 +675,23 @@ BEGIN
     CONTROL         "Video",IDC_AVIOUTPUT_VIDEO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,50,39,14
     CONTROL         "",IDC_AVIOUTPUT_VIDEO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,51,209,13
     CONTROL         "Disable frame rate limit",IDC_AVIOUTPUT_FRAMELIMITER,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,158,10
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,122,10
     CONTROL         "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14
-    CONTROL         "PAL",IDC_AVIOUTPUT_PAL,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,131,103,66,14
-    CONTROL         "NTSC",IDC_AVIOUTPUT_NTSC,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,204,103,66,14
-    CONTROL         "Slider1",IDC_AVIOUTPUT_FPS,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_ENABLESELRANGE | WS_TABSTOP,143,74,87,11
-    LTEXT           "fps",IDC_AVIOUTPUT_FPS_STATIC,237,74,19,8
     PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,16,141,77,14
-    GROUPBOX        "Ripper",IDC_STATIC,5,127,274,38
-    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,104,141,77,14,WS_DISABLED
-    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,141,77,14
-    GROUPBOX        "Input Recorder",IDC_STATIC,5,166,274,33
-    CONTROL         "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,178,77,14
-    CONTROL         "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,178,77,14
-    CONTROL         "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,180,78,10
+    GROUPBOX        "Ripper",IDC_STATIC,5,127,274,49
+    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,192,141,77,14,WS_DISABLED
+    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,159,77,14
+    GROUPBOX        "Input Recorder",IDC_STATIC,5,178,274,33
+    CONTROL         "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,190,77,14
+    CONTROL         "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,190,77,14
+    CONTROL         "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,192,78,10
     CONTROL         "Disable sound output",IDC_AVIOUTPUT_NOSOUNDOUTPUT,
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,88,123,10
     CONTROL         "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,88,120,10
+    CONTROL         "Capture before filtering",IDC_AVIOUTPUT_ORIGINALSIZE,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,71,120,10
+    CONTROL         "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,160,162,10
 END
 
 IDD_INPUT DIALOGEX 0, 0, 300, 242
@@ -1007,8 +1007,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,0,0
- PRODUCTVERSION 2,0,0,0
+ FILEVERSION 2,0,1,0
+ PRODUCTVERSION 2,0,1,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -1024,12 +1024,12 @@ BEGIN
         BLOCK "040904b0"
         BEGIN
             VALUE "FileDescription", "WinUAE"
-            VALUE "FileVersion", "2.0.0"
+            VALUE "FileVersion", "2.0.1"
             VALUE "InternalName", "WinUAE"
             VALUE "LegalCopyright", "© 1996-2009 under the GNU Public License (GPL)"
             VALUE "OriginalFilename", "WinUAE.exe"
             VALUE "ProductName", "WinUAE"
-            VALUE "ProductVersion", "2.0.0"
+            VALUE "ProductVersion", "2.0.1"
         END
     END
     BLOCK "VarFileInfo"
@@ -1120,6 +1120,7 @@ BEGIN
     END
 END
 
+
 /////////////////////////////////////////////////////////////////////////////
 //
 // DESIGNINFO
@@ -1212,7 +1213,7 @@ BEGIN
     IDS_SELECTFILESYSROOT   "Please select the root directory of the file system..."
     IDS_DEFAULTMIDIOUT      "Default MIDI-Out Device"
     IDS_CONTRIBUTORS1       "Bernd Schmidt - The Grand-Master\nSam Jordan - Custom-chip, floppy-DMA, etc.\nMathias Ortmann - Original WinUAE Main Guy, BSD Socket support\nBrian King - Picasso96 Support, Integrated GUI for WinUAE, previous WinUAE Main Guy\nToni Wilen - Core updates, WinUAE Main Guy\nGustavo Goedert/Peter Remmers/Michael Sontheimer/Tomi Hakala/Tim Gunn/Nemo Pohle - DOS Port Stuff\nSamuel Devulder/Olaf Barthel/Sam Jordan - Amiga Ports\nKrister Bergman - XFree86 and OS/2 Port\nA. Blanchard/Ernesto Corvi - MacOS Port\nChristian Bauer - BeOS Port\nIan Stephenson - NextStep Port\nPeter Teichmann - Acorn/RiscOS Port\nStefan Reinauer - ZorroII/III AutoConfig, Serial Support\nChristian Schmitt/Chris Hames - Serial Support\nHerman ten Brugge - 68020/68881 Emulation Code\nTauno Taipaleenmaki - Various UAE-Control/UAE-Library Support\nBrett Eden/Tim Gunn/Paolo Besser/Nemo Pohle - Various Docs and Web-Sites\nGeorg Veichtlbauer - Help File coordinator, German GUI\nFulvio Leonardi - Italian translator for WinUAE\n"
-    IDS_CONTRIBUTORS2       "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nPéter Tóth /Balázs Rátkai/Iván Herczeg/András Arató - Hungarian translation.\nKarsten Bock, Gavin Fance, Dirk Trowe, Christoph Meier and Christian Schindler - Freezer cartridge hardware support.\nMikko Nieminen - demo compatibility testing.\nArabuusimiehet - [This information is on a need-to-know basis]"
+    IDS_CONTRIBUTORS2       "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nPéter Tóth /Balázs Rátkai/Iván Herczeg/András Arató - Hungarian translation.\nKarsten Bock, Gavin Fance, Dirk Trowe, Christoph Meier and Christian Schindler - Freezer cartridge hardware support.\nMikko Nieminen - Demo compatibility testing.\nArabuusimiehet - [This information is on a need-to-know basis]"
     IDS_INVALIDPRTPORT      "The printer you have in this configuration is not valid on this machine.\n"
     IDS_RESTOREUSS          "Restore a WinUAE snapshot file"
     IDS_USS                 "WinUAE snapshot files"
@@ -1326,7 +1327,6 @@ BEGIN
     IDS_AVIOUTPUT_NOCODEC   "no codec selected"
     IDS_DISK_IMAGENAME      "Disk image"
     IDS_DISK_DRIVENAME      "Drive"
-    IDS_AGA8BIT             "AGA emulation requires a 16-bit or higher display depth.\nSwitching from 8-bit to 16-bit."
     IDS_UNSUPPORTEDSCREENMODE 
                             "The selected screen mode can't be displayed in a window, because %s\nSwitching to full-screen display."
     IDS_UNSUPPORTEDSCREENMODE_1 
index a682fc3294a073423b0e1b624ac77b150b786c9d..b0fe5913e335ae57fe2998582bc41833d3218e21 100644 (file)
@@ -10,6 +10,7 @@
 #define FS_TEST 0
 
 static WCHAR aufstable[256];
+static UINT fscodepage;
 
 static void err (const char *func, const WCHAR *w, const char *c, UINT cp)
 {
@@ -121,22 +122,26 @@ WCHAR *aucp (const char *s, UINT cp)
 
 WCHAR *au_copy (TCHAR *dst, int maxlen, const char *src)
 {
+       dst[0] = 0;
        MultiByteToWideChar (CP_ACP, 0, src, -1, dst, maxlen);
        return dst;
 }
 WCHAR *aucp_copy (TCHAR *dst, int maxlen, const char *src, UINT cp)
 {
+       dst[0] = 0;
        MultiByteToWideChar (cp, 0, src, -1, dst, maxlen);
        return dst;
 }
 
 char *ua_copy (char *dst, int maxlen, const TCHAR *src)
 {
+       dst[0] = 0;
        WideCharToMultiByte (CP_ACP, DWFLAGS, src, -1, dst, maxlen, 0, FALSE);
        return dst;
 }
 char *uacp_copy (char *dst, int maxlen, const TCHAR *src, UINT cp)
 {
+       dst[0] = 0;
        WideCharToMultiByte (cp, DWFLAGS, src, -1, dst, maxlen, 0, FALSE);
        return dst;
 }
@@ -146,7 +151,7 @@ TCHAR *my_strdup_ansi (const char *src)
        return au (src);
 }
 
-char *ua_fs (const WCHAR *s)
+char *ua_fs (const WCHAR *s, int defchar)
 {
        char *d;
        int len, i;
@@ -156,23 +161,30 @@ char *ua_fs (const WCHAR *s)
        if (s == NULL)
                return NULL;
        dc = FALSE;
-       len = WideCharToMultiByte (28605, DWFLAGS | WC_NO_BEST_FIT_CHARS, s, -1, NULL, 0, &def, &dc);
+       len = WideCharToMultiByte (fscodepage, DWFLAGS | WC_NO_BEST_FIT_CHARS, s, -1, NULL, 0, &def, &dc);
        if (!len) {
                err (__FUNCTION__, s, NULL, currprefs.win32_fscodepage);
                return strdup ("");
        }
        d = xmalloc (len + 1);
        dc = FALSE;
-       WideCharToMultiByte (28605, DWFLAGS | WC_NO_BEST_FIT_CHARS, s, -1, d, len, &def, &dc);
+       WideCharToMultiByte (fscodepage, DWFLAGS | WC_NO_BEST_FIT_CHARS, s, -1, d, len, &def, &dc);
        if (dc) {
+               def = 0;
                for (i = 0; i < len; i++) {
                        if (d[i] == 0 || (d[i] < 32 || (d[i] >= 0x7f && d[i] <= 0x9f))) {
                                WCHAR s2[2];
                                char d2[2];
                                s2[0] = s[i];
                                s2[1] = 0;
-                               d2[0] = (char)s[i];
-                               WideCharToMultiByte (0, DWFLAGS, s2, -1, d2, 1, 0, FALSE);
+                               if (defchar < 0) {
+                                       d2[0] = (char)s[i];
+                                       def = 0;
+                               } else {
+                                       def = (char)defchar;
+                                       d2[0] = (char)defchar;
+                               }
+                               WideCharToMultiByte (0, DWFLAGS, s2, -1, d2, 1, defchar >= 0 ? &def : NULL, defchar >= 0 ? &dc : NULL);
                                d[i] = d2[0];
                        }
                }
@@ -180,7 +192,7 @@ char *ua_fs (const WCHAR *s)
        return d;
 }
 
-char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src)
+char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src, int defchar)
 {
        int len, i;
        BOOL dc;
@@ -189,16 +201,27 @@ char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src)
        if (src == NULL)
                return NULL;
        dc = FALSE;
-       len = WideCharToMultiByte (28605, DWFLAGS | WC_NO_BEST_FIT_CHARS, src, -1, dst, maxlen, &def, &dc);
+       len = WideCharToMultiByte (fscodepage, DWFLAGS | WC_NO_BEST_FIT_CHARS, src, -1, dst, maxlen, &def, &dc);
+       if (!len) {
+               dst[0] = 0;
+               return dst;
+       }
        if (dc) {
+               def = 0;
                for (i = 0; i < len; i++) {
                        if (dst[i] == 0) {
                                WCHAR s2[2];
                                char d2[2];
                                s2[0] = src[i];
                                s2[1] = 0;
-                               d2[0] = (char)src[i];
-                               WideCharToMultiByte (0, DWFLAGS, s2, -1, d2, 1, 0, FALSE);
+                               if (defchar < 0) {
+                                       d2[0] = (char)src[i];
+                                       def = 0;
+                               } else {
+                                       def = (char)defchar;
+                                       d2[0] = (char)defchar;
+                               }
+                               WideCharToMultiByte (0, DWFLAGS | (defchar >= 0 ? WC_NO_BEST_FIT_CHARS : 0), s2, -1, d2, 1, defchar >= 0 ? &def : NULL, defchar >= 0 ? &dc : NULL);
                                dst[i] = d2[0];
                        }
                }
@@ -228,11 +251,37 @@ WCHAR *au_fs_copy (TCHAR *dst, int maxlen, const char *src)
        return dst;
 }
 
+static void mbtwc (UINT cp, DWORD flags, LPCSTR src, int len, LPWSTR dst, int maxlen)
+{
+       DWORD err;
+       //write_log (L"CP=%08X F=%x %p %02X %02X %d %p %04X %04X %d", cp, flags, src, (unsigned char)src[0], (unsigned char)src[1], len, dst, dst[0], dst[1], maxlen);
+       err = MultiByteToWideChar (cp, flags, src, len, dst, maxlen);
+       //write_log (L"=%d %04X %04X\n", err, dst[0], dst[1]);
+       if (err)
+               return;
+       err = GetLastError ();
+       write_log (L"\nMBTWC %u:%d\n", cp, err);
+#if 0
+       if (cp != CP_ACP) {
+               cp = CP_ACP;
+               if (MultiByteToWideChar (cp, flags, src, len, dst, maxlen)) {
+                       err = GetLastError ();
+                       write_log (L"MBTWC2 %u:%d\n", cp, err);
+               }
+       }
+#endif
+}
+
 void unicode_init (void)
 {
+       static UINT pages[] = { 28605, 28591, 1252, 0 };
        int i;
 
-       write_log (L"Filesystem charset (ACP=%u):\n", GetACP ());
+       for (i = 0; fscodepage = pages[i]; i++) {
+               if (MultiByteToWideChar (fscodepage, 0, " ", 1, NULL, 0))
+                       break;
+       }
+       write_log (L"Filesystem charset (ACP=%u,FSCP=%u):\n", GetACP (), fscodepage);
        for (i = 0; i < 256; i++) {
                TCHAR dst1[2], dst2[2];
                char src[2];
@@ -244,8 +293,8 @@ void unicode_init (void)
                dst2[0] = 0;
                dst2[1] = 0;
                aufstable[i] = 0;
-               aucp_copy (dst1, 1, src, 0);
-               aucp_copy (dst2, 1, src, 28605); // iso-8859-15
+               mbtwc (CP_ACP, 0, src, 1, dst1, 1);
+               mbtwc (fscodepage, 0, src, 1, dst2, 1);// iso-8859-15
                if (dst2[0] != dst1[0])
                        write_log (L" %02X: %04X (%04X)", i, dst1[0], dst2[0]);
                else
index 9b20d495662219cbad3fd65b827b183fa883b075..bd01fe3e039ab932c72f680c9df23d65fee33ba5 100644 (file)
@@ -47,6 +47,7 @@
 #include "sound.h"
 #include "uae.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "events.h"
 #include "newcpu.h"
@@ -100,6 +101,7 @@ static SYSTEM_INFO SystemInfo;
 static int logging_started;
 static DWORD minidumpmode = MiniDumpNormal;
 static int doquit;
+static int console_started;
 void *globalipc, *serialipc;
 
 int qpcdivisor = 0;
@@ -1157,11 +1159,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
                case SC_SCREENSAVE: // Screensaver Trying To Start?
                case SC_MONITORPOWER: // Monitor Trying To Enter Powersave?
 
-                       // SetThreadExecutionState (ES_CONTINUOUS | ES_DISPLAY_REQUIRED); handles this now
-#if 0
-                       if (!manual_painting_needed && focus && currprefs.win32_powersavedisabled)
-                               return 0; // Prevent From Happening
-#endif
+                       // SetThreadExecutionState handles this now
                        break;
 
                default:
@@ -3871,6 +3869,11 @@ static int parseargs (const TCHAR *arg, const TCHAR *np, const TCHAR *np2)
                return -1;
        }
        if (!_tcscmp (arg, L"-console")) {
+               console_started = 1;
+               return 1;
+       }
+       if (!_tcscmp (arg, L"-cli")) {
+               console_emulation = 1;
                return 1;
        }
        if (!_tcscmp (arg, L"-log")) {
@@ -4875,8 +4878,8 @@ int PASCAL wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL
        GetProcessAffinityMask (GetCurrentProcess (), &original_affinity, &sys_aff);
 
        thread = GetCurrentThread ();
-       fpucontrol = _controlfp (0, 0) & (_MCW_IC | _MCW_RC | _MCW_PC);
        //original_affinity = SetThreadAffinityMask(thread, 1);
+       fpucontrol = _controlfp (0, 0) & (_MCW_IC | _MCW_RC | _MCW_PC);
 
 #if 0
 #define MSGFLT_ADD 1
@@ -4897,7 +4900,7 @@ int PASCAL wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL
                WinMain2 (hInstance, hPrevInstance, lpCmdLine, nCmdShow);
        } __except(WIN32_ExceptionFilter (GetExceptionInformation (), GetExceptionCode ())) {
        }
-       //SetThreadAffinityMask(thread, original_affinity);
+       //SetThreadAffinityMask (thread, original_affinity);
        return FALSE;
 }
 
index 34ceb21e7751620e8bdc4049633fbae3fbf7d01f..7da9678e7b609a0433560bac9e417827bfe86245 100644 (file)
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEPUBLICBETA 0
+#define WINUAEPUBLICBETA 1
 #define LANG_DLL 1
 
-#define WINUAEBETA L""
-#define WINUAEDATE MAKEBD(2009, 12, 23)
+#define WINUAEBETA L"Beta 1"
+#define WINUAEDATE MAKEBD(2010, 1, 2)
 #define WINUAEEXTRA L""
 #define WINUAEREV L""
 
index 1725d5b0f53bbca2affd090049737d63bd0d1527..2f9d5582805776b74899b845e8bea9fa4c54e98f 100644 (file)
 /* Determines if this drive-letter currently has a disk inserted */
 int CheckRM (TCHAR *DriveName)
 {
-    TCHAR filename[MAX_DPATH];
-    DWORD dwHold;
-    BOOL result = FALSE;
-
-    _stprintf (filename, L"%s.", DriveName);
-    dwHold = GetFileAttributes (filename);
-    if(dwHold != 0xFFFFFFFF)
-       result = TRUE;
-    return result;
+       TCHAR filename[MAX_DPATH];
+       DWORD dwHold;
+       BOOL result = FALSE;
+
+       _stprintf (filename, L"%s.", DriveName);
+       dwHold = GetFileAttributes (filename);
+       if(dwHold != 0xFFFFFFFF)
+               result = TRUE;
+       return result;
 }
 
 /* This function makes sure the volume-name being requested is not already in use, or any of the following
-   illegal values: */
+illegal values: */
 static TCHAR *illegal_volumenames[] = { L"SYS", L"DEVS", L"LIBS", L"FONTS", L"C", L"L", L"S" };
 
 static int valid_volumename (struct uaedev_mount_info *mountinfo, TCHAR *volumename, int fullcheck)
 {
-    int i, result = 1, illegal_count = sizeof (illegal_volumenames) / sizeof(TCHAR*);
-    for (i = 0; i < illegal_count; i++) {
-       if(_tcscmp (volumename, illegal_volumenames[i]) == 0) {
-           result = 0;
-           break;
+       int i, result = 1, illegal_count = sizeof (illegal_volumenames) / sizeof(TCHAR*);
+       for (i = 0; i < illegal_count; i++) {
+               if(_tcscmp (volumename, illegal_volumenames[i]) == 0) {
+                       result = 0;
+                       break;
+               }
        }
-    }
-    /* if result is still good, we've passed the illegal names check, and must check for duplicates now */
-    if(result && fullcheck) {
-       for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
-           if (mountinfo->ui[i].open && mountinfo->ui[i].volname && _tcscmp (mountinfo->ui[i].volname, volumename) == 0) {
-               result = 0;
-               break;
-           }
+       /* if result is still good, we've passed the illegal names check, and must check for duplicates now */
+       if(result && fullcheck) {
+               for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
+                       if (mountinfo->ui[i].open && mountinfo->ui[i].volname && _tcscmp (mountinfo->ui[i].volname, volumename) == 0) {
+                               result = 0;
+                               break;
+                       }
+               }
        }
-    }
-    return result;
+       return result;
 }
 
 /* Returns 1 if an actual volume-name was found, 2 if no volume-name (so uses some defaults) */
 int target_get_volume_name (struct uaedev_mount_info *mtinf, const TCHAR *volumepath, TCHAR *volumename, int size, int inserted, int fullcheck)
 {
-    int result = 2;
-    int drivetype;
-
-    drivetype = GetDriveType (volumepath);
-    if (inserted) {
-       if (GetVolumeInformation (volumepath, volumename, size, NULL, NULL, NULL, NULL, 0) &&
-           volumename[0] && 
-           valid_volumename (mtinf, volumename, fullcheck)) {
-           // +++Bernd Roesch
-           if(!_tcscmp (volumename, L"AmigaOS35"))
-               _tcscpy (volumename, L"AmigaOS3.5");
-           if(!_tcscmp (volumename, L"AmigaOS39"))
-               _tcscpy (volumename, L"AmigaOS3.9");
-           // ---Bernd Roesch
-           if (_tcslen (volumename) > 0)
-               result = 1;
+       int result = 2;
+       int drivetype;
+
+       drivetype = GetDriveType (volumepath);
+       if (inserted) {
+               if (GetVolumeInformation (volumepath, volumename, size, NULL, NULL, NULL, NULL, 0) &&
+                       volumename[0] && 
+                       valid_volumename (mtinf, volumename, fullcheck)) {
+                               // +++Bernd Roesch
+                               if(!_tcscmp (volumename, L"AmigaOS35"))
+                                       _tcscpy (volumename, L"AmigaOS3.5");
+                               if(!_tcscmp (volumename, L"AmigaOS39"))
+                                       _tcscpy (volumename, L"AmigaOS3.9");
+                               // ---Bernd Roesch
+                               if (_tcslen (volumename) > 0)
+                                       result = 1;
+               }
        }
-    }
-
-    if(result == 2) {
-       switch(drivetype)
-       {
-           case DRIVE_FIXED:
-               _stprintf (volumename, L"WinDH_%c", volumepath[0]);
-               break;
-           case DRIVE_CDROM:
-               _stprintf (volumename, L"WinCD_%c", volumepath[0]);
-               break;
-           case DRIVE_REMOVABLE:
-               _stprintf (volumename, L"WinRMV_%c", volumepath[0]);
-               break;
-           case DRIVE_REMOTE:
-               _stprintf (volumename, L"WinNET_%c", volumepath[0]);
-               break;
-           case DRIVE_RAMDISK:
-               _stprintf (volumename, L"WinRAM_%c", volumepath[0]);
-               break;
-           case DRIVE_UNKNOWN:
-           case DRIVE_NO_ROOT_DIR:
-           default:
-               result = 0;
-               break;
+
+       if(result == 2) {
+               switch(drivetype)
+               {
+               case DRIVE_FIXED:
+                       _stprintf (volumename, L"WinDH_%c", volumepath[0]);
+                       break;
+               case DRIVE_CDROM:
+                       _stprintf (volumename, L"WinCD_%c", volumepath[0]);
+                       break;
+               case DRIVE_REMOVABLE:
+                       _stprintf (volumename, L"WinRMV_%c", volumepath[0]);
+                       break;
+               case DRIVE_REMOTE:
+                       _stprintf (volumename, L"WinNET_%c", volumepath[0]);
+                       break;
+               case DRIVE_RAMDISK:
+                       _stprintf (volumename, L"WinRAM_%c", volumepath[0]);
+                       break;
+               case DRIVE_UNKNOWN:
+               case DRIVE_NO_ROOT_DIR:
+               default:
+                       result = 0;
+                       break;
+               }
        }
-    }
 
-    return result;
+       return result;
 }
 
 static int getidfromhandle (HANDLE h)
 {
-    int drvnum = -1;
-    DWORD written, outsize;
-    VOLUME_DISK_EXTENTS *vde;
-
-    outsize = sizeof (VOLUME_DISK_EXTENTS) + sizeof (DISK_EXTENT) * 32;
-    vde = xmalloc (outsize);
-    if (DeviceIoControl (h, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, vde, outsize, &written, NULL)) {
-        if (vde->NumberOfDiskExtents > 0)
-           drvnum = vde->Extents[0].DiskNumber;
-    }
-    xfree (vde);
-    return drvnum;
+       int drvnum = -1;
+       DWORD written, outsize;
+       VOLUME_DISK_EXTENTS *vde;
+
+       outsize = sizeof (VOLUME_DISK_EXTENTS) + sizeof (DISK_EXTENT) * 32;
+       vde = xmalloc (outsize);
+       if (DeviceIoControl (h, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, vde, outsize, &written, NULL)) {
+               if (vde->NumberOfDiskExtents > 0)
+                       drvnum = vde->Extents[0].DiskNumber;
+       }
+       xfree (vde);
+       return drvnum;
 }
 
 static int hfdcheck (TCHAR drive)
 {
-    HANDLE h;
-    TCHAR tmp[16];
-    int disknum, i;
-
-    _stprintf (tmp, L"\\\\.\\%c:", drive);
-    h = CreateFile (tmp, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-    if (h == INVALID_HANDLE_VALUE)
+       HANDLE h;
+       TCHAR tmp[16];
+       int disknum, i;
+
+       _stprintf (tmp, L"\\\\.\\%c:", drive);
+       h = CreateFile (tmp, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+       if (h == INVALID_HANDLE_VALUE)
+               return 0;
+       disknum = getidfromhandle (h);
+       CloseHandle (h);
+       for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
+               struct hardfiledata *hfd = get_hardfile_data (i);
+               int reopen = 0;
+               if (!hfd || !(hfd->flags & HFD_FLAGS_REALDRIVE) || !hfd->handle_valid)
+                       continue;
+               if (getidfromhandle (hfd->handle) == disknum)
+                       return 1;
+       }
        return 0;
-    disknum = getidfromhandle (h);
-    CloseHandle (h);
-    for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
-       struct hardfiledata *hfd = get_hardfile_data (i);
-       int reopen = 0;
-       if (!hfd || !(hfd->flags & HFD_FLAGS_REALDRIVE) || !hfd->handle_valid)
-           continue;
-       if (getidfromhandle (hfd->handle) == disknum)
-           return 1;
-    }
-    return 0;
 }
 
 static void filesys_addexternals (void)
 {
-    int drive, drivetype;
-    UINT errormode;
-    TCHAR volumename[MAX_DPATH] = L"";
-    TCHAR volumepath[16];
-    DWORD dwDriveMask;
-    int drvnum = 0;
-
-    errormode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
-    dwDriveMask = GetLogicalDrives ();
-    dwDriveMask >>= 2; // Skip A and B drives...
-
-    for(drive = 'C'; drive <= 'Z'; ++drive) {
-        _stprintf (volumepath, L"%c:\\", drive);
-        /* Is this drive-letter valid (it used to check for media in drive) */
-        if(dwDriveMask & 1) {
-           TCHAR devname[MAX_DPATH];
-           BOOL inserted = CheckRM (volumepath); /* Is there a disk inserted? */
-           int nok = FALSE;
-           int rw = 1;
-           drivetype = GetDriveType (volumepath);
-           if (inserted && drivetype != DRIVE_NO_ROOT_DIR && drivetype != DRIVE_UNKNOWN) {
-               if (hfdcheck (drive)) {
-                   write_log (L"Drive %c:\\ ignored, was configured as a harddrive\n", drive);
-                   continue;
-               }
-           }
-           devname[0] = 0;
-           for (;;) {
-               if (drivetype == DRIVE_CDROM && currprefs.win32_automount_cddrives) {
-                   _stprintf (devname, L"WinCD_%c", drive);
-                   rw = 0;
-                   break;
-               }
-               if (!inserted) {
-                   nok = TRUE;
-                   break;
-               }
-               if (drivetype == DRIVE_REMOTE && currprefs.win32_automount_netdrives)
-                   break;
-               if (drivetype == DRIVE_FIXED && currprefs.win32_automount_drives)
-                   break;
-               if (drivetype == DRIVE_REMOVABLE && currprefs.win32_automount_removabledrives)
-                   break;
-               nok = TRUE;
-               break;
-           }
-           if (nok)
-               continue;
-           volumename[0] = 0;
-           if (inserted) {
-               target_get_volume_name (&mountinfo, volumepath, volumename, MAX_DPATH, inserted, 1);
-               if (!volumename[0])
-                   _stprintf (volumename, L"WinUNK_%c", drive);
-           }
-           if (drivetype == DRIVE_REMOTE)
-               _tcscat (volumepath, L".");
-           else
-               _tcscat (volumepath, L"..");
-           //write_log (L"Drive type %d: '%s' '%s'\n", drivetype, volumepath, volumename);
-           add_filesys_unit (devname[0] ? devname : NULL, volumename, volumepath, !rw, 0, 0, 0, 0, -20 - drvnum, 0, 1, 0, 0, 0);
-           drvnum++;
-       } /* if drivemask */
-       dwDriveMask >>= 1;
-    }
-    SetErrorMode (errormode);
+       int drive, drivetype;
+       UINT errormode;
+       TCHAR volumename[MAX_DPATH] = L"";
+       TCHAR volumepath[16];
+       DWORD dwDriveMask;
+       int drvnum = 0;
+
+       errormode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+       dwDriveMask = GetLogicalDrives ();
+       dwDriveMask >>= 2; // Skip A and B drives...
+
+       for(drive = 'C'; drive <= 'Z'; ++drive) {
+               _stprintf (volumepath, L"%c:\\", drive);
+               /* Is this drive-letter valid (it used to check for media in drive) */
+               if(dwDriveMask & 1) {
+                       TCHAR devname[MAX_DPATH];
+                       BOOL inserted = CheckRM (volumepath); /* Is there a disk inserted? */
+                       int nok = FALSE;
+                       int rw = 1;
+                       drivetype = GetDriveType (volumepath);
+                       if (inserted && drivetype != DRIVE_NO_ROOT_DIR && drivetype != DRIVE_UNKNOWN) {
+                               if (hfdcheck (drive)) {
+                                       write_log (L"Drive %c:\\ ignored, was configured as a harddrive\n", drive);
+                                       continue;
+                               }
+                       }
+                       devname[0] = 0;
+                       for (;;) {
+                               if (drivetype == DRIVE_CDROM && currprefs.win32_automount_cddrives) {
+                                       _stprintf (devname, L"WinCD_%c", drive);
+                                       rw = 0;
+                                       break;
+                               }
+                               if (!inserted) {
+                                       nok = TRUE;
+                                       break;
+                               }
+                               if (drivetype == DRIVE_REMOTE && currprefs.win32_automount_netdrives)
+                                       break;
+                               if (drivetype == DRIVE_FIXED && currprefs.win32_automount_drives)
+                                       break;
+                               if (drivetype == DRIVE_REMOVABLE && currprefs.win32_automount_removabledrives)
+                                       break;
+                               nok = TRUE;
+                               break;
+                       }
+                       if (nok)
+                               continue;
+                       volumename[0] = 0;
+                       if (inserted) {
+                               target_get_volume_name (&mountinfo, volumepath, volumename, MAX_DPATH, inserted, 1);
+                               if (!volumename[0])
+                                       _stprintf (volumename, L"WinUNK_%c", drive);
+                       }
+                       if (drivetype == DRIVE_REMOTE)
+                               _tcscat (volumepath, L".");
+                       else
+                               _tcscat (volumepath, L"..");
+                       if (currprefs.win32_automount_drives > 1) {
+                               devname[0] = drive;
+                               devname[1] = 0;
+                       }
+                       //write_log (L"Drive type %d: '%s' '%s'\n", drivetype, volumepath, volumename);
+                       add_filesys_unit (devname[0] ? devname : NULL, volumename, volumepath, !rw, 0, 0, 0, 0, -20 - drvnum, 0, 1, 0, 0, 0);
+                       drvnum++;
+               } /* if drivemask */
+               dwDriveMask >>= 1;
+       }
+       SetErrorMode (errormode);
 }
index 345e2ecd3161c356902821513bbcc340c60b30a7..ec179b6938b8d0809fd9c762ce7c5c7f4cd944a2 100644 (file)
@@ -37,6 +37,7 @@
 #include "gui.h"
 #include "options.h"
 #include "memory.h"
+#include "rommgr.h"
 #include "custom.h"
 #include "events.h"
 #include "newcpu.h"
@@ -229,6 +230,11 @@ static BOOL GetFileDialog (OPENFILENAME *opn, const GUID *guid, int mode)
        COMDLG_FILTERSPEC *fs = NULL;
        int filtercnt = 0;
 
+       static const GUID fsdialogguid = { 0xe768b477, 0x3684, 0x4128, { 0x91, 0x55, 0x8c, 0x8f, 0xd9, 0x2d, 0x16, 0x7b } };
+
+       if (isfullscreen () > 0)
+               guid = &fsdialogguid;
+
        hr = -1;
        ret = 0;
        pSHCreateItemFromParsingName = (SHCREATEITEMFROMPARSINGNAME)GetProcAddress (
@@ -369,22 +375,28 @@ static BOOL GetFileDialog (OPENFILENAME *opn, const GUID *guid, int mode)
        return ret;
 }
 
-static BOOL GetOpenFileName_2 (OPENFILENAME *opn, const GUID *guid)
+static BOOL GetOpenFileName_2 (HWND parent, OPENFILENAME *opn, const GUID *guid)
 {
-       return GetFileDialog (opn, guid, 0);
+       BOOL val;
+       val = GetFileDialog (opn, guid, 0);
+       return val;
 }
-static BOOL GetSaveFileName_2 (OPENFILENAME *opn, const GUID *guid)
+static BOOL GetSaveFileName_2 (HWND parent, OPENFILENAME *opn, const GUID *guid)
 {
-       return GetFileDialog (opn, guid, 1);
+       BOOL val;
+       val = GetFileDialog (opn, guid, 1);
+       return val;
 }
 int DirectorySelection (HWND hDlg, const GUID *guid, TCHAR *path)
 {
+       int val;
        OPENFILENAME ofn = { 0 };
        ofn.hwndOwner = hDlg;
        ofn.lpstrFile = path;
        ofn.lpstrInitialDir = path;
        ofn.nMaxFile = MAX_DPATH;
-       return GetFileDialog (&ofn, NULL, -1);
+       val = GetFileDialog (&ofn, NULL, -1);
+       return val;
 }
 
 void write_disk_history (void)
@@ -1495,6 +1507,48 @@ static void setfilter (int num, int *filter, TCHAR *fname)
        regsetint (NULL, fname, filter[num]);
 }
 
+static UINT_PTR CALLBACK ofnhook (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+       HWND hWnd;
+       RECT windowRect;
+       int width, height, w2, h2;
+       struct MultiDisplay *md;
+       NMHDR *nmhdr;
+       int doit = FALSE;
+       static int prevwidth, prevheight;
+
+       if (message == WM_NOTIFY) {
+               nmhdr = (LPNMHDR)lParam;
+               if (nmhdr->code == CDN_INITDONE)
+                       doit = TRUE;
+       } else if (message == WM_INITDIALOG) {
+               doit = TRUE;
+       }
+       if (!doit)
+               return FALSE;
+       md = getdisplay (&currprefs);
+       if (!md)
+               return FALSE;
+       w2 = WIN32GFX_GetWidth ();
+       h2 = WIN32GFX_GetHeight ();
+       if (w2 == prevwidth && h2 == prevheight)
+               return FALSE;
+       prevwidth = w2;
+       prevheight = h2;
+       //write_log (L"%dx%d %dx%d (%dx%d)\n", md->rect.left, md->rect.top, md->rect.right, md->rect.bottom, w2, h2);
+       hWnd = GetParent (hDlg);
+       GetWindowRect (hWnd, &windowRect);
+       width = windowRect.right - windowRect.left;
+       height = windowRect.bottom - windowRect.top;
+       if (width > w2)
+               width = w2;
+       if (height > h2)
+               height = h2;
+       MoveWindow (hWnd, md->rect.left + (w2 - width) / 2, md->rect.top + (h2 - height) / 2, width, height, FALSE);
+       return FALSE;
+}
+
+
 // Common routine for popping up a file-requester
 // flag - 0 for floppy loading, 1 for floppy creation, 2 for loading hdf, 3 for saving hdf
 // flag - 4 for loading .uae config-files, 5 for saving .uae config-files
@@ -1732,7 +1786,7 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs
        openFileName.lStructSize = sizeof (OPENFILENAME);
        openFileName.hwndOwner = hDlg;
        openFileName.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST |
-               OFN_LONGNAMES | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
+               OFN_LONGNAMES | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_ENABLESIZING | (isfullscreen () > 0 ? OFN_ENABLEHOOK : 0);
        openFileName.lpstrFilter = szFilter;
        openFileName.lpstrDefExt = defext;
        openFileName.nFilterIndex = previousfilter[flag];
@@ -1740,6 +1794,7 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs
        openFileName.nMaxFile = MAX_DPATH;
        openFileName.lpstrFileTitle = file_name;
        openFileName.nMaxFileTitle = MAX_DPATH;
+       openFileName.lpfnHook = ofnhook;
        if (initialdir)
                openFileName.lpstrInitialDir = initialdir;
        else
@@ -1749,10 +1804,10 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs
        if (multi)
                openFileName.Flags |= OFN_ALLOWMULTISELECT;
        if (flag == 1 || flag == 3 || flag == 5 || flag == 9 || flag == 11 || flag == 16) {
-               if (!(result = GetSaveFileName_2 (&openFileName, guid)))
+               if (!(result = GetSaveFileName_2 (hDlg, &openFileName, guid)))
                        write_log (L"GetSaveFileNameX() failed, err=%d.\n", GetLastError ());
        } else {
-               if (!(result = GetOpenFileName_2 (&openFileName, guid)))
+               if (!(result = GetOpenFileName_2 (hDlg, &openFileName, guid)))
                        write_log (L"GetOpenFileNameX() failed, err=%d.\n", GetLastError ());
        }
        if (result) {
@@ -3695,10 +3750,10 @@ static urlinfo urls[] =
 {
        {IDC_CLOANTOHOME, FALSE, L"Cloanto's Amiga Forever", L"http://www.amigaforever.com/"},
        {IDC_AMIGAHOME, FALSE, L"Amiga Inc.", L"http://www.amiga.com"},
-       {IDC_PICASSOHOME, FALSE, L"Picasso96 Home Page", L"http://www.picasso96.cogito.de/"},
+//     {IDC_PICASSOHOME, FALSE, L"Picasso96 Home Page", L"http://www.picasso96.cogito.de/"},
        {IDC_UAEHOME, FALSE, L"UAE Home Page", L"http://uae.coresystems.de/"},
        {IDC_WINUAEHOME, FALSE, L"WinUAE Home Page", L"http://www.winuae.net/"},
-       {IDC_AIABHOME, FALSE, L"AIAB", L"http://www.amigainabox.co.uk/"},
+//     {IDC_AIABHOME, FALSE, L"AIAB", L"http://www.amigainabox.co.uk/"},
        {IDC_THEROOTS, FALSE, L"Back To The Roots", L"http://www.back2roots.org/"},
        {IDC_ABIME, FALSE, L"abime.net", L"http://www.abime.net/"},
        {IDC_CAPS, FALSE, L"SPS", L"http://www.softpres.org/"},
@@ -7081,9 +7136,9 @@ static void values_from_cpudlg (HWND hDlg)
                        workprefs.cpu_clock_multiplier = 0;
                        workprefs.cpu_frequency = _tstof (txt) * 1000000.0;
                        if (workprefs.cpu_frequency < 1 * 1000000)
-                               workprefs.cpu_frequency = 1 * 1000000;
+                               workprefs.cpu_frequency = 0;
                        if (workprefs.cpu_frequency >= 99 * 1000000)
-                               workprefs.cpu_frequency = 99 * 1000000;
+                               workprefs.cpu_frequency = 0;
                }
        }
 }
@@ -8082,6 +8137,7 @@ static INT_PTR CALLBACK HardfileSettingsProc (HWND hDlg, UINT msg, WPARAM wParam
                        SetDlgItemText (hDlg, IDC_PATH_FILESYS, L"");
                        SetDlgItemText (hDlg, IDC_HARDFILE_DEVICE, L"");
                        current_hfdlg.sectors = current_hfdlg.reserved = current_hfdlg.surfaces = 0;
+                       current_hfdlg.bootpri = 0;
                        current_hfdlg.autoboot = 1;
                        current_hfdlg.donotmount = 0;
                        sethardfile (hDlg);
@@ -10600,9 +10656,9 @@ struct filterpreset {
 };
 static struct filterpreset filterpresets[] =
 {
-       { L"PAL", 8, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 1, 1, 0, 0, 0, 10, 0, 0, 0, 300, 30, 0, 0, 0 },
-       { L"D3D Autoscale", 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1 },
-       { L"D3D Full Scaling", 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0 },
+       { L"PAL",                               UAE_FILTER_PAL,                 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 1, 1, 0, 0, 0, 10, 0, 0, 0, 300, 30, 0,  0, 0 },
+       { L"D3D Autoscale",             UAE_FILTER_DIRECT3D,    2, 0, 0, 0, 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0,  0, 0, 0, 0,   0,  0, 0, -1, 1 },
+       { L"D3D Full Scaling",  UAE_FILTER_DIRECT3D,    2, 0, 0, 0, 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0,  0, 0, 0, 0,   0,  0, 0, -1, 0 },
        { NULL }
 };
 
@@ -12640,55 +12696,56 @@ void gui_disk_image_change (int unitnum, const TCHAR *name)
 #endif
 }
 
-void gui_hd_led (int unitnum, int led)
+static void gui_flicker_led2 (int led, int unitnum, int status)
 {
-       static int resetcounter;
-       int old;
+       static int resetcounter[LED_MAX];
+       uae_u8 old;
+       uae_u8 *p;
 
-       old = gui_data.hd;
-       if (led == 0) {
-               resetcounter--;
-               if (resetcounter > 0)
+       if (led == LED_HD)
+               p = &gui_data.hd;
+       else if (led == LED_CD)
+               p = &gui_data.cd;
+       else if (led == LED_MD)
+               p = &gui_data.md;
+       else
+               return;
+       old = *p;
+       if (status == 0) {
+               resetcounter[led]--;
+               if (resetcounter[led] > 0)
                        return;
        }
 #ifdef RETROPLATFORM
-       rp_hd_activity (unitnum, led ? 1 : 0, led == 2 ? 1 : 0);
+       if (led == LED_HD)
+               rp_hd_activity (unitnum, status ? 1 : 0, status == 2 ? 1 : 0);
+       else if (led == LED_CD)
+               rp_cd_activity (unitnum, status);
 #endif
-       gui_data.hd = led;
-       resetcounter = 6;
-       if (old != gui_data.hd)
-               gui_led (5, gui_data.hd);
+       *p = status;
+       resetcounter[led] = 6;
+       if (old != *p)
+               gui_led (led, *p);
 }
 
-void gui_cd_led (int unitnum, int led)
+void gui_flicker_led (int led, int unitnum, int status)
 {
-       static int resetcounter;
-       int old;
-
-       old = gui_data.cd;
-       if (led == 0) {
-               resetcounter--;
-               if (resetcounter > 0)
-                       return;
+       if (led < 0) {
+               gui_flicker_led2 (LED_HD, 0, 0);
+               gui_flicker_led2 (LED_CD, 0, 0);
+               gui_flicker_led2 (LED_MD, 0, 0);
+       } else {
+               gui_flicker_led2 (led, unitnum, status);
        }
-       if (led < 0)
-               led = 0;
-#ifdef RETROPLATFORM
-       rp_cd_activity (unitnum, led);
-#endif
-       gui_data.cd = led;
-       resetcounter = 6;
-       if (old != gui_data.cd)
-               gui_led (6, gui_data.cd);
 }
 
 void gui_fps (int fps, int idle)
 {
        gui_data.fps = fps;
        gui_data.idle = idle;
-       gui_led (7, 0);
-       gui_led (8, 0);
-       gui_led (9, gui_data.sndbuf_status > 1 || gui_data.sndbuf_status < 0);
+       gui_led (LED_FPS, 0);
+       gui_led (LED_CPU, 0);
+       gui_led (LED_SND, gui_data.sndbuf_status > 1 || gui_data.sndbuf_status < 0);
 }
 
 void gui_led (int led, int on)
@@ -12705,17 +12762,17 @@ void gui_led (int led, int on)
        lcd_update (led, on);
 #endif
 #ifdef RETROPLATFORM
-       if (led >= 1 && led <= 4 && !gui_data.drive_disabled[led - 1]) {
-               rp_floppy_track (led - 1, gui_data.drive_track[led - 1]);
-               writing = gui_data.drive_writing[led - 1];
+       if (led >= LED_DF0 && led <= LED_DF3 && !gui_data.drive_disabled[led - LED_DF0]) {
+               rp_floppy_track (led - LED_DF0, gui_data.drive_track[led - LED_DF0]);
+               writing = gui_data.drive_writing[led - LED_DF0];
        }
        rp_update_leds (led, on, writing);
 #endif
        if (!hStatusWnd)
                return;
        tt = NULL;
-       if (led >= 1 && led <= 4) {
-               pos = 6 + (led - 1);
+       if (led >= LED_DF0 && led <= LED_DF3) {
+               pos = 6 + (led - LED_DF0);
                ptr = drive_text + pos * 16;
                if (gui_data.drive_disabled[led - 1])
                        _tcscpy (ptr, L"");
@@ -12734,16 +12791,16 @@ void gui_led (int led, int on)
                tt[0] = 0;
                if (_tcslen (p + j) > 0)
                        _stprintf (tt, L"%s [CRC=%08X]", p + j, gui_data.crc32[led - 1]);
-       } else if (led == 0) {
+       } else if (led == LED_POWER) {
                pos = 3;
                ptr = _tcscpy (drive_text + pos * 16, L"Power");
-       } else if (led == 5) {
+       } else if (led == LED_HD) {
                pos = 4;
                ptr = _tcscpy (drive_text + pos * 16, L"HD");
-       } else if (led == 6) {
+       } else if (led == LED_CD) {
                pos = 5;
                ptr = _tcscpy (drive_text + pos * 16, L"CD");
-       } else if (led == 7) {
+       } else if (led == LED_FPS) {
                double fps = (double)gui_data.fps / 10.0;
                extern int p96vblank;
                pos = 2;
@@ -12756,11 +12813,11 @@ void gui_led (int led, int on)
                        _stprintf (ptr, L"FPS: %.1f", fps);
                if (pause_emulation)
                        _tcscpy (ptr, L"PAUSED");
-       } else if (led == 8) {
+       } else if (led == LED_CPU) {
                pos = 1;
                ptr = drive_text + pos * 16;
                _stprintf (ptr, L"CPU: %.0f%%", (double)((gui_data.idle) / 10.0));
-       } else if (led == 9) {
+       } else if (led == LED_SND) {
                pos = 0;
                ptr = drive_text + pos * 16;
                if (gui_data.sndbuf_status < 3) {
index 990e3fe6fd4150672f140806bcd807ce49cdf6a3..b343ca3e10aa9b410876fcd07b6350739010d758 100644 (file)
@@ -87,7 +87,7 @@
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalOptions="/MACHINE:I386"
-                               AdditionalDependencies="ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib portaudio_x86.lib freetype.lib vfw32.lib wtsapi32.lib avrt.lib wininet.lib enet.lib"
+                               AdditionalDependencies="ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib portaudio_x86.lib freetype.lib vfw32.lib wtsapi32.lib avrt.lib wininet.lib enet.lib prowizard.lib"
                                ShowProgress="0"
                                OutputFile="d:\amiga\winuae.exe"
                                LinkIncremental="2"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib portaudio_x86.lib freetype.lib vfw32.lib wtsapi32.lib avrt.lib wininet.lib enet.lib"
+                               AdditionalDependencies="ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib portaudio_x86.lib freetype.lib vfw32.lib wtsapi32.lib avrt.lib wininet.lib enet.lib prowizard.lib"
                                OutputFile="d:\amiga\winuae.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib portaudio_x86.lib freetype.lib vfw32.lib wtsapi32.lib avrt.lib wininet.lib enet.lib"
+                               AdditionalDependencies="ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib portaudio_x86.lib freetype.lib vfw32.lib wtsapi32.lib avrt.lib wininet.lib enet.lib prowizard.lib"
                                OutputFile="d:\amiga\winuae.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                RelativePath="..\..\cia.c"
                                >
                        </File>
+                       <File
+                               RelativePath="..\..\consolehook.c"
+                               >
+                       </File>
                        <File
                                RelativePath="..\..\cpudefs.c"
                                >
                                RelativePath="..\..\readcpu.c"
                                >
                        </File>
+                       <File
+                               RelativePath="..\..\rommgr.c"
+                               >
+                       </File>
                        <File
                                RelativePath="..\..\sana2.c"
                                >
                <Filter
                        Name="prowizard"
                        >
-                       <File
-                               RelativePath="..\..\prowizard\misc\misc.c"
-                               >
-                       </File>
                        <File
                                RelativePath="..\..\moduleripper.c"
                                >
                        </File>
-                       <File
-                               RelativePath="..\..\prowizard\prowiz.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\prowizard\misc\testbag.c"
-                               >
-                       </File>
-                       <Filter
-                               Name="rippers"
-                               >
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\AC1D_packer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\AMOS-MusicBank.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\AMOS-PowerPackerBank.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\BP-Soundmonitor.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\BSI-FutureComposer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Bytekiller.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ChipTracker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Crunchmania-Address.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Crunchmania-Simple.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\datacrunchers.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\DefjamCruncher32-pro.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\DigiBooster17.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\DigitalIllusion.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\DoubleAction.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Dragpack100.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Dragpack252.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\EurekaPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\FastTracker2.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\FC-M-Packer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\FuchsTracker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\FutureComposer13.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\FutureComposer14.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\FuzzacPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\GameMusicCreator.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\GNUPacker12.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\GnuPlayer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\GPMO.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\HeatseekerMC10.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\HornetPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\HQC2.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\JamCracker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\KefrensSoundMachine.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\MasterCruncher30-Address.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\MaxPacker12.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\MED-Octamed.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\MegaCruncher-Object.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\MegaCruncher.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\MOD-compatible.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ModuleProtector.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Mugician.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Newtron.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NewtronOld.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NoiseFromHeaven.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NoisePacker1.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NoisePacker2.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NoisePacker3.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NoiseRunner.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\NovoTrade.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PhaPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PolkaPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PowerMusic.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PowerPacker23.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PowerPacker30.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PowerPacker40-library.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\PowerPacker40.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Promizer01.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Promizer10c.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Promizer18a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Promizer20.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Promizer40.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ProPacker10.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ProPacker21.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ProPacker30.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Prorunner10.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\Prorunner20.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\QuadraComposer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\RelokIt10.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SGT-Packer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\skizzo.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SkytPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SoundFX.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SoundTracker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SoundTracker26.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SpikeCruncher.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StartrekkerPack.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StimPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneArtsPlayer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneCracker270.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneCracker299.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneCracker299b.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneCracker299d.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneCracker300.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\StoneCracker310.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SuperCruncher27.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\SyncroPacker46.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TetraPack102.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TetraPack21.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TetraPack22.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TheDarkDemon.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer22a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer30a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer40.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer41a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer50a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer60a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ThePlayer61a.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TimeCruncher17.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TitanicsPlayer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TMK.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TNMCruncher.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TrackerPacker1.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TrackerPacker2.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TrackerPacker3.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TryItCruncher101.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\TurboSqueezer61.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\UnicTracker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\UnicTracker2.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\WantonPacker.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\XannPlayer.c"
-                                       >
-                               </File>
-                               <File
-                                       RelativePath="..\..\prowizard\rippers\ZenPacker.c"
-                                       >
-                               </File>
-                       </Filter>
                </Filter>
                <Filter
                        Name="decompressors"
index 69b0fc0c66619fc1403d593b7f4f15d04b5d7392..a37c7b57db63c064a5d3611b8560c4ec35b3d8aa 100644 (file)
@@ -1,4 +1,46 @@
 
+Beta 1:
+
+- prowizard is now in static link library (no functional changes)
+- update HDIW=0 or 1 OCS Denise feature, after more research (thanks
+  to yaqube for finding real technical reason), OCS Denise hdiw counter
+  does not reset from last line of previous field to line 9 causing
+  "random" positions to match both start and end of hdiw, including
+  normally unavailable positions. This was fixed in ECS Denise.
+- sometimes cpu frequency was reset to 1000000, now it resets to default
+- set "A500 speed" automatically when switching to cycle exact on the fly
+- renamed "Match A500 speed" to "Approximate A500 or cycle-exact A500/A1200"
+- fixed rare sprite bug introduced in 2.0.0
+- DF3 on screen led reused as internal nvram read/write led in CD32/CDTV
+  modes
+- filter presets were broken
+- replace possible illegal (not in Amiga charset) characters in directory
+  filesystem volume and device names, truncate to 30 characters if longer
+- fixed random Direct3D filter garbage when on screen leds enabled and
+  sometimes even when osd was disabled
+- changed filesystem thread priority back to highest (+2), same as before
+  2.0, it seems +1 isn't enough in all systems (slow fs performance when
+  main thread is using all CPU time)
+- removed broken URLs in about panel
+- fullscreen and windowed file dialogs have separate position and size
+  settings (Vista and newer only)
+- attempt to center file dialogs in fullscreen mode (XP only)
+- caps lock key supported in key mappings, toggle should be usually
+  enabled if you are mapping host non-caps lock key to Amiga caps lock
+- hardcoded keys (pause, scroll lock etc..) automatically disable
+  hardcoded mapping if it is mapped in input panel (END + mappings are
+  not disabled)
+- num lock or scroll lock mapped to amiga caps lock -> follow led state
+  (just like host caps lock key mapped to amiga caps lock key)
+- filesystem charset conversion fallbacks added, ISO-8859-15 ->
+  ISO-8859-1 -> windows-1252 -> current Windows codepage (not all XP
+  installations have all charsets installed by default, last 2 can have
+  problems with national characters but it is better than nothing)
+- closing GUI debugger window won't close the emulator anymore
+- rar unpack crash fix
+
+2.0.1
+
 Beta 3: (RC1)
 
 - emulate OCS Denise "bug", vertical DIW already active, matches again
index 23b22a65d598395120be76580098a813ce713140..2f91f0ed7a2d4f2bd57f176bd399600bd4ce8f23 100644 (file)
@@ -274,6 +274,24 @@ void console_out (const TCHAR *txt)
        writeconsole (txt);
 }
 
+TCHAR console_getch (void)
+{
+       if (realconsole) {
+               return getwc (stdin);
+       } else if (consoleopen < 0) {
+               DWORD len;
+               TCHAR out[2];
+               
+               for (;;) {
+                       out[0] = 0;
+                       ReadConsole (stdinput, out, 1, &len, 0);
+                       if (len > 0)
+                               return out[0];
+               }
+       }
+       return 0;
+}
+
 int console_get (TCHAR *out, int maxlen)
 {
        *out = 0;
@@ -281,8 +299,20 @@ int console_get (TCHAR *out, int maxlen)
        if (consoleopen > 0) {
                return console_get_gui (out, maxlen);
        } else if (realconsole) {
-               _fgetts (out, maxlen, stdin);
-               return _tcslen (out);
+               DWORD totallen;
+
+               *out = 0;
+               totallen = 0;
+               while (maxlen > 0) {
+                       *out = getwc (stdin);
+                       if (*out == 13)
+                               break;
+                       out++;
+                       maxlen--;
+                       totallen++;
+               }
+               *out = 0;
+               return totallen;
        } else if (consoleopen < 0) {
                DWORD len, totallen;
 
diff --git a/rommgr.c b/rommgr.c
new file mode 100644 (file)
index 0000000..e73f8ee
--- /dev/null
+++ b/rommgr.c
@@ -0,0 +1,1318 @@
+ /*
+  * UAE - The Un*x Amiga Emulator
+  *
+  * ROM file management
+  *
+  */ 
+
+#include "sysconfig.h"
+#include "sysdeps.h"
+
+#include "options.h"
+#include "uae.h"
+#include "gui.h"
+#include "rommgr.h"
+#include "memory.h"
+#include "zfile.h"
+#include "crc32.h"
+
+
+static struct romlist *rl;
+static int romlist_cnt;
+
+struct romlist *romlist_getit (void)
+{
+       return rl;
+}
+
+int romlist_count (void)
+{
+       return romlist_cnt;
+}
+
+TCHAR *romlist_get (struct romdata *rd)
+{
+       int i;
+
+       if (!rd)
+               return 0;
+       for (i = 0; i < romlist_cnt; i++) {
+               if (rl[i].rd->id == rd->id)
+                       return rl[i].path;
+       }
+       return 0;
+}
+
+static struct romlist *romlist_getrl (struct romdata *rd)
+{
+       int i;
+
+       if (!rd)
+               return 0;
+       for (i = 0; i < romlist_cnt; i++) {
+               if (rl[i].rd == rd)
+                       return &rl[i];
+       }
+       return 0;
+}
+
+static void romlist_cleanup (void);
+void romlist_add (TCHAR *path, struct romdata *rd)
+{
+       struct romlist *rl2;
+
+       if (path == NULL || rd == NULL) {
+               romlist_cleanup ();
+               return;
+       }
+       romlist_cnt++;
+       rl = realloc (rl, sizeof (struct romlist) * romlist_cnt);
+       rl2 = rl + romlist_cnt - 1;
+       rl2->path = my_strdup (path);
+       rl2->rd = rd;
+}
+
+
+struct romdata *getromdatabypath(TCHAR *path)
+{
+       int i;
+       for (i = 0; i < romlist_cnt; i++) {
+               struct romdata *rd = rl[i].rd;
+               if (rd->configname && path[0] == ':') {
+                       if (!_tcscmp(path + 1, rd->configname))
+                               return rd;
+               }
+               if (!_tcscmp(rl[i].path, path))
+                       return rl[i].rd;
+       }
+       return NULL;
+}
+
+#define NEXT_ROM_ID 73
+
+static struct romheader romheaders[] = {
+       { L"Freezer Cartridges", 1 },
+       { L"Arcadia Games", 2 },
+       { NULL, 0 }
+};
+
+#define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \
+{ L"X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e },
+#define ALTROMPN(id,grp,num,size,flags,pn,crc32,a,b,c,d,e) \
+{ L"X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, pn, crc32, a, b, c, d, e },
+
+static struct romdata roms[] = {
+       { L"Cloanto Amiga Forever ROM key", 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, NULL,
+       0x869ae1b1, 0x801bbab3,0x2e3d3738,0x6dd1636d,0x4f1d6fa7,0xe21d5874 },
+       { L"Cloanto Amiga Forever 2006 ROM key", 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, NULL,
+       0xb01c4b56, 0xbba8e5cd,0x118b8d92,0xafed5693,0x5eeb9770,0x2a662d8f },
+
+       { L"KS ROM v1.0 (A1000)(NTSC)", 1, 0, 1, 0, L"A1000\0", 262144, 1, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x299790ff, 0x00C15406,0xBEB4B8AB,0x1A16AA66,0xC05860E1,0xA7C1AD79 },
+       { L"KS ROM v1.1 (A1000)(NTSC)", 1, 1, 31, 34, L"A1000\0", 262144, 2, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xd060572a, 0x4192C505,0xD130F446,0xB2ADA6BD,0xC91DAE73,0x0ACAFB4C},
+       { L"KS ROM v1.1 (A1000)(PAL)", 1, 1, 31, 34, L"A1000\0", 262144, 3, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xec86dae2, 0x16DF8B5F,0xD524C5A1,0xC7584B24,0x57AC15AF,0xF9E3AD6D },
+       { L"KS ROM v1.2 (A1000)", 1, 2, 33, 166, L"A1000\0", 262144, 4, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x9ed783d0, 0x6A7BFB5D,0xBD6B8F17,0x9F03DA84,0xD8D95282,0x67B6273B },
+       { L"KS ROM v1.2 (A500,A1000,A2000)", 1, 2, 33, 180, L"A500\0A1000\0A2000\0", 262144, 5, 0, 0, ROMTYPE_KICK, 0, 0, L"315093-01",
+       0xa6ce1636, 0x11F9E62C,0xF299F721,0x84835B7B,0x2A70A163,0x33FC0D88 },
+       { L"KS ROM v1.3 (A500,A1000,A2000)", 1, 3, 34, 5, L"A500\0A1000\0A2000\0", 262144, 6, 0, 0, ROMTYPE_KICK, 0, 0, L"315093-02",
+       0xc4f0f55f, 0x891E9A54,0x7772FE0C,0x6C19B610,0xBAF8BC4E,0xA7FCB785 },
+       { L"KS ROM v1.3 (A3000)(SK)", 1, 3, 34, 5, L"A3000\0", 262144, 32, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xe0f37258, 0xC39BD909,0x4D4E5F4E,0x28C1411F,0x30869504,0x06062E87 },
+       { L"KS ROM v1.4 (A3000)", 1, 4, 36, 16, L"A3000\0", 524288, 59, 3, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xbc0ec13f, 0xF76316BF,0x36DFF14B,0x20FA349E,0xD02E4B11,0xDD932B07 },
+       ALTROMPN(59, 1, 1, 262144, ROMTYPE_EVEN, L"390629-02", 0x58327536,0xd1713d7f,0x31474a59,0x48e6d488,0xe3368606,0x1cf3d1e2)
+       ALTROMPN(59, 1, 2, 262144, ROMTYPE_ODD , L"390630-02", 0xfe2f7fb9,0xc05c9c52,0xd014c66f,0x9019152b,0x3f2a2adc,0x2c678794)
+       { L"KS ROM v2.04 (A500+)", 2, 4, 37, 175, L"A500+\0", 524288, 7, 0, 0, ROMTYPE_KICK, 0, 0, L"390979-01",
+       0xc3bdb240, 0xC5839F5C,0xB98A7A89,0x47065C3E,0xD2F14F5F,0x42E334A1 },
+       { L"KS ROM v2.05 (A600)", 2, 5, 37, 299, L"A600\0", 524288, 8, 0, 0, ROMTYPE_KICK, 0, 0, L"391388-01",
+       0x83028fb5, 0x87508DE8,0x34DC7EB4,0x7359CEDE,0x72D2E3C8,0xA2E5D8DB },
+       { L"KS ROM v2.05 (A600HD)", 2, 5, 37, 300, L"A600HD\0A600\0", 524288, 9, 0, 0, ROMTYPE_KICK, 0, 0, L"391304-01",
+       0x64466c2a, 0xF72D8914,0x8DAC39C6,0x96E30B10,0x859EBC85,0x9226637B },
+       { L"KS ROM v2.05 (A600HD)", 2, 5, 37, 350, L"A600HD\0A600\0", 524288, 10, 0, 0, ROMTYPE_KICK, 0, 0, L"391304-02",
+       0x43b0df7b, 0x02843C42,0x53BBD29A,0xBA535B0A,0xA3BD9A85,0x034ECDE4 },
+       { L"KS ROM v2.04 (A3000)", 2, 4, 37, 175, L"A3000\0", 524288, 71, 3, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x234a7233, 0xd82ebb59,0xafc53540,0xddf2d718,0x7ecf239b,0x7ea91590 },
+       ALTROMPN(71, 1, 1, 262144, ROMTYPE_EVEN, L"390629-03", 0x7db1332b,0x48f14b31,0x279da675,0x7848df6f,0xeb531881,0x8f8f576c)
+       ALTROMPN(71, 1, 2, 262144, ROMTYPE_ODD , L"390630-03", 0xa245dbdf,0x83bab8e9,0x5d378b55,0xb0c6ae65,0x61385a96,0xf638598f)
+
+       { L"KS ROM v3.0 (A1200)", 3, 0, 39, 106, L"A1200\0", 524288, 11, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x6c9b07d2, 0x70033828,0x182FFFC7,0xED106E53,0x73A8B89D,0xDA76FAA5 },
+       ALTROMPN(11, 1, 1, 262144, ROMTYPE_EVEN, L"391523-01", 0xc742a412,0x999eb81c,0x65dfd07a,0x71ee1931,0x5d99c7eb,0x858ab186)
+       ALTROMPN(11, 1, 2, 262144, ROMTYPE_ODD , L"391524-01", 0xd55c6ec6,0x3341108d,0x3a402882,0xb5ef9d3b,0x242cbf3c,0x8ab1a3e9)
+       { L"KS ROM v3.0 (A4000)", 3, 0, 39, 106, L"A4000\0", 524288, 12, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x9e6ac152, 0xF0B4E9E2,0x9E12218C,0x2D5BD702,0x0E4E7852,0x97D91FD7 },
+       ALTROMPN(12, 1, 1, 262144, ROMTYPE_EVEN, L"391513-02", 0x36f64dd0,0x196e9f3f,0x9cad934e,0x181c07da,0x33083b1f,0x0a3c702f)
+       ALTROMPN(12, 1, 2, 262144, ROMTYPE_ODD , L"391514-02", 0x17266a55,0x42fbed34,0x53d1f11c,0xcbde89a9,0x826f2d11,0x75cca5cc)
+       { L"KS ROM v3.1 (A4000)", 3, 1, 40, 70, L"A4000\0", 524288, 13, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x2b4566f1, 0x81c631dd,0x096bbb31,0xd2af9029,0x9c76b774,0xdb74076c },
+       ALTROM(13, 1, 1, 262144, ROMTYPE_EVEN, 0xf9cbecc9,0x138d8cb4,0x3b8312fe,0x16d69070,0xde607469,0xb3d4078e)
+       ALTROM(13, 1, 2, 262144, ROMTYPE_ODD , 0xf8248355,0xc2379547,0x9fae3910,0xc185512c,0xa268b82f,0x1ae4fe05)
+       { L"KS ROM v3.1 (A500,A600,A2000)", 3, 1, 40, 63, L"A500\0A600\0A2000\0", 524288, 14, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xfc24ae0d, 0x3B7F1493,0xB27E2128,0x30F989F2,0x6CA76C02,0x049F09CA },
+       { L"KS ROM v3.1 (A1200)", 3, 1, 40, 68, L"A1200\0", 524288, 15, 1, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x1483a091, 0xE2154572,0x3FE8374E,0x91342617,0x604F1B3D,0x703094F1 },
+       ALTROMPN(15, 1, 1, 262144, ROMTYPE_EVEN, L"391773-01", 0x08dbf275,0xb8800f5f,0x90929810,0x9ea69690,0xb1b8523f,0xa22ddb37)
+       ALTROMPN(15, 1, 2, 262144, ROMTYPE_ODD , L"391774-01", 0x16c07bf8,0x90e331be,0x1970b0e5,0x3f53a9b0,0x390b51b5,0x9b3869c2)
+       { L"KS ROM v3.1 (A3000)", 3, 1, 40, 68, L"A3000\0", 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xefb239cc, 0xF8E210D7,0x2B4C4853,0xE0C9B85D,0x223BA20E,0x3D1B36EE },
+       ALTROM(61, 1, 1, 262144, ROMTYPE_EVEN, 0x286b9a0d,0x6763a225,0x8ec493f7,0x408cf663,0x110dae9a,0x17803ad1)
+       ALTROM(61, 1, 2, 262144, ROMTYPE_ODD , 0x0b8cde6a,0x5f02e97b,0x48ebbba8,0x7d516a56,0xb0400c6f,0xc3434d8d)
+       { L"KS ROM v3.1 (A4000)(Cloanto)", 3, 1, 40, 68, L"A4000\0", 524288, 31, 2 | 4, 1, ROMTYPE_KICK, 0, 0, NULL,
+       0x43b6dd22, 0xC3C48116,0x0866E60D,0x085E436A,0x24DB3617,0xFF60B5F9 },
+       { L"KS ROM v3.1 (A4000)", 3, 1, 40, 68, L"A4000\0", 524288, 16, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0xd6bae334, 0x5FE04842,0xD04A4897,0x20F0F4BB,0x0E469481,0x99406F49 },
+       ALTROM(16, 1, 1, 262144, ROMTYPE_EVEN, 0xb2af34f8,0x24e52b5e,0xfc020495,0x17387ab7,0xb1a1475f,0xc540350e)
+       ALTROM(16, 1, 2, 262144, ROMTYPE_ODD , 0xe65636a3,0x313c7cbd,0xa5779e56,0xf19a41d3,0x4e760f51,0x7626d882)
+       { L"KS ROM v3.1 (A4000T)", 3, 1, 40, 70, L"A4000T\0", 524288, 17, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x75932c3a, 0xB0EC8B84,0xD6768321,0xE01209F1,0x1E6248F2,0xF5281A21 },
+       ALTROMPN(17, 1, 1, 262144, ROMTYPE_EVEN, L"391657-01", 0x0ca94f70,0xb3806eda,0xcb3362fc,0x16a154ce,0x1eeec5bf,0x5bc24789)
+       ALTROMPN(17, 1, 2, 262144, ROMTYPE_ODD , L"391658-01", 0xdfe03120,0xcd7a706c,0x431b04d8,0x7814d3a2,0xd8b39710,0x0cf44c0c)
+       { L"KS ROM v3.X (A4000)(Cloanto)", 3, 10, 45, 57, L"A4000\0", 524288, 46, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x3ac99edc, 0x3cbfc9e1,0xfe396360,0x157bd161,0xde74fc90,0x1abee7ec },
+
+       { L"CD32 KS ROM v3.1", 3, 1, 40, 60, L"CD32\0", 524288, 18, 1, 0, ROMTYPE_KICKCD32, 0, 0, NULL,
+       0x1e62d4a5, 0x3525BE88,0x87F79B59,0x29E017B4,0x2380A79E,0xDFEE542D },
+       { L"CD32 extended ROM", 3, 1, 40, 60, L"CD32\0", 524288, 19, 1, 0, ROMTYPE_EXTCD32, 0, 0, NULL,
+       0x87746be2, 0x5BEF3D62,0x8CE59CC0,0x2A66E6E4,0xAE0DA48F,0x60E78F7F },
+
+       /* plain CD32 rom */
+       { L"CD32 ROM (KS + extended)", 3, 1, 40, 60, L"CD32\0", 2 * 524288, 64, 1, 0, ROMTYPE_KICKCD32 | ROMTYPE_EXTCD32 | ROMTYPE_CD32, 0, 0, NULL,
+       0xf5d4f3c8, 0x9fa14825,0xc40a2475,0xa2eba5cf,0x325bd483,0xc447e7c1 },
+       /* real CD32 rom dump 391640-03 */
+       ALTROMPN(64, 1, 1, 2 * 524288, ROMTYPE_CD32, L"391640-03", 0xa4fbc94a, 0x816ce6c5,0x07787585,0x0c7d4345,0x2230a9ba,0x3a2902db )
+
+       { L"CD32 MPEG Cartridge ROM", 3, 1, 40, 30, L"CD32FMV\0", 262144, 23, 1, 0, ROMTYPE_CD32CART, 0, 0, NULL,
+       0xc35c37bf, 0x03ca81c7,0xa7b259cf,0x64bc9582,0x863eca0f,0x6529f435 },
+
+       { L"CDTV extended ROM v1.00", 1, 0, 1, 0, L"CDTV\0", 262144, 20, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL,
+       0x42baa124, 0x7BA40FFA,0x17E500ED,0x9FED041F,0x3424BD81,0xD9C907BE },
+       ALTROMPN(20, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, L"252606-01", 0x791cb14b,0x277a1778,0x92449635,0x3ffe56be,0x68063d2a,0x334360e4)
+       ALTROMPN(20, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, L"252607-01", 0xaccbbc2e,0x41b06d16,0x79c6e693,0x3c3378b7,0x626025f7,0x641ebc5c)
+       { L"CDTV extended ROM v2.07", 2, 7, 2, 7, L"CDTV\0", 262144, 22, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL,
+       0xceae68d2, 0x5BC114BB,0xA29F60A6,0x14A31174,0x5B3E2464,0xBFA06846 },
+       ALTROM(22, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x36d73cb8,0x9574e546,0x4b390697,0xf28f9a43,0x4e604e5e,0xf5e5490a)
+       ALTROM(22, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x6e84dce7,0x01a0679e,0x895a1a0f,0x559c7253,0xf539606b,0xd447b54f)
+       { L"CDTV/A570 extended ROM v2.30", 2, 30, 2, 30, L"CDTV\0", 262144, 21, 0, 0, ROMTYPE_EXTCDTV, 0, 0, L"391298-01",
+       0x30b54232, 0xED7E461D,0x1FFF3CDA,0x321631AE,0x42B80E3C,0xD4FA5EBB },
+       ALTROM(21, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x48e4d74f,0x54946054,0x2269e410,0x36018402,0xe1f6b855,0xfd89092b)
+       ALTROM(21, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x8a54f362,0x03df800f,0x032046fd,0x892f6e7e,0xec08b76d,0x33981e8c)
+
+       { L"A1000 bootstrap ROM", 0, 0, 0, 0, L"A1000\0", 65536, 24, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+       0x0b1ad2d0, 0xBA93B8B8,0x5CA0D83A,0x68225CC3,0x3B95050D,0x72D2FDD7 },
+       ALTROM(24, 1, 1, 8192,           0, 0x62f11c04, 0xC87F9FAD,0xA4EE4E69,0xF3CCA0C3,0x6193BE82,0x2B9F5FE6)
+       ALTROMPN(24, 2, 1, 4096, ROMTYPE_EVEN | ROMTYPE_8BIT, L"252179-01", 0x42553bc4,0x8855a97f,0x7a44e3f6,0x2d1c88d9,0x38fee1f4,0xc606af5b)
+       ALTROMPN(24, 2, 2, 4096, ROMTYPE_ODD  | ROMTYPE_8BIT, L"252180-01", 0x8e5b9a37,0xd10f1564,0xb99f5ffe,0x108fa042,0x362e877f,0x569de2c3)
+
+       { L"The Diagnostic 2.0 (Logica)", 2, 0, 2, 0, L"LOGICA\0", 524288, 72, 0, 0, ROMTYPE_KICK | ROMTYPE_SPECIALKICK, 0, 0, NULL,
+       0x8484f426, 0xba10d161,0x66b2e2d6,0x177c979c,0x99edf846,0x2b21651e },
+
+       { L"Freezer: Action Replay Mk I v1.00", 1, 0, 1, 0, L"AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0x2d921771, 0x1EAD9DDA,0x2DAD2914,0x6441F5EF,0x72183750,0x22E01248 },
+       ALTROM(52, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x82d6eb87, 0x7c9bac11,0x28666017,0xeee6f019,0x63fb3890,0x7fbea355)
+       ALTROM(52, 1, 2, 32768, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x40ae490c, 0x81d8e432,0x01b73fd9,0x2e204ebd,0x68af8602,0xb62ce397)
+       { L"Freezer: Action Replay Mk I v1.50", 1, 50, 1, 50, L"AR\0", 65536, 25, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0xd4ce0675, 0x843B433B,0x2C56640E,0x045D5FDC,0x854DC6B1,0xA4964E7C },
+       ALTROM(25, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x7fbd6de2, 0xb5f71a5c,0x09d65ecc,0xa8a3bc93,0x93558461,0xca190228)
+       ALTROM(25, 1, 2, 32768, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x43018069, 0xad8ff242,0xb2cbf125,0x1fc53a73,0x581cf57a,0xb69cee00)
+       { L"Freezer: Action Replay Mk II v2.05", 2, 5, 2, 5, L"AR\0", 131072, 26, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0x1287301f, 0xF6601DE8,0x888F0050,0x72BF562B,0x9F533BBC,0xAF1B0074 },
+       { L"Freezer: Action Replay Mk II v2.12", 2, 12, 2, 12, L"AR\0", 131072, 27, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0x804d0361, 0x3194A07A,0x0A82D8B5,0xF2B6AEFA,0x3CA581D6,0x8BA8762B },
+       { L"Freezer: Action Replay Mk II v2.14", 2, 14, 2, 14, L"AR\0", 131072, 28, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0x49650e4f, 0x255D6DF6,0x3A4EAB0A,0x838EB1A1,0x6A267B09,0x59DFF634 },
+       { L"Freezer: Action Replay Mk III v3.09", 3, 9, 3, 9, L"AR\0", 262144, 29, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0x0ed9b5aa, 0x0FF3170A,0xBBF0CA64,0xC9DD93D6,0xEC0C7A01,0xB5436824 },
+       ALTROM(29, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2b84519f, 0x7841873b,0xf009d834,0x1dfa2794,0xb3751bac,0xf86adcc8)
+       ALTROM(29, 1, 2, 131072, ROMTYPE_ODD  | ROMTYPE_8BIT, 0x1d35bd56, 0x6464be16,0x26b51949,0x9e76e4e3,0x409e8016,0x515d48b6)
+       { L"Freezer: Action Replay Mk III v3.17", 3, 17, 3, 17, L"AR\0", 262144, 30, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0xc8a16406, 0x5D4987C2,0xE3FFEA8B,0x1B02E314,0x30EF190F,0x2DB76542 },
+       { L"Freezer: Action Replay 1200", 0, 0, 0, 0, L"AR\0", 262144, 47, 0, 0, ROMTYPE_AR, 0, 1, NULL,
+       0x8d760101, 0x0F6AB834,0x2810094A,0xC0642F62,0xBA42F78B,0xC0B07E6A },
+
+       { L"Freezer: Action Cartridge Super IV Professional", 0, 0, 0, 0, L"SUPERIV\0", 0, 62, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL,
+       0xffffffff, 0, 0, 0, 0, 0, L"SuperIV" },
+       { L"Freezer: Action Cart. Super IV Pro (+ROM v4.3)", 4, 3, 4, 3, L"SUPERIV\0", 170368, 60, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL,
+       0xe668a0be, 0x633A6E65,0xA93580B8,0xDDB0BE9C,0x9A64D4A1,0x7D4B4801 },
+       { L"Freezer: X-Power Professional 500 v1.2", 1, 2, 1, 2, L"XPOWER\0", 131072, 65, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL,
+       0x9e70c231, 0xa2977a1c,0x41a8ca7d,0x4af4a168,0x726da542,0x179d5963 },
+       ALTROM(65, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf98742e4,0xe8e683ba,0xd8b38d1f,0x79f3ad83,0xa9e67c6f,0xa91dc96c)
+       ALTROM(65, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdfb9984b,0x8d6bdd49,0x469ec8e2,0x0143fbb3,0x72e92500,0x99f07910)
+       { L"Freezer: X-Power Professional 500 v1.3", 1, 2, 1, 2, L"XPOWER\0", 131072, 68, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL,
+       0x31e057f0, 0x84650266,0x465d1859,0x7fd71dee,0x00775930,0xb7e450ee },
+       ALTROM(68, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x0b2ce0c7,0x45ad5456,0x89192404,0x956f47ce,0xf66a5274,0x57ace33b)
+       ALTROM(68, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x34580c35,0x8ad42566,0x7364f238,0x978f4381,0x08f8d5ec,0x470e72ea)
+       { L"Freezer: Nordic Power v1.5", 1, 5, 1, 5, L"NPOWER\0", 65536, 69, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL,
+       0x83b4b21c, 0xc56ced25,0x506a5aab,0x3fa13813,0x4fc9e5ae,0x0f9d3709 },
+       ALTROM(69, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdd207174,0xae67652d,0x64f5db20,0x0f4b2110,0xee59567f,0xfbd90a1b)
+       ALTROM(69, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x8f93d85d,0x73c62d21,0x40c0c092,0x6315b702,0xdd5d0f05,0x3dad7fab)
+       { L"Freezer: Nordic Power v2.0", 2, 0, 2, 0, L"NPOWER\0", 65536, 67, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL,
+       0xa4db2906, 0x0aec68f7,0x25470c89,0x6b699ff4,0x6623dec5,0xc777466e },
+       ALTROM(67, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xb21be46c,0x50dc607c,0xce976bbd,0x3841eaf0,0x591ddc7e,0xa1939ad2)
+       ALTROM(67, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x96057aed,0xdd9209e2,0x1d5edfc1,0xcdb52abe,0x93de0f35,0xc43da696)
+       { L"Freezer: Nordic Power v3.0", 3, 0, 3, 0, L"NPOWER\0", 65536, 70, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL,
+       0x72850aef, 0x59c91d1f,0xa8f118f9,0x0bdba05a,0x9ae788d7,0x7a6cc7c9 },
+       ALTROM(70, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf3330e1f,0x3a597db2,0xb7d11b6c,0xb8e13496,0xc215f223,0x88c4ca3c)
+       ALTROM(70, 1, 2, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xee58e0f9,0x4148f4cb,0xb42cec33,0x8ca144de,0xd4f54118,0xe0f185dd)
+       { L"Freezer: HRTMon v2.32 (built-in)", 0, 0, 0, 0, L"HRTMON\0", 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, NULL,
+       0xffffffff, 0, 0, 0, 0, 0, L"HRTMon" },
+
+       { L"A590/A2091 SCSI boot ROM", 6, 0, 6, 0, L"A590\0A2091\0", 16384, 53, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
+       0x8396cf4e, 0x5E03BC61,0x8C862ABE,0x7BF79723,0xB4EEF4D2,0x1859A0F2 },
+       ALTROM(53, 1, 1, 8192, ROMTYPE_ODD  | ROMTYPE_8BIT, 0xb0b8cf24,0xfcf40175,0x05f4d441,0x814b45d5,0x59c19eab,0x43816b30)
+       ALTROM(53, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2e77bbff,0x8a098845,0x068f32cf,0xa4d34a27,0x8cd290f6,0x1d35a52c)
+       { L"A590/A2091 SCSI boot ROM", 6, 6, 6, 6, L"A590\0A2091\0", 16384, 54, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
+       0x33e00a7a, 0x739BB828,0xE874F064,0x9360F59D,0x26B5ED3F,0xBC99BB66 },
+       ALTROM(54, 1, 1, 8192, ROMTYPE_ODD  | ROMTYPE_8BIT, 0xe536bbb2,0xfd7f8a6d,0xa18c1b02,0xd07eb990,0xc2467a24,0x183ede12)
+       ALTROM(54, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0xc0871d25,0xe155f18a,0xbb90cf82,0x0589c15e,0x70559d3b,0x6b391af8)
+       { L"A590/A2091 SCSI boot ROM", 7, 0, 7, 0, L"A590\0A2091\0", 16384, 55, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
+       0x714a97a2, 0xE50F01BA,0xF2899892,0x85547863,0x72A82C33,0x3C91276E },
+       ALTROM(55, 1, 1, 8192, ROMTYPE_ODD  | ROMTYPE_8BIT, 0xa9ccffed,0x149f5bd5,0x2e2d2990,0x4e3de483,0xb9ad7724,0x48e9278e)
+       ALTROM(55, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2942747a,0xdbd7648e,0x79c75333,0x7ff3e4f4,0x91de224b,0xf05e6bb6)
+       { L"A590/A2091 SCSI Guru boot ROM", 6, 14, 6, 14, L"A590\0A2091\0", 32768, 56, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL,
+       0x04e52f93, 0x6DA21B6F,0x5E8F8837,0xD64507CD,0x8A4D5CDC,0xAC4F426B },
+       { L"A4091 SCSI boot ROM", 40, 9, 40, 9, L"A4091\0", 32768, 57, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL,
+       0x00000000, 0, 0, 0, 0, 0 },
+       { L"A4091 SCSI boot ROM", 40, 13, 40, 13, L"A4091\0", 32768, 58, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL,
+       0x54cb9e85, 0x3CE66919,0xF6FD6797,0x4923A12D,0x91B730F1,0xFFB4A7BA },
+
+       { L"Arcadia OnePlay 2.11", 0, 0, 0, 0, L"ARCADIA\0", 0, 49, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
+       { L"Arcadia TenPlay 2.11", 0, 0, 0, 0, L"ARCADIA\0", 0, 50, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
+       { L"Arcadia OnePlay 3.00", 0, 0, 0, 0, L"ARCADIA\0", 0, 51, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
+
+       { L"Arcadia SportTime Table Hockey", 0, 0, 0, 0, L"ARCADIA\0", 0, 33, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia SportTime Bowling", 0, 0, 0, 0, L"ARCADIA\0", 0, 34, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia World Darts", 0, 0, 0, 0, L"ARCADIA\0", 0, 35, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Magic Johnson's Fast Break", 0, 0, 0, 0, L"ARCADIA\0", 0, 36, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Leader Board Golf", 0, 0, 0, 0, L"ARCADIA\0", 0, 37, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Leader Board Golf (alt)", 0, 0, 0, 0, L"ARCADIA\0", 0, 38, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Ninja Mission", 0, 0, 0, 0, L"ARCADIA\0", 0, 39, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Road Wars", 0, 0, 0, 0, L"ARCADIA\0", 0, 40, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Sidewinder", 0, 0, 0, 0, L"ARCADIA\0", 0, 41, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Spot", 0, 0, 0, 0, L"ARCADIA\0", 0, 42, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Space Ranger", 0, 0, 0, 0, L"ARCADIA\0", 0, 43, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia Xenon", 0, 0, 0, 0, L"ARCADIA\0", 0, 44, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+       { L"Arcadia World Trophy Soccer", 0, 0, 0, 0, L"ARCADIA\0", 0, 45, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 },
+
+       { NULL }
+
+};
+
+void romlist_clear (void)
+{
+       int i;
+       int mask = 0;
+       struct romdata *parent;
+       TCHAR *pn;
+
+       xfree (rl);
+       rl = 0;
+       romlist_cnt = 0;
+       parent = 0;
+       pn = NULL;
+       for (i = 0; roms[i].name; i++) {
+               struct romdata *rd = &roms[i];
+               if (rd->group == 0) {
+                       parent = rd;
+                       mask = rd->type;
+                       pn = parent->partnumber;
+               } else {
+                       rd->type &= ~ROMTYPE_MASK;
+                       rd->type |= mask & ROMTYPE_MASK;
+                       if (rd->partnumber && !pn) {
+                               TCHAR *newpn;
+                               if (parent->partnumber == NULL)
+                                       parent->partnumber = my_strdup (L"");
+                               newpn = xcalloc ((_tcslen (parent->partnumber) + 1 + _tcslen (rd->partnumber) + 1) * sizeof (TCHAR), 1);
+                               if (_tcslen (parent->partnumber) > 0) {
+                                       _tcscpy (newpn, parent->partnumber);
+                                       _tcscat (newpn, L"/");
+                               }
+                               _tcscat (newpn, rd->partnumber);
+                               xfree (parent->partnumber);
+                               parent->partnumber = newpn;
+                       }
+               }
+       }
+}
+
+/* remove rom entries that need 2 or more roms but not everything required is present */
+static void romlist_cleanup (void)
+{
+       int i = 0;
+       while (roms[i].name) {
+               struct romdata *rd = &roms[i];
+               int grp = rd->group >> 16;
+               int ok = 1;
+               int j = i;
+               int k = i;
+               while (rd->name && (rd->group >> 16) == grp && grp > 0) {
+                       struct romlist *rl = romlist_getrl (rd);
+                       if (!rl)
+                               ok = 0;
+                       rd++;
+                       j++;
+               }
+               if (ok == 0) {
+                       while (i < j) {
+                               struct romlist *rl = romlist_getrl (&roms[i]);
+                               if (rl) {
+                                       int cnt = romlist_cnt - i - 1;
+                                       write_log (L"%s '%s' removed from romlist\n", roms[k].name, rl->path);
+                                       xfree (rl->path);
+                                       if (cnt > 0)
+                                               memmove (rl, rl + 1, cnt * sizeof (struct romlist));
+                                       romlist_cnt--;
+                               }
+                               i++;
+                       }
+               }
+               i++;
+       }
+       for (i = 0; i < romlist_cnt; i++) {
+               struct romlist *rll = &rl[i];
+               //write_log (L"%s (%s)\n", rll->rd->name, rll->path);
+       }
+}
+
+struct romlist **getromlistbyident(int ver, int rev, int subver, int subrev, TCHAR *model, int all)
+{
+       int i, j, ok, out, max;
+       struct romdata *rd;
+       struct romlist **rdout, *rltmp;
+       void *buf;
+       static struct romlist rlstatic;
+
+       for (i = 0; roms[i].name; i++);
+       if (all)
+               max = i;
+       else
+               max = romlist_cnt;
+       buf = xmalloc ((sizeof (struct romlist*) + sizeof (struct romlist)) * (i + 1));
+       rdout = (struct romlist**)buf;
+       rltmp = (struct romlist*)((uae_u8*)buf + (i + 1) * sizeof (struct romlist*));
+       out = 0;
+       for (i = 0; i < max; i++) {
+               ok = 0;
+               if (!all)
+                       rd = rl[i].rd;
+               else
+                       rd = &roms[i];
+               if (rd->group)
+                       continue;
+               if (model && !_tcsicmp (model, rd->name))
+                       ok = 2;
+               if (rd->ver == ver && (rev < 0 || rd->rev == rev)) {
+                       if (subver >= 0) {
+                               if (rd->subver == subver && (subrev < 0 || rd->subrev == subrev) && rd->subver > 0)
+                                       ok = 1;
+                       } else {
+                               ok = 1;
+                       }
+               }
+               if (!ok)
+                       continue;
+               if (model && ok < 2) {
+                       TCHAR *p = rd->model;
+                       ok = 0;
+                       while (*p) {
+                               if (!_tcscmp(rd->model, model)) {
+                                       ok = 1;
+                                       break;
+                               }
+                               p = p + _tcslen(p) + 1;
+                       }
+               }
+               if (!model && rd->type != ROMTYPE_KICK)
+                       ok = 0;
+               if (ok) {
+                       if (all) {
+                               rdout[out++] = rltmp;
+                               rltmp->path = NULL;
+                               rltmp->rd = rd;
+                               rltmp++;
+                       } else {
+                               rdout[out++] = &rl[i];
+                       }
+               }
+       }
+       if (out == 0) {
+               xfree (rdout);
+               return NULL;
+       }
+       for (i = 0; i < out; i++) {
+               int v1 = rdout[i]->rd->subver * 1000 + rdout[i]->rd->subrev;
+               for (j = i + 1; j < out; j++) {
+                       int v2 = rdout[j]->rd->subver * 1000 + rdout[j]->rd->subrev;
+                       if (v1 < v2) {
+                               struct romlist *rltmp = rdout[j];
+                               rdout[j] = rdout[i];
+                               rdout[i] = rltmp;
+                       }
+               }
+       }
+       rdout[out] = NULL;
+       return rdout;
+}
+
+struct romdata *getarcadiarombyname (TCHAR *name)
+{
+       int i;
+       for (i = 0; roms[i].name; i++) {
+               if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIAGAME || roms[i].type == ROMTYPE_ARCADIAGAME)) {
+                       TCHAR *p = roms[i].name;
+                       p = p + _tcslen (p) + 1;
+                       if (_tcslen (name) >= _tcslen (p) + 4) {
+                               TCHAR *p2 = name + _tcslen (name) - _tcslen (p) - 4;
+                               if (!memcmp (p, p2, _tcslen (p)) && !memcmp (p2 + _tcslen (p2) - 4, ".zip", 4))
+                                       return &roms[i];
+                       }
+               }
+       }
+       return NULL;
+}
+
+struct romlist **getarcadiaroms(void)
+{
+       int i, out, max;
+       void *buf;
+       struct romlist **rdout, *rltmp;
+
+       max = 0;
+       for (i = 0; roms[i].name; i++) {
+               if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME))
+                       max++;
+       }
+       buf = xmalloc ((sizeof (struct romlist*) + sizeof (struct romlist)) * (max + 1));
+       rdout = (struct romlist**)buf;
+       rltmp = (struct romlist*)((uae_u8*)buf + (max + 1) * sizeof (struct romlist*));
+       out = 0;
+       for (i = 0; roms[i].name; i++) {
+               if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME)) {
+                       rdout[out++] = rltmp;
+                       rltmp->path = NULL;
+                       rltmp->rd = &roms[i];
+                       rltmp++;
+               }
+       }
+       rdout[out] = NULL;
+       return rdout;
+}
+
+
+static int kickstart_checksum_do (uae_u8 *mem, int size)
+{
+       uae_u32 cksum = 0, prevck = 0;
+       int i;
+       for (i = 0; i < size; i+=4) {
+               uae_u32 data = mem[i]*65536*256 + mem[i+1]*65536 + mem[i+2]*256 + mem[i+3];
+               cksum += data;
+               if (cksum < prevck)
+                       cksum++;
+               prevck = cksum;
+       }
+       return cksum == 0xffffffff;
+}
+
+#define ROM_KEY_NUM 3
+struct rom_key {
+       uae_u8 *key;
+       int size;
+};
+
+static struct rom_key keyring[ROM_KEY_NUM];
+
+static void addkey (uae_u8 *key, int size, const TCHAR *name)
+{
+       int i;
+
+       //write_log (L"addkey(%08x,%d,'%s')\n", key, size, name);
+       if (key == NULL || size == 0) {
+               xfree (key);
+               return;
+       }
+       for (i = 0; i < ROM_KEY_NUM; i++) {
+               if (keyring[i].key && keyring[i].size == size && !memcmp (keyring[i].key, key, size)) {
+                       xfree (key);
+                       //write_log (L"key already in keyring\n");
+                       return;
+               }
+       }
+       for (i = 0; i < ROM_KEY_NUM; i++) {
+               if (keyring[i].key == NULL)
+                       break;
+       }
+       if (i == ROM_KEY_NUM) {
+               xfree (key);
+               //write_log (L"keyring full\n");
+               return;
+       }
+       keyring[i].key = key;
+       keyring[i].size = size;
+       write_log (L"ROM KEY '%s' %d bytes loaded\n", name, size);
+}
+
+static void addkeyfile (const TCHAR *path)
+{
+       struct zfile *f;
+       int keysize;
+       uae_u8 *keybuf;
+
+       f = zfile_fopen (path, L"rb", ZFD_NORMAL);
+       if (!f)
+               return;
+       zfile_fseek (f, 0, SEEK_END);
+       keysize = zfile_ftell (f);
+       if (keysize > 0) {
+               zfile_fseek (f, 0, SEEK_SET);
+               keybuf = xmalloc (keysize);
+               zfile_fread (keybuf, 1, keysize, f);
+               addkey (keybuf, keysize, path);
+       }
+       zfile_fclose (f);
+}
+
+void addkeydir (const TCHAR *path)
+{
+       TCHAR tmp[MAX_DPATH];
+
+       _tcscpy (tmp, path);
+       if (zfile_exists (tmp)) {
+               int i;
+               for (i = _tcslen (tmp) - 1; i > 0; i--) {
+                       if (tmp[i] == '\\' || tmp[i] == '/')
+                               break;
+               }
+               tmp[i] = 0;
+       }
+       _tcscat (tmp, L"/");
+       _tcscat (tmp, L"rom.key");
+       addkeyfile (tmp);
+}
+
+int get_keyring (void)
+{
+       int i, num = 0;
+       for (i = 0; i < ROM_KEY_NUM; i++) {
+               if (keyring[i].key)
+                       num++;
+       }
+       return num;
+}
+
+int load_keyring (struct uae_prefs *p, TCHAR *path)
+{
+       uae_u8 *keybuf;
+       int keysize;
+       TCHAR tmp[MAX_PATH], *d;
+       int keyids[] = { 0, 48, -1 };
+       int cnt, i;
+
+       free_keyring ();
+       keybuf = target_load_keyfile (p, path, &keysize, tmp);
+       addkey (keybuf, keysize, tmp);
+       for (i = 0; keyids[i] >= 0; i++) {
+               struct romdata *rd = getromdatabyid (keyids[i]);
+               TCHAR *s;
+               if (rd) {
+                       s = romlist_get (rd);
+                       if (s)
+                               addkeyfile (s);
+               }
+       }
+
+       cnt = 0;
+       for (;;) {
+               keybuf = NULL;
+               keysize = 0;
+               tmp[0] = 0;
+               switch (cnt)
+               {
+               case 0:
+                       if (path)
+                               _tcscpy (tmp, path);
+                       break;
+               case 1:
+                       _tcscat (tmp, L"rom.key");
+                       break;
+               case 2:
+                       if (p) {
+                               _tcscpy (tmp, p->path_rom);
+                               _tcscat (tmp, L"rom.key");
+                       }
+                       break;
+               case 3:
+                       _tcscpy (tmp, L"roms/rom.key");
+                       break;
+               case 4:
+                       _tcscpy (tmp, start_path_data);
+                       _tcscat (tmp, L"rom.key");
+                       break;
+               case 5:
+                       _stprintf (tmp, L"%s../shared/rom/rom.key", start_path_data);
+                       break;
+               case 6:
+                       if (p) {
+                               for (i = 0; uae_archive_extensions[i]; i++) {
+                                       if (_tcsstr (p->romfile, uae_archive_extensions[i]))
+                                               break;
+                               }
+                               if (!uae_archive_extensions[i]) {
+                                       _tcscpy (tmp, p->romfile);
+                                       d = _tcsrchr (tmp, '/');
+                                       if (!d)
+                                               d = _tcsrchr (tmp, '\\');
+                                       if (d)
+                                               _tcscpy (d + 1, L"rom.key");
+                               }
+                       }
+                       break;
+               case 7:
+                       return get_keyring ();
+               }
+               cnt++;
+               if (!tmp[0])
+                       continue;
+               addkeyfile (tmp);
+       }
+}
+void free_keyring (void)
+{
+       int i;
+       for (i = 0; i < ROM_KEY_NUM; i++)
+               xfree (keyring[i].key);
+       memset(keyring, 0, sizeof (struct rom_key) * ROM_KEY_NUM);
+}
+
+struct romdata *getromdatabyname (TCHAR *name)
+{
+       TCHAR tmp[MAX_PATH];
+       int i = 0;
+       while (roms[i].name) {
+               if (!roms[i].group) {
+                       getromname (&roms[i], tmp);
+                       if (!_tcscmp (tmp, name) || !_tcscmp (roms[i].name, name))
+                               return &roms[i];
+               }
+               i++;
+       }
+       return 0;
+}
+
+struct romdata *getromdatabyid (int id)
+{
+       int i = 0;
+       while (roms[i].name) {
+               if (id == roms[i].id && roms[i].group == 0)
+                       return &roms[i];
+               i++;
+       }
+       return 0;
+}
+
+struct romdata *getromdatabyidgroup (int id, int group, int subitem)
+{
+       int i = 0;
+       group = (group << 16) | subitem;
+       while (roms[i].name) {
+               if (id == roms[i].id && roms[i].group == group)
+                       return &roms[i];
+               i++;
+       }
+       return 0;
+}
+
+STATIC_INLINE int notcrc32 (uae_u32 crc32)
+{
+       if (crc32 == 0xffffffff || crc32 == 0x00000000)
+               return 1;
+       return 0;
+}
+
+struct romdata *getromdatabycrc (uae_u32 crc32)
+{
+       int i = 0;
+       while (roms[i].name) {
+               if (roms[i].group == 0 && crc32 == roms[i].crc32 && !notcrc32(crc32))
+                       return &roms[i];
+               i++;
+       }
+       return 0;
+}
+
+static int cmpsha1 (uae_u8 *s1, struct romdata *rd)
+{
+       int i;
+
+       for (i = 0; i < SHA1_SIZE / 4; i++) {
+               uae_u32 v1 = (s1[0] << 24) | (s1[1] << 16) | (s1[2] << 8) | (s1[3] << 0);
+               uae_u32 v2 = rd->sha1[i];
+               if (v1 != v2)
+                       return -1;
+               s1 += 4;
+       }
+       return 0;
+}
+
+static struct romdata *checkromdata (uae_u8 *sha1, int size, uae_u32 mask)
+{
+       int i = 0;
+       while (roms[i].name) {
+               if (!notcrc32(roms[i].crc32) && roms[i].size >= size) {
+                       if (roms[i].type & mask) {
+                               if (!cmpsha1 (sha1, &roms[i]))
+                                       return &roms[i];
+                       }
+               }
+               i++;
+       }
+       return NULL;
+}
+
+int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size)
+{
+       int cnt, t, i;
+
+       for (i = ROM_KEY_NUM - 1; i >= 0; i--) {
+               uae_u8 sha1[SHA1_SIZE];
+               struct romdata *rd;
+               int keysize = keyring[i].size;
+               uae_u8 *key = keyring[i].key;
+               if (!key)
+                       continue;
+               for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize)  {
+                       mem[cnt] ^= key[t];
+                       if (real_size == cnt + 1)
+                               t = keysize - 1;
+               }
+               if ((mem[2] == 0x4e && mem[3] == 0xf9) || (mem[0] == 0x11 && (mem[1] == 0x11 || mem[1] == 0x14))) {
+                       cloanto_rom = 1;
+                       return 1;
+               }
+               get_sha1 (mem, size, sha1);
+               rd = checkromdata (sha1, size, -1);
+               if (rd) {
+                       if (rd->cloanto)
+                               cloanto_rom = 1;
+                       return 1;
+               }
+               if (i == 0)
+                       break;
+               for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize)  {
+                       mem[cnt] ^= key[t];
+                       if (real_size == cnt + 1)
+                               t = keysize - 1;
+               }
+       }
+       return 0;
+}
+
+static int decode_rekick_rom_do (uae_u8 *mem, int size, int real_size)
+{
+       uae_u32 d1 = 0xdeadfeed, d0;
+       int i;
+
+       for (i = 0; i < size / 8; i++) {
+               d0 = ((mem[i * 8 + 0] << 24) | (mem[i * 8 + 1] << 16) | (mem[i * 8 + 2] << 8) | mem[i * 8 + 3]);
+               d1 = d1 ^ d0;
+               mem[i * 8 + 0] = d1 >> 24;
+               mem[i * 8 + 1] = d1 >> 16;
+               mem[i * 8 + 2] = d1 >> 8;
+               mem[i * 8 + 3] = d1;
+               d1 = ((mem[i * 8 + 4] << 24) | (mem[i * 8 + 5] << 16) | (mem[i * 8 + 6] << 8) | mem[i * 8 + 7]);
+               d0 = d0 ^ d1;
+               mem[i * 8 + 4] = d0 >> 24;
+               mem[i * 8 + 5] = d0 >> 16;
+               mem[i * 8 + 6] = d0 >> 8;
+               mem[i * 8 + 7] = d0;
+       }
+       return 1;
+}
+
+int decode_rom (uae_u8 *mem, int size, int mode, int real_size)
+{
+       if (mode == 1) {
+               if (!decode_cloanto_rom_do (mem, size, real_size)) {
+#ifndef SINGLEFILE
+                       notify_user (NUMSG_NOROMKEY);
+#endif
+                       return 0;
+               }
+               return 1;
+       } else if (mode == 2) {
+               decode_rekick_rom_do (mem, size, real_size);
+               return 1;
+       }
+       return 0;
+}
+
+struct romdata *getromdatabydata (uae_u8 *rom, int size)
+{
+       uae_u8 sha1[SHA1_SIZE];
+       uae_u8 tmp[4];
+       uae_u8 *tmpbuf = NULL;
+       struct romdata *ret = NULL;
+
+       if (size > 11 && !memcmp (rom, "AMIROMTYPE1", 11)) {
+               uae_u8 *tmpbuf = xmalloc (size);
+               int tmpsize = size - 11;
+               memcpy (tmpbuf, rom + 11, tmpsize);
+               decode_rom (tmpbuf, tmpsize, 1, tmpsize);
+               rom = tmpbuf;
+               size = tmpsize;
+       }
+#if 0
+       if (size > 0x6c + 524288 && !memcmp (rom, "AMIG", 4)) {
+               uae_u8 *tmpbuf = (uae_u8*)xmalloc (size);
+               int tmpsize = size - 0x6c;
+               memcpy (tmpbuf, rom + 0x6c, tmpsize);
+               decode_rom (tmpbuf, tmpsize, 2, tmpsize);
+               rom = tmpbuf;
+               size = tmpsize;
+       }
+#endif
+       get_sha1 (rom, size, sha1);
+       ret = checkromdata(sha1, size, -1);
+       if (!ret) {
+               get_sha1 (rom, size / 2, sha1);
+               ret = checkromdata (sha1, size / 2, -1);
+               if (!ret) {
+                       /* ignore AR IO-port range until we have full dump */
+                       memcpy (tmp, rom, 4);
+                       memset (rom, 0, 4);
+                       get_sha1 (rom, size, sha1);
+                       ret = checkromdata (sha1, size, ROMTYPE_AR);
+                       memcpy (rom, tmp, 4);
+               }
+       }
+       xfree (tmpbuf);
+       return ret;
+}
+
+struct romdata *getromdatabyzfile (struct zfile *f)
+{
+       int pos, size;
+       uae_u8 *p;
+       struct romdata *rd;
+
+       pos = zfile_ftell (f);
+       zfile_fseek (f, 0, SEEK_END);
+       size = zfile_ftell (f);
+       p = xmalloc (size);
+       if (!p)
+               return 0;
+       memset (p, 0, size);
+       zfile_fseek (f, 0, SEEK_SET);
+       zfile_fread (p, 1, size, f);
+       zfile_fseek (f, pos, SEEK_SET);
+       rd = getromdatabydata (p, size);
+       xfree (p);
+       return rd;
+}
+
+void getromname        (struct romdata *rd, TCHAR *name)
+{
+       name[0] = 0;
+       if (!rd)
+               return;
+       while (rd->group)
+               rd--;
+       _tcscat (name, rd->name);
+       if ((rd->subrev || rd->subver) && rd->subver != rd->ver)
+               _stprintf (name + _tcslen (name), L" rev %d.%d", rd->subver, rd->subrev);
+       if (rd->size > 0)
+               _stprintf (name + _tcslen (name), L" (%dk)", (rd->size + 1023) / 1024);
+       if (rd->partnumber && _tcslen (rd->partnumber) > 0)
+               _stprintf (name + _tcslen (name), L" [%s]", rd->partnumber);
+}
+
+struct romlist *getromlistbyromdata (struct romdata *rd)
+{
+       int ids[2];
+
+       ids[0] = rd->id;
+       ids[1] = 0;
+       return getromlistbyids(ids);
+}
+
+struct romlist *getromlistbyids (int *ids)
+{
+       struct romdata *rd;
+       int i, j;
+
+       i = 0;
+       while (ids[i] >= 0) {
+               rd = getromdatabyid (ids[i]);
+               if (rd) {
+                       for (j = 0; j < romlist_cnt; j++) {
+                               if (rl[j].rd->id == rd->id)
+                                       return &rl[j];
+                       }
+               }
+               i++;
+       }
+       return NULL;
+}
+
+void romwarning (int *ids)
+{
+       int i, exp;
+       TCHAR tmp1[MAX_DPATH], tmp2[MAX_DPATH];
+       TCHAR tmp3[MAX_DPATH];
+
+       exp = 0;
+       tmp2[0] = 0;
+       i = 0;
+       while (ids[i] >= 0) {
+               struct romdata *rd = getromdatabyid (ids[i]);
+               getromname (rd, tmp1);
+               _tcscat (tmp2, L"- ");
+               _tcscat (tmp2, tmp1);
+               _tcscat (tmp2, L"\n");
+               if (rd->type & (ROMTYPE_A2091BOOT | ROMTYPE_A4091BOOT))
+                       exp++;
+               i++;
+       }
+       translate_message (exp ? NUMSG_EXPROMNEED : NUMSG_ROMNEED, tmp3);
+       gui_message (tmp3, tmp2);
+}
+
+
+static void byteswap (uae_u8 *buf, int size)
+{
+       int i;
+       for (i = 0; i < size; i += 2) {
+               uae_u8 t = buf[i];
+               buf[i] = buf[i + 1];
+               buf[i + 1] = t;
+       }
+}
+static void wordbyteswap (uae_u8 *buf, int size)
+{
+       int i;
+       for (i = 0; i < size; i += 4) {
+               uae_u8 t;
+               t = buf[i + 0];
+               buf[i + 0] = buf[i + 2];
+               buf[i + 2] = t;
+               t = buf[i + 1];
+               buf[i + 1] = buf[i + 3];
+               buf[i + 3] = t;
+       }
+}
+
+static void mergecd32 (uae_u8 *dst, uae_u8 *src, int size)
+{
+       int i, k;
+       k = 0;
+       for (i = 0; i < size / 2; i += 2) {
+               int j = i + size / 2;
+               dst[k + 1] = src[i + 0];
+               dst[k + 0] = src[i + 1];
+               dst[k + 3] = src[j + 0];
+               dst[k + 2] = src[j + 1];
+               k += 4;
+       }
+#if 0
+       {
+               struct zfile *f;
+               f = zfile_fopen ("c:\\d\\1.rom","wb", ZFD_NORMAL);
+               zfile_fwrite (dst, 1, size, f);
+               zfile_fclose(f);
+       }
+#endif
+}
+
+static void descramble (struct romdata *rd, uae_u8 *data, int size, int odd)
+{
+       int flags = rd->type;
+
+       if (flags & (ROMTYPE_NORDIC | ROMTYPE_XPOWER))
+               descramble_nordicpro (data, size, odd);
+}
+
+static int read_rom_file (uae_u8 *buf, struct romdata *rd)
+{
+       struct zfile *zf;
+       struct romlist *rl = romlist_getrl (rd);
+       uae_char tmp[11];
+
+       if (!rl || _tcslen (rl->path) == 0)
+               return 0;
+       zf = zfile_fopen (rl->path, L"rb", ZFD_NORMAL);
+       if (!zf)
+               return 0;
+       addkeydir (rl->path);
+       zfile_fread (tmp, sizeof tmp, 1, zf);
+       if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) {
+               zfile_fread (buf, rd->size, 1, zf);
+               decode_cloanto_rom_do (buf, rd->size, rd->size);
+       } else {
+               memcpy (buf, tmp, sizeof tmp);
+               zfile_fread (buf + sizeof tmp, rd->size - sizeof (tmp), 1, zf);
+       }
+       zfile_fclose (zf);
+       return 1;
+}
+
+struct zfile *read_rom (struct romdata **prd)
+{
+       struct romdata *rd2 = *prd;
+       struct romdata *rd = *prd;
+       TCHAR *name;
+       int id = rd->id;
+       uae_u32 crc32;
+       int size;
+       uae_u8 *buf, *buf2;
+
+       /* find parent node */
+       for (;;) {
+               if (rd2 == &roms[0])
+                       break;
+               if (rd2[-1].id != id)
+                       break;
+               rd2--;
+       }
+       *prd = rd2;
+       size = rd2->size;
+       crc32 = rd2->crc32;
+       name = rd->name;
+       buf = xmalloc (size * 2);
+       memset (buf, 0xff, size * 2);
+       if (!buf)
+               return NULL;
+       buf2 = buf + size;
+       while (rd->id == id) {
+               int i, j, add;
+               int ok = 0;
+               uae_u32 flags = rd->type;
+               int odd = (flags & ROMTYPE_ODD) ? 1 : 0;
+
+               add = 0;
+               for (i = 0; i < 2; i++) {
+                       memset (buf, 0, size);
+                       if (!(flags & (ROMTYPE_EVEN | ROMTYPE_ODD))) {
+                               read_rom_file (buf, rd);
+                               if (flags & ROMTYPE_CD32) {
+                                       memcpy (buf2, buf, size);
+                                       mergecd32 (buf, buf2, size);
+                               }
+                               add = 1;
+                               i++;
+                       } else {
+                               int romsize = size / 2;
+                               if (i)
+                                       odd = !odd;
+                               if (flags & ROMTYPE_8BIT) {
+                                       read_rom_file (buf2, rd);
+                                       if (flags & ROMTYPE_BYTESWAP)
+                                               byteswap (buf2, romsize);
+                                       if (flags & ROMTYPE_SCRAMBLED)
+                                               descramble (rd, buf2, romsize, odd);
+                                       for (j = 0; j < size; j += 2)
+                                               buf[j + odd] = buf2[j / 2];
+                                       read_rom_file (buf2, rd + 1);
+                                       if (flags & ROMTYPE_BYTESWAP)
+                                               byteswap (buf2, romsize);
+                                       if (flags & ROMTYPE_SCRAMBLED)
+                                               descramble (rd + 1, buf2, romsize, !odd);
+                                       for (j = 0; j < size; j += 2)
+                                               buf[j + (1 - odd)] = buf2[j / 2];
+                               } else {
+                                       read_rom_file (buf2, rd);
+                                       if (flags & ROMTYPE_BYTESWAP)
+                                               byteswap (buf2, romsize);
+                                       if (flags & ROMTYPE_SCRAMBLED)
+                                               descramble (rd, buf2, romsize, odd);
+                                       for (j = 0; j < size; j += 4) {
+                                               buf[j + 2 * odd + 0] = buf2[j / 2 + 0];
+                                               buf[j + 2 * odd + 1] = buf2[j / 2 + 1];
+                                       }
+                                       read_rom_file (buf2, rd + 1);
+                                       if (flags & ROMTYPE_BYTESWAP)
+                                               byteswap (buf2, romsize);
+                                       if (flags & ROMTYPE_SCRAMBLED)
+                                               descramble (rd + 1, buf2, romsize, !odd);
+                                       for (j = 0; j < size; j += 4) {
+                                               buf[j + 2 * (1 - odd) + 0] = buf2[j / 2 + 0];
+                                               buf[j + 2 * (1 - odd) + 1] = buf2[j / 2 + 1];
+                                       }
+                               }
+                               add = 2;
+                       }
+                       if (get_crc32 (buf, size) == crc32) {
+                               ok = 1;
+                       } else {
+                               /* perhaps it is byteswapped without byteswap entry? */
+                               byteswap (buf, size);
+                               if (get_crc32 (buf, size) == crc32)
+                                       ok = 1;
+                       }
+                       if (ok) {
+                               struct zfile *zf = zfile_fopen_empty (NULL, name, size);
+                               if (zf) {
+                                       zfile_fwrite (buf, size, 1, zf);
+                                       zfile_fseek (zf, 0, SEEK_SET);
+                               }
+                               xfree (buf);
+                               return zf;
+                       }
+               }
+               rd += add;
+
+       }
+       xfree (buf);
+       return NULL;
+}
+
+struct zfile *rom_fopen (const TCHAR *name, const TCHAR *mode, int mask)
+{
+       struct zfile *f;
+       //write_log (L"attempting to load '%s'\n", name); 
+       f = zfile_fopen (name, mode, mask);
+       //write_log (L"=%p\n", f);
+       return f;
+}
+
+struct zfile *read_rom_name (const TCHAR *filename)
+{
+       int i;
+       struct zfile *f;
+
+       for (i = 0; i < romlist_cnt; i++) {
+               if (!_tcsicmp (filename, rl[i].path)) {
+                       struct romdata *rd = rl[i].rd;
+                       f = read_rom (&rd);
+                       if (f)
+                               return f;
+               }
+       }
+       f = rom_fopen (filename, L"rb", ZFD_NORMAL);
+       if (f) {
+               uae_u8 tmp[11];
+               zfile_fread (tmp, sizeof tmp, 1, f);
+               if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) {
+                       struct zfile *df;
+                       int size;
+                       uae_u8 *buf;
+                       addkeydir (filename);
+                       zfile_fseek (f, 0, SEEK_END);
+                       size = zfile_ftell (f) - sizeof tmp;
+                       zfile_fseek (f, sizeof tmp, SEEK_SET);
+                       buf = xmalloc (size);
+                       zfile_fread (buf, size, 1, f);
+                       df = zfile_fopen_empty (f, L"tmp.rom", size);
+                       decode_cloanto_rom_do (buf, size, size);
+                       zfile_fwrite (buf, size, 1, df);
+                       zfile_fclose (f);
+                       xfree (buf);
+                       zfile_fseek (df, 0, SEEK_SET);
+                       f = df;
+               } else {
+                       zfile_fseek (f, -((int)sizeof tmp), SEEK_CUR);
+               }
+       }
+       return f;
+}
+
+struct zfile *read_rom_name_guess (const TCHAR *filename)
+{
+       int i, j;
+       struct zfile *f;
+       const TCHAR *name;
+
+       for (i = _tcslen (filename) - 1; i >= 0; i--) {
+               if (filename[i] == '/' || filename[i] == '\\')
+                       break;
+       }
+       if (i < 0)
+               return NULL;
+       name = &filename[i];
+
+       for (i = 0; i < romlist_cnt; i++) {
+               TCHAR *n = rl[i].path;
+               for (j = _tcslen (n) - 1; j >= 0; j--) {
+                       if (n[j] == '/' || n[j] == '\\')
+                               break;
+               }
+               if (j < 0)
+                       continue;
+               if (!_tcsicmp (name, n + j)) {
+                       struct romdata *rd = rl[i].rd;
+                       f = read_rom (&rd);
+                       if (f) {
+                               write_log (L"ROM %s not found, using %s\n", filename, rl[i].path);
+                               return f;
+                       }
+               }
+       }
+       return NULL;
+}
+
+void kickstart_fix_checksum (uae_u8 *mem, int size)
+{
+       uae_u32 cksum = 0, prevck = 0;
+       int i, ch = size == 524288 ? 0x7ffe8 : 0x3e;
+
+       mem[ch] = 0;
+       mem[ch + 1] = 0;
+       mem[ch + 2] = 0;
+       mem[ch + 3] = 0;
+       for (i = 0; i < size; i+=4) {
+               uae_u32 data = (mem[i] << 24) | (mem[i + 1] << 16) | (mem[i + 2] << 8) | mem[i + 3];
+               cksum += data;
+               if (cksum < prevck)
+                       cksum++;
+               prevck = cksum;
+       }
+       cksum ^= 0xffffffff;
+       mem[ch++] = cksum >> 24;
+       mem[ch++] = cksum >> 16;
+       mem[ch++] = cksum >> 8;
+       mem[ch++] = cksum >> 0;
+}
+
+int kickstart_checksum (uae_u8 *mem, int size)
+{
+       if (!kickstart_checksum_do (mem, size)) {
+#ifndef        SINGLEFILE
+               notify_user (NUMSG_KSROMCRCERROR);
+#endif
+               return 0;
+       }
+       return 1;
+}
+
+int configure_rom (struct uae_prefs *p, int *rom, int msg)
+{
+       struct romdata *rd;
+       TCHAR *path = 0;
+       int i;
+
+       i = 0;
+       while (rom[i] >= 0) {
+               rd = getromdatabyid (rom[i]);
+               if (!rd) {
+                       i++;
+                       continue;
+               }
+               path = romlist_get (rd);
+               if (path)
+                       break;
+               i++;
+       }
+       if (!path) {
+               if (msg)
+                       romwarning(rom);
+               return 0;
+       }
+       if (rd->type & (ROMTYPE_KICK | ROMTYPE_KICKCD32))
+               _tcscpy (p->romfile, path);
+       if (rd->type & (ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV | ROMTYPE_ARCADIABIOS))
+               _tcscpy (p->romextfile, path);
+       if (rd->type & (ROMTYPE_CD32CART | ROMTYPE_ARCADIAGAME | ROMTYPE_HRTMON | ROMTYPE_XPOWER | ROMTYPE_NORDIC | ROMTYPE_AR | ROMTYPE_SUPERIV))
+               _tcscpy (p->cartfile, path);
+       return 1;
+}
index 051ab0ba90d6a2561889a941f684f1b4af23ace5..86b6c7976c6ccca3c20f24825d869ad1c8deb83d 100644 (file)
--- a/uaeunp.c
+++ b/uaeunp.c
@@ -15,7 +15,7 @@ TCHAR start_path_data[MAX_DPATH];
 TCHAR sep[] = { FSDB_DIR_SEPARATOR, 0 };
 
 struct uae_prefs currprefs;
-static int debug = 0;
+static int debug = 1;
 static int amigatest;
 
 #define WRITE_LOG_BUF_SIZE 4096
diff --git a/zfile.c b/zfile.c
index 1f59618bc0dcb5d7ab23026ae0fd7148efbb6c7e..52c174f6b3647dbe4a38b4dc189919c3a442631b 100644 (file)
--- a/zfile.c
+++ b/zfile.c
@@ -864,7 +864,9 @@ static struct zfile *ipf (struct zfile *z, int index, int *retcode)
                zd->tracks = tracks;
                for (i = 0; i < tracks; i++) {
                        uae_u8 *buf, *p;
-                       caps_loadrevolution (mfm, 0, i, &len);
+                       int mrev, gapo;
+                       caps_loadtrack (mfm, NULL, 0, i, &len, &mrev, &gapo);
+                       //write_log (L"%d: %d %d %d\n", i, mrev, gapo, len);
                        len /= 8;
                        buf = p = xmalloc (len);
                        for (j = 0; j < len / 2; j++) {
index cfec72dfb643f33d0fea526794bf4f62219aac27..ea201503f86bbf6db30ed58785841b1093c2fb01 100644 (file)
@@ -604,16 +604,6 @@ static RARSETCALLBACK pRARSetCallback;
 typedef int (_stdcall* RARGETDLLVERSION)(void);
 static RARGETDLLVERSION pRARGetDllVersion;
 
-static int rar_resetf (struct zfile *z)
-{
-       z->f = _tfopen (z->name, L"rb");
-       if (!z->f) {
-               zfile_fclose (z);
-               return 0;
-       }
-       return 1;
-}
-
 static int canrar (void)
 {
        static int israr;
@@ -670,6 +660,15 @@ struct RARContext
        HANDLE hArcData;
 };
 
+static int rar_resetf (struct zfile *z)
+{
+       z->f = _tfopen (z->name, z->mode);
+       if (!z->f) {
+               zfile_fclose (z);
+               return 0;
+       }
+       return 1;
+}
 
 static void archive_close_rar (struct RARContext *rc)
 {
@@ -690,17 +689,17 @@ struct zvolume *archive_directory_rar (struct zfile *z)
                return archive_directory_arcacc (z, ArchiveFormatRAR);
        rc = xcalloc (sizeof (struct RARContext), 1);
        zv = zvolume_alloc (z, ArchiveFormatRAR, rc, NULL);
-       fclose (z->f); /* bleh, unrar.dll fails to open the archive if it is already open.. */
-       z->f = NULL;
+       //fclose (z->f); /* bleh, unrar.dll fails to open the archive if it is already open.. */
+       //z->f = NULL;
        rc->OpenArchiveData.ArcNameW = z->name;
        rc->OpenArchiveData.OpenMode = RAR_OM_LIST;
        rc->hArcData = pRAROpenArchiveEx (&rc->OpenArchiveData);
        if (rc->OpenArchiveData.OpenResult != 0) {
                xfree (rc);
-               if (!rar_resetf (z)) {
-                       zfile_fclose_archive (zv);
-                       return NULL;
-               }
+//             if (!rar_resetf (z)) {
+//                     zfile_fclose_archive (zv);
+//                     return NULL;
+//             }
                zfile_fclose_archive (zv);
                return archive_directory_arcacc (z, ArchiveFormatRAR);
        }