]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc0990b10b.zip
authorToni Wilen <twilen@winuae.net>
Wed, 14 Jul 2004 17:18:18 +0000 (20:18 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:23:43 +0000 (21:23 +0200)
32 files changed:
ar.c
audio.c
blkdev.c
cfgfile.c
custom.c
debug.c
disk.c
driveclick.c
filesys.c
fsdb.c
hardfile.c
include/driveclick.h
include/filesys.h
include/options.h
inputdevice.c
main.c
memory.c
native2amiga.c
od-win32/blkdev_win32_aspi.c
od-win32/bsdsock.c
od-win32/dinput.c
od-win32/dxwrap.c
od-win32/posixemu.c
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/resources/winuae_minimal.rc
od-win32/win32.c
od-win32/win32.h
od-win32/win32_scale2x.c
od-win32/win32gfx.c
od-win32/win32gui.c
zfile.c

diff --git a/ar.c b/ar.c
index d05503a2822b76893a3c0ec1a2c39cc352b83940..efb638eb93208d287e423ae4a3f363075a430bc0 100755 (executable)
--- a/ar.c
+++ b/ar.c
@@ -368,8 +368,10 @@ STATIC_INLINE int ar3a (uaecptr addr, uae_u8 b, int writing)
        
     if (!writing) /* reading */
     {
-       if (addr == 1) /* This is necessary because we don't update rom location 0 every time we change armode */
-           return armode;
+       if (addr == 1 || addr == 3) /* This is necessary because we don't update rom location 0 every time we change armode */
+           return armode | (regs.irc & ~3);
+       else if (addr < 4)
+           return (addr & 1) ? regs.irc : regs.irc >> 8;
        else
            return armemory_rom[addr];
     }
diff --git a/audio.c b/audio.c
index bbf8b10cc5e98c3c1df6ea6bb169b300ea618038..8c8184a968c6b21f14f26b9d7f2dbd60816b08ed 100755 (executable)
--- a/audio.c
+++ b/audio.c
@@ -115,29 +115,26 @@ STATIC_INLINE void put_sound_word_right (uae_u32 w)
     PUT_SOUND_WORD_RIGHT (w);
 }
 
+static int mixed_stereo_size, mixed_mul1, mixed_mul2;
+
 STATIC_INLINE void put_sound_word_left (uae_u32 w)
 {
     if (currprefs.sound_mixed_stereo) {
        uae_u32 rold, lold, rnew, lnew, tmp;
-       int mul1 = 32 - currprefs.sound_stereo_separation;
-       int mul2 = 32 + currprefs.sound_stereo_separation;
 
        left_word_saved[saved_ptr] = w;
        lnew = w - SOUND16_BASE_VAL;
        rnew = right_word_saved[saved_ptr] - SOUND16_BASE_VAL;
 
-       if (currprefs.sound_mixed_stereo > 0)
-           saved_ptr = (saved_ptr + 1) & ((1 << (currprefs.sound_mixed_stereo - 1)) - 1);
-       else
-           saved_ptr = 0;
+        saved_ptr = (saved_ptr + 1) & mixed_stereo_size;
 
        lold = left_word_saved[saved_ptr] - SOUND16_BASE_VAL;
-       tmp = (rnew * mul1 + lold * mul2) >> 6;
+       tmp = (rnew * mixed_mul1 + lold * mixed_mul2) >> 6;
        tmp += SOUND16_BASE_VAL;
        PUT_SOUND_WORD_RIGHT (tmp);
 
        rold = right_word_saved[saved_ptr] - SOUND16_BASE_VAL;
-       w = (lnew * mul1 + rold * mul2) >> 6;
+       w = (lnew * mixed_mul1 + rold * mixed_mul2) >> 6;
     }
     PUT_SOUND_WORD_LEFT (w);
 }
@@ -788,6 +785,10 @@ void check_prefs_changed_audio (void)
        next_sample_evtime = scaled_sample_evtime;
        compute_vsynctime ();
     }
+    mixed_mul1 = 32 - currprefs.sound_stereo_separation;
+    mixed_mul2 = 32 + currprefs.sound_stereo_separation;
+    mixed_stereo_size = currprefs.sound_mixed_stereo > 0 ? (1 << (currprefs.sound_mixed_stereo - 1)) - 1 : 0;
+
     /* Select the right interpolation method.  */
     if (sample_handler == sample16_handler
        || sample_handler == sample16i_crux_handler
index 0cf3f8b791fa88c216c9080a4499f4511e946a68..07eec9f40a0eb3db83919961f8866925424d3a28 100755 (executable)
--- a/blkdev.c
+++ b/blkdev.c
@@ -27,13 +27,15 @@ extern struct device_functions devicefunc_win32_ioctl;
 
 static void install_driver (int flags)
 {
+    int installed = 0;
     device_func[DF_SCSI] = &devicefunc_win32_aspi;
 #ifdef WINDDK
     if (os_winnt && os_winnt_admin) {
        device_func[DF_IOCTL] = &devicefunc_win32_ioctl;
         device_func[DF_SCSI] = &devicefunc_win32_spti;
+        installed = 1;
     }
-    if (currprefs.win32_aspi) {
+    if (currprefs.win32_aspi || !installed) {
         device_func[DF_SCSI] = &devicefunc_win32_aspi;
        device_func[DF_IOCTL] = 0;
     }
index 2e706735a5f01fe1e37857f13ede913feceae08c..67ed531ea9cbc07e505834e031ee65180d7e0854 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -199,7 +199,9 @@ void save_options (FILE *f, struct uae_prefs *p, int type)
     if (p->info[0])
        cfgfile_write (f, "config_info=%s\n", p->info);
     cfgfile_write (f, "config_version=%d.%d.%d\n", UAEMAJOR, UAEMINOR, UAESUBREV);
-
+    cfgfile_write (f, "config_hardware_path=%s\n", p->config_hardware_path);
+    cfgfile_write (f, "config_host_path=%s\n", p->config_host_path);
+   
     for (sl = p->all_lines; sl; sl = sl->next) {
        if (sl->unknown)
            cfgfile_write (f, "%s=%s\n", sl->option, sl->value);
@@ -257,7 +259,7 @@ void save_options (FILE *f, struct uae_prefs *p, int type)
     cfgfile_write (f, "sound_bits=%d\n", p->sound_bits);
     cfgfile_write (f, "sound_channels=%s\n", stereomode[p->sound_stereo]);
     cfgfile_write (f, "sound_stereo_separation=%d\n", p->sound_stereo_separation);
-    cfgfile_write (f, "sound_stereo_mixing_delay=%d\n", p->sound_mixed_stereo);
+    cfgfile_write (f, "sound_stereo_mixing_delay=%d\n", p->sound_mixed_stereo >= 0 ? p->sound_mixed_stereo : 0);
     
     cfgfile_write (f, "sound_max_buff=%d\n", p->sound_maxbsiz);
     cfgfile_write (f, "sound_frequency=%d\n", p->sound_freq);
@@ -578,7 +580,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value)
        || cfgfile_intval (option, value, "sound_adjust", &p->sound_adjust, 1)
        || cfgfile_intval (option, value, "sound_volume", &p->sound_volume, 1)
        || cfgfile_intval (option, value, "sound_stereo_separation", &p->sound_stereo_separation, 1)
-       || cfgfile_intval (option, value, "sound_stereo_mixing", &p->sound_mixed_stereo, 1)
+       || cfgfile_intval (option, value, "sound_stereo_mixing_delay", &p->sound_mixed_stereo, 1)
 
        || cfgfile_intval (option, value, "gfx_display", &p->gfx_display, 1)
        || cfgfile_intval (option, value, "gfx_framerate", &p->gfx_framerate, 1)
@@ -1237,6 +1239,8 @@ static int cfgfile_load_2 (struct uae_prefs *p, const char *filename, int real,
                cfgfile_parse_separated_line (p, line1b, line2b, askedtype);
            } else {
                cfgfile_string (line1b, line2b, "config_description", p->description, 128);
+               cfgfile_string (line1b, line2b, "config_hardware_path", p->config_hardware_path, 128);
+               cfgfile_string (line1b, line2b, "config_host_path", p->config_host_path, 128);
            }
        }
     }
@@ -1262,7 +1266,7 @@ static int cfgfile_load_2 (struct uae_prefs *p, const char *filename, int real,
     return 1;
 }
 
-int cfgfile_load (struct uae_prefs *p, const char *filename, int *type)
+int cfgfile_load (struct uae_prefs *p, const char *filename, int *type, int ignorelink)
 {
     int v;
     char tmp[MAX_DPATH];
@@ -1278,17 +1282,19 @@ int cfgfile_load (struct uae_prefs *p, const char *filename, int *type)
        write_log ("load failed\n");
        goto end;
     }
-    if (p->config_hardware_path[0]) {
-        fetch_configurationpath (tmp, sizeof (tmp));
-        strncat (tmp, p->config_hardware_path, sizeof (tmp));
-        type2 = CONFIG_TYPE_HARDWARE;
-        cfgfile_load (p, tmp, &type2);
-    }
-    if (p->config_host_path[0]) {
-        fetch_configurationpath (tmp, sizeof (tmp));
-        strncat (tmp, p->config_host_path, sizeof (tmp));
-        type2 = CONFIG_TYPE_HOST;
-        cfgfile_load (p, tmp, &type2);
+    if (!ignorelink) {
+       if (p->config_hardware_path[0]) {
+           fetch_configurationpath (tmp, sizeof (tmp));
+           strncat (tmp, p->config_hardware_path, sizeof (tmp));
+           type2 = CONFIG_TYPE_HARDWARE;
+           cfgfile_load (p, tmp, &type2, 1);
+       }
+       if (p->config_host_path[0]) {
+           fetch_configurationpath (tmp, sizeof (tmp));
+           strncat (tmp, p->config_host_path, sizeof (tmp));
+           type2 = CONFIG_TYPE_HOST;
+           cfgfile_load (p, tmp, &type2, 1);
+       }
     }
 end:
     recursive--;
@@ -1309,14 +1315,20 @@ int cfgfile_save (struct uae_prefs *p, const char *filename, int type)
     return 1;
 }
 
-int cfgfile_get_description (const char *filename, char *description, int *type)
+int cfgfile_get_description (const char *filename, char *description, char *hostlink, char *hardwarelink, int *type)
 {
     int result = 0;
     struct uae_prefs *p = xmalloc (sizeof (struct uae_prefs));
-    strcpy (p->description, "");
+    p->description[0] = 0;
+    p->config_host_path[0] = 0;
+    p->config_hardware_path[0] = 0;
     if (cfgfile_load_2 (p, filename, 0, type)) {
        result = 1;
        strcpy (description, p->description);
+       if (hostlink)
+           strcpy (hostlink, p->config_host_path);
+       if (hardwarelink)
+           strcpy (hardwarelink, p->config_hardware_path);
     }
     free (p);
     return result;
index 9444661a654a0cabe387da215b0bebf48a086bda..d6abcdf762b01a8187394d11806fa1adeb6c2d69 100755 (executable)
--- a/custom.c
+++ b/custom.c
@@ -4811,10 +4811,12 @@ STATIC_INLINE uae_u32 REGPARAM2 custom_wget_1 (uaecptr addr, int noput)
     uae_u32 v;
     sync_copper_with_cpu (current_hpos (), 1, addr);
     if (currprefs.cpu_level >= 2) {
-       if(addr > 0xde0000 && addr <= 0xdeffff)
+       if(addr >= 0xde0000 && addr <= 0xdeffff) {
            return 0x7f7f;
-       if(addr > 0xdd0000 && addr <= 0xddffff)
-            return 0xffff;
+       }
+       if(addr >= 0xdd0000 && addr <= 0xddffff) {
+           return 0xffff;
+       }
     }
     v = custom_wget_1 (addr, 0);
 #ifdef ACTION_REPLAY
diff --git a/debug.c b/debug.c
index b67a8210224fe46e9377b54300bf21b752ea30b7..06805a530dbbb5d28719194d0f707515a33d2980 100755 (executable)
--- a/debug.c
+++ b/debug.c
@@ -33,7 +33,8 @@
 #include "akiko.h"
 
 static int debugger_active;
-static uaecptr skipaddr_start, skipaddr_end, skipaddr_doskip;
+static uaecptr skipaddr_start, skipaddr_end;
+static int skipaddr_doskip;
 static uae_u32 skipins;
 static int do_skip;
 static int debug_rewind;
@@ -1028,7 +1029,7 @@ static int instruction_breakpoint (char **c)
        memcpy (&trace_prev_regs, &regs, sizeof regs);
     }
     do_skip = 1;
-    skipaddr_doskip = 1;
+    skipaddr_doskip = -1;
     return 1;
 }
 
@@ -1443,9 +1444,11 @@ void debug (void)
                            bp = 1;
                    } else if (opcode == skipins)
                        bp = 1;
-               } else if (skipaddr_start == 0xffffffff && skipaddr_doskip) {
+               } else if (skipaddr_start == 0xffffffff && skipaddr_doskip < 0) {
                    if ((pc < 0xe00000 || pc >= 0x1000000) && opcode != 0x4ef9)
                        bp = 1;
+               } else if (skipaddr_start == 0xffffffff && skipaddr_doskip > 0) {
+                       bp = 1;
                } else if (skipaddr_end != 0xffffffff) {
                    if (pc >= skipaddr_start && pc < skipaddr_end)
                        bp = 1;
diff --git a/disk.c b/disk.c
index 3d48fba2bb3f14c38a74217351f0827188083b74..52ffb29bf445e765e8a196a62fd6974745eea132 100755 (executable)
--- a/disk.c
+++ b/disk.c
@@ -1534,7 +1534,10 @@ void disk_creatediskfile (char *name, int type, drive_type adftype)
     uae_u8 tmp[3*4];
     char *disk_name = "empty";
 
-    if (type == 1) tracks = 2 * 83; else tracks = 2 * 80;
+    if (type == 1)
+       tracks = 2 * 83;
+    else
+       tracks = 2 * 80;
     file_size = 880 * 1024;
     track_len = FLOPPY_WRITE_LEN * 2;
     if (adftype == 1) {
@@ -1549,9 +1552,7 @@ void disk_creatediskfile (char *name, int type, drive_type adftype)
     chunk = xmalloc (16384);
     if (f && chunk) {
        memset(chunk,0,16384);
-       switch(type)
-           {
-           case 0:
+       if (type == 0 && adftype < 2) {
            for (i = 0; i < file_size; i += 11264) {
                memset(chunk, 0, 11264);
                if (i == 0) {
@@ -1572,15 +1573,17 @@ void disk_creatediskfile (char *name, int type, drive_type adftype)
                    memcpy (chunk + 484, chunk + 420, 3 * 4);
                    disk_checksum(chunk, chunk + 20);
                    /* bitmap block */
-                   memset (chunk + 512 + 4, 0xff, 220);
-                   chunk[512 + 112 + 2] = 0x3f;
+                   memset (chunk + 512 + 4, 0xff, 2 * file_size / (1024 * 8));
+                   if (adftype == 0)
+                       chunk[512 + 0x72] = 0x3f;
+                   else
+                       chunk[512 + 0xdc] = 0x3f;
                    disk_checksum(chunk + 512, chunk + 512);
 
                }
                zfile_fwrite (chunk, 11264, 1, f);
            }
-           break;
-           case 1:
+       } else {
            l = track_len;
            zfile_fwrite ("UAE-1ADF", 8, 1, f);
            tmp[0] = 0; tmp[1] = 0; /* flags (reserved) */
@@ -1592,7 +1595,6 @@ void disk_creatediskfile (char *name, int type, drive_type adftype)
            tmp[8] = 0; tmp[9] = 0; tmp[10] = 0; tmp[11] = 0;
            for (i = 0; i < tracks; i++) zfile_fwrite (tmp, sizeof (tmp), 1, f);
            for (i = 0; i < tracks; i++) zfile_fwrite (chunk, l, 1, f);
-           break;
        }
     }
     free (chunk);
index f2f36ce279977f22a50079d01fdf4031519e47b6..2f4d2d392aaa17036be9aafd34a9b1971d98c59d 100755 (executable)
@@ -20,6 +20,8 @@
 
 #include "driveclick.h"
 
+#define CLICK_TRACKS 84
+
 static struct drvsample drvs[4][DS_END];
 static int freq = 44100;
 
@@ -123,6 +125,10 @@ void driveclick_init(void)
                drvs[i][j].len <<= DS_SHIFT;
            drvs[i][DS_CLICK].pos = drvs[i][DS_CLICK].len;
            drvs[i][DS_SNATCH].pos = drvs[i][DS_SNATCH].len;
+           if (drvs[i][DS_CLICK].len > (100000 << DS_SHIFT)) {
+               drvs[i][DS_CLICK].multisize = drvs[i][DS_CLICK].len / CLICK_TRACKS;
+               drvs[i][DS_CLICK].multilen = (drvs[i][DS_CLICK].multisize * 9) / 10;
+           }
            vv += currprefs.dfxclick[i];
        }
     }
@@ -250,16 +256,21 @@ void driveclick_mix (uae_s16 *sndbuffer, int size)
     }
 }
 
-void driveclick_click (int drive, int startOffset)
+void driveclick_click (int drive, int cyl)
 {
     if (!click_initialized)
        return;
     if (!currprefs.dfxclick[drive])
        return;
     mix();
-    drvs[drive][DS_CLICK].pos = (startOffset * 4) << DS_SHIFT;
-    if (drvs[drive][DS_CLICK].pos > drvs[drive][DS_CLICK].len / 2)
-       drvs[drive][DS_CLICK].pos = drvs[drive][DS_CLICK].len / 2;
+    if (drvs[drive][DS_CLICK].multisize) {
+       drvs[drive][DS_CLICK].pos = drvs[drive][DS_CLICK].multisize * cyl;
+       drvs[drive][DS_CLICK].len = drvs[drive][DS_CLICK].pos + drvs[drive][DS_CLICK].multilen;
+    } else {
+       drvs[drive][DS_CLICK].pos = (cyl * 4) << DS_SHIFT;
+       if (drvs[drive][DS_CLICK].pos > drvs[drive][DS_CLICK].len / 2)
+           drvs[drive][DS_CLICK].pos = drvs[drive][DS_CLICK].len / 2;
+    }
 }
 
 void driveclick_motor (int drive, int running)
index fb93a7cd6b122f35bddddab96583200b7c314020..99dbfd0873af0c16b7fb10f045151a8463b028a6 100755 (executable)
--- a/filesys.c
+++ b/filesys.c
@@ -3739,7 +3739,7 @@ static int rl (uae_u8 *p)
     return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]);
 }
 
-static int rdb_checksum (char *id, uae_u8 *p, int block)
+int rdb_checksum (char *id, uae_u8 *p, int block)
 {
     uae_u32 sum = 0;
     int i, blocksize;
@@ -3856,6 +3856,9 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
        write_log ("RDB: driveinit is not yet supported. Contact the author.\n");
        return -2;
     }
+    hfd->cylinders = rl (bufrdb + 64);
+    hfd->sectors = rl (bufrdb + 68);
+    hfd->heads = rl (bufrdb + 72);
     fileblock = rl (bufrdb + 32);
     partblock = rl (bufrdb + 28);
     buf = xmalloc (readblocksize);
diff --git a/fsdb.c b/fsdb.c
index 7cfa24f5c028aa7467f187251f6c797eda47b1a5..d082ee1c064241992cfd7769a342d43da4483984 100755 (executable)
--- a/fsdb.c
+++ b/fsdb.c
@@ -20,7 +20,6 @@
 #include "filesys.h"
 #include "autoconf.h"
 #include "fsusage.h"
-#include "native2amiga.h"
 #include "scsidev.h"
 #include "fsdb.h"
 
index 5acb6382b3447529aa4b602f80cecb49dc2b956e..4a2cedfc2e4e472ff1339ef44acfb2fb4a94d785 100755 (executable)
@@ -456,6 +456,37 @@ static uae_u32 hardfile_expunge (void)
     return 0; /* Simply ignore this one... */
 }
 
+static void getchs (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, int *tracksec)
+{
+    unsigned int total = (unsigned int)(hfd->size / 1024);
+    int heads;
+    int sectors = 63;
+
+    /* do we have RDB values? */
+    if (hfd->cylinders) {
+       *cyl = hfd->cylinders;
+       *tracksec = hfd->sectors;
+       *head = hfd->heads;
+        *cylsec = hfd->sectors * hfd->heads;
+        return;
+    }
+    /* no, lets guess something.. */
+    if (total <= 504 * 1024)
+       heads = 16;
+    else if (total <= 1008 * 1024)
+       heads = 32;
+    else if (total <= 2016 * 1024)
+       heads = 64;
+    else if (total <= 4032 * 1024)
+       heads = 128;
+    else
+       heads = 255;
+    *cyl = (unsigned int)(hfd->size / hfd->blocksize) / (sectors * heads);
+    *cylsec = sectors * heads;
+    *tracksec = sectors;
+    *head = heads;
+}
+
 static void outofbounds (int cmd, uae_u64 offset, uae_u64 len, uae_u64 max)
 {
     write_log ("cmd %d: out of bounds, %08.8X-%08.8X + %08.8X-%08.8X >= %08.8X-%08.8X\n", cmd,
@@ -583,9 +614,28 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
            break;
 
        case CMD_GETNUMTRACKS:
-           hf_log ("CMD_GETNUMTRACKS - shouldn't happen\n");
-           actual = 0;
+       {
+           int cyl, cylsec, head, tracksec;
+           getchs (hfd, &cyl, &cylsec, &head, &tracksec);
+           actual = cyl * head;
            break;
+       }
+
+       case CMD_GETGEOMETRY:
+       {
+           int cyl, cylsec, head, tracksec;
+           getchs (hfd, &cyl, &cylsec, &head, &tracksec);
+           put_long (dataptr + 0, hfd->blocksize);
+           put_long (dataptr + 4, (uae_u32)(hfd->size / hfd->blocksize));
+           put_long (dataptr + 8, cyl);
+           put_long (dataptr + 12, cylsec);
+           put_long (dataptr + 16, head);
+           put_long (dataptr + 20, tracksec);
+           put_long (dataptr + 24, 0); /* bufmemtype */
+           put_byte (dataptr + 28, 0); /* type = DG_DIRECT_ACCESS */
+           put_long (dataptr + 29, 0); /* flags */
+       }
+       break;
 
        case CMD_PROTSTATUS:
            if (hfd->readonly)
@@ -672,6 +722,7 @@ static int hardfile_can_quick (uae_u32 command)
        case CMD_MOTOR:
        case CMD_GETDRIVETYPE:
        case CMD_GETNUMTRACKS:
+       case CMD_GETGEOMETRY:
        case NSCMD_DEVICEQUERY:
        return 1;
     }
@@ -786,6 +837,7 @@ void hardfile_install (void)
     dw (CMD_CHANGESTATE);
     dw (CMD_PROTSTATUS);
     dw (CMD_GETDRIVETYPE);
+    dw (CMD_GETGEOMETRY);
     dw (CMD_ADDCHANGEINT);
     dw (CMD_REMCHANGEINT);
     dw (HD_SCSICMD);
index 2cd70aef3bf75ba3c2eceb464d93963386e585d3..757a9bdc1f75516906b9f176b10f33726b03cc4c 100755 (executable)
@@ -8,9 +8,10 @@
 
 
 struct drvsample {
-    int len;
-    int pos;
+    unsigned int len;
+    unsigned pos;
     uae_s16 *p;
+    unsigned int multisize, multilen;
 };
 
 #define DS_CLICK 0
index cee3455a68a05b8c0de3767765d81e287be5113b..7aee9c573a24fec24c956d5d6d876fbfbb1c6fb2 100755 (executable)
@@ -24,6 +24,10 @@ struct hardfiledata {
     char product_id[16 + 1];
     char product_rev[4 + 1];
     char device_name[256];
+    /* geometry from possible RDSK block */
+    unsigned int cylinders;
+    unsigned int sectors;
+    unsigned int heads;
     uae_u64 size2;
     uae_u64 offset2;
 };
@@ -33,7 +37,7 @@ struct hardfiledata {
 #define FILESYS_HARDFILE_RDB 2
 #define FILESYS_HARDDRIVE 3
 
-#define MAX_FILESYSTEM_UNITS 20
+#define MAX_FILESYSTEM_UNITS 30
 
 struct uaedev_mount_info;
 
index 737627f0c9894d6746e2a57f915994e6a581ab34..5094bb50922f39b0519a36e28d267c6e59bdfb91 100755 (executable)
@@ -254,11 +254,11 @@ extern void target_save_options (FILE *, struct uae_prefs *);
 extern void target_default_options (struct uae_prefs *, int type);
 extern int target_cfgfile_load (struct uae_prefs *, char *filename, int type);
 
-extern int cfgfile_load (struct uae_prefs *, const char *filename, int *);
+extern int cfgfile_load (struct uae_prefs *p, const char *filename, int *type, int ignorelink);
 extern int cfgfile_save (struct uae_prefs *, const char *filename, int);
 extern void cfgfile_parse_line (struct uae_prefs *p, char *, int);
 extern int cfgfile_parse_option (struct uae_prefs *p, char *option, char *value, int);
-extern int cfgfile_get_description (const char *filename, char *description, int*);
+extern int cfgfile_get_description (const char *filename, char *description, char *hostlink, char *hardwarelink, int *type);
 extern void cfgfile_show_usage (void);
 extern uae_u32 cfgfile_uaelib(int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen);
 extern void cfgfile_addcfgparam (char *);
index a6dbd246b1148c06cfea67db184a3375f6d750ec..8f8318784ac68e351115136b8bd9ddcf531f2941 100755 (executable)
@@ -1849,8 +1849,10 @@ int inputdevice_get_device_index (int devnum)
        return devnum;
     else if (devnum < idev[IDTYPE_JOYSTICK].get_num() + idev[IDTYPE_MOUSE].get_num())
        return devnum - idev[IDTYPE_JOYSTICK].get_num();
-    else
+    else if (devnum < idev[IDTYPE_JOYSTICK].get_num() + idev[IDTYPE_MOUSE].get_num() + idev[IDTYPE_KEYBOARD].get_num())
        return devnum - idev[IDTYPE_JOYSTICK].get_num() - idev[IDTYPE_MOUSE].get_num();
+    else
+       return -1;
 }
 
 static int gettype (int devnum)
diff --git a/main.c b/main.c
index cd7d04c4cb6daee28923b581fd4579d24ddd2f88..32b4903a9a44e5c044d514e2c924f5318c69c72e 100755 (executable)
--- a/main.c
+++ b/main.c
@@ -510,7 +510,8 @@ void do_start_program (void)
        return;
     /* Do a reset on startup. Whether this is elegant is debatable. */
     inputdevice_updateconfig (&currprefs);
-    quit_program = 2;
+    if (quit_program >= 0)
+       quit_program = 2;
     m68k_go (1);
 }
 
index e5926f2a78aa8cfec017066f4540594d0aa24a69..1b37e5bbb898d44b1ded410a5eae92ed061b7b5a 100755 (executable)
--- a/memory.c
+++ b/memory.c
@@ -108,12 +108,12 @@ static struct romdata roms[] = {
 
     { "Kickstart v3.0 (A1200)", 39, 106, 0x6c9b07d2, 524288, 11, 0, 0, ROMTYPE_KICK },
     { "Kickstart v3.0 (A4000)", 39, 106, 0x9e6ac152, 524288, 12, 2, 0, ROMTYPE_KICK },
-//    { "Kickstart v3.1 (A4000)", 40, 70, 0x2b4566f1, 524288, 13, 2, 0, ROMTYPE_KICK },
+    { "Kickstart v3.1 (A4000)", 40, 70, 0x2b4566f1, 524288, 13, 2, 0, ROMTYPE_KICK },
     { "Kickstart v3.1 (A500,A600,A2000)", 40, 63, 0xfc24ae0d, 524288, 14, 0, 0, ROMTYPE_KICK },
     { "Kickstart v3.1 (A1200)", 40, 68, 0x1483a091, 524288, 15, 1, 0, ROMTYPE_KICK },
     { "Kickstart v3.1 (A4000)(Cloanto)", 40, 68, 0x43b6dd22, 524288, 31, 2, 1, ROMTYPE_KICK },
     { "Kickstart v3.1 (A4000)", 40, 68, 0xd6bae334, 524288, 16, 2, 0, ROMTYPE_KICK },
-//    { "Kickstart v3.1 (A4000T)", 40, 70, 0x75932c3a, 524288, 17, 1, 0, ROMTYPE_KICK },
+    { "Kickstart v3.1 (A4000T)", 40, 70, 0x75932c3a, 524288, 17, 2, 0, ROMTYPE_KICK },
 
     { "CD32 Kickstart v3.1", 40, 60, 0x1e62d4a5, 524288, 18, 1, 0, ROMTYPE_KICKCD32 },
     { "CD32 Extended", 40, 60, 0x87746be2, 524288, 19, 1, 0, ROMTYPE_EXTCD32 },
@@ -1316,10 +1316,66 @@ static void kickstart_fix_checksum (uae_u8 *mem, int size)
     mem[ch++] = cksum >> 0;
 }
 
+static int patch_shapeshifter (uae_u8 *kickmemory)
+{
+    /* Patch Kickstart ROM for ShapeShifter - from Christian Bauer.
+     * Changes 'lea $400,a0' and 'lea $1000,a0' to 'lea $3000,a0' for
+     * ShapeShifter compatability.
+    */
+    int i, patched = 0;
+    uae_u8 kickshift1[] = { 0x41, 0xf8, 0x04, 0x00 };
+    uae_u8 kickshift2[] = { 0x41, 0xf8, 0x10, 0x00 };
+    uae_u8 kickshift3[] = { 0x43, 0xf8, 0x04, 0x00 };
+       
+    for (i = 0x200; i < 0x300; i++) {
+        if (!memcmp (kickmemory + i, kickshift1, sizeof (kickshift1)) ||
+        !memcmp (kickmemory + i, kickshift2, sizeof (kickshift2)) ||
+        !memcmp (kickmemory + i, kickshift3, sizeof (kickshift3))) {
+           kickmemory[i + 2] = 0x30;
+           write_log ("Kickstart KickShifted @%04.4X\n", i);
+           patched++;
+       }
+    }
+    return patched;
+}
+
+/* disable incompatible drivers */
+static int patch_residents (uae_u8 *kickmemory)
+{
+    int i, j, patched = 0;
+    char *residents[] = { "NCR scsi.device", 0 };
+    // "scsi.device", "carddisk.device", "card.resource" };
+    uaecptr base = 0xf80000;
+
+    for (i = 0; i < kickmem_size - 100; i++) {
+       if (kickmemory[i] == 0x4a && kickmemory[i + 1] == 0xfc) {
+           uaecptr addr;
+           addr = (kickmemory[i + 2] << 24) | (kickmemory[i + 3] << 16) | (kickmemory[i + 4] << 8) | (kickmemory[i + 5] << 0);
+           if (addr != i + base)
+               continue;
+           addr = (kickmemory[i + 14] << 24) | (kickmemory[i + 15] << 16) | (kickmemory[i + 16] << 8) | (kickmemory[i + 17] << 0);
+           if (addr >= base && addr < base + 524288) {
+               j = 0;
+               while (residents[j]) {
+                   if (!memcmp (residents[j], kickmemory + addr - base, strlen (residents[j]) + 1)) {
+                       write_log ("KSPatcher: '%s' at %08.8X disabled\n", residents[j], i + base);
+                       kickmemory[i] = 0x4b; /* destroy RTC_MATCHWORD */
+                       patched++;
+                       break;
+                   }
+                   j++;
+               }
+           }   
+       }
+    }
+    return patched;
+}
+
 static int load_kickstart (void)
 {
     struct zfile *f = zfile_fopen (currprefs.romfile, "rb");
     char tmprom[MAX_DPATH];
+    int patched = 0;
 
     strcpy (tmprom, currprefs.romfile);
     if (f == NULL) {
@@ -1361,26 +1417,6 @@ static int load_kickstart (void)
     chk_sum:
 #endif
 
-    if (currprefs.kickshifter && kickmem_size >= 524288) {
-       /* Patch Kickstart ROM for ShapeShifter - from Christian Bauer.
-        * Changes 'lea $400,a0' and 'lea $1000,a0' to 'lea $3000,a0' for
-        * ShapeShifter compatability.
-       */
-       int i;
-       uae_u8 kickshift1[] = { 0x41, 0xf8, 0x04, 0x00 };
-       uae_u8 kickshift2[] = { 0x41, 0xf8, 0x10, 0x00 };
-       uae_u8 kickshift3[] = { 0x43, 0xf8, 0x04, 0x00 };
-       
-       for (i = 0x200; i < 0x300; i++) {
-           if (!memcmp (kickmemory + i, kickshift1, sizeof (kickshift1)) ||
-           !memcmp (kickmemory + i, kickshift2, sizeof (kickshift2)) ||
-           !memcmp (kickmemory + i, kickshift3, sizeof (kickshift3))) {
-               kickmemory[i + 2] = 0x30;
-               write_log ("Kickstart KickShifted @%04.4X\n", i);
-           }
-       }
-       kickstart_fix_checksum (kickmemory, kickmem_size);
-    }
     kickstart_version = (kickmemory[12] << 8) | kickmemory[13];
     return 1;
 err:
@@ -1664,6 +1700,9 @@ void memory_reset (void)
        memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile);
         if (savestate_state != STATE_RESTORE)
            clearexec ();
+       xfree (extendedkickmemory);
+       extendedkickmemory = 0;
+        extendedkickmem_size = 0;
         load_extendedkickstart ();
        kickmem_mask = 524288 - 1;
        if (!load_kickstart ()) {
@@ -1676,10 +1715,10 @@ void memory_reset (void)
        } else {
            struct romdata *rd = getromdatabydata (kickmemory, kickmem_size);
            if (rd) {
-               if (rd->cpu == 1 && currprefs.cpu_level < 2) {
+               if (rd->cpu == 1 && changed_prefs.cpu_level < 2) {
                    notify_user (NUMSG_KS68EC020);
                    uae_restart (-1, NULL);
-               } else if (rd->cpu == 2 && (currprefs.cpu_level < 2 || currprefs.address_space_24)) {
+               } else if (rd->cpu == 2 && (changed_prefs.cpu_level < 2 || changed_prefs.address_space_24)) {
                    notify_user (NUMSG_KS68020);
                    uae_restart (-1, NULL);
                }
@@ -1687,6 +1726,14 @@ void memory_reset (void)
                    cloanto_rom = 1;
            }
        }
+       if (kickmem_size >= 524288) {
+           int patched = 0;
+           if (currprefs.kickshifter)
+               patched += patch_shapeshifter (kickmemory);
+           patched += patch_residents (kickmemory);
+           if (patched)
+               kickstart_fix_checksum (kickmemory, kickmem_size);
+       }
     }
 
     if (cloanto_rom)
index bb8ae200f37098e2940503052b51b0a78af50a76..48a57875eb3c43c3d86cf3f49c259e5112fe9953 100755 (executable)
@@ -66,8 +66,6 @@ void uae_ReplyMsg(uaecptr msg)
 
 void uae_PutMsg(uaecptr port, uaecptr msg)
 {
-    uae_pt data;
-    data.i = 1;
     uae_sem_wait (&n2asem);
     write_comm_pipe_int (&native2amiga_pending, 1, 0);
     write_comm_pipe_u32 (&native2amiga_pending, port, 0);
index 873e5cb006c6c22c7c734dd4623d689a34451882..34d914b4880eb83c1cd5460112351e79e11dbf5f 100755 (executable)
@@ -45,7 +45,7 @@ struct scsi_info {
 static struct scsi_info si[MAX_TOTAL_DEVICES];
 static int unitcnt;
 
-static int ha_inquiry(SCSI *scgp, int id, SRB_HAInquiry *ip)
+static int ha_inquiry (SCSI *scgp, int id, SRB_HAInquiry *ip)
 {
     DWORD Status;
        
@@ -540,6 +540,7 @@ static int scsierr(SCSI *scgp)
 static void scan_scsi_bus (SCSI *scgp, int flags)
 {
     /* add all units we find */
+    write_log ("ASPI: SCSI scan starting..\n");
     scanphase = 1;
     for (scgp->addr.scsibus=0; scgp->addr.scsibus < 8; scgp->addr.scsibus++) {
         if (!scsi_havebus(scgp, scgp->addr.scsibus))
@@ -589,6 +590,7 @@ static void scan_scsi_bus (SCSI *scgp, int flags)
             }
         }
     }
+    write_log ("ASPI: SCSI scan ended\n");
     scanphase = 0;
 }
 
index e74e9c4eedaed6d33f51a418aa983017bfd51804..ace428c817ca951f2c8354b6f2e337339a00d782 100755 (executable)
@@ -102,6 +102,12 @@ typedef struct ip_option_information {
     u_char FAR *OptionsData;   /* Options data buffer */
 } IPINFO, *PIPINFO, FAR *LPIPINFO;
 
+static void bsdsetpriority (HANDLE thread)
+{
+    int pri = os_winnt ? THREAD_PRIORITY_NORMAL : priorities[currprefs.win32_active_priority].value;
+    SetThreadPriority(thread, pri);
+}
+
 static int mySockStartup( void )
 {
     int result = 0;
@@ -179,7 +185,7 @@ int init_socket_layer(void)
                wc.cbClsExtra = 0;
                wc.cbWndExtra = 0;
                wc.hInstance = 0;
-               wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE( IDI_APPICON ) );
+               wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON));
                wc.hCursor = LoadCursor (NULL, IDC_ARROW);
                wc.hbrBackground = GetStockObject (BLACK_BRUSH);
                wc.lpszMenuName = 0;
@@ -895,13 +901,15 @@ static unsigned int __stdcall sock_thread(void *blah)
 
        if( hSockWnd )
        {
-    // Make sure we're outrunning the wolves
-               int pri;
+           // Make sure we're outrunning the wolves
+           int pri = THREAD_PRIORITY_ABOVE_NORMAL;
+           if (!os_winnt) {
                pri = priorities[currprefs.win32_active_priority].value;
                if (pri == THREAD_PRIORITY_HIGHEST)
-                       pri = THREAD_PRIORITY_TIME_CRITICAL;
+                   pri = THREAD_PRIORITY_TIME_CRITICAL;
                else
-                       pri++;
+                   pri++;
+           }
            SetThreadPriority( GetCurrentThread(), pri );
            
            while( TRUE )
@@ -2243,11 +2251,7 @@ void host_gethostbynameaddr(SB, uae_u32 name, uae_u32 namelen, long addrtype)
        if (i >= MAX_GET_THREADS) write_log("BSDSOCK: ERROR - Too many gethostbyname()s\n");
        else
        {
-               int pri;
-               pri = priorities[currprefs.win32_active_priority].value;
-       
-           SetThreadPriority(hGetThreads[i],pri);
-
+               bsdsetpriority (hGetThreads[i]);
                threadGetargs[i] = (uae_u32 *)&args[0];
 
                SetEvent(hGetEvents[i]);
@@ -2367,11 +2371,7 @@ void host_getprotobyname(SB, uae_u32 name)
        if (i >= MAX_GET_THREADS) write_log("BSDSOCK: ERROR - Too many getprotobyname()s\n");
        else
        {
-               int pri;
-               pri = priorities[currprefs.win32_active_priority].value;
-
-           SetThreadPriority(hGetThreads[i],pri);
-
+               bsdsetpriority (hGetThreads[i]);
 
                threadGetargs[i] = (uae_u32 *)&args[0];
 
@@ -2492,11 +2492,7 @@ void host_getservbynameport(SB, uae_u32 nameport, uae_u32 proto, uae_u32 type)
        if (i >= MAX_GET_THREADS) write_log("BSDSOCK: ERROR - Too many getprotobyname()s\n");
        else
        {
-               int pri;
-               pri = priorities[currprefs.win32_active_priority].value;
-
-           SetThreadPriority(hGetThreads[i],pri);
-
+               bsdsetpriority (hGetThreads[i]);
 
                threadGetargs[i] = (uae_u32 *)&args[0];
 
index 55d1ad7f1b4468ca1e37b10fe1c3ec49050110d3..5b1639d76fae5d1b70567596117793fbcf086b6d 100755 (executable)
@@ -679,14 +679,16 @@ static int di_do_init (void)
     HRESULT hr; 
 
     num_mouse = num_joystick = num_keyboard = 0;
+    memset (&di_mouse, 0, sizeof (di_mouse));
+    memset (&di_joystick, 0, sizeof (di_joystick));
+    memset (&di_keyboard, 0, sizeof (di_keyboard));
+
     hr = DirectInput8Create (hInst, DIRECTINPUT_VERSION, &IID_IDirectInput8A, (LPVOID *)&g_lpdi, NULL); 
     if (FAILED(hr)) {
+       gui_message ("Failed to initialize DirectInput!");
        write_log ("DirectInput8Create failed, %s\n", DXError (hr));
        return 0;
     }
-    memset (&di_mouse, 0, sizeof (di_mouse));
-    memset (&di_joystick, 0, sizeof (di_joystick));
-    memset (&di_keyboard, 0, sizeof (di_keyboard));
 
     IDirectInput8_EnumDevices (g_lpdi, DI8DEVCLASS_ALL, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
     initialize_rawinput ();
@@ -722,7 +724,8 @@ static void di_free (void)
     dd_inited--;
     if (dd_inited > 0)
        return;
-    IDirectInput8_Release (g_lpdi);
+    if (g_lpdi)
+       IDirectInput8_Release (g_lpdi);
     g_lpdi = 0;
     di_dev_free (di_mouse);
     di_dev_free (di_joystick);
index 4e79809a19b990723a2f8cfb0c1beb610b9be508..ba1f8e7737afbe02a9b3f7fcaac3a79085fb60d6 100755 (executable)
@@ -1834,10 +1834,12 @@ int DirectDraw_Flip( int wait )
     } else {
        return 1;
     }
-    if( ddrval == DD_OK )
+    if( ddrval == DD_OK ) {
         result = 1;
-    else
-       write_log("FLIP: DirectDrawSurface_Flip() failed with %s\n", DXError (ddrval));
+    } else {
+       if (ddrval != 0x887601cc)
+           write_log("FLIP: DirectDrawSurface_Flip() failed with %s\n", DXError (ddrval));
+    }
     return result;
 }
 
index a7f907e9ae56c26fff8349d53286ef2a8e830430..daad8ff0ba180ef98c0ef1b464cedbaeba13dea3 100755 (executable)
@@ -512,8 +512,8 @@ int start_penguin (void *(*f)(void *), void *arg, DWORD * foo)
     int result = 1;
 
     hThread = (HANDLE)_beginthreadex( NULL, 0, (BEGINTHREADEX_FUNCPTR)f, arg, 0, foo );
-    if( hThread )
-        SetThreadPriority (hThread, THREAD_PRIORITY_HIGHEST);
+    if (hThread)
+        SetThreadPriority (hThread, THREAD_PRIORITY_ABOVE_NORMAL);
     else
         result = 0;
     return result;
index 050cc4308f78a157734f491d9b049422dc4f95e4..e11ca162a582d7c2f9450e3b4ae05e1e8c8ab05e 100755 (executable)
 #define IDS_ROM_UNAVAILABLE             321
 #define IDS_HARDDRIVESAFETYWARNING      322
 #define IDS_NUMSG_KS68EC020             323
+#define IDS_ROMSCANNOROMS               324
 #define IDS_QS_MODELS                   1000
 #define IDS_QS_MODEL_A500               1001
 #define IDS_QS_MODEL_A500P              1002
 #define IDC_DF1QQ                       1680
 #define IDC_CONFIGAUTO                  1682
 #define IDC_DF0TEXTQ                    1683
+#define IDC_CONFIGAUTO2                 1683
+#define IDC_CONFIGNOLINK                1683
 #define IDC_DF0WPQ                      1684
 #define IDC_EJECT0Q                     1685
 #define IDC_DF1WPQ                      1686
 #define IDC_FILTERSLV                   1692
 #define IDC_FILTERVOV                   1693
 #define IDC_FILTERHOV                   1694
+#define IDC_CONFIGLINK                  1694
 #define IDC_FILTERVZV                   1695
 #define IDC_FILTERHZV                   1696
 #define ID__FLOPPYDRIVES                40004
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        242
 #define _APS_NEXT_COMMAND_VALUE         40021
-#define _APS_NEXT_CONTROL_VALUE         1694
+#define _APS_NEXT_CONTROL_VALUE         1695
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif
index 55f4ebe16fe1292c9015e490a5ba82a4748aea9d..d12e6bf822b55392693847bf924d7e5a4e7fcde5 100755 (executable)
@@ -370,26 +370,30 @@ 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,159,WS_EX_CLIENTEDGE
-    RTEXT           "Description:",IDC_STATIC,5,166,40,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITDESCRIPTION,50,166,155,15,ES_AUTOHSCROLL,0,
+                    WS_TABSTOP,6,3,289,153,WS_EX_CLIENTEDGE
+    RTEXT           "Description:",IDC_STATIC,4,183,37,15,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDITDESCRIPTION,44,183,150,13,ES_AUTOHSCROLL,0,
                     HIDC_EDITDESCRIPTION
-    RTEXT           "Path:",IDC_STATIC,5,187,39,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITPATH,50,187,155,15,ES_AUTOHSCROLL | WS_DISABLED,
+    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED,
                     0,HIDC_EDITPATH
-    RTEXT           "Name:",IDC_STATIC,5,205,40,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITNAME,50,205,155,15,ES_AUTOHSCROLL,0,
+    RTEXT           "Name:",IDC_STATIC,0,161,40,15,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDITNAME,44,162,150,13,ES_AUTOHSCROLL,0,
                     HIDC_EDITNAME
-    GROUPBOX        "Extra Info",IDC_STATIC,210,182,85,38
-    PUSHBUTTON      "View",IDC_VIEWINFO,215,198,35,15
-    PUSHBUTTON      "Set",IDC_SETINFO,255,197,35,15
+    PUSHBUTTON      "View",IDC_VIEWINFO,210,195,35,15
+    PUSHBUTTON      "Set",IDC_SETINFO,250,195,35,15
     PUSHBUTTON      "Load",IDC_QUICKLOAD,5,225,40,15
     PUSHBUTTON      "Save",IDC_QUICKSAVE,50,225,40,15
     PUSHBUTTON      "Load From...",IDC_LOAD,125,225,45,15
     PUSHBUTTON      "Save As...",IDC_SAVE,175,225,40,15
     PUSHBUTTON      "Delete",IDC_DELETE,255,225,40,15
     CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,212,169,76,10
+                    WS_TABSTOP,253,163,42,10
+    COMBOBOX        IDC_CONFIGLINK,44,205,97,150,CBS_DROPDOWN | 
+                    CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+    RTEXT           "Link:",IDC_STATIC,0,204,40,15,SS_CENTERIMAGE
+    GROUPBOX        "Extra info",IDC_STATIC,199,179,96,38,BS_LEFT
+    CONTROL         "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,146,206,48,10
 END
 
 IDD_PORTS DIALOGEX 0, 0, 300, 202
@@ -1376,6 +1380,7 @@ BEGIN
     IDS_HARDDRIVESAFETYWARNING 
                             "WARNING: Non-empty or Amiga formatted\nharddrive detected and safety test was disabled\n\nHarddrives marked with 'HD_*_' are not empty"
     IDS_NUMSG_KS68EC020     "Your Kickstart requires a 68EC020 or later CPU."
+    IDS_ROMSCANNOROMS       "No supported Kickstart ROMs detected."
 END
 
 STRINGTABLE 
index f641a3d01c7ee40c1a156f70930118d567965554..e03c895a3c9019967ea64ac3cb7e4af22257b9c3 100755 (executable)
@@ -31,32 +31,34 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 // Dialog
 //
 
-IDD_KICKSTART DIALOGEX 0, 0, 300, 175
+IDD_KICKSTART DIALOGEX 0, 0, 300, 138
 STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 EXSTYLE WS_EX_CONTEXTHELP
 FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
-    GROUPBOX        "Boot-ROM Settings:",-1,5,12,290,90
-    RTEXT           "ROM File:",IDC_ROMTEXT,10,27,75,10
-    EDITTEXT        IDC_ROMFILE,90,22,185,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_KICKCHOOSER,280,22,10,15
-    RTEXT           "Key File:",IDC_KEYTEXT,10,48,75,10
-    EDITTEXT        IDC_KEYFILE,90,43,185,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_KEYCHOOSER,280,43,10,15
-    RTEXT           "Extended ROM File:",IDC_ROMFILE2TEXT,10,68,75,10
-    EDITTEXT        IDC_ROMFILE2,90,63,185,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_ROMCHOOSER2,280,63,10,15
-    CONTROL         "MAPROM emulation",IDC_MAPROM,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,104,86,80,10
-    CONTROL         "ShapeShifter support",IDC_KICKSHIFTER,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,196,86,80,10
-    GROUPBOX        "Misc settings:",-1,5,105,290,59
-    RTEXT           "Flash RAM File:",IDC_FLASHTEXT,8,119,75,10
-    EDITTEXT        IDC_FLASHFILE,89,117,185,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_FLASHCHOOSER,279,117,10,15
-    RTEXT           "Cartridge ROM File:",IDC_FLASHTEXT2,8,140,75,10
-    EDITTEXT        IDC_CARTFILE,89,137,185,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_CARTCHOOSER,279,137,10,15
+    GROUPBOX        "ROM Settings:",-1,5,0,290,74
+    RTEXT           "Boot ROM File:",IDC_ROMTEXT,10,15,75,10
+    COMBOBOX        IDC_ROMFILE,89,12,186,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "...",IDC_KICKCHOOSER,280,10,10,15
+    RTEXT           "Extended ROM File:",IDC_ROMFILE2TEXT,10,35,75,10
+    COMBOBOX        IDC_ROMFILE2,89,31,186,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "...",IDC_ROMCHOOSER2,280,30,10,15
+    RTEXT           "Cartridge ROM File:",IDC_FLASHTEXT2,8,93,75,10
+    COMBOBOX        IDC_CARTFILE,89,90,186,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "...",IDC_CARTCHOOSER,280,90,10,15
+    GROUPBOX        "Misc settings:",-1,5,76,290,57
+    RTEXT           "Flash RAM File:",IDC_FLASHTEXT,8,112,75,10
+    EDITTEXT        IDC_FLASHFILE,89,110,185,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_FLASHCHOOSER,280,110,10,15
+    CONTROL         "MAPROM emulation [] Creates BlizKick-compatible memory area.",
+                    IDC_MAPROM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,95,54,
+                    82,10
+    CONTROL         "ShapeShifter support [] Patches Kickstart ROM for ShapeShifter compatibility.",
+                    IDC_KICKSHIFTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+                    187,54,80,10
 END
 
 IDD_DISPLAY DIALOGEX 0, 0, 300, 194
@@ -87,10 +89,9 @@ BEGIN
                     HIDC_PFULLSCREEN
     CONTROL         "Lo-res",IDC_LORES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
                     131,106,70,10,0,HIDC_LORES
-    LTEXT           "Refresh:",IDC_REFRESHTEXT,34,129,28,8
+    LTEXT           "Refresh:",IDC_REFRESHTEXT,18,129,28,8
     CONTROL         "Slider1",IDC_FRAMERATE,"msctls_trackbar32",
-                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,64,124,75,20
-    CTEXT           "",IDC_RATETEXT,144,124,50,20,SS_SUNKEN | WS_BORDER
+                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,46,124,75,20
     GROUPBOX        "Centering",IDC_STATIC,221,0,61,67
     CONTROL         "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | 
                     WS_TABSTOP,229,16,45,10
@@ -108,8 +109,9 @@ BEGIN
                     WS_TABSTOP
     CONTROL         "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | NOT WS_VISIBLE | WS_TABSTOP,97,161,101,20
-    PUSHBUTTON      "Detect pixel format",IDC_TEST16BIT,221,163,67,14,0,0,
+    PUSHBUTTON      "Detect pixel format",IDC_TEST16BIT,210,161,73,14,0,0,
                     HIDC_TEST16BIT
+    EDITTEXT        IDC_RATETEXT,126,128,77,12,ES_CENTER | ES_READONLY
 END
 
 IDD_MEMORY DIALOGEX 0, 0, 300, 175
@@ -121,53 +123,48 @@ BEGIN
     RTEXT           "Chip:",-1,24,60,20,10,SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,54,55,50,20
-    CTEXT           "",IDC_CHIPRAM,104,55,35,20,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER
     RTEXT           "Fast:",IDC_FASTTEXT,24,85,20,10,SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,54,80,50,20
-    CTEXT           "",IDC_FASTRAM,104,80,35,20,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER
     RTEXT           "Slow:",-1,149,60,20,10,SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,179,55,50,20
-    CTEXT           "",IDC_SLOWRAM,239,55,35,20,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER
     RTEXT           "Z3-Fast:",IDC_Z3TEXT,139,85,30,10,SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",
                     TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,80,60,20
-    CTEXT           "",IDC_Z3FASTRAM,239,80,35,20,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER
     RTEXT           "RTG (graphics card):",IDC_GFXCARDTEXT,96,110,76,10,
                     SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,179,105,60,20
-    CTEXT           "",IDC_P96RAM,239,105,35,20,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER
+    EDITTEXT        IDC_CHIPRAM,105,59,30,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_FASTRAM,105,86,30,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_SLOWRAM,243,58,30,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_Z3FASTRAM,243,85,30,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_P96RAM,243,108,30,12,ES_CENTER | ES_READONLY
 END
 
-IDD_CPU DIALOGEX 0, 0, 300, 175
+IDD_CPU DIALOGEX 0, 0, 300, 177
 STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x0
 BEGIN
-    GROUPBOX        "CPU Type:",IDC_STATIC,5,5,80,134,BS_LEFT
+    GROUPBOX        "CPU Type:",IDC_STATIC,5,5,81,166,BS_LEFT
     CONTROL         "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | 
-                    WS_TABSTOP,10,18,34,10
+                    WS_TABSTOP,10,18,63,10
     CONTROL         "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,10,33,34,10
+                    WS_TABSTOP,10,33,65,10
     CONTROL         "68EC020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,10,48,45,10
-    CONTROL         "68EC020+FPU",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,10,63,63,10
+                    WS_TABSTOP,10,48,65,10
+    CONTROL         "68EC020 + FPU",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | 
+                    WS_TABSTOP,10,63,68,10
     CONTROL         "68020",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,10,78,34,10
-    CONTROL         "68020+FPU",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,10,93,54,10
+                    WS_TABSTOP,10,78,63,10
+    CONTROL         "68020 + FPU",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | 
+                    WS_TABSTOP,10,93,64,10
     CONTROL         "68040",IDC_CPU6,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,10,108,36,10
-    CONTROL         "More compatible",IDC_COMPATIBLE,"Button",
-                    BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,123,
-                    70,10
+                    WS_TABSTOP,10,108,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,130,70,10
     GROUPBOX        "CPU Emulation Speed:",IDC_STATIC,90,5,205,86
     CONTROL         "Fastest possible, but maintain chipset timing",
                     IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | 
@@ -187,85 +184,98 @@ BEGIN
                     WS_TABSTOP
     CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,219,66,69,20
-    GROUPBOX        "JIT Settings:",IDC_STATIC,90,94,205,76
+    GROUPBOX        "Advanced JIT settings:",IDC_STATIC,90,92,205,79
     RTEXT           "Cache Size:",IDC_CS_CACHE_TEXT,95,109,45,10,
                     SS_CENTERIMAGE | WS_TABSTOP
     CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,140,104,115,20
     EDITTEXT        IDC_CACHETEXT,255,109,30,12,ES_CENTER | ES_READONLY
     CONTROL         "Hard Flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,100,127,60,10
+                    WS_TABSTOP,100,128,60,10
     CONTROL         "Const Jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,100,141,60,10
+                    WS_TABSTOP,100,142,60,10
     CONTROL         "FPU Support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,100,154,60,10
+                    WS_TABSTOP,100,155,60,10
     CONTROL         "Force Settings",IDC_FORCE,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,165,127,61,10
+                    WS_TABSTOP,165,128,61,10
     CONTROL         "No Flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,165,141,60,10
+                    WS_TABSTOP,165,142,60,10
     CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | 
-                    WS_GROUP | WS_TABSTOP,230,127,34,10
+                    WS_GROUP | WS_TABSTOP,230,128,34,10
     CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,230,141,45,10
+                    WS_TABSTOP,230,142,45,10
     CONTROL         "After Picasso96",IDC_TRUST2,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,230,154,64,10
+                    WS_TABSTOP,230,155,64,10
+    CONTROL         "JIT [] Enable Just-In-Time CPU emulator. Increases the speed of CPU emulation 10-100x. Requires 68020 or 68040 CPU.",
+                    IDC_JITENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,
+                    145,64,10
 END
 
 IDD_FLOPPY DIALOGEX 0, 0, 300, 230
 STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x0
 BEGIN
-    RTEXT           "DF0:",IDC_STATIC,16,6,20,10,SS_CENTERIMAGE
+    RTEXT           "DF0:",IDC_STATIC,10,7,20,10,SS_CENTERIMAGE
     COMBOBOX        IDC_DF0TEXT,2,22,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
                     WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF0TYPE,54,5,41,50,CBS_DROPDOWNLIST | WS_VSCROLL | 
+    COMBOBOX        IDC_DF0TYPE,123,6,49,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
-    RTEXT           "DF1:",IDC_STATIC,16,41,20,10,SS_CENTERIMAGE
+    RTEXT           "DF1:",IDC_STATIC,10,42,20,10,SS_CENTERIMAGE
     COMBOBOX        IDC_DF1TEXT,2,58,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
                     WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF1TYPE,54,40,41,50,CBS_DROPDOWNLIST | WS_VSCROLL | 
+    COMBOBOX        IDC_DF1TYPE,123,42,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | 
                     WS_TABSTOP
-    RTEXT           "Write Protected",IDC_STATIC,174,42,59,10,SS_CENTERIMAGE
+    RTEXT           "Write Protected",IDC_STATIC,174,43,59,10,SS_CENTERIMAGE
     CONTROL         "",IDC_DF1WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | 
-                    WS_TABSTOP,238,39,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT1,253,39,30,15
-    PUSHBUTTON      "...",IDC_DF1,287,39,10,15
-    RTEXT           "DF2:",IDC_STATIC,16,77,20,10,SS_CENTERIMAGE
+                    WS_TABSTOP,238,40,10,15
+    PUSHBUTTON      "Eject",IDC_EJECT1,253,40,30,15
+    PUSHBUTTON      "...",IDC_DF1,287,40,10,15
+    RTEXT           "DF2:",IDC_STATIC,10,77,20,10,SS_CENTERIMAGE
     COMBOBOX        IDC_DF2TEXT,2,93,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
                     WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF2TYPE,54,76,41,50,CBS_DROPDOWNLIST | WS_VSCROLL | 
+    COMBOBOX        IDC_DF2TYPE,123,77,49,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
-    RTEXT           "DF3:",IDC_STATIC,16,113,20,9,SS_CENTERIMAGE
-    COMBOBOX        IDC_DF3TEXT,2,130,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+    RTEXT           "DF3:",IDC_STATIC,10,112,20,9,SS_CENTERIMAGE
+    COMBOBOX        IDC_DF3TEXT,2,128,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
                     WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF3TYPE,54,112,41,50,CBS_DROPDOWNLIST | WS_VSCROLL | 
+    COMBOBOX        IDC_DF3TYPE,123,112,49,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,111,30,15
-    PUSHBUTTON      "...",IDC_DF3,287,111,10,15
-    GROUPBOX        "New disk image",IDC_SETTINGSTEXT,5,152,289,35
-    COMBOBOX        IDC_FLOPPYTYPE,16,165,51,50,CBS_DROPDOWNLIST | 
+    PUSHBUTTON      "Eject",IDC_EJECT3,253,110,30,15
+    PUSHBUTTON      "...",IDC_DF3,287,109,10,15
+    GROUPBOX        "New disk image",IDC_SETTINGSTEXT,5,147,289,35
+    COMBOBOX        IDC_FLOPPYTYPE,16,160,51,50,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Create Standard ""Floppy""",IDC_CREATE,76,165,97,15
-    PUSHBUTTON      "Create Custom ""Floppy""",IDC_CREATE_RAW,183,165,101,15
-    GROUPBOX        "Floppy drive emulation speed",IDC_SETTINGSTEXT2,5,188,
+    PUSHBUTTON      "Create Standard ""Floppy"" [] Creates standard 880kb ADF disk image.",
+                    IDC_CREATE,76,160,97,15
+    PUSHBUTTON      "Create Custom ""Floppy"" [] Creates ~2Mb low level (MFM) ADF disk image. Useful for programs that use non-AmigaDOS disk format (for example some  save disks or MSDOS formatted floppies)",
+                    IDC_CREATE_RAW,183,160,101,15
+    GROUPBOX        "Floppy drive emulation speed",IDC_SETTINGSTEXT2,5,185,
                     289,35
     CONTROL         "",IDC_FLOPPYSPD,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,32,198,116,20
-    EDITTEXT        IDC_FLOPPYSPDTEXT,169,201,107,12,ES_CENTER | ES_READONLY
+                    TBS_TOP | WS_TABSTOP,32,193,116,20
+    EDITTEXT        IDC_FLOPPYSPDTEXT,169,196,107,12,ES_CENTER | ES_READONLY
+    PUSHBUTTON      "Delete Saveimage",IDC_SAVEIMAGE0,43,5,70,15,NOT 
+                    WS_VISIBLE
+    PUSHBUTTON      "Delete Saveimage",IDC_SAVEIMAGE1,43,40,70,15,NOT 
+                    WS_VISIBLE
+    PUSHBUTTON      "Delete Saveimage",IDC_SAVEIMAGE2,43,75,70,15,NOT 
+                    WS_VISIBLE
+    PUSHBUTTON      "Delete Saveimage",IDC_SAVEIMAGE3,43,110,70,15,NOT 
+                    WS_VISIBLE
 END
 
 IDD_HARDDISK DIALOGEX 0, 0, 300, 242
@@ -275,104 +285,118 @@ 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,5,260,191
+                    LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,5,260,185
     PUSHBUTTON      "",IDC_UP,270,52,25,15,BS_ICON
     PUSHBUTTON      "",IDC_DOWN,270,132,25,15,BS_ICON
-    PUSHBUTTON      "Add &Directory...",IDC_NEW_FS,5,202,60,15
-    PUSHBUTTON      "Add &Hardfile...",IDC_NEW_HF,70,202,60,15
-    PUSHBUTTON      "Add Ha&rddrive",IDC_NEW_HD,135,202,60,15
+    PUSHBUTTON      "Add &Directory...",IDC_NEW_FS,5,196,60,15
+    PUSHBUTTON      "Add &Hardfile...",IDC_NEW_HF,70,196,60,15
+    PUSHBUTTON      "Add Ha&rddrive...",IDC_NEW_HD,135,196,60,15
     CONTROL         "Add PC Drives at Startup",IDC_MAPDRIVES,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,5,222,105,10,0,
+                    BS_AUTOCHECKBOX | WS_TABSTOP,5,216,105,10,0,
                     HIDC_MAPDRIVES
-    PUSHBUTTON      "Remove",IDC_REMOVE,135,220,60,15
-    PUSHBUTTON      "&Properties",IDC_EDIT,200,220,60,15
+    PUSHBUTTON      "Remove",IDC_REMOVE,135,218,60,15
+    PUSHBUTTON      "&Properties",IDC_EDIT,200,218,60,15
+    CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,5,229,115,10
 END
 
-IDD_SOUND DIALOGEX 0, 0, 300, 208
+IDD_SOUND DIALOGEX 0, 0, 300, 244
 STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
     RTEXT           "Sound device:",IDC_SOUNDCARD,8,9,51,13,SS_CENTERIMAGE
     COMBOBOX        IDC_SOUNDCARDLIST,64,9,229,50,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Sound Emulation",IDC_SOUNDSETTINGS,7,30,120,68
+    GROUPBOX        "Sound Emulation",IDC_SOUNDSETTINGS,5,30,120,68
     CONTROL         "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | 
-                    WS_GROUP | WS_TABSTOP,15,45,43,10
+                    WS_GROUP | WS_TABSTOP,13,45,43,10
     CONTROL         "Disabled, but emulated",IDC_SOUND1,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,15,57,88,10
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,13,57,88,10
     CONTROL         "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,15,69,42,10
+                    WS_TABSTOP,13,69,42,10
     CONTROL         "Enabled, 100% accurate",IDC_SOUND3,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,15,81,93,10
-    GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,133,30,160,68
-    RTEXT           "Frequency:",IDC_SOUNDFREQTXT,138,40,37,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFREQ,140,49,67,75,CBS_DROPDOWN | WS_VSCROLL | 
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,13,81,93,10
+    GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,6,101,290,60
+    RTEXT           "Frequency:",IDC_SOUNDFREQTXT,34,110,37,8,SS_CENTERIMAGE
+    COMBOBOX        IDC_SOUNDFREQ,36,119,67,75,CBS_DROPDOWN | WS_VSCROLL | 
                     WS_TABSTOP
-    RTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,140,65,36,8,
+    RTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,36,135,36,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFILTER,140,74,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDFILTER,36,144,67,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Stereo mode:",IDC_SOUNDSTEREOTXT,223,40,41,8,
+    RTEXT           "Stereo mode:",IDC_SOUNDSTEREOTXT,116,110,43,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREO,220,49,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDSTEREO,116,119,67,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,222,65,41,8,
+    RTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,115,135,41,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDINTERPOLATION,220,74,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDINTERPOLATION,116,144,67,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Disk Drive Sound Emulation",IDC_STATIC,8,102,285,29
-    COMBOBOX        IDC_SOUNDDRIVE,15,113,32,75,CBS_DROPDOWNLIST | 
+    GROUPBOX        "Disk Drive Sound Emulation",IDC_STATIC,6,164,290,46
+    COMBOBOX        IDC_SOUNDDRIVE,237,174,46,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SOUNDDRIVESELECT,55,113,120,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDDRIVESELECT,18,192,265,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
     CONTROL         "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",
-                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,183,109,107,19
-    GROUPBOX        "Sound buffer size",IDC_STATIC,7,136,120,29
+                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,172,107,19
+    GROUPBOX        "Sound buffer size",IDC_STATIC,132,67,164,31
     CONTROL         "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",
-                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,144,106,19
-    CTEXT           "",IDC_SOUNDBUFFERMEM,134,144,40,16,SS_CENTERIMAGE | 
-                    SS_SUNKEN | WS_BORDER | WS_TABSTOP
-    GROUPBOX        "Sound driver lag compensation",IDC_STATIC,7,170,120,28
+                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,138,75,106,19
+    GROUPBOX        "Sound driver lag compensation",IDC_STATIC,6,211,290,31
     CONTROL         "Slider1",IDC_SOUNDADJUST,"msctls_trackbar32",
-                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,178,107,19
-    PUSHBUTTON      "Calibrate",IDC_SOUNDCALIBRATE,183,178,40,14
-    CTEXT           "",IDC_SOUNDADJUSTNUM,134,178,40,16,SS_CENTERIMAGE | 
-                    SS_SUNKEN | WS_BORDER | WS_TABSTOP
-    GROUPBOX        "Volume",IDC_STATIC,181,136,112,29
+                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,221,107,19
+    PUSHBUTTON      "Calibrate",IDC_SOUNDCALIBRATE,183,223,40,14
+    GROUPBOX        "Volume",IDC_STATIC,131,30,164,31
     CONTROL         "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,183,144,107,19
+                    TBS_TOP | WS_TABSTOP,137,38,105,20
+    EDITTEXT        IDC_SOUNDBUFFERMEM,248,78,40,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_SOUNDADJUSTNUM,124,224,40,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_SOUNDVOLUME2,247,41,40,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_SOUNDDRIVEVOLUME2,124,178,40,12,ES_CENTER | 
+                    ES_READONLY
+    RTEXT           "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,196,110,58,8,
+                    SS_CENTERIMAGE
+    COMBOBOX        IDC_SOUNDSTEREOSEP,197,119,67,75,CBS_DROPDOWNLIST | 
+                    WS_VSCROLL | WS_TABSTOP
+    RTEXT           "Stereo mixing delay:",IDC_SOUNDSTEREOMIXTXT,196,135,63,
+                    8,SS_CENTERIMAGE
+    COMBOBOX        IDC_SOUNDSTEREOMIX,197,144,67,75,CBS_DROPDOWNLIST | 
+                    WS_VSCROLL | WS_TABSTOP
 END
 
-IDD_LOADSAVE DIALOGEX 0, 0, 302, 240
+IDD_LOADSAVE DIALOGEX 0, 0, 302, 241
 STYLE 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,4,289,155,WS_EX_CLIENTEDGE
-    RTEXT           "Name:",IDC_STATIC,5,202,40,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITNAME,50,202,155,15,ES_AUTOHSCROLL,0,
-                    HIDC_EDITNAME
-    RTEXT           "Path:",IDC_STATIC,5,184,39,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITPATH,50,184,155,15,ES_AUTOHSCROLL | WS_DISABLED,
-                    0,HIDC_EDITPATH
-    RTEXT           "Description:",IDC_STATIC,5,163,40,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITDESCRIPTION,50,163,245,15,ES_AUTOHSCROLL,0,
+                    WS_TABSTOP,6,3,289,159,WS_EX_CLIENTEDGE
+    RTEXT           "Description:",IDC_STATIC,5,166,40,15,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDITDESCRIPTION,50,166,155,15,ES_AUTOHSCROLL,0,
                     HIDC_EDITDESCRIPTION
-    GROUPBOX        "Extra Info",IDC_STATIC,210,179,85,38
-    PUSHBUTTON      "View",IDC_VIEWINFO,215,195,35,15
-    PUSHBUTTON      "Set",IDC_SETINFO,255,194,35,15
-    PUSHBUTTON      "Load",IDC_QUICKLOAD,5,222,40,15
-    PUSHBUTTON      "Save",IDC_QUICKSAVE,50,222,40,15
-    PUSHBUTTON      "Load From...",IDC_LOAD,125,222,45,15
-    PUSHBUTTON      "Save As...",IDC_SAVE,175,222,40,15
-    PUSHBUTTON      "Delete",IDC_DELETE,255,222,40,15
+    RTEXT           "Path:",IDC_STATIC,5,187,39,15,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDITPATH,50,187,155,15,ES_AUTOHSCROLL | WS_DISABLED,
+                    0,HIDC_EDITPATH
+    RTEXT           "Name:",IDC_STATIC,5,205,40,15,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDITNAME,50,205,155,15,ES_AUTOHSCROLL,0,
+                    HIDC_EDITNAME
+    GROUPBOX        "Extra Info",IDC_STATIC,210,182,85,38
+    PUSHBUTTON      "View",IDC_VIEWINFO,215,198,35,15
+    PUSHBUTTON      "Set",IDC_SETINFO,255,197,35,15
+    PUSHBUTTON      "Load",IDC_QUICKLOAD,5,225,40,15
+    PUSHBUTTON      "Save",IDC_QUICKSAVE,50,225,40,15
+    PUSHBUTTON      "Load From...",IDC_LOAD,125,225,45,15
+    PUSHBUTTON      "Save As...",IDC_SAVE,175,225,40,15
+    PUSHBUTTON      "Delete",IDC_DELETE,255,225,40,15
+    CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,212,169,76,10
 END
 
 IDD_PORTS DIALOGEX 0, 0, 300, 202
 STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
+    GROUPBOX        "Serial and Parallel",IDC_SERPARFRAME,7,3,284,45
     RTEXT           "Serial:",IDC_STATIC,20,15,25,15,SS_CENTERIMAGE
     COMBOBOX        IDC_SERIAL,50,15,95,65,CBS_DROPDOWNLIST | WS_VSCROLL | 
                     WS_TABSTOP
@@ -385,41 +409,47 @@ BEGIN
     RTEXT           "Printer:",IDC_STATIC,155,15,25,15,SS_CENTERIMAGE
     COMBOBOX        IDC_PRINTERLIST,185,15,95,134,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
+    GROUPBOX        "MIDI",IDC_MIDIFRAME,7,51,284,36
     RTEXT           "Out:",IDC_MIDI,10,64,34,15,SS_CENTERIMAGE
     COMBOBOX        IDC_MIDIOUTLIST,50,64,95,130,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
     RTEXT           "In:",IDC_MIDI2,150,64,29,15,SS_CENTERIMAGE
     COMBOBOX        IDC_MIDIINLIST,185,64,95,134,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Amiga Mouse Port 0",IDC_PORT0,7,92,116,100
+    GROUPBOX        "Amiga Mouse Port 0",IDC_PORT0,7,92,116,106
     CONTROL         "PC Joystick 0",IDC_PORT0_JOY0,"Button",
-                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,20,102,90,10
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,20,104,90,10
     CONTROL         "PC Joystick 1",IDC_PORT0_JOY1,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,20,116,90,10
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,20,118,90,10
     CONTROL         "PC Mouse",IDC_PORT0_MOUSE,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,20,131,90,11
-    CONTROL         "Keyboard Layout ""A""",IDC_PORT0_KBDA,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,20,147,90,10
-    CONTROL         "Keyboard Layout ""B""",IDC_PORT0_KBDB,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,20,162,90,10
-    CONTROL         "Keyboard Layout ""C""",IDC_PORT0_KBDC,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,20,177,90,10
-    GROUPBOX        "Amiga Mouse Port 1",IDC_PORT1,175,92,115,100
+                    WS_TABSTOP,20,133,90,11
+    CONTROL         "Keyboard Layout ""A"" []Numeric keypad, 0 and 5 = fire",
+                    IDC_PORT0_KBDA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    20,149,90,10
+    CONTROL         "Keyboard Layout ""B"" []Cursor keys, right CTRL = fire",
+                    IDC_PORT0_KBDB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    20,164,90,10
+    CONTROL         "Keyboard Layout ""C"" []T = up, B = down, F = left, H = right, left ALT = fire",
+                    IDC_PORT0_KBDC,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    20,179,90,10
+    GROUPBOX        "Amiga Mouse Port 1",IDC_PORT1,175,92,115,105
     CONTROL         "PC Joystick 0",IDC_PORT1_JOY0,"Button",
-                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,190,102,90,10
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,190,104,90,10
     CONTROL         "PC Joystick 1",IDC_PORT1_JOY1,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,190,116,90,10
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,190,118,90,10
     CONTROL         "PC Mouse",IDC_PORT1_MOUSE,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,190,131,90,11
-    CONTROL         "Keyboard Layout ""A""",IDC_PORT1_KBDA,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,190,147,90,10
-    CONTROL         "Keyboard Layout ""B""",IDC_PORT1_KBDB,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,190,162,90,10
-    CONTROL         "Keyboard Layout ""C""",IDC_PORT1_KBDC,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,190,177,90,10
+                    WS_TABSTOP,190,133,90,11
+    CONTROL         "Keyboard Layout ""A"" []Numeric keypad, 0 and 5 = fire",
+                    IDC_PORT1_KBDA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    190,149,90,10
+    CONTROL         "Keyboard Layout ""B"" []Cursor keys, right CTRL = fire",
+                    IDC_PORT1_KBDB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    190,164,90,10
+    CONTROL         "Keyboard Layout ""C"" []T = up, B = down, F = left, H = right, left ALT = fire",
+                    IDC_PORT1_KBDC,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    190,179,90,10
     PUSHBUTTON      "<-swap->",IDC_SWAP,130,132,40,14
-    GROUPBOX        "MIDI",IDC_MIDIFRAME,7,51,284,36
-    GROUPBOX        "Serial and Parallel",IDC_SERPARFRAME,7,3,284,45
+    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,199,31,58,12
 END
 
 IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242
@@ -478,21 +508,21 @@ FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
     GROUPBOX        "Advanced:",IDC_STATIC,8,4,285,90
     CONTROL         "Middle-Mouse-Button --> ALT-TAB",IDC_JULIAN,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,29,15,120,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,29,21,120,10
     CONTROL         "Show GUI on startup",IDC_SHOWGUI,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,29,30,120,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,29,36,120,10
     CONTROL         "On-Screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,29,45,115,10
+                    WS_TABSTOP,29,51,115,10
     CONTROL         "UAEscsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,29,60,117,10
+                    WS_TABSTOP,29,66,117,10
     CONTROL         "BSDsocket.library emulation",IDC_SOCKETS,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,159,15,120,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,159,21,120,10
     CONTROL         "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,159,30,120,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,159,36,120,10
     CONTROL         "Don't use RGB overlays",IDC_NOOVERLAY,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,159,45,120,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,159,51,120,10
     CONTROL         "Use ASPI SCSI layer",IDC_ASPI,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,159,60,115,10
+                    WS_TABSTOP,159,66,115,10
     GROUPBOX        "Keyboard LEDs:",IDC_STATIC,7,99,85,73
     COMBOBOX        IDC_KBLED1,22,112,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | 
                     WS_TABSTOP
@@ -519,58 +549,59 @@ BEGIN
                     182,83,10,SS_CENTERIMAGE | WS_TABSTOP
     COMBOBOX        IDC_STATE_BUFFERSIZE,248,180,38,65,CBS_DROPDOWN | 
                     WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,29,76,115,10
+    CONTROL         "Don't show Taskbar button",IDC_NOTASKBARBUTTON,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,29,80,117,10
 END
 
-IDD_HARDFILE DIALOGEX 0, 0, 229, 164
+IDD_HARDFILE DIALOGEX 0, 0, 299, 180
 STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | 
     DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Volume Settings"
+CAPTION "Hardfile Settings"
 FONT 8, "MS Sans Serif", 0, 0, 0x0
 BEGIN
-    GROUPBOX        "Hard File Settings",IDC_STATIC,10,5,210,90
+    GROUPBOX        "Hard File Settings",IDC_STATIC,10,5,280,113
     RTEXT           "Path:",IDC_HARDFILE_DIR_TEXT,19,21,22,10
-    EDITTEXT        IDC_PATH_NAME,44,15,151,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_SELECTOR,200,15,11,15
+    EDITTEXT        IDC_PATH_NAME,44,15,222,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_SELECTOR,271,15,11,15
     RTEXT           "FileSys:",IDC_HARDFILE_FILESYS_TEXT,16,36,26,10
-    EDITTEXT        IDC_PATH_FILESYS,44,34,89,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_FILESYS_SELECTOR,139,34,11,15
+    EDITTEXT        IDC_PATH_FILESYS,44,34,221,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_FILESYS_SELECTOR,271,34,11,15
     CONTROL         "Read/Write",IDC_RW,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,160,37,50,10
+                    WS_TABSTOP,110,57,50,10
     RTEXT           "Device:",IDC_HARDFILE_DEVICE_TEXT,16,58,25,10
-    EDITTEXT        IDC_HARDFILE_DEVICE,44,54,32,15,ES_AUTOHSCROLL
-    RTEXT           "Surfaces:",IDC_SURFACES_TEXT,75,58,35,10
-    EDITTEXT        IDC_HEADS,115,54,27,15,ES_NUMBER
-    RTEXT           "Reserved:",IDC_RESERVED_TEXT,145,58,35,10
-    EDITTEXT        IDC_RESERVED,185,54,27,15,ES_NUMBER
+    EDITTEXT        IDC_HARDFILE_DEVICE,44,54,40,15,ES_AUTOHSCROLL
+    RTEXT           "Surfaces:",IDC_SURFACES_TEXT,112,79,30,10
+    EDITTEXT        IDC_HEADS,147,75,35,15,ES_NUMBER
+    RTEXT           "Reserved:",IDC_RESERVED_TEXT,197,79,35,10
+    EDITTEXT        IDC_RESERVED,237,75,35,15,ES_NUMBER
     RTEXT           "BootPri:",IDC_HARDFILE_BOOTPRI_TEXT,11,80,30,8
-    EDITTEXT        IDC_HARDFILE_BOOTPRI,44,75,32,15
-    RTEXT           "Sectors:",IDC_SECTORS_TEXT,80,80,30,10
-    EDITTEXT        IDC_SECTORS,115,75,27,15,ES_NUMBER
-    RTEXT           "Block-Size:",IDC_BLOCKSIZE_TEXT,145,80,35,10
-    EDITTEXT        IDC_BLOCKSIZE,185,75,27,15,ES_NUMBER
-    GROUPBOX        "New Hard File",IDC_STATIC,10,100,210,35
-    PUSHBUTTON      "Create",IDC_CREATEHF,20,115,85,14
-    EDITTEXT        IDC_HFSIZE,110,115,60,15,ES_NUMBER
-    LTEXT           "MB",IDC_RESERVED_TEXT2,174,118,39,9,NOT WS_GROUP
-    PUSHBUTTON      "OK",IDOK,115,143,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,171,143,50,14
+    EDITTEXT        IDC_HARDFILE_BOOTPRI,44,75,40,15
+    RTEXT           "Sectors:",IDC_SECTORS_TEXT,112,101,30,10
+    EDITTEXT        IDC_SECTORS,147,96,35,15,ES_NUMBER
+    RTEXT           "Block-Size:",IDC_BLOCKSIZE_TEXT,197,101,35,10
+    EDITTEXT        IDC_BLOCKSIZE,237,96,35,15,ES_NUMBER
+    GROUPBOX        "New Hard File",IDC_STATIC,10,120,280,35
+    PUSHBUTTON      "Enable RDB-mode",IDC_HDF_RDB,192,55,92,14
+    EDITTEXT        IDC_HFSIZE,141,135,61,15,ES_NUMBER
+    LTEXT           "MB",IDC_RESERVED_TEXT2,214,138,39,9,NOT WS_GROUP
+    PUSHBUTTON      "OK",IDOK,102,161,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,158,161,50,14
+    PUSHBUTTON      "Create",IDC_CREATEHF,40,135,85,14
 END
 
-IDD_FILESYS DIALOGEX 15, 25, 229, 111
+IDD_FILESYS DIALOGEX 15, 25, 299, 111
 STYLE 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,5,9,54,10
-    EDITTEXT        IDC_VOLUME_DEVICE,65,5,85,15,ES_AUTOHSCROLL
+    EDITTEXT        IDC_VOLUME_DEVICE,65,5,86,15,ES_AUTOHSCROLL
     LTEXT           "Volume Label:",-1,5,31,54,10
     EDITTEXT        IDC_VOLUME_NAME,65,25,85,15,ES_AUTOHSCROLL
     LTEXT           "Path:",-1,5,51,44,10
-    EDITTEXT        IDC_PATH_NAME,65,46,139,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_SELECTOR,210,46,10,15
+    EDITTEXT        IDC_PATH_NAME,65,46,213,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_SELECTOR,283,46,10,15
     CONTROL         "Read/Write",IDC_RW,"Button",BS_AUTOCHECKBOX | 
                     WS_TABSTOP,5,70,50,10
     RTEXT           "BootPri:",IDC_VOLUME_BOOTPRI_TEXT,68,70,30,8
@@ -597,35 +628,44 @@ STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x0
 BEGIN
     GROUPBOX        "Chipset type",IDC_STATIC,14,11,145,82
-    CONTROL         "OCS",IDC_OCS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | 
-                    WS_TABSTOP,38,31,30,10
-    CONTROL         "ECS Agnus",IDC_ECS_AGNUS,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,38,47,50,10
-    CONTROL         "ECS Denise",IDC_ECS_DENISE,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,38,63,50,10
-    CONTROL         "Full ECS",IDC_ECS,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,102,31,42,10
-    CONTROL         "AGA",IDC_AGA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
-                    102,47,30,10
-    CONTROL         "NTSC",IDC_NTSC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
-                    102,64,35,10
+    CONTROL         "OCS [] The original Amiga chipset (A1000, most A500s)",
+                    IDC_OCS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | 
+                    WS_TABSTOP,38,31,51,10
+    CONTROL         "ECS Agnus [] Partial Enhanced Chipset. Later A500 and A2000 hardware revisions.",
+                    IDC_ECS_AGNUS,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    38,47,55,10
+    CONTROL         "Full ECS [] Full ECS Chipset, ECS Agnus and ECS Denise. (A500+, A600, A3000)",
+                    IDC_ECS,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,38,63,
+                    52,10
+    CONTROL         "AGA [] The next generation Amiga chipset (A1200, A4000 and CD32)",
+                    IDC_AGA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,101,31,
+                    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,102,63,50,
+                    10
     GROUPBOX        "Misc chipset options",IDC_STATIC,168,11,114,82
-    CONTROL         "Fast Copper",IDC_FASTCOPPER,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,174,31,53,10
-    CONTROL         "Immediate Blitter",IDC_BLITIMM,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,174,47,75,10
-    CONTROL         "Cycle exact CPU and Blitter",IDC_CYCLEEXACT,"Button",
-                    BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,174,64,
-                    100,10
+    CONTROL         "Fast Copper [] Faster but less compatible copper emulation.",
+                    IDC_FASTCOPPER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,
+                    31,98,10
+    CONTROL         "Immediate Blitter [] Faster but less compatible blitter emulation.",
+                    IDC_BLITIMM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,47,
+                    96,10
+    CONTROL         "Cycle exact CPU and Blitter [] The most compatible A500 emulation mode. Very fast CPU recommended.",
+                    IDC_CYCLEEXACT,"Button",BS_AUTOCHECKBOX | BS_LEFT | 
+                    WS_GROUP | WS_TABSTOP,174,64,100,10
     GROUPBOX        "Collision level",IDC_STATIC,14,97,267,48
-    CONTROL         "None",IDC_COLLISION0,"Button",BS_AUTORADIOBUTTON | 
-                    WS_GROUP | WS_TABSTOP,40,113,50,10
-    CONTROL         "Sprites only",IDC_COLLISION1,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,39,129,50,10
-    CONTROL         "Sprites and Sprites vs. Playfield",IDC_COLLISION2,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,104,113,114,10
-    CONTROL         "Full",IDC_COLLISION3,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,104,129,27,10
+    CONTROL         "None [] Collision hardware emulation disabled.",
+                    IDC_COLLISION0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | 
+                    WS_TABSTOP,40,113,50,10
+    CONTROL         "Sprites only [] Emulate only sprite vs sprite collisions.",
+                    IDC_COLLISION1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    39,129,50,10
+    CONTROL         "Sprites and Sprites vs. Playfield [] Recommended collision emulation level.",
+                    IDC_COLLISION2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    104,113,161,10
+    CONTROL         "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",
+                    IDC_COLLISION3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    104,129,82,10
     GROUPBOX        "Sound emulation",IDC_STATIC,13,151,268,65
     CONTROL         "Disabled",IDC_CS_SOUND0,"Button",BS_AUTORADIOBUTTON | 
                     WS_GROUP | WS_TABSTOP,39,167,102,10
@@ -705,64 +745,64 @@ BEGIN
     PUSHBUTTON      "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14
 END
 
-IDD_OPENGL DIALOGEX 0, 0, 300, 193
+IDD_FILTER DIALOGEX 0, 0, 296, 216
 STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
-    GROUPBOX        "Filter settings:",-1,8,5,285,180
-    CONTROL         "Enable",IDC_OPENGLENABLE,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,26,23,38,10
-    COMBOBOX        IDC_OPENGLMODE,67,21,56,150,CBS_DROPDOWNLIST | 
+    GROUPBOX        "Filter settings:",-1,0,0,294,174
+    CONTROL         "Enable",IDC_FILTERENABLE,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,26,17,38,10
+    COMBOBOX        IDC_FILTERMODE,67,15,56,150,CBS_DROPDOWNLIST | 
                     CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_OPENGLFILTER,128,21,65,150,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_FILTERFILTER,128,15,65,150,CBS_DROPDOWNLIST | 
                     CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Reset to defaults",IDC_OPENGLDEFAULT,197,21,73,14
-    RTEXT           "Horizontal Size",-1,25,52,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_OPENGLHZ,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,89,45,158,19
-    CTEXT           "",IDC_OPENGLHZV,249,47,21,16,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER | WS_TABSTOP
-    RTEXT           "Vertical Size",-1,26,72,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_OPENGLVZ,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,89,65,157,19
-    CTEXT           "",IDC_OPENGLVZV,249,67,21,16,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER | WS_TABSTOP
-    RTEXT           "Horizontal Position",-1,26,92,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_OPENGLHO,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,89,85,157,19
-    CTEXT           "",IDC_OPENGLHOV,249,87,21,16,SS_CENTERIMAGE | SS_SUNKEN | 
-                    WS_BORDER | WS_TABSTOP
-    RTEXT           "Vertical Position",-1,26,111,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_OPENGLVO,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,89,105,157,19
-    CTEXT           "",IDC_OPENGLVOV,249,107,21,16,SS_CENTERIMAGE | 
-                    SS_SUNKEN | WS_BORDER | WS_TABSTOP
-    RTEXT           "Scanlines",-1,27,141,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_OPENGLSL,"msctls_trackbar32",TBS_AUTOTICKS | 
-                    TBS_TOP | WS_TABSTOP,89,134,157,19
-    CTEXT           "",IDC_OPENGLSLV,249,135,21,16,SS_CENTERIMAGE | 
-                    SS_SUNKEN | WS_BORDER | WS_TABSTOP
-    COMBOBOX        IDC_OPENGLSLR,56,154,27,150,CBS_DROPDOWNLIST | 
+    PUSHBUTTON      "Reset to defaults",IDC_FILTERDEFAULT,197,15,73,14
+    RTEXT           "Horizontal Size",-1,25,44,57,10,SS_CENTERIMAGE
+    CONTROL         "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | 
+                    TBS_TOP | WS_TABSTOP,89,37,158,19
+    RTEXT           "Vertical Size",-1,26,64,57,10,SS_CENTERIMAGE
+    CONTROL         "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | 
+                    TBS_TOP | WS_TABSTOP,89,57,157,19
+    RTEXT           "Horizontal Position",-1,26,84,57,10,SS_CENTERIMAGE
+    CONTROL         "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | 
+                    TBS_TOP | WS_TABSTOP,89,77,157,19
+    RTEXT           "Vertical Position",-1,26,103,57,10,SS_CENTERIMAGE
+    CONTROL         "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | 
+                    TBS_TOP | WS_TABSTOP,89,97,157,19
+    RTEXT           "Scanlines",-1,27,133,57,10,SS_CENTERIMAGE
+    CONTROL         "Slider1",IDC_FILTERSL,"msctls_trackbar32",TBS_AUTOTICKS | 
+                    TBS_TOP | WS_TABSTOP,89,126,157,19
+    COMBOBOX        IDC_FILTERSLR,56,146,27,150,CBS_DROPDOWNLIST | 
                     CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Slider1",IDC_OPENGLSL2,"msctls_trackbar32",
-                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,89,154,157,19
-    CTEXT           "",IDC_OPENGLSL2V,249,154,21,16,SS_CENTERIMAGE | 
-                    SS_SUNKEN | WS_BORDER | WS_TABSTOP
+    CONTROL         "Slider1",IDC_FILTERSL2,"msctls_trackbar32",
+                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,89,146,157,19
+    EDITTEXT        IDC_FILTERSL2V,248,151,34,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_FILTERSLV,248,128,34,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_FILTERVOV,248,101,34,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_FILTERHOV,248,79,34,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_FILTERVZV,248,59,34,12,ES_CENTER | ES_READONLY
+    EDITTEXT        IDC_FILTERHZV,248,40,34,12,ES_CENTER | ES_READONLY
+    GROUPBOX        "Presets",-1,0,176,296,36
+    COMBOBOX        IDC_FILTERPRESETS,8,190,119,150,CBS_DROPDOWN | CBS_SORT | 
+                    CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "Load",IDC_FILTERPRESETLOAD,132,189,47,14
+    PUSHBUTTON      "Save",IDC_FILTERPRESETSAVE,184,189,47,14
+    PUSHBUTTON      "Delete",IDC_FILTERPRESETDELETE,236,189,47,14
 END
 
-IDD_HARDDRIVE DIALOGEX 0, 0, 229, 66
+IDD_HARDDRIVE DIALOGEX 0, 0, 300, 66
 STYLE 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           "Harddrive:",-1,7,11,35,10
-    COMBOBOX        IDC_HARDDRIVE,49,9,173,150,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_HARDDRIVE,49,9,246,150,CBS_DROPDOWNLIST | 
                     CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     CONTROL         "Read/Write",IDC_RW,"Button",BS_AUTOCHECKBOX | 
                     WS_TABSTOP,15,30,50,10
-    DEFPUSHBUTTON   "OK",IDOK,116,47,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,172,47,50,14
+    DEFPUSHBUTTON   "OK",IDOK,115,30,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,189,30,50,14
 END
 
 IDD_MISC2 DIALOGEX 0, 0, 300, 92
@@ -802,9 +842,9 @@ BEGIN
     CONTROL         "",IDC_DISKLIST,"SysListView32",LVS_REPORT | 
                     LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | 
                     LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,6,262,211
-    PUSHBUTTON      "Remove disk image",IDC_DISKLISTREMOVE,94,223,93,15
     PUSHBUTTON      "",IDC_UP,270,66,25,15,BS_ICON
     PUSHBUTTON      "",IDC_DOWN,270,146,25,15,BS_ICON
+    PUSHBUTTON      "Remove disk image",IDC_DISKLISTREMOVE,94,223,93,15
 END
 
 IDD_PANEL DIALOGEX 0, 0, 420, 278
@@ -814,16 +854,95 @@ 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_TABSTOP,5,5,101,248,WS_EX_CLIENTEDGE
     GROUPBOX        "",IDC_PANEL_FRAME_OUTER,110,2,307,251
+    PUSHBUTTON      "Reset",IDC_RESETAMIGA,6,259,47,14
+    PUSHBUTTON      "Quit",IDC_QUITEMU,57,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      "Reset",IDC_RESETAMIGA,6,259,47,14
-    PUSHBUTTON      "Quit",IDC_QUITEMU,57,259,47,14
-    GROUPBOX        "",IDC_PANEL_FRAME,112,4,303,247,NOT WS_VISIBLE
+END
+
+IDD_PATHS DIALOGEX 0, 0, 300, 221
+STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+    LTEXT           "ROM path:",IDC_PATHS_ROML,14,9,260,8,SS_CENTERIMAGE
+    EDITTEXT        IDC_PATHS_ROM,14,22,261,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_PATHS_ROMS,281,22,11,15
+    LTEXT           "Configuration file path:",IDC_PATHS_CONFIGL,14,40,260,8,
+                    SS_CENTERIMAGE
+    EDITTEXT        IDC_PATHS_CONFIG,14,52,261,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_PATHS_CONFIGS,281,52,11,15
+    LTEXT           "Screenshot path:",IDC_PATHS_SCREENSHOTL,14,71,260,8,
+                    SS_CENTERIMAGE
+    EDITTEXT        IDC_PATHS_SCREENSHOT,14,83,261,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_PATHS_SCREENSHOTS,281,83,11,15
+    LTEXT           "State file path:",IDC_PATHS_STATEFILEL,14,102,260,8,
+                    SS_CENTERIMAGE
+    EDITTEXT        IDC_PATHS_SAVESTATE,14,114,261,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_PATHS_SAVESTATES,281,114,11,15
+    LTEXT           "Saveimage path:",IDC_PATHS_SAVEIMAGEL,14,163,260,8,
+                    SS_CENTERIMAGE
+    EDITTEXT        IDC_PATHS_SAVEIMAGE,14,175,261,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_PATHS_SAVEIMAGES,281,175,11,15
+    PUSHBUTTON      "Reset to defaults",IDC_PATHS_DEFAULT,13,199,73,14
+    PUSHBUTTON      "Rescan ROMs",IDC_ROM_RESCAN,97,199,73,14
+    PUSHBUTTON      "Clear registry",IDC_RESETREGISTRY,219,199,73,14
+    LTEXT           "Video path:",IDC_PATHS_AVIOUTPUTL,14,132,260,8,
+                    SS_CENTERIMAGE
+    EDITTEXT        IDC_PATHS_AVIOUTPUT,14,144,261,15,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_PATHS_AVIOUTPUTS,282,144,11,15
+END
+
+IDD_QUICKSTART DIALOGEX 0, 0, 300, 242
+STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+    GROUPBOX        "Hardware configuration",IDC_QUICKSTART_CONFIG,3,0,294,
+                    54
+    RTEXT           "Model:",IDC_STATIC,5,14,56,10,SS_CENTERIMAGE
+    COMBOBOX        IDC_QUICKSTART_MODEL,65,12,225,50,CBS_DROPDOWNLIST | 
+                    WS_VSCROLL | WS_TABSTOP
+    RTEXT           "Configuration:",IDC_STATIC,5,33,56,10,SS_CENTERIMAGE
+    COMBOBOX        IDC_QUICKSTART_CONFIGURATION,65,31,225,50,
+                    CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    RTEXT           "Best compatibility",IDC_STATIC,13,70,67,10,
+                    SS_CENTERIMAGE
+    GROUPBOX        "Disk Drives",IDC_QUICKSTART_DF,3,126,294,84
+    LTEXT           "Disk Drive DF0:",IDC_STATIC,10,138,56,10,SS_CENTERIMAGE
+    PUSHBUTTON      "Select Disk Image",IDC_DF0QQ,77,135,98,15
+    RTEXT           "Write Protected",IDC_STATIC,180,139,58,10,
+                    SS_CENTERIMAGE
+    CONTROL         "",IDC_DF0WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | 
+                    WS_TABSTOP,245,137,10,15
+    PUSHBUTTON      "Eject",IDC_EJECT0Q,260,136,30,15
+    COMBOBOX        IDC_DF0TEXTQ,9,154,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+                    WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_DF1TEXTQ,9,190,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+                    WS_VSCROLL | WS_TABSTOP
+    CONTROL         "",IDC_DF1WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | 
+                    WS_TABSTOP,245,173,10,15
+    PUSHBUTTON      "Eject",IDC_EJECT1Q,260,172,30,15
+    CONTROL         "Start in Quickstart-mode",IDC_QUICKSTARTMODE,"Button",
+                    BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,199,222,94,10
+    COMBOBOX        IDC_QUICKSTART_HOSTCONFIG,65,103,225,50,CBS_DROPDOWNLIST | 
+                    WS_VSCROLL | WS_TABSTOP
+    GROUPBOX        "Host configuration",IDC_QUICKSTART_HOST,3,91,294,33
+    RTEXT           "Configuration:",IDC_STATIC,5,105,55,10,SS_CENTERIMAGE
+    LTEXT           "Disk Drive DF1:",IDC_STATIC,10,176,56,10,SS_CENTERIMAGE
+    PUSHBUTTON      "Select Disk Image",IDC_DF1QQ,77,172,98,15
+    RTEXT           "Write Protected",IDC_STATIC,180,175,58,10,
+                    SS_CENTERIMAGE
+    CONTROL         "",IDC_QUICKSTART_COMPATIBILITY,"msctls_trackbar32",
+                    TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,65,115,21
+    RTEXT           "Low compatibility",IDC_STATIC,215,70,63,10,
+                    SS_CENTERIMAGE
+    GROUPBOX        "Compatibility vs required CPU power ",
+                    IDC_QUICKSTART_COMPA,3,56,294,33
 END
 
 
@@ -880,6 +999,8 @@ 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"
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -887,8 +1008,8 @@ IDI_MEMORY              ICON                    "chip.ico"
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,8,27,0
- PRODUCTVERSION 0,8,27,0
+ FILEVERSION 0,9,90,0
+ PRODUCTVERSION 0,9,90,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -904,12 +1025,12 @@ BEGIN
         BLOCK "040904b0"
         BEGIN
             VALUE "FileDescription", "WinUAE"
-            VALUE "FileVersion", "0.8.27"
+            VALUE "FileVersion", "0.9.90"
             VALUE "InternalName", "WinUAE"
             VALUE "LegalCopyright", "© 1996-2004 under the GNU Public License (GPL)"
             VALUE "OriginalFilename", "WinUAE.exe"
             VALUE "ProductName", "WinUAE"
-            VALUE "ProductVersion", "0.8.27"
+            VALUE "ProductVersion", "0.9.90"
         END
     END
     BLOCK "VarFileInfo"
@@ -934,19 +1055,19 @@ IDC_MYHAND              CURSOR                  "H_arrow.cur"
 #ifdef APSTUDIO_INVOKED
 GUIDELINES DESIGNINFO 
 BEGIN
-    IDD_FLOPPY, DIALOG
+    IDD_HARDDISK, DIALOG
     BEGIN
-        BOTTOMMARGIN, 175
+        BOTTOMMARGIN, 241
     END
 
-    IDD_HARDDISK, DIALOG
+    IDD_SOUND, DIALOG
     BEGIN
-        BOTTOMMARGIN, 175
+        BOTTOMMARGIN, 243
     END
 
-    IDD_SOUND, DIALOG
+    IDD_LOADSAVE, DIALOG
     BEGIN
-        BOTTOMMARGIN, 206
+        BOTTOMMARGIN, 240
     END
 
     IDD_CONTRIBUTORS, DIALOG
@@ -955,9 +1076,9 @@ BEGIN
         BOTTOMMARGIN, 212
     END
 
-    IDD_MISC1, DIALOG
+    IDD_FILESYS, DIALOG
     BEGIN
-        BOTTOMMARGIN, 215
+        RIGHTMARGIN, 229
     END
 
     IDD_INPUT, DIALOG
@@ -965,16 +1086,15 @@ BEGIN
         BOTTOMMARGIN, 187
     END
 
-    IDD_OPENGL, DIALOG
-    BEGIN
-        BOTTOMMARGIN, 175
-    END
-
     IDD_PANEL, DIALOG
     BEGIN
         LEFTMARGIN, 7
         TOPMARGIN, 7
-        HORZGUIDE, 241
+    END
+
+    IDD_QUICKSTART, DIALOG
+    BEGIN
+        RIGHTMARGIN, 299
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -1004,7 +1124,6 @@ BEGIN
     END
 END
 
-
 /////////////////////////////////////////////////////////////////////////////
 //
 // RT_MANIFEST
@@ -1033,12 +1152,14 @@ BEGIN
     IDS_CPU                 "CPU"
     IDS_CHIPSET             "Chipset"
     IDS_INPUT               "Input"
-    IDS_OPENGL              "Filter"
+    IDS_FILTER              "Filter"
 END
 
 STRINGTABLE 
 BEGIN
     IDS_MISC2               "Priority"
+    IDS_PATHS               "Paths"
+    IDS_QUICKSTART          "Quickstart"
 END
 
 STRINGTABLE 
@@ -1069,7 +1190,7 @@ BEGIN
     IDS_SELECTUAE           "Select a UAE Config-File..."
     IDS_UAE                 "UAE Config Files"
     IDS_SELECTROM           "Select an Amiga ROM file..."
-    IDS_ROM                 "Amiga Kickstart Files"
+    IDS_ROM                 "Amiga ROM Files"
     IDS_SELECTKEY           "Select an Amiga Key-File..."
     IDS_KEY                 "Amiga Kickstart Key-Files"
     IDS_SELECTINFO          "Select information for your config..."
@@ -1106,7 +1227,6 @@ BEGIN
     IDS_BLOCKSIZE           "Block Size"
     IDS_NAME                "Name"
     IDS_DESCRIPTION         "Description"
-    IDS_ONEINSTANCE         "Only one instance of WinUAE can run at a time.\n"
     IDS_INSTALLDIRECTX      "You have to install DirectX on your system before you can use UAE.\nRefer to the documentation for further details.\n"
     IDS_REGKEYCREATEFAILED  "WinUAE could not create Registry keys!  You need administrator privileges.\n"
     IDS_COULDNOTLOADCONFIG  "Could not load selected configuration!\n"
@@ -1198,6 +1318,69 @@ BEGIN
     IDS_TREEVIEW_SETTINGS   "Settings"
     IDS_WINUAETITLE_MMB     "[Mouse active - press Alt-Tab or middle-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 Amiga formatted or completely empty harddrives detected."
+    IDS_DEFAULT_HOST        "Default Configuration"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_NUMSG_NEEDEXT2      "Program uses non-standard disk format. You may need to use ""Custom"" floppy instead of standard adf. This message does not appear again."
+    IDS_NUMSG_NOROMKEY      "Could not find ROM key file."
+    IDS_NUMSG_KSROMCRCERROR "Kickstart checksum incorrect. You probably have a corrupted ROM image."
+    IDS_NUMSG_KSROMREADERROR "Error while reading Kickstart."
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_NUMSG_NOEXTROM      "No extended Kickstart ROM found."
+    IDS_NUMSG_MODRIP_NOTFOUND "No modules or compressed data found."
+    IDS_NUMSG_MODRIP_FINISHED "Scan finished."
+    IDS_NUMSG_MODRIP_SAVE   "Module/packer found\n%s\nDo you want to save it?"
+    IDS_NUMSG_KS68020       "Your Kickstart requires a 68020 CPU or later CPU."
+    IDS_NUMSG_ROMNEED       "You need any of following ROM(s)\n\n%s"
+    IDS_NUMSG_NOZLIB        "Zip and gzip support disabled because zlib1.dll is missing."
+    IDS_NUMSG_STATEHD       "WARNING: State saves do not support harddrive emulation. This message does not appear again."
+    IDS_NUMSG_NOCAPS        "This disk image needs the C.A.P.S. plugin\nwhich is available from\nhttp//www.caps-project.org/download.shtml"
+    IDS_NUMSG_OLDCAPS       "You need updated C.A.P.S. plugin\nwhich is available from\nhttp//www.caps-project.org/download.shtml"
+    IDS_IMGCHK_BOOTBLOCKCRCERROR 
+                            "Selected disk image is not bootable (bootblock CRC error)"
+    IDS_IMGCHK_BOOTBLOCKNO  "Selected disk image is not bootable (no bootblock)"
+    IDS_IMGCHK_DAMAGED      "Selected disk image is damaged or unformatted"
+    IDS_IMGCHK_KS2          "Selected disk image requires Kickstart 2.04 or 3.0\nConfiguration updated"
+    IDS_IMGCHK_KS3          "Selected disk image requires Kickstart 3.0 or later\nConfiguration updated"
+    IDS_ROMSCANEND          "ROM scan finished"
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_ROM_AVAILABLE       "available"
+    IDS_ROM_UNAVAILABLE     "unavailable"
+    IDS_HARDDRIVESAFETYWARNING 
+                            "WARNING: Non-empty or Amiga formatted\nharddrive detected and safety test was disabled\n\nHarddrives marked with 'HD_*_' are not empty"
+    IDS_NUMSG_KS68EC020     "Your Kickstart requires a 68EC020 or later CPU."
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_QS_MODELS           "Amiga 500\nAmiga 500+\nAmiga 600\nAmiga 1000\nAmiga 1200\nCD32\nCDTV (CDROM emulation not yet working)\nExpanded UAE example configuration"
+    IDS_QS_MODEL_A500       "KS 1.3, OCS Agnus, 0.5M Chip + 0.5M Slow (most common)\nThis configuration is capable of running most games and demos ever produced for the first Amiga line. Only few exceptions need different configuration. Oldest Amiga games tend to be incompatible with this configuration.\nKS 1.3, ECS Agnus, 0.5M Chip + 0.5M Slow\nLater hardware revision of Amiga 500. Nearly 100% compatible with previous configuration.\nKS 1.3, ECS Agnus, 1.0M Chip\nFew newer games and demos require this configuration.\nKS 1.3, OCS Agnus, 0.5M Chip\nVery old (~1987 and older) games and demos may require this configuration.\nKS 1.2, OCS Agnus, 0.5M Chip\nThe first Amiga 500 produced had this configuration. Some very old programs only work correctly with this configuration. NOTE: This configuration cannot boot the Amiga OS installed on an emulated HD.\nKS 1.2, OCS Agnus, 0.5M Chip + 0.5M Slow\nThis configuration adds expansion memory to the first Amiga 500 ever produced. Try this if your game do not work with newer configurations but works with the previous one. It could add some features to the game and faster game loading. NOTE: This configuration cannot boot the Amiga OS installed on an emulated HD."
+    IDS_QS_MODEL_A500P      "Basic non-expanded configuration\nA500+ is basically an Amiga 500 with ECS Agnus,  1MB of Chip RAM and Kickstart 2.0 ROM. Many Amiga 500 games and demos won't work properly on an Amiga 500+.\n2M Chip RAM expanded configuration\n\n4M Fast RAM expanded configuration\n"
+    IDS_QS_MODEL_A600       "Basic non-expanded configuration\nA600 is basically smaller Amiga 500+ with updated Kickstart 2.0 ROM.\n2M Chip RAM expanded configuration\n\n4M Fast RAM expanded configuration\n"
+    IDS_QS_MODEL_A1000      "0.5M Chip\nThe Amiga 1000 was the first Amiga ever produced, configuration is basically an OCS A500. You should never use this configuration unless you are nostalgic and you want to hear short special A1000 boot tune\n256K Chip\nUnexpanded Amiga 1000. All later A1000 models were sold with 256K RAM expansion build-in."
+    IDS_QS_MODEL_A1200      "Basic non-expanded configuration\nUse this configuration to run most AGA demos and games\n4M Fast RAM expanded configuration\nSome newer AGA games and demos need an expanded A1200 to run."
+    IDS_QS_MODEL_CD32       "CD32\nCD32 was the first 32bit console. It is basically an A1200 with build-in CDROM. Insert your CD32 or CDTV CDROM into a free CDROM drive before starting emulation."
+    IDS_QS_MODEL_CDTV       "CDTV\nCDTV was Commodore`s first attempt at making a CD-ROM equipped computer. It is an 1MB ECS Amiga 500 in a black box that looks like a CD player."
+END
+
+STRINGTABLE 
+BEGIN
+    IDS_QS_MODEL_UAE        "High-end expanded configuration\nThis configuration can be used as a basis for your own A3000/A4000-style high-performance, expanded custom configuration for Workbench, applications, WHDLoad etc.."
 END
 
 #endif    // English (U.S.) resources
index 2102826380eb17f3c5d43400f32d84ca691559f0..738fd03adb65052e33c2420ec701d3c80d650988 100755 (executable)
@@ -410,17 +410,22 @@ void setmouseactive (int active)
 static int avioutput_video = 0;
 #endif
 
-void setpriority (int pri)
+void setpriority (struct threadpriorities *pri)
 {
-    if (pri >= 2)
-       pri = 1;
-    SetThreadPriority ( GetCurrentThread(), pri);
-    write_log ("priority set to %d\n", pri);
+    int err;
+    write_log ("changing priority to %s\n", pri->name);
+    if (os_winnt)
+       err = SetPriorityClass (GetCurrentProcess (), pri->classvalue);
+    else
+       err = SetThreadPriority (GetCurrentThread(), pri->value);
+    if (!err)
+       write_log ("priority set failed, %08.8X\n", GetLastError ());
 }
 
 static void winuae_active (HWND hWnd, int minimized)
 {
-    int ot, pri;
+    int ot;
+    struct threadpriorities *pri;
 
     /* without this returning from hibernate-mode causes wrong timing
      */
@@ -434,10 +439,10 @@ static void winuae_active (HWND hWnd, int minimized)
 
     focus = 1;
     write_log ("WinUAE now active via WM_ACTIVATE\n");
-    pri = priorities[currprefs.win32_inactive_priority].value;
+    pri = &priorities[currprefs.win32_inactive_priority];
 #ifndef _DEBUG
     if (!minimized)
-       pri = priorities[currprefs.win32_active_priority].value;
+       pri = &priorities[currprefs.win32_active_priority];
 #endif
     setpriority (pri);
 
@@ -466,11 +471,12 @@ static void winuae_active (HWND hWnd, int minimized)
     if (isfullscreen())
        setmouseactive (1);
     manual_palette_refresh_needed = 1;
+
 }
 
 static void winuae_inactive (HWND hWnd, int minimized)
 {
-    int pri;
+    struct threadpriorities *pri;
 
     focus = 0;
     write_log( "WinUAE now inactive via WM_ACTIVATE\n" );
@@ -484,11 +490,11 @@ static void winuae_inactive (HWND hWnd, int minimized)
 #ifdef AHI
     ahi_open_sound ();
 #endif
-    pri = priorities[currprefs.win32_inactive_priority].value;
+    pri = &priorities[currprefs.win32_inactive_priority];
     if (!quit_program) {
        if (minimized) {
            inputdevice_unacquire ();
-           pri = priorities[currprefs.win32_iconified_priority].value;
+           pri = &priorities[currprefs.win32_iconified_priority];
            if (currprefs.win32_iconified_nosound) {
                close_sound ();
     #ifdef AHI
@@ -546,11 +552,11 @@ static long FAR PASCAL AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
     static int ignorenextactivateapp;
     PAINTSTRUCT ps;
     HDC hDC;
-    BOOL minimized;
     LPMINMAXINFO lpmmi;
     RECT rect;
-    int mx, my;
+    int mx, my, v;
     static int mm;
+    static int minimized;
 
     if (ignore_messages_all)
        return DefWindowProc (hWnd, message, wParam, lParam);
@@ -560,15 +566,43 @@ static long FAR PASCAL AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
 
     switch( message ) 
     {
+    case WM_SIZE:
+    {
+       if (isfullscreen ()) {
+           v = minimized;
+           switch (wParam)
+           {
+               case SIZE_MAXIMIZED:
+               case SIZE_RESTORED:
+               v = FALSE;
+               break;
+               default:
+               v = TRUE;
+               break;
+           }
+           if (v != minimized) {
+               if (v)
+                   winuae_inactive (hWnd, wParam == SIZE_MINIMIZED);
+               else
+                   winuae_active (hWnd, minimized);
+           }
+           minimized = v;
+           return 0;
+       }
+    }
+           
     case WM_ACTIVATE:
-       minimized = HIWORD( wParam );
-       if (LOWORD (wParam) != WA_INACTIVE) {
-           winuae_active (hWnd, minimized);
-           if (ignorenextactivateapp > 0)
-               ignorenextactivateapp--;
-       } else
-           winuae_inactive (hWnd, minimized);
-    break;
+       if (!isfullscreen ()) {
+           minimized = HIWORD (wParam);
+           if (LOWORD (wParam) != WA_INACTIVE) {
+               winuae_active (hWnd, minimized);
+               if (ignorenextactivateapp > 0)
+                   ignorenextactivateapp--;
+           } else {
+               winuae_inactive (hWnd, minimized);
+           }
+           return 0;
+       }
 
     case WM_ACTIVATEAPP:
        if (!wParam) {
@@ -582,11 +616,11 @@ static long FAR PASCAL AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
                exit_gui (0);
        }
         manual_palette_refresh_needed = 1;
-    break;
+    return 0;
 
     case WM_PALETTECHANGED:
-        if( (HWND)wParam != hWnd )
-           WIN32GFX_PaletteChange();
+        if ((HWND)wParam != hWnd)
+           manual_palette_refresh_needed = 1;
     break;
 
     case WM_KEYDOWN:
@@ -700,14 +734,6 @@ static long FAR PASCAL AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
        WIN32GFX_WindowMove();
     return TRUE;
 
-    case WM_SIZING:
-       WIN32GFX_WindowSize();
-    return TRUE;
-
-    case WM_SIZE:
-       WIN32GFX_WindowSize();
-    return 0;
-
     case WM_GETMINMAXINFO:
        rect.left=0;
        rect.top=0;
@@ -1006,7 +1032,7 @@ int WIN32_RegisterClasses( void )
     HDC hDC = GetDC( NULL );
 
     if (GetDeviceCaps (hDC, NUMCOLORS) != -1) 
-        g_dwBackgroundColor = RGB( 255, 0, 255 );    
+        g_dwBackgroundColor = RGB (255, 0, 255);
     ReleaseDC (NULL, hDC);
 
     wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_DBLCLKS | CS_OWNDC;
@@ -1014,7 +1040,7 @@ int WIN32_RegisterClasses( void )
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
     wc.hInstance = 0;
-    wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE( IDI_APPICON ) );
+    wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON));
     wc.hCursor = LoadCursor (NULL, IDC_ARROW);
     wc.lpszMenuName = 0;
     wc.lpszClassName = "AmigaPowah";
@@ -1027,7 +1053,7 @@ int WIN32_RegisterClasses( void )
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
     wc.hInstance = 0;
-    wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE( IDI_APPICON ) );
+    wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON));
     wc.hCursor = LoadCursor (NULL, IDC_ARROW);
     wc.hbrBackground = CreateSolidBrush (g_dwBackgroundColor);
     wc.lpszMenuName = 0;
@@ -1035,12 +1061,12 @@ int WIN32_RegisterClasses( void )
     if (!RegisterClass (&wc))
        return 0;
     
-    wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
+    wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW;
     wc.lpfnWndProc = HiddenWindowProc;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
     wc.hInstance = 0;
-    wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE( IDI_APPICON ) );
+    wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON));
     wc.hCursor = LoadCursor (NULL, IDC_ARROW);
     wc.hbrBackground = CreateSolidBrush (g_dwBackgroundColor);
     wc.lpszMenuName = 0;
@@ -1715,6 +1741,7 @@ static void WIN32_HandleRegistryStuff( void )
     HKEY hWinUAEKeyLocal = NULL;
     HKEY fkey;
     int forceroms = 0;
+    int updateversion = 1;
 
     /* Create/Open the hWinUAEKey which points to our config-info */
     if( RegCreateKeyEx( HKEY_CLASSES_ROOT, ".uae", 0, "", REG_OPTION_NON_VOLATILE,
@@ -1773,12 +1800,16 @@ static void WIN32_HandleRegistryStuff( void )
        if (RegQueryValueEx( hWinUAEKey, "Version", 0, &dwType, (LPBYTE)&version, &size) == ERROR_SUCCESS) {
            if (checkversion (version))
                forceroms = 1;
+           else
+               updateversion = 0;
        } else {
            forceroms = 1;
        }
-       // Set this even when we're opening an existing key, so that the version info is always up to date.
-        if (RegSetValueEx( hWinUAEKey, "Version", 0, REG_SZ, (CONST BYTE *)VersionStr, strlen( VersionStr ) + 1 ) != ERROR_SUCCESS)
-           forceroms = 0;
+       if (updateversion) {
+           // Set this even when we're opening an existing key, so that the version info is always up to date.
+           if (RegSetValueEx( hWinUAEKey, "Version", 0, REG_SZ, (CONST BYTE *)VersionStr, strlen( VersionStr ) + 1 ) != ERROR_SUCCESS)
+               forceroms = 0;
+       }
         
        RegQueryValueEx( hWinUAEKey, "DisplayInfo", 0, &dwType, (LPBYTE)&colortype, &dwDisplayInfoSize );
        if( colortype == 0 ) /* No color information stored in the registry yet */
@@ -2003,7 +2034,7 @@ __asm{
     argv[0] = 0;
 #endif
     /* Get our executable's root-path */
-    if( ( start_path = xmalloc( MAX_DPATH ) ) )
+    if ((start_path = xmalloc (MAX_DPATH)))
     {
        GetModuleFileName( NULL, start_path, MAX_DPATH );
        if((posn = strrchr (start_path, '\\')))
@@ -2052,7 +2083,7 @@ __asm{
 #endif
            real_main (argc, argv);
        }
-       free( start_path );
+       free (start_path);
     }
        
     if (mm_timerres && timermode == 0)
@@ -2097,11 +2128,11 @@ int execute_command (char *cmd)
 }
 
 struct threadpriorities priorities[] = {
-    { "Above Normal", THREAD_PRIORITY_ABOVE_NORMAL },
-    { "Normal", THREAD_PRIORITY_NORMAL },
-    { "Below Normal", THREAD_PRIORITY_BELOW_NORMAL },
-    { "Low", THREAD_PRIORITY_LOWEST },
-    { 0, -1 }
+    { "Above Normal", THREAD_PRIORITY_ABOVE_NORMAL, ABOVE_NORMAL_PRIORITY_CLASS },
+    { "Normal", THREAD_PRIORITY_NORMAL, NORMAL_PRIORITY_CLASS },
+    { "Below Normal", THREAD_PRIORITY_BELOW_NORMAL, BELOW_NORMAL_PRIORITY_CLASS },
+    { "Low", THREAD_PRIORITY_LOWEST, IDLE_PRIORITY_CLASS },
+    { 0 }
 };
 
 static int drvsampleres[] = {
index 583756d63dc3bfaddbceb49fa3be0823c163196f..951d86462b1f97194affb1b70ddafe2a2f38fd55 100755 (executable)
@@ -21,7 +21,7 @@ extern int manual_painting_needed;
 extern int manual_palette_refresh_needed;
 extern int mouseactive, focus;
 #define WINUAEBETA 1
-#define WINUAEBETASTR " Beta 9"
+#define WINUAEBETASTR " Beta 10b"
 
 extern void my_kbd_handler (int, int, int);
 extern void clearallkeys(void);
@@ -67,7 +67,6 @@ extern void sleep_millis_busy (int ms);
 extern void screenshot(int mode);
 extern void wait_keyrelease (void);
 extern void keyboard_settrans (void);
-extern void setpriority (int pri);
 
 extern void handle_rawinput (DWORD lParam);
 
@@ -75,8 +74,11 @@ extern void handle_rawinput (DWORD lParam);
 struct threadpriorities {
     char *name;
     int value;
+    int classvalue;
 };
 extern struct threadpriorities priorities[];
+extern void setpriority (struct threadpriorities *pri);
+
 extern int dinput_wmkey (uae_u32 key);
 extern int dinput_winmouse (void);
 
index f9d4b7da2339ae44953dca1c7fcc713cae3894a5..e28b9559debd3b6eb719074a00ff0ed9eacb685e 100755 (executable)
@@ -184,7 +184,8 @@ void S2X_render (void)
         dptr = (uae_u8*)desc.lpSurface;
        pitch = desc.lPitch;
     } else {
-       DirectDraw_SurfaceLock (lockable_surface);
+       if (!DirectDraw_SurfaceLock (lockable_surface))
+           return;
        dptr = DirectDraw_GetSurfacePointer ();
        pitch = DirectDraw_GetSurfacePitch ();
     }
index 3391a67344a98f6872d51f8c5fcb7ba946ef8e4f..5e07a7b75a814cc06ab2380d63074b9242192308 100755 (executable)
@@ -327,12 +327,10 @@ static int set_ddraw (void)
     if (ddrval != DD_OK)
        goto oops;
 
-    if (dxfullscreen) 
-    {
+    if (dxfullscreen)  {
         write_log( "set_ddraw: Trying %dx%d, bits=%d, refreshrate=%d\n", width, height, bits, freq );
         ddrval = DirectDraw_SetDisplayMode (width, height, bits, freq);
-        if (ddrval != DD_OK)
-        {
+        if (ddrval != DD_OK) {
            write_log ("set_ddraw: failed, trying without forced refresh rate\n");
             ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0);
            if (ddrval != DD_OK) {
@@ -342,8 +340,7 @@ static int set_ddraw (void)
         }
 
        ddrval = DirectDraw_GetDisplayMode();
-       if (ddrval != DD_OK)
-        {
+       if (ddrval != DD_OK) {
             write_log( "set_ddraw: Couldn't GetDisplayMode()\n" );
            goto oops;
         }
@@ -356,63 +353,57 @@ static int set_ddraw (void)
 
     if (dd) {
         ddrval = DirectDraw_CreateClipper();
-        if (ddrval != DD_OK)
-       {
+        if (ddrval != DD_OK) {
            write_log( "set_ddraw: No clipping support\n" );
            goto oops;
        }
        ddrval = DirectDraw_CreateSurface (width, height);
-       if (ddrval != DD_OK)
-       {
+       if (ddrval != DD_OK) {
            write_log( "set_ddraw: Couldn't CreateSurface() for primary because %s.\n", DXError( ddrval ) );
            goto oops;
        }
-       if (DirectDraw_GetPrimaryBitCount() != (unsigned)bits && overlay)
-       {
+       if (DirectDraw_GetPrimaryBitCount() != (unsigned)bits && overlay) {
            ddrval = DirectDraw_CreateOverlaySurface (width, height, bits);
            if( ddrval != DD_OK )
            {
                write_log( "set_ddraw: Couldn't CreateOverlaySurface(%d,%d,%d) because %s.\n", width, height, bits, DXError( ddrval ) );
                goto oops2;
            }
-       }
-       else
-       {
+       } else {
            overlay = 0;
        }
 
         DirectDraw_ClearSurfaces();
 
-       if( !DirectDraw_DetermineLocking( dxfullscreen ) )
+       if (!DirectDraw_DetermineLocking (dxfullscreen))
        {
            write_log( "set_ddraw: Couldn't determine locking.\n" );
            goto oops;
        }
 
-       ddrval = DirectDraw_SetClipper( hAmigaWnd );
+       ddrval = DirectDraw_SetClipper (hAmigaWnd);
 
-       if (ddrval != DD_OK)
-       {
+       if (ddrval != DD_OK) {
            write_log( "set_ddraw: Couldn't SetHWnd()\n" );
            goto oops;
        }
 
         if (bits == 8) {
-           ddrval = DirectDraw_CreatePalette( currentmode->pal );
+           ddrval = DirectDraw_CreatePalette (currentmode->pal);
            if (ddrval != DD_OK)
            {
                write_log( "set_ddraw: Couldn't CreatePalette()\n" );
                goto oops;
            }
        }
-       currentmode->pitch = DirectDraw_GetSurfacePitch();
+       currentmode->pitch = DirectDraw_GetSurfacePitch ();
     }
 
-    write_log( "set_ddraw() called, and is %dx%d@%d-bytes\n", width, height, bits );
+    write_log ("set_ddraw() called, and is %dx%d@%d-bytes\n", width, height, bits);
     return 1;
 
 oops:
-    write_log("set_ddraw(): DirectDraw initialization failed with\n%s\n", DXError( ddrval ));
+    write_log ("set_ddraw(): DirectDraw initialization failed with\n%s\n", DXError (ddrval));
 oops2:
     return 0;
 }
@@ -1065,7 +1056,7 @@ int check_prefs_changed_gfx (void)
        resume_sound ();
        inputdevice_acquire (mouseactive);
 #ifndef _DEBUG
-       setpriority (priorities[currprefs.win32_active_priority].value);
+       setpriority (&priorities[currprefs.win32_active_priority]);
 #endif
        return 1;
     }
@@ -1661,6 +1652,7 @@ static int create_windows (void)
 {
     int fs = currentmode->flags & (DM_W_FULLSCREEN | DM_DX_FULLSCREEN | DM_D3D_FULLSCREEN);
     DWORD exstyle = currprefs.win32_notaskbarbutton ? 0 : WS_EX_APPWINDOW;
+    HWND hhWnd = currprefs.win32_notaskbarbutton ? hHiddenWnd : NULL;
 
     if (!fs)  {
         RECT rc;
@@ -1713,7 +1705,7 @@ static int create_windows (void)
                                       NORMAL_WINDOW_STYLE  | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
                                       rc.left, rc.top,
                                       rc.right - rc.left + 1, rc.bottom - rc.top + 1,
-                                      hHiddenWnd, NULL, 0, NULL);
+                                      hhWnd, NULL, 0, NULL);
 
        if (! hMainWnd) {
            write_log ("main window creation failed\n");
@@ -1731,7 +1723,7 @@ static int create_windows (void)
                                WS_CLIPCHILDREN | WS_CLIPSIBLINGS | (hMainWnd ? WS_VISIBLE | WS_CHILD : WS_VISIBLE | WS_POPUP),
                                hMainWnd ? 2 : CW_USEDEFAULT, hMainWnd ? 2 : CW_USEDEFAULT,
                                currentmode->current_width, currentmode->current_height,
-                               hMainWnd ? hMainWnd : hHiddenWnd, NULL, 0, NULL);
+                               hMainWnd ? hMainWnd : hhWnd, NULL, 0, NULL);
     
     if (! hAmigaWnd) {
        write_log ("creation of amiga window failed\n");
@@ -2074,13 +2066,14 @@ oops:
 void WIN32GFX_PaletteChange( void )
 {
     HRESULT hr;
+
     if (!(currentmode->flags & DM_DDRAW) || (currentmode->flags & DM_D3D)) return;
     if (currentmode->current_depth > 8)
        return;
-    hr = DirectDraw_SetPalette( 1 ); /* Remove current palette */
+    hr = DirectDraw_SetPalette (1); /* Remove current palette */
     if (hr != DD_OK)
        write_log ("SetPalette(1) failed, %s\n", DXError (hr));
-    hr = DirectDraw_SetPalette( 0 ); /* Set our real palette */
+    hr = DirectDraw_SetPalette (0); /* Set our real palette */
     if (hr != DD_OK)
        write_log ("SetPalette(0) failed, %s\n", DXError (hr));
 }
@@ -2091,7 +2084,7 @@ int WIN32GFX_ClearPalette( void )
     if (currentmode->current_depth > 8)
        return 1;
     if (!(currentmode->flags & DM_DDRAW) || (currentmode->flags & DM_D3D)) return 1;
-    hr = DirectDraw_SetPalette( 1 ); /* Remove palette */
+    hr = DirectDraw_SetPalette (1); /* Remove palette */
     if (hr != DD_OK)
        write_log ("SetPalette(1) failed, %s\n", DXError (hr));
     return hr == DD_OK;
@@ -2103,7 +2096,7 @@ int WIN32GFX_SetPalette( void )
     if (!(currentmode->flags & DM_DDRAW) || (currentmode->flags & DM_D3D)) return 1;
     if (currentmode->current_depth > 8)
        return 1;
-    hr = DirectDraw_SetPalette( 0 ); /* Set palette */
+    hr = DirectDraw_SetPalette (0); /* Set palette */
     if (hr != DD_OK)
        write_log ("SetPalette(0) failed, %s\n", DXError (hr));
     return hr == DD_OK;
@@ -2114,10 +2107,6 @@ void WIN32GFX_WindowMove ( void )
        setoverlay();
 }
 
-void WIN32GFX_WindowSize ( void )
-{
-}
-
 void updatedisplayarea (void)
 {
     if (picasso_on)
index 11a0497b0830b66fcf31149fd73d3ef3cb71f8f5..faeaae1e36102a7898502fcf493e22d5e677f0ba 100755 (executable)
@@ -286,7 +286,7 @@ static void show_rom_list (void)
     p2 = strchr (p1, '\n');
     if (!p2) goto end;
     *p2++= 0; strcat (p, p1); strcat (p, ": ");
-    roms[0] = 9; roms[1] = 10; roms[2] = -1;
+    roms[0] = 8; roms[1] = 9; roms[2] = 10; roms[3] = -1;
     if (listrom (roms)) strcat (p, avail); else strcat (p, unavail);
     p1 = p2;
 
@@ -399,6 +399,8 @@ struct ConfigStruct {
     char Name[MAX_DPATH];
     char Path[MAX_DPATH];
     char Fullpath[MAX_DPATH];
+    char HostLink[MAX_DPATH];
+    char HardwareLink[MAX_DPATH];
     char Description[CFG_DESCRIPTION_LENGTH];
     int Type, Directory;
     struct ConfigStruct *Parent, *Child;
@@ -432,7 +434,7 @@ static struct ConfigStruct *getconfigstorefrompath (char *path, char *out, int t
 int target_cfgfile_load (struct uae_prefs *p, char *filename, int type)
 {
     int v, i, type2;
-    DWORD ct, size;
+    DWORD ct, ct2, size;
     char tmp1[MAX_DPATH], tmp2[MAX_DPATH];
 
     if (type == 0 || type == 1) {
@@ -447,7 +449,8 @@ int target_cfgfile_load (struct uae_prefs *p, char *filename, int type)
     type2 = type;
     if (type == 0)
        default_prefs (p, type);
-    v = cfgfile_load (p, filename, &type2);
+    RegQueryValueEx (hWinUAEKey, "ConfigFile_NoAuto", 0, NULL, (LPBYTE)&ct2, &size);
+    v = cfgfile_load (p, filename, &type2, ct2);
     if (!v)
        return v;
     if (type > 0)
@@ -457,13 +460,13 @@ int target_cfgfile_load (struct uae_prefs *p, char *filename, int type)
            size = sizeof (ct);
            ct = 0;
            RegQueryValueEx (hWinUAEKey, configreg2[i], 0, NULL, (LPBYTE)&ct, &size);
-           if (ct) {
+           if (ct && ((i == 1 && p->config_hardware_path[0] == 0) || (i == 2 && p->config_host_path[0] == 0) || ct2)) {
                size = sizeof (tmp1);
                RegQueryValueEx (hWinUAEKey, configreg[i], 0, NULL, (LPBYTE)tmp1, &size);
                fetch_path ("ConfigurationPath", tmp2, sizeof (tmp2));
                strcat (tmp2, tmp1);
                v = i;
-               cfgfile_load (p, tmp2, &v);
+               cfgfile_load (p, tmp2, &v, 1);
            }
        }
     }
@@ -876,10 +879,9 @@ int DiskSelection( HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs,
            }
            else
            {
-               int type;
-               cfgfile_get_description (full_path, description, &type);
-               SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, description);
+               SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, workprefs.description);
                SetDlgItemText (hDlg, IDC_EDITNAME, full_path);
+               SetDlgItemText (hDlg, IDC_CONFIGLINK, workprefs.config_host_path);
            }
             break;
        case IDC_SAVE:
@@ -1117,7 +1119,7 @@ static struct ConfigStruct *GetConfigs (struct ConfigStruct *configparent, int u
                if (strlen (find_data.cFileName) > 4 && !strcasecmp (find_data.cFileName + strlen (find_data.cFileName) - 4, ".uae")) {
                    strcpy (path3, path);
                    strncat (path3, find_data.cFileName, MAX_DPATH);
-                   if (cfgfile_get_description (path3, config->Description, &config->Type)) {
+                   if (cfgfile_get_description (path3, config->Description, config->HostLink, config->HardwareLink, &config->Type)) {
                        strcpy (config->Name, find_data.cFileName);
                        ok = 1;
                    }
@@ -1194,7 +1196,8 @@ static char *HandleConfiguration (HWND hDlg, int flag, struct ConfigStruct *conf
            strcat (name, ".uae");
            SetDlgItemText (hDlg, IDC_EDITNAME, name);
        }
-       strcpy (config->Name, name);
+       if (config)
+           strcpy (config->Name, name);
     }
     GetDlgItemText (hDlg, IDC_EDITDESCRIPTION, desc, MAX_DPATH);
     if (config) {
@@ -1315,7 +1318,7 @@ static int disk_swap (int entry, int col)
     return 1;
 }
 
-static int input_selected_device, input_selected_widget;
+static int input_selected_device, input_selected_widget, input_total_devices;
 static int input_selected_event, input_selected_sub_num;
 
 static void set_lventry_input (HWND list, int index)
@@ -1344,6 +1347,8 @@ static void set_lventry_input (HWND list, int index)
 static void update_listview_input (HWND hDlg)
 {
     int i;
+    if (!input_total_devices)
+       return;
     for (i = 0; i < inputdevice_get_widget_num (input_selected_device); i++)
        set_lventry_input (GetDlgItem (hDlg, IDC_INPUTLIST), i);
 }
@@ -1431,7 +1436,7 @@ void InitializeListView( HWND hDlg )
     }
     if (lv_type == LV_INPUT)
     {
-       for (i = 0; i < inputdevice_get_widget_num (input_selected_device); i++) {
+       for (i = 0; input_total_devices && i < inputdevice_get_widget_num (input_selected_device); i++) {
            char name[100];
            inputdevice_get_widget_type (input_selected_device, i, name);
            lvstruct.mask     = LVIF_TEXT | LVIF_PARAM;
@@ -1782,6 +1787,38 @@ static int LoadConfigTreeView (HWND hDlg, int idx, HTREEITEM parent)
     return cnt;
 }
 
+static void InitializeConfig (HWND hDlg, struct ConfigStruct *config)
+{
+    int i, j, idx1, idx2;
+
+    if (config == NULL) {
+       SetDlgItemText (hDlg, IDC_EDITNAME, "");
+       SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, "");
+    } else {
+        SetDlgItemText (hDlg, IDC_EDITNAME, config->Name);
+        SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, config->Description);
+    }
+    SendDlgItemMessage (hDlg, IDC_CONFIGLINK, CB_RESETCONTENT, 0, 0L);
+    SendDlgItemMessage (hDlg, IDC_CONFIGLINK, CB_ADDSTRING, 0, (LPARAM)"");
+    idx1 = 1;
+    idx2 = 0;
+    for (j = 0; j < 2; j++) {
+       for (i = 0; i < configstoresize; i++) {
+           struct ConfigStruct *cs = configstore[i];
+           if ((j == 0 && cs->Type == CONFIG_TYPE_HOST) || (j == 1 && cs->Type == CONFIG_TYPE_HARDWARE)) {
+               char tmp2[MAX_DPATH];
+               strcpy (tmp2, configstore[i]->Path);
+               strncat (tmp2, configstore[i]->Name, MAX_DPATH);
+               SendDlgItemMessage (hDlg, IDC_CONFIGLINK, CB_ADDSTRING, 0, (LPARAM)tmp2);
+               if (config && (!strcmpi (tmp2, config->HardwareLink) || !strcmpi (tmp2, config->HostLink)))
+                   idx2 = idx1;
+               idx1++;
+           }
+       }
+    }
+    SendDlgItemMessage (hDlg, IDC_CONFIGLINK, CB_SETCURSEL, idx2, 0);
+}
+
 static HTREEITEM InitializeConfigTreeView (HWND hDlg)
 {
     HIMAGELIST himl = ImageList_Create (16, 16, ILC_COLOR8 | ILC_MASK, 3, 0);
@@ -1818,11 +1855,14 @@ static void ConfigToRegistry (struct ConfigStruct *config, int type)
        RegSetValueEx (hWinUAEKey, configreg[type], 0, REG_SZ, (CONST BYTE *)path, strlen(path) + 1);
     }
 }
-static void ConfigToRegistry2 (DWORD ct, int type)
+static void ConfigToRegistry2 (DWORD ct, int type, DWORD noauto)
 {
-    if (hWinUAEKey && type > 0) {
+    if (!hWinUAEKey)
+       return;
+    if (type > 0)
        RegSetValueEx (hWinUAEKey, configreg2[type], 0, REG_DWORD, (CONST BYTE *)&ct, sizeof (ct));
-    }
+    if (noauto >= 0)
+       RegSetValueEx (hWinUAEKey, "ConfigFile_NoAuto", 0, REG_DWORD, (CONST BYTE *)&noauto, sizeof (noauto));
 }
 
 static void checkautoload (HWND hDlg, struct ConfigStruct *config)
@@ -1835,10 +1875,12 @@ static void checkautoload (HWND hDlg, struct ConfigStruct *config)
        RegQueryValueEx (hWinUAEKey, configreg2[configtypepanel], 0, &dwType, (LPBYTE)&ct, &dwRFPsize);
     if (!config || config->Directory) {
        ct = 0;
-       ConfigToRegistry2 (ct, configtypepanel);
+       ConfigToRegistry2 (ct, configtypepanel, -1);
     }
     CheckDlgButton(hDlg, IDC_CONFIGAUTO, ct ? BST_CHECKED : BST_UNCHECKED);
     EnableWindow (GetDlgItem (hDlg, IDC_CONFIGAUTO), configtypepanel > 0 && config && !config->Directory ? TRUE : FALSE);
+    RegQueryValueEx (hWinUAEKey, "ConfigFile_NoAuto", 0, &dwType, (LPBYTE)&ct, &dwRFPsize);
+    CheckDlgButton(hDlg, IDC_CONFIGNOLINK, ct ? BST_CHECKED : BST_UNCHECKED);
 }
 
 static struct ConfigStruct *fixloadconfig (HWND hDlg, struct ConfigStruct *config)
@@ -1858,14 +1900,45 @@ static struct ConfigStruct *fixloadconfig (HWND hDlg, struct ConfigStruct *confi
     return config;
 }
 
-static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static struct ConfigStruct *initloadsave (HWND hDlg, struct ConfigStruct *config)
 {
+    HTREEITEM root;
     char name_buf[MAX_DPATH];
+
+    EnableWindow (GetDlgItem( hDlg, IDC_VIEWINFO ), workprefs.info[0]);
+    SetDlgItemText (hDlg, IDC_EDITNAME, config_filename);
+    SetDlgItemText (hDlg, IDC_EDITPATH, "");
+    SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, workprefs.description);
+    root = InitializeConfigTreeView (hDlg);
+    if (hWinUAEKey) {
+        DWORD dwType = REG_SZ;
+        DWORD dwRFPsize = sizeof (name_buf);
+        char path[MAX_DPATH];
+        if (RegQueryValueEx (hWinUAEKey, configreg[configtypepanel], 0, &dwType, (LPBYTE)name_buf, &dwRFPsize) == ERROR_SUCCESS) {
+           struct ConfigStruct *config2 = getconfigstorefrompath (name_buf, path, configtypepanel);
+           if (config2)
+               config = config2;
+       }
+       checkautoload (hDlg, config);
+    }
+    config = fixloadconfig (hDlg, config);
+    if (config && config->item)
+        TreeView_SelectItem (GetDlgItem(hDlg, IDC_CONFIGTREE), config->item);
+    else
+        TreeView_SelectItem (GetDlgItem(hDlg, IDC_CONFIGTREE), root);
+    EnableWindow (GetDlgItem(hDlg, IDC_CONFIGAUTO), configtypepanel > 0);
+    EnableWindow (GetDlgItem(hDlg, IDC_CONFIGLINK), configtypepanel == 0);
+    EnableWindow (GetDlgItem(hDlg, IDC_CONFIGNOLINK), configtypepanel == 0);
+    return config;
+}
+
+static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
     char *cfgfile;
+    int val;
     static int recursive;
-    HTREEITEM root;
     static struct ConfigStruct *config;
-    
+
     switch (msg)
     {
     case WM_INITDIALOG:
@@ -1876,28 +1949,7 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
        }
        pages[LOADSAVE_ID] = hDlg;
        currentpage = LOADSAVE_ID;
-       EnableWindow (GetDlgItem( hDlg, IDC_VIEWINFO ), workprefs.info[0]);
-       SetDlgItemText (hDlg, IDC_EDITNAME, config_filename);
-       SetDlgItemText (hDlg, IDC_EDITPATH, "");
-       SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, workprefs.description);
-       root = InitializeConfigTreeView (hDlg);
-       if (hWinUAEKey) {
-           DWORD dwType = REG_SZ;
-           DWORD dwRFPsize = sizeof (name_buf);
-           char path[MAX_DPATH];
-           if (RegQueryValueEx (hWinUAEKey, configreg[configtypepanel], 0, &dwType, (LPBYTE)name_buf, &dwRFPsize) == ERROR_SUCCESS) {
-               struct ConfigStruct *config2 = getconfigstorefrompath (name_buf, path, configtypepanel);
-               if (config2)
-                   config = config2;
-           }
-           checkautoload (hDlg, config);
-       }
-       config = fixloadconfig (hDlg, config);
-       if (config && config->item)
-           TreeView_SelectItem (GetDlgItem(hDlg, IDC_CONFIGTREE), config->item);
-       else
-           TreeView_SelectItem (GetDlgItem(hDlg, IDC_CONFIGTREE), root);
-       ShowWindow (GetDlgItem(hDlg, IDC_CONFIGAUTO), configtypepanel > 0 ? SW_SHOW : SW_HIDE);
+       config = initloadsave (hDlg, config);
        recursive--;
        return TRUE;
 
@@ -1905,29 +1957,30 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
        break;
        
     case WM_COMMAND:
+    {
+       recursive++;
         switch (LOWORD (wParam))
         {
            case IDC_SAVE:
                HandleConfiguration (hDlg, CONFIG_SAVE_FULL, config);
-               recursive++;
                config = CreateConfigStore (config);
                config = fixloadconfig (hDlg, config);
                ConfigToRegistry (config, configtypepanel);
                InitializeConfigTreeView (hDlg);
-               recursive--;
+               InitializeConfig (hDlg, config);
            break;
            case IDC_QUICKSAVE:
                HandleConfiguration (hDlg, CONFIG_SAVE, config);
-               recursive++;
                config = CreateConfigStore (config);
                config = fixloadconfig (hDlg, config);
                ConfigToRegistry (config, configtypepanel);
                InitializeConfigTreeView (hDlg);
-               recursive--;
+               InitializeConfig (hDlg, config);
            break;
            case IDC_QUICKLOAD:
                cfgfile = HandleConfiguration (hDlg, CONFIG_LOAD, config);
                ConfigToRegistry (config, configtypepanel);
+               InitializeConfig (hDlg, config);
                if (full_property_sheet) {
                    inputdevice_updateconfig (&workprefs);
                } else {
@@ -1938,6 +1991,7 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
            case IDC_LOAD:
                cfgfile = HandleConfiguration (hDlg, CONFIG_LOAD_FULL, config);
                ConfigToRegistry (config, configtypepanel);
+               InitializeConfig (hDlg, config);
                if (full_property_sheet) {
                    inputdevice_updateconfig (&workprefs);
                } else {
@@ -1947,20 +2001,18 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
            break;
            case IDC_DELETE:
                HandleConfiguration (hDlg, CONFIG_DELETE, config);
-               recursive++;
                config = CreateConfigStore (config);
                config = fixloadconfig (hDlg, config);
                InitializeConfigTreeView (hDlg);
-               recursive--;
            break;
            case IDC_VIEWINFO:
-               if (workprefs.info[0])
-               {
-                   if (strstrworkprefs.info, "Configurations\\"))
-                       sprintf( name_buf, "%s\\%s", start_path, workprefs.info );
+               if (workprefs.info[0]) {
+                   char name_buf[MAX_DPATH];
+                   if (strstr (workprefs.info, "Configurations\\"))
+                       sprintf (name_buf, "%s\\%s", start_path, workprefs.info);
                    else
-                       strcpy( name_buf, workprefs.info );
-                   ShellExecute( NULL, NULL, name_buf, NULL, NULL, SW_SHOWNORMAL );
+                       strcpy (name_buf, workprefs.info);
+                   ShellExecute (NULL, NULL, name_buf, NULL, NULL, SW_SHOWNORMAL);
                }
            break;
            case IDC_SETINFO:
@@ -1970,66 +2022,89 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
            case IDC_CONFIGAUTO:
            if (configtypepanel > 0) {
                int ct = IsDlgButtonChecked (hDlg, IDC_CONFIGAUTO) == BST_CHECKED ? 1 : 0;
-               ConfigToRegistry2 (ct, configtypepanel);
+               ConfigToRegistry2 (ct, configtypepanel, -1);
+           }
+           break;
+           case IDC_CONFIGNOLINK:
+           if (configtypepanel == 0) {
+               int ct = IsDlgButtonChecked (hDlg, IDC_CONFIGNOLINK) == BST_CHECKED ? 1 : 0;
+               ConfigToRegistry2 (-1, -1, ct);
+           }
+           break;
+           case IDC_CONFIGLINK:
+           if (HIWORD (wParam) == CBN_SELCHANGE || HIWORD (wParam) == CBN_KILLFOCUS)  {
+               char tmp[MAX_DPATH];
+               tmp[0] = 0;
+               val = SendDlgItemMessage (hDlg, IDC_CONFIGLINK, CB_GETCURSEL, 0, 0L);
+               if (val == CB_ERR)
+                   SendDlgItemMessage (hDlg, IDC_CONFIGLINK, WM_GETTEXT, (WPARAM)sizeof(tmp), (LPARAM)tmp);
+               else
+                   SendDlgItemMessage (hDlg, IDC_CONFIGLINK, CB_GETLBTEXT, (WPARAM)val, (LPARAM)tmp);
+               strcpy (workprefs.config_host_path, tmp);
            }
            break;
        }
+       recursive++;
        break;
-       
-       case WM_NOTIFY:
-       {
-           LPNMHDR nm = (LPNMHDR)lParam;
-           if (nm->hwndFrom == GetDlgItem( hDlg, IDC_CONFIGTREE)) {
-               switch (nm->code)
-               {
-                   case NM_DBLCLK:
-                   {
-                       HTREEITEM ht = TreeView_GetSelection (GetDlgItem(hDlg, IDC_CONFIGTREE));
-                       if (ht != NULL) {
-                           TVITEMEX pitem;
-                           memset (&pitem, 0, sizeof (pitem));
-                           pitem.mask = TVIF_HANDLE | TVIF_PARAM;
-                           pitem.hItem = ht;
-                           if (TreeView_GetItem (GetDlgItem(hDlg, IDC_CONFIGTREE), &pitem)) {
-                               struct ConfigStruct *config = (struct ConfigStruct*)pitem.lParam;
-                               if (config && !config->Directory) {
-                                   cfgfile = HandleConfiguration (hDlg, CONFIG_LOAD, config);
-                                   ConfigToRegistry (config, configtypepanel);
-                                   if (!full_property_sheet)
-                                       uae_restart (0, cfgfile);
-                                   exit_gui (1);
-                               }
+    }
+
+    case WM_NOTIFY:
+    {
+        LPNMHDR nm = (LPNMHDR)lParam;
+        if (nm->hwndFrom == GetDlgItem (hDlg, IDC_CONFIGTREE)) {
+           switch (nm->code)
+           {
+               case NM_DBLCLK:
+               {
+                   HTREEITEM ht = TreeView_GetSelection (GetDlgItem(hDlg, IDC_CONFIGTREE));
+                   if (ht != NULL) {
+                       TVITEMEX pitem;
+                       memset (&pitem, 0, sizeof (pitem));
+                       pitem.mask = TVIF_HANDLE | TVIF_PARAM;
+                       pitem.hItem = ht;
+                       if (TreeView_GetItem (GetDlgItem(hDlg, IDC_CONFIGTREE), &pitem)) {
+                           struct ConfigStruct *config = (struct ConfigStruct*)pitem.lParam;
+                           if (config && !config->Directory) {
+                               cfgfile = HandleConfiguration (hDlg, CONFIG_LOAD, config);
+                               ConfigToRegistry (config, configtypepanel);
+                               if (!full_property_sheet)
+                                   uae_restart (0, cfgfile);
+                               exit_gui (1);
                            }
                        }
-                       return TRUE;
                    }
-                   break;
-                   case TVN_SELCHANGING:
-                   return FALSE;
-                   case TVN_SELCHANGED:
-                   {
-                       LPNMTREEVIEW tv = (LPNMTREEVIEW)lParam;
-                       struct ConfigStruct *c = (struct ConfigStruct*)tv->itemNew.lParam;
-                       if (c) {
-                           config = c;
-                           if (!config->Directory) {
-                               SetDlgItemText (hDlg, IDC_EDITNAME, config->Name);
-                               SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, config->Description);
-                           }
-                           SetDlgItemText (hDlg, IDC_EDITPATH, config->Path);
+                   return TRUE;
+               }
+               break;
+               case TVN_SELCHANGING:
+               return FALSE;
+               case TVN_SELCHANGED:
+               {
+                   LPNMTREEVIEW tv = (LPNMTREEVIEW)lParam;
+                   struct ConfigStruct *c = (struct ConfigStruct*)tv->itemNew.lParam;
+                   if (c) {
+                       config = c;
+                       if (!config->Directory) {
+                           InitializeConfig (hDlg, config);
+                       } else {
+                           InitializeConfig (hDlg, NULL);
+                       }               
+                       SetDlgItemText (hDlg, IDC_EDITPATH, config->Path);
+                   }
+                   if (configtypepanel > 0) {
+                       if (c && !c->Directory) {
+                           ConfigToRegistry (config, configtypepanel);
+                           InitializeConfig (hDlg, config);
                        }
-                       if (configtypepanel > 0) {
-                           if (c && !c->Directory)
-                               ConfigToRegistry (config, configtypepanel);
-                           checkautoload (hDlg, c);
-                       }
-                       return TRUE;
+                       checkautoload (hDlg, c);
                    }
-                   break;
+                   return TRUE;
                }
+               break;
            }
-           break;
        }
+       break;
+    }
     }
     
     return FALSE;
@@ -2246,11 +2321,15 @@ static BOOL CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
                if (tmp[strlen (tmp) - 1] != '\\')
                    strcat (tmp, "\\");
                if (!scan_roms (tmp)) 
-                   pre_gui_message ("No ROMs found");
+                   gui_message_id (IDS_ROMSCANNOROMS);
                set_path ("KickstartPath", tmp);
                values_to_pathsdialog (hDlg);
            }
            break;
+           case IDC_PATHS_ROM:
+           GetWindowText (GetDlgItem (hDlg, IDC_PATHS_ROM), tmp, sizeof (tmp));
+           set_path ("KickstartPath", tmp);
+           break;
            case IDC_PATHS_CONFIGS:
            fetch_path ("ConfigurationPath", tmp, sizeof (tmp));
            if (DirectorySelection (hDlg, 0, tmp)) {
@@ -2259,6 +2338,11 @@ static BOOL CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
                FreeConfigStore ();
            }
            break;
+           case IDC_PATHS_CONFIG:
+           GetWindowText (GetDlgItem (hDlg, IDC_PATHS_CONFIG), tmp, sizeof (tmp));
+           set_path ("ConfigurationPath", tmp);
+           FreeConfigStore ();
+           break;
            case IDC_PATHS_SCREENSHOTS:
            fetch_path ("ScreenshotPath", tmp, sizeof (tmp));
            if (DirectorySelection (hDlg, 0, tmp)) {
@@ -2266,6 +2350,10 @@ static BOOL CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
                values_to_pathsdialog (hDlg);
            }
            break;
+           case IDC_PATHS_SCREENSHOT:
+           GetWindowText (GetDlgItem (hDlg, IDC_PATHS_SCREENSHOT), tmp, sizeof (tmp));
+           set_path ("ScreenshotPath", tmp);
+           break;
            case IDC_PATHS_SAVESTATES:
            fetch_path ("StatefilePath", tmp, sizeof (tmp));
            if (DirectorySelection (hDlg, 0, tmp)) {
@@ -2273,6 +2361,10 @@ static BOOL CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
                values_to_pathsdialog (hDlg);
            }
            break;
+           case IDC_PATHS_SAVESTATE:
+           GetWindowText (GetDlgItem (hDlg, IDC_PATHS_SAVESTATE), tmp, sizeof (tmp));
+           set_path ("StatefilePath", tmp);
+           break;
            case IDC_PATHS_SAVEIMAGES:
            fetch_path ("SaveimagePath", tmp, sizeof (tmp));
            if (DirectorySelection (hDlg, 0, tmp)) {
@@ -2280,6 +2372,10 @@ static BOOL CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
                values_to_pathsdialog (hDlg);
            }
            break;
+           case IDC_PATHS_SAVEIMAGE:
+           GetWindowText (GetDlgItem (hDlg, IDC_PATHS_SAVEIMAGE), tmp, sizeof (tmp));
+           set_path ("SaveimagePath", tmp);
+           break;
            case IDC_PATHS_AVIOUTPUTS:
            fetch_path ("VideoPath", tmp, sizeof (tmp));
            if (DirectorySelection (hDlg, 0, tmp)) {
@@ -2287,6 +2383,10 @@ static BOOL CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
                values_to_pathsdialog (hDlg);
            }
            break;
+           case IDC_PATHS_AVIOUTPUT:
+           GetWindowText (GetDlgItem (hDlg, IDC_PATHS_AVIOUTPUT), tmp, sizeof (tmp));
+           set_path ("VideoPath", tmp);
+           break;
            case IDC_PATHS_DEFAULT:
            set_path ("KickstartPath", NULL);
            set_path ("ConfigurationPath", NULL);
@@ -2352,7 +2452,7 @@ static void quickstarthost (HWND hDlg, char *name)
     char tmp[MAX_DPATH];
 
     if (getconfigstorefrompath (name, tmp, CONFIG_TYPE_HOST))
-       cfgfile_load (&workprefs, tmp, &type);
+       cfgfile_load (&workprefs, tmp, &type, 1);
 }
 
 static void init_quickstartdlg_tooltip (HWND hDlg, char *tt)
@@ -2376,11 +2476,11 @@ static void init_quickstartdlg (HWND hDlg)
     static int firsttime;
     int i, j, idx, idx2;
     DWORD dwType, qssize;
-    char tmp1[2 * MAX_DPATH], tmp2[MAX_DPATH];
+    char tmp1[2 * MAX_DPATH], tmp2[MAX_DPATH], hostconf[MAX_DPATH];
     char *p1, *p2;
 
     qssize = sizeof (tmp1);
-    RegQueryValueEx (hWinUAEKey, "QuickStartHostConfig", 0, &dwType, (LPBYTE)tmp1, &qssize);
+    RegQueryValueEx (hWinUAEKey, "QuickStartHostConfig", 0, &dwType, (LPBYTE)hostconf, &qssize);
     if (firsttime == 0) {
         if (hWinUAEKey) {
            qssize = sizeof (quickstart_model);
@@ -2391,7 +2491,7 @@ static void init_quickstartdlg (HWND hDlg)
            RegQueryValueEx (hWinUAEKey, "QuickStartCompatibility", 0, &dwType, (LPBYTE)&quickstart_compa, &qssize);
        }
        if (quickstart) {
-           quickstarthost (hDlg, tmp1);
+           quickstarthost (hDlg, hostconf);
            workprefs.df[0][0] = 0;
            workprefs.df[1][0] = 0;
            workprefs.df[2][0] = 0;
@@ -2470,7 +2570,7 @@ static void init_quickstartdlg (HWND hDlg)
        if (configstore[i]->Type == CONFIG_TYPE_HOST) {
            strcpy (tmp2, configstore[i]->Path);
            strncat (tmp2, configstore[i]->Name, MAX_DPATH);
-           if (!strcmp (tmp2, tmp1))
+           if (!strcmp (tmp2, hostconf))
                idx = j;
            SendDlgItemMessage (hDlg, IDC_QUICKSTART_HOSTCONFIG, CB_ADDSTRING, 0, (LPARAM)tmp2);
            j++;
@@ -3695,6 +3795,7 @@ static void init_kickstart (HWND hDlg)
 static BOOL CALLBACK KickstartDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 {
     static int recursive;
+    char tmp[MAX_DPATH];
 
     switch( msg ) 
     {
@@ -3735,6 +3836,10 @@ static BOOL CALLBACK KickstartDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA
            DiskSelection( hDlg, IDC_FLASHFILE, 11, &workprefs, 0);
            values_to_kickstartdlg (hDlg);
            break;
+       case IDC_FLASHFILE:
+           GetWindowText (GetDlgItem (hDlg, IDC_FLASHFILE), tmp, sizeof (tmp));
+           strcpy (workprefs.flashfile, tmp);
+           break;
 
        case IDC_CARTCHOOSER:
            DiskSelection( hDlg, IDC_CARTFILE, 6, &workprefs, 0);
@@ -3773,13 +3878,13 @@ static void enable_for_miscdlg (HWND hDlg)
         EnableWindow (GetDlgItem (hDlg, IDC_DOSAVESTATE), TRUE);
         EnableWindow (GetDlgItem (hDlg, IDC_ASPI), FALSE);
         EnableWindow (GetDlgItem (hDlg, IDC_SCSIDEVICE), FALSE);
-        EnableWindow (GetDlgItem (hDlg, IDC_CLOCKSYNC), FALSE);
+        //EnableWindow (GetDlgItem (hDlg, IDC_CLOCKSYNC), FALSE);
         EnableWindow (GetDlgItem (hDlg, IDC_STATE_CAPTURE), FALSE);
         EnableWindow (GetDlgItem (hDlg, IDC_STATE_RATE), FALSE);
         EnableWindow (GetDlgItem (hDlg, IDC_STATE_BUFFERSIZE), FALSE);
     } else {
 #if !defined (FILESYS)
-        EnableWindow (GetDlgItem(hDlg, IDC_CLOCKSYNC), FALSE);
+        //EnableWindow (GetDlgItem(hDlg, IDC_CLOCKSYNC), FALSE);
 #endif
 #if !defined (BSDSOCKET)
         EnableWindow (GetDlgItem(hDlg, IDC_SOCKETS), FALSE);
@@ -3863,7 +3968,7 @@ static void values_to_miscdlg (HWND hDlg)
     CheckDlgButton (hDlg, IDC_ASPI, workprefs.win32_aspi);
     CheckDlgButton (hDlg, IDC_STATE_CAPTURE, workprefs.tod_hack);
 
-    if (!os_winnt) {
+    if (!os_winnt || !os_winnt_admin) {
        EnableWindow( GetDlgItem( hDlg, IDC_ASPI), FALSE );
        CheckDlgButton( hDlg, IDC_ASPI, BST_CHECKED );
     }
@@ -4538,7 +4643,7 @@ static void values_from_sounddlg (HWND hDlg)
     if (workprefs.sound_stereo > 0) {
         idx = SendDlgItemMessage (hDlg, IDC_SOUNDSTEREOSEP, CB_GETCURSEL, 0, 0);
        if (idx >= 0) {
-           if (idx < 10)
+           if (idx 0)
                workprefs.sound_mixed_stereo = -1;
            workprefs.sound_stereo_separation = (10 - idx) * 3;
        }
@@ -6128,7 +6233,7 @@ static void values_to_inputdlg (HWND hDlg)
     SetDlgItemInt( hDlg, IDC_INPUTSPEEDD, workprefs.input_joymouse_speed, FALSE );
     SetDlgItemInt( hDlg, IDC_INPUTSPEEDA, workprefs.input_joymouse_multiplier, FALSE );
     SetDlgItemInt( hDlg, IDC_INPUTSPEEDM, workprefs.input_mouse_speed, FALSE );
-    CheckDlgButton ( hDlg, IDC_INPUTDEVICEDISABLE, inputdevice_get_device_status (input_selected_device) ? BST_CHECKED : BST_UNCHECKED);
+    CheckDlgButton ( hDlg, IDC_INPUTDEVICEDISABLE, (!input_total_devices || inputdevice_get_device_status (input_selected_device)) ? BST_CHECKED : BST_UNCHECKED);
 }
 
 static void init_inputdlg_2( HWND hDlg )
@@ -6205,6 +6310,9 @@ static void init_inputdlg( HWND hDlg )
     for (i = 0; i < inputdevice_get_device_total (IDTYPE_KEYBOARD); i++) {
        SendDlgItemMessage (hDlg, IDC_INPUTDEVICE, CB_ADDSTRING, 0, (LPARAM)inputdevice_get_device_name(IDTYPE_KEYBOARD, i));
     }
+    input_total_devices = inputdevice_get_device_total (IDTYPE_JOYSTICK) +
+       inputdevice_get_device_total (IDTYPE_MOUSE) +
+       inputdevice_get_device_total (IDTYPE_KEYBOARD);
     InitializeListView(hDlg);
     init_inputdlg_2 (hDlg);
     values_to_inputdlg (hDlg);
diff --git a/zfile.c b/zfile.c
index 9a0c55a4d6a92de7e021bcd4ead500d0f968e2c0..d8da787b2a512733b65bf5c2678e764cc024f9b0 100755 (executable)
--- a/zfile.c
+++ b/zfile.c
@@ -4,7 +4,7 @@
   * routines to handle compressed file automatically
   *
   * (c) 1996 Samuel Devulder, Tim Gunn
-  *     2002 Toni Wilen
+  *     2002-2004 Toni Wilen
   */
 
 #include "sysconfig.h"