From df8b05a2f8ae1d07eadfa3a06088502ed93dad72 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 8 Sep 2007 13:28:52 +0300 Subject: [PATCH] imported winuaesrc1440b5.zip --- a2091.c | 2 +- akiko.c | 24 ++- cfgfile.c | 17 +- filesys.c | 23 ++- filesys_bootrom.c | 330 +++++++++++++++++----------------- hardfile.c | 23 ++- include/filesys.h | 3 +- include/options.h | 1 + newcpu.c | 2 + od-win32/bsdsock.c | 96 ++++++---- od-win32/hardfile_win32.c | 4 +- od-win32/resources/resource | 1 + od-win32/resources/resource.h | 1 + od-win32/resources/winuae.rc | 20 ++- od-win32/win32.c | 133 +++++++++++--- od-win32/win32.h | 6 +- od-win32/win32_filesys.c | 81 ++++----- od-win32/win32gfx.c | 30 +++- od-win32/win32gui.c | 101 ++++++++--- od-win32/winuaechangelog.txt | 25 ++- 20 files changed, 593 insertions(+), 330 deletions(-) diff --git a/a2091.c b/a2091.c index b3da2ce5..f1258df4 100755 --- 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 c982494a..0c6c676f 100755 --- 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"); } } } diff --git a/cfgfile.c b/cfgfile.c index e3209f87..778a9092 100755 --- 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; diff --git a/filesys.c b/filesys.c index 4b7c03e2..e3b941a7 100755 --- 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) { diff --git a/filesys_bootrom.c b/filesys_bootrom.c index d70efff7..bba76f94 100755 --- a/filesys_bootrom.c +++ b/filesys_bootrom.c @@ -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); @@ -63,12 +63,12 @@ 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); @@ -118,158 +118,162 @@ 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); @@ -277,15 +281,15 @@ 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); @@ -314,8 +318,8 @@ 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); @@ -329,7 +333,7 @@ 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); diff --git a/hardfile.c b/hardfile.c index 910ffc71..e4a8358d 100755 --- a/hardfile.c +++ b/hardfile.c @@ -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) diff --git a/include/filesys.h b/include/filesys.h index 31b67f66..9330b8e7 100755 --- a/include/filesys.h +++ b/include/filesys.h @@ -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, diff --git a/include/options.h b/include/options.h index 2b15f014..7272aa25 100755 --- a/include/options.h +++ b/include/options.h @@ -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; diff --git a/newcpu.c b/newcpu.c index 9ae2a272..561b5e64 100755 --- 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; diff --git a/od-win32/bsdsock.c b/od-win32/bsdsock.c index 0f133977..2d0babee 100755 --- a/od-win32/bsdsock.c +++ b/od-win32/bsdsock.c @@ -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); } } } diff --git a/od-win32/hardfile_win32.c b/od-win32/hardfile_win32.c index c3e3ac6c..f4fa6ac3 100755 --- a/od-win32/hardfile_win32.c +++ b/od-win32/hardfile_win32.c @@ -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); diff --git a/od-win32/resources/resource b/od-win32/resources/resource index ebfbef1b..10e69b61 100755 --- a/od-win32/resources/resource +++ b/od-win32/resources/resource @@ -539,6 +539,7 @@ #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 diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index ebfbef1b..10e69b61 100755 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -539,6 +539,7 @@ #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 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 7fa51d4c..8cc71b97 100755 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -7,8 +7,7 @@ // // Generated from the TEXTINCLUDE 2 resource. // -#include "afxres.h" - +#include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS @@ -256,6 +255,7 @@ BEGIN CONTROL "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,220,121,10 CONTROL "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,232,101,10 CONTROL "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,220,100,10 + CONTROL "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,232,115,10 END IDD_SOUND DIALOGEX 0, 0, 300, 231 @@ -678,13 +678,15 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | CAPTION "Harddrive Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - LTEXT "Hard drive:",-1,7,11,35,10 + LTEXT "Hard drive:",IDC_STATIC,7,11,35,10 COMBOBOX IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - CONTROL "Read/write",IDC_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,247,33,55,10 - DEFPUSHBUTTON "Add hard drive",IDOK,173,30,65,14 - PUSHBUTTON "Cancel",IDCANCEL,321,30,54,14 + CONTROL "Read/write",IDC_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10 + DEFPUSHBUTTON "Add hard drive",IDOK,231,48,65,14 + PUSHBUTTON "Cancel",IDCANCEL,319,48,54,14 DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14 - EDITTEXT IDC_PATH_NAME,89,49,169,15,ES_AUTOHSCROLL | NOT WS_VISIBLE + EDITTEXT IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE + COMBOBOX IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + RTEXT "HD Controller:",IDC_STATIC,42,52,52,10,SS_CENTERIMAGE END IDD_MISC2 DIALOGEX 0, 0, 300, 92 @@ -1256,7 +1258,7 @@ END STRINGTABLE BEGIN - IDS_QS_MODELS "A500\nA500+\nA600\nA1000\nA1200\nA3000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration" + IDS_QS_MODELS "A500\nA500+\nA600\nA1000\nA1200\nA3000\nA4000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration" IDS_QS_MODEL_A500 "1.3 ROM, OCS, 512 KB Chip + 512 KB Slow RAM (most common)\nThis configuration is capable of running most games and demos produced for first-generation hardware. Only few exceptions need a different configuration (e.g. the oldest games tend to be incompatible with this configuration).\n1.3 ROM, ECS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nLater hardware revision of the A500. Nearly 100% compatible with the previous configuration.\n1.3 ROM, ECS Agnus, 1 MB Chip RAM\nFew newer games and demos require this configuration.\n1.3 ROM, OCS Agnus, 512 KB Chip RAM\nVery old (e.g. pre-1988) games and demos may require this configuration.\n1.2 ROM, OCS Agnus, 512 KB Chip RAM\nAs available for the A1000, and installed on the first A500 and A2000 series. Some very old programs only work correctly with this configuration. Note: This system ROM version can only boot from floppy disk (no hard disk boot support).\n1.2 ROM, OCS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nThis configuration adds expansion memory to the first A500 produced. Try this if your game does not work with newer configurations, but works with the previous one. It could add some features to the game, including faster loading times. Note: This system ROM version can only boot from floppy disk (no hard disk boot support)." IDS_QS_MODEL_A500P "Basic non-expanded configuration\nThe A500+ adds an ECS Agnus chip, 1 MB of Chip RAM and a 2.0 ROM to the A500. Many A500 games and demos don't work properly on an A500+.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n" IDS_QS_MODEL_A600 "Basic non-expanded configuration\nThe A600 is smaller than the A500+ and has an updated 2.0 ROM.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n" @@ -1271,7 +1273,7 @@ BEGIN IDS_QS_MODEL_UAE "High-end expanded configuration" IDS_QS_MODEL_ARCADIA "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel." IDS_QS_MODEL_A3000 "1.4 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n" - IDS_QS_MODEL_A4000 "A4000 (test)\nA4000" + IDS_QS_MODEL_A4000 "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n" IDS_QS_MODEL_A4000T "A4000T (test)\nA4000T" END diff --git a/od-win32/win32.c b/od-win32/win32.c index a724b3ba..e10c8df5 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -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); } diff --git a/od-win32/win32.h b/od-win32/win32.h index 46ed389d..8fac5208 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -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); diff --git a/od-win32/win32_filesys.c b/od-win32/win32_filesys.c index dd7fddd7..4ce232ee 100755 --- a/od-win32/win32_filesys.c +++ b/od-win32/win32_filesys.c @@ -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); } diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index ac724aa7..18a515a9 100755 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -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 + +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); diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index 90aa94cc..20296667 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -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_LoadUIString( IDS_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, ¤t_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); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 320f7beb..b6744129 100755 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -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) -- 2.47.3