]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1440b5.zip
authorToni Wilen <twilen@winuae.net>
Sat, 8 Sep 2007 10:28:52 +0000 (13:28 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:35:38 +0000 (21:35 +0200)
20 files changed:
a2091.c
akiko.c
cfgfile.c
filesys.c
filesys_bootrom.c
hardfile.c
include/filesys.h
include/options.h
newcpu.c
od-win32/bsdsock.c
od-win32/hardfile_win32.c
od-win32/resources/resource
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.c
od-win32/win32.h
od-win32/win32_filesys.c
od-win32/win32gfx.c
od-win32/win32gui.c
od-win32/winuaechangelog.txt

diff --git a/a2091.c b/a2091.c
index b3da2ce5c30ffab075c01b7741aa99d5a8827802..f1258df40818ec475e2388ee226d9ade7f03a26e 100755 (executable)
--- a/a2091.c
+++ b/a2091.c
@@ -1295,7 +1295,7 @@ void a2091_init (void)
     roms[2] = 53;
     roms[3] = 56;
     roms[4] = -1;
-    roms[0] = 56;
+    //roms[0] = 56;
 
     rombankswitcher = 0;
     rombank = 0;
diff --git a/akiko.c b/akiko.c
index c982494a7351960223d708a0d3a96d538c2016ce..0c6c676fb8e4d2b309f237d15713274b3fc05277 100755 (executable)
--- a/akiko.c
+++ b/akiko.c
@@ -376,6 +376,7 @@ static int cdrom_data_offset, cdrom_speed, cdrom_sector_counter;
 static int cdrom_current_sector;
 static int cdrom_data_end, cdrom_leadout;
 static int cdrom_dosomething;
+static int cdrom_audiotimeout;
 
 static uae_u8 *sector_buffer_1, *sector_buffer_2;
 static int sector_buffer_sector_1, sector_buffer_sector_2;
@@ -438,6 +439,7 @@ static void cdaudiostop (void)
     sys_command_cd_pause (DF_IOCTL, unitnum, 0);
     sys_command_cd_stop (DF_IOCTL, unitnum);
     sys_command_cd_pause (DF_IOCTL, unitnum, 1);
+    cdrom_audiotimeout = 0;
 }
 
 static uae_u32 last_play_end;
@@ -475,6 +477,7 @@ static int cd_play_audio (uae_u32 startmsf, uae_u32 endmsf, int scan)
 #endif
 #endif
     last_play_end = endmsf;
+    cdrom_audiotimeout = 0;
     return sys_command_cd_play (DF_IOCTL, unitnum, startmsf, endmsf, scan);
 }
 
@@ -731,6 +734,7 @@ static int cdrom_command_pause (void)
        return 2;
     if (cdrom_paused)
        return 2;
+    cdrom_audiotimeout = 0;
     sys_command_cd_pause (DF_IOCTL, unitnum,1);
     cdrom_paused = 1;
     return 2;
@@ -1045,6 +1049,15 @@ void AKIKO_hsync_handler (void)
     }
     if (cdrom_playing) {
        static int frame2counter;
+       if (cdrom_audiotimeout > 0) {
+           cdrom_audiotimeout--;
+           if (cdrom_audiotimeout == 0) {
+               set_status(CDSTATUS_DATA_AVAILABLE);
+               cdrom_playing = 0;
+               cdrom_result_buffer[1] = 0;
+               cdrom_return_data (2);
+           }
+       }
        frame2counter--;
        if (frame2counter <= 0) {
            uae_u8 *s;
@@ -1054,12 +1067,11 @@ void AKIKO_hsync_handler (void)
                uae_u8 as = s[1];
                if (as == AUDIO_STATUS_IN_PROGRESS) {
                    int lsn = msf2lsn ((s[5 + 4] << 16) | (s[6 + 4] << 8) | (s[7 + 4] << 0));
-                   //write_log("%d %d (%d %d)\n", lsn, msf2lsn (last_play_end) - lsn, cdrom_leadout, msf2lsn (last_play_end));
-                   if (lsn >= cdrom_leadout - 100 || lsn >= msf2lsn(last_play_end) - 100) {
-                       set_status(CDSTATUS_DATA_AVAILABLE);
-                       cdrom_playing = 0;
-                       cdrom_result_buffer[1] = 0;
-                       cdrom_return_data (2);
+                   write_log("%d %d (%d %d)\n", lsn, msf2lsn (last_play_end) - lsn, cdrom_leadout, msf2lsn (last_play_end));
+                   // make sure audio play really ends because not all drives report position accurately
+                   if ((lsn >= cdrom_leadout - 3 * 75 || lsn >= msf2lsn(last_play_end) - 3 * 75) && !cdrom_audiotimeout) {
+                       cdrom_audiotimeout = 3 * 312;
+                       write_log("audiotimeout starts\n");
                    }
                }
            }
index e3209f87a6207c293f415abded2aaa978521bdf5..778a9092b4973cf4731234e4103e66c5bbbc45b3 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -3033,12 +3033,16 @@ static int bip_a4000 (struct uae_prefs *p, int config, int compa, int romcheck)
     roms[0] = 16;
     roms[1] = 31;
     roms[2] = 13;
-    roms[3] = -1;
+    roms[3] = 12;
+    roms[4] = -1;
     p->immediate_blits = 1;
     p->bogomem_size = 0;
     p->chipmem_size = 0x200000;
-    p->cpu_model = 68040;
-    p->fpu_model = 68040;
+    p->mbresmem_low_size = 8 * 1024 * 1024;
+    p->cpu_model = 68030;
+    p->fpu_model = 68882;
+    if (config > 0)
+       p->cpu_model = p->fpu_model = 68040;
     p->chipset_mask = CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE;
     p->cpu_compatible = p->address_space_24 = 0;
     p->m68k_speed = -1;
@@ -3066,8 +3070,11 @@ static int bip_a4000t (struct uae_prefs *p, int config, int compa, int romcheck)
     p->immediate_blits = 1;
     p->bogomem_size = 0;
     p->chipmem_size = 0x200000;
-    p->cpu_model = 68040;
-    p->fpu_model = 68040;
+    p->mbresmem_low_size = 8 * 1024 * 1024;
+    p->cpu_model = 68030;
+    p->fpu_model = 68882;
+    if (config > 0)
+       p->cpu_model = p->fpu_model = 68040;
     p->chipset_mask = CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE;
     p->cpu_compatible = p->address_space_24 = 0;
     p->m68k_speed = -1;
index 4b7c03e2aa6e59fe71de66f33e807b4f3572d221..e3b941a7a7cde6d5758da05776939099d154e762 100755 (executable)
--- a/filesys.c
+++ b/filesys.c
@@ -223,8 +223,14 @@ int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo *
        } else {
            ui->hf.readonly = 1;
            ui->hf.blocksize = uci->blocksize;
-           if (!hdf_open (&ui->hf, uci->rootdir))
+           if (!hdf_open (&ui->hf, uci->rootdir)) {
+               if (uci->reserved == 0 && uci->sectors == 0 && uci->surfaces == 0) {
+                   if (ui->hf.flags & 1)
+                       return FILESYS_HARDDRIVE;
+                   return FILESYS_HARDFILE_RDB;
+               }
                return -1;
+           }
            hdf_close (&ui->hf);
        }
     } else {
@@ -930,7 +936,7 @@ int filesys_eject (int nr)
     u->mountcount++;
     write_log ("FILESYS: removed volume '%s'\n", u->ui.volname);
     flush_cache(u, -1);
-    put_byte (u->volume + 172 - 32, -1);
+    put_byte (u->volume + 172 - 32, -2);
     uae_Signal(get_long(u->volume + 176 - 32), 1 << 17);
     return 1;
 }
@@ -963,10 +969,13 @@ int filesys_media_change (char *rootdir, int inserted)
 
     if (automountunit >= 0)
        return -1;
+    nr = -1;
     for (u = units; u; u = u->next) {
         if (is_hardfile (u->unit) == FILESYS_VIRTUAL) {
            ui = &mountinfo.ui[u->unit];
            if (ui->rootdir && !memcmp (ui->rootdir, rootdir, strlen (rootdir)) && strlen (rootdir) + 3 >= strlen (ui->rootdir)) {
+               if (filesys_isvolume (u) && inserted)
+                   return 0;
                nr = u->unit;
                break;
            }
@@ -1046,7 +1055,7 @@ int filesys_insert (int nr, char *volume, char *rootdir, int readonly, int flags
     if (is_hardfile(nr) != FILESYS_VIRTUAL)
        return 0;
     if (filesys_isvolume (u)) {
-       u->reinsertdelay = 100;
+       u->reinsertdelay = 50;
        u->newflags = flags;
        u->newreadonly = readonly;
        u->newrootdir = my_strdup (rootdir);
@@ -1071,13 +1080,13 @@ int filesys_insert (int nr, char *volume, char *rootdir, int readonly, int flags
     xfree (u->ui.volname);
     ui->volname = u->ui.volname = filesys_createvolname (volume, rootdir, "removable");
     set_volume_name (u);
-    write_log ("FILESYS: inserted volume %d '%s' ('%s')\n", nr, ui->volname, rootdir);
+    write_log ("FILESYS: inserted volume NR=%d RO=%d '%s' ('%s')\n", nr, readonly, ui->volname, rootdir);
     if (flags >= 0)
        ui->volflags = u->volflags = u->ui.volflags = flags;
     strcpy (uci->volname, ui->volname);
     strcpy (uci->rootdir, rootdir);
     if (readonly >= 0)
-       uci->readonly = ui->readonly = readonly;
+       uci->readonly = ui->readonly = u->ui.readonly = readonly;
     put_byte (u->volume + 44, 0);
     put_byte (u->volume + 172 - 32, 1);
     uae_Signal (get_long(u->volume + 176 - 32), 1 << 17);
@@ -1939,12 +1948,12 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context)
 
     /* fill in our process in the device node */
     devnode = get_long (pkt + dp_Arg3) << 2;
-    put_long (unit->volume + 180, devnode);
     put_long (devnode + 8, unit->port);
     unit->dosbase = m68k_areg (&context->regs, 2);
 
     /* make new volume */
     unit->volume = m68k_areg (&context->regs, 3) + 32;
+    put_long (unit->volume + 180 - 32, devnode);
 #ifdef UAE_FILESYS_THREADS
     unit->locklist = m68k_areg (&context->regs, 3) + 8;
 #else
@@ -2694,7 +2703,7 @@ static int exalldo (uaecptr exalldata, uae_u32 exalldatasize, uae_u32 type, uaec
     if (exalldata + exalldatasize - exp < size + size2)
        return 0; /* not enough space */
 
-    write_log("%d, %08x: '%s'%s\n", get_long (control + 0), exp, x, aino->dir ? " [DIR]" : "");
+    //write_log("%d, %08x: '%s'%s\n", get_long (control + 0), exp, x, aino->dir ? " [DIR]" : "");
 
     put_long (exp, exp + size + size2); /* ed_Next */
     if (control >= 1) {
index d70efff761abda503c1f65281c6cf0d697a429e7..bba76f94740ca9a498e5718d027b69a7f634484c 100755 (executable)
@@ -1,52 +1,52 @@
  db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
- db(0x60); db(0x00); db(0x08); db(0x34); db(0x00); db(0x00); db(0x06); db(0x9c);
+ db(0x60); db(0x00); db(0x08); db(0x50); db(0x00); db(0x00); db(0x06); db(0xb8);
  db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x01); db(0x58);
  db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x02); db(0x14);
- db(0x00); db(0x00); db(0x0a); db(0x64); db(0x00); db(0x00); db(0x0b); db(0xf8);
- db(0x43); db(0xfa); db(0x0d); db(0xce); db(0x4e); db(0xae); db(0xff); db(0xa0);
+ db(0x00); db(0x00); db(0x0a); db(0x84); db(0x00); db(0x00); db(0x0c); db(0x18);
+ db(0x43); db(0xfa); db(0x0d); db(0xee); db(0x4e); db(0xae); db(0xff); db(0xa0);
  db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40);
  db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xff); db(0xfe);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0xfc);
- db(0x61); db(0x00); db(0x0a); db(0x12); db(0x2a); db(0x50); db(0x43); db(0xfa);
- db(0x0d); db(0xc6); db(0x70); db(0x24); db(0x7a); db(0x00); db(0x4e); db(0xae);
+ db(0x61); db(0x00); db(0x0a); db(0x32); db(0x2a); db(0x50); db(0x43); db(0xfa);
+ db(0x0d); db(0xe6); db(0x70); db(0x24); db(0x7a); db(0x00); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa);
- db(0x0d); db(0xb6); db(0x70); db(0x00); db(0x7a); db(0x01); db(0x4e); db(0xae);
+ db(0x0d); db(0xd6); db(0x70); db(0x00); db(0x7a); db(0x01); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00);
  db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
  db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x27); db(0x4c);
  db(0x01); db(0x9c); db(0x7c); db(0x00); db(0xbc); db(0xad); db(0x01); db(0x0c);
  db(0x64); db(0x24); db(0x2f); db(0x06); db(0x7e); db(0x01); db(0x2f); db(0x0b);
- db(0x20); db(0x4b); db(0x61); db(0x00); db(0x06); db(0x10); db(0x26); db(0x5f);
+ db(0x20); db(0x4b); db(0x61); db(0x00); db(0x06); db(0x2c); db(0x26); db(0x5f);
  db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08);
  db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xe4);
  db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xd6); db(0x2c); db(0x78);
  db(0x00); db(0x04); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62);
- db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x09); db(0x9e);
+ db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x09); db(0xbe);
  db(0x4e); db(0x90); db(0x72); db(0x03); db(0x74); db(0xf6); db(0x20); db(0x7c);
  db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x0a);
  db(0x67); db(0x08); db(0x78); db(0x00); db(0x22); db(0x44); db(0x4e); db(0xae);
- db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x0c); db(0xf0); db(0x43); db(0xfa);
- db(0x00); db(0x1c); db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0a); db(0xbe);
+ db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x0d); db(0x10); db(0x43); db(0xfa);
+ db(0x00); db(0x1c); db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0a); db(0xde);
  db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48);
- db(0x61); db(0x00); db(0x09); db(0x6a); db(0x4e); db(0x90); db(0x4c); db(0xdf);
+ db(0x61); db(0x00); db(0x09); db(0x8a); db(0x4e); db(0x90); db(0x4c); db(0xdf);
  db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x11); db(0x4e); db(0xae);
- db(0xfe); db(0xc2); db(0x43); db(0xfa); db(0x0c); db(0xec); db(0x70); db(0x00);
+ db(0xfe); db(0xc2); db(0x43); db(0xfa); db(0x0d); db(0x0c); db(0x70); db(0x00);
  db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0xe4);
- db(0x2c); db(0x40); db(0x41); db(0xfa); db(0x0c); db(0xc3); db(0x22); db(0x08);
+ db(0x2c); db(0x40); db(0x41); db(0xfa); db(0x0c); db(0xe3); db(0x22); db(0x08);
  db(0x74); db(0x0f); db(0x41); db(0xfa); db(0x00); db(0x20); db(0x26); db(0x08);
  db(0xe4); db(0x8b); db(0x28); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40);
  db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78);
  db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x60); db(0xbc);
  db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
  db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00);
- db(0x09); db(0x0c); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04);
- db(0x61); db(0x00); db(0x06); db(0x9c); db(0x70); db(0x00); db(0x4e); db(0x75);
+ db(0x09); db(0x2c); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04);
+ db(0x61); db(0x00); db(0x06); db(0xb8); db(0x70); db(0x00); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0x00); db(0x20); db(0x30); db(0x3c); db(0xff); db(0x50);
- db(0x61); db(0x00); db(0x08); db(0xf2); db(0x70); db(0x00); db(0x4e); db(0x90);
+ db(0x61); db(0x00); db(0x09); db(0x12); db(0x70); db(0x00); db(0x4e); db(0x90);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78);
  db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
- db(0x08); db(0xdc); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40);
+ db(0x08); db(0xfc); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40);
  db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06);
  db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40);
  db(0x00); db(0x02); db(0x6e); db(0x08); db(0x20); db(0x01); db(0x4e); db(0xae);
  db(0x35); db(0x7c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x25); db(0x49);
  db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a);
  db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74);
- db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x08); db(0x4e);
+ db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x08); db(0x6e);
  db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf);
  db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0);
  db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
  db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa);
- db(0x0b); db(0x8d); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa);
+ db(0x0b); db(0xad); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa);
  db(0xff); db(0x28); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa);
  db(0xff); db(0x20); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c);
  db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae);
@@ -80,7 +80,7 @@
  db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); db(0x00); db(0x00);
  db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c);
  db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40);
- db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x0b); db(0x27);
+ db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x0b); db(0x47);
  db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98);
  db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10);
  db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7);
  db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90);
  db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa);
- db(0x0a); db(0x68); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01);
+ db(0x0a); db(0x88); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01);
  db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); db(0x60); db(0xf2);
  db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c);
  db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
  db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08);
- db(0x41); db(0xfa); db(0x0a); db(0x3e); db(0x25); db(0x48); db(0x00); db(0x0a);
- db(0x41); db(0xfa); db(0x09); db(0xcb); db(0x25); db(0x48); db(0x00); db(0x0e);
+ db(0x41); db(0xfa); db(0x0a); db(0x5e); db(0x25); db(0x48); db(0x00); db(0x0a);
+ db(0x41); db(0xfa); db(0x09); db(0xeb); db(0x25); db(0x48); db(0x00); db(0x0e);
  db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90);
  db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50);
  db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); db(0x20); db(0x4a);
  db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0x01); db(0x02); db(0x2e); db(0x00); db(0x4a); db(0x2b);
- db(0x00); db(0x4c); db(0x67); db(0x70); db(0x2c); db(0x6b); db(0x00); db(0xa0);
- db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x34);
+ db(0x00); db(0x4c); db(0x67); db(0x7a); db(0x2c); db(0x6b); db(0x00); db(0xa0);
+ db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e);
  db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80);
- db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x56); db(0x08); db(0x07);
+ db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x60); db(0x08); db(0x07);
  db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20);
  db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x08); db(0x07);
- db(0x00); db(0x01); db(0x67); db(0x08); db(0x22); db(0x2b); db(0x00); db(0xb4);
- db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x72); db(0x0e); db(0x4e); db(0xae);
- db(0xfd); db(0x6c); db(0x60); db(0x30); db(0x2c); db(0x78); db(0x00); db(0x04);
+ db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e);
+ db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x22); db(0x2b);
+ db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x72); db(0x0e);
+ db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x30); db(0x2c); db(0x78);
+ db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x20); db(0x6b);
+ db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0xd1); db(0xc8);
+ db(0xd1); db(0xc8); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8);
+ db(0xd1); db(0xc8); db(0x43); db(0xeb); db(0x00); db(0x20); db(0x22); db(0xa8);
+ db(0x00); db(0x04); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x21); db(0x40);
+ db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf);
+ db(0x40); db(0x80); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x22);
+ db(0x2e); db(0x00); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e);
+ db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e);
+ db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff);
+ db(0xff); db(0xfe); db(0x67); db(0x72); db(0x08); db(0x07); db(0x00); db(0x00);
+ db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08);
+ db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01);
+ db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c);
+ db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4);
+ db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x72); db(0x0e); db(0x4e); db(0xae);
+ db(0xfd); db(0x6c); db(0x60); db(0x42); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x20); db(0x6b); db(0x00); db(0xa0);
  db(0x20); db(0x68); db(0x00); db(0x22); db(0xd1); db(0xc8); db(0xd1); db(0xc8);
  db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8);
- db(0x43); db(0xeb); db(0x00); db(0x20); db(0x22); db(0xa8); db(0x00); db(0x04);
- db(0x20); db(0x09); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x04);
- db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x40); db(0x80);
- db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x22); db(0x2e); db(0x00);
- db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25);
- db(0x00); db(0x14); db(0x65); db(0x34); db(0x72); db(0x0e); db(0x4e); db(0xae);
- db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe);
- db(0x67); db(0x68); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a);
- db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae);
- db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08);
- db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x60);
- db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x42);
- db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c);
- db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22);
- db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x20); db(0x68); db(0x00); db(0x18);
- db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x43); db(0xe8); db(0x00); db(0x04);
- db(0x45); db(0xeb); db(0x00); db(0x20); db(0x20); db(0x28); db(0x00); db(0x04);
- db(0x67); db(0x14); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0);
- db(0x67); db(0x0a); db(0x22); db(0x40); db(0x20); db(0x51); db(0xd1); db(0xc8);
- db(0xd1); db(0xc8); db(0x60); db(0xe8); db(0x22); db(0x92); db(0x4e); db(0xae);
- db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); db(0x4e); db(0x75);
- db(0x48); db(0xe7); db(0x20); db(0x22); db(0x74); db(0x16); db(0x9f); db(0xc2);
- db(0x24); db(0x4f); db(0x32); db(0x02); db(0x42); db(0x32); db(0x10); db(0xff);
- db(0x53); db(0x41); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04);
- db(0x72); db(0x0f); db(0x4a); db(0x80); db(0x67); db(0x02); db(0x72); db(0x10);
- db(0x15); db(0x41); db(0x00); db(0x04); db(0x35); db(0x7c); db(0x08); db(0x00);
- db(0x00); db(0x08); db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x33); db(0x7c);
- db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00);
- db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28);
- db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x22); db(0x6b);
- db(0x00); db(0xa8); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c);
- db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae);
- db(0xfe); db(0x38); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x25); db(0x69);
- db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24);
- db(0x00); db(0x12); db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x4e); db(0xae);
- db(0xfe); db(0x38); db(0xdf); db(0xc2); db(0x4c); db(0xdf); db(0x44); db(0x04);
- db(0x4e); db(0x75); db(0x4a); db(0x00); db(0x67); db(0x26); db(0x4a); db(0x2b);
- db(0x00); db(0x4c); db(0x66); db(0x36); db(0x70); db(0x00); db(0x4a); db(0x33);
- db(0x00); db(0x4d); db(0x67); db(0x04); db(0x52); db(0x00); db(0x60); db(0xf6);
- db(0x17); db(0x40); db(0x00); db(0x4c); db(0x67); db(0x24); db(0x20); db(0x01);
- db(0x61); db(0x00); db(0xfe); db(0x56); db(0x70); db(0x01); db(0x61); db(0x00);
- db(0xff); db(0x60); db(0x60); db(0x16); db(0x4a); db(0x2b); db(0x00); db(0x4c);
- db(0x67); db(0x10); db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x20); db(0x01);
- db(0x61); db(0x00); db(0xfe); db(0xc0); db(0x70); db(0x00); db(0x61); db(0x00);
- db(0xff); db(0x48); db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14);
- db(0x67); db(0x0a); db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00);
- db(0xff); db(0xb2); db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x01);
- db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x4a); db(0x2b);
- db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x01);
- db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x70); db(0x00);
- db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0x8e); db(0x4e); db(0x75);
- db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0xa8); db(0x00); db(0x08);
- db(0x66); db(0x08); db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x02);
- db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2a); db(0x48);
- db(0x24); db(0x6c); db(0x00); db(0x18); db(0x2e); db(0x15); db(0x4a); db(0x87);
- db(0x67); db(0x64); db(0x20); db(0x0a); db(0x67); db(0x60); db(0x7c); db(0x00);
- db(0x22); db(0x2d); db(0x00); db(0x08); db(0x67); db(0x12); db(0x24); db(0x2a);
- db(0x00); db(0x04); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x4e); db(0xae);
- db(0xfc); db(0x34); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6);
- db(0x22); db(0x2d); db(0x00); db(0x0c); db(0x67); db(0x1c); db(0x20); db(0x41);
- db(0x22); db(0x4a); db(0x2f); db(0x0a); db(0x45); db(0xec); db(0x00); db(0x20);
- db(0x48); db(0x7a); db(0x00); db(0x08); db(0x2f); db(0x28); db(0x00); db(0x08);
- db(0x4e); db(0x75); db(0x24); db(0x5f); db(0x4a); db(0x80); db(0x66); db(0x02);
- db(0x50); db(0xc6); db(0x4a); db(0x06); db(0x67); db(0x1a); db(0x20); db(0x2a);
- db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x67); db(0x0a);
- db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x81);
- db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x9e);
- db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x98); db(0x4c); db(0xdf);
- db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfd); db(0x02);
- db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c);
- db(0xff); db(0xfc); db(0x61); db(0x00); db(0x03); db(0xa8); db(0x2a); db(0x50);
- db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x03); db(0x9e);
- db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90);
- db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00);
- db(0x0c); db(0x83); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x00);
- db(0xfa); db(0x22); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x00); db(0x02);
- db(0x67); db(0x0c); db(0xc0); db(0x85); db(0x67); db(0x08); db(0x4a); db(0xa8);
- db(0x01); db(0x90); db(0x67); db(0x00); db(0xfa); db(0x0e); db(0x20); db(0x28);
- db(0x01); db(0x90); db(0x67); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01);
- db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a);
- db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83);
- db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20);
- db(0x61); db(0x00); db(0x03); db(0x4a); db(0x4e); db(0x90); db(0x60); db(0x26);
- db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70);
- db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c);
- db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0x30); db(0x4e); db(0x90);
- db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40);
- db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9);
- db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94);
- db(0x61); db(0x00); db(0xfb); db(0x64); db(0x48); db(0xe7); db(0x80); db(0xc0);
- db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94);
- db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e);
- db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04);
- db(0x61); db(0x00); db(0xfa); db(0xee); db(0x4a); db(0x83); db(0x6b); db(0x00);
- db(0xf9); db(0x8a); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00);
- db(0x02); db(0xe4); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29);
- db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c);
- db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x43); db(0xfa);
- db(0xf8); db(0x74); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x27); db(0x40);
- db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24);
- db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x38); db(0x2c); db(0x78);
- db(0x00); db(0x04); db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae);
- db(0xff); db(0x3a); db(0x22); db(0x40); db(0x70); db(0x00); db(0x22); db(0x80);
- db(0x23); db(0x40); db(0x00); db(0x04); db(0x33); db(0x40); db(0x00); db(0x0e);
- db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40);
- db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a);
- db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a);
- db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0x75); db(0x20); db(0x4b);
- db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); db(0x00); db(0x01);
- db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0xec); db(0x2c); db(0x4c);
- db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x4e); db(0x75); db(0x48); db(0xe7);
- db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x02); db(0x7a); db(0x00);
- db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x06); db(0x10);
- db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40);
- db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c);
- db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
- db(0x20); db(0x40); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7);
- db(0x00); db(0x0a); db(0x61); db(0x00); db(0xfe); db(0x78); db(0x4c); db(0xdf);
- db(0x50); db(0x00); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62);
- db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x2c); db(0x78);
- db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda);
- db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); db(0x43); db(0xfa);
- db(0x05); db(0xa8); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
- db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xb9);
- db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
- db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86);
- db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08);
- db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x93); db(0xc9); db(0x4e); db(0xae);
+ db(0x43); db(0xe8); db(0x00); db(0x04); db(0x45); db(0xeb); db(0x00); db(0x20);
+ db(0x20); db(0x28); db(0x00); db(0x04); db(0x67); db(0x14); db(0xd0); db(0x80);
+ db(0xd0); db(0x80); db(0xb5); db(0xc0); db(0x67); db(0x0a); db(0x22); db(0x40);
+ db(0x20); db(0x51); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x60); db(0xe8);
+ db(0x22); db(0x92); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf);
+ db(0x44); db(0x80); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22);
+ db(0x74); db(0x16); db(0x9f); db(0xc2); db(0x24); db(0x4f); db(0x32); db(0x02);
+ db(0x42); db(0x32); db(0x10); db(0xff); db(0x53); db(0x41); db(0x66); db(0xf8);
+ db(0x2c); db(0x78); db(0x00); db(0x04); db(0x72); db(0x0f); db(0x4a); db(0x80);
+ db(0x67); db(0x02); db(0x72); db(0x10); db(0x15); db(0x41); db(0x00); db(0x04);
+ db(0x35); db(0x7c); db(0x08); db(0x00); db(0x00); db(0x08); db(0x22); db(0x6b);
+ db(0x00); db(0xa4); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c);
+ db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24);
+ db(0x23); db(0x4a); db(0x00); db(0x28); db(0x13); db(0x7c); db(0x00); db(0x01);
+ db(0x00); db(0x1e); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x33); db(0x7c);
+ db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01);
+ db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6b);
+ db(0x00); db(0xa8); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e);
+ db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6b);
+ db(0x00); db(0xa4); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0xdf); db(0xc2);
+ db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x4a); db(0x00);
+ db(0x67); db(0x26); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x66); db(0x36);
+ db(0x70); db(0x00); db(0x4a); db(0x33); db(0x00); db(0x4d); db(0x67); db(0x04);
+ db(0x52); db(0x00); db(0x60); db(0xf6); db(0x17); db(0x40); db(0x00); db(0x4c);
+ db(0x67); db(0x24); db(0x20); db(0x01); db(0x61); db(0x00); db(0xfe); db(0x42);
+ db(0x70); db(0x01); db(0x61); db(0x00); db(0xff); db(0x60); db(0x60); db(0x16);
+ db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x10); db(0x42); db(0x2b);
+ db(0x00); db(0x4c); db(0x20); db(0x01); db(0x61); db(0x00); db(0xfe); db(0xb6);
+ db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x48); db(0x4e); db(0x75);
+ db(0x4a); db(0xac); db(0x00); db(0x14); db(0x67); db(0x0a); db(0x70); db(0x00);
+ db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x4e); db(0x75);
+ db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0xa8);
+ db(0x4e); db(0x75); db(0x10); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x0a);
+ db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0x98);
+ db(0x4e); db(0x75); db(0x72); db(0x01); db(0x0c); db(0x00); db(0x00); db(0xfe);
+ db(0x66); db(0x02); db(0x72); db(0x03); db(0x70); db(0x00); db(0x61); db(0x00);
+ db(0xff); db(0x86); db(0x4e); db(0x75); db(0x20); db(0x6c); db(0x00); db(0x24);
+ db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x08); db(0x4a); db(0xa8);
+ db(0x00); db(0x0c); db(0x66); db(0x02); db(0x4e); db(0x75); db(0x48); db(0xe7);
+ db(0x3f); db(0x3e); db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18);
+ db(0x2e); db(0x15); db(0x4a); db(0x87); db(0x67); db(0x64); db(0x20); db(0x0a);
+ db(0x67); db(0x60); db(0x7c); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x08);
+ db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); db(0x2c); db(0x6b);
+ db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); db(0x4a); db(0x80);
+ db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); db(0x00); db(0x0c);
+ db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); db(0x2f); db(0x0a);
+ db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); db(0x00); db(0x08);
+ db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x24); db(0x5f);
+ db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x4a); db(0x06);
+ db(0x67); db(0x1a); db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a);
+ db(0x4a); db(0x92); db(0x67); db(0x0a); db(0x20); db(0x52); db(0x22); db(0x4a);
+ db(0x22); db(0xd8); db(0x59); db(0x81); db(0x6a); db(0xfa); db(0x53); db(0x95);
+ db(0x53); db(0x87); db(0x60); db(0x9e); db(0x24); db(0x52); db(0x53); db(0x87);
+ db(0x60); db(0x98); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75);
+ db(0x61); db(0x00); db(0xfc); db(0xe6); db(0x21); db(0x40); db(0x01); db(0x98);
+ db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00);
+ db(0x03); db(0xac); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28);
+ db(0x61); db(0x00); db(0x03); db(0xa2); db(0x22); db(0x48); db(0x20); db(0x5f);
+ db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94);
+ db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x83); db(0xff); db(0xff);
+ db(0xff); db(0xfe); db(0x67); db(0x00); db(0xfa); db(0x06); db(0x0c); db(0x83);
+ db(0x00); db(0x00); db(0x00); db(0x02); db(0x67); db(0x0c); db(0xc0); db(0x85);
+ db(0x67); db(0x08); db(0x4a); db(0xa8); db(0x01); db(0x90); db(0x67); db(0x00);
+ db(0xf9); db(0xf2); db(0x20); db(0x28); db(0x01); db(0x90); db(0x67); db(0x12);
+ db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04);
+ db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40);
+ db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48);
+ db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0x4e);
+ db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08);
+ db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48);
+ db(0x26); db(0x40); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00);
+ db(0x03); db(0x34); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40);
+ db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40);
+ db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28);
+ db(0x20); db(0x69); db(0x01); db(0x94); db(0x61); db(0x00); db(0xfb); db(0x48);
+ db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90);
+ db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04);
+ db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01);
+ db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xfa); db(0xd2);
+ db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf9); db(0x6e); db(0x30); db(0x3c);
+ db(0xff); db(0x18); db(0x61); db(0x00); db(0x02); db(0xe8); db(0x4e); db(0x90);
+ db(0x20); db(0x03); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80);
+ db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70);
+ db(0x00); db(0x14); db(0x43); db(0xfa); db(0xf8); db(0x58); db(0x20); db(0x09);
+ db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff);
+ db(0x27); db(0x40); db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00);
+ db(0x67); db(0x38); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14);
+ db(0x72); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40);
+ db(0x70); db(0x00); db(0x22); db(0x80); db(0x23); db(0x40); db(0x00); db(0x04);
+ db(0x33); db(0x40); db(0x00); db(0x0e); db(0x30); db(0x3c); db(0x10); db(0x00);
+ db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); db(0x23); db(0x6d);
+ db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); db(0x00); db(0x10);
+ db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0xf2);
+ db(0x4e); db(0x75); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41);
+ db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x02); db(0x72); db(0x01);
+ db(0x70); db(0xec); db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a);
+ db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01);
+ db(0x7e); db(0x02); db(0x7a); db(0x00); db(0x2c); db(0x78); db(0x00); db(0x04);
+ db(0x43); db(0xfa); db(0x06); db(0x14); db(0x70); db(0x00); db(0x4e); db(0xae);
+ db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00);
+ db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
+ db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x21); db(0x4c);
+ db(0x01); db(0x9c); db(0x48); db(0xe7); db(0x00); db(0x0a); db(0x61); db(0x00);
+ db(0xfe); db(0x78); db(0x4c); db(0xdf); db(0x50); db(0x00); db(0x22); db(0x4c);
+ db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc);
+ db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9);
+ db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8);
+ db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x05); db(0xac); db(0x70); db(0x00);
+ db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c);
+ db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01);
+ db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40);
+ db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04);
+ db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0);
+ db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae);
  db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); db(0x61); db(0x00);
  db(0x02); db(0xb4); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x61); db(0x00);
  db(0x02); db(0xe0); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00);
  db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c);
  db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00);
  db(0x01); db(0xac); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00);
- db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0x5c); db(0x08); db(0x02);
+ db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0x3c); db(0x08); db(0x02);
  db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00);
- db(0xfc); db(0x60); db(0x61); db(0x00); db(0x03); db(0x38); db(0x60); db(0x00);
+ db(0xfc); db(0x54); db(0x61); db(0x00); db(0x03); db(0x38); db(0x60); db(0x00);
  db(0x00); db(0xfc); db(0x61); db(0x00); db(0x03); db(0x30); db(0x20); db(0x4d);
  db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80);
  db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f);
  db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x11); db(0x4e); db(0xae);
  db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x08);
- db(0x61); db(0x00); db(0xfd); db(0x04); db(0x42); db(0x2b); db(0x00); db(0xac);
+ db(0x61); db(0x00); db(0xfc); db(0xf8); db(0x42); db(0x2b); db(0x00); db(0xac);
  db(0x20); db(0x0c); db(0x67); db(0xce); db(0x0c); db(0x6c); db(0x00); db(0x26);
  db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); db(0x40); db(0x00);
  db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); db(0x0c); db(0x6c);
  db(0x60); db(0x00); db(0xff); db(0x08); db(0x28); db(0x43); db(0x61); db(0x04);
  db(0x60); db(0x00); db(0xff); db(0x00); db(0x0c); db(0xac); db(0x00); db(0x00);
  db(0x00); db(0x1f); db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00);
- db(0xfc); db(0x04); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09);
- db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfc); db(0x2a);
+ db(0xfb); db(0xf8); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09);
+ db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfc); db(0x26);
  db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d);
  db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05);
  db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a);
  db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18);
  db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01);
  db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87);
- db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf5); db(0x9e);
+ db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf5); db(0x7e);
  db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0);
  db(0x4e); db(0x75); db(0x00); db(0x00); db(0x0c); db(0xaf); db(0x00); db(0x00);
  db(0x00); db(0x22); db(0x00); db(0x08); db(0x66); db(0x30); db(0x48); db(0xe7);
index 910ffc71e02c8b9dc3d269392ccf130053ba7d0f..e4a8358d3ffb8e17b7f8d8c56dd389457ec47c44 100755 (executable)
@@ -92,6 +92,7 @@ struct hardfileprivdata {
     int thread_running;
     uae_sem_t sync_sem;
     uaecptr base;
+    int changenum;
 };
 
 static uae_sem_t change_sem;
@@ -696,6 +697,23 @@ static int handle_scsi (uaecptr request, struct hardfiledata *hfd)
     return ret;
 }
 
+void hardfile_do_disk_change (int fsid, int insert)
+{
+    int j;
+
+    write_log("uaehf.device:%d %d\n", fsid, insert);
+    uae_sem_wait (&change_sem);
+    hardfpd[fsid].changenum++;
+    j = 0;
+    while (j < MAX_ASYNC_REQUESTS) {
+       if (hardfpd[fsid].d_request_type[j] == ASYNC_REQUEST_CHANGEINT) {
+           uae_Cause (hardfpd[fsid].d_request_data[j]);
+       }
+       j++;
+    }
+    uae_sem_post (&change_sem);
+}
+
 static int add_async_request (struct hardfileprivdata *hfpd, uaecptr request, int type, uae_u32 data)
 {
     int i;
@@ -984,7 +1002,6 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
        case CMD_CLEAR:
        case CMD_MOTOR:
        case CMD_SEEK:
-       case CMD_CHANGENUM:
        case TD_SEEK64:
        case NSCMD_TD_SEEK64:
        break;
@@ -992,6 +1009,10 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
        case CMD_REMOVE:
        break;
 
+       case CMD_CHANGENUM:
+           actual = hfpd->changenum;
+       break;
+
        case CMD_ADDCHANGEINT:
        error = add_async_request (hfpd, request, ASYNC_REQUEST_CHANGEINT, get_long (request + 40));
        if (!error)
index 31b67f6607afe65ef39b61128a7e83da5f7c5307..9330b8e7fa9e6d74bd89f61a85a042f4f7be6321 100755 (executable)
@@ -83,10 +83,11 @@ extern void hdf_close (struct hardfiledata *hfd);
 extern int hdf_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len);
 extern int hdf_write (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len);
 extern int hdf_getnumharddrives (void);
-extern char *hdf_getnameharddrive (int index, int flags);
+extern char *hdf_getnameharddrive (int index, int flags, int *sectorsize);
 extern int hdf_init (void);
 extern int isspecialdrive(const char *name);
 extern int get_native_path(uae_u32 lock, char *out);
+extern void hardfile_do_disk_change (int fsid, int insert);
 
 void hdf_hd_close(struct hd_hardfiledata *hfd);
 int hdf_hd_open(struct hd_hardfiledata *hfd, char *path, int blocksize, int readonly,
index 2b15f014fa7a924f2b81fd2b1306ac1d2d82ca96..7272aa255a0eda9edd06be46edd25da9286ca5f6 100755 (executable)
@@ -288,6 +288,7 @@ struct uae_prefs {
     int win32_no_overlay; /* If this is set, we won't try and use any RGB overlays */
     int win32_borderless;
     int win32_ctrl_F11_is_quit;
+    int win32_automount_removable;
     int win32_automount_drives;
     int win32_automount_cddrives;
     int win32_automount_netdrives;
index 9ae2a272ddd92ffb5ad57006d82520de9791bced..561b5e64d9db241a6e8cbf4cb6abdf710104c384 100755 (executable)
--- a/newcpu.c
+++ b/newcpu.c
@@ -2544,6 +2544,8 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
 
     if (buf)
        memset (buf, 0, bufsize);
+    if (!table68k)
+       return;
     while (cnt-- > 0) {
        char instrname[100], *ccpt;
        int i;
index 0f1339770754f0634149e0f202f379ba344aa62d..2d0babee637ad688a05a898ca8f245715f81feac 100755 (executable)
@@ -181,19 +181,18 @@ static int mySockStartup(void)
        return result;
 }
 
-static int socket_layer_initialized = 0;
-
 int init_socket_layer(void)
 {
     int result = 0;
 
+    deinit_socket_layer ();
     if (currprefs.socket_emu) {
                if((result = mySockStartup())) {
-                       InitializeCriticalSection(&bsd->csSigQueueLock);
 
                        if(bsd->hSockThread == NULL) {
                                WNDCLASS wc;    // Set up an invisible window and dummy wndproc
 
+                               InitializeCriticalSection(&bsd->csSigQueueLock);
                                InitializeCriticalSection(&bsd->SockThreadCS);
                                bsd->hSockReq = CreateEvent(NULL, FALSE, FALSE, NULL);
                                bsd->hSockReqHandled = CreateEvent(NULL, FALSE, FALSE, NULL);
@@ -220,33 +219,52 @@ int init_socket_layer(void)
                        }
                }
        }
-       socket_layer_initialized = result;
-
        return result;
 }
 
 void deinit_socket_layer(void)
 {
        int i;
-       if (currprefs.socket_emu) {
-               WSACleanup();
-               if(socket_layer_initialized) {
-                       DeleteCriticalSection(&bsd->csSigQueueLock);
-                       if(bsd->hSockThread) {
-                               DeleteCriticalSection(&bsd->SockThreadCS);
-                               CloseHandle(bsd->hSockReq);
-                               bsd->hSockReq = NULL;
-                               CloseHandle(bsd->hSockReqHandled);
-                               WaitForSingleObject(bsd->hSockThread, INFINITE);
-                               CloseHandle(bsd->hSockThread);
-                       }
-                       for (i = 0; i < MAX_SELECT_THREADS; i++) {
-                               if (bsd->hThreads[i]) {
-                                       CloseHandle(bsd->hThreads[i]);
-                                       bsd->hThreads[i] = NULL;
-                               }
-                       }
+
+       if (!bsd)
+           return;
+       WSACleanup();
+       if(bsd->hSockThread) {
+               HANDLE t = bsd->hSockThread;
+               DeleteCriticalSection(&bsd->csSigQueueLock);
+               DeleteCriticalSection(&bsd->SockThreadCS);
+               bsd->hSockThread = NULL;
+               SetEvent (bsd->hSockReq);
+               WaitForSingleObject(bsd->hSockThread, INFINITE);
+               CloseHandle(t);
+               CloseHandle(bsd->hSockReq);
+               CloseHandle(bsd->hSockReqHandled);
+               bsd->hSockReq = NULL;
+               bsd->hSockThread = NULL;
+               bsd->hSockReqHandled = NULL;
+               DestroyWindow (bsd->hSockWnd);
+               bsd->hSockWnd = NULL;
+       }
+       for (i = 0; i < MAX_SELECT_THREADS; i++) {
+               if (bsd->hThreads[i]) {
+                       CloseHandle (bsd->hThreads[i]);
+                       bsd->hThreads[i] = NULL;
+               }
+               if (bsd->hEvents[i]) {
+                       CloseHandle (bsd->hEvents[i]);
+                       bsd->hEvents[i] = NULL;
+               }
+       }
+       for (i = 0; i < MAX_GET_THREADS; i++) {
+               if (bsd->hGetThreads[i]) {
+                       CloseHandle (bsd->hGetThreads[i]);
+                       bsd->hGetThreads[i] = NULL;
+               }
+               if (bsd->hGetEvents[i]) {
+                       CloseHandle (bsd->hGetEvents[i]);
+                       bsd->hGetEvents[i] = NULL;
                }
+               bsd->threadGetargs_inuse[i] = 0;
        }
 }
 
@@ -872,21 +890,23 @@ static unsigned int sock_thread2(void *blah)
            }
            SetThreadPriority(GetCurrentThread(), pri);
 
-           while(TRUE) {
-                       if(bsd->hSockReq) {
-                               DWORD wait;
-                               WaitHandle = bsd->hSockReq;
-                               wait = MsgWaitForMultipleObjects (1, &WaitHandle, FALSE, INFINITE, QS_POSTMESSAGE);
-                               if (wait == WAIT_OBJECT_0) {
-                                       if(HandleStuff()) // See if its time to quit...
-                                               break;
-                               }
-                               if (wait == WAIT_OBJECT_0 + 1) {
-                                       Sleep(10);
-                                       while(PeekMessage(&msg, NULL, WM_USER, 0xB000 + MAXPENDINGASYNC * 2, PM_REMOVE) > 0) {
-                                               TranslateMessage(&msg);
-                                               DispatchMessage(&msg);
-                                       }
+               while(bsd->hSockThread && bsd->hSockWnd) {
+                       DWORD wait;
+                       WaitHandle = bsd->hSockReq;
+                       wait = MsgWaitForMultipleObjects (1, &WaitHandle, FALSE, INFINITE, QS_POSTMESSAGE);
+                       if (wait == WAIT_OBJECT_0) {
+                               if (!bsd->hSockThread || !bsd->hSockWnd)
+                                       break;
+                               if(HandleStuff()) // See if its time to quit...
+                                       break;
+                       }
+                       if (wait == WAIT_OBJECT_0 + 1) {
+                               if (!bsd->hSockThread || !bsd->hSockWnd)
+                                       break;
+                               Sleep(10);
+                               while(PeekMessage(&msg, NULL, WM_USER, 0xB000 + MAXPENDINGASYNC * 2, PM_REMOVE) > 0) {
+                                       TranslateMessage(&msg);
+                                       DispatchMessage(&msg);
                                }
                        }
            }
index c3e3ac6c32cfc5c88d0b655d1c467f54216b0189..f4fa6ac34084de1e157eb4235fbabb918ddc31fa 100755 (executable)
@@ -992,7 +992,7 @@ int hdf_getnumharddrives (void)
     return num_drives;
 }
 
-char *hdf_getnameharddrive (int index, int flags)
+char *hdf_getnameharddrive (int index, int flags, int *sectorsize)
 {
     static char name[512];
     char tmp[32];
@@ -1012,6 +1012,8 @@ char *hdf_getnameharddrive (int index, int flags)
        break;
     }
 
+    if (sectorsize)
+       *sectorsize = uae_drives[index].bytespersector;
     if (flags & 1) {
        if (size >= 1024 * 1024 * 1024)
            sprintf (tmp, "%.1fG", ((double)(uae_u32)(size / (1024 * 1024))) / 1024.0);
index ebfbef1b6d7d7f3b301e09aa86d654ba30231169..10e69b61995be440a402866741af254cc39439ee 100755 (executable)
 #define IDC_SELECTRESTEXT               1510
 #define IDC_FLUSHPRINTER                1510
 #define IDC_SCREENRESTEXT               1511
+#define IDC_MAPDRIVES_AUTO              1511
 #define IDC_WIDTHTEXT                   1512
 #define IDC_WINDOWEDTEXT                1512
 #define IDC_HEIGHTTEXT                  1513
index ebfbef1b6d7d7f3b301e09aa86d654ba30231169..10e69b61995be440a402866741af254cc39439ee 100755 (executable)
 #define IDC_SELECTRESTEXT               1510
 #define IDC_FLUSHPRINTER                1510
 #define IDC_SCREENRESTEXT               1511
+#define IDC_MAPDRIVES_AUTO              1511
 #define IDC_WIDTHTEXT                   1512
 #define IDC_WINDOWEDTEXT                1512
 #define IDC_HEIGHTTEXT                  1513
index 7fa51d4c7c71344e9b181033a6ee0d7c868d03f2..8cc71b975ccbc6ca3b0f69b3b0866c13c90aed96 100755 (executable)
@@ -7,8 +7,7 @@
 //\r
 // Generated from the TEXTINCLUDE 2 resource.\r
 //\r
-#include "afxres.h"\r
-\r
+#include "afxres.h"\r\r
 /////////////////////////////////////////////////////////////////////////////\r
 #undef APSTUDIO_READONLY_SYMBOLS\r
 \r
@@ -256,6 +255,7 @@ BEGIN
     CONTROL         "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,220,121,10\r
     CONTROL         "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,232,101,10\r
     CONTROL         "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,220,100,10\r
+    CONTROL         "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,232,115,10\r
 END\r
 \r
 IDD_SOUND DIALOGEX 0, 0, 300, 231\r
@@ -678,13 +678,15 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK |
 CAPTION "Harddrive Settings"\r
 FONT 8, "MS Sans Serif", 0, 0, 0x0\r
 BEGIN\r
-    LTEXT           "Hard drive:",-1,7,11,35,10\r
+    LTEXT           "Hard drive:",IDC_STATIC,7,11,35,10\r
     COMBOBOX        IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
-    CONTROL         "Read/write",IDC_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,247,33,55,10\r
-    DEFPUSHBUTTON   "Add hard drive",IDOK,173,30,65,14\r
-    PUSHBUTTON      "Cancel",IDCANCEL,321,30,54,14\r
+    CONTROL         "Read/write",IDC_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10\r
+    DEFPUSHBUTTON   "Add hard drive",IDOK,231,48,65,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,319,48,54,14\r
     DEFPUSHBUTTON   "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14\r
-    EDITTEXT        IDC_PATH_NAME,89,49,169,15,ES_AUTOHSCROLL | NOT WS_VISIBLE\r
+    EDITTEXT        IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE\r
+    COMBOBOX        IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "HD Controller:",IDC_STATIC,42,52,52,10,SS_CENTERIMAGE\r
 END\r
 \r
 IDD_MISC2 DIALOGEX 0, 0, 300, 92\r
@@ -1256,7 +1258,7 @@ END
 \r
 STRINGTABLE \r
 BEGIN\r
-    IDS_QS_MODELS           "A500\nA500+\nA600\nA1000\nA1200\nA3000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration"\r
+    IDS_QS_MODELS           "A500\nA500+\nA600\nA1000\nA1200\nA3000\nA4000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration"\r
     IDS_QS_MODEL_A500       "1.3 ROM, OCS, 512 KB Chip + 512 KB Slow RAM (most common)\nThis configuration is capable of running most games and demos produced for first-generation hardware. Only few exceptions need a different configuration (e.g. the oldest games tend to be incompatible with this configuration).\n1.3 ROM, ECS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nLater hardware revision of the A500. Nearly 100% compatible with the previous configuration.\n1.3 ROM, ECS Agnus, 1 MB Chip RAM\nFew newer games and demos require this configuration.\n1.3 ROM, OCS Agnus, 512 KB Chip RAM\nVery old (e.g. pre-1988) games and demos may require this configuration.\n1.2 ROM, OCS Agnus, 512 KB Chip RAM\nAs available for the A1000, and installed on the first A500 and A2000 series. Some very old programs only work correctly with this configuration. Note: This system ROM version can only boot from floppy disk (no hard disk boot support).\n1.2 ROM, OCS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nThis configuration adds expansion memory to the first A500 produced. Try this if your game does not work with newer configurations, but works with the previous one. It could add some features to the game, including faster loading times. Note: This system ROM version can only boot from floppy disk (no hard disk boot support)."\r
     IDS_QS_MODEL_A500P      "Basic non-expanded configuration\nThe A500+ adds an ECS Agnus chip, 1 MB of Chip RAM and a 2.0 ROM to the A500. Many A500 games and demos don't work properly on an A500+.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"\r
     IDS_QS_MODEL_A600       "Basic non-expanded configuration\nThe A600 is smaller than the A500+ and has an updated 2.0 ROM.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"\r
@@ -1271,7 +1273,7 @@ BEGIN
     IDS_QS_MODEL_UAE        "High-end expanded configuration"\r
     IDS_QS_MODEL_ARCADIA    "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and  Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel."\r
     IDS_QS_MODEL_A3000      "1.4 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n"\r
-    IDS_QS_MODEL_A4000      "A4000 (test)\nA4000"\r
+    IDS_QS_MODEL_A4000      "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n"\r
     IDS_QS_MODEL_A4000T     "A4000T (test)\nA4000T"\r
 END\r
 \r
index a724b3ba1f3df65e803ce60bcdebfe6363b25093..e10c8df5cf92f664c815b7fe8ff9351f5f25f120 100755 (executable)
@@ -485,10 +485,40 @@ static void checkpause (void)
 
 static int showcursor;
 
+extern char config_filename[MAX_DPATH];
+
+static void setmaintitle (HWND hwnd)
+{
+    char txt[1000], txt2[500];
+
+    txt[0] = 0;
+    if (config_filename[0]) {
+       strcat (txt, "[");
+       strcat (txt, config_filename);
+       strcat (txt, "] - ");
+    }
+    strcat (txt, "WinUAE");
+    txt2[0] = 0;
+    if (mouseactive > 0) {
+       WIN32GUI_LoadUIString (currprefs.win32_middle_mouse ? IDS_WINUAETITLE_MMB : IDS_WINUAETITLE_NORMAL,
+           txt2, sizeof (txt2));
+    }
+    if (WINUAEBETA > 0)
+       strcat (txt, BetaStr);
+    if (strlen(WINUAEEXTRA) > 0) {
+       strcat (txt, " ");
+       strcat (txt, WINUAEEXTRA);
+    }
+    if (txt2[0]) {
+       strcat (txt, " - ");
+       strcat (txt, txt2);
+    }
+    SetWindowText (hwnd, txt);
+}
+
 void setmouseactive (int active)
 {
     int oldactive = mouseactive;
-    char txt[400], txt2[200];
 
     if (showcursor) {
        ClipCursor(NULL);
@@ -506,24 +536,9 @@ void setmouseactive (int active)
     inputdevice_unacquire ();
 
     mouseactive = active;
-    strcpy (txt, "WinUAE");
-    txt2[0] = 0;
-    if (mouseactive > 0) {
+    setmaintitle (hMainWnd);
+    if (mouseactive > 0)
        focus = 1;
-       WIN32GUI_LoadUIString (currprefs.win32_middle_mouse ? IDS_WINUAETITLE_MMB : IDS_WINUAETITLE_NORMAL,
-           txt2, sizeof (txt2));
-    }
-    if (WINUAEBETA > 0)
-       strcat (txt, BetaStr);
-    if (strlen(WINUAEEXTRA) > 0) {
-       strcat (txt, " ");
-       strcat (txt, WINUAEEXTRA);
-    }
-    if (txt2[0]) {
-       strcat (txt, " - ");
-       strcat (txt, txt2);
-    }
-    SetWindowText (hMainWnd, txt);
     if (mouseactive) {
        if (focus) {
            if (!showcursor) {
@@ -977,6 +992,25 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
 #endif
 
 #ifdef FILESYS
+    case WM_USER + 2:
+    {
+       typedef struct {
+           DWORD dwItem1;    // dwItem1 contains the previous PIDL or name of the folder. 
+           DWORD dwItem2;    // dwItem2 contains the new PIDL or name of the folder. 
+       } SHNOTIFYSTRUCT;
+       char path[MAX_PATH];
+
+       if (lParam == SHCNE_MEDIAINSERTED || lParam == SHCNE_MEDIAREMOVED) {
+           SHNOTIFYSTRUCT *shns = (SHNOTIFYSTRUCT*)wParam;
+           if(SHGetPathFromIDList((struct _ITEMIDLIST *)(shns->dwItem1), path)) {
+               int inserted = lParam == SHCNE_MEDIAINSERTED ? 1 : 0;
+               write_log("Shell Notification %d '%s'\n", inserted, path);
+               if ((inserted && CheckRM (path)) || !inserted)
+                   filesys_media_change (path, inserted);
+           }
+       }
+    }
+    return TRUE;
     case WM_DEVICECHANGE:
     {
        extern void win32_spti_media_change (char driveletter, int insert);
@@ -1008,8 +1042,10 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
     #endif
                                win32_aspi_media_change (drive, inserted);
                            }
-                           if (type == DRIVE_REMOVABLE || type == DRIVE_CDROM || !inserted)
-                               filesys_media_change (drvname, inserted); 
+                           if (currprefs.win32_automount_removable && (type == DRIVE_REMOVABLE || type == DRIVE_CDROM || !inserted)) {
+                               if ((inserted && CheckRM (drvname)) || !inserted)
+                                   filesys_media_change (drvname, inserted);
+                           }
                        }
                    }
                }
@@ -1133,7 +1169,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
 
      default:
         if (TaskbarRestartOk && message == TaskbarRestart)
-            systray (hWnd, 0);
+            systray (hWnd, FALSE);
     break;
     }
 
@@ -1182,8 +1218,9 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam,
      case WM_CLOSE:
      case WM_HELP:
      case WM_DEVICECHANGE:
-     case 0xff: // WM_INPUT
+     case WM_INPUT:
      case WM_USER + 1:
+     case WM_USER + 2:
      case WM_COMMAND:
      case WM_NOTIFY:
        return AmigaWindowProc (hWnd, message, wParam, lParam);
@@ -1787,6 +1824,7 @@ void target_default_options (struct uae_prefs *p, int type)
        p->win32_notaskbarbutton = 0;
        p->win32_alwaysontop = 0;
        p->win32_specialkey = 0xcf; // DIK_END
+       p->win32_automount_removable = 0;
        p->win32_automount_drives = 0;
        p->win32_automount_cddrives = 0;
        p->win32_automount_netdrives = 0;
@@ -1811,6 +1849,7 @@ void target_save_options (struct zfile *f, struct uae_prefs *p)
     cfgfile_target_write (f, "magic_mouse=%s\n", p->win32_outsidemouse ? "true" : "false");
     cfgfile_target_write (f, "logfile=%s\n", p->win32_logfile ? "true" : "false");
     cfgfile_target_write (f, "map_drives=%s\n", p->win32_automount_drives ? "true" : "false");
+    cfgfile_target_write (f, "map_drives_auto=%s\n", p->win32_automount_removable ? "true" : "false");
     cfgfile_target_write (f, "map_cd_drives=%s\n", p->win32_automount_cddrives ? "true" : "false");
     cfgfile_target_write (f, "map_net_drives=%s\n", p->win32_automount_netdrives ? "true" : "false");
     serdevtoname(p->sername);
@@ -1866,6 +1905,7 @@ int target_parse_option (struct uae_prefs *p, char *option, char *value)
     int i, v;
     int result = (cfgfile_yesno (option, value, "middle_mouse", &p->win32_middle_mouse)
            || cfgfile_yesno (option, value, "map_drives", &p->win32_automount_drives)
+           || cfgfile_yesno (option, value, "map_drives_auto", &p->win32_automount_removable)
            || cfgfile_yesno (option, value, "map_cd_drives", &p->win32_automount_cddrives)
            || cfgfile_yesno (option, value, "map_net_drives", &p->win32_automount_netdrives)
            || cfgfile_yesno (option, value, "logfile", &p->win32_logfile)
@@ -2573,9 +2613,13 @@ static int osdetect (void)
     if (!os_winnt)
        return 1;
     os_winnt_admin = isadminpriv ();
-    if (os_winnt_admin && pIsUserAnAdmin) {
-       if (pIsUserAnAdmin())
+    if (os_winnt_admin) {
+       if (pIsUserAnAdmin) {
+           if (pIsUserAnAdmin())
+               os_winnt_admin++;
+       } else {
            os_winnt_admin++;
+       }
     }
 
     return 1;
@@ -3222,6 +3266,42 @@ LONG WINAPI WIN32_ExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionPointers
 
 #endif
 
+typedef ULONG (CALLBACK *SHCHANGENOTIFYREGISTER)
+    (HWND hwnd,
+    int fSources,
+    LONG fEvents,
+    UINT wMsg,
+    int cEntries,
+    const SHChangeNotifyEntry *pshcne);
+typedef BOOL (CALLBACK *SHCHANGENOTIFYDEREGISTER)(ULONG ulID);
+
+void addnotifications (HWND hwnd, int remove)
+{
+    static ULONG ret;
+    LPITEMIDLIST ppidl;
+    SHCHANGENOTIFYREGISTER pSHChangeNotifyRegister;
+    SHCHANGENOTIFYDEREGISTER pSHChangeNotifyDeregister;
+
+    pSHChangeNotifyRegister = (SHCHANGENOTIFYREGISTER)GetProcAddress(
+       GetModuleHandle("shell32.dll"), "SHChangeNotifyRegister");
+    pSHChangeNotifyDeregister = (SHCHANGENOTIFYDEREGISTER)GetProcAddress(
+       GetModuleHandle("shell32.dll"), "SHChangeNotifyDeregister");
+
+    if (remove) {
+       if (ret > 0 && pSHChangeNotifyDeregister)
+           pSHChangeNotifyDeregister (ret);
+    } else {
+       if(currprefs.win32_automount_removable && pSHChangeNotifyRegister && SHGetSpecialFolderLocation(hwnd, CSIDL_DESKTOP, &ppidl) == NOERROR) {
+           SHChangeNotifyEntry shCNE;
+           shCNE.pidl = ppidl;
+           shCNE.fRecursive = TRUE;
+           ret = pSHChangeNotifyRegister (hwnd, SHCNE_DISKEVENTS, SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED,
+               WM_USER + 2, 1, &shCNE);
+           write_log("SHChangeNotifyRegister=%d\n", ret);
+       }
+    }
+}
+
 void systray (HWND hwnd, int remove)
 {
     NOTIFYICONDATA nid;
@@ -3331,6 +3411,11 @@ HMODULE WIN32_LoadLibrary (const char *name)
            m = LoadLibrary (s);
            if (m)
                goto end;
+           sprintf (s, "%s%s", start_path_exe, newname);
+           m = LoadLibrary (s);
+           if (m)
+               goto end;
+           sprintf (s, "%s%s%s", start_path_exe, WIN32_PLUGINDIR, newname);
            LLError(s);
            xfree (s);
        }
index 46ed389d7b6f09237f9d771459a749f6b2b49d76..8fac52085d50c769ccc2678e285acf62bfb060d1 100755 (executable)
@@ -15,9 +15,9 @@
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEBETA 4
+#define WINUAEBETA 5
 #define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2007, 9, 5)
+#define WINUAEDATE MAKEBD(2007, 9, 8)
 #define WINUAEEXTRA ""
 #define WINUAEREV ""
 
@@ -107,6 +107,8 @@ extern int dinput_wmkey (uae_u32 key);
 extern int dinput_winmouse (void);
 extern int dinput_winmousemode (void);
 
+void addnotifications (HWND hwnd, int remove);
+extern int CheckRM(char *DriveName);
 void systray (HWND hwnd, int remove);
 void systraymenu (HWND hwnd);
 void exit_gui (int);
index dd7fddd734343098b30bc7a9f93cda5556d2e777..4ce232ee5a31ff2c01c6b6d516b80614f77ed76b 100755 (executable)
@@ -1,7 +1,7 @@
 
 
 /* Determines if this drive-letter currently has a disk inserted */
-static int CheckRM(char *DriveName)
+int CheckRM(char *DriveName)
 {
     char filename[MAX_DPATH];
     DWORD dwHold;
@@ -95,51 +95,48 @@ static void filesys_addexternals(void)
     char volumepath[6];
     DWORD dwDriveMask;
 
-    if(currprefs.win32_automount_drives || currprefs.win32_automount_netdrives || currprefs.win32_automount_cddrives)
-    {
-       dwDriveMask = GetLogicalDrives();
-       dwDriveMask >>= 2; // Skip A and B drives...
+    dwDriveMask = GetLogicalDrives();
+    dwDriveMask >>= 2; // Skip A and B drives...
 
-       for(drive = 'C'; drive <= 'Z'; ++drive) {
-           sprintf(volumepath, "%c:\\", drive);
-           /* Is this drive-letter valid (it used to check for media in drive) */
-           if(dwDriveMask & 1) {
-               char devname[100];
-               BOOL inserted = CheckRM(volumepath); /* Is there a disk inserted? */
-               int nok = FALSE;
-               int rw = 1;
-               drivetype = GetDriveType(volumepath);
-               devname[0] = 0;
-               for (;;) {
-                   if (drivetype == DRIVE_CDROM && currprefs.win32_automount_cddrives) {
-                       sprintf (devname, "WinCD_%c", drive);
-                       rw = 0;
-                       break;
-                   }
-                   if (!inserted) {
-                       nok = TRUE;
-                       break;
-                   }
-                   if (drivetype == DRIVE_REMOTE && currprefs.win32_automount_netdrives)
-                       break;
-                   if ((drivetype == DRIVE_FIXED || drivetype == DRIVE_REMOVABLE) && currprefs.win32_automount_drives)
-                       break;
+    for(drive = 'C'; drive <= 'Z'; ++drive) {
+        sprintf(volumepath, "%c:\\", drive);
+        /* Is this drive-letter valid (it used to check for media in drive) */
+        if(dwDriveMask & 1) {
+           char devname[100];
+           BOOL inserted = CheckRM(volumepath); /* Is there a disk inserted? */
+           int nok = FALSE;
+           int rw = 1;
+           drivetype = GetDriveType(volumepath);
+           devname[0] = 0;
+           for (;;) {
+               if (drivetype == DRIVE_CDROM && currprefs.win32_automount_cddrives) {
+                   sprintf (devname, "WinCD_%c", drive);
+                   rw = 0;
+                   break;
+               }
+               if (!inserted) {
                    nok = TRUE;
                    break;
                }
-               if (nok)
-                   continue;
-               volumename[0] = 0;
-               if (inserted)
-                   target_get_volume_name(&mountinfo, volumepath, volumename, MAX_DPATH, inserted, 1);
-               if (drivetype == DRIVE_REMOTE)
-                   strcat(volumepath, ".");
-               else
-                   strcat(volumepath, "..");
-               add_filesys_unit (devname[0] ? devname : NULL, volumename, volumepath, !rw, 0, 0, 0, 0, -20, 0, 0, 0);
-           } /* if drivemask */
-           dwDriveMask >>= 1;
-       }
+               if (drivetype == DRIVE_REMOTE && currprefs.win32_automount_netdrives)
+                   break;
+               if ((drivetype == DRIVE_FIXED || drivetype == DRIVE_REMOVABLE) && currprefs.win32_automount_drives)
+                   break;
+               nok = TRUE;
+               break;
+           }
+           if (nok)
+               continue;
+           volumename[0] = 0;
+           if (inserted)
+               target_get_volume_name(&mountinfo, volumepath, volumename, MAX_DPATH, inserted, 1);
+           if (drivetype == DRIVE_REMOTE)
+               strcat(volumepath, ".");
+           else
+               strcat(volumepath, "..");
+           add_filesys_unit (devname[0] ? devname : NULL, volumename, volumepath, !rw, 0, 0, 0, 0, -20, 0, 0, 0);
+       } /* if drivemask */
+       dwDriveMask >>= 1;
     }
     SetErrorMode(errormode);
 }
index ac724aa72f502a6cd45e58900a9c92b6060d6e4e..18a515a929bc0436e4c94d45834c54e2584531d8 100755 (executable)
@@ -989,8 +989,10 @@ static void close_hwnds( void )
     AVIOutput_Restart ();
 #endif
     setmouseactive (0);
-    if (hMainWnd)
+    if (hMainWnd) {
+       addnotifications (hMainWnd, TRUE);
        systray (hMainWnd, TRUE);
+    }
     if (hStatusWnd) {
        ShowWindow (hStatusWnd, SW_HIDE);
        DestroyWindow (hStatusWnd);
@@ -1915,6 +1917,31 @@ static void createstatuswindow (void)
     }
 }
 
+#if 0
+#include <dbt.h>
+
+static int createnotification (HWND hwnd)
+{
+    DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
+    HDEVNOTIFY hDevNotify;
+
+    ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
+    NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
+    NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
+
+    hDevNotify = RegisterDeviceNotification(hMainWnd, 
+        &NotificationFilter, DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);
+
+    if(!hDevNotify) 
+    {
+        write_log ("RegisterDeviceNotification failed: %d\n", GetLastError());
+        return FALSE;
+    }
+
+    return TRUE;
+}
+#endif
+
 static int create_windows (void)
 {
     int dxfs = currentmode->flags & (DM_DX_FULLSCREEN | DM_D3D_FULLSCREEN);
@@ -2031,6 +2058,7 @@ static int create_windows (void)
     }
 
     systray (hMainWnd, FALSE);
+    addnotifications (hMainWnd, FALSE);
     if (hMainWnd != hAmigaWnd) {
        ShowWindow (hMainWnd, SW_SHOWNORMAL);
        UpdateWindow (hMainWnd);
index 90aa94cc9408ba31d7ddb1c400079f26462d78fe..20296667ed79d4a0c96ea197218421641d0fb4cf 100755 (executable)
@@ -115,7 +115,7 @@ extern char help_file[MAX_DPATH];
 
 extern int mouseactive;
 
-static char config_filename[MAX_DPATH] = "";
+char config_filename[MAX_DPATH] = "";
 
 #define Error(x) MessageBox(NULL, (x), "WinUAE Error", MB_OK)
 
@@ -1507,6 +1507,37 @@ static const char *nth[] = {
     "", "second ", "third ", "fourth ", "fifth ", "sixth ", "seventh ", "eighth ", "ninth ", "tenth "
 };
 
+static void setguititle (HWND phwnd)
+{
+    static char title[200];
+    char title2[1000];
+    char *name;
+    static HWND hwnd;
+
+    if (phwnd)
+       hwnd = phwnd;
+    if (!title[0]) {
+        GetWindowText (hwnd, title, sizeof (title));
+       if (WINUAEBETA > 0) {
+           strcat (title, BetaStr);
+           if (strlen(WINUAEEXTRA) > 0) {
+               strcat (title, " ");
+               strcat (title, WINUAEEXTRA);
+           }
+       }
+    }
+    title2[0] = 0;
+    name = config_filename;
+    if (name && strlen (name) > 0) {
+       strcat (title2, "[");
+       strcat (title2, name);
+       strcat (title2, "] - ");
+    }
+    strcat (title2, title);
+    SetWindowText (hwnd, title2);
+}
+
+
 static void GetConfigPath (char *path, struct ConfigStruct *parent, int noroot)
 {
     if (parent == 0) {
@@ -1670,6 +1701,7 @@ static char *HandleConfiguration (HWND hDlg, int flag, struct ConfigStruct *conf
 
     full_path[0] = 0;
     GetDlgItemText (hDlg, IDC_EDITNAME, name, MAX_DPATH);
+    strcpy (config_filename, name);
     if (flag == CONFIG_SAVE_FULL || flag == CONFIG_SAVE) {
        if (strlen (name) < 4 || strcasecmp (name + strlen (name) - 4, ".uae")) {
            strcat (name, ".uae");
@@ -1716,8 +1748,9 @@ static char *HandleConfiguration (HWND hDlg, int flag, struct ConfigStruct *conf
            } else {
                if (target_cfgfile_load (&workprefs, path, configtypepanel, 0) == 0) {
                    char szMessage[MAX_DPATH];
-                   WIN32GUI_LoadUIString( IDS_COULDNOTLOADCONFIG, szMessage, MAX_DPATH );
+                   WIN32GUI_LoadUIString (IDS_COULDNOTLOADCONFIG, szMessage, MAX_DPATH);
                    pre_gui_message (szMessage);
+                   config_filename[0] = 0;
                } else {
                    ew (hDlg, IDC_VIEWINFO, workprefs.info[0]);
                }
@@ -1731,18 +1764,20 @@ static char *HandleConfiguration (HWND hDlg, int flag, struct ConfigStruct *conf
                } else {
                    char szMessage[MAX_DPATH];
                    char szTitle[MAX_DPATH];
-                   WIN32GUI_LoadUIString( IDS_DELETECONFIGCONFIRMATION, szMessage, MAX_DPATH );
-                   WIN32GUI_LoadUIStringIDS_DELETECONFIGTITLE, szTitle, MAX_DPATH );
-                   if( MessageBox( hDlg, szMessage, szTitle,
-                       MB_YESNO | MB_ICONWARNING | MB_APPLMODAL | MB_SETFOREGROUND ) == IDYES ) {
+                   WIN32GUI_LoadUIString (IDS_DELETECONFIGCONFIRMATION, szMessage, MAX_DPATH);
+                   WIN32GUI_LoadUIString (IDS_DELETECONFIGTITLE, szTitle, MAX_DPATH );
+                   if (MessageBox (hDlg, szMessage, szTitle,
+                       MB_YESNO | MB_ICONWARNING | MB_APPLMODAL | MB_SETFOREGROUND) == IDYES) {
                        cfgfile_backup (path);
                        DeleteFile (path);
                        write_log ("deleted config '%s'\n", path);
+                       config_filename[0] = 0;
                    }
                }
            break;
        }
     }
+    setguititle (NULL);
     return full_path;
 }
 
@@ -2416,8 +2451,7 @@ 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);
+    EnableWindow (GetDlgItem (hDlg, IDC_VIEWINFO), workprefs.info[0]);
     SetDlgItemText (hDlg, IDC_EDITPATH, "");
     SetDlgItemText (hDlg, IDC_EDITDESCRIPTION, workprefs.description);
     root = InitializeConfigTreeView (hDlg);
@@ -3002,7 +3036,7 @@ static struct amigamodels amodels[] = {
     { 4, IDS_QS_MODEL_A1000 }, // "Amiga 1000"
     { 3, IDS_QS_MODEL_A1200 }, // "Amiga 1200"
     { 1, IDS_QS_MODEL_A3000 }, // "Amiga 3000"
-    { 0, }, //{ 1, IDS_QS_MODEL_A4000 }, // "Amiga 4000"
+    { 1, IDS_QS_MODEL_A4000 }, // "Amiga 4000"
     { 0, }, //{ 1, IDS_QS_MODEL_A4000T }, // "Amiga 4000T"
     { 3, IDS_QS_MODEL_CD32 }, // "CD32"
     { 4, IDS_QS_MODEL_CDTV }, // "CDTV"
@@ -3032,6 +3066,8 @@ static void load_quickstart (HWND hDlg, int romcheck)
     addfloppytype (hDlg, 0);
     addfloppytype (hDlg, 1);
     addfloppyhistory (hDlg);
+    config_filename[0] = 0;
+    setguititle (NULL);
 }
 
 static void quickstarthost (HWND hDlg, char *name)
@@ -6050,12 +6086,8 @@ static void sethardfile (HWND hDlg)
     SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_SETCURSEL, current_hfdlg.controller, 0);
 }
 
-static void inithardfile (HWND hDlg)
+static void inithdcontroller (HWND hDlg)
 {
-    char tmp[MAX_DPATH];
-
-    ew (hDlg, IDC_HF_DOSTYPE, FALSE);
-    ew (hDlg, IDC_HF_CREATE, FALSE);
     SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER, CB_RESETCONTENT, 0, 0);
     SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_ADDSTRING, 0, (LPARAM)"UAE");
     SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_ADDSTRING, 0, (LPARAM)"IDE0");
@@ -6070,6 +6102,15 @@ static void inithardfile (HWND hDlg)
     SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_ADDSTRING, 0, (LPARAM)"SCSI5");
     SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_ADDSTRING, 0, (LPARAM)"SCSI6");
     SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_SETCURSEL, 0, 0);
+}
+
+static void inithardfile (HWND hDlg)
+{
+    char tmp[MAX_DPATH];
+
+    ew (hDlg, IDC_HF_DOSTYPE, FALSE);
+    ew (hDlg, IDC_HF_CREATE, FALSE);
+    inithdcontroller (hDlg);
     SendDlgItemMessage(hDlg, IDC_HF_TYPE, CB_RESETCONTENT, 0, 0);
     WIN32GUI_LoadUIString (IDS_HF_FS_CUSTOM, tmp, sizeof (tmp));
     SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)"OFS/FFS/RDB");
@@ -6222,19 +6263,24 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara
        oposn = -1;
        hdf_init ();
        recursive++;
+       inithdcontroller (hDlg);
        CheckDlgButton (hDlg, IDC_RW, current_hfdlg.rw);
        SendDlgItemMessage(hDlg, IDC_HARDDRIVE, CB_RESETCONTENT, 0, 0);
+       SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_SETCURSEL, current_hfdlg.controller, 0);
        ew (hDlg, IDC_HARDDRIVE_IMAGE, FALSE);
        ew (hDlg, IDOK, FALSE);
        ew (hDlg, IDC_RW, FALSE);
+       ew (hDlg, IDC_HDF_CONTROLLER, FALSE);
        index = -1;
        for (i = 0; i < hdf_getnumharddrives(); i++) {
-           SendDlgItemMessage(hDlg, IDC_HARDDRIVE, CB_ADDSTRING, 0, (LPARAM)hdf_getnameharddrive(i, 1));
-           if (!strcmp (current_hfdlg.filename, hdf_getnameharddrive (i, 0)))
+           SendDlgItemMessage(hDlg, IDC_HARDDRIVE, CB_ADDSTRING, 0, (LPARAM)hdf_getnameharddrive(i, 1, NULL));
+           if (!strcmp (current_hfdlg.filename, hdf_getnameharddrive (i, 0, NULL)))
                index = i;
        }
-       if (index >= 0)
+       if (index >= 0) {
            SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_SETCURSEL, index, 0);
+           SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_SETCURSEL, current_hfdlg.controller, 0);
+       }
        recursive--;
        return TRUE;
 
@@ -6249,6 +6295,7 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara
                ew (hDlg, IDC_HARDDRIVE_IMAGE, TRUE);
                ew (hDlg, IDOK, TRUE);
                ew (hDlg, IDC_RW, TRUE);
+               ew (hDlg, IDC_HDF_CONTROLLER, TRUE);
            }
        }
        if (HIWORD (wParam) == BN_CLICKED) {
@@ -6266,8 +6313,11 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara
            }
        }
        if (posn != CB_ERR)
-           strcpy (current_hfdlg.filename, hdf_getnameharddrive ((int)posn, 0));
+           strcpy (current_hfdlg.filename, hdf_getnameharddrive ((int)posn, 0, &current_hfdlg.blocksize));
        current_hfdlg.rw = IsDlgButtonChecked (hDlg, IDC_RW);
+       posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_GETCURSEL, 0, 0);
+       if (posn != CB_ERR)
+           current_hfdlg.controller = posn;
        recursive--;
        break;
     }
@@ -6460,6 +6510,10 @@ static void harddiskdlg_button (HWND hDlg, int button)
        clicked_entry++;
        break;
 
+     case IDC_MAPDRIVES_AUTO:
+       workprefs.win32_automount_removable = IsDlgButtonChecked(hDlg, IDC_MAPDRIVES_AUTO);
+       break;
+
      case IDC_MAPDRIVES:
        workprefs.win32_automount_drives = IsDlgButtonChecked(hDlg, IDC_MAPDRIVES);
        break;
@@ -6533,6 +6587,7 @@ static INT_PTR CALLBACK HarddiskDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPA
        EnableWindow (GetDlgItem(hDlg, IDC_NEW_HD), os_winnt && os_winnt_admin > 1 ? TRUE : FALSE);
 
     case WM_USER:
+       CheckDlgButton (hDlg, IDC_MAPDRIVES_AUTO, workprefs.win32_automount_removable);
        CheckDlgButton (hDlg, IDC_MAPDRIVES, workprefs.win32_automount_drives);
        CheckDlgButton (hDlg, IDC_MAPDRIVES_CD, workprefs.win32_automount_cddrives);
        CheckDlgButton (hDlg, IDC_MAPDRIVES_NET, workprefs.win32_automount_netdrives);
@@ -10007,16 +10062,8 @@ static int GetSettings (int all_options, HWND hwnd)
     if (dhwnd != NULL) {
        MSG msg;
        DWORD v;
-       char tmp[MAX_DPATH];
 
-       if (WINUAEBETA > 0 && GetWindowText (dhwnd, tmp, sizeof (tmp)) > 0) {
-           strcat (tmp, BetaStr);
-           if (strlen(WINUAEEXTRA) > 0) {
-               strcat (tmp, " ");
-               strcat (tmp, WINUAEEXTRA);
-           }
-           SetWindowText (dhwnd, tmp);
-       }
+       setguititle (dhwnd);
        ShowWindow (dhwnd, SW_SHOW);
        MapDialogRect(dhwnd, &dialog_rect);
 
index 320f7beb3212c0b8aecdc850ba181077238f026f..b6744129f6c82d8bddd33d956386788d7d377f50 100755 (executable)
@@ -1,4 +1,26 @@
 
+
+Beta 5:
+
+- "Add Harddrive" button was disabled on Windows 2000 ("full
+  administrator" test used function that was Windows XP+ only)
+- improved directory filesystem Windows-side media change detection,
+  detects now memory cards in card readers (stupid Windows having
+  multiple completely different ways to get media notifications)
+- added GUI "Add Harddrive" emulated HD controller selection
+- directory filesystem read+write/readonly on the fly status change
+  fixed
+- device node is now removed when removable drive gets ejected and if
+  drive was originally created on the fly. Note: device node is only
+  hidden (removed from dos list) and it will be reused later when new
+  disk is inserted. No KS 1.3 support yet.
+- added GUI option to enable/disable on the fly automounting
+- current configuration name added to window title bar
+- added two A4000 quickstart configurations (68030/68882 and 68040)
+- better CD32 audio end detection accuracy, last 1s was cut previously
+- ["bsdsocket breaks after reset if it was initialized before reset"
+  will be fixed soon]
+
 Beta 4:
 
 - ACTION_EXAMINE_ALL_END implemented (forgot in b2..)
@@ -7,8 +29,7 @@ Beta 4:
   "empty slot" drives removed. USB memory sticks etc will always
   mount on the fly automagically now. (if uae boot rom is available)
   Device node ("RDHx") is never removed. My black magic skill level
-  is not high enough yet.
-  hardfiles next..
+  is not high enough yet. Hardfile on the fly automount next..
 - enable uae boot rom if chip ram > 2M enabled (KS does not
   detect more than 2MB of chip, the rest is mapped by boot rom)
 - 68040/060 FPU was always interpreted (no JIT) (b1)